code: def build_updated_request(self):
          
          r_kwargs = {
              "table_name": self.message.table_name,
              "filter": self.message.filter,
          }
  
          if self.message.rows_limit != 0:
              r_kwargs["rows_limit"] = max(
                  1, self.message.rows_limit - self.rows_read_so_far
              )
  
          # if neither RowSet.row_keys nor RowSet.row_ranges currently exist,
          # add row_range that starts with last_scanned_key as start_key_open
          # to request only rows that have not been returned yet
          if not self.message.HasField("rows"):
              row_range = data_v2_pb2.RowRange(start_key_open=self.last_scanned_key)
              r_kwargs["rows"] = data_v2_pb2.RowSet(row_ranges=[row_range])
          else:
              row_keys = self._filter_rows_keys()
              row_ranges = self._filter_row_ranges()
              r_kwargs["rows"] = data_v2_pb2.RowSet(
                  row_keys=row_keys, row_ranges=row_ranges
              )
          return data_messages_v2_pb2.ReadRowsRequest(**r_kwargs)
docs: Updates the given message request as per last scanned key