Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
5,555 VGDS
Holders
1,535
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 VGDSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Sst
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev 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; } 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); } 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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } interface 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); } 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(); } } abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } 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); } } abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } contract Sst is ERC721,ERC721Enumerable,ERC721URIStorage, Ownable, Pausable, ERC721Burnable { using Address for address; uint256 private _price = 0.075 ether; address a1 = 0x4d6a6E6cF080Fb3E7f611aC22B601D8EdfcF1bCB; uint256 private _reserved = 100; uint256 private _supplylimit = 10; string private _base_url = 'https://koingames.s3.amazonaws.com/UBIW1OT08AE/NFT_META/'; string private _ext = '.json'; bool private _change = false; mapping (address => bool) private whitelist; constructor() ERC721("Video Game Dev Squad", "VGDS") {} function isWhitelisted(address _address) public view returns (bool) { return whitelist[_address]; } function switchWhiteListOn(bool change) public onlyOwner { _change = change; } function addAddress(address _address) public onlyOwner { if (whitelist[_address]) return; whitelist[_address] = true; } function whitelistAddress (address[] memory users) public onlyOwner { for (uint i = 0; i < users.length; i++) { whitelist[users[i]] = true; } } function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } function setSupplyLimit(uint256 _newLimit) public onlyOwner() { _supplylimit = _newLimit; } function setUri(string memory _newUri) public onlyOwner() { _base_url = _newUri; } function setMUri(uint256 _id,string memory _newUri) public onlyOwner() { _setTokenURI(_id, _newUri); } function makeNFT(uint256 num) public payable { uint256 supply = totalSupply(); require( num <= _supplylimit, "You have exceeded maximum mint" ); require( supply + num < 5555 - _reserved, "Exceeds maximum supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); if(_change == true) { require(isWhitelisted(msg.sender), "Not on whitelist"); } for(uint256 i; i < num; i++){ string memory base = string(abi.encodePacked(_base_url, Strings.toString(supply + i),_ext)); _safeMint( msg.sender, supply + i ); _setTokenURI(supply + i, base); } } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function getPrice() public view returns (uint256){ return _price; } function getSupplyLimit() public view returns (uint256){ return _supplylimit; } function getUri() public view returns (string memory){ return _base_url; } function checkWhitelist() public view returns (bool){ return _change; } function withdrawAll() public payable onlyOwner { uint256 _each = address(this).balance / 1; require(payable(a1).send(_each)); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function removeAddress(address _address) public onlyOwner { if (!whitelist[_address]) return; whitelist[_address] = false; } 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 reserve(address _to, uint256 num) external onlyOwner() { uint256 supply = totalSupply(); uint256 _lim = 200; require( num <= _lim, "You have exceeded maximum mint" ); for(uint256 i; i < num; i++){ string memory base = string(abi.encodePacked(_base_url, Strings.toString(supply + i),_ext)); _safeMint( _to, supply + i ); _setTokenURI(supply + i, base); } } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAddress","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":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"makeNFT","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_newUri","type":"string"}],"name":"setMUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"change","type":"bool"}],"name":"switchWhiteListOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","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":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267010a741a46278000600c55734d6a6e6cf080fb3e7f611ac22b601d8edfcf1bcb600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600e55600a600f556040518060600160405280603881526020016200571b6038913960109080519060200190620000a0929190620002c7565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060119080519060200190620000ee929190620002c7565b506000601260006101000a81548160ff0219169083151502179055503480156200011757600080fd5b506040518060400160405280601481526020017f566964656f2047616d65204465762053717561640000000000000000000000008152506040518060400160405280600481526020017f564744530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200019c929190620002c7565b508060019080519060200190620001b5929190620002c7565b505050620001d8620001cc620001f960201b60201c565b6200020160201b60201c565b6000600b60146101000a81548160ff021916908315150217905550620003dc565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d59062000377565b90600052602060002090601f016020900481019282620002f9576000855562000345565b82601f106200031457805160ff191683800117855562000345565b8280016001018555821562000345579182015b828111156200034457825182559160200191906001019062000327565b5b50905062000354919062000358565b5090565b5b808211156200037357600081600090555060010162000359565b5090565b600060028204905060018216806200039057607f821691505b60208210811415620003a757620003a6620003ad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61532f80620003ec6000396000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e57806398d5fdca116100ab578063c87b56dd1161006f578063c87b56dd1461082b578063cc47a40b14610868578063d47abe7914610891578063e985e9c5146108ba578063f2fde38b146108f75761023b565b806398d5fdca1461075c5780639b642de114610787578063a22cb465146107b0578063b31d61b0146107d9578063b88d4fde146108025761023b565b80638da5cb5b116100f25780638da5cb5b146106895780638e86874c146106b45780638f5ba1e8146106dd57806391b7f5ed1461070857806395d89b41146107315761023b565b80636352211e146105d757806370a0823114610614578063715018a6146106515780638456cb5914610668578063853828b61461067f5761023b565b806338eada1c116101bc578063438b630011610180578063438b6300146104de5780634ba79dfe1461051b5780634e16fc8b146105445780634f6ccce71461056f5780635c975abb146105ac5761023b565b806338eada1c1461040f5780633af32abf146104385780633f4ba83a1461047557806342842e0e1461048c57806342966c68146104b55761023b565b806318160ddd1161020357806318160ddd14610339578063226c264d1461036457806323b872dd146103805780632f745c59146103a9578063361fab25146103e65761023b565b806301ffc9a71461024057806306f2057a1461027d57806306fdde03146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613d4b565b610920565b6040516102749190614a53565b60405180910390f35b34801561028957600080fd5b50610292610932565b60405161029f9190614a53565b60405180910390f35b3480156102b457600080fd5b506102bd610949565b6040516102ca9190614a6e565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613dde565b6109db565b60405161030791906149ca565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613ca5565b610a60565b005b34801561034557600080fd5b5061034e610b78565b60405161035b9190614df0565b60405180910390f35b61037e60048036038101906103799190613dde565b610b85565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613b9f565b610d72565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613ca5565b610dd2565b6040516103dd9190614df0565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613dde565b610e77565b005b34801561041b57600080fd5b5061043660048036038101906104319190613b3a565b610efd565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613b3a565b61102c565b60405161046c9190614a53565b60405180910390f35b34801561048157600080fd5b5061048a611082565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613b9f565b611108565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190613dde565b611128565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613b3a565b611184565b6040516105129190614a31565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190613b3a565b61127e565b005b34801561055057600080fd5b506105596113ac565b6040516105669190614a6e565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190613dde565b61143e565b6040516105a39190614df0565b60405180910390f35b3480156105b857600080fd5b506105c16114d5565b6040516105ce9190614a53565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613dde565b6114ec565b60405161060b91906149ca565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613b3a565b61159e565b6040516106489190614df0565b60405180910390f35b34801561065d57600080fd5b50610666611656565b005b34801561067457600080fd5b5061067d6116de565b005b610687611764565b005b34801561069557600080fd5b5061069e611854565b6040516106ab91906149ca565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613d22565b61187e565b005b3480156106e957600080fd5b506106f2611917565b6040516106ff9190614df0565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613dde565b611921565b005b34801561073d57600080fd5b506107466119a7565b6040516107539190614a6e565b60405180910390f35b34801561076857600080fd5b50610771611a39565b60405161077e9190614df0565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613d9d565b611a43565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190613c69565b611ad9565b005b3480156107e557600080fd5b5061080060048036038101906107fb9190613ce1565b611c5a565b005b34801561080e57600080fd5b5061082960048036038101906108249190613bee565b611d91565b005b34801561083757600080fd5b50610852600480360381019061084d9190613dde565b611df3565b60405161085f9190614a6e565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613ca5565b611e05565b005b34801561089d57600080fd5b506108b860048036038101906108b39190613e07565b611f63565b005b3480156108c657600080fd5b506108e160048036038101906108dc9190613b63565b611fed565b6040516108ee9190614a53565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190613b3a565b612081565b005b600061092b82612179565b9050919050565b6000601260009054906101000a900460ff16905090565b60606000805461095890615124565b80601f016020809104026020016040519081016040528092919081815260200182805461098490615124565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e6826121f3565b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90614c90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b826114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390614d30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afb61225f565b73ffffffffffffffffffffffffffffffffffffffff161480610b2a5750610b2981610b2461225f565b611fed565b5b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090614bd0565b60405180910390fd5b610b738383612267565b505050565b6000600880549050905090565b6000610b8f610b78565b9050600f54821115610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90614d10565b60405180910390fd5b600e546115b3610be6919061503a565b8282610bf29190614f59565b10610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990614d70565b60405180910390fd5b81600c54610c409190614fe0565b341015610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990614d50565b60405180910390fd5b60011515601260009054906101000a900460ff1615151415610ce757610ca73361102c565b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90614a90565b60405180910390fd5b5b60005b82811015610d6d5760006010610d0a8385610d059190614f59565b612320565b6011604051602001610d1e93929190614999565b6040516020818303038152906040529050610d44338385610d3f9190614f59565b6124cd565b610d598284610d539190614f59565b826124eb565b508080610d6590615156565b915050610cea565b505050565b610d83610d7d61225f565b8261255f565b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990614d90565b60405180910390fd5b610dcd83838361263d565b505050565b6000610ddd8361159e565b8210610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590614ad0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e7f61225f565b73ffffffffffffffffffffffffffffffffffffffff16610e9d611854565b73ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90614cb0565b60405180910390fd5b80600f8190555050565b610f0561225f565b73ffffffffffffffffffffffffffffffffffffffff16610f23611854565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614cb0565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fd057611029565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61108a61225f565b73ffffffffffffffffffffffffffffffffffffffff166110a8611854565b73ffffffffffffffffffffffffffffffffffffffff16146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590614cb0565b60405180910390fd5b611106612899565b565b61112383838360405180602001604052806000815250611d91565b505050565b61113961113361225f565b8261255f565b611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90614dd0565b60405180910390fd5b6111818161293b565b50565b606060006111918361159e565b905060008167ffffffffffffffff8111156111d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112035781602001602082028036833780820191505090505b50905060005b828110156112735761121b8582610dd2565b828281518110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061126b90615156565b915050611209565b508092505050919050565b61128661225f565b73ffffffffffffffffffffffffffffffffffffffff166112a4611854565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190614cb0565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611350576113a9565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6060601080546113bb90615124565b80601f01602080910402602001604051908101604052809291908181526020018280546113e790615124565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b5050505050905090565b6000611448610b78565b8210611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614db0565b60405180910390fd5b600882815481106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90614c10565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614bf0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61165e61225f565b73ffffffffffffffffffffffffffffffffffffffff1661167c611854565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614cb0565b60405180910390fd5b6116dc6000612947565b565b6116e661225f565b73ffffffffffffffffffffffffffffffffffffffff16611704611854565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190614cb0565b60405180910390fd5b611762612a0d565b565b61176c61225f565b73ffffffffffffffffffffffffffffffffffffffff1661178a611854565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790614cb0565b60405180910390fd5b60006001476117ef9190614faf565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061185157600080fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61188661225f565b73ffffffffffffffffffffffffffffffffffffffff166118a4611854565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190614cb0565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600f54905090565b61192961225f565b73ffffffffffffffffffffffffffffffffffffffff16611947611854565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614cb0565b60405180910390fd5b80600c8190555050565b6060600180546119b690615124565b80601f01602080910402602001604051908101604052809291908181526020018280546119e290615124565b8015611a2f5780601f10611a0457610100808354040283529160200191611a2f565b820191906000526020600020905b815481529060010190602001808311611a1257829003601f168201915b5050505050905090565b6000600c54905090565b611a4b61225f565b73ffffffffffffffffffffffffffffffffffffffff16611a69611854565b73ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614cb0565b60405180910390fd5b8060109080519060200190611ad5929190613888565b5050565b611ae161225f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690614b70565b60405180910390fd5b8060056000611b5c61225f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c0961225f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4e9190614a53565b60405180910390a35050565b611c6261225f565b73ffffffffffffffffffffffffffffffffffffffff16611c80611854565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614cb0565b60405180910390fd5b60005b8151811015611d8d57600160136000848481518110611d21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d8590615156565b915050611cd9565b5050565b611da2611d9c61225f565b8361255f565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890614d90565b60405180910390fd5b611ded84848484612ab0565b50505050565b6060611dfe82612b0c565b9050919050565b611e0d61225f565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611854565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890614cb0565b60405180910390fd5b6000611e8b610b78565b9050600060c8905080831115611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614d10565b60405180910390fd5b60005b83811015611f5c5760006010611ef98386611ef49190614f59565b612320565b6011604051602001611f0d93929190614999565b6040516020818303038152906040529050611f33868386611f2e9190614f59565b6124cd565b611f488285611f429190614f59565b826124eb565b508080611f5490615156565b915050611ed9565b5050505050565b611f6b61225f565b73ffffffffffffffffffffffffffffffffffffffff16611f89611854565b73ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614cb0565b60405180910390fd5b611fe982826124eb565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61208961225f565b73ffffffffffffffffffffffffffffffffffffffff166120a7611854565b73ffffffffffffffffffffffffffffffffffffffff16146120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490614cb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490614b10565b60405180910390fd5b61217681612947565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121ec57506121eb82612c5e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122da836114ec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000821415612368576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124c8565b600082905060005b6000821461239a57808061238390615156565b915050600a826123939190614faf565b9150612370565b60008167ffffffffffffffff8111156123dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561240e5781602001600182028036833780820191505090505b5090505b600085146124c157600182612427919061503a565b9150600a85612436919061519f565b60306124429190614f59565b60f81b81838151811061247e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124ba9190614faf565b9450612412565b8093505050505b919050565b6124e7828260405180602001604052806000815250612d40565b5050565b6124f4826121f3565b612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90614c30565b60405180910390fd5b80600a6000848152602001908152602001600020908051906020019061255a929190613888565b505050565b600061256a826121f3565b6125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614b90565b60405180910390fd5b60006125b4836114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061262357508373ffffffffffffffffffffffffffffffffffffffff1661260b846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b8061263457506126338185611fed565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661265d826114ec565b73ffffffffffffffffffffffffffffffffffffffff16146126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614cd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614b50565b60405180910390fd5b61272e838383612d9b565b612739600082612267565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612789919061503a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e09190614f59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128a16114d5565b6128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790614ab0565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61292461225f565b60405161293191906149ca565b60405180910390a1565b61294481612df3565b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a156114d5565b15612a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4c90614bb0565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a9961225f565b604051612aa691906149ca565b60405180910390a1565b612abb84848461263d565b612ac784848484612e46565b612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd90614af0565b60405180910390fd5b50505050565b6060612b17826121f3565b612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c70565b60405180910390fd5b6000600a60008481526020019081526020016000208054612b7690615124565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba290615124565b8015612bef5780601f10612bc457610100808354040283529160200191612bef565b820191906000526020600020905b815481529060010190602001808311612bd257829003601f168201915b505050505090506000612c00612fdd565b9050600081511415612c16578192505050612c59565b600082511115612c4b578082604051602001612c33929190614975565b60405160208183030381529060405292505050612c59565b612c5484612ff4565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d395750612d388261309b565b5b9050919050565b612d4a8383613105565b612d576000848484612e46565b612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90614af0565b60405180910390fd5b505050565b612da36114d5565b15612de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dda90614bb0565b60405180910390fd5b612dee8383836132d3565b505050565b612dfc816133e7565b6000600a60008381526020019081526020016000208054612e1c90615124565b905014612e4357600a60008281526020019081526020016000206000612e42919061390e565b5b50565b6000612e678473ffffffffffffffffffffffffffffffffffffffff166134f8565b15612fd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9061225f565b8786866040518563ffffffff1660e01b8152600401612eb294939291906149e5565b602060405180830381600087803b158015612ecc57600080fd5b505af1925050508015612efd57506040513d601f19601f82011682018060405250810190612efa9190613d74565b60015b612f80573d8060008114612f2d576040519150601f19603f3d011682016040523d82523d6000602084013e612f32565b606091505b50600081511415612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90614af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fd5565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060612fff826121f3565b61303e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303590614cf0565b60405180910390fd5b6000613048612fdd565b905060008151116130685760405180602001604052806000815250613093565b8061307284612320565b604051602001613083929190614975565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c90614c50565b60405180910390fd5b61317e816121f3565b156131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b590614b30565b60405180910390fd5b6131ca60008383612d9b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321a9190614f59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6132de83838361350b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133215761331c81613510565b613360565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461335f5761335e8382613559565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a35761339e816136c6565b6133e2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e1576133e08282613809565b5b5b505050565b60006133f2826114ec565b905061340081600084612d9b565b61340b600083612267565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345b919061503a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016135668461159e565b613570919061503a565b9050600060076000848152602001908152602001600020549050818114613655576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136da919061503a565b9050600060096000848152602001908152602001600020549050600060088381548110613730577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613778577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138148361159e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461389490615124565b90600052602060002090601f0160209004810192826138b657600085556138fd565b82601f106138cf57805160ff19168380011785556138fd565b828001600101855582156138fd579182015b828111156138fc5782518255916020019190600101906138e1565b5b50905061390a919061394e565b5090565b50805461391a90615124565b6000825580601f1061392c575061394b565b601f01602090049060005260206000209081019061394a919061394e565b5b50565b5b8082111561396757600081600090555060010161394f565b5090565b600061397e61397984614e3c565b614e0b565b9050808382526020820190508285602086028201111561399d57600080fd5b60005b858110156139cd57816139b38882613a53565b8452602084019350602083019250506001810190506139a0565b5050509392505050565b60006139ea6139e584614e68565b614e0b565b905082815260208101848484011115613a0257600080fd5b613a0d8482856150e2565b509392505050565b6000613a28613a2384614e98565b614e0b565b905082815260208101848484011115613a4057600080fd5b613a4b8482856150e2565b509392505050565b600081359050613a628161529d565b92915050565b600082601f830112613a7957600080fd5b8135613a8984826020860161396b565b91505092915050565b600081359050613aa1816152b4565b92915050565b600081359050613ab6816152cb565b92915050565b600081519050613acb816152cb565b92915050565b600082601f830112613ae257600080fd5b8135613af28482602086016139d7565b91505092915050565b600082601f830112613b0c57600080fd5b8135613b1c848260208601613a15565b91505092915050565b600081359050613b34816152e2565b92915050565b600060208284031215613b4c57600080fd5b6000613b5a84828501613a53565b91505092915050565b60008060408385031215613b7657600080fd5b6000613b8485828601613a53565b9250506020613b9585828601613a53565b9150509250929050565b600080600060608486031215613bb457600080fd5b6000613bc286828701613a53565b9350506020613bd386828701613a53565b9250506040613be486828701613b25565b9150509250925092565b60008060008060808587031215613c0457600080fd5b6000613c1287828801613a53565b9450506020613c2387828801613a53565b9350506040613c3487828801613b25565b925050606085013567ffffffffffffffff811115613c5157600080fd5b613c5d87828801613ad1565b91505092959194509250565b60008060408385031215613c7c57600080fd5b6000613c8a85828601613a53565b9250506020613c9b85828601613a92565b9150509250929050565b60008060408385031215613cb857600080fd5b6000613cc685828601613a53565b9250506020613cd785828601613b25565b9150509250929050565b600060208284031215613cf357600080fd5b600082013567ffffffffffffffff811115613d0d57600080fd5b613d1984828501613a68565b91505092915050565b600060208284031215613d3457600080fd5b6000613d4284828501613a92565b91505092915050565b600060208284031215613d5d57600080fd5b6000613d6b84828501613aa7565b91505092915050565b600060208284031215613d8657600080fd5b6000613d9484828501613abc565b91505092915050565b600060208284031215613daf57600080fd5b600082013567ffffffffffffffff811115613dc957600080fd5b613dd584828501613afb565b91505092915050565b600060208284031215613df057600080fd5b6000613dfe84828501613b25565b91505092915050565b60008060408385031215613e1a57600080fd5b6000613e2885828601613b25565b925050602083013567ffffffffffffffff811115613e4557600080fd5b613e5185828601613afb565b9150509250929050565b6000613e678383614957565b60208301905092915050565b613e7c8161506e565b82525050565b6000613e8d82614eed565b613e978185614f1b565b9350613ea283614ec8565b8060005b83811015613ed3578151613eba8882613e5b565b9750613ec583614f0e565b925050600181019050613ea6565b5085935050505092915050565b613ee981615080565b82525050565b6000613efa82614ef8565b613f048185614f2c565b9350613f148185602086016150f1565b613f1d8161528c565b840191505092915050565b6000613f3382614f03565b613f3d8185614f3d565b9350613f4d8185602086016150f1565b613f568161528c565b840191505092915050565b6000613f6c82614f03565b613f768185614f4e565b9350613f868185602086016150f1565b80840191505092915050565b60008154613f9f81615124565b613fa98186614f4e565b94506001821660008114613fc45760018114613fd557614008565b60ff19831686528186019350614008565b613fde85614ed8565b60005b8381101561400057815481890152600182019150602081019050613fe1565b838801955050505b50505092915050565b600061401e601083614f3d565b91507f4e6f74206f6e2077686974656c697374000000000000000000000000000000006000830152602082019050919050565b600061405e601483614f3d565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b600061409e602b83614f3d565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614104603283614f3d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061416a602683614f3d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d0601c83614f3d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614210602483614f3d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614276601983614f3d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006142b6602c83614f3d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061431c601083614f3d565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600061435c603883614f3d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006143c2602a83614f3d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614428602983614f3d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061448e602e83614f3d565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b60006144f4602083614f3d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614534603183614f3d565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b600061459a602c83614f3d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614600602083614f3d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614640602983614f3d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146a6602f83614f3d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061470c601e83614f3d565b91507f596f752068617665206578636565646564206d6178696d756d206d696e7400006000830152602082019050919050565b600061474c602183614f3d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b2601983614f3d565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b60006147f2601783614f3d565b91507f45786365656473206d6178696d756d2020737570706c790000000000000000006000830152602082019050919050565b6000614832603183614f3d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614898602c83614f3d565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006148fe603083614f3d565b91507f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f766564000000000000000000000000000000006020830152604082019050919050565b614960816150d8565b82525050565b61496f816150d8565b82525050565b60006149818285613f61565b915061498d8284613f61565b91508190509392505050565b60006149a58286613f92565b91506149b18285613f61565b91506149bd8284613f92565b9150819050949350505050565b60006020820190506149df6000830184613e73565b92915050565b60006080820190506149fa6000830187613e73565b614a076020830186613e73565b614a146040830185614966565b8181036060830152614a268184613eef565b905095945050505050565b60006020820190508181036000830152614a4b8184613e82565b905092915050565b6000602082019050614a686000830184613ee0565b92915050565b60006020820190508181036000830152614a888184613f28565b905092915050565b60006020820190508181036000830152614aa981614011565b9050919050565b60006020820190508181036000830152614ac981614051565b9050919050565b60006020820190508181036000830152614ae981614091565b9050919050565b60006020820190508181036000830152614b09816140f7565b9050919050565b60006020820190508181036000830152614b298161415d565b9050919050565b60006020820190508181036000830152614b49816141c3565b9050919050565b60006020820190508181036000830152614b6981614203565b9050919050565b60006020820190508181036000830152614b8981614269565b9050919050565b60006020820190508181036000830152614ba9816142a9565b9050919050565b60006020820190508181036000830152614bc98161430f565b9050919050565b60006020820190508181036000830152614be98161434f565b9050919050565b60006020820190508181036000830152614c09816143b5565b9050919050565b60006020820190508181036000830152614c298161441b565b9050919050565b60006020820190508181036000830152614c4981614481565b9050919050565b60006020820190508181036000830152614c69816144e7565b9050919050565b60006020820190508181036000830152614c8981614527565b9050919050565b60006020820190508181036000830152614ca98161458d565b9050919050565b60006020820190508181036000830152614cc9816145f3565b9050919050565b60006020820190508181036000830152614ce981614633565b9050919050565b60006020820190508181036000830152614d0981614699565b9050919050565b60006020820190508181036000830152614d29816146ff565b9050919050565b60006020820190508181036000830152614d498161473f565b9050919050565b60006020820190508181036000830152614d69816147a5565b9050919050565b60006020820190508181036000830152614d89816147e5565b9050919050565b60006020820190508181036000830152614da981614825565b9050919050565b60006020820190508181036000830152614dc98161488b565b9050919050565b60006020820190508181036000830152614de9816148f1565b9050919050565b6000602082019050614e056000830184614966565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e3257614e3161525d565b5b8060405250919050565b600067ffffffffffffffff821115614e5757614e5661525d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e8357614e8261525d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb357614eb261525d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f64826150d8565b9150614f6f836150d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fa457614fa36151d0565b5b828201905092915050565b6000614fba826150d8565b9150614fc5836150d8565b925082614fd557614fd46151ff565b5b828204905092915050565b6000614feb826150d8565b9150614ff6836150d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561502f5761502e6151d0565b5b828202905092915050565b6000615045826150d8565b9150615050836150d8565b925082821015615063576150626151d0565b5b828203905092915050565b6000615079826150b8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561510f5780820151818401526020810190506150f4565b8381111561511e576000848401525b50505050565b6000600282049050600182168061513c57607f821691505b602082108114156151505761514f61522e565b5b50919050565b6000615161826150d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615194576151936151d0565b5b600182019050919050565b60006151aa826150d8565b91506151b5836150d8565b9250826151c5576151c46151ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6152a68161506e565b81146152b157600080fd5b50565b6152bd81615080565b81146152c857600080fd5b50565b6152d48161508c565b81146152df57600080fd5b50565b6152eb816150d8565b81146152f657600080fd5b5056fea2646970667358221220b80d1d08af6e5f98c401f3081fd3b6ac0da8c5e87ac4c1bc1735547407fc783564736f6c6343000800003368747470733a2f2f6b6f696e67616d65732e73332e616d617a6f6e6177732e636f6d2f55424957314f54303841452f4e46545f4d4554412f
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80636352211e1161012e57806398d5fdca116100ab578063c87b56dd1161006f578063c87b56dd1461082b578063cc47a40b14610868578063d47abe7914610891578063e985e9c5146108ba578063f2fde38b146108f75761023b565b806398d5fdca1461075c5780639b642de114610787578063a22cb465146107b0578063b31d61b0146107d9578063b88d4fde146108025761023b565b80638da5cb5b116100f25780638da5cb5b146106895780638e86874c146106b45780638f5ba1e8146106dd57806391b7f5ed1461070857806395d89b41146107315761023b565b80636352211e146105d757806370a0823114610614578063715018a6146106515780638456cb5914610668578063853828b61461067f5761023b565b806338eada1c116101bc578063438b630011610180578063438b6300146104de5780634ba79dfe1461051b5780634e16fc8b146105445780634f6ccce71461056f5780635c975abb146105ac5761023b565b806338eada1c1461040f5780633af32abf146104385780633f4ba83a1461047557806342842e0e1461048c57806342966c68146104b55761023b565b806318160ddd1161020357806318160ddd14610339578063226c264d1461036457806323b872dd146103805780632f745c59146103a9578063361fab25146103e65761023b565b806301ffc9a71461024057806306f2057a1461027d57806306fdde03146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613d4b565b610920565b6040516102749190614a53565b60405180910390f35b34801561028957600080fd5b50610292610932565b60405161029f9190614a53565b60405180910390f35b3480156102b457600080fd5b506102bd610949565b6040516102ca9190614a6e565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613dde565b6109db565b60405161030791906149ca565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613ca5565b610a60565b005b34801561034557600080fd5b5061034e610b78565b60405161035b9190614df0565b60405180910390f35b61037e60048036038101906103799190613dde565b610b85565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613b9f565b610d72565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613ca5565b610dd2565b6040516103dd9190614df0565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613dde565b610e77565b005b34801561041b57600080fd5b5061043660048036038101906104319190613b3a565b610efd565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613b3a565b61102c565b60405161046c9190614a53565b60405180910390f35b34801561048157600080fd5b5061048a611082565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613b9f565b611108565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190613dde565b611128565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613b3a565b611184565b6040516105129190614a31565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190613b3a565b61127e565b005b34801561055057600080fd5b506105596113ac565b6040516105669190614a6e565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190613dde565b61143e565b6040516105a39190614df0565b60405180910390f35b3480156105b857600080fd5b506105c16114d5565b6040516105ce9190614a53565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613dde565b6114ec565b60405161060b91906149ca565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613b3a565b61159e565b6040516106489190614df0565b60405180910390f35b34801561065d57600080fd5b50610666611656565b005b34801561067457600080fd5b5061067d6116de565b005b610687611764565b005b34801561069557600080fd5b5061069e611854565b6040516106ab91906149ca565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613d22565b61187e565b005b3480156106e957600080fd5b506106f2611917565b6040516106ff9190614df0565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613dde565b611921565b005b34801561073d57600080fd5b506107466119a7565b6040516107539190614a6e565b60405180910390f35b34801561076857600080fd5b50610771611a39565b60405161077e9190614df0565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613d9d565b611a43565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190613c69565b611ad9565b005b3480156107e557600080fd5b5061080060048036038101906107fb9190613ce1565b611c5a565b005b34801561080e57600080fd5b5061082960048036038101906108249190613bee565b611d91565b005b34801561083757600080fd5b50610852600480360381019061084d9190613dde565b611df3565b60405161085f9190614a6e565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613ca5565b611e05565b005b34801561089d57600080fd5b506108b860048036038101906108b39190613e07565b611f63565b005b3480156108c657600080fd5b506108e160048036038101906108dc9190613b63565b611fed565b6040516108ee9190614a53565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190613b3a565b612081565b005b600061092b82612179565b9050919050565b6000601260009054906101000a900460ff16905090565b60606000805461095890615124565b80601f016020809104026020016040519081016040528092919081815260200182805461098490615124565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e6826121f3565b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90614c90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b826114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390614d30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afb61225f565b73ffffffffffffffffffffffffffffffffffffffff161480610b2a5750610b2981610b2461225f565b611fed565b5b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090614bd0565b60405180910390fd5b610b738383612267565b505050565b6000600880549050905090565b6000610b8f610b78565b9050600f54821115610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90614d10565b60405180910390fd5b600e546115b3610be6919061503a565b8282610bf29190614f59565b10610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990614d70565b60405180910390fd5b81600c54610c409190614fe0565b341015610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990614d50565b60405180910390fd5b60011515601260009054906101000a900460ff1615151415610ce757610ca73361102c565b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90614a90565b60405180910390fd5b5b60005b82811015610d6d5760006010610d0a8385610d059190614f59565b612320565b6011604051602001610d1e93929190614999565b6040516020818303038152906040529050610d44338385610d3f9190614f59565b6124cd565b610d598284610d539190614f59565b826124eb565b508080610d6590615156565b915050610cea565b505050565b610d83610d7d61225f565b8261255f565b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990614d90565b60405180910390fd5b610dcd83838361263d565b505050565b6000610ddd8361159e565b8210610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590614ad0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e7f61225f565b73ffffffffffffffffffffffffffffffffffffffff16610e9d611854565b73ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90614cb0565b60405180910390fd5b80600f8190555050565b610f0561225f565b73ffffffffffffffffffffffffffffffffffffffff16610f23611854565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614cb0565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fd057611029565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61108a61225f565b73ffffffffffffffffffffffffffffffffffffffff166110a8611854565b73ffffffffffffffffffffffffffffffffffffffff16146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590614cb0565b60405180910390fd5b611106612899565b565b61112383838360405180602001604052806000815250611d91565b505050565b61113961113361225f565b8261255f565b611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90614dd0565b60405180910390fd5b6111818161293b565b50565b606060006111918361159e565b905060008167ffffffffffffffff8111156111d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112035781602001602082028036833780820191505090505b50905060005b828110156112735761121b8582610dd2565b828281518110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061126b90615156565b915050611209565b508092505050919050565b61128661225f565b73ffffffffffffffffffffffffffffffffffffffff166112a4611854565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190614cb0565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611350576113a9565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6060601080546113bb90615124565b80601f01602080910402602001604051908101604052809291908181526020018280546113e790615124565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b5050505050905090565b6000611448610b78565b8210611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614db0565b60405180910390fd5b600882815481106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90614c10565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614bf0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61165e61225f565b73ffffffffffffffffffffffffffffffffffffffff1661167c611854565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614cb0565b60405180910390fd5b6116dc6000612947565b565b6116e661225f565b73ffffffffffffffffffffffffffffffffffffffff16611704611854565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190614cb0565b60405180910390fd5b611762612a0d565b565b61176c61225f565b73ffffffffffffffffffffffffffffffffffffffff1661178a611854565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790614cb0565b60405180910390fd5b60006001476117ef9190614faf565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061185157600080fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61188661225f565b73ffffffffffffffffffffffffffffffffffffffff166118a4611854565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190614cb0565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600f54905090565b61192961225f565b73ffffffffffffffffffffffffffffffffffffffff16611947611854565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614cb0565b60405180910390fd5b80600c8190555050565b6060600180546119b690615124565b80601f01602080910402602001604051908101604052809291908181526020018280546119e290615124565b8015611a2f5780601f10611a0457610100808354040283529160200191611a2f565b820191906000526020600020905b815481529060010190602001808311611a1257829003601f168201915b5050505050905090565b6000600c54905090565b611a4b61225f565b73ffffffffffffffffffffffffffffffffffffffff16611a69611854565b73ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614cb0565b60405180910390fd5b8060109080519060200190611ad5929190613888565b5050565b611ae161225f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690614b70565b60405180910390fd5b8060056000611b5c61225f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c0961225f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4e9190614a53565b60405180910390a35050565b611c6261225f565b73ffffffffffffffffffffffffffffffffffffffff16611c80611854565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614cb0565b60405180910390fd5b60005b8151811015611d8d57600160136000848481518110611d21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d8590615156565b915050611cd9565b5050565b611da2611d9c61225f565b8361255f565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890614d90565b60405180910390fd5b611ded84848484612ab0565b50505050565b6060611dfe82612b0c565b9050919050565b611e0d61225f565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611854565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890614cb0565b60405180910390fd5b6000611e8b610b78565b9050600060c8905080831115611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614d10565b60405180910390fd5b60005b83811015611f5c5760006010611ef98386611ef49190614f59565b612320565b6011604051602001611f0d93929190614999565b6040516020818303038152906040529050611f33868386611f2e9190614f59565b6124cd565b611f488285611f429190614f59565b826124eb565b508080611f5490615156565b915050611ed9565b5050505050565b611f6b61225f565b73ffffffffffffffffffffffffffffffffffffffff16611f89611854565b73ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614cb0565b60405180910390fd5b611fe982826124eb565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61208961225f565b73ffffffffffffffffffffffffffffffffffffffff166120a7611854565b73ffffffffffffffffffffffffffffffffffffffff16146120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490614cb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490614b10565b60405180910390fd5b61217681612947565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121ec57506121eb82612c5e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122da836114ec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000821415612368576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124c8565b600082905060005b6000821461239a57808061238390615156565b915050600a826123939190614faf565b9150612370565b60008167ffffffffffffffff8111156123dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561240e5781602001600182028036833780820191505090505b5090505b600085146124c157600182612427919061503a565b9150600a85612436919061519f565b60306124429190614f59565b60f81b81838151811061247e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124ba9190614faf565b9450612412565b8093505050505b919050565b6124e7828260405180602001604052806000815250612d40565b5050565b6124f4826121f3565b612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90614c30565b60405180910390fd5b80600a6000848152602001908152602001600020908051906020019061255a929190613888565b505050565b600061256a826121f3565b6125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614b90565b60405180910390fd5b60006125b4836114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061262357508373ffffffffffffffffffffffffffffffffffffffff1661260b846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b8061263457506126338185611fed565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661265d826114ec565b73ffffffffffffffffffffffffffffffffffffffff16146126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614cd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614b50565b60405180910390fd5b61272e838383612d9b565b612739600082612267565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612789919061503a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e09190614f59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128a16114d5565b6128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790614ab0565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61292461225f565b60405161293191906149ca565b60405180910390a1565b61294481612df3565b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a156114d5565b15612a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4c90614bb0565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a9961225f565b604051612aa691906149ca565b60405180910390a1565b612abb84848461263d565b612ac784848484612e46565b612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd90614af0565b60405180910390fd5b50505050565b6060612b17826121f3565b612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c70565b60405180910390fd5b6000600a60008481526020019081526020016000208054612b7690615124565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba290615124565b8015612bef5780601f10612bc457610100808354040283529160200191612bef565b820191906000526020600020905b815481529060010190602001808311612bd257829003601f168201915b505050505090506000612c00612fdd565b9050600081511415612c16578192505050612c59565b600082511115612c4b578082604051602001612c33929190614975565b60405160208183030381529060405292505050612c59565b612c5484612ff4565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d395750612d388261309b565b5b9050919050565b612d4a8383613105565b612d576000848484612e46565b612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90614af0565b60405180910390fd5b505050565b612da36114d5565b15612de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dda90614bb0565b60405180910390fd5b612dee8383836132d3565b505050565b612dfc816133e7565b6000600a60008381526020019081526020016000208054612e1c90615124565b905014612e4357600a60008281526020019081526020016000206000612e42919061390e565b5b50565b6000612e678473ffffffffffffffffffffffffffffffffffffffff166134f8565b15612fd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9061225f565b8786866040518563ffffffff1660e01b8152600401612eb294939291906149e5565b602060405180830381600087803b158015612ecc57600080fd5b505af1925050508015612efd57506040513d601f19601f82011682018060405250810190612efa9190613d74565b60015b612f80573d8060008114612f2d576040519150601f19603f3d011682016040523d82523d6000602084013e612f32565b606091505b50600081511415612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90614af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fd5565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060612fff826121f3565b61303e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303590614cf0565b60405180910390fd5b6000613048612fdd565b905060008151116130685760405180602001604052806000815250613093565b8061307284612320565b604051602001613083929190614975565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c90614c50565b60405180910390fd5b61317e816121f3565b156131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b590614b30565b60405180910390fd5b6131ca60008383612d9b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321a9190614f59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6132de83838361350b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133215761331c81613510565b613360565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461335f5761335e8382613559565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a35761339e816136c6565b6133e2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e1576133e08282613809565b5b5b505050565b60006133f2826114ec565b905061340081600084612d9b565b61340b600083612267565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345b919061503a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016135668461159e565b613570919061503a565b9050600060076000848152602001908152602001600020549050818114613655576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136da919061503a565b9050600060096000848152602001908152602001600020549050600060088381548110613730577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613778577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138148361159e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461389490615124565b90600052602060002090601f0160209004810192826138b657600085556138fd565b82601f106138cf57805160ff19168380011785556138fd565b828001600101855582156138fd579182015b828111156138fc5782518255916020019190600101906138e1565b5b50905061390a919061394e565b5090565b50805461391a90615124565b6000825580601f1061392c575061394b565b601f01602090049060005260206000209081019061394a919061394e565b5b50565b5b8082111561396757600081600090555060010161394f565b5090565b600061397e61397984614e3c565b614e0b565b9050808382526020820190508285602086028201111561399d57600080fd5b60005b858110156139cd57816139b38882613a53565b8452602084019350602083019250506001810190506139a0565b5050509392505050565b60006139ea6139e584614e68565b614e0b565b905082815260208101848484011115613a0257600080fd5b613a0d8482856150e2565b509392505050565b6000613a28613a2384614e98565b614e0b565b905082815260208101848484011115613a4057600080fd5b613a4b8482856150e2565b509392505050565b600081359050613a628161529d565b92915050565b600082601f830112613a7957600080fd5b8135613a8984826020860161396b565b91505092915050565b600081359050613aa1816152b4565b92915050565b600081359050613ab6816152cb565b92915050565b600081519050613acb816152cb565b92915050565b600082601f830112613ae257600080fd5b8135613af28482602086016139d7565b91505092915050565b600082601f830112613b0c57600080fd5b8135613b1c848260208601613a15565b91505092915050565b600081359050613b34816152e2565b92915050565b600060208284031215613b4c57600080fd5b6000613b5a84828501613a53565b91505092915050565b60008060408385031215613b7657600080fd5b6000613b8485828601613a53565b9250506020613b9585828601613a53565b9150509250929050565b600080600060608486031215613bb457600080fd5b6000613bc286828701613a53565b9350506020613bd386828701613a53565b9250506040613be486828701613b25565b9150509250925092565b60008060008060808587031215613c0457600080fd5b6000613c1287828801613a53565b9450506020613c2387828801613a53565b9350506040613c3487828801613b25565b925050606085013567ffffffffffffffff811115613c5157600080fd5b613c5d87828801613ad1565b91505092959194509250565b60008060408385031215613c7c57600080fd5b6000613c8a85828601613a53565b9250506020613c9b85828601613a92565b9150509250929050565b60008060408385031215613cb857600080fd5b6000613cc685828601613a53565b9250506020613cd785828601613b25565b9150509250929050565b600060208284031215613cf357600080fd5b600082013567ffffffffffffffff811115613d0d57600080fd5b613d1984828501613a68565b91505092915050565b600060208284031215613d3457600080fd5b6000613d4284828501613a92565b91505092915050565b600060208284031215613d5d57600080fd5b6000613d6b84828501613aa7565b91505092915050565b600060208284031215613d8657600080fd5b6000613d9484828501613abc565b91505092915050565b600060208284031215613daf57600080fd5b600082013567ffffffffffffffff811115613dc957600080fd5b613dd584828501613afb565b91505092915050565b600060208284031215613df057600080fd5b6000613dfe84828501613b25565b91505092915050565b60008060408385031215613e1a57600080fd5b6000613e2885828601613b25565b925050602083013567ffffffffffffffff811115613e4557600080fd5b613e5185828601613afb565b9150509250929050565b6000613e678383614957565b60208301905092915050565b613e7c8161506e565b82525050565b6000613e8d82614eed565b613e978185614f1b565b9350613ea283614ec8565b8060005b83811015613ed3578151613eba8882613e5b565b9750613ec583614f0e565b925050600181019050613ea6565b5085935050505092915050565b613ee981615080565b82525050565b6000613efa82614ef8565b613f048185614f2c565b9350613f148185602086016150f1565b613f1d8161528c565b840191505092915050565b6000613f3382614f03565b613f3d8185614f3d565b9350613f4d8185602086016150f1565b613f568161528c565b840191505092915050565b6000613f6c82614f03565b613f768185614f4e565b9350613f868185602086016150f1565b80840191505092915050565b60008154613f9f81615124565b613fa98186614f4e565b94506001821660008114613fc45760018114613fd557614008565b60ff19831686528186019350614008565b613fde85614ed8565b60005b8381101561400057815481890152600182019150602081019050613fe1565b838801955050505b50505092915050565b600061401e601083614f3d565b91507f4e6f74206f6e2077686974656c697374000000000000000000000000000000006000830152602082019050919050565b600061405e601483614f3d565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b600061409e602b83614f3d565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614104603283614f3d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061416a602683614f3d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d0601c83614f3d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614210602483614f3d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614276601983614f3d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006142b6602c83614f3d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061431c601083614f3d565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600061435c603883614f3d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006143c2602a83614f3d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614428602983614f3d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061448e602e83614f3d565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b60006144f4602083614f3d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614534603183614f3d565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b600061459a602c83614f3d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614600602083614f3d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614640602983614f3d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146a6602f83614f3d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061470c601e83614f3d565b91507f596f752068617665206578636565646564206d6178696d756d206d696e7400006000830152602082019050919050565b600061474c602183614f3d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b2601983614f3d565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b60006147f2601783614f3d565b91507f45786365656473206d6178696d756d2020737570706c790000000000000000006000830152602082019050919050565b6000614832603183614f3d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614898602c83614f3d565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006148fe603083614f3d565b91507f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f766564000000000000000000000000000000006020830152604082019050919050565b614960816150d8565b82525050565b61496f816150d8565b82525050565b60006149818285613f61565b915061498d8284613f61565b91508190509392505050565b60006149a58286613f92565b91506149b18285613f61565b91506149bd8284613f92565b9150819050949350505050565b60006020820190506149df6000830184613e73565b92915050565b60006080820190506149fa6000830187613e73565b614a076020830186613e73565b614a146040830185614966565b8181036060830152614a268184613eef565b905095945050505050565b60006020820190508181036000830152614a4b8184613e82565b905092915050565b6000602082019050614a686000830184613ee0565b92915050565b60006020820190508181036000830152614a888184613f28565b905092915050565b60006020820190508181036000830152614aa981614011565b9050919050565b60006020820190508181036000830152614ac981614051565b9050919050565b60006020820190508181036000830152614ae981614091565b9050919050565b60006020820190508181036000830152614b09816140f7565b9050919050565b60006020820190508181036000830152614b298161415d565b9050919050565b60006020820190508181036000830152614b49816141c3565b9050919050565b60006020820190508181036000830152614b6981614203565b9050919050565b60006020820190508181036000830152614b8981614269565b9050919050565b60006020820190508181036000830152614ba9816142a9565b9050919050565b60006020820190508181036000830152614bc98161430f565b9050919050565b60006020820190508181036000830152614be98161434f565b9050919050565b60006020820190508181036000830152614c09816143b5565b9050919050565b60006020820190508181036000830152614c298161441b565b9050919050565b60006020820190508181036000830152614c4981614481565b9050919050565b60006020820190508181036000830152614c69816144e7565b9050919050565b60006020820190508181036000830152614c8981614527565b9050919050565b60006020820190508181036000830152614ca98161458d565b9050919050565b60006020820190508181036000830152614cc9816145f3565b9050919050565b60006020820190508181036000830152614ce981614633565b9050919050565b60006020820190508181036000830152614d0981614699565b9050919050565b60006020820190508181036000830152614d29816146ff565b9050919050565b60006020820190508181036000830152614d498161473f565b9050919050565b60006020820190508181036000830152614d69816147a5565b9050919050565b60006020820190508181036000830152614d89816147e5565b9050919050565b60006020820190508181036000830152614da981614825565b9050919050565b60006020820190508181036000830152614dc98161488b565b9050919050565b60006020820190508181036000830152614de9816148f1565b9050919050565b6000602082019050614e056000830184614966565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e3257614e3161525d565b5b8060405250919050565b600067ffffffffffffffff821115614e5757614e5661525d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e8357614e8261525d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb357614eb261525d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f64826150d8565b9150614f6f836150d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fa457614fa36151d0565b5b828201905092915050565b6000614fba826150d8565b9150614fc5836150d8565b925082614fd557614fd46151ff565b5b828204905092915050565b6000614feb826150d8565b9150614ff6836150d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561502f5761502e6151d0565b5b828202905092915050565b6000615045826150d8565b9150615050836150d8565b925082821015615063576150626151d0565b5b828203905092915050565b6000615079826150b8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561510f5780820151818401526020810190506150f4565b8381111561511e576000848401525b50505050565b6000600282049050600182168061513c57607f821691505b602082108114156151505761514f61522e565b5b50919050565b6000615161826150d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615194576151936151d0565b5b600182019050919050565b60006151aa826150d8565b91506151b5836150d8565b9250826151c5576151c46151ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6152a68161506e565b81146152b157600080fd5b50565b6152bd81615080565b81146152c857600080fd5b50565b6152d48161508c565b81146152df57600080fd5b50565b6152eb816150d8565b81146152f657600080fd5b5056fea2646970667358221220b80d1d08af6e5f98c401f3081fd3b6ac0da8c5e87ac4c1bc1735547407fc783564736f6c63430008000033
Deployed Bytecode Sourcemap
43033:5094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47912:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45989:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18736:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20295:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19818:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31900:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44794:736;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21185:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31568:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44416:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43931:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43684:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45612:67;;;;;;;;;;;;;:::i;:::-;;21595:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42781:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47028:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46861:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45889:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32090:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41362:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18430:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18160:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40199:94;;;;;;;;;;;;;:::i;:::-;;45541:63;;;;;;;;;;;;;:::i;:::-;;46098:171;;;:::i;:::-;;39548:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43815:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45783:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18905:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45689:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44534:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20588:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44122:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21851:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46653:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47400:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44644:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20954:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40448:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47912:212;48051:4;48080:36;48104:11;48080:23;:36::i;:::-;48073:43;;47912:212;;;:::o;45989:85::-;46036:4;46059:7;;;;;;;;;;;46052:14;;45989:85;:::o;18736:100::-;18790:13;18823:5;18816:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18736:100;:::o;20295:221::-;20371:7;20399:16;20407:7;20399;:16::i;:::-;20391:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20484:15;:24;20500:7;20484:24;;;;;;;;;;;;;;;;;;;;;20477:31;;20295:221;;;:::o;19818:411::-;19899:13;19915:23;19930:7;19915:14;:23::i;:::-;19899:39;;19963:5;19957:11;;:2;:11;;;;19949:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20057:5;20041:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20066:37;20083:5;20090:12;:10;:12::i;:::-;20066:16;:37::i;:::-;20041:62;20019:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20200:21;20209:2;20213:7;20200:8;:21::i;:::-;19818:411;;;:::o;31900:113::-;31961:7;31988:10;:17;;;;31981:24;;31900:113;:::o;44794:736::-;44861:14;44878:13;:11;:13::i;:::-;44861:30;;44928:12;;44921:3;:19;;44912:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45018:9;;45011:4;:16;;;;:::i;:::-;45005:3;44996:6;:12;;;;:::i;:::-;:31;44987:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45099:3;45090:6;;:12;;;;:::i;:::-;45077:9;:25;;45068:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45159:4;45148:15;;:7;;;;;;;;;;;:15;;;45145:106;;;45193:25;45207:10;45193:13;:25::i;:::-;45185:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45145:106;45267:9;45263:260;45282:3;45278:1;:7;45263:260;;;45315:18;45360:9;45371:29;45398:1;45388:6;:11;;;;:::i;:::-;45371:16;:29::i;:::-;45401:4;45343:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45315:92;;45424:35;45435:10;45456:1;45447:6;:10;;;;:::i;:::-;45424:9;:35::i;:::-;45470:30;45492:1;45483:6;:10;;;;:::i;:::-;45495:4;45470:12;:30::i;:::-;45263:260;45287:3;;;;;:::i;:::-;;;;45263:260;;;;44794:736;;:::o;21185:339::-;21380:41;21399:12;:10;:12::i;:::-;21413:7;21380:18;:41::i;:::-;21372:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21488:28;21498:4;21504:2;21508:7;21488:9;:28::i;:::-;21185:339;;;:::o;31568:256::-;31665:7;31701:23;31718:5;31701:16;:23::i;:::-;31693:5;:31;31685:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31790:12;:19;31803:5;31790:19;;;;;;;;;;;;;;;:26;31810:5;31790:26;;;;;;;;;;;;31783:33;;31568:256;;;;:::o;44416:105::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44504:9:::1;44489:12;:24;;;;44416:105:::0;:::o;43931:172::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44006:9:::1;:19;44016:8;44006:19;;;;;;;;;;;;;;;;;;;;;;;;;44002:46;;;44041:7;;44002:46;44082:4;44060:9;:19;44070:8;44060:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;39839:1;43931:172:::0;:::o;43684:113::-;43746:4;43770:9;:19;43780:8;43770:19;;;;;;;;;;;;;;;;;;;;;;;;;43763:26;;43684:113;;;:::o;45612:67::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45659:10:::1;:8;:10::i;:::-;45612:67::o:0;21595:185::-;21733:39;21750:4;21756:2;21760:7;21733:39;;;;;;;;;;;;:16;:39::i;:::-;21595:185;;;:::o;42781:245::-;42899:41;42918:12;:10;:12::i;:::-;42932:7;42899:18;:41::i;:::-;42891:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;43004:14;43010:7;43004:5;:14::i;:::-;42781:245;:::o;47028:353::-;47090:16;47119:18;47140:17;47150:6;47140:9;:17::i;:::-;47119:38;;47170:25;47212:10;47198:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47170:53;;47239:9;47234:112;47258:10;47254:1;:14;47234:112;;;47304:30;47324:6;47332:1;47304:19;:30::i;:::-;47290:8;47299:1;47290:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;47270:3;;;;;:::i;:::-;;;;47234:112;;;;47365:8;47358:15;;;;47028:353;;;:::o;46861:163::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46935:9:::1;:19;46945:8;46935:19;;;;;;;;;;;;;;;;;;;;;;;;;46930:47;;46970:7;;46930:47;47011:5;46989:9;:19;46999:8;46989:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39839:1;46861:163:::0;:::o;45889:88::-;45928:13;45960:9;45953:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45889:88;:::o;32090:233::-;32165:7;32201:30;:28;:30::i;:::-;32193:5;:38;32185:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:10;32309:5;32298:17;;;;;;;;;;;;;;;;;;;;;;;;32291:24;;32090:233;;;:::o;41362:86::-;41409:4;41433:7;;;;;;;;;;;41426:14;;41362:86;:::o;18430:239::-;18502:7;18522:13;18538:7;:16;18546:7;18538:16;;;;;;;;;;;;;;;;;;;;;18522:32;;18590:1;18573:19;;:5;:19;;;;18565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18656:5;18649:12;;;18430:239;;;:::o;18160:208::-;18232:7;18277:1;18260:19;;:5;:19;;;;18252:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:9;:16;18354:5;18344:16;;;;;;;;;;;;;;;;18337:23;;18160:208;;;:::o;40199:94::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40264:21:::1;40282:1;40264:9;:21::i;:::-;40199:94::o:0;45541:63::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45586:8:::1;:6;:8::i;:::-;45541:63::o:0;46098:171::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46157:13:::1;46197:1;46173:21;:25;;;;:::i;:::-;46157:41;;46225:2;;;;;;;;;;;46217:16;;:23;46234:5;46217:23;;;;;;;;;;;;;;;;;;;;;;;46209:32;;;::::0;::::1;;39839:1;46098:171::o:0;39548:87::-;39594:7;39621:6;;;;;;;;;;;39614:13;;39548:87;:::o;43815:97::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43898:6:::1;43888:7;;:16;;;;;;;;;;;;;;;;;;43815:97:::0;:::o;45783:93::-;45830:7;45856:12;;45849:19;;45783:93;:::o;44311:::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44387:9:::1;44378:6;:18;;;;44311:93:::0;:::o;18905:104::-;18961:13;18994:7;18987:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18905:104;:::o;45689:82::-;45730:7;45756:6;;45749:13;;45689:82;:::o;44534:96::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:7:::1;44603:9;:19;;;;;;;;;;;;:::i;:::-;;44534:96:::0;:::o;20588:295::-;20703:12;:10;:12::i;:::-;20691:24;;:8;:24;;;;20683:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20803:8;20758:18;:32;20777:12;:10;:12::i;:::-;20758:32;;;;;;;;;;;;;;;:42;20791:8;20758:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20856:8;20827:48;;20842:12;:10;:12::i;:::-;20827:48;;;20866:8;20827:48;;;;;;:::i;:::-;;;;;;;;20588:295;;:::o;44122:179::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44206:6:::1;44201:93;44222:5;:12;44218:1;:16;44201:93;;;44278:4;44256:9;:19;44266:5;44272:1;44266:8;;;;;;;;;;;;;;;;;;;;;;44256:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;44236:3;;;;;:::i;:::-;;;;44201:93;;;;44122:179:::0;:::o;21851:328::-;22026:41;22045:12;:10;:12::i;:::-;22059:7;22026:18;:41::i;:::-;22018:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:39;22146:4;22152:2;22156:7;22165:5;22132:13;:39::i;:::-;21851:328;;;;:::o;46653:196::-;46780:13;46818:23;46833:7;46818:14;:23::i;:::-;46811:30;;46653:196;;;:::o;47400:489::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47475:14:::1;47492:13;:11;:13::i;:::-;47475:30;;47516:12;47531:3;47516:18;;47561:4;47554:3;:11;;47545:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47625:9;47621:251;47640:3;47636:1;:7;47621:251;;;47673:18;47718:9;47729:29;47756:1;47746:6;:11;;;;:::i;:::-;47729:16;:29::i;:::-;47759:4;47701:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47673:92;;47783:28;47794:3;47808:1;47799:6;:10;;;;:::i;:::-;47783:9;:28::i;:::-;47823:30;47845:1;47836:6;:10;;;;:::i;:::-;47848:4;47823:12;:30::i;:::-;47621:251;47645:3;;;;;:::i;:::-;;;;47621:251;;;;39839:1;;47400:489:::0;;:::o;44644:135::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44745:26:::1;44758:3;44763:7;44745:12;:26::i;:::-;44644:135:::0;;:::o;20954:164::-;21051:4;21075:18;:25;21094:5;21075:25;;;;;;;;;;;;;;;:35;21101:8;21075:35;;;;;;;;;;;;;;;;;;;;;;;;;21068:42;;20954:164;;;;:::o;40448:192::-;39779:12;:10;:12::i;:::-;39768:23;;:7;:5;:7::i;:::-;:23;;;39760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40557:1:::1;40537:22;;:8;:22;;;;40529:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40613:19;40623:8;40613:9;:19::i;:::-;40448:192:::0;:::o;31260:224::-;31362:4;31401:35;31386:50;;;:11;:50;;;;:90;;;;31440:36;31464:11;31440:23;:36::i;:::-;31386:90;31379:97;;31260:224;;;:::o;23689:127::-;23754:4;23806:1;23778:30;;:7;:16;23786:7;23778:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23771:37;;23689:127;;;:::o;14657:98::-;14710:7;14737:10;14730:17;;14657:98;:::o;27671:174::-;27773:2;27746:15;:24;27762:7;27746:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27829:7;27825:2;27791:46;;27800:23;27815:7;27800:14;:23::i;:::-;27791:46;;;;;;;;;;;;27671:174;;:::o;15059:723::-;15115:13;15345:1;15336:5;:10;15332:53;;;15363:10;;;;;;;;;;;;;;;;;;;;;15332:53;15395:12;15410:5;15395:20;;15426:14;15451:78;15466:1;15458:4;:9;15451:78;;15484:8;;;;;:::i;:::-;;;;15515:2;15507:10;;;;;:::i;:::-;;;15451:78;;;15539:19;15571:6;15561:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15539:39;;15589:154;15605:1;15596:5;:10;15589:154;;15633:1;15623:11;;;;;:::i;:::-;;;15700:2;15692:5;:10;;;;:::i;:::-;15679:2;:24;;;;:::i;:::-;15666:39;;15649:6;15656;15649:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;15729:2;15720:11;;;;;:::i;:::-;;;15589:154;;;15767:6;15753:21;;;;;15059:723;;;;:::o;24673:110::-;24749:26;24759:2;24763:7;24749:26;;;;;;;;;;;;:9;:26::i;:::-;24673:110;;:::o;38486:217::-;38586:16;38594:7;38586;:16::i;:::-;38578:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38686:9;38664:10;:19;38675:7;38664:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;38486:217;;:::o;23983:348::-;24076:4;24101:16;24109:7;24101;:16::i;:::-;24093:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24177:13;24193:23;24208:7;24193:14;:23::i;:::-;24177:39;;24246:5;24235:16;;:7;:16;;;:51;;;;24279:7;24255:31;;:20;24267:7;24255:11;:20::i;:::-;:31;;;24235:51;:87;;;;24290:32;24307:5;24314:7;24290:16;:32::i;:::-;24235:87;24227:96;;;23983:348;;;;:::o;26975:578::-;27134:4;27107:31;;:23;27122:7;27107:14;:23::i;:::-;:31;;;27099:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27217:1;27203:16;;:2;:16;;;;27195:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27273:39;27294:4;27300:2;27304:7;27273:20;:39::i;:::-;27377:29;27394:1;27398:7;27377:8;:29::i;:::-;27438:1;27419:9;:15;27429:4;27419:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27467:1;27450:9;:13;27460:2;27450:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27498:2;27479:7;:16;27487:7;27479:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27537:7;27533:2;27518:27;;27527:4;27518:27;;;;;;;;;;;;26975:578;;;:::o;42421:120::-;41965:8;:6;:8::i;:::-;41957:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;42490:5:::1;42480:7;;:15;;;;;;;;;;;;;;;;;;42511:22;42520:12;:10;:12::i;:::-;42511:22;;;;;;:::i;:::-;;;;;;;;42421:120::o:0;46526:115::-;46613:20;46625:7;46613:11;:20::i;:::-;46526:115;:::o;40648:173::-;40704:16;40723:6;;;;;;;;;;;40704:25;;40749:8;40740:6;;:17;;;;;;;;;;;;;;;;;;40804:8;40773:40;;40794:8;40773:40;;;;;;;;;;;;40648:173;;:::o;42162:118::-;41688:8;:6;:8::i;:::-;41687:9;41679:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;42232:4:::1;42222:7;;:14;;;;;;;;;;;;;;;;;;42252:20;42259:12;:10;:12::i;:::-;42252:20;;;;;;:::i;:::-;;;;;;;;42162:118::o:0;23061:315::-;23218:28;23228:4;23234:2;23238:7;23218:9;:28::i;:::-;23265:48;23288:4;23294:2;23298:7;23307:5;23265:22;:48::i;:::-;23257:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23061:315;;;;:::o;37651:679::-;37724:13;37758:16;37766:7;37758;:16::i;:::-;37750:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37841:23;37867:10;:19;37878:7;37867:19;;;;;;;;;;;37841:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37897:18;37918:10;:8;:10::i;:::-;37897:31;;38026:1;38010:4;38004:18;:23;38000:72;;;38051:9;38044:16;;;;;;38000:72;38202:1;38182:9;38176:23;:27;38172:108;;;38251:4;38257:9;38234:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38220:48;;;;;;38172:108;38299:23;38314:7;38299:14;:23::i;:::-;38292:30;;;;37651:679;;;;:::o;17791:305::-;17893:4;17945:25;17930:40;;;:11;:40;;;;:105;;;;18002:33;17987:48;;;:11;:48;;;;17930:105;:158;;;;18052:36;18076:11;18052:23;:36::i;:::-;17930:158;17910:178;;17791:305;;;:::o;25010:321::-;25140:18;25146:2;25150:7;25140:5;:18::i;:::-;25191:54;25222:1;25226:2;25230:7;25239:5;25191:22;:54::i;:::-;25169:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25010:321;;;:::o;46287:227::-;41688:8;:6;:8::i;:::-;41687:9;41679:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46461:45:::1;46488:4;46494:2;46498:7;46461:26;:45::i;:::-;46287:227:::0;;;:::o;38932:206::-;39001:20;39013:7;39001:11;:20::i;:::-;39075:1;39044:10;:19;39055:7;39044:19;;;;;;;;;;;39038:33;;;;;:::i;:::-;;;:38;39034:97;;39100:10;:19;39111:7;39100:19;;;;;;;;;;;;39093:26;;;;:::i;:::-;39034:97;38932:206;:::o;28410:799::-;28565:4;28586:15;:2;:13;;;:15::i;:::-;28582:620;;;28638:2;28622:36;;;28659:12;:10;:12::i;:::-;28673:4;28679:7;28688:5;28622:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28618:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28881:1;28864:6;:13;:18;28860:272;;;28907:60;;;;;;;;;;:::i;:::-;;;;;;;;28860:272;29082:6;29076:13;29067:6;29063:2;29059:15;29052:38;28618:529;28755:41;;;28745:51;;;:6;:51;;;;28738:58;;;;;28582:620;29186:4;29179:11;;28410:799;;;;;;;:::o;19662:94::-;19713:13;19739:9;;;;;;;;;;;;;;19662:94;:::o;19080:334::-;19153:13;19187:16;19195:7;19187;:16::i;:::-;19179:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;19268:21;19292:10;:8;:10::i;:::-;19268:34;;19344:1;19326:7;19320:21;:25;:86;;;;;;;;;;;;;;;;;19372:7;19381:18;:7;:16;:18::i;:::-;19355:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19320:86;19313:93;;;19080:334;;;:::o;626:157::-;711:4;750:25;735:40;;;:11;:40;;;;728:47;;626:157;;;:::o;25667:382::-;25761:1;25747:16;;:2;:16;;;;25739:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25820:16;25828:7;25820;:16::i;:::-;25819:17;25811:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25882:45;25911:1;25915:2;25919:7;25882:20;:45::i;:::-;25957:1;25940:9;:13;25950:2;25940:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25988:2;25969:7;:16;25977:7;25969:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26033:7;26029:2;26008:33;;26025:1;26008:33;;;;;;;;;;;;25667:382;;:::o;32936:589::-;33080:45;33107:4;33113:2;33117:7;33080:26;:45::i;:::-;33158:1;33142:18;;:4;:18;;;33138:187;;;33177:40;33209:7;33177:31;:40::i;:::-;33138:187;;;33247:2;33239:10;;:4;:10;;;33235:90;;33266:47;33299:4;33305:7;33266:32;:47::i;:::-;33235:90;33138:187;33353:1;33339:16;;:2;:16;;;33335:183;;;33372:45;33409:7;33372:36;:45::i;:::-;33335:183;;;33445:4;33439:10;;:2;:10;;;33435:83;;33466:40;33494:2;33498:7;33466:27;:40::i;:::-;33435:83;33335:183;32936:589;;;:::o;26278:360::-;26338:13;26354:23;26369:7;26354:14;:23::i;:::-;26338:39;;26390:48;26411:5;26426:1;26430:7;26390:20;:48::i;:::-;26479:29;26496:1;26500:7;26479:8;:29::i;:::-;26541:1;26521:9;:16;26531:5;26521:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;26560:7;:16;26568:7;26560:16;;;;;;;;;;;;26553:23;;;;;;;;;;;26622:7;26618:1;26594:36;;26603:5;26594:36;;;;;;;;;;;;26278:360;;:::o;7293:387::-;7353:4;7561:12;7628:7;7616:20;7608:28;;7671:1;7664:4;:8;7657:15;;;7293:387;;;:::o;29781:126::-;;;;:::o;34248:164::-;34352:10;:17;;;;34325:15;:24;34341:7;34325:24;;;;;;;;;;;:44;;;;34380:10;34396:7;34380:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34248:164;:::o;35039:988::-;35305:22;35355:1;35330:22;35347:4;35330:16;:22::i;:::-;:26;;;;:::i;:::-;35305:51;;35367:18;35388:17;:26;35406:7;35388:26;;;;;;;;;;;;35367:47;;35535:14;35521:10;:28;35517:328;;35566:19;35588:12;:18;35601:4;35588:18;;;;;;;;;;;;;;;:34;35607:14;35588:34;;;;;;;;;;;;35566:56;;35672:11;35639:12;:18;35652:4;35639:18;;;;;;;;;;;;;;;:30;35658:10;35639:30;;;;;;;;;;;:44;;;;35789:10;35756:17;:30;35774:11;35756:30;;;;;;;;;;;:43;;;;35517:328;;35941:17;:26;35959:7;35941:26;;;;;;;;;;;35934:33;;;35985:12;:18;35998:4;35985:18;;;;;;;;;;;;;;;:34;36004:14;35985:34;;;;;;;;;;;35978:41;;;35039:988;;;;:::o;36322:1079::-;36575:22;36620:1;36600:10;:17;;;;:21;;;;:::i;:::-;36575:46;;36632:18;36653:15;:24;36669:7;36653:24;;;;;;;;;;;;36632:45;;37004:19;37026:10;37037:14;37026:26;;;;;;;;;;;;;;;;;;;;;;;;37004:48;;37090:11;37065:10;37076;37065:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;37201:10;37170:15;:28;37186:11;37170:28;;;;;;;;;;;:41;;;;37342:15;:24;37358:7;37342:24;;;;;;;;;;;37335:31;;;37377:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36322:1079;;;;:::o;33826:221::-;33911:14;33928:20;33945:2;33928:16;:20::i;:::-;33911:37;;33986:7;33959:12;:16;33972:2;33959:16;;;;;;;;;;;;;;;:24;33976:6;33959:24;;;;;;;;;;;:34;;;;34033:6;34004:17;:26;34022:7;34004:26;;;;;;;;;;;:35;;;;33826:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:256::-;;6368:2;6356:9;6347:7;6343:23;6339:32;6336:2;;;6384:1;6381;6374:12;6336:2;6427:1;6452:50;6494:7;6485:6;6474:9;6470:22;6452:50;:::i;:::-;6442:60;;6398:114;6326:193;;;;:::o;6525:260::-;;6632:2;6620:9;6611:7;6607:23;6603:32;6600:2;;;6648:1;6645;6638:12;6600:2;6691:1;6716:52;6760:7;6751:6;6740:9;6736:22;6716:52;:::i;:::-;6706:62;;6662:116;6590:195;;;;:::o;6791:282::-;;6909:2;6897:9;6888:7;6884:23;6880:32;6877:2;;;6925:1;6922;6915:12;6877:2;6968:1;6993:63;7048:7;7039:6;7028:9;7024:22;6993:63;:::i;:::-;6983:73;;6939:127;6867:206;;;;:::o;7079:375::-;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7213:1;7210;7203:12;7165:2;7284:1;7273:9;7269:17;7256:31;7314:18;7306:6;7303:30;7300:2;;;7346:1;7343;7336:12;7300:2;7374:63;7429:7;7420:6;7409:9;7405:22;7374:63;:::i;:::-;7364:73;;7227:220;7155:299;;;;:::o;7460:262::-;;7568:2;7556:9;7547:7;7543:23;7539:32;7536:2;;;7584:1;7581;7574:12;7536:2;7627:1;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7598:117;7526:196;;;;:::o;7728:520::-;;;7863:2;7851:9;7842:7;7838:23;7834:32;7831:2;;;7879:1;7876;7869:12;7831:2;7922:1;7947:53;7992:7;7983:6;7972:9;7968:22;7947:53;:::i;:::-;7937:63;;7893:117;8077:2;8066:9;8062:18;8049:32;8108:18;8100:6;8097:30;8094:2;;;8140:1;8137;8130:12;8094:2;8168:63;8223:7;8214:6;8203:9;8199:22;8168:63;:::i;:::-;8158:73;;8020:221;7821:427;;;;;:::o;8254:179::-;;8344:46;8386:3;8378:6;8344:46;:::i;:::-;8422:4;8417:3;8413:14;8399:28;;8334:99;;;;:::o;8439:118::-;8526:24;8544:5;8526:24;:::i;:::-;8521:3;8514:37;8504:53;;:::o;8593:732::-;;8741:54;8789:5;8741:54;:::i;:::-;8811:86;8890:6;8885:3;8811:86;:::i;:::-;8804:93;;8921:56;8971:5;8921:56;:::i;:::-;9000:7;9031:1;9016:284;9041:6;9038:1;9035:13;9016:284;;;9117:6;9111:13;9144:63;9203:3;9188:13;9144:63;:::i;:::-;9137:70;;9230:60;9283:6;9230:60;:::i;:::-;9220:70;;9076:224;9063:1;9060;9056:9;9051:14;;9016:284;;;9020:14;9316:3;9309:10;;8717:608;;;;;;;:::o;9331:109::-;9412:21;9427:5;9412:21;:::i;:::-;9407:3;9400:34;9390:50;;:::o;9446:360::-;;9560:38;9592:5;9560:38;:::i;:::-;9614:70;9677:6;9672:3;9614:70;:::i;:::-;9607:77;;9693:52;9738:6;9733:3;9726:4;9719:5;9715:16;9693:52;:::i;:::-;9770:29;9792:6;9770:29;:::i;:::-;9765:3;9761:39;9754:46;;9536:270;;;;;:::o;9812:364::-;;9928:39;9961:5;9928:39;:::i;:::-;9983:71;10047:6;10042:3;9983:71;:::i;:::-;9976:78;;10063:52;10108:6;10103:3;10096:4;10089:5;10085:16;10063:52;:::i;:::-;10140:29;10162:6;10140:29;:::i;:::-;10135:3;10131:39;10124:46;;9904:272;;;;;:::o;10182:377::-;;10316:39;10349:5;10316:39;:::i;:::-;10371:89;10453:6;10448:3;10371:89;:::i;:::-;10364:96;;10469:52;10514:6;10509:3;10502:4;10495:5;10491:16;10469:52;:::i;:::-;10546:6;10541:3;10537:16;10530:23;;10292:267;;;;;:::o;10589:845::-;;10729:5;10723:12;10758:36;10784:9;10758:36;:::i;:::-;10810:89;10892:6;10887:3;10810:89;:::i;:::-;10803:96;;10930:1;10919:9;10915:17;10946:1;10941:137;;;;11092:1;11087:341;;;;10908:520;;10941:137;11025:4;11021:9;11010;11006:25;11001:3;10994:38;11061:6;11056:3;11052:16;11045:23;;10941:137;;11087:341;11154:38;11186:5;11154:38;:::i;:::-;11214:1;11228:154;11242:6;11239:1;11236:13;11228:154;;;11316:7;11310:14;11306:1;11301:3;11297:11;11290:35;11366:1;11357:7;11353:15;11342:26;;11264:4;11261:1;11257:12;11252:17;;11228:154;;;11411:6;11406:3;11402:16;11395:23;;11094:334;;10908:520;;10696:738;;;;;;:::o;11440:314::-;;11603:67;11667:2;11662:3;11603:67;:::i;:::-;11596:74;;11700:18;11696:1;11691:3;11687:11;11680:39;11745:2;11740:3;11736:12;11729:19;;11586:168;;;:::o;11760:318::-;;11923:67;11987:2;11982:3;11923:67;:::i;:::-;11916:74;;12020:22;12016:1;12011:3;12007:11;12000:43;12069:2;12064:3;12060:12;12053:19;;11906:172;;;:::o;12084:375::-;;12247:67;12311:2;12306:3;12247:67;:::i;:::-;12240:74;;12344:34;12340:1;12335:3;12331:11;12324:55;12410:13;12405:2;12400:3;12396:12;12389:35;12450:2;12445:3;12441:12;12434:19;;12230:229;;;:::o;12465:382::-;;12628:67;12692:2;12687:3;12628:67;:::i;:::-;12621:74;;12725:34;12721:1;12716:3;12712:11;12705:55;12791:20;12786:2;12781:3;12777:12;12770:42;12838:2;12833:3;12829:12;12822:19;;12611:236;;;:::o;12853:370::-;;13016:67;13080:2;13075:3;13016:67;:::i;:::-;13009:74;;13113:34;13109:1;13104:3;13100:11;13093:55;13179:8;13174:2;13169:3;13165:12;13158:30;13214:2;13209:3;13205:12;13198:19;;12999:224;;;:::o;13229:326::-;;13392:67;13456:2;13451:3;13392:67;:::i;:::-;13385:74;;13489:30;13485:1;13480:3;13476:11;13469:51;13546:2;13541:3;13537:12;13530:19;;13375:180;;;:::o;13561:368::-;;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13821:34;13817:1;13812:3;13808:11;13801:55;13887:6;13882:2;13877:3;13873:12;13866:28;13920:2;13915:3;13911:12;13904:19;;13707:222;;;:::o;13935:323::-;;14098:67;14162:2;14157:3;14098:67;:::i;:::-;14091:74;;14195:27;14191:1;14186:3;14182:11;14175:48;14249:2;14244:3;14240:12;14233:19;;14081:177;;;:::o;14264:376::-;;14427:67;14491:2;14486:3;14427:67;:::i;:::-;14420:74;;14524:34;14520:1;14515:3;14511:11;14504:55;14590:14;14585:2;14580:3;14576:12;14569:36;14631:2;14626:3;14622:12;14615:19;;14410:230;;;:::o;14646:314::-;;14809:67;14873:2;14868:3;14809:67;:::i;:::-;14802:74;;14906:18;14902:1;14897:3;14893:11;14886:39;14951:2;14946:3;14942:12;14935:19;;14792:168;;;:::o;14966:388::-;;15129:67;15193:2;15188:3;15129:67;:::i;:::-;15122:74;;15226:34;15222:1;15217:3;15213:11;15206:55;15292:26;15287:2;15282:3;15278:12;15271:48;15345:2;15340:3;15336:12;15329:19;;15112:242;;;:::o;15360:374::-;;15523:67;15587:2;15582:3;15523:67;:::i;:::-;15516:74;;15620:34;15616:1;15611:3;15607:11;15600:55;15686:12;15681:2;15676:3;15672:12;15665:34;15725:2;15720:3;15716:12;15709:19;;15506:228;;;:::o;15740:373::-;;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;16000:34;15996:1;15991:3;15987:11;15980:55;16066:11;16061:2;16056:3;16052:12;16045:33;16104:2;16099:3;16095:12;16088:19;;15886:227;;;:::o;16119:378::-;;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16379:34;16375:1;16370:3;16366:11;16359:55;16445:16;16440:2;16435:3;16431:12;16424:38;16488:2;16483:3;16479:12;16472:19;;16265:232;;;:::o;16503:330::-;;16666:67;16730:2;16725:3;16666:67;:::i;:::-;16659:74;;16763:34;16759:1;16754:3;16750:11;16743:55;16824:2;16819:3;16815:12;16808:19;;16649:184;;;:::o;16839:381::-;;17002:67;17066:2;17061:3;17002:67;:::i;:::-;16995:74;;17099:34;17095:1;17090:3;17086:11;17079:55;17165:19;17160:2;17155:3;17151:12;17144:41;17211:2;17206:3;17202:12;17195:19;;16985:235;;;:::o;17226:376::-;;17389:67;17453:2;17448:3;17389:67;:::i;:::-;17382:74;;17486:34;17482:1;17477:3;17473:11;17466:55;17552:14;17547:2;17542:3;17538:12;17531:36;17593:2;17588:3;17584:12;17577:19;;17372:230;;;:::o;17608:330::-;;17771:67;17835:2;17830:3;17771:67;:::i;:::-;17764:74;;17868:34;17864:1;17859:3;17855:11;17848:55;17929:2;17924:3;17920:12;17913:19;;17754:184;;;:::o;17944:373::-;;18107:67;18171:2;18166:3;18107:67;:::i;:::-;18100:74;;18204:34;18200:1;18195:3;18191:11;18184:55;18270:11;18265:2;18260:3;18256:12;18249:33;18308:2;18303:3;18299:12;18292:19;;18090:227;;;:::o;18323:379::-;;18486:67;18550:2;18545:3;18486:67;:::i;:::-;18479:74;;18583:34;18579:1;18574:3;18570:11;18563:55;18649:17;18644:2;18639:3;18635:12;18628:39;18693:2;18688:3;18684:12;18677:19;;18469:233;;;:::o;18708:328::-;;18871:67;18935:2;18930:3;18871:67;:::i;:::-;18864:74;;18968:32;18964:1;18959:3;18955:11;18948:53;19027:2;19022:3;19018:12;19011:19;;18854:182;;;:::o;19042:365::-;;19205:67;19269:2;19264:3;19205:67;:::i;:::-;19198:74;;19302:34;19298:1;19293:3;19289:11;19282:55;19368:3;19363:2;19358:3;19354:12;19347:25;19398:2;19393:3;19389:12;19382:19;;19188:219;;;:::o;19413:323::-;;19576:67;19640:2;19635:3;19576:67;:::i;:::-;19569:74;;19673:27;19669:1;19664:3;19660:11;19653:48;19727:2;19722:3;19718:12;19711:19;;19559:177;;;:::o;19742:321::-;;19905:67;19969:2;19964:3;19905:67;:::i;:::-;19898:74;;20002:25;19998:1;19993:3;19989:11;19982:46;20054:2;20049:3;20045:12;20038:19;;19888:175;;;:::o;20069:381::-;;20232:67;20296:2;20291:3;20232:67;:::i;:::-;20225:74;;20329:34;20325:1;20320:3;20316:11;20309:55;20395:19;20390:2;20385:3;20381:12;20374:41;20441:2;20436:3;20432:12;20425:19;;20215:235;;;:::o;20456:376::-;;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20716:34;20712:1;20707:3;20703:11;20696:55;20782:14;20777:2;20772:3;20768:12;20761:36;20823:2;20818:3;20814:12;20807:19;;20602:230;;;:::o;20838:380::-;;21001:67;21065:2;21060:3;21001:67;:::i;:::-;20994:74;;21098:34;21094:1;21089:3;21085:11;21078:55;21164:18;21159:2;21154:3;21150:12;21143:40;21209:2;21204:3;21200:12;21193:19;;20984:234;;;:::o;21224:108::-;21301:24;21319:5;21301:24;:::i;:::-;21296:3;21289:37;21279:53;;:::o;21338:118::-;21425:24;21443:5;21425:24;:::i;:::-;21420:3;21413:37;21403:53;;:::o;21462:435::-;;21664:95;21755:3;21746:6;21664:95;:::i;:::-;21657:102;;21776:95;21867:3;21858:6;21776:95;:::i;:::-;21769:102;;21888:3;21881:10;;21646:251;;;;;:::o;21903:583::-;;22147:92;22235:3;22226:6;22147:92;:::i;:::-;22140:99;;22256:95;22347:3;22338:6;22256:95;:::i;:::-;22249:102;;22368:92;22456:3;22447:6;22368:92;:::i;:::-;22361:99;;22477:3;22470:10;;22129:357;;;;;;:::o;22492:222::-;;22623:2;22612:9;22608:18;22600:26;;22636:71;22704:1;22693:9;22689:17;22680:6;22636:71;:::i;:::-;22590:124;;;;:::o;22720:640::-;;22953:3;22942:9;22938:19;22930:27;;22967:71;23035:1;23024:9;23020:17;23011:6;22967:71;:::i;:::-;23048:72;23116:2;23105:9;23101:18;23092:6;23048:72;:::i;:::-;23130;23198:2;23187:9;23183:18;23174:6;23130:72;:::i;:::-;23249:9;23243:4;23239:20;23234:2;23223:9;23219:18;23212:48;23277:76;23348:4;23339:6;23277:76;:::i;:::-;23269:84;;22920:440;;;;;;;:::o;23366:373::-;;23547:2;23536:9;23532:18;23524:26;;23596:9;23590:4;23586:20;23582:1;23571:9;23567:17;23560:47;23624:108;23727:4;23718:6;23624:108;:::i;:::-;23616:116;;23514:225;;;;:::o;23745:210::-;;23870:2;23859:9;23855:18;23847:26;;23883:65;23945:1;23934:9;23930:17;23921:6;23883:65;:::i;:::-;23837:118;;;;:::o;23961:313::-;;24112:2;24101:9;24097:18;24089:26;;24161:9;24155:4;24151:20;24147:1;24136:9;24132:17;24125:47;24189:78;24262:4;24253:6;24189:78;:::i;:::-;24181:86;;24079:195;;;;:::o;24280:419::-;;24484:2;24473:9;24469:18;24461:26;;24533:9;24527:4;24523:20;24519:1;24508:9;24504:17;24497:47;24561:131;24687:4;24561:131;:::i;:::-;24553:139;;24451:248;;;:::o;24705:419::-;;24909:2;24898:9;24894:18;24886:26;;24958:9;24952:4;24948:20;24944:1;24933:9;24929:17;24922:47;24986:131;25112:4;24986:131;:::i;:::-;24978:139;;24876:248;;;:::o;25130:419::-;;25334:2;25323:9;25319:18;25311:26;;25383:9;25377:4;25373:20;25369:1;25358:9;25354:17;25347:47;25411:131;25537:4;25411:131;:::i;:::-;25403:139;;25301:248;;;:::o;25555:419::-;;25759:2;25748:9;25744:18;25736:26;;25808:9;25802:4;25798:20;25794:1;25783:9;25779:17;25772:47;25836:131;25962:4;25836:131;:::i;:::-;25828:139;;25726:248;;;:::o;25980:419::-;;26184:2;26173:9;26169:18;26161:26;;26233:9;26227:4;26223:20;26219:1;26208:9;26204:17;26197:47;26261:131;26387:4;26261:131;:::i;:::-;26253:139;;26151:248;;;:::o;26405:419::-;;26609:2;26598:9;26594:18;26586:26;;26658:9;26652:4;26648:20;26644:1;26633:9;26629:17;26622:47;26686:131;26812:4;26686:131;:::i;:::-;26678:139;;26576:248;;;:::o;26830:419::-;;27034:2;27023:9;27019:18;27011:26;;27083:9;27077:4;27073:20;27069:1;27058:9;27054:17;27047:47;27111:131;27237:4;27111:131;:::i;:::-;27103:139;;27001:248;;;:::o;27255:419::-;;27459:2;27448:9;27444:18;27436:26;;27508:9;27502:4;27498:20;27494:1;27483:9;27479:17;27472:47;27536:131;27662:4;27536:131;:::i;:::-;27528:139;;27426:248;;;:::o;27680:419::-;;27884:2;27873:9;27869:18;27861:26;;27933:9;27927:4;27923:20;27919:1;27908:9;27904:17;27897:47;27961:131;28087:4;27961:131;:::i;:::-;27953:139;;27851:248;;;:::o;28105:419::-;;28309:2;28298:9;28294:18;28286:26;;28358:9;28352:4;28348:20;28344:1;28333:9;28329:17;28322:47;28386:131;28512:4;28386:131;:::i;:::-;28378:139;;28276:248;;;:::o;28530:419::-;;28734:2;28723:9;28719:18;28711:26;;28783:9;28777:4;28773:20;28769:1;28758:9;28754:17;28747:47;28811:131;28937:4;28811:131;:::i;:::-;28803:139;;28701:248;;;:::o;28955:419::-;;29159:2;29148:9;29144:18;29136:26;;29208:9;29202:4;29198:20;29194:1;29183:9;29179:17;29172:47;29236:131;29362:4;29236:131;:::i;:::-;29228:139;;29126:248;;;:::o;29380:419::-;;29584:2;29573:9;29569:18;29561:26;;29633:9;29627:4;29623:20;29619:1;29608:9;29604:17;29597:47;29661:131;29787:4;29661:131;:::i;:::-;29653:139;;29551:248;;;:::o;29805:419::-;;30009:2;29998:9;29994:18;29986:26;;30058:9;30052:4;30048:20;30044:1;30033:9;30029:17;30022:47;30086:131;30212:4;30086:131;:::i;:::-;30078:139;;29976:248;;;:::o;30230:419::-;;30434:2;30423:9;30419:18;30411:26;;30483:9;30477:4;30473:20;30469:1;30458:9;30454:17;30447:47;30511:131;30637:4;30511:131;:::i;:::-;30503:139;;30401:248;;;:::o;30655:419::-;;30859:2;30848:9;30844:18;30836:26;;30908:9;30902:4;30898:20;30894:1;30883:9;30879:17;30872:47;30936:131;31062:4;30936:131;:::i;:::-;30928:139;;30826:248;;;:::o;31080:419::-;;31284:2;31273:9;31269:18;31261:26;;31333:9;31327:4;31323:20;31319:1;31308:9;31304:17;31297:47;31361:131;31487:4;31361:131;:::i;:::-;31353:139;;31251:248;;;:::o;31505:419::-;;31709:2;31698:9;31694:18;31686:26;;31758:9;31752:4;31748:20;31744:1;31733:9;31729:17;31722:47;31786:131;31912:4;31786:131;:::i;:::-;31778:139;;31676:248;;;:::o;31930:419::-;;32134:2;32123:9;32119:18;32111:26;;32183:9;32177:4;32173:20;32169:1;32158:9;32154:17;32147:47;32211:131;32337:4;32211:131;:::i;:::-;32203:139;;32101:248;;;:::o;32355:419::-;;32559:2;32548:9;32544:18;32536:26;;32608:9;32602:4;32598:20;32594:1;32583:9;32579:17;32572:47;32636:131;32762:4;32636:131;:::i;:::-;32628:139;;32526:248;;;:::o;32780:419::-;;32984:2;32973:9;32969:18;32961:26;;33033:9;33027:4;33023:20;33019:1;33008:9;33004:17;32997:47;33061:131;33187:4;33061:131;:::i;:::-;33053:139;;32951:248;;;:::o;33205:419::-;;33409:2;33398:9;33394:18;33386:26;;33458:9;33452:4;33448:20;33444:1;33433:9;33429:17;33422:47;33486:131;33612:4;33486:131;:::i;:::-;33478:139;;33376:248;;;:::o;33630:419::-;;33834:2;33823:9;33819:18;33811:26;;33883:9;33877:4;33873:20;33869:1;33858:9;33854:17;33847:47;33911:131;34037:4;33911:131;:::i;:::-;33903:139;;33801:248;;;:::o;34055:419::-;;34259:2;34248:9;34244:18;34236:26;;34308:9;34302:4;34298:20;34294:1;34283:9;34279:17;34272:47;34336:131;34462:4;34336:131;:::i;:::-;34328:139;;34226:248;;;:::o;34480:419::-;;34684:2;34673:9;34669:18;34661:26;;34733:9;34727:4;34723:20;34719:1;34708:9;34704:17;34697:47;34761:131;34887:4;34761:131;:::i;:::-;34753:139;;34651:248;;;:::o;34905:419::-;;35109:2;35098:9;35094:18;35086:26;;35158:9;35152:4;35148:20;35144:1;35133:9;35129:17;35122:47;35186:131;35312:4;35186:131;:::i;:::-;35178:139;;35076:248;;;:::o;35330:419::-;;35534:2;35523:9;35519:18;35511:26;;35583:9;35577:4;35573:20;35569:1;35558:9;35554:17;35547:47;35611:131;35737:4;35611:131;:::i;:::-;35603:139;;35501:248;;;:::o;35755:222::-;;35886:2;35875:9;35871:18;35863:26;;35899:71;35967:1;35956:9;35952:17;35943:6;35899:71;:::i;:::-;35853:124;;;;:::o;35983:283::-;;36049:2;36043:9;36033:19;;36091:4;36083:6;36079:17;36198:6;36186:10;36183:22;36162:18;36150:10;36147:34;36144:62;36141:2;;;36209:18;;:::i;:::-;36141:2;36249:10;36245:2;36238:22;36023:243;;;;:::o;36272:311::-;;36439:18;36431:6;36428:30;36425:2;;;36461:18;;:::i;:::-;36425:2;36511:4;36503:6;36499:17;36491:25;;36571:4;36565;36561:15;36553:23;;36354:229;;;:::o;36589:331::-;;36740:18;36732:6;36729:30;36726:2;;;36762:18;;:::i;:::-;36726:2;36847:4;36843:9;36836:4;36828:6;36824:17;36820:33;36812:41;;36908:4;36902;36898:15;36890:23;;36655:265;;;:::o;36926:332::-;;37078:18;37070:6;37067:30;37064:2;;;37100:18;;:::i;:::-;37064:2;37185:4;37181:9;37174:4;37166:6;37162:17;37158:33;37150:41;;37246:4;37240;37236:15;37228:23;;36993:265;;;:::o;37264:132::-;;37354:3;37346:11;;37384:4;37379:3;37375:14;37367:22;;37336:60;;;:::o;37402:141::-;;37474:3;37466:11;;37497:3;37494:1;37487:14;37531:4;37528:1;37518:18;37510:26;;37456:87;;;:::o;37549:114::-;;37650:5;37644:12;37634:22;;37623:40;;;:::o;37669:98::-;;37754:5;37748:12;37738:22;;37727:40;;;:::o;37773:99::-;;37859:5;37853:12;37843:22;;37832:40;;;:::o;37878:113::-;;37980:4;37975:3;37971:14;37963:22;;37953:38;;;:::o;37997:184::-;;38130:6;38125:3;38118:19;38170:4;38165:3;38161:14;38146:29;;38108:73;;;;:::o;38187:168::-;;38304:6;38299:3;38292:19;38344:4;38339:3;38335:14;38320:29;;38282:73;;;;:::o;38361:169::-;;38479:6;38474:3;38467:19;38519:4;38514:3;38510:14;38495:29;;38457:73;;;;:::o;38536:148::-;;38675:3;38660:18;;38650:34;;;;:::o;38690:305::-;;38749:20;38767:1;38749:20;:::i;:::-;38744:25;;38783:20;38801:1;38783:20;:::i;:::-;38778:25;;38937:1;38869:66;38865:74;38862:1;38859:81;38856:2;;;38943:18;;:::i;:::-;38856:2;38987:1;38984;38980:9;38973:16;;38734:261;;;;:::o;39001:185::-;;39058:20;39076:1;39058:20;:::i;:::-;39053:25;;39092:20;39110:1;39092:20;:::i;:::-;39087:25;;39131:1;39121:2;;39136:18;;:::i;:::-;39121:2;39178:1;39175;39171:9;39166:14;;39043:143;;;;:::o;39192:348::-;;39255:20;39273:1;39255:20;:::i;:::-;39250:25;;39289:20;39307:1;39289:20;:::i;:::-;39284:25;;39477:1;39409:66;39405:74;39402:1;39399:81;39394:1;39387:9;39380:17;39376:105;39373:2;;;39484:18;;:::i;:::-;39373:2;39532:1;39529;39525:9;39514:20;;39240:300;;;;:::o;39546:191::-;;39606:20;39624:1;39606:20;:::i;:::-;39601:25;;39640:20;39658:1;39640:20;:::i;:::-;39635:25;;39679:1;39676;39673:8;39670:2;;;39684:18;;:::i;:::-;39670:2;39729:1;39726;39722:9;39714:17;;39591:146;;;;:::o;39743:96::-;;39809:24;39827:5;39809:24;:::i;:::-;39798:35;;39788:51;;;:::o;39845:90::-;;39922:5;39915:13;39908:21;39897:32;;39887:48;;;:::o;39941:149::-;;40017:66;40010:5;40006:78;39995:89;;39985:105;;;:::o;40096:126::-;;40173:42;40166:5;40162:54;40151:65;;40141:81;;;:::o;40228:77::-;;40294:5;40283:16;;40273:32;;;:::o;40311:154::-;40395:6;40390:3;40385;40372:30;40457:1;40448:6;40443:3;40439:16;40432:27;40362:103;;;:::o;40471:307::-;40539:1;40549:113;40563:6;40560:1;40557:13;40549:113;;;40648:1;40643:3;40639:11;40633:18;40629:1;40624:3;40620:11;40613:39;40585:2;40582:1;40578:10;40573:15;;40549:113;;;40680:6;40677:1;40674:13;40671:2;;;40760:1;40751:6;40746:3;40742:16;40735:27;40671:2;40520:258;;;;:::o;40784:320::-;;40865:1;40859:4;40855:12;40845:22;;40912:1;40906:4;40902:12;40933:18;40923:2;;40989:4;40981:6;40977:17;40967:27;;40923:2;41051;41043:6;41040:14;41020:18;41017:38;41014:2;;;41070:18;;:::i;:::-;41014:2;40835:269;;;;:::o;41110:233::-;;41172:24;41190:5;41172:24;:::i;:::-;41163:33;;41218:66;41211:5;41208:77;41205:2;;;41288:18;;:::i;:::-;41205:2;41335:1;41328:5;41324:13;41317:20;;41153:190;;;:::o;41349:176::-;;41398:20;41416:1;41398:20;:::i;:::-;41393:25;;41432:20;41450:1;41432:20;:::i;:::-;41427:25;;41471:1;41461:2;;41476:18;;:::i;:::-;41461:2;41517:1;41514;41510:9;41505:14;;41383:142;;;;:::o;41531:180::-;41579:77;41576:1;41569:88;41676:4;41673:1;41666:15;41700:4;41697:1;41690:15;41717:180;41765:77;41762:1;41755:88;41862:4;41859:1;41852:15;41886:4;41883:1;41876:15;41903:180;41951:77;41948:1;41941:88;42048:4;42045:1;42038:15;42072:4;42069:1;42062:15;42089:180;42137:77;42134:1;42127:88;42234:4;42231:1;42224:15;42258:4;42255:1;42248:15;42275:102;;42367:2;42363:7;42358:2;42351:5;42347:14;42343:28;42333:38;;42323:54;;;:::o;42383:122::-;42456:24;42474:5;42456:24;:::i;:::-;42449:5;42446:35;42436:2;;42495:1;42492;42485:12;42436:2;42426:79;:::o;42511:116::-;42581:21;42596:5;42581:21;:::i;:::-;42574:5;42571:32;42561:2;;42617:1;42614;42607:12;42561:2;42551:76;:::o;42633:120::-;42705:23;42722:5;42705:23;:::i;:::-;42698:5;42695:34;42685:2;;42743:1;42740;42733:12;42685:2;42675:78;:::o;42759:122::-;42832:24;42850:5;42832:24;:::i;:::-;42825:5;42822:35;42812:2;;42871:1;42868;42861:12;42812:2;42802:79;:::o
Swarm Source
ipfs://b80d1d08af6e5f98c401f3081fd3b6ac0da8c5e87ac4c1bc1735547407fc7835
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.