code: private String getBaseToken(List<String> sortedNonKeyNonNullAttributeNames,
                                  List<String> sortedNullValuedNonKeyAttributeNames) {
          ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
          DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
          try {
              for (String nonKeyNonNullAttributeName : sortedNonKeyNonNullAttributeNames) {
                  dataOutputStream.writeUTF(nonKeyNonNullAttributeName);
              }
              for (String nullValuedNonKeyAttributeName : sortedNullValuedNonKeyAttributeNames) {
                  dataOutputStream.writeUTF(nullValuedNonKeyAttributeName);
              }
          } catch (IOException e) {
              throw new DynamoDBMappingException("Failed to process update operation inside transactionWrite request due to an IOException ", e);
          }
          Adler32 adler32 = new Adler32();
          adler32.update(byteArrayOutputStream.toByteArray());
          return Long.toHexString(adler32.getValue());
      }
docs: Uses attribute names from sortedNonKeyNonNullAttributeNames and sortedNullValuedNonKeyAttributeNames to generate an {@link Adler32} checkSum
  Adler32 generates checksum that is unique enough to be used as a token within an update item and faster to compute than CRC32.