Function at 0x401c00
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x268
mov eax, dword [ebp + 0x18]
mov dword [esp + 0x30], eax
mov ecx, dword [ebp + 0x14]
mov esi, dword [ebp + 0x10]
xor edi, edi
mov ebx, esi
jmp 0x401c3a
mov ecx, edi
mov edi, dword [esp + 0x28]
mov byte [esi], al
inc esi
inc ecx
mov dword [esp + 0x28], edi
test cl, 3
mov dword [esp + 0x10], esi
mov edi, ecx
je 0x401c50
movzx eax, byte [ecx]
jmp 0x401c6e
mov eax, dword [ecx]
mov edx, eax
not edx
and edx, 0x80808080
mov ecx, eax
xor ecx, 0x25252525
add ecx, 0xfefefeff
test ecx, edx
je 0x401cc4
cmp al, 0x25
je 0x401d24
mov esi, dword [esp + 0x10]
mov ecx, edi
test al, al
mov edi, dword [esp + 0x28]
je 0x404450
cmp dword [ebp + 8], 0
je 0x401c36
mov edi, ecx
mov ecx, esi
sub ecx, ebx
lea edx, [ecx + 1]
cmp edx, 0x200
jl 0x401c30
add dword [esp + 0x28], ecx
push ecx
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x404486
mov esi, eax
mov ecx, edi
movzx eax, byte [edi]
mov ebx, esi
jmp 0x401c32
mov ecx, ebx
sub ecx, esi
add ecx, 0x200
jmp 0x401d02
mov dword [edx], eax
add edx, 4
mov dword [esp + 0x10], edx
mov eax, dword [edi + 4]
add edi, 4
mov edx, eax
not edx
and edx, 0x80808080
mov esi, eax
xor esi, 0x25252525
add esi, 0xfefefeff
add ecx, 0xfffffffc
test esi, edx
jne 0x401c6e
lea esi, [eax - 0x1010101]
test edx, esi
jne 0x401c76
cmp dword [ebp + 8], 0
mov edx, dword [esp + 0x10]
je 0x401cd0
cmp ecx, 4
jge 0x401cd0
jmp 0x401c6e
mov ecx, edi
add ecx, 2
xor edi, edi
jmp 0x401d43
movzx eax, byte [ecx - 1]
lea esi, [eax - 0x20]
cmp esi, 0x3f
ja 0x401da0
mov edx, 2
jmp dword [esi*4 + 0x44d564]
dec ecx
mov edx, edi
cmp al, 0x2a
mov esi, dword [esp + 0x10]
jne 0x401dc3
mov eax, dword [esp + 0x30]
mov edi, dword [eax]
mov dword [esp + 0x50], edi
add eax, 4
mov dword [esp + 0x30], eax
movzx eax, byte [ecx + 1]
inc ecx
jmp 0x401e03
mov dword [esp + 0x14], edx
mov edx, eax
add dl, 0xd0
mov dword [esp + 0x50], 0
cmp dl, 9
ja 0x401dff
xor edi, edi
nop
nop
nop
nop
nop
movzx eax, al
lea edx, [edi + edi*4]
lea edi, [eax + edx*2]
add edi, 0xffffffd0
movzx eax, byte [ecx + 1]
inc ecx
mov edx, eax
add dl, 0xd0
cmp dl, 0xa
jb 0x401de0
mov dword [esp + 0x50], edi
mov edx, dword [esp + 0x14]
mov edi, dword [esp + 0x28]
mov dword [esp + 0x24], 0xffffffff
cmp al, 0x2e
jne 0x401e8f
movzx eax, byte [ecx + 1]
cmp al, 0x2a
jne 0x401e33
mov eax, dword [esp + 0x30]
mov eax, dword [eax]
mov dword [esp + 0x24], eax
add dword [esp + 0x30], 4
movzx eax, byte [ecx + 2]
add ecx, 2
jmp 0x401e8f
mov dword [esp + 0x14], edx
inc ecx
mov edx, eax
add dl, 0xd0
mov dword [esp + 0x24], 0
cmp dl, 9
ja 0x401e87
xor esi, esi
nop
nop
nop
nop
mov edi, esi
and edi, 0xa
mov edx, esi
or esi, 0xa
imul esi, edi
xor edi, 0xa
and edx, 0xfffffff5
imul edx, edi
add esi, edx
movzx eax, al
add esi, eax
add esi, 0xffffffd0
movzx eax, byte [ecx + 1]
inc ecx
mov edx, eax
add dl, 0xd0
cmp dl, 0xa
jb 0x401e50
mov dword [esp + 0x24], esi
mov esi, dword [esp + 0x10]
mov edx, dword [esp + 0x14]
mov edi, dword [esp + 0x28]
movzx eax, al
add eax, 0xffffffb7
cmp eax, 0x31
ja 0x401ea2
jmp dword [eax*4 + 0x44d664]
movzx eax, byte [ecx]
mov dword [esp + 0x4c], ecx
mov dword [esp + 0x18], eax
movzx eax, al
add eax, 0xffffffbf
cmp eax, 0x37
mov dword [esp + 0x1c], ebx
ja 0x4026fa
jmp dword [eax*4 + 0x44d72c]
mov eax, dword [esp + 0x18]
mov byte [esp + 0x263], al
mov dword [esp + 0x2c], 1
mov byte [esp + 0x40], 0
mov byte [esp + 0x34], 0
mov dword [esp + 0x3c], 0
mov dword [esp + 0x18], 0
lea eax, [esp + 0x263]
mov dword [esp + 8], eax
xor edx, edx
mov dword [esp + 4], 0
xor ecx, ecx
mov dword [esp + 0x50], 0
jmp 0x40370d
mov dword [esp + 0x14], edx
mov eax, dword [esp + 0x2c]
cmp ecx, eax
jg 0x40371b
mov ecx, eax
mov dword [esp + 0x10], eax
movsx eax, byte [esp + 0x40]
movsx edx, byte [esp + 0x34]
mov edi, dword [esp + 4]
mov dword [esp + 0x24], ecx
add edi, ecx
add edi, eax
add edi, edx
mov ecx, dword [esp + 0x50]
cmp ecx, edi
jg 0x403741
mov ecx, edi
mov edx, ecx
xor edx, edi
not edi
and edi, ecx
add edi, edi
sub edi, edx
mov dword [esp + 0xc], edi
mov edx, dword [esp + 0x24]
sub edx, dword [esp + 0x10]
mov ecx, edx
mov edx, dword [esp + 0x14]
test dl, 1
jne 0x403779
test dl, 0x10
mov edi, dword [esp + 0x28]
jne 0x403787
mov dword [esp + 0x24], ecx
xor edx, edx
mov ecx, dword [esp + 0xc]
jmp 0x40379b
mov dword [esp + 0x24], ecx
mov edi, dword [esp + 0x28]
mov ecx, dword [esp + 0xc]
jmp 0x40379b
cmp dword [esp + 0xc], ecx
jg 0x403791
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 0xc]
mov dword [esp + 0x24], ecx
xor ecx, ecx
mov dword [esp + 0xc], ecx
add ecx, dword [esp + 0x24]
mov dword [esp + 0x14], edx
je 0x403cb6
test dl, 1
jne 0x403928
mov ebx, dword [esp + 0xc]
test ebx, ebx
jg 0x4037ee
jmp 0x403924
mov esi, eax
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x14]
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0xc]
sub ebx, dword [esp + 0x10]
test ebx, ebx
jle 0x40391b
mov eax, dword [esp + 0x1c]
sub eax, esi
add eax, 0x200
mov ecx, ebx
mov dword [esp + 0x10], ebx
cmp ebx, eax
jl 0x403807
mov dword [esp + 0x10], eax
cmp dword [ebp + 8], 0
jne 0x403813
mov eax, ebx
mov dword [esp + 0x10], ebx
cmp dword [esp + 0x10], 0
mov dword [esp + 0xc], ebx
mov dword [esp + 0x28], edi
je 0x403860
mov eax, esi
and eax, 3
je 0x403860
mov ecx, esi
not esi
and esi, 3
mov eax, dword [esp + 0x10]
lea ebx, [eax - 1]
cmp esi, ebx
jb 0x40383d
mov esi, ebx
lea eax, [esi + 1]
push eax
push 0x20
mov edi, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [esi + edi]
inc ecx
sub ebx, esi
mov edi, dword [esp + 0x1c]
mov edx, dword [esp + 0x14]
jmp 0x40386a
mov ecx, esi
mov ebx, dword [esp + 0x10]
mov edi, dword [esp + 0x1c]
cmp ebx, 4
mov dword [esp + 0x1c], edi
jl 0x4038ae
mov eax, ebx
cmp ebx, 7
jl 0x40387f
mov eax, 7
neg eax
lea esi, [ebx + eax]
add esi, 3
and esi, 0xfffffffc
lea eax, [esi + 4]
push eax
push 0x20
mov edi, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [esi + edi]
add ecx, 4
sub ebx, esi
add ebx, 0xfffffffc
mov edi, dword [esp + 0x1c]
mov edx, dword [esp + 0x14]
test ebx, ebx
je 0x4038e0
push ebx
push 0x20
mov esi, ecx
push ecx
call fcn.0040da00
mov edx, dword [esp + 0x20]
add esp, 0xc
add esi, ebx
cmp dword [ebp + 8], 0
jne 0x4038ec
jmp 0x4037da
mov esi, ecx
cmp dword [ebp + 8], 0
je 0x4037da
mov eax, esi
sub eax, edi
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x4037da
add dword [esp + 0x28], eax
push eax
push dword [ebp + 0xc]
push edi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
jne 0x4037d0
jmp 0x404486
mov dword [esp + 0xc], ebx
movzx eax, byte [esp + 0x40]
mov ebx, dword [esp + 0x1c]
lea ecx, [esp + 0x41]
mov dword [esp + 0x20], ecx
jmp 0x40394d
mov esi, eax
mov ebx, eax
mov edx, dword [esp + 0x14]
movzx eax, byte [esp + 0x40]
test al, al
je 0x403a6d
movsx ecx, al
mov eax, ecx
cmp dword [ebp + 8], 0
je 0x40396f
mov eax, ebx
sub eax, esi
add eax, 0x200
cmp eax, ecx
jl 0x40396f
mov eax, ecx
sub cl, al
mov byte [esp + 0x40], cl
test eax, eax
je 0x403a1b
mov ecx, eax
and ecx, 3
je 0x403a60
mov edx, ebx
mov ebx, eax
mov dword [esp + 0x1c], edx
mov dword [esp + 0x28], edi
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov edi, esi
mov esi, dword [esp + 0x20]
lea eax, [esi + 1]
mov dword [esp + 0x20], eax
movzx eax, byte [esi]
mov esi, edi
mov byte [edi + edx], al
inc edx
cmp ecx, edx
jne 0x4039a0
add esi, edx
mov eax, ebx
mov ecx, ebx
sub ecx, edx
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
cmp eax, 4
jb 0x403a1b
nop
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 1], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 2], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 3], al
add esi, 4
add ecx, 0xfffffffc
jne 0x4039d0
cmp dword [ebp + 8], 0
je 0x403944
mov ecx, esi
xor ecx, ebx
mov eax, ebx
not eax
and eax, esi
add eax, eax
sub eax, ecx
cmp eax, 0x1ff
jl 0x403944
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
jne 0x403940
jmp 0x40447b
mov ecx, eax
cmp eax, 4
jae 0x4039d0
jmp 0x403a1b
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x28], edi
mov edi, esi
mov eax, dword [esp + 0x18]
mov ecx, eax
shr ecx, 0x18
mov dword [esp + 0x10], ecx
xor esi, esi
test dl, 0x40
je 0x403aa5
and eax, 0xffffff
add eax, dword [esp + 0x24]
mov esi, dword [esp + 0x10]
lea ecx, [esi + 1]
xor edx, edx
div ecx
sub esi, edx
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x24]
test ebx, ebx
jg 0x403ade
lea eax, [esp + 0x41]
mov dword [esp + 0x20], eax
mov ebx, dword [esp + 0x1c]
jmp 0x403e07
mov dword [esp + 0x28], edi
mov edi, eax
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x24]
sub ebx, dword [esp + 0x18]
test ebx, ebx
jle 0x403ca7
mov eax, dword [esp + 0x1c]
sub eax, edi
add eax, 0x200
mov ecx, ebx
mov dword [esp + 0x18], ebx
cmp ebx, eax
jl 0x403af7
mov dword [esp + 0x18], eax
cmp dword [ebp + 8], 0
jne 0x403b03
mov eax, ebx
mov dword [esp + 0x18], ebx
test dl, 0x40
mov dword [esp + 0x24], ebx
jne 0x403b60
cmp dword [esp + 0x18], 0
je 0x403b70
mov eax, edi
and eax, 3
je 0x403b70
mov ecx, edi
not ecx
and ecx, 3
mov eax, dword [esp + 0x18]
lea ebx, [eax - 1]
cmp ecx, ebx
jb 0x403b2e
mov ecx, ebx
mov dword [esp + 0x48], ecx
lea eax, [ecx + 1]
push eax
push 0x30
push edi
call fcn.0040da00
add esp, 0xc
mov eax, dword [esp + 0x48]
add edi, eax
inc edi
sub ebx, eax
mov edx, dword [esp + 0x14]
cmp ebx, 4
jge 0x403b79
jmp 0x403bb4
mov ebx, dword [esp + 0x18]
jmp 0x403bb4
mov ebx, dword [esp + 0x18]
cmp ebx, 4
jl 0x403bb4
mov eax, ebx
cmp ebx, 7
jl 0x403b85
mov eax, 7
neg eax
add eax, ebx
add eax, 3
and eax, 0xfffffffc
mov dword [esp + 0x48], eax
add eax, 4
push eax
push 0x30
push edi
call fcn.0040da00
add esp, 0xc
mov eax, dword [esp + 0x48]
add edi, eax
add edi, 4
sub ebx, eax
add ebx, 0xfffffffc
mov edx, dword [esp + 0x14]
test ebx, ebx
je 0x403c00
test bl, 1
jne 0x403bd0
mov eax, ebx
cmp ebx, 1
jne 0x403c64
jmp 0x403c00
mov al, 0x30
test dl, 0x40
je 0x403bf4
cmp esi, dword [esp + 0x10]
jne 0x403bf3
movzx eax, byte [0x450001]
mov ecx, eax
add cl, al
and cl, 0x52
sub al, cl
add al, 0xa9
xor esi, esi
jmp 0x403bf4
inc esi
mov byte [edi], al
inc edi
lea eax, [ebx - 1]
cmp ebx, 1
jne 0x403c64
nop
cmp dword [ebp + 8], 0
je 0x403ace
mov eax, edi
mov ecx, dword [esp + 0x1c]
sub eax, ecx
cmp eax, 0x1ff
jl 0x403ace
mov edi, dword [esp + 0x28]
add edi, eax
push eax
push dword [ebp + 0xc]
push ecx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
jne 0x403ac0
jmp 0x40447b
movzx ecx, byte [0x450001]
mov edx, ecx
add dl, cl
and dl, 0x52
sub cl, dl
mov edx, dword [esp + 0x14]
add cl, 0xa9
xor esi, esi
mov byte [edi + 1], cl
add edi, 2
add eax, 0xfffffffe
je 0x403c00
mov cl, 0x30
test dl, 0x40
je 0x403c91
cmp esi, dword [esp + 0x10]
jne 0x403c90
movzx edx, byte [0x450001]
mov ch, dl
add ch, dl
and ch, 0x52
sub dl, ch
add dl, 0xa9
xor esi, esi
jmp 0x403c93
inc esi
mov dl, 0x30
mov byte [edi], dl
mov edx, dword [esp + 0x14]
test dl, 0x40
je 0x403c59
cmp esi, dword [esp + 0x10]
je 0x403c40
inc esi
jmp 0x403c59
movzx eax, byte [esp + 0x40]
mov esi, edi
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
lea ecx, [esp + 0x41]
mov dword [esp + 0x20], ecx
test al, al
jne 0x403cdd
mov dword [esp + 0x28], edi
mov edi, esi
jmp 0x403e07
movzx eax, byte [esp + 0x40]
test al, al
je 0x403dfd
movsx edx, al
mov ecx, ebx
sub ecx, esi
add ecx, 0x200
cmp ecx, edx
jl 0x403cf0
mov ecx, edx
cmp dword [ebp + 8], 0
jne 0x403cf8
mov ecx, edx
sub al, cl
mov byte [esp + 0x40], al
test ecx, ecx
je 0x403dab
mov eax, ecx
and eax, 3
je 0x403df0
mov dword [esp + 0x10], ecx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x28], edi
xor edx, edx
nop
mov ebx, esi
mov esi, dword [esp + 0x20]
lea edi, [esi + 1]
mov dword [esp + 0x20], edi
movzx ecx, byte [esi]
mov esi, ebx
mov byte [ebx + edx], cl
inc edx
cmp eax, edx
jne 0x403d20
add esi, edx
mov ecx, dword [esp + 0x10]
mov eax, ecx
sub eax, edx
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
cmp ecx, 4
jb 0x403dab
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, dword [esp + 0x20]
lea edx, [ecx + 1]
mov dword [esp + 0x20], edx
movzx ecx, byte [ecx]
mov byte [esi], cl
mov ecx, dword [esp + 0x20]
lea edx, [ecx + 1]
mov dword [esp + 0x20], edx
movzx ecx, byte [ecx]
mov byte [esi + 1], cl
mov ecx, dword [esp + 0x20]
lea edx, [ecx + 1]
mov dword [esp + 0x20], edx
movzx ecx, byte [ecx]
mov byte [esi + 2], cl
mov ecx, dword [esp + 0x20]
lea edx, [ecx + 1]
mov dword [esp + 0x20], edx
movzx ecx, byte [ecx]
mov byte [esi + 3], cl
add esi, 4
add eax, 0xfffffffc
jne 0x403d60
cmp dword [ebp + 8], 0
je 0x403cd0
mov eax, esi
sub eax, ebx
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x403cd0
mov ecx, eax
and ecx, edi
xor edi, eax
lea edi, [edi + ecx*2]
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x40447b
mov esi, eax
mov ebx, eax
jmp 0x403cd0
mov eax, ecx
cmp ecx, 4
jae 0x403d60
jmp 0x403dab
mov dword [esp + 0x28], edi
mov edi, esi
mov edx, dword [esp + 0x14]
mov ecx, dword [esp + 0x2c]
test ecx, ecx
jne 0x404104
mov dword [esp + 0x1c], ebx
mov ebx, dword [esp + 4]
test ebx, ebx
mov esi, edi
mov edi, dword [esp + 0x28]
jne 0x403e5a
lea eax, [esp + 0x35]
mov dword [esp + 0x20], eax
movzx ecx, byte [esp + 0x34]
test cl, cl
je 0x4042cd
mov ebx, dword [esp + 0x1c]
jmp 0x403fc1
mov ebx, dword [esp + 4]
sub ebx, dword [esp + 0x10]
je 0x403e25
mov eax, dword [esp + 0x1c]
sub eax, esi
add eax, 0x200
mov ecx, ebx
mov dword [esp + 0x10], ebx
mov dword [esp + 4], ebx
cmp ebx, eax
jl 0x403e77
mov dword [esp + 0x10], eax
cmp dword [ebp + 8], 0
jne 0x403e85
mov eax, dword [esp + 4]
mov dword [esp + 0x10], eax
cmp dword [esp + 0x10], 0
mov ebx, dword [esp + 0x1c]
mov dword [esp + 0x28], edi
je 0x403ee0
mov eax, esi
and eax, 3
je 0x403ee0
mov ecx, esi
mov ebx, esi
not ebx
and ebx, 3
mov eax, dword [esp + 0x10]
lea esi, [eax - 1]
cmp ebx, esi
jb 0x403eb1
mov ebx, esi
lea eax, [ebx + 1]
push eax
push 0x30
mov edi, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [ebx + edi]
inc ecx
sub esi, ebx
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
mov edx, dword [esp + 0x14]
jmp 0x403ee6
mov ecx, esi
mov esi, dword [esp + 0x10]
cmp esi, 4
mov dword [esp + 0x1c], ebx
jl 0x403f2e
mov eax, esi
cmp esi, 7
jl 0x403efb
mov eax, 7
neg eax
lea edi, [esi + eax]
add edi, 3
and edi, 0xfffffffc
lea eax, [edi + 4]
push eax
push 0x30
mov ebx, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [edi + ebx]
add ecx, 4
sub esi, edi
add esi, 0xfffffffc
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
mov edx, dword [esp + 0x14]
test esi, esi
je 0x403f60
push esi
push 0x30
mov ebx, edi
mov edi, ecx
push ecx
call fcn.0040da00
mov edx, dword [esp + 0x20]
add esp, 0xc
add edi, esi
mov esi, edi
mov edi, ebx
mov ebx, dword [esp + 0x1c]
cmp dword [ebp + 8], 0
jne 0x403f6c
jmp 0x403e50
mov esi, ecx
cmp dword [ebp + 8], 0
je 0x403e50
mov eax, esi
sub eax, ebx
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x403e50
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x40447b
mov esi, eax
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x14]
jmp 0x403e50
mov edx, dword [esp + 0x14]
movzx ecx, byte [esp + 0x34]
test cl, cl
je 0x4042d1
movsx edx, cl
mov eax, ebx
sub eax, esi
add eax, 0x200
cmp eax, edx
jl 0x403fd3
mov eax, edx
cmp dword [ebp + 8], 0
jne 0x403fdb
mov eax, edx
sub cl, al
mov byte [esp + 0x34], cl
test eax, eax
je 0x40409b
mov ecx, eax
and ecx, 3
je 0x4040e0
mov dword [esp + 0x10], eax
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x28], edi
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, esi
mov esi, dword [esp + 0x20]
lea edi, [esi + 1]
mov dword [esp + 0x20], edi
movzx ebx, byte [esi]
mov esi, eax
mov byte [eax + edx], bl
inc edx
cmp ecx, edx
jne 0x404010
add esi, edx
mov eax, dword [esp + 0x10]
mov ecx, eax
sub ecx, edx
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
cmp eax, 4
jb 0x40409b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 1], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 2], al
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov dword [esp + 0x20], edx
movzx eax, byte [eax]
mov byte [esi + 3], al
add esi, 4
add ecx, 0xfffffffc
jne 0x404050
cmp dword [ebp + 8], 0
je 0x403fb0
mov eax, esi
sub eax, ebx
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x403fb0
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x40447b
mov esi, eax
mov ebx, eax
jmp 0x403fb0
mov ecx, eax
cmp eax, 4
jae 0x404050
jmp 0x40409b
mov ebx, dword [esp + 0x1c]
mov esi, dword [esp + 0x10]
mov ecx, dword [esp + 0x18]
sub ecx, esi
je 0x403e13
mov eax, ebx
sub eax, edi
add eax, 0x200
mov esi, ecx
cmp ecx, eax
jl 0x404115
mov esi, eax
cmp dword [ebp + 8], 0
jne 0x40411d
mov esi, ecx
cmp esi, 4
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x10], esi
jl 0x404180
lea ebx, [esi - 4]
mov eax, ebx
shr eax, 2
inc eax
and eax, 7
je 0x404188
mov dword [esp + 0x24], ebx
shl eax, 2
xor edx, edx
mov ebx, dword [esp + 8]
nop
nop
nop
nop
nop
nop
nop
mov ecx, dword [ebx + edx]
mov dword [edi + edx], ecx
add edx, 4
cmp eax, edx
jne 0x404150
add edi, edx
mov esi, dword [esp + 0x10]
sub esi, edx
add ebx, edx
mov dword [esp + 8], ebx
mov eax, esi
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x24]
jmp 0x404188
mov eax, esi
mov ebx, dword [esp + 8]
jmp 0x4041e1
cmp ebx, 0x1c
mov ebx, dword [esp + 8]
jb 0x4041e1
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [ebx]
mov dword [edi], eax
mov eax, dword [ebx + 4]
mov dword [edi + 4], eax
mov eax, dword [ebx + 8]
mov dword [edi + 8], eax
mov eax, dword [ebx + 0xc]
mov dword [edi + 0xc], eax
mov eax, dword [ebx + 0x10]
mov dword [edi + 0x10], eax
mov eax, dword [ebx + 0x14]
mov dword [edi + 0x14], eax
mov eax, dword [ebx + 0x18]
mov dword [edi + 0x18], eax
mov eax, dword [ebx + 0x1c]
mov dword [edi + 0x1c], eax
lea eax, [esi - 0x20]
add ebx, 0x20
add edi, 0x20
add esi, 0xffffffdc
cmp esi, 0xfffffff8
mov esi, eax
jb 0x4041a0
test eax, eax
je 0x404261
mov ecx, eax
and ecx, 7
je 0x4042c0
xor edx, edx
mov esi, ebx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ebx, byte [esi + edx]
mov byte [edi + edx], bl
inc edx
cmp ecx, edx
jne 0x404200
add edi, edx
mov ecx, eax
sub ecx, edx
add esi, edx
mov ebx, esi
mov edx, dword [esp + 0x14]
cmp eax, 8
jb 0x404261
nop
movzx eax, byte [ebx]
mov byte [edi], al
movzx eax, byte [ebx + 1]
mov byte [edi + 1], al
movzx eax, byte [ebx + 2]
mov byte [edi + 2], al
movzx eax, byte [ebx + 3]
mov byte [edi + 3], al
movzx eax, byte [ebx + 4]
mov byte [edi + 4], al
movzx eax, byte [ebx + 5]
mov byte [edi + 5], al
movzx eax, byte [ebx + 6]
mov byte [edi + 6], al
movzx eax, byte [ebx + 7]
add ebx, 8
mov byte [edi + 7], al
add edi, 8
add ecx, 0xfffffff8
jne 0x404220
mov dword [esp + 8], ebx
cmp dword [ebp + 8], 0
je 0x4040f0
mov eax, edi
mov ebx, dword [esp + 0x1c]
sub eax, ebx
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x4040f4
mov edi, dword [esp + 0x28]
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
mov esi, dword [esp + 0x10]
je 0x40447b
mov dword [esp + 0x28], edi
mov edi, eax
mov ebx, eax
mov edx, dword [esp + 0x14]
jmp 0x4040f8
mov ecx, eax
cmp eax, 8
jae 0x404220
jmp 0x404261
mov ebx, dword [esp + 0x1c]
test dl, 1
je 0x404437
cmp dword [esp + 0xc], 0
mov ecx, dword [esp + 0x4c]
jle 0x4042eb
mov eax, dword [esp + 0xc]
jne 0x40431a
inc ecx
jmp 0x401c3a
mov edx, dword [esp + 0xc]
mov ebx, edx
not ebx
mov eax, dword [esp + 0x10]
and ebx, eax
not eax
and eax, edx
sub eax, ebx
mov ebx, dword [esp + 0x1c]
je 0x4042eb
mov edx, eax
cmp dword [ebp + 8], 0
mov ecx, eax
je 0x404335
mov eax, ebx
sub eax, esi
add eax, 0x200
mov edx, ecx
cmp ecx, eax
jl 0x404335
mov edx, eax
test edx, edx
mov dword [esp + 0x10], edx
mov dword [esp + 0x28], edi
mov dword [esp + 0x1c], ebx
mov dword [esp + 0xc], ecx
je 0x4043b0
mov eax, esi
and eax, 3
je 0x4043b0
mov ecx, esi
mov ebx, esi
not ebx
and ebx, 3
lea esi, [edx - 1]
cmp ebx, esi
jb 0x404362
mov ebx, esi
lea eax, [ebx + 1]
push eax
push 0x20
mov edi, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [ebx + edi]
inc ecx
sub esi, ebx
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
cmp esi, 4
jge 0x4043b9
test esi, esi
je 0x4043f8
push esi
push 0x20
mov ebx, edi
mov edi, ecx
push ecx
call fcn.0040da00
add esp, 0xc
add edi, esi
mov esi, edi
mov edi, ebx
mov ebx, dword [esp + 0x1c]
jmp 0x4043fa
mov ecx, esi
mov esi, edx
cmp esi, 4
jl 0x404386
mov eax, esi
cmp esi, 7
jl 0x4043c5
mov eax, 7
neg eax
lea edi, [esi + eax]
add edi, 3
and edi, 0xfffffffc
lea eax, [edi + 4]
push eax
push 0x20
mov ebx, ecx
push ecx
call fcn.0040da00
add esp, 0xc
lea ecx, [edi + ebx]
add ecx, 4
sub esi, edi
add esi, 0xfffffffc
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
test esi, esi
jne 0x40438a
mov esi, ecx
cmp dword [ebp + 8], 0
mov ecx, dword [esp + 0x4c]
je 0x404300
mov eax, esi
sub eax, ebx
cmp eax, 0x1ff
jl 0x404300
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x40447b
mov esi, eax
mov dword [esp + 0x1c], eax
mov ecx, dword [esp + 0x4c]
jmp 0x404300
mov ecx, dword [esp + 0x4c]
inc ecx
jmp 0x401c3a
cmp dword [ebp + 8], 0
je 0x404481
mov eax, esi
sub eax, ebx
lea ecx, [eax + 0x1ff]
cmp ecx, 0x200
jl 0x40448e
add edi, eax
push eax
push dword [ebp + 0xc]
push ebx
call dword [ebp + 8]
add esp, 0xc
mov esi, eax
mov ebx, eax
jmp 0x40448e
xor esi, esi
xor ebx, ebx
jmp 0x40448e
mov byte [esi], 0
jmp 0x40448e
xor esi, esi
xor ebx, ebx
mov edi, dword [esp + 0x28]
add edi, esi
sub edi, ebx
mov eax, edi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret