// lookup symbol data
SymbolInfo symbolInfo = model.getSymbolInfo(symbol);
// adjust low and high counts
long range = (high - low + 1) >> model.log2MaxCount();
high = low + (range * symbolInfo.highCount()) - 1;
low = low + range * symbolInfo.lowCount();
// write high byte if they are equal
while ((high & 0xFF0000000000L) == (low & 0xFF0000000000L)) {
int value = (int) (high >>> 40);