Function at 0x1002bbd0
Capabilities:
Contain obfuscated stackstrings

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x100f061c
mov eax, dword fs:[0]
push eax
sub esp, 0x38
push esi
push edi
mov eax, dword [0x10449004]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
mov dword [ebp - 0x10], edi
lea ecx, [edi + 8]
call fcn.1002cdb0
mov dword [ebp - 4], 0
mov dword [edi + 0x3784], 0
mov dword [edi + 0x3780], 0
mov dword [edi + 0x3788], 0
mov byte [ebp - 4], 1
mov dword [edi + 0x3790], 0
mov dword [edi + 0x378c], 0
mov dword [edi + 0x3794], 0
mov byte [ebp - 4], 2
lea ecx, [edi + 0x3798]
call fcn.1002d050
lea ecx, [edi + 0x3bd8]
call fcn.10047bc0
mov byte [ebp - 4], 3
mov dword [edi + 0x3e04], 0
mov dword [edi + 0x3e00], 0
mov dword [edi + 0x3e08], 0
mov byte [ebp - 4], 4
mov dword [edi + 0x3e10], 0
mov dword [edi + 0x3e0c], 0
mov dword [edi + 0x3e14], 0
mov byte [ebp - 4], 5
mov dword [edi + 0x3e1c], 0
mov dword [edi + 0x3e18], 0
mov dword [edi + 0x3e20], 0
mov byte [ebp - 4], 6
mov dword [edi + 0x3e28], 0
mov dword [edi + 0x3e24], 0
mov dword [edi + 0x3e2c], 0
mov byte [ebp - 4], 7
lea eax, [edi + 0x3e30]
mov dword [ebp - 0x14], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 9
lea eax, [edi + 0x3ed0]
mov dword [edi + 0x3e40], 0
mov ecx, 0x8c
mov dword [edi + 0x3e44], 0
mov dword [edi + 0x3e5c], 0
mov dword [edi + 0x3e60], 0
mov dword [edi + 0x3e6c], 0
mov dword [edi + 0x3e70], 0
mov dword [edi + 0x3e74], 0
mov dword [edi + 0x3e78], 0
mov dword [edi + 0x3ea8], 0
mov dword [edi + 0x3eac], 0
mov dword [eax + 4], 0xffffffff
lea eax, [eax + 0xc]
mov dword [eax - 0xc], 0xffffffff
mov word [eax - 4], 0
sub ecx, 1
jne 0x1002bd81
lea ecx, [edi + 0x4560]
mov dword [ebp - 0x14], ecx
mov dword [ecx + 0x11c], 0
mov dword [ecx + 0x118], 0
mov dword [ecx + 0x120], 0
mov byte [ebp - 4], 0xa
mov dword [ecx + 0x128], 0
mov dword [ecx + 0x124], 0
mov dword [ecx + 0x12c], 0
mov byte [ebp - 4], 0xb
call fcn.10033960
mov byte [ebp - 4], 0xc
lea eax, [edi + 0x46bc]
push 0x3c
xorps xmm0, xmm0
movups xmmword [edi + 0x46a8], xmm0
mov dword [edi + 0x46b8], 0
push 0
push eax
mov dword [eax + 0xc], 0
mov dword [eax + 0x10], 0
mov dword [eax + 0x14], 0
mov dword [eax + 0x18], 0
mov dword [eax + 0x1c], 0
mov dword [eax + 0x20], 0
mov dword [eax + 0x24], 0
mov dword [eax + 0x28], 0
mov dword [eax + 0x2c], 0
mov dword [eax + 0x30], 0
mov dword [eax + 0x34], 0
mov dword [eax + 0x38], 0
call sub.VCRUNTIME140.dll_memset
lea eax, [edi + 0x46f8]
mov dword [eax + 0x10], 0
push 0x60
push 0
push eax
mov dword [eax + 0x14], 0
mov dword [eax + 0x18], 0
mov dword [eax + 0x1c], 0
mov dword [eax + 0x20], 0
mov dword [eax + 0x24], 0
mov dword [eax + 0x28], 0
mov dword [eax + 0x2c], 0
mov dword [eax + 0x30], 0
mov dword [eax + 0x34], 0
mov dword [eax + 0x3c], 0
mov dword [eax + 0x40], 0
mov dword [eax + 0x44], 0
mov dword [eax + 0x48], 0
mov dword [eax + 0x58], 0
mov dword [eax + 0x5c], 0
call sub.VCRUNTIME140.dll_memset
mov dword [edi + 0x475c], 0
mov dword [edi + 0x4758], 0
mov dword [edi + 0x4760], 0
mov byte [ebp - 4], 0xd
mov dword [edi + 0x4768], 0
mov dword [edi + 0x4764], 0
mov dword [edi + 0x476c], 0
mov byte [ebp - 4], 0xe
mov dword [edi + 0x4774], 0
mov dword [edi + 0x4770], 0
mov dword [edi + 0x4778], 0
mov byte [ebp - 4], 0xf
mov dword [edi + 0x4780], 0
mov dword [edi + 0x477c], 0
mov dword [edi + 0x4784], 0
mov byte [ebp - 4], 0x10
mov dword [edi + 0x478c], 0
mov dword [edi + 0x4788], 0
mov dword [edi + 0x4790], 0
mov byte [ebp - 4], 0x11
mov dword [edi + 0x4798], 0
mov dword [edi + 0x4794], 0
mov dword [edi + 0x479c], 0
mov byte [ebp - 4], 0x12
mov dword [edi + 0x47a4], 0
mov dword [edi + 0x47a0], 0
mov dword [edi + 0x47a8], 0
mov byte [ebp - 4], 0x13
mov dword [edi + 0x47b0], 0
mov dword [edi + 0x47ac], 0
mov dword [edi + 0x47b4], 0
mov byte [ebp - 4], 0x14
mov dword [edi + 0x47c0], 0
mov dword [edi + 0x47bc], 0
mov dword [edi + 0x47c4], 0
mov byte [ebp - 4], 0x15
mov dword [edi + 0x4810], 0
mov dword [edi + 0x4814], 0
mov dword [edi + 0x4818], 0
mov dword [edi + 0x481c], 0
mov dword [edi + 0x483c], 0
mov dword [edi + 0x4840], 0
mov dword [edi + 0x4844], 0
mov dword [edi + 0x4848], 0
mov dword [edi + 0x484c], 0
mov dword [edi + 0x4850], 0
mov dword [edi + 0x4854], 0
mov dword [edi + 0x4858], 0
mov dword [edi + 0x4874], 0
mov dword [edi + 0x4878], 0
mov dword [edi + 0x487c], 0
mov dword [edi + 0x4880], 0
mov dword [edi + 0x4868], 0
mov dword [edi + 0x4870], 0
mov dword [edi + 0x486c], 0
mov dword [edi + 0x4884], 0
mov dword [edi + 0x4890], 0x7f7fffff
mov dword [edi + 0x488c], 0x7f7fffff
mov dword [edi + 0x4888], 0x7f7fffff
mov dword [edi + 0x48a0], 0
mov dword [edi + 0x48a4], 0
mov dword [edi + 0x48a8], 0
mov dword [edi + 0x48ac], 0
mov dword [edi + 0x4894], 0
mov dword [edi + 0x489c], 0
mov dword [edi + 0x4898], 0
mov dword [edi + 0x48b0], 0
mov dword [edi + 0x48bc], 0x7f7fffff
mov dword [edi + 0x48b8], 0x7f7fffff
mov dword [edi + 0x48b4], 0x7f7fffff
mov dword [edi + 0x48cc], 0
mov dword [edi + 0x48d0], 0
mov dword [edi + 0x48d4], 0
mov dword [edi + 0x48d8], 0
mov dword [edi + 0x48c0], 0
mov dword [edi + 0x48c8], 0
mov dword [edi + 0x48c4], 0
mov dword [edi + 0x48dc], 0
mov dword [edi + 0x48e8], 0x7f7fffff
mov dword [edi + 0x48e4], 0x7f7fffff
mov dword [edi + 0x48e0], 0x7f7fffff
mov dword [edi + 0x48f8], 0
mov dword [edi + 0x48fc], 0
mov dword [edi + 0x4900], 0
mov dword [edi + 0x4904], 0
mov dword [edi + 0x48ec], 0
mov dword [edi + 0x48f4], 0
mov dword [edi + 0x48f0], 0
mov dword [edi + 0x4908], 0
mov dword [edi + 0x4914], 0x7f7fffff
mov dword [edi + 0x4910], 0x7f7fffff
mov dword [edi + 0x490c], 0x7f7fffff
mov dword [edi + 0x4938], 0
mov dword [edi + 0x493c], 0
mov dword [edi + 0x4940], 0
mov dword [edi + 0x4944], 0
mov dword [edi + 0x496c], 0
mov dword [edi + 0x4968], 0
xorps xmm0, xmm0
mov dword [edi + 0x4960], 0
mov dword [edi + 0x4964], 0
movups xmmword [edi + 0x4974], xmm0
movups xmmword [edi + 0x4984], xmm0
mov word [edi + 0x4994], 0
mov dword [edi + 0x4970], 0xffffffff
mov byte [edi + 0x4996], 0
mov dword [edi + 0x4998], 0
mov dword [edi + 0x499c], 0
mov dword [edi + 0x49a0], 0
mov dword [edi + 0x49a4], 0
mov dword [edi + 0x49c8], 0
mov dword [edi + 0x49c4], 0
mov dword [edi + 0x49cc], 0
mov byte [ebp - 4], 0x16
mov dword [edi + 0x49e8], 0
mov dword [edi + 0x49e4], 0
mov dword [edi + 0x49ec], 0
mov byte [ebp - 4], 0x17
mov dword [edi + 0x49fc], 0
mov dword [edi + 0x49f8], 0
mov dword [edi + 0x4a00], 0
mov byte [ebp - 4], 0x18
lea ecx, [edi + 0x4a04]
mov dword [ebp - 0x18], ecx
mov dword [ecx + 4], 0
mov dword [ecx], 0
mov dword [ecx + 8], 0
mov byte [ebp - 4], 0x19
lea eax, [ecx + 0xc]
mov dword [ebp - 0x1c], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x1b
mov dword [ecx + 0x1c], 0
mov dword [ecx + 0x18], 0
mov byte [ebp - 4], 0x1c
mov dword [edi + 0x4a28], 0
mov dword [edi + 0x4a24], 0
mov dword [edi + 0x4a2c], 0
mov byte [ebp - 4], 0x1d
mov dword [edi + 0x4a34], 0
mov dword [edi + 0x4a30], 0
mov dword [edi + 0x4a38], 0
mov byte [ebp - 4], 0x1e
lea ecx, [edi + 0x4a40]
mov dword [ebp - 0x20], ecx
mov dword [ecx + 4], 0
mov dword [ecx], 0
mov dword [ecx + 8], 0
mov byte [ebp - 4], 0x1f
lea eax, [ecx + 0xc]
mov dword [ebp - 0x24], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x21
mov dword [ecx + 0x1c], 0
mov dword [ecx + 0x18], 0
mov byte [ebp - 4], 0x22
mov dword [edi + 0x4a64], 0
mov dword [edi + 0x4a60], 0
mov dword [edi + 0x4a68], 0
mov byte [ebp - 4], 0x23
mov dword [edi + 0x4a70], 0
mov dword [edi + 0x4a6c], 0
mov dword [edi + 0x4a74], 0
mov byte [ebp - 4], 0x24
lea esi, [edi + 0x4a90]
mov dword [edi + 0x4a88], 0
mov dword [edi + 0x4a8c], 0
mov dword [ebp - 0x28], esi
mov dword [esi + 0x14], 0
mov dword [esi + 0x10], 0
mov dword [esi + 0x18], 0
mov byte [ebp - 4], 0x25
mov dword [esi + 0x20], 0
mov dword [esi + 0x1c], 0
mov dword [esi + 0x24], 0
mov byte [ebp - 4], 0x26
mov dword [esi + 0x2c], 0
mov dword [esi + 0x28], 0
mov dword [esi + 0x30], 0
mov byte [ebp - 4], 0x27
push 0xe78
push 0
push esi
call sub.VCRUNTIME140.dll_memset
add esp, 0x24
mov dword [esi], edi
mov byte [ebp - 4], 0x28
lea ecx, [edi + 0x5908]
call fcn.10047d20
mov byte [ebp - 4], 0x29
lea eax, [edi + 0x5984]
mov dword [edi + 0x5974], 0
mov dword [edi + 0x5978], 0
mov dword [edi + 0x597c], 0
mov dword [edi + 0x5980], 0
push 0x30
push 0
push eax
mov dword [eax], 0
mov dword [eax + 4], 0
mov dword [eax + 8], 0
mov dword [eax + 0xc], 0
mov dword [eax + 0x10], 0
mov dword [eax + 0x14], 0
mov dword [eax + 0x18], 0
mov dword [eax + 0x1c], 0
mov dword [eax + 0x20], 0
mov dword [eax + 0x24], 0
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
mov dword [edi + 0x59d8], 0
mov dword [edi + 0x59d4], 0
mov dword [edi + 0x59dc], 0
mov byte [ebp - 4], 0x2a
mov dword [edi + 0x59e4], 0
mov dword [edi + 0x59e0], 0
mov dword [edi + 0x59e8], 0
mov byte [ebp - 4], 0x2b
xorps xmm0, xmm0
mov dword [edi + 0x59f0], 0
lea eax, [edi + 0x5a14]
mov dword [edi + 0x59f4], 0
movups xmmword [edi + 0x59ec], xmm0
mov dword [edi + 0x5a00], 0
mov dword [edi + 0x5a04], 0
movups xmmword [edi + 0x59fc], xmm0
mov dword [ebp - 0x2c], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x2d
mov dword [edi + 0x5a24], 0
mov dword [edi + 0x5a20], 0
mov dword [edi + 0x5a28], 0
mov byte [ebp - 4], 0x2e
lea eax, [edi + 0x5a2c]
mov dword [ebp - 0x30], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x30
lea eax, [edi + 0x5a38]
mov dword [ebp - 0x34], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x32
mov dword [edi + 0x5a48], 0
mov dword [edi + 0x5a44], 0
mov dword [edi + 0x5a4c], 0
mov byte [ebp - 4], 0x33
lea eax, [edi + 0x5a7c]
mov dword [ebp - 0x38], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x35
lea eax, [edi + 0x5aa8]
mov dword [ebp - 0x3c], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x37
lea eax, [edi + 0x5ab4]
mov dword [ebp - 0x40], eax
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 8], 0
mov byte [ebp - 4], 0x38
mov dword [eax + 0xc], 0
mov byte [ebp - 4], 0x39
lea eax, [edi + 0x5adc]
mov dword [edi + 0x5acd], 0
mov byte [edi + 0x5acc], 0
mov word [edi + 0x5ad1], 0x101
mov dword [edi + 0x5ad8], 0xffffffff
mov dword [edi + 0x5ad4], 0xffffffff
mov dword [ebp - 0x44], eax
mov dword [eax + 0x10], 0
mov dword [eax + 0xc], 0
mov dword [eax + 0x14], 0
mov byte [ebp - 4], 0x3a
movups xmmword [eax], xmm0
movups xmmword [eax + 0x10], xmm0
mov dword [eax + 0x1c], 0xff7fffff
mov byte [ebp - 4], 0x3b
mov dword [edi + 0x5c08], 0
mov dword [edi + 0x5c04], 0
mov dword [edi + 0x5c0c], 0
mov byte [ebp - 4], 0x3c
mov ecx, dword [ebp + 8]
test ecx, ecx
mov byte [edi], 0
sete al
mov dword [edi + 0x3bcc], 0
mov byte [edi + 1], al
mov dword [edi + 0x3bd4], 0
mov dword [edi + 0x3bd0], 0
test ecx, ecx
jne 0x1002c81b
mov eax, dword [0x10449d50]
test eax, eax
je 0x1002c7e2
inc dword [eax + 0xb0]
push dword [0x10449d58]
push 0x52c
call dword [0x1034b070]
mov dword [ebp - 0x44], eax
lea ecx, [ebp + 0xb]
add esp, 8
mov dword [ebp - 0x40], ecx
mov dword [ebp - 0x3c], eax
mov byte [ebp - 4], 0x3d
test eax, eax
je 0x1002c813
mov ecx, eax
call fcn.10047e00
jmp 0x1002c815
xor eax, eax
mov byte [ebp - 4], 0x3c
mov ecx, eax
xorps xmm0, xmm0
mov dword [edi + 0x48], ecx
movsd qword [edi + 0x3de0], xmm0
mov dword [edi + 0x3de8], 0
mov dword [edi + 0x3df0], 0xffffffff
mov dword [edi + 0x3dec], 0xffffffff
mov dword [edi + 0x3df5], 0
mov byte [edi + 0x3df4], 0
mov dword [edi + 0x3dfc], 0
mov dword [edi + 0x3e3c], 0
mov dword [edi + 0x3e48], 0
mov dword [edi + 0x3e4c], 0
mov dword [edi + 0x3e50], 0
mov dword [edi + 0x3e54], 0
mov dword [edi + 0x3e58], 0
mov dword [edi + 0x3e64], 0xffffffff
mov dword [edi + 0x3e68], 0
mov dword [edi + 0x3e7c], 0
mov dword [edi + 0x3e84], 0
mov dword [edi + 0x3e80], 0
mov word [edi + 0x3e88], 0
mov dword [edi + 0x3e90], 0
mov dword [edi + 0x3e8c], 0
mov dword [edi + 0x3e94], 0
mov dword [edi + 0x3e98], 0
mov dword [edi + 0x3e9c], 0
mov dword [edi + 0x3ea0], 0
mov word [edi + 0x3ea4], 0
mov dword [edi + 0x3ea8], 0xbf800000
mov dword [edi + 0x3eac], 0xbf800000
mov dword [edi + 0x3eb0], 0
mov dword [edi + 0x3eb4], 0
mov dword [edi + 0x3eb8], 0xffffffff
mov dword [edi + 0x3ebc], 0
mov word [edi + 0x3ec0], 0
mov dword [edi + 0x3ec4], 0
mov dword [edi + 0x3ec8], 0
mov dword [edi + 0x3ecc], 0
mov dword [edi + 0x4690], 0
mov byte [edi + 0x4694], 0
mov dword [edi + 0x4698], 0
mov dword [edi + 0x469c], 0
mov dword [edi + 0x46a0], 0
mov dword [edi + 0x47b8], 0
mov dword [edi + 0x47c8], 0
mov dword [edi + 0x47e0], 0
mov dword [edi + 0x47dc], 0
mov dword [edi + 0x47d8], 0
mov dword [edi + 0x47d4], 0
mov dword [edi + 0x47d0], 0
mov dword [edi + 0x47cc], 0
mov dword [edi + 0x47f4], 0
mov dword [edi + 0x47ec], 0
mov dword [edi + 0x47e8], 0
mov dword [edi + 0x47f8], 0
mov dword [edi + 0x47e4], 0
mov dword [edi + 0x47f0], 0
mov dword [edi + 0x47fc], 0
mov dword [edi + 0x4800], 0
mov dword [edi + 0x4804], 0x10000
mov word [edi + 0x4808], 0
mov byte [edi + 0x480a], 0
mov dword [edi + 0x480c], 0
mov word [edi + 0x4820], 0
mov byte [edi + 0x4822], 0
mov dword [edi + 0x4824], 0
mov dword [edi + 0x4828], 0
mov dword [edi + 0x482c], 0
mov dword [edi + 0x4838], 0xffffffff
mov dword [edi + 0x4834], 0xffffffff
mov dword [edi + 0x4830], 0xffffffff
mov dword [edi + 0x485c], 0
mov dword [edi + 0x4860], 0
mov dword [edi + 0x4864], 0
mov dword [edi + 0x4918], 0x1200
mov dword [edi + 0x491c], 0x3200
mov dword [edi + 0x4928], 0
mov dword [edi + 0x4924], 0
mov dword [edi + 0x4920], 0
mov dword [edi + 0x4930], 0
mov dword [edi + 0x492c], 0
mov byte [edi + 0x4934], 0
xor eax, eax
mov dword [edi + 0x4948], 0
mov dword [edi + 0x494c], 0
mov word [edi + 0x4951], 0
mov byte [edi + 0x4950], 0
mov dword [edi + 0x4954], 0
mov dword [edi + 0x4958], 0xffffffff
mov dword [edi + 0x495c], 0xffffffff
mov dword [edi + 0x49a8], 0
mov dword [edi + 0x49ac], 0
mov dword [edi + 0x49b0], 0
mov dword [edi + 0x49b4], 0
mov dword [edi + 0x49b8], 0
mov dword [edi + 0x49bc], 0xffffffff
mov dword [edi + 0x49c0], 0
movups xmmword [edi + 0x49d0], xmm0
mov dword [edi + 0x49e0], 0
mov dword [edi + 0x49f0], 0
mov dword [edi + 0x49f4], 0
mov dword [edi + 0x4a3c], 0
mov dword [edi + 0x4a7c], 0
mov dword [edi + 0x4a78], 0
mov dword [edi + 0x4a84], 0
mov dword [edi + 0x4a80], 0
mov dword [edi + 0x5960], 0
mov dword [edi + 0x5964], 0xa900000
mov dword [edi + 0x596c], 0
mov dword [edi + 0x5968], 0
mov dword [edi + 0x5970], 0
mov dword [edi + 0x59b4], 0
mov dword [edi + 0x59b8], 0
mov word [edi + 0x59bc], 0
mov dword [edi + 0x59c0], 0
mov dword [edi + 0x59c4], 0x3c23d70a
mov dword [edi + 0x59c8], 0
mov dword [edi + 0x59cc], 0
mov dword [edi + 0x59d0], eax
mov dword [edi + 0x59f0], eax
mov dword [edi + 0x59f4], eax
mov dword [edi + 0x5a00], 0xbf800000
mov dword [edi + 0x5a04], 0xbf800000
mov word [edi + 0x5a0c], 0x2e
mov dword [edi + 0x5a10], eax
mov dword [edi + 0x5a50], eax
movups xmmword [edi + 0x5a54], xmm0
push 0xf0
movq qword [edi + 0x5a64], xmm0
mov dword [edi + 0x5a6c], eax
mov byte [edi + 0x5a70], al
mov dword [edi + 0x5a74], eax
mov dword [edi + 0x5a8c], eax
mov dword [edi + 0x5a88], eax
mov dword [edi + 0x5a78], eax
mov dword [edi + 0x5a90], 0x7f7fffff
mov byte [edi + 0x5a94], al
mov dword [edi + 0x5a98], eax
mov dword [edi + 0x5aa0], 2
mov dword [edi + 0x5a9c], 2
mov dword [edi + 0x5aa4], 0x400
mov dword [edi + 0x46a4], eax
mov word [edi + 0x5ac4], ax
mov byte [edi + 0x5ac6], al
push eax
mov dword [edi + 0x5ac8], eax
lea eax, [edi + 0x5afc]
push eax
call sub.VCRUNTIME140.dll_memset
mov dword [edi + 0x5bf0], 0
add esp, 0xc
mov dword [edi + 0x5bec], 0
mov dword [edi + 0x5bf4], 0
mov dword [edi + 0x5c00], 0xffffffff
mov dword [edi + 0x5bfc], 0xffffffff
mov dword [edi + 0x5bf8], 0xffffffff
mov dword [ebp - 4], 0xffffffff
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 4