RIPEMD160 shape-up Intel assembler companion. Cycle counter benchmarks
authorAndy Polyakov <appro@openssl.org>
Sat, 28 Aug 1999 13:07:51 +0000 (13:07 +0000)
committerAndy Polyakov <appro@openssl.org>
Sat, 28 Aug 1999 13:07:51 +0000 (13:07 +0000)
went down from 1050 to 921 cycles on Pentium II. I haven't checked the
figures on Pentium yet.

crypto/ripemd/asm/rips.cpp
crypto/ripemd/asm/rm-win32.asm
crypto/ripemd/asm/rmd-586.pl

index 321a98443e5ed0346bbebd61a3f59591503cd3c4..f7a13677a921c316e1d8d160cedd136ac95b8748 100644 (file)
@@ -34,6 +34,8 @@ void GetTSC(unsigned long& tsc)
 #include <stdlib.h>
 #include <openssl/ripemd.h>
 
+#define ripemd160_block_x86 ripemd160_block_asm_host_order
+
 extern "C" {
 void ripemd160_block_x86(RIPEMD160_CTX *ctx, unsigned char *buffer,int num);
 }
@@ -55,8 +57,10 @@ void main(int argc,char *argv[])
        if (num == 0) num=16;
        if (num > 250) num=16;
        numm=num+2;
+#if 0
        num*=64;
        numm*=64;
+#endif
 
        for (j=0; j<6; j++)
                {
@@ -71,7 +75,7 @@ void main(int argc,char *argv[])
                        GetTSC(e2);
                        ripemd160_block_x86(&ctx,buffer,num);
                        }
-               printf("ripemd160 (%d bytes) %d %d (%.2f)\n",num,
+               printf("ripemd160 (%d bytes) %d %d (%.2f)\n",num*64,
                        e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
                }
        }
index bd38791c13b1678e2651e1fcd8b2c8057431aa53..f07d517857bbefb99821c674d2798956b85b5ea7 100644 (file)
         .386
 .model FLAT
 _TEXT  SEGMENT
-PUBLIC _ripemd160_block_x86
+PUBLIC _ripemd160_block_asm_host_order
 
-_ripemd160_block_x86 PROC NEAR
+_ripemd160_block_asm_host_order PROC NEAR
+       mov     edx,            DWORD PTR 4[esp]
+       mov     eax,            DWORD PTR 8[esp]
        push    esi
-       mov     ecx,            DWORD PTR 16[esp]
+       mov     ecx,            DWORD PTR [edx]
        push    edi
-       mov     esi,            DWORD PTR 16[esp]
+       mov     esi,            DWORD PTR 4[edx]
        push    ebp
-       add     ecx,            esi
+       mov     edi,            DWORD PTR 8[edx]
        push    ebx
-       sub     ecx,            64
-       sub     esp,            88
-       mov     DWORD PTR [esp],ecx
-       mov     edi,            DWORD PTR 108[esp]
+       sub     esp,            108
 L000start:
        ; 
-       mov     eax,            DWORD PTR [esi]
-       mov     ebx,            DWORD PTR 4[esi]
-       mov     DWORD PTR 4[esp],eax
+       mov     ebx,            DWORD PTR [eax]
+       mov     ebp,            DWORD PTR 4[eax]
+       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR 4[esp],ebp
+       mov     ebx,            DWORD PTR 8[eax]
+       mov     ebp,            DWORD PTR 12[eax]
        mov     DWORD PTR 8[esp],ebx
-       mov     eax,            DWORD PTR 8[esi]
-       mov     ebx,            DWORD PTR 12[esi]
-       mov     DWORD PTR 12[esp],eax
+       mov     DWORD PTR 12[esp],ebp
+       mov     ebx,            DWORD PTR 16[eax]
+       mov     ebp,            DWORD PTR 20[eax]
        mov     DWORD PTR 16[esp],ebx
-       mov     eax,            DWORD PTR 16[esi]
-       mov     ebx,            DWORD PTR 20[esi]
-       mov     DWORD PTR 20[esp],eax
+       mov     DWORD PTR 20[esp],ebp
+       mov     ebx,            DWORD PTR 24[eax]
+       mov     ebp,            DWORD PTR 28[eax]
        mov     DWORD PTR 24[esp],ebx
-       mov     eax,            DWORD PTR 24[esi]
-       mov     ebx,            DWORD PTR 28[esi]
-       mov     DWORD PTR 28[esp],eax
+       mov     DWORD PTR 28[esp],ebp
+       mov     ebx,            DWORD PTR 32[eax]
+       mov     ebp,            DWORD PTR 36[eax]
        mov     DWORD PTR 32[esp],ebx
-       mov     eax,            DWORD PTR 32[esi]
-       mov     ebx,            DWORD PTR 36[esi]
-       mov     DWORD PTR 36[esp],eax
+       mov     DWORD PTR 36[esp],ebp
+       mov     ebx,            DWORD PTR 40[eax]
+       mov     ebp,            DWORD PTR 44[eax]
        mov     DWORD PTR 40[esp],ebx
-       mov     eax,            DWORD PTR 40[esi]
-       mov     ebx,            DWORD PTR 44[esi]
-       mov     DWORD PTR 44[esp],eax
+       mov     DWORD PTR 44[esp],ebp
+       mov     ebx,            DWORD PTR 48[eax]
+       mov     ebp,            DWORD PTR 52[eax]
        mov     DWORD PTR 48[esp],ebx
-       mov     eax,            DWORD PTR 48[esi]
-       mov     ebx,            DWORD PTR 52[esi]
-       mov     DWORD PTR 52[esp],eax
+       mov     DWORD PTR 52[esp],ebp
+       mov     ebx,            DWORD PTR 56[eax]
+       mov     ebp,            DWORD PTR 60[eax]
        mov     DWORD PTR 56[esp],ebx
-       mov     eax,            DWORD PTR 56[esi]
-       mov     ebx,            DWORD PTR 60[esi]
-       mov     DWORD PTR 60[esp],eax
-       mov     DWORD PTR 64[esp],ebx
-       add     esi,            64
-       mov     eax,            DWORD PTR [edi]
-       mov     DWORD PTR 112[esp],esi
-       mov     ebx,            DWORD PTR 4[edi]
-       mov     ecx,            DWORD PTR 8[edi]
-       mov     edx,            DWORD PTR 12[edi]
-       mov     ebp,            DWORD PTR 16[edi]
+       mov     DWORD PTR 60[esp],ebp
+       mov     eax,            edi
+       mov     ebx,            DWORD PTR 12[edx]
+       mov     ebp,            DWORD PTR 16[edx]
        ; 0
-       mov     esi,            ecx
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 4[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            11
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR [esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 1
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 8[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            14
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 4[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            14
+       add     ebp,            ebx
        ; 2
-       mov     edi,            DWORD PTR 12[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            15
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 8[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            15
+       add     ebx,            edi
        ; 3
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 16[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 12[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
        rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 4
-       mov     edi,            DWORD PTR 20[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            5
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 16[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            5
+       add     esi,            ecx
        ; 5
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 24[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 20[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 6
-       mov     edi,            DWORD PTR 28[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            7
+       mov     edx,            DWORD PTR 24[esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            7
+       add     ebp,            ebx
        ; 7
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 32[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 28[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 8
-       mov     edi,            DWORD PTR 36[esp]
-       xor     esi,            edx
-       add     ecx,            edi
+       mov     edx,            DWORD PTR 32[esp]
+       xor     eax,            ebx
+       add     edi,            edx
        rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            11
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            11
+       add     edi,            esi
        ; 9
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 40[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     edx,            10
-       add     ebx,            edi
-       xor     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 36[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       mov     eax,            edi
+       rol     ebx,            10
+       add     esi,            edx
+       xor     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 10
-       mov     edi,            DWORD PTR 44[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 40[esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 11
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 48[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            15
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 44[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 12
-       mov     edi,            DWORD PTR 52[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            6
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 48[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            6
+       add     ebx,            edi
        ; 13
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 56[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 52[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
        rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            7
-       add     ecx,            ebx
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            7
+       add     edi,            esi
        ; 14
-       mov     edi,            DWORD PTR 60[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            9
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 56[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            9
+       add     esi,            ecx
        ; 15
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 64[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            -1
-       rol     ecx,            10
-       add     eax,            edi
-       mov     edi,            DWORD PTR 32[esp]
-       rol     eax,            8
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 60[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            -1
+       rol     edi,            10
+       add     ecx,            edx
+       mov     edx,            DWORD PTR 28[esp]
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 16
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            7
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            7
+       add     ebp,            ebx
        ; 17
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 56[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            6
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 52[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            6
+       add     ebx,            edi
        ; 18
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            8
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1518500249[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            8
+       add     edi,            esi
        ; 19
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 44[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            13
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 40[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            13
+       add     esi,            ecx
        ; 20
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            11
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 21
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 64[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 60[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 22
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            7
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            7
+       add     ebx,            edi
        ; 23
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      esi,            edi
-       mov     edi,            DWORD PTR 52[esp]
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 48[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[esi*1+ecx]
-       mov     esi,            -1
-       rol     ecx,            15
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1518500249[eax*1+edi]
+       mov     eax,            -1
+       rol     edi,            15
+       add     edi,            esi
        ; 24
-       add     ebx,            edi
-       mov     edi,            edx
-       sub     esi,            ecx
-       and     edi,            ecx
-       and     esi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[edi*1+ebx]
-       mov     edi,            -1
-       rol     ebx,            7
-       add     ebx,            eax
+       add     esi,            edx
+       mov     edx,            ebx
+       sub     eax,            edi
+       and     edx,            edi
+       and     eax,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[edx*1+esi]
+       mov     edx,            -1
+       rol     esi,            7
+       add     esi,            ecx
        ; 25
-       add     eax,            esi
-       mov     esi,            ecx
-       sub     edi,            ebx
-       and     esi,            ebx
-       and     edi,            edx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 40[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[esi*1+eax]
-       mov     esi,            -1
-       rol     eax,            12
-       add     eax,            ebp
+       add     ecx,            eax
+       mov     eax,            edi
+       sub     edx,            esi
+       and     eax,            esi
+       and     edx,            ebx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 36[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[eax*1+ecx]
+       mov     eax,            -1
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 26
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            15
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 27
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 12[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            9
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 8[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            9
+       add     ebx,            edi
        ; 28
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            11
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1518500249[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            11
+       add     edi,            esi
        ; 29
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 48[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            7
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 44[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            7
+       add     esi,            ecx
        ; 30
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            13
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 31
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
-       sub     edi,            eax
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
+       sub     edx,            ecx
        rol     ebp,            12
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 32
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            11
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            11
+       add     ebx,            edi
        ; 33
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            13
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1859775393[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            13
+       add     edi,            esi
        ; 34
-       mov     esi,            DWORD PTR 60[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            6
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            6
+       add     esi,            ecx
        ; 35
-       mov     edi,            DWORD PTR 20[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            7
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 16[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            7
+       add     ecx,            ebp
        ; 36
-       mov     esi,            DWORD PTR 40[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            14
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 37
-       mov     edi,            DWORD PTR 64[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[esi*1+edx]
-       sub     edi,            ebp
-       rol     edx,            9
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 60[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
+       sub     edx,            ebp
+       rol     ebx,            9
+       add     ebx,            edi
        ; 38
-       mov     esi,            DWORD PTR 36[esp]
-       or      edi,            edx
-       add     ecx,            esi
-       xor     edi,            eax
-       mov     esi,            -1
+       mov     eax,            DWORD PTR 32[esp]
+       or      edx,            ebx
+       add     edi,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[edi*1+ecx]
-       sub     esi,            edx
-       rol     ecx,            13
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1859775393[edx*1+edi]
+       sub     eax,            ebx
+       rol     edi,            13
+       add     edi,            esi
        ; 39
-       mov     edi,            DWORD PTR 8[esp]
-       or      esi,            ecx
-       add     ebx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[esi*1+ebx]
-       sub     edi,            ecx
-       rol     ebx,            15
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 4[esp]
+       or      eax,            edi
+       add     esi,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[eax*1+esi]
+       sub     edx,            edi
+       rol     esi,            15
+       add     esi,            ecx
        ; 40
-       mov     esi,            DWORD PTR 12[esp]
-       or      edi,            ebx
-       add     eax,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[edi*1+eax]
-       sub     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 8[esp]
+       or      edx,            esi
+       add     ecx,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[edx*1+ecx]
+       sub     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 41
-       mov     edi,            DWORD PTR 32[esp]
-       or      esi,            eax
-       add     ebp,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[esi*1+ebp]
-       sub     edi,            eax
-       rol     ebp,            8
+       mov     edx,            DWORD PTR 28[esp]
+       or      eax,            ecx
        add     ebp,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[eax*1+ebp]
+       sub     edx,            ecx
+       rol     ebp,            8
+       add     ebp,            ebx
        ; 42
-       mov     esi,            DWORD PTR 4[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            13
-       add     edx,            ecx
+       mov     eax,            DWORD PTR [esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            13
+       add     ebx,            edi
        ; 43
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            6
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1859775393[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            6
+       add     edi,            esi
        ; 44
-       mov     esi,            DWORD PTR 56[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            5
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            5
+       add     esi,            ecx
        ; 45
-       mov     edi,            DWORD PTR 48[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            12
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 44[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 46
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            7
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 47
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[esi*1+edx]
-       mov     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
+       mov     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 48
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 49
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            12
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            12
+       add     esi,            ecx
        ; 50
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            14
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 51
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 44[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 40[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            15
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 52
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 53
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            15
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            15
+       add     edi,            esi
        ; 54
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            9
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            9
+       add     esi,            ecx
        ; 55
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 56
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 57
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 58
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            5
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            5
+       add     edi,            esi
        ; 59
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 64[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            6
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 60[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            6
+       add     esi,            ecx
        ; 60
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 61
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            6
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 62
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 63
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 12[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 8[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       sub     edi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       sub     edx,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 64
-       mov     esi,            DWORD PTR 20[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            9
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            9
+       add     esi,            ecx
        ; 65
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            15
-       add     eax,            ebp
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            15
+       add     ecx,            ebp
        ; 66
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            5
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 67
-       mov     edi,            DWORD PTR 40[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            11
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 36[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            11
+       add     ebx,            edi
        ; 68
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            6
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2840853838[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            6
+       add     edi,            esi
        ; 69
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[esi*1+ebx]
-       sub     edi,            edx
-       rol     ebx,            8
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[eax*1+esi]
+       sub     edx,            ebx
+       rol     esi,            8
+       add     esi,            ecx
        ; 70
-       mov     esi,            DWORD PTR 12[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            13
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 8[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 71
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            12
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            12
+       add     ebp,            ebx
        ; 72
-       mov     esi,            DWORD PTR 60[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 56[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 73
-       mov     edi,            DWORD PTR 8[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 4[esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2840853838[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 74
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 75
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 76
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 77
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            8
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            8
+       add     ebx,            edi
        ; 78
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            5
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2840853838[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            5
+       add     edi,            esi
        ; 79
-       mov     edi,            DWORD PTR 56[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 108[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[esi*1+ebx]
-       mov     DWORD PTR 68[esp],eax
-       rol     ebx,            6
-       add     ebx,            eax
-       mov     eax,            DWORD PTR [edi]
-       mov     DWORD PTR 72[esp],ebx
-       mov     DWORD PTR 76[esp],ecx
-       mov     ebx,            DWORD PTR 4[edi]
-       mov     DWORD PTR 80[esp],edx
-       mov     ecx,            DWORD PTR 8[edi]
-       mov     DWORD PTR 84[esp],ebp
-       mov     edx,            DWORD PTR 12[edi]
-       mov     ebp,            DWORD PTR 16[edi]
+       mov     edx,            DWORD PTR 52[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 128[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[eax*1+esi]
+       mov     DWORD PTR 64[esp],ecx
+       rol     esi,            6
+       add     esi,            ecx
+       mov     ecx,            DWORD PTR [edx]
+       mov     DWORD PTR 68[esp],esi
+       mov     DWORD PTR 72[esp],edi
+       mov     esi,            DWORD PTR 4[edx]
+       mov     DWORD PTR 76[esp],ebx
+       mov     edi,            DWORD PTR 8[edx]
+       mov     DWORD PTR 80[esp],ebp
+       mov     ebx,            DWORD PTR 12[edx]
+       mov     ebp,            DWORD PTR 16[edx]
        ; 80
-       mov     edi,            -1
-       sub     edi,            edx
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       mov     edx,            -1
+       sub     edx,            ebx
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 81
-       mov     edi,            DWORD PTR 60[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            9
+       mov     edx,            DWORD PTR 56[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            9
+       add     ebp,            ebx
        ; 82
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 83
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1352829926[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 84
-       mov     esi,            DWORD PTR 40[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 85
-       mov     edi,            DWORD PTR 12[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            15
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 8[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            15
+       add     ecx,            ebp
        ; 86
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            15
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 87
-       mov     edi,            DWORD PTR 20[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 16[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 88
-       mov     esi,            DWORD PTR 56[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
+       mov     eax,            DWORD PTR 52[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            7
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1352829926[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            7
+       add     edi,            esi
        ; 89
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[esi*1+ebx]
-       sub     edi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[eax*1+esi]
+       sub     edx,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 90
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 91
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            11
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            11
+       add     ebp,            ebx
        ; 92
-       mov     esi,            DWORD PTR 8[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 4[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 93
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            14
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1352829926[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            14
+       add     edi,            esi
        ; 94
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            12
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            12
+       add     esi,            ecx
        ; 95
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[esi*1+eax]
-       mov     esi,            ecx
-       rol     eax,            6
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[eax*1+ecx]
+       mov     eax,            edi
+       rol     ecx,            6
+       add     ecx,            ebp
        ; 96
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 97
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            13
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            13
+       add     ebx,            edi
        ; 98
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            15
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            15
+       add     edi,            esi
        ; 99
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 100
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            12
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 101
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            8
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 102
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 103
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 44[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 40[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 104
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 105
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 64[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            7
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 60[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            7
+       add     ecx,            ebp
        ; 106
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            12
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 107
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            7
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            7
+       add     ebx,            edi
        ; 108
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            6
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            6
+       add     edi,            esi
        ; 109
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            15
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            15
+       add     esi,            ecx
        ; 110
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            13
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 111
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 12[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       sub     edi,            eax
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 8[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       sub     edx,            ecx
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 112
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            9
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            9
+       add     ebx,            edi
        ; 113
-       mov     edi,            DWORD PTR 24[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 20[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            7
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1836072691[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            7
+       add     edi,            esi
        ; 114
-       mov     esi,            DWORD PTR 8[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            15
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            15
+       add     esi,            ecx
        ; 115
-       mov     edi,            DWORD PTR 16[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            11
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 12[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 116
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            8
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 117
-       mov     edi,            DWORD PTR 60[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[esi*1+edx]
-       sub     edi,            ebp
-       rol     edx,            6
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 56[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[eax*1+ebx]
+       sub     edx,            ebp
+       rol     ebx,            6
+       add     ebx,            edi
        ; 118
-       mov     esi,            DWORD PTR 28[esp]
-       or      edi,            edx
-       add     ecx,            esi
-       xor     edi,            eax
-       mov     esi,            -1
+       mov     eax,            DWORD PTR 24[esp]
+       or      edx,            ebx
+       add     edi,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[edi*1+ecx]
-       sub     esi,            edx
-       rol     ecx,            6
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1836072691[edx*1+edi]
+       sub     eax,            ebx
+       rol     edi,            6
+       add     edi,            esi
        ; 119
-       mov     edi,            DWORD PTR 40[esp]
-       or      esi,            ecx
-       add     ebx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[esi*1+ebx]
-       sub     edi,            ecx
-       rol     ebx,            14
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 36[esp]
+       or      eax,            edi
+       add     esi,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[eax*1+esi]
+       sub     edx,            edi
+       rol     esi,            14
+       add     esi,            ecx
        ; 120
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     eax,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[edi*1+eax]
-       sub     esi,            ebx
-       rol     eax,            12
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ecx,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[edx*1+ecx]
+       sub     eax,            esi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 121
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            eax
-       add     ebp,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[esi*1+ebp]
-       sub     edi,            eax
-       rol     ebp,            13
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            ecx
        add     ebp,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[eax*1+ebp]
+       sub     edx,            ecx
+       rol     ebp,            13
+       add     ebp,            ebx
        ; 122
-       mov     esi,            DWORD PTR 52[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            5
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 48[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            5
+       add     ebx,            edi
        ; 123
-       mov     edi,            DWORD PTR 12[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
+       mov     edx,            DWORD PTR 8[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            14
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 1836072691[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            14
+       add     edi,            esi
        ; 124
-       mov     esi,            DWORD PTR 44[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 40[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            13
+       add     esi,            ecx
        ; 125
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            13
-       add     eax,            ebp
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 126
-       mov     esi,            DWORD PTR 20[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            7
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 127
-       mov     edi,            DWORD PTR 56[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 36[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 52[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 32[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            5
+       add     ebx,            edi
        ; 128
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            15
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            15
+       add     edi,            esi
        ; 129
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 20[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            5
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 16[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            5
+       add     esi,            ecx
        ; 130
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            8
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 131
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 16[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 12[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 132
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            14
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            14
+       add     ebx,            edi
        ; 133
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      esi,            edi
-       mov     edi,            DWORD PTR 64[esp]
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 60[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[esi*1+ecx]
-       mov     esi,            -1
-       rol     ecx,            14
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2053994217[eax*1+edi]
+       mov     eax,            -1
+       rol     edi,            14
+       add     edi,            esi
        ; 134
-       add     ebx,            edi
-       mov     edi,            edx
-       sub     esi,            ecx
-       and     edi,            ecx
-       and     esi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[edi*1+ebx]
-       mov     edi,            -1
-       rol     ebx,            6
-       add     ebx,            eax
+       add     esi,            edx
+       mov     edx,            ebx
+       sub     eax,            edi
+       and     edx,            edi
+       and     eax,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[edx*1+esi]
+       mov     edx,            -1
+       rol     esi,            6
+       add     esi,            ecx
        ; 135
-       add     eax,            esi
-       mov     esi,            ecx
-       sub     edi,            ebx
-       and     esi,            ebx
-       and     edi,            edx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 24[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[esi*1+eax]
-       mov     esi,            -1
-       rol     eax,            14
-       add     eax,            ebp
+       add     ecx,            eax
+       mov     eax,            edi
+       sub     edx,            esi
+       and     eax,            esi
+       and     edx,            ebx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 20[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[eax*1+ecx]
+       mov     eax,            -1
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 136
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            6
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            6
+       add     ebp,            ebx
        ; 137
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 12[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            9
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 8[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            9
+       add     ebx,            edi
        ; 138
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            12
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            12
+       add     edi,            esi
        ; 139
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            9
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            9
+       add     esi,            ecx
        ; 140
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            12
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 141
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 44[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 40[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            5
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 142
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            15
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            15
+       add     ebx,            edi
        ; 143
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            edx
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            ebx
        rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       xor     esi,            ebp
-       rol     ecx,            8
-       add     ecx,            ebx
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       xor     eax,            ebp
+       rol     edi,            8
+       add     edi,            esi
        ; 144
-       mov     edi,            DWORD PTR 52[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            8
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 48[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            8
+       add     esi,            ecx
        ; 145
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 64[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            5
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 60[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            5
+       add     ecx,            ebp
        ; 146
-       mov     edi,            DWORD PTR 44[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            12
+       mov     edx,            DWORD PTR 40[esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            12
+       add     ebp,            ebx
        ; 147
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 20[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 16[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 148
-       mov     edi,            DWORD PTR 8[esp]
-       xor     esi,            edx
-       add     ecx,            edi
+       mov     edx,            DWORD PTR 4[esp]
+       xor     eax,            ebx
+       add     edi,            edx
        rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            12
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            12
+       add     edi,            esi
        ; 149
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 24[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     edx,            10
-       add     ebx,            edi
-       xor     esi,            edx
-       rol     ebx,            5
-       add     ebx,            eax
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 20[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       mov     eax,            edi
+       rol     ebx,            10
+       add     esi,            edx
+       xor     eax,            ebx
+       rol     esi,            5
+       add     esi,            ecx
        ; 150
-       mov     edi,            DWORD PTR 36[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 32[esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 151
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 32[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            6
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 28[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            6
+       add     ebp,            ebx
        ; 152
-       mov     edi,            DWORD PTR 28[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            8
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 24[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            8
+       add     ebx,            edi
        ; 153
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 12[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 8[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
        rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            13
-       add     ecx,            ebx
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            13
+       add     edi,            esi
        ; 154
-       mov     edi,            DWORD PTR 56[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            6
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 52[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            6
+       add     esi,            ecx
        ; 155
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 60[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            5
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 56[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            5
+       add     ecx,            ebp
        ; 156
-       mov     edi,            DWORD PTR 4[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            15
+       mov     edx,            DWORD PTR [esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 157
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 16[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            13
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 12[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            13
+       add     ebx,            edi
        ; 158
-       mov     edi,            DWORD PTR 40[esp]
-       xor     esi,            edx
-       add     ecx,            edi
+       mov     edx,            DWORD PTR 36[esp]
+       xor     eax,            ebx
+       add     edi,            edx
        rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            11
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            11
+       add     edi,            esi
        ; 159
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 48[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       rol     edx,            10
-       add     ebx,            edi
-       mov     edi,            DWORD PTR 108[esp]
-       rol     ebx,            11
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 44[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       rol     ebx,            10
+       add     esi,            edx
+       mov     edx,            DWORD PTR 128[esp]
+       rol     esi,            11
+       add     esi,            ecx
+       mov     eax,            DWORD PTR 4[edx]
        add     ebx,            eax
-       mov     esi,            DWORD PTR 4[edi]
-       add     edx,            esi
-       mov     esi,            DWORD PTR 76[esp]
-       add     edx,            esi
-       mov     esi,            DWORD PTR 8[edi]
-       add     ebp,            esi
-       mov     esi,            DWORD PTR 80[esp]
-       add     ebp,            esi
-       mov     esi,            DWORD PTR 12[edi]
-       add     eax,            esi
-       mov     esi,            DWORD PTR 84[esp]
-       add     eax,            esi
-       mov     esi,            DWORD PTR 16[edi]
-       add     ebx,            esi
-       mov     esi,            DWORD PTR 68[esp]
-       add     ebx,            esi
-       mov     esi,            DWORD PTR [edi]
-       add     ecx,            esi
-       mov     esi,            DWORD PTR 72[esp]
-       add     ecx,            esi
-       mov     DWORD PTR [edi],edx
-       mov     DWORD PTR 4[edi],ebp
-       mov     DWORD PTR 8[edi],eax
-       mov     DWORD PTR 12[edi],ebx
-       mov     DWORD PTR 16[edi],ecx
-       mov     edi,            DWORD PTR [esp]
-       mov     esi,            DWORD PTR 112[esp]
-       cmp     edi,            esi
-       mov     edi,            DWORD PTR 108[esp]
-       jge     L000start
-       add     esp,            88
+       mov     eax,            DWORD PTR 72[esp]
+       add     ebx,            eax
+       mov     eax,            DWORD PTR 8[edx]
+       add     ebp,            eax
+       mov     eax,            DWORD PTR 76[esp]
+       add     ebp,            eax
+       mov     eax,            DWORD PTR 12[edx]
+       add     ecx,            eax
+       mov     eax,            DWORD PTR 80[esp]
+       add     ecx,            eax
+       mov     eax,            DWORD PTR 16[edx]
+       add     esi,            eax
+       mov     eax,            DWORD PTR 64[esp]
+       add     esi,            eax
+       mov     eax,            DWORD PTR [edx]
+       add     edi,            eax
+       mov     eax,            DWORD PTR 68[esp]
+       add     edi,            eax
+       mov     eax,            DWORD PTR 136[esp]
+       mov     DWORD PTR [edx],ebx
+       mov     DWORD PTR 4[edx],ebp
+       mov     DWORD PTR 8[edx],ecx
+       sub     eax,            1
+       mov     DWORD PTR 12[edx],esi
+       mov     DWORD PTR 16[edx],edi
+       jle     $L001get_out
+       mov     DWORD PTR 136[esp],eax
+       mov     edi,            ecx
+       mov     eax,            DWORD PTR 132[esp]
+       mov     ecx,            ebx
+       add     eax,            64
+       mov     esi,            ebp
+       mov     DWORD PTR 132[esp],eax
+       jmp     L000start
+$L001get_out:
+       add     esp,            108
        pop     ebx
        pop     ebp
        pop     edi
        pop     esi
        ret
-_ripemd160_block_x86 ENDP
+_ripemd160_block_asm_host_order ENDP
 _TEXT  ENDS
 END
index e53c5fadba71a8d0ceb70ca4bd649f051dbcff9a..0ab6f76bfffb4a5ef1fa3d82ad91e2cae9e96ac3 100644 (file)
@@ -1,9 +1,7 @@
 #!/usr/local/bin/perl
 
 # Normal is the
-# ripemd160_block_x86(MD5_CTX *c, ULONG *X);
-# version, non-normal is the
-# ripemd160_block_x86(MD5_CTX *c, ULONG *X,int blocks);
+# ripemd160_block_asm_host_order(RIPEMD160_CTX *c, ULONG *X,int blocks);
 
 $normal=0;
 
@@ -12,13 +10,13 @@ require "x86asm.pl";
 
 &asm_init($ARGV[0],$0);
 
-$A="eax";
-$B="ebx";
-$C="ecx";
-$D="edx";
+$A="ecx";
+$B="esi";
+$C="edi";
+$D="ebx";
 $E="ebp";
-$tmp1="esi";
-$tmp2="edi";
+$tmp1="eax";
+$tmp2="edx";
 
 $KL1=0x5A827999;
 $KL2=0x6ED9EBA1;
@@ -58,13 +56,13 @@ $KR3=0x7A6D76E9;
         8, 5,12, 9,12, 5,14, 6, 8,13, 6, 5,15,13,11,11,
        );
 
-&ripemd160_block("ripemd160_block_x86");
+&ripemd160_block("ripemd160_block_asm_host_order");
 &asm_finish();
 
 sub Xv
        {
        local($n)=@_;
-       return(&swtmp($n+1));
+       return(&swtmp($n));
        # tmp on stack
        }
 
@@ -82,7 +80,7 @@ sub RIP1
        &comment($p++);
        if ($p & 1)
                {
-        &mov($tmp1,    $c) if $o == -1;
+        #&mov($tmp1,   $c) if $o == -1;
        &xor($tmp1,     $d) if $o == -1;
         &mov($tmp2,    &Xv($pos));
        &xor($tmp1,     $b);
@@ -290,7 +288,7 @@ sub RIP5
        &rotl($c,       10);
        &lea($a,        &DWP($K,$a,$tmp1,1));
         &sub($tmp2,    &Np($d)) if $o <= 0;
-        &mov(&swtmp(1+16),     $A) if $o == 1;
+        &mov(&swtmp(16),       $A) if $o == 1;
         &mov($tmp1,    &Np($d)) if $o == 2;
        &rotl($a,       $s);
        &add($a,        $e);
@@ -310,19 +308,25 @@ sub ripemd160_block
        # D     12
        # E     16
 
+       &mov($tmp2,     &wparam(0));
+        &mov($tmp1,    &wparam(1));
        &push("esi");
-        &mov($C,       &wparam(2));
+        &mov($A,       &DWP( 0,$tmp2,"",0));
        &push("edi");
-        &mov($tmp1,    &wparam(1)); # edi
+        &mov($B,       &DWP( 4,$tmp2,"",0));
        &push("ebp");
-        &add($C,       $tmp1); # offset we end at
+        &mov($C,       &DWP( 8,$tmp2,"",0));
        &push("ebx");
-        &sub($C,       64);
-       &stack_push(16+5+1);
-        # XXX
-
-       &mov(&swtmp(0), $C);
-        &mov($tmp2,    &wparam(0)); # Done at end of loop
+        &stack_push(16+5+6);
+                         # Special comment about the figure of 6.
+                         # Idea is to pad the current frame so
+                         # that the top of the stack gets fairly
+                         # aligned. Well, as you realize it would
+                         # always depend on how the frame below is
+                         # aligned. The good news are that gcc-2.95
+                         # and later does keep first argument at
+                         # least double-wise aligned.
+                         #                     <appro@fy.chalmers.se>
 
        &set_label("start") unless $normal;
        &comment("");
@@ -332,16 +336,12 @@ sub ripemd160_block
 
        for ($z=0; $z<16; $z+=2)
                {
-               &mov($A,                &DWP( $z*4,$tmp1,"",0));
-                &mov($B,               &DWP( ($z+1)*4,$tmp1,"",0));
-               &mov(&swtmp(1+$z),      $A);
-                &mov(&swtmp(1+$z+1),   $B);
+               &mov($D,                &DWP( $z*4,$tmp1,"",0));
+                &mov($E,               &DWP( ($z+1)*4,$tmp1,"",0));
+               &mov(&swtmp($z),        $D);
+                &mov(&swtmp($z+1),     $E);
                }
-       &add($tmp1,     64);
-        &mov($A,       &DWP( 0,$tmp2,"",0));
-       &mov(&wparam(1),$tmp1);
-        &mov($B,       &DWP( 4,$tmp2,"",0));
-       &mov($C,        &DWP( 8,$tmp2,"",0));
+       &mov($tmp1,     $C);
         &mov($D,       &DWP(12,$tmp2,"",0));
        &mov($E,        &DWP(16,$tmp2,"",0));
 
@@ -431,14 +431,14 @@ sub ripemd160_block
        &RIP5($B,$C,$D,$E,$A,$wl[79],$sl[79],$KL4,1);
 
        # &mov($tmp2,   &wparam(0)); # moved into last RIP5
-       # &mov(&swtmp(1+16),    $A);
+       # &mov(&swtmp(16),      $A);
         &mov($A,       &DWP( 0,$tmp2,"",0));
-       &mov(&swtmp(1+17),      $B);
-        &mov(&swtmp(1+18),     $C);
+       &mov(&swtmp(16+1),      $B);
+        &mov(&swtmp(16+2),     $C);
        &mov($B,        &DWP( 4,$tmp2,"",0));
-        &mov(&swtmp(1+19),     $D);
+        &mov(&swtmp(16+3),     $D);
        &mov($C,        &DWP( 8,$tmp2,"",0));
-        &mov(&swtmp(1+20),     $E);
+        &mov(&swtmp(16+4),     $E);
        &mov($D,        &DWP(12,$tmp2,"",0));
         &mov($E,       &DWP(16,$tmp2,"",0));
 
@@ -531,46 +531,54 @@ sub ripemd160_block
 
         &mov($tmp1,    &DWP( 4,$tmp2,"",0));   # ctx->B
        &add($D,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+18));          # $c
+        &mov($tmp1,    &swtmp(16+2));          # $c
        &add($D,        $tmp1);
 
         &mov($tmp1,    &DWP( 8,$tmp2,"",0));   # ctx->C
        &add($E,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+19));          # $d
+        &mov($tmp1,    &swtmp(16+3));          # $d
        &add($E,        $tmp1);
 
         &mov($tmp1,    &DWP(12,$tmp2,"",0));   # ctx->D
        &add($A,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+20));          # $e
+        &mov($tmp1,    &swtmp(16+4));          # $e
        &add($A,        $tmp1);
 
 
         &mov($tmp1,    &DWP(16,$tmp2,"",0));   # ctx->E
        &add($B,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+16));          # $a
+        &mov($tmp1,    &swtmp(16+0));          # $a
        &add($B,        $tmp1);
 
         &mov($tmp1,    &DWP( 0,$tmp2,"",0));   # ctx->A
        &add($C,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+17));          # $b
+        &mov($tmp1,    &swtmp(16+1));          # $b
        &add($C,        $tmp1);
 
+        &mov($tmp1,    &wparam(2));
+
        &mov(&DWP( 0,$tmp2,"",0),       $D);
         &mov(&DWP( 4,$tmp2,"",0),      $E);
        &mov(&DWP( 8,$tmp2,"",0),       $A);
-        &mov(&DWP(12,$tmp2,"",0),      $B);
-       &mov(&DWP(16,$tmp2,"",0),       $C);
+        &sub($tmp1,1);
+       &mov(&DWP(12,$tmp2,"",0),       $B);
+        &mov(&DWP(16,$tmp2,"",0),      $C);
 
-       &mov($tmp2,             &swtmp(0));
-        &mov($tmp1,            &wparam(1));
+       &jle(&label("get_out"));
+
+       &mov(&wparam(2),$tmp1);
+        &mov($C,       $A);
+       &mov($tmp1,     &wparam(1));
+        &mov($A,       $D);
+       &add($tmp1,     64);
+        &mov($B,       $E);
+       &mov(&wparam(1),$tmp1);
 
-       &cmp($tmp2,$tmp1);
-        &mov($tmp2,    &wparam(0));
+       &jmp(&label("start"));
 
-       # XXX
-        &jge(&label("start"));
+       &set_label("get_out");
 
-       &stack_pop(16+5+1);
+       &stack_pop(16+5+6);
 
        &pop("ebx");
        &pop("ebp");