Function at 0x10064c50
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x10
push esi
push edi
mov edi, ecx
test edi, edi
je 0x1006559c
cmp dword [edi + 0x20], 0
je 0x1006559c
cmp dword [edi + 0x24], 0
je 0x1006559c
mov esi, dword [edi + 0x1c]
test esi, esi
je 0x1006559c
cmp dword [esi], edi
jne 0x1006559c
mov edx, dword [esi + 4]
cmp edx, 0x2a
je 0x10064cbb
cmp edx, 0x39
je 0x10064cbb
cmp edx, 0x45
je 0x10064cbb
cmp edx, 0x49
je 0x10064cbb
cmp edx, 0x5b
je 0x10064cbb
cmp edx, 0x67
je 0x10064cbb
cmp edx, 0x71
je 0x10064cbb
cmp edx, 0x29a
jne 0x1006559c
cmp dword [edi + 0xc], 0
je 0x10065595
cmp dword [edi + 4], 0
je 0x10064cd4
cmp dword [edi], 0
je 0x10065595
cmp dword [edi + 0x10], 0
push ebx
je 0x10064d2e
cmp dword [esi + 0x14], 0
mov eax, dword [esi + 0x28]
mov dword [esi + 0x28], 4
je 0x10064cff
call fcn.10064c00
cmp dword [edi + 0x10], 0
je 0x10065585
mov edx, dword [esi + 4]
jmp 0x10064d1c
cmp dword [edi + 4], 0
jne 0x10064d1c
xor ecx, ecx
mov ebx, 9
cmp eax, 4
cmovg ecx, ebx
add eax, eax
sub eax, ecx
cmp eax, 8
cmovge edx, edx
cmp edx, 0x29a
jne 0x10064d41
cmp dword [edi + 4], 0
je 0x10064dfa
pop ebx
mov dword [edi + 0x18], str.buffer_error
mov eax, 0xfffffffb
pop edi
pop esi
mov esp, ebp
pop ebp
ret
cmp edx, 0x2a
jne 0x10064dfa
mov ecx, dword [esi + 0x30]
shl ecx, 0xc
sub ecx, 0x7800
cmp dword [esi + 0x88], 2
mov ebx, ecx
jge 0x10064d8f
mov eax, dword [esi + 0x84]
cmp eax, 2
jl 0x10064d8f
cmp eax, 6
jge 0x10064d79
lea eax, [edx + 0x16]
lea edx, [eax + 0x20]
jmp 0x10064d94
jne 0x10064d85
mov eax, 0x80
lea edx, [eax + 0x20]
jmp 0x10064d94
mov eax, 0xc0
lea edx, [eax + 0x20]
jmp 0x10064d94
xor eax, eax
lea edx, [eax + 0x20]
or ecx, eax
cmp dword [esi + 0x6c], 0
je 0x10064da0
mov ecx, edx
or ecx, ebx
mov eax, 0x8421085
mul ecx
sub ecx, edx
shr ecx, 1
add ecx, edx
shr ecx, 4
inc ecx
mov edx, ecx
shl edx, 5
sub edx, ecx
mov ecx, esi
call fcn.10064bd0
cmp dword [esi + 0x6c], 0
je 0x10064ddb
movzx edx, word [edi + 0x32]
mov ecx, esi
call fcn.10064bd0
movzx edx, word [edi + 0x30]
mov ecx, esi
call fcn.10064bd0
mov dword [edi + 0x30], 1
mov ecx, edi
mov dword [esi + 4], 0x71
call fcn.10064c00
cmp dword [esi + 0x14], 0
jne 0x10065585
mov eax, dword [esi + 4]
cmp eax, 0x39
jne 0x10064ed4
mov dword [edi + 0x30], 0
mov eax, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov byte [ecx + eax], 0x1f
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0x8b
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 8
mov edx, dword [esi + 0x14]
mov ebx, dword [esi + 0x1c]
inc edx
mov dword [esi + 0x14], edx
test ebx, ebx
jne 0x10064f61
mov eax, dword [esi + 8]
mov byte [edx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x84]
inc edx
mov dword [esi + 0x14], edx
cmp eax, 9
jne 0x10064e8f
mov cl, 2
jmp 0x10064ea3
cmp dword [esi + 0x88], 2
jge 0x10064ea1
cmp eax, 2
jl 0x10064ea1
xor cl, cl
jmp 0x10064ea3
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0xa
mov ecx, edi
inc dword [esi + 0x14]
mov dword [esi + 4], 0x71
call fcn.10064c00
cmp dword [esi + 0x14], 0
jne 0x10065585
mov eax, dword [esi + 4]
cmp eax, 0x45
jne 0x10065171
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x10], 0
je 0x10065168
movzx edx, word [eax + 0x14]
sub edx, dword [esi + 0x20]
mov ecx, dword [esi + 0x14]
mov ebx, dword [esi + 0xc]
mov dword [ebp - 8], ecx
mov dword [ebp - 4], edx
lea eax, [ecx + edx]
cmp eax, ebx
jbe 0x10065111
mov eax, ecx
mov dword [ebp - 0xc], ecx
nop dword [eax]
sub ebx, eax
mov eax, dword [esi + 0x1c]
push ebx
mov dword [ebp - 0x10], ebx
mov eax, dword [eax + 0x10]
add eax, dword [esi + 0x20]
push eax
mov eax, dword [esi + 8]
add eax, dword [ebp - 0xc]
push eax
call sub.VCRUNTIME140.dll_memcpy
mov eax, dword [esi + 0x1c]
add esp, 0xc
mov ecx, dword [esi + 0xc]
mov dword [esi + 0x14], ecx
cmp dword [eax + 0x2c], 0
je 0x1006509e
mov eax, dword [ebp - 8]
cmp ecx, eax
jbe 0x1006509e
mov edx, dword [esi + 8]
sub ecx, eax
add edx, eax
jne 0x1006508f
xor eax, eax
jmp 0x1006509b
mov ecx, dword [ebx + 0x24]
mov eax, dword [ebx + 0x2c]
neg ecx
sbb cl, cl
and cl, 0x10
neg eax
sbb al, al
and al, 2
add cl, al
mov eax, dword [ebx + 0x1c]
neg eax
sbb al, al
and al, 8
add cl, al
mov eax, dword [ebx + 0x10]
neg eax
sbb al, al
and al, 4
add cl, al
cmp dword [ebx], 0
setne al
add cl, al
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 4]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 5]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 6]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 7]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x84]
inc edx
mov dword [esi + 0x14], edx
cmp eax, 9
jne 0x10064ffc
mov cl, 2
jmp 0x10065010
cmp dword [esi + 0x88], 2
jge 0x1006500e
cmp eax, 2
jl 0x1006500e
xor cl, cl
jmp 0x10065010
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [eax + 0xc]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov dword [esi + 0x14], edx
cmp dword [eax + 0x10], 0
je 0x1006505e
movzx eax, byte [eax + 0x14]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 0x15]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x1006507c
mov eax, dword [esi + 8]
test eax, eax
je 0x10065079
mov ecx, dword [edi + 0x30]
push edx
mov edx, eax
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x45
jmp 0x10064edd
push ecx
mov ecx, dword [edi + 0x30]
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
add dword [esi + 0x20], ebx
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 8], ebx
call fcn.10068650
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x100650e9
mov eax, dword [ebp - 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call sub.VCRUNTIME140.dll_memcpy
mov ecx, dword [ebp - 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x100650e9
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x10065585
mov edx, dword [ebp - 4]
xor ecx, ecx
sub edx, dword [ebp - 0x10]
xor eax, eax
mov ebx, dword [esi + 0xc]
mov dword [ebp - 8], ecx
mov dword [ebp - 4], edx
mov dword [ebp - 0xc], eax
cmp edx, ebx
ja 0x10064f10
mov eax, dword [esi + 0x1c]
mov ebx, dword [esi + 0x20]
push edx
mov eax, dword [eax + 0x10]
add eax, ebx
push eax
mov eax, dword [esi + 8]
add eax, ecx
push eax
call sub.VCRUNTIME140.dll_memcpy
mov ecx, dword [ebp - 4]
add esp, 0xc
mov eax, dword [esi + 0x1c]
add ecx, dword [esi + 0x14]
mov dword [esi + 0x14], ecx
cmp dword [eax + 0x2c], 0
je 0x10065161
mov eax, dword [ebp - 8]
cmp ecx, eax
jbe 0x10065161
mov edx, dword [esi + 8]
sub ecx, eax
add edx, eax
jne 0x10065152
xor eax, eax
jmp 0x1006515e
push ecx
mov ecx, dword [edi + 0x30]
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x49
jmp 0x1006517a
cmp eax, 0x49
jne 0x10065284
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x1c], 0
je 0x1006527b
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp - 8], ecx
nop
cmp ebx, dword [esi + 0xc]
jne 0x1006521d
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x100651c2
cmp ebx, ecx
jbe 0x100651c2
mov edx, dword [esi + 8]
sub ebx, ecx
add edx, ecx
jne 0x100651b3
xor eax, eax
jmp 0x100651bf
mov ecx, dword [edi + 0x30]
push ebx
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 0xc], ebx
call fcn.10068650
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x1006520a
mov eax, dword [ebp - 0xc]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call sub.VCRUNTIME140.dll_memcpy
mov ecx, dword [ebp - 0xc]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x1006520a
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x10065585
mov dword [ebp - 8], 0
xor ebx, ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x1c]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x10065248
mov ecx, dword [ebp - 8]
jmp 0x10065190
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10065274
mov eax, dword [ebp - 8]
cmp ebx, eax
jbe 0x10065274
mov edx, dword [esi + 8]
sub ebx, eax
add edx, eax
jne 0x10065265
xor eax, eax
jmp 0x10065271
mov ecx, dword [edi + 0x30]
push ebx
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x5b
jmp 0x1006528d
cmp eax, 0x5b
jne 0x10065399
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x24], 0
je 0x10065390
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp - 8], ecx
cmp ebx, dword [esi + 0xc]
jne 0x1006532f
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x100652d4
cmp ebx, ecx
jbe 0x100652d4
mov edx, dword [esi + 8]
sub ebx, ecx
add edx, ecx
jne 0x100652c5
xor eax, eax
jmp 0x100652d1
mov ecx, dword [edi + 0x30]
push ebx
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 0xc], ebx
call fcn.10068650
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x1006531c
mov eax, dword [ebp - 0xc]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call sub.VCRUNTIME140.dll_memcpy
mov ecx, dword [ebp - 0xc]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x1006531c
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x10065585
mov dword [ebp - 8], 0
xor ebx, ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x24]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x1006535a
mov ecx, dword [ebp - 8]
jmp 0x100652a2
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10065390
mov eax, dword [ebp - 8]
cmp ebx, eax
jbe 0x10065390
mov edx, dword [esi + 8]
sub ebx, eax
add edx, eax
jne 0x10065381
xor eax, eax
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x67
jmp 0x1006539e
mov ecx, dword [edi + 0x30]
push ebx
call fcn.100689f0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x67
jmp 0x1006539e
cmp eax, 0x67
jne 0x10065400
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x100653e8
mov edx, dword [esi + 0x14]
lea eax, [edx + 2]
cmp eax, dword [esi + 0xc]
jbe 0x100653c4
mov ecx, edi
call fcn.10064c00
mov edx, dword [esi + 0x14]
test edx, edx
jne 0x10065585
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0x30]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0x31]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov dword [edi + 0x30], 0
mov ecx, edi
mov dword [esi + 4], 0x71
call fcn.10064c00
cmp dword [esi + 0x14], 0
jne 0x10065585
cmp dword [edi + 4], 0
jne 0x10065419
cmp dword [esi + 0x74], 0
jne 0x10065419
cmp dword [esi + 4], 0x29a
je 0x100654a9
mov eax, dword [esi + 0x84]
test eax, eax
jne 0x1006542d
push 4
push esi
call fcn.10065ad0
jmp 0x1006545e
mov ecx, dword [esi + 0x88]
cmp ecx, 2
jne 0x10065441
mov ecx, esi
call fcn.10066cd0
jmp 0x10065461
cmp ecx, 3
jne 0x1006544f
mov ecx, esi
call fcn.10066970
jmp 0x10065461
lea eax, [eax + eax*2]
mov eax, dword [eax*4 + 0x10073698]
push 4
push esi
call eax
add esp, 8
cmp eax, 2
je 0x1006546b
cmp eax, 3
jne 0x10065472
mov dword [esi + 4], 0x29a
test eax, eax
je 0x1006557f
cmp eax, 2
je 0x1006557f
cmp eax, 1
jne 0x100654a9
push 0
push 0
xor edx, edx
mov ecx, esi
call fcn.10067dd0
add esp, 8
mov ecx, edi
call fcn.10064c00
cmp dword [edi + 0x10], 0
je 0x10065585
mov eax, dword [esi + 0x18]
test eax, eax
jg 0x100654bc
pop ebx
pop edi
mov eax, 1
pop esi
mov esp, ebp
pop ebp
ret
cmp eax, 2
jne 0x10065547
mov ecx, dword [esi + 0x14]
movzx eax, byte [edi + 0x30]
mov edx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x31]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x32]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x33]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 8]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 9]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0xa]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0xb]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
jmp 0x1006555d
movzx edx, word [edi + 0x32]
mov ecx, esi
call fcn.10064bd0
movzx edx, word [edi + 0x30]
mov ecx, esi
call fcn.10064bd0
mov ecx, edi
call fcn.10064c00
mov eax, dword [esi + 0x18]
test eax, eax
jle 0x10065570
neg eax
mov dword [esi + 0x18], eax
xor eax, eax
cmp dword [esi + 0x14], eax
pop ebx
pop edi
sete al
pop esi
mov esp, ebp
pop ebp
ret
cmp dword [edi + 0x10], 0
jne 0x1006558c
mov dword [esi + 0x28], 0xffffffff
pop ebx
pop edi
xor eax, eax
pop esi
mov esp, ebp
pop ebp
ret
mov dword [edi + 0x18], str.stream_error
pop edi
mov eax, 0xfffffffe
pop esi
mov esp, ebp
pop ebp
ret