<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def make_hop_info_from_url(url, verify_reachability=None):
 """Build HopInfo object from url. It allows only telnet and ssh as a valid protocols. Args: url (str):
 The url string describing the node. i.e. telnet://username@1.1.1.1. The protocol, username and address portion of url is mandatory. Port and password is optional. If port is missing the standard protocol -> port mapping is done. The password is optional i.e. for TS access directly to console ports. The path part is treated as additional password required for some systems, i.e. enable password for IOS devices.: telnet://<username>:<password>@<host>:<port>/<enable_password> <enable_password> is optional verify_reachability: This is optional callable returning boolean if node is reachable. It can be used to verify reachability of the node before making a connection. It can speedup the connection process when node not reachable especially with telnet having long timeout. Returns: HopInfo object or None if url is invalid or protocol not supported """

    parsed = urlparse(url)
    username = None if parsed.username is None else unquote(parsed.username)  # It's None if not exists
    password = None if parsed.password is None else unquote(parsed.password)  # It's None if not exists

    try:
        enable_password = parse_qs(parsed.query)["enable_password"][0]
    except KeyError:
        enable_password = None

    hop_info = HopInfo(
        parsed.scheme,
        parsed.hostname,
        username,
        password,
        parsed.port,
        enable_password,
        verify_reachability=verify_reachability
    )
    if hop_info.is_valid():
        return hop_info
    raise InvalidHopInfoError