R2
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
R2(A, B, C, D, E, F, G, H, 0x9d8a7a87, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0x3b14f50f, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0x7629ea1e, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xec53d43c, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xd8a7a879, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0xb14f50f3, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0x629ea1e7, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0xc53d43ce, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x8a7a879d, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x14f50f3b, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x29ea1e76, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x53d43cec, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0xa7a879d8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0x4f50f3b1, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0x9ea1e762, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0x3d43cec5, W15, W15 ^ W03);
R2(A, B, C, D, E, F, G, H, 0x7a879d8a, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0xf50f3b14, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0xea1e7629, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xd43cec53, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xa879d8a7, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0x50f3b14f, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0xa1e7629e, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0x43cec53d, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x879d8a7a, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x0f3b14f5, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x1e7629ea, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x3cec53d4, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0x79d8a7a8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0xf3b14f50, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0xe7629ea1, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0xcec53d43, W15, W15 ^ W03);
R2(A, B, C, D, E, F, G, H, 0x9d8a7a87, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0x3b14f50f, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0x7629ea1e, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xec53d43c, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xd8a7a879, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0xb14f50f3, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0x629ea1e7, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0xc53d43ce, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x8a7a879d, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x14f50f3b, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x29ea1e76, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x53d43cec, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0xa7a879d8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0x4f50f3b1, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0x9ea1e762, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0x3d43cec5, W15, W15 ^ W03);
R2 = 2.048819892795278657810231591630928516206E4L,
+ R2) * z
uint16 R2[(len+1)/2];
Decode(R2,S,M2,(len+1)/2);
r += bottomt[i/2]*R2[i/2];
*out++ = R2[i/2];
uint16 R2[(len+1)/2];
R2[i/2] = r;
R2[i/2] = R[i];
Encode(out,R2,M2,(len+1)/2);
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
uint16_t R2[(len + 1) / 2], M2[(len + 1) / 2];
R2[i / 2] = r;
R2[i / 2] = R[i];
Encode(out, R2, M2, (len + 1) / 2);
uint16_t R2[(len + 1) / 2], M2[(len + 1) / 2], bottomr[len / 2];
Decode(R2, S, M2, (len + 1) / 2);
r += bottomt[i / 2] * R2[i / 2];
if (i < len) *out++ = R2[i / 2];