1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
int __fastcall sub_40120C(int a1, int a2, int a3, int a4, int a5)
{
int v9; // r6
__int64 v11; // r0
int v12; // lr
__int64 v13; // r4
int *v14; // r7
int v15; // r6
int v16; // r2
int v17; // r3
int v18; // r6
int *v19; // r0
unsigned int *v20; // r0
unsigned int v21; // r0
int v22; // r0
int v23; // [sp+4h] [bp-268h] BYREF
_DWORD v24[128]; // [sp+8h] [bp-264h] BYREF
int v25; // [sp+208h] [bp-64h]
int v26; // [sp+20Ch] [bp-60h]
int v27; // [sp+210h] [bp-5Ch]
int v28; // [sp+214h] [bp-58h]
int v29; // [sp+218h] [bp-54h]
int v30; // [sp+21Ch] [bp-50h]
int *v31; // [sp+220h] [bp-4Ch]
int v32; // [sp+224h] [bp-48h]
int v33; // [sp+230h] [bp-3Ch] BYREF
_DWORD v34[3]; // [sp+234h] [bp-38h] BYREF
int v35; // [sp+240h] [bp-2Ch] BYREF
int v36; // [sp+244h] [bp-28h] BYREF
_BYTE v37[32]; // [sp+248h] [bp-24h] BYREF
int v38; // [sp+268h] [bp-4h]
v38 = dword_401954;
sub_401130(a1: v37, a2: 32);
v35 = 0;
v36 = 0;
if ( a1 != 0 )
{
v9 = sub_401A54(a1: -1610612720, a2: 256, a3: &v35);
if ( v9 == 0 )
{
v34[1] = a3;
v34[2] = a4;
v34[0] = -1073741824;
v9 = sub_401B86(a1: v35, a2: v34, a3: 1);
if ( v9 == 0 )
{
v9 = sub_401A24(a1: &v36, a2: 805307920, a3: 4, a4: 256);
if ( v9 == 0 )
{
v9 = sub_401BB6(a1: v36, a2: v35);
if ( v9 == 0 )
{
sub_401B5C(a1: v36, a2: 0, a3: 0);
v33 = 32;
v9 = sub_401B18(a1: v36, a2: a1, a3: a2, a4: v37, a5: &v33);
if ( v9 == 0 )
{
sub_401000(a1: a5, a2: v37, a3: 16);
v9 = 0;
}
}
}
}
}
if ( v36 != 0 )
sub_401AD6();
if ( v35 != 0 )
sub_401AF6();
}
else
{
v9 = -65525;
}
if ( dword_401954 == v38 )
return v9;
v11 = ((__int64 (__fastcall *)(int))loc_401958)(a1: dword_401954 - v38);
v26 = a4;
v27 = a1;
v28 = v9;
v29 = a3;
v30 = a2;
v31 = &dword_401954;
v32 = v12;
v13 = v11;
v25 = dword_401954;
sub_401130(a1: v24, a2: 512);
v23 = 0;
if ( (_DWORD)v13 != 0 && HIDWORD(v13) != 0 )
{
v14 = &dword_406004[6];
v15 = 0;
*(_DWORD *)HIDWORD(v13) = 0xFFFF;
while ( *(v14 - 5) != 0 )
{
++v15;
v14 += 7;
if ( v15 == 16 )
goto LABEL_25;
}
sub_401130(a1: v14 - 5, a2: 24);
*(v14 - 5) = 1;
*(_DWORD *)HIDWORD(v13) = v15;
*(v14 - 6) = *(_DWORD *)v13;
if ( sub_401638(a1: v13 + 4, a2: 256, a3: v24, a4: &v23) != 0 )
{
sub_401130(a1: v14 - 6, a2: 28);
}
else
{
v16 = v24[1];
v17 = v24[2];
v18 = v24[3];
v19 = v14 - 4;
*v19 = v24[0];
v19[1] = v16;
v19[2] = v17;
v19[3] = v18;
*v14 = v24[4];
if ( *(_DWORD *)v13 <= 6u )
*((_DWORD *)nullsub_3 + *(_DWORD *)v13 + 113) = 0;
}
}
LABEL_25:
if ( dword_401954 == v25 )
__asm { POPEQ.W {R4-R9,PC} }
v20 = (unsigned int *)((int (__fastcall *)(int))loc_401958)(a1: dword_401954 - v25);
if ( v20 == nullptr )
return 2;
v21 = *v20;
if ( v21 > 0xF )
return 1;
v22 = 28 * v21 + 4218880;
if ( *(_DWORD *)(v22 + 8) != 1 )
return 1;
sub_401130(a1: v22 + 4, a2: 28);
return 0;
}
|