Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked7.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked7.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked7.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked7 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 7;
-    }
+final class BulkOperationPacked7 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked7() {
+      super(7);
+      assert blockCount() == 7;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -447,34 +444,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 7) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 55) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 7) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/gen_BulkOperation.py
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/gen_BulkOperation.py	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/gen_BulkOperation.py	(copie de travail)
@@ -19,6 +19,7 @@
 
 """Code generation for bulk operations"""
 
+MAX_SPECIALIZED_BITS_PER_VALUE = 24;
 PACKED_64_SINGLE_BLOCK_BPV = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 21, 32]
 OUTPUT_FILE = "BulkOperation.java"
 HEADER = """// This file has been automatically generated, DO NOT EDIT
@@ -45,34 +46,13 @@
 """
 
 FOOTER="""
-
-  private static long[] toLongArray(int[] ints, int offset, int length) {
-    long[] arr = new long[length];
-    for (int i = 0; i < length; ++i) {
-      arr[i] = ints[offset + i];
+  protected int writeLong(long block, byte[] blocks, int blocksOffset) {
+    for (int j = 1; j <= 8; ++j) {
+      blocks[blocksOffset++] = (byte) (block >>> (64 - (j << 3)));
     }
-    return arr;
+    return blocksOffset;
   }
 
-  @Override
-  public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-    encode(toLongArray(values, valuesOffset, iterations * valueCount()), 0, blocks, blocksOffset, iterations);
-  }
-
-  @Override
-  public void encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) {
-    final long[] longBLocks = new long[blockCount() * iterations];
-    encode(values, valuesOffset, longBLocks, 0, iterations);
-    ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer().put(longBLocks);
-  }
-
-  @Override
-  public void encode(int[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) {
-    final long[] longBLocks = new long[blockCount() * iterations];
-    encode(values, valuesOffset, longBLocks, 0, iterations);
-    ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer().put(longBLocks);
-  }
-
   /**
    * For every number of bits per value, there is a minimum number of
    * blocks (b) / values (v) you need to write in order to reach the next block
@@ -140,18 +120,12 @@
 
 def packed64singleblock(bpv, f):
   values = 64 / bpv
-  f.write("    @Override\n")
-  f.write("    public int blockCount() {\n")
-  f.write("      return 1;\n")
-  f.write("     }\n\n")
-  f.write("    @Override\n")
-  f.write("    public int valueCount() {\n")
-  f.write("      return %d;\n" %values)
+  f.write("\n")
+  f.write("    public BulkOperationPackedSingleBlock%d() {\n" %bpv)
+  f.write("      super(%d);\n" %bpv)
   f.write("    }\n\n")
   p64sb_decode(bpv, f, 32)
   p64sb_decode(bpv, f, 64)
-  p64sb_encode(bpv, f, 32)
-  p64sb_encode(bpv, f, 64)
 
 def p64sb_decode(bpv, f, bits):
   values = 64 / bpv
@@ -227,31 +201,6 @@
   f.write("      }\n")
   f.write("    }\n\n")
 
-def p64sb_encode(bpv, f, bits):
-  values = 64 / bpv
-  typ = get_type(bits)
-  mask_start, mask_end = masks(bits)
-  f.write("    @Override\n")
-  f.write("    public void encode(%s[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {\n" %typ)
-  if bits < bpv:
-    f.write("      throw new UnsupportedOperationException();\n")
-    f.write("    }\n\n")
-    return
-  f.write("      assert blocksOffset + iterations * blockCount() <= blocks.length;\n")
-  f.write("      assert valuesOffset + iterations * valueCount() <= values.length;\n")
-  f.write("      for (int i = 0; i < iterations; ++i) {\n")
-  for i in xrange(values):
-    block_offset = i / values
-    offset_in_block = i % values
-    if i == 0:
-      f.write("        blocks[blocksOffset++] = %svalues[valuesOffset++]%s" %(mask_start, mask_end))
-    else:
-      f.write(" | (%svalues[valuesOffset++]%s << %d)" %(mask_start, mask_end, i * bpv))
-      if i == values - 1:
-        f.write(";\n")
-  f.write("      }\n")
-  f.write("    }\n\n")
-
 def packed64(bpv, f):
   blocks = bpv
   values = blocks * 64 / bpv
@@ -260,14 +209,13 @@
     values /= 2
   assert values * bpv == 64 * blocks, "%d values, %d blocks, %d bits per value" %(values, blocks, bpv)
   mask = (1 << bpv) - 1
-  f.write("    @Override\n")
-  f.write("    public int blockCount() {\n")
-  f.write("      return %d;\n" %blocks)
+
+  f.write("\n")
+  f.write("    public BulkOperationPacked%d() {\n" %bpv)
+  f.write("      super(%d);\n" %bpv)
+  f.write("      assert blockCount() == %d;\n" %blocks)
+  f.write("      assert valueCount() == %d;\n" %values)
   f.write("    }\n\n")
-  f.write("    @Override\n")
-  f.write("    public int valueCount() {\n")
-  f.write("      return %d;\n" %values)
-  f.write("    }\n\n")
 
   if bpv == 64:
     f.write("""    @Override
@@ -289,17 +237,10 @@
     public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
       LongBuffer.wrap(values, valuesOffset, iterations * valueCount()).put(ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer());
     }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      System.arraycopy(values, valuesOffset, blocks, blocksOffset, valueCount() * iterations);
-    }
 """)
   else:
     p64_decode(bpv, f, 32, values)
     p64_decode(bpv, f, 64, values)
-    p64_encode(bpv, f, 32, values)
-    p64_encode(bpv, f, 64, values)
 
 def p64_decode(bpv, f, bits, values):
   typ = get_type(bits)
@@ -383,41 +324,11 @@
     f.write("      }\n")
   f.write("    }\n\n")
 
-def p64_encode(bpv, f, bits, values):
-  typ = get_type(bits)
-  mask_start, mask_end = masks(bits)
-  f.write("    @Override\n")
-  f.write("    public void encode(%s[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {\n" %typ)
-  f.write("      assert blocksOffset + iterations * blockCount() <= blocks.length;\n")
-  f.write("      assert valuesOffset + iterations * valueCount() <= values.length;\n")
-  f.write("      for (int i = 0; i < iterations; ++i) {\n")
-  for i in xrange(0, values):
-    block_offset = i * bpv / 64
-    bit_offset = (i * bpv) % 64
-    if bit_offset == 0:
-      # start of block
-      f.write("        blocks[blocksOffset++] = (%svalues[valuesOffset++]%s << %d)" %(mask_start, mask_end, 64 - bpv))
-    elif bit_offset + bpv == 64:
-      # end of block
-      f.write(" | %svalues[valuesOffset++]%s;\n" %(mask_start, mask_end))
-    elif bit_offset + bpv < 64:
-      # inside a block
-      f.write(" | (%svalues[valuesOffset++]%s << %d)" %(mask_start, mask_end, 64 - bit_offset - bpv))
-    else:
-      # value spans across 2 blocks
-      right_bits = bit_offset + bpv - 64
-      f.write(" | (%svalues[valuesOffset]%s >>> %d);\n" %(mask_start, mask_end, right_bits))
-      f.write("        blocks[blocksOffset++] = (%svalues[valuesOffset++]%s << %d)" %(mask_start, mask_end, 64 - right_bits))
-  f.write("      }\n")
-  f.write("    }\n\n")
-
-
 if __name__ == '__main__':
   p64_bpv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 21, 32]
 
   f = open(OUTPUT_FILE, 'w')
   f.write(HEADER)
-  f.write('import java.nio.ByteBuffer;\n')
   f.write('\n')
   f.write('''/**
  * Efficient sequential read/write of packed integers.
@@ -427,6 +338,9 @@
   f.write('  private static final BulkOperation[] packedBulkOps = new BulkOperation[] {\n')
     
   for bpv in xrange(1, 65):
+    if bpv > MAX_SPECIALIZED_BITS_PER_VALUE:
+      f.write('    new BulkOperationPacked(%d),\n' % bpv)
+      continue
     f2 = open('BulkOperationPacked%d.java' % bpv, 'w')
     f2.write(HEADER)
     if bpv == 64:
@@ -436,7 +350,7 @@
     f2.write('''/**
  * Efficient sequential read/write of packed integers.
  */\n''')
-    f2.write('final class BulkOperationPacked%d extends BulkOperation {\n' % bpv)
+    f2.write('final class BulkOperationPacked%d extends BulkOperationPacked {\n' % bpv)
     packed64(bpv, f2)
     f2.write('}\n')
     f2.close()
@@ -449,12 +363,15 @@
   f.write('  private static final BulkOperation[] packedSingleBlockBulkOps = new BulkOperation[] {\n')
   for bpv in xrange(1, max(PACKED_64_SINGLE_BLOCK_BPV)+1):
     if bpv in PACKED_64_SINGLE_BLOCK_BPV:
+      if bpv > MAX_SPECIALIZED_BITS_PER_VALUE:
+        f.write('    new BulkOperationPackedSingleBlock(%d),\n' % bpv)
+        continue
       f2 = open('BulkOperationPackedSingleBlock%d.java' % bpv, 'w')
       f2.write(HEADER)
       f2.write('''/**
  * Efficient sequential read/write of packed integers.
  */\n''')
-      f2.write('final class BulkOperationPackedSingleBlock%d extends BulkOperation {\n' % bpv)
+      f2.write('final class BulkOperationPackedSingleBlock%d extends BulkOperationPackedSingleBlock {\n' % bpv)
       packed64singleblock(bpv,f2)
       f2.write('}\n')
       f2.close()
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java	(copie de travail)
@@ -19,7 +19,6 @@
  * limitations under the License.
  */
 
-import java.nio.ByteBuffer;
 
 /**
  * Efficient sequential read/write of packed integers.
@@ -50,46 +49,46 @@
     new BulkOperationPacked22(),
     new BulkOperationPacked23(),
     new BulkOperationPacked24(),
-    new BulkOperationPacked25(),
-    new BulkOperationPacked26(),
-    new BulkOperationPacked27(),
-    new BulkOperationPacked28(),
-    new BulkOperationPacked29(),
-    new BulkOperationPacked30(),
-    new BulkOperationPacked31(),
-    new BulkOperationPacked32(),
-    new BulkOperationPacked33(),
-    new BulkOperationPacked34(),
-    new BulkOperationPacked35(),
-    new BulkOperationPacked36(),
-    new BulkOperationPacked37(),
-    new BulkOperationPacked38(),
-    new BulkOperationPacked39(),
-    new BulkOperationPacked40(),
-    new BulkOperationPacked41(),
-    new BulkOperationPacked42(),
-    new BulkOperationPacked43(),
-    new BulkOperationPacked44(),
-    new BulkOperationPacked45(),
-    new BulkOperationPacked46(),
-    new BulkOperationPacked47(),
-    new BulkOperationPacked48(),
-    new BulkOperationPacked49(),
-    new BulkOperationPacked50(),
-    new BulkOperationPacked51(),
-    new BulkOperationPacked52(),
-    new BulkOperationPacked53(),
-    new BulkOperationPacked54(),
-    new BulkOperationPacked55(),
-    new BulkOperationPacked56(),
-    new BulkOperationPacked57(),
-    new BulkOperationPacked58(),
-    new BulkOperationPacked59(),
-    new BulkOperationPacked60(),
-    new BulkOperationPacked61(),
-    new BulkOperationPacked62(),
-    new BulkOperationPacked63(),
-    new BulkOperationPacked64(),
+    new BulkOperationPacked(25),
+    new BulkOperationPacked(26),
+    new BulkOperationPacked(27),
+    new BulkOperationPacked(28),
+    new BulkOperationPacked(29),
+    new BulkOperationPacked(30),
+    new BulkOperationPacked(31),
+    new BulkOperationPacked(32),
+    new BulkOperationPacked(33),
+    new BulkOperationPacked(34),
+    new BulkOperationPacked(35),
+    new BulkOperationPacked(36),
+    new BulkOperationPacked(37),
+    new BulkOperationPacked(38),
+    new BulkOperationPacked(39),
+    new BulkOperationPacked(40),
+    new BulkOperationPacked(41),
+    new BulkOperationPacked(42),
+    new BulkOperationPacked(43),
+    new BulkOperationPacked(44),
+    new BulkOperationPacked(45),
+    new BulkOperationPacked(46),
+    new BulkOperationPacked(47),
+    new BulkOperationPacked(48),
+    new BulkOperationPacked(49),
+    new BulkOperationPacked(50),
+    new BulkOperationPacked(51),
+    new BulkOperationPacked(52),
+    new BulkOperationPacked(53),
+    new BulkOperationPacked(54),
+    new BulkOperationPacked(55),
+    new BulkOperationPacked(56),
+    new BulkOperationPacked(57),
+    new BulkOperationPacked(58),
+    new BulkOperationPacked(59),
+    new BulkOperationPacked(60),
+    new BulkOperationPacked(61),
+    new BulkOperationPacked(62),
+    new BulkOperationPacked(63),
+    new BulkOperationPacked(64),
   };
 
   // NOTE: this is sparse (some entries are null):
@@ -125,7 +124,7 @@
     null,
     null,
     null,
-    new BulkOperationPackedSingleBlock32(),
+    new BulkOperationPackedSingleBlock(32),
   };
 
 
@@ -142,34 +141,13 @@
     }
   }
 
-
-  private static long[] toLongArray(int[] ints, int offset, int length) {
-    long[] arr = new long[length];
-    for (int i = 0; i < length; ++i) {
-      arr[i] = ints[offset + i];
+  protected int writeLong(long block, byte[] blocks, int blocksOffset) {
+    for (int j = 1; j <= 8; ++j) {
+      blocks[blocksOffset++] = (byte) (block >>> (64 - (j << 3)));
     }
-    return arr;
+    return blocksOffset;
   }
 
-  @Override
-  public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-    encode(toLongArray(values, valuesOffset, iterations * valueCount()), 0, blocks, blocksOffset, iterations);
-  }
-
-  @Override
-  public void encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) {
-    final long[] longBLocks = new long[blockCount() * iterations];
-    encode(values, valuesOffset, longBLocks, 0, iterations);
-    ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer().put(longBLocks);
-  }
-
-  @Override
-  public void encode(int[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) {
-    final long[] longBLocks = new long[blockCount() * iterations];
-    encode(values, valuesOffset, longBLocks, 0, iterations);
-    ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer().put(longBLocks);
-  }
-
   /**
    * For every number of bits per value, there is a minimum number of
    * blocks (b) / values (v) you need to write in order to reach the next block
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked.java	(révision 0)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked.java	(révision 0)
@@ -0,0 +1,231 @@
+package org.apache.lucene.util.packed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Non-specialized {@link BulkOperation} for {@link PackedInts.Format#PACKED}.
+ */
+class BulkOperationPacked extends BulkOperation {
+
+  private final int bitsPerValue;
+  private final int blockCount;
+  private final int valueCount;
+  private final long mask;
+
+  public BulkOperationPacked(int bitsPerValue) {
+    this.bitsPerValue = bitsPerValue;
+    assert bitsPerValue > 0 && bitsPerValue <= 64;
+    int blocks = bitsPerValue;
+    while ((blocks & 1) == 0) {
+      blocks >>>= 1;
+    }
+    this.blockCount = blocks;
+    this.valueCount = 64 * blockCount / bitsPerValue;
+    if (bitsPerValue == 64) {
+      this.mask = ~0L;
+    } else {
+      this.mask = (1L << bitsPerValue) - 1;
+    }
+    assert valueCount * bitsPerValue == 64 * blockCount;
+  }
+
+  @Override
+  public int blockCount() {
+    return blockCount;
+  }
+
+  @Override
+  public int valueCount() {
+    return valueCount;
+  }
+
+  @Override
+  public void decode(long[] blocks, int blocksOffset, long[] values,
+      int valuesOffset, int iterations) {
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft < 0) {
+        values[valuesOffset++] =
+            ((blocks[blocksOffset++] & ((1L << (bitsPerValue + bitsLeft)) - 1)) << -bitsLeft)
+            | (blocks[blocksOffset] >>> (64 + bitsLeft));
+        bitsLeft += 64;
+      } else {
+        values[valuesOffset++] = (blocks[blocksOffset] >>> bitsLeft) & mask;
+      }
+    }
+  }
+
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, long[] values,
+      int valuesOffset, int iterations) {
+    int blockBitsLeft = 8;
+    int valueBitsLeft = bitsPerValue;
+    long nextValue = 0;
+    for (int end = valuesOffset + iterations * valueCount; valuesOffset < end; ) {
+      if (valueBitsLeft > blockBitsLeft) {
+        nextValue |= (blocks[blocksOffset++] & ((1L << blockBitsLeft) - 1)) << (valueBitsLeft - blockBitsLeft);
+        valueBitsLeft -= blockBitsLeft;
+        blockBitsLeft = 8;
+      } else {
+        nextValue |= ((blocks[blocksOffset] & 0xFFL) >>> (blockBitsLeft - valueBitsLeft)) & ((1L << valueBitsLeft) - 1);
+        values[valuesOffset++] = nextValue;
+        nextValue = 0;
+        blockBitsLeft -= valueBitsLeft;
+        valueBitsLeft = bitsPerValue;
+      }
+    }
+  }
+
+  @Override
+  public void decode(long[] blocks, int blocksOffset, int[] values,
+      int valuesOffset, int iterations) {
+    if (bitsPerValue > 32) {
+      throw new UnsupportedOperationException("Cannot decode " + bitsPerValue + "-bits values into an int[]");
+    }
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft < 0) {
+        values[valuesOffset++] = (int)
+            (((blocks[blocksOffset++] & ((1L << (bitsPerValue + bitsLeft)) - 1)) << -bitsLeft)
+            | (blocks[blocksOffset] >>> (64 + bitsLeft)));
+        bitsLeft += 64;
+      } else {
+        values[valuesOffset++] = (int) ((blocks[blocksOffset] >>> bitsLeft) & mask);
+      }
+    }
+  }
+
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, int[] values,
+      int valuesOffset, int iterations) {
+    if (bitsPerValue > 32) {
+      throw new UnsupportedOperationException("Cannot decode " + bitsPerValue + "-bits values into an int[]");
+    }
+    int blockBitsLeft = 8;
+    int valueBitsLeft = bitsPerValue;
+    int nextValue = 0;
+    for (int end = valuesOffset + iterations * valueCount; valuesOffset < end; ) {
+      if (valueBitsLeft > blockBitsLeft) {
+        nextValue |= (blocks[blocksOffset++] & ((1L << blockBitsLeft) - 1)) << (valueBitsLeft - blockBitsLeft);
+        valueBitsLeft -= blockBitsLeft;
+        blockBitsLeft = 8;
+      } else {
+        nextValue |= ((blocks[blocksOffset] & 0xFFL) >>> (blockBitsLeft - valueBitsLeft)) & ((1L << valueBitsLeft) - 1);
+        values[valuesOffset++] = nextValue;
+        nextValue = 0;
+        blockBitsLeft -= valueBitsLeft;
+        valueBitsLeft = bitsPerValue;
+      }
+    }
+  }
+
+  @Override
+  public void encode(long[] values, int valuesOffset, long[] blocks,
+      int blocksOffset, int iterations) {
+    long nextBlock = 0;
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft > 0) {
+        nextBlock |= values[valuesOffset++] << bitsLeft;
+      } else if (bitsLeft == 0) {
+        nextBlock |= values[valuesOffset++];
+        blocks[blocksOffset++] = nextBlock;
+        nextBlock = 0;
+        bitsLeft = 64;
+      } else { // bitsLeft < 0
+        nextBlock |= values[valuesOffset] >>> -bitsLeft;
+        blocks[blocksOffset++] = nextBlock;
+        nextBlock = (values[valuesOffset++] & ((1L << -bitsLeft) - 1)) << (64 + bitsLeft);
+        bitsLeft += 64;
+      }
+    }
+  }
+
+  @Override
+  public void encode(int[] values, int valuesOffset, long[] blocks,
+      int blocksOffset, int iterations) {
+    long nextBlock = 0;
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft > 0) {
+        nextBlock |= (values[valuesOffset++] & 0xFFFFFFFFL) << bitsLeft;
+      } else if (bitsLeft == 0) {
+        nextBlock |= (values[valuesOffset++] & 0xFFFFFFFFL);
+        blocks[blocksOffset++] = nextBlock;
+        nextBlock = 0;
+        bitsLeft = 64;
+      } else { // bitsLeft < 0
+        nextBlock |= (values[valuesOffset] & 0xFFFFFFFFL) >>> -bitsLeft;
+        blocks[blocksOffset++] = nextBlock;
+        nextBlock = (values[valuesOffset++] & ((1L << -bitsLeft) - 1)) << (64 + bitsLeft);
+        bitsLeft += 64;
+      }
+    }
+  }
+
+  @Override
+  public void encode(long[] values, int valuesOffset, byte[] blocks,
+      int blocksOffset, int iterations) {
+    long nextBlock = 0;
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft > 0) {
+        nextBlock |= values[valuesOffset++] << bitsLeft;
+      } else if (bitsLeft == 0) {
+        nextBlock |= values[valuesOffset++];
+        blocksOffset = writeLong(nextBlock, blocks, blocksOffset);
+        nextBlock = 0;
+        bitsLeft = 64;
+      } else { // bitsLeft < 0
+        nextBlock |= values[valuesOffset] >>> -bitsLeft;
+        blocksOffset = writeLong(nextBlock, blocks, blocksOffset);
+        nextBlock = (values[valuesOffset++] & ((1L << -bitsLeft) - 1)) << (64 + bitsLeft);
+        bitsLeft += 64;
+      }
+    }
+  }
+
+  @Override
+  public void encode(int[] values, int valuesOffset, byte[] blocks,
+      int blocksOffset, int iterations) {
+    long nextBlock = 0;
+    int bitsLeft = 64;
+    for (int i = 0; i < valueCount * iterations; ++i) {
+      bitsLeft -= bitsPerValue;
+      if (bitsLeft > 0) {
+        nextBlock |= (values[valuesOffset++] & 0xFFFFFFFFL) << bitsLeft;
+      } else if (bitsLeft == 0) {
+        nextBlock |= (values[valuesOffset++] & 0xFFFFFFFFL);
+        blocksOffset = writeLong(nextBlock, blocks, blocksOffset);
+        nextBlock = 0;
+        bitsLeft = 64;
+      } else { // bitsLeft < 0
+        nextBlock |= (values[valuesOffset] & 0xFFFFFFFFL) >>> -bitsLeft;
+        blocksOffset = writeLong(nextBlock, blocks, blocksOffset);
+        nextBlock = (values[valuesOffset++] & ((1L << -bitsLeft) - 1)) << (64 + bitsLeft);
+        bitsLeft += 64;
+      }
+    }
+  }
+
+}

Modification de propriétés sur lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked.java
___________________________________________________________________
Ajouté : svn:eol-style
   + native

Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock4.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock4.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock4.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock4 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock4 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 16;
+    public BulkOperationPackedSingleBlock4() {
+      super(4);
     }
 
     @Override
@@ -147,22 +142,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 60);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 60);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked11.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked11.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked11.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked11 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 11;
-    }
+final class BulkOperationPacked11 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked11() {
+      super(11);
+      assert blockCount() == 11;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -519,42 +516,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 11) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 11) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked31.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked31.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked31.java	(copie de travail)
@@ -1,960 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked31 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 31;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 33);
-        values[valuesOffset++] = (int) ((block0 >>> 2) & 2147483647L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 3L) << 29) | (block1 >>> 35));
-        values[valuesOffset++] = (int) ((block1 >>> 4) & 2147483647L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 15L) << 27) | (block2 >>> 37));
-        values[valuesOffset++] = (int) ((block2 >>> 6) & 2147483647L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 63L) << 25) | (block3 >>> 39));
-        values[valuesOffset++] = (int) ((block3 >>> 8) & 2147483647L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 255L) << 23) | (block4 >>> 41));
-        values[valuesOffset++] = (int) ((block4 >>> 10) & 2147483647L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 1023L) << 21) | (block5 >>> 43));
-        values[valuesOffset++] = (int) ((block5 >>> 12) & 2147483647L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 4095L) << 19) | (block6 >>> 45));
-        values[valuesOffset++] = (int) ((block6 >>> 14) & 2147483647L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 16383L) << 17) | (block7 >>> 47));
-        values[valuesOffset++] = (int) ((block7 >>> 16) & 2147483647L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 65535L) << 15) | (block8 >>> 49));
-        values[valuesOffset++] = (int) ((block8 >>> 18) & 2147483647L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 262143L) << 13) | (block9 >>> 51));
-        values[valuesOffset++] = (int) ((block9 >>> 20) & 2147483647L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 1048575L) << 11) | (block10 >>> 53));
-        values[valuesOffset++] = (int) ((block10 >>> 22) & 2147483647L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 4194303L) << 9) | (block11 >>> 55));
-        values[valuesOffset++] = (int) ((block11 >>> 24) & 2147483647L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 16777215L) << 7) | (block12 >>> 57));
-        values[valuesOffset++] = (int) ((block12 >>> 26) & 2147483647L);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block12 & 67108863L) << 5) | (block13 >>> 59));
-        values[valuesOffset++] = (int) ((block13 >>> 28) & 2147483647L);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block13 & 268435455L) << 3) | (block14 >>> 61));
-        values[valuesOffset++] = (int) ((block14 >>> 30) & 2147483647L);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block14 & 1073741823L) << 1) | (block15 >>> 63));
-        values[valuesOffset++] = (int) ((block15 >>> 32) & 2147483647L);
-        values[valuesOffset++] = (int) ((block15 >>> 1) & 2147483647L);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block15 & 1L) << 30) | (block16 >>> 34));
-        values[valuesOffset++] = (int) ((block16 >>> 3) & 2147483647L);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block16 & 7L) << 28) | (block17 >>> 36));
-        values[valuesOffset++] = (int) ((block17 >>> 5) & 2147483647L);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block17 & 31L) << 26) | (block18 >>> 38));
-        values[valuesOffset++] = (int) ((block18 >>> 7) & 2147483647L);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block18 & 127L) << 24) | (block19 >>> 40));
-        values[valuesOffset++] = (int) ((block19 >>> 9) & 2147483647L);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block19 & 511L) << 22) | (block20 >>> 42));
-        values[valuesOffset++] = (int) ((block20 >>> 11) & 2147483647L);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block20 & 2047L) << 20) | (block21 >>> 44));
-        values[valuesOffset++] = (int) ((block21 >>> 13) & 2147483647L);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block21 & 8191L) << 18) | (block22 >>> 46));
-        values[valuesOffset++] = (int) ((block22 >>> 15) & 2147483647L);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block22 & 32767L) << 16) | (block23 >>> 48));
-        values[valuesOffset++] = (int) ((block23 >>> 17) & 2147483647L);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block23 & 131071L) << 14) | (block24 >>> 50));
-        values[valuesOffset++] = (int) ((block24 >>> 19) & 2147483647L);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block24 & 524287L) << 12) | (block25 >>> 52));
-        values[valuesOffset++] = (int) ((block25 >>> 21) & 2147483647L);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block25 & 2097151L) << 10) | (block26 >>> 54));
-        values[valuesOffset++] = (int) ((block26 >>> 23) & 2147483647L);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block26 & 8388607L) << 8) | (block27 >>> 56));
-        values[valuesOffset++] = (int) ((block27 >>> 25) & 2147483647L);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block27 & 33554431L) << 6) | (block28 >>> 58));
-        values[valuesOffset++] = (int) ((block28 >>> 27) & 2147483647L);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block28 & 134217727L) << 4) | (block29 >>> 60));
-        values[valuesOffset++] = (int) ((block29 >>> 29) & 2147483647L);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block29 & 536870911L) << 2) | (block30 >>> 62));
-        values[valuesOffset++] = (int) ((block30 >>> 31) & 2147483647L);
-        values[valuesOffset++] = (int) (block30 & 2147483647L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 23) | (byte1 << 15) | (byte2 << 7) | (byte3 >>> 1);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 1) << 30) | (byte4 << 22) | (byte5 << 14) | (byte6 << 6) | (byte7 >>> 2);
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 3) << 29) | (byte8 << 21) | (byte9 << 13) | (byte10 << 5) | (byte11 >>> 3);
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 7) << 28) | (byte12 << 20) | (byte13 << 12) | (byte14 << 4) | (byte15 >>> 4);
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 15) << 27) | (byte16 << 19) | (byte17 << 11) | (byte18 << 3) | (byte19 >>> 5);
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 31) << 26) | (byte20 << 18) | (byte21 << 10) | (byte22 << 2) | (byte23 >>> 6);
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 63) << 25) | (byte24 << 17) | (byte25 << 9) | (byte26 << 1) | (byte27 >>> 7);
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte27 & 127) << 24) | (byte28 << 16) | (byte29 << 8) | byte30;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte31 << 23) | (byte32 << 15) | (byte33 << 7) | (byte34 >>> 1);
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 1) << 30) | (byte35 << 22) | (byte36 << 14) | (byte37 << 6) | (byte38 >>> 2);
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 3) << 29) | (byte39 << 21) | (byte40 << 13) | (byte41 << 5) | (byte42 >>> 3);
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 7) << 28) | (byte43 << 20) | (byte44 << 12) | (byte45 << 4) | (byte46 >>> 4);
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 15) << 27) | (byte47 << 19) | (byte48 << 11) | (byte49 << 3) | (byte50 >>> 5);
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 31) << 26) | (byte51 << 18) | (byte52 << 10) | (byte53 << 2) | (byte54 >>> 6);
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte54 & 63) << 25) | (byte55 << 17) | (byte56 << 9) | (byte57 << 1) | (byte58 >>> 7);
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 127) << 24) | (byte59 << 16) | (byte60 << 8) | byte61;
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte62 << 23) | (byte63 << 15) | (byte64 << 7) | (byte65 >>> 1);
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 1) << 30) | (byte66 << 22) | (byte67 << 14) | (byte68 << 6) | (byte69 >>> 2);
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte69 & 3) << 29) | (byte70 << 21) | (byte71 << 13) | (byte72 << 5) | (byte73 >>> 3);
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 7) << 28) | (byte74 << 20) | (byte75 << 12) | (byte76 << 4) | (byte77 >>> 4);
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte77 & 15) << 27) | (byte78 << 19) | (byte79 << 11) | (byte80 << 3) | (byte81 >>> 5);
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 31) << 26) | (byte82 << 18) | (byte83 << 10) | (byte84 << 2) | (byte85 >>> 6);
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 63) << 25) | (byte86 << 17) | (byte87 << 9) | (byte88 << 1) | (byte89 >>> 7);
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 127) << 24) | (byte90 << 16) | (byte91 << 8) | byte92;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte93 << 23) | (byte94 << 15) | (byte95 << 7) | (byte96 >>> 1);
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 1) << 30) | (byte97 << 22) | (byte98 << 14) | (byte99 << 6) | (byte100 >>> 2);
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        final int byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 3) << 29) | (byte101 << 21) | (byte102 << 13) | (byte103 << 5) | (byte104 >>> 3);
-        final int byte105 = blocks[blocksOffset++] & 0xFF;
-        final int byte106 = blocks[blocksOffset++] & 0xFF;
-        final int byte107 = blocks[blocksOffset++] & 0xFF;
-        final int byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 7) << 28) | (byte105 << 20) | (byte106 << 12) | (byte107 << 4) | (byte108 >>> 4);
-        final int byte109 = blocks[blocksOffset++] & 0xFF;
-        final int byte110 = blocks[blocksOffset++] & 0xFF;
-        final int byte111 = blocks[blocksOffset++] & 0xFF;
-        final int byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 15) << 27) | (byte109 << 19) | (byte110 << 11) | (byte111 << 3) | (byte112 >>> 5);
-        final int byte113 = blocks[blocksOffset++] & 0xFF;
-        final int byte114 = blocks[blocksOffset++] & 0xFF;
-        final int byte115 = blocks[blocksOffset++] & 0xFF;
-        final int byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 31) << 26) | (byte113 << 18) | (byte114 << 10) | (byte115 << 2) | (byte116 >>> 6);
-        final int byte117 = blocks[blocksOffset++] & 0xFF;
-        final int byte118 = blocks[blocksOffset++] & 0xFF;
-        final int byte119 = blocks[blocksOffset++] & 0xFF;
-        final int byte120 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 63) << 25) | (byte117 << 17) | (byte118 << 9) | (byte119 << 1) | (byte120 >>> 7);
-        final int byte121 = blocks[blocksOffset++] & 0xFF;
-        final int byte122 = blocks[blocksOffset++] & 0xFF;
-        final int byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte120 & 127) << 24) | (byte121 << 16) | (byte122 << 8) | byte123;
-        final int byte124 = blocks[blocksOffset++] & 0xFF;
-        final int byte125 = blocks[blocksOffset++] & 0xFF;
-        final int byte126 = blocks[blocksOffset++] & 0xFF;
-        final int byte127 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte124 << 23) | (byte125 << 15) | (byte126 << 7) | (byte127 >>> 1);
-        final int byte128 = blocks[blocksOffset++] & 0xFF;
-        final int byte129 = blocks[blocksOffset++] & 0xFF;
-        final int byte130 = blocks[blocksOffset++] & 0xFF;
-        final int byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte127 & 1) << 30) | (byte128 << 22) | (byte129 << 14) | (byte130 << 6) | (byte131 >>> 2);
-        final int byte132 = blocks[blocksOffset++] & 0xFF;
-        final int byte133 = blocks[blocksOffset++] & 0xFF;
-        final int byte134 = blocks[blocksOffset++] & 0xFF;
-        final int byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 3) << 29) | (byte132 << 21) | (byte133 << 13) | (byte134 << 5) | (byte135 >>> 3);
-        final int byte136 = blocks[blocksOffset++] & 0xFF;
-        final int byte137 = blocks[blocksOffset++] & 0xFF;
-        final int byte138 = blocks[blocksOffset++] & 0xFF;
-        final int byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte135 & 7) << 28) | (byte136 << 20) | (byte137 << 12) | (byte138 << 4) | (byte139 >>> 4);
-        final int byte140 = blocks[blocksOffset++] & 0xFF;
-        final int byte141 = blocks[blocksOffset++] & 0xFF;
-        final int byte142 = blocks[blocksOffset++] & 0xFF;
-        final int byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte139 & 15) << 27) | (byte140 << 19) | (byte141 << 11) | (byte142 << 3) | (byte143 >>> 5);
-        final int byte144 = blocks[blocksOffset++] & 0xFF;
-        final int byte145 = blocks[blocksOffset++] & 0xFF;
-        final int byte146 = blocks[blocksOffset++] & 0xFF;
-        final int byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 31) << 26) | (byte144 << 18) | (byte145 << 10) | (byte146 << 2) | (byte147 >>> 6);
-        final int byte148 = blocks[blocksOffset++] & 0xFF;
-        final int byte149 = blocks[blocksOffset++] & 0xFF;
-        final int byte150 = blocks[blocksOffset++] & 0xFF;
-        final int byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte147 & 63) << 25) | (byte148 << 17) | (byte149 << 9) | (byte150 << 1) | (byte151 >>> 7);
-        final int byte152 = blocks[blocksOffset++] & 0xFF;
-        final int byte153 = blocks[blocksOffset++] & 0xFF;
-        final int byte154 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 127) << 24) | (byte152 << 16) | (byte153 << 8) | byte154;
-        final int byte155 = blocks[blocksOffset++] & 0xFF;
-        final int byte156 = blocks[blocksOffset++] & 0xFF;
-        final int byte157 = blocks[blocksOffset++] & 0xFF;
-        final int byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte155 << 23) | (byte156 << 15) | (byte157 << 7) | (byte158 >>> 1);
-        final int byte159 = blocks[blocksOffset++] & 0xFF;
-        final int byte160 = blocks[blocksOffset++] & 0xFF;
-        final int byte161 = blocks[blocksOffset++] & 0xFF;
-        final int byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 1) << 30) | (byte159 << 22) | (byte160 << 14) | (byte161 << 6) | (byte162 >>> 2);
-        final int byte163 = blocks[blocksOffset++] & 0xFF;
-        final int byte164 = blocks[blocksOffset++] & 0xFF;
-        final int byte165 = blocks[blocksOffset++] & 0xFF;
-        final int byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 3) << 29) | (byte163 << 21) | (byte164 << 13) | (byte165 << 5) | (byte166 >>> 3);
-        final int byte167 = blocks[blocksOffset++] & 0xFF;
-        final int byte168 = blocks[blocksOffset++] & 0xFF;
-        final int byte169 = blocks[blocksOffset++] & 0xFF;
-        final int byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 7) << 28) | (byte167 << 20) | (byte168 << 12) | (byte169 << 4) | (byte170 >>> 4);
-        final int byte171 = blocks[blocksOffset++] & 0xFF;
-        final int byte172 = blocks[blocksOffset++] & 0xFF;
-        final int byte173 = blocks[blocksOffset++] & 0xFF;
-        final int byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 15) << 27) | (byte171 << 19) | (byte172 << 11) | (byte173 << 3) | (byte174 >>> 5);
-        final int byte175 = blocks[blocksOffset++] & 0xFF;
-        final int byte176 = blocks[blocksOffset++] & 0xFF;
-        final int byte177 = blocks[blocksOffset++] & 0xFF;
-        final int byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte174 & 31) << 26) | (byte175 << 18) | (byte176 << 10) | (byte177 << 2) | (byte178 >>> 6);
-        final int byte179 = blocks[blocksOffset++] & 0xFF;
-        final int byte180 = blocks[blocksOffset++] & 0xFF;
-        final int byte181 = blocks[blocksOffset++] & 0xFF;
-        final int byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 63) << 25) | (byte179 << 17) | (byte180 << 9) | (byte181 << 1) | (byte182 >>> 7);
-        final int byte183 = blocks[blocksOffset++] & 0xFF;
-        final int byte184 = blocks[blocksOffset++] & 0xFF;
-        final int byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 127) << 24) | (byte183 << 16) | (byte184 << 8) | byte185;
-        final int byte186 = blocks[blocksOffset++] & 0xFF;
-        final int byte187 = blocks[blocksOffset++] & 0xFF;
-        final int byte188 = blocks[blocksOffset++] & 0xFF;
-        final int byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte186 << 23) | (byte187 << 15) | (byte188 << 7) | (byte189 >>> 1);
-        final int byte190 = blocks[blocksOffset++] & 0xFF;
-        final int byte191 = blocks[blocksOffset++] & 0xFF;
-        final int byte192 = blocks[blocksOffset++] & 0xFF;
-        final int byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 1) << 30) | (byte190 << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final int byte194 = blocks[blocksOffset++] & 0xFF;
-        final int byte195 = blocks[blocksOffset++] & 0xFF;
-        final int byte196 = blocks[blocksOffset++] & 0xFF;
-        final int byte197 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 29) | (byte194 << 21) | (byte195 << 13) | (byte196 << 5) | (byte197 >>> 3);
-        final int byte198 = blocks[blocksOffset++] & 0xFF;
-        final int byte199 = blocks[blocksOffset++] & 0xFF;
-        final int byte200 = blocks[blocksOffset++] & 0xFF;
-        final int byte201 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte197 & 7) << 28) | (byte198 << 20) | (byte199 << 12) | (byte200 << 4) | (byte201 >>> 4);
-        final int byte202 = blocks[blocksOffset++] & 0xFF;
-        final int byte203 = blocks[blocksOffset++] & 0xFF;
-        final int byte204 = blocks[blocksOffset++] & 0xFF;
-        final int byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte201 & 15) << 27) | (byte202 << 19) | (byte203 << 11) | (byte204 << 3) | (byte205 >>> 5);
-        final int byte206 = blocks[blocksOffset++] & 0xFF;
-        final int byte207 = blocks[blocksOffset++] & 0xFF;
-        final int byte208 = blocks[blocksOffset++] & 0xFF;
-        final int byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 31) << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final int byte210 = blocks[blocksOffset++] & 0xFF;
-        final int byte211 = blocks[blocksOffset++] & 0xFF;
-        final int byte212 = blocks[blocksOffset++] & 0xFF;
-        final int byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 25) | (byte210 << 17) | (byte211 << 9) | (byte212 << 1) | (byte213 >>> 7);
-        final int byte214 = blocks[blocksOffset++] & 0xFF;
-        final int byte215 = blocks[blocksOffset++] & 0xFF;
-        final int byte216 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 127) << 24) | (byte214 << 16) | (byte215 << 8) | byte216;
-        final int byte217 = blocks[blocksOffset++] & 0xFF;
-        final int byte218 = blocks[blocksOffset++] & 0xFF;
-        final int byte219 = blocks[blocksOffset++] & 0xFF;
-        final int byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte217 << 23) | (byte218 << 15) | (byte219 << 7) | (byte220 >>> 1);
-        final int byte221 = blocks[blocksOffset++] & 0xFF;
-        final int byte222 = blocks[blocksOffset++] & 0xFF;
-        final int byte223 = blocks[blocksOffset++] & 0xFF;
-        final int byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 1) << 30) | (byte221 << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final int byte225 = blocks[blocksOffset++] & 0xFF;
-        final int byte226 = blocks[blocksOffset++] & 0xFF;
-        final int byte227 = blocks[blocksOffset++] & 0xFF;
-        final int byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 29) | (byte225 << 21) | (byte226 << 13) | (byte227 << 5) | (byte228 >>> 3);
-        final int byte229 = blocks[blocksOffset++] & 0xFF;
-        final int byte230 = blocks[blocksOffset++] & 0xFF;
-        final int byte231 = blocks[blocksOffset++] & 0xFF;
-        final int byte232 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 7) << 28) | (byte229 << 20) | (byte230 << 12) | (byte231 << 4) | (byte232 >>> 4);
-        final int byte233 = blocks[blocksOffset++] & 0xFF;
-        final int byte234 = blocks[blocksOffset++] & 0xFF;
-        final int byte235 = blocks[blocksOffset++] & 0xFF;
-        final int byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte232 & 15) << 27) | (byte233 << 19) | (byte234 << 11) | (byte235 << 3) | (byte236 >>> 5);
-        final int byte237 = blocks[blocksOffset++] & 0xFF;
-        final int byte238 = blocks[blocksOffset++] & 0xFF;
-        final int byte239 = blocks[blocksOffset++] & 0xFF;
-        final int byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 31) << 26) | (byte237 << 18) | (byte238 << 10) | (byte239 << 2) | (byte240 >>> 6);
-        final int byte241 = blocks[blocksOffset++] & 0xFF;
-        final int byte242 = blocks[blocksOffset++] & 0xFF;
-        final int byte243 = blocks[blocksOffset++] & 0xFF;
-        final int byte244 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 63) << 25) | (byte241 << 17) | (byte242 << 9) | (byte243 << 1) | (byte244 >>> 7);
-        final int byte245 = blocks[blocksOffset++] & 0xFF;
-        final int byte246 = blocks[blocksOffset++] & 0xFF;
-        final int byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte244 & 127) << 24) | (byte245 << 16) | (byte246 << 8) | byte247;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 33;
-        values[valuesOffset++] = (block0 >>> 2) & 2147483647L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 3L) << 29) | (block1 >>> 35);
-        values[valuesOffset++] = (block1 >>> 4) & 2147483647L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 15L) << 27) | (block2 >>> 37);
-        values[valuesOffset++] = (block2 >>> 6) & 2147483647L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 63L) << 25) | (block3 >>> 39);
-        values[valuesOffset++] = (block3 >>> 8) & 2147483647L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 255L) << 23) | (block4 >>> 41);
-        values[valuesOffset++] = (block4 >>> 10) & 2147483647L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1023L) << 21) | (block5 >>> 43);
-        values[valuesOffset++] = (block5 >>> 12) & 2147483647L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 4095L) << 19) | (block6 >>> 45);
-        values[valuesOffset++] = (block6 >>> 14) & 2147483647L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 16383L) << 17) | (block7 >>> 47);
-        values[valuesOffset++] = (block7 >>> 16) & 2147483647L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 65535L) << 15) | (block8 >>> 49);
-        values[valuesOffset++] = (block8 >>> 18) & 2147483647L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 262143L) << 13) | (block9 >>> 51);
-        values[valuesOffset++] = (block9 >>> 20) & 2147483647L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1048575L) << 11) | (block10 >>> 53);
-        values[valuesOffset++] = (block10 >>> 22) & 2147483647L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 4194303L) << 9) | (block11 >>> 55);
-        values[valuesOffset++] = (block11 >>> 24) & 2147483647L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 16777215L) << 7) | (block12 >>> 57);
-        values[valuesOffset++] = (block12 >>> 26) & 2147483647L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 67108863L) << 5) | (block13 >>> 59);
-        values[valuesOffset++] = (block13 >>> 28) & 2147483647L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 268435455L) << 3) | (block14 >>> 61);
-        values[valuesOffset++] = (block14 >>> 30) & 2147483647L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1073741823L) << 1) | (block15 >>> 63);
-        values[valuesOffset++] = (block15 >>> 32) & 2147483647L;
-        values[valuesOffset++] = (block15 >>> 1) & 2147483647L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 1L) << 30) | (block16 >>> 34);
-        values[valuesOffset++] = (block16 >>> 3) & 2147483647L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 7L) << 28) | (block17 >>> 36);
-        values[valuesOffset++] = (block17 >>> 5) & 2147483647L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 31L) << 26) | (block18 >>> 38);
-        values[valuesOffset++] = (block18 >>> 7) & 2147483647L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 127L) << 24) | (block19 >>> 40);
-        values[valuesOffset++] = (block19 >>> 9) & 2147483647L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 511L) << 22) | (block20 >>> 42);
-        values[valuesOffset++] = (block20 >>> 11) & 2147483647L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 2047L) << 20) | (block21 >>> 44);
-        values[valuesOffset++] = (block21 >>> 13) & 2147483647L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 8191L) << 18) | (block22 >>> 46);
-        values[valuesOffset++] = (block22 >>> 15) & 2147483647L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 32767L) << 16) | (block23 >>> 48);
-        values[valuesOffset++] = (block23 >>> 17) & 2147483647L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 131071L) << 14) | (block24 >>> 50);
-        values[valuesOffset++] = (block24 >>> 19) & 2147483647L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 524287L) << 12) | (block25 >>> 52);
-        values[valuesOffset++] = (block25 >>> 21) & 2147483647L;
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 2097151L) << 10) | (block26 >>> 54);
-        values[valuesOffset++] = (block26 >>> 23) & 2147483647L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 8388607L) << 8) | (block27 >>> 56);
-        values[valuesOffset++] = (block27 >>> 25) & 2147483647L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 33554431L) << 6) | (block28 >>> 58);
-        values[valuesOffset++] = (block28 >>> 27) & 2147483647L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 134217727L) << 4) | (block29 >>> 60);
-        values[valuesOffset++] = (block29 >>> 29) & 2147483647L;
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 536870911L) << 2) | (block30 >>> 62);
-        values[valuesOffset++] = (block30 >>> 31) & 2147483647L;
-        values[valuesOffset++] = block30 & 2147483647L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 23) | (byte1 << 15) | (byte2 << 7) | (byte3 >>> 1);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 1) << 30) | (byte4 << 22) | (byte5 << 14) | (byte6 << 6) | (byte7 >>> 2);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 3) << 29) | (byte8 << 21) | (byte9 << 13) | (byte10 << 5) | (byte11 >>> 3);
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 7) << 28) | (byte12 << 20) | (byte13 << 12) | (byte14 << 4) | (byte15 >>> 4);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 15) << 27) | (byte16 << 19) | (byte17 << 11) | (byte18 << 3) | (byte19 >>> 5);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 31) << 26) | (byte20 << 18) | (byte21 << 10) | (byte22 << 2) | (byte23 >>> 6);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 63) << 25) | (byte24 << 17) | (byte25 << 9) | (byte26 << 1) | (byte27 >>> 7);
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte27 & 127) << 24) | (byte28 << 16) | (byte29 << 8) | byte30;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte31 << 23) | (byte32 << 15) | (byte33 << 7) | (byte34 >>> 1);
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 1) << 30) | (byte35 << 22) | (byte36 << 14) | (byte37 << 6) | (byte38 >>> 2);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 3) << 29) | (byte39 << 21) | (byte40 << 13) | (byte41 << 5) | (byte42 >>> 3);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 7) << 28) | (byte43 << 20) | (byte44 << 12) | (byte45 << 4) | (byte46 >>> 4);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 15) << 27) | (byte47 << 19) | (byte48 << 11) | (byte49 << 3) | (byte50 >>> 5);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 31) << 26) | (byte51 << 18) | (byte52 << 10) | (byte53 << 2) | (byte54 >>> 6);
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte54 & 63) << 25) | (byte55 << 17) | (byte56 << 9) | (byte57 << 1) | (byte58 >>> 7);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 127) << 24) | (byte59 << 16) | (byte60 << 8) | byte61;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte62 << 23) | (byte63 << 15) | (byte64 << 7) | (byte65 >>> 1);
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 1) << 30) | (byte66 << 22) | (byte67 << 14) | (byte68 << 6) | (byte69 >>> 2);
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte69 & 3) << 29) | (byte70 << 21) | (byte71 << 13) | (byte72 << 5) | (byte73 >>> 3);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 7) << 28) | (byte74 << 20) | (byte75 << 12) | (byte76 << 4) | (byte77 >>> 4);
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte77 & 15) << 27) | (byte78 << 19) | (byte79 << 11) | (byte80 << 3) | (byte81 >>> 5);
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 31) << 26) | (byte82 << 18) | (byte83 << 10) | (byte84 << 2) | (byte85 >>> 6);
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 63) << 25) | (byte86 << 17) | (byte87 << 9) | (byte88 << 1) | (byte89 >>> 7);
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 127) << 24) | (byte90 << 16) | (byte91 << 8) | byte92;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte93 << 23) | (byte94 << 15) | (byte95 << 7) | (byte96 >>> 1);
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 1) << 30) | (byte97 << 22) | (byte98 << 14) | (byte99 << 6) | (byte100 >>> 2);
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 3) << 29) | (byte101 << 21) | (byte102 << 13) | (byte103 << 5) | (byte104 >>> 3);
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 7) << 28) | (byte105 << 20) | (byte106 << 12) | (byte107 << 4) | (byte108 >>> 4);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 15) << 27) | (byte109 << 19) | (byte110 << 11) | (byte111 << 3) | (byte112 >>> 5);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 31) << 26) | (byte113 << 18) | (byte114 << 10) | (byte115 << 2) | (byte116 >>> 6);
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 63) << 25) | (byte117 << 17) | (byte118 << 9) | (byte119 << 1) | (byte120 >>> 7);
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte120 & 127) << 24) | (byte121 << 16) | (byte122 << 8) | byte123;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte124 << 23) | (byte125 << 15) | (byte126 << 7) | (byte127 >>> 1);
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte127 & 1) << 30) | (byte128 << 22) | (byte129 << 14) | (byte130 << 6) | (byte131 >>> 2);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 3) << 29) | (byte132 << 21) | (byte133 << 13) | (byte134 << 5) | (byte135 >>> 3);
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte135 & 7) << 28) | (byte136 << 20) | (byte137 << 12) | (byte138 << 4) | (byte139 >>> 4);
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte139 & 15) << 27) | (byte140 << 19) | (byte141 << 11) | (byte142 << 3) | (byte143 >>> 5);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 31) << 26) | (byte144 << 18) | (byte145 << 10) | (byte146 << 2) | (byte147 >>> 6);
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte147 & 63) << 25) | (byte148 << 17) | (byte149 << 9) | (byte150 << 1) | (byte151 >>> 7);
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 127) << 24) | (byte152 << 16) | (byte153 << 8) | byte154;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte155 << 23) | (byte156 << 15) | (byte157 << 7) | (byte158 >>> 1);
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 1) << 30) | (byte159 << 22) | (byte160 << 14) | (byte161 << 6) | (byte162 >>> 2);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 3) << 29) | (byte163 << 21) | (byte164 << 13) | (byte165 << 5) | (byte166 >>> 3);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 7) << 28) | (byte167 << 20) | (byte168 << 12) | (byte169 << 4) | (byte170 >>> 4);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 15) << 27) | (byte171 << 19) | (byte172 << 11) | (byte173 << 3) | (byte174 >>> 5);
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte174 & 31) << 26) | (byte175 << 18) | (byte176 << 10) | (byte177 << 2) | (byte178 >>> 6);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 63) << 25) | (byte179 << 17) | (byte180 << 9) | (byte181 << 1) | (byte182 >>> 7);
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 127) << 24) | (byte183 << 16) | (byte184 << 8) | byte185;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte186 << 23) | (byte187 << 15) | (byte188 << 7) | (byte189 >>> 1);
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 1) << 30) | (byte190 << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 29) | (byte194 << 21) | (byte195 << 13) | (byte196 << 5) | (byte197 >>> 3);
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte197 & 7) << 28) | (byte198 << 20) | (byte199 << 12) | (byte200 << 4) | (byte201 >>> 4);
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte201 & 15) << 27) | (byte202 << 19) | (byte203 << 11) | (byte204 << 3) | (byte205 >>> 5);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 31) << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 25) | (byte210 << 17) | (byte211 << 9) | (byte212 << 1) | (byte213 >>> 7);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 127) << 24) | (byte214 << 16) | (byte215 << 8) | byte216;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte217 << 23) | (byte218 << 15) | (byte219 << 7) | (byte220 >>> 1);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 1) << 30) | (byte221 << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 29) | (byte225 << 21) | (byte226 << 13) | (byte227 << 5) | (byte228 >>> 3);
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 7) << 28) | (byte229 << 20) | (byte230 << 12) | (byte231 << 4) | (byte232 >>> 4);
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte232 & 15) << 27) | (byte233 << 19) | (byte234 << 11) | (byte235 << 3) | (byte236 >>> 5);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 31) << 26) | (byte237 << 18) | (byte238 << 10) | (byte239 << 2) | (byte240 >>> 6);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 63) << 25) | (byte241 << 17) | (byte242 << 9) | (byte243 << 1) | (byte244 >>> 7);
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte244 & 127) << 24) | (byte245 << 16) | (byte246 << 8) | byte247;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 31) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 31) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock8.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock8.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock8.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock8 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock8 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 8;
+    public BulkOperationPackedSingleBlock8() {
+      super(8);
     }
 
     @Override
@@ -115,22 +110,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 56);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 56);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked23.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked23.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked23.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked23 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 23;
-    }
+final class BulkOperationPacked23 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked23() {
+      super(23);
+      assert blockCount() == 23;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -735,66 +732,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 23) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 23) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked51.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked51.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked51.java	(copie de travail)
@@ -1,767 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked51 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 51;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 13;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 8191L) << 38) | (block1 >>> 26);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 67108863L) << 25) | (block2 >>> 39);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 549755813887L) << 12) | (block3 >>> 52);
-        values[valuesOffset++] = (block3 >>> 1) & 2251799813685247L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 1L) << 50) | (block4 >>> 14);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 16383L) << 37) | (block5 >>> 27);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 134217727L) << 24) | (block6 >>> 40);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 1099511627775L) << 11) | (block7 >>> 53);
-        values[valuesOffset++] = (block7 >>> 2) & 2251799813685247L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 3L) << 49) | (block8 >>> 15);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 32767L) << 36) | (block9 >>> 28);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 268435455L) << 23) | (block10 >>> 41);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 2199023255551L) << 10) | (block11 >>> 54);
-        values[valuesOffset++] = (block11 >>> 3) & 2251799813685247L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 7L) << 48) | (block12 >>> 16);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 65535L) << 35) | (block13 >>> 29);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 536870911L) << 22) | (block14 >>> 42);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 4398046511103L) << 9) | (block15 >>> 55);
-        values[valuesOffset++] = (block15 >>> 4) & 2251799813685247L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 15L) << 47) | (block16 >>> 17);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 131071L) << 34) | (block17 >>> 30);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 1073741823L) << 21) | (block18 >>> 43);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 8796093022207L) << 8) | (block19 >>> 56);
-        values[valuesOffset++] = (block19 >>> 5) & 2251799813685247L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 31L) << 46) | (block20 >>> 18);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 262143L) << 33) | (block21 >>> 31);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 2147483647L) << 20) | (block22 >>> 44);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 17592186044415L) << 7) | (block23 >>> 57);
-        values[valuesOffset++] = (block23 >>> 6) & 2251799813685247L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 63L) << 45) | (block24 >>> 19);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 524287L) << 32) | (block25 >>> 32);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 4294967295L) << 19) | (block26 >>> 45);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 35184372088831L) << 6) | (block27 >>> 58);
-        values[valuesOffset++] = (block27 >>> 7) & 2251799813685247L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 127L) << 44) | (block28 >>> 20);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 1048575L) << 31) | (block29 >>> 33);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 8589934591L) << 18) | (block30 >>> 46);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 70368744177663L) << 5) | (block31 >>> 59);
-        values[valuesOffset++] = (block31 >>> 8) & 2251799813685247L;
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 255L) << 43) | (block32 >>> 21);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 2097151L) << 30) | (block33 >>> 34);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 17179869183L) << 17) | (block34 >>> 47);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 140737488355327L) << 4) | (block35 >>> 60);
-        values[valuesOffset++] = (block35 >>> 9) & 2251799813685247L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 511L) << 42) | (block36 >>> 22);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 4194303L) << 29) | (block37 >>> 35);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 34359738367L) << 16) | (block38 >>> 48);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 281474976710655L) << 3) | (block39 >>> 61);
-        values[valuesOffset++] = (block39 >>> 10) & 2251799813685247L;
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 1023L) << 41) | (block40 >>> 23);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 8388607L) << 28) | (block41 >>> 36);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 68719476735L) << 15) | (block42 >>> 49);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 562949953421311L) << 2) | (block43 >>> 62);
-        values[valuesOffset++] = (block43 >>> 11) & 2251799813685247L;
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 2047L) << 40) | (block44 >>> 24);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 16777215L) << 27) | (block45 >>> 37);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 137438953471L) << 14) | (block46 >>> 50);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 1125899906842623L) << 1) | (block47 >>> 63);
-        values[valuesOffset++] = (block47 >>> 12) & 2251799813685247L;
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 4095L) << 39) | (block48 >>> 25);
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 33554431L) << 26) | (block49 >>> 38);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 274877906943L) << 13) | (block50 >>> 51);
-        values[valuesOffset++] = block50 & 2251799813685247L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 43) | (byte1 << 35) | (byte2 << 27) | (byte3 << 19) | (byte4 << 11) | (byte5 << 3) | (byte6 >>> 5);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 31) << 46) | (byte7 << 38) | (byte8 << 30) | (byte9 << 22) | (byte10 << 14) | (byte11 << 6) | (byte12 >>> 2);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 3) << 49) | (byte13 << 41) | (byte14 << 33) | (byte15 << 25) | (byte16 << 17) | (byte17 << 9) | (byte18 << 1) | (byte19 >>> 7);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 127) << 44) | (byte20 << 36) | (byte21 << 28) | (byte22 << 20) | (byte23 << 12) | (byte24 << 4) | (byte25 >>> 4);
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte25 & 15) << 47) | (byte26 << 39) | (byte27 << 31) | (byte28 << 23) | (byte29 << 15) | (byte30 << 7) | (byte31 >>> 1);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 1) << 50) | (byte32 << 42) | (byte33 << 34) | (byte34 << 26) | (byte35 << 18) | (byte36 << 10) | (byte37 << 2) | (byte38 >>> 6);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 63) << 45) | (byte39 << 37) | (byte40 << 29) | (byte41 << 21) | (byte42 << 13) | (byte43 << 5) | (byte44 >>> 3);
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte44 & 7) << 48) | (byte45 << 40) | (byte46 << 32) | (byte47 << 24) | (byte48 << 16) | (byte49 << 8) | byte50;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte51 << 43) | (byte52 << 35) | (byte53 << 27) | (byte54 << 19) | (byte55 << 11) | (byte56 << 3) | (byte57 >>> 5);
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 31) << 46) | (byte58 << 38) | (byte59 << 30) | (byte60 << 22) | (byte61 << 14) | (byte62 << 6) | (byte63 >>> 2);
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 3) << 49) | (byte64 << 41) | (byte65 << 33) | (byte66 << 25) | (byte67 << 17) | (byte68 << 9) | (byte69 << 1) | (byte70 >>> 7);
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 127) << 44) | (byte71 << 36) | (byte72 << 28) | (byte73 << 20) | (byte74 << 12) | (byte75 << 4) | (byte76 >>> 4);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 15) << 47) | (byte77 << 39) | (byte78 << 31) | (byte79 << 23) | (byte80 << 15) | (byte81 << 7) | (byte82 >>> 1);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 1) << 50) | (byte83 << 42) | (byte84 << 34) | (byte85 << 26) | (byte86 << 18) | (byte87 << 10) | (byte88 << 2) | (byte89 >>> 6);
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 63) << 45) | (byte90 << 37) | (byte91 << 29) | (byte92 << 21) | (byte93 << 13) | (byte94 << 5) | (byte95 >>> 3);
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte95 & 7) << 48) | (byte96 << 40) | (byte97 << 32) | (byte98 << 24) | (byte99 << 16) | (byte100 << 8) | byte101;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte102 << 43) | (byte103 << 35) | (byte104 << 27) | (byte105 << 19) | (byte106 << 11) | (byte107 << 3) | (byte108 >>> 5);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 31) << 46) | (byte109 << 38) | (byte110 << 30) | (byte111 << 22) | (byte112 << 14) | (byte113 << 6) | (byte114 >>> 2);
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 3) << 49) | (byte115 << 41) | (byte116 << 33) | (byte117 << 25) | (byte118 << 17) | (byte119 << 9) | (byte120 << 1) | (byte121 >>> 7);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 127) << 44) | (byte122 << 36) | (byte123 << 28) | (byte124 << 20) | (byte125 << 12) | (byte126 << 4) | (byte127 >>> 4);
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte127 & 15) << 47) | (byte128 << 39) | (byte129 << 31) | (byte130 << 23) | (byte131 << 15) | (byte132 << 7) | (byte133 >>> 1);
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte133 & 1) << 50) | (byte134 << 42) | (byte135 << 34) | (byte136 << 26) | (byte137 << 18) | (byte138 << 10) | (byte139 << 2) | (byte140 >>> 6);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 63) << 45) | (byte141 << 37) | (byte142 << 29) | (byte143 << 21) | (byte144 << 13) | (byte145 << 5) | (byte146 >>> 3);
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 7) << 48) | (byte147 << 40) | (byte148 << 32) | (byte149 << 24) | (byte150 << 16) | (byte151 << 8) | byte152;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte153 << 43) | (byte154 << 35) | (byte155 << 27) | (byte156 << 19) | (byte157 << 11) | (byte158 << 3) | (byte159 >>> 5);
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 31) << 46) | (byte160 << 38) | (byte161 << 30) | (byte162 << 22) | (byte163 << 14) | (byte164 << 6) | (byte165 >>> 2);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 3) << 49) | (byte166 << 41) | (byte167 << 33) | (byte168 << 25) | (byte169 << 17) | (byte170 << 9) | (byte171 << 1) | (byte172 >>> 7);
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte172 & 127) << 44) | (byte173 << 36) | (byte174 << 28) | (byte175 << 20) | (byte176 << 12) | (byte177 << 4) | (byte178 >>> 4);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 15) << 47) | (byte179 << 39) | (byte180 << 31) | (byte181 << 23) | (byte182 << 15) | (byte183 << 7) | (byte184 >>> 1);
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 1) << 50) | (byte185 << 42) | (byte186 << 34) | (byte187 << 26) | (byte188 << 18) | (byte189 << 10) | (byte190 << 2) | (byte191 >>> 6);
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte191 & 63) << 45) | (byte192 << 37) | (byte193 << 29) | (byte194 << 21) | (byte195 << 13) | (byte196 << 5) | (byte197 >>> 3);
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte197 & 7) << 48) | (byte198 << 40) | (byte199 << 32) | (byte200 << 24) | (byte201 << 16) | (byte202 << 8) | byte203;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte204 << 43) | (byte205 << 35) | (byte206 << 27) | (byte207 << 19) | (byte208 << 11) | (byte209 << 3) | (byte210 >>> 5);
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 31) << 46) | (byte211 << 38) | (byte212 << 30) | (byte213 << 22) | (byte214 << 14) | (byte215 << 6) | (byte216 >>> 2);
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte216 & 3) << 49) | (byte217 << 41) | (byte218 << 33) | (byte219 << 25) | (byte220 << 17) | (byte221 << 9) | (byte222 << 1) | (byte223 >>> 7);
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte223 & 127) << 44) | (byte224 << 36) | (byte225 << 28) | (byte226 << 20) | (byte227 << 12) | (byte228 << 4) | (byte229 >>> 4);
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte229 & 15) << 47) | (byte230 << 39) | (byte231 << 31) | (byte232 << 23) | (byte233 << 15) | (byte234 << 7) | (byte235 >>> 1);
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte235 & 1) << 50) | (byte236 << 42) | (byte237 << 34) | (byte238 << 26) | (byte239 << 18) | (byte240 << 10) | (byte241 << 2) | (byte242 >>> 6);
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte242 & 63) << 45) | (byte243 << 37) | (byte244 << 29) | (byte245 << 21) | (byte246 << 13) | (byte247 << 5) | (byte248 >>> 3);
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte248 & 7) << 48) | (byte249 << 40) | (byte250 << 32) | (byte251 << 24) | (byte252 << 16) | (byte253 << 8) | byte254;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte255 << 43) | (byte256 << 35) | (byte257 << 27) | (byte258 << 19) | (byte259 << 11) | (byte260 << 3) | (byte261 >>> 5);
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte261 & 31) << 46) | (byte262 << 38) | (byte263 << 30) | (byte264 << 22) | (byte265 << 14) | (byte266 << 6) | (byte267 >>> 2);
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte267 & 3) << 49) | (byte268 << 41) | (byte269 << 33) | (byte270 << 25) | (byte271 << 17) | (byte272 << 9) | (byte273 << 1) | (byte274 >>> 7);
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte274 & 127) << 44) | (byte275 << 36) | (byte276 << 28) | (byte277 << 20) | (byte278 << 12) | (byte279 << 4) | (byte280 >>> 4);
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte280 & 15) << 47) | (byte281 << 39) | (byte282 << 31) | (byte283 << 23) | (byte284 << 15) | (byte285 << 7) | (byte286 >>> 1);
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte286 & 1) << 50) | (byte287 << 42) | (byte288 << 34) | (byte289 << 26) | (byte290 << 18) | (byte291 << 10) | (byte292 << 2) | (byte293 >>> 6);
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte293 & 63) << 45) | (byte294 << 37) | (byte295 << 29) | (byte296 << 21) | (byte297 << 13) | (byte298 << 5) | (byte299 >>> 3);
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte299 & 7) << 48) | (byte300 << 40) | (byte301 << 32) | (byte302 << 24) | (byte303 << 16) | (byte304 << 8) | byte305;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte306 << 43) | (byte307 << 35) | (byte308 << 27) | (byte309 << 19) | (byte310 << 11) | (byte311 << 3) | (byte312 >>> 5);
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte312 & 31) << 46) | (byte313 << 38) | (byte314 << 30) | (byte315 << 22) | (byte316 << 14) | (byte317 << 6) | (byte318 >>> 2);
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte318 & 3) << 49) | (byte319 << 41) | (byte320 << 33) | (byte321 << 25) | (byte322 << 17) | (byte323 << 9) | (byte324 << 1) | (byte325 >>> 7);
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte325 & 127) << 44) | (byte326 << 36) | (byte327 << 28) | (byte328 << 20) | (byte329 << 12) | (byte330 << 4) | (byte331 >>> 4);
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte331 & 15) << 47) | (byte332 << 39) | (byte333 << 31) | (byte334 << 23) | (byte335 << 15) | (byte336 << 7) | (byte337 >>> 1);
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte337 & 1) << 50) | (byte338 << 42) | (byte339 << 34) | (byte340 << 26) | (byte341 << 18) | (byte342 << 10) | (byte343 << 2) | (byte344 >>> 6);
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte344 & 63) << 45) | (byte345 << 37) | (byte346 << 29) | (byte347 << 21) | (byte348 << 13) | (byte349 << 5) | (byte350 >>> 3);
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte350 & 7) << 48) | (byte351 << 40) | (byte352 << 32) | (byte353 << 24) | (byte354 << 16) | (byte355 << 8) | byte356;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte357 << 43) | (byte358 << 35) | (byte359 << 27) | (byte360 << 19) | (byte361 << 11) | (byte362 << 3) | (byte363 >>> 5);
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte363 & 31) << 46) | (byte364 << 38) | (byte365 << 30) | (byte366 << 22) | (byte367 << 14) | (byte368 << 6) | (byte369 >>> 2);
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte369 & 3) << 49) | (byte370 << 41) | (byte371 << 33) | (byte372 << 25) | (byte373 << 17) | (byte374 << 9) | (byte375 << 1) | (byte376 >>> 7);
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte376 & 127) << 44) | (byte377 << 36) | (byte378 << 28) | (byte379 << 20) | (byte380 << 12) | (byte381 << 4) | (byte382 >>> 4);
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte382 & 15) << 47) | (byte383 << 39) | (byte384 << 31) | (byte385 << 23) | (byte386 << 15) | (byte387 << 7) | (byte388 >>> 1);
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte388 & 1) << 50) | (byte389 << 42) | (byte390 << 34) | (byte391 << 26) | (byte392 << 18) | (byte393 << 10) | (byte394 << 2) | (byte395 >>> 6);
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte395 & 63) << 45) | (byte396 << 37) | (byte397 << 29) | (byte398 << 21) | (byte399 << 13) | (byte400 << 5) | (byte401 >>> 3);
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte401 & 7) << 48) | (byte402 << 40) | (byte403 << 32) | (byte404 << 24) | (byte405 << 16) | (byte406 << 8) | byte407;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked15.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked15.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked15.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked15 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 15;
-    }
+final class BulkOperationPacked15 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked15() {
+      super(15);
+      assert blockCount() == 15;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -591,50 +588,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 15) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 15) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked43.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked43.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked43.java	(copie de travail)
@@ -1,679 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked43 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 43;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 21;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 2097151L) << 22) | (block1 >>> 42);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 4398046511103L) << 1) | (block2 >>> 63);
-        values[valuesOffset++] = (block2 >>> 20) & 8796093022207L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 1048575L) << 23) | (block3 >>> 41);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 2199023255551L) << 2) | (block4 >>> 62);
-        values[valuesOffset++] = (block4 >>> 19) & 8796093022207L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 524287L) << 24) | (block5 >>> 40);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1099511627775L) << 3) | (block6 >>> 61);
-        values[valuesOffset++] = (block6 >>> 18) & 8796093022207L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 262143L) << 25) | (block7 >>> 39);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 549755813887L) << 4) | (block8 >>> 60);
-        values[valuesOffset++] = (block8 >>> 17) & 8796093022207L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 131071L) << 26) | (block9 >>> 38);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 274877906943L) << 5) | (block10 >>> 59);
-        values[valuesOffset++] = (block10 >>> 16) & 8796093022207L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 65535L) << 27) | (block11 >>> 37);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 137438953471L) << 6) | (block12 >>> 58);
-        values[valuesOffset++] = (block12 >>> 15) & 8796093022207L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 32767L) << 28) | (block13 >>> 36);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 68719476735L) << 7) | (block14 >>> 57);
-        values[valuesOffset++] = (block14 >>> 14) & 8796093022207L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 16383L) << 29) | (block15 >>> 35);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 34359738367L) << 8) | (block16 >>> 56);
-        values[valuesOffset++] = (block16 >>> 13) & 8796093022207L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 8191L) << 30) | (block17 >>> 34);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 17179869183L) << 9) | (block18 >>> 55);
-        values[valuesOffset++] = (block18 >>> 12) & 8796093022207L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 4095L) << 31) | (block19 >>> 33);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 8589934591L) << 10) | (block20 >>> 54);
-        values[valuesOffset++] = (block20 >>> 11) & 8796093022207L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 2047L) << 32) | (block21 >>> 32);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 4294967295L) << 11) | (block22 >>> 53);
-        values[valuesOffset++] = (block22 >>> 10) & 8796093022207L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 1023L) << 33) | (block23 >>> 31);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 2147483647L) << 12) | (block24 >>> 52);
-        values[valuesOffset++] = (block24 >>> 9) & 8796093022207L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 511L) << 34) | (block25 >>> 30);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 1073741823L) << 13) | (block26 >>> 51);
-        values[valuesOffset++] = (block26 >>> 8) & 8796093022207L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 255L) << 35) | (block27 >>> 29);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 536870911L) << 14) | (block28 >>> 50);
-        values[valuesOffset++] = (block28 >>> 7) & 8796093022207L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 127L) << 36) | (block29 >>> 28);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 268435455L) << 15) | (block30 >>> 49);
-        values[valuesOffset++] = (block30 >>> 6) & 8796093022207L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 63L) << 37) | (block31 >>> 27);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 134217727L) << 16) | (block32 >>> 48);
-        values[valuesOffset++] = (block32 >>> 5) & 8796093022207L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 31L) << 38) | (block33 >>> 26);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 67108863L) << 17) | (block34 >>> 47);
-        values[valuesOffset++] = (block34 >>> 4) & 8796093022207L;
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 15L) << 39) | (block35 >>> 25);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 33554431L) << 18) | (block36 >>> 46);
-        values[valuesOffset++] = (block36 >>> 3) & 8796093022207L;
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 7L) << 40) | (block37 >>> 24);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 16777215L) << 19) | (block38 >>> 45);
-        values[valuesOffset++] = (block38 >>> 2) & 8796093022207L;
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 3L) << 41) | (block39 >>> 23);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 8388607L) << 20) | (block40 >>> 44);
-        values[valuesOffset++] = (block40 >>> 1) & 8796093022207L;
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 1L) << 42) | (block41 >>> 22);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 4194303L) << 21) | (block42 >>> 43);
-        values[valuesOffset++] = block42 & 8796093022207L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 35) | (byte1 << 27) | (byte2 << 19) | (byte3 << 11) | (byte4 << 3) | (byte5 >>> 5);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 31) << 38) | (byte6 << 30) | (byte7 << 22) | (byte8 << 14) | (byte9 << 6) | (byte10 >>> 2);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 3) << 41) | (byte11 << 33) | (byte12 << 25) | (byte13 << 17) | (byte14 << 9) | (byte15 << 1) | (byte16 >>> 7);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 127) << 36) | (byte17 << 28) | (byte18 << 20) | (byte19 << 12) | (byte20 << 4) | (byte21 >>> 4);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 15) << 39) | (byte22 << 31) | (byte23 << 23) | (byte24 << 15) | (byte25 << 7) | (byte26 >>> 1);
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 1) << 42) | (byte27 << 34) | (byte28 << 26) | (byte29 << 18) | (byte30 << 10) | (byte31 << 2) | (byte32 >>> 6);
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 63) << 37) | (byte33 << 29) | (byte34 << 21) | (byte35 << 13) | (byte36 << 5) | (byte37 >>> 3);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 7) << 40) | (byte38 << 32) | (byte39 << 24) | (byte40 << 16) | (byte41 << 8) | byte42;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte43 << 35) | (byte44 << 27) | (byte45 << 19) | (byte46 << 11) | (byte47 << 3) | (byte48 >>> 5);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 31) << 38) | (byte49 << 30) | (byte50 << 22) | (byte51 << 14) | (byte52 << 6) | (byte53 >>> 2);
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 3) << 41) | (byte54 << 33) | (byte55 << 25) | (byte56 << 17) | (byte57 << 9) | (byte58 << 1) | (byte59 >>> 7);
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte59 & 127) << 36) | (byte60 << 28) | (byte61 << 20) | (byte62 << 12) | (byte63 << 4) | (byte64 >>> 4);
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 15) << 39) | (byte65 << 31) | (byte66 << 23) | (byte67 << 15) | (byte68 << 7) | (byte69 >>> 1);
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte69 & 1) << 42) | (byte70 << 34) | (byte71 << 26) | (byte72 << 18) | (byte73 << 10) | (byte74 << 2) | (byte75 >>> 6);
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte75 & 63) << 37) | (byte76 << 29) | (byte77 << 21) | (byte78 << 13) | (byte79 << 5) | (byte80 >>> 3);
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte80 & 7) << 40) | (byte81 << 32) | (byte82 << 24) | (byte83 << 16) | (byte84 << 8) | byte85;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte86 << 35) | (byte87 << 27) | (byte88 << 19) | (byte89 << 11) | (byte90 << 3) | (byte91 >>> 5);
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 31) << 38) | (byte92 << 30) | (byte93 << 22) | (byte94 << 14) | (byte95 << 6) | (byte96 >>> 2);
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 3) << 41) | (byte97 << 33) | (byte98 << 25) | (byte99 << 17) | (byte100 << 9) | (byte101 << 1) | (byte102 >>> 7);
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte102 & 127) << 36) | (byte103 << 28) | (byte104 << 20) | (byte105 << 12) | (byte106 << 4) | (byte107 >>> 4);
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte107 & 15) << 39) | (byte108 << 31) | (byte109 << 23) | (byte110 << 15) | (byte111 << 7) | (byte112 >>> 1);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 1) << 42) | (byte113 << 34) | (byte114 << 26) | (byte115 << 18) | (byte116 << 10) | (byte117 << 2) | (byte118 >>> 6);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 63) << 37) | (byte119 << 29) | (byte120 << 21) | (byte121 << 13) | (byte122 << 5) | (byte123 >>> 3);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 7) << 40) | (byte124 << 32) | (byte125 << 24) | (byte126 << 16) | (byte127 << 8) | byte128;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte129 << 35) | (byte130 << 27) | (byte131 << 19) | (byte132 << 11) | (byte133 << 3) | (byte134 >>> 5);
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 31) << 38) | (byte135 << 30) | (byte136 << 22) | (byte137 << 14) | (byte138 << 6) | (byte139 >>> 2);
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte139 & 3) << 41) | (byte140 << 33) | (byte141 << 25) | (byte142 << 17) | (byte143 << 9) | (byte144 << 1) | (byte145 >>> 7);
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte145 & 127) << 36) | (byte146 << 28) | (byte147 << 20) | (byte148 << 12) | (byte149 << 4) | (byte150 >>> 4);
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte150 & 15) << 39) | (byte151 << 31) | (byte152 << 23) | (byte153 << 15) | (byte154 << 7) | (byte155 >>> 1);
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 1) << 42) | (byte156 << 34) | (byte157 << 26) | (byte158 << 18) | (byte159 << 10) | (byte160 << 2) | (byte161 >>> 6);
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte161 & 63) << 37) | (byte162 << 29) | (byte163 << 21) | (byte164 << 13) | (byte165 << 5) | (byte166 >>> 3);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 7) << 40) | (byte167 << 32) | (byte168 << 24) | (byte169 << 16) | (byte170 << 8) | byte171;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte172 << 35) | (byte173 << 27) | (byte174 << 19) | (byte175 << 11) | (byte176 << 3) | (byte177 >>> 5);
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte177 & 31) << 38) | (byte178 << 30) | (byte179 << 22) | (byte180 << 14) | (byte181 << 6) | (byte182 >>> 2);
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 3) << 41) | (byte183 << 33) | (byte184 << 25) | (byte185 << 17) | (byte186 << 9) | (byte187 << 1) | (byte188 >>> 7);
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte188 & 127) << 36) | (byte189 << 28) | (byte190 << 20) | (byte191 << 12) | (byte192 << 4) | (byte193 >>> 4);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 15) << 39) | (byte194 << 31) | (byte195 << 23) | (byte196 << 15) | (byte197 << 7) | (byte198 >>> 1);
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte198 & 1) << 42) | (byte199 << 34) | (byte200 << 26) | (byte201 << 18) | (byte202 << 10) | (byte203 << 2) | (byte204 >>> 6);
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte204 & 63) << 37) | (byte205 << 29) | (byte206 << 21) | (byte207 << 13) | (byte208 << 5) | (byte209 >>> 3);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 7) << 40) | (byte210 << 32) | (byte211 << 24) | (byte212 << 16) | (byte213 << 8) | byte214;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte215 << 35) | (byte216 << 27) | (byte217 << 19) | (byte218 << 11) | (byte219 << 3) | (byte220 >>> 5);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 31) << 38) | (byte221 << 30) | (byte222 << 22) | (byte223 << 14) | (byte224 << 6) | (byte225 >>> 2);
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte225 & 3) << 41) | (byte226 << 33) | (byte227 << 25) | (byte228 << 17) | (byte229 << 9) | (byte230 << 1) | (byte231 >>> 7);
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte231 & 127) << 36) | (byte232 << 28) | (byte233 << 20) | (byte234 << 12) | (byte235 << 4) | (byte236 >>> 4);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 15) << 39) | (byte237 << 31) | (byte238 << 23) | (byte239 << 15) | (byte240 << 7) | (byte241 >>> 1);
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte241 & 1) << 42) | (byte242 << 34) | (byte243 << 26) | (byte244 << 18) | (byte245 << 10) | (byte246 << 2) | (byte247 >>> 6);
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte247 & 63) << 37) | (byte248 << 29) | (byte249 << 21) | (byte250 << 13) | (byte251 << 5) | (byte252 >>> 3);
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte252 & 7) << 40) | (byte253 << 32) | (byte254 << 24) | (byte255 << 16) | (byte256 << 8) | byte257;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte258 << 35) | (byte259 << 27) | (byte260 << 19) | (byte261 << 11) | (byte262 << 3) | (byte263 >>> 5);
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte263 & 31) << 38) | (byte264 << 30) | (byte265 << 22) | (byte266 << 14) | (byte267 << 6) | (byte268 >>> 2);
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte268 & 3) << 41) | (byte269 << 33) | (byte270 << 25) | (byte271 << 17) | (byte272 << 9) | (byte273 << 1) | (byte274 >>> 7);
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte274 & 127) << 36) | (byte275 << 28) | (byte276 << 20) | (byte277 << 12) | (byte278 << 4) | (byte279 >>> 4);
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte279 & 15) << 39) | (byte280 << 31) | (byte281 << 23) | (byte282 << 15) | (byte283 << 7) | (byte284 >>> 1);
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte284 & 1) << 42) | (byte285 << 34) | (byte286 << 26) | (byte287 << 18) | (byte288 << 10) | (byte289 << 2) | (byte290 >>> 6);
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte290 & 63) << 37) | (byte291 << 29) | (byte292 << 21) | (byte293 << 13) | (byte294 << 5) | (byte295 >>> 3);
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte295 & 7) << 40) | (byte296 << 32) | (byte297 << 24) | (byte298 << 16) | (byte299 << 8) | byte300;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte301 << 35) | (byte302 << 27) | (byte303 << 19) | (byte304 << 11) | (byte305 << 3) | (byte306 >>> 5);
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte306 & 31) << 38) | (byte307 << 30) | (byte308 << 22) | (byte309 << 14) | (byte310 << 6) | (byte311 >>> 2);
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte311 & 3) << 41) | (byte312 << 33) | (byte313 << 25) | (byte314 << 17) | (byte315 << 9) | (byte316 << 1) | (byte317 >>> 7);
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte317 & 127) << 36) | (byte318 << 28) | (byte319 << 20) | (byte320 << 12) | (byte321 << 4) | (byte322 >>> 4);
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte322 & 15) << 39) | (byte323 << 31) | (byte324 << 23) | (byte325 << 15) | (byte326 << 7) | (byte327 >>> 1);
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte327 & 1) << 42) | (byte328 << 34) | (byte329 << 26) | (byte330 << 18) | (byte331 << 10) | (byte332 << 2) | (byte333 >>> 6);
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte333 & 63) << 37) | (byte334 << 29) | (byte335 << 21) | (byte336 << 13) | (byte337 << 5) | (byte338 >>> 3);
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte338 & 7) << 40) | (byte339 << 32) | (byte340 << 24) | (byte341 << 16) | (byte342 << 8) | byte343;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked35.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked35.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked35.java	(copie de travail)
@@ -1,591 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked35 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 35;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 29;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 536870911L) << 6) | (block1 >>> 58);
-        values[valuesOffset++] = (block1 >>> 23) & 34359738367L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 8388607L) << 12) | (block2 >>> 52);
-        values[valuesOffset++] = (block2 >>> 17) & 34359738367L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 131071L) << 18) | (block3 >>> 46);
-        values[valuesOffset++] = (block3 >>> 11) & 34359738367L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 2047L) << 24) | (block4 >>> 40);
-        values[valuesOffset++] = (block4 >>> 5) & 34359738367L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 31L) << 30) | (block5 >>> 34);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 17179869183L) << 1) | (block6 >>> 63);
-        values[valuesOffset++] = (block6 >>> 28) & 34359738367L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 268435455L) << 7) | (block7 >>> 57);
-        values[valuesOffset++] = (block7 >>> 22) & 34359738367L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4194303L) << 13) | (block8 >>> 51);
-        values[valuesOffset++] = (block8 >>> 16) & 34359738367L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 65535L) << 19) | (block9 >>> 45);
-        values[valuesOffset++] = (block9 >>> 10) & 34359738367L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1023L) << 25) | (block10 >>> 39);
-        values[valuesOffset++] = (block10 >>> 4) & 34359738367L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 15L) << 31) | (block11 >>> 33);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 8589934591L) << 2) | (block12 >>> 62);
-        values[valuesOffset++] = (block12 >>> 27) & 34359738367L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 134217727L) << 8) | (block13 >>> 56);
-        values[valuesOffset++] = (block13 >>> 21) & 34359738367L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 2097151L) << 14) | (block14 >>> 50);
-        values[valuesOffset++] = (block14 >>> 15) & 34359738367L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 32767L) << 20) | (block15 >>> 44);
-        values[valuesOffset++] = (block15 >>> 9) & 34359738367L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 511L) << 26) | (block16 >>> 38);
-        values[valuesOffset++] = (block16 >>> 3) & 34359738367L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 7L) << 32) | (block17 >>> 32);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 4294967295L) << 3) | (block18 >>> 61);
-        values[valuesOffset++] = (block18 >>> 26) & 34359738367L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 67108863L) << 9) | (block19 >>> 55);
-        values[valuesOffset++] = (block19 >>> 20) & 34359738367L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1048575L) << 15) | (block20 >>> 49);
-        values[valuesOffset++] = (block20 >>> 14) & 34359738367L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 16383L) << 21) | (block21 >>> 43);
-        values[valuesOffset++] = (block21 >>> 8) & 34359738367L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 255L) << 27) | (block22 >>> 37);
-        values[valuesOffset++] = (block22 >>> 2) & 34359738367L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 3L) << 33) | (block23 >>> 31);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 2147483647L) << 4) | (block24 >>> 60);
-        values[valuesOffset++] = (block24 >>> 25) & 34359738367L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 33554431L) << 10) | (block25 >>> 54);
-        values[valuesOffset++] = (block25 >>> 19) & 34359738367L;
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 524287L) << 16) | (block26 >>> 48);
-        values[valuesOffset++] = (block26 >>> 13) & 34359738367L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 8191L) << 22) | (block27 >>> 42);
-        values[valuesOffset++] = (block27 >>> 7) & 34359738367L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 127L) << 28) | (block28 >>> 36);
-        values[valuesOffset++] = (block28 >>> 1) & 34359738367L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 1L) << 34) | (block29 >>> 30);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1073741823L) << 5) | (block30 >>> 59);
-        values[valuesOffset++] = (block30 >>> 24) & 34359738367L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 16777215L) << 11) | (block31 >>> 53);
-        values[valuesOffset++] = (block31 >>> 18) & 34359738367L;
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 262143L) << 17) | (block32 >>> 47);
-        values[valuesOffset++] = (block32 >>> 12) & 34359738367L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 4095L) << 23) | (block33 >>> 41);
-        values[valuesOffset++] = (block33 >>> 6) & 34359738367L;
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 63L) << 29) | (block34 >>> 35);
-        values[valuesOffset++] = block34 & 34359738367L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 27) | (byte1 << 19) | (byte2 << 11) | (byte3 << 3) | (byte4 >>> 5);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 31) << 30) | (byte5 << 22) | (byte6 << 14) | (byte7 << 6) | (byte8 >>> 2);
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte8 & 3) << 33) | (byte9 << 25) | (byte10 << 17) | (byte11 << 9) | (byte12 << 1) | (byte13 >>> 7);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 127) << 28) | (byte14 << 20) | (byte15 << 12) | (byte16 << 4) | (byte17 >>> 4);
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte17 & 15) << 31) | (byte18 << 23) | (byte19 << 15) | (byte20 << 7) | (byte21 >>> 1);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 1) << 34) | (byte22 << 26) | (byte23 << 18) | (byte24 << 10) | (byte25 << 2) | (byte26 >>> 6);
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 63) << 29) | (byte27 << 21) | (byte28 << 13) | (byte29 << 5) | (byte30 >>> 3);
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 7) << 32) | (byte31 << 24) | (byte32 << 16) | (byte33 << 8) | byte34;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte35 << 27) | (byte36 << 19) | (byte37 << 11) | (byte38 << 3) | (byte39 >>> 5);
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 31) << 30) | (byte40 << 22) | (byte41 << 14) | (byte42 << 6) | (byte43 >>> 2);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 3) << 33) | (byte44 << 25) | (byte45 << 17) | (byte46 << 9) | (byte47 << 1) | (byte48 >>> 7);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 127) << 28) | (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 31) | (byte53 << 23) | (byte54 << 15) | (byte55 << 7) | (byte56 >>> 1);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 1) << 34) | (byte57 << 26) | (byte58 << 18) | (byte59 << 10) | (byte60 << 2) | (byte61 >>> 6);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 63) << 29) | (byte62 << 21) | (byte63 << 13) | (byte64 << 5) | (byte65 >>> 3);
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 7) << 32) | (byte66 << 24) | (byte67 << 16) | (byte68 << 8) | byte69;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte70 << 27) | (byte71 << 19) | (byte72 << 11) | (byte73 << 3) | (byte74 >>> 5);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 31) << 30) | (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 33) | (byte79 << 25) | (byte80 << 17) | (byte81 << 9) | (byte82 << 1) | (byte83 >>> 7);
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte83 & 127) << 28) | (byte84 << 20) | (byte85 << 12) | (byte86 << 4) | (byte87 >>> 4);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 15) << 31) | (byte88 << 23) | (byte89 << 15) | (byte90 << 7) | (byte91 >>> 1);
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 1) << 34) | (byte92 << 26) | (byte93 << 18) | (byte94 << 10) | (byte95 << 2) | (byte96 >>> 6);
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 63) << 29) | (byte97 << 21) | (byte98 << 13) | (byte99 << 5) | (byte100 >>> 3);
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 7) << 32) | (byte101 << 24) | (byte102 << 16) | (byte103 << 8) | byte104;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte105 << 27) | (byte106 << 19) | (byte107 << 11) | (byte108 << 3) | (byte109 >>> 5);
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte109 & 31) << 30) | (byte110 << 22) | (byte111 << 14) | (byte112 << 6) | (byte113 >>> 2);
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte113 & 3) << 33) | (byte114 << 25) | (byte115 << 17) | (byte116 << 9) | (byte117 << 1) | (byte118 >>> 7);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 127) << 28) | (byte119 << 20) | (byte120 << 12) | (byte121 << 4) | (byte122 >>> 4);
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte122 & 15) << 31) | (byte123 << 23) | (byte124 << 15) | (byte125 << 7) | (byte126 >>> 1);
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte126 & 1) << 34) | (byte127 << 26) | (byte128 << 18) | (byte129 << 10) | (byte130 << 2) | (byte131 >>> 6);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 63) << 29) | (byte132 << 21) | (byte133 << 13) | (byte134 << 5) | (byte135 >>> 3);
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte135 & 7) << 32) | (byte136 << 24) | (byte137 << 16) | (byte138 << 8) | byte139;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte140 << 27) | (byte141 << 19) | (byte142 << 11) | (byte143 << 3) | (byte144 >>> 5);
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte144 & 31) << 30) | (byte145 << 22) | (byte146 << 14) | (byte147 << 6) | (byte148 >>> 2);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 3) << 33) | (byte149 << 25) | (byte150 << 17) | (byte151 << 9) | (byte152 << 1) | (byte153 >>> 7);
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte153 & 127) << 28) | (byte154 << 20) | (byte155 << 12) | (byte156 << 4) | (byte157 >>> 4);
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte157 & 15) << 31) | (byte158 << 23) | (byte159 << 15) | (byte160 << 7) | (byte161 >>> 1);
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte161 & 1) << 34) | (byte162 << 26) | (byte163 << 18) | (byte164 << 10) | (byte165 << 2) | (byte166 >>> 6);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 63) << 29) | (byte167 << 21) | (byte168 << 13) | (byte169 << 5) | (byte170 >>> 3);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 7) << 32) | (byte171 << 24) | (byte172 << 16) | (byte173 << 8) | byte174;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte175 << 27) | (byte176 << 19) | (byte177 << 11) | (byte178 << 3) | (byte179 >>> 5);
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte179 & 31) << 30) | (byte180 << 22) | (byte181 << 14) | (byte182 << 6) | (byte183 >>> 2);
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte183 & 3) << 33) | (byte184 << 25) | (byte185 << 17) | (byte186 << 9) | (byte187 << 1) | (byte188 >>> 7);
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte188 & 127) << 28) | (byte189 << 20) | (byte190 << 12) | (byte191 << 4) | (byte192 >>> 4);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 15) << 31) | (byte193 << 23) | (byte194 << 15) | (byte195 << 7) | (byte196 >>> 1);
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte196 & 1) << 34) | (byte197 << 26) | (byte198 << 18) | (byte199 << 10) | (byte200 << 2) | (byte201 >>> 6);
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte201 & 63) << 29) | (byte202 << 21) | (byte203 << 13) | (byte204 << 5) | (byte205 >>> 3);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 7) << 32) | (byte206 << 24) | (byte207 << 16) | (byte208 << 8) | byte209;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte210 << 27) | (byte211 << 19) | (byte212 << 11) | (byte213 << 3) | (byte214 >>> 5);
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte214 & 31) << 30) | (byte215 << 22) | (byte216 << 14) | (byte217 << 6) | (byte218 >>> 2);
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte218 & 3) << 33) | (byte219 << 25) | (byte220 << 17) | (byte221 << 9) | (byte222 << 1) | (byte223 >>> 7);
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte223 & 127) << 28) | (byte224 << 20) | (byte225 << 12) | (byte226 << 4) | (byte227 >>> 4);
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte227 & 15) << 31) | (byte228 << 23) | (byte229 << 15) | (byte230 << 7) | (byte231 >>> 1);
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte231 & 1) << 34) | (byte232 << 26) | (byte233 << 18) | (byte234 << 10) | (byte235 << 2) | (byte236 >>> 6);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 63) << 29) | (byte237 << 21) | (byte238 << 13) | (byte239 << 5) | (byte240 >>> 3);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 7) << 32) | (byte241 << 24) | (byte242 << 16) | (byte243 << 8) | byte244;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte245 << 27) | (byte246 << 19) | (byte247 << 11) | (byte248 << 3) | (byte249 >>> 5);
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte249 & 31) << 30) | (byte250 << 22) | (byte251 << 14) | (byte252 << 6) | (byte253 >>> 2);
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte253 & 3) << 33) | (byte254 << 25) | (byte255 << 17) | (byte256 << 9) | (byte257 << 1) | (byte258 >>> 7);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 127) << 28) | (byte259 << 20) | (byte260 << 12) | (byte261 << 4) | (byte262 >>> 4);
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte262 & 15) << 31) | (byte263 << 23) | (byte264 << 15) | (byte265 << 7) | (byte266 >>> 1);
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte266 & 1) << 34) | (byte267 << 26) | (byte268 << 18) | (byte269 << 10) | (byte270 << 2) | (byte271 >>> 6);
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte271 & 63) << 29) | (byte272 << 21) | (byte273 << 13) | (byte274 << 5) | (byte275 >>> 3);
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte275 & 7) << 32) | (byte276 << 24) | (byte277 << 16) | (byte278 << 8) | byte279;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked63.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked63.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked63.java	(copie de travail)
@@ -1,899 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked63 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 63;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 1;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 1L) << 62) | (block1 >>> 2);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 3L) << 61) | (block2 >>> 3);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 7L) << 60) | (block3 >>> 4);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 15L) << 59) | (block4 >>> 5);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 31L) << 58) | (block5 >>> 6);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 63L) << 57) | (block6 >>> 7);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 127L) << 56) | (block7 >>> 8);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 255L) << 55) | (block8 >>> 9);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 511L) << 54) | (block9 >>> 10);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1023L) << 53) | (block10 >>> 11);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 2047L) << 52) | (block11 >>> 12);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 4095L) << 51) | (block12 >>> 13);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 8191L) << 50) | (block13 >>> 14);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 16383L) << 49) | (block14 >>> 15);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 32767L) << 48) | (block15 >>> 16);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 65535L) << 47) | (block16 >>> 17);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 131071L) << 46) | (block17 >>> 18);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 262143L) << 45) | (block18 >>> 19);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 524287L) << 44) | (block19 >>> 20);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1048575L) << 43) | (block20 >>> 21);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 2097151L) << 42) | (block21 >>> 22);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 4194303L) << 41) | (block22 >>> 23);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 8388607L) << 40) | (block23 >>> 24);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 16777215L) << 39) | (block24 >>> 25);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 33554431L) << 38) | (block25 >>> 26);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 67108863L) << 37) | (block26 >>> 27);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 134217727L) << 36) | (block27 >>> 28);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 268435455L) << 35) | (block28 >>> 29);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 536870911L) << 34) | (block29 >>> 30);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1073741823L) << 33) | (block30 >>> 31);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 2147483647L) << 32) | (block31 >>> 32);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 4294967295L) << 31) | (block32 >>> 33);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 8589934591L) << 30) | (block33 >>> 34);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 17179869183L) << 29) | (block34 >>> 35);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 34359738367L) << 28) | (block35 >>> 36);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 68719476735L) << 27) | (block36 >>> 37);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 137438953471L) << 26) | (block37 >>> 38);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 274877906943L) << 25) | (block38 >>> 39);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 549755813887L) << 24) | (block39 >>> 40);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 1099511627775L) << 23) | (block40 >>> 41);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 2199023255551L) << 22) | (block41 >>> 42);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 4398046511103L) << 21) | (block42 >>> 43);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 8796093022207L) << 20) | (block43 >>> 44);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 17592186044415L) << 19) | (block44 >>> 45);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 35184372088831L) << 18) | (block45 >>> 46);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 70368744177663L) << 17) | (block46 >>> 47);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 140737488355327L) << 16) | (block47 >>> 48);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 281474976710655L) << 15) | (block48 >>> 49);
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 562949953421311L) << 14) | (block49 >>> 50);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 1125899906842623L) << 13) | (block50 >>> 51);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 2251799813685247L) << 12) | (block51 >>> 52);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 4503599627370495L) << 11) | (block52 >>> 53);
-        final long block53 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block52 & 9007199254740991L) << 10) | (block53 >>> 54);
-        final long block54 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block53 & 18014398509481983L) << 9) | (block54 >>> 55);
-        final long block55 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block54 & 36028797018963967L) << 8) | (block55 >>> 56);
-        final long block56 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block55 & 72057594037927935L) << 7) | (block56 >>> 57);
-        final long block57 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block56 & 144115188075855871L) << 6) | (block57 >>> 58);
-        final long block58 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block57 & 288230376151711743L) << 5) | (block58 >>> 59);
-        final long block59 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block58 & 576460752303423487L) << 4) | (block59 >>> 60);
-        final long block60 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block59 & 1152921504606846975L) << 3) | (block60 >>> 61);
-        final long block61 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block60 & 2305843009213693951L) << 2) | (block61 >>> 62);
-        final long block62 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block61 & 4611686018427387903L) << 1) | (block62 >>> 63);
-        values[valuesOffset++] = block62 & 9223372036854775807L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 55) | (byte1 << 47) | (byte2 << 39) | (byte3 << 31) | (byte4 << 23) | (byte5 << 15) | (byte6 << 7) | (byte7 >>> 1);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 1) << 62) | (byte8 << 54) | (byte9 << 46) | (byte10 << 38) | (byte11 << 30) | (byte12 << 22) | (byte13 << 14) | (byte14 << 6) | (byte15 >>> 2);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 3) << 61) | (byte16 << 53) | (byte17 << 45) | (byte18 << 37) | (byte19 << 29) | (byte20 << 21) | (byte21 << 13) | (byte22 << 5) | (byte23 >>> 3);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 7) << 60) | (byte24 << 52) | (byte25 << 44) | (byte26 << 36) | (byte27 << 28) | (byte28 << 20) | (byte29 << 12) | (byte30 << 4) | (byte31 >>> 4);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 15) << 59) | (byte32 << 51) | (byte33 << 43) | (byte34 << 35) | (byte35 << 27) | (byte36 << 19) | (byte37 << 11) | (byte38 << 3) | (byte39 >>> 5);
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 31) << 58) | (byte40 << 50) | (byte41 << 42) | (byte42 << 34) | (byte43 << 26) | (byte44 << 18) | (byte45 << 10) | (byte46 << 2) | (byte47 >>> 6);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 63) << 57) | (byte48 << 49) | (byte49 << 41) | (byte50 << 33) | (byte51 << 25) | (byte52 << 17) | (byte53 << 9) | (byte54 << 1) | (byte55 >>> 7);
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 127) << 56) | (byte56 << 48) | (byte57 << 40) | (byte58 << 32) | (byte59 << 24) | (byte60 << 16) | (byte61 << 8) | byte62;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte63 << 55) | (byte64 << 47) | (byte65 << 39) | (byte66 << 31) | (byte67 << 23) | (byte68 << 15) | (byte69 << 7) | (byte70 >>> 1);
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 1) << 62) | (byte71 << 54) | (byte72 << 46) | (byte73 << 38) | (byte74 << 30) | (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 61) | (byte79 << 53) | (byte80 << 45) | (byte81 << 37) | (byte82 << 29) | (byte83 << 21) | (byte84 << 13) | (byte85 << 5) | (byte86 >>> 3);
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 7) << 60) | (byte87 << 52) | (byte88 << 44) | (byte89 << 36) | (byte90 << 28) | (byte91 << 20) | (byte92 << 12) | (byte93 << 4) | (byte94 >>> 4);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 15) << 59) | (byte95 << 51) | (byte96 << 43) | (byte97 << 35) | (byte98 << 27) | (byte99 << 19) | (byte100 << 11) | (byte101 << 3) | (byte102 >>> 5);
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte102 & 31) << 58) | (byte103 << 50) | (byte104 << 42) | (byte105 << 34) | (byte106 << 26) | (byte107 << 18) | (byte108 << 10) | (byte109 << 2) | (byte110 >>> 6);
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte110 & 63) << 57) | (byte111 << 49) | (byte112 << 41) | (byte113 << 33) | (byte114 << 25) | (byte115 << 17) | (byte116 << 9) | (byte117 << 1) | (byte118 >>> 7);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 127) << 56) | (byte119 << 48) | (byte120 << 40) | (byte121 << 32) | (byte122 << 24) | (byte123 << 16) | (byte124 << 8) | byte125;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte126 << 55) | (byte127 << 47) | (byte128 << 39) | (byte129 << 31) | (byte130 << 23) | (byte131 << 15) | (byte132 << 7) | (byte133 >>> 1);
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte133 & 1) << 62) | (byte134 << 54) | (byte135 << 46) | (byte136 << 38) | (byte137 << 30) | (byte138 << 22) | (byte139 << 14) | (byte140 << 6) | (byte141 >>> 2);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 3) << 61) | (byte142 << 53) | (byte143 << 45) | (byte144 << 37) | (byte145 << 29) | (byte146 << 21) | (byte147 << 13) | (byte148 << 5) | (byte149 >>> 3);
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte149 & 7) << 60) | (byte150 << 52) | (byte151 << 44) | (byte152 << 36) | (byte153 << 28) | (byte154 << 20) | (byte155 << 12) | (byte156 << 4) | (byte157 >>> 4);
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte157 & 15) << 59) | (byte158 << 51) | (byte159 << 43) | (byte160 << 35) | (byte161 << 27) | (byte162 << 19) | (byte163 << 11) | (byte164 << 3) | (byte165 >>> 5);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 31) << 58) | (byte166 << 50) | (byte167 << 42) | (byte168 << 34) | (byte169 << 26) | (byte170 << 18) | (byte171 << 10) | (byte172 << 2) | (byte173 >>> 6);
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte173 & 63) << 57) | (byte174 << 49) | (byte175 << 41) | (byte176 << 33) | (byte177 << 25) | (byte178 << 17) | (byte179 << 9) | (byte180 << 1) | (byte181 >>> 7);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 127) << 56) | (byte182 << 48) | (byte183 << 40) | (byte184 << 32) | (byte185 << 24) | (byte186 << 16) | (byte187 << 8) | byte188;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte189 << 55) | (byte190 << 47) | (byte191 << 39) | (byte192 << 31) | (byte193 << 23) | (byte194 << 15) | (byte195 << 7) | (byte196 >>> 1);
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte196 & 1) << 62) | (byte197 << 54) | (byte198 << 46) | (byte199 << 38) | (byte200 << 30) | (byte201 << 22) | (byte202 << 14) | (byte203 << 6) | (byte204 >>> 2);
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte204 & 3) << 61) | (byte205 << 53) | (byte206 << 45) | (byte207 << 37) | (byte208 << 29) | (byte209 << 21) | (byte210 << 13) | (byte211 << 5) | (byte212 >>> 3);
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte212 & 7) << 60) | (byte213 << 52) | (byte214 << 44) | (byte215 << 36) | (byte216 << 28) | (byte217 << 20) | (byte218 << 12) | (byte219 << 4) | (byte220 >>> 4);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 15) << 59) | (byte221 << 51) | (byte222 << 43) | (byte223 << 35) | (byte224 << 27) | (byte225 << 19) | (byte226 << 11) | (byte227 << 3) | (byte228 >>> 5);
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 31) << 58) | (byte229 << 50) | (byte230 << 42) | (byte231 << 34) | (byte232 << 26) | (byte233 << 18) | (byte234 << 10) | (byte235 << 2) | (byte236 >>> 6);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 63) << 57) | (byte237 << 49) | (byte238 << 41) | (byte239 << 33) | (byte240 << 25) | (byte241 << 17) | (byte242 << 9) | (byte243 << 1) | (byte244 >>> 7);
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte244 & 127) << 56) | (byte245 << 48) | (byte246 << 40) | (byte247 << 32) | (byte248 << 24) | (byte249 << 16) | (byte250 << 8) | byte251;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte252 << 55) | (byte253 << 47) | (byte254 << 39) | (byte255 << 31) | (byte256 << 23) | (byte257 << 15) | (byte258 << 7) | (byte259 >>> 1);
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte259 & 1) << 62) | (byte260 << 54) | (byte261 << 46) | (byte262 << 38) | (byte263 << 30) | (byte264 << 22) | (byte265 << 14) | (byte266 << 6) | (byte267 >>> 2);
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte267 & 3) << 61) | (byte268 << 53) | (byte269 << 45) | (byte270 << 37) | (byte271 << 29) | (byte272 << 21) | (byte273 << 13) | (byte274 << 5) | (byte275 >>> 3);
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte275 & 7) << 60) | (byte276 << 52) | (byte277 << 44) | (byte278 << 36) | (byte279 << 28) | (byte280 << 20) | (byte281 << 12) | (byte282 << 4) | (byte283 >>> 4);
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte283 & 15) << 59) | (byte284 << 51) | (byte285 << 43) | (byte286 << 35) | (byte287 << 27) | (byte288 << 19) | (byte289 << 11) | (byte290 << 3) | (byte291 >>> 5);
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte291 & 31) << 58) | (byte292 << 50) | (byte293 << 42) | (byte294 << 34) | (byte295 << 26) | (byte296 << 18) | (byte297 << 10) | (byte298 << 2) | (byte299 >>> 6);
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte299 & 63) << 57) | (byte300 << 49) | (byte301 << 41) | (byte302 << 33) | (byte303 << 25) | (byte304 << 17) | (byte305 << 9) | (byte306 << 1) | (byte307 >>> 7);
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte307 & 127) << 56) | (byte308 << 48) | (byte309 << 40) | (byte310 << 32) | (byte311 << 24) | (byte312 << 16) | (byte313 << 8) | byte314;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte315 << 55) | (byte316 << 47) | (byte317 << 39) | (byte318 << 31) | (byte319 << 23) | (byte320 << 15) | (byte321 << 7) | (byte322 >>> 1);
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte322 & 1) << 62) | (byte323 << 54) | (byte324 << 46) | (byte325 << 38) | (byte326 << 30) | (byte327 << 22) | (byte328 << 14) | (byte329 << 6) | (byte330 >>> 2);
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte330 & 3) << 61) | (byte331 << 53) | (byte332 << 45) | (byte333 << 37) | (byte334 << 29) | (byte335 << 21) | (byte336 << 13) | (byte337 << 5) | (byte338 >>> 3);
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte338 & 7) << 60) | (byte339 << 52) | (byte340 << 44) | (byte341 << 36) | (byte342 << 28) | (byte343 << 20) | (byte344 << 12) | (byte345 << 4) | (byte346 >>> 4);
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte346 & 15) << 59) | (byte347 << 51) | (byte348 << 43) | (byte349 << 35) | (byte350 << 27) | (byte351 << 19) | (byte352 << 11) | (byte353 << 3) | (byte354 >>> 5);
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte354 & 31) << 58) | (byte355 << 50) | (byte356 << 42) | (byte357 << 34) | (byte358 << 26) | (byte359 << 18) | (byte360 << 10) | (byte361 << 2) | (byte362 >>> 6);
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte362 & 63) << 57) | (byte363 << 49) | (byte364 << 41) | (byte365 << 33) | (byte366 << 25) | (byte367 << 17) | (byte368 << 9) | (byte369 << 1) | (byte370 >>> 7);
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte370 & 127) << 56) | (byte371 << 48) | (byte372 << 40) | (byte373 << 32) | (byte374 << 24) | (byte375 << 16) | (byte376 << 8) | byte377;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte378 << 55) | (byte379 << 47) | (byte380 << 39) | (byte381 << 31) | (byte382 << 23) | (byte383 << 15) | (byte384 << 7) | (byte385 >>> 1);
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte385 & 1) << 62) | (byte386 << 54) | (byte387 << 46) | (byte388 << 38) | (byte389 << 30) | (byte390 << 22) | (byte391 << 14) | (byte392 << 6) | (byte393 >>> 2);
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte393 & 3) << 61) | (byte394 << 53) | (byte395 << 45) | (byte396 << 37) | (byte397 << 29) | (byte398 << 21) | (byte399 << 13) | (byte400 << 5) | (byte401 >>> 3);
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte401 & 7) << 60) | (byte402 << 52) | (byte403 << 44) | (byte404 << 36) | (byte405 << 28) | (byte406 << 20) | (byte407 << 12) | (byte408 << 4) | (byte409 >>> 4);
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte409 & 15) << 59) | (byte410 << 51) | (byte411 << 43) | (byte412 << 35) | (byte413 << 27) | (byte414 << 19) | (byte415 << 11) | (byte416 << 3) | (byte417 >>> 5);
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        final long byte424 = blocks[blocksOffset++] & 0xFF;
-        final long byte425 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte417 & 31) << 58) | (byte418 << 50) | (byte419 << 42) | (byte420 << 34) | (byte421 << 26) | (byte422 << 18) | (byte423 << 10) | (byte424 << 2) | (byte425 >>> 6);
-        final long byte426 = blocks[blocksOffset++] & 0xFF;
-        final long byte427 = blocks[blocksOffset++] & 0xFF;
-        final long byte428 = blocks[blocksOffset++] & 0xFF;
-        final long byte429 = blocks[blocksOffset++] & 0xFF;
-        final long byte430 = blocks[blocksOffset++] & 0xFF;
-        final long byte431 = blocks[blocksOffset++] & 0xFF;
-        final long byte432 = blocks[blocksOffset++] & 0xFF;
-        final long byte433 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte425 & 63) << 57) | (byte426 << 49) | (byte427 << 41) | (byte428 << 33) | (byte429 << 25) | (byte430 << 17) | (byte431 << 9) | (byte432 << 1) | (byte433 >>> 7);
-        final long byte434 = blocks[blocksOffset++] & 0xFF;
-        final long byte435 = blocks[blocksOffset++] & 0xFF;
-        final long byte436 = blocks[blocksOffset++] & 0xFF;
-        final long byte437 = blocks[blocksOffset++] & 0xFF;
-        final long byte438 = blocks[blocksOffset++] & 0xFF;
-        final long byte439 = blocks[blocksOffset++] & 0xFF;
-        final long byte440 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte433 & 127) << 56) | (byte434 << 48) | (byte435 << 40) | (byte436 << 32) | (byte437 << 24) | (byte438 << 16) | (byte439 << 8) | byte440;
-        final long byte441 = blocks[blocksOffset++] & 0xFF;
-        final long byte442 = blocks[blocksOffset++] & 0xFF;
-        final long byte443 = blocks[blocksOffset++] & 0xFF;
-        final long byte444 = blocks[blocksOffset++] & 0xFF;
-        final long byte445 = blocks[blocksOffset++] & 0xFF;
-        final long byte446 = blocks[blocksOffset++] & 0xFF;
-        final long byte447 = blocks[blocksOffset++] & 0xFF;
-        final long byte448 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte441 << 55) | (byte442 << 47) | (byte443 << 39) | (byte444 << 31) | (byte445 << 23) | (byte446 << 15) | (byte447 << 7) | (byte448 >>> 1);
-        final long byte449 = blocks[blocksOffset++] & 0xFF;
-        final long byte450 = blocks[blocksOffset++] & 0xFF;
-        final long byte451 = blocks[blocksOffset++] & 0xFF;
-        final long byte452 = blocks[blocksOffset++] & 0xFF;
-        final long byte453 = blocks[blocksOffset++] & 0xFF;
-        final long byte454 = blocks[blocksOffset++] & 0xFF;
-        final long byte455 = blocks[blocksOffset++] & 0xFF;
-        final long byte456 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte448 & 1) << 62) | (byte449 << 54) | (byte450 << 46) | (byte451 << 38) | (byte452 << 30) | (byte453 << 22) | (byte454 << 14) | (byte455 << 6) | (byte456 >>> 2);
-        final long byte457 = blocks[blocksOffset++] & 0xFF;
-        final long byte458 = blocks[blocksOffset++] & 0xFF;
-        final long byte459 = blocks[blocksOffset++] & 0xFF;
-        final long byte460 = blocks[blocksOffset++] & 0xFF;
-        final long byte461 = blocks[blocksOffset++] & 0xFF;
-        final long byte462 = blocks[blocksOffset++] & 0xFF;
-        final long byte463 = blocks[blocksOffset++] & 0xFF;
-        final long byte464 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte456 & 3) << 61) | (byte457 << 53) | (byte458 << 45) | (byte459 << 37) | (byte460 << 29) | (byte461 << 21) | (byte462 << 13) | (byte463 << 5) | (byte464 >>> 3);
-        final long byte465 = blocks[blocksOffset++] & 0xFF;
-        final long byte466 = blocks[blocksOffset++] & 0xFF;
-        final long byte467 = blocks[blocksOffset++] & 0xFF;
-        final long byte468 = blocks[blocksOffset++] & 0xFF;
-        final long byte469 = blocks[blocksOffset++] & 0xFF;
-        final long byte470 = blocks[blocksOffset++] & 0xFF;
-        final long byte471 = blocks[blocksOffset++] & 0xFF;
-        final long byte472 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte464 & 7) << 60) | (byte465 << 52) | (byte466 << 44) | (byte467 << 36) | (byte468 << 28) | (byte469 << 20) | (byte470 << 12) | (byte471 << 4) | (byte472 >>> 4);
-        final long byte473 = blocks[blocksOffset++] & 0xFF;
-        final long byte474 = blocks[blocksOffset++] & 0xFF;
-        final long byte475 = blocks[blocksOffset++] & 0xFF;
-        final long byte476 = blocks[blocksOffset++] & 0xFF;
-        final long byte477 = blocks[blocksOffset++] & 0xFF;
-        final long byte478 = blocks[blocksOffset++] & 0xFF;
-        final long byte479 = blocks[blocksOffset++] & 0xFF;
-        final long byte480 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte472 & 15) << 59) | (byte473 << 51) | (byte474 << 43) | (byte475 << 35) | (byte476 << 27) | (byte477 << 19) | (byte478 << 11) | (byte479 << 3) | (byte480 >>> 5);
-        final long byte481 = blocks[blocksOffset++] & 0xFF;
-        final long byte482 = blocks[blocksOffset++] & 0xFF;
-        final long byte483 = blocks[blocksOffset++] & 0xFF;
-        final long byte484 = blocks[blocksOffset++] & 0xFF;
-        final long byte485 = blocks[blocksOffset++] & 0xFF;
-        final long byte486 = blocks[blocksOffset++] & 0xFF;
-        final long byte487 = blocks[blocksOffset++] & 0xFF;
-        final long byte488 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte480 & 31) << 58) | (byte481 << 50) | (byte482 << 42) | (byte483 << 34) | (byte484 << 26) | (byte485 << 18) | (byte486 << 10) | (byte487 << 2) | (byte488 >>> 6);
-        final long byte489 = blocks[blocksOffset++] & 0xFF;
-        final long byte490 = blocks[blocksOffset++] & 0xFF;
-        final long byte491 = blocks[blocksOffset++] & 0xFF;
-        final long byte492 = blocks[blocksOffset++] & 0xFF;
-        final long byte493 = blocks[blocksOffset++] & 0xFF;
-        final long byte494 = blocks[blocksOffset++] & 0xFF;
-        final long byte495 = blocks[blocksOffset++] & 0xFF;
-        final long byte496 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte488 & 63) << 57) | (byte489 << 49) | (byte490 << 41) | (byte491 << 33) | (byte492 << 25) | (byte493 << 17) | (byte494 << 9) | (byte495 << 1) | (byte496 >>> 7);
-        final long byte497 = blocks[blocksOffset++] & 0xFF;
-        final long byte498 = blocks[blocksOffset++] & 0xFF;
-        final long byte499 = blocks[blocksOffset++] & 0xFF;
-        final long byte500 = blocks[blocksOffset++] & 0xFF;
-        final long byte501 = blocks[blocksOffset++] & 0xFF;
-        final long byte502 = blocks[blocksOffset++] & 0xFF;
-        final long byte503 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte496 & 127) << 56) | (byte497 << 48) | (byte498 << 40) | (byte499 << 32) | (byte500 << 24) | (byte501 << 16) | (byte502 << 8) | byte503;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 62);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 61);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 60);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 59);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 58);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 57);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 55);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 53);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 62);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 61);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 60);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 59);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 58);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 57);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 55);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 53);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked27.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked27.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked27.java	(copie de travail)
@@ -1,880 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked27 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 27;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 37);
-        values[valuesOffset++] = (int) ((block0 >>> 10) & 134217727L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 1023L) << 17) | (block1 >>> 47));
-        values[valuesOffset++] = (int) ((block1 >>> 20) & 134217727L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 1048575L) << 7) | (block2 >>> 57));
-        values[valuesOffset++] = (int) ((block2 >>> 30) & 134217727L);
-        values[valuesOffset++] = (int) ((block2 >>> 3) & 134217727L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 7L) << 24) | (block3 >>> 40));
-        values[valuesOffset++] = (int) ((block3 >>> 13) & 134217727L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 8191L) << 14) | (block4 >>> 50));
-        values[valuesOffset++] = (int) ((block4 >>> 23) & 134217727L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 8388607L) << 4) | (block5 >>> 60));
-        values[valuesOffset++] = (int) ((block5 >>> 33) & 134217727L);
-        values[valuesOffset++] = (int) ((block5 >>> 6) & 134217727L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 63L) << 21) | (block6 >>> 43));
-        values[valuesOffset++] = (int) ((block6 >>> 16) & 134217727L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 65535L) << 11) | (block7 >>> 53));
-        values[valuesOffset++] = (int) ((block7 >>> 26) & 134217727L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 67108863L) << 1) | (block8 >>> 63));
-        values[valuesOffset++] = (int) ((block8 >>> 36) & 134217727L);
-        values[valuesOffset++] = (int) ((block8 >>> 9) & 134217727L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 511L) << 18) | (block9 >>> 46));
-        values[valuesOffset++] = (int) ((block9 >>> 19) & 134217727L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 524287L) << 8) | (block10 >>> 56));
-        values[valuesOffset++] = (int) ((block10 >>> 29) & 134217727L);
-        values[valuesOffset++] = (int) ((block10 >>> 2) & 134217727L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 3L) << 25) | (block11 >>> 39));
-        values[valuesOffset++] = (int) ((block11 >>> 12) & 134217727L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 4095L) << 15) | (block12 >>> 49));
-        values[valuesOffset++] = (int) ((block12 >>> 22) & 134217727L);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block12 & 4194303L) << 5) | (block13 >>> 59));
-        values[valuesOffset++] = (int) ((block13 >>> 32) & 134217727L);
-        values[valuesOffset++] = (int) ((block13 >>> 5) & 134217727L);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block13 & 31L) << 22) | (block14 >>> 42));
-        values[valuesOffset++] = (int) ((block14 >>> 15) & 134217727L);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block14 & 32767L) << 12) | (block15 >>> 52));
-        values[valuesOffset++] = (int) ((block15 >>> 25) & 134217727L);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block15 & 33554431L) << 2) | (block16 >>> 62));
-        values[valuesOffset++] = (int) ((block16 >>> 35) & 134217727L);
-        values[valuesOffset++] = (int) ((block16 >>> 8) & 134217727L);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block16 & 255L) << 19) | (block17 >>> 45));
-        values[valuesOffset++] = (int) ((block17 >>> 18) & 134217727L);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block17 & 262143L) << 9) | (block18 >>> 55));
-        values[valuesOffset++] = (int) ((block18 >>> 28) & 134217727L);
-        values[valuesOffset++] = (int) ((block18 >>> 1) & 134217727L);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block18 & 1L) << 26) | (block19 >>> 38));
-        values[valuesOffset++] = (int) ((block19 >>> 11) & 134217727L);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block19 & 2047L) << 16) | (block20 >>> 48));
-        values[valuesOffset++] = (int) ((block20 >>> 21) & 134217727L);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block20 & 2097151L) << 6) | (block21 >>> 58));
-        values[valuesOffset++] = (int) ((block21 >>> 31) & 134217727L);
-        values[valuesOffset++] = (int) ((block21 >>> 4) & 134217727L);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block21 & 15L) << 23) | (block22 >>> 41));
-        values[valuesOffset++] = (int) ((block22 >>> 14) & 134217727L);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block22 & 16383L) << 13) | (block23 >>> 51));
-        values[valuesOffset++] = (int) ((block23 >>> 24) & 134217727L);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block23 & 16777215L) << 3) | (block24 >>> 61));
-        values[valuesOffset++] = (int) ((block24 >>> 34) & 134217727L);
-        values[valuesOffset++] = (int) ((block24 >>> 7) & 134217727L);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block24 & 127L) << 20) | (block25 >>> 44));
-        values[valuesOffset++] = (int) ((block25 >>> 17) & 134217727L);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block25 & 131071L) << 10) | (block26 >>> 54));
-        values[valuesOffset++] = (int) ((block26 >>> 27) & 134217727L);
-        values[valuesOffset++] = (int) (block26 & 134217727L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 19) | (byte1 << 11) | (byte2 << 3) | (byte3 >>> 5);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 31) << 22) | (byte4 << 14) | (byte5 << 6) | (byte6 >>> 2);
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 3) << 25) | (byte7 << 17) | (byte8 << 9) | (byte9 << 1) | (byte10 >>> 7);
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 127) << 20) | (byte11 << 12) | (byte12 << 4) | (byte13 >>> 4);
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 15) << 23) | (byte14 << 15) | (byte15 << 7) | (byte16 >>> 1);
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 1) << 26) | (byte17 << 18) | (byte18 << 10) | (byte19 << 2) | (byte20 >>> 6);
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 63) << 21) | (byte21 << 13) | (byte22 << 5) | (byte23 >>> 3);
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 7) << 24) | (byte24 << 16) | (byte25 << 8) | byte26;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte27 << 19) | (byte28 << 11) | (byte29 << 3) | (byte30 >>> 5);
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 31) << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 25) | (byte34 << 17) | (byte35 << 9) | (byte36 << 1) | (byte37 >>> 7);
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 127) << 20) | (byte38 << 12) | (byte39 << 4) | (byte40 >>> 4);
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 15) << 23) | (byte41 << 15) | (byte42 << 7) | (byte43 >>> 1);
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 1) << 26) | (byte44 << 18) | (byte45 << 10) | (byte46 << 2) | (byte47 >>> 6);
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 63) << 21) | (byte48 << 13) | (byte49 << 5) | (byte50 >>> 3);
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 7) << 24) | (byte51 << 16) | (byte52 << 8) | byte53;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte54 << 19) | (byte55 << 11) | (byte56 << 3) | (byte57 >>> 5);
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 31) << 22) | (byte58 << 14) | (byte59 << 6) | (byte60 >>> 2);
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte60 & 3) << 25) | (byte61 << 17) | (byte62 << 9) | (byte63 << 1) | (byte64 >>> 7);
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 127) << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 23) | (byte68 << 15) | (byte69 << 7) | (byte70 >>> 1);
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 1) << 26) | (byte71 << 18) | (byte72 << 10) | (byte73 << 2) | (byte74 >>> 6);
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 63) << 21) | (byte75 << 13) | (byte76 << 5) | (byte77 >>> 3);
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte77 & 7) << 24) | (byte78 << 16) | (byte79 << 8) | byte80;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte81 << 19) | (byte82 << 11) | (byte83 << 3) | (byte84 >>> 5);
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 31) << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 25) | (byte88 << 17) | (byte89 << 9) | (byte90 << 1) | (byte91 >>> 7);
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 127) << 20) | (byte92 << 12) | (byte93 << 4) | (byte94 >>> 4);
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 15) << 23) | (byte95 << 15) | (byte96 << 7) | (byte97 >>> 1);
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 1) << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        final int byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 21) | (byte102 << 13) | (byte103 << 5) | (byte104 >>> 3);
-        final int byte105 = blocks[blocksOffset++] & 0xFF;
-        final int byte106 = blocks[blocksOffset++] & 0xFF;
-        final int byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 7) << 24) | (byte105 << 16) | (byte106 << 8) | byte107;
-        final int byte108 = blocks[blocksOffset++] & 0xFF;
-        final int byte109 = blocks[blocksOffset++] & 0xFF;
-        final int byte110 = blocks[blocksOffset++] & 0xFF;
-        final int byte111 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte108 << 19) | (byte109 << 11) | (byte110 << 3) | (byte111 >>> 5);
-        final int byte112 = blocks[blocksOffset++] & 0xFF;
-        final int byte113 = blocks[blocksOffset++] & 0xFF;
-        final int byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte111 & 31) << 22) | (byte112 << 14) | (byte113 << 6) | (byte114 >>> 2);
-        final int byte115 = blocks[blocksOffset++] & 0xFF;
-        final int byte116 = blocks[blocksOffset++] & 0xFF;
-        final int byte117 = blocks[blocksOffset++] & 0xFF;
-        final int byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 3) << 25) | (byte115 << 17) | (byte116 << 9) | (byte117 << 1) | (byte118 >>> 7);
-        final int byte119 = blocks[blocksOffset++] & 0xFF;
-        final int byte120 = blocks[blocksOffset++] & 0xFF;
-        final int byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 127) << 20) | (byte119 << 12) | (byte120 << 4) | (byte121 >>> 4);
-        final int byte122 = blocks[blocksOffset++] & 0xFF;
-        final int byte123 = blocks[blocksOffset++] & 0xFF;
-        final int byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 15) << 23) | (byte122 << 15) | (byte123 << 7) | (byte124 >>> 1);
-        final int byte125 = blocks[blocksOffset++] & 0xFF;
-        final int byte126 = blocks[blocksOffset++] & 0xFF;
-        final int byte127 = blocks[blocksOffset++] & 0xFF;
-        final int byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte124 & 1) << 26) | (byte125 << 18) | (byte126 << 10) | (byte127 << 2) | (byte128 >>> 6);
-        final int byte129 = blocks[blocksOffset++] & 0xFF;
-        final int byte130 = blocks[blocksOffset++] & 0xFF;
-        final int byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 63) << 21) | (byte129 << 13) | (byte130 << 5) | (byte131 >>> 3);
-        final int byte132 = blocks[blocksOffset++] & 0xFF;
-        final int byte133 = blocks[blocksOffset++] & 0xFF;
-        final int byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 7) << 24) | (byte132 << 16) | (byte133 << 8) | byte134;
-        final int byte135 = blocks[blocksOffset++] & 0xFF;
-        final int byte136 = blocks[blocksOffset++] & 0xFF;
-        final int byte137 = blocks[blocksOffset++] & 0xFF;
-        final int byte138 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte135 << 19) | (byte136 << 11) | (byte137 << 3) | (byte138 >>> 5);
-        final int byte139 = blocks[blocksOffset++] & 0xFF;
-        final int byte140 = blocks[blocksOffset++] & 0xFF;
-        final int byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte138 & 31) << 22) | (byte139 << 14) | (byte140 << 6) | (byte141 >>> 2);
-        final int byte142 = blocks[blocksOffset++] & 0xFF;
-        final int byte143 = blocks[blocksOffset++] & 0xFF;
-        final int byte144 = blocks[blocksOffset++] & 0xFF;
-        final int byte145 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 3) << 25) | (byte142 << 17) | (byte143 << 9) | (byte144 << 1) | (byte145 >>> 7);
-        final int byte146 = blocks[blocksOffset++] & 0xFF;
-        final int byte147 = blocks[blocksOffset++] & 0xFF;
-        final int byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte145 & 127) << 20) | (byte146 << 12) | (byte147 << 4) | (byte148 >>> 4);
-        final int byte149 = blocks[blocksOffset++] & 0xFF;
-        final int byte150 = blocks[blocksOffset++] & 0xFF;
-        final int byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 15) << 23) | (byte149 << 15) | (byte150 << 7) | (byte151 >>> 1);
-        final int byte152 = blocks[blocksOffset++] & 0xFF;
-        final int byte153 = blocks[blocksOffset++] & 0xFF;
-        final int byte154 = blocks[blocksOffset++] & 0xFF;
-        final int byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 1) << 26) | (byte152 << 18) | (byte153 << 10) | (byte154 << 2) | (byte155 >>> 6);
-        final int byte156 = blocks[blocksOffset++] & 0xFF;
-        final int byte157 = blocks[blocksOffset++] & 0xFF;
-        final int byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 63) << 21) | (byte156 << 13) | (byte157 << 5) | (byte158 >>> 3);
-        final int byte159 = blocks[blocksOffset++] & 0xFF;
-        final int byte160 = blocks[blocksOffset++] & 0xFF;
-        final int byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 7) << 24) | (byte159 << 16) | (byte160 << 8) | byte161;
-        final int byte162 = blocks[blocksOffset++] & 0xFF;
-        final int byte163 = blocks[blocksOffset++] & 0xFF;
-        final int byte164 = blocks[blocksOffset++] & 0xFF;
-        final int byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte162 << 19) | (byte163 << 11) | (byte164 << 3) | (byte165 >>> 5);
-        final int byte166 = blocks[blocksOffset++] & 0xFF;
-        final int byte167 = blocks[blocksOffset++] & 0xFF;
-        final int byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 31) << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final int byte169 = blocks[blocksOffset++] & 0xFF;
-        final int byte170 = blocks[blocksOffset++] & 0xFF;
-        final int byte171 = blocks[blocksOffset++] & 0xFF;
-        final int byte172 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 25) | (byte169 << 17) | (byte170 << 9) | (byte171 << 1) | (byte172 >>> 7);
-        final int byte173 = blocks[blocksOffset++] & 0xFF;
-        final int byte174 = blocks[blocksOffset++] & 0xFF;
-        final int byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte172 & 127) << 20) | (byte173 << 12) | (byte174 << 4) | (byte175 >>> 4);
-        final int byte176 = blocks[blocksOffset++] & 0xFF;
-        final int byte177 = blocks[blocksOffset++] & 0xFF;
-        final int byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 15) << 23) | (byte176 << 15) | (byte177 << 7) | (byte178 >>> 1);
-        final int byte179 = blocks[blocksOffset++] & 0xFF;
-        final int byte180 = blocks[blocksOffset++] & 0xFF;
-        final int byte181 = blocks[blocksOffset++] & 0xFF;
-        final int byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 1) << 26) | (byte179 << 18) | (byte180 << 10) | (byte181 << 2) | (byte182 >>> 6);
-        final int byte183 = blocks[blocksOffset++] & 0xFF;
-        final int byte184 = blocks[blocksOffset++] & 0xFF;
-        final int byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 63) << 21) | (byte183 << 13) | (byte184 << 5) | (byte185 >>> 3);
-        final int byte186 = blocks[blocksOffset++] & 0xFF;
-        final int byte187 = blocks[blocksOffset++] & 0xFF;
-        final int byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 7) << 24) | (byte186 << 16) | (byte187 << 8) | byte188;
-        final int byte189 = blocks[blocksOffset++] & 0xFF;
-        final int byte190 = blocks[blocksOffset++] & 0xFF;
-        final int byte191 = blocks[blocksOffset++] & 0xFF;
-        final int byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte189 << 19) | (byte190 << 11) | (byte191 << 3) | (byte192 >>> 5);
-        final int byte193 = blocks[blocksOffset++] & 0xFF;
-        final int byte194 = blocks[blocksOffset++] & 0xFF;
-        final int byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 31) << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final int byte196 = blocks[blocksOffset++] & 0xFF;
-        final int byte197 = blocks[blocksOffset++] & 0xFF;
-        final int byte198 = blocks[blocksOffset++] & 0xFF;
-        final int byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 25) | (byte196 << 17) | (byte197 << 9) | (byte198 << 1) | (byte199 >>> 7);
-        final int byte200 = blocks[blocksOffset++] & 0xFF;
-        final int byte201 = blocks[blocksOffset++] & 0xFF;
-        final int byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 127) << 20) | (byte200 << 12) | (byte201 << 4) | (byte202 >>> 4);
-        final int byte203 = blocks[blocksOffset++] & 0xFF;
-        final int byte204 = blocks[blocksOffset++] & 0xFF;
-        final int byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 15) << 23) | (byte203 << 15) | (byte204 << 7) | (byte205 >>> 1);
-        final int byte206 = blocks[blocksOffset++] & 0xFF;
-        final int byte207 = blocks[blocksOffset++] & 0xFF;
-        final int byte208 = blocks[blocksOffset++] & 0xFF;
-        final int byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 1) << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final int byte210 = blocks[blocksOffset++] & 0xFF;
-        final int byte211 = blocks[blocksOffset++] & 0xFF;
-        final int byte212 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 21) | (byte210 << 13) | (byte211 << 5) | (byte212 >>> 3);
-        final int byte213 = blocks[blocksOffset++] & 0xFF;
-        final int byte214 = blocks[blocksOffset++] & 0xFF;
-        final int byte215 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte212 & 7) << 24) | (byte213 << 16) | (byte214 << 8) | byte215;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 37;
-        values[valuesOffset++] = (block0 >>> 10) & 134217727L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 1023L) << 17) | (block1 >>> 47);
-        values[valuesOffset++] = (block1 >>> 20) & 134217727L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1048575L) << 7) | (block2 >>> 57);
-        values[valuesOffset++] = (block2 >>> 30) & 134217727L;
-        values[valuesOffset++] = (block2 >>> 3) & 134217727L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 7L) << 24) | (block3 >>> 40);
-        values[valuesOffset++] = (block3 >>> 13) & 134217727L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 8191L) << 14) | (block4 >>> 50);
-        values[valuesOffset++] = (block4 >>> 23) & 134217727L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 8388607L) << 4) | (block5 >>> 60);
-        values[valuesOffset++] = (block5 >>> 33) & 134217727L;
-        values[valuesOffset++] = (block5 >>> 6) & 134217727L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 63L) << 21) | (block6 >>> 43);
-        values[valuesOffset++] = (block6 >>> 16) & 134217727L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 65535L) << 11) | (block7 >>> 53);
-        values[valuesOffset++] = (block7 >>> 26) & 134217727L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 67108863L) << 1) | (block8 >>> 63);
-        values[valuesOffset++] = (block8 >>> 36) & 134217727L;
-        values[valuesOffset++] = (block8 >>> 9) & 134217727L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 511L) << 18) | (block9 >>> 46);
-        values[valuesOffset++] = (block9 >>> 19) & 134217727L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 524287L) << 8) | (block10 >>> 56);
-        values[valuesOffset++] = (block10 >>> 29) & 134217727L;
-        values[valuesOffset++] = (block10 >>> 2) & 134217727L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 3L) << 25) | (block11 >>> 39);
-        values[valuesOffset++] = (block11 >>> 12) & 134217727L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 4095L) << 15) | (block12 >>> 49);
-        values[valuesOffset++] = (block12 >>> 22) & 134217727L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4194303L) << 5) | (block13 >>> 59);
-        values[valuesOffset++] = (block13 >>> 32) & 134217727L;
-        values[valuesOffset++] = (block13 >>> 5) & 134217727L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 31L) << 22) | (block14 >>> 42);
-        values[valuesOffset++] = (block14 >>> 15) & 134217727L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 32767L) << 12) | (block15 >>> 52);
-        values[valuesOffset++] = (block15 >>> 25) & 134217727L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 33554431L) << 2) | (block16 >>> 62);
-        values[valuesOffset++] = (block16 >>> 35) & 134217727L;
-        values[valuesOffset++] = (block16 >>> 8) & 134217727L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 255L) << 19) | (block17 >>> 45);
-        values[valuesOffset++] = (block17 >>> 18) & 134217727L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 262143L) << 9) | (block18 >>> 55);
-        values[valuesOffset++] = (block18 >>> 28) & 134217727L;
-        values[valuesOffset++] = (block18 >>> 1) & 134217727L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1L) << 26) | (block19 >>> 38);
-        values[valuesOffset++] = (block19 >>> 11) & 134217727L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 2047L) << 16) | (block20 >>> 48);
-        values[valuesOffset++] = (block20 >>> 21) & 134217727L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 2097151L) << 6) | (block21 >>> 58);
-        values[valuesOffset++] = (block21 >>> 31) & 134217727L;
-        values[valuesOffset++] = (block21 >>> 4) & 134217727L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 15L) << 23) | (block22 >>> 41);
-        values[valuesOffset++] = (block22 >>> 14) & 134217727L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 16383L) << 13) | (block23 >>> 51);
-        values[valuesOffset++] = (block23 >>> 24) & 134217727L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 16777215L) << 3) | (block24 >>> 61);
-        values[valuesOffset++] = (block24 >>> 34) & 134217727L;
-        values[valuesOffset++] = (block24 >>> 7) & 134217727L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 127L) << 20) | (block25 >>> 44);
-        values[valuesOffset++] = (block25 >>> 17) & 134217727L;
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 131071L) << 10) | (block26 >>> 54);
-        values[valuesOffset++] = (block26 >>> 27) & 134217727L;
-        values[valuesOffset++] = block26 & 134217727L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 19) | (byte1 << 11) | (byte2 << 3) | (byte3 >>> 5);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 31) << 22) | (byte4 << 14) | (byte5 << 6) | (byte6 >>> 2);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 3) << 25) | (byte7 << 17) | (byte8 << 9) | (byte9 << 1) | (byte10 >>> 7);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 127) << 20) | (byte11 << 12) | (byte12 << 4) | (byte13 >>> 4);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 15) << 23) | (byte14 << 15) | (byte15 << 7) | (byte16 >>> 1);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 1) << 26) | (byte17 << 18) | (byte18 << 10) | (byte19 << 2) | (byte20 >>> 6);
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 63) << 21) | (byte21 << 13) | (byte22 << 5) | (byte23 >>> 3);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 7) << 24) | (byte24 << 16) | (byte25 << 8) | byte26;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte27 << 19) | (byte28 << 11) | (byte29 << 3) | (byte30 >>> 5);
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 31) << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 25) | (byte34 << 17) | (byte35 << 9) | (byte36 << 1) | (byte37 >>> 7);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 127) << 20) | (byte38 << 12) | (byte39 << 4) | (byte40 >>> 4);
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 15) << 23) | (byte41 << 15) | (byte42 << 7) | (byte43 >>> 1);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 1) << 26) | (byte44 << 18) | (byte45 << 10) | (byte46 << 2) | (byte47 >>> 6);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 63) << 21) | (byte48 << 13) | (byte49 << 5) | (byte50 >>> 3);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 7) << 24) | (byte51 << 16) | (byte52 << 8) | byte53;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte54 << 19) | (byte55 << 11) | (byte56 << 3) | (byte57 >>> 5);
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 31) << 22) | (byte58 << 14) | (byte59 << 6) | (byte60 >>> 2);
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte60 & 3) << 25) | (byte61 << 17) | (byte62 << 9) | (byte63 << 1) | (byte64 >>> 7);
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 127) << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 23) | (byte68 << 15) | (byte69 << 7) | (byte70 >>> 1);
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 1) << 26) | (byte71 << 18) | (byte72 << 10) | (byte73 << 2) | (byte74 >>> 6);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 63) << 21) | (byte75 << 13) | (byte76 << 5) | (byte77 >>> 3);
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte77 & 7) << 24) | (byte78 << 16) | (byte79 << 8) | byte80;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte81 << 19) | (byte82 << 11) | (byte83 << 3) | (byte84 >>> 5);
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 31) << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 25) | (byte88 << 17) | (byte89 << 9) | (byte90 << 1) | (byte91 >>> 7);
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 127) << 20) | (byte92 << 12) | (byte93 << 4) | (byte94 >>> 4);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 15) << 23) | (byte95 << 15) | (byte96 << 7) | (byte97 >>> 1);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 1) << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 21) | (byte102 << 13) | (byte103 << 5) | (byte104 >>> 3);
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 7) << 24) | (byte105 << 16) | (byte106 << 8) | byte107;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte108 << 19) | (byte109 << 11) | (byte110 << 3) | (byte111 >>> 5);
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte111 & 31) << 22) | (byte112 << 14) | (byte113 << 6) | (byte114 >>> 2);
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 3) << 25) | (byte115 << 17) | (byte116 << 9) | (byte117 << 1) | (byte118 >>> 7);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 127) << 20) | (byte119 << 12) | (byte120 << 4) | (byte121 >>> 4);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 15) << 23) | (byte122 << 15) | (byte123 << 7) | (byte124 >>> 1);
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte124 & 1) << 26) | (byte125 << 18) | (byte126 << 10) | (byte127 << 2) | (byte128 >>> 6);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 63) << 21) | (byte129 << 13) | (byte130 << 5) | (byte131 >>> 3);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 7) << 24) | (byte132 << 16) | (byte133 << 8) | byte134;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte135 << 19) | (byte136 << 11) | (byte137 << 3) | (byte138 >>> 5);
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte138 & 31) << 22) | (byte139 << 14) | (byte140 << 6) | (byte141 >>> 2);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 3) << 25) | (byte142 << 17) | (byte143 << 9) | (byte144 << 1) | (byte145 >>> 7);
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte145 & 127) << 20) | (byte146 << 12) | (byte147 << 4) | (byte148 >>> 4);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 15) << 23) | (byte149 << 15) | (byte150 << 7) | (byte151 >>> 1);
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 1) << 26) | (byte152 << 18) | (byte153 << 10) | (byte154 << 2) | (byte155 >>> 6);
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 63) << 21) | (byte156 << 13) | (byte157 << 5) | (byte158 >>> 3);
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 7) << 24) | (byte159 << 16) | (byte160 << 8) | byte161;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte162 << 19) | (byte163 << 11) | (byte164 << 3) | (byte165 >>> 5);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 31) << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 25) | (byte169 << 17) | (byte170 << 9) | (byte171 << 1) | (byte172 >>> 7);
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte172 & 127) << 20) | (byte173 << 12) | (byte174 << 4) | (byte175 >>> 4);
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 15) << 23) | (byte176 << 15) | (byte177 << 7) | (byte178 >>> 1);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 1) << 26) | (byte179 << 18) | (byte180 << 10) | (byte181 << 2) | (byte182 >>> 6);
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 63) << 21) | (byte183 << 13) | (byte184 << 5) | (byte185 >>> 3);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 7) << 24) | (byte186 << 16) | (byte187 << 8) | byte188;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte189 << 19) | (byte190 << 11) | (byte191 << 3) | (byte192 >>> 5);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 31) << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 25) | (byte196 << 17) | (byte197 << 9) | (byte198 << 1) | (byte199 >>> 7);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 127) << 20) | (byte200 << 12) | (byte201 << 4) | (byte202 >>> 4);
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 15) << 23) | (byte203 << 15) | (byte204 << 7) | (byte205 >>> 1);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 1) << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 21) | (byte210 << 13) | (byte211 << 5) | (byte212 >>> 3);
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte212 & 7) << 24) | (byte213 << 16) | (byte214 << 8) | byte215;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 27) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 27) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked19.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked19.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked19.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked19 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 19;
-    }
+final class BulkOperationPacked19 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked19() {
+      super(19);
+      assert blockCount() == 19;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -663,58 +660,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 19) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 19) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked55.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked55.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked55.java	(copie de travail)
@@ -1,811 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked55 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 55;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 9;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 511L) << 46) | (block1 >>> 18);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 262143L) << 37) | (block2 >>> 27);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 134217727L) << 28) | (block3 >>> 36);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 68719476735L) << 19) | (block4 >>> 45);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 35184372088831L) << 10) | (block5 >>> 54);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 18014398509481983L) << 1) | (block6 >>> 63);
-        values[valuesOffset++] = (block6 >>> 8) & 36028797018963967L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 255L) << 47) | (block7 >>> 17);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 131071L) << 38) | (block8 >>> 26);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 67108863L) << 29) | (block9 >>> 35);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 34359738367L) << 20) | (block10 >>> 44);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 17592186044415L) << 11) | (block11 >>> 53);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 9007199254740991L) << 2) | (block12 >>> 62);
-        values[valuesOffset++] = (block12 >>> 7) & 36028797018963967L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 127L) << 48) | (block13 >>> 16);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 65535L) << 39) | (block14 >>> 25);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 33554431L) << 30) | (block15 >>> 34);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 17179869183L) << 21) | (block16 >>> 43);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 8796093022207L) << 12) | (block17 >>> 52);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 4503599627370495L) << 3) | (block18 >>> 61);
-        values[valuesOffset++] = (block18 >>> 6) & 36028797018963967L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 63L) << 49) | (block19 >>> 15);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 32767L) << 40) | (block20 >>> 24);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 16777215L) << 31) | (block21 >>> 33);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 8589934591L) << 22) | (block22 >>> 42);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4398046511103L) << 13) | (block23 >>> 51);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 2251799813685247L) << 4) | (block24 >>> 60);
-        values[valuesOffset++] = (block24 >>> 5) & 36028797018963967L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 31L) << 50) | (block25 >>> 14);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 16383L) << 41) | (block26 >>> 23);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 8388607L) << 32) | (block27 >>> 32);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 4294967295L) << 23) | (block28 >>> 41);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 2199023255551L) << 14) | (block29 >>> 50);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1125899906842623L) << 5) | (block30 >>> 59);
-        values[valuesOffset++] = (block30 >>> 4) & 36028797018963967L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 15L) << 51) | (block31 >>> 13);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 8191L) << 42) | (block32 >>> 22);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 4194303L) << 33) | (block33 >>> 31);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 2147483647L) << 24) | (block34 >>> 40);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 1099511627775L) << 15) | (block35 >>> 49);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 562949953421311L) << 6) | (block36 >>> 58);
-        values[valuesOffset++] = (block36 >>> 3) & 36028797018963967L;
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 7L) << 52) | (block37 >>> 12);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 4095L) << 43) | (block38 >>> 21);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 2097151L) << 34) | (block39 >>> 30);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 1073741823L) << 25) | (block40 >>> 39);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 549755813887L) << 16) | (block41 >>> 48);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 281474976710655L) << 7) | (block42 >>> 57);
-        values[valuesOffset++] = (block42 >>> 2) & 36028797018963967L;
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 3L) << 53) | (block43 >>> 11);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 2047L) << 44) | (block44 >>> 20);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 1048575L) << 35) | (block45 >>> 29);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 536870911L) << 26) | (block46 >>> 38);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 274877906943L) << 17) | (block47 >>> 47);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 140737488355327L) << 8) | (block48 >>> 56);
-        values[valuesOffset++] = (block48 >>> 1) & 36028797018963967L;
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 1L) << 54) | (block49 >>> 10);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 1023L) << 45) | (block50 >>> 19);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 524287L) << 36) | (block51 >>> 28);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 268435455L) << 27) | (block52 >>> 37);
-        final long block53 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block52 & 137438953471L) << 18) | (block53 >>> 46);
-        final long block54 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block53 & 70368744177663L) << 9) | (block54 >>> 55);
-        values[valuesOffset++] = block54 & 36028797018963967L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 47) | (byte1 << 39) | (byte2 << 31) | (byte3 << 23) | (byte4 << 15) | (byte5 << 7) | (byte6 >>> 1);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 1) << 54) | (byte7 << 46) | (byte8 << 38) | (byte9 << 30) | (byte10 << 22) | (byte11 << 14) | (byte12 << 6) | (byte13 >>> 2);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 3) << 53) | (byte14 << 45) | (byte15 << 37) | (byte16 << 29) | (byte17 << 21) | (byte18 << 13) | (byte19 << 5) | (byte20 >>> 3);
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 7) << 52) | (byte21 << 44) | (byte22 << 36) | (byte23 << 28) | (byte24 << 20) | (byte25 << 12) | (byte26 << 4) | (byte27 >>> 4);
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte27 & 15) << 51) | (byte28 << 43) | (byte29 << 35) | (byte30 << 27) | (byte31 << 19) | (byte32 << 11) | (byte33 << 3) | (byte34 >>> 5);
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 31) << 50) | (byte35 << 42) | (byte36 << 34) | (byte37 << 26) | (byte38 << 18) | (byte39 << 10) | (byte40 << 2) | (byte41 >>> 6);
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 63) << 49) | (byte42 << 41) | (byte43 << 33) | (byte44 << 25) | (byte45 << 17) | (byte46 << 9) | (byte47 << 1) | (byte48 >>> 7);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 127) << 48) | (byte49 << 40) | (byte50 << 32) | (byte51 << 24) | (byte52 << 16) | (byte53 << 8) | byte54;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte55 << 47) | (byte56 << 39) | (byte57 << 31) | (byte58 << 23) | (byte59 << 15) | (byte60 << 7) | (byte61 >>> 1);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 1) << 54) | (byte62 << 46) | (byte63 << 38) | (byte64 << 30) | (byte65 << 22) | (byte66 << 14) | (byte67 << 6) | (byte68 >>> 2);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 3) << 53) | (byte69 << 45) | (byte70 << 37) | (byte71 << 29) | (byte72 << 21) | (byte73 << 13) | (byte74 << 5) | (byte75 >>> 3);
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte75 & 7) << 52) | (byte76 << 44) | (byte77 << 36) | (byte78 << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 51) | (byte83 << 43) | (byte84 << 35) | (byte85 << 27) | (byte86 << 19) | (byte87 << 11) | (byte88 << 3) | (byte89 >>> 5);
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 31) << 50) | (byte90 << 42) | (byte91 << 34) | (byte92 << 26) | (byte93 << 18) | (byte94 << 10) | (byte95 << 2) | (byte96 >>> 6);
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 63) << 49) | (byte97 << 41) | (byte98 << 33) | (byte99 << 25) | (byte100 << 17) | (byte101 << 9) | (byte102 << 1) | (byte103 >>> 7);
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 127) << 48) | (byte104 << 40) | (byte105 << 32) | (byte106 << 24) | (byte107 << 16) | (byte108 << 8) | byte109;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte110 << 47) | (byte111 << 39) | (byte112 << 31) | (byte113 << 23) | (byte114 << 15) | (byte115 << 7) | (byte116 >>> 1);
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 1) << 54) | (byte117 << 46) | (byte118 << 38) | (byte119 << 30) | (byte120 << 22) | (byte121 << 14) | (byte122 << 6) | (byte123 >>> 2);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 3) << 53) | (byte124 << 45) | (byte125 << 37) | (byte126 << 29) | (byte127 << 21) | (byte128 << 13) | (byte129 << 5) | (byte130 >>> 3);
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte130 & 7) << 52) | (byte131 << 44) | (byte132 << 36) | (byte133 << 28) | (byte134 << 20) | (byte135 << 12) | (byte136 << 4) | (byte137 >>> 4);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 15) << 51) | (byte138 << 43) | (byte139 << 35) | (byte140 << 27) | (byte141 << 19) | (byte142 << 11) | (byte143 << 3) | (byte144 >>> 5);
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte144 & 31) << 50) | (byte145 << 42) | (byte146 << 34) | (byte147 << 26) | (byte148 << 18) | (byte149 << 10) | (byte150 << 2) | (byte151 >>> 6);
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 63) << 49) | (byte152 << 41) | (byte153 << 33) | (byte154 << 25) | (byte155 << 17) | (byte156 << 9) | (byte157 << 1) | (byte158 >>> 7);
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 127) << 48) | (byte159 << 40) | (byte160 << 32) | (byte161 << 24) | (byte162 << 16) | (byte163 << 8) | byte164;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte165 << 47) | (byte166 << 39) | (byte167 << 31) | (byte168 << 23) | (byte169 << 15) | (byte170 << 7) | (byte171 >>> 1);
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte171 & 1) << 54) | (byte172 << 46) | (byte173 << 38) | (byte174 << 30) | (byte175 << 22) | (byte176 << 14) | (byte177 << 6) | (byte178 >>> 2);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 3) << 53) | (byte179 << 45) | (byte180 << 37) | (byte181 << 29) | (byte182 << 21) | (byte183 << 13) | (byte184 << 5) | (byte185 >>> 3);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 7) << 52) | (byte186 << 44) | (byte187 << 36) | (byte188 << 28) | (byte189 << 20) | (byte190 << 12) | (byte191 << 4) | (byte192 >>> 4);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 15) << 51) | (byte193 << 43) | (byte194 << 35) | (byte195 << 27) | (byte196 << 19) | (byte197 << 11) | (byte198 << 3) | (byte199 >>> 5);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 31) << 50) | (byte200 << 42) | (byte201 << 34) | (byte202 << 26) | (byte203 << 18) | (byte204 << 10) | (byte205 << 2) | (byte206 >>> 6);
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 63) << 49) | (byte207 << 41) | (byte208 << 33) | (byte209 << 25) | (byte210 << 17) | (byte211 << 9) | (byte212 << 1) | (byte213 >>> 7);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 127) << 48) | (byte214 << 40) | (byte215 << 32) | (byte216 << 24) | (byte217 << 16) | (byte218 << 8) | byte219;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte220 << 47) | (byte221 << 39) | (byte222 << 31) | (byte223 << 23) | (byte224 << 15) | (byte225 << 7) | (byte226 >>> 1);
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte226 & 1) << 54) | (byte227 << 46) | (byte228 << 38) | (byte229 << 30) | (byte230 << 22) | (byte231 << 14) | (byte232 << 6) | (byte233 >>> 2);
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte233 & 3) << 53) | (byte234 << 45) | (byte235 << 37) | (byte236 << 29) | (byte237 << 21) | (byte238 << 13) | (byte239 << 5) | (byte240 >>> 3);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 7) << 52) | (byte241 << 44) | (byte242 << 36) | (byte243 << 28) | (byte244 << 20) | (byte245 << 12) | (byte246 << 4) | (byte247 >>> 4);
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte247 & 15) << 51) | (byte248 << 43) | (byte249 << 35) | (byte250 << 27) | (byte251 << 19) | (byte252 << 11) | (byte253 << 3) | (byte254 >>> 5);
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte254 & 31) << 50) | (byte255 << 42) | (byte256 << 34) | (byte257 << 26) | (byte258 << 18) | (byte259 << 10) | (byte260 << 2) | (byte261 >>> 6);
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte261 & 63) << 49) | (byte262 << 41) | (byte263 << 33) | (byte264 << 25) | (byte265 << 17) | (byte266 << 9) | (byte267 << 1) | (byte268 >>> 7);
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte268 & 127) << 48) | (byte269 << 40) | (byte270 << 32) | (byte271 << 24) | (byte272 << 16) | (byte273 << 8) | byte274;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte275 << 47) | (byte276 << 39) | (byte277 << 31) | (byte278 << 23) | (byte279 << 15) | (byte280 << 7) | (byte281 >>> 1);
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte281 & 1) << 54) | (byte282 << 46) | (byte283 << 38) | (byte284 << 30) | (byte285 << 22) | (byte286 << 14) | (byte287 << 6) | (byte288 >>> 2);
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte288 & 3) << 53) | (byte289 << 45) | (byte290 << 37) | (byte291 << 29) | (byte292 << 21) | (byte293 << 13) | (byte294 << 5) | (byte295 >>> 3);
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte295 & 7) << 52) | (byte296 << 44) | (byte297 << 36) | (byte298 << 28) | (byte299 << 20) | (byte300 << 12) | (byte301 << 4) | (byte302 >>> 4);
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte302 & 15) << 51) | (byte303 << 43) | (byte304 << 35) | (byte305 << 27) | (byte306 << 19) | (byte307 << 11) | (byte308 << 3) | (byte309 >>> 5);
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte309 & 31) << 50) | (byte310 << 42) | (byte311 << 34) | (byte312 << 26) | (byte313 << 18) | (byte314 << 10) | (byte315 << 2) | (byte316 >>> 6);
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte316 & 63) << 49) | (byte317 << 41) | (byte318 << 33) | (byte319 << 25) | (byte320 << 17) | (byte321 << 9) | (byte322 << 1) | (byte323 >>> 7);
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte323 & 127) << 48) | (byte324 << 40) | (byte325 << 32) | (byte326 << 24) | (byte327 << 16) | (byte328 << 8) | byte329;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte330 << 47) | (byte331 << 39) | (byte332 << 31) | (byte333 << 23) | (byte334 << 15) | (byte335 << 7) | (byte336 >>> 1);
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte336 & 1) << 54) | (byte337 << 46) | (byte338 << 38) | (byte339 << 30) | (byte340 << 22) | (byte341 << 14) | (byte342 << 6) | (byte343 >>> 2);
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte343 & 3) << 53) | (byte344 << 45) | (byte345 << 37) | (byte346 << 29) | (byte347 << 21) | (byte348 << 13) | (byte349 << 5) | (byte350 >>> 3);
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte350 & 7) << 52) | (byte351 << 44) | (byte352 << 36) | (byte353 << 28) | (byte354 << 20) | (byte355 << 12) | (byte356 << 4) | (byte357 >>> 4);
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte357 & 15) << 51) | (byte358 << 43) | (byte359 << 35) | (byte360 << 27) | (byte361 << 19) | (byte362 << 11) | (byte363 << 3) | (byte364 >>> 5);
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte364 & 31) << 50) | (byte365 << 42) | (byte366 << 34) | (byte367 << 26) | (byte368 << 18) | (byte369 << 10) | (byte370 << 2) | (byte371 >>> 6);
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte371 & 63) << 49) | (byte372 << 41) | (byte373 << 33) | (byte374 << 25) | (byte375 << 17) | (byte376 << 9) | (byte377 << 1) | (byte378 >>> 7);
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte378 & 127) << 48) | (byte379 << 40) | (byte380 << 32) | (byte381 << 24) | (byte382 << 16) | (byte383 << 8) | byte384;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte385 << 47) | (byte386 << 39) | (byte387 << 31) | (byte388 << 23) | (byte389 << 15) | (byte390 << 7) | (byte391 >>> 1);
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte391 & 1) << 54) | (byte392 << 46) | (byte393 << 38) | (byte394 << 30) | (byte395 << 22) | (byte396 << 14) | (byte397 << 6) | (byte398 >>> 2);
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte398 & 3) << 53) | (byte399 << 45) | (byte400 << 37) | (byte401 << 29) | (byte402 << 21) | (byte403 << 13) | (byte404 << 5) | (byte405 >>> 3);
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte405 & 7) << 52) | (byte406 << 44) | (byte407 << 36) | (byte408 << 28) | (byte409 << 20) | (byte410 << 12) | (byte411 << 4) | (byte412 >>> 4);
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte412 & 15) << 51) | (byte413 << 43) | (byte414 << 35) | (byte415 << 27) | (byte416 << 19) | (byte417 << 11) | (byte418 << 3) | (byte419 >>> 5);
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        final long byte424 = blocks[blocksOffset++] & 0xFF;
-        final long byte425 = blocks[blocksOffset++] & 0xFF;
-        final long byte426 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte419 & 31) << 50) | (byte420 << 42) | (byte421 << 34) | (byte422 << 26) | (byte423 << 18) | (byte424 << 10) | (byte425 << 2) | (byte426 >>> 6);
-        final long byte427 = blocks[blocksOffset++] & 0xFF;
-        final long byte428 = blocks[blocksOffset++] & 0xFF;
-        final long byte429 = blocks[blocksOffset++] & 0xFF;
-        final long byte430 = blocks[blocksOffset++] & 0xFF;
-        final long byte431 = blocks[blocksOffset++] & 0xFF;
-        final long byte432 = blocks[blocksOffset++] & 0xFF;
-        final long byte433 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte426 & 63) << 49) | (byte427 << 41) | (byte428 << 33) | (byte429 << 25) | (byte430 << 17) | (byte431 << 9) | (byte432 << 1) | (byte433 >>> 7);
-        final long byte434 = blocks[blocksOffset++] & 0xFF;
-        final long byte435 = blocks[blocksOffset++] & 0xFF;
-        final long byte436 = blocks[blocksOffset++] & 0xFF;
-        final long byte437 = blocks[blocksOffset++] & 0xFF;
-        final long byte438 = blocks[blocksOffset++] & 0xFF;
-        final long byte439 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte433 & 127) << 48) | (byte434 << 40) | (byte435 << 32) | (byte436 << 24) | (byte437 << 16) | (byte438 << 8) | byte439;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 53);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 53);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked47.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked47.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked47.java	(copie de travail)
@@ -1,723 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked47 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 47;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 17;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 131071L) << 30) | (block1 >>> 34);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 17179869183L) << 13) | (block2 >>> 51);
-        values[valuesOffset++] = (block2 >>> 4) & 140737488355327L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 15L) << 43) | (block3 >>> 21);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 2097151L) << 26) | (block4 >>> 38);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 274877906943L) << 9) | (block5 >>> 55);
-        values[valuesOffset++] = (block5 >>> 8) & 140737488355327L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 255L) << 39) | (block6 >>> 25);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 33554431L) << 22) | (block7 >>> 42);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4398046511103L) << 5) | (block8 >>> 59);
-        values[valuesOffset++] = (block8 >>> 12) & 140737488355327L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 4095L) << 35) | (block9 >>> 29);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 536870911L) << 18) | (block10 >>> 46);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 70368744177663L) << 1) | (block11 >>> 63);
-        values[valuesOffset++] = (block11 >>> 16) & 140737488355327L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 65535L) << 31) | (block12 >>> 33);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 8589934591L) << 14) | (block13 >>> 50);
-        values[valuesOffset++] = (block13 >>> 3) & 140737488355327L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 7L) << 44) | (block14 >>> 20);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1048575L) << 27) | (block15 >>> 37);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 137438953471L) << 10) | (block16 >>> 54);
-        values[valuesOffset++] = (block16 >>> 7) & 140737488355327L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 127L) << 40) | (block17 >>> 24);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 16777215L) << 23) | (block18 >>> 41);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 2199023255551L) << 6) | (block19 >>> 58);
-        values[valuesOffset++] = (block19 >>> 11) & 140737488355327L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 2047L) << 36) | (block20 >>> 28);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 268435455L) << 19) | (block21 >>> 45);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 35184372088831L) << 2) | (block22 >>> 62);
-        values[valuesOffset++] = (block22 >>> 15) & 140737488355327L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 32767L) << 32) | (block23 >>> 32);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 4294967295L) << 15) | (block24 >>> 49);
-        values[valuesOffset++] = (block24 >>> 2) & 140737488355327L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 3L) << 45) | (block25 >>> 19);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 524287L) << 28) | (block26 >>> 36);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 68719476735L) << 11) | (block27 >>> 53);
-        values[valuesOffset++] = (block27 >>> 6) & 140737488355327L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 63L) << 41) | (block28 >>> 23);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 8388607L) << 24) | (block29 >>> 40);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1099511627775L) << 7) | (block30 >>> 57);
-        values[valuesOffset++] = (block30 >>> 10) & 140737488355327L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 1023L) << 37) | (block31 >>> 27);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 134217727L) << 20) | (block32 >>> 44);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 17592186044415L) << 3) | (block33 >>> 61);
-        values[valuesOffset++] = (block33 >>> 14) & 140737488355327L;
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 16383L) << 33) | (block34 >>> 31);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 2147483647L) << 16) | (block35 >>> 48);
-        values[valuesOffset++] = (block35 >>> 1) & 140737488355327L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 1L) << 46) | (block36 >>> 18);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 262143L) << 29) | (block37 >>> 35);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 34359738367L) << 12) | (block38 >>> 52);
-        values[valuesOffset++] = (block38 >>> 5) & 140737488355327L;
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 31L) << 42) | (block39 >>> 22);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 4194303L) << 25) | (block40 >>> 39);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 549755813887L) << 8) | (block41 >>> 56);
-        values[valuesOffset++] = (block41 >>> 9) & 140737488355327L;
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 511L) << 38) | (block42 >>> 26);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 67108863L) << 21) | (block43 >>> 43);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 8796093022207L) << 4) | (block44 >>> 60);
-        values[valuesOffset++] = (block44 >>> 13) & 140737488355327L;
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 8191L) << 34) | (block45 >>> 30);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 1073741823L) << 17) | (block46 >>> 47);
-        values[valuesOffset++] = block46 & 140737488355327L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 39) | (byte1 << 31) | (byte2 << 23) | (byte3 << 15) | (byte4 << 7) | (byte5 >>> 1);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 1) << 46) | (byte6 << 38) | (byte7 << 30) | (byte8 << 22) | (byte9 << 14) | (byte10 << 6) | (byte11 >>> 2);
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 3) << 45) | (byte12 << 37) | (byte13 << 29) | (byte14 << 21) | (byte15 << 13) | (byte16 << 5) | (byte17 >>> 3);
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte17 & 7) << 44) | (byte18 << 36) | (byte19 << 28) | (byte20 << 20) | (byte21 << 12) | (byte22 << 4) | (byte23 >>> 4);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 15) << 43) | (byte24 << 35) | (byte25 << 27) | (byte26 << 19) | (byte27 << 11) | (byte28 << 3) | (byte29 >>> 5);
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 31) << 42) | (byte30 << 34) | (byte31 << 26) | (byte32 << 18) | (byte33 << 10) | (byte34 << 2) | (byte35 >>> 6);
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte35 & 63) << 41) | (byte36 << 33) | (byte37 << 25) | (byte38 << 17) | (byte39 << 9) | (byte40 << 1) | (byte41 >>> 7);
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 127) << 40) | (byte42 << 32) | (byte43 << 24) | (byte44 << 16) | (byte45 << 8) | byte46;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte47 << 39) | (byte48 << 31) | (byte49 << 23) | (byte50 << 15) | (byte51 << 7) | (byte52 >>> 1);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 1) << 46) | (byte53 << 38) | (byte54 << 30) | (byte55 << 22) | (byte56 << 14) | (byte57 << 6) | (byte58 >>> 2);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 3) << 45) | (byte59 << 37) | (byte60 << 29) | (byte61 << 21) | (byte62 << 13) | (byte63 << 5) | (byte64 >>> 3);
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 7) << 44) | (byte65 << 36) | (byte66 << 28) | (byte67 << 20) | (byte68 << 12) | (byte69 << 4) | (byte70 >>> 4);
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 15) << 43) | (byte71 << 35) | (byte72 << 27) | (byte73 << 19) | (byte74 << 11) | (byte75 << 3) | (byte76 >>> 5);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 31) << 42) | (byte77 << 34) | (byte78 << 26) | (byte79 << 18) | (byte80 << 10) | (byte81 << 2) | (byte82 >>> 6);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 63) << 41) | (byte83 << 33) | (byte84 << 25) | (byte85 << 17) | (byte86 << 9) | (byte87 << 1) | (byte88 >>> 7);
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte88 & 127) << 40) | (byte89 << 32) | (byte90 << 24) | (byte91 << 16) | (byte92 << 8) | byte93;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte94 << 39) | (byte95 << 31) | (byte96 << 23) | (byte97 << 15) | (byte98 << 7) | (byte99 >>> 1);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 1) << 46) | (byte100 << 38) | (byte101 << 30) | (byte102 << 22) | (byte103 << 14) | (byte104 << 6) | (byte105 >>> 2);
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte105 & 3) << 45) | (byte106 << 37) | (byte107 << 29) | (byte108 << 21) | (byte109 << 13) | (byte110 << 5) | (byte111 >>> 3);
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte111 & 7) << 44) | (byte112 << 36) | (byte113 << 28) | (byte114 << 20) | (byte115 << 12) | (byte116 << 4) | (byte117 >>> 4);
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte117 & 15) << 43) | (byte118 << 35) | (byte119 << 27) | (byte120 << 19) | (byte121 << 11) | (byte122 << 3) | (byte123 >>> 5);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 31) << 42) | (byte124 << 34) | (byte125 << 26) | (byte126 << 18) | (byte127 << 10) | (byte128 << 2) | (byte129 >>> 6);
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte129 & 63) << 41) | (byte130 << 33) | (byte131 << 25) | (byte132 << 17) | (byte133 << 9) | (byte134 << 1) | (byte135 >>> 7);
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte135 & 127) << 40) | (byte136 << 32) | (byte137 << 24) | (byte138 << 16) | (byte139 << 8) | byte140;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte141 << 39) | (byte142 << 31) | (byte143 << 23) | (byte144 << 15) | (byte145 << 7) | (byte146 >>> 1);
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 1) << 46) | (byte147 << 38) | (byte148 << 30) | (byte149 << 22) | (byte150 << 14) | (byte151 << 6) | (byte152 >>> 2);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 3) << 45) | (byte153 << 37) | (byte154 << 29) | (byte155 << 21) | (byte156 << 13) | (byte157 << 5) | (byte158 >>> 3);
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 7) << 44) | (byte159 << 36) | (byte160 << 28) | (byte161 << 20) | (byte162 << 12) | (byte163 << 4) | (byte164 >>> 4);
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte164 & 15) << 43) | (byte165 << 35) | (byte166 << 27) | (byte167 << 19) | (byte168 << 11) | (byte169 << 3) | (byte170 >>> 5);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 31) << 42) | (byte171 << 34) | (byte172 << 26) | (byte173 << 18) | (byte174 << 10) | (byte175 << 2) | (byte176 >>> 6);
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte176 & 63) << 41) | (byte177 << 33) | (byte178 << 25) | (byte179 << 17) | (byte180 << 9) | (byte181 << 1) | (byte182 >>> 7);
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 127) << 40) | (byte183 << 32) | (byte184 << 24) | (byte185 << 16) | (byte186 << 8) | byte187;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte188 << 39) | (byte189 << 31) | (byte190 << 23) | (byte191 << 15) | (byte192 << 7) | (byte193 >>> 1);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 1) << 46) | (byte194 << 38) | (byte195 << 30) | (byte196 << 22) | (byte197 << 14) | (byte198 << 6) | (byte199 >>> 2);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 3) << 45) | (byte200 << 37) | (byte201 << 29) | (byte202 << 21) | (byte203 << 13) | (byte204 << 5) | (byte205 >>> 3);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 7) << 44) | (byte206 << 36) | (byte207 << 28) | (byte208 << 20) | (byte209 << 12) | (byte210 << 4) | (byte211 >>> 4);
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte211 & 15) << 43) | (byte212 << 35) | (byte213 << 27) | (byte214 << 19) | (byte215 << 11) | (byte216 << 3) | (byte217 >>> 5);
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte217 & 31) << 42) | (byte218 << 34) | (byte219 << 26) | (byte220 << 18) | (byte221 << 10) | (byte222 << 2) | (byte223 >>> 6);
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte223 & 63) << 41) | (byte224 << 33) | (byte225 << 25) | (byte226 << 17) | (byte227 << 9) | (byte228 << 1) | (byte229 >>> 7);
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte229 & 127) << 40) | (byte230 << 32) | (byte231 << 24) | (byte232 << 16) | (byte233 << 8) | byte234;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte235 << 39) | (byte236 << 31) | (byte237 << 23) | (byte238 << 15) | (byte239 << 7) | (byte240 >>> 1);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 1) << 46) | (byte241 << 38) | (byte242 << 30) | (byte243 << 22) | (byte244 << 14) | (byte245 << 6) | (byte246 >>> 2);
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte246 & 3) << 45) | (byte247 << 37) | (byte248 << 29) | (byte249 << 21) | (byte250 << 13) | (byte251 << 5) | (byte252 >>> 3);
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte252 & 7) << 44) | (byte253 << 36) | (byte254 << 28) | (byte255 << 20) | (byte256 << 12) | (byte257 << 4) | (byte258 >>> 4);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 15) << 43) | (byte259 << 35) | (byte260 << 27) | (byte261 << 19) | (byte262 << 11) | (byte263 << 3) | (byte264 >>> 5);
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte264 & 31) << 42) | (byte265 << 34) | (byte266 << 26) | (byte267 << 18) | (byte268 << 10) | (byte269 << 2) | (byte270 >>> 6);
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte270 & 63) << 41) | (byte271 << 33) | (byte272 << 25) | (byte273 << 17) | (byte274 << 9) | (byte275 << 1) | (byte276 >>> 7);
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte276 & 127) << 40) | (byte277 << 32) | (byte278 << 24) | (byte279 << 16) | (byte280 << 8) | byte281;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte282 << 39) | (byte283 << 31) | (byte284 << 23) | (byte285 << 15) | (byte286 << 7) | (byte287 >>> 1);
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte287 & 1) << 46) | (byte288 << 38) | (byte289 << 30) | (byte290 << 22) | (byte291 << 14) | (byte292 << 6) | (byte293 >>> 2);
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte293 & 3) << 45) | (byte294 << 37) | (byte295 << 29) | (byte296 << 21) | (byte297 << 13) | (byte298 << 5) | (byte299 >>> 3);
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte299 & 7) << 44) | (byte300 << 36) | (byte301 << 28) | (byte302 << 20) | (byte303 << 12) | (byte304 << 4) | (byte305 >>> 4);
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte305 & 15) << 43) | (byte306 << 35) | (byte307 << 27) | (byte308 << 19) | (byte309 << 11) | (byte310 << 3) | (byte311 >>> 5);
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte311 & 31) << 42) | (byte312 << 34) | (byte313 << 26) | (byte314 << 18) | (byte315 << 10) | (byte316 << 2) | (byte317 >>> 6);
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte317 & 63) << 41) | (byte318 << 33) | (byte319 << 25) | (byte320 << 17) | (byte321 << 9) | (byte322 << 1) | (byte323 >>> 7);
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte323 & 127) << 40) | (byte324 << 32) | (byte325 << 24) | (byte326 << 16) | (byte327 << 8) | byte328;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte329 << 39) | (byte330 << 31) | (byte331 << 23) | (byte332 << 15) | (byte333 << 7) | (byte334 >>> 1);
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte334 & 1) << 46) | (byte335 << 38) | (byte336 << 30) | (byte337 << 22) | (byte338 << 14) | (byte339 << 6) | (byte340 >>> 2);
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte340 & 3) << 45) | (byte341 << 37) | (byte342 << 29) | (byte343 << 21) | (byte344 << 13) | (byte345 << 5) | (byte346 >>> 3);
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte346 & 7) << 44) | (byte347 << 36) | (byte348 << 28) | (byte349 << 20) | (byte350 << 12) | (byte351 << 4) | (byte352 >>> 4);
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte352 & 15) << 43) | (byte353 << 35) | (byte354 << 27) | (byte355 << 19) | (byte356 << 11) | (byte357 << 3) | (byte358 >>> 5);
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte358 & 31) << 42) | (byte359 << 34) | (byte360 << 26) | (byte361 << 18) | (byte362 << 10) | (byte363 << 2) | (byte364 >>> 6);
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte364 & 63) << 41) | (byte365 << 33) | (byte366 << 25) | (byte367 << 17) | (byte368 << 9) | (byte369 << 1) | (byte370 >>> 7);
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte370 & 127) << 40) | (byte371 << 32) | (byte372 << 24) | (byte373 << 16) | (byte374 << 8) | byte375;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked39.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked39.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked39.java	(copie de travail)
@@ -1,635 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked39 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 39;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 25;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 33554431L) << 14) | (block1 >>> 50);
-        values[valuesOffset++] = (block1 >>> 11) & 549755813887L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 2047L) << 28) | (block2 >>> 36);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 68719476735L) << 3) | (block3 >>> 61);
-        values[valuesOffset++] = (block3 >>> 22) & 549755813887L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 4194303L) << 17) | (block4 >>> 47);
-        values[valuesOffset++] = (block4 >>> 8) & 549755813887L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 255L) << 31) | (block5 >>> 33);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 8589934591L) << 6) | (block6 >>> 58);
-        values[valuesOffset++] = (block6 >>> 19) & 549755813887L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 524287L) << 20) | (block7 >>> 44);
-        values[valuesOffset++] = (block7 >>> 5) & 549755813887L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 31L) << 34) | (block8 >>> 30);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 1073741823L) << 9) | (block9 >>> 55);
-        values[valuesOffset++] = (block9 >>> 16) & 549755813887L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 65535L) << 23) | (block10 >>> 41);
-        values[valuesOffset++] = (block10 >>> 2) & 549755813887L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 3L) << 37) | (block11 >>> 27);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 134217727L) << 12) | (block12 >>> 52);
-        values[valuesOffset++] = (block12 >>> 13) & 549755813887L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 8191L) << 26) | (block13 >>> 38);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 274877906943L) << 1) | (block14 >>> 63);
-        values[valuesOffset++] = (block14 >>> 24) & 549755813887L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 16777215L) << 15) | (block15 >>> 49);
-        values[valuesOffset++] = (block15 >>> 10) & 549755813887L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 1023L) << 29) | (block16 >>> 35);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 34359738367L) << 4) | (block17 >>> 60);
-        values[valuesOffset++] = (block17 >>> 21) & 549755813887L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 2097151L) << 18) | (block18 >>> 46);
-        values[valuesOffset++] = (block18 >>> 7) & 549755813887L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 127L) << 32) | (block19 >>> 32);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 4294967295L) << 7) | (block20 >>> 57);
-        values[valuesOffset++] = (block20 >>> 18) & 549755813887L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 262143L) << 21) | (block21 >>> 43);
-        values[valuesOffset++] = (block21 >>> 4) & 549755813887L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 15L) << 35) | (block22 >>> 29);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 536870911L) << 10) | (block23 >>> 54);
-        values[valuesOffset++] = (block23 >>> 15) & 549755813887L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 32767L) << 24) | (block24 >>> 40);
-        values[valuesOffset++] = (block24 >>> 1) & 549755813887L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 1L) << 38) | (block25 >>> 26);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 67108863L) << 13) | (block26 >>> 51);
-        values[valuesOffset++] = (block26 >>> 12) & 549755813887L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 4095L) << 27) | (block27 >>> 37);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 137438953471L) << 2) | (block28 >>> 62);
-        values[valuesOffset++] = (block28 >>> 23) & 549755813887L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 8388607L) << 16) | (block29 >>> 48);
-        values[valuesOffset++] = (block29 >>> 9) & 549755813887L;
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 511L) << 30) | (block30 >>> 34);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 17179869183L) << 5) | (block31 >>> 59);
-        values[valuesOffset++] = (block31 >>> 20) & 549755813887L;
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 1048575L) << 19) | (block32 >>> 45);
-        values[valuesOffset++] = (block32 >>> 6) & 549755813887L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 63L) << 33) | (block33 >>> 31);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 2147483647L) << 8) | (block34 >>> 56);
-        values[valuesOffset++] = (block34 >>> 17) & 549755813887L;
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 131071L) << 22) | (block35 >>> 42);
-        values[valuesOffset++] = (block35 >>> 3) & 549755813887L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 7L) << 36) | (block36 >>> 28);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 268435455L) << 11) | (block37 >>> 53);
-        values[valuesOffset++] = (block37 >>> 14) & 549755813887L;
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 16383L) << 25) | (block38 >>> 39);
-        values[valuesOffset++] = block38 & 549755813887L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 31) | (byte1 << 23) | (byte2 << 15) | (byte3 << 7) | (byte4 >>> 1);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 1) << 38) | (byte5 << 30) | (byte6 << 22) | (byte7 << 14) | (byte8 << 6) | (byte9 >>> 2);
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 3) << 37) | (byte10 << 29) | (byte11 << 21) | (byte12 << 13) | (byte13 << 5) | (byte14 >>> 3);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 7) << 36) | (byte15 << 28) | (byte16 << 20) | (byte17 << 12) | (byte18 << 4) | (byte19 >>> 4);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 15) << 35) | (byte20 << 27) | (byte21 << 19) | (byte22 << 11) | (byte23 << 3) | (byte24 >>> 5);
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte24 & 31) << 34) | (byte25 << 26) | (byte26 << 18) | (byte27 << 10) | (byte28 << 2) | (byte29 >>> 6);
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 63) << 33) | (byte30 << 25) | (byte31 << 17) | (byte32 << 9) | (byte33 << 1) | (byte34 >>> 7);
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 127) << 32) | (byte35 << 24) | (byte36 << 16) | (byte37 << 8) | byte38;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte39 << 31) | (byte40 << 23) | (byte41 << 15) | (byte42 << 7) | (byte43 >>> 1);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 1) << 38) | (byte44 << 30) | (byte45 << 22) | (byte46 << 14) | (byte47 << 6) | (byte48 >>> 2);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 3) << 37) | (byte49 << 29) | (byte50 << 21) | (byte51 << 13) | (byte52 << 5) | (byte53 >>> 3);
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 7) << 36) | (byte54 << 28) | (byte55 << 20) | (byte56 << 12) | (byte57 << 4) | (byte58 >>> 4);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 15) << 35) | (byte59 << 27) | (byte60 << 19) | (byte61 << 11) | (byte62 << 3) | (byte63 >>> 5);
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 31) << 34) | (byte64 << 26) | (byte65 << 18) | (byte66 << 10) | (byte67 << 2) | (byte68 >>> 6);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 63) << 33) | (byte69 << 25) | (byte70 << 17) | (byte71 << 9) | (byte72 << 1) | (byte73 >>> 7);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 127) << 32) | (byte74 << 24) | (byte75 << 16) | (byte76 << 8) | byte77;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte78 << 31) | (byte79 << 23) | (byte80 << 15) | (byte81 << 7) | (byte82 >>> 1);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 1) << 38) | (byte83 << 30) | (byte84 << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 37) | (byte88 << 29) | (byte89 << 21) | (byte90 << 13) | (byte91 << 5) | (byte92 >>> 3);
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte92 & 7) << 36) | (byte93 << 28) | (byte94 << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 35) | (byte98 << 27) | (byte99 << 19) | (byte100 << 11) | (byte101 << 3) | (byte102 >>> 5);
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte102 & 31) << 34) | (byte103 << 26) | (byte104 << 18) | (byte105 << 10) | (byte106 << 2) | (byte107 >>> 6);
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte107 & 63) << 33) | (byte108 << 25) | (byte109 << 17) | (byte110 << 9) | (byte111 << 1) | (byte112 >>> 7);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 127) << 32) | (byte113 << 24) | (byte114 << 16) | (byte115 << 8) | byte116;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte117 << 31) | (byte118 << 23) | (byte119 << 15) | (byte120 << 7) | (byte121 >>> 1);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 1) << 38) | (byte122 << 30) | (byte123 << 22) | (byte124 << 14) | (byte125 << 6) | (byte126 >>> 2);
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte126 & 3) << 37) | (byte127 << 29) | (byte128 << 21) | (byte129 << 13) | (byte130 << 5) | (byte131 >>> 3);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 7) << 36) | (byte132 << 28) | (byte133 << 20) | (byte134 << 12) | (byte135 << 4) | (byte136 >>> 4);
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte136 & 15) << 35) | (byte137 << 27) | (byte138 << 19) | (byte139 << 11) | (byte140 << 3) | (byte141 >>> 5);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 31) << 34) | (byte142 << 26) | (byte143 << 18) | (byte144 << 10) | (byte145 << 2) | (byte146 >>> 6);
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 63) << 33) | (byte147 << 25) | (byte148 << 17) | (byte149 << 9) | (byte150 << 1) | (byte151 >>> 7);
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 127) << 32) | (byte152 << 24) | (byte153 << 16) | (byte154 << 8) | byte155;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte156 << 31) | (byte157 << 23) | (byte158 << 15) | (byte159 << 7) | (byte160 >>> 1);
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte160 & 1) << 38) | (byte161 << 30) | (byte162 << 22) | (byte163 << 14) | (byte164 << 6) | (byte165 >>> 2);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 3) << 37) | (byte166 << 29) | (byte167 << 21) | (byte168 << 13) | (byte169 << 5) | (byte170 >>> 3);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 7) << 36) | (byte171 << 28) | (byte172 << 20) | (byte173 << 12) | (byte174 << 4) | (byte175 >>> 4);
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 15) << 35) | (byte176 << 27) | (byte177 << 19) | (byte178 << 11) | (byte179 << 3) | (byte180 >>> 5);
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte180 & 31) << 34) | (byte181 << 26) | (byte182 << 18) | (byte183 << 10) | (byte184 << 2) | (byte185 >>> 6);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 63) << 33) | (byte186 << 25) | (byte187 << 17) | (byte188 << 9) | (byte189 << 1) | (byte190 >>> 7);
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte190 & 127) << 32) | (byte191 << 24) | (byte192 << 16) | (byte193 << 8) | byte194;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte195 << 31) | (byte196 << 23) | (byte197 << 15) | (byte198 << 7) | (byte199 >>> 1);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 1) << 38) | (byte200 << 30) | (byte201 << 22) | (byte202 << 14) | (byte203 << 6) | (byte204 >>> 2);
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte204 & 3) << 37) | (byte205 << 29) | (byte206 << 21) | (byte207 << 13) | (byte208 << 5) | (byte209 >>> 3);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 7) << 36) | (byte210 << 28) | (byte211 << 20) | (byte212 << 12) | (byte213 << 4) | (byte214 >>> 4);
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte214 & 15) << 35) | (byte215 << 27) | (byte216 << 19) | (byte217 << 11) | (byte218 << 3) | (byte219 >>> 5);
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte219 & 31) << 34) | (byte220 << 26) | (byte221 << 18) | (byte222 << 10) | (byte223 << 2) | (byte224 >>> 6);
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 63) << 33) | (byte225 << 25) | (byte226 << 17) | (byte227 << 9) | (byte228 << 1) | (byte229 >>> 7);
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte229 & 127) << 32) | (byte230 << 24) | (byte231 << 16) | (byte232 << 8) | byte233;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte234 << 31) | (byte235 << 23) | (byte236 << 15) | (byte237 << 7) | (byte238 >>> 1);
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte238 & 1) << 38) | (byte239 << 30) | (byte240 << 22) | (byte241 << 14) | (byte242 << 6) | (byte243 >>> 2);
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte243 & 3) << 37) | (byte244 << 29) | (byte245 << 21) | (byte246 << 13) | (byte247 << 5) | (byte248 >>> 3);
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte248 & 7) << 36) | (byte249 << 28) | (byte250 << 20) | (byte251 << 12) | (byte252 << 4) | (byte253 >>> 4);
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte253 & 15) << 35) | (byte254 << 27) | (byte255 << 19) | (byte256 << 11) | (byte257 << 3) | (byte258 >>> 5);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 31) << 34) | (byte259 << 26) | (byte260 << 18) | (byte261 << 10) | (byte262 << 2) | (byte263 >>> 6);
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte263 & 63) << 33) | (byte264 << 25) | (byte265 << 17) | (byte266 << 9) | (byte267 << 1) | (byte268 >>> 7);
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte268 & 127) << 32) | (byte269 << 24) | (byte270 << 16) | (byte271 << 8) | byte272;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte273 << 31) | (byte274 << 23) | (byte275 << 15) | (byte276 << 7) | (byte277 >>> 1);
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte277 & 1) << 38) | (byte278 << 30) | (byte279 << 22) | (byte280 << 14) | (byte281 << 6) | (byte282 >>> 2);
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte282 & 3) << 37) | (byte283 << 29) | (byte284 << 21) | (byte285 << 13) | (byte286 << 5) | (byte287 >>> 3);
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte287 & 7) << 36) | (byte288 << 28) | (byte289 << 20) | (byte290 << 12) | (byte291 << 4) | (byte292 >>> 4);
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte292 & 15) << 35) | (byte293 << 27) | (byte294 << 19) | (byte295 << 11) | (byte296 << 3) | (byte297 >>> 5);
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte297 & 31) << 34) | (byte298 << 26) | (byte299 << 18) | (byte300 << 10) | (byte301 << 2) | (byte302 >>> 6);
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte302 & 63) << 33) | (byte303 << 25) | (byte304 << 17) | (byte305 << 9) | (byte306 << 1) | (byte307 >>> 7);
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte307 & 127) << 32) | (byte308 << 24) | (byte309 << 16) | (byte310 << 8) | byte311;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked59.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked59.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked59.java	(copie de travail)
@@ -1,855 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked59 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 59;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 5;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 31L) << 54) | (block1 >>> 10);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1023L) << 49) | (block2 >>> 15);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 32767L) << 44) | (block3 >>> 20);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 1048575L) << 39) | (block4 >>> 25);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 33554431L) << 34) | (block5 >>> 30);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1073741823L) << 29) | (block6 >>> 35);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 34359738367L) << 24) | (block7 >>> 40);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 1099511627775L) << 19) | (block8 >>> 45);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 35184372088831L) << 14) | (block9 >>> 50);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1125899906842623L) << 9) | (block10 >>> 55);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 36028797018963967L) << 4) | (block11 >>> 60);
-        values[valuesOffset++] = (block11 >>> 1) & 576460752303423487L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 1L) << 58) | (block12 >>> 6);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 63L) << 53) | (block13 >>> 11);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 2047L) << 48) | (block14 >>> 16);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 65535L) << 43) | (block15 >>> 21);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 2097151L) << 38) | (block16 >>> 26);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 67108863L) << 33) | (block17 >>> 31);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 2147483647L) << 28) | (block18 >>> 36);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 68719476735L) << 23) | (block19 >>> 41);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 2199023255551L) << 18) | (block20 >>> 46);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 70368744177663L) << 13) | (block21 >>> 51);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 2251799813685247L) << 8) | (block22 >>> 56);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 72057594037927935L) << 3) | (block23 >>> 61);
-        values[valuesOffset++] = (block23 >>> 2) & 576460752303423487L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 3L) << 57) | (block24 >>> 7);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 127L) << 52) | (block25 >>> 12);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 4095L) << 47) | (block26 >>> 17);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 131071L) << 42) | (block27 >>> 22);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 4194303L) << 37) | (block28 >>> 27);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 134217727L) << 32) | (block29 >>> 32);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 4294967295L) << 27) | (block30 >>> 37);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 137438953471L) << 22) | (block31 >>> 42);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 4398046511103L) << 17) | (block32 >>> 47);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 140737488355327L) << 12) | (block33 >>> 52);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 4503599627370495L) << 7) | (block34 >>> 57);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 144115188075855871L) << 2) | (block35 >>> 62);
-        values[valuesOffset++] = (block35 >>> 3) & 576460752303423487L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 7L) << 56) | (block36 >>> 8);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 255L) << 51) | (block37 >>> 13);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 8191L) << 46) | (block38 >>> 18);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 262143L) << 41) | (block39 >>> 23);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 8388607L) << 36) | (block40 >>> 28);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 268435455L) << 31) | (block41 >>> 33);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 8589934591L) << 26) | (block42 >>> 38);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 274877906943L) << 21) | (block43 >>> 43);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 8796093022207L) << 16) | (block44 >>> 48);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 281474976710655L) << 11) | (block45 >>> 53);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 9007199254740991L) << 6) | (block46 >>> 58);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 288230376151711743L) << 1) | (block47 >>> 63);
-        values[valuesOffset++] = (block47 >>> 4) & 576460752303423487L;
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 15L) << 55) | (block48 >>> 9);
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 511L) << 50) | (block49 >>> 14);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 16383L) << 45) | (block50 >>> 19);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 524287L) << 40) | (block51 >>> 24);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 16777215L) << 35) | (block52 >>> 29);
-        final long block53 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block52 & 536870911L) << 30) | (block53 >>> 34);
-        final long block54 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block53 & 17179869183L) << 25) | (block54 >>> 39);
-        final long block55 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block54 & 549755813887L) << 20) | (block55 >>> 44);
-        final long block56 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block55 & 17592186044415L) << 15) | (block56 >>> 49);
-        final long block57 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block56 & 562949953421311L) << 10) | (block57 >>> 54);
-        final long block58 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block57 & 18014398509481983L) << 5) | (block58 >>> 59);
-        values[valuesOffset++] = block58 & 576460752303423487L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 51) | (byte1 << 43) | (byte2 << 35) | (byte3 << 27) | (byte4 << 19) | (byte5 << 11) | (byte6 << 3) | (byte7 >>> 5);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 31) << 54) | (byte8 << 46) | (byte9 << 38) | (byte10 << 30) | (byte11 << 22) | (byte12 << 14) | (byte13 << 6) | (byte14 >>> 2);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 3) << 57) | (byte15 << 49) | (byte16 << 41) | (byte17 << 33) | (byte18 << 25) | (byte19 << 17) | (byte20 << 9) | (byte21 << 1) | (byte22 >>> 7);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 127) << 52) | (byte23 << 44) | (byte24 << 36) | (byte25 << 28) | (byte26 << 20) | (byte27 << 12) | (byte28 << 4) | (byte29 >>> 4);
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 15) << 55) | (byte30 << 47) | (byte31 << 39) | (byte32 << 31) | (byte33 << 23) | (byte34 << 15) | (byte35 << 7) | (byte36 >>> 1);
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 1) << 58) | (byte37 << 50) | (byte38 << 42) | (byte39 << 34) | (byte40 << 26) | (byte41 << 18) | (byte42 << 10) | (byte43 << 2) | (byte44 >>> 6);
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte44 & 63) << 53) | (byte45 << 45) | (byte46 << 37) | (byte47 << 29) | (byte48 << 21) | (byte49 << 13) | (byte50 << 5) | (byte51 >>> 3);
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte51 & 7) << 56) | (byte52 << 48) | (byte53 << 40) | (byte54 << 32) | (byte55 << 24) | (byte56 << 16) | (byte57 << 8) | byte58;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte59 << 51) | (byte60 << 43) | (byte61 << 35) | (byte62 << 27) | (byte63 << 19) | (byte64 << 11) | (byte65 << 3) | (byte66 >>> 5);
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte66 & 31) << 54) | (byte67 << 46) | (byte68 << 38) | (byte69 << 30) | (byte70 << 22) | (byte71 << 14) | (byte72 << 6) | (byte73 >>> 2);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 3) << 57) | (byte74 << 49) | (byte75 << 41) | (byte76 << 33) | (byte77 << 25) | (byte78 << 17) | (byte79 << 9) | (byte80 << 1) | (byte81 >>> 7);
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 127) << 52) | (byte82 << 44) | (byte83 << 36) | (byte84 << 28) | (byte85 << 20) | (byte86 << 12) | (byte87 << 4) | (byte88 >>> 4);
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte88 & 15) << 55) | (byte89 << 47) | (byte90 << 39) | (byte91 << 31) | (byte92 << 23) | (byte93 << 15) | (byte94 << 7) | (byte95 >>> 1);
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte95 & 1) << 58) | (byte96 << 50) | (byte97 << 42) | (byte98 << 34) | (byte99 << 26) | (byte100 << 18) | (byte101 << 10) | (byte102 << 2) | (byte103 >>> 6);
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 63) << 53) | (byte104 << 45) | (byte105 << 37) | (byte106 << 29) | (byte107 << 21) | (byte108 << 13) | (byte109 << 5) | (byte110 >>> 3);
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte110 & 7) << 56) | (byte111 << 48) | (byte112 << 40) | (byte113 << 32) | (byte114 << 24) | (byte115 << 16) | (byte116 << 8) | byte117;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte118 << 51) | (byte119 << 43) | (byte120 << 35) | (byte121 << 27) | (byte122 << 19) | (byte123 << 11) | (byte124 << 3) | (byte125 >>> 5);
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte125 & 31) << 54) | (byte126 << 46) | (byte127 << 38) | (byte128 << 30) | (byte129 << 22) | (byte130 << 14) | (byte131 << 6) | (byte132 >>> 2);
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte132 & 3) << 57) | (byte133 << 49) | (byte134 << 41) | (byte135 << 33) | (byte136 << 25) | (byte137 << 17) | (byte138 << 9) | (byte139 << 1) | (byte140 >>> 7);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 127) << 52) | (byte141 << 44) | (byte142 << 36) | (byte143 << 28) | (byte144 << 20) | (byte145 << 12) | (byte146 << 4) | (byte147 >>> 4);
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte147 & 15) << 55) | (byte148 << 47) | (byte149 << 39) | (byte150 << 31) | (byte151 << 23) | (byte152 << 15) | (byte153 << 7) | (byte154 >>> 1);
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte154 & 1) << 58) | (byte155 << 50) | (byte156 << 42) | (byte157 << 34) | (byte158 << 26) | (byte159 << 18) | (byte160 << 10) | (byte161 << 2) | (byte162 >>> 6);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 63) << 53) | (byte163 << 45) | (byte164 << 37) | (byte165 << 29) | (byte166 << 21) | (byte167 << 13) | (byte168 << 5) | (byte169 >>> 3);
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte169 & 7) << 56) | (byte170 << 48) | (byte171 << 40) | (byte172 << 32) | (byte173 << 24) | (byte174 << 16) | (byte175 << 8) | byte176;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte177 << 51) | (byte178 << 43) | (byte179 << 35) | (byte180 << 27) | (byte181 << 19) | (byte182 << 11) | (byte183 << 3) | (byte184 >>> 5);
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 31) << 54) | (byte185 << 46) | (byte186 << 38) | (byte187 << 30) | (byte188 << 22) | (byte189 << 14) | (byte190 << 6) | (byte191 >>> 2);
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte191 & 3) << 57) | (byte192 << 49) | (byte193 << 41) | (byte194 << 33) | (byte195 << 25) | (byte196 << 17) | (byte197 << 9) | (byte198 << 1) | (byte199 >>> 7);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 127) << 52) | (byte200 << 44) | (byte201 << 36) | (byte202 << 28) | (byte203 << 20) | (byte204 << 12) | (byte205 << 4) | (byte206 >>> 4);
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 15) << 55) | (byte207 << 47) | (byte208 << 39) | (byte209 << 31) | (byte210 << 23) | (byte211 << 15) | (byte212 << 7) | (byte213 >>> 1);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 1) << 58) | (byte214 << 50) | (byte215 << 42) | (byte216 << 34) | (byte217 << 26) | (byte218 << 18) | (byte219 << 10) | (byte220 << 2) | (byte221 >>> 6);
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte221 & 63) << 53) | (byte222 << 45) | (byte223 << 37) | (byte224 << 29) | (byte225 << 21) | (byte226 << 13) | (byte227 << 5) | (byte228 >>> 3);
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 7) << 56) | (byte229 << 48) | (byte230 << 40) | (byte231 << 32) | (byte232 << 24) | (byte233 << 16) | (byte234 << 8) | byte235;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte236 << 51) | (byte237 << 43) | (byte238 << 35) | (byte239 << 27) | (byte240 << 19) | (byte241 << 11) | (byte242 << 3) | (byte243 >>> 5);
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte243 & 31) << 54) | (byte244 << 46) | (byte245 << 38) | (byte246 << 30) | (byte247 << 22) | (byte248 << 14) | (byte249 << 6) | (byte250 >>> 2);
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte250 & 3) << 57) | (byte251 << 49) | (byte252 << 41) | (byte253 << 33) | (byte254 << 25) | (byte255 << 17) | (byte256 << 9) | (byte257 << 1) | (byte258 >>> 7);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 127) << 52) | (byte259 << 44) | (byte260 << 36) | (byte261 << 28) | (byte262 << 20) | (byte263 << 12) | (byte264 << 4) | (byte265 >>> 4);
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte265 & 15) << 55) | (byte266 << 47) | (byte267 << 39) | (byte268 << 31) | (byte269 << 23) | (byte270 << 15) | (byte271 << 7) | (byte272 >>> 1);
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte272 & 1) << 58) | (byte273 << 50) | (byte274 << 42) | (byte275 << 34) | (byte276 << 26) | (byte277 << 18) | (byte278 << 10) | (byte279 << 2) | (byte280 >>> 6);
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte280 & 63) << 53) | (byte281 << 45) | (byte282 << 37) | (byte283 << 29) | (byte284 << 21) | (byte285 << 13) | (byte286 << 5) | (byte287 >>> 3);
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte287 & 7) << 56) | (byte288 << 48) | (byte289 << 40) | (byte290 << 32) | (byte291 << 24) | (byte292 << 16) | (byte293 << 8) | byte294;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte295 << 51) | (byte296 << 43) | (byte297 << 35) | (byte298 << 27) | (byte299 << 19) | (byte300 << 11) | (byte301 << 3) | (byte302 >>> 5);
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte302 & 31) << 54) | (byte303 << 46) | (byte304 << 38) | (byte305 << 30) | (byte306 << 22) | (byte307 << 14) | (byte308 << 6) | (byte309 >>> 2);
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte309 & 3) << 57) | (byte310 << 49) | (byte311 << 41) | (byte312 << 33) | (byte313 << 25) | (byte314 << 17) | (byte315 << 9) | (byte316 << 1) | (byte317 >>> 7);
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte317 & 127) << 52) | (byte318 << 44) | (byte319 << 36) | (byte320 << 28) | (byte321 << 20) | (byte322 << 12) | (byte323 << 4) | (byte324 >>> 4);
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte324 & 15) << 55) | (byte325 << 47) | (byte326 << 39) | (byte327 << 31) | (byte328 << 23) | (byte329 << 15) | (byte330 << 7) | (byte331 >>> 1);
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte331 & 1) << 58) | (byte332 << 50) | (byte333 << 42) | (byte334 << 34) | (byte335 << 26) | (byte336 << 18) | (byte337 << 10) | (byte338 << 2) | (byte339 >>> 6);
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte339 & 63) << 53) | (byte340 << 45) | (byte341 << 37) | (byte342 << 29) | (byte343 << 21) | (byte344 << 13) | (byte345 << 5) | (byte346 >>> 3);
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte346 & 7) << 56) | (byte347 << 48) | (byte348 << 40) | (byte349 << 32) | (byte350 << 24) | (byte351 << 16) | (byte352 << 8) | byte353;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte354 << 51) | (byte355 << 43) | (byte356 << 35) | (byte357 << 27) | (byte358 << 19) | (byte359 << 11) | (byte360 << 3) | (byte361 >>> 5);
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte361 & 31) << 54) | (byte362 << 46) | (byte363 << 38) | (byte364 << 30) | (byte365 << 22) | (byte366 << 14) | (byte367 << 6) | (byte368 >>> 2);
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte368 & 3) << 57) | (byte369 << 49) | (byte370 << 41) | (byte371 << 33) | (byte372 << 25) | (byte373 << 17) | (byte374 << 9) | (byte375 << 1) | (byte376 >>> 7);
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte376 & 127) << 52) | (byte377 << 44) | (byte378 << 36) | (byte379 << 28) | (byte380 << 20) | (byte381 << 12) | (byte382 << 4) | (byte383 >>> 4);
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte383 & 15) << 55) | (byte384 << 47) | (byte385 << 39) | (byte386 << 31) | (byte387 << 23) | (byte388 << 15) | (byte389 << 7) | (byte390 >>> 1);
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte390 & 1) << 58) | (byte391 << 50) | (byte392 << 42) | (byte393 << 34) | (byte394 << 26) | (byte395 << 18) | (byte396 << 10) | (byte397 << 2) | (byte398 >>> 6);
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte398 & 63) << 53) | (byte399 << 45) | (byte400 << 37) | (byte401 << 29) | (byte402 << 21) | (byte403 << 13) | (byte404 << 5) | (byte405 >>> 3);
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte405 & 7) << 56) | (byte406 << 48) | (byte407 << 40) | (byte408 << 32) | (byte409 << 24) | (byte410 << 16) | (byte411 << 8) | byte412;
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte413 << 51) | (byte414 << 43) | (byte415 << 35) | (byte416 << 27) | (byte417 << 19) | (byte418 << 11) | (byte419 << 3) | (byte420 >>> 5);
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        final long byte424 = blocks[blocksOffset++] & 0xFF;
-        final long byte425 = blocks[blocksOffset++] & 0xFF;
-        final long byte426 = blocks[blocksOffset++] & 0xFF;
-        final long byte427 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte420 & 31) << 54) | (byte421 << 46) | (byte422 << 38) | (byte423 << 30) | (byte424 << 22) | (byte425 << 14) | (byte426 << 6) | (byte427 >>> 2);
-        final long byte428 = blocks[blocksOffset++] & 0xFF;
-        final long byte429 = blocks[blocksOffset++] & 0xFF;
-        final long byte430 = blocks[blocksOffset++] & 0xFF;
-        final long byte431 = blocks[blocksOffset++] & 0xFF;
-        final long byte432 = blocks[blocksOffset++] & 0xFF;
-        final long byte433 = blocks[blocksOffset++] & 0xFF;
-        final long byte434 = blocks[blocksOffset++] & 0xFF;
-        final long byte435 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte427 & 3) << 57) | (byte428 << 49) | (byte429 << 41) | (byte430 << 33) | (byte431 << 25) | (byte432 << 17) | (byte433 << 9) | (byte434 << 1) | (byte435 >>> 7);
-        final long byte436 = blocks[blocksOffset++] & 0xFF;
-        final long byte437 = blocks[blocksOffset++] & 0xFF;
-        final long byte438 = blocks[blocksOffset++] & 0xFF;
-        final long byte439 = blocks[blocksOffset++] & 0xFF;
-        final long byte440 = blocks[blocksOffset++] & 0xFF;
-        final long byte441 = blocks[blocksOffset++] & 0xFF;
-        final long byte442 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte435 & 127) << 52) | (byte436 << 44) | (byte437 << 36) | (byte438 << 28) | (byte439 << 20) | (byte440 << 12) | (byte441 << 4) | (byte442 >>> 4);
-        final long byte443 = blocks[blocksOffset++] & 0xFF;
-        final long byte444 = blocks[blocksOffset++] & 0xFF;
-        final long byte445 = blocks[blocksOffset++] & 0xFF;
-        final long byte446 = blocks[blocksOffset++] & 0xFF;
-        final long byte447 = blocks[blocksOffset++] & 0xFF;
-        final long byte448 = blocks[blocksOffset++] & 0xFF;
-        final long byte449 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte442 & 15) << 55) | (byte443 << 47) | (byte444 << 39) | (byte445 << 31) | (byte446 << 23) | (byte447 << 15) | (byte448 << 7) | (byte449 >>> 1);
-        final long byte450 = blocks[blocksOffset++] & 0xFF;
-        final long byte451 = blocks[blocksOffset++] & 0xFF;
-        final long byte452 = blocks[blocksOffset++] & 0xFF;
-        final long byte453 = blocks[blocksOffset++] & 0xFF;
-        final long byte454 = blocks[blocksOffset++] & 0xFF;
-        final long byte455 = blocks[blocksOffset++] & 0xFF;
-        final long byte456 = blocks[blocksOffset++] & 0xFF;
-        final long byte457 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte449 & 1) << 58) | (byte450 << 50) | (byte451 << 42) | (byte452 << 34) | (byte453 << 26) | (byte454 << 18) | (byte455 << 10) | (byte456 << 2) | (byte457 >>> 6);
-        final long byte458 = blocks[blocksOffset++] & 0xFF;
-        final long byte459 = blocks[blocksOffset++] & 0xFF;
-        final long byte460 = blocks[blocksOffset++] & 0xFF;
-        final long byte461 = blocks[blocksOffset++] & 0xFF;
-        final long byte462 = blocks[blocksOffset++] & 0xFF;
-        final long byte463 = blocks[blocksOffset++] & 0xFF;
-        final long byte464 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte457 & 63) << 53) | (byte458 << 45) | (byte459 << 37) | (byte460 << 29) | (byte461 << 21) | (byte462 << 13) | (byte463 << 5) | (byte464 >>> 3);
-        final long byte465 = blocks[blocksOffset++] & 0xFF;
-        final long byte466 = blocks[blocksOffset++] & 0xFF;
-        final long byte467 = blocks[blocksOffset++] & 0xFF;
-        final long byte468 = blocks[blocksOffset++] & 0xFF;
-        final long byte469 = blocks[blocksOffset++] & 0xFF;
-        final long byte470 = blocks[blocksOffset++] & 0xFF;
-        final long byte471 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte464 & 7) << 56) | (byte465 << 48) | (byte466 << 40) | (byte467 << 32) | (byte468 << 24) | (byte469 << 16) | (byte470 << 8) | byte471;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 58);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 53);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 57);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 55);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 58);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 53);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 57);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 55);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked4.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked4.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked4.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked4 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
+final class BulkOperationPacked4 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 16;
+    public BulkOperationPacked4() {
+      super(4);
+      assert blockCount() == 1;
+      assert valueCount() == 16;
     }
 
     @Override
@@ -147,22 +144,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 4) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 4) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked8.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked8.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked8.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked8 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
+final class BulkOperationPacked8 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 8;
+    public BulkOperationPacked8() {
+      super(8);
+      assert blockCount() == 1;
+      assert valueCount() == 8;
     }
 
     @Override
@@ -115,22 +112,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 8) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 8) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock1.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock1.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock1.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock1 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock1 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPackedSingleBlock1() {
+      super(1);
     }
 
     @Override
@@ -339,22 +334,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 63);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 1) | (values[valuesOffset++] << 2) | (values[valuesOffset++] << 3) | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 5) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 7) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 55) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 57) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 59) | (values[valuesOffset++] << 60) | (values[valuesOffset++] << 61) | (values[valuesOffset++] << 62) | (values[valuesOffset++] << 63);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock5.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock5.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock5.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock5 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock5 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 12;
+    public BulkOperationPackedSingleBlock5() {
+      super(5);
     }
 
     @Override
@@ -131,22 +126,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 55);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 5) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 55);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked20.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked20.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked20.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked20 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 5;
-    }
+final class BulkOperationPacked20 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 16;
+    public BulkOperationPacked20() {
+      super(20);
+      assert blockCount() == 5;
+      assert valueCount() == 16;
     }
 
     @Override
@@ -219,30 +216,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 20) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 20) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked12.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked12.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked12.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked12 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 3;
-    }
+final class BulkOperationPacked12 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 16;
+    public BulkOperationPacked12() {
+      super(12);
+      assert blockCount() == 3;
+      assert valueCount() == 16;
     }
 
     @Override
@@ -183,26 +180,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 12) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 12) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked40.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked40.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked40.java	(copie de travail)
@@ -1,149 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked40 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 5;
-    }
-
-    @Override
-    public int valueCount() {
-      return 8;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 24;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 16777215L) << 16) | (block1 >>> 48);
-        values[valuesOffset++] = (block1 >>> 8) & 1099511627775L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 255L) << 32) | (block2 >>> 32);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4294967295L) << 8) | (block3 >>> 56);
-        values[valuesOffset++] = (block3 >>> 16) & 1099511627775L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 65535L) << 24) | (block4 >>> 40);
-        values[valuesOffset++] = block4 & 1099511627775L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 32) | (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte5 << 32) | (byte6 << 24) | (byte7 << 16) | (byte8 << 8) | byte9;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte10 << 32) | (byte11 << 24) | (byte12 << 16) | (byte13 << 8) | byte14;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte15 << 32) | (byte16 << 24) | (byte17 << 16) | (byte18 << 8) | byte19;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte20 << 32) | (byte21 << 24) | (byte22 << 16) | (byte23 << 8) | byte24;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte25 << 32) | (byte26 << 24) | (byte27 << 16) | (byte28 << 8) | byte29;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte30 << 32) | (byte31 << 24) | (byte32 << 16) | (byte33 << 8) | byte34;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte35 << 32) | (byte36 << 24) | (byte37 << 16) | (byte38 << 8) | byte39;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked32.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked32.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked32.java	(copie de travail)
@@ -1,112 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked32 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
-
-    @Override
-    public int valueCount() {
-      return 2;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 32);
-        values[valuesOffset++] = (int) (block0 & 4294967295L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3;
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte4 << 24) | (byte5 << 16) | (byte6 << 8) | byte7;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 32;
-        values[valuesOffset++] = block0 & 4294967295L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte4 << 24) | (byte5 << 16) | (byte6 << 8) | byte7;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked60.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked60.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked60.java	(copie de travail)
@@ -1,275 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked60 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 15;
-    }
-
-    @Override
-    public int valueCount() {
-      return 16;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 4;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 15L) << 56) | (block1 >>> 8);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 255L) << 52) | (block2 >>> 12);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4095L) << 48) | (block3 >>> 16);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 65535L) << 44) | (block4 >>> 20);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1048575L) << 40) | (block5 >>> 24);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 16777215L) << 36) | (block6 >>> 28);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 268435455L) << 32) | (block7 >>> 32);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4294967295L) << 28) | (block8 >>> 36);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 68719476735L) << 24) | (block9 >>> 40);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1099511627775L) << 20) | (block10 >>> 44);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 17592186044415L) << 16) | (block11 >>> 48);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 281474976710655L) << 12) | (block12 >>> 52);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4503599627370495L) << 8) | (block13 >>> 56);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 72057594037927935L) << 4) | (block14 >>> 60);
-        values[valuesOffset++] = block14 & 1152921504606846975L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 52) | (byte1 << 44) | (byte2 << 36) | (byte3 << 28) | (byte4 << 20) | (byte5 << 12) | (byte6 << 4) | (byte7 >>> 4);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 15) << 56) | (byte8 << 48) | (byte9 << 40) | (byte10 << 32) | (byte11 << 24) | (byte12 << 16) | (byte13 << 8) | byte14;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte15 << 52) | (byte16 << 44) | (byte17 << 36) | (byte18 << 28) | (byte19 << 20) | (byte20 << 12) | (byte21 << 4) | (byte22 >>> 4);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 15) << 56) | (byte23 << 48) | (byte24 << 40) | (byte25 << 32) | (byte26 << 24) | (byte27 << 16) | (byte28 << 8) | byte29;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte30 << 52) | (byte31 << 44) | (byte32 << 36) | (byte33 << 28) | (byte34 << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 56) | (byte38 << 48) | (byte39 << 40) | (byte40 << 32) | (byte41 << 24) | (byte42 << 16) | (byte43 << 8) | byte44;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte45 << 52) | (byte46 << 44) | (byte47 << 36) | (byte48 << 28) | (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 56) | (byte53 << 48) | (byte54 << 40) | (byte55 << 32) | (byte56 << 24) | (byte57 << 16) | (byte58 << 8) | byte59;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte60 << 52) | (byte61 << 44) | (byte62 << 36) | (byte63 << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 56) | (byte68 << 48) | (byte69 << 40) | (byte70 << 32) | (byte71 << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 52) | (byte76 << 44) | (byte77 << 36) | (byte78 << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 56) | (byte83 << 48) | (byte84 << 40) | (byte85 << 32) | (byte86 << 24) | (byte87 << 16) | (byte88 << 8) | byte89;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte90 << 52) | (byte91 << 44) | (byte92 << 36) | (byte93 << 28) | (byte94 << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 56) | (byte98 << 48) | (byte99 << 40) | (byte100 << 32) | (byte101 << 24) | (byte102 << 16) | (byte103 << 8) | byte104;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte105 << 52) | (byte106 << 44) | (byte107 << 36) | (byte108 << 28) | (byte109 << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 56) | (byte113 << 48) | (byte114 << 40) | (byte115 << 32) | (byte116 << 24) | (byte117 << 16) | (byte118 << 8) | byte119;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked24.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked24.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked24.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked24 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 3;
-    }
+final class BulkOperationPacked24 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 8;
+    public BulkOperationPacked24() {
+      super(24);
+      assert blockCount() == 3;
+      assert valueCount() == 8;
     }
 
     @Override
@@ -151,26 +148,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 24) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 24) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock9.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock9.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock9.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock9 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock9 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 7;
+    public BulkOperationPackedSingleBlock9() {
+      super(9);
     }
 
     @Override
@@ -111,22 +106,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 54);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 54);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked52.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked52.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked52.java	(copie de travail)
@@ -1,253 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked52 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 13;
-    }
-
-    @Override
-    public int valueCount() {
-      return 16;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 12;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 4095L) << 40) | (block1 >>> 24);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 16777215L) << 28) | (block2 >>> 36);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 68719476735L) << 16) | (block3 >>> 48);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 281474976710655L) << 4) | (block4 >>> 60);
-        values[valuesOffset++] = (block4 >>> 8) & 4503599627370495L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 255L) << 44) | (block5 >>> 20);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1048575L) << 32) | (block6 >>> 32);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 4294967295L) << 20) | (block7 >>> 44);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 17592186044415L) << 8) | (block8 >>> 56);
-        values[valuesOffset++] = (block8 >>> 4) & 4503599627370495L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 15L) << 48) | (block9 >>> 16);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 65535L) << 36) | (block10 >>> 28);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 268435455L) << 24) | (block11 >>> 40);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 1099511627775L) << 12) | (block12 >>> 52);
-        values[valuesOffset++] = block12 & 4503599627370495L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 44) | (byte1 << 36) | (byte2 << 28) | (byte3 << 20) | (byte4 << 12) | (byte5 << 4) | (byte6 >>> 4);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 15) << 48) | (byte7 << 40) | (byte8 << 32) | (byte9 << 24) | (byte10 << 16) | (byte11 << 8) | byte12;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte13 << 44) | (byte14 << 36) | (byte15 << 28) | (byte16 << 20) | (byte17 << 12) | (byte18 << 4) | (byte19 >>> 4);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 15) << 48) | (byte20 << 40) | (byte21 << 32) | (byte22 << 24) | (byte23 << 16) | (byte24 << 8) | byte25;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte26 << 44) | (byte27 << 36) | (byte28 << 28) | (byte29 << 20) | (byte30 << 12) | (byte31 << 4) | (byte32 >>> 4);
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 15) << 48) | (byte33 << 40) | (byte34 << 32) | (byte35 << 24) | (byte36 << 16) | (byte37 << 8) | byte38;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte39 << 44) | (byte40 << 36) | (byte41 << 28) | (byte42 << 20) | (byte43 << 12) | (byte44 << 4) | (byte45 >>> 4);
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 15) << 48) | (byte46 << 40) | (byte47 << 32) | (byte48 << 24) | (byte49 << 16) | (byte50 << 8) | byte51;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte52 << 44) | (byte53 << 36) | (byte54 << 28) | (byte55 << 20) | (byte56 << 12) | (byte57 << 4) | (byte58 >>> 4);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 15) << 48) | (byte59 << 40) | (byte60 << 32) | (byte61 << 24) | (byte62 << 16) | (byte63 << 8) | byte64;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte65 << 44) | (byte66 << 36) | (byte67 << 28) | (byte68 << 20) | (byte69 << 12) | (byte70 << 4) | (byte71 >>> 4);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 15) << 48) | (byte72 << 40) | (byte73 << 32) | (byte74 << 24) | (byte75 << 16) | (byte76 << 8) | byte77;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte78 << 44) | (byte79 << 36) | (byte80 << 28) | (byte81 << 20) | (byte82 << 12) | (byte83 << 4) | (byte84 >>> 4);
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 15) << 48) | (byte85 << 40) | (byte86 << 32) | (byte87 << 24) | (byte88 << 16) | (byte89 << 8) | byte90;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte91 << 44) | (byte92 << 36) | (byte93 << 28) | (byte94 << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 48) | (byte98 << 40) | (byte99 << 32) | (byte100 << 24) | (byte101 << 16) | (byte102 << 8) | byte103;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked16.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked16.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked16.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked16 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
+final class BulkOperationPacked16 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 4;
+    public BulkOperationPacked16() {
+      super(16);
+      assert blockCount() == 1;
+      assert valueCount() == 4;
     }
 
     @Override
@@ -99,22 +96,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 16) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 16) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked44.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked44.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked44.java	(copie de travail)
@@ -1,231 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked44 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 11;
-    }
-
-    @Override
-    public int valueCount() {
-      return 16;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 20;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 1048575L) << 24) | (block1 >>> 40);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1099511627775L) << 4) | (block2 >>> 60);
-        values[valuesOffset++] = (block2 >>> 16) & 17592186044415L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 65535L) << 28) | (block3 >>> 36);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 68719476735L) << 8) | (block4 >>> 56);
-        values[valuesOffset++] = (block4 >>> 12) & 17592186044415L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 4095L) << 32) | (block5 >>> 32);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 4294967295L) << 12) | (block6 >>> 52);
-        values[valuesOffset++] = (block6 >>> 8) & 17592186044415L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 255L) << 36) | (block7 >>> 28);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 268435455L) << 16) | (block8 >>> 48);
-        values[valuesOffset++] = (block8 >>> 4) & 17592186044415L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 15L) << 40) | (block9 >>> 24);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 16777215L) << 20) | (block10 >>> 44);
-        values[valuesOffset++] = block10 & 17592186044415L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 36) | (byte1 << 28) | (byte2 << 20) | (byte3 << 12) | (byte4 << 4) | (byte5 >>> 4);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 15) << 40) | (byte6 << 32) | (byte7 << 24) | (byte8 << 16) | (byte9 << 8) | byte10;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte11 << 36) | (byte12 << 28) | (byte13 << 20) | (byte14 << 12) | (byte15 << 4) | (byte16 >>> 4);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 15) << 40) | (byte17 << 32) | (byte18 << 24) | (byte19 << 16) | (byte20 << 8) | byte21;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte22 << 36) | (byte23 << 28) | (byte24 << 20) | (byte25 << 12) | (byte26 << 4) | (byte27 >>> 4);
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte27 & 15) << 40) | (byte28 << 32) | (byte29 << 24) | (byte30 << 16) | (byte31 << 8) | byte32;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte33 << 36) | (byte34 << 28) | (byte35 << 20) | (byte36 << 12) | (byte37 << 4) | (byte38 >>> 4);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 15) << 40) | (byte39 << 32) | (byte40 << 24) | (byte41 << 16) | (byte42 << 8) | byte43;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte44 << 36) | (byte45 << 28) | (byte46 << 20) | (byte47 << 12) | (byte48 << 4) | (byte49 >>> 4);
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte49 & 15) << 40) | (byte50 << 32) | (byte51 << 24) | (byte52 << 16) | (byte53 << 8) | byte54;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte55 << 36) | (byte56 << 28) | (byte57 << 20) | (byte58 << 12) | (byte59 << 4) | (byte60 >>> 4);
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte60 & 15) << 40) | (byte61 << 32) | (byte62 << 24) | (byte63 << 16) | (byte64 << 8) | byte65;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte66 << 36) | (byte67 << 28) | (byte68 << 20) | (byte69 << 12) | (byte70 << 4) | (byte71 >>> 4);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 15) << 40) | (byte72 << 32) | (byte73 << 24) | (byte74 << 16) | (byte75 << 8) | byte76;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte77 << 36) | (byte78 << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 40) | (byte83 << 32) | (byte84 << 24) | (byte85 << 16) | (byte86 << 8) | byte87;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked36.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked36.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked36.java	(copie de travail)
@@ -1,209 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked36 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 9;
-    }
-
-    @Override
-    public int valueCount() {
-      return 16;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 28;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 268435455L) << 8) | (block1 >>> 56);
-        values[valuesOffset++] = (block1 >>> 20) & 68719476735L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1048575L) << 16) | (block2 >>> 48);
-        values[valuesOffset++] = (block2 >>> 12) & 68719476735L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4095L) << 24) | (block3 >>> 40);
-        values[valuesOffset++] = (block3 >>> 4) & 68719476735L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 15L) << 32) | (block4 >>> 32);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 4294967295L) << 4) | (block5 >>> 60);
-        values[valuesOffset++] = (block5 >>> 24) & 68719476735L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 16777215L) << 12) | (block6 >>> 52);
-        values[valuesOffset++] = (block6 >>> 16) & 68719476735L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 65535L) << 20) | (block7 >>> 44);
-        values[valuesOffset++] = (block7 >>> 8) & 68719476735L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 255L) << 28) | (block8 >>> 36);
-        values[valuesOffset++] = block8 & 68719476735L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 28) | (byte1 << 20) | (byte2 << 12) | (byte3 << 4) | (byte4 >>> 4);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 15) << 32) | (byte5 << 24) | (byte6 << 16) | (byte7 << 8) | byte8;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte9 << 28) | (byte10 << 20) | (byte11 << 12) | (byte12 << 4) | (byte13 >>> 4);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 15) << 32) | (byte14 << 24) | (byte15 << 16) | (byte16 << 8) | byte17;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte18 << 28) | (byte19 << 20) | (byte20 << 12) | (byte21 << 4) | (byte22 >>> 4);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 15) << 32) | (byte23 << 24) | (byte24 << 16) | (byte25 << 8) | byte26;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte27 << 28) | (byte28 << 20) | (byte29 << 12) | (byte30 << 4) | (byte31 >>> 4);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 15) << 32) | (byte32 << 24) | (byte33 << 16) | (byte34 << 8) | byte35;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte36 << 28) | (byte37 << 20) | (byte38 << 12) | (byte39 << 4) | (byte40 >>> 4);
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 15) << 32) | (byte41 << 24) | (byte42 << 16) | (byte43 << 8) | byte44;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte45 << 28) | (byte46 << 20) | (byte47 << 12) | (byte48 << 4) | (byte49 >>> 4);
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte49 & 15) << 32) | (byte50 << 24) | (byte51 << 16) | (byte52 << 8) | byte53;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte54 << 28) | (byte55 << 20) | (byte56 << 12) | (byte57 << 4) | (byte58 >>> 4);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 15) << 32) | (byte59 << 24) | (byte60 << 16) | (byte61 << 8) | byte62;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte63 << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 32) | (byte68 << 24) | (byte69 << 16) | (byte70 << 8) | byte71;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked64.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked64.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked64.java	(copie de travail)
@@ -1,63 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.nio.LongBuffer;
-import java.nio.ByteBuffer;
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked64 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
-
-    @Override
-    public int valueCount() {
-      return 1;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      System.arraycopy(blocks, blocksOffset, values, valuesOffset, valueCount() * iterations);
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      LongBuffer.wrap(values, valuesOffset, iterations * valueCount()).put(ByteBuffer.wrap(blocks, blocksOffset, 8 * iterations * blockCount()).asLongBuffer());
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      System.arraycopy(values, valuesOffset, blocks, blocksOffset, valueCount() * iterations);
-    }
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked28.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked28.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked28.java	(copie de travail)
@@ -1,288 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked28 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 7;
-    }
-
-    @Override
-    public int valueCount() {
-      return 16;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 36);
-        values[valuesOffset++] = (int) ((block0 >>> 8) & 268435455L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 255L) << 20) | (block1 >>> 44));
-        values[valuesOffset++] = (int) ((block1 >>> 16) & 268435455L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 65535L) << 12) | (block2 >>> 52));
-        values[valuesOffset++] = (int) ((block2 >>> 24) & 268435455L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 16777215L) << 4) | (block3 >>> 60));
-        values[valuesOffset++] = (int) ((block3 >>> 32) & 268435455L);
-        values[valuesOffset++] = (int) ((block3 >>> 4) & 268435455L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 15L) << 24) | (block4 >>> 40));
-        values[valuesOffset++] = (int) ((block4 >>> 12) & 268435455L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 4095L) << 16) | (block5 >>> 48));
-        values[valuesOffset++] = (int) ((block5 >>> 20) & 268435455L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 1048575L) << 8) | (block6 >>> 56));
-        values[valuesOffset++] = (int) ((block6 >>> 28) & 268435455L);
-        values[valuesOffset++] = (int) (block6 & 268435455L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 20) | (byte1 << 12) | (byte2 << 4) | (byte3 >>> 4);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 15) << 24) | (byte4 << 16) | (byte5 << 8) | byte6;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte7 << 20) | (byte8 << 12) | (byte9 << 4) | (byte10 >>> 4);
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 15) << 24) | (byte11 << 16) | (byte12 << 8) | byte13;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte14 << 20) | (byte15 << 12) | (byte16 << 4) | (byte17 >>> 4);
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte17 & 15) << 24) | (byte18 << 16) | (byte19 << 8) | byte20;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte21 << 20) | (byte22 << 12) | (byte23 << 4) | (byte24 >>> 4);
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte24 & 15) << 24) | (byte25 << 16) | (byte26 << 8) | byte27;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte28 << 20) | (byte29 << 12) | (byte30 << 4) | (byte31 >>> 4);
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 15) << 24) | (byte32 << 16) | (byte33 << 8) | byte34;
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte35 << 20) | (byte36 << 12) | (byte37 << 4) | (byte38 >>> 4);
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 15) << 24) | (byte39 << 16) | (byte40 << 8) | byte41;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte42 << 20) | (byte43 << 12) | (byte44 << 4) | (byte45 >>> 4);
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 15) << 24) | (byte46 << 16) | (byte47 << 8) | byte48;
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 24) | (byte53 << 16) | (byte54 << 8) | byte55;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 36;
-        values[valuesOffset++] = (block0 >>> 8) & 268435455L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 255L) << 20) | (block1 >>> 44);
-        values[valuesOffset++] = (block1 >>> 16) & 268435455L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 65535L) << 12) | (block2 >>> 52);
-        values[valuesOffset++] = (block2 >>> 24) & 268435455L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 16777215L) << 4) | (block3 >>> 60);
-        values[valuesOffset++] = (block3 >>> 32) & 268435455L;
-        values[valuesOffset++] = (block3 >>> 4) & 268435455L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 15L) << 24) | (block4 >>> 40);
-        values[valuesOffset++] = (block4 >>> 12) & 268435455L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 4095L) << 16) | (block5 >>> 48);
-        values[valuesOffset++] = (block5 >>> 20) & 268435455L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1048575L) << 8) | (block6 >>> 56);
-        values[valuesOffset++] = (block6 >>> 28) & 268435455L;
-        values[valuesOffset++] = block6 & 268435455L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 20) | (byte1 << 12) | (byte2 << 4) | (byte3 >>> 4);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 15) << 24) | (byte4 << 16) | (byte5 << 8) | byte6;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte7 << 20) | (byte8 << 12) | (byte9 << 4) | (byte10 >>> 4);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 15) << 24) | (byte11 << 16) | (byte12 << 8) | byte13;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte14 << 20) | (byte15 << 12) | (byte16 << 4) | (byte17 >>> 4);
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte17 & 15) << 24) | (byte18 << 16) | (byte19 << 8) | byte20;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte21 << 20) | (byte22 << 12) | (byte23 << 4) | (byte24 >>> 4);
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte24 & 15) << 24) | (byte25 << 16) | (byte26 << 8) | byte27;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte28 << 20) | (byte29 << 12) | (byte30 << 4) | (byte31 >>> 4);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 15) << 24) | (byte32 << 16) | (byte33 << 8) | byte34;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte35 << 20) | (byte36 << 12) | (byte37 << 4) | (byte38 >>> 4);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 15) << 24) | (byte39 << 16) | (byte40 << 8) | byte41;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte42 << 20) | (byte43 << 12) | (byte44 << 4) | (byte45 >>> 4);
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 15) << 24) | (byte46 << 16) | (byte47 << 8) | byte48;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 24) | (byte53 << 16) | (byte54 << 8) | byte55;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 28) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 28) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked56.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked56.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked56.java	(copie de travail)
@@ -1,171 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked56 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 7;
-    }
-
-    @Override
-    public int valueCount() {
-      return 8;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 8;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 255L) << 48) | (block1 >>> 16);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 65535L) << 40) | (block2 >>> 24);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 16777215L) << 32) | (block3 >>> 32);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 4294967295L) << 24) | (block4 >>> 40);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1099511627775L) << 16) | (block5 >>> 48);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 281474976710655L) << 8) | (block6 >>> 56);
-        values[valuesOffset++] = block6 & 72057594037927935L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 48) | (byte1 << 40) | (byte2 << 32) | (byte3 << 24) | (byte4 << 16) | (byte5 << 8) | byte6;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte7 << 48) | (byte8 << 40) | (byte9 << 32) | (byte10 << 24) | (byte11 << 16) | (byte12 << 8) | byte13;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte14 << 48) | (byte15 << 40) | (byte16 << 32) | (byte17 << 24) | (byte18 << 16) | (byte19 << 8) | byte20;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte21 << 48) | (byte22 << 40) | (byte23 << 32) | (byte24 << 24) | (byte25 << 16) | (byte26 << 8) | byte27;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte28 << 48) | (byte29 << 40) | (byte30 << 32) | (byte31 << 24) | (byte32 << 16) | (byte33 << 8) | byte34;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte35 << 48) | (byte36 << 40) | (byte37 << 32) | (byte38 << 24) | (byte39 << 16) | (byte40 << 8) | byte41;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte42 << 48) | (byte43 << 40) | (byte44 << 32) | (byte45 << 24) | (byte46 << 16) | (byte47 << 8) | byte48;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte49 << 48) | (byte50 << 40) | (byte51 << 32) | (byte52 << 24) | (byte53 << 16) | (byte54 << 8) | byte55;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked48.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked48.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked48.java	(copie de travail)
@@ -1,119 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked48 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 3;
-    }
-
-    @Override
-    public int valueCount() {
-      return 4;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 16;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 65535L) << 32) | (block1 >>> 32);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 4294967295L) << 16) | (block2 >>> 48);
-        values[valuesOffset++] = block2 & 281474976710655L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 40) | (byte1 << 32) | (byte2 << 24) | (byte3 << 16) | (byte4 << 8) | byte5;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte6 << 40) | (byte7 << 32) | (byte8 << 24) | (byte9 << 16) | (byte10 << 8) | byte11;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte12 << 40) | (byte13 << 32) | (byte14 << 24) | (byte15 << 16) | (byte16 << 8) | byte17;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte18 << 40) | (byte19 << 32) | (byte20 << 24) | (byte21 << 16) | (byte22 << 8) | byte23;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock12.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock12.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock12.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock12 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock12 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 5;
+    public BulkOperationPackedSingleBlock12() {
+      super(12);
     }
 
     @Override
@@ -103,22 +98,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 48);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 48);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked1.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked1 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
+final class BulkOperationPacked1 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked1() {
+      super(1);
+      assert blockCount() == 1;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -339,22 +336,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset++] & 0xffffffffL) << 1) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 62) | (values[valuesOffset++] << 61) | (values[valuesOffset++] << 60) | (values[valuesOffset++] << 59) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 57) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 55) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 7) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 5) | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 3) | (values[valuesOffset++] << 2) | (values[valuesOffset++] << 1) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock32.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock32.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock32.java	(copie de travail)
@@ -1,112 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPackedSingleBlock32 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
-
-    @Override
-    public int valueCount() {
-      return 2;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block & 4294967295L);
-        values[valuesOffset++] = (int) (block >>> 32);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24);
-        values[valuesOffset++] = byte4 | (byte5 << 8) | (byte6 << 16) | (byte7 << 24);
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block = blocks[blocksOffset++];
-        values[valuesOffset++] = block & 4294967295L;
-        values[valuesOffset++] = block >>> 32;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24);
-        values[valuesOffset++] = byte4 | (byte5 << 8) | (byte6 << 16) | (byte7 << 24);
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 32);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 32);
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock16.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock16.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock16.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock16 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock16 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 4;
+    public BulkOperationPackedSingleBlock16() {
+      super(16);
     }
 
     @Override
@@ -99,22 +94,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 48);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 48);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked5.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked5.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked5.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked5 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 5;
-    }
+final class BulkOperationPacked5 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked5() {
+      super(5);
+      assert blockCount() == 5;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -411,30 +408,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 5) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 57) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 7) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 55) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 5) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked9.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked9.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked9.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked9 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 9;
-    }
+final class BulkOperationPacked9 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked9() {
+      super(9);
+      assert blockCount() == 9;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -483,38 +480,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 9) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 9) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock2.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock2.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock2.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock2 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock2 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPackedSingleBlock2() {
+      super(2);
     }
 
     @Override
@@ -211,22 +206,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 62);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 2) | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 60) | (values[valuesOffset++] << 62);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked21.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked21.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked21.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked21 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 21;
-    }
+final class BulkOperationPacked21 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked21() {
+      super(21);
+      assert blockCount() == 21;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -699,62 +696,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 21) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 21) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock6.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock6.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock6.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock6 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock6 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 10;
+    public BulkOperationPackedSingleBlock6() {
+      super(6);
     }
 
     @Override
@@ -123,22 +118,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 54);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 54);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked13.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked13.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked13.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked13 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 13;
-    }
+final class BulkOperationPacked13 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked13() {
+      super(13);
+      assert blockCount() == 13;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -555,46 +552,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 13) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 13) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked41.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked41.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked41.java	(copie de travail)
@@ -1,657 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked41 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 41;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 23;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 8388607L) << 18) | (block1 >>> 46);
-        values[valuesOffset++] = (block1 >>> 5) & 2199023255551L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 31L) << 36) | (block2 >>> 28);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 268435455L) << 13) | (block3 >>> 51);
-        values[valuesOffset++] = (block3 >>> 10) & 2199023255551L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 1023L) << 31) | (block4 >>> 33);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 8589934591L) << 8) | (block5 >>> 56);
-        values[valuesOffset++] = (block5 >>> 15) & 2199023255551L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 32767L) << 26) | (block6 >>> 38);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 274877906943L) << 3) | (block7 >>> 61);
-        values[valuesOffset++] = (block7 >>> 20) & 2199023255551L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 1048575L) << 21) | (block8 >>> 43);
-        values[valuesOffset++] = (block8 >>> 2) & 2199023255551L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 3L) << 39) | (block9 >>> 25);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 33554431L) << 16) | (block10 >>> 48);
-        values[valuesOffset++] = (block10 >>> 7) & 2199023255551L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 127L) << 34) | (block11 >>> 30);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 1073741823L) << 11) | (block12 >>> 53);
-        values[valuesOffset++] = (block12 >>> 12) & 2199023255551L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4095L) << 29) | (block13 >>> 35);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 34359738367L) << 6) | (block14 >>> 58);
-        values[valuesOffset++] = (block14 >>> 17) & 2199023255551L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 131071L) << 24) | (block15 >>> 40);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 1099511627775L) << 1) | (block16 >>> 63);
-        values[valuesOffset++] = (block16 >>> 22) & 2199023255551L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 4194303L) << 19) | (block17 >>> 45);
-        values[valuesOffset++] = (block17 >>> 4) & 2199023255551L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 15L) << 37) | (block18 >>> 27);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 134217727L) << 14) | (block19 >>> 50);
-        values[valuesOffset++] = (block19 >>> 9) & 2199023255551L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 511L) << 32) | (block20 >>> 32);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 4294967295L) << 9) | (block21 >>> 55);
-        values[valuesOffset++] = (block21 >>> 14) & 2199023255551L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 16383L) << 27) | (block22 >>> 37);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 137438953471L) << 4) | (block23 >>> 60);
-        values[valuesOffset++] = (block23 >>> 19) & 2199023255551L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 524287L) << 22) | (block24 >>> 42);
-        values[valuesOffset++] = (block24 >>> 1) & 2199023255551L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 1L) << 40) | (block25 >>> 24);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 16777215L) << 17) | (block26 >>> 47);
-        values[valuesOffset++] = (block26 >>> 6) & 2199023255551L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 63L) << 35) | (block27 >>> 29);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 536870911L) << 12) | (block28 >>> 52);
-        values[valuesOffset++] = (block28 >>> 11) & 2199023255551L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 2047L) << 30) | (block29 >>> 34);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 17179869183L) << 7) | (block30 >>> 57);
-        values[valuesOffset++] = (block30 >>> 16) & 2199023255551L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 65535L) << 25) | (block31 >>> 39);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 549755813887L) << 2) | (block32 >>> 62);
-        values[valuesOffset++] = (block32 >>> 21) & 2199023255551L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 2097151L) << 20) | (block33 >>> 44);
-        values[valuesOffset++] = (block33 >>> 3) & 2199023255551L;
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 7L) << 38) | (block34 >>> 26);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 67108863L) << 15) | (block35 >>> 49);
-        values[valuesOffset++] = (block35 >>> 8) & 2199023255551L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 255L) << 33) | (block36 >>> 31);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 2147483647L) << 10) | (block37 >>> 54);
-        values[valuesOffset++] = (block37 >>> 13) & 2199023255551L;
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 8191L) << 28) | (block38 >>> 36);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 68719476735L) << 5) | (block39 >>> 59);
-        values[valuesOffset++] = (block39 >>> 18) & 2199023255551L;
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 262143L) << 23) | (block40 >>> 41);
-        values[valuesOffset++] = block40 & 2199023255551L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 33) | (byte1 << 25) | (byte2 << 17) | (byte3 << 9) | (byte4 << 1) | (byte5 >>> 7);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 127) << 34) | (byte6 << 26) | (byte7 << 18) | (byte8 << 10) | (byte9 << 2) | (byte10 >>> 6);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 63) << 35) | (byte11 << 27) | (byte12 << 19) | (byte13 << 11) | (byte14 << 3) | (byte15 >>> 5);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 31) << 36) | (byte16 << 28) | (byte17 << 20) | (byte18 << 12) | (byte19 << 4) | (byte20 >>> 4);
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 15) << 37) | (byte21 << 29) | (byte22 << 21) | (byte23 << 13) | (byte24 << 5) | (byte25 >>> 3);
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte25 & 7) << 38) | (byte26 << 30) | (byte27 << 22) | (byte28 << 14) | (byte29 << 6) | (byte30 >>> 2);
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 3) << 39) | (byte31 << 31) | (byte32 << 23) | (byte33 << 15) | (byte34 << 7) | (byte35 >>> 1);
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte35 & 1) << 40) | (byte36 << 32) | (byte37 << 24) | (byte38 << 16) | (byte39 << 8) | byte40;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte41 << 33) | (byte42 << 25) | (byte43 << 17) | (byte44 << 9) | (byte45 << 1) | (byte46 >>> 7);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 127) << 34) | (byte47 << 26) | (byte48 << 18) | (byte49 << 10) | (byte50 << 2) | (byte51 >>> 6);
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte51 & 63) << 35) | (byte52 << 27) | (byte53 << 19) | (byte54 << 11) | (byte55 << 3) | (byte56 >>> 5);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 31) << 36) | (byte57 << 28) | (byte58 << 20) | (byte59 << 12) | (byte60 << 4) | (byte61 >>> 4);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 15) << 37) | (byte62 << 29) | (byte63 << 21) | (byte64 << 13) | (byte65 << 5) | (byte66 >>> 3);
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte66 & 7) << 38) | (byte67 << 30) | (byte68 << 22) | (byte69 << 14) | (byte70 << 6) | (byte71 >>> 2);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 3) << 39) | (byte72 << 31) | (byte73 << 23) | (byte74 << 15) | (byte75 << 7) | (byte76 >>> 1);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 1) << 40) | (byte77 << 32) | (byte78 << 24) | (byte79 << 16) | (byte80 << 8) | byte81;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte82 << 33) | (byte83 << 25) | (byte84 << 17) | (byte85 << 9) | (byte86 << 1) | (byte87 >>> 7);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 127) << 34) | (byte88 << 26) | (byte89 << 18) | (byte90 << 10) | (byte91 << 2) | (byte92 >>> 6);
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte92 & 63) << 35) | (byte93 << 27) | (byte94 << 19) | (byte95 << 11) | (byte96 << 3) | (byte97 >>> 5);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 31) << 36) | (byte98 << 28) | (byte99 << 20) | (byte100 << 12) | (byte101 << 4) | (byte102 >>> 4);
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte102 & 15) << 37) | (byte103 << 29) | (byte104 << 21) | (byte105 << 13) | (byte106 << 5) | (byte107 >>> 3);
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte107 & 7) << 38) | (byte108 << 30) | (byte109 << 22) | (byte110 << 14) | (byte111 << 6) | (byte112 >>> 2);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 3) << 39) | (byte113 << 31) | (byte114 << 23) | (byte115 << 15) | (byte116 << 7) | (byte117 >>> 1);
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte117 & 1) << 40) | (byte118 << 32) | (byte119 << 24) | (byte120 << 16) | (byte121 << 8) | byte122;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte123 << 33) | (byte124 << 25) | (byte125 << 17) | (byte126 << 9) | (byte127 << 1) | (byte128 >>> 7);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 127) << 34) | (byte129 << 26) | (byte130 << 18) | (byte131 << 10) | (byte132 << 2) | (byte133 >>> 6);
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte133 & 63) << 35) | (byte134 << 27) | (byte135 << 19) | (byte136 << 11) | (byte137 << 3) | (byte138 >>> 5);
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte138 & 31) << 36) | (byte139 << 28) | (byte140 << 20) | (byte141 << 12) | (byte142 << 4) | (byte143 >>> 4);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 15) << 37) | (byte144 << 29) | (byte145 << 21) | (byte146 << 13) | (byte147 << 5) | (byte148 >>> 3);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 7) << 38) | (byte149 << 30) | (byte150 << 22) | (byte151 << 14) | (byte152 << 6) | (byte153 >>> 2);
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte153 & 3) << 39) | (byte154 << 31) | (byte155 << 23) | (byte156 << 15) | (byte157 << 7) | (byte158 >>> 1);
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte158 & 1) << 40) | (byte159 << 32) | (byte160 << 24) | (byte161 << 16) | (byte162 << 8) | byte163;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte164 << 33) | (byte165 << 25) | (byte166 << 17) | (byte167 << 9) | (byte168 << 1) | (byte169 >>> 7);
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte169 & 127) << 34) | (byte170 << 26) | (byte171 << 18) | (byte172 << 10) | (byte173 << 2) | (byte174 >>> 6);
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte174 & 63) << 35) | (byte175 << 27) | (byte176 << 19) | (byte177 << 11) | (byte178 << 3) | (byte179 >>> 5);
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte179 & 31) << 36) | (byte180 << 28) | (byte181 << 20) | (byte182 << 12) | (byte183 << 4) | (byte184 >>> 4);
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 15) << 37) | (byte185 << 29) | (byte186 << 21) | (byte187 << 13) | (byte188 << 5) | (byte189 >>> 3);
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 7) << 38) | (byte190 << 30) | (byte191 << 22) | (byte192 << 14) | (byte193 << 6) | (byte194 >>> 2);
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte194 & 3) << 39) | (byte195 << 31) | (byte196 << 23) | (byte197 << 15) | (byte198 << 7) | (byte199 >>> 1);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 1) << 40) | (byte200 << 32) | (byte201 << 24) | (byte202 << 16) | (byte203 << 8) | byte204;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte205 << 33) | (byte206 << 25) | (byte207 << 17) | (byte208 << 9) | (byte209 << 1) | (byte210 >>> 7);
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 127) << 34) | (byte211 << 26) | (byte212 << 18) | (byte213 << 10) | (byte214 << 2) | (byte215 >>> 6);
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte215 & 63) << 35) | (byte216 << 27) | (byte217 << 19) | (byte218 << 11) | (byte219 << 3) | (byte220 >>> 5);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 31) << 36) | (byte221 << 28) | (byte222 << 20) | (byte223 << 12) | (byte224 << 4) | (byte225 >>> 4);
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte225 & 15) << 37) | (byte226 << 29) | (byte227 << 21) | (byte228 << 13) | (byte229 << 5) | (byte230 >>> 3);
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte230 & 7) << 38) | (byte231 << 30) | (byte232 << 22) | (byte233 << 14) | (byte234 << 6) | (byte235 >>> 2);
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte235 & 3) << 39) | (byte236 << 31) | (byte237 << 23) | (byte238 << 15) | (byte239 << 7) | (byte240 >>> 1);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 1) << 40) | (byte241 << 32) | (byte242 << 24) | (byte243 << 16) | (byte244 << 8) | byte245;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte246 << 33) | (byte247 << 25) | (byte248 << 17) | (byte249 << 9) | (byte250 << 1) | (byte251 >>> 7);
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte251 & 127) << 34) | (byte252 << 26) | (byte253 << 18) | (byte254 << 10) | (byte255 << 2) | (byte256 >>> 6);
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte256 & 63) << 35) | (byte257 << 27) | (byte258 << 19) | (byte259 << 11) | (byte260 << 3) | (byte261 >>> 5);
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte261 & 31) << 36) | (byte262 << 28) | (byte263 << 20) | (byte264 << 12) | (byte265 << 4) | (byte266 >>> 4);
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte266 & 15) << 37) | (byte267 << 29) | (byte268 << 21) | (byte269 << 13) | (byte270 << 5) | (byte271 >>> 3);
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte271 & 7) << 38) | (byte272 << 30) | (byte273 << 22) | (byte274 << 14) | (byte275 << 6) | (byte276 >>> 2);
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte276 & 3) << 39) | (byte277 << 31) | (byte278 << 23) | (byte279 << 15) | (byte280 << 7) | (byte281 >>> 1);
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte281 & 1) << 40) | (byte282 << 32) | (byte283 << 24) | (byte284 << 16) | (byte285 << 8) | byte286;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte287 << 33) | (byte288 << 25) | (byte289 << 17) | (byte290 << 9) | (byte291 << 1) | (byte292 >>> 7);
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte292 & 127) << 34) | (byte293 << 26) | (byte294 << 18) | (byte295 << 10) | (byte296 << 2) | (byte297 >>> 6);
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte297 & 63) << 35) | (byte298 << 27) | (byte299 << 19) | (byte300 << 11) | (byte301 << 3) | (byte302 >>> 5);
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte302 & 31) << 36) | (byte303 << 28) | (byte304 << 20) | (byte305 << 12) | (byte306 << 4) | (byte307 >>> 4);
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte307 & 15) << 37) | (byte308 << 29) | (byte309 << 21) | (byte310 << 13) | (byte311 << 5) | (byte312 >>> 3);
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte312 & 7) << 38) | (byte313 << 30) | (byte314 << 22) | (byte315 << 14) | (byte316 << 6) | (byte317 >>> 2);
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte317 & 3) << 39) | (byte318 << 31) | (byte319 << 23) | (byte320 << 15) | (byte321 << 7) | (byte322 >>> 1);
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte322 & 1) << 40) | (byte323 << 32) | (byte324 << 24) | (byte325 << 16) | (byte326 << 8) | byte327;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked33.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked33.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked33.java	(copie de travail)
@@ -1,569 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked33 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 33;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 31;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 2147483647L) << 2) | (block1 >>> 62);
-        values[valuesOffset++] = (block1 >>> 29) & 8589934591L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 536870911L) << 4) | (block2 >>> 60);
-        values[valuesOffset++] = (block2 >>> 27) & 8589934591L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 134217727L) << 6) | (block3 >>> 58);
-        values[valuesOffset++] = (block3 >>> 25) & 8589934591L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 33554431L) << 8) | (block4 >>> 56);
-        values[valuesOffset++] = (block4 >>> 23) & 8589934591L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 8388607L) << 10) | (block5 >>> 54);
-        values[valuesOffset++] = (block5 >>> 21) & 8589934591L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 2097151L) << 12) | (block6 >>> 52);
-        values[valuesOffset++] = (block6 >>> 19) & 8589934591L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 524287L) << 14) | (block7 >>> 50);
-        values[valuesOffset++] = (block7 >>> 17) & 8589934591L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 131071L) << 16) | (block8 >>> 48);
-        values[valuesOffset++] = (block8 >>> 15) & 8589934591L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 32767L) << 18) | (block9 >>> 46);
-        values[valuesOffset++] = (block9 >>> 13) & 8589934591L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 8191L) << 20) | (block10 >>> 44);
-        values[valuesOffset++] = (block10 >>> 11) & 8589934591L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 2047L) << 22) | (block11 >>> 42);
-        values[valuesOffset++] = (block11 >>> 9) & 8589934591L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 511L) << 24) | (block12 >>> 40);
-        values[valuesOffset++] = (block12 >>> 7) & 8589934591L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 127L) << 26) | (block13 >>> 38);
-        values[valuesOffset++] = (block13 >>> 5) & 8589934591L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 31L) << 28) | (block14 >>> 36);
-        values[valuesOffset++] = (block14 >>> 3) & 8589934591L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 7L) << 30) | (block15 >>> 34);
-        values[valuesOffset++] = (block15 >>> 1) & 8589934591L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 1L) << 32) | (block16 >>> 32);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 4294967295L) << 1) | (block17 >>> 63);
-        values[valuesOffset++] = (block17 >>> 30) & 8589934591L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 1073741823L) << 3) | (block18 >>> 61);
-        values[valuesOffset++] = (block18 >>> 28) & 8589934591L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 268435455L) << 5) | (block19 >>> 59);
-        values[valuesOffset++] = (block19 >>> 26) & 8589934591L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 67108863L) << 7) | (block20 >>> 57);
-        values[valuesOffset++] = (block20 >>> 24) & 8589934591L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 16777215L) << 9) | (block21 >>> 55);
-        values[valuesOffset++] = (block21 >>> 22) & 8589934591L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 4194303L) << 11) | (block22 >>> 53);
-        values[valuesOffset++] = (block22 >>> 20) & 8589934591L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 1048575L) << 13) | (block23 >>> 51);
-        values[valuesOffset++] = (block23 >>> 18) & 8589934591L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 262143L) << 15) | (block24 >>> 49);
-        values[valuesOffset++] = (block24 >>> 16) & 8589934591L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 65535L) << 17) | (block25 >>> 47);
-        values[valuesOffset++] = (block25 >>> 14) & 8589934591L;
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 16383L) << 19) | (block26 >>> 45);
-        values[valuesOffset++] = (block26 >>> 12) & 8589934591L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 4095L) << 21) | (block27 >>> 43);
-        values[valuesOffset++] = (block27 >>> 10) & 8589934591L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 1023L) << 23) | (block28 >>> 41);
-        values[valuesOffset++] = (block28 >>> 8) & 8589934591L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 255L) << 25) | (block29 >>> 39);
-        values[valuesOffset++] = (block29 >>> 6) & 8589934591L;
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 63L) << 27) | (block30 >>> 37);
-        values[valuesOffset++] = (block30 >>> 4) & 8589934591L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 15L) << 29) | (block31 >>> 35);
-        values[valuesOffset++] = (block31 >>> 2) & 8589934591L;
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 3L) << 31) | (block32 >>> 33);
-        values[valuesOffset++] = block32 & 8589934591L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 25) | (byte1 << 17) | (byte2 << 9) | (byte3 << 1) | (byte4 >>> 7);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 127) << 26) | (byte5 << 18) | (byte6 << 10) | (byte7 << 2) | (byte8 >>> 6);
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte8 & 63) << 27) | (byte9 << 19) | (byte10 << 11) | (byte11 << 3) | (byte12 >>> 5);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 31) << 28) | (byte13 << 20) | (byte14 << 12) | (byte15 << 4) | (byte16 >>> 4);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 15) << 29) | (byte17 << 21) | (byte18 << 13) | (byte19 << 5) | (byte20 >>> 3);
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 7) << 30) | (byte21 << 22) | (byte22 << 14) | (byte23 << 6) | (byte24 >>> 2);
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte24 & 3) << 31) | (byte25 << 23) | (byte26 << 15) | (byte27 << 7) | (byte28 >>> 1);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 1) << 32) | (byte29 << 24) | (byte30 << 16) | (byte31 << 8) | byte32;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte33 << 25) | (byte34 << 17) | (byte35 << 9) | (byte36 << 1) | (byte37 >>> 7);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 127) << 26) | (byte38 << 18) | (byte39 << 10) | (byte40 << 2) | (byte41 >>> 6);
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 63) << 27) | (byte42 << 19) | (byte43 << 11) | (byte44 << 3) | (byte45 >>> 5);
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 31) << 28) | (byte46 << 20) | (byte47 << 12) | (byte48 << 4) | (byte49 >>> 4);
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte49 & 15) << 29) | (byte50 << 21) | (byte51 << 13) | (byte52 << 5) | (byte53 >>> 3);
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 7) << 30) | (byte54 << 22) | (byte55 << 14) | (byte56 << 6) | (byte57 >>> 2);
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 3) << 31) | (byte58 << 23) | (byte59 << 15) | (byte60 << 7) | (byte61 >>> 1);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 1) << 32) | (byte62 << 24) | (byte63 << 16) | (byte64 << 8) | byte65;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte66 << 25) | (byte67 << 17) | (byte68 << 9) | (byte69 << 1) | (byte70 >>> 7);
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte70 & 127) << 26) | (byte71 << 18) | (byte72 << 10) | (byte73 << 2) | (byte74 >>> 6);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 63) << 27) | (byte75 << 19) | (byte76 << 11) | (byte77 << 3) | (byte78 >>> 5);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 31) << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 29) | (byte83 << 21) | (byte84 << 13) | (byte85 << 5) | (byte86 >>> 3);
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 7) << 30) | (byte87 << 22) | (byte88 << 14) | (byte89 << 6) | (byte90 >>> 2);
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 3) << 31) | (byte91 << 23) | (byte92 << 15) | (byte93 << 7) | (byte94 >>> 1);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 1) << 32) | (byte95 << 24) | (byte96 << 16) | (byte97 << 8) | byte98;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte99 << 25) | (byte100 << 17) | (byte101 << 9) | (byte102 << 1) | (byte103 >>> 7);
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 127) << 26) | (byte104 << 18) | (byte105 << 10) | (byte106 << 2) | (byte107 >>> 6);
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte107 & 63) << 27) | (byte108 << 19) | (byte109 << 11) | (byte110 << 3) | (byte111 >>> 5);
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte111 & 31) << 28) | (byte112 << 20) | (byte113 << 12) | (byte114 << 4) | (byte115 >>> 4);
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte115 & 15) << 29) | (byte116 << 21) | (byte117 << 13) | (byte118 << 5) | (byte119 >>> 3);
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte119 & 7) << 30) | (byte120 << 22) | (byte121 << 14) | (byte122 << 6) | (byte123 >>> 2);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 3) << 31) | (byte124 << 23) | (byte125 << 15) | (byte126 << 7) | (byte127 >>> 1);
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte127 & 1) << 32) | (byte128 << 24) | (byte129 << 16) | (byte130 << 8) | byte131;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte132 << 25) | (byte133 << 17) | (byte134 << 9) | (byte135 << 1) | (byte136 >>> 7);
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte136 & 127) << 26) | (byte137 << 18) | (byte138 << 10) | (byte139 << 2) | (byte140 >>> 6);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 63) << 27) | (byte141 << 19) | (byte142 << 11) | (byte143 << 3) | (byte144 >>> 5);
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte144 & 31) << 28) | (byte145 << 20) | (byte146 << 12) | (byte147 << 4) | (byte148 >>> 4);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 15) << 29) | (byte149 << 21) | (byte150 << 13) | (byte151 << 5) | (byte152 >>> 3);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 7) << 30) | (byte153 << 22) | (byte154 << 14) | (byte155 << 6) | (byte156 >>> 2);
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte156 & 3) << 31) | (byte157 << 23) | (byte158 << 15) | (byte159 << 7) | (byte160 >>> 1);
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte160 & 1) << 32) | (byte161 << 24) | (byte162 << 16) | (byte163 << 8) | byte164;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte165 << 25) | (byte166 << 17) | (byte167 << 9) | (byte168 << 1) | (byte169 >>> 7);
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte169 & 127) << 26) | (byte170 << 18) | (byte171 << 10) | (byte172 << 2) | (byte173 >>> 6);
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte173 & 63) << 27) | (byte174 << 19) | (byte175 << 11) | (byte176 << 3) | (byte177 >>> 5);
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte177 & 31) << 28) | (byte178 << 20) | (byte179 << 12) | (byte180 << 4) | (byte181 >>> 4);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 15) << 29) | (byte182 << 21) | (byte183 << 13) | (byte184 << 5) | (byte185 >>> 3);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 7) << 30) | (byte186 << 22) | (byte187 << 14) | (byte188 << 6) | (byte189 >>> 2);
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 3) << 31) | (byte190 << 23) | (byte191 << 15) | (byte192 << 7) | (byte193 >>> 1);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 1) << 32) | (byte194 << 24) | (byte195 << 16) | (byte196 << 8) | byte197;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte198 << 25) | (byte199 << 17) | (byte200 << 9) | (byte201 << 1) | (byte202 >>> 7);
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 127) << 26) | (byte203 << 18) | (byte204 << 10) | (byte205 << 2) | (byte206 >>> 6);
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 63) << 27) | (byte207 << 19) | (byte208 << 11) | (byte209 << 3) | (byte210 >>> 5);
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 31) << 28) | (byte211 << 20) | (byte212 << 12) | (byte213 << 4) | (byte214 >>> 4);
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte214 & 15) << 29) | (byte215 << 21) | (byte216 << 13) | (byte217 << 5) | (byte218 >>> 3);
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte218 & 7) << 30) | (byte219 << 22) | (byte220 << 14) | (byte221 << 6) | (byte222 >>> 2);
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte222 & 3) << 31) | (byte223 << 23) | (byte224 << 15) | (byte225 << 7) | (byte226 >>> 1);
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte226 & 1) << 32) | (byte227 << 24) | (byte228 << 16) | (byte229 << 8) | byte230;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte231 << 25) | (byte232 << 17) | (byte233 << 9) | (byte234 << 1) | (byte235 >>> 7);
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte235 & 127) << 26) | (byte236 << 18) | (byte237 << 10) | (byte238 << 2) | (byte239 >>> 6);
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte239 & 63) << 27) | (byte240 << 19) | (byte241 << 11) | (byte242 << 3) | (byte243 >>> 5);
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte243 & 31) << 28) | (byte244 << 20) | (byte245 << 12) | (byte246 << 4) | (byte247 >>> 4);
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte247 & 15) << 29) | (byte248 << 21) | (byte249 << 13) | (byte250 << 5) | (byte251 >>> 3);
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte251 & 7) << 30) | (byte252 << 22) | (byte253 << 14) | (byte254 << 6) | (byte255 >>> 2);
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte255 & 3) << 31) | (byte256 << 23) | (byte257 << 15) | (byte258 << 7) | (byte259 >>> 1);
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte259 & 1) << 32) | (byte260 << 24) | (byte261 << 16) | (byte262 << 8) | byte263;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked25.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked25.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked25.java	(copie de travail)
@@ -1,840 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked25 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 25;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 39);
-        values[valuesOffset++] = (int) ((block0 >>> 14) & 33554431L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 16383L) << 11) | (block1 >>> 53));
-        values[valuesOffset++] = (int) ((block1 >>> 28) & 33554431L);
-        values[valuesOffset++] = (int) ((block1 >>> 3) & 33554431L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 7L) << 22) | (block2 >>> 42));
-        values[valuesOffset++] = (int) ((block2 >>> 17) & 33554431L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 131071L) << 8) | (block3 >>> 56));
-        values[valuesOffset++] = (int) ((block3 >>> 31) & 33554431L);
-        values[valuesOffset++] = (int) ((block3 >>> 6) & 33554431L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 63L) << 19) | (block4 >>> 45));
-        values[valuesOffset++] = (int) ((block4 >>> 20) & 33554431L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 1048575L) << 5) | (block5 >>> 59));
-        values[valuesOffset++] = (int) ((block5 >>> 34) & 33554431L);
-        values[valuesOffset++] = (int) ((block5 >>> 9) & 33554431L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 511L) << 16) | (block6 >>> 48));
-        values[valuesOffset++] = (int) ((block6 >>> 23) & 33554431L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 8388607L) << 2) | (block7 >>> 62));
-        values[valuesOffset++] = (int) ((block7 >>> 37) & 33554431L);
-        values[valuesOffset++] = (int) ((block7 >>> 12) & 33554431L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 4095L) << 13) | (block8 >>> 51));
-        values[valuesOffset++] = (int) ((block8 >>> 26) & 33554431L);
-        values[valuesOffset++] = (int) ((block8 >>> 1) & 33554431L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 1L) << 24) | (block9 >>> 40));
-        values[valuesOffset++] = (int) ((block9 >>> 15) & 33554431L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 32767L) << 10) | (block10 >>> 54));
-        values[valuesOffset++] = (int) ((block10 >>> 29) & 33554431L);
-        values[valuesOffset++] = (int) ((block10 >>> 4) & 33554431L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 15L) << 21) | (block11 >>> 43));
-        values[valuesOffset++] = (int) ((block11 >>> 18) & 33554431L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 262143L) << 7) | (block12 >>> 57));
-        values[valuesOffset++] = (int) ((block12 >>> 32) & 33554431L);
-        values[valuesOffset++] = (int) ((block12 >>> 7) & 33554431L);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block12 & 127L) << 18) | (block13 >>> 46));
-        values[valuesOffset++] = (int) ((block13 >>> 21) & 33554431L);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block13 & 2097151L) << 4) | (block14 >>> 60));
-        values[valuesOffset++] = (int) ((block14 >>> 35) & 33554431L);
-        values[valuesOffset++] = (int) ((block14 >>> 10) & 33554431L);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block14 & 1023L) << 15) | (block15 >>> 49));
-        values[valuesOffset++] = (int) ((block15 >>> 24) & 33554431L);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block15 & 16777215L) << 1) | (block16 >>> 63));
-        values[valuesOffset++] = (int) ((block16 >>> 38) & 33554431L);
-        values[valuesOffset++] = (int) ((block16 >>> 13) & 33554431L);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block16 & 8191L) << 12) | (block17 >>> 52));
-        values[valuesOffset++] = (int) ((block17 >>> 27) & 33554431L);
-        values[valuesOffset++] = (int) ((block17 >>> 2) & 33554431L);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block17 & 3L) << 23) | (block18 >>> 41));
-        values[valuesOffset++] = (int) ((block18 >>> 16) & 33554431L);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block18 & 65535L) << 9) | (block19 >>> 55));
-        values[valuesOffset++] = (int) ((block19 >>> 30) & 33554431L);
-        values[valuesOffset++] = (int) ((block19 >>> 5) & 33554431L);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block19 & 31L) << 20) | (block20 >>> 44));
-        values[valuesOffset++] = (int) ((block20 >>> 19) & 33554431L);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block20 & 524287L) << 6) | (block21 >>> 58));
-        values[valuesOffset++] = (int) ((block21 >>> 33) & 33554431L);
-        values[valuesOffset++] = (int) ((block21 >>> 8) & 33554431L);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block21 & 255L) << 17) | (block22 >>> 47));
-        values[valuesOffset++] = (int) ((block22 >>> 22) & 33554431L);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block22 & 4194303L) << 3) | (block23 >>> 61));
-        values[valuesOffset++] = (int) ((block23 >>> 36) & 33554431L);
-        values[valuesOffset++] = (int) ((block23 >>> 11) & 33554431L);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block23 & 2047L) << 14) | (block24 >>> 50));
-        values[valuesOffset++] = (int) ((block24 >>> 25) & 33554431L);
-        values[valuesOffset++] = (int) (block24 & 33554431L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 17) | (byte1 << 9) | (byte2 << 1) | (byte3 >>> 7);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 127) << 18) | (byte4 << 10) | (byte5 << 2) | (byte6 >>> 6);
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 63) << 19) | (byte7 << 11) | (byte8 << 3) | (byte9 >>> 5);
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 31) << 20) | (byte10 << 12) | (byte11 << 4) | (byte12 >>> 4);
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 15) << 21) | (byte13 << 13) | (byte14 << 5) | (byte15 >>> 3);
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 7) << 22) | (byte16 << 14) | (byte17 << 6) | (byte18 >>> 2);
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 3) << 23) | (byte19 << 15) | (byte20 << 7) | (byte21 >>> 1);
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 1) << 24) | (byte22 << 16) | (byte23 << 8) | byte24;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte25 << 17) | (byte26 << 9) | (byte27 << 1) | (byte28 >>> 7);
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 127) << 18) | (byte29 << 10) | (byte30 << 2) | (byte31 >>> 6);
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 63) << 19) | (byte32 << 11) | (byte33 << 3) | (byte34 >>> 5);
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 31) << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 21) | (byte38 << 13) | (byte39 << 5) | (byte40 >>> 3);
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 7) << 22) | (byte41 << 14) | (byte42 << 6) | (byte43 >>> 2);
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 3) << 23) | (byte44 << 15) | (byte45 << 7) | (byte46 >>> 1);
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 1) << 24) | (byte47 << 16) | (byte48 << 8) | byte49;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte50 << 17) | (byte51 << 9) | (byte52 << 1) | (byte53 >>> 7);
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 127) << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 19) | (byte57 << 11) | (byte58 << 3) | (byte59 >>> 5);
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte59 & 31) << 20) | (byte60 << 12) | (byte61 << 4) | (byte62 >>> 4);
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte62 & 15) << 21) | (byte63 << 13) | (byte64 << 5) | (byte65 >>> 3);
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 7) << 22) | (byte66 << 14) | (byte67 << 6) | (byte68 >>> 2);
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 3) << 23) | (byte69 << 15) | (byte70 << 7) | (byte71 >>> 1);
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 1) << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 17) | (byte76 << 9) | (byte77 << 1) | (byte78 >>> 7);
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 127) << 18) | (byte79 << 10) | (byte80 << 2) | (byte81 >>> 6);
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 63) << 19) | (byte82 << 11) | (byte83 << 3) | (byte84 >>> 5);
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 31) << 20) | (byte85 << 12) | (byte86 << 4) | (byte87 >>> 4);
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 15) << 21) | (byte88 << 13) | (byte89 << 5) | (byte90 >>> 3);
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 7) << 22) | (byte91 << 14) | (byte92 << 6) | (byte93 >>> 2);
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 3) << 23) | (byte94 << 15) | (byte95 << 7) | (byte96 >>> 1);
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 1) << 24) | (byte97 << 16) | (byte98 << 8) | byte99;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte100 << 17) | (byte101 << 9) | (byte102 << 1) | (byte103 >>> 7);
-        final int byte104 = blocks[blocksOffset++] & 0xFF;
-        final int byte105 = blocks[blocksOffset++] & 0xFF;
-        final int byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 127) << 18) | (byte104 << 10) | (byte105 << 2) | (byte106 >>> 6);
-        final int byte107 = blocks[blocksOffset++] & 0xFF;
-        final int byte108 = blocks[blocksOffset++] & 0xFF;
-        final int byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 63) << 19) | (byte107 << 11) | (byte108 << 3) | (byte109 >>> 5);
-        final int byte110 = blocks[blocksOffset++] & 0xFF;
-        final int byte111 = blocks[blocksOffset++] & 0xFF;
-        final int byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte109 & 31) << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final int byte113 = blocks[blocksOffset++] & 0xFF;
-        final int byte114 = blocks[blocksOffset++] & 0xFF;
-        final int byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 21) | (byte113 << 13) | (byte114 << 5) | (byte115 >>> 3);
-        final int byte116 = blocks[blocksOffset++] & 0xFF;
-        final int byte117 = blocks[blocksOffset++] & 0xFF;
-        final int byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte115 & 7) << 22) | (byte116 << 14) | (byte117 << 6) | (byte118 >>> 2);
-        final int byte119 = blocks[blocksOffset++] & 0xFF;
-        final int byte120 = blocks[blocksOffset++] & 0xFF;
-        final int byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 3) << 23) | (byte119 << 15) | (byte120 << 7) | (byte121 >>> 1);
-        final int byte122 = blocks[blocksOffset++] & 0xFF;
-        final int byte123 = blocks[blocksOffset++] & 0xFF;
-        final int byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 1) << 24) | (byte122 << 16) | (byte123 << 8) | byte124;
-        final int byte125 = blocks[blocksOffset++] & 0xFF;
-        final int byte126 = blocks[blocksOffset++] & 0xFF;
-        final int byte127 = blocks[blocksOffset++] & 0xFF;
-        final int byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte125 << 17) | (byte126 << 9) | (byte127 << 1) | (byte128 >>> 7);
-        final int byte129 = blocks[blocksOffset++] & 0xFF;
-        final int byte130 = blocks[blocksOffset++] & 0xFF;
-        final int byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 127) << 18) | (byte129 << 10) | (byte130 << 2) | (byte131 >>> 6);
-        final int byte132 = blocks[blocksOffset++] & 0xFF;
-        final int byte133 = blocks[blocksOffset++] & 0xFF;
-        final int byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 63) << 19) | (byte132 << 11) | (byte133 << 3) | (byte134 >>> 5);
-        final int byte135 = blocks[blocksOffset++] & 0xFF;
-        final int byte136 = blocks[blocksOffset++] & 0xFF;
-        final int byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 31) << 20) | (byte135 << 12) | (byte136 << 4) | (byte137 >>> 4);
-        final int byte138 = blocks[blocksOffset++] & 0xFF;
-        final int byte139 = blocks[blocksOffset++] & 0xFF;
-        final int byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 15) << 21) | (byte138 << 13) | (byte139 << 5) | (byte140 >>> 3);
-        final int byte141 = blocks[blocksOffset++] & 0xFF;
-        final int byte142 = blocks[blocksOffset++] & 0xFF;
-        final int byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 7) << 22) | (byte141 << 14) | (byte142 << 6) | (byte143 >>> 2);
-        final int byte144 = blocks[blocksOffset++] & 0xFF;
-        final int byte145 = blocks[blocksOffset++] & 0xFF;
-        final int byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 3) << 23) | (byte144 << 15) | (byte145 << 7) | (byte146 >>> 1);
-        final int byte147 = blocks[blocksOffset++] & 0xFF;
-        final int byte148 = blocks[blocksOffset++] & 0xFF;
-        final int byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 1) << 24) | (byte147 << 16) | (byte148 << 8) | byte149;
-        final int byte150 = blocks[blocksOffset++] & 0xFF;
-        final int byte151 = blocks[blocksOffset++] & 0xFF;
-        final int byte152 = blocks[blocksOffset++] & 0xFF;
-        final int byte153 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte150 << 17) | (byte151 << 9) | (byte152 << 1) | (byte153 >>> 7);
-        final int byte154 = blocks[blocksOffset++] & 0xFF;
-        final int byte155 = blocks[blocksOffset++] & 0xFF;
-        final int byte156 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte153 & 127) << 18) | (byte154 << 10) | (byte155 << 2) | (byte156 >>> 6);
-        final int byte157 = blocks[blocksOffset++] & 0xFF;
-        final int byte158 = blocks[blocksOffset++] & 0xFF;
-        final int byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte156 & 63) << 19) | (byte157 << 11) | (byte158 << 3) | (byte159 >>> 5);
-        final int byte160 = blocks[blocksOffset++] & 0xFF;
-        final int byte161 = blocks[blocksOffset++] & 0xFF;
-        final int byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 31) << 20) | (byte160 << 12) | (byte161 << 4) | (byte162 >>> 4);
-        final int byte163 = blocks[blocksOffset++] & 0xFF;
-        final int byte164 = blocks[blocksOffset++] & 0xFF;
-        final int byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 15) << 21) | (byte163 << 13) | (byte164 << 5) | (byte165 >>> 3);
-        final int byte166 = blocks[blocksOffset++] & 0xFF;
-        final int byte167 = blocks[blocksOffset++] & 0xFF;
-        final int byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 7) << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final int byte169 = blocks[blocksOffset++] & 0xFF;
-        final int byte170 = blocks[blocksOffset++] & 0xFF;
-        final int byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 23) | (byte169 << 15) | (byte170 << 7) | (byte171 >>> 1);
-        final int byte172 = blocks[blocksOffset++] & 0xFF;
-        final int byte173 = blocks[blocksOffset++] & 0xFF;
-        final int byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte171 & 1) << 24) | (byte172 << 16) | (byte173 << 8) | byte174;
-        final int byte175 = blocks[blocksOffset++] & 0xFF;
-        final int byte176 = blocks[blocksOffset++] & 0xFF;
-        final int byte177 = blocks[blocksOffset++] & 0xFF;
-        final int byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte175 << 17) | (byte176 << 9) | (byte177 << 1) | (byte178 >>> 7);
-        final int byte179 = blocks[blocksOffset++] & 0xFF;
-        final int byte180 = blocks[blocksOffset++] & 0xFF;
-        final int byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 127) << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final int byte182 = blocks[blocksOffset++] & 0xFF;
-        final int byte183 = blocks[blocksOffset++] & 0xFF;
-        final int byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 19) | (byte182 << 11) | (byte183 << 3) | (byte184 >>> 5);
-        final int byte185 = blocks[blocksOffset++] & 0xFF;
-        final int byte186 = blocks[blocksOffset++] & 0xFF;
-        final int byte187 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 31) << 20) | (byte185 << 12) | (byte186 << 4) | (byte187 >>> 4);
-        final int byte188 = blocks[blocksOffset++] & 0xFF;
-        final int byte189 = blocks[blocksOffset++] & 0xFF;
-        final int byte190 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte187 & 15) << 21) | (byte188 << 13) | (byte189 << 5) | (byte190 >>> 3);
-        final int byte191 = blocks[blocksOffset++] & 0xFF;
-        final int byte192 = blocks[blocksOffset++] & 0xFF;
-        final int byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte190 & 7) << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final int byte194 = blocks[blocksOffset++] & 0xFF;
-        final int byte195 = blocks[blocksOffset++] & 0xFF;
-        final int byte196 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 23) | (byte194 << 15) | (byte195 << 7) | (byte196 >>> 1);
-        final int byte197 = blocks[blocksOffset++] & 0xFF;
-        final int byte198 = blocks[blocksOffset++] & 0xFF;
-        final int byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte196 & 1) << 24) | (byte197 << 16) | (byte198 << 8) | byte199;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 39;
-        values[valuesOffset++] = (block0 >>> 14) & 33554431L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 16383L) << 11) | (block1 >>> 53);
-        values[valuesOffset++] = (block1 >>> 28) & 33554431L;
-        values[valuesOffset++] = (block1 >>> 3) & 33554431L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 7L) << 22) | (block2 >>> 42);
-        values[valuesOffset++] = (block2 >>> 17) & 33554431L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 131071L) << 8) | (block3 >>> 56);
-        values[valuesOffset++] = (block3 >>> 31) & 33554431L;
-        values[valuesOffset++] = (block3 >>> 6) & 33554431L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 63L) << 19) | (block4 >>> 45);
-        values[valuesOffset++] = (block4 >>> 20) & 33554431L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1048575L) << 5) | (block5 >>> 59);
-        values[valuesOffset++] = (block5 >>> 34) & 33554431L;
-        values[valuesOffset++] = (block5 >>> 9) & 33554431L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 511L) << 16) | (block6 >>> 48);
-        values[valuesOffset++] = (block6 >>> 23) & 33554431L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 8388607L) << 2) | (block7 >>> 62);
-        values[valuesOffset++] = (block7 >>> 37) & 33554431L;
-        values[valuesOffset++] = (block7 >>> 12) & 33554431L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4095L) << 13) | (block8 >>> 51);
-        values[valuesOffset++] = (block8 >>> 26) & 33554431L;
-        values[valuesOffset++] = (block8 >>> 1) & 33554431L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 1L) << 24) | (block9 >>> 40);
-        values[valuesOffset++] = (block9 >>> 15) & 33554431L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 32767L) << 10) | (block10 >>> 54);
-        values[valuesOffset++] = (block10 >>> 29) & 33554431L;
-        values[valuesOffset++] = (block10 >>> 4) & 33554431L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 15L) << 21) | (block11 >>> 43);
-        values[valuesOffset++] = (block11 >>> 18) & 33554431L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 262143L) << 7) | (block12 >>> 57);
-        values[valuesOffset++] = (block12 >>> 32) & 33554431L;
-        values[valuesOffset++] = (block12 >>> 7) & 33554431L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 127L) << 18) | (block13 >>> 46);
-        values[valuesOffset++] = (block13 >>> 21) & 33554431L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 2097151L) << 4) | (block14 >>> 60);
-        values[valuesOffset++] = (block14 >>> 35) & 33554431L;
-        values[valuesOffset++] = (block14 >>> 10) & 33554431L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1023L) << 15) | (block15 >>> 49);
-        values[valuesOffset++] = (block15 >>> 24) & 33554431L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 16777215L) << 1) | (block16 >>> 63);
-        values[valuesOffset++] = (block16 >>> 38) & 33554431L;
-        values[valuesOffset++] = (block16 >>> 13) & 33554431L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 8191L) << 12) | (block17 >>> 52);
-        values[valuesOffset++] = (block17 >>> 27) & 33554431L;
-        values[valuesOffset++] = (block17 >>> 2) & 33554431L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 3L) << 23) | (block18 >>> 41);
-        values[valuesOffset++] = (block18 >>> 16) & 33554431L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 65535L) << 9) | (block19 >>> 55);
-        values[valuesOffset++] = (block19 >>> 30) & 33554431L;
-        values[valuesOffset++] = (block19 >>> 5) & 33554431L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 31L) << 20) | (block20 >>> 44);
-        values[valuesOffset++] = (block20 >>> 19) & 33554431L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 524287L) << 6) | (block21 >>> 58);
-        values[valuesOffset++] = (block21 >>> 33) & 33554431L;
-        values[valuesOffset++] = (block21 >>> 8) & 33554431L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 255L) << 17) | (block22 >>> 47);
-        values[valuesOffset++] = (block22 >>> 22) & 33554431L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4194303L) << 3) | (block23 >>> 61);
-        values[valuesOffset++] = (block23 >>> 36) & 33554431L;
-        values[valuesOffset++] = (block23 >>> 11) & 33554431L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 2047L) << 14) | (block24 >>> 50);
-        values[valuesOffset++] = (block24 >>> 25) & 33554431L;
-        values[valuesOffset++] = block24 & 33554431L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 17) | (byte1 << 9) | (byte2 << 1) | (byte3 >>> 7);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 127) << 18) | (byte4 << 10) | (byte5 << 2) | (byte6 >>> 6);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 63) << 19) | (byte7 << 11) | (byte8 << 3) | (byte9 >>> 5);
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 31) << 20) | (byte10 << 12) | (byte11 << 4) | (byte12 >>> 4);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 15) << 21) | (byte13 << 13) | (byte14 << 5) | (byte15 >>> 3);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 7) << 22) | (byte16 << 14) | (byte17 << 6) | (byte18 >>> 2);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 3) << 23) | (byte19 << 15) | (byte20 << 7) | (byte21 >>> 1);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 1) << 24) | (byte22 << 16) | (byte23 << 8) | byte24;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte25 << 17) | (byte26 << 9) | (byte27 << 1) | (byte28 >>> 7);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 127) << 18) | (byte29 << 10) | (byte30 << 2) | (byte31 >>> 6);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 63) << 19) | (byte32 << 11) | (byte33 << 3) | (byte34 >>> 5);
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 31) << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 21) | (byte38 << 13) | (byte39 << 5) | (byte40 >>> 3);
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 7) << 22) | (byte41 << 14) | (byte42 << 6) | (byte43 >>> 2);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 3) << 23) | (byte44 << 15) | (byte45 << 7) | (byte46 >>> 1);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 1) << 24) | (byte47 << 16) | (byte48 << 8) | byte49;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte50 << 17) | (byte51 << 9) | (byte52 << 1) | (byte53 >>> 7);
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 127) << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 19) | (byte57 << 11) | (byte58 << 3) | (byte59 >>> 5);
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte59 & 31) << 20) | (byte60 << 12) | (byte61 << 4) | (byte62 >>> 4);
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte62 & 15) << 21) | (byte63 << 13) | (byte64 << 5) | (byte65 >>> 3);
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 7) << 22) | (byte66 << 14) | (byte67 << 6) | (byte68 >>> 2);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 3) << 23) | (byte69 << 15) | (byte70 << 7) | (byte71 >>> 1);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 1) << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 17) | (byte76 << 9) | (byte77 << 1) | (byte78 >>> 7);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 127) << 18) | (byte79 << 10) | (byte80 << 2) | (byte81 >>> 6);
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 63) << 19) | (byte82 << 11) | (byte83 << 3) | (byte84 >>> 5);
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 31) << 20) | (byte85 << 12) | (byte86 << 4) | (byte87 >>> 4);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 15) << 21) | (byte88 << 13) | (byte89 << 5) | (byte90 >>> 3);
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 7) << 22) | (byte91 << 14) | (byte92 << 6) | (byte93 >>> 2);
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 3) << 23) | (byte94 << 15) | (byte95 << 7) | (byte96 >>> 1);
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte96 & 1) << 24) | (byte97 << 16) | (byte98 << 8) | byte99;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte100 << 17) | (byte101 << 9) | (byte102 << 1) | (byte103 >>> 7);
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 127) << 18) | (byte104 << 10) | (byte105 << 2) | (byte106 >>> 6);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 63) << 19) | (byte107 << 11) | (byte108 << 3) | (byte109 >>> 5);
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte109 & 31) << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 21) | (byte113 << 13) | (byte114 << 5) | (byte115 >>> 3);
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte115 & 7) << 22) | (byte116 << 14) | (byte117 << 6) | (byte118 >>> 2);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 3) << 23) | (byte119 << 15) | (byte120 << 7) | (byte121 >>> 1);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 1) << 24) | (byte122 << 16) | (byte123 << 8) | byte124;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte125 << 17) | (byte126 << 9) | (byte127 << 1) | (byte128 >>> 7);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 127) << 18) | (byte129 << 10) | (byte130 << 2) | (byte131 >>> 6);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 63) << 19) | (byte132 << 11) | (byte133 << 3) | (byte134 >>> 5);
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 31) << 20) | (byte135 << 12) | (byte136 << 4) | (byte137 >>> 4);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 15) << 21) | (byte138 << 13) | (byte139 << 5) | (byte140 >>> 3);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 7) << 22) | (byte141 << 14) | (byte142 << 6) | (byte143 >>> 2);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 3) << 23) | (byte144 << 15) | (byte145 << 7) | (byte146 >>> 1);
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 1) << 24) | (byte147 << 16) | (byte148 << 8) | byte149;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte150 << 17) | (byte151 << 9) | (byte152 << 1) | (byte153 >>> 7);
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte153 & 127) << 18) | (byte154 << 10) | (byte155 << 2) | (byte156 >>> 6);
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte156 & 63) << 19) | (byte157 << 11) | (byte158 << 3) | (byte159 >>> 5);
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 31) << 20) | (byte160 << 12) | (byte161 << 4) | (byte162 >>> 4);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 15) << 21) | (byte163 << 13) | (byte164 << 5) | (byte165 >>> 3);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 7) << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 23) | (byte169 << 15) | (byte170 << 7) | (byte171 >>> 1);
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte171 & 1) << 24) | (byte172 << 16) | (byte173 << 8) | byte174;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte175 << 17) | (byte176 << 9) | (byte177 << 1) | (byte178 >>> 7);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 127) << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 19) | (byte182 << 11) | (byte183 << 3) | (byte184 >>> 5);
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 31) << 20) | (byte185 << 12) | (byte186 << 4) | (byte187 >>> 4);
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte187 & 15) << 21) | (byte188 << 13) | (byte189 << 5) | (byte190 >>> 3);
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte190 & 7) << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 23) | (byte194 << 15) | (byte195 << 7) | (byte196 >>> 1);
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte196 & 1) << 24) | (byte197 << 16) | (byte198 << 8) | byte199;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 25) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 25) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked61.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked61.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked61.java	(copie de travail)
@@ -1,877 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked61 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 61;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 3;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 7L) << 58) | (block1 >>> 6);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 63L) << 55) | (block2 >>> 9);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 511L) << 52) | (block3 >>> 12);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 4095L) << 49) | (block4 >>> 15);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 32767L) << 46) | (block5 >>> 18);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 262143L) << 43) | (block6 >>> 21);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 2097151L) << 40) | (block7 >>> 24);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 16777215L) << 37) | (block8 >>> 27);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 134217727L) << 34) | (block9 >>> 30);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1073741823L) << 31) | (block10 >>> 33);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 8589934591L) << 28) | (block11 >>> 36);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 68719476735L) << 25) | (block12 >>> 39);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 549755813887L) << 22) | (block13 >>> 42);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 4398046511103L) << 19) | (block14 >>> 45);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 35184372088831L) << 16) | (block15 >>> 48);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 281474976710655L) << 13) | (block16 >>> 51);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 2251799813685247L) << 10) | (block17 >>> 54);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 18014398509481983L) << 7) | (block18 >>> 57);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 144115188075855871L) << 4) | (block19 >>> 60);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1152921504606846975L) << 1) | (block20 >>> 63);
-        values[valuesOffset++] = (block20 >>> 2) & 2305843009213693951L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 3L) << 59) | (block21 >>> 5);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 31L) << 56) | (block22 >>> 8);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 255L) << 53) | (block23 >>> 11);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 2047L) << 50) | (block24 >>> 14);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 16383L) << 47) | (block25 >>> 17);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 131071L) << 44) | (block26 >>> 20);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 1048575L) << 41) | (block27 >>> 23);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 8388607L) << 38) | (block28 >>> 26);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 67108863L) << 35) | (block29 >>> 29);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 536870911L) << 32) | (block30 >>> 32);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 4294967295L) << 29) | (block31 >>> 35);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 34359738367L) << 26) | (block32 >>> 38);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 274877906943L) << 23) | (block33 >>> 41);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 2199023255551L) << 20) | (block34 >>> 44);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 17592186044415L) << 17) | (block35 >>> 47);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 140737488355327L) << 14) | (block36 >>> 50);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 1125899906842623L) << 11) | (block37 >>> 53);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 9007199254740991L) << 8) | (block38 >>> 56);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 72057594037927935L) << 5) | (block39 >>> 59);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 576460752303423487L) << 2) | (block40 >>> 62);
-        values[valuesOffset++] = (block40 >>> 1) & 2305843009213693951L;
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 1L) << 60) | (block41 >>> 4);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 15L) << 57) | (block42 >>> 7);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 127L) << 54) | (block43 >>> 10);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 1023L) << 51) | (block44 >>> 13);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 8191L) << 48) | (block45 >>> 16);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 65535L) << 45) | (block46 >>> 19);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 524287L) << 42) | (block47 >>> 22);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 4194303L) << 39) | (block48 >>> 25);
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 33554431L) << 36) | (block49 >>> 28);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 268435455L) << 33) | (block50 >>> 31);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 2147483647L) << 30) | (block51 >>> 34);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 17179869183L) << 27) | (block52 >>> 37);
-        final long block53 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block52 & 137438953471L) << 24) | (block53 >>> 40);
-        final long block54 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block53 & 1099511627775L) << 21) | (block54 >>> 43);
-        final long block55 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block54 & 8796093022207L) << 18) | (block55 >>> 46);
-        final long block56 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block55 & 70368744177663L) << 15) | (block56 >>> 49);
-        final long block57 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block56 & 562949953421311L) << 12) | (block57 >>> 52);
-        final long block58 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block57 & 4503599627370495L) << 9) | (block58 >>> 55);
-        final long block59 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block58 & 36028797018963967L) << 6) | (block59 >>> 58);
-        final long block60 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block59 & 288230376151711743L) << 3) | (block60 >>> 61);
-        values[valuesOffset++] = block60 & 2305843009213693951L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 53) | (byte1 << 45) | (byte2 << 37) | (byte3 << 29) | (byte4 << 21) | (byte5 << 13) | (byte6 << 5) | (byte7 >>> 3);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 7) << 58) | (byte8 << 50) | (byte9 << 42) | (byte10 << 34) | (byte11 << 26) | (byte12 << 18) | (byte13 << 10) | (byte14 << 2) | (byte15 >>> 6);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 63) << 55) | (byte16 << 47) | (byte17 << 39) | (byte18 << 31) | (byte19 << 23) | (byte20 << 15) | (byte21 << 7) | (byte22 >>> 1);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 1) << 60) | (byte23 << 52) | (byte24 << 44) | (byte25 << 36) | (byte26 << 28) | (byte27 << 20) | (byte28 << 12) | (byte29 << 4) | (byte30 >>> 4);
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 15) << 57) | (byte31 << 49) | (byte32 << 41) | (byte33 << 33) | (byte34 << 25) | (byte35 << 17) | (byte36 << 9) | (byte37 << 1) | (byte38 >>> 7);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 127) << 54) | (byte39 << 46) | (byte40 << 38) | (byte41 << 30) | (byte42 << 22) | (byte43 << 14) | (byte44 << 6) | (byte45 >>> 2);
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 3) << 59) | (byte46 << 51) | (byte47 << 43) | (byte48 << 35) | (byte49 << 27) | (byte50 << 19) | (byte51 << 11) | (byte52 << 3) | (byte53 >>> 5);
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte53 & 31) << 56) | (byte54 << 48) | (byte55 << 40) | (byte56 << 32) | (byte57 << 24) | (byte58 << 16) | (byte59 << 8) | byte60;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte61 << 53) | (byte62 << 45) | (byte63 << 37) | (byte64 << 29) | (byte65 << 21) | (byte66 << 13) | (byte67 << 5) | (byte68 >>> 3);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 7) << 58) | (byte69 << 50) | (byte70 << 42) | (byte71 << 34) | (byte72 << 26) | (byte73 << 18) | (byte74 << 10) | (byte75 << 2) | (byte76 >>> 6);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 63) << 55) | (byte77 << 47) | (byte78 << 39) | (byte79 << 31) | (byte80 << 23) | (byte81 << 15) | (byte82 << 7) | (byte83 >>> 1);
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte83 & 1) << 60) | (byte84 << 52) | (byte85 << 44) | (byte86 << 36) | (byte87 << 28) | (byte88 << 20) | (byte89 << 12) | (byte90 << 4) | (byte91 >>> 4);
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 15) << 57) | (byte92 << 49) | (byte93 << 41) | (byte94 << 33) | (byte95 << 25) | (byte96 << 17) | (byte97 << 9) | (byte98 << 1) | (byte99 >>> 7);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 127) << 54) | (byte100 << 46) | (byte101 << 38) | (byte102 << 30) | (byte103 << 22) | (byte104 << 14) | (byte105 << 6) | (byte106 >>> 2);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 3) << 59) | (byte107 << 51) | (byte108 << 43) | (byte109 << 35) | (byte110 << 27) | (byte111 << 19) | (byte112 << 11) | (byte113 << 3) | (byte114 >>> 5);
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 31) << 56) | (byte115 << 48) | (byte116 << 40) | (byte117 << 32) | (byte118 << 24) | (byte119 << 16) | (byte120 << 8) | byte121;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte122 << 53) | (byte123 << 45) | (byte124 << 37) | (byte125 << 29) | (byte126 << 21) | (byte127 << 13) | (byte128 << 5) | (byte129 >>> 3);
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte129 & 7) << 58) | (byte130 << 50) | (byte131 << 42) | (byte132 << 34) | (byte133 << 26) | (byte134 << 18) | (byte135 << 10) | (byte136 << 2) | (byte137 >>> 6);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 63) << 55) | (byte138 << 47) | (byte139 << 39) | (byte140 << 31) | (byte141 << 23) | (byte142 << 15) | (byte143 << 7) | (byte144 >>> 1);
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte144 & 1) << 60) | (byte145 << 52) | (byte146 << 44) | (byte147 << 36) | (byte148 << 28) | (byte149 << 20) | (byte150 << 12) | (byte151 << 4) | (byte152 >>> 4);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 15) << 57) | (byte153 << 49) | (byte154 << 41) | (byte155 << 33) | (byte156 << 25) | (byte157 << 17) | (byte158 << 9) | (byte159 << 1) | (byte160 >>> 7);
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte160 & 127) << 54) | (byte161 << 46) | (byte162 << 38) | (byte163 << 30) | (byte164 << 22) | (byte165 << 14) | (byte166 << 6) | (byte167 >>> 2);
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte167 & 3) << 59) | (byte168 << 51) | (byte169 << 43) | (byte170 << 35) | (byte171 << 27) | (byte172 << 19) | (byte173 << 11) | (byte174 << 3) | (byte175 >>> 5);
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 31) << 56) | (byte176 << 48) | (byte177 << 40) | (byte178 << 32) | (byte179 << 24) | (byte180 << 16) | (byte181 << 8) | byte182;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte183 << 53) | (byte184 << 45) | (byte185 << 37) | (byte186 << 29) | (byte187 << 21) | (byte188 << 13) | (byte189 << 5) | (byte190 >>> 3);
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte190 & 7) << 58) | (byte191 << 50) | (byte192 << 42) | (byte193 << 34) | (byte194 << 26) | (byte195 << 18) | (byte196 << 10) | (byte197 << 2) | (byte198 >>> 6);
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte198 & 63) << 55) | (byte199 << 47) | (byte200 << 39) | (byte201 << 31) | (byte202 << 23) | (byte203 << 15) | (byte204 << 7) | (byte205 >>> 1);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 1) << 60) | (byte206 << 52) | (byte207 << 44) | (byte208 << 36) | (byte209 << 28) | (byte210 << 20) | (byte211 << 12) | (byte212 << 4) | (byte213 >>> 4);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 15) << 57) | (byte214 << 49) | (byte215 << 41) | (byte216 << 33) | (byte217 << 25) | (byte218 << 17) | (byte219 << 9) | (byte220 << 1) | (byte221 >>> 7);
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte221 & 127) << 54) | (byte222 << 46) | (byte223 << 38) | (byte224 << 30) | (byte225 << 22) | (byte226 << 14) | (byte227 << 6) | (byte228 >>> 2);
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 3) << 59) | (byte229 << 51) | (byte230 << 43) | (byte231 << 35) | (byte232 << 27) | (byte233 << 19) | (byte234 << 11) | (byte235 << 3) | (byte236 >>> 5);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 31) << 56) | (byte237 << 48) | (byte238 << 40) | (byte239 << 32) | (byte240 << 24) | (byte241 << 16) | (byte242 << 8) | byte243;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte244 << 53) | (byte245 << 45) | (byte246 << 37) | (byte247 << 29) | (byte248 << 21) | (byte249 << 13) | (byte250 << 5) | (byte251 >>> 3);
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte251 & 7) << 58) | (byte252 << 50) | (byte253 << 42) | (byte254 << 34) | (byte255 << 26) | (byte256 << 18) | (byte257 << 10) | (byte258 << 2) | (byte259 >>> 6);
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte259 & 63) << 55) | (byte260 << 47) | (byte261 << 39) | (byte262 << 31) | (byte263 << 23) | (byte264 << 15) | (byte265 << 7) | (byte266 >>> 1);
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte266 & 1) << 60) | (byte267 << 52) | (byte268 << 44) | (byte269 << 36) | (byte270 << 28) | (byte271 << 20) | (byte272 << 12) | (byte273 << 4) | (byte274 >>> 4);
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte274 & 15) << 57) | (byte275 << 49) | (byte276 << 41) | (byte277 << 33) | (byte278 << 25) | (byte279 << 17) | (byte280 << 9) | (byte281 << 1) | (byte282 >>> 7);
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte282 & 127) << 54) | (byte283 << 46) | (byte284 << 38) | (byte285 << 30) | (byte286 << 22) | (byte287 << 14) | (byte288 << 6) | (byte289 >>> 2);
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte289 & 3) << 59) | (byte290 << 51) | (byte291 << 43) | (byte292 << 35) | (byte293 << 27) | (byte294 << 19) | (byte295 << 11) | (byte296 << 3) | (byte297 >>> 5);
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte297 & 31) << 56) | (byte298 << 48) | (byte299 << 40) | (byte300 << 32) | (byte301 << 24) | (byte302 << 16) | (byte303 << 8) | byte304;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte305 << 53) | (byte306 << 45) | (byte307 << 37) | (byte308 << 29) | (byte309 << 21) | (byte310 << 13) | (byte311 << 5) | (byte312 >>> 3);
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte312 & 7) << 58) | (byte313 << 50) | (byte314 << 42) | (byte315 << 34) | (byte316 << 26) | (byte317 << 18) | (byte318 << 10) | (byte319 << 2) | (byte320 >>> 6);
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte320 & 63) << 55) | (byte321 << 47) | (byte322 << 39) | (byte323 << 31) | (byte324 << 23) | (byte325 << 15) | (byte326 << 7) | (byte327 >>> 1);
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte327 & 1) << 60) | (byte328 << 52) | (byte329 << 44) | (byte330 << 36) | (byte331 << 28) | (byte332 << 20) | (byte333 << 12) | (byte334 << 4) | (byte335 >>> 4);
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte335 & 15) << 57) | (byte336 << 49) | (byte337 << 41) | (byte338 << 33) | (byte339 << 25) | (byte340 << 17) | (byte341 << 9) | (byte342 << 1) | (byte343 >>> 7);
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte343 & 127) << 54) | (byte344 << 46) | (byte345 << 38) | (byte346 << 30) | (byte347 << 22) | (byte348 << 14) | (byte349 << 6) | (byte350 >>> 2);
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte350 & 3) << 59) | (byte351 << 51) | (byte352 << 43) | (byte353 << 35) | (byte354 << 27) | (byte355 << 19) | (byte356 << 11) | (byte357 << 3) | (byte358 >>> 5);
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte358 & 31) << 56) | (byte359 << 48) | (byte360 << 40) | (byte361 << 32) | (byte362 << 24) | (byte363 << 16) | (byte364 << 8) | byte365;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte366 << 53) | (byte367 << 45) | (byte368 << 37) | (byte369 << 29) | (byte370 << 21) | (byte371 << 13) | (byte372 << 5) | (byte373 >>> 3);
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte373 & 7) << 58) | (byte374 << 50) | (byte375 << 42) | (byte376 << 34) | (byte377 << 26) | (byte378 << 18) | (byte379 << 10) | (byte380 << 2) | (byte381 >>> 6);
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte381 & 63) << 55) | (byte382 << 47) | (byte383 << 39) | (byte384 << 31) | (byte385 << 23) | (byte386 << 15) | (byte387 << 7) | (byte388 >>> 1);
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte388 & 1) << 60) | (byte389 << 52) | (byte390 << 44) | (byte391 << 36) | (byte392 << 28) | (byte393 << 20) | (byte394 << 12) | (byte395 << 4) | (byte396 >>> 4);
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte396 & 15) << 57) | (byte397 << 49) | (byte398 << 41) | (byte399 << 33) | (byte400 << 25) | (byte401 << 17) | (byte402 << 9) | (byte403 << 1) | (byte404 >>> 7);
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte404 & 127) << 54) | (byte405 << 46) | (byte406 << 38) | (byte407 << 30) | (byte408 << 22) | (byte409 << 14) | (byte410 << 6) | (byte411 >>> 2);
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte411 & 3) << 59) | (byte412 << 51) | (byte413 << 43) | (byte414 << 35) | (byte415 << 27) | (byte416 << 19) | (byte417 << 11) | (byte418 << 3) | (byte419 >>> 5);
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        final long byte424 = blocks[blocksOffset++] & 0xFF;
-        final long byte425 = blocks[blocksOffset++] & 0xFF;
-        final long byte426 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte419 & 31) << 56) | (byte420 << 48) | (byte421 << 40) | (byte422 << 32) | (byte423 << 24) | (byte424 << 16) | (byte425 << 8) | byte426;
-        final long byte427 = blocks[blocksOffset++] & 0xFF;
-        final long byte428 = blocks[blocksOffset++] & 0xFF;
-        final long byte429 = blocks[blocksOffset++] & 0xFF;
-        final long byte430 = blocks[blocksOffset++] & 0xFF;
-        final long byte431 = blocks[blocksOffset++] & 0xFF;
-        final long byte432 = blocks[blocksOffset++] & 0xFF;
-        final long byte433 = blocks[blocksOffset++] & 0xFF;
-        final long byte434 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte427 << 53) | (byte428 << 45) | (byte429 << 37) | (byte430 << 29) | (byte431 << 21) | (byte432 << 13) | (byte433 << 5) | (byte434 >>> 3);
-        final long byte435 = blocks[blocksOffset++] & 0xFF;
-        final long byte436 = blocks[blocksOffset++] & 0xFF;
-        final long byte437 = blocks[blocksOffset++] & 0xFF;
-        final long byte438 = blocks[blocksOffset++] & 0xFF;
-        final long byte439 = blocks[blocksOffset++] & 0xFF;
-        final long byte440 = blocks[blocksOffset++] & 0xFF;
-        final long byte441 = blocks[blocksOffset++] & 0xFF;
-        final long byte442 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte434 & 7) << 58) | (byte435 << 50) | (byte436 << 42) | (byte437 << 34) | (byte438 << 26) | (byte439 << 18) | (byte440 << 10) | (byte441 << 2) | (byte442 >>> 6);
-        final long byte443 = blocks[blocksOffset++] & 0xFF;
-        final long byte444 = blocks[blocksOffset++] & 0xFF;
-        final long byte445 = blocks[blocksOffset++] & 0xFF;
-        final long byte446 = blocks[blocksOffset++] & 0xFF;
-        final long byte447 = blocks[blocksOffset++] & 0xFF;
-        final long byte448 = blocks[blocksOffset++] & 0xFF;
-        final long byte449 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte442 & 63) << 55) | (byte443 << 47) | (byte444 << 39) | (byte445 << 31) | (byte446 << 23) | (byte447 << 15) | (byte448 << 7) | (byte449 >>> 1);
-        final long byte450 = blocks[blocksOffset++] & 0xFF;
-        final long byte451 = blocks[blocksOffset++] & 0xFF;
-        final long byte452 = blocks[blocksOffset++] & 0xFF;
-        final long byte453 = blocks[blocksOffset++] & 0xFF;
-        final long byte454 = blocks[blocksOffset++] & 0xFF;
-        final long byte455 = blocks[blocksOffset++] & 0xFF;
-        final long byte456 = blocks[blocksOffset++] & 0xFF;
-        final long byte457 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte449 & 1) << 60) | (byte450 << 52) | (byte451 << 44) | (byte452 << 36) | (byte453 << 28) | (byte454 << 20) | (byte455 << 12) | (byte456 << 4) | (byte457 >>> 4);
-        final long byte458 = blocks[blocksOffset++] & 0xFF;
-        final long byte459 = blocks[blocksOffset++] & 0xFF;
-        final long byte460 = blocks[blocksOffset++] & 0xFF;
-        final long byte461 = blocks[blocksOffset++] & 0xFF;
-        final long byte462 = blocks[blocksOffset++] & 0xFF;
-        final long byte463 = blocks[blocksOffset++] & 0xFF;
-        final long byte464 = blocks[blocksOffset++] & 0xFF;
-        final long byte465 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte457 & 15) << 57) | (byte458 << 49) | (byte459 << 41) | (byte460 << 33) | (byte461 << 25) | (byte462 << 17) | (byte463 << 9) | (byte464 << 1) | (byte465 >>> 7);
-        final long byte466 = blocks[blocksOffset++] & 0xFF;
-        final long byte467 = blocks[blocksOffset++] & 0xFF;
-        final long byte468 = blocks[blocksOffset++] & 0xFF;
-        final long byte469 = blocks[blocksOffset++] & 0xFF;
-        final long byte470 = blocks[blocksOffset++] & 0xFF;
-        final long byte471 = blocks[blocksOffset++] & 0xFF;
-        final long byte472 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte465 & 127) << 54) | (byte466 << 46) | (byte467 << 38) | (byte468 << 30) | (byte469 << 22) | (byte470 << 14) | (byte471 << 6) | (byte472 >>> 2);
-        final long byte473 = blocks[blocksOffset++] & 0xFF;
-        final long byte474 = blocks[blocksOffset++] & 0xFF;
-        final long byte475 = blocks[blocksOffset++] & 0xFF;
-        final long byte476 = blocks[blocksOffset++] & 0xFF;
-        final long byte477 = blocks[blocksOffset++] & 0xFF;
-        final long byte478 = blocks[blocksOffset++] & 0xFF;
-        final long byte479 = blocks[blocksOffset++] & 0xFF;
-        final long byte480 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte472 & 3) << 59) | (byte473 << 51) | (byte474 << 43) | (byte475 << 35) | (byte476 << 27) | (byte477 << 19) | (byte478 << 11) | (byte479 << 3) | (byte480 >>> 5);
-        final long byte481 = blocks[blocksOffset++] & 0xFF;
-        final long byte482 = blocks[blocksOffset++] & 0xFF;
-        final long byte483 = blocks[blocksOffset++] & 0xFF;
-        final long byte484 = blocks[blocksOffset++] & 0xFF;
-        final long byte485 = blocks[blocksOffset++] & 0xFF;
-        final long byte486 = blocks[blocksOffset++] & 0xFF;
-        final long byte487 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte480 & 31) << 56) | (byte481 << 48) | (byte482 << 40) | (byte483 << 32) | (byte484 << 24) | (byte485 << 16) | (byte486 << 8) | byte487;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 58);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 55);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 59);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 53);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 60);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 57);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 58);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 55);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 59);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 53);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 60);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 57);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked17.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked17.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked17.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked17 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 17;
-    }
+final class BulkOperationPacked17 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked17() {
+      super(17);
+      assert blockCount() == 17;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -627,54 +624,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 17) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 17) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked53.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked53.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked53.java	(copie de travail)
@@ -1,789 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked53 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 53;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 11;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 2047L) << 42) | (block1 >>> 22);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 4194303L) << 31) | (block2 >>> 33);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 8589934591L) << 20) | (block3 >>> 44);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 17592186044415L) << 9) | (block4 >>> 55);
-        values[valuesOffset++] = (block4 >>> 2) & 9007199254740991L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 3L) << 51) | (block5 >>> 13);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 8191L) << 40) | (block6 >>> 24);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 16777215L) << 29) | (block7 >>> 35);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 34359738367L) << 18) | (block8 >>> 46);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 70368744177663L) << 7) | (block9 >>> 57);
-        values[valuesOffset++] = (block9 >>> 4) & 9007199254740991L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 15L) << 49) | (block10 >>> 15);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 32767L) << 38) | (block11 >>> 26);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 67108863L) << 27) | (block12 >>> 37);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 137438953471L) << 16) | (block13 >>> 48);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 281474976710655L) << 5) | (block14 >>> 59);
-        values[valuesOffset++] = (block14 >>> 6) & 9007199254740991L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 63L) << 47) | (block15 >>> 17);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 131071L) << 36) | (block16 >>> 28);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 268435455L) << 25) | (block17 >>> 39);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 549755813887L) << 14) | (block18 >>> 50);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1125899906842623L) << 3) | (block19 >>> 61);
-        values[valuesOffset++] = (block19 >>> 8) & 9007199254740991L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 255L) << 45) | (block20 >>> 19);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 524287L) << 34) | (block21 >>> 30);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 1073741823L) << 23) | (block22 >>> 41);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 2199023255551L) << 12) | (block23 >>> 52);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 4503599627370495L) << 1) | (block24 >>> 63);
-        values[valuesOffset++] = (block24 >>> 10) & 9007199254740991L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 1023L) << 43) | (block25 >>> 21);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 2097151L) << 32) | (block26 >>> 32);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 4294967295L) << 21) | (block27 >>> 43);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 8796093022207L) << 10) | (block28 >>> 54);
-        values[valuesOffset++] = (block28 >>> 1) & 9007199254740991L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 1L) << 52) | (block29 >>> 12);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 4095L) << 41) | (block30 >>> 23);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 8388607L) << 30) | (block31 >>> 34);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 17179869183L) << 19) | (block32 >>> 45);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 35184372088831L) << 8) | (block33 >>> 56);
-        values[valuesOffset++] = (block33 >>> 3) & 9007199254740991L;
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 7L) << 50) | (block34 >>> 14);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 16383L) << 39) | (block35 >>> 25);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 33554431L) << 28) | (block36 >>> 36);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 68719476735L) << 17) | (block37 >>> 47);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 140737488355327L) << 6) | (block38 >>> 58);
-        values[valuesOffset++] = (block38 >>> 5) & 9007199254740991L;
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 31L) << 48) | (block39 >>> 16);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 65535L) << 37) | (block40 >>> 27);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 134217727L) << 26) | (block41 >>> 38);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 274877906943L) << 15) | (block42 >>> 49);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 562949953421311L) << 4) | (block43 >>> 60);
-        values[valuesOffset++] = (block43 >>> 7) & 9007199254740991L;
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 127L) << 46) | (block44 >>> 18);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 262143L) << 35) | (block45 >>> 29);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 536870911L) << 24) | (block46 >>> 40);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 1099511627775L) << 13) | (block47 >>> 51);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 2251799813685247L) << 2) | (block48 >>> 62);
-        values[valuesOffset++] = (block48 >>> 9) & 9007199254740991L;
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 511L) << 44) | (block49 >>> 20);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 1048575L) << 33) | (block50 >>> 31);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 2147483647L) << 22) | (block51 >>> 42);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 4398046511103L) << 11) | (block52 >>> 53);
-        values[valuesOffset++] = block52 & 9007199254740991L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 45) | (byte1 << 37) | (byte2 << 29) | (byte3 << 21) | (byte4 << 13) | (byte5 << 5) | (byte6 >>> 3);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 7) << 50) | (byte7 << 42) | (byte8 << 34) | (byte9 << 26) | (byte10 << 18) | (byte11 << 10) | (byte12 << 2) | (byte13 >>> 6);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 63) << 47) | (byte14 << 39) | (byte15 << 31) | (byte16 << 23) | (byte17 << 15) | (byte18 << 7) | (byte19 >>> 1);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 1) << 52) | (byte20 << 44) | (byte21 << 36) | (byte22 << 28) | (byte23 << 20) | (byte24 << 12) | (byte25 << 4) | (byte26 >>> 4);
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 15) << 49) | (byte27 << 41) | (byte28 << 33) | (byte29 << 25) | (byte30 << 17) | (byte31 << 9) | (byte32 << 1) | (byte33 >>> 7);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 127) << 46) | (byte34 << 38) | (byte35 << 30) | (byte36 << 22) | (byte37 << 14) | (byte38 << 6) | (byte39 >>> 2);
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 3) << 51) | (byte40 << 43) | (byte41 << 35) | (byte42 << 27) | (byte43 << 19) | (byte44 << 11) | (byte45 << 3) | (byte46 >>> 5);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 31) << 48) | (byte47 << 40) | (byte48 << 32) | (byte49 << 24) | (byte50 << 16) | (byte51 << 8) | byte52;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte53 << 45) | (byte54 << 37) | (byte55 << 29) | (byte56 << 21) | (byte57 << 13) | (byte58 << 5) | (byte59 >>> 3);
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte59 & 7) << 50) | (byte60 << 42) | (byte61 << 34) | (byte62 << 26) | (byte63 << 18) | (byte64 << 10) | (byte65 << 2) | (byte66 >>> 6);
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte66 & 63) << 47) | (byte67 << 39) | (byte68 << 31) | (byte69 << 23) | (byte70 << 15) | (byte71 << 7) | (byte72 >>> 1);
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte72 & 1) << 52) | (byte73 << 44) | (byte74 << 36) | (byte75 << 28) | (byte76 << 20) | (byte77 << 12) | (byte78 << 4) | (byte79 >>> 4);
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte79 & 15) << 49) | (byte80 << 41) | (byte81 << 33) | (byte82 << 25) | (byte83 << 17) | (byte84 << 9) | (byte85 << 1) | (byte86 >>> 7);
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 127) << 46) | (byte87 << 38) | (byte88 << 30) | (byte89 << 22) | (byte90 << 14) | (byte91 << 6) | (byte92 >>> 2);
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte92 & 3) << 51) | (byte93 << 43) | (byte94 << 35) | (byte95 << 27) | (byte96 << 19) | (byte97 << 11) | (byte98 << 3) | (byte99 >>> 5);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 31) << 48) | (byte100 << 40) | (byte101 << 32) | (byte102 << 24) | (byte103 << 16) | (byte104 << 8) | byte105;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte106 << 45) | (byte107 << 37) | (byte108 << 29) | (byte109 << 21) | (byte110 << 13) | (byte111 << 5) | (byte112 >>> 3);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 7) << 50) | (byte113 << 42) | (byte114 << 34) | (byte115 << 26) | (byte116 << 18) | (byte117 << 10) | (byte118 << 2) | (byte119 >>> 6);
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte119 & 63) << 47) | (byte120 << 39) | (byte121 << 31) | (byte122 << 23) | (byte123 << 15) | (byte124 << 7) | (byte125 >>> 1);
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte125 & 1) << 52) | (byte126 << 44) | (byte127 << 36) | (byte128 << 28) | (byte129 << 20) | (byte130 << 12) | (byte131 << 4) | (byte132 >>> 4);
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte132 & 15) << 49) | (byte133 << 41) | (byte134 << 33) | (byte135 << 25) | (byte136 << 17) | (byte137 << 9) | (byte138 << 1) | (byte139 >>> 7);
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte139 & 127) << 46) | (byte140 << 38) | (byte141 << 30) | (byte142 << 22) | (byte143 << 14) | (byte144 << 6) | (byte145 >>> 2);
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte145 & 3) << 51) | (byte146 << 43) | (byte147 << 35) | (byte148 << 27) | (byte149 << 19) | (byte150 << 11) | (byte151 << 3) | (byte152 >>> 5);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 31) << 48) | (byte153 << 40) | (byte154 << 32) | (byte155 << 24) | (byte156 << 16) | (byte157 << 8) | byte158;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte159 << 45) | (byte160 << 37) | (byte161 << 29) | (byte162 << 21) | (byte163 << 13) | (byte164 << 5) | (byte165 >>> 3);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 7) << 50) | (byte166 << 42) | (byte167 << 34) | (byte168 << 26) | (byte169 << 18) | (byte170 << 10) | (byte171 << 2) | (byte172 >>> 6);
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte172 & 63) << 47) | (byte173 << 39) | (byte174 << 31) | (byte175 << 23) | (byte176 << 15) | (byte177 << 7) | (byte178 >>> 1);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 1) << 52) | (byte179 << 44) | (byte180 << 36) | (byte181 << 28) | (byte182 << 20) | (byte183 << 12) | (byte184 << 4) | (byte185 >>> 4);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 15) << 49) | (byte186 << 41) | (byte187 << 33) | (byte188 << 25) | (byte189 << 17) | (byte190 << 9) | (byte191 << 1) | (byte192 >>> 7);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 127) << 46) | (byte193 << 38) | (byte194 << 30) | (byte195 << 22) | (byte196 << 14) | (byte197 << 6) | (byte198 >>> 2);
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte198 & 3) << 51) | (byte199 << 43) | (byte200 << 35) | (byte201 << 27) | (byte202 << 19) | (byte203 << 11) | (byte204 << 3) | (byte205 >>> 5);
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte205 & 31) << 48) | (byte206 << 40) | (byte207 << 32) | (byte208 << 24) | (byte209 << 16) | (byte210 << 8) | byte211;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte212 << 45) | (byte213 << 37) | (byte214 << 29) | (byte215 << 21) | (byte216 << 13) | (byte217 << 5) | (byte218 >>> 3);
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte218 & 7) << 50) | (byte219 << 42) | (byte220 << 34) | (byte221 << 26) | (byte222 << 18) | (byte223 << 10) | (byte224 << 2) | (byte225 >>> 6);
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte225 & 63) << 47) | (byte226 << 39) | (byte227 << 31) | (byte228 << 23) | (byte229 << 15) | (byte230 << 7) | (byte231 >>> 1);
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte231 & 1) << 52) | (byte232 << 44) | (byte233 << 36) | (byte234 << 28) | (byte235 << 20) | (byte236 << 12) | (byte237 << 4) | (byte238 >>> 4);
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte238 & 15) << 49) | (byte239 << 41) | (byte240 << 33) | (byte241 << 25) | (byte242 << 17) | (byte243 << 9) | (byte244 << 1) | (byte245 >>> 7);
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte245 & 127) << 46) | (byte246 << 38) | (byte247 << 30) | (byte248 << 22) | (byte249 << 14) | (byte250 << 6) | (byte251 >>> 2);
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte251 & 3) << 51) | (byte252 << 43) | (byte253 << 35) | (byte254 << 27) | (byte255 << 19) | (byte256 << 11) | (byte257 << 3) | (byte258 >>> 5);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 31) << 48) | (byte259 << 40) | (byte260 << 32) | (byte261 << 24) | (byte262 << 16) | (byte263 << 8) | byte264;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte265 << 45) | (byte266 << 37) | (byte267 << 29) | (byte268 << 21) | (byte269 << 13) | (byte270 << 5) | (byte271 >>> 3);
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte271 & 7) << 50) | (byte272 << 42) | (byte273 << 34) | (byte274 << 26) | (byte275 << 18) | (byte276 << 10) | (byte277 << 2) | (byte278 >>> 6);
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte278 & 63) << 47) | (byte279 << 39) | (byte280 << 31) | (byte281 << 23) | (byte282 << 15) | (byte283 << 7) | (byte284 >>> 1);
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte284 & 1) << 52) | (byte285 << 44) | (byte286 << 36) | (byte287 << 28) | (byte288 << 20) | (byte289 << 12) | (byte290 << 4) | (byte291 >>> 4);
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte291 & 15) << 49) | (byte292 << 41) | (byte293 << 33) | (byte294 << 25) | (byte295 << 17) | (byte296 << 9) | (byte297 << 1) | (byte298 >>> 7);
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte298 & 127) << 46) | (byte299 << 38) | (byte300 << 30) | (byte301 << 22) | (byte302 << 14) | (byte303 << 6) | (byte304 >>> 2);
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte304 & 3) << 51) | (byte305 << 43) | (byte306 << 35) | (byte307 << 27) | (byte308 << 19) | (byte309 << 11) | (byte310 << 3) | (byte311 >>> 5);
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte311 & 31) << 48) | (byte312 << 40) | (byte313 << 32) | (byte314 << 24) | (byte315 << 16) | (byte316 << 8) | byte317;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte318 << 45) | (byte319 << 37) | (byte320 << 29) | (byte321 << 21) | (byte322 << 13) | (byte323 << 5) | (byte324 >>> 3);
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte324 & 7) << 50) | (byte325 << 42) | (byte326 << 34) | (byte327 << 26) | (byte328 << 18) | (byte329 << 10) | (byte330 << 2) | (byte331 >>> 6);
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte331 & 63) << 47) | (byte332 << 39) | (byte333 << 31) | (byte334 << 23) | (byte335 << 15) | (byte336 << 7) | (byte337 >>> 1);
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte337 & 1) << 52) | (byte338 << 44) | (byte339 << 36) | (byte340 << 28) | (byte341 << 20) | (byte342 << 12) | (byte343 << 4) | (byte344 >>> 4);
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte344 & 15) << 49) | (byte345 << 41) | (byte346 << 33) | (byte347 << 25) | (byte348 << 17) | (byte349 << 9) | (byte350 << 1) | (byte351 >>> 7);
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte351 & 127) << 46) | (byte352 << 38) | (byte353 << 30) | (byte354 << 22) | (byte355 << 14) | (byte356 << 6) | (byte357 >>> 2);
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte357 & 3) << 51) | (byte358 << 43) | (byte359 << 35) | (byte360 << 27) | (byte361 << 19) | (byte362 << 11) | (byte363 << 3) | (byte364 >>> 5);
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte364 & 31) << 48) | (byte365 << 40) | (byte366 << 32) | (byte367 << 24) | (byte368 << 16) | (byte369 << 8) | byte370;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte371 << 45) | (byte372 << 37) | (byte373 << 29) | (byte374 << 21) | (byte375 << 13) | (byte376 << 5) | (byte377 >>> 3);
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte377 & 7) << 50) | (byte378 << 42) | (byte379 << 34) | (byte380 << 26) | (byte381 << 18) | (byte382 << 10) | (byte383 << 2) | (byte384 >>> 6);
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte384 & 63) << 47) | (byte385 << 39) | (byte386 << 31) | (byte387 << 23) | (byte388 << 15) | (byte389 << 7) | (byte390 >>> 1);
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte390 & 1) << 52) | (byte391 << 44) | (byte392 << 36) | (byte393 << 28) | (byte394 << 20) | (byte395 << 12) | (byte396 << 4) | (byte397 >>> 4);
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte397 & 15) << 49) | (byte398 << 41) | (byte399 << 33) | (byte400 << 25) | (byte401 << 17) | (byte402 << 9) | (byte403 << 1) | (byte404 >>> 7);
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte404 & 127) << 46) | (byte405 << 38) | (byte406 << 30) | (byte407 << 22) | (byte408 << 14) | (byte409 << 6) | (byte410 >>> 2);
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte410 & 3) << 51) | (byte411 << 43) | (byte412 << 35) | (byte413 << 27) | (byte414 << 19) | (byte415 << 11) | (byte416 << 3) | (byte417 >>> 5);
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte417 & 31) << 48) | (byte418 << 40) | (byte419 << 32) | (byte420 << 24) | (byte421 << 16) | (byte422 << 8) | byte423;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked45.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked45.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked45.java	(copie de travail)
@@ -1,701 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked45 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 45;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 19;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 524287L) << 26) | (block1 >>> 38);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 274877906943L) << 7) | (block2 >>> 57);
-        values[valuesOffset++] = (block2 >>> 12) & 35184372088831L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4095L) << 33) | (block3 >>> 31);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 2147483647L) << 14) | (block4 >>> 50);
-        values[valuesOffset++] = (block4 >>> 5) & 35184372088831L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 31L) << 40) | (block5 >>> 24);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 16777215L) << 21) | (block6 >>> 43);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 8796093022207L) << 2) | (block7 >>> 62);
-        values[valuesOffset++] = (block7 >>> 17) & 35184372088831L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 131071L) << 28) | (block8 >>> 36);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 68719476735L) << 9) | (block9 >>> 55);
-        values[valuesOffset++] = (block9 >>> 10) & 35184372088831L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1023L) << 35) | (block10 >>> 29);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 536870911L) << 16) | (block11 >>> 48);
-        values[valuesOffset++] = (block11 >>> 3) & 35184372088831L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 7L) << 42) | (block12 >>> 22);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4194303L) << 23) | (block13 >>> 41);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 2199023255551L) << 4) | (block14 >>> 60);
-        values[valuesOffset++] = (block14 >>> 15) & 35184372088831L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 32767L) << 30) | (block15 >>> 34);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 17179869183L) << 11) | (block16 >>> 53);
-        values[valuesOffset++] = (block16 >>> 8) & 35184372088831L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 255L) << 37) | (block17 >>> 27);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 134217727L) << 18) | (block18 >>> 46);
-        values[valuesOffset++] = (block18 >>> 1) & 35184372088831L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1L) << 44) | (block19 >>> 20);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1048575L) << 25) | (block20 >>> 39);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 549755813887L) << 6) | (block21 >>> 58);
-        values[valuesOffset++] = (block21 >>> 13) & 35184372088831L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 8191L) << 32) | (block22 >>> 32);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4294967295L) << 13) | (block23 >>> 51);
-        values[valuesOffset++] = (block23 >>> 6) & 35184372088831L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 63L) << 39) | (block24 >>> 25);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 33554431L) << 20) | (block25 >>> 44);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 17592186044415L) << 1) | (block26 >>> 63);
-        values[valuesOffset++] = (block26 >>> 18) & 35184372088831L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 262143L) << 27) | (block27 >>> 37);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 137438953471L) << 8) | (block28 >>> 56);
-        values[valuesOffset++] = (block28 >>> 11) & 35184372088831L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 2047L) << 34) | (block29 >>> 30);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1073741823L) << 15) | (block30 >>> 49);
-        values[valuesOffset++] = (block30 >>> 4) & 35184372088831L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 15L) << 41) | (block31 >>> 23);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 8388607L) << 22) | (block32 >>> 42);
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 4398046511103L) << 3) | (block33 >>> 61);
-        values[valuesOffset++] = (block33 >>> 16) & 35184372088831L;
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 65535L) << 29) | (block34 >>> 35);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 34359738367L) << 10) | (block35 >>> 54);
-        values[valuesOffset++] = (block35 >>> 9) & 35184372088831L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 511L) << 36) | (block36 >>> 28);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 268435455L) << 17) | (block37 >>> 47);
-        values[valuesOffset++] = (block37 >>> 2) & 35184372088831L;
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 3L) << 43) | (block38 >>> 21);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 2097151L) << 24) | (block39 >>> 40);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 1099511627775L) << 5) | (block40 >>> 59);
-        values[valuesOffset++] = (block40 >>> 14) & 35184372088831L;
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 16383L) << 31) | (block41 >>> 33);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 8589934591L) << 12) | (block42 >>> 52);
-        values[valuesOffset++] = (block42 >>> 7) & 35184372088831L;
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 127L) << 38) | (block43 >>> 26);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 67108863L) << 19) | (block44 >>> 45);
-        values[valuesOffset++] = block44 & 35184372088831L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 37) | (byte1 << 29) | (byte2 << 21) | (byte3 << 13) | (byte4 << 5) | (byte5 >>> 3);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 7) << 42) | (byte6 << 34) | (byte7 << 26) | (byte8 << 18) | (byte9 << 10) | (byte10 << 2) | (byte11 >>> 6);
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 63) << 39) | (byte12 << 31) | (byte13 << 23) | (byte14 << 15) | (byte15 << 7) | (byte16 >>> 1);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 1) << 44) | (byte17 << 36) | (byte18 << 28) | (byte19 << 20) | (byte20 << 12) | (byte21 << 4) | (byte22 >>> 4);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 15) << 41) | (byte23 << 33) | (byte24 << 25) | (byte25 << 17) | (byte26 << 9) | (byte27 << 1) | (byte28 >>> 7);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 127) << 38) | (byte29 << 30) | (byte30 << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 43) | (byte34 << 35) | (byte35 << 27) | (byte36 << 19) | (byte37 << 11) | (byte38 << 3) | (byte39 >>> 5);
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 31) << 40) | (byte40 << 32) | (byte41 << 24) | (byte42 << 16) | (byte43 << 8) | byte44;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte45 << 37) | (byte46 << 29) | (byte47 << 21) | (byte48 << 13) | (byte49 << 5) | (byte50 >>> 3);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 7) << 42) | (byte51 << 34) | (byte52 << 26) | (byte53 << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 39) | (byte57 << 31) | (byte58 << 23) | (byte59 << 15) | (byte60 << 7) | (byte61 >>> 1);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 1) << 44) | (byte62 << 36) | (byte63 << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 41) | (byte68 << 33) | (byte69 << 25) | (byte70 << 17) | (byte71 << 9) | (byte72 << 1) | (byte73 >>> 7);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 127) << 38) | (byte74 << 30) | (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 43) | (byte79 << 35) | (byte80 << 27) | (byte81 << 19) | (byte82 << 11) | (byte83 << 3) | (byte84 >>> 5);
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 31) << 40) | (byte85 << 32) | (byte86 << 24) | (byte87 << 16) | (byte88 << 8) | byte89;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte90 << 37) | (byte91 << 29) | (byte92 << 21) | (byte93 << 13) | (byte94 << 5) | (byte95 >>> 3);
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte95 & 7) << 42) | (byte96 << 34) | (byte97 << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 39) | (byte102 << 31) | (byte103 << 23) | (byte104 << 15) | (byte105 << 7) | (byte106 >>> 1);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 1) << 44) | (byte107 << 36) | (byte108 << 28) | (byte109 << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 41) | (byte113 << 33) | (byte114 << 25) | (byte115 << 17) | (byte116 << 9) | (byte117 << 1) | (byte118 >>> 7);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 127) << 38) | (byte119 << 30) | (byte120 << 22) | (byte121 << 14) | (byte122 << 6) | (byte123 >>> 2);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 3) << 43) | (byte124 << 35) | (byte125 << 27) | (byte126 << 19) | (byte127 << 11) | (byte128 << 3) | (byte129 >>> 5);
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte129 & 31) << 40) | (byte130 << 32) | (byte131 << 24) | (byte132 << 16) | (byte133 << 8) | byte134;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte135 << 37) | (byte136 << 29) | (byte137 << 21) | (byte138 << 13) | (byte139 << 5) | (byte140 >>> 3);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 7) << 42) | (byte141 << 34) | (byte142 << 26) | (byte143 << 18) | (byte144 << 10) | (byte145 << 2) | (byte146 >>> 6);
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte146 & 63) << 39) | (byte147 << 31) | (byte148 << 23) | (byte149 << 15) | (byte150 << 7) | (byte151 >>> 1);
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte151 & 1) << 44) | (byte152 << 36) | (byte153 << 28) | (byte154 << 20) | (byte155 << 12) | (byte156 << 4) | (byte157 >>> 4);
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte157 & 15) << 41) | (byte158 << 33) | (byte159 << 25) | (byte160 << 17) | (byte161 << 9) | (byte162 << 1) | (byte163 >>> 7);
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte163 & 127) << 38) | (byte164 << 30) | (byte165 << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 43) | (byte169 << 35) | (byte170 << 27) | (byte171 << 19) | (byte172 << 11) | (byte173 << 3) | (byte174 >>> 5);
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte174 & 31) << 40) | (byte175 << 32) | (byte176 << 24) | (byte177 << 16) | (byte178 << 8) | byte179;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte180 << 37) | (byte181 << 29) | (byte182 << 21) | (byte183 << 13) | (byte184 << 5) | (byte185 >>> 3);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 7) << 42) | (byte186 << 34) | (byte187 << 26) | (byte188 << 18) | (byte189 << 10) | (byte190 << 2) | (byte191 >>> 6);
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte191 & 63) << 39) | (byte192 << 31) | (byte193 << 23) | (byte194 << 15) | (byte195 << 7) | (byte196 >>> 1);
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte196 & 1) << 44) | (byte197 << 36) | (byte198 << 28) | (byte199 << 20) | (byte200 << 12) | (byte201 << 4) | (byte202 >>> 4);
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 15) << 41) | (byte203 << 33) | (byte204 << 25) | (byte205 << 17) | (byte206 << 9) | (byte207 << 1) | (byte208 >>> 7);
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte208 & 127) << 38) | (byte209 << 30) | (byte210 << 22) | (byte211 << 14) | (byte212 << 6) | (byte213 >>> 2);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 3) << 43) | (byte214 << 35) | (byte215 << 27) | (byte216 << 19) | (byte217 << 11) | (byte218 << 3) | (byte219 >>> 5);
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte219 & 31) << 40) | (byte220 << 32) | (byte221 << 24) | (byte222 << 16) | (byte223 << 8) | byte224;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte225 << 37) | (byte226 << 29) | (byte227 << 21) | (byte228 << 13) | (byte229 << 5) | (byte230 >>> 3);
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte230 & 7) << 42) | (byte231 << 34) | (byte232 << 26) | (byte233 << 18) | (byte234 << 10) | (byte235 << 2) | (byte236 >>> 6);
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte236 & 63) << 39) | (byte237 << 31) | (byte238 << 23) | (byte239 << 15) | (byte240 << 7) | (byte241 >>> 1);
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte241 & 1) << 44) | (byte242 << 36) | (byte243 << 28) | (byte244 << 20) | (byte245 << 12) | (byte246 << 4) | (byte247 >>> 4);
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte247 & 15) << 41) | (byte248 << 33) | (byte249 << 25) | (byte250 << 17) | (byte251 << 9) | (byte252 << 1) | (byte253 >>> 7);
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte253 & 127) << 38) | (byte254 << 30) | (byte255 << 22) | (byte256 << 14) | (byte257 << 6) | (byte258 >>> 2);
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte258 & 3) << 43) | (byte259 << 35) | (byte260 << 27) | (byte261 << 19) | (byte262 << 11) | (byte263 << 3) | (byte264 >>> 5);
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte264 & 31) << 40) | (byte265 << 32) | (byte266 << 24) | (byte267 << 16) | (byte268 << 8) | byte269;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte270 << 37) | (byte271 << 29) | (byte272 << 21) | (byte273 << 13) | (byte274 << 5) | (byte275 >>> 3);
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte275 & 7) << 42) | (byte276 << 34) | (byte277 << 26) | (byte278 << 18) | (byte279 << 10) | (byte280 << 2) | (byte281 >>> 6);
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte281 & 63) << 39) | (byte282 << 31) | (byte283 << 23) | (byte284 << 15) | (byte285 << 7) | (byte286 >>> 1);
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte286 & 1) << 44) | (byte287 << 36) | (byte288 << 28) | (byte289 << 20) | (byte290 << 12) | (byte291 << 4) | (byte292 >>> 4);
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte292 & 15) << 41) | (byte293 << 33) | (byte294 << 25) | (byte295 << 17) | (byte296 << 9) | (byte297 << 1) | (byte298 >>> 7);
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte298 & 127) << 38) | (byte299 << 30) | (byte300 << 22) | (byte301 << 14) | (byte302 << 6) | (byte303 >>> 2);
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte303 & 3) << 43) | (byte304 << 35) | (byte305 << 27) | (byte306 << 19) | (byte307 << 11) | (byte308 << 3) | (byte309 >>> 5);
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte309 & 31) << 40) | (byte310 << 32) | (byte311 << 24) | (byte312 << 16) | (byte313 << 8) | byte314;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte315 << 37) | (byte316 << 29) | (byte317 << 21) | (byte318 << 13) | (byte319 << 5) | (byte320 >>> 3);
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte320 & 7) << 42) | (byte321 << 34) | (byte322 << 26) | (byte323 << 18) | (byte324 << 10) | (byte325 << 2) | (byte326 >>> 6);
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte326 & 63) << 39) | (byte327 << 31) | (byte328 << 23) | (byte329 << 15) | (byte330 << 7) | (byte331 >>> 1);
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte331 & 1) << 44) | (byte332 << 36) | (byte333 << 28) | (byte334 << 20) | (byte335 << 12) | (byte336 << 4) | (byte337 >>> 4);
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte337 & 15) << 41) | (byte338 << 33) | (byte339 << 25) | (byte340 << 17) | (byte341 << 9) | (byte342 << 1) | (byte343 >>> 7);
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte343 & 127) << 38) | (byte344 << 30) | (byte345 << 22) | (byte346 << 14) | (byte347 << 6) | (byte348 >>> 2);
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte348 & 3) << 43) | (byte349 << 35) | (byte350 << 27) | (byte351 << 19) | (byte352 << 11) | (byte353 << 3) | (byte354 >>> 5);
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte354 & 31) << 40) | (byte355 << 32) | (byte356 << 24) | (byte357 << 16) | (byte358 << 8) | byte359;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked37.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked37.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked37.java	(copie de travail)
@@ -1,613 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked37 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 37;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 27;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 134217727L) << 10) | (block1 >>> 54);
-        values[valuesOffset++] = (block1 >>> 17) & 137438953471L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 131071L) << 20) | (block2 >>> 44);
-        values[valuesOffset++] = (block2 >>> 7) & 137438953471L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 127L) << 30) | (block3 >>> 34);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 17179869183L) << 3) | (block4 >>> 61);
-        values[valuesOffset++] = (block4 >>> 24) & 137438953471L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 16777215L) << 13) | (block5 >>> 51);
-        values[valuesOffset++] = (block5 >>> 14) & 137438953471L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 16383L) << 23) | (block6 >>> 41);
-        values[valuesOffset++] = (block6 >>> 4) & 137438953471L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 15L) << 33) | (block7 >>> 31);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 2147483647L) << 6) | (block8 >>> 58);
-        values[valuesOffset++] = (block8 >>> 21) & 137438953471L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 2097151L) << 16) | (block9 >>> 48);
-        values[valuesOffset++] = (block9 >>> 11) & 137438953471L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 2047L) << 26) | (block10 >>> 38);
-        values[valuesOffset++] = (block10 >>> 1) & 137438953471L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 1L) << 36) | (block11 >>> 28);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 268435455L) << 9) | (block12 >>> 55);
-        values[valuesOffset++] = (block12 >>> 18) & 137438953471L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 262143L) << 19) | (block13 >>> 45);
-        values[valuesOffset++] = (block13 >>> 8) & 137438953471L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 255L) << 29) | (block14 >>> 35);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 34359738367L) << 2) | (block15 >>> 62);
-        values[valuesOffset++] = (block15 >>> 25) & 137438953471L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 33554431L) << 12) | (block16 >>> 52);
-        values[valuesOffset++] = (block16 >>> 15) & 137438953471L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 32767L) << 22) | (block17 >>> 42);
-        values[valuesOffset++] = (block17 >>> 5) & 137438953471L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 31L) << 32) | (block18 >>> 32);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 4294967295L) << 5) | (block19 >>> 59);
-        values[valuesOffset++] = (block19 >>> 22) & 137438953471L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 4194303L) << 15) | (block20 >>> 49);
-        values[valuesOffset++] = (block20 >>> 12) & 137438953471L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 4095L) << 25) | (block21 >>> 39);
-        values[valuesOffset++] = (block21 >>> 2) & 137438953471L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 3L) << 35) | (block22 >>> 29);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 536870911L) << 8) | (block23 >>> 56);
-        values[valuesOffset++] = (block23 >>> 19) & 137438953471L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 524287L) << 18) | (block24 >>> 46);
-        values[valuesOffset++] = (block24 >>> 9) & 137438953471L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 511L) << 28) | (block25 >>> 36);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 68719476735L) << 1) | (block26 >>> 63);
-        values[valuesOffset++] = (block26 >>> 26) & 137438953471L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 67108863L) << 11) | (block27 >>> 53);
-        values[valuesOffset++] = (block27 >>> 16) & 137438953471L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 65535L) << 21) | (block28 >>> 43);
-        values[valuesOffset++] = (block28 >>> 6) & 137438953471L;
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 63L) << 31) | (block29 >>> 33);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 8589934591L) << 4) | (block30 >>> 60);
-        values[valuesOffset++] = (block30 >>> 23) & 137438953471L;
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 8388607L) << 14) | (block31 >>> 50);
-        values[valuesOffset++] = (block31 >>> 13) & 137438953471L;
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 8191L) << 24) | (block32 >>> 40);
-        values[valuesOffset++] = (block32 >>> 3) & 137438953471L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 7L) << 34) | (block33 >>> 30);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 1073741823L) << 7) | (block34 >>> 57);
-        values[valuesOffset++] = (block34 >>> 20) & 137438953471L;
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 1048575L) << 17) | (block35 >>> 47);
-        values[valuesOffset++] = (block35 >>> 10) & 137438953471L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 1023L) << 27) | (block36 >>> 37);
-        values[valuesOffset++] = block36 & 137438953471L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 29) | (byte1 << 21) | (byte2 << 13) | (byte3 << 5) | (byte4 >>> 3);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 7) << 34) | (byte5 << 26) | (byte6 << 18) | (byte7 << 10) | (byte8 << 2) | (byte9 >>> 6);
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 63) << 31) | (byte10 << 23) | (byte11 << 15) | (byte12 << 7) | (byte13 >>> 1);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 1) << 36) | (byte14 << 28) | (byte15 << 20) | (byte16 << 12) | (byte17 << 4) | (byte18 >>> 4);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 15) << 33) | (byte19 << 25) | (byte20 << 17) | (byte21 << 9) | (byte22 << 1) | (byte23 >>> 7);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 127) << 30) | (byte24 << 22) | (byte25 << 14) | (byte26 << 6) | (byte27 >>> 2);
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte27 & 3) << 35) | (byte28 << 27) | (byte29 << 19) | (byte30 << 11) | (byte31 << 3) | (byte32 >>> 5);
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 31) << 32) | (byte33 << 24) | (byte34 << 16) | (byte35 << 8) | byte36;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte37 << 29) | (byte38 << 21) | (byte39 << 13) | (byte40 << 5) | (byte41 >>> 3);
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 7) << 34) | (byte42 << 26) | (byte43 << 18) | (byte44 << 10) | (byte45 << 2) | (byte46 >>> 6);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 63) << 31) | (byte47 << 23) | (byte48 << 15) | (byte49 << 7) | (byte50 >>> 1);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 1) << 36) | (byte51 << 28) | (byte52 << 20) | (byte53 << 12) | (byte54 << 4) | (byte55 >>> 4);
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 15) << 33) | (byte56 << 25) | (byte57 << 17) | (byte58 << 9) | (byte59 << 1) | (byte60 >>> 7);
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte60 & 127) << 30) | (byte61 << 22) | (byte62 << 14) | (byte63 << 6) | (byte64 >>> 2);
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 3) << 35) | (byte65 << 27) | (byte66 << 19) | (byte67 << 11) | (byte68 << 3) | (byte69 >>> 5);
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte69 & 31) << 32) | (byte70 << 24) | (byte71 << 16) | (byte72 << 8) | byte73;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte74 << 29) | (byte75 << 21) | (byte76 << 13) | (byte77 << 5) | (byte78 >>> 3);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 7) << 34) | (byte79 << 26) | (byte80 << 18) | (byte81 << 10) | (byte82 << 2) | (byte83 >>> 6);
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte83 & 63) << 31) | (byte84 << 23) | (byte85 << 15) | (byte86 << 7) | (byte87 >>> 1);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 1) << 36) | (byte88 << 28) | (byte89 << 20) | (byte90 << 12) | (byte91 << 4) | (byte92 >>> 4);
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte92 & 15) << 33) | (byte93 << 25) | (byte94 << 17) | (byte95 << 9) | (byte96 << 1) | (byte97 >>> 7);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 127) << 30) | (byte98 << 22) | (byte99 << 14) | (byte100 << 6) | (byte101 >>> 2);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 3) << 35) | (byte102 << 27) | (byte103 << 19) | (byte104 << 11) | (byte105 << 3) | (byte106 >>> 5);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 31) << 32) | (byte107 << 24) | (byte108 << 16) | (byte109 << 8) | byte110;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte111 << 29) | (byte112 << 21) | (byte113 << 13) | (byte114 << 5) | (byte115 >>> 3);
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte115 & 7) << 34) | (byte116 << 26) | (byte117 << 18) | (byte118 << 10) | (byte119 << 2) | (byte120 >>> 6);
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte120 & 63) << 31) | (byte121 << 23) | (byte122 << 15) | (byte123 << 7) | (byte124 >>> 1);
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte124 & 1) << 36) | (byte125 << 28) | (byte126 << 20) | (byte127 << 12) | (byte128 << 4) | (byte129 >>> 4);
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte129 & 15) << 33) | (byte130 << 25) | (byte131 << 17) | (byte132 << 9) | (byte133 << 1) | (byte134 >>> 7);
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 127) << 30) | (byte135 << 22) | (byte136 << 14) | (byte137 << 6) | (byte138 >>> 2);
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte138 & 3) << 35) | (byte139 << 27) | (byte140 << 19) | (byte141 << 11) | (byte142 << 3) | (byte143 >>> 5);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 31) << 32) | (byte144 << 24) | (byte145 << 16) | (byte146 << 8) | byte147;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte148 << 29) | (byte149 << 21) | (byte150 << 13) | (byte151 << 5) | (byte152 >>> 3);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 7) << 34) | (byte153 << 26) | (byte154 << 18) | (byte155 << 10) | (byte156 << 2) | (byte157 >>> 6);
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte157 & 63) << 31) | (byte158 << 23) | (byte159 << 15) | (byte160 << 7) | (byte161 >>> 1);
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte161 & 1) << 36) | (byte162 << 28) | (byte163 << 20) | (byte164 << 12) | (byte165 << 4) | (byte166 >>> 4);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 15) << 33) | (byte167 << 25) | (byte168 << 17) | (byte169 << 9) | (byte170 << 1) | (byte171 >>> 7);
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte171 & 127) << 30) | (byte172 << 22) | (byte173 << 14) | (byte174 << 6) | (byte175 >>> 2);
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 3) << 35) | (byte176 << 27) | (byte177 << 19) | (byte178 << 11) | (byte179 << 3) | (byte180 >>> 5);
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte180 & 31) << 32) | (byte181 << 24) | (byte182 << 16) | (byte183 << 8) | byte184;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte185 << 29) | (byte186 << 21) | (byte187 << 13) | (byte188 << 5) | (byte189 >>> 3);
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 7) << 34) | (byte190 << 26) | (byte191 << 18) | (byte192 << 10) | (byte193 << 2) | (byte194 >>> 6);
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte194 & 63) << 31) | (byte195 << 23) | (byte196 << 15) | (byte197 << 7) | (byte198 >>> 1);
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte198 & 1) << 36) | (byte199 << 28) | (byte200 << 20) | (byte201 << 12) | (byte202 << 4) | (byte203 >>> 4);
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte203 & 15) << 33) | (byte204 << 25) | (byte205 << 17) | (byte206 << 9) | (byte207 << 1) | (byte208 >>> 7);
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte208 & 127) << 30) | (byte209 << 22) | (byte210 << 14) | (byte211 << 6) | (byte212 >>> 2);
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte212 & 3) << 35) | (byte213 << 27) | (byte214 << 19) | (byte215 << 11) | (byte216 << 3) | (byte217 >>> 5);
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte217 & 31) << 32) | (byte218 << 24) | (byte219 << 16) | (byte220 << 8) | byte221;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte222 << 29) | (byte223 << 21) | (byte224 << 13) | (byte225 << 5) | (byte226 >>> 3);
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte226 & 7) << 34) | (byte227 << 26) | (byte228 << 18) | (byte229 << 10) | (byte230 << 2) | (byte231 >>> 6);
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte231 & 63) << 31) | (byte232 << 23) | (byte233 << 15) | (byte234 << 7) | (byte235 >>> 1);
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte235 & 1) << 36) | (byte236 << 28) | (byte237 << 20) | (byte238 << 12) | (byte239 << 4) | (byte240 >>> 4);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 15) << 33) | (byte241 << 25) | (byte242 << 17) | (byte243 << 9) | (byte244 << 1) | (byte245 >>> 7);
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte245 & 127) << 30) | (byte246 << 22) | (byte247 << 14) | (byte248 << 6) | (byte249 >>> 2);
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte249 & 3) << 35) | (byte250 << 27) | (byte251 << 19) | (byte252 << 11) | (byte253 << 3) | (byte254 >>> 5);
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte254 & 31) << 32) | (byte255 << 24) | (byte256 << 16) | (byte257 << 8) | byte258;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte259 << 29) | (byte260 << 21) | (byte261 << 13) | (byte262 << 5) | (byte263 >>> 3);
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte263 & 7) << 34) | (byte264 << 26) | (byte265 << 18) | (byte266 << 10) | (byte267 << 2) | (byte268 >>> 6);
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte268 & 63) << 31) | (byte269 << 23) | (byte270 << 15) | (byte271 << 7) | (byte272 >>> 1);
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte272 & 1) << 36) | (byte273 << 28) | (byte274 << 20) | (byte275 << 12) | (byte276 << 4) | (byte277 >>> 4);
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte277 & 15) << 33) | (byte278 << 25) | (byte279 << 17) | (byte280 << 9) | (byte281 << 1) | (byte282 >>> 7);
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte282 & 127) << 30) | (byte283 << 22) | (byte284 << 14) | (byte285 << 6) | (byte286 >>> 2);
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte286 & 3) << 35) | (byte287 << 27) | (byte288 << 19) | (byte289 << 11) | (byte290 << 3) | (byte291 >>> 5);
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte291 & 31) << 32) | (byte292 << 24) | (byte293 << 16) | (byte294 << 8) | byte295;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked29.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked29.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked29.java	(copie de travail)
@@ -1,920 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked29 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 29;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 35);
-        values[valuesOffset++] = (int) ((block0 >>> 6) & 536870911L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 63L) << 23) | (block1 >>> 41));
-        values[valuesOffset++] = (int) ((block1 >>> 12) & 536870911L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 4095L) << 17) | (block2 >>> 47));
-        values[valuesOffset++] = (int) ((block2 >>> 18) & 536870911L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 262143L) << 11) | (block3 >>> 53));
-        values[valuesOffset++] = (int) ((block3 >>> 24) & 536870911L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 16777215L) << 5) | (block4 >>> 59));
-        values[valuesOffset++] = (int) ((block4 >>> 30) & 536870911L);
-        values[valuesOffset++] = (int) ((block4 >>> 1) & 536870911L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 1L) << 28) | (block5 >>> 36));
-        values[valuesOffset++] = (int) ((block5 >>> 7) & 536870911L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 127L) << 22) | (block6 >>> 42));
-        values[valuesOffset++] = (int) ((block6 >>> 13) & 536870911L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 8191L) << 16) | (block7 >>> 48));
-        values[valuesOffset++] = (int) ((block7 >>> 19) & 536870911L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 524287L) << 10) | (block8 >>> 54));
-        values[valuesOffset++] = (int) ((block8 >>> 25) & 536870911L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 33554431L) << 4) | (block9 >>> 60));
-        values[valuesOffset++] = (int) ((block9 >>> 31) & 536870911L);
-        values[valuesOffset++] = (int) ((block9 >>> 2) & 536870911L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 3L) << 27) | (block10 >>> 37));
-        values[valuesOffset++] = (int) ((block10 >>> 8) & 536870911L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 255L) << 21) | (block11 >>> 43));
-        values[valuesOffset++] = (int) ((block11 >>> 14) & 536870911L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 16383L) << 15) | (block12 >>> 49));
-        values[valuesOffset++] = (int) ((block12 >>> 20) & 536870911L);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block12 & 1048575L) << 9) | (block13 >>> 55));
-        values[valuesOffset++] = (int) ((block13 >>> 26) & 536870911L);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block13 & 67108863L) << 3) | (block14 >>> 61));
-        values[valuesOffset++] = (int) ((block14 >>> 32) & 536870911L);
-        values[valuesOffset++] = (int) ((block14 >>> 3) & 536870911L);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block14 & 7L) << 26) | (block15 >>> 38));
-        values[valuesOffset++] = (int) ((block15 >>> 9) & 536870911L);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block15 & 511L) << 20) | (block16 >>> 44));
-        values[valuesOffset++] = (int) ((block16 >>> 15) & 536870911L);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block16 & 32767L) << 14) | (block17 >>> 50));
-        values[valuesOffset++] = (int) ((block17 >>> 21) & 536870911L);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block17 & 2097151L) << 8) | (block18 >>> 56));
-        values[valuesOffset++] = (int) ((block18 >>> 27) & 536870911L);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block18 & 134217727L) << 2) | (block19 >>> 62));
-        values[valuesOffset++] = (int) ((block19 >>> 33) & 536870911L);
-        values[valuesOffset++] = (int) ((block19 >>> 4) & 536870911L);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block19 & 15L) << 25) | (block20 >>> 39));
-        values[valuesOffset++] = (int) ((block20 >>> 10) & 536870911L);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block20 & 1023L) << 19) | (block21 >>> 45));
-        values[valuesOffset++] = (int) ((block21 >>> 16) & 536870911L);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block21 & 65535L) << 13) | (block22 >>> 51));
-        values[valuesOffset++] = (int) ((block22 >>> 22) & 536870911L);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block22 & 4194303L) << 7) | (block23 >>> 57));
-        values[valuesOffset++] = (int) ((block23 >>> 28) & 536870911L);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block23 & 268435455L) << 1) | (block24 >>> 63));
-        values[valuesOffset++] = (int) ((block24 >>> 34) & 536870911L);
-        values[valuesOffset++] = (int) ((block24 >>> 5) & 536870911L);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block24 & 31L) << 24) | (block25 >>> 40));
-        values[valuesOffset++] = (int) ((block25 >>> 11) & 536870911L);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block25 & 2047L) << 18) | (block26 >>> 46));
-        values[valuesOffset++] = (int) ((block26 >>> 17) & 536870911L);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block26 & 131071L) << 12) | (block27 >>> 52));
-        values[valuesOffset++] = (int) ((block27 >>> 23) & 536870911L);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block27 & 8388607L) << 6) | (block28 >>> 58));
-        values[valuesOffset++] = (int) ((block28 >>> 29) & 536870911L);
-        values[valuesOffset++] = (int) (block28 & 536870911L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 21) | (byte1 << 13) | (byte2 << 5) | (byte3 >>> 3);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 7) << 26) | (byte4 << 18) | (byte5 << 10) | (byte6 << 2) | (byte7 >>> 6);
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 63) << 23) | (byte8 << 15) | (byte9 << 7) | (byte10 >>> 1);
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 1) << 28) | (byte11 << 20) | (byte12 << 12) | (byte13 << 4) | (byte14 >>> 4);
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 15) << 25) | (byte15 << 17) | (byte16 << 9) | (byte17 << 1) | (byte18 >>> 7);
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 127) << 22) | (byte19 << 14) | (byte20 << 6) | (byte21 >>> 2);
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 3) << 27) | (byte22 << 19) | (byte23 << 11) | (byte24 << 3) | (byte25 >>> 5);
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte25 & 31) << 24) | (byte26 << 16) | (byte27 << 8) | byte28;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte29 << 21) | (byte30 << 13) | (byte31 << 5) | (byte32 >>> 3);
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 7) << 26) | (byte33 << 18) | (byte34 << 10) | (byte35 << 2) | (byte36 >>> 6);
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 63) << 23) | (byte37 << 15) | (byte38 << 7) | (byte39 >>> 1);
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 1) << 28) | (byte40 << 20) | (byte41 << 12) | (byte42 << 4) | (byte43 >>> 4);
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 15) << 25) | (byte44 << 17) | (byte45 << 9) | (byte46 << 1) | (byte47 >>> 7);
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 127) << 22) | (byte48 << 14) | (byte49 << 6) | (byte50 >>> 2);
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 3) << 27) | (byte51 << 19) | (byte52 << 11) | (byte53 << 3) | (byte54 >>> 5);
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte54 & 31) << 24) | (byte55 << 16) | (byte56 << 8) | byte57;
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte58 << 21) | (byte59 << 13) | (byte60 << 5) | (byte61 >>> 3);
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 7) << 26) | (byte62 << 18) | (byte63 << 10) | (byte64 << 2) | (byte65 >>> 6);
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 63) << 23) | (byte66 << 15) | (byte67 << 7) | (byte68 >>> 1);
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 1) << 28) | (byte69 << 20) | (byte70 << 12) | (byte71 << 4) | (byte72 >>> 4);
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte72 & 15) << 25) | (byte73 << 17) | (byte74 << 9) | (byte75 << 1) | (byte76 >>> 7);
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 127) << 22) | (byte77 << 14) | (byte78 << 6) | (byte79 >>> 2);
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte79 & 3) << 27) | (byte80 << 19) | (byte81 << 11) | (byte82 << 3) | (byte83 >>> 5);
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte83 & 31) << 24) | (byte84 << 16) | (byte85 << 8) | byte86;
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte87 << 21) | (byte88 << 13) | (byte89 << 5) | (byte90 >>> 3);
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 7) << 26) | (byte91 << 18) | (byte92 << 10) | (byte93 << 2) | (byte94 >>> 6);
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 63) << 23) | (byte95 << 15) | (byte96 << 7) | (byte97 >>> 1);
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 1) << 28) | (byte98 << 20) | (byte99 << 12) | (byte100 << 4) | (byte101 >>> 4);
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        final int byte104 = blocks[blocksOffset++] & 0xFF;
-        final int byte105 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 15) << 25) | (byte102 << 17) | (byte103 << 9) | (byte104 << 1) | (byte105 >>> 7);
-        final int byte106 = blocks[blocksOffset++] & 0xFF;
-        final int byte107 = blocks[blocksOffset++] & 0xFF;
-        final int byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte105 & 127) << 22) | (byte106 << 14) | (byte107 << 6) | (byte108 >>> 2);
-        final int byte109 = blocks[blocksOffset++] & 0xFF;
-        final int byte110 = blocks[blocksOffset++] & 0xFF;
-        final int byte111 = blocks[blocksOffset++] & 0xFF;
-        final int byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 3) << 27) | (byte109 << 19) | (byte110 << 11) | (byte111 << 3) | (byte112 >>> 5);
-        final int byte113 = blocks[blocksOffset++] & 0xFF;
-        final int byte114 = blocks[blocksOffset++] & 0xFF;
-        final int byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 31) << 24) | (byte113 << 16) | (byte114 << 8) | byte115;
-        final int byte116 = blocks[blocksOffset++] & 0xFF;
-        final int byte117 = blocks[blocksOffset++] & 0xFF;
-        final int byte118 = blocks[blocksOffset++] & 0xFF;
-        final int byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte116 << 21) | (byte117 << 13) | (byte118 << 5) | (byte119 >>> 3);
-        final int byte120 = blocks[blocksOffset++] & 0xFF;
-        final int byte121 = blocks[blocksOffset++] & 0xFF;
-        final int byte122 = blocks[blocksOffset++] & 0xFF;
-        final int byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte119 & 7) << 26) | (byte120 << 18) | (byte121 << 10) | (byte122 << 2) | (byte123 >>> 6);
-        final int byte124 = blocks[blocksOffset++] & 0xFF;
-        final int byte125 = blocks[blocksOffset++] & 0xFF;
-        final int byte126 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 63) << 23) | (byte124 << 15) | (byte125 << 7) | (byte126 >>> 1);
-        final int byte127 = blocks[blocksOffset++] & 0xFF;
-        final int byte128 = blocks[blocksOffset++] & 0xFF;
-        final int byte129 = blocks[blocksOffset++] & 0xFF;
-        final int byte130 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte126 & 1) << 28) | (byte127 << 20) | (byte128 << 12) | (byte129 << 4) | (byte130 >>> 4);
-        final int byte131 = blocks[blocksOffset++] & 0xFF;
-        final int byte132 = blocks[blocksOffset++] & 0xFF;
-        final int byte133 = blocks[blocksOffset++] & 0xFF;
-        final int byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte130 & 15) << 25) | (byte131 << 17) | (byte132 << 9) | (byte133 << 1) | (byte134 >>> 7);
-        final int byte135 = blocks[blocksOffset++] & 0xFF;
-        final int byte136 = blocks[blocksOffset++] & 0xFF;
-        final int byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 127) << 22) | (byte135 << 14) | (byte136 << 6) | (byte137 >>> 2);
-        final int byte138 = blocks[blocksOffset++] & 0xFF;
-        final int byte139 = blocks[blocksOffset++] & 0xFF;
-        final int byte140 = blocks[blocksOffset++] & 0xFF;
-        final int byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 3) << 27) | (byte138 << 19) | (byte139 << 11) | (byte140 << 3) | (byte141 >>> 5);
-        final int byte142 = blocks[blocksOffset++] & 0xFF;
-        final int byte143 = blocks[blocksOffset++] & 0xFF;
-        final int byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 31) << 24) | (byte142 << 16) | (byte143 << 8) | byte144;
-        final int byte145 = blocks[blocksOffset++] & 0xFF;
-        final int byte146 = blocks[blocksOffset++] & 0xFF;
-        final int byte147 = blocks[blocksOffset++] & 0xFF;
-        final int byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte145 << 21) | (byte146 << 13) | (byte147 << 5) | (byte148 >>> 3);
-        final int byte149 = blocks[blocksOffset++] & 0xFF;
-        final int byte150 = blocks[blocksOffset++] & 0xFF;
-        final int byte151 = blocks[blocksOffset++] & 0xFF;
-        final int byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 7) << 26) | (byte149 << 18) | (byte150 << 10) | (byte151 << 2) | (byte152 >>> 6);
-        final int byte153 = blocks[blocksOffset++] & 0xFF;
-        final int byte154 = blocks[blocksOffset++] & 0xFF;
-        final int byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 63) << 23) | (byte153 << 15) | (byte154 << 7) | (byte155 >>> 1);
-        final int byte156 = blocks[blocksOffset++] & 0xFF;
-        final int byte157 = blocks[blocksOffset++] & 0xFF;
-        final int byte158 = blocks[blocksOffset++] & 0xFF;
-        final int byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 1) << 28) | (byte156 << 20) | (byte157 << 12) | (byte158 << 4) | (byte159 >>> 4);
-        final int byte160 = blocks[blocksOffset++] & 0xFF;
-        final int byte161 = blocks[blocksOffset++] & 0xFF;
-        final int byte162 = blocks[blocksOffset++] & 0xFF;
-        final int byte163 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 15) << 25) | (byte160 << 17) | (byte161 << 9) | (byte162 << 1) | (byte163 >>> 7);
-        final int byte164 = blocks[blocksOffset++] & 0xFF;
-        final int byte165 = blocks[blocksOffset++] & 0xFF;
-        final int byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte163 & 127) << 22) | (byte164 << 14) | (byte165 << 6) | (byte166 >>> 2);
-        final int byte167 = blocks[blocksOffset++] & 0xFF;
-        final int byte168 = blocks[blocksOffset++] & 0xFF;
-        final int byte169 = blocks[blocksOffset++] & 0xFF;
-        final int byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 3) << 27) | (byte167 << 19) | (byte168 << 11) | (byte169 << 3) | (byte170 >>> 5);
-        final int byte171 = blocks[blocksOffset++] & 0xFF;
-        final int byte172 = blocks[blocksOffset++] & 0xFF;
-        final int byte173 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 31) << 24) | (byte171 << 16) | (byte172 << 8) | byte173;
-        final int byte174 = blocks[blocksOffset++] & 0xFF;
-        final int byte175 = blocks[blocksOffset++] & 0xFF;
-        final int byte176 = blocks[blocksOffset++] & 0xFF;
-        final int byte177 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte174 << 21) | (byte175 << 13) | (byte176 << 5) | (byte177 >>> 3);
-        final int byte178 = blocks[blocksOffset++] & 0xFF;
-        final int byte179 = blocks[blocksOffset++] & 0xFF;
-        final int byte180 = blocks[blocksOffset++] & 0xFF;
-        final int byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte177 & 7) << 26) | (byte178 << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final int byte182 = blocks[blocksOffset++] & 0xFF;
-        final int byte183 = blocks[blocksOffset++] & 0xFF;
-        final int byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 23) | (byte182 << 15) | (byte183 << 7) | (byte184 >>> 1);
-        final int byte185 = blocks[blocksOffset++] & 0xFF;
-        final int byte186 = blocks[blocksOffset++] & 0xFF;
-        final int byte187 = blocks[blocksOffset++] & 0xFF;
-        final int byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 1) << 28) | (byte185 << 20) | (byte186 << 12) | (byte187 << 4) | (byte188 >>> 4);
-        final int byte189 = blocks[blocksOffset++] & 0xFF;
-        final int byte190 = blocks[blocksOffset++] & 0xFF;
-        final int byte191 = blocks[blocksOffset++] & 0xFF;
-        final int byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte188 & 15) << 25) | (byte189 << 17) | (byte190 << 9) | (byte191 << 1) | (byte192 >>> 7);
-        final int byte193 = blocks[blocksOffset++] & 0xFF;
-        final int byte194 = blocks[blocksOffset++] & 0xFF;
-        final int byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 127) << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final int byte196 = blocks[blocksOffset++] & 0xFF;
-        final int byte197 = blocks[blocksOffset++] & 0xFF;
-        final int byte198 = blocks[blocksOffset++] & 0xFF;
-        final int byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 27) | (byte196 << 19) | (byte197 << 11) | (byte198 << 3) | (byte199 >>> 5);
-        final int byte200 = blocks[blocksOffset++] & 0xFF;
-        final int byte201 = blocks[blocksOffset++] & 0xFF;
-        final int byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 31) << 24) | (byte200 << 16) | (byte201 << 8) | byte202;
-        final int byte203 = blocks[blocksOffset++] & 0xFF;
-        final int byte204 = blocks[blocksOffset++] & 0xFF;
-        final int byte205 = blocks[blocksOffset++] & 0xFF;
-        final int byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte203 << 21) | (byte204 << 13) | (byte205 << 5) | (byte206 >>> 3);
-        final int byte207 = blocks[blocksOffset++] & 0xFF;
-        final int byte208 = blocks[blocksOffset++] & 0xFF;
-        final int byte209 = blocks[blocksOffset++] & 0xFF;
-        final int byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 7) << 26) | (byte207 << 18) | (byte208 << 10) | (byte209 << 2) | (byte210 >>> 6);
-        final int byte211 = blocks[blocksOffset++] & 0xFF;
-        final int byte212 = blocks[blocksOffset++] & 0xFF;
-        final int byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 63) << 23) | (byte211 << 15) | (byte212 << 7) | (byte213 >>> 1);
-        final int byte214 = blocks[blocksOffset++] & 0xFF;
-        final int byte215 = blocks[blocksOffset++] & 0xFF;
-        final int byte216 = blocks[blocksOffset++] & 0xFF;
-        final int byte217 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 1) << 28) | (byte214 << 20) | (byte215 << 12) | (byte216 << 4) | (byte217 >>> 4);
-        final int byte218 = blocks[blocksOffset++] & 0xFF;
-        final int byte219 = blocks[blocksOffset++] & 0xFF;
-        final int byte220 = blocks[blocksOffset++] & 0xFF;
-        final int byte221 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte217 & 15) << 25) | (byte218 << 17) | (byte219 << 9) | (byte220 << 1) | (byte221 >>> 7);
-        final int byte222 = blocks[blocksOffset++] & 0xFF;
-        final int byte223 = blocks[blocksOffset++] & 0xFF;
-        final int byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte221 & 127) << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final int byte225 = blocks[blocksOffset++] & 0xFF;
-        final int byte226 = blocks[blocksOffset++] & 0xFF;
-        final int byte227 = blocks[blocksOffset++] & 0xFF;
-        final int byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 27) | (byte225 << 19) | (byte226 << 11) | (byte227 << 3) | (byte228 >>> 5);
-        final int byte229 = blocks[blocksOffset++] & 0xFF;
-        final int byte230 = blocks[blocksOffset++] & 0xFF;
-        final int byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 31) << 24) | (byte229 << 16) | (byte230 << 8) | byte231;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 35;
-        values[valuesOffset++] = (block0 >>> 6) & 536870911L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 63L) << 23) | (block1 >>> 41);
-        values[valuesOffset++] = (block1 >>> 12) & 536870911L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 4095L) << 17) | (block2 >>> 47);
-        values[valuesOffset++] = (block2 >>> 18) & 536870911L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 262143L) << 11) | (block3 >>> 53);
-        values[valuesOffset++] = (block3 >>> 24) & 536870911L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 16777215L) << 5) | (block4 >>> 59);
-        values[valuesOffset++] = (block4 >>> 30) & 536870911L;
-        values[valuesOffset++] = (block4 >>> 1) & 536870911L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1L) << 28) | (block5 >>> 36);
-        values[valuesOffset++] = (block5 >>> 7) & 536870911L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 127L) << 22) | (block6 >>> 42);
-        values[valuesOffset++] = (block6 >>> 13) & 536870911L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 8191L) << 16) | (block7 >>> 48);
-        values[valuesOffset++] = (block7 >>> 19) & 536870911L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 524287L) << 10) | (block8 >>> 54);
-        values[valuesOffset++] = (block8 >>> 25) & 536870911L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 33554431L) << 4) | (block9 >>> 60);
-        values[valuesOffset++] = (block9 >>> 31) & 536870911L;
-        values[valuesOffset++] = (block9 >>> 2) & 536870911L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 3L) << 27) | (block10 >>> 37);
-        values[valuesOffset++] = (block10 >>> 8) & 536870911L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 255L) << 21) | (block11 >>> 43);
-        values[valuesOffset++] = (block11 >>> 14) & 536870911L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 16383L) << 15) | (block12 >>> 49);
-        values[valuesOffset++] = (block12 >>> 20) & 536870911L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 1048575L) << 9) | (block13 >>> 55);
-        values[valuesOffset++] = (block13 >>> 26) & 536870911L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 67108863L) << 3) | (block14 >>> 61);
-        values[valuesOffset++] = (block14 >>> 32) & 536870911L;
-        values[valuesOffset++] = (block14 >>> 3) & 536870911L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 7L) << 26) | (block15 >>> 38);
-        values[valuesOffset++] = (block15 >>> 9) & 536870911L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 511L) << 20) | (block16 >>> 44);
-        values[valuesOffset++] = (block16 >>> 15) & 536870911L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 32767L) << 14) | (block17 >>> 50);
-        values[valuesOffset++] = (block17 >>> 21) & 536870911L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 2097151L) << 8) | (block18 >>> 56);
-        values[valuesOffset++] = (block18 >>> 27) & 536870911L;
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 134217727L) << 2) | (block19 >>> 62);
-        values[valuesOffset++] = (block19 >>> 33) & 536870911L;
-        values[valuesOffset++] = (block19 >>> 4) & 536870911L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 15L) << 25) | (block20 >>> 39);
-        values[valuesOffset++] = (block20 >>> 10) & 536870911L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 1023L) << 19) | (block21 >>> 45);
-        values[valuesOffset++] = (block21 >>> 16) & 536870911L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 65535L) << 13) | (block22 >>> 51);
-        values[valuesOffset++] = (block22 >>> 22) & 536870911L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4194303L) << 7) | (block23 >>> 57);
-        values[valuesOffset++] = (block23 >>> 28) & 536870911L;
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 268435455L) << 1) | (block24 >>> 63);
-        values[valuesOffset++] = (block24 >>> 34) & 536870911L;
-        values[valuesOffset++] = (block24 >>> 5) & 536870911L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 31L) << 24) | (block25 >>> 40);
-        values[valuesOffset++] = (block25 >>> 11) & 536870911L;
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 2047L) << 18) | (block26 >>> 46);
-        values[valuesOffset++] = (block26 >>> 17) & 536870911L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 131071L) << 12) | (block27 >>> 52);
-        values[valuesOffset++] = (block27 >>> 23) & 536870911L;
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 8388607L) << 6) | (block28 >>> 58);
-        values[valuesOffset++] = (block28 >>> 29) & 536870911L;
-        values[valuesOffset++] = block28 & 536870911L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 21) | (byte1 << 13) | (byte2 << 5) | (byte3 >>> 3);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 7) << 26) | (byte4 << 18) | (byte5 << 10) | (byte6 << 2) | (byte7 >>> 6);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 63) << 23) | (byte8 << 15) | (byte9 << 7) | (byte10 >>> 1);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 1) << 28) | (byte11 << 20) | (byte12 << 12) | (byte13 << 4) | (byte14 >>> 4);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 15) << 25) | (byte15 << 17) | (byte16 << 9) | (byte17 << 1) | (byte18 >>> 7);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 127) << 22) | (byte19 << 14) | (byte20 << 6) | (byte21 >>> 2);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 3) << 27) | (byte22 << 19) | (byte23 << 11) | (byte24 << 3) | (byte25 >>> 5);
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte25 & 31) << 24) | (byte26 << 16) | (byte27 << 8) | byte28;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte29 << 21) | (byte30 << 13) | (byte31 << 5) | (byte32 >>> 3);
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 7) << 26) | (byte33 << 18) | (byte34 << 10) | (byte35 << 2) | (byte36 >>> 6);
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 63) << 23) | (byte37 << 15) | (byte38 << 7) | (byte39 >>> 1);
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte39 & 1) << 28) | (byte40 << 20) | (byte41 << 12) | (byte42 << 4) | (byte43 >>> 4);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 15) << 25) | (byte44 << 17) | (byte45 << 9) | (byte46 << 1) | (byte47 >>> 7);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 127) << 22) | (byte48 << 14) | (byte49 << 6) | (byte50 >>> 2);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 3) << 27) | (byte51 << 19) | (byte52 << 11) | (byte53 << 3) | (byte54 >>> 5);
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte54 & 31) << 24) | (byte55 << 16) | (byte56 << 8) | byte57;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte58 << 21) | (byte59 << 13) | (byte60 << 5) | (byte61 >>> 3);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 7) << 26) | (byte62 << 18) | (byte63 << 10) | (byte64 << 2) | (byte65 >>> 6);
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 63) << 23) | (byte66 << 15) | (byte67 << 7) | (byte68 >>> 1);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 1) << 28) | (byte69 << 20) | (byte70 << 12) | (byte71 << 4) | (byte72 >>> 4);
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte72 & 15) << 25) | (byte73 << 17) | (byte74 << 9) | (byte75 << 1) | (byte76 >>> 7);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 127) << 22) | (byte77 << 14) | (byte78 << 6) | (byte79 >>> 2);
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte79 & 3) << 27) | (byte80 << 19) | (byte81 << 11) | (byte82 << 3) | (byte83 >>> 5);
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte83 & 31) << 24) | (byte84 << 16) | (byte85 << 8) | byte86;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte87 << 21) | (byte88 << 13) | (byte89 << 5) | (byte90 >>> 3);
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 7) << 26) | (byte91 << 18) | (byte92 << 10) | (byte93 << 2) | (byte94 >>> 6);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 63) << 23) | (byte95 << 15) | (byte96 << 7) | (byte97 >>> 1);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 1) << 28) | (byte98 << 20) | (byte99 << 12) | (byte100 << 4) | (byte101 >>> 4);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 15) << 25) | (byte102 << 17) | (byte103 << 9) | (byte104 << 1) | (byte105 >>> 7);
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte105 & 127) << 22) | (byte106 << 14) | (byte107 << 6) | (byte108 >>> 2);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 3) << 27) | (byte109 << 19) | (byte110 << 11) | (byte111 << 3) | (byte112 >>> 5);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 31) << 24) | (byte113 << 16) | (byte114 << 8) | byte115;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte116 << 21) | (byte117 << 13) | (byte118 << 5) | (byte119 >>> 3);
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte119 & 7) << 26) | (byte120 << 18) | (byte121 << 10) | (byte122 << 2) | (byte123 >>> 6);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 63) << 23) | (byte124 << 15) | (byte125 << 7) | (byte126 >>> 1);
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte126 & 1) << 28) | (byte127 << 20) | (byte128 << 12) | (byte129 << 4) | (byte130 >>> 4);
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte130 & 15) << 25) | (byte131 << 17) | (byte132 << 9) | (byte133 << 1) | (byte134 >>> 7);
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 127) << 22) | (byte135 << 14) | (byte136 << 6) | (byte137 >>> 2);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 3) << 27) | (byte138 << 19) | (byte139 << 11) | (byte140 << 3) | (byte141 >>> 5);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 31) << 24) | (byte142 << 16) | (byte143 << 8) | byte144;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte145 << 21) | (byte146 << 13) | (byte147 << 5) | (byte148 >>> 3);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 7) << 26) | (byte149 << 18) | (byte150 << 10) | (byte151 << 2) | (byte152 >>> 6);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 63) << 23) | (byte153 << 15) | (byte154 << 7) | (byte155 >>> 1);
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 1) << 28) | (byte156 << 20) | (byte157 << 12) | (byte158 << 4) | (byte159 >>> 4);
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 15) << 25) | (byte160 << 17) | (byte161 << 9) | (byte162 << 1) | (byte163 >>> 7);
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte163 & 127) << 22) | (byte164 << 14) | (byte165 << 6) | (byte166 >>> 2);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 3) << 27) | (byte167 << 19) | (byte168 << 11) | (byte169 << 3) | (byte170 >>> 5);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 31) << 24) | (byte171 << 16) | (byte172 << 8) | byte173;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte174 << 21) | (byte175 << 13) | (byte176 << 5) | (byte177 >>> 3);
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte177 & 7) << 26) | (byte178 << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 23) | (byte182 << 15) | (byte183 << 7) | (byte184 >>> 1);
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte184 & 1) << 28) | (byte185 << 20) | (byte186 << 12) | (byte187 << 4) | (byte188 >>> 4);
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte188 & 15) << 25) | (byte189 << 17) | (byte190 << 9) | (byte191 << 1) | (byte192 >>> 7);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 127) << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 27) | (byte196 << 19) | (byte197 << 11) | (byte198 << 3) | (byte199 >>> 5);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 31) << 24) | (byte200 << 16) | (byte201 << 8) | byte202;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte203 << 21) | (byte204 << 13) | (byte205 << 5) | (byte206 >>> 3);
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 7) << 26) | (byte207 << 18) | (byte208 << 10) | (byte209 << 2) | (byte210 >>> 6);
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 63) << 23) | (byte211 << 15) | (byte212 << 7) | (byte213 >>> 1);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 1) << 28) | (byte214 << 20) | (byte215 << 12) | (byte216 << 4) | (byte217 >>> 4);
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte217 & 15) << 25) | (byte218 << 17) | (byte219 << 9) | (byte220 << 1) | (byte221 >>> 7);
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte221 & 127) << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 27) | (byte225 << 19) | (byte226 << 11) | (byte227 << 3) | (byte228 >>> 5);
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte228 & 31) << 24) | (byte229 << 16) | (byte230 << 8) | byte231;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 29) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 29) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked57.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked57.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked57.java	(copie de travail)
@@ -1,833 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked57 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 57;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 7;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 127L) << 50) | (block1 >>> 14);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 16383L) << 43) | (block2 >>> 21);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 2097151L) << 36) | (block3 >>> 28);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 268435455L) << 29) | (block4 >>> 35);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 34359738367L) << 22) | (block5 >>> 42);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 4398046511103L) << 15) | (block6 >>> 49);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 562949953421311L) << 8) | (block7 >>> 56);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 72057594037927935L) << 1) | (block8 >>> 63);
-        values[valuesOffset++] = (block8 >>> 6) & 144115188075855871L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 63L) << 51) | (block9 >>> 13);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 8191L) << 44) | (block10 >>> 20);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 1048575L) << 37) | (block11 >>> 27);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 134217727L) << 30) | (block12 >>> 34);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 17179869183L) << 23) | (block13 >>> 41);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 2199023255551L) << 16) | (block14 >>> 48);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 281474976710655L) << 9) | (block15 >>> 55);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 36028797018963967L) << 2) | (block16 >>> 62);
-        values[valuesOffset++] = (block16 >>> 5) & 144115188075855871L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 31L) << 52) | (block17 >>> 12);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 4095L) << 45) | (block18 >>> 19);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 524287L) << 38) | (block19 >>> 26);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 67108863L) << 31) | (block20 >>> 33);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 8589934591L) << 24) | (block21 >>> 40);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 1099511627775L) << 17) | (block22 >>> 47);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 140737488355327L) << 10) | (block23 >>> 54);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 18014398509481983L) << 3) | (block24 >>> 61);
-        values[valuesOffset++] = (block24 >>> 4) & 144115188075855871L;
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 15L) << 53) | (block25 >>> 11);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 2047L) << 46) | (block26 >>> 18);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 262143L) << 39) | (block27 >>> 25);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 33554431L) << 32) | (block28 >>> 32);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 4294967295L) << 25) | (block29 >>> 39);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 549755813887L) << 18) | (block30 >>> 46);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 70368744177663L) << 11) | (block31 >>> 53);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 9007199254740991L) << 4) | (block32 >>> 60);
-        values[valuesOffset++] = (block32 >>> 3) & 144115188075855871L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 7L) << 54) | (block33 >>> 10);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 1023L) << 47) | (block34 >>> 17);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 131071L) << 40) | (block35 >>> 24);
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 16777215L) << 33) | (block36 >>> 31);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 2147483647L) << 26) | (block37 >>> 38);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 274877906943L) << 19) | (block38 >>> 45);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 35184372088831L) << 12) | (block39 >>> 52);
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 4503599627370495L) << 5) | (block40 >>> 59);
-        values[valuesOffset++] = (block40 >>> 2) & 144115188075855871L;
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 3L) << 55) | (block41 >>> 9);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 511L) << 48) | (block42 >>> 16);
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 65535L) << 41) | (block43 >>> 23);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 8388607L) << 34) | (block44 >>> 30);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 1073741823L) << 27) | (block45 >>> 37);
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 137438953471L) << 20) | (block46 >>> 44);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 17592186044415L) << 13) | (block47 >>> 51);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 2251799813685247L) << 6) | (block48 >>> 58);
-        values[valuesOffset++] = (block48 >>> 1) & 144115188075855871L;
-        final long block49 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block48 & 1L) << 56) | (block49 >>> 8);
-        final long block50 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block49 & 255L) << 49) | (block50 >>> 15);
-        final long block51 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block50 & 32767L) << 42) | (block51 >>> 22);
-        final long block52 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block51 & 4194303L) << 35) | (block52 >>> 29);
-        final long block53 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block52 & 536870911L) << 28) | (block53 >>> 36);
-        final long block54 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block53 & 68719476735L) << 21) | (block54 >>> 43);
-        final long block55 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block54 & 8796093022207L) << 14) | (block55 >>> 50);
-        final long block56 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block55 & 1125899906842623L) << 7) | (block56 >>> 57);
-        values[valuesOffset++] = block56 & 144115188075855871L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 49) | (byte1 << 41) | (byte2 << 33) | (byte3 << 25) | (byte4 << 17) | (byte5 << 9) | (byte6 << 1) | (byte7 >>> 7);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 127) << 50) | (byte8 << 42) | (byte9 << 34) | (byte10 << 26) | (byte11 << 18) | (byte12 << 10) | (byte13 << 2) | (byte14 >>> 6);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 63) << 51) | (byte15 << 43) | (byte16 << 35) | (byte17 << 27) | (byte18 << 19) | (byte19 << 11) | (byte20 << 3) | (byte21 >>> 5);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 31) << 52) | (byte22 << 44) | (byte23 << 36) | (byte24 << 28) | (byte25 << 20) | (byte26 << 12) | (byte27 << 4) | (byte28 >>> 4);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 15) << 53) | (byte29 << 45) | (byte30 << 37) | (byte31 << 29) | (byte32 << 21) | (byte33 << 13) | (byte34 << 5) | (byte35 >>> 3);
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte35 & 7) << 54) | (byte36 << 46) | (byte37 << 38) | (byte38 << 30) | (byte39 << 22) | (byte40 << 14) | (byte41 << 6) | (byte42 >>> 2);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 3) << 55) | (byte43 << 47) | (byte44 << 39) | (byte45 << 31) | (byte46 << 23) | (byte47 << 15) | (byte48 << 7) | (byte49 >>> 1);
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte49 & 1) << 56) | (byte50 << 48) | (byte51 << 40) | (byte52 << 32) | (byte53 << 24) | (byte54 << 16) | (byte55 << 8) | byte56;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte57 << 49) | (byte58 << 41) | (byte59 << 33) | (byte60 << 25) | (byte61 << 17) | (byte62 << 9) | (byte63 << 1) | (byte64 >>> 7);
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte64 & 127) << 50) | (byte65 << 42) | (byte66 << 34) | (byte67 << 26) | (byte68 << 18) | (byte69 << 10) | (byte70 << 2) | (byte71 >>> 6);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 63) << 51) | (byte72 << 43) | (byte73 << 35) | (byte74 << 27) | (byte75 << 19) | (byte76 << 11) | (byte77 << 3) | (byte78 >>> 5);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 31) << 52) | (byte79 << 44) | (byte80 << 36) | (byte81 << 28) | (byte82 << 20) | (byte83 << 12) | (byte84 << 4) | (byte85 >>> 4);
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 15) << 53) | (byte86 << 45) | (byte87 << 37) | (byte88 << 29) | (byte89 << 21) | (byte90 << 13) | (byte91 << 5) | (byte92 >>> 3);
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte92 & 7) << 54) | (byte93 << 46) | (byte94 << 38) | (byte95 << 30) | (byte96 << 22) | (byte97 << 14) | (byte98 << 6) | (byte99 >>> 2);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 3) << 55) | (byte100 << 47) | (byte101 << 39) | (byte102 << 31) | (byte103 << 23) | (byte104 << 15) | (byte105 << 7) | (byte106 >>> 1);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 1) << 56) | (byte107 << 48) | (byte108 << 40) | (byte109 << 32) | (byte110 << 24) | (byte111 << 16) | (byte112 << 8) | byte113;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte114 << 49) | (byte115 << 41) | (byte116 << 33) | (byte117 << 25) | (byte118 << 17) | (byte119 << 9) | (byte120 << 1) | (byte121 >>> 7);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 127) << 50) | (byte122 << 42) | (byte123 << 34) | (byte124 << 26) | (byte125 << 18) | (byte126 << 10) | (byte127 << 2) | (byte128 >>> 6);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 63) << 51) | (byte129 << 43) | (byte130 << 35) | (byte131 << 27) | (byte132 << 19) | (byte133 << 11) | (byte134 << 3) | (byte135 >>> 5);
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte135 & 31) << 52) | (byte136 << 44) | (byte137 << 36) | (byte138 << 28) | (byte139 << 20) | (byte140 << 12) | (byte141 << 4) | (byte142 >>> 4);
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte142 & 15) << 53) | (byte143 << 45) | (byte144 << 37) | (byte145 << 29) | (byte146 << 21) | (byte147 << 13) | (byte148 << 5) | (byte149 >>> 3);
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte149 & 7) << 54) | (byte150 << 46) | (byte151 << 38) | (byte152 << 30) | (byte153 << 22) | (byte154 << 14) | (byte155 << 6) | (byte156 >>> 2);
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte156 & 3) << 55) | (byte157 << 47) | (byte158 << 39) | (byte159 << 31) | (byte160 << 23) | (byte161 << 15) | (byte162 << 7) | (byte163 >>> 1);
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte163 & 1) << 56) | (byte164 << 48) | (byte165 << 40) | (byte166 << 32) | (byte167 << 24) | (byte168 << 16) | (byte169 << 8) | byte170;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte171 << 49) | (byte172 << 41) | (byte173 << 33) | (byte174 << 25) | (byte175 << 17) | (byte176 << 9) | (byte177 << 1) | (byte178 >>> 7);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 127) << 50) | (byte179 << 42) | (byte180 << 34) | (byte181 << 26) | (byte182 << 18) | (byte183 << 10) | (byte184 << 2) | (byte185 >>> 6);
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte185 & 63) << 51) | (byte186 << 43) | (byte187 << 35) | (byte188 << 27) | (byte189 << 19) | (byte190 << 11) | (byte191 << 3) | (byte192 >>> 5);
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte192 & 31) << 52) | (byte193 << 44) | (byte194 << 36) | (byte195 << 28) | (byte196 << 20) | (byte197 << 12) | (byte198 << 4) | (byte199 >>> 4);
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte199 & 15) << 53) | (byte200 << 45) | (byte201 << 37) | (byte202 << 29) | (byte203 << 21) | (byte204 << 13) | (byte205 << 5) | (byte206 >>> 3);
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte206 & 7) << 54) | (byte207 << 46) | (byte208 << 38) | (byte209 << 30) | (byte210 << 22) | (byte211 << 14) | (byte212 << 6) | (byte213 >>> 2);
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte213 & 3) << 55) | (byte214 << 47) | (byte215 << 39) | (byte216 << 31) | (byte217 << 23) | (byte218 << 15) | (byte219 << 7) | (byte220 >>> 1);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 1) << 56) | (byte221 << 48) | (byte222 << 40) | (byte223 << 32) | (byte224 << 24) | (byte225 << 16) | (byte226 << 8) | byte227;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte228 << 49) | (byte229 << 41) | (byte230 << 33) | (byte231 << 25) | (byte232 << 17) | (byte233 << 9) | (byte234 << 1) | (byte235 >>> 7);
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte235 & 127) << 50) | (byte236 << 42) | (byte237 << 34) | (byte238 << 26) | (byte239 << 18) | (byte240 << 10) | (byte241 << 2) | (byte242 >>> 6);
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte242 & 63) << 51) | (byte243 << 43) | (byte244 << 35) | (byte245 << 27) | (byte246 << 19) | (byte247 << 11) | (byte248 << 3) | (byte249 >>> 5);
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte249 & 31) << 52) | (byte250 << 44) | (byte251 << 36) | (byte252 << 28) | (byte253 << 20) | (byte254 << 12) | (byte255 << 4) | (byte256 >>> 4);
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte256 & 15) << 53) | (byte257 << 45) | (byte258 << 37) | (byte259 << 29) | (byte260 << 21) | (byte261 << 13) | (byte262 << 5) | (byte263 >>> 3);
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte263 & 7) << 54) | (byte264 << 46) | (byte265 << 38) | (byte266 << 30) | (byte267 << 22) | (byte268 << 14) | (byte269 << 6) | (byte270 >>> 2);
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte270 & 3) << 55) | (byte271 << 47) | (byte272 << 39) | (byte273 << 31) | (byte274 << 23) | (byte275 << 15) | (byte276 << 7) | (byte277 >>> 1);
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte277 & 1) << 56) | (byte278 << 48) | (byte279 << 40) | (byte280 << 32) | (byte281 << 24) | (byte282 << 16) | (byte283 << 8) | byte284;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte285 << 49) | (byte286 << 41) | (byte287 << 33) | (byte288 << 25) | (byte289 << 17) | (byte290 << 9) | (byte291 << 1) | (byte292 >>> 7);
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte292 & 127) << 50) | (byte293 << 42) | (byte294 << 34) | (byte295 << 26) | (byte296 << 18) | (byte297 << 10) | (byte298 << 2) | (byte299 >>> 6);
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte299 & 63) << 51) | (byte300 << 43) | (byte301 << 35) | (byte302 << 27) | (byte303 << 19) | (byte304 << 11) | (byte305 << 3) | (byte306 >>> 5);
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte306 & 31) << 52) | (byte307 << 44) | (byte308 << 36) | (byte309 << 28) | (byte310 << 20) | (byte311 << 12) | (byte312 << 4) | (byte313 >>> 4);
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte313 & 15) << 53) | (byte314 << 45) | (byte315 << 37) | (byte316 << 29) | (byte317 << 21) | (byte318 << 13) | (byte319 << 5) | (byte320 >>> 3);
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte320 & 7) << 54) | (byte321 << 46) | (byte322 << 38) | (byte323 << 30) | (byte324 << 22) | (byte325 << 14) | (byte326 << 6) | (byte327 >>> 2);
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte327 & 3) << 55) | (byte328 << 47) | (byte329 << 39) | (byte330 << 31) | (byte331 << 23) | (byte332 << 15) | (byte333 << 7) | (byte334 >>> 1);
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte334 & 1) << 56) | (byte335 << 48) | (byte336 << 40) | (byte337 << 32) | (byte338 << 24) | (byte339 << 16) | (byte340 << 8) | byte341;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte342 << 49) | (byte343 << 41) | (byte344 << 33) | (byte345 << 25) | (byte346 << 17) | (byte347 << 9) | (byte348 << 1) | (byte349 >>> 7);
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte349 & 127) << 50) | (byte350 << 42) | (byte351 << 34) | (byte352 << 26) | (byte353 << 18) | (byte354 << 10) | (byte355 << 2) | (byte356 >>> 6);
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte356 & 63) << 51) | (byte357 << 43) | (byte358 << 35) | (byte359 << 27) | (byte360 << 19) | (byte361 << 11) | (byte362 << 3) | (byte363 >>> 5);
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte363 & 31) << 52) | (byte364 << 44) | (byte365 << 36) | (byte366 << 28) | (byte367 << 20) | (byte368 << 12) | (byte369 << 4) | (byte370 >>> 4);
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte370 & 15) << 53) | (byte371 << 45) | (byte372 << 37) | (byte373 << 29) | (byte374 << 21) | (byte375 << 13) | (byte376 << 5) | (byte377 >>> 3);
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte377 & 7) << 54) | (byte378 << 46) | (byte379 << 38) | (byte380 << 30) | (byte381 << 22) | (byte382 << 14) | (byte383 << 6) | (byte384 >>> 2);
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte384 & 3) << 55) | (byte385 << 47) | (byte386 << 39) | (byte387 << 31) | (byte388 << 23) | (byte389 << 15) | (byte390 << 7) | (byte391 >>> 1);
-        final long byte392 = blocks[blocksOffset++] & 0xFF;
-        final long byte393 = blocks[blocksOffset++] & 0xFF;
-        final long byte394 = blocks[blocksOffset++] & 0xFF;
-        final long byte395 = blocks[blocksOffset++] & 0xFF;
-        final long byte396 = blocks[blocksOffset++] & 0xFF;
-        final long byte397 = blocks[blocksOffset++] & 0xFF;
-        final long byte398 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte391 & 1) << 56) | (byte392 << 48) | (byte393 << 40) | (byte394 << 32) | (byte395 << 24) | (byte396 << 16) | (byte397 << 8) | byte398;
-        final long byte399 = blocks[blocksOffset++] & 0xFF;
-        final long byte400 = blocks[blocksOffset++] & 0xFF;
-        final long byte401 = blocks[blocksOffset++] & 0xFF;
-        final long byte402 = blocks[blocksOffset++] & 0xFF;
-        final long byte403 = blocks[blocksOffset++] & 0xFF;
-        final long byte404 = blocks[blocksOffset++] & 0xFF;
-        final long byte405 = blocks[blocksOffset++] & 0xFF;
-        final long byte406 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte399 << 49) | (byte400 << 41) | (byte401 << 33) | (byte402 << 25) | (byte403 << 17) | (byte404 << 9) | (byte405 << 1) | (byte406 >>> 7);
-        final long byte407 = blocks[blocksOffset++] & 0xFF;
-        final long byte408 = blocks[blocksOffset++] & 0xFF;
-        final long byte409 = blocks[blocksOffset++] & 0xFF;
-        final long byte410 = blocks[blocksOffset++] & 0xFF;
-        final long byte411 = blocks[blocksOffset++] & 0xFF;
-        final long byte412 = blocks[blocksOffset++] & 0xFF;
-        final long byte413 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte406 & 127) << 50) | (byte407 << 42) | (byte408 << 34) | (byte409 << 26) | (byte410 << 18) | (byte411 << 10) | (byte412 << 2) | (byte413 >>> 6);
-        final long byte414 = blocks[blocksOffset++] & 0xFF;
-        final long byte415 = blocks[blocksOffset++] & 0xFF;
-        final long byte416 = blocks[blocksOffset++] & 0xFF;
-        final long byte417 = blocks[blocksOffset++] & 0xFF;
-        final long byte418 = blocks[blocksOffset++] & 0xFF;
-        final long byte419 = blocks[blocksOffset++] & 0xFF;
-        final long byte420 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte413 & 63) << 51) | (byte414 << 43) | (byte415 << 35) | (byte416 << 27) | (byte417 << 19) | (byte418 << 11) | (byte419 << 3) | (byte420 >>> 5);
-        final long byte421 = blocks[blocksOffset++] & 0xFF;
-        final long byte422 = blocks[blocksOffset++] & 0xFF;
-        final long byte423 = blocks[blocksOffset++] & 0xFF;
-        final long byte424 = blocks[blocksOffset++] & 0xFF;
-        final long byte425 = blocks[blocksOffset++] & 0xFF;
-        final long byte426 = blocks[blocksOffset++] & 0xFF;
-        final long byte427 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte420 & 31) << 52) | (byte421 << 44) | (byte422 << 36) | (byte423 << 28) | (byte424 << 20) | (byte425 << 12) | (byte426 << 4) | (byte427 >>> 4);
-        final long byte428 = blocks[blocksOffset++] & 0xFF;
-        final long byte429 = blocks[blocksOffset++] & 0xFF;
-        final long byte430 = blocks[blocksOffset++] & 0xFF;
-        final long byte431 = blocks[blocksOffset++] & 0xFF;
-        final long byte432 = blocks[blocksOffset++] & 0xFF;
-        final long byte433 = blocks[blocksOffset++] & 0xFF;
-        final long byte434 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte427 & 15) << 53) | (byte428 << 45) | (byte429 << 37) | (byte430 << 29) | (byte431 << 21) | (byte432 << 13) | (byte433 << 5) | (byte434 >>> 3);
-        final long byte435 = blocks[blocksOffset++] & 0xFF;
-        final long byte436 = blocks[blocksOffset++] & 0xFF;
-        final long byte437 = blocks[blocksOffset++] & 0xFF;
-        final long byte438 = blocks[blocksOffset++] & 0xFF;
-        final long byte439 = blocks[blocksOffset++] & 0xFF;
-        final long byte440 = blocks[blocksOffset++] & 0xFF;
-        final long byte441 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte434 & 7) << 54) | (byte435 << 46) | (byte436 << 38) | (byte437 << 30) | (byte438 << 22) | (byte439 << 14) | (byte440 << 6) | (byte441 >>> 2);
-        final long byte442 = blocks[blocksOffset++] & 0xFF;
-        final long byte443 = blocks[blocksOffset++] & 0xFF;
-        final long byte444 = blocks[blocksOffset++] & 0xFF;
-        final long byte445 = blocks[blocksOffset++] & 0xFF;
-        final long byte446 = blocks[blocksOffset++] & 0xFF;
-        final long byte447 = blocks[blocksOffset++] & 0xFF;
-        final long byte448 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte441 & 3) << 55) | (byte442 << 47) | (byte443 << 39) | (byte444 << 31) | (byte445 << 23) | (byte446 << 15) | (byte447 << 7) | (byte448 >>> 1);
-        final long byte449 = blocks[blocksOffset++] & 0xFF;
-        final long byte450 = blocks[blocksOffset++] & 0xFF;
-        final long byte451 = blocks[blocksOffset++] & 0xFF;
-        final long byte452 = blocks[blocksOffset++] & 0xFF;
-        final long byte453 = blocks[blocksOffset++] & 0xFF;
-        final long byte454 = blocks[blocksOffset++] & 0xFF;
-        final long byte455 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte448 & 1) << 56) | (byte449 << 48) | (byte450 << 40) | (byte451 << 32) | (byte452 << 24) | (byte453 << 16) | (byte454 << 8) | byte455;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 51);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 53);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 55);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 49);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 51);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 53);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 55);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 49);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked49.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked49.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked49.java	(copie de travail)
@@ -1,745 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked49 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 49;
-    }
-
-    @Override
-    public int valueCount() {
-      return 64;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 15;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 32767L) << 34) | (block1 >>> 30);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1073741823L) << 19) | (block2 >>> 45);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 35184372088831L) << 4) | (block3 >>> 60);
-        values[valuesOffset++] = (block3 >>> 11) & 562949953421311L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 2047L) << 38) | (block4 >>> 26);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 67108863L) << 23) | (block5 >>> 41);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 2199023255551L) << 8) | (block6 >>> 56);
-        values[valuesOffset++] = (block6 >>> 7) & 562949953421311L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 127L) << 42) | (block7 >>> 22);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4194303L) << 27) | (block8 >>> 37);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 137438953471L) << 12) | (block9 >>> 52);
-        values[valuesOffset++] = (block9 >>> 3) & 562949953421311L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 7L) << 46) | (block10 >>> 18);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 262143L) << 31) | (block11 >>> 33);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 8589934591L) << 16) | (block12 >>> 48);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 281474976710655L) << 1) | (block13 >>> 63);
-        values[valuesOffset++] = (block13 >>> 14) & 562949953421311L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 16383L) << 35) | (block14 >>> 29);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 536870911L) << 20) | (block15 >>> 44);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 17592186044415L) << 5) | (block16 >>> 59);
-        values[valuesOffset++] = (block16 >>> 10) & 562949953421311L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 1023L) << 39) | (block17 >>> 25);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 33554431L) << 24) | (block18 >>> 40);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1099511627775L) << 9) | (block19 >>> 55);
-        values[valuesOffset++] = (block19 >>> 6) & 562949953421311L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 63L) << 43) | (block20 >>> 21);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 2097151L) << 28) | (block21 >>> 36);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 68719476735L) << 13) | (block22 >>> 51);
-        values[valuesOffset++] = (block22 >>> 2) & 562949953421311L;
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 3L) << 47) | (block23 >>> 17);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 131071L) << 32) | (block24 >>> 32);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 4294967295L) << 17) | (block25 >>> 47);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 140737488355327L) << 2) | (block26 >>> 62);
-        values[valuesOffset++] = (block26 >>> 13) & 562949953421311L;
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 8191L) << 36) | (block27 >>> 28);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 268435455L) << 21) | (block28 >>> 43);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 8796093022207L) << 6) | (block29 >>> 58);
-        values[valuesOffset++] = (block29 >>> 9) & 562949953421311L;
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 511L) << 40) | (block30 >>> 24);
-        final long block31 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block30 & 16777215L) << 25) | (block31 >>> 39);
-        final long block32 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block31 & 549755813887L) << 10) | (block32 >>> 54);
-        values[valuesOffset++] = (block32 >>> 5) & 562949953421311L;
-        final long block33 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block32 & 31L) << 44) | (block33 >>> 20);
-        final long block34 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block33 & 1048575L) << 29) | (block34 >>> 35);
-        final long block35 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block34 & 34359738367L) << 14) | (block35 >>> 50);
-        values[valuesOffset++] = (block35 >>> 1) & 562949953421311L;
-        final long block36 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block35 & 1L) << 48) | (block36 >>> 16);
-        final long block37 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block36 & 65535L) << 33) | (block37 >>> 31);
-        final long block38 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block37 & 2147483647L) << 18) | (block38 >>> 46);
-        final long block39 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block38 & 70368744177663L) << 3) | (block39 >>> 61);
-        values[valuesOffset++] = (block39 >>> 12) & 562949953421311L;
-        final long block40 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block39 & 4095L) << 37) | (block40 >>> 27);
-        final long block41 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block40 & 134217727L) << 22) | (block41 >>> 42);
-        final long block42 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block41 & 4398046511103L) << 7) | (block42 >>> 57);
-        values[valuesOffset++] = (block42 >>> 8) & 562949953421311L;
-        final long block43 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block42 & 255L) << 41) | (block43 >>> 23);
-        final long block44 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block43 & 8388607L) << 26) | (block44 >>> 38);
-        final long block45 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block44 & 274877906943L) << 11) | (block45 >>> 53);
-        values[valuesOffset++] = (block45 >>> 4) & 562949953421311L;
-        final long block46 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block45 & 15L) << 45) | (block46 >>> 19);
-        final long block47 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block46 & 524287L) << 30) | (block47 >>> 34);
-        final long block48 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block47 & 17179869183L) << 15) | (block48 >>> 49);
-        values[valuesOffset++] = block48 & 562949953421311L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 41) | (byte1 << 33) | (byte2 << 25) | (byte3 << 17) | (byte4 << 9) | (byte5 << 1) | (byte6 >>> 7);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 127) << 42) | (byte7 << 34) | (byte8 << 26) | (byte9 << 18) | (byte10 << 10) | (byte11 << 2) | (byte12 >>> 6);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 63) << 43) | (byte13 << 35) | (byte14 << 27) | (byte15 << 19) | (byte16 << 11) | (byte17 << 3) | (byte18 >>> 5);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 31) << 44) | (byte19 << 36) | (byte20 << 28) | (byte21 << 20) | (byte22 << 12) | (byte23 << 4) | (byte24 >>> 4);
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte24 & 15) << 45) | (byte25 << 37) | (byte26 << 29) | (byte27 << 21) | (byte28 << 13) | (byte29 << 5) | (byte30 >>> 3);
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte30 & 7) << 46) | (byte31 << 38) | (byte32 << 30) | (byte33 << 22) | (byte34 << 14) | (byte35 << 6) | (byte36 >>> 2);
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 3) << 47) | (byte37 << 39) | (byte38 << 31) | (byte39 << 23) | (byte40 << 15) | (byte41 << 7) | (byte42 >>> 1);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 1) << 48) | (byte43 << 40) | (byte44 << 32) | (byte45 << 24) | (byte46 << 16) | (byte47 << 8) | byte48;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte49 << 41) | (byte50 << 33) | (byte51 << 25) | (byte52 << 17) | (byte53 << 9) | (byte54 << 1) | (byte55 >>> 7);
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 127) << 42) | (byte56 << 34) | (byte57 << 26) | (byte58 << 18) | (byte59 << 10) | (byte60 << 2) | (byte61 >>> 6);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 63) << 43) | (byte62 << 35) | (byte63 << 27) | (byte64 << 19) | (byte65 << 11) | (byte66 << 3) | (byte67 >>> 5);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 31) << 44) | (byte68 << 36) | (byte69 << 28) | (byte70 << 20) | (byte71 << 12) | (byte72 << 4) | (byte73 >>> 4);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 15) << 45) | (byte74 << 37) | (byte75 << 29) | (byte76 << 21) | (byte77 << 13) | (byte78 << 5) | (byte79 >>> 3);
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte79 & 7) << 46) | (byte80 << 38) | (byte81 << 30) | (byte82 << 22) | (byte83 << 14) | (byte84 << 6) | (byte85 >>> 2);
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 3) << 47) | (byte86 << 39) | (byte87 << 31) | (byte88 << 23) | (byte89 << 15) | (byte90 << 7) | (byte91 >>> 1);
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte91 & 1) << 48) | (byte92 << 40) | (byte93 << 32) | (byte94 << 24) | (byte95 << 16) | (byte96 << 8) | byte97;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte98 << 41) | (byte99 << 33) | (byte100 << 25) | (byte101 << 17) | (byte102 << 9) | (byte103 << 1) | (byte104 >>> 7);
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 127) << 42) | (byte105 << 34) | (byte106 << 26) | (byte107 << 18) | (byte108 << 10) | (byte109 << 2) | (byte110 >>> 6);
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte110 & 63) << 43) | (byte111 << 35) | (byte112 << 27) | (byte113 << 19) | (byte114 << 11) | (byte115 << 3) | (byte116 >>> 5);
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 31) << 44) | (byte117 << 36) | (byte118 << 28) | (byte119 << 20) | (byte120 << 12) | (byte121 << 4) | (byte122 >>> 4);
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte122 & 15) << 45) | (byte123 << 37) | (byte124 << 29) | (byte125 << 21) | (byte126 << 13) | (byte127 << 5) | (byte128 >>> 3);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 7) << 46) | (byte129 << 38) | (byte130 << 30) | (byte131 << 22) | (byte132 << 14) | (byte133 << 6) | (byte134 >>> 2);
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte134 & 3) << 47) | (byte135 << 39) | (byte136 << 31) | (byte137 << 23) | (byte138 << 15) | (byte139 << 7) | (byte140 >>> 1);
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte140 & 1) << 48) | (byte141 << 40) | (byte142 << 32) | (byte143 << 24) | (byte144 << 16) | (byte145 << 8) | byte146;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte147 << 41) | (byte148 << 33) | (byte149 << 25) | (byte150 << 17) | (byte151 << 9) | (byte152 << 1) | (byte153 >>> 7);
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte153 & 127) << 42) | (byte154 << 34) | (byte155 << 26) | (byte156 << 18) | (byte157 << 10) | (byte158 << 2) | (byte159 >>> 6);
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 63) << 43) | (byte160 << 35) | (byte161 << 27) | (byte162 << 19) | (byte163 << 11) | (byte164 << 3) | (byte165 >>> 5);
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte165 & 31) << 44) | (byte166 << 36) | (byte167 << 28) | (byte168 << 20) | (byte169 << 12) | (byte170 << 4) | (byte171 >>> 4);
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte171 & 15) << 45) | (byte172 << 37) | (byte173 << 29) | (byte174 << 21) | (byte175 << 13) | (byte176 << 5) | (byte177 >>> 3);
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte177 & 7) << 46) | (byte178 << 38) | (byte179 << 30) | (byte180 << 22) | (byte181 << 14) | (byte182 << 6) | (byte183 >>> 2);
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte183 & 3) << 47) | (byte184 << 39) | (byte185 << 31) | (byte186 << 23) | (byte187 << 15) | (byte188 << 7) | (byte189 >>> 1);
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte189 & 1) << 48) | (byte190 << 40) | (byte191 << 32) | (byte192 << 24) | (byte193 << 16) | (byte194 << 8) | byte195;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte196 << 41) | (byte197 << 33) | (byte198 << 25) | (byte199 << 17) | (byte200 << 9) | (byte201 << 1) | (byte202 >>> 7);
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 127) << 42) | (byte203 << 34) | (byte204 << 26) | (byte205 << 18) | (byte206 << 10) | (byte207 << 2) | (byte208 >>> 6);
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte208 & 63) << 43) | (byte209 << 35) | (byte210 << 27) | (byte211 << 19) | (byte212 << 11) | (byte213 << 3) | (byte214 >>> 5);
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte214 & 31) << 44) | (byte215 << 36) | (byte216 << 28) | (byte217 << 20) | (byte218 << 12) | (byte219 << 4) | (byte220 >>> 4);
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte220 & 15) << 45) | (byte221 << 37) | (byte222 << 29) | (byte223 << 21) | (byte224 << 13) | (byte225 << 5) | (byte226 >>> 3);
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte226 & 7) << 46) | (byte227 << 38) | (byte228 << 30) | (byte229 << 22) | (byte230 << 14) | (byte231 << 6) | (byte232 >>> 2);
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte232 & 3) << 47) | (byte233 << 39) | (byte234 << 31) | (byte235 << 23) | (byte236 << 15) | (byte237 << 7) | (byte238 >>> 1);
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte238 & 1) << 48) | (byte239 << 40) | (byte240 << 32) | (byte241 << 24) | (byte242 << 16) | (byte243 << 8) | byte244;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        final long byte248 = blocks[blocksOffset++] & 0xFF;
-        final long byte249 = blocks[blocksOffset++] & 0xFF;
-        final long byte250 = blocks[blocksOffset++] & 0xFF;
-        final long byte251 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte245 << 41) | (byte246 << 33) | (byte247 << 25) | (byte248 << 17) | (byte249 << 9) | (byte250 << 1) | (byte251 >>> 7);
-        final long byte252 = blocks[blocksOffset++] & 0xFF;
-        final long byte253 = blocks[blocksOffset++] & 0xFF;
-        final long byte254 = blocks[blocksOffset++] & 0xFF;
-        final long byte255 = blocks[blocksOffset++] & 0xFF;
-        final long byte256 = blocks[blocksOffset++] & 0xFF;
-        final long byte257 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte251 & 127) << 42) | (byte252 << 34) | (byte253 << 26) | (byte254 << 18) | (byte255 << 10) | (byte256 << 2) | (byte257 >>> 6);
-        final long byte258 = blocks[blocksOffset++] & 0xFF;
-        final long byte259 = blocks[blocksOffset++] & 0xFF;
-        final long byte260 = blocks[blocksOffset++] & 0xFF;
-        final long byte261 = blocks[blocksOffset++] & 0xFF;
-        final long byte262 = blocks[blocksOffset++] & 0xFF;
-        final long byte263 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte257 & 63) << 43) | (byte258 << 35) | (byte259 << 27) | (byte260 << 19) | (byte261 << 11) | (byte262 << 3) | (byte263 >>> 5);
-        final long byte264 = blocks[blocksOffset++] & 0xFF;
-        final long byte265 = blocks[blocksOffset++] & 0xFF;
-        final long byte266 = blocks[blocksOffset++] & 0xFF;
-        final long byte267 = blocks[blocksOffset++] & 0xFF;
-        final long byte268 = blocks[blocksOffset++] & 0xFF;
-        final long byte269 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte263 & 31) << 44) | (byte264 << 36) | (byte265 << 28) | (byte266 << 20) | (byte267 << 12) | (byte268 << 4) | (byte269 >>> 4);
-        final long byte270 = blocks[blocksOffset++] & 0xFF;
-        final long byte271 = blocks[blocksOffset++] & 0xFF;
-        final long byte272 = blocks[blocksOffset++] & 0xFF;
-        final long byte273 = blocks[blocksOffset++] & 0xFF;
-        final long byte274 = blocks[blocksOffset++] & 0xFF;
-        final long byte275 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte269 & 15) << 45) | (byte270 << 37) | (byte271 << 29) | (byte272 << 21) | (byte273 << 13) | (byte274 << 5) | (byte275 >>> 3);
-        final long byte276 = blocks[blocksOffset++] & 0xFF;
-        final long byte277 = blocks[blocksOffset++] & 0xFF;
-        final long byte278 = blocks[blocksOffset++] & 0xFF;
-        final long byte279 = blocks[blocksOffset++] & 0xFF;
-        final long byte280 = blocks[blocksOffset++] & 0xFF;
-        final long byte281 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte275 & 7) << 46) | (byte276 << 38) | (byte277 << 30) | (byte278 << 22) | (byte279 << 14) | (byte280 << 6) | (byte281 >>> 2);
-        final long byte282 = blocks[blocksOffset++] & 0xFF;
-        final long byte283 = blocks[blocksOffset++] & 0xFF;
-        final long byte284 = blocks[blocksOffset++] & 0xFF;
-        final long byte285 = blocks[blocksOffset++] & 0xFF;
-        final long byte286 = blocks[blocksOffset++] & 0xFF;
-        final long byte287 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte281 & 3) << 47) | (byte282 << 39) | (byte283 << 31) | (byte284 << 23) | (byte285 << 15) | (byte286 << 7) | (byte287 >>> 1);
-        final long byte288 = blocks[blocksOffset++] & 0xFF;
-        final long byte289 = blocks[blocksOffset++] & 0xFF;
-        final long byte290 = blocks[blocksOffset++] & 0xFF;
-        final long byte291 = blocks[blocksOffset++] & 0xFF;
-        final long byte292 = blocks[blocksOffset++] & 0xFF;
-        final long byte293 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte287 & 1) << 48) | (byte288 << 40) | (byte289 << 32) | (byte290 << 24) | (byte291 << 16) | (byte292 << 8) | byte293;
-        final long byte294 = blocks[blocksOffset++] & 0xFF;
-        final long byte295 = blocks[blocksOffset++] & 0xFF;
-        final long byte296 = blocks[blocksOffset++] & 0xFF;
-        final long byte297 = blocks[blocksOffset++] & 0xFF;
-        final long byte298 = blocks[blocksOffset++] & 0xFF;
-        final long byte299 = blocks[blocksOffset++] & 0xFF;
-        final long byte300 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte294 << 41) | (byte295 << 33) | (byte296 << 25) | (byte297 << 17) | (byte298 << 9) | (byte299 << 1) | (byte300 >>> 7);
-        final long byte301 = blocks[blocksOffset++] & 0xFF;
-        final long byte302 = blocks[blocksOffset++] & 0xFF;
-        final long byte303 = blocks[blocksOffset++] & 0xFF;
-        final long byte304 = blocks[blocksOffset++] & 0xFF;
-        final long byte305 = blocks[blocksOffset++] & 0xFF;
-        final long byte306 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte300 & 127) << 42) | (byte301 << 34) | (byte302 << 26) | (byte303 << 18) | (byte304 << 10) | (byte305 << 2) | (byte306 >>> 6);
-        final long byte307 = blocks[blocksOffset++] & 0xFF;
-        final long byte308 = blocks[blocksOffset++] & 0xFF;
-        final long byte309 = blocks[blocksOffset++] & 0xFF;
-        final long byte310 = blocks[blocksOffset++] & 0xFF;
-        final long byte311 = blocks[blocksOffset++] & 0xFF;
-        final long byte312 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte306 & 63) << 43) | (byte307 << 35) | (byte308 << 27) | (byte309 << 19) | (byte310 << 11) | (byte311 << 3) | (byte312 >>> 5);
-        final long byte313 = blocks[blocksOffset++] & 0xFF;
-        final long byte314 = blocks[blocksOffset++] & 0xFF;
-        final long byte315 = blocks[blocksOffset++] & 0xFF;
-        final long byte316 = blocks[blocksOffset++] & 0xFF;
-        final long byte317 = blocks[blocksOffset++] & 0xFF;
-        final long byte318 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte312 & 31) << 44) | (byte313 << 36) | (byte314 << 28) | (byte315 << 20) | (byte316 << 12) | (byte317 << 4) | (byte318 >>> 4);
-        final long byte319 = blocks[blocksOffset++] & 0xFF;
-        final long byte320 = blocks[blocksOffset++] & 0xFF;
-        final long byte321 = blocks[blocksOffset++] & 0xFF;
-        final long byte322 = blocks[blocksOffset++] & 0xFF;
-        final long byte323 = blocks[blocksOffset++] & 0xFF;
-        final long byte324 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte318 & 15) << 45) | (byte319 << 37) | (byte320 << 29) | (byte321 << 21) | (byte322 << 13) | (byte323 << 5) | (byte324 >>> 3);
-        final long byte325 = blocks[blocksOffset++] & 0xFF;
-        final long byte326 = blocks[blocksOffset++] & 0xFF;
-        final long byte327 = blocks[blocksOffset++] & 0xFF;
-        final long byte328 = blocks[blocksOffset++] & 0xFF;
-        final long byte329 = blocks[blocksOffset++] & 0xFF;
-        final long byte330 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte324 & 7) << 46) | (byte325 << 38) | (byte326 << 30) | (byte327 << 22) | (byte328 << 14) | (byte329 << 6) | (byte330 >>> 2);
-        final long byte331 = blocks[blocksOffset++] & 0xFF;
-        final long byte332 = blocks[blocksOffset++] & 0xFF;
-        final long byte333 = blocks[blocksOffset++] & 0xFF;
-        final long byte334 = blocks[blocksOffset++] & 0xFF;
-        final long byte335 = blocks[blocksOffset++] & 0xFF;
-        final long byte336 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte330 & 3) << 47) | (byte331 << 39) | (byte332 << 31) | (byte333 << 23) | (byte334 << 15) | (byte335 << 7) | (byte336 >>> 1);
-        final long byte337 = blocks[blocksOffset++] & 0xFF;
-        final long byte338 = blocks[blocksOffset++] & 0xFF;
-        final long byte339 = blocks[blocksOffset++] & 0xFF;
-        final long byte340 = blocks[blocksOffset++] & 0xFF;
-        final long byte341 = blocks[blocksOffset++] & 0xFF;
-        final long byte342 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte336 & 1) << 48) | (byte337 << 40) | (byte338 << 32) | (byte339 << 24) | (byte340 << 16) | (byte341 << 8) | byte342;
-        final long byte343 = blocks[blocksOffset++] & 0xFF;
-        final long byte344 = blocks[blocksOffset++] & 0xFF;
-        final long byte345 = blocks[blocksOffset++] & 0xFF;
-        final long byte346 = blocks[blocksOffset++] & 0xFF;
-        final long byte347 = blocks[blocksOffset++] & 0xFF;
-        final long byte348 = blocks[blocksOffset++] & 0xFF;
-        final long byte349 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte343 << 41) | (byte344 << 33) | (byte345 << 25) | (byte346 << 17) | (byte347 << 9) | (byte348 << 1) | (byte349 >>> 7);
-        final long byte350 = blocks[blocksOffset++] & 0xFF;
-        final long byte351 = blocks[blocksOffset++] & 0xFF;
-        final long byte352 = blocks[blocksOffset++] & 0xFF;
-        final long byte353 = blocks[blocksOffset++] & 0xFF;
-        final long byte354 = blocks[blocksOffset++] & 0xFF;
-        final long byte355 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte349 & 127) << 42) | (byte350 << 34) | (byte351 << 26) | (byte352 << 18) | (byte353 << 10) | (byte354 << 2) | (byte355 >>> 6);
-        final long byte356 = blocks[blocksOffset++] & 0xFF;
-        final long byte357 = blocks[blocksOffset++] & 0xFF;
-        final long byte358 = blocks[blocksOffset++] & 0xFF;
-        final long byte359 = blocks[blocksOffset++] & 0xFF;
-        final long byte360 = blocks[blocksOffset++] & 0xFF;
-        final long byte361 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte355 & 63) << 43) | (byte356 << 35) | (byte357 << 27) | (byte358 << 19) | (byte359 << 11) | (byte360 << 3) | (byte361 >>> 5);
-        final long byte362 = blocks[blocksOffset++] & 0xFF;
-        final long byte363 = blocks[blocksOffset++] & 0xFF;
-        final long byte364 = blocks[blocksOffset++] & 0xFF;
-        final long byte365 = blocks[blocksOffset++] & 0xFF;
-        final long byte366 = blocks[blocksOffset++] & 0xFF;
-        final long byte367 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte361 & 31) << 44) | (byte362 << 36) | (byte363 << 28) | (byte364 << 20) | (byte365 << 12) | (byte366 << 4) | (byte367 >>> 4);
-        final long byte368 = blocks[blocksOffset++] & 0xFF;
-        final long byte369 = blocks[blocksOffset++] & 0xFF;
-        final long byte370 = blocks[blocksOffset++] & 0xFF;
-        final long byte371 = blocks[blocksOffset++] & 0xFF;
-        final long byte372 = blocks[blocksOffset++] & 0xFF;
-        final long byte373 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte367 & 15) << 45) | (byte368 << 37) | (byte369 << 29) | (byte370 << 21) | (byte371 << 13) | (byte372 << 5) | (byte373 >>> 3);
-        final long byte374 = blocks[blocksOffset++] & 0xFF;
-        final long byte375 = blocks[blocksOffset++] & 0xFF;
-        final long byte376 = blocks[blocksOffset++] & 0xFF;
-        final long byte377 = blocks[blocksOffset++] & 0xFF;
-        final long byte378 = blocks[blocksOffset++] & 0xFF;
-        final long byte379 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte373 & 7) << 46) | (byte374 << 38) | (byte375 << 30) | (byte376 << 22) | (byte377 << 14) | (byte378 << 6) | (byte379 >>> 2);
-        final long byte380 = blocks[blocksOffset++] & 0xFF;
-        final long byte381 = blocks[blocksOffset++] & 0xFF;
-        final long byte382 = blocks[blocksOffset++] & 0xFF;
-        final long byte383 = blocks[blocksOffset++] & 0xFF;
-        final long byte384 = blocks[blocksOffset++] & 0xFF;
-        final long byte385 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte379 & 3) << 47) | (byte380 << 39) | (byte381 << 31) | (byte382 << 23) | (byte383 << 15) | (byte384 << 7) | (byte385 >>> 1);
-        final long byte386 = blocks[blocksOffset++] & 0xFF;
-        final long byte387 = blocks[blocksOffset++] & 0xFF;
-        final long byte388 = blocks[blocksOffset++] & 0xFF;
-        final long byte389 = blocks[blocksOffset++] & 0xFF;
-        final long byte390 = blocks[blocksOffset++] & 0xFF;
-        final long byte391 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte385 & 1) << 48) | (byte386 << 40) | (byte387 << 32) | (byte388 << 24) | (byte389 << 16) | (byte390 << 8) | byte391;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 19);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 23);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 27);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 31);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 35);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 5);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 39);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 9);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 43);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 13);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 47);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 17);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 21);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 25);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 29);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 33);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 3);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 37);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 7);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 41);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 11);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 45);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 15);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 49) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 15) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 19);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 45) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 11) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 23);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 41) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 7) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 27);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 37) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 3) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 31);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 33) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 35);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 29) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 5);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 59) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 39);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 25) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 9);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 55) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 43);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 21) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 13);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 51) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 47);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 17) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 17);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 47) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 13) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 21);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 43) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 9) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 25);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 39) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 5) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 29);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 35) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 33);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 31) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 3);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 37);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 27) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 7);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 57) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 41);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 23) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 11);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 53) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 45);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 19) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 15);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 49) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock.java	(révision 0)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock.java	(révision 0)
@@ -0,0 +1,173 @@
+package org.apache.lucene.util.packed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Non-specialized {@link BulkOperation} for {@link PackedInts.Format#PACKED_SINGLE_BLOCK}.
+ */
+class BulkOperationPackedSingleBlock extends BulkOperation {
+
+  private static final int BLOCK_COUNT = 1;
+
+  private final int bitsPerValue;
+  private final int valueCount;
+  private final long mask;
+
+  public BulkOperationPackedSingleBlock(int bitsPerValue) {
+    this.bitsPerValue = bitsPerValue;
+    this.valueCount = 64 / bitsPerValue;
+    this.mask = (1L << bitsPerValue) - 1;
+  }
+
+  @Override
+  public final int blockCount() {
+    return BLOCK_COUNT;
+  }
+
+  @Override
+  public int valueCount() {
+    return valueCount;
+  }
+
+  private static long readLong(byte[] blocks, int blocksOffset) {
+    return (blocks[blocksOffset++] & 0xFFL) << 56
+        | (blocks[blocksOffset++] & 0xFFL) << 48
+        | (blocks[blocksOffset++] & 0xFFL) << 40
+        | (blocks[blocksOffset++] & 0xFFL) << 32
+        | (blocks[blocksOffset++] & 0xFFL) << 24
+        | (blocks[blocksOffset++] & 0xFFL) << 16
+        | (blocks[blocksOffset++] & 0xFFL) << 8
+        | blocks[blocksOffset++] & 0xFFL;
+  }
+
+  private int decode(long block, long[] values, int valuesOffset) {
+    values[valuesOffset++] = block & mask;
+    for (int j = 1; j < valueCount; ++j) {
+      block >>>= bitsPerValue;
+      values[valuesOffset++] = block & mask;
+    }
+    return valuesOffset;
+  }
+
+  private int decode(long block, int[] values, int valuesOffset) {
+    values[valuesOffset++] = (int) (block & mask);
+    for (int j = 1; j < valueCount; ++j) {
+      block >>>= bitsPerValue;
+      values[valuesOffset++] = (int) (block & mask);
+    }
+    return valuesOffset;
+  }
+
+  private long encode(long[] values, int valuesOffset) {
+    long block = values[valuesOffset++];
+    for (int j = 1; j < valueCount; ++j) {
+      block |= values[valuesOffset++] << (j * bitsPerValue);
+    }
+    return block;
+  }
+
+  private long encode(int[] values, int valuesOffset) {
+    long block = values[valuesOffset++] & 0xFFFFFFFFL;
+    for (int j = 1; j < valueCount; ++j) {
+      block |= (values[valuesOffset++] & 0xFFFFFFFFL) << (j * bitsPerValue);
+    }
+    return block;
+  }
+
+  @Override
+  public void decode(long[] blocks, int blocksOffset, long[] values,
+      int valuesOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = blocks[blocksOffset++];
+      valuesOffset = decode(block, values, valuesOffset);
+    }
+  }
+
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, long[] values,
+      int valuesOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = readLong(blocks, blocksOffset);
+      blocksOffset += 8;
+      valuesOffset = decode(block, values, valuesOffset);
+    }
+  }
+
+  @Override
+  public void decode(long[] blocks, int blocksOffset, int[] values,
+      int valuesOffset, int iterations) {
+    if (bitsPerValue > 32) {
+      throw new UnsupportedOperationException("Cannot decode " + bitsPerValue + "-bits values into an int[]");
+    }
+    for (int i = 0; i < iterations; ++i) {
+      final long block = blocks[blocksOffset++];
+      valuesOffset = decode(block, values, valuesOffset);
+    }
+  }
+
+  @Override
+  public void decode(byte[] blocks, int blocksOffset, int[] values,
+      int valuesOffset, int iterations) {
+    if (bitsPerValue > 32) {
+      throw new UnsupportedOperationException("Cannot decode " + bitsPerValue + "-bits values into an int[]");
+    }
+    for (int i = 0; i < iterations; ++i) {
+      final long block = readLong(blocks, blocksOffset);
+      blocksOffset += 8;
+      valuesOffset = decode(block, values, valuesOffset);
+    }
+  }
+
+  @Override
+  public void encode(long[] values, int valuesOffset, long[] blocks,
+      int blocksOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      blocks[blocksOffset++] = encode(values, valuesOffset);
+      valuesOffset += valueCount;
+    }
+  }
+
+  @Override
+  public void encode(int[] values, int valuesOffset, long[] blocks,
+      int blocksOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      blocks[blocksOffset++] = encode(values, valuesOffset);
+      valuesOffset += valueCount;
+    }
+  }
+
+  @Override
+  public void encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = encode(values, valuesOffset);
+      valuesOffset += valueCount;
+      blocksOffset = writeLong(block, blocks, blocksOffset);
+    }
+  }
+
+  @Override
+  public void encode(int[] values, int valuesOffset, byte[] blocks,
+      int blocksOffset, int iterations) {
+    for (int i = 0; i < iterations; ++i) {
+      final long block = encode(values, valuesOffset);
+      valuesOffset += valueCount;
+      blocksOffset = writeLong(block, blocks, blocksOffset);
+    }
+  }
+
+}

Modification de propriétés sur lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock.java
___________________________________________________________________
Ajouté : svn:eol-style
   + native

Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock21.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock21.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock21.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock21 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock21 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 3;
+    public BulkOperationPackedSingleBlock21() {
+      super(21);
     }
 
     @Override
@@ -95,22 +90,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 42);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 42);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked2.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked2.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked2.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked2 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-    }
+final class BulkOperationPacked2 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked2() {
+      super(2);
+      assert blockCount() == 1;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -211,22 +208,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 2) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 60) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 2) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked6.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked6.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked6.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked6 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 3;
-    }
+final class BulkOperationPacked6 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked6() {
+      super(6);
+      assert blockCount() == 3;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -247,26 +244,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 6) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 6) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock3.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock3.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock3.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock3 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock3 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 21;
+    public BulkOperationPackedSingleBlock3() {
+      super(3);
     }
 
     @Override
@@ -167,22 +162,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 3) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 60);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 3) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 57) | (values[valuesOffset++] << 60);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked10.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked10.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked10.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked10 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 5;
-    }
+final class BulkOperationPacked10 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked10() {
+      super(10);
+      assert blockCount() == 5;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -283,30 +280,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 10) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 10) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked30.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked30.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked30.java	(copie de travail)
@@ -1,512 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked30 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 15;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 34);
-        values[valuesOffset++] = (int) ((block0 >>> 4) & 1073741823L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 15L) << 26) | (block1 >>> 38));
-        values[valuesOffset++] = (int) ((block1 >>> 8) & 1073741823L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 255L) << 22) | (block2 >>> 42));
-        values[valuesOffset++] = (int) ((block2 >>> 12) & 1073741823L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 4095L) << 18) | (block3 >>> 46));
-        values[valuesOffset++] = (int) ((block3 >>> 16) & 1073741823L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 65535L) << 14) | (block4 >>> 50));
-        values[valuesOffset++] = (int) ((block4 >>> 20) & 1073741823L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 1048575L) << 10) | (block5 >>> 54));
-        values[valuesOffset++] = (int) ((block5 >>> 24) & 1073741823L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 16777215L) << 6) | (block6 >>> 58));
-        values[valuesOffset++] = (int) ((block6 >>> 28) & 1073741823L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 268435455L) << 2) | (block7 >>> 62));
-        values[valuesOffset++] = (int) ((block7 >>> 32) & 1073741823L);
-        values[valuesOffset++] = (int) ((block7 >>> 2) & 1073741823L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 3L) << 28) | (block8 >>> 36));
-        values[valuesOffset++] = (int) ((block8 >>> 6) & 1073741823L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 63L) << 24) | (block9 >>> 40));
-        values[valuesOffset++] = (int) ((block9 >>> 10) & 1073741823L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 1023L) << 20) | (block10 >>> 44));
-        values[valuesOffset++] = (int) ((block10 >>> 14) & 1073741823L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 16383L) << 16) | (block11 >>> 48));
-        values[valuesOffset++] = (int) ((block11 >>> 18) & 1073741823L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 262143L) << 12) | (block12 >>> 52));
-        values[valuesOffset++] = (int) ((block12 >>> 22) & 1073741823L);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block12 & 4194303L) << 8) | (block13 >>> 56));
-        values[valuesOffset++] = (int) ((block13 >>> 26) & 1073741823L);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block13 & 67108863L) << 4) | (block14 >>> 60));
-        values[valuesOffset++] = (int) ((block14 >>> 30) & 1073741823L);
-        values[valuesOffset++] = (int) (block14 & 1073741823L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 22) | (byte1 << 14) | (byte2 << 6) | (byte3 >>> 2);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 3) << 28) | (byte4 << 20) | (byte5 << 12) | (byte6 << 4) | (byte7 >>> 4);
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 15) << 26) | (byte8 << 18) | (byte9 << 10) | (byte10 << 2) | (byte11 >>> 6);
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 63) << 24) | (byte12 << 16) | (byte13 << 8) | byte14;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte15 << 22) | (byte16 << 14) | (byte17 << 6) | (byte18 >>> 2);
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 3) << 28) | (byte19 << 20) | (byte20 << 12) | (byte21 << 4) | (byte22 >>> 4);
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 15) << 26) | (byte23 << 18) | (byte24 << 10) | (byte25 << 2) | (byte26 >>> 6);
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 63) << 24) | (byte27 << 16) | (byte28 << 8) | byte29;
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte30 << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 28) | (byte34 << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 26) | (byte38 << 18) | (byte39 << 10) | (byte40 << 2) | (byte41 >>> 6);
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 63) << 24) | (byte42 << 16) | (byte43 << 8) | byte44;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte45 << 22) | (byte46 << 14) | (byte47 << 6) | (byte48 >>> 2);
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 3) << 28) | (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 26) | (byte53 << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 24) | (byte57 << 16) | (byte58 << 8) | byte59;
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte60 << 22) | (byte61 << 14) | (byte62 << 6) | (byte63 >>> 2);
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 3) << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 26) | (byte68 << 18) | (byte69 << 10) | (byte70 << 2) | (byte71 >>> 6);
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 63) << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 26) | (byte83 << 18) | (byte84 << 10) | (byte85 << 2) | (byte86 >>> 6);
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 63) << 24) | (byte87 << 16) | (byte88 << 8) | byte89;
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte90 << 22) | (byte91 << 14) | (byte92 << 6) | (byte93 >>> 2);
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 3) << 28) | (byte94 << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        final int byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 24) | (byte102 << 16) | (byte103 << 8) | byte104;
-        final int byte105 = blocks[blocksOffset++] & 0xFF;
-        final int byte106 = blocks[blocksOffset++] & 0xFF;
-        final int byte107 = blocks[blocksOffset++] & 0xFF;
-        final int byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte105 << 22) | (byte106 << 14) | (byte107 << 6) | (byte108 >>> 2);
-        final int byte109 = blocks[blocksOffset++] & 0xFF;
-        final int byte110 = blocks[blocksOffset++] & 0xFF;
-        final int byte111 = blocks[blocksOffset++] & 0xFF;
-        final int byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 3) << 28) | (byte109 << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final int byte113 = blocks[blocksOffset++] & 0xFF;
-        final int byte114 = blocks[blocksOffset++] & 0xFF;
-        final int byte115 = blocks[blocksOffset++] & 0xFF;
-        final int byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 26) | (byte113 << 18) | (byte114 << 10) | (byte115 << 2) | (byte116 >>> 6);
-        final int byte117 = blocks[blocksOffset++] & 0xFF;
-        final int byte118 = blocks[blocksOffset++] & 0xFF;
-        final int byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 63) << 24) | (byte117 << 16) | (byte118 << 8) | byte119;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 34;
-        values[valuesOffset++] = (block0 >>> 4) & 1073741823L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 15L) << 26) | (block1 >>> 38);
-        values[valuesOffset++] = (block1 >>> 8) & 1073741823L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 255L) << 22) | (block2 >>> 42);
-        values[valuesOffset++] = (block2 >>> 12) & 1073741823L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4095L) << 18) | (block3 >>> 46);
-        values[valuesOffset++] = (block3 >>> 16) & 1073741823L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 65535L) << 14) | (block4 >>> 50);
-        values[valuesOffset++] = (block4 >>> 20) & 1073741823L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1048575L) << 10) | (block5 >>> 54);
-        values[valuesOffset++] = (block5 >>> 24) & 1073741823L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 16777215L) << 6) | (block6 >>> 58);
-        values[valuesOffset++] = (block6 >>> 28) & 1073741823L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 268435455L) << 2) | (block7 >>> 62);
-        values[valuesOffset++] = (block7 >>> 32) & 1073741823L;
-        values[valuesOffset++] = (block7 >>> 2) & 1073741823L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 3L) << 28) | (block8 >>> 36);
-        values[valuesOffset++] = (block8 >>> 6) & 1073741823L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 63L) << 24) | (block9 >>> 40);
-        values[valuesOffset++] = (block9 >>> 10) & 1073741823L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1023L) << 20) | (block10 >>> 44);
-        values[valuesOffset++] = (block10 >>> 14) & 1073741823L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 16383L) << 16) | (block11 >>> 48);
-        values[valuesOffset++] = (block11 >>> 18) & 1073741823L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 262143L) << 12) | (block12 >>> 52);
-        values[valuesOffset++] = (block12 >>> 22) & 1073741823L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4194303L) << 8) | (block13 >>> 56);
-        values[valuesOffset++] = (block13 >>> 26) & 1073741823L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 67108863L) << 4) | (block14 >>> 60);
-        values[valuesOffset++] = (block14 >>> 30) & 1073741823L;
-        values[valuesOffset++] = block14 & 1073741823L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 22) | (byte1 << 14) | (byte2 << 6) | (byte3 >>> 2);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 3) << 28) | (byte4 << 20) | (byte5 << 12) | (byte6 << 4) | (byte7 >>> 4);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 15) << 26) | (byte8 << 18) | (byte9 << 10) | (byte10 << 2) | (byte11 >>> 6);
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 63) << 24) | (byte12 << 16) | (byte13 << 8) | byte14;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte15 << 22) | (byte16 << 14) | (byte17 << 6) | (byte18 >>> 2);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 3) << 28) | (byte19 << 20) | (byte20 << 12) | (byte21 << 4) | (byte22 >>> 4);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 15) << 26) | (byte23 << 18) | (byte24 << 10) | (byte25 << 2) | (byte26 >>> 6);
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 63) << 24) | (byte27 << 16) | (byte28 << 8) | byte29;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte30 << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 28) | (byte34 << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 26) | (byte38 << 18) | (byte39 << 10) | (byte40 << 2) | (byte41 >>> 6);
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte41 & 63) << 24) | (byte42 << 16) | (byte43 << 8) | byte44;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte45 << 22) | (byte46 << 14) | (byte47 << 6) | (byte48 >>> 2);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 3) << 28) | (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 26) | (byte53 << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 24) | (byte57 << 16) | (byte58 << 8) | byte59;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte60 << 22) | (byte61 << 14) | (byte62 << 6) | (byte63 >>> 2);
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 3) << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 26) | (byte68 << 18) | (byte69 << 10) | (byte70 << 2) | (byte71 >>> 6);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 63) << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 28) | (byte79 << 20) | (byte80 << 12) | (byte81 << 4) | (byte82 >>> 4);
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte82 & 15) << 26) | (byte83 << 18) | (byte84 << 10) | (byte85 << 2) | (byte86 >>> 6);
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 63) << 24) | (byte87 << 16) | (byte88 << 8) | byte89;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte90 << 22) | (byte91 << 14) | (byte92 << 6) | (byte93 >>> 2);
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 3) << 28) | (byte94 << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 24) | (byte102 << 16) | (byte103 << 8) | byte104;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte105 << 22) | (byte106 << 14) | (byte107 << 6) | (byte108 >>> 2);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 3) << 28) | (byte109 << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 26) | (byte113 << 18) | (byte114 << 10) | (byte115 << 2) | (byte116 >>> 6);
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 63) << 24) | (byte117 << 16) | (byte118 << 8) | byte119;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 30) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 30) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked22.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked22.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked22.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked22 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 11;
-    }
+final class BulkOperationPacked22 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked22() {
+      super(22);
+      assert blockCount() == 11;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -391,42 +388,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 22) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 22) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock7.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock7.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock7.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock7 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock7 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 9;
+    public BulkOperationPackedSingleBlock7() {
+      super(7);
     }
 
     @Override
@@ -119,22 +114,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 56);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 7) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 56);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked14.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked14.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked14.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked14 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 7;
-    }
+final class BulkOperationPacked14 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked14() {
+      super(14);
+      assert blockCount() == 7;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -319,34 +316,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 14) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 14) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked50.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked50.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked50.java	(copie de travail)
@@ -1,417 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked50 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 25;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 14;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 16383L) << 36) | (block1 >>> 28);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 268435455L) << 22) | (block2 >>> 42);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4398046511103L) << 8) | (block3 >>> 56);
-        values[valuesOffset++] = (block3 >>> 6) & 1125899906842623L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 63L) << 44) | (block4 >>> 20);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1048575L) << 30) | (block5 >>> 34);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 17179869183L) << 16) | (block6 >>> 48);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 281474976710655L) << 2) | (block7 >>> 62);
-        values[valuesOffset++] = (block7 >>> 12) & 1125899906842623L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 4095L) << 38) | (block8 >>> 26);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 67108863L) << 24) | (block9 >>> 40);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1099511627775L) << 10) | (block10 >>> 54);
-        values[valuesOffset++] = (block10 >>> 4) & 1125899906842623L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 15L) << 46) | (block11 >>> 18);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 262143L) << 32) | (block12 >>> 32);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4294967295L) << 18) | (block13 >>> 46);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 70368744177663L) << 4) | (block14 >>> 60);
-        values[valuesOffset++] = (block14 >>> 10) & 1125899906842623L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1023L) << 40) | (block15 >>> 24);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 16777215L) << 26) | (block16 >>> 38);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 274877906943L) << 12) | (block17 >>> 52);
-        values[valuesOffset++] = (block17 >>> 2) & 1125899906842623L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 3L) << 48) | (block18 >>> 16);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 65535L) << 34) | (block19 >>> 30);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1073741823L) << 20) | (block20 >>> 44);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 17592186044415L) << 6) | (block21 >>> 58);
-        values[valuesOffset++] = (block21 >>> 8) & 1125899906842623L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 255L) << 42) | (block22 >>> 22);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4194303L) << 28) | (block23 >>> 36);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 68719476735L) << 14) | (block24 >>> 50);
-        values[valuesOffset++] = block24 & 1125899906842623L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 42) | (byte1 << 34) | (byte2 << 26) | (byte3 << 18) | (byte4 << 10) | (byte5 << 2) | (byte6 >>> 6);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 63) << 44) | (byte7 << 36) | (byte8 << 28) | (byte9 << 20) | (byte10 << 12) | (byte11 << 4) | (byte12 >>> 4);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 15) << 46) | (byte13 << 38) | (byte14 << 30) | (byte15 << 22) | (byte16 << 14) | (byte17 << 6) | (byte18 >>> 2);
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte18 & 3) << 48) | (byte19 << 40) | (byte20 << 32) | (byte21 << 24) | (byte22 << 16) | (byte23 << 8) | byte24;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte25 << 42) | (byte26 << 34) | (byte27 << 26) | (byte28 << 18) | (byte29 << 10) | (byte30 << 2) | (byte31 >>> 6);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 63) << 44) | (byte32 << 36) | (byte33 << 28) | (byte34 << 20) | (byte35 << 12) | (byte36 << 4) | (byte37 >>> 4);
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte37 & 15) << 46) | (byte38 << 38) | (byte39 << 30) | (byte40 << 22) | (byte41 << 14) | (byte42 << 6) | (byte43 >>> 2);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 3) << 48) | (byte44 << 40) | (byte45 << 32) | (byte46 << 24) | (byte47 << 16) | (byte48 << 8) | byte49;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte50 << 42) | (byte51 << 34) | (byte52 << 26) | (byte53 << 18) | (byte54 << 10) | (byte55 << 2) | (byte56 >>> 6);
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte56 & 63) << 44) | (byte57 << 36) | (byte58 << 28) | (byte59 << 20) | (byte60 << 12) | (byte61 << 4) | (byte62 >>> 4);
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte62 & 15) << 46) | (byte63 << 38) | (byte64 << 30) | (byte65 << 22) | (byte66 << 14) | (byte67 << 6) | (byte68 >>> 2);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 3) << 48) | (byte69 << 40) | (byte70 << 32) | (byte71 << 24) | (byte72 << 16) | (byte73 << 8) | byte74;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte75 << 42) | (byte76 << 34) | (byte77 << 26) | (byte78 << 18) | (byte79 << 10) | (byte80 << 2) | (byte81 >>> 6);
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 63) << 44) | (byte82 << 36) | (byte83 << 28) | (byte84 << 20) | (byte85 << 12) | (byte86 << 4) | (byte87 >>> 4);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 15) << 46) | (byte88 << 38) | (byte89 << 30) | (byte90 << 22) | (byte91 << 14) | (byte92 << 6) | (byte93 >>> 2);
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 3) << 48) | (byte94 << 40) | (byte95 << 32) | (byte96 << 24) | (byte97 << 16) | (byte98 << 8) | byte99;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte100 << 42) | (byte101 << 34) | (byte102 << 26) | (byte103 << 18) | (byte104 << 10) | (byte105 << 2) | (byte106 >>> 6);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 63) << 44) | (byte107 << 36) | (byte108 << 28) | (byte109 << 20) | (byte110 << 12) | (byte111 << 4) | (byte112 >>> 4);
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte112 & 15) << 46) | (byte113 << 38) | (byte114 << 30) | (byte115 << 22) | (byte116 << 14) | (byte117 << 6) | (byte118 >>> 2);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 3) << 48) | (byte119 << 40) | (byte120 << 32) | (byte121 << 24) | (byte122 << 16) | (byte123 << 8) | byte124;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte125 << 42) | (byte126 << 34) | (byte127 << 26) | (byte128 << 18) | (byte129 << 10) | (byte130 << 2) | (byte131 >>> 6);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 63) << 44) | (byte132 << 36) | (byte133 << 28) | (byte134 << 20) | (byte135 << 12) | (byte136 << 4) | (byte137 >>> 4);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 15) << 46) | (byte138 << 38) | (byte139 << 30) | (byte140 << 22) | (byte141 << 14) | (byte142 << 6) | (byte143 >>> 2);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 3) << 48) | (byte144 << 40) | (byte145 << 32) | (byte146 << 24) | (byte147 << 16) | (byte148 << 8) | byte149;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte150 << 42) | (byte151 << 34) | (byte152 << 26) | (byte153 << 18) | (byte154 << 10) | (byte155 << 2) | (byte156 >>> 6);
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte156 & 63) << 44) | (byte157 << 36) | (byte158 << 28) | (byte159 << 20) | (byte160 << 12) | (byte161 << 4) | (byte162 >>> 4);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 15) << 46) | (byte163 << 38) | (byte164 << 30) | (byte165 << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 48) | (byte169 << 40) | (byte170 << 32) | (byte171 << 24) | (byte172 << 16) | (byte173 << 8) | byte174;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte175 << 42) | (byte176 << 34) | (byte177 << 26) | (byte178 << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 44) | (byte182 << 36) | (byte183 << 28) | (byte184 << 20) | (byte185 << 12) | (byte186 << 4) | (byte187 >>> 4);
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte187 & 15) << 46) | (byte188 << 38) | (byte189 << 30) | (byte190 << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 48) | (byte194 << 40) | (byte195 << 32) | (byte196 << 24) | (byte197 << 16) | (byte198 << 8) | byte199;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked42.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked42.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked42.java	(copie de travail)
@@ -1,373 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked42 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 21;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 22;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 4194303L) << 20) | (block1 >>> 44);
-        values[valuesOffset++] = (block1 >>> 2) & 4398046511103L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 3L) << 40) | (block2 >>> 24);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 16777215L) << 18) | (block3 >>> 46);
-        values[valuesOffset++] = (block3 >>> 4) & 4398046511103L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 15L) << 38) | (block4 >>> 26);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 67108863L) << 16) | (block5 >>> 48);
-        values[valuesOffset++] = (block5 >>> 6) & 4398046511103L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 63L) << 36) | (block6 >>> 28);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 268435455L) << 14) | (block7 >>> 50);
-        values[valuesOffset++] = (block7 >>> 8) & 4398046511103L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 255L) << 34) | (block8 >>> 30);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 1073741823L) << 12) | (block9 >>> 52);
-        values[valuesOffset++] = (block9 >>> 10) & 4398046511103L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1023L) << 32) | (block10 >>> 32);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 4294967295L) << 10) | (block11 >>> 54);
-        values[valuesOffset++] = (block11 >>> 12) & 4398046511103L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 4095L) << 30) | (block12 >>> 34);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 17179869183L) << 8) | (block13 >>> 56);
-        values[valuesOffset++] = (block13 >>> 14) & 4398046511103L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 16383L) << 28) | (block14 >>> 36);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 68719476735L) << 6) | (block15 >>> 58);
-        values[valuesOffset++] = (block15 >>> 16) & 4398046511103L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 65535L) << 26) | (block16 >>> 38);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 274877906943L) << 4) | (block17 >>> 60);
-        values[valuesOffset++] = (block17 >>> 18) & 4398046511103L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 262143L) << 24) | (block18 >>> 40);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1099511627775L) << 2) | (block19 >>> 62);
-        values[valuesOffset++] = (block19 >>> 20) & 4398046511103L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1048575L) << 22) | (block20 >>> 42);
-        values[valuesOffset++] = block20 & 4398046511103L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 34) | (byte1 << 26) | (byte2 << 18) | (byte3 << 10) | (byte4 << 2) | (byte5 >>> 6);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 63) << 36) | (byte6 << 28) | (byte7 << 20) | (byte8 << 12) | (byte9 << 4) | (byte10 >>> 4);
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte10 & 15) << 38) | (byte11 << 30) | (byte12 << 22) | (byte13 << 14) | (byte14 << 6) | (byte15 >>> 2);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 3) << 40) | (byte16 << 32) | (byte17 << 24) | (byte18 << 16) | (byte19 << 8) | byte20;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte21 << 34) | (byte22 << 26) | (byte23 << 18) | (byte24 << 10) | (byte25 << 2) | (byte26 >>> 6);
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte26 & 63) << 36) | (byte27 << 28) | (byte28 << 20) | (byte29 << 12) | (byte30 << 4) | (byte31 >>> 4);
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte31 & 15) << 38) | (byte32 << 30) | (byte33 << 22) | (byte34 << 14) | (byte35 << 6) | (byte36 >>> 2);
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 3) << 40) | (byte37 << 32) | (byte38 << 24) | (byte39 << 16) | (byte40 << 8) | byte41;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte42 << 34) | (byte43 << 26) | (byte44 << 18) | (byte45 << 10) | (byte46 << 2) | (byte47 >>> 6);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 63) << 36) | (byte48 << 28) | (byte49 << 20) | (byte50 << 12) | (byte51 << 4) | (byte52 >>> 4);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 15) << 38) | (byte53 << 30) | (byte54 << 22) | (byte55 << 14) | (byte56 << 6) | (byte57 >>> 2);
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 3) << 40) | (byte58 << 32) | (byte59 << 24) | (byte60 << 16) | (byte61 << 8) | byte62;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte63 << 34) | (byte64 << 26) | (byte65 << 18) | (byte66 << 10) | (byte67 << 2) | (byte68 >>> 6);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 63) << 36) | (byte69 << 28) | (byte70 << 20) | (byte71 << 12) | (byte72 << 4) | (byte73 >>> 4);
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte73 & 15) << 38) | (byte74 << 30) | (byte75 << 22) | (byte76 << 14) | (byte77 << 6) | (byte78 >>> 2);
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte78 & 3) << 40) | (byte79 << 32) | (byte80 << 24) | (byte81 << 16) | (byte82 << 8) | byte83;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte84 << 34) | (byte85 << 26) | (byte86 << 18) | (byte87 << 10) | (byte88 << 2) | (byte89 >>> 6);
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 63) << 36) | (byte90 << 28) | (byte91 << 20) | (byte92 << 12) | (byte93 << 4) | (byte94 >>> 4);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 15) << 38) | (byte95 << 30) | (byte96 << 22) | (byte97 << 14) | (byte98 << 6) | (byte99 >>> 2);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 3) << 40) | (byte100 << 32) | (byte101 << 24) | (byte102 << 16) | (byte103 << 8) | byte104;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte105 << 34) | (byte106 << 26) | (byte107 << 18) | (byte108 << 10) | (byte109 << 2) | (byte110 >>> 6);
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte110 & 63) << 36) | (byte111 << 28) | (byte112 << 20) | (byte113 << 12) | (byte114 << 4) | (byte115 >>> 4);
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte115 & 15) << 38) | (byte116 << 30) | (byte117 << 22) | (byte118 << 14) | (byte119 << 6) | (byte120 >>> 2);
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte120 & 3) << 40) | (byte121 << 32) | (byte122 << 24) | (byte123 << 16) | (byte124 << 8) | byte125;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte126 << 34) | (byte127 << 26) | (byte128 << 18) | (byte129 << 10) | (byte130 << 2) | (byte131 >>> 6);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 63) << 36) | (byte132 << 28) | (byte133 << 20) | (byte134 << 12) | (byte135 << 4) | (byte136 >>> 4);
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte136 & 15) << 38) | (byte137 << 30) | (byte138 << 22) | (byte139 << 14) | (byte140 << 6) | (byte141 >>> 2);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 3) << 40) | (byte142 << 32) | (byte143 << 24) | (byte144 << 16) | (byte145 << 8) | byte146;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte147 << 34) | (byte148 << 26) | (byte149 << 18) | (byte150 << 10) | (byte151 << 2) | (byte152 >>> 6);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 63) << 36) | (byte153 << 28) | (byte154 << 20) | (byte155 << 12) | (byte156 << 4) | (byte157 >>> 4);
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte157 & 15) << 38) | (byte158 << 30) | (byte159 << 22) | (byte160 << 14) | (byte161 << 6) | (byte162 >>> 2);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 3) << 40) | (byte163 << 32) | (byte164 << 24) | (byte165 << 16) | (byte166 << 8) | byte167;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked34.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked34.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked34.java	(copie de travail)
@@ -1,329 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked34 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 17;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 30;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 1073741823L) << 4) | (block1 >>> 60);
-        values[valuesOffset++] = (block1 >>> 26) & 17179869183L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 67108863L) << 8) | (block2 >>> 56);
-        values[valuesOffset++] = (block2 >>> 22) & 17179869183L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 4194303L) << 12) | (block3 >>> 52);
-        values[valuesOffset++] = (block3 >>> 18) & 17179869183L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 262143L) << 16) | (block4 >>> 48);
-        values[valuesOffset++] = (block4 >>> 14) & 17179869183L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 16383L) << 20) | (block5 >>> 44);
-        values[valuesOffset++] = (block5 >>> 10) & 17179869183L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1023L) << 24) | (block6 >>> 40);
-        values[valuesOffset++] = (block6 >>> 6) & 17179869183L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 63L) << 28) | (block7 >>> 36);
-        values[valuesOffset++] = (block7 >>> 2) & 17179869183L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 3L) << 32) | (block8 >>> 32);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 4294967295L) << 2) | (block9 >>> 62);
-        values[valuesOffset++] = (block9 >>> 28) & 17179869183L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 268435455L) << 6) | (block10 >>> 58);
-        values[valuesOffset++] = (block10 >>> 24) & 17179869183L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 16777215L) << 10) | (block11 >>> 54);
-        values[valuesOffset++] = (block11 >>> 20) & 17179869183L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 1048575L) << 14) | (block12 >>> 50);
-        values[valuesOffset++] = (block12 >>> 16) & 17179869183L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 65535L) << 18) | (block13 >>> 46);
-        values[valuesOffset++] = (block13 >>> 12) & 17179869183L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 4095L) << 22) | (block14 >>> 42);
-        values[valuesOffset++] = (block14 >>> 8) & 17179869183L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 255L) << 26) | (block15 >>> 38);
-        values[valuesOffset++] = (block15 >>> 4) & 17179869183L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 15L) << 30) | (block16 >>> 34);
-        values[valuesOffset++] = block16 & 17179869183L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 26) | (byte1 << 18) | (byte2 << 10) | (byte3 << 2) | (byte4 >>> 6);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 63) << 28) | (byte5 << 20) | (byte6 << 12) | (byte7 << 4) | (byte8 >>> 4);
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte8 & 15) << 30) | (byte9 << 22) | (byte10 << 14) | (byte11 << 6) | (byte12 >>> 2);
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte12 & 3) << 32) | (byte13 << 24) | (byte14 << 16) | (byte15 << 8) | byte16;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte17 << 26) | (byte18 << 18) | (byte19 << 10) | (byte20 << 2) | (byte21 >>> 6);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 63) << 28) | (byte22 << 20) | (byte23 << 12) | (byte24 << 4) | (byte25 >>> 4);
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte25 & 15) << 30) | (byte26 << 22) | (byte27 << 14) | (byte28 << 6) | (byte29 >>> 2);
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 3) << 32) | (byte30 << 24) | (byte31 << 16) | (byte32 << 8) | byte33;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte34 << 26) | (byte35 << 18) | (byte36 << 10) | (byte37 << 2) | (byte38 >>> 6);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 63) << 28) | (byte39 << 20) | (byte40 << 12) | (byte41 << 4) | (byte42 >>> 4);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 15) << 30) | (byte43 << 22) | (byte44 << 14) | (byte45 << 6) | (byte46 >>> 2);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 3) << 32) | (byte47 << 24) | (byte48 << 16) | (byte49 << 8) | byte50;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte51 << 26) | (byte52 << 18) | (byte53 << 10) | (byte54 << 2) | (byte55 >>> 6);
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 63) << 28) | (byte56 << 20) | (byte57 << 12) | (byte58 << 4) | (byte59 >>> 4);
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte59 & 15) << 30) | (byte60 << 22) | (byte61 << 14) | (byte62 << 6) | (byte63 >>> 2);
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 3) << 32) | (byte64 << 24) | (byte65 << 16) | (byte66 << 8) | byte67;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte68 << 26) | (byte69 << 18) | (byte70 << 10) | (byte71 << 2) | (byte72 >>> 6);
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte72 & 63) << 28) | (byte73 << 20) | (byte74 << 12) | (byte75 << 4) | (byte76 >>> 4);
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte76 & 15) << 30) | (byte77 << 22) | (byte78 << 14) | (byte79 << 6) | (byte80 >>> 2);
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte80 & 3) << 32) | (byte81 << 24) | (byte82 << 16) | (byte83 << 8) | byte84;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte85 << 26) | (byte86 << 18) | (byte87 << 10) | (byte88 << 2) | (byte89 >>> 6);
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte89 & 63) << 28) | (byte90 << 20) | (byte91 << 12) | (byte92 << 4) | (byte93 >>> 4);
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte93 & 15) << 30) | (byte94 << 22) | (byte95 << 14) | (byte96 << 6) | (byte97 >>> 2);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 3) << 32) | (byte98 << 24) | (byte99 << 16) | (byte100 << 8) | byte101;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte102 << 26) | (byte103 << 18) | (byte104 << 10) | (byte105 << 2) | (byte106 >>> 6);
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte106 & 63) << 28) | (byte107 << 20) | (byte108 << 12) | (byte109 << 4) | (byte110 >>> 4);
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte110 & 15) << 30) | (byte111 << 22) | (byte112 << 14) | (byte113 << 6) | (byte114 >>> 2);
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 3) << 32) | (byte115 << 24) | (byte116 << 16) | (byte117 << 8) | byte118;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte119 << 26) | (byte120 << 18) | (byte121 << 10) | (byte122 << 2) | (byte123 >>> 6);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 63) << 28) | (byte124 << 20) | (byte125 << 12) | (byte126 << 4) | (byte127 >>> 4);
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte127 & 15) << 30) | (byte128 << 22) | (byte129 << 14) | (byte130 << 6) | (byte131 >>> 2);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 3) << 32) | (byte132 << 24) | (byte133 << 16) | (byte134 << 8) | byte135;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked26.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked26.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked26.java	(copie de travail)
@@ -1,472 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked26 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 13;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (block0 >>> 38);
-        values[valuesOffset++] = (int) ((block0 >>> 12) & 67108863L);
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block0 & 4095L) << 14) | (block1 >>> 50));
-        values[valuesOffset++] = (int) ((block1 >>> 24) & 67108863L);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block1 & 16777215L) << 2) | (block2 >>> 62));
-        values[valuesOffset++] = (int) ((block2 >>> 36) & 67108863L);
-        values[valuesOffset++] = (int) ((block2 >>> 10) & 67108863L);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block2 & 1023L) << 16) | (block3 >>> 48));
-        values[valuesOffset++] = (int) ((block3 >>> 22) & 67108863L);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block3 & 4194303L) << 4) | (block4 >>> 60));
-        values[valuesOffset++] = (int) ((block4 >>> 34) & 67108863L);
-        values[valuesOffset++] = (int) ((block4 >>> 8) & 67108863L);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block4 & 255L) << 18) | (block5 >>> 46));
-        values[valuesOffset++] = (int) ((block5 >>> 20) & 67108863L);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block5 & 1048575L) << 6) | (block6 >>> 58));
-        values[valuesOffset++] = (int) ((block6 >>> 32) & 67108863L);
-        values[valuesOffset++] = (int) ((block6 >>> 6) & 67108863L);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block6 & 63L) << 20) | (block7 >>> 44));
-        values[valuesOffset++] = (int) ((block7 >>> 18) & 67108863L);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block7 & 262143L) << 8) | (block8 >>> 56));
-        values[valuesOffset++] = (int) ((block8 >>> 30) & 67108863L);
-        values[valuesOffset++] = (int) ((block8 >>> 4) & 67108863L);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block8 & 15L) << 22) | (block9 >>> 42));
-        values[valuesOffset++] = (int) ((block9 >>> 16) & 67108863L);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block9 & 65535L) << 10) | (block10 >>> 54));
-        values[valuesOffset++] = (int) ((block10 >>> 28) & 67108863L);
-        values[valuesOffset++] = (int) ((block10 >>> 2) & 67108863L);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block10 & 3L) << 24) | (block11 >>> 40));
-        values[valuesOffset++] = (int) ((block11 >>> 14) & 67108863L);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = (int) (((block11 & 16383L) << 12) | (block12 >>> 52));
-        values[valuesOffset++] = (int) ((block12 >>> 26) & 67108863L);
-        values[valuesOffset++] = (int) (block12 & 67108863L);
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final int byte0 = blocks[blocksOffset++] & 0xFF;
-        final int byte1 = blocks[blocksOffset++] & 0xFF;
-        final int byte2 = blocks[blocksOffset++] & 0xFF;
-        final int byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 18) | (byte1 << 10) | (byte2 << 2) | (byte3 >>> 6);
-        final int byte4 = blocks[blocksOffset++] & 0xFF;
-        final int byte5 = blocks[blocksOffset++] & 0xFF;
-        final int byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 63) << 20) | (byte4 << 12) | (byte5 << 4) | (byte6 >>> 4);
-        final int byte7 = blocks[blocksOffset++] & 0xFF;
-        final int byte8 = blocks[blocksOffset++] & 0xFF;
-        final int byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 15) << 22) | (byte7 << 14) | (byte8 << 6) | (byte9 >>> 2);
-        final int byte10 = blocks[blocksOffset++] & 0xFF;
-        final int byte11 = blocks[blocksOffset++] & 0xFF;
-        final int byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 3) << 24) | (byte10 << 16) | (byte11 << 8) | byte12;
-        final int byte13 = blocks[blocksOffset++] & 0xFF;
-        final int byte14 = blocks[blocksOffset++] & 0xFF;
-        final int byte15 = blocks[blocksOffset++] & 0xFF;
-        final int byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte13 << 18) | (byte14 << 10) | (byte15 << 2) | (byte16 >>> 6);
-        final int byte17 = blocks[blocksOffset++] & 0xFF;
-        final int byte18 = blocks[blocksOffset++] & 0xFF;
-        final int byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 63) << 20) | (byte17 << 12) | (byte18 << 4) | (byte19 >>> 4);
-        final int byte20 = blocks[blocksOffset++] & 0xFF;
-        final int byte21 = blocks[blocksOffset++] & 0xFF;
-        final int byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 15) << 22) | (byte20 << 14) | (byte21 << 6) | (byte22 >>> 2);
-        final int byte23 = blocks[blocksOffset++] & 0xFF;
-        final int byte24 = blocks[blocksOffset++] & 0xFF;
-        final int byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 3) << 24) | (byte23 << 16) | (byte24 << 8) | byte25;
-        final int byte26 = blocks[blocksOffset++] & 0xFF;
-        final int byte27 = blocks[blocksOffset++] & 0xFF;
-        final int byte28 = blocks[blocksOffset++] & 0xFF;
-        final int byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte26 << 18) | (byte27 << 10) | (byte28 << 2) | (byte29 >>> 6);
-        final int byte30 = blocks[blocksOffset++] & 0xFF;
-        final int byte31 = blocks[blocksOffset++] & 0xFF;
-        final int byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 63) << 20) | (byte30 << 12) | (byte31 << 4) | (byte32 >>> 4);
-        final int byte33 = blocks[blocksOffset++] & 0xFF;
-        final int byte34 = blocks[blocksOffset++] & 0xFF;
-        final int byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 15) << 22) | (byte33 << 14) | (byte34 << 6) | (byte35 >>> 2);
-        final int byte36 = blocks[blocksOffset++] & 0xFF;
-        final int byte37 = blocks[blocksOffset++] & 0xFF;
-        final int byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte35 & 3) << 24) | (byte36 << 16) | (byte37 << 8) | byte38;
-        final int byte39 = blocks[blocksOffset++] & 0xFF;
-        final int byte40 = blocks[blocksOffset++] & 0xFF;
-        final int byte41 = blocks[blocksOffset++] & 0xFF;
-        final int byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte39 << 18) | (byte40 << 10) | (byte41 << 2) | (byte42 >>> 6);
-        final int byte43 = blocks[blocksOffset++] & 0xFF;
-        final int byte44 = blocks[blocksOffset++] & 0xFF;
-        final int byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 63) << 20) | (byte43 << 12) | (byte44 << 4) | (byte45 >>> 4);
-        final int byte46 = blocks[blocksOffset++] & 0xFF;
-        final int byte47 = blocks[blocksOffset++] & 0xFF;
-        final int byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 15) << 22) | (byte46 << 14) | (byte47 << 6) | (byte48 >>> 2);
-        final int byte49 = blocks[blocksOffset++] & 0xFF;
-        final int byte50 = blocks[blocksOffset++] & 0xFF;
-        final int byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 3) << 24) | (byte49 << 16) | (byte50 << 8) | byte51;
-        final int byte52 = blocks[blocksOffset++] & 0xFF;
-        final int byte53 = blocks[blocksOffset++] & 0xFF;
-        final int byte54 = blocks[blocksOffset++] & 0xFF;
-        final int byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte52 << 18) | (byte53 << 10) | (byte54 << 2) | (byte55 >>> 6);
-        final int byte56 = blocks[blocksOffset++] & 0xFF;
-        final int byte57 = blocks[blocksOffset++] & 0xFF;
-        final int byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 63) << 20) | (byte56 << 12) | (byte57 << 4) | (byte58 >>> 4);
-        final int byte59 = blocks[blocksOffset++] & 0xFF;
-        final int byte60 = blocks[blocksOffset++] & 0xFF;
-        final int byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 15) << 22) | (byte59 << 14) | (byte60 << 6) | (byte61 >>> 2);
-        final int byte62 = blocks[blocksOffset++] & 0xFF;
-        final int byte63 = blocks[blocksOffset++] & 0xFF;
-        final int byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 3) << 24) | (byte62 << 16) | (byte63 << 8) | byte64;
-        final int byte65 = blocks[blocksOffset++] & 0xFF;
-        final int byte66 = blocks[blocksOffset++] & 0xFF;
-        final int byte67 = blocks[blocksOffset++] & 0xFF;
-        final int byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte65 << 18) | (byte66 << 10) | (byte67 << 2) | (byte68 >>> 6);
-        final int byte69 = blocks[blocksOffset++] & 0xFF;
-        final int byte70 = blocks[blocksOffset++] & 0xFF;
-        final int byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 63) << 20) | (byte69 << 12) | (byte70 << 4) | (byte71 >>> 4);
-        final int byte72 = blocks[blocksOffset++] & 0xFF;
-        final int byte73 = blocks[blocksOffset++] & 0xFF;
-        final int byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 15) << 22) | (byte72 << 14) | (byte73 << 6) | (byte74 >>> 2);
-        final int byte75 = blocks[blocksOffset++] & 0xFF;
-        final int byte76 = blocks[blocksOffset++] & 0xFF;
-        final int byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 3) << 24) | (byte75 << 16) | (byte76 << 8) | byte77;
-        final int byte78 = blocks[blocksOffset++] & 0xFF;
-        final int byte79 = blocks[blocksOffset++] & 0xFF;
-        final int byte80 = blocks[blocksOffset++] & 0xFF;
-        final int byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte78 << 18) | (byte79 << 10) | (byte80 << 2) | (byte81 >>> 6);
-        final int byte82 = blocks[blocksOffset++] & 0xFF;
-        final int byte83 = blocks[blocksOffset++] & 0xFF;
-        final int byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 63) << 20) | (byte82 << 12) | (byte83 << 4) | (byte84 >>> 4);
-        final int byte85 = blocks[blocksOffset++] & 0xFF;
-        final int byte86 = blocks[blocksOffset++] & 0xFF;
-        final int byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 15) << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final int byte88 = blocks[blocksOffset++] & 0xFF;
-        final int byte89 = blocks[blocksOffset++] & 0xFF;
-        final int byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 24) | (byte88 << 16) | (byte89 << 8) | byte90;
-        final int byte91 = blocks[blocksOffset++] & 0xFF;
-        final int byte92 = blocks[blocksOffset++] & 0xFF;
-        final int byte93 = blocks[blocksOffset++] & 0xFF;
-        final int byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte91 << 18) | (byte92 << 10) | (byte93 << 2) | (byte94 >>> 6);
-        final int byte95 = blocks[blocksOffset++] & 0xFF;
-        final int byte96 = blocks[blocksOffset++] & 0xFF;
-        final int byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 63) << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final int byte98 = blocks[blocksOffset++] & 0xFF;
-        final int byte99 = blocks[blocksOffset++] & 0xFF;
-        final int byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 22) | (byte98 << 14) | (byte99 << 6) | (byte100 >>> 2);
-        final int byte101 = blocks[blocksOffset++] & 0xFF;
-        final int byte102 = blocks[blocksOffset++] & 0xFF;
-        final int byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 3) << 24) | (byte101 << 16) | (byte102 << 8) | byte103;
-      }
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 38;
-        values[valuesOffset++] = (block0 >>> 12) & 67108863L;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 4095L) << 14) | (block1 >>> 50);
-        values[valuesOffset++] = (block1 >>> 24) & 67108863L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 16777215L) << 2) | (block2 >>> 62);
-        values[valuesOffset++] = (block2 >>> 36) & 67108863L;
-        values[valuesOffset++] = (block2 >>> 10) & 67108863L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 1023L) << 16) | (block3 >>> 48);
-        values[valuesOffset++] = (block3 >>> 22) & 67108863L;
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 4194303L) << 4) | (block4 >>> 60);
-        values[valuesOffset++] = (block4 >>> 34) & 67108863L;
-        values[valuesOffset++] = (block4 >>> 8) & 67108863L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 255L) << 18) | (block5 >>> 46);
-        values[valuesOffset++] = (block5 >>> 20) & 67108863L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 1048575L) << 6) | (block6 >>> 58);
-        values[valuesOffset++] = (block6 >>> 32) & 67108863L;
-        values[valuesOffset++] = (block6 >>> 6) & 67108863L;
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 63L) << 20) | (block7 >>> 44);
-        values[valuesOffset++] = (block7 >>> 18) & 67108863L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 262143L) << 8) | (block8 >>> 56);
-        values[valuesOffset++] = (block8 >>> 30) & 67108863L;
-        values[valuesOffset++] = (block8 >>> 4) & 67108863L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 15L) << 22) | (block9 >>> 42);
-        values[valuesOffset++] = (block9 >>> 16) & 67108863L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 65535L) << 10) | (block10 >>> 54);
-        values[valuesOffset++] = (block10 >>> 28) & 67108863L;
-        values[valuesOffset++] = (block10 >>> 2) & 67108863L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 3L) << 24) | (block11 >>> 40);
-        values[valuesOffset++] = (block11 >>> 14) & 67108863L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 16383L) << 12) | (block12 >>> 52);
-        values[valuesOffset++] = (block12 >>> 26) & 67108863L;
-        values[valuesOffset++] = block12 & 67108863L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 18) | (byte1 << 10) | (byte2 << 2) | (byte3 >>> 6);
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte3 & 63) << 20) | (byte4 << 12) | (byte5 << 4) | (byte6 >>> 4);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 15) << 22) | (byte7 << 14) | (byte8 << 6) | (byte9 >>> 2);
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 3) << 24) | (byte10 << 16) | (byte11 << 8) | byte12;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte13 << 18) | (byte14 << 10) | (byte15 << 2) | (byte16 >>> 6);
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte16 & 63) << 20) | (byte17 << 12) | (byte18 << 4) | (byte19 >>> 4);
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte19 & 15) << 22) | (byte20 << 14) | (byte21 << 6) | (byte22 >>> 2);
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte22 & 3) << 24) | (byte23 << 16) | (byte24 << 8) | byte25;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte26 << 18) | (byte27 << 10) | (byte28 << 2) | (byte29 >>> 6);
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte29 & 63) << 20) | (byte30 << 12) | (byte31 << 4) | (byte32 >>> 4);
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte32 & 15) << 22) | (byte33 << 14) | (byte34 << 6) | (byte35 >>> 2);
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte35 & 3) << 24) | (byte36 << 16) | (byte37 << 8) | byte38;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte39 << 18) | (byte40 << 10) | (byte41 << 2) | (byte42 >>> 6);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 63) << 20) | (byte43 << 12) | (byte44 << 4) | (byte45 >>> 4);
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte45 & 15) << 22) | (byte46 << 14) | (byte47 << 6) | (byte48 >>> 2);
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte48 & 3) << 24) | (byte49 << 16) | (byte50 << 8) | byte51;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte52 << 18) | (byte53 << 10) | (byte54 << 2) | (byte55 >>> 6);
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte55 & 63) << 20) | (byte56 << 12) | (byte57 << 4) | (byte58 >>> 4);
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte58 & 15) << 22) | (byte59 << 14) | (byte60 << 6) | (byte61 >>> 2);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 3) << 24) | (byte62 << 16) | (byte63 << 8) | byte64;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte65 << 18) | (byte66 << 10) | (byte67 << 2) | (byte68 >>> 6);
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte68 & 63) << 20) | (byte69 << 12) | (byte70 << 4) | (byte71 >>> 4);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 15) << 22) | (byte72 << 14) | (byte73 << 6) | (byte74 >>> 2);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 3) << 24) | (byte75 << 16) | (byte76 << 8) | byte77;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte78 << 18) | (byte79 << 10) | (byte80 << 2) | (byte81 >>> 6);
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte81 & 63) << 20) | (byte82 << 12) | (byte83 << 4) | (byte84 >>> 4);
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte84 & 15) << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 24) | (byte88 << 16) | (byte89 << 8) | byte90;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte91 << 18) | (byte92 << 10) | (byte93 << 2) | (byte94 >>> 6);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 63) << 20) | (byte95 << 12) | (byte96 << 4) | (byte97 >>> 4);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 15) << 22) | (byte98 << 14) | (byte99 << 6) | (byte100 >>> 2);
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 3) << 24) | (byte101 << 16) | (byte102 << 8) | byte103;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 26) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 26) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked62.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked62.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked62.java	(copie de travail)
@@ -1,483 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked62 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 31;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 2;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 3L) << 60) | (block1 >>> 4);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 15L) << 58) | (block2 >>> 6);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 63L) << 56) | (block3 >>> 8);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 255L) << 54) | (block4 >>> 10);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1023L) << 52) | (block5 >>> 12);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 4095L) << 50) | (block6 >>> 14);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 16383L) << 48) | (block7 >>> 16);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 65535L) << 46) | (block8 >>> 18);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 262143L) << 44) | (block9 >>> 20);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 1048575L) << 42) | (block10 >>> 22);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 4194303L) << 40) | (block11 >>> 24);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 16777215L) << 38) | (block12 >>> 26);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 67108863L) << 36) | (block13 >>> 28);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 268435455L) << 34) | (block14 >>> 30);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1073741823L) << 32) | (block15 >>> 32);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 4294967295L) << 30) | (block16 >>> 34);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 17179869183L) << 28) | (block17 >>> 36);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 68719476735L) << 26) | (block18 >>> 38);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 274877906943L) << 24) | (block19 >>> 40);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 1099511627775L) << 22) | (block20 >>> 42);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 4398046511103L) << 20) | (block21 >>> 44);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 17592186044415L) << 18) | (block22 >>> 46);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 70368744177663L) << 16) | (block23 >>> 48);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 281474976710655L) << 14) | (block24 >>> 50);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 1125899906842623L) << 12) | (block25 >>> 52);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 4503599627370495L) << 10) | (block26 >>> 54);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 18014398509481983L) << 8) | (block27 >>> 56);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 72057594037927935L) << 6) | (block28 >>> 58);
-        final long block29 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block28 & 288230376151711743L) << 4) | (block29 >>> 60);
-        final long block30 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block29 & 1152921504606846975L) << 2) | (block30 >>> 62);
-        values[valuesOffset++] = block30 & 4611686018427387903L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 54) | (byte1 << 46) | (byte2 << 38) | (byte3 << 30) | (byte4 << 22) | (byte5 << 14) | (byte6 << 6) | (byte7 >>> 2);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 3) << 60) | (byte8 << 52) | (byte9 << 44) | (byte10 << 36) | (byte11 << 28) | (byte12 << 20) | (byte13 << 12) | (byte14 << 4) | (byte15 >>> 4);
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte15 & 15) << 58) | (byte16 << 50) | (byte17 << 42) | (byte18 << 34) | (byte19 << 26) | (byte20 << 18) | (byte21 << 10) | (byte22 << 2) | (byte23 >>> 6);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 63) << 56) | (byte24 << 48) | (byte25 << 40) | (byte26 << 32) | (byte27 << 24) | (byte28 << 16) | (byte29 << 8) | byte30;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte31 << 54) | (byte32 << 46) | (byte33 << 38) | (byte34 << 30) | (byte35 << 22) | (byte36 << 14) | (byte37 << 6) | (byte38 >>> 2);
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte38 & 3) << 60) | (byte39 << 52) | (byte40 << 44) | (byte41 << 36) | (byte42 << 28) | (byte43 << 20) | (byte44 << 12) | (byte45 << 4) | (byte46 >>> 4);
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte46 & 15) << 58) | (byte47 << 50) | (byte48 << 42) | (byte49 << 34) | (byte50 << 26) | (byte51 << 18) | (byte52 << 10) | (byte53 << 2) | (byte54 >>> 6);
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte54 & 63) << 56) | (byte55 << 48) | (byte56 << 40) | (byte57 << 32) | (byte58 << 24) | (byte59 << 16) | (byte60 << 8) | byte61;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte62 << 54) | (byte63 << 46) | (byte64 << 38) | (byte65 << 30) | (byte66 << 22) | (byte67 << 14) | (byte68 << 6) | (byte69 >>> 2);
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte69 & 3) << 60) | (byte70 << 52) | (byte71 << 44) | (byte72 << 36) | (byte73 << 28) | (byte74 << 20) | (byte75 << 12) | (byte76 << 4) | (byte77 >>> 4);
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte77 & 15) << 58) | (byte78 << 50) | (byte79 << 42) | (byte80 << 34) | (byte81 << 26) | (byte82 << 18) | (byte83 << 10) | (byte84 << 2) | (byte85 >>> 6);
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 63) << 56) | (byte86 << 48) | (byte87 << 40) | (byte88 << 32) | (byte89 << 24) | (byte90 << 16) | (byte91 << 8) | byte92;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte93 << 54) | (byte94 << 46) | (byte95 << 38) | (byte96 << 30) | (byte97 << 22) | (byte98 << 14) | (byte99 << 6) | (byte100 >>> 2);
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte100 & 3) << 60) | (byte101 << 52) | (byte102 << 44) | (byte103 << 36) | (byte104 << 28) | (byte105 << 20) | (byte106 << 12) | (byte107 << 4) | (byte108 >>> 4);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 15) << 58) | (byte109 << 50) | (byte110 << 42) | (byte111 << 34) | (byte112 << 26) | (byte113 << 18) | (byte114 << 10) | (byte115 << 2) | (byte116 >>> 6);
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte116 & 63) << 56) | (byte117 << 48) | (byte118 << 40) | (byte119 << 32) | (byte120 << 24) | (byte121 << 16) | (byte122 << 8) | byte123;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte124 << 54) | (byte125 << 46) | (byte126 << 38) | (byte127 << 30) | (byte128 << 22) | (byte129 << 14) | (byte130 << 6) | (byte131 >>> 2);
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte131 & 3) << 60) | (byte132 << 52) | (byte133 << 44) | (byte134 << 36) | (byte135 << 28) | (byte136 << 20) | (byte137 << 12) | (byte138 << 4) | (byte139 >>> 4);
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte139 & 15) << 58) | (byte140 << 50) | (byte141 << 42) | (byte142 << 34) | (byte143 << 26) | (byte144 << 18) | (byte145 << 10) | (byte146 << 2) | (byte147 >>> 6);
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte147 & 63) << 56) | (byte148 << 48) | (byte149 << 40) | (byte150 << 32) | (byte151 << 24) | (byte152 << 16) | (byte153 << 8) | byte154;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte155 << 54) | (byte156 << 46) | (byte157 << 38) | (byte158 << 30) | (byte159 << 22) | (byte160 << 14) | (byte161 << 6) | (byte162 >>> 2);
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte162 & 3) << 60) | (byte163 << 52) | (byte164 << 44) | (byte165 << 36) | (byte166 << 28) | (byte167 << 20) | (byte168 << 12) | (byte169 << 4) | (byte170 >>> 4);
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte170 & 15) << 58) | (byte171 << 50) | (byte172 << 42) | (byte173 << 34) | (byte174 << 26) | (byte175 << 18) | (byte176 << 10) | (byte177 << 2) | (byte178 >>> 6);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 63) << 56) | (byte179 << 48) | (byte180 << 40) | (byte181 << 32) | (byte182 << 24) | (byte183 << 16) | (byte184 << 8) | byte185;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte186 << 54) | (byte187 << 46) | (byte188 << 38) | (byte189 << 30) | (byte190 << 22) | (byte191 << 14) | (byte192 << 6) | (byte193 >>> 2);
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte193 & 3) << 60) | (byte194 << 52) | (byte195 << 44) | (byte196 << 36) | (byte197 << 28) | (byte198 << 20) | (byte199 << 12) | (byte200 << 4) | (byte201 >>> 4);
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte201 & 15) << 58) | (byte202 << 50) | (byte203 << 42) | (byte204 << 34) | (byte205 << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 56) | (byte210 << 48) | (byte211 << 40) | (byte212 << 32) | (byte213 << 24) | (byte214 << 16) | (byte215 << 8) | byte216;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte217 << 54) | (byte218 << 46) | (byte219 << 38) | (byte220 << 30) | (byte221 << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        final long byte232 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 60) | (byte225 << 52) | (byte226 << 44) | (byte227 << 36) | (byte228 << 28) | (byte229 << 20) | (byte230 << 12) | (byte231 << 4) | (byte232 >>> 4);
-        final long byte233 = blocks[blocksOffset++] & 0xFF;
-        final long byte234 = blocks[blocksOffset++] & 0xFF;
-        final long byte235 = blocks[blocksOffset++] & 0xFF;
-        final long byte236 = blocks[blocksOffset++] & 0xFF;
-        final long byte237 = blocks[blocksOffset++] & 0xFF;
-        final long byte238 = blocks[blocksOffset++] & 0xFF;
-        final long byte239 = blocks[blocksOffset++] & 0xFF;
-        final long byte240 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte232 & 15) << 58) | (byte233 << 50) | (byte234 << 42) | (byte235 << 34) | (byte236 << 26) | (byte237 << 18) | (byte238 << 10) | (byte239 << 2) | (byte240 >>> 6);
-        final long byte241 = blocks[blocksOffset++] & 0xFF;
-        final long byte242 = blocks[blocksOffset++] & 0xFF;
-        final long byte243 = blocks[blocksOffset++] & 0xFF;
-        final long byte244 = blocks[blocksOffset++] & 0xFF;
-        final long byte245 = blocks[blocksOffset++] & 0xFF;
-        final long byte246 = blocks[blocksOffset++] & 0xFF;
-        final long byte247 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte240 & 63) << 56) | (byte241 << 48) | (byte242 << 40) | (byte243 << 32) | (byte244 << 24) | (byte245 << 16) | (byte246 << 8) | byte247;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 60);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 58);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 60);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 58);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked54.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked54.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked54.java	(copie de travail)
@@ -1,439 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked54 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 27;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 10;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 1023L) << 44) | (block1 >>> 20);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 1048575L) << 34) | (block2 >>> 30);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 1073741823L) << 24) | (block3 >>> 40);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 1099511627775L) << 14) | (block4 >>> 50);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1125899906842623L) << 4) | (block5 >>> 60);
-        values[valuesOffset++] = (block5 >>> 6) & 18014398509481983L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 63L) << 48) | (block6 >>> 16);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 65535L) << 38) | (block7 >>> 26);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 67108863L) << 28) | (block8 >>> 36);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 68719476735L) << 18) | (block9 >>> 46);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 70368744177663L) << 8) | (block10 >>> 56);
-        values[valuesOffset++] = (block10 >>> 2) & 18014398509481983L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 3L) << 52) | (block11 >>> 12);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 4095L) << 42) | (block12 >>> 22);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 4194303L) << 32) | (block13 >>> 32);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 4294967295L) << 22) | (block14 >>> 42);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 4398046511103L) << 12) | (block15 >>> 52);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 4503599627370495L) << 2) | (block16 >>> 62);
-        values[valuesOffset++] = (block16 >>> 8) & 18014398509481983L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 255L) << 46) | (block17 >>> 18);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 262143L) << 36) | (block18 >>> 28);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 268435455L) << 26) | (block19 >>> 38);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 274877906943L) << 16) | (block20 >>> 48);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 281474976710655L) << 6) | (block21 >>> 58);
-        values[valuesOffset++] = (block21 >>> 4) & 18014398509481983L;
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 15L) << 50) | (block22 >>> 14);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 16383L) << 40) | (block23 >>> 24);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 16777215L) << 30) | (block24 >>> 34);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 17179869183L) << 20) | (block25 >>> 44);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 17592186044415L) << 10) | (block26 >>> 54);
-        values[valuesOffset++] = block26 & 18014398509481983L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 46) | (byte1 << 38) | (byte2 << 30) | (byte3 << 22) | (byte4 << 14) | (byte5 << 6) | (byte6 >>> 2);
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte6 & 3) << 52) | (byte7 << 44) | (byte8 << 36) | (byte9 << 28) | (byte10 << 20) | (byte11 << 12) | (byte12 << 4) | (byte13 >>> 4);
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte13 & 15) << 50) | (byte14 << 42) | (byte15 << 34) | (byte16 << 26) | (byte17 << 18) | (byte18 << 10) | (byte19 << 2) | (byte20 >>> 6);
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte20 & 63) << 48) | (byte21 << 40) | (byte22 << 32) | (byte23 << 24) | (byte24 << 16) | (byte25 << 8) | byte26;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte27 << 46) | (byte28 << 38) | (byte29 << 30) | (byte30 << 22) | (byte31 << 14) | (byte32 << 6) | (byte33 >>> 2);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 3) << 52) | (byte34 << 44) | (byte35 << 36) | (byte36 << 28) | (byte37 << 20) | (byte38 << 12) | (byte39 << 4) | (byte40 >>> 4);
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 15) << 50) | (byte41 << 42) | (byte42 << 34) | (byte43 << 26) | (byte44 << 18) | (byte45 << 10) | (byte46 << 2) | (byte47 >>> 6);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 63) << 48) | (byte48 << 40) | (byte49 << 32) | (byte50 << 24) | (byte51 << 16) | (byte52 << 8) | byte53;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte54 << 46) | (byte55 << 38) | (byte56 << 30) | (byte57 << 22) | (byte58 << 14) | (byte59 << 6) | (byte60 >>> 2);
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte60 & 3) << 52) | (byte61 << 44) | (byte62 << 36) | (byte63 << 28) | (byte64 << 20) | (byte65 << 12) | (byte66 << 4) | (byte67 >>> 4);
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte67 & 15) << 50) | (byte68 << 42) | (byte69 << 34) | (byte70 << 26) | (byte71 << 18) | (byte72 << 10) | (byte73 << 2) | (byte74 >>> 6);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 63) << 48) | (byte75 << 40) | (byte76 << 32) | (byte77 << 24) | (byte78 << 16) | (byte79 << 8) | byte80;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte81 << 46) | (byte82 << 38) | (byte83 << 30) | (byte84 << 22) | (byte85 << 14) | (byte86 << 6) | (byte87 >>> 2);
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte87 & 3) << 52) | (byte88 << 44) | (byte89 << 36) | (byte90 << 28) | (byte91 << 20) | (byte92 << 12) | (byte93 << 4) | (byte94 >>> 4);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 15) << 50) | (byte95 << 42) | (byte96 << 34) | (byte97 << 26) | (byte98 << 18) | (byte99 << 10) | (byte100 << 2) | (byte101 >>> 6);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 63) << 48) | (byte102 << 40) | (byte103 << 32) | (byte104 << 24) | (byte105 << 16) | (byte106 << 8) | byte107;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte108 << 46) | (byte109 << 38) | (byte110 << 30) | (byte111 << 22) | (byte112 << 14) | (byte113 << 6) | (byte114 >>> 2);
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte114 & 3) << 52) | (byte115 << 44) | (byte116 << 36) | (byte117 << 28) | (byte118 << 20) | (byte119 << 12) | (byte120 << 4) | (byte121 >>> 4);
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte121 & 15) << 50) | (byte122 << 42) | (byte123 << 34) | (byte124 << 26) | (byte125 << 18) | (byte126 << 10) | (byte127 << 2) | (byte128 >>> 6);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 63) << 48) | (byte129 << 40) | (byte130 << 32) | (byte131 << 24) | (byte132 << 16) | (byte133 << 8) | byte134;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte135 << 46) | (byte136 << 38) | (byte137 << 30) | (byte138 << 22) | (byte139 << 14) | (byte140 << 6) | (byte141 >>> 2);
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte141 & 3) << 52) | (byte142 << 44) | (byte143 << 36) | (byte144 << 28) | (byte145 << 20) | (byte146 << 12) | (byte147 << 4) | (byte148 >>> 4);
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte148 & 15) << 50) | (byte149 << 42) | (byte150 << 34) | (byte151 << 26) | (byte152 << 18) | (byte153 << 10) | (byte154 << 2) | (byte155 >>> 6);
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 63) << 48) | (byte156 << 40) | (byte157 << 32) | (byte158 << 24) | (byte159 << 16) | (byte160 << 8) | byte161;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte162 << 46) | (byte163 << 38) | (byte164 << 30) | (byte165 << 22) | (byte166 << 14) | (byte167 << 6) | (byte168 >>> 2);
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte168 & 3) << 52) | (byte169 << 44) | (byte170 << 36) | (byte171 << 28) | (byte172 << 20) | (byte173 << 12) | (byte174 << 4) | (byte175 >>> 4);
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte175 & 15) << 50) | (byte176 << 42) | (byte177 << 34) | (byte178 << 26) | (byte179 << 18) | (byte180 << 10) | (byte181 << 2) | (byte182 >>> 6);
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte182 & 63) << 48) | (byte183 << 40) | (byte184 << 32) | (byte185 << 24) | (byte186 << 16) | (byte187 << 8) | byte188;
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte189 << 46) | (byte190 << 38) | (byte191 << 30) | (byte192 << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 52) | (byte196 << 44) | (byte197 << 36) | (byte198 << 28) | (byte199 << 20) | (byte200 << 12) | (byte201 << 4) | (byte202 >>> 4);
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte202 & 15) << 50) | (byte203 << 42) | (byte204 << 34) | (byte205 << 26) | (byte206 << 18) | (byte207 << 10) | (byte208 << 2) | (byte209 >>> 6);
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte209 & 63) << 48) | (byte210 << 40) | (byte211 << 32) | (byte212 << 24) | (byte213 << 16) | (byte214 << 8) | byte215;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked18.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked18.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked18.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked18 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 9;
-    }
+final class BulkOperationPacked18 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 32;
+    public BulkOperationPacked18() {
+      super(18);
+      assert blockCount() == 9;
+      assert valueCount() == 32;
     }
 
     @Override
@@ -355,38 +352,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 18) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 18) | values[valuesOffset++];
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked46.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked46.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked46.java	(copie de travail)
@@ -1,395 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked46 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 23;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 18;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 262143L) << 28) | (block1 >>> 36);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 68719476735L) << 10) | (block2 >>> 54);
-        values[valuesOffset++] = (block2 >>> 8) & 70368744177663L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 255L) << 38) | (block3 >>> 26);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 67108863L) << 20) | (block4 >>> 44);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 17592186044415L) << 2) | (block5 >>> 62);
-        values[valuesOffset++] = (block5 >>> 16) & 70368744177663L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 65535L) << 30) | (block6 >>> 34);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 17179869183L) << 12) | (block7 >>> 52);
-        values[valuesOffset++] = (block7 >>> 6) & 70368744177663L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 63L) << 40) | (block8 >>> 24);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 16777215L) << 22) | (block9 >>> 42);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 4398046511103L) << 4) | (block10 >>> 60);
-        values[valuesOffset++] = (block10 >>> 14) & 70368744177663L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 16383L) << 32) | (block11 >>> 32);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 4294967295L) << 14) | (block12 >>> 50);
-        values[valuesOffset++] = (block12 >>> 4) & 70368744177663L;
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 15L) << 42) | (block13 >>> 22);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 4194303L) << 24) | (block14 >>> 40);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1099511627775L) << 6) | (block15 >>> 58);
-        values[valuesOffset++] = (block15 >>> 12) & 70368744177663L;
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 4095L) << 34) | (block16 >>> 30);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 1073741823L) << 16) | (block17 >>> 48);
-        values[valuesOffset++] = (block17 >>> 2) & 70368744177663L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 3L) << 44) | (block18 >>> 20);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 1048575L) << 26) | (block19 >>> 38);
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 274877906943L) << 8) | (block20 >>> 56);
-        values[valuesOffset++] = (block20 >>> 10) & 70368744177663L;
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 1023L) << 36) | (block21 >>> 28);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 268435455L) << 18) | (block22 >>> 46);
-        values[valuesOffset++] = block22 & 70368744177663L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 38) | (byte1 << 30) | (byte2 << 22) | (byte3 << 14) | (byte4 << 6) | (byte5 >>> 2);
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte5 & 3) << 44) | (byte6 << 36) | (byte7 << 28) | (byte8 << 20) | (byte9 << 12) | (byte10 << 4) | (byte11 >>> 4);
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte11 & 15) << 42) | (byte12 << 34) | (byte13 << 26) | (byte14 << 18) | (byte15 << 10) | (byte16 << 2) | (byte17 >>> 6);
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte17 & 63) << 40) | (byte18 << 32) | (byte19 << 24) | (byte20 << 16) | (byte21 << 8) | byte22;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte23 << 38) | (byte24 << 30) | (byte25 << 22) | (byte26 << 14) | (byte27 << 6) | (byte28 >>> 2);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 3) << 44) | (byte29 << 36) | (byte30 << 28) | (byte31 << 20) | (byte32 << 12) | (byte33 << 4) | (byte34 >>> 4);
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte34 & 15) << 42) | (byte35 << 34) | (byte36 << 26) | (byte37 << 18) | (byte38 << 10) | (byte39 << 2) | (byte40 >>> 6);
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte40 & 63) << 40) | (byte41 << 32) | (byte42 << 24) | (byte43 << 16) | (byte44 << 8) | byte45;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte46 << 38) | (byte47 << 30) | (byte48 << 22) | (byte49 << 14) | (byte50 << 6) | (byte51 >>> 2);
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte51 & 3) << 44) | (byte52 << 36) | (byte53 << 28) | (byte54 << 20) | (byte55 << 12) | (byte56 << 4) | (byte57 >>> 4);
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte57 & 15) << 42) | (byte58 << 34) | (byte59 << 26) | (byte60 << 18) | (byte61 << 10) | (byte62 << 2) | (byte63 >>> 6);
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte63 & 63) << 40) | (byte64 << 32) | (byte65 << 24) | (byte66 << 16) | (byte67 << 8) | byte68;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte69 << 38) | (byte70 << 30) | (byte71 << 22) | (byte72 << 14) | (byte73 << 6) | (byte74 >>> 2);
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte74 & 3) << 44) | (byte75 << 36) | (byte76 << 28) | (byte77 << 20) | (byte78 << 12) | (byte79 << 4) | (byte80 >>> 4);
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte80 & 15) << 42) | (byte81 << 34) | (byte82 << 26) | (byte83 << 18) | (byte84 << 10) | (byte85 << 2) | (byte86 >>> 6);
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte86 & 63) << 40) | (byte87 << 32) | (byte88 << 24) | (byte89 << 16) | (byte90 << 8) | byte91;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte92 << 38) | (byte93 << 30) | (byte94 << 22) | (byte95 << 14) | (byte96 << 6) | (byte97 >>> 2);
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte97 & 3) << 44) | (byte98 << 36) | (byte99 << 28) | (byte100 << 20) | (byte101 << 12) | (byte102 << 4) | (byte103 >>> 4);
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte103 & 15) << 42) | (byte104 << 34) | (byte105 << 26) | (byte106 << 18) | (byte107 << 10) | (byte108 << 2) | (byte109 >>> 6);
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte109 & 63) << 40) | (byte110 << 32) | (byte111 << 24) | (byte112 << 16) | (byte113 << 8) | byte114;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte115 << 38) | (byte116 << 30) | (byte117 << 22) | (byte118 << 14) | (byte119 << 6) | (byte120 >>> 2);
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte120 & 3) << 44) | (byte121 << 36) | (byte122 << 28) | (byte123 << 20) | (byte124 << 12) | (byte125 << 4) | (byte126 >>> 4);
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte126 & 15) << 42) | (byte127 << 34) | (byte128 << 26) | (byte129 << 18) | (byte130 << 10) | (byte131 << 2) | (byte132 >>> 6);
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte132 & 63) << 40) | (byte133 << 32) | (byte134 << 24) | (byte135 << 16) | (byte136 << 8) | byte137;
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte138 << 38) | (byte139 << 30) | (byte140 << 22) | (byte141 << 14) | (byte142 << 6) | (byte143 >>> 2);
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte143 & 3) << 44) | (byte144 << 36) | (byte145 << 28) | (byte146 << 20) | (byte147 << 12) | (byte148 << 4) | (byte149 >>> 4);
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte149 & 15) << 42) | (byte150 << 34) | (byte151 << 26) | (byte152 << 18) | (byte153 << 10) | (byte154 << 2) | (byte155 >>> 6);
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte155 & 63) << 40) | (byte156 << 32) | (byte157 << 24) | (byte158 << 16) | (byte159 << 8) | byte160;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte161 << 38) | (byte162 << 30) | (byte163 << 22) | (byte164 << 14) | (byte165 << 6) | (byte166 >>> 2);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 3) << 44) | (byte167 << 36) | (byte168 << 28) | (byte169 << 20) | (byte170 << 12) | (byte171 << 4) | (byte172 >>> 4);
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte172 & 15) << 42) | (byte173 << 34) | (byte174 << 26) | (byte175 << 18) | (byte176 << 10) | (byte177 << 2) | (byte178 >>> 6);
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte178 & 63) << 40) | (byte179 << 32) | (byte180 << 24) | (byte181 << 16) | (byte182 << 8) | byte183;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked38.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked38.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked38.java	(copie de travail)
@@ -1,351 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked38 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 19;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 26;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 67108863L) << 12) | (block1 >>> 52);
-        values[valuesOffset++] = (block1 >>> 14) & 274877906943L;
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 16383L) << 24) | (block2 >>> 40);
-        values[valuesOffset++] = (block2 >>> 2) & 274877906943L;
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 3L) << 36) | (block3 >>> 28);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 268435455L) << 10) | (block4 >>> 54);
-        values[valuesOffset++] = (block4 >>> 16) & 274877906943L;
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 65535L) << 22) | (block5 >>> 42);
-        values[valuesOffset++] = (block5 >>> 4) & 274877906943L;
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 15L) << 34) | (block6 >>> 30);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 1073741823L) << 8) | (block7 >>> 56);
-        values[valuesOffset++] = (block7 >>> 18) & 274877906943L;
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 262143L) << 20) | (block8 >>> 44);
-        values[valuesOffset++] = (block8 >>> 6) & 274877906943L;
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 63L) << 32) | (block9 >>> 32);
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 4294967295L) << 6) | (block10 >>> 58);
-        values[valuesOffset++] = (block10 >>> 20) & 274877906943L;
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 1048575L) << 18) | (block11 >>> 46);
-        values[valuesOffset++] = (block11 >>> 8) & 274877906943L;
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 255L) << 30) | (block12 >>> 34);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 17179869183L) << 4) | (block13 >>> 60);
-        values[valuesOffset++] = (block13 >>> 22) & 274877906943L;
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 4194303L) << 16) | (block14 >>> 48);
-        values[valuesOffset++] = (block14 >>> 10) & 274877906943L;
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 1023L) << 28) | (block15 >>> 36);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 68719476735L) << 2) | (block16 >>> 62);
-        values[valuesOffset++] = (block16 >>> 24) & 274877906943L;
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 16777215L) << 14) | (block17 >>> 50);
-        values[valuesOffset++] = (block17 >>> 12) & 274877906943L;
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 4095L) << 26) | (block18 >>> 38);
-        values[valuesOffset++] = block18 & 274877906943L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 30) | (byte1 << 22) | (byte2 << 14) | (byte3 << 6) | (byte4 >>> 2);
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte4 & 3) << 36) | (byte5 << 28) | (byte6 << 20) | (byte7 << 12) | (byte8 << 4) | (byte9 >>> 4);
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte9 & 15) << 34) | (byte10 << 26) | (byte11 << 18) | (byte12 << 10) | (byte13 << 2) | (byte14 >>> 6);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 63) << 32) | (byte15 << 24) | (byte16 << 16) | (byte17 << 8) | byte18;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte19 << 30) | (byte20 << 22) | (byte21 << 14) | (byte22 << 6) | (byte23 >>> 2);
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte23 & 3) << 36) | (byte24 << 28) | (byte25 << 20) | (byte26 << 12) | (byte27 << 4) | (byte28 >>> 4);
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte28 & 15) << 34) | (byte29 << 26) | (byte30 << 18) | (byte31 << 10) | (byte32 << 2) | (byte33 >>> 6);
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte33 & 63) << 32) | (byte34 << 24) | (byte35 << 16) | (byte36 << 8) | byte37;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte38 << 30) | (byte39 << 22) | (byte40 << 14) | (byte41 << 6) | (byte42 >>> 2);
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte42 & 3) << 36) | (byte43 << 28) | (byte44 << 20) | (byte45 << 12) | (byte46 << 4) | (byte47 >>> 4);
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte47 & 15) << 34) | (byte48 << 26) | (byte49 << 18) | (byte50 << 10) | (byte51 << 2) | (byte52 >>> 6);
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte52 & 63) << 32) | (byte53 << 24) | (byte54 << 16) | (byte55 << 8) | byte56;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte57 << 30) | (byte58 << 22) | (byte59 << 14) | (byte60 << 6) | (byte61 >>> 2);
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte61 & 3) << 36) | (byte62 << 28) | (byte63 << 20) | (byte64 << 12) | (byte65 << 4) | (byte66 >>> 4);
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte66 & 15) << 34) | (byte67 << 26) | (byte68 << 18) | (byte69 << 10) | (byte70 << 2) | (byte71 >>> 6);
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte71 & 63) << 32) | (byte72 << 24) | (byte73 << 16) | (byte74 << 8) | byte75;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte76 << 30) | (byte77 << 22) | (byte78 << 14) | (byte79 << 6) | (byte80 >>> 2);
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte80 & 3) << 36) | (byte81 << 28) | (byte82 << 20) | (byte83 << 12) | (byte84 << 4) | (byte85 >>> 4);
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte85 & 15) << 34) | (byte86 << 26) | (byte87 << 18) | (byte88 << 10) | (byte89 << 2) | (byte90 >>> 6);
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte90 & 63) << 32) | (byte91 << 24) | (byte92 << 16) | (byte93 << 8) | byte94;
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte95 << 30) | (byte96 << 22) | (byte97 << 14) | (byte98 << 6) | (byte99 >>> 2);
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte99 & 3) << 36) | (byte100 << 28) | (byte101 << 20) | (byte102 << 12) | (byte103 << 4) | (byte104 >>> 4);
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte104 & 15) << 34) | (byte105 << 26) | (byte106 << 18) | (byte107 << 10) | (byte108 << 2) | (byte109 >>> 6);
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte109 & 63) << 32) | (byte110 << 24) | (byte111 << 16) | (byte112 << 8) | byte113;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte114 << 30) | (byte115 << 22) | (byte116 << 14) | (byte117 << 6) | (byte118 >>> 2);
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte118 & 3) << 36) | (byte119 << 28) | (byte120 << 20) | (byte121 << 12) | (byte122 << 4) | (byte123 >>> 4);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 15) << 34) | (byte124 << 26) | (byte125 << 18) | (byte126 << 10) | (byte127 << 2) | (byte128 >>> 6);
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte128 & 63) << 32) | (byte129 << 24) | (byte130 << 16) | (byte131 << 8) | byte132;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte133 << 30) | (byte134 << 22) | (byte135 << 14) | (byte136 << 6) | (byte137 >>> 2);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 3) << 36) | (byte138 << 28) | (byte139 << 20) | (byte140 << 12) | (byte141 << 4) | (byte142 >>> 4);
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte142 & 15) << 34) | (byte143 << 26) | (byte144 << 18) | (byte145 << 10) | (byte146 << 2) | (byte147 >>> 6);
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte147 & 63) << 32) | (byte148 << 24) | (byte149 << 16) | (byte150 << 8) | byte151;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked58.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked58.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked58.java	(copie de travail)
@@ -1,461 +0,0 @@
-// This file has been automatically generated, DO NOT EDIT
-
-package org.apache.lucene.util.packed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Efficient sequential read/write of packed integers.
- */
-final class BulkOperationPacked58 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 29;
-    }
-
-    @Override
-    public int valueCount() {
-      return 32;
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long block0 = blocks[blocksOffset++];
-        values[valuesOffset++] = block0 >>> 6;
-        final long block1 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block0 & 63L) << 52) | (block1 >>> 12);
-        final long block2 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block1 & 4095L) << 46) | (block2 >>> 18);
-        final long block3 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block2 & 262143L) << 40) | (block3 >>> 24);
-        final long block4 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block3 & 16777215L) << 34) | (block4 >>> 30);
-        final long block5 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block4 & 1073741823L) << 28) | (block5 >>> 36);
-        final long block6 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block5 & 68719476735L) << 22) | (block6 >>> 42);
-        final long block7 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block6 & 4398046511103L) << 16) | (block7 >>> 48);
-        final long block8 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block7 & 281474976710655L) << 10) | (block8 >>> 54);
-        final long block9 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block8 & 18014398509481983L) << 4) | (block9 >>> 60);
-        values[valuesOffset++] = (block9 >>> 2) & 288230376151711743L;
-        final long block10 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block9 & 3L) << 56) | (block10 >>> 8);
-        final long block11 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block10 & 255L) << 50) | (block11 >>> 14);
-        final long block12 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block11 & 16383L) << 44) | (block12 >>> 20);
-        final long block13 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block12 & 1048575L) << 38) | (block13 >>> 26);
-        final long block14 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block13 & 67108863L) << 32) | (block14 >>> 32);
-        final long block15 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block14 & 4294967295L) << 26) | (block15 >>> 38);
-        final long block16 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block15 & 274877906943L) << 20) | (block16 >>> 44);
-        final long block17 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block16 & 17592186044415L) << 14) | (block17 >>> 50);
-        final long block18 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block17 & 1125899906842623L) << 8) | (block18 >>> 56);
-        final long block19 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block18 & 72057594037927935L) << 2) | (block19 >>> 62);
-        values[valuesOffset++] = (block19 >>> 4) & 288230376151711743L;
-        final long block20 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block19 & 15L) << 54) | (block20 >>> 10);
-        final long block21 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block20 & 1023L) << 48) | (block21 >>> 16);
-        final long block22 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block21 & 65535L) << 42) | (block22 >>> 22);
-        final long block23 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block22 & 4194303L) << 36) | (block23 >>> 28);
-        final long block24 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block23 & 268435455L) << 30) | (block24 >>> 34);
-        final long block25 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block24 & 17179869183L) << 24) | (block25 >>> 40);
-        final long block26 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block25 & 1099511627775L) << 18) | (block26 >>> 46);
-        final long block27 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block26 & 70368744177663L) << 12) | (block27 >>> 52);
-        final long block28 = blocks[blocksOffset++];
-        values[valuesOffset++] = ((block27 & 4503599627370495L) << 6) | (block28 >>> 58);
-        values[valuesOffset++] = block28 & 288230376151711743L;
-      }
-    }
-
-    @Override
-    public void decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {
-      assert blocksOffset + 8 * iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        final long byte0 = blocks[blocksOffset++] & 0xFF;
-        final long byte1 = blocks[blocksOffset++] & 0xFF;
-        final long byte2 = blocks[blocksOffset++] & 0xFF;
-        final long byte3 = blocks[blocksOffset++] & 0xFF;
-        final long byte4 = blocks[blocksOffset++] & 0xFF;
-        final long byte5 = blocks[blocksOffset++] & 0xFF;
-        final long byte6 = blocks[blocksOffset++] & 0xFF;
-        final long byte7 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte0 << 50) | (byte1 << 42) | (byte2 << 34) | (byte3 << 26) | (byte4 << 18) | (byte5 << 10) | (byte6 << 2) | (byte7 >>> 6);
-        final long byte8 = blocks[blocksOffset++] & 0xFF;
-        final long byte9 = blocks[blocksOffset++] & 0xFF;
-        final long byte10 = blocks[blocksOffset++] & 0xFF;
-        final long byte11 = blocks[blocksOffset++] & 0xFF;
-        final long byte12 = blocks[blocksOffset++] & 0xFF;
-        final long byte13 = blocks[blocksOffset++] & 0xFF;
-        final long byte14 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte7 & 63) << 52) | (byte8 << 44) | (byte9 << 36) | (byte10 << 28) | (byte11 << 20) | (byte12 << 12) | (byte13 << 4) | (byte14 >>> 4);
-        final long byte15 = blocks[blocksOffset++] & 0xFF;
-        final long byte16 = blocks[blocksOffset++] & 0xFF;
-        final long byte17 = blocks[blocksOffset++] & 0xFF;
-        final long byte18 = blocks[blocksOffset++] & 0xFF;
-        final long byte19 = blocks[blocksOffset++] & 0xFF;
-        final long byte20 = blocks[blocksOffset++] & 0xFF;
-        final long byte21 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte14 & 15) << 54) | (byte15 << 46) | (byte16 << 38) | (byte17 << 30) | (byte18 << 22) | (byte19 << 14) | (byte20 << 6) | (byte21 >>> 2);
-        final long byte22 = blocks[blocksOffset++] & 0xFF;
-        final long byte23 = blocks[blocksOffset++] & 0xFF;
-        final long byte24 = blocks[blocksOffset++] & 0xFF;
-        final long byte25 = blocks[blocksOffset++] & 0xFF;
-        final long byte26 = blocks[blocksOffset++] & 0xFF;
-        final long byte27 = blocks[blocksOffset++] & 0xFF;
-        final long byte28 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte21 & 3) << 56) | (byte22 << 48) | (byte23 << 40) | (byte24 << 32) | (byte25 << 24) | (byte26 << 16) | (byte27 << 8) | byte28;
-        final long byte29 = blocks[blocksOffset++] & 0xFF;
-        final long byte30 = blocks[blocksOffset++] & 0xFF;
-        final long byte31 = blocks[blocksOffset++] & 0xFF;
-        final long byte32 = blocks[blocksOffset++] & 0xFF;
-        final long byte33 = blocks[blocksOffset++] & 0xFF;
-        final long byte34 = blocks[blocksOffset++] & 0xFF;
-        final long byte35 = blocks[blocksOffset++] & 0xFF;
-        final long byte36 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte29 << 50) | (byte30 << 42) | (byte31 << 34) | (byte32 << 26) | (byte33 << 18) | (byte34 << 10) | (byte35 << 2) | (byte36 >>> 6);
-        final long byte37 = blocks[blocksOffset++] & 0xFF;
-        final long byte38 = blocks[blocksOffset++] & 0xFF;
-        final long byte39 = blocks[blocksOffset++] & 0xFF;
-        final long byte40 = blocks[blocksOffset++] & 0xFF;
-        final long byte41 = blocks[blocksOffset++] & 0xFF;
-        final long byte42 = blocks[blocksOffset++] & 0xFF;
-        final long byte43 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte36 & 63) << 52) | (byte37 << 44) | (byte38 << 36) | (byte39 << 28) | (byte40 << 20) | (byte41 << 12) | (byte42 << 4) | (byte43 >>> 4);
-        final long byte44 = blocks[blocksOffset++] & 0xFF;
-        final long byte45 = blocks[blocksOffset++] & 0xFF;
-        final long byte46 = blocks[blocksOffset++] & 0xFF;
-        final long byte47 = blocks[blocksOffset++] & 0xFF;
-        final long byte48 = blocks[blocksOffset++] & 0xFF;
-        final long byte49 = blocks[blocksOffset++] & 0xFF;
-        final long byte50 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte43 & 15) << 54) | (byte44 << 46) | (byte45 << 38) | (byte46 << 30) | (byte47 << 22) | (byte48 << 14) | (byte49 << 6) | (byte50 >>> 2);
-        final long byte51 = blocks[blocksOffset++] & 0xFF;
-        final long byte52 = blocks[blocksOffset++] & 0xFF;
-        final long byte53 = blocks[blocksOffset++] & 0xFF;
-        final long byte54 = blocks[blocksOffset++] & 0xFF;
-        final long byte55 = blocks[blocksOffset++] & 0xFF;
-        final long byte56 = blocks[blocksOffset++] & 0xFF;
-        final long byte57 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte50 & 3) << 56) | (byte51 << 48) | (byte52 << 40) | (byte53 << 32) | (byte54 << 24) | (byte55 << 16) | (byte56 << 8) | byte57;
-        final long byte58 = blocks[blocksOffset++] & 0xFF;
-        final long byte59 = blocks[blocksOffset++] & 0xFF;
-        final long byte60 = blocks[blocksOffset++] & 0xFF;
-        final long byte61 = blocks[blocksOffset++] & 0xFF;
-        final long byte62 = blocks[blocksOffset++] & 0xFF;
-        final long byte63 = blocks[blocksOffset++] & 0xFF;
-        final long byte64 = blocks[blocksOffset++] & 0xFF;
-        final long byte65 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte58 << 50) | (byte59 << 42) | (byte60 << 34) | (byte61 << 26) | (byte62 << 18) | (byte63 << 10) | (byte64 << 2) | (byte65 >>> 6);
-        final long byte66 = blocks[blocksOffset++] & 0xFF;
-        final long byte67 = blocks[blocksOffset++] & 0xFF;
-        final long byte68 = blocks[blocksOffset++] & 0xFF;
-        final long byte69 = blocks[blocksOffset++] & 0xFF;
-        final long byte70 = blocks[blocksOffset++] & 0xFF;
-        final long byte71 = blocks[blocksOffset++] & 0xFF;
-        final long byte72 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte65 & 63) << 52) | (byte66 << 44) | (byte67 << 36) | (byte68 << 28) | (byte69 << 20) | (byte70 << 12) | (byte71 << 4) | (byte72 >>> 4);
-        final long byte73 = blocks[blocksOffset++] & 0xFF;
-        final long byte74 = blocks[blocksOffset++] & 0xFF;
-        final long byte75 = blocks[blocksOffset++] & 0xFF;
-        final long byte76 = blocks[blocksOffset++] & 0xFF;
-        final long byte77 = blocks[blocksOffset++] & 0xFF;
-        final long byte78 = blocks[blocksOffset++] & 0xFF;
-        final long byte79 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte72 & 15) << 54) | (byte73 << 46) | (byte74 << 38) | (byte75 << 30) | (byte76 << 22) | (byte77 << 14) | (byte78 << 6) | (byte79 >>> 2);
-        final long byte80 = blocks[blocksOffset++] & 0xFF;
-        final long byte81 = blocks[blocksOffset++] & 0xFF;
-        final long byte82 = blocks[blocksOffset++] & 0xFF;
-        final long byte83 = blocks[blocksOffset++] & 0xFF;
-        final long byte84 = blocks[blocksOffset++] & 0xFF;
-        final long byte85 = blocks[blocksOffset++] & 0xFF;
-        final long byte86 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte79 & 3) << 56) | (byte80 << 48) | (byte81 << 40) | (byte82 << 32) | (byte83 << 24) | (byte84 << 16) | (byte85 << 8) | byte86;
-        final long byte87 = blocks[blocksOffset++] & 0xFF;
-        final long byte88 = blocks[blocksOffset++] & 0xFF;
-        final long byte89 = blocks[blocksOffset++] & 0xFF;
-        final long byte90 = blocks[blocksOffset++] & 0xFF;
-        final long byte91 = blocks[blocksOffset++] & 0xFF;
-        final long byte92 = blocks[blocksOffset++] & 0xFF;
-        final long byte93 = blocks[blocksOffset++] & 0xFF;
-        final long byte94 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte87 << 50) | (byte88 << 42) | (byte89 << 34) | (byte90 << 26) | (byte91 << 18) | (byte92 << 10) | (byte93 << 2) | (byte94 >>> 6);
-        final long byte95 = blocks[blocksOffset++] & 0xFF;
-        final long byte96 = blocks[blocksOffset++] & 0xFF;
-        final long byte97 = blocks[blocksOffset++] & 0xFF;
-        final long byte98 = blocks[blocksOffset++] & 0xFF;
-        final long byte99 = blocks[blocksOffset++] & 0xFF;
-        final long byte100 = blocks[blocksOffset++] & 0xFF;
-        final long byte101 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte94 & 63) << 52) | (byte95 << 44) | (byte96 << 36) | (byte97 << 28) | (byte98 << 20) | (byte99 << 12) | (byte100 << 4) | (byte101 >>> 4);
-        final long byte102 = blocks[blocksOffset++] & 0xFF;
-        final long byte103 = blocks[blocksOffset++] & 0xFF;
-        final long byte104 = blocks[blocksOffset++] & 0xFF;
-        final long byte105 = blocks[blocksOffset++] & 0xFF;
-        final long byte106 = blocks[blocksOffset++] & 0xFF;
-        final long byte107 = blocks[blocksOffset++] & 0xFF;
-        final long byte108 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte101 & 15) << 54) | (byte102 << 46) | (byte103 << 38) | (byte104 << 30) | (byte105 << 22) | (byte106 << 14) | (byte107 << 6) | (byte108 >>> 2);
-        final long byte109 = blocks[blocksOffset++] & 0xFF;
-        final long byte110 = blocks[blocksOffset++] & 0xFF;
-        final long byte111 = blocks[blocksOffset++] & 0xFF;
-        final long byte112 = blocks[blocksOffset++] & 0xFF;
-        final long byte113 = blocks[blocksOffset++] & 0xFF;
-        final long byte114 = blocks[blocksOffset++] & 0xFF;
-        final long byte115 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte108 & 3) << 56) | (byte109 << 48) | (byte110 << 40) | (byte111 << 32) | (byte112 << 24) | (byte113 << 16) | (byte114 << 8) | byte115;
-        final long byte116 = blocks[blocksOffset++] & 0xFF;
-        final long byte117 = blocks[blocksOffset++] & 0xFF;
-        final long byte118 = blocks[blocksOffset++] & 0xFF;
-        final long byte119 = blocks[blocksOffset++] & 0xFF;
-        final long byte120 = blocks[blocksOffset++] & 0xFF;
-        final long byte121 = blocks[blocksOffset++] & 0xFF;
-        final long byte122 = blocks[blocksOffset++] & 0xFF;
-        final long byte123 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte116 << 50) | (byte117 << 42) | (byte118 << 34) | (byte119 << 26) | (byte120 << 18) | (byte121 << 10) | (byte122 << 2) | (byte123 >>> 6);
-        final long byte124 = blocks[blocksOffset++] & 0xFF;
-        final long byte125 = blocks[blocksOffset++] & 0xFF;
-        final long byte126 = blocks[blocksOffset++] & 0xFF;
-        final long byte127 = blocks[blocksOffset++] & 0xFF;
-        final long byte128 = blocks[blocksOffset++] & 0xFF;
-        final long byte129 = blocks[blocksOffset++] & 0xFF;
-        final long byte130 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte123 & 63) << 52) | (byte124 << 44) | (byte125 << 36) | (byte126 << 28) | (byte127 << 20) | (byte128 << 12) | (byte129 << 4) | (byte130 >>> 4);
-        final long byte131 = blocks[blocksOffset++] & 0xFF;
-        final long byte132 = blocks[blocksOffset++] & 0xFF;
-        final long byte133 = blocks[blocksOffset++] & 0xFF;
-        final long byte134 = blocks[blocksOffset++] & 0xFF;
-        final long byte135 = blocks[blocksOffset++] & 0xFF;
-        final long byte136 = blocks[blocksOffset++] & 0xFF;
-        final long byte137 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte130 & 15) << 54) | (byte131 << 46) | (byte132 << 38) | (byte133 << 30) | (byte134 << 22) | (byte135 << 14) | (byte136 << 6) | (byte137 >>> 2);
-        final long byte138 = blocks[blocksOffset++] & 0xFF;
-        final long byte139 = blocks[blocksOffset++] & 0xFF;
-        final long byte140 = blocks[blocksOffset++] & 0xFF;
-        final long byte141 = blocks[blocksOffset++] & 0xFF;
-        final long byte142 = blocks[blocksOffset++] & 0xFF;
-        final long byte143 = blocks[blocksOffset++] & 0xFF;
-        final long byte144 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte137 & 3) << 56) | (byte138 << 48) | (byte139 << 40) | (byte140 << 32) | (byte141 << 24) | (byte142 << 16) | (byte143 << 8) | byte144;
-        final long byte145 = blocks[blocksOffset++] & 0xFF;
-        final long byte146 = blocks[blocksOffset++] & 0xFF;
-        final long byte147 = blocks[blocksOffset++] & 0xFF;
-        final long byte148 = blocks[blocksOffset++] & 0xFF;
-        final long byte149 = blocks[blocksOffset++] & 0xFF;
-        final long byte150 = blocks[blocksOffset++] & 0xFF;
-        final long byte151 = blocks[blocksOffset++] & 0xFF;
-        final long byte152 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte145 << 50) | (byte146 << 42) | (byte147 << 34) | (byte148 << 26) | (byte149 << 18) | (byte150 << 10) | (byte151 << 2) | (byte152 >>> 6);
-        final long byte153 = blocks[blocksOffset++] & 0xFF;
-        final long byte154 = blocks[blocksOffset++] & 0xFF;
-        final long byte155 = blocks[blocksOffset++] & 0xFF;
-        final long byte156 = blocks[blocksOffset++] & 0xFF;
-        final long byte157 = blocks[blocksOffset++] & 0xFF;
-        final long byte158 = blocks[blocksOffset++] & 0xFF;
-        final long byte159 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte152 & 63) << 52) | (byte153 << 44) | (byte154 << 36) | (byte155 << 28) | (byte156 << 20) | (byte157 << 12) | (byte158 << 4) | (byte159 >>> 4);
-        final long byte160 = blocks[blocksOffset++] & 0xFF;
-        final long byte161 = blocks[blocksOffset++] & 0xFF;
-        final long byte162 = blocks[blocksOffset++] & 0xFF;
-        final long byte163 = blocks[blocksOffset++] & 0xFF;
-        final long byte164 = blocks[blocksOffset++] & 0xFF;
-        final long byte165 = blocks[blocksOffset++] & 0xFF;
-        final long byte166 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte159 & 15) << 54) | (byte160 << 46) | (byte161 << 38) | (byte162 << 30) | (byte163 << 22) | (byte164 << 14) | (byte165 << 6) | (byte166 >>> 2);
-        final long byte167 = blocks[blocksOffset++] & 0xFF;
-        final long byte168 = blocks[blocksOffset++] & 0xFF;
-        final long byte169 = blocks[blocksOffset++] & 0xFF;
-        final long byte170 = blocks[blocksOffset++] & 0xFF;
-        final long byte171 = blocks[blocksOffset++] & 0xFF;
-        final long byte172 = blocks[blocksOffset++] & 0xFF;
-        final long byte173 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte166 & 3) << 56) | (byte167 << 48) | (byte168 << 40) | (byte169 << 32) | (byte170 << 24) | (byte171 << 16) | (byte172 << 8) | byte173;
-        final long byte174 = blocks[blocksOffset++] & 0xFF;
-        final long byte175 = blocks[blocksOffset++] & 0xFF;
-        final long byte176 = blocks[blocksOffset++] & 0xFF;
-        final long byte177 = blocks[blocksOffset++] & 0xFF;
-        final long byte178 = blocks[blocksOffset++] & 0xFF;
-        final long byte179 = blocks[blocksOffset++] & 0xFF;
-        final long byte180 = blocks[blocksOffset++] & 0xFF;
-        final long byte181 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte174 << 50) | (byte175 << 42) | (byte176 << 34) | (byte177 << 26) | (byte178 << 18) | (byte179 << 10) | (byte180 << 2) | (byte181 >>> 6);
-        final long byte182 = blocks[blocksOffset++] & 0xFF;
-        final long byte183 = blocks[blocksOffset++] & 0xFF;
-        final long byte184 = blocks[blocksOffset++] & 0xFF;
-        final long byte185 = blocks[blocksOffset++] & 0xFF;
-        final long byte186 = blocks[blocksOffset++] & 0xFF;
-        final long byte187 = blocks[blocksOffset++] & 0xFF;
-        final long byte188 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte181 & 63) << 52) | (byte182 << 44) | (byte183 << 36) | (byte184 << 28) | (byte185 << 20) | (byte186 << 12) | (byte187 << 4) | (byte188 >>> 4);
-        final long byte189 = blocks[blocksOffset++] & 0xFF;
-        final long byte190 = blocks[blocksOffset++] & 0xFF;
-        final long byte191 = blocks[blocksOffset++] & 0xFF;
-        final long byte192 = blocks[blocksOffset++] & 0xFF;
-        final long byte193 = blocks[blocksOffset++] & 0xFF;
-        final long byte194 = blocks[blocksOffset++] & 0xFF;
-        final long byte195 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte188 & 15) << 54) | (byte189 << 46) | (byte190 << 38) | (byte191 << 30) | (byte192 << 22) | (byte193 << 14) | (byte194 << 6) | (byte195 >>> 2);
-        final long byte196 = blocks[blocksOffset++] & 0xFF;
-        final long byte197 = blocks[blocksOffset++] & 0xFF;
-        final long byte198 = blocks[blocksOffset++] & 0xFF;
-        final long byte199 = blocks[blocksOffset++] & 0xFF;
-        final long byte200 = blocks[blocksOffset++] & 0xFF;
-        final long byte201 = blocks[blocksOffset++] & 0xFF;
-        final long byte202 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte195 & 3) << 56) | (byte196 << 48) | (byte197 << 40) | (byte198 << 32) | (byte199 << 24) | (byte200 << 16) | (byte201 << 8) | byte202;
-        final long byte203 = blocks[blocksOffset++] & 0xFF;
-        final long byte204 = blocks[blocksOffset++] & 0xFF;
-        final long byte205 = blocks[blocksOffset++] & 0xFF;
-        final long byte206 = blocks[blocksOffset++] & 0xFF;
-        final long byte207 = blocks[blocksOffset++] & 0xFF;
-        final long byte208 = blocks[blocksOffset++] & 0xFF;
-        final long byte209 = blocks[blocksOffset++] & 0xFF;
-        final long byte210 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = (byte203 << 50) | (byte204 << 42) | (byte205 << 34) | (byte206 << 26) | (byte207 << 18) | (byte208 << 10) | (byte209 << 2) | (byte210 >>> 6);
-        final long byte211 = blocks[blocksOffset++] & 0xFF;
-        final long byte212 = blocks[blocksOffset++] & 0xFF;
-        final long byte213 = blocks[blocksOffset++] & 0xFF;
-        final long byte214 = blocks[blocksOffset++] & 0xFF;
-        final long byte215 = blocks[blocksOffset++] & 0xFF;
-        final long byte216 = blocks[blocksOffset++] & 0xFF;
-        final long byte217 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte210 & 63) << 52) | (byte211 << 44) | (byte212 << 36) | (byte213 << 28) | (byte214 << 20) | (byte215 << 12) | (byte216 << 4) | (byte217 >>> 4);
-        final long byte218 = blocks[blocksOffset++] & 0xFF;
-        final long byte219 = blocks[blocksOffset++] & 0xFF;
-        final long byte220 = blocks[blocksOffset++] & 0xFF;
-        final long byte221 = blocks[blocksOffset++] & 0xFF;
-        final long byte222 = blocks[blocksOffset++] & 0xFF;
-        final long byte223 = blocks[blocksOffset++] & 0xFF;
-        final long byte224 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte217 & 15) << 54) | (byte218 << 46) | (byte219 << 38) | (byte220 << 30) | (byte221 << 22) | (byte222 << 14) | (byte223 << 6) | (byte224 >>> 2);
-        final long byte225 = blocks[blocksOffset++] & 0xFF;
-        final long byte226 = blocks[blocksOffset++] & 0xFF;
-        final long byte227 = blocks[blocksOffset++] & 0xFF;
-        final long byte228 = blocks[blocksOffset++] & 0xFF;
-        final long byte229 = blocks[blocksOffset++] & 0xFF;
-        final long byte230 = blocks[blocksOffset++] & 0xFF;
-        final long byte231 = blocks[blocksOffset++] & 0xFF;
-        values[valuesOffset++] = ((byte224 & 3) << 56) | (byte225 << 48) | (byte226 << 40) | (byte227 << 32) | (byte228 << 24) | (byte229 << 16) | (byte230 << 8) | byte231;
-      }
-    }
-
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset] & 0xffffffffL) >>> 52);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset] & 0xffffffffL) >>> 46);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset] & 0xffffffffL) >>> 40);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset] & 0xffffffffL) >>> 34);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset] & 0xffffffffL) >>> 28);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset] & 0xffffffffL) >>> 22);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset] & 0xffffffffL) >>> 16);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset] & 0xffffffffL) >>> 10);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset] & 0xffffffffL) >>> 4);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 56);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset] & 0xffffffffL) >>> 50);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset] & 0xffffffffL) >>> 44);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset] & 0xffffffffL) >>> 38);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset] & 0xffffffffL) >>> 32);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset] & 0xffffffffL) >>> 26);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset] & 0xffffffffL) >>> 20);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset] & 0xffffffffL) >>> 14);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset] & 0xffffffffL) >>> 8);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset] & 0xffffffffL) >>> 54);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset] & 0xffffffffL) >>> 48);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset] & 0xffffffffL) >>> 42);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset] & 0xffffffffL) >>> 36);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset] & 0xffffffffL) >>> 30);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset] & 0xffffffffL) >>> 24);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset] & 0xffffffffL) >>> 18);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset] & 0xffffffffL) >>> 12);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset] & 0xffffffffL) >>> 6);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 58) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 6) | (values[valuesOffset] >>> 52);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 12) | (values[valuesOffset] >>> 46);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 18) | (values[valuesOffset] >>> 40);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 24) | (values[valuesOffset] >>> 34);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 30) | (values[valuesOffset] >>> 28);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 36) | (values[valuesOffset] >>> 22);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 42) | (values[valuesOffset] >>> 16);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 48) | (values[valuesOffset] >>> 10);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 54) | (values[valuesOffset] >>> 4);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 60) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 56);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 8) | (values[valuesOffset] >>> 50);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 14) | (values[valuesOffset] >>> 44);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 20) | (values[valuesOffset] >>> 38);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 26) | (values[valuesOffset] >>> 32);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 32) | (values[valuesOffset] >>> 26);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 38) | (values[valuesOffset] >>> 20);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 44) | (values[valuesOffset] >>> 14);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 50) | (values[valuesOffset] >>> 8);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 56) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 4) | (values[valuesOffset] >>> 54);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 10) | (values[valuesOffset] >>> 48);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 16) | (values[valuesOffset] >>> 42);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 22) | (values[valuesOffset] >>> 36);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 28) | (values[valuesOffset] >>> 30);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 34) | (values[valuesOffset] >>> 24);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 40) | (values[valuesOffset] >>> 18);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 46) | (values[valuesOffset] >>> 12);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 52) | (values[valuesOffset] >>> 6);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 58) | values[valuesOffset++];
-      }
-    }
-
-}
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock10.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock10.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPackedSingleBlock10.java	(copie de travail)
@@ -22,15 +22,10 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPackedSingleBlock10 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 1;
-     }
+final class BulkOperationPackedSingleBlock10 extends BulkOperationPackedSingleBlock {
 
-    @Override
-    public int valueCount() {
-      return 6;
+    public BulkOperationPackedSingleBlock10() {
+      super(10);
     }
 
     @Override
@@ -107,22 +102,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] & 0xffffffffL) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 50);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = values[valuesOffset++] | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 50);
-      }
-    }
-
 }
Index: lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked3.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked3.java	(révision 1378196)
+++ lucene/core/src/java/org/apache/lucene/util/packed/BulkOperationPacked3.java	(copie de travail)
@@ -22,15 +22,12 @@
 /**
  * Efficient sequential read/write of packed integers.
  */
-final class BulkOperationPacked3 extends BulkOperation {
-    @Override
-    public int blockCount() {
-      return 3;
-    }
+final class BulkOperationPacked3 extends BulkOperationPacked {
 
-    @Override
-    public int valueCount() {
-      return 64;
+    public BulkOperationPacked3() {
+      super(3);
+      assert blockCount() == 3;
+      assert valueCount() == 64;
     }
 
     @Override
@@ -375,26 +372,4 @@
       }
     }
 
-    @Override
-    public void encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 61) | ((values[valuesOffset++] & 0xffffffffL) << 58) | ((values[valuesOffset++] & 0xffffffffL) << 55) | ((values[valuesOffset++] & 0xffffffffL) << 52) | ((values[valuesOffset++] & 0xffffffffL) << 49) | ((values[valuesOffset++] & 0xffffffffL) << 46) | ((values[valuesOffset++] & 0xffffffffL) << 43) | ((values[valuesOffset++] & 0xffffffffL) << 40) | ((values[valuesOffset++] & 0xffffffffL) << 37) | ((values[valuesOffset++] & 0xffffffffL) << 34) | ((values[valuesOffset++] & 0xffffffffL) << 31) | ((values[valuesOffset++] & 0xffffffffL) << 28) | ((values[valuesOffset++] & 0xffffffffL) << 25) | ((values[valuesOffset++] & 0xffffffffL) << 22) | ((values[valuesOffset++] & 0xffffffffL) << 19) | ((values[valuesOffset++] & 0xffffffffL) << 16) | ((values[valuesOffset++] & 0xffffffffL) << 13) | ((values[valuesOffset++] & 0xffffffffL) << 10) | ((values[valuesOffset++] & 0xffffffffL) << 7) | ((values[valuesOffset++] & 0xffffffffL) << 4) | ((values[valuesOffset++] & 0xffffffffL) << 1) | ((values[valuesOffset] & 0xffffffffL) >>> 2);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 62) | ((values[valuesOffset++] & 0xffffffffL) << 59) | ((values[valuesOffset++] & 0xffffffffL) << 56) | ((values[valuesOffset++] & 0xffffffffL) << 53) | ((values[valuesOffset++] & 0xffffffffL) << 50) | ((values[valuesOffset++] & 0xffffffffL) << 47) | ((values[valuesOffset++] & 0xffffffffL) << 44) | ((values[valuesOffset++] & 0xffffffffL) << 41) | ((values[valuesOffset++] & 0xffffffffL) << 38) | ((values[valuesOffset++] & 0xffffffffL) << 35) | ((values[valuesOffset++] & 0xffffffffL) << 32) | ((values[valuesOffset++] & 0xffffffffL) << 29) | ((values[valuesOffset++] & 0xffffffffL) << 26) | ((values[valuesOffset++] & 0xffffffffL) << 23) | ((values[valuesOffset++] & 0xffffffffL) << 20) | ((values[valuesOffset++] & 0xffffffffL) << 17) | ((values[valuesOffset++] & 0xffffffffL) << 14) | ((values[valuesOffset++] & 0xffffffffL) << 11) | ((values[valuesOffset++] & 0xffffffffL) << 8) | ((values[valuesOffset++] & 0xffffffffL) << 5) | ((values[valuesOffset++] & 0xffffffffL) << 2) | ((values[valuesOffset] & 0xffffffffL) >>> 1);
-        blocks[blocksOffset++] = ((values[valuesOffset++] & 0xffffffffL) << 63) | ((values[valuesOffset++] & 0xffffffffL) << 60) | ((values[valuesOffset++] & 0xffffffffL) << 57) | ((values[valuesOffset++] & 0xffffffffL) << 54) | ((values[valuesOffset++] & 0xffffffffL) << 51) | ((values[valuesOffset++] & 0xffffffffL) << 48) | ((values[valuesOffset++] & 0xffffffffL) << 45) | ((values[valuesOffset++] & 0xffffffffL) << 42) | ((values[valuesOffset++] & 0xffffffffL) << 39) | ((values[valuesOffset++] & 0xffffffffL) << 36) | ((values[valuesOffset++] & 0xffffffffL) << 33) | ((values[valuesOffset++] & 0xffffffffL) << 30) | ((values[valuesOffset++] & 0xffffffffL) << 27) | ((values[valuesOffset++] & 0xffffffffL) << 24) | ((values[valuesOffset++] & 0xffffffffL) << 21) | ((values[valuesOffset++] & 0xffffffffL) << 18) | ((values[valuesOffset++] & 0xffffffffL) << 15) | ((values[valuesOffset++] & 0xffffffffL) << 12) | ((values[valuesOffset++] & 0xffffffffL) << 9) | ((values[valuesOffset++] & 0xffffffffL) << 6) | ((values[valuesOffset++] & 0xffffffffL) << 3) | (values[valuesOffset++] & 0xffffffffL);
-      }
-    }
-
-    @Override
-    public void encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) {
-      assert blocksOffset + iterations * blockCount() <= blocks.length;
-      assert valuesOffset + iterations * valueCount() <= values.length;
-      for (int i = 0; i < iterations; ++i) {
-        blocks[blocksOffset++] = (values[valuesOffset++] << 61) | (values[valuesOffset++] << 58) | (values[valuesOffset++] << 55) | (values[valuesOffset++] << 52) | (values[valuesOffset++] << 49) | (values[valuesOffset++] << 46) | (values[valuesOffset++] << 43) | (values[valuesOffset++] << 40) | (values[valuesOffset++] << 37) | (values[valuesOffset++] << 34) | (values[valuesOffset++] << 31) | (values[valuesOffset++] << 28) | (values[valuesOffset++] << 25) | (values[valuesOffset++] << 22) | (values[valuesOffset++] << 19) | (values[valuesOffset++] << 16) | (values[valuesOffset++] << 13) | (values[valuesOffset++] << 10) | (values[valuesOffset++] << 7) | (values[valuesOffset++] << 4) | (values[valuesOffset++] << 1) | (values[valuesOffset] >>> 2);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 62) | (values[valuesOffset++] << 59) | (values[valuesOffset++] << 56) | (values[valuesOffset++] << 53) | (values[valuesOffset++] << 50) | (values[valuesOffset++] << 47) | (values[valuesOffset++] << 44) | (values[valuesOffset++] << 41) | (values[valuesOffset++] << 38) | (values[valuesOffset++] << 35) | (values[valuesOffset++] << 32) | (values[valuesOffset++] << 29) | (values[valuesOffset++] << 26) | (values[valuesOffset++] << 23) | (values[valuesOffset++] << 20) | (values[valuesOffset++] << 17) | (values[valuesOffset++] << 14) | (values[valuesOffset++] << 11) | (values[valuesOffset++] << 8) | (values[valuesOffset++] << 5) | (values[valuesOffset++] << 2) | (values[valuesOffset] >>> 1);
-        blocks[blocksOffset++] = (values[valuesOffset++] << 63) | (values[valuesOffset++] << 60) | (values[valuesOffset++] << 57) | (values[valuesOffset++] << 54) | (values[valuesOffset++] << 51) | (values[valuesOffset++] << 48) | (values[valuesOffset++] << 45) | (values[valuesOffset++] << 42) | (values[valuesOffset++] << 39) | (values[valuesOffset++] << 36) | (values[valuesOffset++] << 33) | (values[valuesOffset++] << 30) | (values[valuesOffset++] << 27) | (values[valuesOffset++] << 24) | (values[valuesOffset++] << 21) | (values[valuesOffset++] << 18) | (values[valuesOffset++] << 15) | (values[valuesOffset++] << 12) | (values[valuesOffset++] << 9) | (values[valuesOffset++] << 6) | (values[valuesOffset++] << 3) | values[valuesOffset++];
-      }
-    }
-
 }
