Function at 0x846820
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xc4
mov eax, dword [esp + 0xc8]
push ebx
push ebp
push esi
mov eax, dword [eax]
mov ebp, ecx
mov esi, dword [esp + 0xdc]
add eax, edx
mov dword [esp + 0x1c], eax
mov ebx, edx
mov eax, dword [esp + 0xe0]
push edi
mov edi, esi
mov dword [esp + 0x28], edx
mov dword [esp + 0x2c], ebp
mov eax, dword [eax]
mov dword [esp + 0x14], 0xffffffff
mov dword [esp + 0x18], ebx
mov dword [esp + 0x24], edi
lea ecx, [eax + esi]
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xdc]
je 0x84688a
or edx, 0xffffffff
jmp 0x846891
sub eax, ecx
lea edx, [esi - 1]
add edx, eax
lea eax, [edx + 1]
mov dword [esp + 0x3c], edx
test edx, eax
jne 0x847efc
cmp esi, ecx
jb 0x847efc
mov eax, dword [ebp + 0x20]
mov edx, dword [ebp + 0x38]
mov ecx, dword [ebp + 0x24]
mov esi, dword [ebp + 4]
mov dword [esp + 0x30], eax
mov eax, dword [ebp + 0x28]
mov dword [esp + 0x40], eax
mov eax, dword [ebp + 0x3c]
mov dword [esp + 0x48], eax
mov eax, dword [ebp]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x10], ecx
cmp eax, 0x35
ja 0x847d27
movzx eax, byte [eax + 0x10002bb0]
jmp dword [eax*4 + 0x10002b28]
or ecx, 0xffffffff
mov eax, dword [esp + 0x30]
sub ebx, dword [esp + 0x28]
mov edi, dword [esp + 0x24]
sub edi, dword [esp + 0xe0]
test byte [esp + 0xe8], 9
mov dword [ebp + 0x20], eax
mov eax, dword [esp + 0x10]
mov dword [ebp + 0x24], eax
mov eax, dword [esp + 0x40]
mov dword [ebp + 0x28], eax
mov eax, dword [esp + 0x48]
mov dword [ebp + 0x3c], eax
mov eax, dword [esp + 0xd8]
mov dword [ebp + 4], esi
mov dword [ebp + 0x38], edx
mov dword [esp + 0x24], edi
mov dword [eax], ebx
mov eax, dword [esp + 0xe4]
mov dword [eax], edi
je 0x847eef
test ecx, ecx
js 0x847eef
mov esi, dword [ebp + 0x1c]
mov eax, 0x5e6ea9af
mul edi
mov ebx, edi
movzx ecx, si
shr edx, 0xb
imul eax, edx, 0x15b0
shr esi, 0x10
sub ebx, eax
mov dword [esp + 0x38], ebx
test edi, edi
je 0x847eca
xor edi, edi
cmp ebx, 7
jbe 0x847e19
mov ebp, dword [esp + 0xe0]
mov edx, 7
sub edx, ebp
movzx eax, byte [ebp]
add edi, 8
add ecx, eax
movzx eax, byte [ebp + 1]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 2]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 3]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 4]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 5]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 6]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 7]
add ebp, 8
add esi, ecx
add ecx, eax
add esi, ecx
lea eax, [edx + ebp]
cmp eax, ebx
jb 0x847dc5
mov dword [esp + 0xe0], ebp
xor ebp, ebp
xor edx, edx
cmp edi, ebx
jae 0x847e8f
mov eax, ebx
sub eax, edi
cmp eax, 2
jb 0x847e70
mov edx, ebx
mov ebx, ebp
sub edx, edi
sub edx, 2
shr edx, 1
inc edx
lea edi, [edi + edx*2]
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
movzx eax, byte [edi + 1]
add ebp, ecx
add edi, 2
add ecx, eax
add ebx, ecx
dec edx
jne 0x847e44
mov dword [esp + 0x3c], ebx
mov ebx, dword [esp + 0x38]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0xe0], edi
mov edi, dword [esp + 0x4c]
cmp edi, ebx
jae 0x847e8a
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
add esi, ecx
inc edi
mov dword [esp + 0xe0], edi
lea eax, [edx + ebp]
add esi, eax
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul eax, edx, 0xffff000f
add ecx, eax
mov eax, 0x80078071
mul esi
shr edx, 0xf
imul eax, edx, 0xffff000f
add esi, eax
sub dword [esp + 0x24], ebx
mov ebx, 0x15b0
mov dword [esp + 0x38], ebx
jne 0x847db0
mov ebp, dword [esp + 0x2c]
shl esi, 0x10
add esi, ecx
mov ecx, dword [esp + 0x14]
mov dword [ebp + 0x1c], esi
test ecx, ecx
jne 0x847eef
test byte [esp + 0xe8], 1
je 0x847eef
cmp esi, dword [ebp + 0x10]
mov eax, 0xfffffffe
cmovne ecx, eax
pop edi
pop esi
pop ebp
mov eax, ecx
pop ebx
add esp, 0xc4
ret
mov eax, dword [esp + 0xe4]
pop edi
pop esi
pop ebp
mov dword [eax], 0
mov eax, dword [esp + 0xcc]
pop ebx
mov dword [eax], 0
mov eax, 0xfffffffd
add esp, 0xc4
ret