docs: def _decode_response(self, ip_address):
          """Decodes a HttpBL response IP and return data structure of response
          data.
  
          :param ip_address: IP address to query
          :type ip_address: str
          :rtype: dict
          :raises: ValueError
  
          """
          # Reverse the IP, reassign the octets to integers
          vt, ts, days, rc = [int(o) for o in ip_address.split('.')[::-1]]
  
          # 127 reflects a valid query response, all others are errors
          if rc != 127:
              raise ValueError('Invalid Response Code: {}'.format(rc))
  
          # Build a list of visitor types since one IP can be multiple
          visitor_types = []
          if vt & COMMENT_SPAMMER:
              visitor_types.append(COMMENT_SPAMMER)
          if vt & HARVESTER:
              visitor_types.append(HARVESTER)
          if vt & SUSPICIOUS:
              visitor_types.append(SUSPICIOUS)
  
          # Return the response dictionary
          return {'days_since_last_activity': days if vt else None,
                  'name': None if vt else SEARCH_ENGINES[ts],
                  'threat_score': ts if vt else None,
                  'type': visitor_types if vt else [SEARCH_ENGINE]}