code: def fallback_move(fobj, dest, src, count, BUFFER_SIZE=2 ** 16):
      
  
      if dest < 0 or src < 0 or count < 0:
          raise ValueError
  
      fobj.seek(0, 2)
      filesize = fobj.tell()
  
      if max(dest, src) + count > filesize:
          raise ValueError("area outside of file")
  
      if src > dest:
          moved = 0
          while count - moved:
              this_move = min(BUFFER_SIZE, count - moved)
              fobj.seek(src + moved)
              buf = fobj.read(this_move)
              fobj.seek(dest + moved)
              fobj.write(buf)
              moved += this_move
          fobj.flush()
      else:
          while count:
              this_move = min(BUFFER_SIZE, count)
              fobj.seek(src + count - this_move)
              buf = fobj.read(this_move)
              fobj.seek(count + dest - this_move)
              fobj.write(buf)
              count -= this_move
          fobj.flush()
docs: Moves data around using read()/write().
  
      Args:
          fileobj (fileobj)
          dest (int): The destination offset
          src (int): The source offset
          count (int) The amount of data to move
      Raises:
          IOError: In case an operation on the fileobj fails
          ValueError: In case invalid parameters were given