docs: def _ProcessRepliesWithFlowOutputPlugins(self, replies):
      """Processes replies with output plugins."""
      created_output_plugins = []
      for index, output_plugin_state in enumerate(
          self.rdf_flow.output_plugins_states):
        plugin_descriptor = output_plugin_state.plugin_descriptor
        output_plugin_cls = plugin_descriptor.GetPluginClass()
        output_plugin = output_plugin_cls(
            source_urn=self.rdf_flow.long_flow_id,
            args=plugin_descriptor.plugin_args,
            token=access_control.ACLToken(username=self.rdf_flow.creator))
  
        try:
          # TODO(user): refactor output plugins to use FlowResponse
          # instead of GrrMessage.
          output_plugin.ProcessResponses(
              output_plugin_state.plugin_state,
              [r.AsLegacyGrrMessage() for r in replies])
          output_plugin.Flush(output_plugin_state.plugin_state)
          output_plugin.UpdateState(output_plugin_state.plugin_state)
  
          data_store.REL_DB.WriteFlowOutputPluginLogEntries([
              rdf_flow_objects.FlowOutputPluginLogEntry(
                  client_id=self.rdf_flow.client_id,
                  flow_id=self.rdf_flow.flow_id,
                  hunt_id=self.rdf_flow.parent_hunt_id,
                  output_plugin_id="%d" % index,
                  log_entry_type=rdf_flow_objects.FlowOutputPluginLogEntry
                  .LogEntryType.LOG,
                  message="Processed %d replies." % len(replies))
          ])
  
          self.Log("Plugin %s successfully processed %d flow replies.",
                   plugin_descriptor, len(replies))
  
          created_output_plugins.append(output_plugin)
        except Exception as e:  # pylint: disable=broad-except
          logging.exception("Plugin %s failed to process %d replies: %s",
                            plugin_descriptor, len(replies),
                            traceback.format_exc())
          created_output_plugins.append(None)
  
          data_store.REL_DB.WriteFlowOutputPluginLogEntries([
              rdf_flow_objects.FlowOutputPluginLogEntry(
                  client_id=self.rdf_flow.client_id,
                  flow_id=self.rdf_flow.flow_id,
                  hunt_id=self.rdf_flow.parent_hunt_id,
                  output_plugin_id="%d" % index,
                  log_entry_type=rdf_flow_objects.FlowOutputPluginLogEntry
                  .LogEntryType.ERROR,
                  message="Error while processing %d replies: %s" %
                  (len(replies), str(e)))
          ])
  
          self.Log("Plugin %s failed to process %d replies due to: %s",
                   plugin_descriptor, len(replies), e)
  
      return created_output_plugins