Function at 0x40d210
Capabilities:
Encode data using add xor sub operations
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebx
push esi
push edi
lea eax, [ecx + 4]
mov ebx, 0x25
jmp 0x40d220
mov edx, dword [eax]
mov esi, dword [eax - 4]
xor esi, edx
mov edi, edx
and edi, 1
imul edi, edi, 0x9908b0df
and esi, 0x7ffffffe
xor esi, dword [eax - 4]
add eax, 0x18
shr esi, 1
xor esi, edi
xor esi, dword [eax + 0x618]
mov dword [eax - 0x1c], esi
mov esi, dword [eax - 0x14]
mov edi, esi
xor edi, edx
and edi, 0x7ffffffe
xor edi, edx
mov edx, esi
and edx, 1
imul edx, edx, 0x9908b0df
shr edi, 1
xor edi, edx
xor edi, dword [eax + 0x61c]
mov edx, dword [eax - 0x10]
mov dword [eax - 0x18], edi
mov edi, edx
xor edi, esi
and edi, 0x7ffffffe
xor edi, esi
mov esi, edx
and esi, 1
imul esi, esi, 0x9908b0df
shr edi, 1
xor edi, esi
xor edi, dword [eax + 0x620]
mov esi, dword [eax - 0xc]
mov dword [eax - 0x14], edi
mov edi, esi
xor edi, edx
and edi, 0x7ffffffe
xor edi, edx
mov edx, esi
and edx, 1
imul edx, edx, 0x9908b0df
shr edi, 1
xor edi, edx
xor edi, dword [eax + 0x624]
mov dword [eax - 0x10], edi
mov edi, dword [eax - 8]
mov edx, edi
xor edx, esi
and edx, 0x7ffffffe
xor edx, esi
mov esi, edi
and esi, 1
imul esi, esi, 0x9908b0df
shr edx, 1
xor edx, esi
xor edx, dword [eax + 0x628]
mov esi, edi
mov dword [eax - 0xc], edx
mov edx, dword [eax - 4]
xor esi, edx
and edx, 1
imul edx, edx, 0x9908b0df
and esi, 0x7ffffffe
xor esi, edi
shr esi, 1
xor esi, edx
xor esi, dword [eax + 0x62c]
sub ebx, 1
mov dword [eax - 8], esi
jne 0x40d220
mov eax, dword [ecx + 0x37c]
mov edx, dword [ecx + 0x378]
xor edx, eax
mov esi, eax
and esi, 1
imul esi, esi, 0x9908b0df
and edx, 0x7ffffffe
xor edx, dword [ecx + 0x378]
mov ebx, 0x42
shr edx, 1
xor edx, esi
xor edx, dword [ecx + 0x9ac]
mov dword [ecx + 0x378], edx
mov edx, dword [ecx + 0x380]
mov esi, edx
xor esi, eax
and esi, 0x7ffffffe
xor esi, eax
shr esi, 1
mov eax, edx
and eax, 1
imul eax, eax, 0x9908b0df
xor esi, eax
xor esi, dword [ecx + 0x9b0]
mov eax, dword [ecx + 0x384]
mov dword [ecx + 0x37c], esi
mov esi, eax
xor esi, edx
and esi, 0x7ffffffe
xor esi, edx
mov edx, eax
shr esi, 1
and edx, 1
imul edx, edx, 0x9908b0df
xor esi, edx
xor esi, dword [ecx + 0x9b4]
mov edx, dword [ecx + 0x388]
mov dword [ecx + 0x380], esi
mov esi, eax
xor esi, edx
and esi, 0x7ffffffe
xor esi, eax
mov eax, edx
and eax, 1
imul eax, eax, 0x9908b0df
shr esi, 1
xor esi, eax
xor esi, dword [ecx + 0x9b8]
mov eax, dword [ecx + 0x38c]
mov dword [ecx + 0x384], esi
mov esi, eax
and eax, 1
imul eax, eax, 0x9908b0df
xor esi, edx
and esi, 0x7ffffffe
xor esi, edx
shr esi, 1
xor esi, eax
xor esi, dword [ecx + 0x9bc]
lea eax, [ecx + 0x390]
mov dword [ecx + 0x388], esi
mov edx, dword [eax]
mov esi, dword [eax - 4]
xor esi, edx
mov edi, edx
and edi, 1
imul edi, edi, 0x9908b0df
and esi, 0x7ffffffe
xor esi, dword [eax - 4]
add eax, 0x18
shr esi, 1
xor esi, edi
xor esi, dword [eax - 0x3a8]
mov dword [eax - 0x1c], esi
mov esi, dword [eax - 0x14]
mov edi, esi
xor edi, edx
and edi, 0x7ffffffe
xor edi, edx
mov edx, esi
and edx, 1
imul edx, edx, 0x9908b0df
shr edi, 1
xor edi, edx
xor edi, dword [eax - 0x3a4]
mov edx, dword [eax - 0x10]
mov dword [eax - 0x18], edi
mov edi, edx
xor edi, esi
and edi, 0x7ffffffe
xor edi, esi
mov esi, edx
and esi, 1
imul esi, esi, 0x9908b0df
shr edi, 1
xor edi, esi
xor edi, dword [eax - 0x3a0]
mov esi, dword [eax - 0xc]
mov dword [eax - 0x14], edi
mov edi, esi
xor edi, edx
and edi, 0x7ffffffe
xor edi, edx
mov edx, esi
and edx, 1
imul edx, edx, 0x9908b0df
shr edi, 1
xor edi, edx
xor edi, dword [eax - 0x39c]
mov dword [eax - 0x10], edi
mov edi, dword [eax - 8]
mov edx, edi
xor edx, esi
and edx, 0x7ffffffe
xor edx, esi
mov esi, edi
and esi, 1
imul esi, esi, 0x9908b0df
shr edx, 1
xor edx, esi
xor edx, dword [eax - 0x398]
mov esi, edi
mov dword [eax - 0xc], edx
mov edx, dword [eax - 4]
xor esi, edx
and edx, 1
imul edx, edx, 0x9908b0df
and esi, 0x7ffffffe
xor esi, edi
shr esi, 1
xor esi, edx
xor esi, dword [eax - 0x394]
sub ebx, 1
mov dword [eax - 8], esi
jne 0x40d407
mov eax, dword [ecx]
mov edx, dword [ecx + 0x9bc]
xor edx, eax
and eax, 1
imul eax, eax, 0x9908b0df
and edx, 0x7ffffffe
xor edx, dword [ecx + 0x9bc]
pop edi
shr edx, 1
xor edx, eax
xor edx, dword [ecx + 0x630]
pop esi
mov dword [ecx + 0x9c0], ebx
mov dword [ecx + 0x9bc], edx
pop ebx
ret