  Import('env', 'arch', 'SHARED', 'QCOM_REPLAY')
  
  if SHARED:
    fxn = env.SharedLibrary
  else:
    fxn = env.Library
 
</s> remove Export('env', 'qt_env', 'arch', 'real_arch', 'SHARED', 'USE_WEBCAM', 'QCOM_REPLAY')
 </s> add Export('env', 'qt_env', 'arch', 'real_arch', 'SHARED', 'USE_WEBCAM') </s> remove Import('env', 'arch', 'cereal', 'messaging', 'common', 'gpucommon', 'visionipc', 'USE_WEBCAM', 'QCOM_REPLAY')
 </s> add Import('env', 'arch', 'cereal', 'messaging', 'common', 'gpucommon', 'visionipc', 'USE_WEBCAM') </s> remove   if QCOM_REPLAY:
    cameras = ['cameras/camera_frame_stream.cc']
  else:
    cameras = ['cameras/camera_qcom.cc']
 </s> add   cameras = ['cameras/camera_qcom.cc'] </s> remove 
    if QCOM_REPLAY:
      cflags += ["-DQCOM_REPLAY"]
      cxxflags += ["-DQCOM_REPLAY"]
 </s> add  </s> remove         if typ == VIPC_TYP and (not no_visionipc):
          if vipc_server is None:
            vipc_server = _get_vipc_server(len(msg_bytes))

          i, sof, eof = extra[0]
          vipc_server.send(VisionStreamType.VISION_STREAM_RGB_BACK, msg_bytes, i, sof, eof)
        if typ != VIPC_TYP:
 </s> add         if typ in [VIPC_RGB, VIPC_YUV]:
          if not no_visionipc:
            if vipc_server is None:
              vipc_server = _get_vipc_server(len(msg_bytes))

            i, sof, eof = extra[0]
            stream = VisionStreamType.VISION_STREAM_RGB_BACK if typ == VIPC_RGB else VisionStreamType.VISION_STREAM_YUV_BACK
            vipc_server.send(stream, msg_bytes, i, sof, eof)
        else:
Import('env', 'arch', 'SHARED')
Import('env', 'arch', 'SHARED')
  
  if SHARED:
    fxn = env.SharedLibrary
  else:
    fxn = env.Library
replace keep keep keep keep keep
 fix up model tests + tools (#21071)

* unlogger: send yuv stream

* fix up model test tools

* fix unlogger

* rename model replay

* bump cereal

* test in actions

* no ci for now 
selfdrive/common/SConscript