docs: IdBatchAndWaitTime newIdBaseLocal(long now, int nodeId, int batchSize) {
          checkPositive(batchSize, "batchSize");
          if (nodeId == NODE_ID_OUT_OF_RANGE) {
              throw new NodeIdOutOfRangeException("NodeID overflow, this member cannot generate IDs");
          }
          assert (nodeId & -1 << BITS_NODE_ID) == 0  : "nodeId out of range: " + nodeId;
          now -= epochStart;
          if (now < -(1L << BITS_TIMESTAMP) || now >= (1L << BITS_TIMESTAMP)) {
              throw new HazelcastException("Current time out of allowed range");
          }
          now <<= BITS_SEQUENCE;
          long oldGeneratedValue;
          long base;
          do {
              oldGeneratedValue = generatedValue.get();
              base = Math.max(now, oldGeneratedValue);
          } while (!generatedValue.compareAndSet(oldGeneratedValue, base + batchSize));
  
          long waitTime = Math.max(0, ((base + batchSize - now) >> BITS_SEQUENCE) - ALLOWED_FUTURE_MILLIS);
          base = base << BITS_NODE_ID | nodeId;
  
          getService().updateStatsForBatch(name, batchSize);
          return new IdBatchAndWaitTime(new IdBatch(base, INCREMENT, batchSize), waitTime);
      }