ERC-721
NFT
Overview
Max Total Supply
1,190 GNZ-11
Holders
234
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 GNZ-11Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GNZ11
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @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; } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @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(to).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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: openzeppelin/contracts/utils/cryptography/MerkleProof.sol pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256( abi.encodePacked(computedHash, proofElement) ); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256( abi.encodePacked(proofElement, computedHash) ); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } // File: GNZ11.sol pragma solidity ^0.8.0; /// @author Hammad Ghazi contract GNZ11 is ERC721Enumerable, Ownable { using Counters for Counters.Counter; using MerkleProof for bytes32[]; Counters.Counter private _tokenId; uint256 public constant MAX_SUPPLY = 11090; uint256 public price = 100000000000000000; //0.1 Ether uint256 public presalePrice = 80000000000000000; //0.08 Ether uint8 public countLimit = 20; string baseTokenURI; bytes32 public merkleRoot; bool public saleOpen = false; bool public presaleOpen = false; event GNZ11Minted(uint256 totalMinted); constructor(string memory baseURI) ERC721("GNZ-11", "GNZ-11") { setBaseURI(baseURI); } //Get token Ids of all tokens owned by _owner function walletOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setPublicCountLimit(uint8 _newCountLimit) external onlyOwner { countLimit = _newCountLimit; } function changePrice(uint256 _newPrice) external onlyOwner { price = _newPrice; } function changePresalePrice(uint256 _PresalePrice) external onlyOwner { presalePrice = _PresalePrice; } //Close sale if open, open sale if closed function flipSaleState() external onlyOwner { saleOpen = !saleOpen; } function flipPresaleState() external onlyOwner { presaleOpen = !presaleOpen; } function withdrawAll() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No funds"); _widthdraw( 0xfFcA1E49B0810a12EF83D0F4403E476521d5f729, (balance * 2025) / 10000 ); _widthdraw( 0xd0EE81D4262fFBeC384aBC0E3efc1eF4Cc1186Dd, (balance * 9) / 100 ); _widthdraw( 0xDD812AC574b1575880dc0017d870a9b200864072, (balance * 315) / 1000 ); _widthdraw( 0xf489E2EeBe635A91564a1B05D66571B631907F0E, (balance * 2925) / 10000 ); _widthdraw( 0x9d109cC07711149d70153dad627e1D34cb3d8219, (balance * 10) / 100 ); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = payable(_address).call{value: _amount}(""); require(success, "Transfer failed."); } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function airdrop(address[] calldata _recipients) external onlyOwner { require( totalSupply() + _recipients.length <= MAX_SUPPLY, "Airdrop will exceed maximum supply of GNZ-11" ); require(_recipients.length != 0, "Address not found"); for (uint256 i = 0; i < _recipients.length; i++) { require(_recipients[i] != address(0), "Airdrop to Null address"); _mint(_recipients[i]); } } function presaleMint(bytes32[] calldata _proof, uint256 _count) external payable { address user = msg.sender; require( merkleRoot != 0, "No address is eligible for presale minting yet" ); require(presaleOpen, "Presale is not open yet"); require(!saleOpen, "Presale is closed"); require( MerkleProof.verify( _proof, merkleRoot, keccak256(abi.encodePacked(user)) ), "Address not eligible for presale mint" ); require( totalSupply() + _count <= 5000, "Transaction will exceed maximum NFTs alloted for presale" ); require( _count > 0 && _count <= 20, "Minimum 1 and Maximum 20 GNZ-11 can be minted per transaction" ); require( msg.value >= presalePrice * _count, "Ether sent with this transaction is not correct" ); for (uint256 i = 0; i < _count; i++) { _mint(user); } } //mint GNZ11 function mintGNZ11(uint256 _count) external payable { require( totalSupply() + _count <= MAX_SUPPLY, "Exceeds maximum supply of GNZ-11" ); require( _count > 0, "Minimum 1 GNZ-11 has to be minted per transaction" ); address _to = msg.sender; if (_to != owner()) { require(saleOpen, "Sale is not open yet"); require( _count <= countLimit, "Count exceeds maximum mint limit per transaction" ); require( msg.value >= price * _count, "Ether sent with this transaction is not correct" ); } for (uint256 i = 0; i < _count; i++) { _mint(_to); } } function _mint(address _to) private { _tokenId.increment(); uint256 tokenId = _tokenId.current(); _safeMint(_to, tokenId); emit GNZ11Minted(tokenId); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":false,"internalType":"uint256","name":"totalMinted","type":"uint256"}],"name":"GNZ11Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"}],"name":"airdrop","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":"uint256","name":"_PresalePrice","type":"uint256"}],"name":"changePresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintGNZ11","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newCountLimit","type":"uint8"}],"name":"setPublicCountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405267016345785d8a0000600c5567011c37937e080000600d556014600e60006101000a81548160ff021916908360ff1602179055506000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200007b57600080fd5b5060405162005c4438038062005c448339818101604052810190620000a191906200044a565b6040518060400160405280600681526020017f474e5a2d313100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f474e5a2d313100000000000000000000000000000000000000000000000000008152508160009080519060200190620001259291906200031c565b5080600190805190602001906200013e9291906200031c565b50505062000161620001556200017960201b60201c565b6200018160201b60201c565b62000172816200024760201b60201c565b50620006a2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002576200017960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200027d620002f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cd90620004c2565b60405180910390fd5b80600f9080519060200190620002ee9291906200031c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200032a906200058a565b90600052602060002090601f0160209004810192826200034e57600085556200039a565b82601f106200036957805160ff19168380011785556200039a565b828001600101855582156200039a579182015b82811115620003995782518255916020019190600101906200037c565b5b509050620003a99190620003ad565b5090565b5b80821115620003c8576000816000905550600101620003ae565b5090565b6000620003e3620003dd846200050d565b620004e4565b90508281526020810184848401111562000402576200040162000659565b5b6200040f84828562000554565b509392505050565b600082601f8301126200042f576200042e62000654565b5b815162000441848260208601620003cc565b91505092915050565b60006020828403121562000463576200046262000663565b5b600082015167ffffffffffffffff8111156200048457620004836200065e565b5b620004928482850162000417565b91505092915050565b6000620004aa60208362000543565b9150620004b78262000679565b602082019050919050565b60006020820190508181036000830152620004dd816200049b565b9050919050565b6000620004f062000503565b9050620004fe8282620005c0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200052b576200052a62000625565b5b620005368262000668565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200057457808201518184015260208101905062000557565b8381111562000584576000848401525b50505050565b60006002820490506001821680620005a357607f821691505b60208210811415620005ba57620005b9620005f6565b5b50919050565b620005cb8262000668565b810181811067ffffffffffffffff82111715620005ed57620005ec62000625565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61559280620006b26000396000f3fe6080604052600436106102245760003560e01c8063715018a611610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd146107d1578063e985e9c51461080e578063f2fde38b1461084b578063f81227d414610874578063fde5f5481461088b57610224565b8063a22cb46514610700578063a2b40d1914610729578063b88d4fde14610752578063bc94ce3d1461077b578063bee6348a146107a657610224565b80638606d938116100f25780638606d9381461062b5780638da5cb5b1461065457806395d89b411461067f57806399288dbb146106aa578063a035b1fe146106d557610224565b8063715018a6146105ab578063729ad39e146105c25780637cb64759146105eb578063853828b61461061457610224565b806332cb6b0c116101b15780634f6ccce7116101755780634f6ccce7146104a257806355f804b3146104df57806361abfd16146105085780636352211e1461053157806370a082311461056e57610224565b806332cb6b0c146103de57806334918dfd146104095780633dd26e721461042057806342842e0e1461043c578063438b63001461046557610224565b8063095ea7b3116101f8578063095ea7b3146102f957806318160ddd1461032257806323b872dd1461034d5780632eb4a7ab146103765780632f745c59146103a157610224565b80620e7fa81461022957806301ffc9a71461025457806306fdde0314610291578063081812fc146102bc575b600080fd5b34801561023557600080fd5b5061023e6108a7565b60405161024b9190614692565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061398a565b6108ad565b60405161028891906141fa565b60405180910390f35b34801561029d57600080fd5b506102a6610927565b6040516102b39190614230565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190613a2d565b6109b9565b6040516102f09190614171565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613870565b610a3e565b005b34801561032e57600080fd5b50610337610b56565b6040516103449190614692565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061375a565b610b63565b005b34801561038257600080fd5b5061038b610bc3565b6040516103989190614215565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613870565b610bc9565b6040516103d59190614692565b60405180910390f35b3480156103ea57600080fd5b506103f3610c6e565b6040516104009190614692565b60405180910390f35b34801561041557600080fd5b5061041e610c74565b005b61043a60048036038101906104359190613a2d565b610d1c565b005b34801561044857600080fd5b50610463600480360381019061045e919061375a565b610f16565b005b34801561047157600080fd5b5061048c600480360381019061048791906136ed565b610f36565b60405161049991906141d8565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613a2d565b610fe4565b6040516104d69190614692565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906139e4565b611055565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613a5a565b6110eb565b005b34801561053d57600080fd5b5061055860048036038101906105539190613a2d565b611185565b6040516105659190614171565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906136ed565b611237565b6040516105a29190614692565b60405180910390f35b3480156105b757600080fd5b506105c06112ef565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906138b0565b611377565b005b3480156105f757600080fd5b50610612600480360381019061060d919061395d565b611581565b005b34801561062057600080fd5b50610629611607565b005b34801561063757600080fd5b50610652600480360381019061064d9190613a2d565b6117e2565b005b34801561066057600080fd5b50610669611868565b6040516106769190614171565b60405180910390f35b34801561068b57600080fd5b50610694611892565b6040516106a19190614230565b60405180910390f35b3480156106b657600080fd5b506106bf611924565b6040516106cc91906141fa565b60405180910390f35b3480156106e157600080fd5b506106ea611937565b6040516106f79190614692565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613830565b61193d565b005b34801561073557600080fd5b50610750600480360381019061074b9190613a2d565b611abe565b005b34801561075e57600080fd5b50610779600480360381019061077491906137ad565b611b44565b005b34801561078757600080fd5b50610790611ba6565b60405161079d91906146ad565b60405180910390f35b3480156107b257600080fd5b506107bb611bb9565b6040516107c891906141fa565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613a2d565b611bcc565b6040516108059190614230565b60405180910390f35b34801561081a57600080fd5b506108356004803603810190610830919061371a565b611c73565b60405161084291906141fa565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906136ed565b611d07565b005b34801561088057600080fd5b50610889611dff565b005b6108a560048036038101906108a091906138fd565b611ea7565b005b600d5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610920575061091f8261216b565b5b9050919050565b606060008054610936906149b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610962906149b8565b80156109af5780601f10610984576101008083540402835291602001916109af565b820191906000526020600020905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b60006109c48261224d565b610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa906144f2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4982611185565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab1906145b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad96122b9565b73ffffffffffffffffffffffffffffffffffffffff161480610b085750610b0781610b026122b9565b611c73565b5b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90614472565b60405180910390fd5b610b5183836122c1565b505050565b6000600880549050905090565b610b74610b6e6122b9565b8261237a565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90614612565b60405180910390fd5b610bbe838383612458565b505050565b60105481565b6000610bd483611237565b8210610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c906142b2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b612b5281565b610c7c6122b9565b73ffffffffffffffffffffffffffffffffffffffff16610c9a611868565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790614532565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b612b5281610d28610b56565b610d3291906147d6565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90614272565b60405180910390fd5b60008111610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90614312565b60405180910390fd5b6000339050610dc3611868565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610eea57601160009054906101000a900460ff16610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906143f2565b60405180910390fd5b600e60009054906101000a900460ff1660ff16821115610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614252565b60405180910390fd5b81600c54610ea7919061485d565b341015610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614512565b60405180910390fd5b5b60005b82811015610f1157610efe826126b4565b8080610f0990614a1b565b915050610eed565b505050565b610f3183838360405180602001604052806000815250611b44565b505050565b60606000610f4383611237565b905060008167ffffffffffffffff811115610f6157610f60614bae565b5b604051908082528060200260200182016040528015610f8f5781602001602082028036833780820191505090505b50905060005b82811015610fd957610fa78582610bc9565b828281518110610fba57610fb9614b7f565b5b6020026020010181815250508080610fd190614a1b565b915050610f95565b508092505050919050565b6000610fee610b56565b821061102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690614632565b60405180910390fd5b6008828154811061104357611042614b7f565b5b90600052602060002001549050919050565b61105d6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661107b611868565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614532565b60405180910390fd5b80600f90805190602001906110e792919061342b565b5050565b6110f36122b9565b73ffffffffffffffffffffffffffffffffffffffff16611111611868565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90614532565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906144b2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90614492565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f76122b9565b73ffffffffffffffffffffffffffffffffffffffff16611315611868565b73ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290614532565b60405180910390fd5b6113756000612711565b565b61137f6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661139d611868565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90614532565b60405180910390fd5b612b5282829050611402610b56565b61140c91906147d6565b111561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490614412565b60405180910390fd5b6000828290501415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90614672565b60405180910390fd5b60005b8282905081101561157c57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114cd576114cc614b7f565b5b90506020020160208101906114e291906136ed565b73ffffffffffffffffffffffffffffffffffffffff161415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614392565b60405180910390fd5b61156983838381811061154f5761154e614b7f565b5b905060200201602081019061156491906136ed565b6126b4565b808061157490614a1b565b915050611497565b505050565b6115896122b9565b73ffffffffffffffffffffffffffffffffffffffff166115a7611868565b73ffffffffffffffffffffffffffffffffffffffff16146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490614532565b60405180910390fd5b8060108190555050565b61160f6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661162d611868565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614532565b60405180910390fd5b6000479050600081116116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614652565b60405180910390fd5b61170373ffca1e49b0810a12ef83d0f4403e476521d5f7296127106107e9846116f4919061485d565b6116fe919061482c565b6127d7565b61173973d0ee81d4262ffbec384abc0e3efc1ef4cc1186dd606460098461172a919061485d565b611734919061482c565b6127d7565b61177173dd812ac574b1575880dc0017d870a9b2008640726103e861013b84611762919061485d565b61176c919061482c565b6127d7565b6117a973f489e2eebe635a91564a1b05d66571b631907f0e612710610b6d8461179a919061485d565b6117a4919061482c565b6127d7565b6117df739d109cc07711149d70153dad627e1d34cb3d82196064600a846117d0919061485d565b6117da919061482c565b6127d7565b50565b6117ea6122b9565b73ffffffffffffffffffffffffffffffffffffffff16611808611868565b73ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614532565b60405180910390fd5b80600d8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118a1906149b8565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd906149b8565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b601160009054906101000a900460ff1681565b600c5481565b6119456122b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906143d2565b60405180910390fd5b80600560006119c06122b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a6d6122b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab291906141fa565b60405180910390a35050565b611ac66122b9565b73ffffffffffffffffffffffffffffffffffffffff16611ae4611868565b73ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614532565b60405180910390fd5b80600c8190555050565b611b55611b4f6122b9565b8361237a565b611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90614612565b60405180910390fd5b611ba084848484612888565b50505050565b600e60009054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6060611bd78261224d565b611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90614572565b60405180910390fd5b6000611c206128e4565b90506000815111611c405760405180602001604052806000815250611c6b565b80611c4a84612976565b604051602001611c5b929190614138565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d0f6122b9565b73ffffffffffffffffffffffffffffffffffffffff16611d2d611868565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea906142f2565b60405180910390fd5b611dfc81612711565b50565b611e076122b9565b73ffffffffffffffffffffffffffffffffffffffff16611e25611868565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290614532565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b60003390506000801b6010541415611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90614452565b60405180910390fd5b601160019054906101000a900460ff16611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614592565b60405180910390fd5b601160009054906101000a900460ff1615611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90614352565b60405180910390fd5b612007848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060105483604051602001611fec91906140f1565b60405160208183030381529060405280519060200120612ad7565b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906145d2565b60405180910390fd5b61138882612052610b56565b61205c91906147d6565b111561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614292565b60405180910390fd5b6000821180156120ae575060148211155b6120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614372565b60405180910390fd5b81600d546120fb919061485d565b34101561213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614512565b60405180910390fd5b60005b8281101561216457612151826126b4565b808061215c90614a1b565b915050612140565b5050505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061223657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612246575061224582612b8d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661233483611185565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123858261224d565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614432565b60405180910390fd5b60006123cf83611185565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061243e57508373ffffffffffffffffffffffffffffffffffffffff16612426846109b9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061244f575061244e8185611c73565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661247882611185565b73ffffffffffffffffffffffffffffffffffffffff16146124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590614552565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906143b2565b60405180910390fd5b612549838383612bf7565b6125546000826122c1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a491906148b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb91906147d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126be600b612d0b565b60006126ca600b612d21565b90506126d68282612d2f565b7f5eb80601dcb0d926afbd96cd14e5b399311467184b08401ddd40191c2c8838f5816040516127059190614692565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127fd9061415c565b60006040518083038185875af1925050503d806000811461283a576040519150601f19603f3d011682016040523d82523d6000602084013e61283f565b606091505b5050905080612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a906145f2565b60405180910390fd5b505050565b612893848484612458565b61289f84848484612d4d565b6128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906142d2565b60405180910390fd5b50505050565b6060600f80546128f3906149b8565b80601f016020809104026020016040519081016040528092919081815260200182805461291f906149b8565b801561296c5780601f106129415761010080835404028352916020019161296c565b820191906000526020600020905b81548152906001019060200180831161294f57829003601f168201915b5050505050905090565b606060008214156129be576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ad2565b600082905060005b600082146129f05780806129d990614a1b565b915050600a826129e9919061482c565b91506129c6565b60008167ffffffffffffffff811115612a0c57612a0b614bae565b5b6040519080825280601f01601f191660200182016040528015612a3e5781602001600182028036833780820191505090505b5090505b60008514612acb57600182612a5791906148b7565b9150600a85612a669190614a92565b6030612a7291906147d6565b60f81b818381518110612a8857612a87614b7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ac4919061482c565b9450612a42565b8093505050505b919050565b60008082905060005b8551811015612b7f576000868281518110612afe57612afd614b7f565b5b60200260200101519050808311612b3f578281604051602001612b2292919061410c565b604051602081830303815290604052805190602001209250612b6b565b8083604051602001612b5292919061410c565b6040516020818303038152906040528051906020012092505b508080612b7790614a1b565b915050612ae0565b508381149150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c02838383612ee4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4557612c4081612ee9565b612c84565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c8357612c828382612f32565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc757612cc28161309f565b612d06565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d0557612d048282613170565b5b5b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612d498282604051806020016040528060008152506131ef565b5050565b6000612d6e8473ffffffffffffffffffffffffffffffffffffffff1661324a565b15612ed7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d976122b9565b8786866040518563ffffffff1660e01b8152600401612db9949392919061418c565b602060405180830381600087803b158015612dd357600080fd5b505af1925050508015612e0457506040513d601f19601f82011682018060405250810190612e0191906139b7565b60015b612e87573d8060008114612e34576040519150601f19603f3d011682016040523d82523d6000602084013e612e39565b606091505b50600081511415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e76906142d2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612edc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f3f84611237565b612f4991906148b7565b905060006007600084815260200190815260200160002054905081811461302e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130b391906148b7565b90506000600960008481526020019081526020016000205490506000600883815481106130e3576130e2614b7f565b5b90600052602060002001549050806008838154811061310557613104614b7f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061315457613153614b50565b5b6001900381819060005260206000200160009055905550505050565b600061317b83611237565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131f9838361325d565b6132066000848484612d4d565b613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c906142d2565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c4906144d2565b60405180910390fd5b6132d68161224d565b15613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90614332565b60405180910390fd5b61332260008383612bf7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461337291906147d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613437906149b8565b90600052602060002090601f01602090048101928261345957600085556134a0565b82601f1061347257805160ff19168380011785556134a0565b828001600101855582156134a0579182015b8281111561349f578251825591602001919060010190613484565b5b5090506134ad91906134b1565b5090565b5b808211156134ca5760008160009055506001016134b2565b5090565b60006134e16134dc846146ed565b6146c8565b9050828152602081018484840111156134fd576134fc614bec565b5b613508848285614976565b509392505050565b600061352361351e8461471e565b6146c8565b90508281526020810184848401111561353f5761353e614bec565b5b61354a848285614976565b509392505050565b600081359050613561816154d2565b92915050565b60008083601f84011261357d5761357c614be2565b5b8235905067ffffffffffffffff81111561359a57613599614bdd565b5b6020830191508360208202830111156135b6576135b5614be7565b5b9250929050565b60008083601f8401126135d3576135d2614be2565b5b8235905067ffffffffffffffff8111156135f0576135ef614bdd565b5b60208301915083602082028301111561360c5761360b614be7565b5b9250929050565b600081359050613622816154e9565b92915050565b60008135905061363781615500565b92915050565b60008135905061364c81615517565b92915050565b60008151905061366181615517565b92915050565b600082601f83011261367c5761367b614be2565b5b813561368c8482602086016134ce565b91505092915050565b600082601f8301126136aa576136a9614be2565b5b81356136ba848260208601613510565b91505092915050565b6000813590506136d28161552e565b92915050565b6000813590506136e781615545565b92915050565b60006020828403121561370357613702614bf6565b5b600061371184828501613552565b91505092915050565b6000806040838503121561373157613730614bf6565b5b600061373f85828601613552565b925050602061375085828601613552565b9150509250929050565b60008060006060848603121561377357613772614bf6565b5b600061378186828701613552565b935050602061379286828701613552565b92505060406137a3868287016136c3565b9150509250925092565b600080600080608085870312156137c7576137c6614bf6565b5b60006137d587828801613552565b94505060206137e687828801613552565b93505060406137f7878288016136c3565b925050606085013567ffffffffffffffff81111561381857613817614bf1565b5b61382487828801613667565b91505092959194509250565b6000806040838503121561384757613846614bf6565b5b600061385585828601613552565b925050602061386685828601613613565b9150509250929050565b6000806040838503121561388757613886614bf6565b5b600061389585828601613552565b92505060206138a6858286016136c3565b9150509250929050565b600080602083850312156138c7576138c6614bf6565b5b600083013567ffffffffffffffff8111156138e5576138e4614bf1565b5b6138f185828601613567565b92509250509250929050565b60008060006040848603121561391657613915614bf6565b5b600084013567ffffffffffffffff81111561393457613933614bf1565b5b613940868287016135bd565b93509350506020613953868287016136c3565b9150509250925092565b60006020828403121561397357613972614bf6565b5b600061398184828501613628565b91505092915050565b6000602082840312156139a05761399f614bf6565b5b60006139ae8482850161363d565b91505092915050565b6000602082840312156139cd576139cc614bf6565b5b60006139db84828501613652565b91505092915050565b6000602082840312156139fa576139f9614bf6565b5b600082013567ffffffffffffffff811115613a1857613a17614bf1565b5b613a2484828501613695565b91505092915050565b600060208284031215613a4357613a42614bf6565b5b6000613a51848285016136c3565b91505092915050565b600060208284031215613a7057613a6f614bf6565b5b6000613a7e848285016136d8565b91505092915050565b6000613a9383836140c4565b60208301905092915050565b613aa8816148eb565b82525050565b613abf613aba826148eb565b614a64565b82525050565b6000613ad08261475f565b613ada818561478d565b9350613ae58361474f565b8060005b83811015613b16578151613afd8882613a87565b9750613b0883614780565b925050600181019050613ae9565b5085935050505092915050565b613b2c816148fd565b82525050565b613b3b81614909565b82525050565b613b52613b4d82614909565b614a76565b82525050565b6000613b638261476a565b613b6d818561479e565b9350613b7d818560208601614985565b613b8681614bfb565b840191505092915050565b6000613b9c82614775565b613ba681856147ba565b9350613bb6818560208601614985565b613bbf81614bfb565b840191505092915050565b6000613bd582614775565b613bdf81856147cb565b9350613bef818560208601614985565b80840191505092915050565b6000613c086030836147ba565b9150613c1382614c19565b604082019050919050565b6000613c2b6020836147ba565b9150613c3682614c68565b602082019050919050565b6000613c4e6038836147ba565b9150613c5982614c91565b604082019050919050565b6000613c71602b836147ba565b9150613c7c82614ce0565b604082019050919050565b6000613c946032836147ba565b9150613c9f82614d2f565b604082019050919050565b6000613cb76026836147ba565b9150613cc282614d7e565b604082019050919050565b6000613cda6031836147ba565b9150613ce582614dcd565b604082019050919050565b6000613cfd601c836147ba565b9150613d0882614e1c565b602082019050919050565b6000613d206011836147ba565b9150613d2b82614e45565b602082019050919050565b6000613d43603d836147ba565b9150613d4e82614e6e565b604082019050919050565b6000613d666017836147ba565b9150613d7182614ebd565b602082019050919050565b6000613d896024836147ba565b9150613d9482614ee6565b604082019050919050565b6000613dac6019836147ba565b9150613db782614f35565b602082019050919050565b6000613dcf6014836147ba565b9150613dda82614f5e565b602082019050919050565b6000613df2602c836147ba565b9150613dfd82614f87565b604082019050919050565b6000613e15602c836147ba565b9150613e2082614fd6565b604082019050919050565b6000613e38602e836147ba565b9150613e4382615025565b604082019050919050565b6000613e5b6038836147ba565b9150613e6682615074565b604082019050919050565b6000613e7e602a836147ba565b9150613e89826150c3565b604082019050919050565b6000613ea16029836147ba565b9150613eac82615112565b604082019050919050565b6000613ec46020836147ba565b9150613ecf82615161565b602082019050919050565b6000613ee7602c836147ba565b9150613ef28261518a565b604082019050919050565b6000613f0a602f836147ba565b9150613f15826151d9565b604082019050919050565b6000613f2d6020836147ba565b9150613f3882615228565b602082019050919050565b6000613f506029836147ba565b9150613f5b82615251565b604082019050919050565b6000613f73602f836147ba565b9150613f7e826152a0565b604082019050919050565b6000613f966017836147ba565b9150613fa1826152ef565b602082019050919050565b6000613fb96021836147ba565b9150613fc482615318565b604082019050919050565b6000613fdc6025836147ba565b9150613fe782615367565b604082019050919050565b6000613fff6000836147af565b915061400a826153b6565b600082019050919050565b60006140226010836147ba565b915061402d826153b9565b602082019050919050565b60006140456031836147ba565b9150614050826153e2565b604082019050919050565b6000614068602c836147ba565b915061407382615431565b604082019050919050565b600061408b6008836147ba565b915061409682615480565b602082019050919050565b60006140ae6011836147ba565b91506140b9826154a9565b602082019050919050565b6140cd8161495f565b82525050565b6140dc8161495f565b82525050565b6140eb81614969565b82525050565b60006140fd8284613aae565b60148201915081905092915050565b60006141188285613b41565b6020820191506141288284613b41565b6020820191508190509392505050565b60006141448285613bca565b91506141508284613bca565b91508190509392505050565b600061416782613ff2565b9150819050919050565b60006020820190506141866000830184613a9f565b92915050565b60006080820190506141a16000830187613a9f565b6141ae6020830186613a9f565b6141bb60408301856140d3565b81810360608301526141cd8184613b58565b905095945050505050565b600060208201905081810360008301526141f28184613ac5565b905092915050565b600060208201905061420f6000830184613b23565b92915050565b600060208201905061422a6000830184613b32565b92915050565b6000602082019050818103600083015261424a8184613b91565b905092915050565b6000602082019050818103600083015261426b81613bfb565b9050919050565b6000602082019050818103600083015261428b81613c1e565b9050919050565b600060208201905081810360008301526142ab81613c41565b9050919050565b600060208201905081810360008301526142cb81613c64565b9050919050565b600060208201905081810360008301526142eb81613c87565b9050919050565b6000602082019050818103600083015261430b81613caa565b9050919050565b6000602082019050818103600083015261432b81613ccd565b9050919050565b6000602082019050818103600083015261434b81613cf0565b9050919050565b6000602082019050818103600083015261436b81613d13565b9050919050565b6000602082019050818103600083015261438b81613d36565b9050919050565b600060208201905081810360008301526143ab81613d59565b9050919050565b600060208201905081810360008301526143cb81613d7c565b9050919050565b600060208201905081810360008301526143eb81613d9f565b9050919050565b6000602082019050818103600083015261440b81613dc2565b9050919050565b6000602082019050818103600083015261442b81613de5565b9050919050565b6000602082019050818103600083015261444b81613e08565b9050919050565b6000602082019050818103600083015261446b81613e2b565b9050919050565b6000602082019050818103600083015261448b81613e4e565b9050919050565b600060208201905081810360008301526144ab81613e71565b9050919050565b600060208201905081810360008301526144cb81613e94565b9050919050565b600060208201905081810360008301526144eb81613eb7565b9050919050565b6000602082019050818103600083015261450b81613eda565b9050919050565b6000602082019050818103600083015261452b81613efd565b9050919050565b6000602082019050818103600083015261454b81613f20565b9050919050565b6000602082019050818103600083015261456b81613f43565b9050919050565b6000602082019050818103600083015261458b81613f66565b9050919050565b600060208201905081810360008301526145ab81613f89565b9050919050565b600060208201905081810360008301526145cb81613fac565b9050919050565b600060208201905081810360008301526145eb81613fcf565b9050919050565b6000602082019050818103600083015261460b81614015565b9050919050565b6000602082019050818103600083015261462b81614038565b9050919050565b6000602082019050818103600083015261464b8161405b565b9050919050565b6000602082019050818103600083015261466b8161407e565b9050919050565b6000602082019050818103600083015261468b816140a1565b9050919050565b60006020820190506146a760008301846140d3565b92915050565b60006020820190506146c260008301846140e2565b92915050565b60006146d26146e3565b90506146de82826149ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561470857614707614bae565b5b61471182614bfb565b9050602081019050919050565b600067ffffffffffffffff82111561473957614738614bae565b5b61474282614bfb565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147e18261495f565b91506147ec8361495f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482157614820614ac3565b5b828201905092915050565b60006148378261495f565b91506148428361495f565b92508261485257614851614af2565b5b828204905092915050565b60006148688261495f565b91506148738361495f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148ac576148ab614ac3565b5b828202905092915050565b60006148c28261495f565b91506148cd8361495f565b9250828210156148e0576148df614ac3565b5b828203905092915050565b60006148f68261493f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b600060028204905060018216806149d057607f821691505b602082108114156149e4576149e3614b21565b5b50919050565b6149f382614bfb565b810181811067ffffffffffffffff82111715614a1257614a11614bae565b5b80604052505050565b6000614a268261495f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5957614a58614ac3565b5b600182019050919050565b6000614a6f82614a80565b9050919050565b6000819050919050565b6000614a8b82614c0c565b9050919050565b6000614a9d8261495f565b9150614aa88361495f565b925082614ab857614ab7614af2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f436f756e742065786365656473206d6178696d756d206d696e74206c696d697460008201527f20706572207472616e73616374696f6e00000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c79206f6620474e5a2d3131600082015250565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f4e46547320616c6c6f74656420666f722070726573616c650000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e696d756d203120474e5a2d31312068617320746f206265206d696e746560008201527f6420706572207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f50726573616c6520697320636c6f736564000000000000000000000000000000600082015250565b7f4d696e696d756d203120616e64204d6178696d756d20323020474e5a2d31312060008201527f63616e206265206d696e74656420706572207472616e73616374696f6e000000602082015250565b7f41697264726f7020746f204e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f41697264726f702077696c6c20657863656564206d6178696d756d207375707060008201527f6c79206f6620474e5a2d31310000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f206164647265737320697320656c696769626c6520666f7220707265736160008201527f6c65206d696e74696e6720796574000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206f70656e20796574000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420656c696769626c6520666f722070726573616c6560008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f2066756e6473000000000000000000000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e64000000000000000000000000000000600082015250565b6154db816148eb565b81146154e657600080fd5b50565b6154f2816148fd565b81146154fd57600080fd5b50565b61550981614909565b811461551457600080fd5b50565b61552081614913565b811461552b57600080fd5b50565b6155378161495f565b811461554257600080fd5b50565b61554e81614969565b811461555957600080fd5b5056fea26469706673582212202c94b89b3da6060bc42468444eb95c08a35e0abddaf2785b9f24b5e0108793ec64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102245760003560e01c8063715018a611610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd146107d1578063e985e9c51461080e578063f2fde38b1461084b578063f81227d414610874578063fde5f5481461088b57610224565b8063a22cb46514610700578063a2b40d1914610729578063b88d4fde14610752578063bc94ce3d1461077b578063bee6348a146107a657610224565b80638606d938116100f25780638606d9381461062b5780638da5cb5b1461065457806395d89b411461067f57806399288dbb146106aa578063a035b1fe146106d557610224565b8063715018a6146105ab578063729ad39e146105c25780637cb64759146105eb578063853828b61461061457610224565b806332cb6b0c116101b15780634f6ccce7116101755780634f6ccce7146104a257806355f804b3146104df57806361abfd16146105085780636352211e1461053157806370a082311461056e57610224565b806332cb6b0c146103de57806334918dfd146104095780633dd26e721461042057806342842e0e1461043c578063438b63001461046557610224565b8063095ea7b3116101f8578063095ea7b3146102f957806318160ddd1461032257806323b872dd1461034d5780632eb4a7ab146103765780632f745c59146103a157610224565b80620e7fa81461022957806301ffc9a71461025457806306fdde0314610291578063081812fc146102bc575b600080fd5b34801561023557600080fd5b5061023e6108a7565b60405161024b9190614692565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061398a565b6108ad565b60405161028891906141fa565b60405180910390f35b34801561029d57600080fd5b506102a6610927565b6040516102b39190614230565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190613a2d565b6109b9565b6040516102f09190614171565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613870565b610a3e565b005b34801561032e57600080fd5b50610337610b56565b6040516103449190614692565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061375a565b610b63565b005b34801561038257600080fd5b5061038b610bc3565b6040516103989190614215565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613870565b610bc9565b6040516103d59190614692565b60405180910390f35b3480156103ea57600080fd5b506103f3610c6e565b6040516104009190614692565b60405180910390f35b34801561041557600080fd5b5061041e610c74565b005b61043a60048036038101906104359190613a2d565b610d1c565b005b34801561044857600080fd5b50610463600480360381019061045e919061375a565b610f16565b005b34801561047157600080fd5b5061048c600480360381019061048791906136ed565b610f36565b60405161049991906141d8565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613a2d565b610fe4565b6040516104d69190614692565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906139e4565b611055565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613a5a565b6110eb565b005b34801561053d57600080fd5b5061055860048036038101906105539190613a2d565b611185565b6040516105659190614171565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906136ed565b611237565b6040516105a29190614692565b60405180910390f35b3480156105b757600080fd5b506105c06112ef565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906138b0565b611377565b005b3480156105f757600080fd5b50610612600480360381019061060d919061395d565b611581565b005b34801561062057600080fd5b50610629611607565b005b34801561063757600080fd5b50610652600480360381019061064d9190613a2d565b6117e2565b005b34801561066057600080fd5b50610669611868565b6040516106769190614171565b60405180910390f35b34801561068b57600080fd5b50610694611892565b6040516106a19190614230565b60405180910390f35b3480156106b657600080fd5b506106bf611924565b6040516106cc91906141fa565b60405180910390f35b3480156106e157600080fd5b506106ea611937565b6040516106f79190614692565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613830565b61193d565b005b34801561073557600080fd5b50610750600480360381019061074b9190613a2d565b611abe565b005b34801561075e57600080fd5b50610779600480360381019061077491906137ad565b611b44565b005b34801561078757600080fd5b50610790611ba6565b60405161079d91906146ad565b60405180910390f35b3480156107b257600080fd5b506107bb611bb9565b6040516107c891906141fa565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613a2d565b611bcc565b6040516108059190614230565b60405180910390f35b34801561081a57600080fd5b506108356004803603810190610830919061371a565b611c73565b60405161084291906141fa565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906136ed565b611d07565b005b34801561088057600080fd5b50610889611dff565b005b6108a560048036038101906108a091906138fd565b611ea7565b005b600d5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610920575061091f8261216b565b5b9050919050565b606060008054610936906149b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610962906149b8565b80156109af5780601f10610984576101008083540402835291602001916109af565b820191906000526020600020905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b60006109c48261224d565b610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa906144f2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4982611185565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab1906145b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad96122b9565b73ffffffffffffffffffffffffffffffffffffffff161480610b085750610b0781610b026122b9565b611c73565b5b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90614472565b60405180910390fd5b610b5183836122c1565b505050565b6000600880549050905090565b610b74610b6e6122b9565b8261237a565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90614612565b60405180910390fd5b610bbe838383612458565b505050565b60105481565b6000610bd483611237565b8210610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c906142b2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b612b5281565b610c7c6122b9565b73ffffffffffffffffffffffffffffffffffffffff16610c9a611868565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790614532565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b612b5281610d28610b56565b610d3291906147d6565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90614272565b60405180910390fd5b60008111610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90614312565b60405180910390fd5b6000339050610dc3611868565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610eea57601160009054906101000a900460ff16610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906143f2565b60405180910390fd5b600e60009054906101000a900460ff1660ff16821115610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614252565b60405180910390fd5b81600c54610ea7919061485d565b341015610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614512565b60405180910390fd5b5b60005b82811015610f1157610efe826126b4565b8080610f0990614a1b565b915050610eed565b505050565b610f3183838360405180602001604052806000815250611b44565b505050565b60606000610f4383611237565b905060008167ffffffffffffffff811115610f6157610f60614bae565b5b604051908082528060200260200182016040528015610f8f5781602001602082028036833780820191505090505b50905060005b82811015610fd957610fa78582610bc9565b828281518110610fba57610fb9614b7f565b5b6020026020010181815250508080610fd190614a1b565b915050610f95565b508092505050919050565b6000610fee610b56565b821061102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690614632565b60405180910390fd5b6008828154811061104357611042614b7f565b5b90600052602060002001549050919050565b61105d6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661107b611868565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614532565b60405180910390fd5b80600f90805190602001906110e792919061342b565b5050565b6110f36122b9565b73ffffffffffffffffffffffffffffffffffffffff16611111611868565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90614532565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906144b2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90614492565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f76122b9565b73ffffffffffffffffffffffffffffffffffffffff16611315611868565b73ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290614532565b60405180910390fd5b6113756000612711565b565b61137f6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661139d611868565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90614532565b60405180910390fd5b612b5282829050611402610b56565b61140c91906147d6565b111561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490614412565b60405180910390fd5b6000828290501415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90614672565b60405180910390fd5b60005b8282905081101561157c57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114cd576114cc614b7f565b5b90506020020160208101906114e291906136ed565b73ffffffffffffffffffffffffffffffffffffffff161415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614392565b60405180910390fd5b61156983838381811061154f5761154e614b7f565b5b905060200201602081019061156491906136ed565b6126b4565b808061157490614a1b565b915050611497565b505050565b6115896122b9565b73ffffffffffffffffffffffffffffffffffffffff166115a7611868565b73ffffffffffffffffffffffffffffffffffffffff16146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490614532565b60405180910390fd5b8060108190555050565b61160f6122b9565b73ffffffffffffffffffffffffffffffffffffffff1661162d611868565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614532565b60405180910390fd5b6000479050600081116116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614652565b60405180910390fd5b61170373ffca1e49b0810a12ef83d0f4403e476521d5f7296127106107e9846116f4919061485d565b6116fe919061482c565b6127d7565b61173973d0ee81d4262ffbec384abc0e3efc1ef4cc1186dd606460098461172a919061485d565b611734919061482c565b6127d7565b61177173dd812ac574b1575880dc0017d870a9b2008640726103e861013b84611762919061485d565b61176c919061482c565b6127d7565b6117a973f489e2eebe635a91564a1b05d66571b631907f0e612710610b6d8461179a919061485d565b6117a4919061482c565b6127d7565b6117df739d109cc07711149d70153dad627e1d34cb3d82196064600a846117d0919061485d565b6117da919061482c565b6127d7565b50565b6117ea6122b9565b73ffffffffffffffffffffffffffffffffffffffff16611808611868565b73ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614532565b60405180910390fd5b80600d8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118a1906149b8565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd906149b8565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b601160009054906101000a900460ff1681565b600c5481565b6119456122b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906143d2565b60405180910390fd5b80600560006119c06122b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a6d6122b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab291906141fa565b60405180910390a35050565b611ac66122b9565b73ffffffffffffffffffffffffffffffffffffffff16611ae4611868565b73ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614532565b60405180910390fd5b80600c8190555050565b611b55611b4f6122b9565b8361237a565b611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90614612565b60405180910390fd5b611ba084848484612888565b50505050565b600e60009054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6060611bd78261224d565b611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90614572565b60405180910390fd5b6000611c206128e4565b90506000815111611c405760405180602001604052806000815250611c6b565b80611c4a84612976565b604051602001611c5b929190614138565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d0f6122b9565b73ffffffffffffffffffffffffffffffffffffffff16611d2d611868565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea906142f2565b60405180910390fd5b611dfc81612711565b50565b611e076122b9565b73ffffffffffffffffffffffffffffffffffffffff16611e25611868565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290614532565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b60003390506000801b6010541415611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90614452565b60405180910390fd5b601160019054906101000a900460ff16611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614592565b60405180910390fd5b601160009054906101000a900460ff1615611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90614352565b60405180910390fd5b612007848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060105483604051602001611fec91906140f1565b60405160208183030381529060405280519060200120612ad7565b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906145d2565b60405180910390fd5b61138882612052610b56565b61205c91906147d6565b111561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614292565b60405180910390fd5b6000821180156120ae575060148211155b6120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614372565b60405180910390fd5b81600d546120fb919061485d565b34101561213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614512565b60405180910390fd5b60005b8281101561216457612151826126b4565b808061215c90614a1b565b915050612140565b5050505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061223657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612246575061224582612b8d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661233483611185565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123858261224d565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614432565b60405180910390fd5b60006123cf83611185565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061243e57508373ffffffffffffffffffffffffffffffffffffffff16612426846109b9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061244f575061244e8185611c73565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661247882611185565b73ffffffffffffffffffffffffffffffffffffffff16146124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590614552565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906143b2565b60405180910390fd5b612549838383612bf7565b6125546000826122c1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a491906148b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb91906147d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126be600b612d0b565b60006126ca600b612d21565b90506126d68282612d2f565b7f5eb80601dcb0d926afbd96cd14e5b399311467184b08401ddd40191c2c8838f5816040516127059190614692565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127fd9061415c565b60006040518083038185875af1925050503d806000811461283a576040519150601f19603f3d011682016040523d82523d6000602084013e61283f565b606091505b5050905080612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a906145f2565b60405180910390fd5b505050565b612893848484612458565b61289f84848484612d4d565b6128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906142d2565b60405180910390fd5b50505050565b6060600f80546128f3906149b8565b80601f016020809104026020016040519081016040528092919081815260200182805461291f906149b8565b801561296c5780601f106129415761010080835404028352916020019161296c565b820191906000526020600020905b81548152906001019060200180831161294f57829003601f168201915b5050505050905090565b606060008214156129be576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ad2565b600082905060005b600082146129f05780806129d990614a1b565b915050600a826129e9919061482c565b91506129c6565b60008167ffffffffffffffff811115612a0c57612a0b614bae565b5b6040519080825280601f01601f191660200182016040528015612a3e5781602001600182028036833780820191505090505b5090505b60008514612acb57600182612a5791906148b7565b9150600a85612a669190614a92565b6030612a7291906147d6565b60f81b818381518110612a8857612a87614b7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ac4919061482c565b9450612a42565b8093505050505b919050565b60008082905060005b8551811015612b7f576000868281518110612afe57612afd614b7f565b5b60200260200101519050808311612b3f578281604051602001612b2292919061410c565b604051602081830303815290604052805190602001209250612b6b565b8083604051602001612b5292919061410c565b6040516020818303038152906040528051906020012092505b508080612b7790614a1b565b915050612ae0565b508381149150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c02838383612ee4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4557612c4081612ee9565b612c84565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c8357612c828382612f32565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc757612cc28161309f565b612d06565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d0557612d048282613170565b5b5b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612d498282604051806020016040528060008152506131ef565b5050565b6000612d6e8473ffffffffffffffffffffffffffffffffffffffff1661324a565b15612ed7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d976122b9565b8786866040518563ffffffff1660e01b8152600401612db9949392919061418c565b602060405180830381600087803b158015612dd357600080fd5b505af1925050508015612e0457506040513d601f19601f82011682018060405250810190612e0191906139b7565b60015b612e87573d8060008114612e34576040519150601f19603f3d011682016040523d82523d6000602084013e612e39565b606091505b50600081511415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e76906142d2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612edc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f3f84611237565b612f4991906148b7565b905060006007600084815260200190815260200160002054905081811461302e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130b391906148b7565b90506000600960008481526020019081526020016000205490506000600883815481106130e3576130e2614b7f565b5b90600052602060002001549050806008838154811061310557613104614b7f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061315457613153614b50565b5b6001900381819060005260206000200160009055905550505050565b600061317b83611237565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131f9838361325d565b6132066000848484612d4d565b613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c906142d2565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c4906144d2565b60405180910390fd5b6132d68161224d565b15613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90614332565b60405180910390fd5b61332260008383612bf7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461337291906147d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613437906149b8565b90600052602060002090601f01602090048101928261345957600085556134a0565b82601f1061347257805160ff19168380011785556134a0565b828001600101855582156134a0579182015b8281111561349f578251825591602001919060010190613484565b5b5090506134ad91906134b1565b5090565b5b808211156134ca5760008160009055506001016134b2565b5090565b60006134e16134dc846146ed565b6146c8565b9050828152602081018484840111156134fd576134fc614bec565b5b613508848285614976565b509392505050565b600061352361351e8461471e565b6146c8565b90508281526020810184848401111561353f5761353e614bec565b5b61354a848285614976565b509392505050565b600081359050613561816154d2565b92915050565b60008083601f84011261357d5761357c614be2565b5b8235905067ffffffffffffffff81111561359a57613599614bdd565b5b6020830191508360208202830111156135b6576135b5614be7565b5b9250929050565b60008083601f8401126135d3576135d2614be2565b5b8235905067ffffffffffffffff8111156135f0576135ef614bdd565b5b60208301915083602082028301111561360c5761360b614be7565b5b9250929050565b600081359050613622816154e9565b92915050565b60008135905061363781615500565b92915050565b60008135905061364c81615517565b92915050565b60008151905061366181615517565b92915050565b600082601f83011261367c5761367b614be2565b5b813561368c8482602086016134ce565b91505092915050565b600082601f8301126136aa576136a9614be2565b5b81356136ba848260208601613510565b91505092915050565b6000813590506136d28161552e565b92915050565b6000813590506136e781615545565b92915050565b60006020828403121561370357613702614bf6565b5b600061371184828501613552565b91505092915050565b6000806040838503121561373157613730614bf6565b5b600061373f85828601613552565b925050602061375085828601613552565b9150509250929050565b60008060006060848603121561377357613772614bf6565b5b600061378186828701613552565b935050602061379286828701613552565b92505060406137a3868287016136c3565b9150509250925092565b600080600080608085870312156137c7576137c6614bf6565b5b60006137d587828801613552565b94505060206137e687828801613552565b93505060406137f7878288016136c3565b925050606085013567ffffffffffffffff81111561381857613817614bf1565b5b61382487828801613667565b91505092959194509250565b6000806040838503121561384757613846614bf6565b5b600061385585828601613552565b925050602061386685828601613613565b9150509250929050565b6000806040838503121561388757613886614bf6565b5b600061389585828601613552565b92505060206138a6858286016136c3565b9150509250929050565b600080602083850312156138c7576138c6614bf6565b5b600083013567ffffffffffffffff8111156138e5576138e4614bf1565b5b6138f185828601613567565b92509250509250929050565b60008060006040848603121561391657613915614bf6565b5b600084013567ffffffffffffffff81111561393457613933614bf1565b5b613940868287016135bd565b93509350506020613953868287016136c3565b9150509250925092565b60006020828403121561397357613972614bf6565b5b600061398184828501613628565b91505092915050565b6000602082840312156139a05761399f614bf6565b5b60006139ae8482850161363d565b91505092915050565b6000602082840312156139cd576139cc614bf6565b5b60006139db84828501613652565b91505092915050565b6000602082840312156139fa576139f9614bf6565b5b600082013567ffffffffffffffff811115613a1857613a17614bf1565b5b613a2484828501613695565b91505092915050565b600060208284031215613a4357613a42614bf6565b5b6000613a51848285016136c3565b91505092915050565b600060208284031215613a7057613a6f614bf6565b5b6000613a7e848285016136d8565b91505092915050565b6000613a9383836140c4565b60208301905092915050565b613aa8816148eb565b82525050565b613abf613aba826148eb565b614a64565b82525050565b6000613ad08261475f565b613ada818561478d565b9350613ae58361474f565b8060005b83811015613b16578151613afd8882613a87565b9750613b0883614780565b925050600181019050613ae9565b5085935050505092915050565b613b2c816148fd565b82525050565b613b3b81614909565b82525050565b613b52613b4d82614909565b614a76565b82525050565b6000613b638261476a565b613b6d818561479e565b9350613b7d818560208601614985565b613b8681614bfb565b840191505092915050565b6000613b9c82614775565b613ba681856147ba565b9350613bb6818560208601614985565b613bbf81614bfb565b840191505092915050565b6000613bd582614775565b613bdf81856147cb565b9350613bef818560208601614985565b80840191505092915050565b6000613c086030836147ba565b9150613c1382614c19565b604082019050919050565b6000613c2b6020836147ba565b9150613c3682614c68565b602082019050919050565b6000613c4e6038836147ba565b9150613c5982614c91565b604082019050919050565b6000613c71602b836147ba565b9150613c7c82614ce0565b604082019050919050565b6000613c946032836147ba565b9150613c9f82614d2f565b604082019050919050565b6000613cb76026836147ba565b9150613cc282614d7e565b604082019050919050565b6000613cda6031836147ba565b9150613ce582614dcd565b604082019050919050565b6000613cfd601c836147ba565b9150613d0882614e1c565b602082019050919050565b6000613d206011836147ba565b9150613d2b82614e45565b602082019050919050565b6000613d43603d836147ba565b9150613d4e82614e6e565b604082019050919050565b6000613d666017836147ba565b9150613d7182614ebd565b602082019050919050565b6000613d896024836147ba565b9150613d9482614ee6565b604082019050919050565b6000613dac6019836147ba565b9150613db782614f35565b602082019050919050565b6000613dcf6014836147ba565b9150613dda82614f5e565b602082019050919050565b6000613df2602c836147ba565b9150613dfd82614f87565b604082019050919050565b6000613e15602c836147ba565b9150613e2082614fd6565b604082019050919050565b6000613e38602e836147ba565b9150613e4382615025565b604082019050919050565b6000613e5b6038836147ba565b9150613e6682615074565b604082019050919050565b6000613e7e602a836147ba565b9150613e89826150c3565b604082019050919050565b6000613ea16029836147ba565b9150613eac82615112565b604082019050919050565b6000613ec46020836147ba565b9150613ecf82615161565b602082019050919050565b6000613ee7602c836147ba565b9150613ef28261518a565b604082019050919050565b6000613f0a602f836147ba565b9150613f15826151d9565b604082019050919050565b6000613f2d6020836147ba565b9150613f3882615228565b602082019050919050565b6000613f506029836147ba565b9150613f5b82615251565b604082019050919050565b6000613f73602f836147ba565b9150613f7e826152a0565b604082019050919050565b6000613f966017836147ba565b9150613fa1826152ef565b602082019050919050565b6000613fb96021836147ba565b9150613fc482615318565b604082019050919050565b6000613fdc6025836147ba565b9150613fe782615367565b604082019050919050565b6000613fff6000836147af565b915061400a826153b6565b600082019050919050565b60006140226010836147ba565b915061402d826153b9565b602082019050919050565b60006140456031836147ba565b9150614050826153e2565b604082019050919050565b6000614068602c836147ba565b915061407382615431565b604082019050919050565b600061408b6008836147ba565b915061409682615480565b602082019050919050565b60006140ae6011836147ba565b91506140b9826154a9565b602082019050919050565b6140cd8161495f565b82525050565b6140dc8161495f565b82525050565b6140eb81614969565b82525050565b60006140fd8284613aae565b60148201915081905092915050565b60006141188285613b41565b6020820191506141288284613b41565b6020820191508190509392505050565b60006141448285613bca565b91506141508284613bca565b91508190509392505050565b600061416782613ff2565b9150819050919050565b60006020820190506141866000830184613a9f565b92915050565b60006080820190506141a16000830187613a9f565b6141ae6020830186613a9f565b6141bb60408301856140d3565b81810360608301526141cd8184613b58565b905095945050505050565b600060208201905081810360008301526141f28184613ac5565b905092915050565b600060208201905061420f6000830184613b23565b92915050565b600060208201905061422a6000830184613b32565b92915050565b6000602082019050818103600083015261424a8184613b91565b905092915050565b6000602082019050818103600083015261426b81613bfb565b9050919050565b6000602082019050818103600083015261428b81613c1e565b9050919050565b600060208201905081810360008301526142ab81613c41565b9050919050565b600060208201905081810360008301526142cb81613c64565b9050919050565b600060208201905081810360008301526142eb81613c87565b9050919050565b6000602082019050818103600083015261430b81613caa565b9050919050565b6000602082019050818103600083015261432b81613ccd565b9050919050565b6000602082019050818103600083015261434b81613cf0565b9050919050565b6000602082019050818103600083015261436b81613d13565b9050919050565b6000602082019050818103600083015261438b81613d36565b9050919050565b600060208201905081810360008301526143ab81613d59565b9050919050565b600060208201905081810360008301526143cb81613d7c565b9050919050565b600060208201905081810360008301526143eb81613d9f565b9050919050565b6000602082019050818103600083015261440b81613dc2565b9050919050565b6000602082019050818103600083015261442b81613de5565b9050919050565b6000602082019050818103600083015261444b81613e08565b9050919050565b6000602082019050818103600083015261446b81613e2b565b9050919050565b6000602082019050818103600083015261448b81613e4e565b9050919050565b600060208201905081810360008301526144ab81613e71565b9050919050565b600060208201905081810360008301526144cb81613e94565b9050919050565b600060208201905081810360008301526144eb81613eb7565b9050919050565b6000602082019050818103600083015261450b81613eda565b9050919050565b6000602082019050818103600083015261452b81613efd565b9050919050565b6000602082019050818103600083015261454b81613f20565b9050919050565b6000602082019050818103600083015261456b81613f43565b9050919050565b6000602082019050818103600083015261458b81613f66565b9050919050565b600060208201905081810360008301526145ab81613f89565b9050919050565b600060208201905081810360008301526145cb81613fac565b9050919050565b600060208201905081810360008301526145eb81613fcf565b9050919050565b6000602082019050818103600083015261460b81614015565b9050919050565b6000602082019050818103600083015261462b81614038565b9050919050565b6000602082019050818103600083015261464b8161405b565b9050919050565b6000602082019050818103600083015261466b8161407e565b9050919050565b6000602082019050818103600083015261468b816140a1565b9050919050565b60006020820190506146a760008301846140d3565b92915050565b60006020820190506146c260008301846140e2565b92915050565b60006146d26146e3565b90506146de82826149ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561470857614707614bae565b5b61471182614bfb565b9050602081019050919050565b600067ffffffffffffffff82111561473957614738614bae565b5b61474282614bfb565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147e18261495f565b91506147ec8361495f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482157614820614ac3565b5b828201905092915050565b60006148378261495f565b91506148428361495f565b92508261485257614851614af2565b5b828204905092915050565b60006148688261495f565b91506148738361495f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148ac576148ab614ac3565b5b828202905092915050565b60006148c28261495f565b91506148cd8361495f565b9250828210156148e0576148df614ac3565b5b828203905092915050565b60006148f68261493f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b600060028204905060018216806149d057607f821691505b602082108114156149e4576149e3614b21565b5b50919050565b6149f382614bfb565b810181811067ffffffffffffffff82111715614a1257614a11614bae565b5b80604052505050565b6000614a268261495f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5957614a58614ac3565b5b600182019050919050565b6000614a6f82614a80565b9050919050565b6000819050919050565b6000614a8b82614c0c565b9050919050565b6000614a9d8261495f565b9150614aa88361495f565b925082614ab857614ab7614af2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f436f756e742065786365656473206d6178696d756d206d696e74206c696d697460008201527f20706572207472616e73616374696f6e00000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c79206f6620474e5a2d3131600082015250565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f4e46547320616c6c6f74656420666f722070726573616c650000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e696d756d203120474e5a2d31312068617320746f206265206d696e746560008201527f6420706572207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f50726573616c6520697320636c6f736564000000000000000000000000000000600082015250565b7f4d696e696d756d203120616e64204d6178696d756d20323020474e5a2d31312060008201527f63616e206265206d696e74656420706572207472616e73616374696f6e000000602082015250565b7f41697264726f7020746f204e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f41697264726f702077696c6c20657863656564206d6178696d756d207375707060008201527f6c79206f6620474e5a2d31310000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f206164647265737320697320656c696769626c6520666f7220707265736160008201527f6c65206d696e74696e6720796574000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206f70656e20796574000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420656c696769626c6520666f722070726573616c6560008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f2066756e6473000000000000000000000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e64000000000000000000000000000000600082015250565b6154db816148eb565b81146154e657600080fd5b50565b6154f2816148fd565b81146154fd57600080fd5b50565b61550981614909565b811461551457600080fd5b50565b61552081614913565b811461552b57600080fd5b50565b6155378161495f565b811461554257600080fd5b50565b61554e81614969565b811461555957600080fd5b5056fea26469706673582212202c94b89b3da6060bc42468444eb95c08a35e0abddaf2785b9f24b5e0108793ec64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48108:5711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48390:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39872:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27032:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28725:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28248:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40675:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29784:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48522:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40256:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48281:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49738:83;;;;;;;;;;;;;:::i;:::-;;52671:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30231:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48837:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40865:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49230:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49339:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26639:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26282:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9739:94;;;;;;;;;;;;;:::i;:::-;;51021:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50907:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49929:772;;;;;;;;;;;;;:::i;:::-;;49566:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9088:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27201:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48556:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48330:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29105:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49463:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30487:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48457:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27376:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29503:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9988:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49829:92;;;;;;;;;;;;;:::i;:::-;;51508:1137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48390:47;;;;:::o;39872:300::-;40019:4;40076:35;40061:50;;;:11;:50;;;;:103;;;;40128:36;40152:11;40128:23;:36::i;:::-;40061:103;40041:123;;39872:300;;;:::o;27032:100::-;27086:13;27119:5;27112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27032:100;:::o;28725:308::-;28846:7;28893:16;28901:7;28893;:16::i;:::-;28871:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29001:15;:24;29017:7;29001:24;;;;;;;;;;;;;;;;;;;;;28994:31;;28725:308;;;:::o;28248:411::-;28329:13;28345:23;28360:7;28345:14;:23::i;:::-;28329:39;;28393:5;28387:11;;:2;:11;;;;28379:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28487:5;28471:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28496:37;28513:5;28520:12;:10;:12::i;:::-;28496:16;:37::i;:::-;28471:62;28449:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28630:21;28639:2;28643:7;28630:8;:21::i;:::-;28318:341;28248:411;;:::o;40675:113::-;40736:7;40763:10;:17;;;;40756:24;;40675:113;:::o;29784:376::-;29993:41;30012:12;:10;:12::i;:::-;30026:7;29993:18;:41::i;:::-;29971:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:28;30134:4;30140:2;30144:7;30124:9;:28::i;:::-;29784:376;;;:::o;48522:25::-;;;;:::o;40256:343::-;40398:7;40453:23;40470:5;40453:16;:23::i;:::-;40445:5;:31;40423:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40565:12;:19;40578:5;40565:19;;;;;;;;;;;;;;;:26;40585:5;40565:26;;;;;;;;;;;;40558:33;;40256:343;;;;:::o;48281:42::-;48318:5;48281:42;:::o;49738:83::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49805:8:::1;;;;;;;;;;;49804:9;49793:8;;:20;;;;;;;;;;;;;;;;;;49738:83::o:0;52671:824::-;48318:5;52772:6;52756:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;52734:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;52894:1;52885:6;:10;52863:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;52985:11;52999:10;52985:24;;53031:7;:5;:7::i;:::-;53024:14;;:3;:14;;;53020:384;;53063:8;;;;;;;;;;;53055:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;53147:10;;;;;;;;;;;53137:20;;:6;:20;;53111:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;53303:6;53295:5;;:14;;;;:::i;:::-;53282:9;:27;;53256:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;53020:384;53419:9;53414:74;53438:6;53434:1;:10;53414:74;;;53466:10;53472:3;53466:5;:10::i;:::-;53446:3;;;;;:::i;:::-;;;;53414:74;;;;52723:772;52671:824;:::o;30231:185::-;30369:39;30386:4;30392:2;30396:7;30369:39;;;;;;;;;;;;:16;:39::i;:::-;30231:185;;;:::o;48837:385::-;48926:16;48960:18;48981:17;48991:6;48981:9;:17::i;:::-;48960:38;;49011:25;49053:10;49039:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49011:53;;49080:9;49075:112;49099:10;49095:1;:14;49075:112;;;49145:30;49165:6;49173:1;49145:19;:30::i;:::-;49131:8;49140:1;49131:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49111:3;;;;;:::i;:::-;;;;49075:112;;;;49206:8;49199:15;;;;48837:385;;;:::o;40865:320::-;40985:7;41040:30;:28;:30::i;:::-;41032:5;:38;41010:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;41160:10;41171:5;41160:17;;;;;;;;:::i;:::-;;;;;;;;;;41153:24;;40865:320;;;:::o;49230:101::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49316:7:::1;49301:12;:22;;;;;;;;;;;;:::i;:::-;;49230:101:::0;:::o;49339:116::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49433:14:::1;49420:10;;:27;;;;;;;;;;;;;;;;;;49339:116:::0;:::o;26639:326::-;26756:7;26781:13;26797:7;:16;26805:7;26797:16;;;;;;;;;;;;;;;;;;;;;26781:32;;26863:1;26846:19;;:5;:19;;;;26824:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26952:5;26945:12;;;26639:326;;;:::o;26282:295::-;26399:7;26463:1;26446:19;;:5;:19;;;;26424:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26553:9;:16;26563:5;26553:16;;;;;;;;;;;;;;;;26546:23;;26282:295;;;:::o;9739:94::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9804:21:::1;9822:1;9804:9;:21::i;:::-;9739:94::o:0;51021:479::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48318:5:::1;51138:11;;:18;;51122:13;:11;:13::i;:::-;:34;;;;:::i;:::-;:48;;51100:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51283:1;51261:11;;:18;;:23;;51253:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51322:9;51317:176;51341:11;;:18;;51337:1;:22;51317:176;;;51415:1;51389:28;;:11;;51401:1;51389:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:28;;;;51381:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51460:21;51466:11;;51478:1;51466:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51460:5;:21::i;:::-;51361:3;;;;;:::i;:::-;;;;51317:176;;;;51021:479:::0;;:::o;50907:106::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50994:11:::1;50981:10;:24;;;;50907:106:::0;:::o;49929:772::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49982:15:::1;50000:21;49982:39;;50050:1;50040:7;:11;50032:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;50075:117;50100:42;50176:5;50168:4;50158:7;:14;;;;:::i;:::-;50157:24;;;;:::i;:::-;50075:10;:117::i;:::-;50203:112;50228:42;50301:3;50296:1;50286:7;:11;;;;:::i;:::-;50285:19;;;;:::i;:::-;50203:10;:112::i;:::-;50326:115;50351:42;50426:4;50419:3;50409:7;:13;;;;:::i;:::-;50408:22;;;;:::i;:::-;50326:10;:115::i;:::-;50452:117;50477:42;50553:5;50545:4;50535:7;:14;;;;:::i;:::-;50534:24;;;;:::i;:::-;50452:10;:117::i;:::-;50580:113;50605:42;50679:3;50673:2;50663:7;:12;;;;:::i;:::-;50662:20;;;;:::i;:::-;50580:10;:113::i;:::-;49971:730;49929:772::o:0;49566:117::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49662:13:::1;49647:12;:28;;;;49566:117:::0;:::o;9088:87::-;9134:7;9161:6;;;;;;;;;;;9154:13;;9088:87;:::o;27201:104::-;27257:13;27290:7;27283:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27201:104;:::o;48556:28::-;;;;;;;;;;;;;:::o;48330:41::-;;;;:::o;29105:327::-;29252:12;:10;:12::i;:::-;29240:24;;:8;:24;;;;29232:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29352:8;29307:18;:32;29326:12;:10;:12::i;:::-;29307:32;;;;;;;;;;;;;;;:42;29340:8;29307:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29405:8;29376:48;;29391:12;:10;:12::i;:::-;29376:48;;;29415:8;29376:48;;;;;;:::i;:::-;;;;;;;;29105:327;;:::o;49463:95::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49541:9:::1;49533:5;:17;;;;49463:95:::0;:::o;30487:365::-;30676:41;30695:12;:10;:12::i;:::-;30709:7;30676:18;:41::i;:::-;30654:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30805:39;30819:4;30825:2;30829:7;30838:5;30805:13;:39::i;:::-;30487:365;;;;:::o;48457:28::-;;;;;;;;;;;;;:::o;48591:31::-;;;;;;;;;;;;;:::o;27376:468::-;27494:13;27547:16;27555:7;27547;:16::i;:::-;27525:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27651:21;27675:10;:8;:10::i;:::-;27651:34;;27740:1;27722:7;27716:21;:25;:120;;;;;;;;;;;;;;;;;27785:7;27794:18;:7;:16;:18::i;:::-;27768:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27716:120;27696:140;;;27376:468;;;:::o;29503:214::-;29645:4;29674:18;:25;29693:5;29674:25;;;;;;;;;;;;;;;:35;29700:8;29674:35;;;;;;;;;;;;;;;;;;;;;;;;;29667:42;;29503:214;;;;:::o;9988:229::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10111:1:::1;10091:22;;:8;:22;;;;10069:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10190:19;10200:8;10190:9;:19::i;:::-;9988:229:::0;:::o;49829:92::-;9319:12;:10;:12::i;:::-;9308:23;;:7;:5;:7::i;:::-;:23;;;9300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49902:11:::1;;;;;;;;;;;49901:12;49887:11;;:26;;;;;;;;;;;;;;;;;;49829:92::o:0;51508:1137::-;51623:12;51638:10;51623:25;;51695:1;51681:15;;:10;;:15;;51659:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;51789:11;;;;;;;;;;;51781:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;51848:8;;;;;;;;;;;51847:9;51839:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;51911:139;51948:6;;51911:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51973:10;;52029:4;52012:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;52002:33;;;;;;51911:18;:139::i;:::-;51889:226;;;;;;;;;;;;:::i;:::-;;;;;;;;;52174:4;52164:6;52148:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:30;;52126:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;52304:1;52295:6;:10;:26;;;;;52319:2;52309:6;:12;;52295:26;52273:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;52471:6;52456:12;;:21;;;;:::i;:::-;52443:9;:34;;52421:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;52568:9;52563:75;52587:6;52583:1;:10;52563:75;;;52615:11;52621:4;52615:5;:11::i;:::-;52595:3;;;;;:::i;:::-;;;;52563:75;;;;51612:1033;51508:1137;;;:::o;25863:355::-;26010:4;26067:25;26052:40;;;:11;:40;;;;:105;;;;26124:33;26109:48;;;:11;:48;;;;26052:105;:158;;;;26174:36;26198:11;26174:23;:36::i;:::-;26052:158;26032:178;;25863:355;;;:::o;32399:127::-;32464:4;32516:1;32488:30;;:7;:16;32496:7;32488:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32481:37;;32399:127;;;:::o;2061:98::-;2114:7;2141:10;2134:17;;2061:98;:::o;36522:174::-;36624:2;36597:15;:24;36613:7;36597:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36680:7;36676:2;36642:46;;36651:23;36666:7;36651:14;:23::i;:::-;36642:46;;;;;;;;;;;;36522:174;;:::o;32693:452::-;32822:4;32866:16;32874:7;32866;:16::i;:::-;32844:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32965:13;32981:23;32996:7;32981:14;:23::i;:::-;32965:39;;33034:5;33023:16;;:7;:16;;;:64;;;;33080:7;33056:31;;:20;33068:7;33056:11;:20::i;:::-;:31;;;33023:64;:113;;;;33104:32;33121:5;33128:7;33104:16;:32::i;:::-;33023:113;33015:122;;;32693:452;;;;:::o;35789:615::-;35962:4;35935:31;;:23;35950:7;35935:14;:23::i;:::-;:31;;;35913:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;36068:1;36054:16;;:2;:16;;;;36046:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36124:39;36145:4;36151:2;36155:7;36124:20;:39::i;:::-;36228:29;36245:1;36249:7;36228:8;:29::i;:::-;36289:1;36270:9;:15;36280:4;36270:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36318:1;36301:9;:13;36311:2;36301:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36349:2;36330:7;:16;36338:7;36330:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36388:7;36384:2;36369:27;;36378:4;36369:27;;;;;;;;;;;;35789:615;;;:::o;53503:192::-;53550:20;:8;:18;:20::i;:::-;53581:15;53599:18;:8;:16;:18::i;:::-;53581:36;;53628:23;53638:3;53643:7;53628:9;:23::i;:::-;53667:20;53679:7;53667:20;;;;;;:::i;:::-;;;;;;;;53539:156;53503:192;:::o;10225:173::-;10281:16;10300:6;;;;;;;;;;;10281:25;;10326:8;10317:6;;:17;;;;;;;;;;;;;;;;;;10381:8;10350:40;;10371:8;10350:40;;;;;;;;;;;;10270:128;10225:173;:::o;50709:190::-;50784:12;50810:8;50802:22;;50832:7;50802:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50783:61;;;50863:7;50855:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;50772:127;50709:190;;:::o;31734:352::-;31891:28;31901:4;31907:2;31911:7;31891:9;:28::i;:::-;31952:48;31975:4;31981:2;31985:7;31994:5;31952:22;:48::i;:::-;31930:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;31734:352;;;;:::o;53703:113::-;53763:13;53796:12;53789:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53703:113;:::o;12730:723::-;12786:13;13016:1;13007:5;:10;13003:53;;;13034:10;;;;;;;;;;;;;;;;;;;;;13003:53;13066:12;13081:5;13066:20;;13097:14;13122:78;13137:1;13129:4;:9;13122:78;;13155:8;;;;;:::i;:::-;;;;13186:2;13178:10;;;;;:::i;:::-;;;13122:78;;;13210:19;13242:6;13232:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13210:39;;13260:154;13276:1;13267:5;:10;13260:154;;13304:1;13294:11;;;;;:::i;:::-;;;13371:2;13363:5;:10;;;;:::i;:::-;13350:2;:24;;;;:::i;:::-;13337:39;;13320:6;13327;13320:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;13400:2;13391:11;;;;;:::i;:::-;;;13260:154;;;13438:6;13424:21;;;;;12730:723;;;;:::o;47116:910::-;47241:4;47258:20;47281:4;47258:27;;47303:9;47298:605;47322:5;:12;47318:1;:16;47298:605;;;47356:20;47379:5;47385:1;47379:8;;;;;;;;:::i;:::-;;;;;;;;47356:31;;47424:12;47408;:28;47404:488;;47600:12;47614;47583:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47551:95;;;;;;47536:110;;47404:488;;;47830:12;47844;47813:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47781:95;;;;;;47766:110;;47404:488;47341:562;47336:3;;;;;:::i;:::-;;;;47298:605;;;;48014:4;47998:12;:20;47991:27;;;47116:910;;;;;:::o;12209:207::-;12339:4;12383:25;12368:40;;;:11;:40;;;;12361:47;;12209:207;;;:::o;41798:589::-;41942:45;41969:4;41975:2;41979:7;41942:26;:45::i;:::-;42020:1;42004:18;;:4;:18;;;42000:187;;;42039:40;42071:7;42039:31;:40::i;:::-;42000:187;;;42109:2;42101:10;;:4;:10;;;42097:90;;42128:47;42161:4;42167:7;42128:32;:47::i;:::-;42097:90;42000:187;42215:1;42201:16;;:2;:16;;;42197:183;;;42234:45;42271:7;42234:36;:45::i;:::-;42197:183;;;42307:4;42301:10;;:2;:10;;;42297:83;;42328:40;42356:2;42360:7;42328:27;:40::i;:::-;42297:83;42197:183;41798:589;;;:::o;970:127::-;1077:1;1059:7;:14;;;:19;;;;;;;;;;;970:127;:::o;848:114::-;913:7;940;:14;;;933:21;;848:114;;;:::o;33487:110::-;33563:26;33573:2;33577:7;33563:26;;;;;;;;;;;;:9;:26::i;:::-;33487:110;;:::o;37261:984::-;37416:4;37437:15;:2;:13;;;:15::i;:::-;37433:805;;;37506:2;37490:36;;;37549:12;:10;:12::i;:::-;37584:4;37611:7;37641:5;37490:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37469:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37869:1;37852:6;:13;:18;37848:320;;;37895:108;;;;;;;;;;:::i;:::-;;;;;;;;37848:320;38118:6;38112:13;38103:6;38099:2;38095:15;38088:38;37469:714;37739:45;;;37729:55;;;:6;:55;;;;37722:62;;;;;37433:805;38222:4;38215:11;;37261:984;;;;;;;:::o;38817:126::-;;;;:::o;43110:164::-;43214:10;:17;;;;43187:15;:24;43203:7;43187:24;;;;;;;;;;;:44;;;;43242:10;43258:7;43242:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43110:164;:::o;43901:1002::-;44181:22;44231:1;44206:22;44223:4;44206:16;:22::i;:::-;:26;;;;:::i;:::-;44181:51;;44243:18;44264:17;:26;44282:7;44264:26;;;;;;;;;;;;44243:47;;44411:14;44397:10;:28;44393:328;;44442:19;44464:12;:18;44477:4;44464:18;;;;;;;;;;;;;;;:34;44483:14;44464:34;;;;;;;;;;;;44442:56;;44548:11;44515:12;:18;44528:4;44515:18;;;;;;;;;;;;;;;:30;44534:10;44515:30;;;;;;;;;;;:44;;;;44665:10;44632:17;:30;44650:11;44632:30;;;;;;;;;;;:43;;;;44427:294;44393:328;44817:17;:26;44835:7;44817:26;;;;;;;;;;;44810:33;;;44861:12;:18;44874:4;44861:18;;;;;;;;;;;;;;;:34;44880:14;44861:34;;;;;;;;;;;44854:41;;;43996:907;;43901:1002;;:::o;45198:1079::-;45451:22;45496:1;45476:10;:17;;;;:21;;;;:::i;:::-;45451:46;;45508:18;45529:15;:24;45545:7;45529:24;;;;;;;;;;;;45508:45;;45880:19;45902:10;45913:14;45902:26;;;;;;;;:::i;:::-;;;;;;;;;;45880:48;;45966:11;45941:10;45952;45941:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46077:10;46046:15;:28;46062:11;46046:28;;;;;;;;;;;:41;;;;46218:15;:24;46234:7;46218:24;;;;;;;;;;;46211:31;;;46253:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45269:1008;;;45198:1079;:::o;42688:221::-;42773:14;42790:20;42807:2;42790:16;:20::i;:::-;42773:37;;42848:7;42821:12;:16;42834:2;42821:16;;;;;;;;;;;;;;;:24;42838:6;42821:24;;;;;;;;;;;:34;;;;42895:6;42866:17;:26;42884:7;42866:26;;;;;;;;;;;:35;;;;42762:147;42688:221;;:::o;33824:321::-;33954:18;33960:2;33964:7;33954:5;:18::i;:::-;34005:54;34036:1;34040:2;34044:7;34053:5;34005:22;:54::i;:::-;33983:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33824:321;;;:::o;15283:387::-;15343:4;15551:12;15618:7;15606:20;15598:28;;15661:1;15654:4;:8;15647:15;;;15283:387;;;:::o;34481:382::-;34575:1;34561:16;;:2;:16;;;;34553:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34634:16;34642:7;34634;:16::i;:::-;34633:17;34625:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34696:45;34725:1;34729:2;34733:7;34696:20;:45::i;:::-;34771:1;34754:9;:13;34764:2;34754:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34802:2;34783:7;:16;34791:7;34783:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34847:7;34843:2;34822:33;;34839:1;34822:33;;;;;;;;;;;;34481:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:139::-;2353:5;2391:6;2378:20;2369:29;;2407:33;2434:5;2407:33;:::i;:::-;2307:139;;;;:::o;2452:137::-;2497:5;2535:6;2522:20;2513:29;;2551:32;2577:5;2551:32;:::i;:::-;2452:137;;;;:::o;2595:141::-;2651:5;2682:6;2676:13;2667:22;;2698:32;2724:5;2698:32;:::i;:::-;2595:141;;;;:::o;2755:338::-;2810:5;2859:3;2852:4;2844:6;2840:17;2836:27;2826:122;;2867:79;;:::i;:::-;2826:122;2984:6;2971:20;3009:78;3083:3;3075:6;3068:4;3060:6;3056:17;3009:78;:::i;:::-;3000:87;;2816:277;2755:338;;;;:::o;3113:340::-;3169:5;3218:3;3211:4;3203:6;3199:17;3195:27;3185:122;;3226:79;;:::i;:::-;3185:122;3343:6;3330:20;3368:79;3443:3;3435:6;3428:4;3420:6;3416:17;3368:79;:::i;:::-;3359:88;;3175:278;3113:340;;;;:::o;3459:139::-;3505:5;3543:6;3530:20;3521:29;;3559:33;3586:5;3559:33;:::i;:::-;3459:139;;;;:::o;3604:135::-;3648:5;3686:6;3673:20;3664:29;;3702:31;3727:5;3702:31;:::i;:::-;3604:135;;;;:::o;3745:329::-;3804:6;3853:2;3841:9;3832:7;3828:23;3824:32;3821:119;;;3859:79;;:::i;:::-;3821:119;3979:1;4004:53;4049:7;4040:6;4029:9;4025:22;4004:53;:::i;:::-;3994:63;;3950:117;3745:329;;;;:::o;4080:474::-;4148:6;4156;4205:2;4193:9;4184:7;4180:23;4176:32;4173:119;;;4211:79;;:::i;:::-;4173:119;4331:1;4356:53;4401:7;4392:6;4381:9;4377:22;4356:53;:::i;:::-;4346:63;;4302:117;4458:2;4484:53;4529:7;4520:6;4509:9;4505:22;4484:53;:::i;:::-;4474:63;;4429:118;4080:474;;;;;:::o;4560:619::-;4637:6;4645;4653;4702:2;4690:9;4681:7;4677:23;4673:32;4670:119;;;4708:79;;:::i;:::-;4670:119;4828:1;4853:53;4898:7;4889:6;4878:9;4874:22;4853:53;:::i;:::-;4843:63;;4799:117;4955:2;4981:53;5026:7;5017:6;5006:9;5002:22;4981:53;:::i;:::-;4971:63;;4926:118;5083:2;5109:53;5154:7;5145:6;5134:9;5130:22;5109:53;:::i;:::-;5099:63;;5054:118;4560:619;;;;;:::o;5185:943::-;5280:6;5288;5296;5304;5353:3;5341:9;5332:7;5328:23;5324:33;5321:120;;;5360:79;;:::i;:::-;5321:120;5480:1;5505:53;5550:7;5541:6;5530:9;5526:22;5505:53;:::i;:::-;5495:63;;5451:117;5607:2;5633:53;5678:7;5669:6;5658:9;5654:22;5633:53;:::i;:::-;5623:63;;5578:118;5735:2;5761:53;5806:7;5797:6;5786:9;5782:22;5761:53;:::i;:::-;5751:63;;5706:118;5891:2;5880:9;5876:18;5863:32;5922:18;5914:6;5911:30;5908:117;;;5944:79;;:::i;:::-;5908:117;6049:62;6103:7;6094:6;6083:9;6079:22;6049:62;:::i;:::-;6039:72;;5834:287;5185:943;;;;;;;:::o;6134:468::-;6199:6;6207;6256:2;6244:9;6235:7;6231:23;6227:32;6224:119;;;6262:79;;:::i;:::-;6224:119;6382:1;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;:::i;:::-;6397:63;;6353:117;6509:2;6535:50;6577:7;6568:6;6557:9;6553:22;6535:50;:::i;:::-;6525:60;;6480:115;6134:468;;;;;:::o;6608:474::-;6676:6;6684;6733:2;6721:9;6712:7;6708:23;6704:32;6701:119;;;6739:79;;:::i;:::-;6701:119;6859:1;6884:53;6929:7;6920:6;6909:9;6905:22;6884:53;:::i;:::-;6874:63;;6830:117;6986:2;7012:53;7057:7;7048:6;7037:9;7033:22;7012:53;:::i;:::-;7002:63;;6957:118;6608:474;;;;;:::o;7088:559::-;7174:6;7182;7231:2;7219:9;7210:7;7206:23;7202:32;7199:119;;;7237:79;;:::i;:::-;7199:119;7385:1;7374:9;7370:17;7357:31;7415:18;7407:6;7404:30;7401:117;;;7437:79;;:::i;:::-;7401:117;7550:80;7622:7;7613:6;7602:9;7598:22;7550:80;:::i;:::-;7532:98;;;;7328:312;7088:559;;;;;:::o;7653:704::-;7748:6;7756;7764;7813:2;7801:9;7792:7;7788:23;7784:32;7781:119;;;7819:79;;:::i;:::-;7781:119;7967:1;7956:9;7952:17;7939:31;7997:18;7989:6;7986:30;7983:117;;;8019:79;;:::i;:::-;7983:117;8132:80;8204:7;8195:6;8184:9;8180:22;8132:80;:::i;:::-;8114:98;;;;7910:312;8261:2;8287:53;8332:7;8323:6;8312:9;8308:22;8287:53;:::i;:::-;8277:63;;8232:118;7653:704;;;;;:::o;8363:329::-;8422:6;8471:2;8459:9;8450:7;8446:23;8442:32;8439:119;;;8477:79;;:::i;:::-;8439:119;8597:1;8622:53;8667:7;8658:6;8647:9;8643:22;8622:53;:::i;:::-;8612:63;;8568:117;8363:329;;;;:::o;8698:327::-;8756:6;8805:2;8793:9;8784:7;8780:23;8776:32;8773:119;;;8811:79;;:::i;:::-;8773:119;8931:1;8956:52;9000:7;8991:6;8980:9;8976:22;8956:52;:::i;:::-;8946:62;;8902:116;8698:327;;;;:::o;9031:349::-;9100:6;9149:2;9137:9;9128:7;9124:23;9120:32;9117:119;;;9155:79;;:::i;:::-;9117:119;9275:1;9300:63;9355:7;9346:6;9335:9;9331:22;9300:63;:::i;:::-;9290:73;;9246:127;9031:349;;;;:::o;9386:509::-;9455:6;9504:2;9492:9;9483:7;9479:23;9475:32;9472:119;;;9510:79;;:::i;:::-;9472:119;9658:1;9647:9;9643:17;9630:31;9688:18;9680:6;9677:30;9674:117;;;9710:79;;:::i;:::-;9674:117;9815:63;9870:7;9861:6;9850:9;9846:22;9815:63;:::i;:::-;9805:73;;9601:287;9386:509;;;;:::o;9901:329::-;9960:6;10009:2;9997:9;9988:7;9984:23;9980:32;9977:119;;;10015:79;;:::i;:::-;9977:119;10135:1;10160:53;10205:7;10196:6;10185:9;10181:22;10160:53;:::i;:::-;10150:63;;10106:117;9901:329;;;;:::o;10236:325::-;10293:6;10342:2;10330:9;10321:7;10317:23;10313:32;10310:119;;;10348:79;;:::i;:::-;10310:119;10468:1;10493:51;10536:7;10527:6;10516:9;10512:22;10493:51;:::i;:::-;10483:61;;10439:115;10236:325;;;;:::o;10567:179::-;10636:10;10657:46;10699:3;10691:6;10657:46;:::i;:::-;10735:4;10730:3;10726:14;10712:28;;10567:179;;;;:::o;10752:118::-;10839:24;10857:5;10839:24;:::i;:::-;10834:3;10827:37;10752:118;;:::o;10876:157::-;10981:45;11001:24;11019:5;11001:24;:::i;:::-;10981:45;:::i;:::-;10976:3;10969:58;10876:157;;:::o;11069:732::-;11188:3;11217:54;11265:5;11217:54;:::i;:::-;11287:86;11366:6;11361:3;11287:86;:::i;:::-;11280:93;;11397:56;11447:5;11397:56;:::i;:::-;11476:7;11507:1;11492:284;11517:6;11514:1;11511:13;11492:284;;;11593:6;11587:13;11620:63;11679:3;11664:13;11620:63;:::i;:::-;11613:70;;11706:60;11759:6;11706:60;:::i;:::-;11696:70;;11552:224;11539:1;11536;11532:9;11527:14;;11492:284;;;11496:14;11792:3;11785:10;;11193:608;;;11069:732;;;;:::o;11807:109::-;11888:21;11903:5;11888:21;:::i;:::-;11883:3;11876:34;11807:109;;:::o;11922:118::-;12009:24;12027:5;12009:24;:::i;:::-;12004:3;11997:37;11922:118;;:::o;12046:157::-;12151:45;12171:24;12189:5;12171:24;:::i;:::-;12151:45;:::i;:::-;12146:3;12139:58;12046:157;;:::o;12209:360::-;12295:3;12323:38;12355:5;12323:38;:::i;:::-;12377:70;12440:6;12435:3;12377:70;:::i;:::-;12370:77;;12456:52;12501:6;12496:3;12489:4;12482:5;12478:16;12456:52;:::i;:::-;12533:29;12555:6;12533:29;:::i;:::-;12528:3;12524:39;12517:46;;12299:270;12209:360;;;;:::o;12575:364::-;12663:3;12691:39;12724:5;12691:39;:::i;:::-;12746:71;12810:6;12805:3;12746:71;:::i;:::-;12739:78;;12826:52;12871:6;12866:3;12859:4;12852:5;12848:16;12826:52;:::i;:::-;12903:29;12925:6;12903:29;:::i;:::-;12898:3;12894:39;12887:46;;12667:272;12575:364;;;;:::o;12945:377::-;13051:3;13079:39;13112:5;13079:39;:::i;:::-;13134:89;13216:6;13211:3;13134:89;:::i;:::-;13127:96;;13232:52;13277:6;13272:3;13265:4;13258:5;13254:16;13232:52;:::i;:::-;13309:6;13304:3;13300:16;13293:23;;13055:267;12945:377;;;;:::o;13328:366::-;13470:3;13491:67;13555:2;13550:3;13491:67;:::i;:::-;13484:74;;13567:93;13656:3;13567:93;:::i;:::-;13685:2;13680:3;13676:12;13669:19;;13328:366;;;:::o;13700:::-;13842:3;13863:67;13927:2;13922:3;13863:67;:::i;:::-;13856:74;;13939:93;14028:3;13939:93;:::i;:::-;14057:2;14052:3;14048:12;14041:19;;13700:366;;;:::o;14072:::-;14214:3;14235:67;14299:2;14294:3;14235:67;:::i;:::-;14228:74;;14311:93;14400:3;14311:93;:::i;:::-;14429:2;14424:3;14420:12;14413:19;;14072:366;;;:::o;14444:::-;14586:3;14607:67;14671:2;14666:3;14607:67;:::i;:::-;14600:74;;14683:93;14772:3;14683:93;:::i;:::-;14801:2;14796:3;14792:12;14785:19;;14444:366;;;:::o;14816:::-;14958:3;14979:67;15043:2;15038:3;14979:67;:::i;:::-;14972:74;;15055:93;15144:3;15055:93;:::i;:::-;15173:2;15168:3;15164:12;15157:19;;14816:366;;;:::o;15188:::-;15330:3;15351:67;15415:2;15410:3;15351:67;:::i;:::-;15344:74;;15427:93;15516:3;15427:93;:::i;:::-;15545:2;15540:3;15536:12;15529:19;;15188:366;;;:::o;15560:::-;15702:3;15723:67;15787:2;15782:3;15723:67;:::i;:::-;15716:74;;15799:93;15888:3;15799:93;:::i;:::-;15917:2;15912:3;15908:12;15901:19;;15560:366;;;:::o;15932:::-;16074:3;16095:67;16159:2;16154:3;16095:67;:::i;:::-;16088:74;;16171:93;16260:3;16171:93;:::i;:::-;16289:2;16284:3;16280:12;16273:19;;15932:366;;;:::o;16304:::-;16446:3;16467:67;16531:2;16526:3;16467:67;:::i;:::-;16460:74;;16543:93;16632:3;16543:93;:::i;:::-;16661:2;16656:3;16652:12;16645:19;;16304:366;;;:::o;16676:::-;16818:3;16839:67;16903:2;16898:3;16839:67;:::i;:::-;16832:74;;16915:93;17004:3;16915:93;:::i;:::-;17033:2;17028:3;17024:12;17017:19;;16676:366;;;:::o;17048:::-;17190:3;17211:67;17275:2;17270:3;17211:67;:::i;:::-;17204:74;;17287:93;17376:3;17287:93;:::i;:::-;17405:2;17400:3;17396:12;17389:19;;17048:366;;;:::o;17420:::-;17562:3;17583:67;17647:2;17642:3;17583:67;:::i;:::-;17576:74;;17659:93;17748:3;17659:93;:::i;:::-;17777:2;17772:3;17768:12;17761:19;;17420:366;;;:::o;17792:::-;17934:3;17955:67;18019:2;18014:3;17955:67;:::i;:::-;17948:74;;18031:93;18120:3;18031:93;:::i;:::-;18149:2;18144:3;18140:12;18133:19;;17792:366;;;:::o;18164:::-;18306:3;18327:67;18391:2;18386:3;18327:67;:::i;:::-;18320:74;;18403:93;18492:3;18403:93;:::i;:::-;18521:2;18516:3;18512:12;18505:19;;18164:366;;;:::o;18536:::-;18678:3;18699:67;18763:2;18758:3;18699:67;:::i;:::-;18692:74;;18775:93;18864:3;18775:93;:::i;:::-;18893:2;18888:3;18884:12;18877:19;;18536:366;;;:::o;18908:::-;19050:3;19071:67;19135:2;19130:3;19071:67;:::i;:::-;19064:74;;19147:93;19236:3;19147:93;:::i;:::-;19265:2;19260:3;19256:12;19249:19;;18908:366;;;:::o;19280:::-;19422:3;19443:67;19507:2;19502:3;19443:67;:::i;:::-;19436:74;;19519:93;19608:3;19519:93;:::i;:::-;19637:2;19632:3;19628:12;19621:19;;19280:366;;;:::o;19652:::-;19794:3;19815:67;19879:2;19874:3;19815:67;:::i;:::-;19808:74;;19891:93;19980:3;19891:93;:::i;:::-;20009:2;20004:3;20000:12;19993:19;;19652:366;;;:::o;20024:::-;20166:3;20187:67;20251:2;20246:3;20187:67;:::i;:::-;20180:74;;20263:93;20352:3;20263:93;:::i;:::-;20381:2;20376:3;20372:12;20365:19;;20024:366;;;:::o;20396:::-;20538:3;20559:67;20623:2;20618:3;20559:67;:::i;:::-;20552:74;;20635:93;20724:3;20635:93;:::i;:::-;20753:2;20748:3;20744:12;20737:19;;20396:366;;;:::o;20768:::-;20910:3;20931:67;20995:2;20990:3;20931:67;:::i;:::-;20924:74;;21007:93;21096:3;21007:93;:::i;:::-;21125:2;21120:3;21116:12;21109:19;;20768:366;;;:::o;21140:::-;21282:3;21303:67;21367:2;21362:3;21303:67;:::i;:::-;21296:74;;21379:93;21468:3;21379:93;:::i;:::-;21497:2;21492:3;21488:12;21481:19;;21140:366;;;:::o;21512:::-;21654:3;21675:67;21739:2;21734:3;21675:67;:::i;:::-;21668:74;;21751:93;21840:3;21751:93;:::i;:::-;21869:2;21864:3;21860:12;21853:19;;21512:366;;;:::o;21884:::-;22026:3;22047:67;22111:2;22106:3;22047:67;:::i;:::-;22040:74;;22123:93;22212:3;22123:93;:::i;:::-;22241:2;22236:3;22232:12;22225:19;;21884:366;;;:::o;22256:::-;22398:3;22419:67;22483:2;22478:3;22419:67;:::i;:::-;22412:74;;22495:93;22584:3;22495:93;:::i;:::-;22613:2;22608:3;22604:12;22597:19;;22256:366;;;:::o;22628:::-;22770:3;22791:67;22855:2;22850:3;22791:67;:::i;:::-;22784:74;;22867:93;22956:3;22867:93;:::i;:::-;22985:2;22980:3;22976:12;22969:19;;22628:366;;;:::o;23000:::-;23142:3;23163:67;23227:2;23222:3;23163:67;:::i;:::-;23156:74;;23239:93;23328:3;23239:93;:::i;:::-;23357:2;23352:3;23348:12;23341:19;;23000:366;;;:::o;23372:::-;23514:3;23535:67;23599:2;23594:3;23535:67;:::i;:::-;23528:74;;23611:93;23700:3;23611:93;:::i;:::-;23729:2;23724:3;23720:12;23713:19;;23372:366;;;:::o;23744:::-;23886:3;23907:67;23971:2;23966:3;23907:67;:::i;:::-;23900:74;;23983:93;24072:3;23983:93;:::i;:::-;24101:2;24096:3;24092:12;24085:19;;23744:366;;;:::o;24116:398::-;24275:3;24296:83;24377:1;24372:3;24296:83;:::i;:::-;24289:90;;24388:93;24477:3;24388:93;:::i;:::-;24506:1;24501:3;24497:11;24490:18;;24116:398;;;:::o;24520:366::-;24662:3;24683:67;24747:2;24742:3;24683:67;:::i;:::-;24676:74;;24759:93;24848:3;24759:93;:::i;:::-;24877:2;24872:3;24868:12;24861:19;;24520:366;;;:::o;24892:::-;25034:3;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25131:93;25220:3;25131:93;:::i;:::-;25249:2;25244:3;25240:12;25233:19;;24892:366;;;:::o;25264:::-;25406:3;25427:67;25491:2;25486:3;25427:67;:::i;:::-;25420:74;;25503:93;25592:3;25503:93;:::i;:::-;25621:2;25616:3;25612:12;25605:19;;25264:366;;;:::o;25636:365::-;25778:3;25799:66;25863:1;25858:3;25799:66;:::i;:::-;25792:73;;25874:93;25963:3;25874:93;:::i;:::-;25992:2;25987:3;25983:12;25976:19;;25636:365;;;:::o;26007:366::-;26149:3;26170:67;26234:2;26229:3;26170:67;:::i;:::-;26163:74;;26246:93;26335:3;26246:93;:::i;:::-;26364:2;26359:3;26355:12;26348:19;;26007:366;;;:::o;26379:108::-;26456:24;26474:5;26456:24;:::i;:::-;26451:3;26444:37;26379:108;;:::o;26493:118::-;26580:24;26598:5;26580:24;:::i;:::-;26575:3;26568:37;26493:118;;:::o;26617:112::-;26700:22;26716:5;26700:22;:::i;:::-;26695:3;26688:35;26617:112;;:::o;26735:256::-;26847:3;26862:75;26933:3;26924:6;26862:75;:::i;:::-;26962:2;26957:3;26953:12;26946:19;;26982:3;26975:10;;26735:256;;;;:::o;26997:397::-;27137:3;27152:75;27223:3;27214:6;27152:75;:::i;:::-;27252:2;27247:3;27243:12;27236:19;;27265:75;27336:3;27327:6;27265:75;:::i;:::-;27365:2;27360:3;27356:12;27349:19;;27385:3;27378:10;;26997:397;;;;;:::o;27400:435::-;27580:3;27602:95;27693:3;27684:6;27602:95;:::i;:::-;27595:102;;27714:95;27805:3;27796:6;27714:95;:::i;:::-;27707:102;;27826:3;27819:10;;27400:435;;;;;:::o;27841:379::-;28025:3;28047:147;28190:3;28047:147;:::i;:::-;28040:154;;28211:3;28204:10;;27841:379;;;:::o;28226:222::-;28319:4;28357:2;28346:9;28342:18;28334:26;;28370:71;28438:1;28427:9;28423:17;28414:6;28370:71;:::i;:::-;28226:222;;;;:::o;28454:640::-;28649:4;28687:3;28676:9;28672:19;28664:27;;28701:71;28769:1;28758:9;28754:17;28745:6;28701:71;:::i;:::-;28782:72;28850:2;28839:9;28835:18;28826:6;28782:72;:::i;:::-;28864;28932:2;28921:9;28917:18;28908:6;28864:72;:::i;:::-;28983:9;28977:4;28973:20;28968:2;28957:9;28953:18;28946:48;29011:76;29082:4;29073:6;29011:76;:::i;:::-;29003:84;;28454:640;;;;;;;:::o;29100:373::-;29243:4;29281:2;29270:9;29266:18;29258:26;;29330:9;29324:4;29320:20;29316:1;29305:9;29301:17;29294:47;29358:108;29461:4;29452:6;29358:108;:::i;:::-;29350:116;;29100:373;;;;:::o;29479:210::-;29566:4;29604:2;29593:9;29589:18;29581:26;;29617:65;29679:1;29668:9;29664:17;29655:6;29617:65;:::i;:::-;29479:210;;;;:::o;29695:222::-;29788:4;29826:2;29815:9;29811:18;29803:26;;29839:71;29907:1;29896:9;29892:17;29883:6;29839:71;:::i;:::-;29695:222;;;;:::o;29923:313::-;30036:4;30074:2;30063:9;30059:18;30051:26;;30123:9;30117:4;30113:20;30109:1;30098:9;30094:17;30087:47;30151:78;30224:4;30215:6;30151:78;:::i;:::-;30143:86;;29923:313;;;;:::o;30242:419::-;30408:4;30446:2;30435:9;30431:18;30423:26;;30495:9;30489:4;30485:20;30481:1;30470:9;30466:17;30459:47;30523:131;30649:4;30523:131;:::i;:::-;30515:139;;30242:419;;;:::o;30667:::-;30833:4;30871:2;30860:9;30856:18;30848:26;;30920:9;30914:4;30910:20;30906:1;30895:9;30891:17;30884:47;30948:131;31074:4;30948:131;:::i;:::-;30940:139;;30667:419;;;:::o;31092:::-;31258:4;31296:2;31285:9;31281:18;31273:26;;31345:9;31339:4;31335:20;31331:1;31320:9;31316:17;31309:47;31373:131;31499:4;31373:131;:::i;:::-;31365:139;;31092:419;;;:::o;31517:::-;31683:4;31721:2;31710:9;31706:18;31698:26;;31770:9;31764:4;31760:20;31756:1;31745:9;31741:17;31734:47;31798:131;31924:4;31798:131;:::i;:::-;31790:139;;31517:419;;;:::o;31942:::-;32108:4;32146:2;32135:9;32131:18;32123:26;;32195:9;32189:4;32185:20;32181:1;32170:9;32166:17;32159:47;32223:131;32349:4;32223:131;:::i;:::-;32215:139;;31942:419;;;:::o;32367:::-;32533:4;32571:2;32560:9;32556:18;32548:26;;32620:9;32614:4;32610:20;32606:1;32595:9;32591:17;32584:47;32648:131;32774:4;32648:131;:::i;:::-;32640:139;;32367:419;;;:::o;32792:::-;32958:4;32996:2;32985:9;32981:18;32973:26;;33045:9;33039:4;33035:20;33031:1;33020:9;33016:17;33009:47;33073:131;33199:4;33073:131;:::i;:::-;33065:139;;32792:419;;;:::o;33217:::-;33383:4;33421:2;33410:9;33406:18;33398:26;;33470:9;33464:4;33460:20;33456:1;33445:9;33441:17;33434:47;33498:131;33624:4;33498:131;:::i;:::-;33490:139;;33217:419;;;:::o;33642:::-;33808:4;33846:2;33835:9;33831:18;33823:26;;33895:9;33889:4;33885:20;33881:1;33870:9;33866:17;33859:47;33923:131;34049:4;33923:131;:::i;:::-;33915:139;;33642:419;;;:::o;34067:::-;34233:4;34271:2;34260:9;34256:18;34248:26;;34320:9;34314:4;34310:20;34306:1;34295:9;34291:17;34284:47;34348:131;34474:4;34348:131;:::i;:::-;34340:139;;34067:419;;;:::o;34492:::-;34658:4;34696:2;34685:9;34681:18;34673:26;;34745:9;34739:4;34735:20;34731:1;34720:9;34716:17;34709:47;34773:131;34899:4;34773:131;:::i;:::-;34765:139;;34492:419;;;:::o;34917:::-;35083:4;35121:2;35110:9;35106:18;35098:26;;35170:9;35164:4;35160:20;35156:1;35145:9;35141:17;35134:47;35198:131;35324:4;35198:131;:::i;:::-;35190:139;;34917:419;;;:::o;35342:::-;35508:4;35546:2;35535:9;35531:18;35523:26;;35595:9;35589:4;35585:20;35581:1;35570:9;35566:17;35559:47;35623:131;35749:4;35623:131;:::i;:::-;35615:139;;35342:419;;;:::o;35767:::-;35933:4;35971:2;35960:9;35956:18;35948:26;;36020:9;36014:4;36010:20;36006:1;35995:9;35991:17;35984:47;36048:131;36174:4;36048:131;:::i;:::-;36040:139;;35767:419;;;:::o;36192:::-;36358:4;36396:2;36385:9;36381:18;36373:26;;36445:9;36439:4;36435:20;36431:1;36420:9;36416:17;36409:47;36473:131;36599:4;36473:131;:::i;:::-;36465:139;;36192:419;;;:::o;36617:::-;36783:4;36821:2;36810:9;36806:18;36798:26;;36870:9;36864:4;36860:20;36856:1;36845:9;36841:17;36834:47;36898:131;37024:4;36898:131;:::i;:::-;36890:139;;36617:419;;;:::o;37042:::-;37208:4;37246:2;37235:9;37231:18;37223:26;;37295:9;37289:4;37285:20;37281:1;37270:9;37266:17;37259:47;37323:131;37449:4;37323:131;:::i;:::-;37315:139;;37042:419;;;:::o;37467:::-;37633:4;37671:2;37660:9;37656:18;37648:26;;37720:9;37714:4;37710:20;37706:1;37695:9;37691:17;37684:47;37748:131;37874:4;37748:131;:::i;:::-;37740:139;;37467:419;;;:::o;37892:::-;38058:4;38096:2;38085:9;38081:18;38073:26;;38145:9;38139:4;38135:20;38131:1;38120:9;38116:17;38109:47;38173:131;38299:4;38173:131;:::i;:::-;38165:139;;37892:419;;;:::o;38317:::-;38483:4;38521:2;38510:9;38506:18;38498:26;;38570:9;38564:4;38560:20;38556:1;38545:9;38541:17;38534:47;38598:131;38724:4;38598:131;:::i;:::-;38590:139;;38317:419;;;:::o;38742:::-;38908:4;38946:2;38935:9;38931:18;38923:26;;38995:9;38989:4;38985:20;38981:1;38970:9;38966:17;38959:47;39023:131;39149:4;39023:131;:::i;:::-;39015:139;;38742:419;;;:::o;39167:::-;39333:4;39371:2;39360:9;39356:18;39348:26;;39420:9;39414:4;39410:20;39406:1;39395:9;39391:17;39384:47;39448:131;39574:4;39448:131;:::i;:::-;39440:139;;39167:419;;;:::o;39592:::-;39758:4;39796:2;39785:9;39781:18;39773:26;;39845:9;39839:4;39835:20;39831:1;39820:9;39816:17;39809:47;39873:131;39999:4;39873:131;:::i;:::-;39865:139;;39592:419;;;:::o;40017:::-;40183:4;40221:2;40210:9;40206:18;40198:26;;40270:9;40264:4;40260:20;40256:1;40245:9;40241:17;40234:47;40298:131;40424:4;40298:131;:::i;:::-;40290:139;;40017:419;;;:::o;40442:::-;40608:4;40646:2;40635:9;40631:18;40623:26;;40695:9;40689:4;40685:20;40681:1;40670:9;40666:17;40659:47;40723:131;40849:4;40723:131;:::i;:::-;40715:139;;40442:419;;;:::o;40867:::-;41033:4;41071:2;41060:9;41056:18;41048:26;;41120:9;41114:4;41110:20;41106:1;41095:9;41091:17;41084:47;41148:131;41274:4;41148:131;:::i;:::-;41140:139;;40867:419;;;:::o;41292:::-;41458:4;41496:2;41485:9;41481:18;41473:26;;41545:9;41539:4;41535:20;41531:1;41520:9;41516:17;41509:47;41573:131;41699:4;41573:131;:::i;:::-;41565:139;;41292:419;;;:::o;41717:::-;41883:4;41921:2;41910:9;41906:18;41898:26;;41970:9;41964:4;41960:20;41956:1;41945:9;41941:17;41934:47;41998:131;42124:4;41998:131;:::i;:::-;41990:139;;41717:419;;;:::o;42142:::-;42308:4;42346:2;42335:9;42331:18;42323:26;;42395:9;42389:4;42385:20;42381:1;42370:9;42366:17;42359:47;42423:131;42549:4;42423:131;:::i;:::-;42415:139;;42142:419;;;:::o;42567:::-;42733:4;42771:2;42760:9;42756:18;42748:26;;42820:9;42814:4;42810:20;42806:1;42795:9;42791:17;42784:47;42848:131;42974:4;42848:131;:::i;:::-;42840:139;;42567:419;;;:::o;42992:::-;43158:4;43196:2;43185:9;43181:18;43173:26;;43245:9;43239:4;43235:20;43231:1;43220:9;43216:17;43209:47;43273:131;43399:4;43273:131;:::i;:::-;43265:139;;42992:419;;;:::o;43417:::-;43583:4;43621:2;43610:9;43606:18;43598:26;;43670:9;43664:4;43660:20;43656:1;43645:9;43641:17;43634:47;43698:131;43824:4;43698:131;:::i;:::-;43690:139;;43417:419;;;:::o;43842:::-;44008:4;44046:2;44035:9;44031:18;44023:26;;44095:9;44089:4;44085:20;44081:1;44070:9;44066:17;44059:47;44123:131;44249:4;44123:131;:::i;:::-;44115:139;;43842:419;;;:::o;44267:::-;44433:4;44471:2;44460:9;44456:18;44448:26;;44520:9;44514:4;44510:20;44506:1;44495:9;44491:17;44484:47;44548:131;44674:4;44548:131;:::i;:::-;44540:139;;44267:419;;;:::o;44692:222::-;44785:4;44823:2;44812:9;44808:18;44800:26;;44836:71;44904:1;44893:9;44889:17;44880:6;44836:71;:::i;:::-;44692:222;;;;:::o;44920:214::-;45009:4;45047:2;45036:9;45032:18;45024:26;;45060:67;45124:1;45113:9;45109:17;45100:6;45060:67;:::i;:::-;44920:214;;;;:::o;45140:129::-;45174:6;45201:20;;:::i;:::-;45191:30;;45230:33;45258:4;45250:6;45230:33;:::i;:::-;45140:129;;;:::o;45275:75::-;45308:6;45341:2;45335:9;45325:19;;45275:75;:::o;45356:307::-;45417:4;45507:18;45499:6;45496:30;45493:56;;;45529:18;;:::i;:::-;45493:56;45567:29;45589:6;45567:29;:::i;:::-;45559:37;;45651:4;45645;45641:15;45633:23;;45356:307;;;:::o;45669:308::-;45731:4;45821:18;45813:6;45810:30;45807:56;;;45843:18;;:::i;:::-;45807:56;45881:29;45903:6;45881:29;:::i;:::-;45873:37;;45965:4;45959;45955:15;45947:23;;45669:308;;;:::o;45983:132::-;46050:4;46073:3;46065:11;;46103:4;46098:3;46094:14;46086:22;;45983:132;;;:::o;46121:114::-;46188:6;46222:5;46216:12;46206:22;;46121:114;;;:::o;46241:98::-;46292:6;46326:5;46320:12;46310:22;;46241:98;;;:::o;46345:99::-;46397:6;46431:5;46425:12;46415:22;;46345:99;;;:::o;46450:113::-;46520:4;46552;46547:3;46543:14;46535:22;;46450:113;;;:::o;46569:184::-;46668:11;46702:6;46697:3;46690:19;46742:4;46737:3;46733:14;46718:29;;46569:184;;;;:::o;46759:168::-;46842:11;46876:6;46871:3;46864:19;46916:4;46911:3;46907:14;46892:29;;46759:168;;;;:::o;46933:147::-;47034:11;47071:3;47056:18;;46933:147;;;;:::o;47086:169::-;47170:11;47204:6;47199:3;47192:19;47244:4;47239:3;47235:14;47220:29;;47086:169;;;;:::o;47261:148::-;47363:11;47400:3;47385:18;;47261:148;;;;:::o;47415:305::-;47455:3;47474:20;47492:1;47474:20;:::i;:::-;47469:25;;47508:20;47526:1;47508:20;:::i;:::-;47503:25;;47662:1;47594:66;47590:74;47587:1;47584:81;47581:107;;;47668:18;;:::i;:::-;47581:107;47712:1;47709;47705:9;47698:16;;47415:305;;;;:::o;47726:185::-;47766:1;47783:20;47801:1;47783:20;:::i;:::-;47778:25;;47817:20;47835:1;47817:20;:::i;:::-;47812:25;;47856:1;47846:35;;47861:18;;:::i;:::-;47846:35;47903:1;47900;47896:9;47891:14;;47726:185;;;;:::o;47917:348::-;47957:7;47980:20;47998:1;47980:20;:::i;:::-;47975:25;;48014:20;48032:1;48014:20;:::i;:::-;48009:25;;48202:1;48134:66;48130:74;48127:1;48124:81;48119:1;48112:9;48105:17;48101:105;48098:131;;;48209:18;;:::i;:::-;48098:131;48257:1;48254;48250:9;48239:20;;47917:348;;;;:::o;48271:191::-;48311:4;48331:20;48349:1;48331:20;:::i;:::-;48326:25;;48365:20;48383:1;48365:20;:::i;:::-;48360:25;;48404:1;48401;48398:8;48395:34;;;48409:18;;:::i;:::-;48395:34;48454:1;48451;48447:9;48439:17;;48271:191;;;;:::o;48468:96::-;48505:7;48534:24;48552:5;48534:24;:::i;:::-;48523:35;;48468:96;;;:::o;48570:90::-;48604:7;48647:5;48640:13;48633:21;48622:32;;48570:90;;;:::o;48666:77::-;48703:7;48732:5;48721:16;;48666:77;;;:::o;48749:149::-;48785:7;48825:66;48818:5;48814:78;48803:89;;48749:149;;;:::o;48904:126::-;48941:7;48981:42;48974:5;48970:54;48959:65;;48904:126;;;:::o;49036:77::-;49073:7;49102:5;49091:16;;49036:77;;;:::o;49119:86::-;49154:7;49194:4;49187:5;49183:16;49172:27;;49119:86;;;:::o;49211:154::-;49295:6;49290:3;49285;49272:30;49357:1;49348:6;49343:3;49339:16;49332:27;49211:154;;;:::o;49371:307::-;49439:1;49449:113;49463:6;49460:1;49457:13;49449:113;;;49548:1;49543:3;49539:11;49533:18;49529:1;49524:3;49520:11;49513:39;49485:2;49482:1;49478:10;49473:15;;49449:113;;;49580:6;49577:1;49574:13;49571:101;;;49660:1;49651:6;49646:3;49642:16;49635:27;49571:101;49420:258;49371:307;;;:::o;49684:320::-;49728:6;49765:1;49759:4;49755:12;49745:22;;49812:1;49806:4;49802:12;49833:18;49823:81;;49889:4;49881:6;49877:17;49867:27;;49823:81;49951:2;49943:6;49940:14;49920:18;49917:38;49914:84;;;49970:18;;:::i;:::-;49914:84;49735:269;49684:320;;;:::o;50010:281::-;50093:27;50115:4;50093:27;:::i;:::-;50085:6;50081:40;50223:6;50211:10;50208:22;50187:18;50175:10;50172:34;50169:62;50166:88;;;50234:18;;:::i;:::-;50166:88;50274:10;50270:2;50263:22;50053:238;50010:281;;:::o;50297:233::-;50336:3;50359:24;50377:5;50359:24;:::i;:::-;50350:33;;50405:66;50398:5;50395:77;50392:103;;;50475:18;;:::i;:::-;50392:103;50522:1;50515:5;50511:13;50504:20;;50297:233;;;:::o;50536:100::-;50575:7;50604:26;50624:5;50604:26;:::i;:::-;50593:37;;50536:100;;;:::o;50642:79::-;50681:7;50710:5;50699:16;;50642:79;;;:::o;50727:94::-;50766:7;50795:20;50809:5;50795:20;:::i;:::-;50784:31;;50727:94;;;:::o;50827:176::-;50859:1;50876:20;50894:1;50876:20;:::i;:::-;50871:25;;50910:20;50928:1;50910:20;:::i;:::-;50905:25;;50949:1;50939:35;;50954:18;;:::i;:::-;50939:35;50995:1;50992;50988:9;50983:14;;50827:176;;;;:::o;51009:180::-;51057:77;51054:1;51047:88;51154:4;51151:1;51144:15;51178:4;51175:1;51168:15;51195:180;51243:77;51240:1;51233:88;51340:4;51337:1;51330:15;51364:4;51361:1;51354:15;51381:180;51429:77;51426:1;51419:88;51526:4;51523:1;51516:15;51550:4;51547:1;51540:15;51567:180;51615:77;51612:1;51605:88;51712:4;51709:1;51702:15;51736:4;51733:1;51726:15;51753:180;51801:77;51798:1;51791:88;51898:4;51895:1;51888:15;51922:4;51919:1;51912:15;51939:180;51987:77;51984:1;51977:88;52084:4;52081:1;52074:15;52108:4;52105:1;52098:15;52125:117;52234:1;52231;52224:12;52248:117;52357:1;52354;52347:12;52371:117;52480:1;52477;52470:12;52494:117;52603:1;52600;52593:12;52617:117;52726:1;52723;52716:12;52740:117;52849:1;52846;52839:12;52863:102;52904:6;52955:2;52951:7;52946:2;52939:5;52935:14;52931:28;52921:38;;52863:102;;;:::o;52971:94::-;53004:8;53052:5;53048:2;53044:14;53023:35;;52971:94;;;:::o;53071:235::-;53211:34;53207:1;53199:6;53195:14;53188:58;53280:18;53275:2;53267:6;53263:15;53256:43;53071:235;:::o;53312:182::-;53452:34;53448:1;53440:6;53436:14;53429:58;53312:182;:::o;53500:243::-;53640:34;53636:1;53628:6;53624:14;53617:58;53709:26;53704:2;53696:6;53692:15;53685:51;53500:243;:::o;53749:230::-;53889:34;53885:1;53877:6;53873:14;53866:58;53958:13;53953:2;53945:6;53941:15;53934:38;53749:230;:::o;53985:237::-;54125:34;54121:1;54113:6;54109:14;54102:58;54194:20;54189:2;54181:6;54177:15;54170:45;53985:237;:::o;54228:225::-;54368:34;54364:1;54356:6;54352:14;54345:58;54437:8;54432:2;54424:6;54420:15;54413:33;54228:225;:::o;54459:236::-;54599:34;54595:1;54587:6;54583:14;54576:58;54668:19;54663:2;54655:6;54651:15;54644:44;54459:236;:::o;54701:178::-;54841:30;54837:1;54829:6;54825:14;54818:54;54701:178;:::o;54885:167::-;55025:19;55021:1;55013:6;55009:14;55002:43;54885:167;:::o;55058:248::-;55198:34;55194:1;55186:6;55182:14;55175:58;55267:31;55262:2;55254:6;55250:15;55243:56;55058:248;:::o;55312:173::-;55452:25;55448:1;55440:6;55436:14;55429:49;55312:173;:::o;55491:223::-;55631:34;55627:1;55619:6;55615:14;55608:58;55700:6;55695:2;55687:6;55683:15;55676:31;55491:223;:::o;55720:175::-;55860:27;55856:1;55848:6;55844:14;55837:51;55720:175;:::o;55901:170::-;56041:22;56037:1;56029:6;56025:14;56018:46;55901:170;:::o;56077:231::-;56217:34;56213:1;56205:6;56201:14;56194:58;56286:14;56281:2;56273:6;56269:15;56262:39;56077:231;:::o;56314:::-;56454:34;56450:1;56442:6;56438:14;56431:58;56523:14;56518:2;56510:6;56506:15;56499:39;56314:231;:::o;56551:233::-;56691:34;56687:1;56679:6;56675:14;56668:58;56760:16;56755:2;56747:6;56743:15;56736:41;56551:233;:::o;56790:243::-;56930:34;56926:1;56918:6;56914:14;56907:58;56999:26;56994:2;56986:6;56982:15;56975:51;56790:243;:::o;57039:229::-;57179:34;57175:1;57167:6;57163:14;57156:58;57248:12;57243:2;57235:6;57231:15;57224:37;57039:229;:::o;57274:228::-;57414:34;57410:1;57402:6;57398:14;57391:58;57483:11;57478:2;57470:6;57466:15;57459:36;57274:228;:::o;57508:182::-;57648:34;57644:1;57636:6;57632:14;57625:58;57508:182;:::o;57696:231::-;57836:34;57832:1;57824:6;57820:14;57813:58;57905:14;57900:2;57892:6;57888:15;57881:39;57696:231;:::o;57933:234::-;58073:34;58069:1;58061:6;58057:14;58050:58;58142:17;58137:2;58129:6;58125:15;58118:42;57933:234;:::o;58173:182::-;58313:34;58309:1;58301:6;58297:14;58290:58;58173:182;:::o;58361:228::-;58501:34;58497:1;58489:6;58485:14;58478:58;58570:11;58565:2;58557:6;58553:15;58546:36;58361:228;:::o;58595:234::-;58735:34;58731:1;58723:6;58719:14;58712:58;58804:17;58799:2;58791:6;58787:15;58780:42;58595:234;:::o;58835:173::-;58975:25;58971:1;58963:6;58959:14;58952:49;58835:173;:::o;59014:220::-;59154:34;59150:1;59142:6;59138:14;59131:58;59223:3;59218:2;59210:6;59206:15;59199:28;59014:220;:::o;59240:224::-;59380:34;59376:1;59368:6;59364:14;59357:58;59449:7;59444:2;59436:6;59432:15;59425:32;59240:224;:::o;59470:114::-;;:::o;59590:166::-;59730:18;59726:1;59718:6;59714:14;59707:42;59590:166;:::o;59762:236::-;59902:34;59898:1;59890:6;59886:14;59879:58;59971:19;59966:2;59958:6;59954:15;59947:44;59762:236;:::o;60004:231::-;60144:34;60140:1;60132:6;60128:14;60121:58;60213:14;60208:2;60200:6;60196:15;60189:39;60004:231;:::o;60241:158::-;60381:10;60377:1;60369:6;60365:14;60358:34;60241:158;:::o;60405:167::-;60545:19;60541:1;60533:6;60529:14;60522:43;60405:167;:::o;60578:122::-;60651:24;60669:5;60651:24;:::i;:::-;60644:5;60641:35;60631:63;;60690:1;60687;60680:12;60631:63;60578:122;:::o;60706:116::-;60776:21;60791:5;60776:21;:::i;:::-;60769:5;60766:32;60756:60;;60812:1;60809;60802:12;60756:60;60706:116;:::o;60828:122::-;60901:24;60919:5;60901:24;:::i;:::-;60894:5;60891:35;60881:63;;60940:1;60937;60930:12;60881:63;60828:122;:::o;60956:120::-;61028:23;61045:5;61028:23;:::i;:::-;61021:5;61018:34;61008:62;;61066:1;61063;61056:12;61008:62;60956:120;:::o;61082:122::-;61155:24;61173:5;61155:24;:::i;:::-;61148:5;61145:35;61135:63;;61194:1;61191;61184:12;61135:63;61082:122;:::o;61210:118::-;61281:22;61297:5;61281:22;:::i;:::-;61274:5;61271:33;61261:61;;61318:1;61315;61308:12;61261:61;61210:118;:::o
Swarm Source
ipfs://2c94b89b3da6060bc42468444eb95c08a35e0abddaf2785b9f24b5e0108793ec
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.