code: private UUID nextUUID(boolean secure) {
              byte[] raw = new byte[UUID_BYTE_LENGTH];
              if (secure) {
                  //Initialize the secure random if null.
                  if (secureRandom == null) {
                      try {
                          if (usePRNGPackage != null) {
                              secureRandom = SecureRandom.getInstance(usePRNG, usePRNGPackage);
                          } else {
                              secureRandom = SecureRandom.getInstance(usePRNG);
                          }
                      } catch (NoSuchAlgorithmException nsae) {
                          secure = false; //Fail back to default PRNG/Random
                      } catch (NoSuchProviderException nspe) {
                          secure = false; //Fail back to default PRNG/Random
                      }
                  }
                  if (secureRandom != null) { 
                      secureRandom.nextBytes(raw); 
                  }                
              } else {
                  regularRandom.nextBytes(raw);
              }
  
              raw[TIME_HI_AND_VERSION_BYTE_6] &= 0x0F;
              raw[TIME_HI_AND_VERSION_BYTE_6] |= (UUID.VERSION_FOUR << 4);
  
              raw[CLOCK_SEQ_HI_AND_RESERVED_BYTE_8] &= 0x3F; //0011 1111
              raw[CLOCK_SEQ_HI_AND_RESERVED_BYTE_8] |= 0x80; //1000 0000
  
              return new UUID(raw);
          }
docs: <p>Returns a new version four UUID using either <code>SecureRandom</code> or <code>Random</code>.</p>
  
  @param secure boolean flag indicating whether to use <code>SecureRandom</code> or <code>Random</code>.
  @return a new version four UUID using either <code>SecureRandom</code> or <code>Random</code>.