docs: public boolean matches(HostName host) {
  		if(this == host) {
  			return true;
  		}
  		if(isValid()) {
  			if(host.isValid()) {
  				if(isAddressString()) {
  					return host.isAddressString()
  							&& asAddressString().equals(host.asAddressString())
  							&& Objects.equals(getPort(), host.getPort())
  							&& Objects.equals(getService(), host.getService());
  				}
  				if(host.isAddressString()) {
  					return false;
  				}
  				String thisHost = parsedHost.getHost();
  				String otherHost = host.parsedHost.getHost();
  				if(!thisHost.equals(otherHost)) {
  					return false;
  				}
  				return Objects.equals(parsedHost.getEquivalentPrefixLength(), host.parsedHost.getEquivalentPrefixLength()) &&
  						Objects.equals(parsedHost.getMask(), host.parsedHost.getMask()) &&
  						Objects.equals(parsedHost.getPort(), host.parsedHost.getPort()) &&
  						Objects.equals(parsedHost.getService(), host.parsedHost.getService());
  			}
  			return false;
  		}
  		return !host.isValid() && toString().equals(host.toString());
  	}