code: synchronized public long generateIdMini() {
          long timestamp = System.currentTimeMillis();
          long sequence = 0;
          boolean done = false;
          while (!done) {
              done = true;
              while (timestamp < lastTimestampMillisec.get()) {
                  timestamp = waitTillNextMillisec(timestamp);
              }
              if (timestamp == lastTimestampMillisec.get()) {
                  // increase sequence
                  sequence = sequenceMillisec.incrementAndGet();
                  if (sequence > MAX_SEQUENCE_MINI) {
                      // reset sequence
                      sequenceMillisec.set(sequence = 0);
                      timestamp = waitTillNextMillisec(timestamp);
                      done = false;
                  }
              }
          }
          sequenceMillisec.set(sequence);
          lastTimestampMillisec.set(timestamp);
          timestamp = (timestamp - TIMESTAMP_EPOCH) & MASK_TIMESTAMP_MINI;
          return timestamp << SHIFT_TIMESTAMP_MINI | templateMini | (sequence & MASK_SEQUENCE_MINI);
      }
docs: Generates a mini id (48-bit long, does not include node info).
  
  <p>
  Format: {@code <41-bit:timestamp><7-bit:sequence number>}. Where {@code timestamp} is in
  milliseconds, minus the epoch.
  </p>
  
  <p>
  Note:
  <ul>
  <li>Mini IDs are not distributed! IDs generated from different nodes can be duplicated since
  ID does not include node info.</li>
  </ul>
  </p>
  
  @return