Function at 0x40fa80
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x13c8
call fcn.0049bd20
mov eax, dword [0x5917ec]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
mov dword [ebp - 0x13b4], ecx
mov ecx, dword [ebp + 0xc]
mov dword [ebp - 0x13c8], ecx
mov dword [ebp - 0x13c0], eax
mov dword [ebp - 0x13c4], edx
mov ecx, dword [ecx]
mov dword [ebp - 0x13b8], ecx
test ecx, ecx
je 0x40fcc2
mov ecx, 0x5a4d
cmp word [eax], cx
jne 0x40fcc2
movups xmm0, xmmword [str.abcdefghigklmnopqrstuvwxyz12345]
movups xmmword [ebp - 0x24], xmm0
movups xmm0, xmmword [0x54cd48]
movups xmmword [ebp - 0x14], xmm0
call fcn.004772d5
mov edx, eax
mov dword [ebp - 0x28], 0xffffffff
mov dword [ebp - 0x13a8], edx
mov ecx, 1
mov eax, edx
shr eax, 0x1e
xor eax, edx
imul edx, eax, 0x6c078965
add edx, ecx
mov dword [ebp + ecx*4 - 0x13a8], edx
inc ecx
cmp ecx, 0x270
jl 0x40fb05
push ebx
push esi
push edi
mov dword [ebp - 0x13ac], 0x270
mov edi, 2
mov dword [ebp - 0x13b0], 0x1e
lea ebx, [edi - 1]
xor ecx, ecx
xor eax, eax
test ebx, ebx
je 0x40fb5b
lea ecx, [ebp - 0x13ac]
call fcn.0040f7c0
mov ecx, eax
or eax, 0xffffffff
xor edx, edx
div edi
mov esi, eax
mov dword [ebp - 0x13bc], edx
xor edx, edx
mov eax, ecx
div edi
cmp eax, esi
jb 0x40fb79
cmp dword [ebp - 0x13bc], ebx
jne 0x40fb43
xor edx, edx
mov eax, ecx
div edi
lea eax, [edi - 1]
cmp edx, eax
je 0x40fb96
mov al, byte [ebp + edx - 0x24]
mov cl, byte [ebp + edi - 0x25]
mov byte [ebp + edi - 0x25], al
mov byte [ebp + edx - 0x24], cl
inc edi
sub dword [ebp - 0x13b0], 1
jne 0x40fb40
mov esi, dword [ebp - 0x13b8]
lea ebx, [esi + 0x20]
push ebx
call fcn.0049b8d7
push ebx
mov edi, eax
push 0
push edi
call fcn.004c0d00
push esi
mov esi, dword [ebp - 0x13c0]
push esi
push edi
call fcn.004c1b00
mov ecx, dword [ebp - 0x13b8]
add esp, 0x1c
movups xmm1, xmmword [ebp - 0x14]
movups xmm0, xmmword [ebp - 0x24]
pextrw eax, xmm1, 6
movups xmmword [edi + ecx + 1], xmm0
movaps xmm0, xmm1
movq qword [edi + ecx + 0x11], xmm1
psrldq xmm0, 8
movd dword [edi + ecx + 0x19], xmm0
mov word [edi + ecx + 0x1d], ax
psrldq xmm1, 0xe
movd eax, xmm1
mov byte [edi + ecx + 0x1f], al
mov eax, dword [ebp - 0x13c4]
test eax, eax
je 0x40fc19
mov dword [eax], 0x20
mov ecx, dword [esi + 0x3c]
mov edx, 0x10b
mov dword [ebp - 0x13b0], ecx
movzx eax, word [ecx + edi + 0x18]
cmp ax, dx
jne 0x40fc3b
add dword [ecx + edi + 0x9c], 0x20
jmp 0x40fc4d
mov edx, 0x20b
cmp ax, dx
jne 0x40fcb5
add dword [ecx + edi + 0xac], 0x20
xor ecx, ecx
test edi, edi
je 0x40fca8
test ebx, ebx
je 0x40fca8
mov esi, dword [ebp - 0x13b0]
add esi, 0x58
mov eax, esi
shr eax, 1
push eax
push edi
push ecx
mov ecx, dword [ebp - 0x13b4]
call fcn.0040f950
mov ecx, eax
mov eax, ebx
sub eax, esi
sub eax, 4
shr eax, 1
push eax
mov eax, dword [ebp - 0x13b0]
add eax, 0x5c
add eax, edi
push eax
push ecx
mov ecx, dword [ebp - 0x13b4]
call fcn.0040f950
mov ecx, eax
test bl, 1
je 0x40fca8
movsx ax, byte [edi + ebx - 1]
movzx eax, ax
add ecx, eax
lea eax, [ecx + ebx]
mov ecx, dword [ebp - 0x13b0]
mov dword [ecx + edi + 0x58], eax
mov eax, dword [ebp - 0x13c8]
mov dword [eax], ebx
mov eax, edi
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.0049b8b8
mov esp, ebp
pop ebp
ret 0xc