docs: def MultiReadClientMetadata(self, client_ids, cursor=None):
      """Reads ClientMetadata records for a list of clients."""
      ids = [db_utils.ClientIDToInt(client_id) for client_id in client_ids]
      query = ("SELECT client_id, fleetspeak_enabled, certificate, "
               "UNIX_TIMESTAMP(last_ping), "
               "UNIX_TIMESTAMP(last_clock), last_ip, "
               "UNIX_TIMESTAMP(last_foreman), UNIX_TIMESTAMP(first_seen), "
               "UNIX_TIMESTAMP(last_crash_timestamp), "
               "UNIX_TIMESTAMP(last_startup_timestamp) FROM "
               "clients WHERE client_id IN ({})").format(", ".join(["%s"] *
                                                                   len(ids)))
      ret = {}
      cursor.execute(query, ids)
      while True:
        row = cursor.fetchone()
        if not row:
          break
        cid, fs, crt, ping, clk, ip, foreman, first, lct, lst = row
        ret[db_utils.IntToClientID(cid)] = rdf_objects.ClientMetadata(
            certificate=crt,
            fleetspeak_enabled=fs,
            first_seen=mysql_utils.TimestampToRDFDatetime(first),
            ping=mysql_utils.TimestampToRDFDatetime(ping),
            clock=mysql_utils.TimestampToRDFDatetime(clk),
            ip=mysql_utils.StringToRDFProto(rdf_client_network.NetworkAddress,
                                            ip),
            last_foreman_time=mysql_utils.TimestampToRDFDatetime(foreman),
            startup_info_timestamp=mysql_utils.TimestampToRDFDatetime(lst),
            last_crash_timestamp=mysql_utils.TimestampToRDFDatetime(lct))
      return ret