ERC-721
Overview
Max Total Supply
30 Official Jokers club
Holders
273
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 Official Jokers clubLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OfficialJokersClub
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @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); } /** * @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; } } /** * @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); } } /** * @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; } } /** * @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); } } } } /** * @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; } /** * @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); } /** * @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); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //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 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 {} } interface IGGold { function balanceOf(address owner) external view returns (uint); function burn(address account, uint amount) external; } interface ITreasureIsland { function randomPirateOwner() external returns (address); function addTokensToStake(address account, uint16[] calldata tokenIds) external; } contract OfficialJokersClub is ERC721, Ownable { uint public MAX_TOKENS = 6000; uint constant public MINT_PER_TX_LIMIT = 10; uint public tokensMinted = 0; uint16 public phase = 1; uint16 public pirateStolen = 0; uint16 public goldMinerStolen = 0; uint16 public pirateMinted = 0; bool private _paused = true; mapping(uint16 => uint) public phasePrice; ITreasureIsland public treasureIsland; IGGold public gold; string private _apiURI = "https://api.official-jokers-club.com/token/"; mapping(uint16 => bool) private _isPirate; uint16[] private _availableTokens; uint16 private _randomIndex = 0; uint private _randomCalls = 0; mapping(uint16 => address) private _randomSource; event TokenStolen(address owner, uint16 tokenId, address thief); constructor() ERC721("Official Jokers club", "Official Jokers club") { _safeMint(msg.sender, 0); tokensMinted += 1; // Phase 1 is available in the beginning switchToSalePhase(1, true); // Set default price for each phase phasePrice[1] = 0.06 ether; phasePrice[2] = 20000 ether; phasePrice[3] = 40000 ether; phasePrice[4] = 80000 ether; // Fill random source addresses _randomSource[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; _randomSource[1] = 0x3cD751E6b0078Be393132286c442345e5DC49699; _randomSource[2] = 0xb5d85CBf7cB3EE0D56b3bB207D5Fc4B82f43F511; _randomSource[3] = 0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94; _randomSource[4] = 0x28C6c06298d514Db089934071355E5743bf21d60; _randomSource[5] = 0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2; _randomSource[6] = 0x267be1C1D684F78cb4F6a176C4911b741E4Ffdc0; } function paused() public view virtual returns (bool) { return _paused; } modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } function setPaused(bool _state) external onlyOwner { _paused = _state; } function addAvailableTokens(uint16 _from, uint16 _to) public onlyOwner { internalAddTokens(_from, _to); } function internalAddTokens(uint16 _from, uint16 _to) internal { for (uint16 i = _from; i <= _to; i++) { _availableTokens.push(i); } } function switchToSalePhase(uint16 _phase, bool _setTokens) public onlyOwner { phase = _phase; if (!_setTokens) { return; } if (phase == 1) { internalAddTokens(1, 6000); } else if (phase == 2) { //internalAddTokens(10000, 20000); } else if (phase == 3) { //internalAddTokens(20001, 40000); } else if (phase == 4) { //internalAddTokens(40001, 6000); } } function giveAway(uint _amount, address _address) public onlyOwner { require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted"); require(_availableTokens.length > 0, "All tokens for this Phase are already sold"); for (uint i = 0; i < _amount; i++) { uint16 tokenId = getTokenToBeMinted(); _safeMint(_address, tokenId); } } function mint(uint _amount, bool _stake) public payable whenNotPaused { require(tx.origin == msg.sender, "Only EOA"); require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted"); require(_amount > 0 && _amount <= MINT_PER_TX_LIMIT, "Invalid mint amount"); require(_availableTokens.length > 0, "All tokens for this Phase are already sold"); uint totalPennyCost = 0; if (phase == 1) { // Paid mint require(mintPrice(_amount) == msg.value, "Invalid payment amount"); } else { // Mint via Penny token burn require(msg.value == 0, "Now minting is done via Penny"); totalPennyCost = mintPrice(_amount); require(gold.balanceOf(msg.sender) >= totalPennyCost, "Not enough Penny"); } if (totalPennyCost > 0) { gold.burn(msg.sender, totalPennyCost); } tokensMinted += _amount; uint16[] memory tokenIds = _stake ? new uint16[](_amount) : new uint16[](0); for (uint i = 0; i < _amount; i++) { address recipient = msg.sender; if (phase != 1) { updateRandomIndex(); } uint16 tokenId = getTokenToBeMinted(); if (isPirate(tokenId)) { pirateMinted += 1; } // if (recipient != msg.sender) { // isPirate(tokenId) ? pirateStolen += 1 : goldMinerStolen += 1; // emit TokenStolen(msg.sender, tokenId, recipient); // } if (!_stake) { _safeMint(recipient, tokenId); } else { _safeMint(address(treasureIsland), tokenId); tokenIds[i] = tokenId; } } if (_stake) { treasureIsland.addTokensToStake(msg.sender, tokenIds); } } function mintPrice(uint _amount) public view returns (uint) { return _amount * phasePrice[phase]; } function isPirate(uint16 id) public view returns (bool) { return _isPirate[id]; } function getTokenToBeMinted() private returns (uint16) { uint random = getSomeRandomNumber(_availableTokens.length, _availableTokens.length); uint16 tokenId = _availableTokens[random]; _availableTokens[random] = _availableTokens[_availableTokens.length - 1]; _availableTokens.pop(); return tokenId; } function updateRandomIndex() internal { _randomIndex += 1; _randomCalls += 1; if (_randomIndex > 6) _randomIndex = 0; } function getSomeRandomNumber(uint _seed, uint _limit) internal view returns (uint16) { uint extra = 0; for (uint16 i = 0; i < 7; i++) { extra += _randomSource[_randomIndex].balance; } uint random = uint( keccak256( abi.encodePacked( _seed, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender, tokensMinted, extra, _randomCalls, _randomIndex ) ) ); return uint16(random % _limit); } function shuffleSeeds(uint _seed, uint _max) external onlyOwner { uint shuffleCount = getSomeRandomNumber(_seed, _max); _randomIndex = uint16(shuffleCount); for (uint i = 0; i < shuffleCount; i++) { updateRandomIndex(); } } function setPirateId(uint16 id, bool special) external onlyOwner { _isPirate[id] = special; } function setPirateIds(uint16[] calldata ids) external onlyOwner { for (uint i = 0; i < ids.length; i++) { _isPirate[ids[i]] = true; } } function setTreasureIsland(address _island) external onlyOwner { treasureIsland = ITreasureIsland(_island); } function setGold(address _gold) external onlyOwner { gold = IGGold(_gold); } function changePhasePrice(uint16 _phase, uint _weiPrice) external onlyOwner { phasePrice[_phase] = _weiPrice; } function transferFrom(address from, address to, uint tokenId) public virtual override { // Hardcode the Manager's approval so that users don't have to waste gas approving if (_msgSender() != address(treasureIsland)) require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function totalSupply() external view returns (uint) { return tokensMinted; } function _baseURI() internal view override returns (string memory) { return _apiURI; } function setBaseURI(string memory uri) external onlyOwner { _apiURI = uri; } function changeRandomSource(uint16 _id, address _address) external onlyOwner { _randomSource[_id] = _address; } function withdraw(address to) external onlyOwner { uint balance = address(this).balance; payable(to).transfer(balance); } }
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":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"address","name":"thief","type":"address"}],"name":"TokenStolen","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_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_TX_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_from","type":"uint16"},{"internalType":"uint16","name":"_to","type":"uint16"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"uint256","name":"_weiPrice","type":"uint256"}],"name":"changePhasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gold","outputs":[{"internalType":"contract IGGold","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldMinerStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"isPirate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"phasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gold","type":"address"}],"name":"setGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"bool","name":"special","type":"bool"}],"name":"setPirateId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"setPirateIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_island","type":"address"}],"name":"setTreasureIsland","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"shuffleSeeds","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":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"bool","name":"_setTokens","type":"bool"}],"name":"switchToSalePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasureIsland","outputs":[{"internalType":"contract ITreasureIsland","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405261177060075560006008556001600960006101000a81548161ffff021916908361ffff1602179055506000600960026101000a81548161ffff021916908361ffff1602179055506000600960046101000a81548161ffff021916908361ffff1602179055506000600960066101000a81548161ffff021916908361ffff1602179055506001600960086101000a81548160ff0219169083151502179055506040518060600160405280602b8152602001620067ae602b9139600d9080519060200190620000d392919062000cff565b506000601060006101000a81548161ffff021916908361ffff16021790555060006011553480156200010457600080fd5b506040518060400160405280601481526020017f4f6666696369616c204a6f6b65727320636c75620000000000000000000000008152506040518060400160405280601481526020017f4f6666696369616c204a6f6b65727320636c756200000000000000000000000081525081600090805190602001906200018992919062000cff565b508060019080519060200190620001a292919062000cff565b505050620001c5620001b96200059260201b60201c565b6200059a60201b60201c565b620001d83360006200066060201b60201c565b600160086000828254620001ed919062000de8565b92505081905550620002076001806200068660201b60201c565b66d529ae9e860000600a6000600161ffff1681526020019081526020016000208190555069043c33c1937564800000600a6000600261ffff16815260200190815260200160002081905550690878678326eac9000000600a6000600361ffff168152602001908152602001600020819055506910f0cf064dd592000000600a6000600461ffff1681526020019081526020016000208190555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2601260008061ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733cd751e6b0078be393132286c442345e5dc4969960126000600161ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f51160126000600261ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c098b2a3aa256d2140208c3de6543aaef5cd3a9460126000600361ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507328c6c06298d514db089934071355e5743bf21d6060126000600461ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732faf487a4414fe77e2327f0bf4ae2a264a776ad260126000600561ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073267be1c1d684f78cb4f6a176c4911b741e4ffdc060126000600661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620012c9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000682828260405180602001604052806000815250620007d860201b60201c565b5050565b620006966200059260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006bc6200084660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070c9062000ea6565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff160217905550806200073e57620007d4565b6001600960009054906101000a900461ffff1661ffff16141562000777576200077160016117706200087060201b60201c565b620007d3565b6002600960009054906101000a900461ffff1661ffff1614156200079b57620007d2565b6003600960009054906101000a900461ffff1661ffff161415620007bf57620007d1565b6004600960009054906101000a905050505b5b5b5b5050565b620007ea8383620008eb60201b60201c565b620007ff600084848462000ad160201b60201c565b62000841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008389062000f3e565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008290505b8161ffff168161ffff1611620008e657600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080620008dd9062000f6e565b91505062000876565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200095e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009559062000fee565b60405180910390fd5b6200096f8162000c7b60201b60201c565b15620009b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a99062001060565b60405180910390fd5b620009c66000838362000ce760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a18919062000de8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000aff8473ffffffffffffffffffffffffffffffffffffffff1662000cec60201b620026fa1760201c565b1562000c6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b316200059260201b60201c565b8786866040518563ffffffff1660e01b815260040162000b5594939291906200117c565b6020604051808303816000875af192505050801562000b9457506040513d601f19601f8201168201806040525081019062000b91919062001232565b60015b62000c1d573d806000811462000bc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000bcc565b606091505b5060008151141562000c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0c9062000f3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000c73565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b82805462000d0d9062001293565b90600052602060002090601f01602090048101928262000d31576000855562000d7d565b82601f1062000d4c57805160ff191683800117855562000d7d565b8280016001018555821562000d7d579182015b8281111562000d7c57825182559160200191906001019062000d5f565b5b50905062000d8c919062000d90565b5090565b5b8082111562000dab57600081600090555060010162000d91565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000df58262000daf565b915062000e028362000daf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e3a5762000e3962000db9565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e8e60208362000e45565b915062000e9b8262000e56565b602082019050919050565b6000602082019050818103600083015262000ec18162000e7f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000f2660328362000e45565b915062000f338262000ec8565b604082019050919050565b6000602082019050818103600083015262000f598162000f17565b9050919050565b600061ffff82169050919050565b600062000f7b8262000f60565b915061ffff82141562000f935762000f9262000db9565b5b600182019050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062000fd660208362000e45565b915062000fe38262000f9e565b602082019050919050565b60006020820190508181036000830152620010098162000fc7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001048601c8362000e45565b9150620010558262001010565b602082019050919050565b600060208201905081810360008301526200107b8162001039565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010af8262001082565b9050919050565b620010c181620010a2565b82525050565b620010d28162000daf565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562001114578082015181840152602081019050620010f7565b8381111562001124576000848401525b50505050565b6000601f19601f8301169050919050565b60006200114882620010d8565b620011548185620010e3565b935062001166818560208601620010f4565b62001171816200112a565b840191505092915050565b6000608082019050620011936000830187620010b6565b620011a26020830186620010b6565b620011b16040830185620010c7565b8181036060830152620011c581846200113b565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200120c81620011d5565b81146200121857600080fd5b50565b6000815190506200122c8162001201565b92915050565b6000602082840312156200124b576200124a620011d0565b5b60006200125b848285016200121b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012ac57607f821691505b60208210811415620012c357620012c262001264565b5b50919050565b6154d580620012d96000396000f3fe6080604052600436106102675760003560e01c80636de9f32b11610144578063b488b636116100b6578063e6a72acf1161007a578063e6a72acf14610907578063e985e9c514610944578063efb3d00814610981578063f2fde38b146109aa578063f47c84c5146109d3578063fbec6f21146109fe57610267565b8063b488b6361461080e578063b88d4fde14610839578063c87b56dd14610862578063c9150a9e1461089f578063cb7e93d2146108dc57610267565b806386b854c81161010857806386b854c8146107125780638da5cb5b1461073b57806392b242291461076657806395d89b411461078f578063a22cb465146107ba578063b1c9fe6e146107e357610267565b80636de9f32b14610641578063703731731461066c57806370a0823114610695578063715018a6146106d25780637e603d42146106e957610267565b80632c12395b116101dd5780634efc09f5116101a15780634efc09f51461054257806351cff8d91461056b57806355f804b3146105945780635c975abb146105bd5780636352211e146105e857806367f68fac1461062557610267565b80632c12395b1461045d5780633d4729371461049a57806340ce8d8a146104c357806342842e0e146104ee57806345d510071461051757610267565b806316c38b3c1161022f57806316c38b3c1461036357806318160ddd1461038c5780631adbc550146103b757806323b872dd146103e0578063261d3b2114610409578063268e00a31461043257610267565b806301ffc9a71461026c5780630520b708146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061371c565b610a29565b6040516102a09190613764565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb91906137dd565b610b0b565b005b3480156102de57600080fd5b506102e7610bcb565b6040516102f491906138a3565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f91906138fb565b610c5d565b6040516103319190613937565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613952565b610ce2565b005b34801561036f57600080fd5b5061038a600480360381019061038591906139be565b610dfa565b005b34801561039857600080fd5b506103a1610e93565b6040516103ae91906139fa565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613a4f565b610e9d565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613a8f565b610f50565b005b34801561041557600080fd5b50610430600480360381019061042b9190613ae2565b61100d565b005b34801561043e57600080fd5b50610447611161565b6040516104549190613b31565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b4c565b611175565b6040516104919190613764565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613a4f565b6111a7565b005b3480156104cf57600080fd5b506104d86112d6565b6040516104e59190613bd8565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a8f565b6112fc565b005b34801561052357600080fd5b5061052c61131c565b60405161053991906139fa565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190613bf3565b611321565b005b34801561057757600080fd5b50610592600480360381019061058d91906137dd565b6113c1565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613d68565b61148d565b005b3480156105c957600080fd5b506105d2611523565b6040516105df9190613764565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906138fb565b61153a565b60405161061c9190613937565b60405180910390f35b61063f600480360381019061063a9190613db1565b6115ec565b005b34801561064d57600080fd5b50610656611c2a565b60405161066391906139fa565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613e51565b611c30565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906137dd565b611d2d565b6040516106c991906139fa565b60405180910390f35b3480156106de57600080fd5b506106e7611de5565b005b3480156106f557600080fd5b50610710600480360381019061070b91906137dd565b611e6d565b005b34801561071e57600080fd5b5061073960048036038101906107349190613e9e565b611f2d565b005b34801561074757600080fd5b50610750612007565b60405161075d9190613937565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613ede565b612031565b005b34801561079b57600080fd5b506107a4612108565b6040516107b191906138a3565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613f1e565b61219a565b005b3480156107ef57600080fd5b506107f861231b565b6040516108059190613b31565b60405180910390f35b34801561081a57600080fd5b5061082361232f565b6040516108309190613b31565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613fff565b612343565b005b34801561086e57600080fd5b50610889600480360381019061088491906138fb565b6123a5565b60405161089691906138a3565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613b4c565b61244c565b6040516108d391906139fa565b60405180910390f35b3480156108e857600080fd5b506108f1612464565b6040516108fe9190613b31565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906138fb565b612478565b60405161093b91906139fa565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614082565b6124b8565b6040516109789190613764565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a391906140c2565b61254c565b005b3480156109b657600080fd5b506109d160048036038101906109cc91906137dd565b6125d6565b005b3480156109df57600080fd5b506109e86126ce565b6040516109f591906139fa565b60405180910390f35b348015610a0a57600080fd5b50610a136126d4565b604051610a209190614123565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b038261270d565b5b9050919050565b610b13612777565b73ffffffffffffffffffffffffffffffffffffffff16610b31612007565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e9061418a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610bda906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c06906141d9565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c688261277f565b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e9061427d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ced8261153a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d559061430f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7d612777565b73ffffffffffffffffffffffffffffffffffffffff161480610dac5750610dab81610da6612777565b6124b8565b5b610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906143a1565b60405180910390fd5b610df583836127eb565b505050565b610e02612777565b73ffffffffffffffffffffffffffffffffffffffff16610e20612007565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d9061418a565b60405180910390fd5b80600960086101000a81548160ff02191690831515021790555050565b6000600854905090565b610ea5612777565b73ffffffffffffffffffffffffffffffffffffffff16610ec3612007565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f109061418a565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f91612777565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd57610fbd610fb7612777565b826128a4565b610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614433565b60405180910390fd5b5b611008838383612982565b505050565b611015612777565b73ffffffffffffffffffffffffffffffffffffffff16611033612007565b73ffffffffffffffffffffffffffffffffffffffff1614611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061418a565b60405180910390fd5b6007548260085461109a9190614482565b11156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614524565b60405180910390fd5b6000600f8054905011611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906145b6565b60405180910390fd5b60005b8281101561115c576000611138612bde565b9050611148838261ffff16612d0b565b508080611154906145d6565b915050611126565b505050565b600960049054906101000a900461ffff1681565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111af612777565b73ffffffffffffffffffffffffffffffffffffffff166111cd612007565b73ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a9061418a565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff1602179055508061124a576112d2565b6001600960009054906101000a900461ffff1661ffff161415611279576112746001611770612d29565b6112d1565b6002600960009054906101000a900461ffff1661ffff16141561129b576112d0565b6003600960009054906101000a900461ffff1661ffff1614156112bd576112cf565b6004600960009054906101000a905050505b5b5b5b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131783838360405180602001604052806000815250612343565b505050565b600a81565b611329612777565b73ffffffffffffffffffffffffffffffffffffffff16611347612007565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061418a565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113c9612777565b73ffffffffffffffffffffffffffffffffffffffff166113e7612007565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114349061418a565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611488573d6000803e3d6000fd5b505050565b611495612777565b73ffffffffffffffffffffffffffffffffffffffff166114b3612007565b73ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061418a565b60405180910390fd5b80600d908051906020019061151f92919061360d565b5050565b6000600960089054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90614691565b60405180910390fd5b80915050919050565b6115f4611523565b15611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b906146fd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146116a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169990614769565b60405180910390fd5b600754826008546116b39190614482565b11156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90614524565b60405180910390fd5b6000821180156117055750600a8211155b611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906147d5565b60405180910390fd5b6000600f805490501161178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906145b6565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff1614156117fa57346117b584612478565b146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614841565b60405180910390fd5b611927565b6000341461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906148ad565b60405180910390fd5b61184683612478565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118a49190613937565b602060405180830381865afa1580156118c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e591906148e2565b1015611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d9061495b565b60405180910390fd5b5b60008111156119c057600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b815260040161198d92919061497b565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b505050505b82600860008282546119d29190614482565b92505081905550600082611a2f57600067ffffffffffffffff8111156119fb576119fa613c3d565b5b604051908082528060200260200182016040528015611a295781602001602082028036833780820191505090505b50611a79565b8367ffffffffffffffff811115611a4957611a48613c3d565b5b604051908082528060200260200182016040528015611a775781602001602082028036833780820191505090505b505b905060005b84811015611b8d5760003390506001600960009054906101000a900461ffff1661ffff1614611ab057611aaf612da0565b5b6000611aba612bde565b9050611ac581611175565b15611b05576001600960068282829054906101000a900461ffff16611aea91906149a4565b92506101000a81548161ffff021916908361ffff1602179055505b85611b1d57611b18828261ffff16612d0b565b611b78565b611b4d600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16612d0b565b80848481518110611b6157611b606149dc565b5b602002602001019061ffff16908161ffff16815250505b50508080611b85906145d6565b915050611a7e565b508215611c2457600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611bf1929190614ac9565b600060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050505b50505050565b60085481565b611c38612777565b73ffffffffffffffffffffffffffffffffffffffff16611c56612007565b73ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061418a565b60405180910390fd5b60005b82829050811015611d28576001600e6000858585818110611cd357611cd26149dc565b5b9050602002016020810190611ce89190613b4c565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d20906145d6565b915050611caf565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614b6b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ded612777565b73ffffffffffffffffffffffffffffffffffffffff16611e0b612007565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061418a565b60405180910390fd5b611e6b6000612e32565b565b611e75612777565b73ffffffffffffffffffffffffffffffffffffffff16611e93612007565b73ffffffffffffffffffffffffffffffffffffffff1614611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061418a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f35612777565b73ffffffffffffffffffffffffffffffffffffffff16611f53612007565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa09061418a565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612039612777565b73ffffffffffffffffffffffffffffffffffffffff16612057612007565b73ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a49061418a565b60405180910390fd5b60006120b98383612ef8565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b81811015612102576120ef612da0565b80806120fa906145d6565b9150506120df565b50505050565b606060018054612117906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054612143906141d9565b80156121905780601f1061216557610100808354040283529160200191612190565b820191906000526020600020905b81548152906001019060200180831161217357829003601f168201915b5050505050905090565b6121a2612777565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220790614bd7565b60405180910390fd5b806005600061221d612777565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122ca612777565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230f9190613764565b60405180910390a35050565b600960009054906101000a900461ffff1681565b600960069054906101000a900461ffff1681565b61235461234e612777565b836128a4565b612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90614433565b60405180910390fd5b61239f84848484613008565b50505050565b60606123b08261277f565b6123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614c69565b60405180910390fd5b60006123f9613064565b905060008151116124195760405180602001604052806000815250612444565b80612423846130f6565b604051602001612434929190614cc5565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b600960029054906101000a900461ffff1681565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826124b19190614ce9565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612554612777565b73ffffffffffffffffffffffffffffffffffffffff16612572612007565b73ffffffffffffffffffffffffffffffffffffffff16146125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061418a565b60405180910390fd5b6125d28282612d29565b5050565b6125de612777565b73ffffffffffffffffffffffffffffffffffffffff166125fc612007565b73ffffffffffffffffffffffffffffffffffffffff1614612652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126499061418a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990614db5565b60405180910390fd5b6126cb81612e32565b50565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661285e8361153a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128af8261277f565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614e47565b60405180910390fd5b60006128f98361153a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296857508373ffffffffffffffffffffffffffffffffffffffff1661295084610c5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612979575061297881856124b8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129a28261153a565b73ffffffffffffffffffffffffffffffffffffffff16146129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef90614ed9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f90614f6b565b60405180910390fd5b612a73838383613257565b612a7e6000826127eb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ace9190614f8b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b259190614482565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612bf5600f80549050600f80549050612ef8565b61ffff1690506000600f8281548110612c1157612c106149dc565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f80549050612c4b9190614f8b565b81548110612c5c57612c5b6149dc565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f8381548110612c9457612c936149dc565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f805480612cd557612cd4614fbf565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b612d2582826040518060200160405280600081525061325c565b5050565b60008290505b8161ffff168161ffff1611612d9b57600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080612d9390614fee565b915050612d2f565b505050565b6001601060008282829054906101000a900461ffff16612dc091906149a4565b92506101000a81548161ffff021916908361ffff160217905550600160116000828254612ded9190614482565b925050819055506006601060009054906101000a900461ffff1661ffff161115612e30576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b60078161ffff161015612f925760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163182612f7d9190614482565b91508080612f8a90614fee565b915050612f02565b50600084600143612fa39190614f8b565b4041443360085487601154601060009054906101000a900461ffff16604051602001612fd79998979695949392919061511e565b6040516020818303038152906040528051906020012060001c90508381612ffe91906151f0565b9250505092915050565b613013848484612982565b61301f848484846132b7565b61305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305590615293565b60405180910390fd5b50505050565b6060600d8054613073906141d9565b80601f016020809104026020016040519081016040528092919081815260200182805461309f906141d9565b80156130ec5780601f106130c1576101008083540402835291602001916130ec565b820191906000526020600020905b8154815290600101906020018083116130cf57829003601f168201915b5050505050905090565b6060600082141561313e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613252565b600082905060005b60008214613170578080613159906145d6565b915050600a8261316991906152b3565b9150613146565b60008167ffffffffffffffff81111561318c5761318b613c3d565b5b6040519080825280601f01601f1916602001820160405280156131be5781602001600182028036833780820191505090505b5090505b6000851461324b576001826131d79190614f8b565b9150600a856131e691906151f0565b60306131f29190614482565b60f81b818381518110613208576132076149dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561324491906152b3565b94506131c2565b8093505050505b919050565b505050565b613266838361343f565b61327360008484846132b7565b6132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a990615293565b60405180910390fd5b505050565b60006132d88473ffffffffffffffffffffffffffffffffffffffff166126fa565b15613432578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613301612777565b8786866040518563ffffffff1660e01b81526004016133239493929190615339565b6020604051808303816000875af192505050801561335f57506040513d601f19601f8201168201806040525081019061335c919061539a565b60015b6133e2573d806000811461338f576040519150601f19603f3d011682016040523d82523d6000602084013e613394565b606091505b506000815114156133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d190615293565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613437565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690615413565b60405180910390fd5b6134b88161277f565b156134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef9061547f565b60405180910390fd5b61350460008383613257565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135549190614482565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613619906141d9565b90600052602060002090601f01602090048101928261363b5760008555613682565b82601f1061365457805160ff1916838001178555613682565b82800160010185558215613682579182015b82811115613681578251825591602001919060010190613666565b5b50905061368f9190613693565b5090565b5b808211156136ac576000816000905550600101613694565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136f9816136c4565b811461370457600080fd5b50565b600081359050613716816136f0565b92915050565b600060208284031215613732576137316136ba565b5b600061374084828501613707565b91505092915050565b60008115159050919050565b61375e81613749565b82525050565b60006020820190506137796000830184613755565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137aa8261377f565b9050919050565b6137ba8161379f565b81146137c557600080fd5b50565b6000813590506137d7816137b1565b92915050565b6000602082840312156137f3576137f26136ba565b5b6000613801848285016137c8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613844578082015181840152602081019050613829565b83811115613853576000848401525b50505050565b6000601f19601f8301169050919050565b60006138758261380a565b61387f8185613815565b935061388f818560208601613826565b61389881613859565b840191505092915050565b600060208201905081810360008301526138bd818461386a565b905092915050565b6000819050919050565b6138d8816138c5565b81146138e357600080fd5b50565b6000813590506138f5816138cf565b92915050565b600060208284031215613911576139106136ba565b5b600061391f848285016138e6565b91505092915050565b6139318161379f565b82525050565b600060208201905061394c6000830184613928565b92915050565b60008060408385031215613969576139686136ba565b5b6000613977858286016137c8565b9250506020613988858286016138e6565b9150509250929050565b61399b81613749565b81146139a657600080fd5b50565b6000813590506139b881613992565b92915050565b6000602082840312156139d4576139d36136ba565b5b60006139e2848285016139a9565b91505092915050565b6139f4816138c5565b82525050565b6000602082019050613a0f60008301846139eb565b92915050565b600061ffff82169050919050565b613a2c81613a15565b8114613a3757600080fd5b50565b600081359050613a4981613a23565b92915050565b60008060408385031215613a6657613a656136ba565b5b6000613a7485828601613a3a565b9250506020613a85858286016139a9565b9150509250929050565b600080600060608486031215613aa857613aa76136ba565b5b6000613ab6868287016137c8565b9350506020613ac7868287016137c8565b9250506040613ad8868287016138e6565b9150509250925092565b60008060408385031215613af957613af86136ba565b5b6000613b07858286016138e6565b9250506020613b18858286016137c8565b9150509250929050565b613b2b81613a15565b82525050565b6000602082019050613b466000830184613b22565b92915050565b600060208284031215613b6257613b616136ba565b5b6000613b7084828501613a3a565b91505092915050565b6000819050919050565b6000613b9e613b99613b948461377f565b613b79565b61377f565b9050919050565b6000613bb082613b83565b9050919050565b6000613bc282613ba5565b9050919050565b613bd281613bb7565b82525050565b6000602082019050613bed6000830184613bc9565b92915050565b60008060408385031215613c0a57613c096136ba565b5b6000613c1885828601613a3a565b9250506020613c29858286016138e6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c7582613859565b810181811067ffffffffffffffff82111715613c9457613c93613c3d565b5b80604052505050565b6000613ca76136b0565b9050613cb38282613c6c565b919050565b600067ffffffffffffffff821115613cd357613cd2613c3d565b5b613cdc82613859565b9050602081019050919050565b82818337600083830152505050565b6000613d0b613d0684613cb8565b613c9d565b905082815260208101848484011115613d2757613d26613c38565b5b613d32848285613ce9565b509392505050565b600082601f830112613d4f57613d4e613c33565b5b8135613d5f848260208601613cf8565b91505092915050565b600060208284031215613d7e57613d7d6136ba565b5b600082013567ffffffffffffffff811115613d9c57613d9b6136bf565b5b613da884828501613d3a565b91505092915050565b60008060408385031215613dc857613dc76136ba565b5b6000613dd6858286016138e6565b9250506020613de7858286016139a9565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613e1157613e10613c33565b5b8235905067ffffffffffffffff811115613e2e57613e2d613df1565b5b602083019150836020820283011115613e4a57613e49613df6565b5b9250929050565b60008060208385031215613e6857613e676136ba565b5b600083013567ffffffffffffffff811115613e8657613e856136bf565b5b613e9285828601613dfb565b92509250509250929050565b60008060408385031215613eb557613eb46136ba565b5b6000613ec385828601613a3a565b9250506020613ed4858286016137c8565b9150509250929050565b60008060408385031215613ef557613ef46136ba565b5b6000613f03858286016138e6565b9250506020613f14858286016138e6565b9150509250929050565b60008060408385031215613f3557613f346136ba565b5b6000613f43858286016137c8565b9250506020613f54858286016139a9565b9150509250929050565b600067ffffffffffffffff821115613f7957613f78613c3d565b5b613f8282613859565b9050602081019050919050565b6000613fa2613f9d84613f5e565b613c9d565b905082815260208101848484011115613fbe57613fbd613c38565b5b613fc9848285613ce9565b509392505050565b600082601f830112613fe657613fe5613c33565b5b8135613ff6848260208601613f8f565b91505092915050565b60008060008060808587031215614019576140186136ba565b5b6000614027878288016137c8565b9450506020614038878288016137c8565b9350506040614049878288016138e6565b925050606085013567ffffffffffffffff81111561406a576140696136bf565b5b61407687828801613fd1565b91505092959194509250565b60008060408385031215614099576140986136ba565b5b60006140a7858286016137c8565b92505060206140b8858286016137c8565b9150509250929050565b600080604083850312156140d9576140d86136ba565b5b60006140e785828601613a3a565b92505060206140f885828601613a3a565b9150509250929050565b600061410d82613ba5565b9050919050565b61411d81614102565b82525050565b60006020820190506141386000830184614114565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614174602083613815565b915061417f8261413e565b602082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f157607f821691505b60208210811415614205576142046141aa565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614267602c83613815565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142f9602183613815565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061438b603883613815565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061441d603183613815565b9150614428826143c1565b604082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061448d826138c5565b9150614498836138c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144cd576144cc614453565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b600061450e601183613815565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b60006145a0602a83613815565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b60006145e1826138c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561461457614613614453565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061467b602983613815565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006146e7601083613815565b91506146f2826146b1565b602082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b6000614753600883613815565b915061475e8261471d565b602082019050919050565b6000602082019050818103600083015261478281614746565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b60006147bf601383613815565b91506147ca82614789565b602082019050919050565b600060208201905081810360008301526147ee816147b2565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b600061482b601683613815565b9150614836826147f5565b602082019050919050565b6000602082019050818103600083015261485a8161481e565b9050919050565b7f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e79000000600082015250565b6000614897601d83613815565b91506148a282614861565b602082019050919050565b600060208201905081810360008301526148c68161488a565b9050919050565b6000815190506148dc816138cf565b92915050565b6000602082840312156148f8576148f76136ba565b5b6000614906848285016148cd565b91505092915050565b7f4e6f7420656e6f7567682050656e6e7900000000000000000000000000000000600082015250565b6000614945601083613815565b91506149508261490f565b602082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b60006040820190506149906000830185613928565b61499d60208301846139eb565b9392505050565b60006149af82613a15565b91506149ba83613a15565b92508261ffff038211156149d1576149d0614453565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4081613a15565b82525050565b6000614a528383614a37565b60208301905092915050565b6000602082019050919050565b6000614a7682614a0b565b614a808185614a16565b9350614a8b83614a27565b8060005b83811015614abc578151614aa38882614a46565b9750614aae83614a5e565b925050600181019050614a8f565b5085935050505092915050565b6000604082019050614ade6000830185613928565b8181036020830152614af08184614a6b565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614b55602a83613815565b9150614b6082614af9565b604082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614bc1601983613815565b9150614bcc82614b8b565b602082019050919050565b60006020820190508181036000830152614bf081614bb4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c53602f83613815565b9150614c5e82614bf7565b604082019050919050565b60006020820190508181036000830152614c8281614c46565b9050919050565b600081905092915050565b6000614c9f8261380a565b614ca98185614c89565b9350614cb9818560208601613826565b80840191505092915050565b6000614cd18285614c94565b9150614cdd8284614c94565b91508190509392505050565b6000614cf4826138c5565b9150614cff836138c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d3857614d37614453565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d9f602683613815565b9150614daa82614d43565b604082019050919050565b60006020820190508181036000830152614dce81614d92565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614e31602c83613815565b9150614e3c82614dd5565b604082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614ec3602983613815565b9150614ece82614e67565b604082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f55602483613815565b9150614f6082614ef9565b604082019050919050565b60006020820190508181036000830152614f8481614f48565b9050919050565b6000614f96826138c5565b9150614fa1836138c5565b925082821015614fb457614fb3614453565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614ff982613a15565b915061ffff82141561500e5761500d614453565b5b600182019050919050565b6000819050919050565b61503461502f826138c5565b615019565b82525050565b6000819050919050565b6000819050919050565b61505f61505a8261503a565b615044565b82525050565b60006150708261377f565b9050919050565b60008160601b9050919050565b600061508f82615077565b9050919050565b60006150a182615084565b9050919050565b6150b96150b482615065565b615096565b82525050565b60006150ca82615084565b9050919050565b6150e26150dd8261379f565b6150bf565b82525050565b60008160f01b9050919050565b6000615100826150e8565b9050919050565b61511861511382613a15565b6150f5565b82525050565b600061512a828c615023565b60208201915061513a828b61504e565b60208201915061514a828a6150a8565b60148201915061515a8289615023565b60208201915061516a82886150d1565b60148201915061517a8287615023565b60208201915061518a8286615023565b60208201915061519a8285615023565b6020820191506151aa8284615107565b6002820191508190509a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151fb826138c5565b9150615206836138c5565b925082615216576152156151c1565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061527d603283613815565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b60006152be826138c5565b91506152c9836138c5565b9250826152d9576152d86151c1565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b600061530b826152e4565b61531581856152ef565b9350615325818560208601613826565b61532e81613859565b840191505092915050565b600060808201905061534e6000830187613928565b61535b6020830186613928565b61536860408301856139eb565b818103606083015261537a8184615300565b905095945050505050565b600081519050615394816136f0565b92915050565b6000602082840312156153b0576153af6136ba565b5b60006153be84828501615385565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006153fd602083613815565b9150615408826153c7565b602082019050919050565b6000602082019050818103600083015261542c816153f0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615469601c83613815565b915061547482615433565b602082019050919050565b600060208201905081810360008301526154988161545c565b905091905056fea2646970667358221220cf70cdf78b7f7be53483597f5cd1a1c2c3dc9b0ed0982237456e3c6bcbf8895664736f6c634300080c003368747470733a2f2f6170692e6f6666696369616c2d6a6f6b6572732d636c75622e636f6d2f746f6b656e2f
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636de9f32b11610144578063b488b636116100b6578063e6a72acf1161007a578063e6a72acf14610907578063e985e9c514610944578063efb3d00814610981578063f2fde38b146109aa578063f47c84c5146109d3578063fbec6f21146109fe57610267565b8063b488b6361461080e578063b88d4fde14610839578063c87b56dd14610862578063c9150a9e1461089f578063cb7e93d2146108dc57610267565b806386b854c81161010857806386b854c8146107125780638da5cb5b1461073b57806392b242291461076657806395d89b411461078f578063a22cb465146107ba578063b1c9fe6e146107e357610267565b80636de9f32b14610641578063703731731461066c57806370a0823114610695578063715018a6146106d25780637e603d42146106e957610267565b80632c12395b116101dd5780634efc09f5116101a15780634efc09f51461054257806351cff8d91461056b57806355f804b3146105945780635c975abb146105bd5780636352211e146105e857806367f68fac1461062557610267565b80632c12395b1461045d5780633d4729371461049a57806340ce8d8a146104c357806342842e0e146104ee57806345d510071461051757610267565b806316c38b3c1161022f57806316c38b3c1461036357806318160ddd1461038c5780631adbc550146103b757806323b872dd146103e0578063261d3b2114610409578063268e00a31461043257610267565b806301ffc9a71461026c5780630520b708146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061371c565b610a29565b6040516102a09190613764565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb91906137dd565b610b0b565b005b3480156102de57600080fd5b506102e7610bcb565b6040516102f491906138a3565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f91906138fb565b610c5d565b6040516103319190613937565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613952565b610ce2565b005b34801561036f57600080fd5b5061038a600480360381019061038591906139be565b610dfa565b005b34801561039857600080fd5b506103a1610e93565b6040516103ae91906139fa565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613a4f565b610e9d565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613a8f565b610f50565b005b34801561041557600080fd5b50610430600480360381019061042b9190613ae2565b61100d565b005b34801561043e57600080fd5b50610447611161565b6040516104549190613b31565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b4c565b611175565b6040516104919190613764565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613a4f565b6111a7565b005b3480156104cf57600080fd5b506104d86112d6565b6040516104e59190613bd8565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a8f565b6112fc565b005b34801561052357600080fd5b5061052c61131c565b60405161053991906139fa565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190613bf3565b611321565b005b34801561057757600080fd5b50610592600480360381019061058d91906137dd565b6113c1565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613d68565b61148d565b005b3480156105c957600080fd5b506105d2611523565b6040516105df9190613764565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906138fb565b61153a565b60405161061c9190613937565b60405180910390f35b61063f600480360381019061063a9190613db1565b6115ec565b005b34801561064d57600080fd5b50610656611c2a565b60405161066391906139fa565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613e51565b611c30565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906137dd565b611d2d565b6040516106c991906139fa565b60405180910390f35b3480156106de57600080fd5b506106e7611de5565b005b3480156106f557600080fd5b50610710600480360381019061070b91906137dd565b611e6d565b005b34801561071e57600080fd5b5061073960048036038101906107349190613e9e565b611f2d565b005b34801561074757600080fd5b50610750612007565b60405161075d9190613937565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613ede565b612031565b005b34801561079b57600080fd5b506107a4612108565b6040516107b191906138a3565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613f1e565b61219a565b005b3480156107ef57600080fd5b506107f861231b565b6040516108059190613b31565b60405180910390f35b34801561081a57600080fd5b5061082361232f565b6040516108309190613b31565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613fff565b612343565b005b34801561086e57600080fd5b50610889600480360381019061088491906138fb565b6123a5565b60405161089691906138a3565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613b4c565b61244c565b6040516108d391906139fa565b60405180910390f35b3480156108e857600080fd5b506108f1612464565b6040516108fe9190613b31565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906138fb565b612478565b60405161093b91906139fa565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614082565b6124b8565b6040516109789190613764565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a391906140c2565b61254c565b005b3480156109b657600080fd5b506109d160048036038101906109cc91906137dd565b6125d6565b005b3480156109df57600080fd5b506109e86126ce565b6040516109f591906139fa565b60405180910390f35b348015610a0a57600080fd5b50610a136126d4565b604051610a209190614123565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b038261270d565b5b9050919050565b610b13612777565b73ffffffffffffffffffffffffffffffffffffffff16610b31612007565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e9061418a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610bda906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c06906141d9565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c688261277f565b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e9061427d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ced8261153a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d559061430f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7d612777565b73ffffffffffffffffffffffffffffffffffffffff161480610dac5750610dab81610da6612777565b6124b8565b5b610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906143a1565b60405180910390fd5b610df583836127eb565b505050565b610e02612777565b73ffffffffffffffffffffffffffffffffffffffff16610e20612007565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d9061418a565b60405180910390fd5b80600960086101000a81548160ff02191690831515021790555050565b6000600854905090565b610ea5612777565b73ffffffffffffffffffffffffffffffffffffffff16610ec3612007565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f109061418a565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f91612777565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd57610fbd610fb7612777565b826128a4565b610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614433565b60405180910390fd5b5b611008838383612982565b505050565b611015612777565b73ffffffffffffffffffffffffffffffffffffffff16611033612007565b73ffffffffffffffffffffffffffffffffffffffff1614611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061418a565b60405180910390fd5b6007548260085461109a9190614482565b11156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614524565b60405180910390fd5b6000600f8054905011611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906145b6565b60405180910390fd5b60005b8281101561115c576000611138612bde565b9050611148838261ffff16612d0b565b508080611154906145d6565b915050611126565b505050565b600960049054906101000a900461ffff1681565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111af612777565b73ffffffffffffffffffffffffffffffffffffffff166111cd612007565b73ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a9061418a565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff1602179055508061124a576112d2565b6001600960009054906101000a900461ffff1661ffff161415611279576112746001611770612d29565b6112d1565b6002600960009054906101000a900461ffff1661ffff16141561129b576112d0565b6003600960009054906101000a900461ffff1661ffff1614156112bd576112cf565b6004600960009054906101000a905050505b5b5b5b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131783838360405180602001604052806000815250612343565b505050565b600a81565b611329612777565b73ffffffffffffffffffffffffffffffffffffffff16611347612007565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061418a565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113c9612777565b73ffffffffffffffffffffffffffffffffffffffff166113e7612007565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114349061418a565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611488573d6000803e3d6000fd5b505050565b611495612777565b73ffffffffffffffffffffffffffffffffffffffff166114b3612007565b73ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061418a565b60405180910390fd5b80600d908051906020019061151f92919061360d565b5050565b6000600960089054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90614691565b60405180910390fd5b80915050919050565b6115f4611523565b15611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b906146fd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146116a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169990614769565b60405180910390fd5b600754826008546116b39190614482565b11156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90614524565b60405180910390fd5b6000821180156117055750600a8211155b611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906147d5565b60405180910390fd5b6000600f805490501161178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906145b6565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff1614156117fa57346117b584612478565b146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614841565b60405180910390fd5b611927565b6000341461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906148ad565b60405180910390fd5b61184683612478565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118a49190613937565b602060405180830381865afa1580156118c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e591906148e2565b1015611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d9061495b565b60405180910390fd5b5b60008111156119c057600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b815260040161198d92919061497b565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b505050505b82600860008282546119d29190614482565b92505081905550600082611a2f57600067ffffffffffffffff8111156119fb576119fa613c3d565b5b604051908082528060200260200182016040528015611a295781602001602082028036833780820191505090505b50611a79565b8367ffffffffffffffff811115611a4957611a48613c3d565b5b604051908082528060200260200182016040528015611a775781602001602082028036833780820191505090505b505b905060005b84811015611b8d5760003390506001600960009054906101000a900461ffff1661ffff1614611ab057611aaf612da0565b5b6000611aba612bde565b9050611ac581611175565b15611b05576001600960068282829054906101000a900461ffff16611aea91906149a4565b92506101000a81548161ffff021916908361ffff1602179055505b85611b1d57611b18828261ffff16612d0b565b611b78565b611b4d600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16612d0b565b80848481518110611b6157611b606149dc565b5b602002602001019061ffff16908161ffff16815250505b50508080611b85906145d6565b915050611a7e565b508215611c2457600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611bf1929190614ac9565b600060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050505b50505050565b60085481565b611c38612777565b73ffffffffffffffffffffffffffffffffffffffff16611c56612007565b73ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061418a565b60405180910390fd5b60005b82829050811015611d28576001600e6000858585818110611cd357611cd26149dc565b5b9050602002016020810190611ce89190613b4c565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d20906145d6565b915050611caf565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614b6b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ded612777565b73ffffffffffffffffffffffffffffffffffffffff16611e0b612007565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061418a565b60405180910390fd5b611e6b6000612e32565b565b611e75612777565b73ffffffffffffffffffffffffffffffffffffffff16611e93612007565b73ffffffffffffffffffffffffffffffffffffffff1614611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061418a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f35612777565b73ffffffffffffffffffffffffffffffffffffffff16611f53612007565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa09061418a565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612039612777565b73ffffffffffffffffffffffffffffffffffffffff16612057612007565b73ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a49061418a565b60405180910390fd5b60006120b98383612ef8565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b81811015612102576120ef612da0565b80806120fa906145d6565b9150506120df565b50505050565b606060018054612117906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054612143906141d9565b80156121905780601f1061216557610100808354040283529160200191612190565b820191906000526020600020905b81548152906001019060200180831161217357829003601f168201915b5050505050905090565b6121a2612777565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220790614bd7565b60405180910390fd5b806005600061221d612777565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122ca612777565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230f9190613764565b60405180910390a35050565b600960009054906101000a900461ffff1681565b600960069054906101000a900461ffff1681565b61235461234e612777565b836128a4565b612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90614433565b60405180910390fd5b61239f84848484613008565b50505050565b60606123b08261277f565b6123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614c69565b60405180910390fd5b60006123f9613064565b905060008151116124195760405180602001604052806000815250612444565b80612423846130f6565b604051602001612434929190614cc5565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b600960029054906101000a900461ffff1681565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826124b19190614ce9565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612554612777565b73ffffffffffffffffffffffffffffffffffffffff16612572612007565b73ffffffffffffffffffffffffffffffffffffffff16146125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061418a565b60405180910390fd5b6125d28282612d29565b5050565b6125de612777565b73ffffffffffffffffffffffffffffffffffffffff166125fc612007565b73ffffffffffffffffffffffffffffffffffffffff1614612652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126499061418a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990614db5565b60405180910390fd5b6126cb81612e32565b50565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661285e8361153a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128af8261277f565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614e47565b60405180910390fd5b60006128f98361153a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296857508373ffffffffffffffffffffffffffffffffffffffff1661295084610c5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612979575061297881856124b8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129a28261153a565b73ffffffffffffffffffffffffffffffffffffffff16146129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef90614ed9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f90614f6b565b60405180910390fd5b612a73838383613257565b612a7e6000826127eb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ace9190614f8b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b259190614482565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612bf5600f80549050600f80549050612ef8565b61ffff1690506000600f8281548110612c1157612c106149dc565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f80549050612c4b9190614f8b565b81548110612c5c57612c5b6149dc565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f8381548110612c9457612c936149dc565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f805480612cd557612cd4614fbf565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b612d2582826040518060200160405280600081525061325c565b5050565b60008290505b8161ffff168161ffff1611612d9b57600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080612d9390614fee565b915050612d2f565b505050565b6001601060008282829054906101000a900461ffff16612dc091906149a4565b92506101000a81548161ffff021916908361ffff160217905550600160116000828254612ded9190614482565b925050819055506006601060009054906101000a900461ffff1661ffff161115612e30576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b60078161ffff161015612f925760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163182612f7d9190614482565b91508080612f8a90614fee565b915050612f02565b50600084600143612fa39190614f8b565b4041443360085487601154601060009054906101000a900461ffff16604051602001612fd79998979695949392919061511e565b6040516020818303038152906040528051906020012060001c90508381612ffe91906151f0565b9250505092915050565b613013848484612982565b61301f848484846132b7565b61305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305590615293565b60405180910390fd5b50505050565b6060600d8054613073906141d9565b80601f016020809104026020016040519081016040528092919081815260200182805461309f906141d9565b80156130ec5780601f106130c1576101008083540402835291602001916130ec565b820191906000526020600020905b8154815290600101906020018083116130cf57829003601f168201915b5050505050905090565b6060600082141561313e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613252565b600082905060005b60008214613170578080613159906145d6565b915050600a8261316991906152b3565b9150613146565b60008167ffffffffffffffff81111561318c5761318b613c3d565b5b6040519080825280601f01601f1916602001820160405280156131be5781602001600182028036833780820191505090505b5090505b6000851461324b576001826131d79190614f8b565b9150600a856131e691906151f0565b60306131f29190614482565b60f81b818381518110613208576132076149dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561324491906152b3565b94506131c2565b8093505050505b919050565b505050565b613266838361343f565b61327360008484846132b7565b6132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a990615293565b60405180910390fd5b505050565b60006132d88473ffffffffffffffffffffffffffffffffffffffff166126fa565b15613432578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613301612777565b8786866040518563ffffffff1660e01b81526004016133239493929190615339565b6020604051808303816000875af192505050801561335f57506040513d601f19601f8201168201806040525081019061335c919061539a565b60015b6133e2573d806000811461338f576040519150601f19603f3d011682016040523d82523d6000602084013e613394565b606091505b506000815114156133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d190615293565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613437565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690615413565b60405180910390fd5b6134b88161277f565b156134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef9061547f565b60405180910390fd5b61350460008383613257565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135549190614482565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613619906141d9565b90600052602060002090601f01602090048101928261363b5760008555613682565b82601f1061365457805160ff1916838001178555613682565b82800160010185558215613682579182015b82811115613681578251825591602001919060010190613666565b5b50905061368f9190613693565b5090565b5b808211156136ac576000816000905550600101613694565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136f9816136c4565b811461370457600080fd5b50565b600081359050613716816136f0565b92915050565b600060208284031215613732576137316136ba565b5b600061374084828501613707565b91505092915050565b60008115159050919050565b61375e81613749565b82525050565b60006020820190506137796000830184613755565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137aa8261377f565b9050919050565b6137ba8161379f565b81146137c557600080fd5b50565b6000813590506137d7816137b1565b92915050565b6000602082840312156137f3576137f26136ba565b5b6000613801848285016137c8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613844578082015181840152602081019050613829565b83811115613853576000848401525b50505050565b6000601f19601f8301169050919050565b60006138758261380a565b61387f8185613815565b935061388f818560208601613826565b61389881613859565b840191505092915050565b600060208201905081810360008301526138bd818461386a565b905092915050565b6000819050919050565b6138d8816138c5565b81146138e357600080fd5b50565b6000813590506138f5816138cf565b92915050565b600060208284031215613911576139106136ba565b5b600061391f848285016138e6565b91505092915050565b6139318161379f565b82525050565b600060208201905061394c6000830184613928565b92915050565b60008060408385031215613969576139686136ba565b5b6000613977858286016137c8565b9250506020613988858286016138e6565b9150509250929050565b61399b81613749565b81146139a657600080fd5b50565b6000813590506139b881613992565b92915050565b6000602082840312156139d4576139d36136ba565b5b60006139e2848285016139a9565b91505092915050565b6139f4816138c5565b82525050565b6000602082019050613a0f60008301846139eb565b92915050565b600061ffff82169050919050565b613a2c81613a15565b8114613a3757600080fd5b50565b600081359050613a4981613a23565b92915050565b60008060408385031215613a6657613a656136ba565b5b6000613a7485828601613a3a565b9250506020613a85858286016139a9565b9150509250929050565b600080600060608486031215613aa857613aa76136ba565b5b6000613ab6868287016137c8565b9350506020613ac7868287016137c8565b9250506040613ad8868287016138e6565b9150509250925092565b60008060408385031215613af957613af86136ba565b5b6000613b07858286016138e6565b9250506020613b18858286016137c8565b9150509250929050565b613b2b81613a15565b82525050565b6000602082019050613b466000830184613b22565b92915050565b600060208284031215613b6257613b616136ba565b5b6000613b7084828501613a3a565b91505092915050565b6000819050919050565b6000613b9e613b99613b948461377f565b613b79565b61377f565b9050919050565b6000613bb082613b83565b9050919050565b6000613bc282613ba5565b9050919050565b613bd281613bb7565b82525050565b6000602082019050613bed6000830184613bc9565b92915050565b60008060408385031215613c0a57613c096136ba565b5b6000613c1885828601613a3a565b9250506020613c29858286016138e6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c7582613859565b810181811067ffffffffffffffff82111715613c9457613c93613c3d565b5b80604052505050565b6000613ca76136b0565b9050613cb38282613c6c565b919050565b600067ffffffffffffffff821115613cd357613cd2613c3d565b5b613cdc82613859565b9050602081019050919050565b82818337600083830152505050565b6000613d0b613d0684613cb8565b613c9d565b905082815260208101848484011115613d2757613d26613c38565b5b613d32848285613ce9565b509392505050565b600082601f830112613d4f57613d4e613c33565b5b8135613d5f848260208601613cf8565b91505092915050565b600060208284031215613d7e57613d7d6136ba565b5b600082013567ffffffffffffffff811115613d9c57613d9b6136bf565b5b613da884828501613d3a565b91505092915050565b60008060408385031215613dc857613dc76136ba565b5b6000613dd6858286016138e6565b9250506020613de7858286016139a9565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613e1157613e10613c33565b5b8235905067ffffffffffffffff811115613e2e57613e2d613df1565b5b602083019150836020820283011115613e4a57613e49613df6565b5b9250929050565b60008060208385031215613e6857613e676136ba565b5b600083013567ffffffffffffffff811115613e8657613e856136bf565b5b613e9285828601613dfb565b92509250509250929050565b60008060408385031215613eb557613eb46136ba565b5b6000613ec385828601613a3a565b9250506020613ed4858286016137c8565b9150509250929050565b60008060408385031215613ef557613ef46136ba565b5b6000613f03858286016138e6565b9250506020613f14858286016138e6565b9150509250929050565b60008060408385031215613f3557613f346136ba565b5b6000613f43858286016137c8565b9250506020613f54858286016139a9565b9150509250929050565b600067ffffffffffffffff821115613f7957613f78613c3d565b5b613f8282613859565b9050602081019050919050565b6000613fa2613f9d84613f5e565b613c9d565b905082815260208101848484011115613fbe57613fbd613c38565b5b613fc9848285613ce9565b509392505050565b600082601f830112613fe657613fe5613c33565b5b8135613ff6848260208601613f8f565b91505092915050565b60008060008060808587031215614019576140186136ba565b5b6000614027878288016137c8565b9450506020614038878288016137c8565b9350506040614049878288016138e6565b925050606085013567ffffffffffffffff81111561406a576140696136bf565b5b61407687828801613fd1565b91505092959194509250565b60008060408385031215614099576140986136ba565b5b60006140a7858286016137c8565b92505060206140b8858286016137c8565b9150509250929050565b600080604083850312156140d9576140d86136ba565b5b60006140e785828601613a3a565b92505060206140f885828601613a3a565b9150509250929050565b600061410d82613ba5565b9050919050565b61411d81614102565b82525050565b60006020820190506141386000830184614114565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614174602083613815565b915061417f8261413e565b602082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f157607f821691505b60208210811415614205576142046141aa565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614267602c83613815565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142f9602183613815565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061438b603883613815565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061441d603183613815565b9150614428826143c1565b604082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061448d826138c5565b9150614498836138c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144cd576144cc614453565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b600061450e601183613815565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b60006145a0602a83613815565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b60006145e1826138c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561461457614613614453565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061467b602983613815565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006146e7601083613815565b91506146f2826146b1565b602082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b6000614753600883613815565b915061475e8261471d565b602082019050919050565b6000602082019050818103600083015261478281614746565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b60006147bf601383613815565b91506147ca82614789565b602082019050919050565b600060208201905081810360008301526147ee816147b2565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b600061482b601683613815565b9150614836826147f5565b602082019050919050565b6000602082019050818103600083015261485a8161481e565b9050919050565b7f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e79000000600082015250565b6000614897601d83613815565b91506148a282614861565b602082019050919050565b600060208201905081810360008301526148c68161488a565b9050919050565b6000815190506148dc816138cf565b92915050565b6000602082840312156148f8576148f76136ba565b5b6000614906848285016148cd565b91505092915050565b7f4e6f7420656e6f7567682050656e6e7900000000000000000000000000000000600082015250565b6000614945601083613815565b91506149508261490f565b602082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b60006040820190506149906000830185613928565b61499d60208301846139eb565b9392505050565b60006149af82613a15565b91506149ba83613a15565b92508261ffff038211156149d1576149d0614453565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4081613a15565b82525050565b6000614a528383614a37565b60208301905092915050565b6000602082019050919050565b6000614a7682614a0b565b614a808185614a16565b9350614a8b83614a27565b8060005b83811015614abc578151614aa38882614a46565b9750614aae83614a5e565b925050600181019050614a8f565b5085935050505092915050565b6000604082019050614ade6000830185613928565b8181036020830152614af08184614a6b565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614b55602a83613815565b9150614b6082614af9565b604082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614bc1601983613815565b9150614bcc82614b8b565b602082019050919050565b60006020820190508181036000830152614bf081614bb4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c53602f83613815565b9150614c5e82614bf7565b604082019050919050565b60006020820190508181036000830152614c8281614c46565b9050919050565b600081905092915050565b6000614c9f8261380a565b614ca98185614c89565b9350614cb9818560208601613826565b80840191505092915050565b6000614cd18285614c94565b9150614cdd8284614c94565b91508190509392505050565b6000614cf4826138c5565b9150614cff836138c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d3857614d37614453565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d9f602683613815565b9150614daa82614d43565b604082019050919050565b60006020820190508181036000830152614dce81614d92565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614e31602c83613815565b9150614e3c82614dd5565b604082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614ec3602983613815565b9150614ece82614e67565b604082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f55602483613815565b9150614f6082614ef9565b604082019050919050565b60006020820190508181036000830152614f8481614f48565b9050919050565b6000614f96826138c5565b9150614fa1836138c5565b925082821015614fb457614fb3614453565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614ff982613a15565b915061ffff82141561500e5761500d614453565b5b600182019050919050565b6000819050919050565b61503461502f826138c5565b615019565b82525050565b6000819050919050565b6000819050919050565b61505f61505a8261503a565b615044565b82525050565b60006150708261377f565b9050919050565b60008160601b9050919050565b600061508f82615077565b9050919050565b60006150a182615084565b9050919050565b6150b96150b482615065565b615096565b82525050565b60006150ca82615084565b9050919050565b6150e26150dd8261379f565b6150bf565b82525050565b60008160f01b9050919050565b6000615100826150e8565b9050919050565b61511861511382613a15565b6150f5565b82525050565b600061512a828c615023565b60208201915061513a828b61504e565b60208201915061514a828a6150a8565b60148201915061515a8289615023565b60208201915061516a82886150d1565b60148201915061517a8287615023565b60208201915061518a8286615023565b60208201915061519a8285615023565b6020820191506151aa8284615107565b6002820191508190509a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151fb826138c5565b9150615206836138c5565b925082615216576152156151c1565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061527d603283613815565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b60006152be826138c5565b91506152c9836138c5565b9250826152d9576152d86151c1565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b600061530b826152e4565b61531581856152ef565b9350615325818560208601613826565b61532e81613859565b840191505092915050565b600060808201905061534e6000830187613928565b61535b6020830186613928565b61536860408301856139eb565b818103606083015261537a8184615300565b905095945050505050565b600081519050615394816136f0565b92915050565b6000602082840312156153b0576153af6136ba565b5b60006153be84828501615385565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006153fd602083613815565b9150615408826153c7565b602082019050919050565b6000602082019050818103600083015261542c816153f0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615469601c83613815565b915061547482615433565b602082019050919050565b600060208201905081810360008301526154988161545c565b905091905056fea2646970667358221220cf70cdf78b7f7be53483597f5cd1a1c2c3dc9b0ed0982237456e3c6bcbf8895664736f6c634300080c0033
Deployed Bytecode Sourcemap
34491:8813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22033:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42084:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24537:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24060:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36633:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42720:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41659:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42315:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37536:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34735:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37031:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34900:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25837:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34581:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42182:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43157:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42926:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36337:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22672:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37943:1938;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34633:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41774:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22402:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:94;;;;;;;;;;;;;:::i;:::-;;41953:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43024:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19526:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41374:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23147:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24830:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34668:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34775:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26093:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23322:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34850:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34698:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39889:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25196:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36727:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20426:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34545:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34944:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22033:305;22135:4;22187:25;22172:40;;;:11;:40;;;;:105;;;;22244:33;22229:48;;;:11;:48;;;;22172:105;:158;;;;22294:36;22318:11;22294:23;:36::i;:::-;22172:158;22152:178;;22033:305;;;:::o;42084:90::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42160:5:::1;42146:4;;:20;;;;;;;;;;;;;;;;;;42084:90:::0;:::o;22978:100::-;23032:13;23065:5;23058:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:100;:::o;24537:221::-;24613:7;24641:16;24649:7;24641;:16::i;:::-;24633:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24726:15;:24;24742:7;24726:24;;;;;;;;;;;;;;;;;;;;;24719:31;;24537:221;;;:::o;24060:411::-;24141:13;24157:23;24172:7;24157:14;:23::i;:::-;24141:39;;24205:5;24199:11;;:2;:11;;;;24191:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24299:5;24283:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24308:37;24325:5;24332:12;:10;:12::i;:::-;24308:16;:37::i;:::-;24283:62;24261:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:21;24451:2;24455:7;24442:8;:21::i;:::-;24130:341;24060:411;;:::o;36633:86::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36705:6:::1;36695:7;;:16;;;;;;;;;;;;;;;;;;36633:86:::0;:::o;42720:90::-;42766:4;42790:12;;42783:19;;42720:90;:::o;41659:107::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41751:7:::1;41735:9;:13;41745:2;41735:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41659:107:::0;;:::o;42315:397::-;42532:14;;;;;;;;;;;42508:39;;:12;:10;:12::i;:::-;:39;;;42504:161;;42570:41;42589:12;:10;:12::i;:::-;42603:7;42570:18;:41::i;:::-;42562:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;42504:161;42676:28;42686:4;42692:2;42696:7;42676:9;:28::i;:::-;42315:397;;;:::o;37536:399::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37648:10:::1;;37637:7;37622:12;;:22;;;;:::i;:::-;:36;;37614:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37725:1;37699:16;:23;;;;:27;37691:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;37791:6;37786:142;37807:7;37803:1;:11;37786:142;;;37836:14;37853:20;:18;:20::i;:::-;37836:37;;37888:28;37898:8;37908:7;37888:28;;:9;:28::i;:::-;37821:107;37816:3;;;;;:::i;:::-;;;;37786:142;;;;37536:399:::0;;:::o;34735:33::-;;;;;;;;;;;;;:::o;40010:95::-;40060:4;40084:9;:13;40094:2;40084:13;;;;;;;;;;;;;;;;;;;;;;;;;40077:20;;40010:95;;;:::o;37031:497::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37126:6:::1;37118:5;;:14;;;;;;;;;;;;;;;;;;37150:10;37145:50;;37177:7;;37145:50;37220:1;37211:5;;;;;;;;;;;:10;;;37207:314;;;37238:26;37256:1;37259:4;37238:17;:26::i;:::-;37207:314;;;37295:1;37286:5;;;;;;;;;;;:10;;;37282:239;;;;;;37377:1;37368:5;;;;;;;;;;;:10;;;37364:157;;;;;;37459:1;37450:5;;;;;;;;::::0;;:10;37364:157:::1;37282:239;37207:314;19817:1;37031:497:::0;;:::o;34900:37::-;;;;;;;;;;;;;:::o;25837:185::-;25975:39;25992:4;25998:2;26002:7;25975:39;;;;;;;;;;;;:16;:39::i;:::-;25837:185;;;:::o;34581:43::-;34622:2;34581:43;:::o;42182:125::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42290:9:::1;42269:10;:18;42280:6;42269:18;;;;;;;;;;;;;;;:30;;;;42182:125:::0;;:::o;43157:144::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43217:12:::1;43232:21;43217:36;;43272:2;43264:20;;:29;43285:7;43264:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43206:95;43157:144:::0;:::o;42926:90::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43005:3:::1;42995:7;:13;;;;;;;;;;;;:::i;:::-;;42926:90:::0;:::o;36337:86::-;36384:4;36408:7;;;;;;;;;;;36401:14;;36337:86;:::o;22672:239::-;22744:7;22764:13;22780:7;:16;22788:7;22780:16;;;;;;;;;;;;;;;;;;;;;22764:32;;22832:1;22815:19;;:5;:19;;;;22807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22898:5;22891:12;;;22672:239;;;:::o;37943:1938::-;36476:8;:6;:8::i;:::-;36475:9;36467:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38045:10:::1;38032:23;;:9;:23;;;38024:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;38113:10;;38102:7;38087:12;;:22;;;;:::i;:::-;:36;;38079:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38174:1;38164:7;:11;:43;;;;;34622:2;38179:7;:28;;38164:43;38156:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38276:1;38250:16;:23;;;;:27;38242:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:19;38384:1;38375:5;;;;;;;;;;;:10;;;38371:404;;;38458:9;38436:18;38446:7;38436:9;:18::i;:::-;:31;38428:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38371:404;;;38590:1;38577:9;:14;38569:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38657:18;38667:7;38657:9;:18::i;:::-;38640:35;;38728:14;38698:4;;;;;;;;;;;:14;;;38713:10;38698:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;38690:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38371:404;38808:1;38791:14;:18;38787:88;;;38826:4;;;;;;;;;;;:9;;;38836:10;38848:14;38826:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38787:88;38903:7;38887:12;;:23;;;;;;;:::i;:::-;;;;;;;;38921:24;38948:6;:48;;38994:1;38981:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38948:48;;;38970:7;38957:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38948:48;38921:75;;39012:6;39007:765;39028:7;39024:1;:11;39007:765;;;39057:17;39077:10;39057:30;;39115:1;39106:5;;;;;;;;;;;:10;;;39102:70;;39137:19;:17;:19::i;:::-;39102:70;39188:14;39205:20;:18;:20::i;:::-;39188:37;;39246:17;39255:7;39246:8;:17::i;:::-;39242:75;;;39300:1;39284:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39242:75;39565:6;39560:201;;39592:29;39602:9;39613:7;39592:29;;:9;:29::i;:::-;39560:201;;;39662:43;39680:14;;;;;;;;;;;39697:7;39662:43;;:9;:43::i;:::-;39738:7;39724:8;39733:1;39724:11;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;::::0;::::1;39560:201;39042:730;;39037:3;;;;;:::i;:::-;;;;39007:765;;;;39786:6;39782:92;;;39809:14;;;;;;;;;;;:31;;;39841:10;39853:8;39809:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39782:92;38013:1868;;37943:1938:::0;;:::o;34633:28::-;;;;:::o;41774:171::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41854:6:::1;41849:89;41870:3;;:10;;41866:1;:14;41849:89;;;41922:4;41902:9;:17;41912:3;;41916:1;41912:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41902:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;41882:3;;;;;:::i;:::-;;;;41849:89;;;;41774:171:::0;;:::o;22402:208::-;22474:7;22519:1;22502:19;;:5;:19;;;;22494:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22586:9;:16;22596:5;22586:16;;;;;;;;;;;;;;;;22579:23;;22402:208;;;:::o;20177:94::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20242:21:::1;20260:1;20242:9;:21::i;:::-;20177:94::o:0;41953:123::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42060:7:::1;42027:14;;:41;;;;;;;;;;;;;;;;;;41953:123:::0;:::o;43024:125::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43133:8:::1;43112:13;:18;43126:3;43112:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43024:125:::0;;:::o;19526:87::-;19572:7;19599:6;;;;;;;;;;;19592:13;;19526:87;:::o;41374:277::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41449:17:::1;41469:32;41489:5;41496:4;41469:19;:32::i;:::-;41449:52;;;;41534:12;41512;;:35;;;;;;;;;;;;;;;;;;41563:6;41558:86;41579:12;41575:1;:16;41558:86;;;41613:19;:17;:19::i;:::-;41593:3;;;;;:::i;:::-;;;;41558:86;;;;41438:213;41374:277:::0;;:::o;23147:104::-;23203:13;23236:7;23229:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23147:104;:::o;24830:295::-;24945:12;:10;:12::i;:::-;24933:24;;:8;:24;;;;24925:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25045:8;25000:18;:32;25019:12;:10;:12::i;:::-;25000:32;;;;;;;;;;;;;;;:42;25033:8;25000:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25098:8;25069:48;;25084:12;:10;:12::i;:::-;25069:48;;;25108:8;25069:48;;;;;;:::i;:::-;;;;;;;;24830:295;;:::o;34668:23::-;;;;;;;;;;;;;:::o;34775:30::-;;;;;;;;;;;;;:::o;26093:328::-;26268:41;26287:12;:10;:12::i;:::-;26301:7;26268:18;:41::i;:::-;26260:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26374:39;26388:4;26394:2;26398:7;26407:5;26374:13;:39::i;:::-;26093:328;;;;:::o;23322:334::-;23395:13;23429:16;23437:7;23429;:16::i;:::-;23421:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23510:21;23534:10;:8;:10::i;:::-;23510:34;;23586:1;23568:7;23562:21;:25;:86;;;;;;;;;;;;;;;;;23614:7;23623:18;:7;:16;:18::i;:::-;23597:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23562:86;23555:93;;;23322:334;;;:::o;34850:41::-;;;;;;;;;;;;;;;;;:::o;34698:30::-;;;;;;;;;;;;;:::o;39889:113::-;39943:4;39977:10;:17;39988:5;;;;;;;;;;;39977:17;;;;;;;;;;;;;;;;39967:7;:27;;;;:::i;:::-;39960:34;;39889:113;;;:::o;25196:164::-;25293:4;25317:18;:25;25336:5;25317:25;;;;;;;;;;;;;;;:35;25343:8;25317:35;;;;;;;;;;;;;;;;;;;;;;;;;25310:42;;25196:164;;;;:::o;36727:119::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36809:29:::1;36827:5;36834:3;36809:17;:29::i;:::-;36727:119:::0;;:::o;20426:192::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20535:1:::1;20515:22;;:8;:22;;;;20507:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20591:19;20601:8;20591:9;:19::i;:::-;20426:192:::0;:::o;34545:29::-;;;;:::o;34944:18::-;;;;;;;;;;;;;:::o;5094:387::-;5154:4;5362:12;5429:7;5417:20;5409:28;;5472:1;5465:4;:8;5458:15;;;5094:387;;;:::o;1510:157::-;1595:4;1634:25;1619:40;;;:11;:40;;;;1612:47;;1510:157;;;:::o;4199:98::-;4252:7;4279:10;4272:17;;4199:98;:::o;27931:127::-;27996:4;28048:1;28020:30;;:7;:16;28028:7;28020:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28013:37;;27931:127;;;:::o;31913:174::-;32015:2;31988:15;:24;32004:7;31988:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32071:7;32067:2;32033:46;;32042:23;32057:7;32042:14;:23::i;:::-;32033:46;;;;;;;;;;;;31913:174;;:::o;28225:348::-;28318:4;28343:16;28351:7;28343;:16::i;:::-;28335:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:13;28435:23;28450:7;28435:14;:23::i;:::-;28419:39;;28488:5;28477:16;;:7;:16;;;:51;;;;28521:7;28497:31;;:20;28509:7;28497:11;:20::i;:::-;:31;;;28477:51;:87;;;;28532:32;28549:5;28556:7;28532:16;:32::i;:::-;28477:87;28469:96;;;28225:348;;;;:::o;31217:578::-;31376:4;31349:31;;:23;31364:7;31349:14;:23::i;:::-;:31;;;31341:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31459:1;31445:16;;:2;:16;;;;31437:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31515:39;31536:4;31542:2;31546:7;31515:20;:39::i;:::-;31619:29;31636:1;31640:7;31619:8;:29::i;:::-;31680:1;31661:9;:15;31671:4;31661:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31709:1;31692:9;:13;31702:2;31692:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31740:2;31721:7;:16;31729:7;31721:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31779:7;31775:2;31760:27;;31769:4;31760:27;;;;;;;;;;;;31217:578;;;:::o;40113:354::-;40160:6;40179:11;40193:69;40213:16;:23;;;;40238:16;:23;;;;40193:19;:69::i;:::-;40179:83;;;;40273:14;40290:16;40307:6;40290:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40273:41;;40354:16;40397:1;40371:16;:23;;;;:27;;;;:::i;:::-;40354:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40327:16;40344:6;40327:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;40410:16;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40452:7;40445:14;;;;40113:354;:::o;28915:110::-;28991:26;29001:2;29005:7;28991:26;;;;;;;;;;;;:9;:26::i;:::-;28915:110;;:::o;36854:169::-;36932:8;36943:5;36932:16;;36927:89;36955:3;36950:8;;:1;:8;;;36927:89;;36980:16;37002:1;36980:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36960:3;;;;;:::i;:::-;;;;36927:89;;;;36854:169;;:::o;40479:151::-;40544:1;40528:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40572:1;40556:12;;:17;;;;;;;:::i;:::-;;;;;;;;40603:1;40588:12;;;;;;;;;;;:16;;;40584:38;;;40621:1;40606:12;;:16;;;;;;;;;;;;;;;;;;40584:38;40479:151::o;20626:173::-;20682:16;20701:6;;;;;;;;;;;20682:25;;20727:8;20718:6;;:17;;;;;;;;;;;;;;;;;;20782:8;20751:40;;20772:8;20751:40;;;;;;;;;;;;20671:128;20626:173;:::o;40638:728::-;40715:6;40734:10;40747:1;40734:14;;40764:8;40759:102;40782:1;40778;:5;;;40759:102;;;40814:13;:27;40828:12;;;;;;;;;;;40814:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;40805:44;;;;;:::i;:::-;;;40785:3;;;;;:::i;:::-;;;;40759:102;;;;40873:11;40973:5;41026:1;41011:12;:16;;;;:::i;:::-;41001:27;41051:14;41088:16;41127:10;41160:12;;41195:5;41223:12;;41258;;;;;;;;;;;40934:355;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40906:398;;;;;;40887:428;;40873:442;;41351:6;41342;:15;;;;:::i;:::-;41328:30;;;;40638:728;;;;:::o;27303:315::-;27460:28;27470:4;27476:2;27480:7;27460:9;:28::i;:::-;27507:48;27530:4;27536:2;27540:7;27549:5;27507:22;:48::i;:::-;27499:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27303:315;;;;:::o;42818:100::-;42870:13;42903:7;42896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42818:100;:::o;1900:723::-;1956:13;2186:1;2177:5;:10;2173:53;;;2204:10;;;;;;;;;;;;;;;;;;;;;2173:53;2236:12;2251:5;2236:20;;2267:14;2292:78;2307:1;2299:4;:9;2292:78;;2325:8;;;;;:::i;:::-;;;;2356:2;2348:10;;;;;:::i;:::-;;;2292:78;;;2380:19;2412:6;2402:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:39;;2430:154;2446:1;2437:5;:10;2430:154;;2474:1;2464:11;;;;;:::i;:::-;;;2541:2;2533:5;:10;;;;:::i;:::-;2520:2;:24;;;;:::i;:::-;2507:39;;2490:6;2497;2490:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2570:2;2561:11;;;;;:::i;:::-;;;2430:154;;;2608:6;2594:21;;;;;1900:723;;;;:::o;34023:126::-;;;;:::o;29252:321::-;29382:18;29388:2;29392:7;29382:5;:18::i;:::-;29433:54;29464:1;29468:2;29472:7;29481:5;29433:22;:54::i;:::-;29411:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29252:321;;;:::o;32652:799::-;32807:4;32828:15;:2;:13;;;:15::i;:::-;32824:620;;;32880:2;32864:36;;;32901:12;:10;:12::i;:::-;32915:4;32921:7;32930:5;32864:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32860:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33123:1;33106:6;:13;:18;33102:272;;;33149:60;;;;;;;;;;:::i;:::-;;;;;;;;33102:272;33324:6;33318:13;33309:6;33305:2;33301:15;33294:38;32860:529;32997:41;;;32987:51;;;:6;:51;;;;32980:58;;;;;32824:620;33428:4;33421:11;;32652:799;;;;;;;:::o;29909:382::-;30003:1;29989:16;;:2;:16;;;;29981:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30062:16;30070:7;30062;:16::i;:::-;30061:17;30053:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:45;30153:1;30157:2;30161:7;30124:20;:45::i;:::-;30199:1;30182:9;:13;30192:2;30182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30230:2;30211:7;:16;30219:7;30211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30275:7;30271:2;30250:33;;30267:1;30250:33;;;;;;;;;;;;29909:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:329::-;2084:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:119;;;2139:79;;:::i;:::-;2101:119;2259:1;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2230:117;2025:329;;;;:::o;2360:99::-;2412:6;2446:5;2440:12;2430:22;;2360:99;;;:::o;2465:169::-;2549:11;2583:6;2578:3;2571:19;2623:4;2618:3;2614:14;2599:29;;2465:169;;;;:::o;2640:307::-;2708:1;2718:113;2732:6;2729:1;2726:13;2718:113;;;2817:1;2812:3;2808:11;2802:18;2798:1;2793:3;2789:11;2782:39;2754:2;2751:1;2747:10;2742:15;;2718:113;;;2849:6;2846:1;2843:13;2840:101;;;2929:1;2920:6;2915:3;2911:16;2904:27;2840:101;2689:258;2640:307;;;:::o;2953:102::-;2994:6;3045:2;3041:7;3036:2;3029:5;3025:14;3021:28;3011:38;;2953:102;;;:::o;3061:364::-;3149:3;3177:39;3210:5;3177:39;:::i;:::-;3232:71;3296:6;3291:3;3232:71;:::i;:::-;3225:78;;3312:52;3357:6;3352:3;3345:4;3338:5;3334:16;3312:52;:::i;:::-;3389:29;3411:6;3389:29;:::i;:::-;3384:3;3380:39;3373:46;;3153:272;3061:364;;;;:::o;3431:313::-;3544:4;3582:2;3571:9;3567:18;3559:26;;3631:9;3625:4;3621:20;3617:1;3606:9;3602:17;3595:47;3659:78;3732:4;3723:6;3659:78;:::i;:::-;3651:86;;3431:313;;;;:::o;3750:77::-;3787:7;3816:5;3805:16;;3750:77;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:474::-;4861:6;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4793:474;;;;;:::o;5273:116::-;5343:21;5358:5;5343:21;:::i;:::-;5336:5;5333:32;5323:60;;5379:1;5376;5369:12;5323:60;5273:116;:::o;5395:133::-;5438:5;5476:6;5463:20;5454:29;;5492:30;5516:5;5492:30;:::i;:::-;5395:133;;;;:::o;5534:323::-;5590:6;5639:2;5627:9;5618:7;5614:23;5610:32;5607:119;;;5645:79;;:::i;:::-;5607:119;5765:1;5790:50;5832:7;5823:6;5812:9;5808:22;5790:50;:::i;:::-;5780:60;;5736:114;5534:323;;;;:::o;5863:118::-;5950:24;5968:5;5950:24;:::i;:::-;5945:3;5938:37;5863:118;;:::o;5987:222::-;6080:4;6118:2;6107:9;6103:18;6095:26;;6131:71;6199:1;6188:9;6184:17;6175:6;6131:71;:::i;:::-;5987:222;;;;:::o;6215:89::-;6251:7;6291:6;6284:5;6280:18;6269:29;;6215:89;;;:::o;6310:120::-;6382:23;6399:5;6382:23;:::i;:::-;6375:5;6372:34;6362:62;;6420:1;6417;6410:12;6362:62;6310:120;:::o;6436:137::-;6481:5;6519:6;6506:20;6497:29;;6535:32;6561:5;6535:32;:::i;:::-;6436:137;;;;:::o;6579:466::-;6643:6;6651;6700:2;6688:9;6679:7;6675:23;6671:32;6668:119;;;6706:79;;:::i;:::-;6668:119;6826:1;6851:52;6895:7;6886:6;6875:9;6871:22;6851:52;:::i;:::-;6841:62;;6797:116;6952:2;6978:50;7020:7;7011:6;7000:9;6996:22;6978:50;:::i;:::-;6968:60;;6923:115;6579:466;;;;;:::o;7051:619::-;7128:6;7136;7144;7193:2;7181:9;7172:7;7168:23;7164:32;7161:119;;;7199:79;;:::i;:::-;7161:119;7319:1;7344:53;7389:7;7380:6;7369:9;7365:22;7344:53;:::i;:::-;7334:63;;7290:117;7446:2;7472:53;7517:7;7508:6;7497:9;7493:22;7472:53;:::i;:::-;7462:63;;7417:118;7574:2;7600:53;7645:7;7636:6;7625:9;7621:22;7600:53;:::i;:::-;7590:63;;7545:118;7051:619;;;;;:::o;7676:474::-;7744:6;7752;7801:2;7789:9;7780:7;7776:23;7772:32;7769:119;;;7807:79;;:::i;:::-;7769:119;7927:1;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7898:117;8054:2;8080:53;8125:7;8116:6;8105:9;8101:22;8080:53;:::i;:::-;8070:63;;8025:118;7676:474;;;;;:::o;8156:115::-;8241:23;8258:5;8241:23;:::i;:::-;8236:3;8229:36;8156:115;;:::o;8277:218::-;8368:4;8406:2;8395:9;8391:18;8383:26;;8419:69;8485:1;8474:9;8470:17;8461:6;8419:69;:::i;:::-;8277:218;;;;:::o;8501:327::-;8559:6;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:52;8803:7;8794:6;8783:9;8779:22;8759:52;:::i;:::-;8749:62;;8705:116;8501:327;;;;:::o;8834:60::-;8862:3;8883:5;8876:12;;8834:60;;;:::o;8900:142::-;8950:9;8983:53;9001:34;9010:24;9028:5;9010:24;:::i;:::-;9001:34;:::i;:::-;8983:53;:::i;:::-;8970:66;;8900:142;;;:::o;9048:126::-;9098:9;9131:37;9162:5;9131:37;:::i;:::-;9118:50;;9048:126;;;:::o;9180:150::-;9254:9;9287:37;9318:5;9287:37;:::i;:::-;9274:50;;9180:150;;;:::o;9336:179::-;9447:61;9502:5;9447:61;:::i;:::-;9442:3;9435:74;9336:179;;:::o;9521:270::-;9638:4;9676:2;9665:9;9661:18;9653:26;;9689:95;9781:1;9770:9;9766:17;9757:6;9689:95;:::i;:::-;9521:270;;;;:::o;9797:472::-;9864:6;9872;9921:2;9909:9;9900:7;9896:23;9892:32;9889:119;;;9927:79;;:::i;:::-;9889:119;10047:1;10072:52;10116:7;10107:6;10096:9;10092:22;10072:52;:::i;:::-;10062:62;;10018:116;10173:2;10199:53;10244:7;10235:6;10224:9;10220:22;10199:53;:::i;:::-;10189:63;;10144:118;9797:472;;;;;:::o;10275:117::-;10384:1;10381;10374:12;10398:117;10507:1;10504;10497:12;10521:180;10569:77;10566:1;10559:88;10666:4;10663:1;10656:15;10690:4;10687:1;10680:15;10707:281;10790:27;10812:4;10790:27;:::i;:::-;10782:6;10778:40;10920:6;10908:10;10905:22;10884:18;10872:10;10869:34;10866:62;10863:88;;;10931:18;;:::i;:::-;10863:88;10971:10;10967:2;10960:22;10750:238;10707:281;;:::o;10994:129::-;11028:6;11055:20;;:::i;:::-;11045:30;;11084:33;11112:4;11104:6;11084:33;:::i;:::-;10994:129;;;:::o;11129:308::-;11191:4;11281:18;11273:6;11270:30;11267:56;;;11303:18;;:::i;:::-;11267:56;11341:29;11363:6;11341:29;:::i;:::-;11333:37;;11425:4;11419;11415:15;11407:23;;11129:308;;;:::o;11443:154::-;11527:6;11522:3;11517;11504:30;11589:1;11580:6;11575:3;11571:16;11564:27;11443:154;;;:::o;11603:412::-;11681:5;11706:66;11722:49;11764:6;11722:49;:::i;:::-;11706:66;:::i;:::-;11697:75;;11795:6;11788:5;11781:21;11833:4;11826:5;11822:16;11871:3;11862:6;11857:3;11853:16;11850:25;11847:112;;;11878:79;;:::i;:::-;11847:112;11968:41;12002:6;11997:3;11992;11968:41;:::i;:::-;11687:328;11603:412;;;;;:::o;12035:340::-;12091:5;12140:3;12133:4;12125:6;12121:17;12117:27;12107:122;;12148:79;;:::i;:::-;12107:122;12265:6;12252:20;12290:79;12365:3;12357:6;12350:4;12342:6;12338:17;12290:79;:::i;:::-;12281:88;;12097:278;12035:340;;;;:::o;12381:509::-;12450:6;12499:2;12487:9;12478:7;12474:23;12470:32;12467:119;;;12505:79;;:::i;:::-;12467:119;12653:1;12642:9;12638:17;12625:31;12683:18;12675:6;12672:30;12669:117;;;12705:79;;:::i;:::-;12669:117;12810:63;12865:7;12856:6;12845:9;12841:22;12810:63;:::i;:::-;12800:73;;12596:287;12381:509;;;;:::o;12896:468::-;12961:6;12969;13018:2;13006:9;12997:7;12993:23;12989:32;12986:119;;;13024:79;;:::i;:::-;12986:119;13144:1;13169:53;13214:7;13205:6;13194:9;13190:22;13169:53;:::i;:::-;13159:63;;13115:117;13271:2;13297:50;13339:7;13330:6;13319:9;13315:22;13297:50;:::i;:::-;13287:60;;13242:115;12896:468;;;;;:::o;13370:117::-;13479:1;13476;13469:12;13493:117;13602:1;13599;13592:12;13632:567;13704:8;13714:6;13764:3;13757:4;13749:6;13745:17;13741:27;13731:122;;13772:79;;:::i;:::-;13731:122;13885:6;13872:20;13862:30;;13915:18;13907:6;13904:30;13901:117;;;13937:79;;:::i;:::-;13901:117;14051:4;14043:6;14039:17;14027:29;;14105:3;14097:4;14089:6;14085:17;14075:8;14071:32;14068:41;14065:128;;;14112:79;;:::i;:::-;14065:128;13632:567;;;;;:::o;14205:557::-;14290:6;14298;14347:2;14335:9;14326:7;14322:23;14318:32;14315:119;;;14353:79;;:::i;:::-;14315:119;14501:1;14490:9;14486:17;14473:31;14531:18;14523:6;14520:30;14517:117;;;14553:79;;:::i;:::-;14517:117;14666:79;14737:7;14728:6;14717:9;14713:22;14666:79;:::i;:::-;14648:97;;;;14444:311;14205:557;;;;;:::o;14768:472::-;14835:6;14843;14892:2;14880:9;14871:7;14867:23;14863:32;14860:119;;;14898:79;;:::i;:::-;14860:119;15018:1;15043:52;15087:7;15078:6;15067:9;15063:22;15043:52;:::i;:::-;15033:62;;14989:116;15144:2;15170:53;15215:7;15206:6;15195:9;15191:22;15170:53;:::i;:::-;15160:63;;15115:118;14768:472;;;;;:::o;15246:474::-;15314:6;15322;15371:2;15359:9;15350:7;15346:23;15342:32;15339:119;;;15377:79;;:::i;:::-;15339:119;15497:1;15522:53;15567:7;15558:6;15547:9;15543:22;15522:53;:::i;:::-;15512:63;;15468:117;15624:2;15650:53;15695:7;15686:6;15675:9;15671:22;15650:53;:::i;:::-;15640:63;;15595:118;15246:474;;;;;:::o;15726:468::-;15791:6;15799;15848:2;15836:9;15827:7;15823:23;15819:32;15816:119;;;15854:79;;:::i;:::-;15816:119;15974:1;15999:53;16044:7;16035:6;16024:9;16020:22;15999:53;:::i;:::-;15989:63;;15945:117;16101:2;16127:50;16169:7;16160:6;16149:9;16145:22;16127:50;:::i;:::-;16117:60;;16072:115;15726:468;;;;;:::o;16200:307::-;16261:4;16351:18;16343:6;16340:30;16337:56;;;16373:18;;:::i;:::-;16337:56;16411:29;16433:6;16411:29;:::i;:::-;16403:37;;16495:4;16489;16485:15;16477:23;;16200:307;;;:::o;16513:410::-;16590:5;16615:65;16631:48;16672:6;16631:48;:::i;:::-;16615:65;:::i;:::-;16606:74;;16703:6;16696:5;16689:21;16741:4;16734:5;16730:16;16779:3;16770:6;16765:3;16761:16;16758:25;16755:112;;;16786:79;;:::i;:::-;16755:112;16876:41;16910:6;16905:3;16900;16876:41;:::i;:::-;16596:327;16513:410;;;;;:::o;16942:338::-;16997:5;17046:3;17039:4;17031:6;17027:17;17023:27;17013:122;;17054:79;;:::i;:::-;17013:122;17171:6;17158:20;17196:78;17270:3;17262:6;17255:4;17247:6;17243:17;17196:78;:::i;:::-;17187:87;;17003:277;16942:338;;;;:::o;17286:943::-;17381:6;17389;17397;17405;17454:3;17442:9;17433:7;17429:23;17425:33;17422:120;;;17461:79;;:::i;:::-;17422:120;17581:1;17606:53;17651:7;17642:6;17631:9;17627:22;17606:53;:::i;:::-;17596:63;;17552:117;17708:2;17734:53;17779:7;17770:6;17759:9;17755:22;17734:53;:::i;:::-;17724:63;;17679:118;17836:2;17862:53;17907:7;17898:6;17887:9;17883:22;17862:53;:::i;:::-;17852:63;;17807:118;17992:2;17981:9;17977:18;17964:32;18023:18;18015:6;18012:30;18009:117;;;18045:79;;:::i;:::-;18009:117;18150:62;18204:7;18195:6;18184:9;18180:22;18150:62;:::i;:::-;18140:72;;17935:287;17286:943;;;;;;;:::o;18235:474::-;18303:6;18311;18360:2;18348:9;18339:7;18335:23;18331:32;18328:119;;;18366:79;;:::i;:::-;18328:119;18486:1;18511:53;18556:7;18547:6;18536:9;18532:22;18511:53;:::i;:::-;18501:63;;18457:117;18613:2;18639:53;18684:7;18675:6;18664:9;18660:22;18639:53;:::i;:::-;18629:63;;18584:118;18235:474;;;;;:::o;18715:470::-;18781:6;18789;18838:2;18826:9;18817:7;18813:23;18809:32;18806:119;;;18844:79;;:::i;:::-;18806:119;18964:1;18989:52;19033:7;19024:6;19013:9;19009:22;18989:52;:::i;:::-;18979:62;;18935:116;19090:2;19116:52;19160:7;19151:6;19140:9;19136:22;19116:52;:::i;:::-;19106:62;;19061:117;18715:470;;;;;:::o;19191:141::-;19256:9;19289:37;19320:5;19289:37;:::i;:::-;19276:50;;19191:141;;;:::o;19338:161::-;19440:52;19486:5;19440:52;:::i;:::-;19435:3;19428:65;19338:161;;:::o;19505:252::-;19613:4;19651:2;19640:9;19636:18;19628:26;;19664:86;19747:1;19736:9;19732:17;19723:6;19664:86;:::i;:::-;19505:252;;;;:::o;19763:182::-;19903:34;19899:1;19891:6;19887:14;19880:58;19763:182;:::o;19951:366::-;20093:3;20114:67;20178:2;20173:3;20114:67;:::i;:::-;20107:74;;20190:93;20279:3;20190:93;:::i;:::-;20308:2;20303:3;20299:12;20292:19;;19951:366;;;:::o;20323:419::-;20489:4;20527:2;20516:9;20512:18;20504:26;;20576:9;20570:4;20566:20;20562:1;20551:9;20547:17;20540:47;20604:131;20730:4;20604:131;:::i;:::-;20596:139;;20323:419;;;:::o;20748:180::-;20796:77;20793:1;20786:88;20893:4;20890:1;20883:15;20917:4;20914:1;20907:15;20934:320;20978:6;21015:1;21009:4;21005:12;20995:22;;21062:1;21056:4;21052:12;21083:18;21073:81;;21139:4;21131:6;21127:17;21117:27;;21073:81;21201:2;21193:6;21190:14;21170:18;21167:38;21164:84;;;21220:18;;:::i;:::-;21164:84;20985:269;20934:320;;;:::o;21260:231::-;21400:34;21396:1;21388:6;21384:14;21377:58;21469:14;21464:2;21456:6;21452:15;21445:39;21260:231;:::o;21497:366::-;21639:3;21660:67;21724:2;21719:3;21660:67;:::i;:::-;21653:74;;21736:93;21825:3;21736:93;:::i;:::-;21854:2;21849:3;21845:12;21838:19;;21497:366;;;:::o;21869:419::-;22035:4;22073:2;22062:9;22058:18;22050:26;;22122:9;22116:4;22112:20;22108:1;22097:9;22093:17;22086:47;22150:131;22276:4;22150:131;:::i;:::-;22142:139;;21869:419;;;:::o;22294:220::-;22434:34;22430:1;22422:6;22418:14;22411:58;22503:3;22498:2;22490:6;22486:15;22479:28;22294:220;:::o;22520:366::-;22662:3;22683:67;22747:2;22742:3;22683:67;:::i;:::-;22676:74;;22759:93;22848:3;22759:93;:::i;:::-;22877:2;22872:3;22868:12;22861:19;;22520:366;;;:::o;22892:419::-;23058:4;23096:2;23085:9;23081:18;23073:26;;23145:9;23139:4;23135:20;23131:1;23120:9;23116:17;23109:47;23173:131;23299:4;23173:131;:::i;:::-;23165:139;;22892:419;;;:::o;23317:243::-;23457:34;23453:1;23445:6;23441:14;23434:58;23526:26;23521:2;23513:6;23509:15;23502:51;23317:243;:::o;23566:366::-;23708:3;23729:67;23793:2;23788:3;23729:67;:::i;:::-;23722:74;;23805:93;23894:3;23805:93;:::i;:::-;23923:2;23918:3;23914:12;23907:19;;23566:366;;;:::o;23938:419::-;24104:4;24142:2;24131:9;24127:18;24119:26;;24191:9;24185:4;24181:20;24177:1;24166:9;24162:17;24155:47;24219:131;24345:4;24219:131;:::i;:::-;24211:139;;23938:419;;;:::o;24363:236::-;24503:34;24499:1;24491:6;24487:14;24480:58;24572:19;24567:2;24559:6;24555:15;24548:44;24363:236;:::o;24605:366::-;24747:3;24768:67;24832:2;24827:3;24768:67;:::i;:::-;24761:74;;24844:93;24933:3;24844:93;:::i;:::-;24962:2;24957:3;24953:12;24946:19;;24605:366;;;:::o;24977:419::-;25143:4;25181:2;25170:9;25166:18;25158:26;;25230:9;25224:4;25220:20;25216:1;25205:9;25201:17;25194:47;25258:131;25384:4;25258:131;:::i;:::-;25250:139;;24977:419;;;:::o;25402:180::-;25450:77;25447:1;25440:88;25547:4;25544:1;25537:15;25571:4;25568:1;25561:15;25588:305;25628:3;25647:20;25665:1;25647:20;:::i;:::-;25642:25;;25681:20;25699:1;25681:20;:::i;:::-;25676:25;;25835:1;25767:66;25763:74;25760:1;25757:81;25754:107;;;25841:18;;:::i;:::-;25754:107;25885:1;25882;25878:9;25871:16;;25588:305;;;;:::o;25899:167::-;26039:19;26035:1;26027:6;26023:14;26016:43;25899:167;:::o;26072:366::-;26214:3;26235:67;26299:2;26294:3;26235:67;:::i;:::-;26228:74;;26311:93;26400:3;26311:93;:::i;:::-;26429:2;26424:3;26420:12;26413:19;;26072:366;;;:::o;26444:419::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:229::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:12;27073:2;27065:6;27061:15;27054:37;26869:229;:::o;27104:366::-;27246:3;27267:67;27331:2;27326:3;27267:67;:::i;:::-;27260:74;;27343:93;27432:3;27343:93;:::i;:::-;27461:2;27456:3;27452:12;27445:19;;27104:366;;;:::o;27476:419::-;27642:4;27680:2;27669:9;27665:18;27657:26;;27729:9;27723:4;27719:20;27715:1;27704:9;27700:17;27693:47;27757:131;27883:4;27757:131;:::i;:::-;27749:139;;27476:419;;;:::o;27901:233::-;27940:3;27963:24;27981:5;27963:24;:::i;:::-;27954:33;;28009:66;28002:5;27999:77;27996:103;;;28079:18;;:::i;:::-;27996:103;28126:1;28119:5;28115:13;28108:20;;27901:233;;;:::o;28140:228::-;28280:34;28276:1;28268:6;28264:14;28257:58;28349:11;28344:2;28336:6;28332:15;28325:36;28140:228;:::o;28374:366::-;28516:3;28537:67;28601:2;28596:3;28537:67;:::i;:::-;28530:74;;28613:93;28702:3;28613:93;:::i;:::-;28731:2;28726:3;28722:12;28715:19;;28374:366;;;:::o;28746:419::-;28912:4;28950:2;28939:9;28935:18;28927:26;;28999:9;28993:4;28989:20;28985:1;28974:9;28970:17;28963:47;29027:131;29153:4;29027:131;:::i;:::-;29019:139;;28746:419;;;:::o;29171:166::-;29311:18;29307:1;29299:6;29295:14;29288:42;29171:166;:::o;29343:366::-;29485:3;29506:67;29570:2;29565:3;29506:67;:::i;:::-;29499:74;;29582:93;29671:3;29582:93;:::i;:::-;29700:2;29695:3;29691:12;29684:19;;29343:366;;;:::o;29715:419::-;29881:4;29919:2;29908:9;29904:18;29896:26;;29968:9;29962:4;29958:20;29954:1;29943:9;29939:17;29932:47;29996:131;30122:4;29996:131;:::i;:::-;29988:139;;29715:419;;;:::o;30140:158::-;30280:10;30276:1;30268:6;30264:14;30257:34;30140:158;:::o;30304:365::-;30446:3;30467:66;30531:1;30526:3;30467:66;:::i;:::-;30460:73;;30542:93;30631:3;30542:93;:::i;:::-;30660:2;30655:3;30651:12;30644:19;;30304:365;;;:::o;30675:419::-;30841:4;30879:2;30868:9;30864:18;30856:26;;30928:9;30922:4;30918:20;30914:1;30903:9;30899:17;30892:47;30956:131;31082:4;30956:131;:::i;:::-;30948:139;;30675:419;;;:::o;31100:169::-;31240:21;31236:1;31228:6;31224:14;31217:45;31100:169;:::o;31275:366::-;31417:3;31438:67;31502:2;31497:3;31438:67;:::i;:::-;31431:74;;31514:93;31603:3;31514:93;:::i;:::-;31632:2;31627:3;31623:12;31616:19;;31275:366;;;:::o;31647:419::-;31813:4;31851:2;31840:9;31836:18;31828:26;;31900:9;31894:4;31890:20;31886:1;31875:9;31871:17;31864:47;31928:131;32054:4;31928:131;:::i;:::-;31920:139;;31647:419;;;:::o;32072:172::-;32212:24;32208:1;32200:6;32196:14;32189:48;32072:172;:::o;32250:366::-;32392:3;32413:67;32477:2;32472:3;32413:67;:::i;:::-;32406:74;;32489:93;32578:3;32489:93;:::i;:::-;32607:2;32602:3;32598:12;32591:19;;32250:366;;;:::o;32622:419::-;32788:4;32826:2;32815:9;32811:18;32803:26;;32875:9;32869:4;32865:20;32861:1;32850:9;32846:17;32839:47;32903:131;33029:4;32903:131;:::i;:::-;32895:139;;32622:419;;;:::o;33047:179::-;33187:31;33183:1;33175:6;33171:14;33164:55;33047:179;:::o;33232:366::-;33374:3;33395:67;33459:2;33454:3;33395:67;:::i;:::-;33388:74;;33471:93;33560:3;33471:93;:::i;:::-;33589:2;33584:3;33580:12;33573:19;;33232:366;;;:::o;33604:419::-;33770:4;33808:2;33797:9;33793:18;33785:26;;33857:9;33851:4;33847:20;33843:1;33832:9;33828:17;33821:47;33885:131;34011:4;33885:131;:::i;:::-;33877:139;;33604:419;;;:::o;34029:143::-;34086:5;34117:6;34111:13;34102:22;;34133:33;34160:5;34133:33;:::i;:::-;34029:143;;;;:::o;34178:351::-;34248:6;34297:2;34285:9;34276:7;34272:23;34268:32;34265:119;;;34303:79;;:::i;:::-;34265:119;34423:1;34448:64;34504:7;34495:6;34484:9;34480:22;34448:64;:::i;:::-;34438:74;;34394:128;34178:351;;;;:::o;34535:166::-;34675:18;34671:1;34663:6;34659:14;34652:42;34535:166;:::o;34707:366::-;34849:3;34870:67;34934:2;34929:3;34870:67;:::i;:::-;34863:74;;34946:93;35035:3;34946:93;:::i;:::-;35064:2;35059:3;35055:12;35048:19;;34707:366;;;:::o;35079:419::-;35245:4;35283:2;35272:9;35268:18;35260:26;;35332:9;35326:4;35322:20;35318:1;35307:9;35303:17;35296:47;35360:131;35486:4;35360:131;:::i;:::-;35352:139;;35079:419;;;:::o;35504:332::-;35625:4;35663:2;35652:9;35648:18;35640:26;;35676:71;35744:1;35733:9;35729:17;35720:6;35676:71;:::i;:::-;35757:72;35825:2;35814:9;35810:18;35801:6;35757:72;:::i;:::-;35504:332;;;;;:::o;35842:242::-;35881:3;35900:19;35917:1;35900:19;:::i;:::-;35895:24;;35933:19;35950:1;35933:19;:::i;:::-;35928:24;;36026:1;36018:6;36014:14;36011:1;36008:21;36005:47;;;36032:18;;:::i;:::-;36005:47;36076:1;36073;36069:9;36062:16;;35842:242;;;;:::o;36090:180::-;36138:77;36135:1;36128:88;36235:4;36232:1;36225:15;36259:4;36256:1;36249:15;36276:113;36342:6;36376:5;36370:12;36360:22;;36276:113;;;:::o;36395:183::-;36493:11;36527:6;36522:3;36515:19;36567:4;36562:3;36558:14;36543:29;;36395:183;;;;:::o;36584:131::-;36650:4;36673:3;36665:11;;36703:4;36698:3;36694:14;36686:22;;36584:131;;;:::o;36721:105::-;36796:23;36813:5;36796:23;:::i;:::-;36791:3;36784:36;36721:105;;:::o;36832:175::-;36899:10;36920:44;36960:3;36952:6;36920:44;:::i;:::-;36996:4;36991:3;36987:14;36973:28;;36832:175;;;;:::o;37013:112::-;37082:4;37114;37109:3;37105:14;37097:22;;37013:112;;;:::o;37159:724::-;37276:3;37305:53;37352:5;37305:53;:::i;:::-;37374:85;37452:6;37447:3;37374:85;:::i;:::-;37367:92;;37483:55;37532:5;37483:55;:::i;:::-;37561:7;37592:1;37577:281;37602:6;37599:1;37596:13;37577:281;;;37678:6;37672:13;37705:61;37762:3;37747:13;37705:61;:::i;:::-;37698:68;;37789:59;37841:6;37789:59;:::i;:::-;37779:69;;37637:221;37624:1;37621;37617:9;37612:14;;37577:281;;;37581:14;37874:3;37867:10;;37281:602;;;37159:724;;;;:::o;37889:479::-;38058:4;38096:2;38085:9;38081:18;38073:26;;38109:71;38177:1;38166:9;38162:17;38153:6;38109:71;:::i;:::-;38227:9;38221:4;38217:20;38212:2;38201:9;38197:18;38190:48;38255:106;38356:4;38347:6;38255:106;:::i;:::-;38247:114;;37889:479;;;;;:::o;38374:229::-;38514:34;38510:1;38502:6;38498:14;38491:58;38583:12;38578:2;38570:6;38566:15;38559:37;38374:229;:::o;38609:366::-;38751:3;38772:67;38836:2;38831:3;38772:67;:::i;:::-;38765:74;;38848:93;38937:3;38848:93;:::i;:::-;38966:2;38961:3;38957:12;38950:19;;38609:366;;;:::o;38981:419::-;39147:4;39185:2;39174:9;39170:18;39162:26;;39234:9;39228:4;39224:20;39220:1;39209:9;39205:17;39198:47;39262:131;39388:4;39262:131;:::i;:::-;39254:139;;38981:419;;;:::o;39406:175::-;39546:27;39542:1;39534:6;39530:14;39523:51;39406:175;:::o;39587:366::-;39729:3;39750:67;39814:2;39809:3;39750:67;:::i;:::-;39743:74;;39826:93;39915:3;39826:93;:::i;:::-;39944:2;39939:3;39935:12;39928:19;;39587:366;;;:::o;39959:419::-;40125:4;40163:2;40152:9;40148:18;40140:26;;40212:9;40206:4;40202:20;40198:1;40187:9;40183:17;40176:47;40240:131;40366:4;40240:131;:::i;:::-;40232:139;;39959:419;;;:::o;40384:234::-;40524:34;40520:1;40512:6;40508:14;40501:58;40593:17;40588:2;40580:6;40576:15;40569:42;40384:234;:::o;40624:366::-;40766:3;40787:67;40851:2;40846:3;40787:67;:::i;:::-;40780:74;;40863:93;40952:3;40863:93;:::i;:::-;40981:2;40976:3;40972:12;40965:19;;40624:366;;;:::o;40996:419::-;41162:4;41200:2;41189:9;41185:18;41177:26;;41249:9;41243:4;41239:20;41235:1;41224:9;41220:17;41213:47;41277:131;41403:4;41277:131;:::i;:::-;41269:139;;40996:419;;;:::o;41421:148::-;41523:11;41560:3;41545:18;;41421:148;;;;:::o;41575:377::-;41681:3;41709:39;41742:5;41709:39;:::i;:::-;41764:89;41846:6;41841:3;41764:89;:::i;:::-;41757:96;;41862:52;41907:6;41902:3;41895:4;41888:5;41884:16;41862:52;:::i;:::-;41939:6;41934:3;41930:16;41923:23;;41685:267;41575:377;;;;:::o;41958:435::-;42138:3;42160:95;42251:3;42242:6;42160:95;:::i;:::-;42153:102;;42272:95;42363:3;42354:6;42272:95;:::i;:::-;42265:102;;42384:3;42377:10;;41958:435;;;;;:::o;42399:348::-;42439:7;42462:20;42480:1;42462:20;:::i;:::-;42457:25;;42496:20;42514:1;42496:20;:::i;:::-;42491:25;;42684:1;42616:66;42612:74;42609:1;42606:81;42601:1;42594:9;42587:17;42583:105;42580:131;;;42691:18;;:::i;:::-;42580:131;42739:1;42736;42732:9;42721:20;;42399:348;;;;:::o;42753:225::-;42893:34;42889:1;42881:6;42877:14;42870:58;42962:8;42957:2;42949:6;42945:15;42938:33;42753:225;:::o;42984:366::-;43126:3;43147:67;43211:2;43206:3;43147:67;:::i;:::-;43140:74;;43223:93;43312:3;43223:93;:::i;:::-;43341:2;43336:3;43332:12;43325:19;;42984:366;;;:::o;43356:419::-;43522:4;43560:2;43549:9;43545:18;43537:26;;43609:9;43603:4;43599:20;43595:1;43584:9;43580:17;43573:47;43637:131;43763:4;43637:131;:::i;:::-;43629:139;;43356:419;;;:::o;43781:231::-;43921:34;43917:1;43909:6;43905:14;43898:58;43990:14;43985:2;43977:6;43973:15;43966:39;43781:231;:::o;44018:366::-;44160:3;44181:67;44245:2;44240:3;44181:67;:::i;:::-;44174:74;;44257:93;44346:3;44257:93;:::i;:::-;44375:2;44370:3;44366:12;44359:19;;44018:366;;;:::o;44390:419::-;44556:4;44594:2;44583:9;44579:18;44571:26;;44643:9;44637:4;44633:20;44629:1;44618:9;44614:17;44607:47;44671:131;44797:4;44671:131;:::i;:::-;44663:139;;44390:419;;;:::o;44815:228::-;44955:34;44951:1;44943:6;44939:14;44932:58;45024:11;45019:2;45011:6;45007:15;45000:36;44815:228;:::o;45049:366::-;45191:3;45212:67;45276:2;45271:3;45212:67;:::i;:::-;45205:74;;45288:93;45377:3;45288:93;:::i;:::-;45406:2;45401:3;45397:12;45390:19;;45049:366;;;:::o;45421:419::-;45587:4;45625:2;45614:9;45610:18;45602:26;;45674:9;45668:4;45664:20;45660:1;45649:9;45645:17;45638:47;45702:131;45828:4;45702:131;:::i;:::-;45694:139;;45421:419;;;:::o;45846:223::-;45986:34;45982:1;45974:6;45970:14;45963:58;46055:6;46050:2;46042:6;46038:15;46031:31;45846:223;:::o;46075:366::-;46217:3;46238:67;46302:2;46297:3;46238:67;:::i;:::-;46231:74;;46314:93;46403:3;46314:93;:::i;:::-;46432:2;46427:3;46423:12;46416:19;;46075:366;;;:::o;46447:419::-;46613:4;46651:2;46640:9;46636:18;46628:26;;46700:9;46694:4;46690:20;46686:1;46675:9;46671:17;46664:47;46728:131;46854:4;46728:131;:::i;:::-;46720:139;;46447:419;;;:::o;46872:191::-;46912:4;46932:20;46950:1;46932:20;:::i;:::-;46927:25;;46966:20;46984:1;46966:20;:::i;:::-;46961:25;;47005:1;47002;46999:8;46996:34;;;47010:18;;:::i;:::-;46996:34;47055:1;47052;47048:9;47040:17;;46872:191;;;;:::o;47069:180::-;47117:77;47114:1;47107:88;47214:4;47211:1;47204:15;47238:4;47235:1;47228:15;47255:171;47293:3;47316:23;47333:5;47316:23;:::i;:::-;47307:32;;47361:6;47354:5;47351:17;47348:43;;;47371:18;;:::i;:::-;47348:43;47418:1;47411:5;47407:13;47400:20;;47255:171;;;:::o;47432:79::-;47471:7;47500:5;47489:16;;47432:79;;;:::o;47517:157::-;47622:45;47642:24;47660:5;47642:24;:::i;:::-;47622:45;:::i;:::-;47617:3;47610:58;47517:157;;:::o;47680:77::-;47717:7;47746:5;47735:16;;47680:77;;;:::o;47763:79::-;47802:7;47831:5;47820:16;;47763:79;;;:::o;47848:157::-;47953:45;47973:24;47991:5;47973:24;:::i;:::-;47953:45;:::i;:::-;47948:3;47941:58;47848:157;;:::o;48011:104::-;48056:7;48085:24;48103:5;48085:24;:::i;:::-;48074:35;;48011:104;;;:::o;48121:94::-;48154:8;48202:5;48198:2;48194:14;48173:35;;48121:94;;;:::o;48221:::-;48260:7;48289:20;48303:5;48289:20;:::i;:::-;48278:31;;48221:94;;;:::o;48321:108::-;48368:7;48397:26;48417:5;48397:26;:::i;:::-;48386:37;;48321:108;;;:::o;48435:189::-;48556:61;48584:32;48610:5;48584:32;:::i;:::-;48556:61;:::i;:::-;48551:3;48544:74;48435:189;;:::o;48630:100::-;48669:7;48698:26;48718:5;48698:26;:::i;:::-;48687:37;;48630:100;;;:::o;48736:157::-;48841:45;48861:24;48879:5;48861:24;:::i;:::-;48841:45;:::i;:::-;48836:3;48829:58;48736:157;;:::o;48899:96::-;48933:8;48982:5;48977:3;48973:15;48952:36;;48899:96;;;:::o;49001:94::-;49039:7;49068:21;49083:5;49068:21;:::i;:::-;49057:32;;49001:94;;;:::o;49101:153::-;49204:43;49223:23;49240:5;49223:23;:::i;:::-;49204:43;:::i;:::-;49199:3;49192:56;49101:153;;:::o;49260:1411::-;49610:3;49625:75;49696:3;49687:6;49625:75;:::i;:::-;49725:2;49720:3;49716:12;49709:19;;49738:75;49809:3;49800:6;49738:75;:::i;:::-;49838:2;49833:3;49829:12;49822:19;;49851:91;49938:3;49929:6;49851:91;:::i;:::-;49967:2;49962:3;49958:12;49951:19;;49980:75;50051:3;50042:6;49980:75;:::i;:::-;50080:2;50075:3;50071:12;50064:19;;50093:75;50164:3;50155:6;50093:75;:::i;:::-;50193:2;50188:3;50184:12;50177:19;;50206:75;50277:3;50268:6;50206:75;:::i;:::-;50306:2;50301:3;50297:12;50290:19;;50319:75;50390:3;50381:6;50319:75;:::i;:::-;50419:2;50414:3;50410:12;50403:19;;50432:75;50503:3;50494:6;50432:75;:::i;:::-;50532:2;50527:3;50523:12;50516:19;;50545:73;50614:3;50605:6;50545:73;:::i;:::-;50643:1;50638:3;50634:11;50627:18;;50662:3;50655:10;;49260:1411;;;;;;;;;;;;:::o;50677:180::-;50725:77;50722:1;50715:88;50822:4;50819:1;50812:15;50846:4;50843:1;50836:15;50863:176;50895:1;50912:20;50930:1;50912:20;:::i;:::-;50907:25;;50946:20;50964:1;50946:20;:::i;:::-;50941:25;;50985:1;50975:35;;50990:18;;:::i;:::-;50975:35;51031:1;51028;51024:9;51019:14;;50863:176;;;;:::o;51045:237::-;51185:34;51181:1;51173:6;51169:14;51162:58;51254:20;51249:2;51241:6;51237:15;51230:45;51045:237;:::o;51288:366::-;51430:3;51451:67;51515:2;51510:3;51451:67;:::i;:::-;51444:74;;51527:93;51616:3;51527:93;:::i;:::-;51645:2;51640:3;51636:12;51629:19;;51288:366;;;:::o;51660:419::-;51826:4;51864:2;51853:9;51849:18;51841:26;;51913:9;51907:4;51903:20;51899:1;51888:9;51884:17;51877:47;51941:131;52067:4;51941:131;:::i;:::-;51933:139;;51660:419;;;:::o;52085:185::-;52125:1;52142:20;52160:1;52142:20;:::i;:::-;52137:25;;52176:20;52194:1;52176:20;:::i;:::-;52171:25;;52215:1;52205:35;;52220:18;;:::i;:::-;52205:35;52262:1;52259;52255:9;52250:14;;52085:185;;;;:::o;52276:98::-;52327:6;52361:5;52355:12;52345:22;;52276:98;;;:::o;52380:168::-;52463:11;52497:6;52492:3;52485:19;52537:4;52532:3;52528:14;52513:29;;52380:168;;;;:::o;52554:360::-;52640:3;52668:38;52700:5;52668:38;:::i;:::-;52722:70;52785:6;52780:3;52722:70;:::i;:::-;52715:77;;52801:52;52846:6;52841:3;52834:4;52827:5;52823:16;52801:52;:::i;:::-;52878:29;52900:6;52878:29;:::i;:::-;52873:3;52869:39;52862:46;;52644:270;52554:360;;;;:::o;52920:640::-;53115:4;53153:3;53142:9;53138:19;53130:27;;53167:71;53235:1;53224:9;53220:17;53211:6;53167:71;:::i;:::-;53248:72;53316:2;53305:9;53301:18;53292:6;53248:72;:::i;:::-;53330;53398:2;53387:9;53383:18;53374:6;53330:72;:::i;:::-;53449:9;53443:4;53439:20;53434:2;53423:9;53419:18;53412:48;53477:76;53548:4;53539:6;53477:76;:::i;:::-;53469:84;;52920:640;;;;;;;:::o;53566:141::-;53622:5;53653:6;53647:13;53638:22;;53669:32;53695:5;53669:32;:::i;:::-;53566:141;;;;:::o;53713:349::-;53782:6;53831:2;53819:9;53810:7;53806:23;53802:32;53799:119;;;53837:79;;:::i;:::-;53799:119;53957:1;53982:63;54037:7;54028:6;54017:9;54013:22;53982:63;:::i;:::-;53972:73;;53928:127;53713:349;;;;:::o;54068:182::-;54208:34;54204:1;54196:6;54192:14;54185:58;54068:182;:::o;54256:366::-;54398:3;54419:67;54483:2;54478:3;54419:67;:::i;:::-;54412:74;;54495:93;54584:3;54495:93;:::i;:::-;54613:2;54608:3;54604:12;54597:19;;54256:366;;;:::o;54628:419::-;54794:4;54832:2;54821:9;54817:18;54809:26;;54881:9;54875:4;54871:20;54867:1;54856:9;54852:17;54845:47;54909:131;55035:4;54909:131;:::i;:::-;54901:139;;54628:419;;;:::o;55053:178::-;55193:30;55189:1;55181:6;55177:14;55170:54;55053:178;:::o;55237:366::-;55379:3;55400:67;55464:2;55459:3;55400:67;:::i;:::-;55393:74;;55476:93;55565:3;55476:93;:::i;:::-;55594:2;55589:3;55585:12;55578:19;;55237:366;;;:::o;55609:419::-;55775:4;55813:2;55802:9;55798:18;55790:26;;55862:9;55856:4;55852:20;55848:1;55837:9;55833:17;55826:47;55890:131;56016:4;55890:131;:::i;:::-;55882:139;;55609:419;;;:::o
Swarm Source
ipfs://cf70cdf78b7f7be53483597f5cd1a1c2c3dc9b0ed0982237456e3c6bcbf88956
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.