Function at 0x41fff0
Capabilities:
Contain obfuscated stackstrings
Create process on windows

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x549457
mov eax, dword fs:[0]
push eax
sub esp, 0x188
mov eax, dword [0x5bf364]
xor eax, ebp
mov dword [ebp - 0x14], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ebx, ecx
mov eax, dword [ebp + 0x10]
mov esi, dword [ebp + 0x24]
mov dword [ebp - 0x11c], eax
mov eax, dword [ebp + 0x14]
mov dword [ebp - 0x12c], eax
mov eax, dword [ebp + 0x18]
mov dword [ebp - 0x128], eax
mov eax, dword [ebp + 0x1c]
mov dword [ebp - 0x124], eax
mov eax, dword [ebp + 0x20]
mov dword [ebp - 0x120], eax
mov eax, dword [ebp + 0x28]
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolCommonBaseWithMemManager.0
mov dword [ebp - 0x130], eax
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov dword [ebp - 0x138], 0
mov dword [ebp - 0x134], 0
mov dword [ebp - 4], 0
mov dword [ebp - method.CMStringArray.virtual_0], vtable.rg_n::rg_n72530.0
mov dword [ebp - 4], 1
mov ecx, 0x32
call fcn.004570d0
mov eax, esi
cdq
push edx
push eax
lea eax, [ebp - 0xec]
push eax
call fcn.00450c50
mov edx, eax
mov byte [ebp - 4], 2
lea ecx, [ebp - 0x118]
call fcn.00405c90
mov byte [ebp - 4], 3
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x10c], 0x5893b4
mov byte [ebp - 4], 4
lea ecx, [ebp - 0xc0]
push edx
lea edx, [ebp - 0x118]
call fcn.0049d790
add esp, 4
mov byte [ebp - 4], 5
lea ecx, [ebx + 0xc0c]
push eax
call fcn.0044f700
mov byte [ebp - 4], 6
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 4
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 9
lea ecx, [ebp - 0x108]
call fcn.00405c00
mov byte [ebp - 4], 2
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0xb
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, dword [ebx + 0xc18]
mov dword [ebp - 0xec], vtable.CVolObject.0
mov eax, dword [ecx]
call dword [eax + 0x28]
mov edi, dword [sym.imp.USER32.dll_InvalidateRect]
mov esi, eax
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x420194
cmp dword [esi + 0x50], 0
je 0x42018d
push ecx
mov eax, esp
mov dword [eax], ecx
call fcn.004abb90
mov ecx, dword [esi + 4]
add esp, 4
push 0
push 0
push ecx
call edi
push dword [ebp - 0x120]
lea eax, [ebp - 0xec]
push dword [ebp - 0x124]
push eax
call fcn.00450c50
mov edx, eax
mov byte [ebp - 4], 0xd
lea ecx, [ebp - 0x118]
call fcn.00405c90
mov byte [ebp - 4], 0xe
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x10c], 0x5893c0
mov byte [ebp - 4], 0xf
lea ecx, [ebp - 0xc0]
push edx
lea edx, [ebp - 0x118]
call fcn.0049d790
add esp, 4
mov byte [ebp - 4], 0x10
lea ecx, [ebx + 0xaac]
push eax
call fcn.0044f700
mov byte [ebp - 4], 0x11
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0xf
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 0x14
lea ecx, [ebp - 0x108]
call fcn.00405c00
mov byte [ebp - 4], 0xd
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x16
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, dword [ebx + 0xab8]
mov dword [ebp - 0xec], vtable.CVolObject.0
mov eax, dword [ecx]
call dword [eax + 0x28]
mov esi, eax
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x420286
cmp dword [esi + 0x50], 0
je 0x42027f
push ecx
mov eax, esp
mov dword [eax], ecx
call fcn.004abb90
mov ecx, dword [esi + 4]
add esp, 4
push 0
push 0
push ecx
call edi
push dword [ebp - 0x128]
lea eax, [ebp - 0xec]
push dword [ebp - 0x12c]
push eax
call fcn.00450c50
mov edx, eax
mov byte [ebp - 4], 0x18
lea ecx, [ebp - 0x118]
call fcn.00405c90
mov byte [ebp - 4], 0x19
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x10c], 0x5893cc
mov byte [ebp - 4], 0x1a
lea ecx, [ebp - 0xc0]
push edx
lea edx, [ebp - 0x118]
call fcn.0049d790
add esp, 4
mov byte [ebp - 4], 0x1b
lea ecx, [ebx + 0x94c]
push eax
call fcn.0044f700
mov byte [ebp - 4], 0x1c
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x1a
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 0x1f
lea ecx, [ebp - 0x108]
call fcn.00405c00
mov byte [ebp - 4], 0x18
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x21
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, dword [ebx + 0x958]
mov dword [ebp - 0xec], vtable.CVolObject.0
mov eax, dword [ecx]
call dword [eax + 0x28]
mov esi, eax
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x420378
cmp dword [esi + 0x50], 0
je 0x420371
push ecx
mov eax, esp
mov dword [eax], ecx
call fcn.004abb90
mov ecx, dword [esi + 4]
add esp, 4
push 0
push 0
push ecx
call edi
mov ecx, dword [ebx + 0x808]
mov eax, dword [ecx]
call dword [eax + 0x28]
mov esi, dword [ebp - 0x130]
mov edx, eax
test esi, esi
jns 0x420393
xor ecx, ecx
jmp 0x42039f
mov eax, 0x7fff
mov ecx, esi
cmp esi, eax
cmovg ecx, eax
mov eax, dword [edx + 4]
test eax, eax
jne 0x4203ab
mov dword [edx + 0x40], ecx
jmp 0x4203ba
push 0
push ecx
push 0x402
push eax
call dword [sym.imp.USER32.dll_SendMessageW]
lea ecx, [ebp - 0x168]
call fcn.00405c90
mov byte [ebp - 4], 0x23
lea eax, [ebp - 0x94]
push esi
push 0x593d28
push eax
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWString.0
call fcn.0049b920
add esp, 0xc
lea eax, [ebp - 0x94]
lea ecx, [ebp - 0x168]
push eax
call fcn.0049c380
mov byte [ebp - 4], 0x24
lea ecx, [ebp - 0x118]
call fcn.00405c90
mov byte [ebp - 4], 0x25
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x10c], 0x5893d8
mov byte [ebp - 4], 0x26
lea eax, [ebp - 0x168]
push eax
lea edx, [ebp - 0x118]
lea ecx, [ebp - 0xec]
call fcn.0049d790
add esp, 4
mov byte [ebp - 4], 0x27
mov edx, eax
push 0x5881d4
lea ecx, [ebp - 0xc0]
call fcn.0049d910
add esp, 4
mov byte [ebp - 4], 0x28
lea ecx, [ebx + 0x186c]
push eax
call fcn.0044f700
mov byte [ebp - 4], 0x29
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x27
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 0x2b
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 0x26
mov dword [ebp - 0xec], vtable.CVolObject.0
mov byte [ebp - 4], 0x2e
lea ecx, [ebp - 0x108]
call fcn.00405c00
mov byte [ebp - 4], 0x24
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x30
lea ecx, [ebp - 0x158]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, dword [ebx + 0x1878]
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov eax, dword [ecx]
call dword [eax + 0x28]
mov esi, eax
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x42050e
cmp dword [esi + 0x50], 0
je 0x420507
push ecx
mov eax, esp
mov dword [eax], ecx
call fcn.004abb90
mov ecx, dword [esi + 4]
add esp, 4
push 0
push 0
push ecx
call edi
mov esi, dword [ebp + 0x30]
mov eax, dword [esi + 0xc]
test eax, eax
jne 0x420525
cmp dword [esi + 0x24], eax
mov eax, 0x580994
je 0x420525
mov eax, dword [esi + 0x1c]
mov ecx, 0x5895cc
nop word [eax + eax]
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x420556
test dx, dx
je 0x420552
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x420556
add eax, 4
add ecx, 4
test dx, dx
jne 0x420530
xor eax, eax
jmp 0x42055b
sbb eax, eax
or eax, 1
test eax, eax
jne 0x42079b
push ecx
push dword [ebp + 0x2c]
lea ecx, [ebx + 0x1e78]
call fcn.004799e0
mov edx, dword [ebp - 0x11c]
push ecx
lea ecx, [ebx + 0x23a0]
call fcn.00455cb0
lea ecx, [ebp - 0x168]
call fcn.00405c90
mov byte [ebp - 4], 0x32
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x15c], 0x588f70
mov byte [ebp - 4], 0x33
lea eax, [ebp - 0x168]
push eax
lea ecx, [ebx + 0x102c]
call fcn.0044f700
mov byte [ebp - 4], 0x35
lea ecx, [ebp - 0x158]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, dword [ebx + 0x1038]
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov eax, dword [ecx]
call dword [eax + 0x28]
mov esi, eax
mov ecx, dword [esi + 4]
mov dword [esi + 0x38], 0xff
test ecx, ecx
je 0x420612
cmp dword [esi + 0x50], 0
je 0x42060b
push ecx
mov eax, esp
mov dword [eax], ecx
call fcn.004abb90
mov ecx, dword [esi + 4]
add esp, 4
push 0
push 0
push ecx
call edi
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x37
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x580994
mov byte [ebp - 4], 0x38
lea ecx, [ebp - 0xec]
call fcn.00405c90
mov byte [ebp - 4], 0x39
mov dword [ebp - 0xec], vtable.CWConstString.0
mov dword [ebp - 0xe0], 0x580994
mov byte [ebp - 4], 0x3a
lea ecx, [ebp - 0x118]
call fcn.00405c90
mov byte [ebp - 4], 0x3b
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x10c], 0x580994
mov byte [ebp - 4], 0x3c
lea ecx, [ebp - 0x168]
call fcn.00405c90
mov byte [ebp - 4], 0x3d
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CWConstString.0
mov dword [ebp - 0x15c], 0x580994
mov byte [ebp - 4], 0x3e
lea ecx, [ebp - 0x194]
call fcn.00405c90
mov byte [ebp - 4], 0x3f
sub esp, 0x10
or dword [eax + 4], 1
lea ecx, [ebp - 0xc0]
push ecx
lea ecx, [ebp - 0xec]
push ecx
lea ecx, [ebp - 0x118]
push ecx
push ecx
lea ecx, [ebp - 0x168]
push ecx
push ecx
push eax
push ecx
lea eax, [ebx + 0x23a0]
push eax
push ecx
lea ecx, [ebx + 0x2248]
call fcn.0042b850
mov byte [ebp - 4], 0x40
lea ecx, [ebp - 0x184]
call fcn.00405c00
mov byte [ebp - 4], 0x3e
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x43
lea ecx, [ebp - 0x158]
call fcn.00405c00
mov byte [ebp - 4], 0x3c
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x46
lea ecx, [ebp - 0x108]
call fcn.00405c00
mov byte [ebp - 4], 0x3a
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x49
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 0x38
mov dword [ebp - 0xec], vtable.CVolObject.0
mov byte [ebp - 4], 0x4c
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 1
sub esp, 0xc
lea ecx, [ebx + 0x2248]
mov dword [ebp - 0xc0], vtable.CVolObject.0
call fcn.0042b010
jmp 0x420ca9
mov edx, 0x5895d8
mov ecx, esi
call fcn.00412ba0
test eax, eax
je 0x420ca9
mov edx, 0x5894bc
mov ecx, 0x5c78e0
call fcn.00412ba0
test eax, eax
je 0x4208f1
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x4f
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x5894c0
mov byte [ebp - 4], 0x50
lea eax, [ebp - 0xc0]
push eax
lea ecx, [ebx + 0xd6c]
call fcn.0044f700
mov byte [ebp - 4], 0x52
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 1
lea ecx, [ebp - 0xec]
mov dword [ebp - 0xc0], vtable.CVolObject.0
call fcn.00405c90
mov byte [ebp - 4], 0x54
mov dword [ebp - 0xec], vtable.CWConstString.0
mov dword [ebp - 0xe0], 0x5891e0
mov byte [ebp - 4], 0x55
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x56
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x5894d4
mov byte [ebp - 4], 0x57
lea eax, [ebp - 0xec]
push eax
push 0
lea eax, [ebp - 0xc0]
mov ecx, ebx
push eax
call fcn.0044f940
mov byte [ebp - 4], 0x59
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x55
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 0x5c
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
mov eax, dword [ebx + 0x23ac]
mov dword [ebp - 0xec], vtable.CVolObject.0
test eax, eax
jne 0x4208d8
cmp dword [ebx + 0x23c4], eax
mov eax, 0x580994
je 0x4208d8
mov eax, dword [ebx + 0x23bc]
push 1
push 0
push 0
push eax
push 0x58d0c4
push 0
call dword [sym.imp.SHELL32.dll_ShellExecuteW]
jmp 0x420ca9
cmp dword [ebx + 0x2390], 1
jne 0x420bcc
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x5e
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x5894f8
mov byte [ebp - 4], 0x5f
lea eax, [ebp - 0xc0]
push eax
lea ecx, [ebx + 0xd6c]
call fcn.0044f700
mov byte [ebp - 4], 0x61
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 1
mov ecx, 0xbb8
mov dword [ebp - 0xc0], vtable.CVolObject.0
call fcn.004570d0
lea ecx, [ebp - 0xec]
call fcn.00405c90
mov byte [ebp - 4], 0x63
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x64
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], str.S_MRck_W
mov byte [ebp - 4], 0x65
lea eax, [ebp - 0xc0]
push eax
lea ecx, [ebx + 0x102c]
call fcn.0044f700
mov byte [ebp - 4], 0x67
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x63
lea ecx, [ebx + 0x102c]
push 0x8000
mov dword [ebp - 0xc0], vtable.CVolObject.0
call fcn.0044bc60
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x69
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x589530
mov byte [ebp - 4], 0x6a
lea eax, [ebp - 0xc0]
push eax
lea ecx, [ebx + 0xd6c]
call fcn.0044f700
mov byte [ebp - 4], 0x6c
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x63
lea ecx, [ebx + 0x1b3c]
push 0x32
mov dword [ebp - 0xc0], vtable.CVolObject.0
call fcn.0044cc80
lea ecx, [ebp - 0x108]
call fcn.00498a50
mov esi, eax
mov byte [ebp - 4], 0x6e
lea edx, [ebx + 0x23a0]
push dword [ebp - 0x11c]
lea ecx, [ebp - 0x194]
call fcn.0049d790
add esp, 4
mov ecx, eax
mov byte [ebp - 4], 0x6f
lea eax, [ebp - 0xec]
or dword [esi + 4], 1
push eax
sub esp, 8
lea eax, [ebx + 0x247c]
push eax
push esi
push ecx
lea ecx, [ebx + 0x23d0]
call fcn.00451520
mov dword [ebx + 0x2478], eax
mov byte [ebp - 4], 0x70
lea ecx, [ebp - 0x184]
call fcn.00405c00
mov byte [ebp - 4], 0x6e
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0x63
lea ecx, [ebp - 0x108]
call fcn.00405c00
cmp dword [ebx + 0x2478], 0
jne 0x420baa
push 0
lea ecx, [ebx + 0x1b3c]
call fcn.0044cc80
push 0x5891e0
lea ecx, [ebp - 0x118]
call fcn.004128e0
mov esi, eax
mov byte [ebp - 4], 0x72
lea ecx, [ebp - 0x168]
push 0x5895e4
call fcn.004128e0
mov byte [ebp - 4], 0x73
mov edx, eax
push 0x588684
lea ecx, [ebp - 0xc0]
call fcn.0049d910
add esp, 4
mov byte [ebp - 4], 0x74
lea ecx, [ebp - 0xec]
push ecx
mov edx, eax
lea ecx, [ebp - 0x194]
call fcn.0049d790
add esp, 4
mov byte [ebp - 4], 0x75
mov ecx, ebx
push esi
push 0
push eax
call fcn.0044f940
mov byte [ebp - 4], 0x74
lea ecx, [ebp - 0x194]
call fcn.00405240
mov byte [ebp - 4], 0x73
lea ecx, [ebp - 0xc0]
call fcn.00405240
mov byte [ebp - 4], 0x72
lea ecx, [ebp - 0x168]
call fcn.00412610
mov byte [ebp - 4], 0x63
lea ecx, [ebp - 0x118]
call fcn.00412610
lea ecx, [ebx + 0x23a0]
call fcn.00457560
lea ecx, [ebp - 0x194]
call fcn.00444ae0
mov byte [ebp - 4], 0x76
mov ecx, eax
call fcn.0047ac00
mov byte [ebp - 4], 0x63
lea ecx, [ebp - 0x194]
call fcn.00405240
mov byte [ebp - 4], 0x77
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
mov dword [ebp - 0xec], vtable.CVolObject.0
jmp 0x420ca9
lea ecx, [ebp - 0xec]
call fcn.00405c90
mov byte [ebp - 4], 0x79
mov dword [ebp - 0xec], vtable.CWConstString.0
mov dword [ebp - 0xe0], 0x5891e0
mov byte [ebp - 4], 0x7a
lea ecx, [ebp - 0xc0]
call fcn.00405c90
mov byte [ebp - 4], 0x7b
mov dword [ebp - 0xc0], vtable.CWConstString.0
mov dword [ebp - 0xb4], 0x589628
mov byte [ebp - 4], 0x7c
lea eax, [ebp - 0xec]
push eax
push 0
lea eax, [ebp - 0xc0]
mov ecx, ebx
push eax
call fcn.0044f940
mov byte [ebp - 4], 0x7e
lea ecx, [ebp - 0xb0]
call fcn.00405c00
mov byte [ebp - 4], 0x7a
mov dword [ebp - 0xc0], vtable.CVolObject.0
mov byte [ebp - 4], 0x81
lea ecx, [ebp - 0xdc]
call fcn.00405c00
mov byte [ebp - 4], 1
lea ecx, [ebx + 0x23a0]
mov dword [ebp - 0xec], vtable.CVolObject.0
call fcn.00457560
lea ecx, [ebp - 0x194]
call fcn.00444ae0
mov byte [ebp - 4], 0x83
mov ecx, eax
call fcn.0047ac00
mov byte [ebp - 4], 0x84
lea ecx, [ebp - 0x184]
call fcn.00405c00
mov byte [ebp - 4], 1
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov dword [ebp - 4], 0xffffffff
xor eax, eax
mov dword [ebp - method.CMStringArray.virtual_0], vtable.CVolObject.0
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x14]
xor ecx, ebp
call fcn.0050ec8c
mov esp, ebp
pop ebp
ret 0x2c