code: func (f *Filter) unindexedLogs(ctx context.Context, end uint64) ([]*types.Log, error) {
  	var logs []*types.Log
  
  	for ; f.begin <= int64(end); f.begin++ {
  		header, err := f.backend.HeaderByNumber(ctx, rpc.BlockNumber(f.begin))
  		if header == nil || err != nil {
  			return logs, err
  		}
  		found, err := f.blockLogs(ctx, header)
  		if err != nil {
  			return logs, err
  		}
  		logs = append(logs, found...)
  	}
  	return logs, nil
  }
docs: // indexedLogs returns the logs matching the filter criteria based on raw block
  // iteration and bloom matching.