code: func (sto *overlayStorage) StatBlobs(ctx context.Context, blobs []blob.Ref, f func(blob.SizedRef) error) error {
  	exists := make([]blob.Ref, 0, len(blobs))
  	for _, br := range blobs {
  		if !sto.isDeleted(br) {
  			exists = append(exists, br)
  		}
  	}
  
  	seen := make(map[blob.Ref]struct{}, len(exists))
  
  	err := sto.upper.StatBlobs(ctx, exists, func(sbr blob.SizedRef) error {
  		seen[sbr.Ref] = struct{}{}
  		return f(sbr)
  	})
  
  	if err != nil {
  		return err
  	}
  
  	lowerBlobs := make([]blob.Ref, 0, len(exists))
  	for _, br := range exists {
  		if _, s := seen[br]; !s {
  			lowerBlobs = append(lowerBlobs, br)
  		}
  	}
  
  	return sto.lower.StatBlobs(ctx, lowerBlobs, f)
  }
docs: // StatBlobs on all BlobStatter reads sequentially, returning the first error.