      float scale = (sm["wideRoadCameraState"].getWideRoadCameraState().getSensor() == cereal::FrameData::ImageSensor::AR0321) ? 6.0f : 1.0f;
      scene.light_sensor = std::max(100.0f - scale * sm["wideRoadCameraState"].getWideRoadCameraState().getExposureValPercent(), 0.0f);
    }
    scene.started = sm["deviceState"].getDeviceState().getStarted() && scene.ignition;
  
    if (sm.updated("carState")) {
      float v_ego = sm["carState"].getCarState().getVEgo();
      // TODO: support replays without ecam by using fcam
      // Wide or narrow cam dependent on speed
      if ((v_ego < 10) || s->wide_cam_only) {
        scene.wide_cam = true;
      } else if (v_ego > 15) {
        scene.wide_cam = false;
      }
    }
  }
  
  void ui_update_params(UIState *s) {
    auto params = Params();
    s->scene.is_metric = params.getBool("IsMetric");
 
</s> remove   }
  if (s->worldObjectsVisible()) {
    if (sm.updated("modelV2")) {
      update_model(s, sm["modelV2"].getModelV2());
    }
    if (sm.updated("radarState") && sm.rcv_frame("modelV2") > s->scene.started_frame) {
      update_leads(s, sm["radarState"].getRadarState(), sm["modelV2"].getModelV2().getPosition());
    }
 </s> add     scene.calibration_wide_valid = wfde_list.size() == 3; </s> remove static int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line, const float path_height) {
 </s> add int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line, const float path_height) { </s> remove static void update_leads(UIState *s, const cereal::RadarState::Reader &radar_state, const cereal::ModelDataV2::XYZTData::Reader &line) {
 </s> add void update_leads(UIState *s, const cereal::RadarState::Reader &radar_state, const cereal::ModelDataV2::XYZTData::Reader &line) { </s> remove static void update_model(UIState *s, const cereal::ModelDataV2::Reader &model) {
 </s> add void update_model(UIState *s, const cereal::ModelDataV2::Reader &model) {
      float scale = (sm["wideRoadCameraState"].getWideRoadCameraState().getSensor() == cereal::FrameData::ImageSensor::AR0321) ? 6.0f : 1.0f;
      scene.light_sensor = std::max(100.0f - scale * sm["wideRoadCameraState"].getWideRoadCameraState().getExposureValPercent(), 0.0f);
    }
    scene.started = sm["deviceState"].getDeviceState().getStarted() && scene.ignition;











  }
  
  void ui_update_params(UIState *s) {
    auto params = Params();
    s->scene.is_metric = params.getBool("IsMetric");
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 UI: draw onroad objects on right frame (#26306)

* update before draw

* fix a lot of janky

* fix more flicker

* cleanup

* fix flicker when opening settings

* simplify 
selfdrive/ui/ui.cc