  #endif
  
  #ifdef NAV
    s->m->addInput("nav_features", s->nav_features, NAV_FEATURE_LEN);
  #endif
  
  #ifdef TEMPORAL
    s->m->addInput("feature_buffer", &s->feature_buffer[0], TEMPORAL_SIZE);
  #endif
  
 
</s> remove ModelOutput* model_eval_frame(ModelState* s, VisionBuf* buf, VisionBuf* wbuf,
                              const mat3 &transform, const mat3 &transform_wide, float *desire_in, bool is_rhd, float *driving_style, float *nav_features, bool prepare_only) {
 </s> add ModelOutput* model_eval_frame(ModelState* s, VisionBuf* buf, VisionBuf* wbuf, const mat3 &transform, const mat3 &transform_wide,
                              float *desire_in, bool is_rhd, float *driving_style, float *nav_features, float *nav_instructions, bool prepare_only) { </s> remove     parse_banner_instructions(msg.navInstruction, banner_step['bannerInstructions'], distance_to_maneuver_along_geometry)
 </s> add     instruction = parse_banner_instructions(banner_step['bannerInstructions'], distance_to_maneuver_along_geometry)
    if instruction is not None:
      for k,v in instruction.items():
        setattr(msg.navInstruction, k, v)

    # All instructions
    maneuvers = []
    for i, step_i in enumerate(self.route):
      if i < self.step_idx:
        distance_to_maneuver = -sum(self.route[j]['distance'] for j in range(i+1, self.step_idx)) - along_geometry
      elif i == self.step_idx:
        distance_to_maneuver = distance_to_maneuver_along_geometry
      else:
        distance_to_maneuver = distance_to_maneuver_along_geometry + sum(self.route[j]['distance'] for j in range(self.step_idx+1, i+1))

      instruction = parse_banner_instructions(step_i['bannerInstructions'], distance_to_maneuver)
      if instruction is None:
        continue
      maneuver = {'distance': distance_to_maneuver}
      if 'maneuverType' in instruction:
        maneuver['type'] = instruction['maneuverType']
      if 'maneuverModifier' in instruction:
        maneuver['modifier'] = instruction['maneuverModifier']
      maneuvers.append(maneuver)

    msg.navInstruction.allManeuvers = maneuvers </s> remove     instruction.lanes = lanes
 </s> add     instruction['lanes'] = lanes

  return instruction
  s->m->addInput("nav_instructions", s->nav_instructions, NAV_INSTRUCTION_LEN);
  #endif
  
  #ifdef NAV
    s->m->addInput("nav_features", s->nav_features, NAV_FEATURE_LEN);
  s->m->addInput("nav_instructions", s->nav_instructions, NAV_INSTRUCTION_LEN);
  #endif
  
  #ifdef TEMPORAL
    s->m->addInput("feature_buffer", &s->feature_buffer[0], TEMPORAL_SIZE);
  #endif
  
keep keep keep add keep keep keep keep keep keep
 Non-Inflatable Model :balloon:  (#29003)

* Added all maneuvers to navInstruction message

* Added nav instruction logic to modeld

* New model: fcee01c1-96bb-414f-b00d-e4a994a00922/700

* Fixed bug in navd

* Added sharp/slight modifiers

* Updated refs 
selfdrive/modeld/models/driving.cc