docs: def PublishMultipleEvents(cls, events, token=None):
      """Publishes multiple messages at once.
  
      Args:
        events: A dict with keys being event names and values being lists of
          messages.
        token: ACL token.
  
      Raises:
        ValueError: If the message is invalid. The message must be a Semantic
          Value (instance of RDFValue) or a full GrrMessage.
      """
      event_name_map = registry.EventRegistry.EVENT_NAME_MAP
      for event_name, messages in iteritems(events):
        if not isinstance(event_name, string_types):
          raise ValueError(
              "Event names should be string, got: %s" % type(event_name))
        for msg in messages:
          if not isinstance(msg, rdfvalue.RDFValue):
            raise ValueError("Can only publish RDFValue instances.")
  
        for event_cls in event_name_map.get(event_name, []):
          event_cls().ProcessMessages(messages, token=token)