code: func (eth *LightEthereum) startBloomHandlers(sectionSize uint64) {
  	for i := 0; i < bloomServiceThreads; i++ {
  		go func() {
  			for {
  				select {
  				case <-eth.shutdownChan:
  					return
  
  				case request := <-eth.bloomRequests:
  					task := <-request
  					task.Bitsets = make([][]byte, len(task.Sections))
  					compVectors, err := light.GetBloomBits(task.Context, eth.odr, task.Bit, task.Sections)
  					if err == nil {
  						for i := range task.Sections {
  							if blob, err := bitutil.DecompressBytes(compVectors[i], int(sectionSize/8)); err == nil {
  								task.Bitsets[i] = blob
  							} else {
  								task.Error = err
  							}
  						}
  					} else {
  						task.Error = err
  					}
  					request <- task
  				}
  			}
  		}()
  	}
  }
docs: // startBloomHandlers starts a batch of goroutines to accept bloom bit database
  // retrievals from possibly a range of filters and serving the data to satisfy.