private <T> long cityHashLen33To64(Access<T> access, T in, long off, long len) {
long mul = mul(len);
long a = fetch64(access, in, off) * K2;
long b = fetch64(access, in, off + 8L);
long c = fetch64(access, in, off + len - 24L);
long d = fetch64(access, in, off + len - 32L);
long e = fetch64(access, in, off + 16L) * K2;
long f = fetch64(access, in, off + 24L) * 9L;
long g = fetch64(access, in, off + len - 8L);
long h = fetch64(access, in, off + len - 16L) * mul;
long u = rotateRight(a + g, 43) + (rotateRight(b, 30) + c) * 9L;
long v = ((a + g) ^ d) + f + 1L;
long w = reverseBytes((u + v) * mul) + h;
long x = rotateRight(e + f, 42) + c;
long y = (reverseBytes((v + w) * mul) + g) * mul;
long z = e + f + c;
a = reverseBytes((x + z) * mul + y) + b;
b = shiftMix((z + a) * mul + d + h) * mul;
return b + x;
}