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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xc
mov edi, dword [esp + 0x24]
mov esi, dword [esp + 0x20]
lea ebx, [edi - 1]
nop word cs:[eax + eax]
cmp byte [ebx + 1], 0
lea ebx, [ebx + 1]
jne 0x4e3aef
sub ebx, edi
test edi, edi
je 0x4e3b37
mov eax, dword [esi + 0x18]
lea ebp, [esi + 4]
cmp eax, 0x10
jb 0x4e3b1a
mov ecx, dword [ebp]
cmp ecx, edi
ja 0x4e3b37
cmp eax, 0x10
jb 0x4e3b22
mov edx, dword [ebp]
jmp 0x4e3b24
mov ecx, ebp
cmp ecx, edi
jbe 0x4e3b10
jmp 0x4e3b37
mov edx, ebp
mov ecx, dword [esi + 0x14]
add edx, ecx
cmp edx, edi
jbe 0x4e3b37
cmp eax, 0x10
jb 0x4e3b8f
mov edx, dword [ebp]
jmp 0x4e3b91
sub esp, 4
push 0
push ebx
push esi
call fcn.004e23c7
add esp, 0x10
test al, al
je 0x4e3b85
mov eax, dword [esi + 0x18]
lea ebp, [esi + 4]
cmp eax, 0x10
jb 0x4e3b5e
mov ecx, dword [ebp]
test ebx, ebx
jne 0x4e3b64
jmp 0x4e3b75
mov ecx, ebp
test ebx, ebx
je 0x4e3b75
sub esp, 4
push ebx
push edi
push ecx
call 0x83c877
add esp, 0x10
mov eax, dword [esi + 0x18]
cmp eax, 0x10
jb 0x4e3b7d
mov ebp, dword [ebp]
mov dword [esi + 0x14], ebx
mov byte [ebp + ebx], 0
mov eax, esi
add esp, 0xc
pop esi
pop edi
pop ebx
pop ebp
ret
mov edx, ebp
sub edi, edx
mov edx, ecx
sub edx, edi
jb 0x4e3c1e
cmp edx, ebx
ja 0x4e3ba3
mov ebx, edx
add ebx, edi
cmp ecx, ebx
jb 0x4e3c2e
cmp eax, 0xf
ja 0x4e3bb6
mov eax, ebp
jmp 0x4e3bb9
mov eax, dword [esi + 4]
mov dword [esi + 0x14], ebx
mov byte [eax + ebx], 0
mov ebx, dword [esi + 0x14]
cmp ebx, edi
jbe 0x4e3c05
test edi, edi
je 0x4e3b85
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x18]
cmp ecx, 0xf
mov edx, eax
ja 0x4e3bda
mov edx, ebp
sub ebx, edi
je 0x4e3bf4
add edi, edx
sub esp, 4
push ebx
push edi
push edx
call 0x83c990
add esp, 0x10
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x18]
cmp ecx, 0xf
ja 0x4e3bfb
mov eax, ebp
mov dword [esi + 0x14], ebx
add eax, ebx
mov byte [eax], 0
jmp 0x4e3b85
cmp dword [esi + 0x18], 0xf
jbe 0x4e3c0e
mov ebp, dword [esi + 4]
mov dword [esi + 0x14], 0
mov byte [ebp], 0
jmp 0x4e3b85
sub esp, 0xc
push 0x78d450
call 0x838e5b
add esp, 0xc
sub esp, 0xc
push 0x78d450
call 0x838e5b
add esp, 0xc
nop
push ebp
push ebx
push edi
push esi
sub esp, 8
mov ebp, dword [esp + 0x20]
mov eax, 0x80000000
mov edi, dword [esp + 0x24]
xor edi, eax
mov ecx, dword [esp + 0x28]
xor ecx, eax
sub ecx, edi
cmp ecx, 0xffffffff
je 0x4e3e4a
mov dword [esp], edi
lea ebx, [ecx + 1]
mov edi, ecx
mov dword [esp + 4], edi
nop word cs:[eax + eax]
test edi, edi
je 0x4e3cef
mov eax, dword [ebp]
cmp eax, 0x270
jne 0x4e3cff
mov ecx, dword [ebp + 4]
mov eax, 0xfffffd90
nop word cs:[eax + eax]
and ecx, 0x80000000
mov edx, dword [ebp + eax*4 + 0x9c8]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 0xff8]
xor edx, esi
mov dword [ebp + eax*4 + 0x1384], edx
inc eax
jne 0x4e3c9f
mov eax, dword [ebp]
jmp 0x4e3dda
xor ecx, ecx
xor esi, esi
jmp 0x4e3e16
cmp eax, 0x4e0
jb 0x4e3dda
mov ecx, dword [ebp + 0x9c4]
xor eax, eax
nop word cs:[eax + eax]
and ecx, 0x80000000
mov edx, dword [ebp + eax*4 + 0x9c8]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 0xff8]
xor edx, esi
mov dword [ebp + eax*4 + 4], edx
inc eax
cmp eax, 0xe3
jne 0x4e3d1f
mov ecx, dword [ebp + 0xd50]
mov eax, 0x80000000
and ecx, eax
xor eax, eax
nop word [eax + eax]
mov edx, dword [ebp + eax*4 + 0xd54]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 4]
xor edx, esi
mov dword [ebp + eax*4 + 0x390], edx
and ecx, 0x80000000
inc eax
cmp eax, 0x18c
jne 0x4e3d6f
mov eax, dword [ebp + 4]
mov edx, eax
and edx, 0x7ffffffe
or edx, ecx
shr edx, 1
and eax, 1
neg eax
and eax, 0x9908b0df
xor eax, dword [ebp + 0x634]
xor eax, edx
mov dword [ebp + 0x9c0], eax
mov dword [ebp], 0
xor eax, eax
lea ecx, [eax + 1]
mov dword [ebp], ecx
mov eax, dword [ebp + eax*4 + 4]
mov ecx, eax
shr ecx, 0xb
and ecx, dword [ebp + 0x1384]
xor ecx, eax
mov eax, ecx
shl eax, 7
and eax, 0x9d2c5680
xor eax, ecx
mov edx, eax
shl edx, 0xf
and edx, 0xefc60000
xor edx, eax
mov ecx, edx
shr ecx, 0x12
xor ecx, edx
mov esi, 0xffffffff
xor edx, edx
mov eax, ecx
div ebx
mov edi, eax
xor edx, edx
mov eax, esi
div ebx
cmp edi, eax
mov edi, dword [esp + 4]
jb 0x4e3e3a
xor edx, edx
mov eax, esi
div ebx
cmp edx, edi
jne 0x4e3c7f
xor edx, edx
mov eax, ecx
div ebx
mov eax, edx
mov edi, dword [esp]
jmp 0x4e3fb1
mov eax, dword [ebp]
cmp eax, 0x270
jne 0x4e3ea0
mov ecx, dword [ebp + 4]
mov eax, 0xfffffd90
nop dword [eax]
and ecx, 0x80000000
mov edx, dword [ebp + eax*4 + 0x9c8]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 0xff8]
xor edx, esi
mov dword [ebp + eax*4 + 0x1384], edx
inc eax
jne 0x4e3e5f
mov eax, dword [ebp]
jmp 0x4e3f7a
cmp eax, 0x4e0
jb 0x4e3f7a
mov ecx, dword [ebp + 0x9c4]
xor eax, eax
nop word cs:[eax + eax]
and ecx, 0x80000000
mov edx, dword [ebp + eax*4 + 0x9c8]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 0xff8]
xor edx, esi
mov dword [ebp + eax*4 + 4], edx
inc eax
cmp eax, 0xe3
jne 0x4e3ebf
mov ecx, 0x80000000
and ecx, dword [ebp + 0xd50]
xor eax, eax
nop dword [eax + eax]
mov edx, dword [ebp + eax*4 + 0xd54]
mov esi, edx
and esi, 0x7ffffffe
or esi, ecx
shr esi, 1
mov ecx, edx
and edx, 1
neg edx
and edx, 0x9908b0df
xor edx, dword [ebp + eax*4 + 4]
xor edx, esi
mov dword [ebp + eax*4 + 0x390], edx
and ecx, 0x80000000
inc eax
cmp eax, 0x18c
jne 0x4e3f0f
mov eax, dword [ebp + 4]
mov edx, eax
and edx, 0x7ffffffe
or edx, ecx
shr edx, 1
and eax, 1
neg eax
and eax, 0x9908b0df
xor eax, dword [ebp + 0x634]
xor eax, edx
mov dword [ebp + 0x9c0], eax
mov dword [ebp], 0
xor eax, eax
lea ecx, [eax + 1]
mov dword [ebp], ecx
mov eax, dword [ebp + eax*4 + 4]
mov ecx, eax
shr ecx, 0xb
and ecx, dword [ebp + 0x1384]
xor ecx, eax
mov eax, ecx
shl eax, 7
and eax, 0x9d2c5680
xor eax, ecx
mov ecx, eax
shl ecx, 0xf
and ecx, 0xefc60000
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
add eax, edi
xor eax, 0x80000000
add esp, 8
pop esi
pop edi
pop ebx
pop ebp
ret