docs: def CreateAndStartHunt(flow_name, flow_args, creator, **kwargs):
    """Creates and starts a new hunt."""
  
    # This interface takes a time when the hunt expires. However, the legacy hunt
    # starting interface took an rdfvalue.Duration object which was then added to
    # the current time to get the expiry. This check exists to make sure we don't
    # confuse the two.
    if "duration" in kwargs:
      precondition.AssertType(kwargs["duration"], rdfvalue.Duration)
  
    hunt_args = rdf_hunt_objects.HuntArguments(
        hunt_type=rdf_hunt_objects.HuntArguments.HuntType.STANDARD,
        standard=rdf_hunt_objects.HuntArgumentsStandard(
            flow_name=flow_name, flow_args=flow_args))
  
    hunt_obj = rdf_hunt_objects.Hunt(
        creator=creator,
        args=hunt_args,
        create_time=rdfvalue.RDFDatetime.Now(),
        **kwargs)
  
    CreateHunt(hunt_obj)
    StartHunt(hunt_obj.hunt_id)
  
    return hunt_obj.hunt_id