private static final synchronized long[] sha(long hh0, long hh1, long hh2,
private static synchronized final long[] sha(long hh0, long hh1, long hh2,
  private static final synchronized long[] sha(long hh0, long hh1, long hh2,                                               long hh3, long hh4, long hh5,                                               long hh6, long hh7, byte[] in,                                               int offset)  {    long A = hh0;    long B = hh1;    long C = hh2;    long D = hh3;    long E = hh4;    long F = hh5;    long G = hh6;    long H = hh7;    long T, T2;    int r;    for (r = 0; r < 16; r++)      {        w[r] = (long) in[offset++] << 56 | ((long) in[offset++] & 0xFF) << 48               | ((long) in[offset++] & 0xFF) << 40               | ((long) in[offset++] & 0xFF) << 32               | ((long) in[offset++] & 0xFF) << 24               | ((long) in[offset++] & 0xFF) << 16               | ((long) in[offset++] & 0xFF) << 8               | ((long) in[offset++] & 0xFF);      }    for (r = 16; r < 80; r++)      {        T = w[r - 2];        T2 = w[r - 15];        w[r] = (((T >>> 19) | (T << 45)) ^ ((T >>> 61) | (T << 3)) ^ (T >>> 6))               + w[r - 7]               + (((T2 >>> 1) | (T2 << 63)) ^ ((T2 >>> 8) | (T2 << 56)) ^ (T2 >>> 7))               + w[r - 16];      }    for (r = 0; r < 80; r++)      {        T = H            + (((E >>> 14) | (E << 50)) ^ ((E >>> 18) | (E << 46)) ^ ((E >>> 41) | (E << 23)))            + ((E & F) ^ ((~E) & G)) + k[r] + w[r];        T2 = (((A >>> 28) | (A << 36)) ^ ((A >>> 34) | (A << 30)) ^ ((A >>> 39) | (A << 25)))             + ((A & B) ^ (A & C) ^ (B & C));        H = G;        G = F;        F = E;        E = D + T;        D = C;        C = B;        B = A;        A = T + T2;      }    return new long[] { hh0 + A, hh1 + B, hh2 + C, hh3 + D, hh4 + E, hh5 + F,                       hh6 + G, hh7 + H };  }