code: func take(waiter waiter, tokens int) {
  	if tokens < limiterBurstSize {
  		// This is the by far more common case so we get it out of the way
  		// early.
  		waiter.WaitN(context.TODO(), tokens)
  		return
  	}
  
  	for tokens > 0 {
  		// Consume limiterBurstSize tokens at a time until we're done.
  		if tokens > limiterBurstSize {
  			waiter.WaitN(context.TODO(), limiterBurstSize)
  			tokens -= limiterBurstSize
  		} else {
  			waiter.WaitN(context.TODO(), tokens)
  			tokens = 0
  		}
  	}
  }
docs: // take is a utility function to consume tokens from a overall rate.Limiter and deviceLimiter.
  // No call to WaitN can be larger than the limiter burst size so we split it up into
  // several calls when necessary.