sub_140A1BFE4
__int64 __fastcall sub_140A1BFE4(__int64 a1, char *a2, char a3){
_BYTE *v3;
__int64 v5;
int v6;
__int64 v7;
unsigned __int8 CurrentIrql;
int v9;
unsigned int *v10;
unsigned __int64 v11;
__int64 v12;
int v13;
__int128 *v14;
__int64 v15;
__int64 v16;
__int64 v17;
int v18;
unsigned int v19;
unsigned int v20;
int v21;
_BYTE *v22;
int v23;
unsigned int v24;
__int64 v25;
int v26;
unsigned __int64 v27;
int v28;
int v29;
int v30;
__int64 v31;
_QWORD *v32;
__int64 v33;
unsigned __int64 v34;
unsigned __int64 i;
_QWORD *v36;
__int64 v37;
__int128 *v38;
char v39;
unsigned __int64 v40;
_BOOL4 v41;
_QWORD *v42;
unsigned __int64 v43;
int v44;
__int64 v45;
int v46;
__int16 v47;
unsigned __int8 *v48;
int v49;
__int64 v50;
__int64 v51;
__int64 v52;
__int64 *v53;
unsigned int v54;
__int64 *v55;
__int64 v56;
__int64 v57;
__int64 v58;
__int64 v59;
unsigned __int8 *v60;
int v61;
__int64 v62;
__int64 v63;
unsigned __int8 *v64;
int v65;
__int64 v66;
__int64 v67;
bool v68;
unsigned int v69;
unsigned int v70;
NTSTATUS v71;
char *v72;
__int64 v73;
__int64 v74;
_BOOL4 v75;
char *v76;
unsigned int v77;
_DWORD *v78;
int v79;
int v80;
char *v81;
int v82;
__int16 v83;
char *v84;
int v85;
signed __int64 v86;
__int64 v87;
__int64 v88;
__int64 *v89;
unsigned int v90;
__int64 *v91;
__int64 v92;
__int64 v93;
__int64 v94;
__int64 v95;
char *v96;
int v97;
__int64 v98;
__int64 v99;
char *v100;
int v101;
signed __int64 v102;
__int64 v103;
__int64 v104;
unsigned int v105;
NTSTATUS v106;
__int64 *v107;
int v108;
unsigned int *v109;
unsigned __int64 v110;
__int64 v111;
__int64 v112;
__int64 v113;
__int64 v114;
char **v115;
unsigned int v116;
__int64 v117;
unsigned int v118;
char *v119;
char *v120;
char *v121;
char *v122;
int v123;
char *j;
__int64 v125;
unsigned __int64 v126;
__int64 v127;
__int64 v128;
unsigned __int64 v129;
unsigned __int64 v130;
unsigned __int64 v131;
__int64 v132;
char *v133;
__int64 v134;
_DWORD *v135;
_QWORD *v136;
char *v137;
int v138;
char *v139;
_QWORD *v140;
__int64 v141;
char v142;
int v143;
__int64 k;
__int64 v145;
__int64 v146;
bool v147;
__int64 v148;
int v149;
int v150;
unsigned int v151;
__int64 v152;
int v153;
unsigned int v154;
__int64 v155;
int v156;
unsigned __int64 v157;
int v158;
int v159;
__int64 v161;
int v162;
_QWORD *v163;
__int64 v164;
_QWORD *v165;
int v166;
char *v167;
unsigned __int64 v168;
unsigned int v169;
__int64 v170;
__int64 v171;
unsigned __int128 v172;
unsigned int v173;
unsigned __int64 v174;
__int64 v175;
unsigned __int64 m;
int v177;
char *v178;
int v179;
__int64 v180;
char *v181;
unsigned int v182;
unsigned int v183;
__int64 v184;
unsigned __int64 v185;
unsigned __int64 v186;
__int64 v187;
__int64 v188;
_BYTE *v189;
__int64 v190;
char **v191;
__int128 v192;
__int64 v193;
unsigned __int8 *v194;
__int64 *v195;
unsigned __int8 *v196;
unsigned __int8 *v197;
char *v198;
__int64 *v199;
char *v200;
char *v201;
__int64 v202;
__int64 v203;
__int64 v204;
__int64 v205;
__int64 v206;
char v207[104];
char *v209;
int v211;
unsigned __int16 v212;
unsigned int v213;
unsigned __int64 v214;
int v215;
v209 = a2;
v3 = *(_BYTE **)a1;
v5 = (*(__int64(__fastcall **)(char *))(*(_QWORD *)a1 + 504i64))(a2);
if( v5 )
{
LODWORD(v184) = (*((__int64(__fastcall **)(char *))v3 + 85))(a2);
v212 = *(_WORD *)(v5 + 6);
if( v212 && *(_DWORD *)(v5 + 56) >= 0x1000u && ((unsigned __int16)a2 & 0xFFF) == 0 )
{
v6 = -1073741275;
v7 = *((_QWORD *)v3 + 168);
v183 = *(_DWORD *)(v5 + 84);
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
(*((void(__fastcall **)(__int64))v3 + 42))(v7);
v9 = 24;
v10 = (unsigned int *)**((_QWORD **)v3 + 194);
v11 = (unsigned __int64)(v10 + 4);
while( *(char **)(v11 + 8) != a2 )
{
v11 += 24i64;
if( v11 >= (unsigned __int64)&v10[6 * *v10 + 4] )
goto LABEL_10;
}
v6 = 0;
v12 = *(_QWORD *)(v11 + 16);
v192 = *(_OWORD *)v11;
v193 = v12;
LABEL_10:
(*((void(__fastcall **)(_QWORD))v3 + 50))(*((_QWORD *)v3 + 168));
__writecr8(CurrentIrql);
if( v6 >= 0 )
{
v16 = (unsigned int)v193;
}
else
{
v13 = 24;
v14 = &v192;
v15 = 3i64;
do
{
*(_QWORD *)v14 = 0i64;
v13 -= 8;
v14 = (__int128 *)((char *)v14 + 8);
--v15;
}
while( v15 );
for( ; v13; --v13 )
{
*(_BYTE *)v14 = 0;
v14 = (__int128 *)((char *)v14 + 1);
}
v16 = *(unsigned int *)(v5 + 80);
LODWORD(v193) = *(_DWORD *)(v5 + 80);
*((_QWORD *)&v192 + 1) = a2;
*(_QWORD *)&v192 = 1i64;
}
v17 = *((unsigned int *)v3 + 505);
v18 = *((_DWORD *)v3 + 585);
v186 = ((unsigned __int64)((unsigned __int16)a2 & 0xFFF) + 4095 + v16) >> 12;
v19 = 20 * v186;
v20 = 20 * v186 + v17 + 48;
v21 = ((_DWORD)v184 != 0) + 33;
v177 = v21;
if( v20 <= *((_DWORD *)v3 + 647) )
{
v22 = v3;
v189 = v3;
*((_DWORD *)v3 + 505) = v20;
}
else
{
v189 = (_BYTE *)sub_140A0EB30(v3, v20, v18);
v22 = v189;
if( !v189 )
return 3221225626i64;
v23 = *((_DWORD *)v3 + 612);
if( (v23 & 4) == 0 )
{
v24 = *((_DWORD *)v3 + 505);
v25 = *((_QWORD *)v3 + 249);
v26 = (v23 & 0x20000000) != 0 ? *((_DWORD *)v3 + 585) : 0;
if( v24 >= 8 )
{
v27 = (unsigned __int64)v24 >> 3;
do
{
*(_QWORD *)v3 = 0i64;
v24 -= 8;
v3 += 8;
--v27;
}
while( v27 );
}
for( ; v24; --v24 )
*v3++ = 0;
v28 = *((_DWORD *)v22 + 585);
*((_DWORD *)v22 + 585) = v26;
if( v26 == 3 )
{
(*((void(__fastcall **)(__int64))v22 + 109))(v25);
}
else
{
v29 = 0;
if( (*((_DWORD *)v22 + 612) & 0x10000000) == 0 )
v29 = v26;
if( v29 )
(*((void(__fastcall **)(__int64, _QWORD))v22 + 69))(v25 - 8, *(_QWORD *)(v25 - 8));
else(*((void(__fastcall **)(__int64))v22 + 32))(v25);
}
*((_DWORD *)v22 + 585) = v28;
}
*((_DWORD *)v22 + 612) &= ~4u;
v21 = v177;
}
++*((_DWORD *)v22 + 515);
v30 = 48;
v31 = (__int64)&v22[v17];
v202 = v31;
v32 = (_QWORD *)v31;
v33 = 6i64;
do
{
*v32 = 0i64;
v30 -= 8;
++v32;
--v33;
}
while( v33 );
for( ; v30; --v30 )
{
*(_BYTE *)v32 = 0;
v32 = (_QWORD *)((char *)v32 + 1);
}
*(_DWORD *)v31 = v21;
*(_QWORD *)(v31 + 8) = 0i64;
*(_DWORD *)(v31 + 16) = 0;
v34 = *((_QWORD *)v22 + 259);
for( i = v34; ; LODWORD(v34) = i ^ v34 )
{
i >>= 31;
if( !i )
break;
}
v36 = (_QWORD *)(v31 + 24);
v203 = v31;
*(_DWORD *)(v31 + 20) = v34 & 0x7FFFFFFF;
v37 = 3i64;
v38 = &v192;
*(_QWORD *)a1 = v22;
do
{
v9 -= 8;
*v36 = *(_QWORD *)v38;
v38 = (__int128 *)((char *)v38 + 8);
++v36;
--v37;
}
while( v37 );
for( ; v9; --v9 )
{
v39 = *(_BYTE *)v38;
v38 = (__int128 *)((char *)v38 + 1);
*(_BYTE *)v36 = v39;
v36 = (_QWORD *)((char *)v36 + 1);
}
LOBYTE(v36) = 1;
v40 = (*((__int64(__fastcall **)(char *, _QWORD *, __int64, unsigned int *))v22 + 62))(v209, v36, 12i64, &v182);
v185 = v40;
v182 &= -(v40 != 0);
v211 = a3 & 1;
v41 = 0;
if( !v211 )
{
v40 = 0i64;
v182 = 0;
v185 = 0i64;
}
v190 = v31 + 48;
v180 = v31 + 48;
v187 = v31 + 48 + 20i64 * (unsigned int)v186;
v42 = (_QWORD *)(v31 + 48);
if( v19 >= 8 )
{
v43 = (unsigned __int64)v19 >> 3;
do
{
*v42 = -1i64;
v19 -= 8;
++v42;
--v43;
}
while( v43 );
}
for( ; v19; --v19 )
{
*(_BYTE *)v42 = -1;
v42 = (_QWORD *)((char *)v42 + 1);
}
v44 = 0;
v45 = v5 + *(unsigned __int16 *)(v5 + 20) + 24i64;
v186 = v45 + 40i64 * v212;
if( (*(_DWORD *)(v45 + 36) & 0x2000000) != 0
|| (v46 = *(_DWORD *)v45, *(_DWORD *)v45 == 1414090313) && *(_DWORD *)(v45 + 4) == 1195525195
|| v46 == 1162297680 && ((v47 = *(_WORD *)(v45 + 4), v47 == 30839) || v47 == 29303 || v47 == 30583)
|| v46 == 1095914053 && *(_WORD *)(v45 + 4) == 16724 )
{
LABEL_81:
v44 = 1;
}
else
{
v48 = (unsigned __int8 *)*((_QWORD *)v22 + 294);
v49 = 7;
v195 = (__int64 *)*((_QWORD *)v22 + 295);
v50 = v45 - (_QWORD)v48;
v196 = (unsigned __int8 *)*((_QWORD *)v22 + 296);
v197 = (unsigned __int8 *)*((_QWORD *)v22 + 297);
v194 = v48;
while( 1 )
{
v51 = v48[v50];
v52 = *v48++;
if( v51 != v52 )
break;
if( !--v49 )
{
LABEL_80:
v40 = v185;
goto LABEL_81;
}
}
v53 = v195;
v54 = 8;
v55 = (__int64 *)v45;
while( 1 )
{
v56 = *v55++;
v57 = *v53++;
if( v56 != v57 )
break;
v54 -= 8;
if( v54 < 8 )
{
if( !v54 )
goto LABEL_80;
while( 1 )
{
v58 = *(unsigned __int8 *)v55;
v55 = (__int64 *)((char *)v55 + 1);
v59 = *(unsigned __int8 *)v53;
v53 = (__int64 *)((char *)v53 + 1);
if( v58 != v59 )
goto LABEL_73;
if( !--v54 )
goto LABEL_80;
}
}
}
LABEL_73:
v60 = v196;
v61 = 4;
while( 1 )
{
v62 = v60[v45 - (_QWORD)v196];
v63 = *v60++;
if( v62 != v63 )
break;
if( !--v61 )
goto LABEL_80;
}
v64 = v197;
v65 = 6;
while( 1 )
{
v66 = v64[v45 - (_QWORD)v197];
v67 = *v64++;
if( v66 != v67 )
break;
if( !--v65 )
goto LABEL_80;
}
v40 = v185;
}
if( *(int *)(v45 + 36) < 0 )
v44 = 1;
v68 = v44 == 0;
if( v44 )
{
if( *(_DWORD *)v45 == 1414090313
&& *(_DWORD *)(v45 + 4) == 1195525195
&& (*((_DWORD *)v22 + 613) & 0x2000) != 0 )
{
v44 = 0;
}
v68 = v44 == 0;
}
v69 = *(_DWORD *)(v45 + 16);
LOBYTE(v41) = v68;
v213 = *(_DWORD *)(v45 + 12);
if( v69 <= *(_DWORD *)(v45 + 8) )
v69 = *(_DWORD *)(v45 + 8);
v70 = (v69 + *(_DWORD *)(v45 + 12) + 4095) & 0xFFFFF000;
v71 = MmImageSectionPagable((_IMAGE_SECTION_HEADER *)v45);
v72 = v209;
v73 = v180;
v74 = v187;
v75 = v71 != 0;
v76 = v209;
v178 = v209;
v77 = 0;
if( v180 != v187 )
{
v78 = (_DWORD *)(v45 + 4);
while( 1 )
{
if( v77 < v213 )
{
if( v77 < v183 )
{
LABEL_141:
v107 = (__int64 *)&v185;
v108 = 0;
v109 = &v182;
while( 1 )
{
v110 = *v107;
if( *v109 )
{
if( (unsigned __int64)v178 >= v110 && (unsigned __int64)v178 <= v110 + *v109 - 1i64 )
break;
}
++v108;
++v109;
++v107;
if( v108 )
{
if( v77 >= v213 && v75 )
{
v111 = v180;
}
else
{
v111 = v180;
*(_DWORD *)(v180 + 16) &= ~0x80000000;
}
*(_BYTE *)(v111 + 15) &= ~0x80u;
break;
}
}
v73 = v180;
v76 = v178;
v74 = v187;
}
}
else
{
if( v77 >= v70 )
{
if( v78 + 9 == (_DWORD *)v186 || v77 < v78[12] )
{
v76 = v178;
goto LABEL_153;
}
v79 = v78[18];
v78 += 10;
v80 = 0;
if( (v79 & 0x2000000) != 0
|| (v81 = (char *)(v78 - 1), v82 = *(v78 - 1), v82 == 1414090313) && *v78 == 1195525195
|| v82 == 1162297680 && ((v83 = *(_WORD *)v78, *(_WORD *)v78 == 30839) || v83 == 29303 || v83 == 30583)
|| v82 == 1095914053 && *(_WORD *)v78 == 16724 )
{
v80 = 1;
}
else
{
v84 = (char *)*((_QWORD *)v22 + 294);
v85 = 7;
v199 = (__int64 *)*((_QWORD *)v22 + 295);
v86 = v81 - v84;
v200 = (char *)*((_QWORD *)v22 + 296);
v201 = (char *)*((_QWORD *)v22 + 297);
v198 = v84;
while( 1 )
{
v87 = (unsigned __int8)v84[v86];
v88 = (unsigned __int8)*v84++;
if( v87 != v88 )
break;
if( !--v85 )
{
LABEL_126:
v80 = 1;
goto LABEL_127;
}
}
v89 = v199;
v90 = 8;
v91 = (__int64 *)(v78 - 1);
while( 1 )
{
v92 = *v91++;
v93 = *v89++;
if( v92 != v93 )
break;
v90 -= 8;
if( v90 < 8 )
{
if( !v90 )
goto LABEL_126;
while( 1 )
{
v94 = *(unsigned __int8 *)v91;
v91 = (__int64 *)((char *)v91 + 1);
v95 = *(unsigned __int8 *)v89;
v89 = (__int64 *)((char *)v89 + 1);
if( v94 != v95 )
goto LABEL_119;
if( !--v90 )
goto LABEL_126;
}
}
}
LABEL_119:
v96 = v200;
v97 = 4;
while( 1 )
{
v98 = (unsigned __int8)v96[v81 - v200];
v99 = (unsigned __int8)*v96++;
if( v98 != v99 )
break;
if( !--v97 )
goto LABEL_126;
}
v100 = v201;
v101 = 6;
v102 = v81 - v201;
while( 1 )
{
v103 = (unsigned __int8)v100[v102];
v104 = (unsigned __int8)*v100++;
if( v103 != v104 )
break;
if( !--v101 )
goto LABEL_126;
}
}
LABEL_127:
if( (int)v78[8] < 0 )
v80 = 1;
if( v80 && *(v78 - 1) == 1414090313 && *v78 == 1195525195 && (*((_DWORD *)v22 + 613) & 0x2000) != 0 )
v80 = 0;
v105 = v78[3];
v41 = v80 == 0;
if( v105 <= v78[1] )
v105 = v78[1];
v70 = (v105 + 4095 + v78[2]) & 0xFFFFF000;
v106 = MmImageSectionPagable((_IMAGE_SECTION_HEADER *)(v78 - 1));
v73 = v180;
v74 = v187;
v68 = v106 == 0;
v76 = v178;
v75 = !v68;
}
if( v41 )
goto LABEL_141;
}
LABEL_153:
v76 += 4096;
v73 += 20i64;
v77 += 4096;
v178 = v76;
v180 = v73;
if( v73 == v74 )
{
v40 = v185;
v72 = v209;
break;
}
}
}
v112 = v190;
if( v190 != v74 )
{
do
{
LODWORD(v113) = 0;
if( v112 != v74 )
{
v114 = v112;
do
{
if( *(char *)(v114 + 15) < 0 )
break;
v113 = (unsigned int)(v113 + 1);
v114 = v112 + 20 * v113;
}
while( v114 != v74 );
v179 = v113;
if( (_DWORD)v113 )
{
v115 = (char **)*((_QWORD *)v22 + 337);
v116 = v113;
v183 = v113;
v191 = v115;
v186 = v112;
v181 = v72;
do
{
v117 = 8i64;
v118 = 0;
if( v116 < 8 )
v117 = v116;
v119 = v181;
v120 = v207;
do
{
v115[1] = (char *)4096;
v121 = &v119[4096 * v118];
*v115 = v121;
v122 = v121;
*((_DWORD *)v22 + 522) += 4096;
v123 = *((_DWORD *)v22 + 517);
v214 = *((_QWORD *)v22 + 259);
for( j = v121; j < v121 + 4096; j += 64 )
_mm_prefetchnta(j);
v125 = *((_QWORD *)v22 + 259);
v126 = v214;
v215 = 32;
do
{
v127 = 8i64;
do
{
v128 = *((_QWORD *)v122 + 1) ^ __ROL8__(*(_QWORD *)v122 ^ v126, v123);
v122 += 16;
v126 = __ROL8__(v128, v123);
--v127;
}
while( v127 );
v129 = __ROL8__(v125 ^ (v122 - v121), 17) ^ v125 ^ (v122 - v121);
v204 = (v129 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v123 = ((unsigned __int8)(v204 ^ v129) ^ (unsigned __int8)v123) & 0x3F;
if( !v123 )
LOBYTE(v123) = 1;
--v215;
}
while( v215 );
v22 = v189;
v130 = v126;
v119 = v181;
while( 1 )
{
v130 >>= 31;
if( !v130 )
break;
LODWORD(v126) = v130 ^ v126;
}
++v118;
*(_DWORD *)v120 = v126 & 0x7FFFFFFF;
v115 += 6;
v120 += 4;
}
while( v118 < (unsigned int)v117 );
v131 = v186;
v132 = (__int64)v191;
sub_1403E933C((__int64)v22, (__int64)v191, v117);
v133 = v207;
v134 = (unsigned int)v117;
v135 = (_DWORD *)(v131 + 16);
v136 = (_QWORD *)v131;
v137 = (char *)(v132 + 16);
do
{
v138 = 16;
v139 = v137;
v140 = v136;
v141 = 2i64;
do
{
v138 -= 8;
*v140 = *(_QWORD *)v139;
v139 += 8;
++v140;
--v141;
}
while( v141 );
for( ; v138; --v138 )
{
v142 = *v139++;
*(_BYTE *)v140 = v142;
v140 = (_QWORD *)((char *)v140 + 1);
}
v137 += 48;
v136 = (_QWORD *)((char *)v136 + 20);
v143 = (*(_DWORD *)v133 ^ *v135) & 0x7FFFFFFF;
v133 += 4;
*v135 ^= v143;
v135 += 5;
--v134;
}
while( v134 );
v22 = v189;
v115 = v191;
v181 += (unsigned int)((_DWORD)v117 << 12);
v116 = v183 - v117;
v186 = v131 + 20 * v117;
*((_DWORD *)v189 + 522) += (_DWORD)v117 << 15;
v183 = v116;
}
while( v116 );
LODWORD(v113) = v179;
v112 = v190;
v74 = v187;
}
}
for( k = 5i64 * (unsigned int)v113; ; k = 5 * v113 )
{
v145 = v112 + 4 * k;
if( v145 == v74 || *(char *)(v145 + 15) >= 0 )
break;
v113 = (unsigned int)(v113 + 1);
}
v72 = &v209[(_DWORD)v113 << 12];
v209 = v72;
v112 += 20i64 * (unsigned int)v113;
v190 = v112;
}
while( v112 != v74 );
v40 = v185;
}
if( !v211 )
return 0i64;
v146 = v182;
if( !v182 )
return 0i64;
v147 = (_DWORD)v184 != 0;
LODWORD(v184) = -(int)v184;
v148 = *((unsigned int *)v22 + 505);
v149 = *((_DWORD *)v22 + 585);
v205 = 0i64;
v150 = v147 + 13;
v151 = v148 + 48;
if( (unsigned int)(v148 + 48) <= *((_DWORD *)v22 + 647) )
{
v152 = (__int64)v22;
*((_DWORD *)v22 + 505) = v151;
LABEL_212:
++*(_DWORD *)(v152 + 2060);
v161 = v152 + v148;
v162 = 48;
v206 = v152 + v148;
v163 = (_QWORD *)(v152 + v148);
v164 = 6i64;
do
{
*v163 = 0i64;
v162 -= 8;
++v163;
--v164;
}
while( v164 );
for( ; v162; --v162 )
{
*(_BYTE *)v163 = 0;
v163 = (_QWORD *)((char *)v163 + 1);
}
*(_DWORD *)v161 = v150;
*(_QWORD *)(v161 + 8) = v40;
v165 = (_QWORD *)v40;
*(_DWORD *)(v161 + 16) = v146;
*(_DWORD *)(v152 + 2088) += v146;
v166 = *(_DWORD *)(v152 + 2068);
if( v40 < v40 + v146 )
{
v167 = (char *)v40;
do
{
_mm_prefetchnta(v167);
v167 += 64;
}
while( (unsigned __int64)v167 < v40 + v146 );
}
v168 = *(_QWORD *)(v152 + 2072);
v169 = (unsigned int)v146 >> 7;
if( (unsigned int)v146 >> 7 )
{
do
{
v170 = 8i64;
do
{
v171 = v165[1] ^ __ROL8__(*v165 ^ v168, v166);
v165 += 2;
v168 = __ROL8__(v171, v166);
--v170;
}
while( v170 );
v172 = (__ROL8__(*(_QWORD *)(v152 + 2072) ^ ((unsigned __int64)v165 - v40), 17) ^ *(_QWORD *)(v152 + 2072) ^ ((unsigned __int64)v165 - v40))
* (unsigned __int128)0x7010008004002001ui64;
v166 = ((unsigned __int8)v172 ^ (unsigned __int8)(BYTE8(v172) ^ v166)) & 0x3F;
if( !v166 )
LOBYTE(v166) = 1;
--v169;
}
while( v169 );
v161 = v152 + v148;
}
v173 = v146 & 0x7F;
if( v173 >= 8 )
{
v174 = (unsigned __int64)(v146 & 0x7F) >> 3;
do
{
v168 = __ROL8__(*v165++ ^ v168, v166);
v173 -= 8;
--v174;
}
while( v174 );
}
for( ; v173; --v173 )
{
v175 = *(unsigned __int8 *)v165;
v165 = (_QWORD *)((char *)v165 + 1);
v168 = __ROL8__(v175 ^ v168, v166);
}
for( m = v168; ; LODWORD(v168) = m ^ v168 )
{
m >>= 31;
if( !m )
break;
}
*(_DWORD *)(v161 + 20) = v168 & 0x7FFFFFFF;
*(_DWORD *)(v152 + 2088) += v146;
if( (*(_DWORD *)(v152 + 2448) & 0x40000000) != 0 )
{
if( (_DWORD)v146 )
sub_1403E92DC(v152, v40, v146, v161 + 28);
}
*(_DWORD *)(v161 + 24) = 1;
*(_QWORD *)a1 = v152;
return 0i64;
}
v152 = sub_140A0EB30(v22, v151, v149);
if( v152 )
{
v153 = *((_DWORD *)v22 + 612);
if( (v153 & 4) == 0 )
{
v154 = *((_DWORD *)v22 + 505);
v155 = *((_QWORD *)v22 + 249);
v156 = (v153 & 0x20000000) != 0 ? *((_DWORD *)v22 + 585) : 0;
if( v154 >= 8 )
{
v157 = (unsigned __int64)v154 >> 3;
do
{
*(_QWORD *)v22 = 0i64;
v154 -= 8;
v22 += 8;
--v157;
}
while( v157 );
}
for( ; v154; --v154 )
*v22++ = 0;
v158 = *(_DWORD *)(v152 + 2340);
*(_DWORD *)(v152 + 2340) = v156;
if( v156 == 3 )
{
(*(void(__fastcall **)(__int64))(v152 + 872))(v155);
}
else
{
v159 = 0;
if( (*(_DWORD *)(v152 + 2448) & 0x10000000) == 0 )
v159 = v156;
if( v159 )
(*(void(__fastcall **)(__int64, _QWORD))(v152 + 552))(v155 - 8, *(_QWORD *)(v155 - 8));
else(*(void(__fastcall **)(__int64))(v152 + 256))(v155);
}
*(_DWORD *)(v152 + 2340) = v158;
}
*(_DWORD *)(v152 + 2448) &= ~4u;
goto LABEL_212;
}
return 3221225626i64;
}
if( (*((_DWORD *)v3 + 612) & 0x200000) == 0 )
{
LODWORD(v188) = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, a2, (PVOID)4, 0i64);
}
if( !*((_DWORD *)v3 + 574) )
{
*((_QWORD *)v3 + 289) = 0i64;
*((_QWORD *)v3 + 290) = 271i64;
*((_QWORD *)v3 + 288) = v3 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v3 + 291) = a2;
*((_DWORD *)v3 + 574) = 1;
__b8((__int64)v3, 0i64);
}
}
return 3221225595i64;
}Referenced by:
sub_1403DCCA0
sub_140A0C0FC