Function at 0x404a30
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
mov ebx, eax
and esp, 0xfffffff0
sub esp, 0x70
fld xword [ebp + 8]
fxam
wait
fnstsw ax
mov edi, dword [ebx + 4]
and ax, 0x4500
mov dword [esp + 0x28], edi
cmp ax, 0x100
je 0x404d88
fld st(0)
fstp xword [esp + 0x40]
movzx edx, word [esp + 0x48]
test dx, dx
js 0x404bf8
fxam
wait
fnstsw ax
and ax, 0x4500
cmp ax, 0x500
je 0x4052b0
fstp xword [esp + 0x30]
mov eax, dword [ebx + 0xc]
and dx, 0x7fff
mov esi, dword [esp + 0x30]
mov edi, dword [esp + 0x34]
mov dword [esp + 0x24], eax
mov word [esp + 0x20], dx
jne 0x404c80
mov ecx, edi
or ecx, esi
jne 0x404de8
cmp eax, 0xe
jbe 0x404c98
lea eax, [esp + 0x58]
mov dword [esp + 0x2c], eax
mov edx, dword [esp + 0x24]
test edx, edx
jle 0x405320
mov byte [esp + 0x58], 0x2e
lea eax, [esp + 0x59]
lea edi, [eax + 1]
mov byte [eax], 0x30
mov dword [esp + 0x1c], edi
mov eax, dword [ebx + 8]
mov dword [esp + 0x14], eax
test eax, eax
jle 0x404ed8
mov edi, dword [esp + 0x2c]
mov eax, dword [esp + 0x1c]
mov edx, dword [ebx + 0xc]
movsx esi, word [esp + 0x20]
sub eax, edi
lea ecx, [eax + edx]
test edx, edx
mov edx, dword [esp + 0x28]
mov dword [esp + 0x24], esi
cmovg eax, ecx
and edx, 0x1c0
cmp edx, 1
mov edi, eax
mov edx, 0x66666667
mov eax, esi
sbb edi, 0xfffffffa
imul edx
mov eax, esi
sar eax, 0x1f
mov dword [esp + 0x20], edi
sar edx, 2
mov ecx, edx
sub ecx, eax
je 0x405395
mov esi, 0x66666667
lea esi, [esi]
mov eax, ecx
add edi, 1
imul esi
mov eax, ecx
sar eax, 0x1f
sar edx, 2
mov ecx, edx
sub ecx, eax
jne 0x404b48
mov eax, edi
sub ax, word [esp + 0x20]
add eax, 2
cwde
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
cmp eax, edi
jle 0x4051c8
sub eax, edi
test dword [esp + 0x28], 0x600
jne 0x4051cd
sub eax, 1
mov esi, dword [esp + 0x28]
mov dword [ebx + 8], eax
jmp 0x404bc4
mov edx, dword [ebx + 0x20]
mov byte [eax + edx], 0x20
mov esi, dword [ebx + 4]
mov edi, dword [ebx + 8]
mov edx, dword [ebx + 0x20]
mov ecx, esi
and ecx, 0x4000
add edx, 1
lea eax, [edi - 1]
mov dword [ebx + 0x20], edx
mov dword [ebx + 8], eax
test edi, edi
jle 0x405310
mov ecx, esi
and ecx, 0x4000
jne 0x404bd8
mov edx, dword [ebx + 0x20]
mov edi, eax
cmp dword [ebx + 0x24], edx
jle 0x404bb0
and esi, 0x2000
mov eax, dword [ebx]
je 0x404b98
mov dword [esp + 4], eax
mov dword [esp], 0x20
call sym._fputc
jmp 0x404b9f
or dword [esp + 0x28], 0x80
mov eax, dword [esp + 0x28]
mov dword [ebx + 4], eax
fxam
wait
fnstsw ax
and ax, 0x4500
cmp ax, 0x500
jne 0x404a82
fstp st(0)
lea eax, [esp + 0x58]
mov dword [ebx + 0xc], 0xffffffff
lea edx, [esp + 0x59]
mov byte [esp + 0x58], 0x2d
mov dword [esp + 0x2c], eax
movzx eax, byte [esp + 0x28]
add edx, 3
pinsrw xmm0, word [str.INInfinity], 0
and eax, 0x20
movzx ecx, al
mov ch, al
or eax, 0x46
movd xmm1, ecx
mov byte [edx - 1], al
mov eax, dword [esp + 0x2c]
mov ecx, ebx
por xmm1, xmm0
pextrw word [edx - 3], xmm1, 0
sub edx, eax
call sym.___pformat_putchars
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
sub word [esp + 0x20], 0x3fff
cmp dword [esp + 0x24], 0xe
jbe 0x404c9e
jmp 0x405298
shld edi, esi, 1
add esi, esi
test edi, edi
jns 0x404c98
mov eax, dword [esp + 0x24]
mov ecx, 0xe
xor edx, edx
sub ecx, eax
mov eax, 4
shl ecx, 2
shld edx, eax, cl
shl eax, cl
test cl, 0x20
je 0x404cc5
mov edx, eax
xor eax, eax
shrd esi, edi, 1
shr edi, 1
add eax, esi
adc edx, edi
test edx, edx
js 0x404e20
shld edx, eax, 1
add eax, eax
mov edi, dword [esp + 0x24]
mov ecx, 0xf
xor esi, esi
sub ecx, edi
shl ecx, 2
shrd eax, edx, cl
shr edx, cl
test cl, 0x20
cmovne eax, edx
cmovne edx, esi
mov esi, eax
mov edi, edx
movzx eax, byte [esp + 0x28]
lea ecx, [esp + 0x58]
mov dword [esp + 0x24], ebx
mov dword [esp + 0x2c], ecx
mov ebx, ecx
and eax, 0x20
mov byte [esp + 0x1c], al
jmp 0x404d45
cmp dword [esp + 0x2c], ebx
jb 0x404d31
mov ecx, dword [esp + 0x24]
mov ecx, dword [ecx + 0xc]
test ecx, ecx
js 0x404d3b
add eax, 0x30
mov edx, ebx
mov byte [edx], al
add ebx, 1
mov eax, edi
or eax, esi
je 0x404eb0
mov ecx, esi
mov eax, esi
mov edx, edi
and ecx, 0xfffffff0
and eax, 0xf
or edx, ecx
je 0x404e48
mov ecx, dword [esp + 0x24]
shrd esi, edi, 4
shr edi, 4
mov edx, dword [ecx + 0xc]
test edx, edx
jle 0x404d71
sub edx, 1
mov dword [ecx + 0xc], edx
test eax, eax
je 0x404d20
cmp eax, 9
jbe 0x404d31
add eax, 0x37
mov edx, ebx
or al, byte [esp + 0x1c]
jmp 0x404d36
fstp st(0)
mov eax, edi
mov dword [ebx + 0xc], 0xffffffff
test ah, 1
je 0x404e30
mov eax, 0x2b
lea edi, [esp + 0x58]
mov byte [esp + 0x58], al
lea eax, [esp + 0x59]
mov dword [esp + 0x2c], edi
movzx edx, byte [esp + 0x28]
and edx, 0x20
mov ecx, edx
or edx, 0x41
or ecx, 0x4e
mov byte [eax + 1], dl
lea edx, [eax + 3]
mov byte [eax], cl
mov byte [eax + 2], cl
mov eax, dword [esp + 0x2c]
mov ecx, ebx
sub edx, eax
call sym.___pformat_putchars
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
test edi, edi
js 0x4053c1
mov eax, 0xffffc001
lea esi, [esi]
shld edi, esi, 1
mov edx, eax
add esi, esi
sub eax, 1
test edi, edi
jns 0x404df8
cmp dword [esp + 0x24], 0xe
mov word [esp + 0x20], dx
ja 0x404cff
jmp 0x404ca2
add word [esp + 0x20], 1
jmp 0x404cdd
test al, 0x40
je 0x40534c
mov eax, 0x20
jmp 0x404da1
cmp dword [esp + 0x2c], ebx
jb 0x404e68
test dword [esp + 0x28], 0x800
jne 0x404e68
mov ecx, dword [esp + 0x24]
mov edx, dword [ecx + 0xc]
test edx, edx
jle 0x404e6e
lea esi, [esi]
nop
mov byte [ebx], 0x2e
add ebx, 1
movzx edx, word [esp + 0x20]
mov ecx, esi
xor ecx, 1
sub edx, 1
or ecx, edi
je 0x404ea5
mov dword [esp + 0x20], eax
lea esi, [esi]
nop
shrd esi, edi, 1
shr edi, 1
mov ecx, edx
sub edx, 1
mov eax, esi
xor eax, 1
or eax, edi
jne 0x404e88
mov eax, dword [esp + 0x20]
mov word [esp + 0x20], cx
xor esi, esi
xor edi, edi
jmp 0x404d75
mov edi, dword [esp + 0x2c]
mov eax, ebx
mov dword [esp + 0x1c], ebx
mov ebx, dword [esp + 0x24]
cmp eax, edi
jne 0x404adf
mov eax, dword [ebx + 0xc]
mov dword [esp + 0x24], eax
jmp 0x404ac0
movsx eax, word [esp + 0x20]
mov ecx, dword [esp + 0x28]
mov dword [esp + 0x18], 2
mov dword [esp + 0x24], eax
and ecx, 0x4000
test byte [esp + 0x28], 0x80
jne 0x405188
test dword [esp + 0x28], 0x100
jne 0x405268
test byte [esp + 0x28], 0x40
jne 0x4052e8
test ecx, ecx
je 0x4051a2
mov eax, dword [ebx]
test dword [esp + 0x28], 0x2000
jne 0x4051f8
mov edx, dword [ebx + 0x20]
mov byte [eax + edx], 0x30
mov eax, dword [ebx + 4]
mov edx, eax
mov dword [esp + 0x28], eax
mov eax, dword [ebx + 0x20]
and edx, 0x4000
add eax, 1
mov dword [ebx + 0x20], eax
test edx, edx
je 0x4051b4
mov edi, dword [esp + 0x28]
mov ecx, dword [ebx]
mov edx, edi
and edx, 0x20
or edx, 0x58
and edi, 0x2000
jne 0x4051e0
mov byte [ecx + eax], dl
mov eax, dword [ebx + 0x20]
mov edx, dword [ebx + 8]
add eax, 1
mov dword [ebx + 0x20], eax
test edx, edx
jle 0x405000
mov esi, dword [ebx + 4]
test esi, 0x200
je 0x405000
sub edx, 1
mov dword [ebx + 8], edx
jmp 0x404fbd
mov byte [edx + eax], 0x30
mov ecx, dword [ebx + 8]
mov eax, dword [ebx + 0x20]
add eax, 1
lea edx, [ecx - 1]
mov dword [ebx + 0x20], eax
mov dword [ebx + 8], edx
test ecx, ecx
jle 0x405000
mov esi, dword [ebx + 4]
test esi, 0x4000
jne 0x404fcc
mov ecx, edx
cmp dword [ebx + 0x24], eax
jle 0x404faa
and esi, 0x2000
mov edx, dword [ebx]
je 0x404fa0
mov dword [esp + 4], edx
mov dword [esp], 0x30
call sym._fputc
mov ecx, dword [ebx + 8]
mov eax, dword [ebx + 0x20]
lea edx, [ecx - 1]
add eax, 1
mov dword [ebx + 0x20], eax
mov dword [ebx + 8], edx
test ecx, ecx
jg 0x404fba
lea esi, [esi]
mov edi, dword [esp + 0x1c]
mov esi, edi
cmp dword [esp + 0x2c], edi
jb 0x40502a
jmp 0x405079
movzx eax, word [ebx + 0x1c]
mov word [esp + 0x56], ax
test ax, ax
jne 0x4050f8
mov eax, dword [esp + 0x2c]
cmp esi, eax
je 0x405079
movsx edx, byte [esi - 1]
sub esi, 1
mov eax, edx
cmp dl, 0x2e
je 0x4050e8
cmp edx, 0x2c
je 0x405010
mov edi, dword [ebx + 4]
test edi, 0x4000
jne 0x405054
mov ecx, dword [ebx + 0x20]
cmp dword [ebx + 0x24], ecx
jle 0x40506b
and edi, 0x2000
mov ecx, dword [ebx]
jne 0x405170
mov edx, dword [ebx + 0x20]
mov byte [ecx + edx], al
mov ecx, dword [ebx + 0x20]
mov eax, dword [esp + 0x2c]
add ecx, 1
mov dword [ebx + 0x20], ecx
cmp esi, eax
jne 0x40502a
mov edx, dword [ebx + 0xc]
mov eax, dword [ebx + 4]
lea esi, [edx - 1]
mov dword [ebx + 0xc], esi
test edx, edx
jg 0x4050b8
jmp 0x40510d
mov eax, dword [ebx + 0x20]
mov byte [edx + eax], 0x30
mov eax, dword [ebx + 4]
mov ecx, dword [ebx + 0xc]
mov edx, dword [ebx + 0x20]
mov edi, eax
and edi, 0x4000
add edx, 1
lea esi, [ecx - 1]
mov dword [ebx + 0x20], edx
mov dword [ebx + 0xc], esi
test ecx, ecx
jle 0x405118
mov edi, eax
and edi, 0x4000
jne 0x4050cc
mov edx, dword [ebx + 0x20]
mov ecx, esi
cmp dword [ebx + 0x24], edx
jle 0x4050a8
mov edx, dword [ebx]
test ah, 0x20
je 0x405090
mov dword [esp + 4], edx
mov dword [esp], 0x30
call sym._fputc
jmp 0x405097
mov eax, ebx
call sym.___pformat_emit_radix_point
jmp 0x405022
mov ecx, ebx
mov edx, 1
lea eax, [esp + 0x56]
call sym.___pformat_wputchars
jmp 0x405022
mov edi, eax
and edi, 0x4000
lea esi, [esi]
test edi, edi
jne 0x405124
mov edx, dword [ebx + 0x20]
cmp dword [ebx + 0x24], edx
jle 0x405143
mov edx, eax
mov ecx, dword [ebx]
and edx, 0x20
or edx, 0x50
test ah, 0x20
jne 0x405210
mov eax, dword [ebx + 0x20]
mov byte [ecx + eax], dl
mov eax, dword [ebx + 4]
mov edx, dword [ebx + 0x20]
mov edi, dword [esp + 0x18]
add edx, 1
add dword [ebx + 8], edi
or eax, 0x1c0
mov dword [ebx + 0x20], edx
mov ecx, ebx
mov dword [ebx + 4], eax
mov eax, dword [esp + 0x24]
lea esp, [ebp - 0xc]
pop ebx
pop esi
cdq
pop edi
pop ebp
jmp sym.___pformat_int.isra.0
mov dword [esp + 4], ecx
mov dword [esp], edx
call sym._fputc
mov ecx, dword [ebx + 0x20]
jmp 0x40506b
test ecx, ecx
jne 0x405230
mov eax, dword [ebx + 0x20]
cmp dword [ebx + 0x24], eax
jg 0x405230
add eax, 1
mov dword [ebx + 0x20], eax
mov eax, dword [ebx + 0x20]
cmp dword [ebx + 0x24], eax
jg 0x404f1f
add eax, 1
mov dword [ebx + 0x20], eax
cmp eax, dword [ebx + 0x24]
jge 0x404f76
jmp 0x404f56
mov eax, 0xffffffff
mov ecx, dword [esp + 0x28]
mov dword [ebx + 8], eax
and ecx, 0x4000
jmp 0x404ef3
mov dword [esp + 4], ecx
mov dword [esp], edx
call sym._fputc
mov eax, dword [ebx + 0x20]
jmp 0x404f76
mov dword [esp + 4], eax
mov dword [esp], 0x30
call sym._fputc
jmp 0x404f36
mov dword [esp], edx
mov dword [esp + 4], ecx
call sym._fputc
mov eax, dword [ebx + 4]
mov edx, dword [ebx + 0x20]
jmp 0x405143
mov eax, dword [ebx]
test dword [esp + 0x28], 0x2000
jne 0x405337
mov edx, dword [ebx + 0x20]
mov byte [eax + edx], 0x2d
mov eax, dword [ebx + 0x20]
mov edi, dword [ebx + 4]
add eax, 1
mov ecx, edi
mov dword [esp + 0x28], edi
mov dword [ebx + 0x20], eax
and ecx, 0x4000
jmp 0x404f17
test ecx, ecx
jne 0x405278
mov eax, dword [ebx + 0x20]
cmp dword [ebx + 0x24], eax
jle 0x40519c
mov eax, dword [ebx]
test dword [esp + 0x28], 0x2000
jne 0x4053a2
mov edx, dword [ebx + 0x20]
mov byte [eax + edx], 0x2b
jmp 0x405247
mov eax, edi
or eax, esi
jne 0x404cff
jmp 0x404ab8
fstp st(0)
mov dword [ebx + 0xc], 0xffffffff
test dword [esp + 0x28], 0x100
je 0x405359
mov eax, 0x2b
mov byte [esp + 0x58], al
lea eax, [esp + 0x58]
lea edx, [esp + 0x59]
mov dword [esp + 0x2c], eax
jmp 0x404c34
test ecx, ecx
je 0x40536f
mov eax, dword [ebx]
test dword [esp + 0x28], 0x2000
jne 0x405380
mov edx, dword [ebx + 0x20]
mov byte [eax + edx], 0x20
jmp 0x405247
mov dword [esp + 0x28], esi
jmp 0x404ef3
mov eax, dword [esp + 0x2c]
test dword [esp + 0x28], 0x800
je 0x404ad5
jmp 0x404acc
mov dword [esp + 4], eax
mov dword [esp], 0x2d
call sym._fputc
jmp 0x405247
lea eax, [esp + 0x58]
mov dword [esp + 0x2c], eax
jmp 0x404db1
test byte [esp + 0x28], 0x40
jne 0x4053b7
lea eax, [esp + 0x58]
mov dword [esp + 0x2c], eax
mov edx, eax
jmp 0x404c34
mov eax, dword [ebx + 0x20]
cmp dword [ebx + 0x24], eax
jg 0x4052f0
jmp 0x40519c
mov dword [esp + 4], eax
mov dword [esp], 0x20
call sym._fputc
jmp 0x405247
mov dword [esp + 0x18], 2
jmp 0x404b6c
mov dword [esp + 4], eax
mov dword [esp], 0x2b
call sym._fputc
jmp 0x405247
mov eax, 0x20
jmp 0x4052cc
mov eax, 0xffffc002
cmp dword [esp + 0x24], 0xe
mov word [esp + 0x20], ax
jbe 0x404ca2
jmp 0x404cff