sub_1403DCCA0
__int64 __fastcall sub_1403DCCA0(__int64 a1, __int64 a2){
__int64 v2;
_DWORD *v4;
int v6;
int v7;
int v8;
int v9;
UINT8 v10;
UINT64 v11;
PSLIST_ENTRY PoolWithTag;
__int64 v13;
__int64 v14;
__int64 v15;
unsigned int v16;
__int64 v17;
__int64 v18;
__int64 v19;
int v20;
__int64 v21;
__int64 v22;
int v23;
__int64 v24;
int v25;
unsigned __int64 v26;
unsigned __int128 v27;
unsigned __int64 v28;
unsigned __int128 v29;
unsigned __int64 v30;
int v31;
int v32;
unsigned int v33;
int v34;
int v35;
int v36;
unsigned __int64 v37;
__int64 v38;
unsigned int v39;
__int64 v40;
unsigned __int64 v41;
unsigned __int64 v42;
unsigned __int128 v43;
__int64 v44;
unsigned int *v45;
int v46;
unsigned __int64 v47;
unsigned int v48;
unsigned __int64 v49;
unsigned int v50;
unsigned __int64 v51;
unsigned int v52;
int v53;
__int64 v54;
__int64 v55;
char *v56;
unsigned int v57;
__int64 v58;
int v59;
int v60;
int v61;
int v62;
__int64 v63;
unsigned __int64 v64;
unsigned __int128 v65;
unsigned __int64 v66;
__int64 v67;
int v68;
unsigned __int64 v69;
int v70;
__int64 v71;
bool v72;
__int64 v73;
__int64 v74;
int *v75;
unsigned __int64 v76;
int v77;
int v78;
int v79;
unsigned int v80;
unsigned __int64 v81;
unsigned __int64 v82;
_QWORD *v83;
__int64 v84;
_QWORD *v85;
char *v86;
int v87;
unsigned __int64 v88;
unsigned int v89;
__int64 v90;
__int64 v91;
__int64 v92;
unsigned __int128 v93;
unsigned int v94;
unsigned __int64 v95;
__int64 v96;
unsigned __int64 i28;
unsigned __int64 v98;
unsigned int v99;
__int64 v100;
__int64 v101;
unsigned __int8 v102;
unsigned __int64 v103;
__int64 v104;
unsigned __int64 v105;
int v106;
int v107;
int v108;
unsigned __int64 v109;
int v110;
unsigned __int64 v111;
unsigned __int64 v112;
__int64 v113;
__int64 v114;
_QWORD *v115;
char *v116;
int v117;
__int64 v118;
unsigned __int64 v119;
unsigned int v120;
__int64 v121;
unsigned __int64 v122;
__int64 v123;
unsigned __int64 v124;
__int64 v125;
unsigned __int64 v126;
__int64 v127;
unsigned __int64 i27;
__int64 v129;
unsigned int v130;
unsigned int v131;
unsigned __int8 v132;
unsigned __int64 v133;
unsigned __int64 v134;
int v135;
int *v136;
bool v137;
__int64 v138;
__int64 v139;
unsigned __int16 v140;
_QWORD *v141;
__int64 v142;
_QWORD *v143;
char *v144;
int v145;
__int64 v146;
unsigned __int64 v147;
unsigned int v148;
__int64 v149;
__int64 v150;
unsigned __int128 v151;
unsigned int v152;
unsigned __int64 v153;
__int64 v154;
unsigned __int64 i26;
unsigned int v156;
__int64 v157;
__int64 v158;
__int64 v159;
unsigned __int8 v160;
unsigned __int64 v161;
unsigned __int64 v162;
unsigned __int64 v163;
int v164;
__int16 v165;
__int64 v166;
int(__fastcall *v167)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *);
__int64 v168;
void(*v169)(void);
int v170;
__int64 v171;
unsigned int i25;
__int64 v173;
unsigned __int64 v174;
__int64 v175;
__int64 v176;
unsigned __int64 v177;
unsigned __int64 v178;
int v179;
int v180;
unsigned __int64 v181;
unsigned __int128 v182;
void(*v183)(void);
int v184;
__int64 v185;
unsigned int v186;
unsigned __int8 v187;
volatile signed __int8 **v188;
volatile signed __int8 *v189;
__int64 v190;
unsigned __int64 v191;
__int64 *v192;
__int64 v193;
__int64 v194;
__int64 *v195;
_BYTE *v196;
char v197;
__int64 v198;
int *v199;
__int64 v200;
__int64 v201;
bool v202;
int *v203;
void(*v204)(void);
int v205;
__int64 v206;
unsigned int v207;
unsigned __int8 v208;
_QWORD **v209;
_QWORD *v210;
unsigned __int64 v211;
int *v212;
__int64 v213;
unsigned __int64 *v214;
unsigned __int8 v215;
int v216;
int *v217;
unsigned __int8 v218;
__int64 v219;
unsigned __int64 v220;
_QWORD *v221;
__int64 v222;
_QWORD *v223;
char *v224;
int v225;
unsigned __int64 v226;
unsigned int v227;
__int64 v228;
__int64 v229;
unsigned __int128 v230;
unsigned int v231;
unsigned __int64 v232;
__int64 v233;
unsigned __int64 i24;
unsigned int v235;
__int64 v236;
__int64 v237;
__int64 v238;
unsigned __int8 v239;
unsigned __int64 v240;
unsigned __int64 v241;
int v242;
__int64 v243;
unsigned __int64 v244;
__int64 v245;
void(*v246)(void);
__int64 v247;
unsigned int v248;
void(__fastcall *v249)(__int64, _QWORD);
unsigned __int64 *v250;
__int64 v251;
unsigned __int64 v252;
__int64 v253;
__int64 v254;
_QWORD **v255;
_QWORD *v256;
unsigned int v257;
unsigned __int8 v258;
__int64 v259;
char *v260;
__int64 v261;
__int64 v262;
int *v263;
_QWORD **v264;
_QWORD *i7;
int v266;
__int64 v267;
__int64 v268;
void(*v269)(void);
unsigned int v270;
volatile signed __int8 **v271;
volatile signed __int8 *v272;
_QWORD **v273;
_QWORD *v274;
__int64 v275;
int *v276;
char *v277;
__int64 v278;
__int64 v279;
_QWORD **v280;
__int64(*v281)(void);
__int64 v282;
__int64 v283;
unsigned int v284;
unsigned int *v285;
__int64 v286;
_QWORD *v287;
unsigned __int64 v288;
__int64 v289;
int v290;
unsigned __int64 v291;
unsigned __int128 v292;
__int64 v293;
unsigned __int64 v294;
__int64 v295;
__int64 v296;
int v297;
_QWORD *v298;
unsigned __int64 v299;
unsigned __int64 v300;
unsigned __int128 v301;
unsigned __int64 v302;
unsigned __int128 v303;
unsigned __int64 v304;
unsigned int v305;
_QWORD *v306;
unsigned __int64 v307;
unsigned __int128 v308;
unsigned __int64 v309;
unsigned __int128 v310;
unsigned __int64 v311;
_QWORD *v312;
__int64 v313;
__int64 v314;
unsigned __int64 v315;
unsigned __int64 v316;
unsigned __int64 v317;
int v318;
int v319;
int v320;
int *v321;
unsigned __int64 v322;
unsigned __int128 v323;
int v324;
int v325;
int v326;
int v327;
int v328;
char *v329;
int i11;
unsigned int v331;
_QWORD *v332;
int v333;
__int64 v334;
char v335;
__int64 v336;
__int64 v337;
__int64(__fastcall *v338)(_QWORD);
__int64 v339;
char *v340;
int v341;
__int64 v342;
_QWORD *v343;
int v344;
__int64 v345;
char v346;
__int64 v347;
__int64 v348;
__int64(__fastcall *v349)(unsigned __int64);
_BYTE *v350;
__int64 *v351;
__int64 v352;
int *v353;
__int64 v354;
__int64 v355;
__int64 v356;
__int64(__fastcall *v357)(__int64, char *);
unsigned int *v358;
char *v359;
int v360;
signed __int64 v361;
int v362;
int v363;
int *v364;
__int64 v365;
__int64 v366;
int v367;
unsigned int v368;
__int64 v369;
int *v370;
__int64 v371;
int v372;
int v373;
int v374;
int v375;
__int64 v376;
int v377;
unsigned __int64 v378;
__int64 v379;
unsigned int v380;
__int64 v381;
int v382;
__int64(__fastcall *v383)(char *, __int64, _QWORD, unsigned int *);
__int64 v384;
__int64(__fastcall *v385)(char *, __int64, __int64, unsigned int *);
__int64 v386;
__int64 v387;
__int64(__fastcall *v388)(char *, __int64, __int64, unsigned int *);
__int64(__fastcall *v389)(char *);
__int64 v390;
__int64 v391;
int v392;
int v393;
unsigned int v394;
__int64 v395;
int v396;
unsigned int v397;
__int64 v398;
_QWORD *v399;
int v400;
unsigned __int64 v401;
int v402;
int v403;
unsigned __int64 v404;
__int64 *v405;
unsigned int *v406;
__int64 v407;
int v408;
_QWORD *v409;
__int64 v410;
_QWORD *v411;
_QWORD *v412;
char *v413;
int v414;
__int64 v415;
unsigned __int64 v416;
unsigned int v417;
__int64 v418;
__int64 v419;
__int64 v420;
__int64 v421;
unsigned int v422;
unsigned __int64 v423;
unsigned __int64 i13;
_DWORD *v425;
int v426;
unsigned int v427;
_QWORD *v428;
int *v429;
int v430;
_QWORD *v431;
__int64 v432;
_QWORD *v433;
char *v434;
int v435;
__int64 v436;
unsigned __int64 v437;
__int64 v438;
unsigned int v439;
__int64 v440;
__int64 v441;
unsigned __int128 v442;
unsigned __int64 v443;
unsigned __int64 v444;
__int64 v445;
unsigned __int64 i14;
_DWORD *v447;
__int64 v448;
unsigned int v449;
__int64 v450;
int v451;
unsigned int v452;
__int64 v453;
int v454;
unsigned __int64 v455;
int v456;
int v457;
__int64 v458;
_QWORD *v459;
int v460;
__int64 v461;
unsigned __int64 v462;
int v463;
__int64 v464;
char *v465;
unsigned int v466;
__int64 v467;
__int64 v468;
__int64 v469;
unsigned __int64 v470;
unsigned int v471;
unsigned __int64 v472;
__int64 v473;
unsigned __int64 i15;
__int64 v475;
_DWORD *v476;
char *v477;
__int64 v478;
__int64 v479;
char *v480;
char *v481;
char *v482;
PVOID v483;
char *v484;
unsigned __int16 v485;
unsigned int v486;
unsigned int v487;
unsigned int *v488;
__int64 v489;
_DWORD *v490;
__int64 v491;
unsigned int v492;
__int64 v493;
unsigned int v494;
unsigned int v495;
__int64 v496;
unsigned int v497;
unsigned int v498;
unsigned int *v499;
unsigned int *v500;
PVOID v501;
unsigned int *v502;
unsigned int v503;
int v504;
__int64 v505;
int v506;
__int64 v507;
unsigned int v508;
__int64 v509;
int v510;
unsigned int v511;
__int64 v512;
int v513;
unsigned __int64 v514;
int v515;
int v516;
__int64 v517;
int v518;
_QWORD *v519;
__int64 v520;
signed __int64 v521;
unsigned __int64 v522;
unsigned __int64 i16;
unsigned int v524;
__int64 v525;
unsigned int *v526;
unsigned __int64 v527;
__int64 v528;
__int64 v529;
_DWORD *v530;
__int64 v531;
unsigned __int8 *v532;
int v533;
int v534;
__int16 v535;
int v536;
unsigned __int8 *v537;
unsigned __int8 *v538;
__int64 v539;
__int64 v540;
__int64 *v541;
unsigned int v542;
__int64 *v543;
__int64 v544;
__int64 v545;
__int64 v546;
__int64 v547;
unsigned __int8 *v548;
int v549;
unsigned __int8 *v550;
__int64 v551;
__int64 v552;
unsigned __int8 *v553;
int v554;
unsigned __int8 *v555;
__int64 v556;
__int64 v557;
int v558;
char *v559;
unsigned int v560;
unsigned int v561;
unsigned __int64 v562;
unsigned int v563;
unsigned int v564;
unsigned int v565;
unsigned int v566;
__int64 *v567;
__int64 v568;
unsigned int v569;
unsigned __int64 v570;
char *v571;
int *v572;
__int64 v573;
_QWORD *v574;
int v575;
unsigned __int64 v576;
char *v577;
unsigned int v578;
unsigned __int64 v579;
__int64 v580;
__int64 v581;
unsigned __int128 v582;
unsigned int v583;
unsigned __int64 v584;
__int64 v585;
unsigned __int64 i17;
bool v587;
int v588;
unsigned int *v589;
char v590;
__int64 v591;
__int64 v592;
__int64 v593;
PVOID v594;
__int64 *v595;
unsigned int v596;
char *v597;
unsigned int v598;
int *v599;
char *v600;
_QWORD *v601;
int v602;
__int64 v603;
char *i18;
unsigned __int64 v605;
unsigned int v606;
__int64 v607;
__int64 v608;
__int64 v609;
signed __int64 v610;
unsigned int v611;
unsigned __int64 v612;
__int64 v613;
unsigned __int64 i19;
char *v615;
unsigned int v616;
unsigned __int64 v617;
PVOID v618;
int *v619;
__int64 *v620;
__int64 v621;
unsigned int v622;
unsigned __int64 v623;
unsigned int v624;
unsigned __int64 v625;
_QWORD *v626;
char *v627;
int v628;
__int64 v629;
unsigned __int64 v630;
unsigned int v631;
__int64 v632;
__int64 v633;
__int64 v634;
unsigned __int64 v635;
unsigned int v636;
unsigned __int64 v637;
__int64 v638;
unsigned __int64 i20;
__int64 v640;
char *v641;
_BYTE *v642;
char *v643;
char *v644;
__int64 v645;
__int64 v646;
__int64 v647;
__int64 v648;
__int64 v649;
_QWORD *v650;
int v651;
__int64 v652;
char v653;
__int64 v654;
__int64 v655;
char *v656;
__int64 i12;
_QWORD *v658;
int v659;
__int64 v660;
char v661;
__int64 v662;
__int64 v663;
char *v664;
_QWORD *v665;
int v666;
__int64 v667;
char v668;
__int64 v669;
__int64 v670;
__int64 v671;
int v672;
__int64 v673;
__int64 v674;
unsigned __int64 v675;
__int64 v676;
unsigned __int64 v677;
__int64 v678;
__int64 v679;
unsigned __int64 v680;
__int64 v681;
unsigned __int64 v682;
unsigned __int64 v683;
unsigned int v684;
_QWORD *v685;
__int64 v686;
_QWORD *v687;
char *v688;
int v689;
unsigned __int64 v690;
unsigned int v691;
__int64 v692;
__int64 v693;
__int64 v694;
unsigned __int128 v695;
unsigned int v696;
unsigned __int64 v697;
__int64 v698;
unsigned __int64 i6;
unsigned int v700;
__int64 v701;
__int64 v702;
__int64 v703;
unsigned __int8 v704;
unsigned __int64 v705;
__int64 v706;
unsigned __int64 v707;
int v708;
unsigned int v709;
unsigned int v710;
__int64 *v711;
char *v712;
__int64 v713;
__int64 v714;
__int64 v715;
__int64 v716;
int v717;
__int64 v718;
__int64 v719;
__int64 v720;
__int64 v721;
unsigned __int64 v722;
__int64 v723;
unsigned __int64 v724;
unsigned __int64 v725;
int v726;
__int64 v727;
__int16 v728;
__int64 v729;
int(__fastcall *v730)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *);
__int64(*v731)(void);
__int64 v732;
__int64(*v733)(void);
__int64 v734;
unsigned int v735;
unsigned __int8 v736;
__int64 v737;
unsigned __int64 v738;
_QWORD *v739;
__int64 v740;
_QWORD *v741;
char *v742;
int v743;
__int64 v744;
unsigned __int64 v745;
unsigned int v746;
__int64 v747;
__int64 v748;
unsigned __int128 v749;
unsigned int v750;
unsigned __int64 v751;
__int64 v752;
unsigned __int64 i2;
unsigned int v754;
char *v755;
unsigned __int8 v756;
unsigned int v757;
unsigned __int64 v758;
_QWORD *v759;
int v760;
char *v761;
char *v762;
unsigned int v763;
unsigned __int64 v764;
__int64 v765;
__int64 v766;
__int64 v767;
unsigned __int64 v768;
unsigned int v769;
unsigned __int64 v770;
__int64 v771;
unsigned __int64 i3;
__int64 v773;
_QWORD *v774;
int v775;
__int64 v776;
char v777;
__int64 v778;
__int64 v779;
_QWORD *v780;
_QWORD *v781;
int v782;
char *v783;
__int64 v784;
unsigned __int64 v785;
unsigned int v786;
__int64 v787;
__int64 v788;
unsigned __int64 v789;
unsigned int v790;
unsigned __int64 v791;
__int64 v792;
unsigned __int64 i4;
unsigned int v794;
__int64 v795;
__int64 v796;
__int64 v797;
unsigned __int8 v798;
unsigned __int64 v799;
unsigned __int64 v800;
unsigned __int64 v801;
int v802;
unsigned int v803;
_QWORD *v804;
int v805;
char *v806;
__int64 v807;
unsigned __int64 v808;
unsigned __int64 v809;
unsigned int v810;
__int64 v811;
__int64 v812;
__int64 v813;
unsigned __int64 v814;
unsigned int v815;
unsigned __int64 v816;
__int64 v817;
unsigned __int64 i5;
int v819;
__int64 v820;
unsigned __int64 v821;
unsigned int v822;
char *v823;
__int64 v824;
__int64 v825;
char *v826;
int v827;
__int64 j;
unsigned __int64 v829;
unsigned int v830;
__int64 v831;
__int64 v832;
unsigned __int128 v833;
char v834;
__int64 v835;
unsigned __int64 v836;
__int64 v837;
unsigned __int64 k;
unsigned int v839;
__int64 v840;
__int64 v841;
unsigned __int8 v842;
unsigned __int64 v843;
unsigned __int64 v844;
unsigned __int64 v845;
int v846;
int v847;
__int64 v848;
__int64 v849;
unsigned __int8 v850;
__int64 v851;
unsigned int *v852;
unsigned int *v853;
char v854;
unsigned __int64 v855;
__int64 v856;
__int64 *v857;
unsigned int *v858;
__int64 v859;
__int64 v860;
__int64 v861;
__int64 v862;
unsigned __int64 v863;
unsigned int *v864;
unsigned int *v865;
unsigned __int64 v866;
unsigned __int64 v867;
unsigned __int64 v868;
unsigned int v869;
unsigned int v870;
int v871;
unsigned __int64 v872;
unsigned __int64 v873;
_QWORD *v874;
__int64 v875;
_QWORD *v876;
char *v877;
int v878;
__int64 v879;
unsigned __int64 v880;
unsigned int v881;
__int64 v882;
__int64 v883;
__int64 v884;
unsigned __int64 v885;
unsigned int v886;
unsigned __int64 v887;
__int64 v888;
unsigned __int64 m;
unsigned int v890;
unsigned int v891;
__int64 v892;
__int64 v893;
unsigned __int8 v894;
unsigned __int64 v895;
__int64 v896;
unsigned __int64 v897;
unsigned __int64 v898;
int v899;
int v900;
__int64 v901;
__int64 v902;
__int64 v903;
__int64 v904;
int v905;
__int64 v906;
__int64 v907;
__int64 v908;
__int64 v909;
int v910;
__int64 v911;
int v912;
__int64 v913;
__int64 v914;
__int64 v915;
_QWORD *v916;
__int64 v917;
_QWORD *v918;
char *v919;
int v920;
__int64 v921;
unsigned __int64 v922;
unsigned int v923;
__int64 v924;
__int64 v925;
unsigned __int64 v926;
unsigned int v927;
unsigned __int64 v928;
__int64 v929;
unsigned __int64 n;
unsigned int v931;
__int64 v932;
__int64 v933;
__int64 v934;
unsigned __int8 v935;
unsigned __int64 v936;
unsigned __int64 v937;
int v938;
int v939;
__int64 v940;
__int64(__fastcall *v941)(_QWORD);
unsigned int v942;
__int64 v943;
unsigned __int8 v944;
char v945;
char v946;
char *v947;
__int64 v948;
unsigned __int64 v949;
char *v950;
unsigned __int64 *v951;
unsigned __int64 v952;
unsigned __int64 *v953;
unsigned __int8 v954;
__int64 v955;
__int64 v956;
unsigned __int64 v957;
unsigned __int64 v958;
_QWORD *v959;
int v960;
__int64 v961;
char v962;
unsigned __int8 v963;
char v964;
char v965;
char *v966;
__int64 v967;
unsigned __int64 v968;
char *v969;
unsigned __int64 v970;
unsigned __int64 *v971;
unsigned __int8 v972;
__int64 v973;
__int64 v974;
unsigned __int64 v975;
unsigned __int64 v976;
_QWORD *v977;
int v978;
__int64 v979;
char v980;
__int64(__fastcall *v981)(__int64);
__int64 v982;
__int64 v983;
unsigned __int8 v984;
unsigned __int8 v985;
int *v986;
char v987;
unsigned __int64 v988;
char v989;
int *v990;
char v991;
unsigned __int64 *v992;
unsigned __int64 v993;
unsigned __int64 *v994;
__int64 v995;
char *v996;
__int64 v997;
unsigned __int64 v998;
_QWORD *v999;
int v1000;
__int64 v1001;
char v1002;
unsigned int v1003;
int v1004;
__int64 v1005;
unsigned __int64 v1006;
__int64 v1007;
_DWORD *v1008;
unsigned __int64 v1009;
unsigned int v1010;
char *v1011;
unsigned int v1012;
__int64 v1013;
__int64 v1014;
_QWORD *v1015;
int v1016;
char *v1017;
unsigned __int64 v1018;
__int64 v1019;
unsigned __int64 v1020;
unsigned int v1021;
__int64 v1022;
__int64 v1023;
__int64 v1024;
unsigned __int64 v1025;
unsigned int v1026;
unsigned __int64 v1027;
__int64 v1028;
unsigned __int64 ii;
char v1030;
unsigned int v1031;
unsigned __int8 v1032;
unsigned __int64 v1033;
__int64 v1034;
unsigned __int64 v1035;
unsigned __int64 v1036;
int v1037;
char *v1038;
int *v1039;
__int64 v1040;
__int64 v1041;
_QWORD *v1042;
int v1043;
char *v1044;
unsigned __int64 v1045;
__int64 v1046;
unsigned __int64 v1047;
unsigned int v1048;
__int64 v1049;
__int64 v1050;
unsigned __int128 v1051;
unsigned int v1052;
unsigned __int64 v1053;
__int64 v1054;
unsigned __int64 jj;
unsigned int v1056;
unsigned int v1057;
__int64 v1058;
unsigned __int8 v1059;
unsigned __int64 v1060;
__int64 v1061;
unsigned __int64 v1062;
int v1063;
__int64 v1064;
__int64 v1065;
_QWORD *v1066;
__int64 v1067;
_QWORD *v1068;
char *v1069;
int v1070;
unsigned __int64 v1071;
unsigned int v1072;
__int64 v1073;
__int64 v1074;
__int64 v1075;
unsigned __int64 v1076;
__int64 v1077;
unsigned __int64 v1078;
__int64 v1079;
unsigned __int64 i;
unsigned int v1081;
__int64 v1082;
__int64 v1083;
unsigned __int8 v1084;
unsigned __int64 v1085;
unsigned __int64 v1086;
int v1087;
int v1088;
unsigned __int64 **v1089;
unsigned int v1090;
__int64 v1091;
char *v1092;
__int64 v1093;
_QWORD *v1094;
int v1095;
__int64 v1096;
char v1097;
__int64 v1098;
__int64 v1099;
int v1100;
__int64 v1101;
volatile signed __int32 *v1102;
_QWORD *v1103;
__int64 v1104;
_QWORD *v1105;
char *v1106;
int v1107;
__int64 v1108;
unsigned __int64 v1109;
unsigned int v1110;
__int64 v1111;
__int64 v1112;
unsigned __int128 v1113;
unsigned int v1114;
unsigned __int64 v1115;
__int64 v1116;
unsigned __int64 kk;
unsigned int v1118;
__int64 v1119;
__int64 v1120;
__int64 v1121;
unsigned __int8 v1122;
unsigned __int64 v1123;
unsigned __int64 v1124;
unsigned __int64 v1125;
int v1126;
unsigned __int64 v1127;
int v1128;
__int64 v1129;
unsigned int v1130;
int v1131;
unsigned __int64 v1132;
unsigned __int64 v1133;
_QWORD *v1134;
__int64 v1135;
_QWORD *v1136;
char *v1137;
int v1138;
__int64 v1139;
unsigned __int64 v1140;
unsigned int v1141;
__int64 v1142;
__int64 v1143;
unsigned __int128 v1144;
unsigned int v1145;
unsigned __int64 v1146;
__int64 v1147;
unsigned __int64 mm;
__int64 v1149;
__int64 v1150;
unsigned __int8 v1151;
unsigned __int64 v1152;
__int64 v1153;
unsigned __int64 v1154;
int v1155;
__int64 v1156;
__int64 v1157;
int v1158;
__int64 v1159;
unsigned int v1160;
_QWORD *v1161;
int v1162;
__int64 v1163;
char v1164;
__int64 v1165;
int v1166;
unsigned int v1167;
char v1168;
volatile signed __int8 **v1169;
volatile signed __int8 *v1170;
unsigned __int8 v1171;
int v1172;
unsigned int v1173;
unsigned int v1174;
int v1175;
unsigned __int64 v1176;
unsigned __int64 v1177;
_QWORD *v1178;
__int64 v1179;
_QWORD *v1180;
char *v1181;
int v1182;
unsigned __int64 v1183;
unsigned int v1184;
__int64 v1185;
__int64 v1186;
__int64 v1187;
unsigned __int64 v1188;
unsigned int v1189;
unsigned __int64 v1190;
__int64 v1191;
unsigned __int64 nn;
unsigned int v1193;
unsigned int v1194;
__int64 v1195;
__int64 v1196;
unsigned __int8 v1197;
unsigned __int64 v1198;
__int64 v1199;
unsigned __int64 v1200;
int v1201;
__int64 v1202;
__int64 v1203;
unsigned int v1204;
int v1205;
unsigned __int64 v1206;
__int64 v1207;
_QWORD *v1208;
__int64 v1209;
_QWORD *v1210;
char *v1211;
int v1212;
unsigned __int64 v1213;
unsigned int v1214;
__int64 v1215;
__int64 v1216;
unsigned __int64 v1217;
unsigned int v1218;
unsigned __int64 v1219;
__int64 v1220;
unsigned __int64 i1;
unsigned int v1222;
__int64 v1223;
__int64 v1224;
__int64 v1225;
unsigned __int8 v1226;
unsigned __int64 v1227;
unsigned __int64 v1228;
int v1229;
unsigned int v1230;
unsigned int v1231;
unsigned int v1232;
int v1233;
__int16 v1234;
char *v1235;
int v1236;
unsigned __int8 *v1237;
__int64 v1238;
__int64 v1239;
unsigned int *v1240;
__int64 v1241;
__int64 *v1242;
unsigned int v1243;
__int64 *v1244;
__int64 v1245;
__int64 v1246;
__int64 v1247;
__int64 v1248;
unsigned __int8 *v1249;
int v1250;
unsigned __int8 *v1251;
__int64 v1252;
__int64 v1253;
unsigned __int8 *v1254;
int v1255;
unsigned __int8 *v1256;
__int64 v1257;
__int64 v1258;
int v1259;
int v1260;
__int64 v1261;
int v1262;
int *v1263;
signed int v1264;
signed __int64 v1265;
unsigned __int8 v1266;
unsigned int v1267;
int v1268;
__int64 v1269;
unsigned __int64 v1270;
__int64 v1271;
unsigned __int64 v1272;
__int64 v1273;
__int64 v1274;
unsigned int *v1275;
unsigned int *v1276;
char v1277;
unsigned __int64 v1278;
__int64 v1279;
__int64 *v1280;
unsigned int *v1281;
__int64 v1282;
__int64 v1283;
__int64 v1284;
int v1285;
unsigned __int64 v1286;
unsigned __int64 v1287;
_QWORD *v1288;
__int64 v1289;
_QWORD *v1290;
char *v1291;
int v1292;
__int64 v1293;
unsigned __int64 v1294;
unsigned int v1295;
__int64 v1296;
__int64 v1297;
__int64 v1298;
unsigned __int64 v1299;
unsigned int v1300;
unsigned __int64 v1301;
__int64 v1302;
unsigned __int64 i21;
unsigned int v1304;
unsigned int v1305;
__int64 v1306;
__int64 v1307;
unsigned __int8 v1308;
unsigned __int64 v1309;
__int64 v1310;
unsigned __int64 v1311;
int v1312;
__int64 v1313;
unsigned __int64 v1314;
unsigned int *v1315;
int *v1316;
unsigned __int64 v1317;
unsigned __int64 v1318;
_QWORD *v1319;
int v1320;
char *v1321;
__int64 v1322;
unsigned __int64 v1323;
unsigned __int64 v1324;
unsigned int v1325;
__int64 v1326;
__int64 v1327;
__int64 v1328;
unsigned __int64 v1329;
unsigned int v1330;
unsigned __int64 v1331;
__int64 v1332;
unsigned __int64 i23;
int v1334;
__int64 v1335;
__int64 v1336;
__int64 v1337;
_QWORD *v1338;
__int64 v1339;
_QWORD *v1340;
char *v1341;
int v1342;
__int64 v1343;
unsigned __int64 v1344;
unsigned int v1345;
__int64 v1346;
__int64 v1347;
__int64 v1348;
unsigned __int64 v1349;
unsigned int v1350;
unsigned __int64 v1351;
__int64 v1352;
unsigned __int64 i22;
unsigned int v1354;
__int64 v1355;
__int64 v1356;
__int64 v1357;
unsigned __int8 v1358;
unsigned __int64 v1359;
unsigned __int64 v1360;
int v1361;
unsigned int v1362;
_BYTE *v1363;
char *v1364;
char v1365;
volatile signed __int32 *v1366;
struct _KPRCB *v1367;
__int64 v1368;
int v1369;
struct _KPRCB *v1370;
unsigned __int64 v1371;
_BOOL4 v1372;
int *v1373;
unsigned int v1374;
__int64 v1375;
unsigned __int64 v1376;
__int64 v1377;
unsigned __int64 v1378;
unsigned __int64 v1379;
int v1380;
bool v1381;
__int64 v1382;
__int64 v1383;
__int64 v1384;
unsigned int *v1385;
unsigned int *v1386;
char v1387;
unsigned __int64 v1388;
__int64 v1389;
__int64 *v1390;
unsigned int *v1391;
__int64 v1392;
__int64 v1393;
__int64 v1394;
__int64 v1395;
_QWORD *v1396;
int v1397;
_QWORD *v1398;
char *v1399;
__int64 v1400;
unsigned int v1401;
__int64 v1402;
__int64 v1403;
unsigned __int128 v1404;
unsigned int v1405;
unsigned __int64 v1406;
__int64 v1407;
__int64 v1408;
int v1409;
__int64 v1410;
int v1411;
int v1412;
__int64 v1413;
unsigned int v1414;
unsigned __int64 v1415;
unsigned int v1416;
unsigned __int64 v1417;
__int64 v1418;
__int64 v1419;
int v1420;
_QWORD *v1421;
struct _KPRCB *CurrentPrcb;
__int64 v1423;
unsigned __int64 v1424;
__int64 v1425;
unsigned __int64 v1426;
__int64 v1427;
__int64 v1428;
__int64 v1429;
__int64 v1430;
int v1431;
_QWORD *v1432;
__int64 v1433;
__int64 v1434;
unsigned __int16 Ldtr;
INT16 Tr;
unsigned __int64 v1437;
__int64 v1438;
unsigned __int16 v1439;
__int64 v1440;
_QWORD *v1441;
char *v1442;
unsigned __int64 v1443;
unsigned int v1444;
__int64 v1445;
__int64 v1446;
__int64 v1447;
unsigned __int64 v1448;
unsigned int v1449;
__int64 v1450;
unsigned __int64 i8;
unsigned int v1452;
_QWORD *v1453;
int v1454;
__int64 v1455;
char v1456;
__int64 v1457;
int v1458;
__int64 v1459;
__int64 v1460;
void(__fastcall *v1461)(char *, __int64);
unsigned int v1462;
unsigned __int64 v1463;
__int64 v1464;
__int64 v1465;
unsigned __int64 v1466;
__int64 v1467;
__int64 v1468;
unsigned __int8 v1469;
__int16 v1470;
int v1471;
__int64 v1472;
unsigned __int64 v1473;
__int64 v1474;
__int64 v1475;
__int64 v1476;
__int64 v1477;
__int64 v1478;
__int64 v1479;
unsigned int *v1480;
__int64 v1481;
unsigned __int64 v1482;
unsigned __int64 v1483;
struct _KPRCB *v1484;
_QWORD *v1485;
int v1486;
char *v1487;
int v1488;
__int64 v1489;
unsigned __int64 v1490;
int v1491;
__int64 v1492;
__int64 v1493;
unsigned __int128 v1494;
int v1495;
int v1496;
__int64 v1497;
__int64 v1498;
unsigned __int64 i9;
unsigned int *v1500;
__int64 v1501;
unsigned int v1502;
_QWORD *v1503;
int v1504;
unsigned __int64 v1505;
char *v1506;
int v1507;
__int64 v1508;
__int64 v1509;
unsigned __int64 i10;
unsigned int v1511;
int *v1512;
__int64 v1513;
unsigned __int64 v1514;
__int64 v1515;
__int64 v1516;
__int64 v1517;
__int64 v1518;
__int64 v1519;
__int64 v1520;
int v1521;
__int64 v1522;
__int64 v1523;
int v1524;
__int64 v1525;
__int64 v1526;
__int64 v1527;
__int64 v1528;
struct _KPRCB *v1529;
void **v1530;
__int64 v1531;
__int64 v1532;
__int64 v1533;
unsigned __int64 v1534;
unsigned __int64 v1535;
unsigned __int64 v1536;
unsigned int v1537;
_QWORD *v1538;
unsigned __int64 v1539;
unsigned __int64 v1540;
__int64 v1541;
_QWORD *v1542;
char *v1543;
int v1544;
unsigned __int64 v1545;
signed __int64 v1546;
unsigned int v1547;
unsigned int v1548;
UINT8 CurrentIrql;
unsigned int v1550;
UINT8 v1551;
unsigned int v1552;
UINT8 v1553;
int v1554;
int v1555;
int v1556;
int v1557;
int v1558;
volatile signed __int32 *v1559;
unsigned int v1560;
UINT8 v1561;
signed __int32 v1562[8];
__int64 v1563;
__int64 *v1564;
char *v1565;
_BYTE *v1566;
__int64 v1567;
unsigned int v1568;
__int64 v1569;
__int64 v1570;
signed __int64 v1571;
unsigned __int64 v1572;
unsigned __int8 v1573;
unsigned __int8 v1574;
char v1575[2];
unsigned int v1576;
_BYTE *v1577;
char *v1578;
unsigned int v1579;
unsigned int v1580;
unsigned __int64 v1581;
PVOID BugCheckParameter2;
__int64 v1583;
int v1584;
int v1585;
__int64 v1586;
__int64 v1587;
unsigned __int64 v1588;
_BYTE *v1589;
unsigned int v1590;
PSLIST_ENTRY v1591;
unsigned __int8 v1592;
unsigned __int8 v1593;
unsigned __int64 v1594;
_BYTE *v1595;
unsigned int v1596;
unsigned __int8 v1597;
_DWORD *v1598;
unsigned __int64 v1599;
__int64 v1600;
__int64 v1601;
__int64 v1602;
__int64 v1603;
unsigned int v1604;
int v1605;
unsigned __int64 v1606;
int v1607;
__int64 v1608;
unsigned int v1609;
unsigned int v1610;
__int64 v1611;
int v1612;
__int64 v1613;
unsigned __int64 v1614;
_DWORD *v1615;
int v1616;
int v1617;
int v1618;
int v1619;
int v1620;
int v1621;
int v1622;
int v1623;
int v1624;
int v1625;
int v1626;
int v1627;
int v1628;
int v1629;
int v1630;
unsigned int v1631;
int v1632[2];
__int64 v1633;
__int64 v1634;
int v1635;
int v1636;
int v1637[6];
__int16 v1638;
__int64 v1639;
__int64 v1640;
__int64 v1641;
__int64 v1642;
__int64 v1643;
__int64 v1644;
__int64 v1645;
__int64 v1646;
__int64 v1647;
unsigned __int64 v1648;
__int128 v1649;
__int128 v1650;
__int16 v1651[8];
__int16 v1652[8];
__int16 v1653[8];
__int16 v1654;
unsigned __int64 v1655;
__int64 v1656;
__int64 v1657;
unsigned int v1658;
__int16 v1659[4];
_BYTE *v1660;
__int64 v1661;
int v1662;
_DWORD *v1663;
__int16 v1664[4];
_BYTE *v1665;
unsigned int v1666;
unsigned __int8 *v1667;
__int64 *v1668;
unsigned __int8 *v1669;
unsigned __int8 *v1670;
char *v1671;
__int64 v1672;
__int64 v1673;
__int64 v1674;
__int64 v1675;
__int64 v1676;
char v1677[16];
char v1678[16];
char v1679[16];
__int64 v1680;
__int16 v1681;
__int16 v1682;
unsigned __int64 v1683;
int v1684;
unsigned int v1685;
unsigned __int64 v1686;
char v1687[16];
char v1688[8];
char v1689[8];
__int64 v1690;
__int64 v1691;
__int64 v1692;
unsigned int *v1693;
__int64 v1694;
__int64 v1695;
__int64 v1696;
char v1697[8];
char v1698[8];
char v1699[8];
__int64 v1700;
__int64 v1701;
__int64 v1702;
__int64 v1703;
__int64 v1704;
__int64 v1705;
__int64 v1706;
__int64 v1707;
__int64 v1708;
__int64 v1709;
__int64 v1710;
char v1711[8];
__int64 v1712;
__int64 v1713;
__int64 v1714;
__int64 v1715;
unsigned __int64 v1716;
__int64 v1717;
__int64 v1718;
__int64 v1719;
__int64 v1720;
__int64 v1721;
__int64 v1722;
__int64 v1723;
unsigned __int64 v1724;
__int64 v1725;
__int64 v1726;
__int64 v1727;
__int64 v1728;
__int64 v1729;
unsigned __int64 v1730;
unsigned __int64 v1731;
__int64 v1732;
__int64 v1733;
__int64 v1734;
__int64 v1735;
__int64 v1736;
__int64 v1737;
__int64 v1738;
__int64 v1739;
char v1740[16];
char v1741[16];
char v1742[16];
__int64 v1743;
char v1744[16];
char v1745[16];
char v1746[16];
char v1747[16];
char v1748[16];
char v1749[16];
char v1750[16];
char v1751[16];
char v1752[16];
char v1753[16];
__int64 v1754;
char v1755[24];
char v1756[8];
char *v1757;
unsigned int v1758;
__int64 v1759;
__int64 v1760;
__int64 v1761;
char v1762[16];
char v1763[16];
char v1764[16];
char v1765[8];
unsigned __int64 v1766;
char v1767[24];
char v1768[48];
char v1769[8];
unsigned __int64 v1770;
char v1771[96];
int v1773;
unsigned __int64 v1774;
__int64 v1775;
_BOOL4 v1776;
unsigned __int8 v1777;
__int64 v1778;
unsigned int v1779;
int v1780;
int v1781;
int v1782;
int v1783;
unsigned __int16 v1784;
int v1785;
__int64 v1786;
__int64 v1787;
__int64 v1788;
unsigned __int8 v1789;
unsigned __int8 v1790;
__int64 v1791;
unsigned int v1792;
int *v1793;
__int64 v1794;
unsigned __int64 **v1795;
__int64 v1796;
_BOOL4 v1797;
__int64 v1798;
INT16 v1799;
__int16 v1800;
char v1801;
v2 = a2;
if( !__32 )
KeBugCheck(0x33u);
v4 = Src;
_InterlockedOr(v1562, 0);
if( !v4 )
return 3221225635i64;
if( *(_QWORD *)a1 < 0x40ui64
|| *(_DWORD *)(a1 + 8) != KiGetNtDdiVersion()
|| *(_DWORD *)(a1 + 12)
|| (*(_DWORD *)(a1 + 20) & 0x7FFFFFFE) != 0
|| *(_QWORD *)(a1 + 24)
|| *(_QWORD *)(a1 + 32)
|| *(_QWORD *)(a1 + 40)
|| *(_QWORD *)(v2 + 16)
|| *(_QWORD *)(v2 + 24)
|| *(_QWORD *)(v2 + 32)
|| *(_DWORD *)(v2 + 4) >= v4[515] )
{
return 3221225485i64;
}
v6 = *(_DWORD *)(a1 + 48);
v7 = *(_DWORD *)(a1 + 20) & 1;
v8 = *(_DWORD *)(a1 + 52);
if( v6 )
{
if( v6 <= 0 )
return 3221225485i64;
if( v6 > 4 )
{
if( v6 == 5 && !v8 )
{
if( ObGetCurrentIrql() || KeAreApcsDisabled() )
{
v1548 = KeAreAllApcsDisabled();
CurrentIrql = ObGetCurrentIrql();
KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)CurrentIrql << 16) | 0xFF), (PVOID)v1548, 0i64, 0i64);
}
goto LABEL_35;
}
return 3221225485i64;
}
if( v8 != 16 || !KeVerifyGroupAffinity(*(_GROUP_AFFINITY **)(a1 + 56), 0) )
return 3221225485i64;
v9 = *(_DWORD *)(a1 + 20);
v10 = ObGetCurrentIrql();
if( v9 >= 0 )
{
if( v10 || KeAreApcsDisabled() )
{
v1552 = KeAreAllApcsDisabled();
v1553 = ObGetCurrentIrql();
KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1553 << 16) | 0xFF), (PVOID)v1552, 0i64, 0i64);
}
}
else if( v10 > 1u )
{
v1550 = KeAreAllApcsDisabled();
v1551 = ObGetCurrentIrql();
KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1551 << 16) | 0xFF), (PVOID)v1550, 0i64, 0i64);
}
}
else
{
if( v8 != 16 || (unsigned __int64)(*(_QWORD *)(*(_QWORD *)(a1 + 56) + 8i64) - 1i64) > 0xFFFFFFFE )
return 3221225485i64;
if( ObGetCurrentIrql() || KeAreApcsDisabled() )
{
v1560 = KeAreAllApcsDisabled();
v1561 = ObGetCurrentIrql();
KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1561 << 16) | 0xFF), (PVOID)v1560, 0i64, 0i64);
}
}
LABEL_35:
v1614 = 2800i64;
if( !v7 || (v11 = *((_QWORD *)v4 + 338) + 2807i64, v1614 = v11, v11 == 2800) )
{
++dword_140C12F54;
v1591 = RtlpInterlockedPopEntrySList(&Lookaside);
v13 = (__int64)v1591;
if( v1591 )
goto LABEL_41;
++dword_140C12F58;
PoolWithTag = (PSLIST_ENTRY)((__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))qword_140C12F70)(
(unsigned int)dword_140C12F64,
(unsigned int)dword_140C12F6C,
(unsigned int)dword_140C12F68);
}
else
{
PoolWithTag = (PSLIST_ENTRY)ExAllocatePoolWithTag(0x200ui64, v11, 1953384779i64);
}
v1591 = PoolWithTag;
v13 = (__int64)PoolWithTag;
LABEL_41:
if( !v13 )
return 3221225626i64;
v14 = v13 + 32;
v1602 = v13 + 32;
memmove((VOID *)(v13 + 32), v4, 0xAA0u);
*(_QWORD *)(v13 + 2712) = v4;
*(_QWORD *)(v13 + 2720) = v13 + 2752;
*(_DWORD *)(v13 + 2112) = *(_DWORD *)v2;
*(_DWORD *)(v13 + 2116) = *(_DWORD *)(v2 + 4);
*(_DWORD *)(v13 + 2120) = 0;
*(_DWORD *)(v13 + 2128) = 0;
*(_DWORD *)(v13 + 2484) |= 0x1000u;
if( v7 )
*(_QWORD *)(v13 + 2728) = (v13 + 2807) & 0xFFFFFFFFFFFFFFF8ui64;
v16 = *(_DWORD *)(a1 + 16);
v1566 = (_BYTE *)(v13 + 32);
if( v16 > 0x80000 )
v16 = 0x80000;
*(_DWORD *)(v13 + 2124) = v16;
v1584 = 0;
v1607 = 0;
if( !v16 )
v16 = 1;
*(_DWORD *)(v13 + 2124) = v16;
v1646 = a1;
v17 = v13 + 32;
v1647 = v2;
v18 = *(unsigned int *)(v13 + 2448);
if( (_DWORD)v18 != -1 )
{
v19 = (*(__int64(__fastcall **)(__int64, __int64, __int64))(v13 + 664))(v18, v15, 6i64);
if( v19 || (v19 = (*(__int64(__fastcall **)(_QWORD))(v13 + 672))(0i64)) != 0 )
{
v20 = (*(__int64(__fastcall **)(__int64, char *))(v13 + 688))(v19, v1768);
if( v20 >= 0 )
{
*(_QWORD *)(v13 + 2464) = v19;
v21 = (*(__int64(**)(void))(v13 + 728))();
v22 = (*(__int64(__fastcall **)(__int64))(v13 + 760))(v21);
if( v22 )
{
(*(void(__fastcall **)(__int64, __int64))(v13 + 776))(v21, v22);
v23 = 0;
}
else
{
v23 = 4;
}
v20 = 0;
*(_DWORD *)(v13 + 2484) = v23 | *(_DWORD *)(v13 + 2484) & 0xFFFFFFFB;
*(_DWORD *)(v13 + 2120) += 0x10000;
}
else
{
(*(void(__fastcall **)(__int64))(v13 + 680))(v19);
}
if( v20 >= 0 )
{
v24 = 1i64;
v1607 = 1;
goto LABEL_96;
}
}
}
v25 = *(_DWORD *)(v13 + 2484);
if( (v25 & 8) != 0 && (v25 & 0x1000) == 0 )
{
v26 = __rdtsc();
v27 = (__ROR8__(v26, 3) ^ v26) * (unsigned __int128)0x7010008004002001ui64;
v1723 = *((_QWORD *)&v27 + 1);
if( (((unsigned __int8)v27 ^ BYTE8(v27)) & 3) == 0 )
{
v28 = __rdtsc();
v29 = (__ROR8__(v28, 3) ^ v28) * (unsigned __int128)0x7010008004002001ui64;
v1726 = *((_QWORD *)&v29 + 1);
v30 = ((unsigned __int64)v29 ^ *((_QWORD *)&v29 + 1)) % 0xB;
if( (unsigned int)v30 > 5 )
{
v34 = v30 - 6;
if( v34 )
{
v35 = v34 - 1;
if( v35 )
{
v36 = v35 - 1;
if( v36 )
{
if( v36 == 1 )
{
v1636 = -1333354875;
v33 = __ROR4__(-1333354868, 33);
}
else
{
v37 = __rdtsc();
v38 = __ROR8__(v37, 3);
v1727 = ((v38 ^ v37) * (unsigned __int128)0x7010008004002001ui64) >> 64;
v39 = (67117057 * (v38 ^ v37)) ^ v1727;
v33 = ((((((v39 % 0x1A + 97) << 8) | ((v39 >> 5)
- 26
* ((unsigned int)((1321528399 * (unsigned __int64)(v39 >> 5)) >> 32) >> 3)
+ 65)) << 8) | ((v39 >> 10)
- 26
* ((unsigned int)((1321528399
* (unsigned __int64)(v39 >> 10)) >> 32) >> 3)
+ 97)) << 8) | ((v39 >> 15) % 0x1A + 65);
}
}
else
{
v1635 = 1684422978;
v33 = __ROR4__(1684422978, 8);
}
}
else
{
v1621 = -2100910376;
v33 = __ROL4__(-2100910376, 7);
}
}
else
{
v1632[1] = 1314342514;
v33 = __ROR4__(1314342516, 24);
}
}
else if( (_DWORD)v30 == 5 )
{
v1620 = 680282605;
v33 = __ROR4__(680282605, 5);
}
else if( (_DWORD)v30 )
{
v31 = v30 - 1;
if( v31 )
{
v32 = v31 - 1;
if( v32 )
{
if( v32 == 1 )
{
v1617 = -1474152136;
v33 = __ROR4__(-1474152133, 15);
}
else
{
v1616 = 1728537748;
v33 = __ROL4__(1728537748, 4);
}
}
else
{
v1629 = -2051698419;
v33 = __ROR4__(-2051698419, 2);
}
}
else
{
v1618 = -1297272415;
v33 = __ROL4__(-1297272415, 1);
}
}
else
{
v1619 = -795291432;
v33 = __ROR4__(-795291432, 6);
}
v40 = (*(__int64(__fastcall **)(__int64, _QWORD, _QWORD))(v13 + 280))(512i64, *(_QWORD *)(v13 + 1928), v33);
if( v40 )
{
v41 = *(unsigned int *)(*(_QWORD *)(v13 + 1800) + *(_QWORD *)(v13 + 1336));
if( (_DWORD)v41 )
{
v42 = __rdtsc();
v43 = (__ROR8__(v42, 3) ^ v42) * (unsigned __int128)0x7010008004002001ui64;
v1728 = *((_QWORD *)&v43 + 1);
v41 = (*((_QWORD *)&v43 + 1) ^ (unsigned __int64)v43) % v41;
}
v44 = (*(__int64(__fastcall **)(_QWORD))(v13 + 976))(0i64);
if( v44 )
{
do
{
if( !(_DWORD)v41 )
break;
LODWORD(v41) = v41 - 1;
v44 = (*(__int64(__fastcall **)(__int64))(v13 + 976))(v44);
}
while( v44 );
v17 = v13 + 32;
if( !v44 )
{
LABEL_94:
(*(void(__fastcall **)(__int64))(v13 + 288))(v40);
goto LABEL_95;
}
if( (*(int(__fastcall **)(__int64))(v13 + 960))(v44) < 0 )
{
(*(void(__fastcall **)(__int64))(v13 + 984))(v44);
v44 = 0i64;
}
}
if( v44 )
{
(*(void(__fastcall **)(__int64, char *))(v13 + 1112))(v44, v1768);
(*(void(__fastcall **)(__int64, __int64, _QWORD, _QWORD))(v13 + 480))(v44, v40, 0i64, 0i64);
v64 = __rdtsc();
v65 = (__ROR8__(v64, 3) ^ v64) * (unsigned __int128)0x7010008004002001ui64;
v1729 = *((_QWORD *)&v65 + 1);
v66 = ((unsigned __int64)v65 ^ *((_QWORD *)&v65 + 1))
% (*(unsigned int(__fastcall **)(__int64))(v13 + 472))(v40);
_disable();
v67 = *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v13 + 1640));
_enable();
(*(void(__fastcall **)(__int64, char *))(v13 + 488))(v67, v1687);
(*(void(__fastcall **)(char *, __int64))(v13 + 456))(v1755, v40);
while( (*(int(__fastcall **)(unsigned int *, char *))(v13 + 464))(&v1610, v1755) >= 0 )
{
if( !(_DWORD)v66 )
{
(*(void(__fastcall **)(char *, _QWORD))(v13 + 448))(v1687, v1610);
break;
}
LODWORD(v66) = v66 - 1;
}
(*(void(__fastcall **)(char *, char *))(v13 + 496))(v1687, v1753);
(*(void(__fastcall **)(__int64))(v13 + 288))(v40);
v24 = 1i64;
v1584 = 1;
goto LABEL_96;
}
goto LABEL_94;
}
}
}
LABEL_95:
v24 = 1i64;
v1584 = 0;
LABEL_96:
v1603 = 0i64;
v45 = &v1604;
v46 = 4;
LODWORD(v47) = -1;
do
{
*(_BYTE *)v45 = 0;
v45 = (unsigned int *)((char *)v45 + 1);
--v46;
}
while( v46 );
v48 = *(_DWORD *)(v13 + 2112);
if( *(_DWORD *)(v13 + 2120) >= *(_DWORD *)(v13 + 2124) )
goto LABEL_2510;
v49 = v1730;
v50 = 0;
v51 = v1731;
v52 = v1666;
v1599 = v1730;
v1594 = v1731;
v1596 = v1666;
v1590 = v1658;
while( 1 )
{
v53 = *(_DWORD *)(v17 + 2448) & 0x110000;
v1628 = v48;
if( v53 != 1114112 )
__writedr(7u, 0i64);
if( v48 == *(_DWORD *)(v17 + 2060) )
break;
v54 = v17;
v55 = 0i64;
if( *(_QWORD *)(v17 + 2680) )
v54 = *(_QWORD *)(v17 + 2680);
v56 = (char *)(v54 + *(unsigned int *)(v54 + 2056));
v1565 = v56;
if( (_DWORD)v1603 && HIDWORD(v1603) <= v48 )
{
v55 = HIDWORD(v1603);
v56 = (char *)(v54 + v1604);
v1565 = v56;
}
if( (_DWORD)v55 != v48 )
{
v57 = v48 - v55;
v58 = v57;
v55 = v57 + (unsigned int)v55;
while( 1 )
{
v59 = *(_DWORD *)v56;
if( *(int *)v56 > 12 )
break;
if( v59 == 12 )
goto LABEL_131;
v60 = v59 - 1;
if( !v60 )
goto LABEL_131;
v61 = v60 - 6;
if( v61 )
{
v62 = v61 - 1;
if( !v62 )
{
v68 = *((unsigned __int16 *)v56 + 16);
LABEL_137:
v63 = (v68 + 55) & 0xFFFFFFF8;
goto LABEL_138;
}
if( v62 != 2 )
{
LABEL_134:
v63 = 48i64;
goto LABEL_138;
}
v63 = (unsigned int)(16 * (*((_DWORD *)v56 + 7) + 3));
}
else
{
v63 = (unsigned int)(24 * (*((_DWORD *)v56 + 6) + 2));
}
LABEL_138:
v56 += v63;
if( !--v58 )
{
v49 = v1599;
v51 = v1594;
v52 = v1596;
v1565 = v56;
goto LABEL_140;
}
}
if( v59 == 28 )
{
v68 = *((unsigned __int16 *)v56 + 20);
goto LABEL_137;
}
if( v59 == 30 )
{
v63 = (((*((_DWORD *)v56 + 9) != 0 ? *((_DWORD *)v56 + 9) - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
+ 24 * (*((unsigned __int16 *)v56 + 20) + 2);
}
else
{
if( v59 <= 32 )
goto LABEL_134;
if( v59 <= 34 )
{
v63 = 20
* (unsigned int)(((*((_DWORD *)v56 + 8) & 0xFFF) + (unsigned __int64)*((unsigned int *)v56 + 10) + 4095) >> 12)
+ 48;
}
else
{
if( v59 != 43 )
goto LABEL_134;
LABEL_131:
v63 = 4 * (*((_DWORD *)v56 + 4) / 0xCu) + 48;
}
}
v24 = 1i64;
goto LABEL_138;
}
LABEL_140:
LODWORD(v1603) = 1;
HIDWORD(v1603) = v55;
v1604 = (_DWORD)v56 - v54;
if( !*(_DWORD *)(v17 + 2084) )
{
v55 = 0i64;
v69 = *(int *)v56;
v70 = *(_DWORD *)(v1646 + 48);
v71 = *(_QWORD *)(v1646 + 56);
if( (int)v69 > 21 )
{
if( (_DWORD)v69 != 24 )
{
if( (int)v69 <= 27 )
goto LABEL_238;
if( (int)v69 > 29 )
{
if( (unsigned int)v69 <= 0x23 && (v73 = 0x940000000i64, _bittest64(&v73, v69)) )
{
LODWORD(v47) = 1;
}
else
{
LODWORD(v47) = 1;
if( (unsigned int)(v69 - 43) > 1 )
goto LABEL_238;
}
goto LABEL_175;
}
}
goto LABEL_182;
}
if( (_DWORD)v69 == 21 )
{
LODWORD(v47) = 1;
}
else
{
if( (v69 & 0x80000000) != 0i64 )
goto LABEL_238;
LODWORD(v47) = 1;
if( (int)v69 <= 1 )
goto LABEL_175;
if( (int)v69 > 3 )
{
if( (_DWORD)v69 != 7 )
{
if( (_DWORD)v69 != 8 )
{
if( (_DWORD)v69 != 9 && (unsigned int)(v69 - 11) > 3 )
goto LABEL_238;
LABEL_175:
if( v70 )
goto LABEL_238;
LABEL_176:
v74 = *((unsigned int *)v56 + 4);
if( !(_DWORD)v74 )
goto LABEL_238;
v75 = v1632;
v76 = *((_QWORD *)v56 + 1);
v55 = (__int64)&v1661;
v1661 = *(_QWORD *)v71;
v77 = *(_DWORD *)(v71 + 8);
v78 = 0;
v1632[0] = v77;
while( v76 >= *(_QWORD *)v55 + (unsigned __int64)(unsigned int)*v75 || v76 + v74 <= *(_QWORD *)v55 )
{
++v78;
v55 += 8i64;
++v75;
if( v78 )
goto LABEL_238;
}
LABEL_183:
v24 = 1i64;
++*(_QWORD *)(v1647 + 8);
goto LABEL_184;
}
LABEL_182:
if( v70 != 5 )
goto LABEL_238;
goto LABEL_183;
}
LABEL_155:
LODWORD(v55) = *((_DWORD *)v56 + 7);
v72 = v70 == 1;
LABEL_156:
if( !v72 )
goto LABEL_238;
goto LABEL_165;
}
if( !v70 )
goto LABEL_176;
}
if( (_DWORD)v69 == 7 )
goto LABEL_155;
if( (_DWORD)v69 == 21 )
{
LODWORD(v55) = *((_DWORD *)v56 + 11);
v72 = v70 == 4;
goto LABEL_156;
}
if( (unsigned int)(v69 - 2) <= 1 )
{
LODWORD(v55) = *((_DWORD *)v56 + 10);
if( (_DWORD)v69 == 3 && v70 != 2 )
goto LABEL_238;
if( (_DWORD)v69 == 2 && v70 != 3 )
goto LABEL_238;
}
LABEL_165:
if( !KeCheckProcessorGroupAffinity(*(_QWORD *)(v1646 + 56), (unsigned int)v55) )
goto LABEL_238;
goto LABEL_183;
}
LABEL_184:
v79 = *(_DWORD *)v56;
v1773 = *(_DWORD *)v56;
if( *(int *)v56 > 28 )
{
if( v79 <= 37 )
{
if( v79 == 37 )
{
if( (*(_DWORD *)(v17 + 2452) & 2) != 0
|| !(*(unsigned __int8(**)(void))(v17 + 1064))()
|| *(_DWORD *)(v17 + 2296) )
{
goto LABEL_238;
}
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = 0i64;
goto LABEL_459;
}
if( v79 == 29 )
{
v1066 = (_QWORD *)*((_QWORD *)v56 + 1);
v1067 = *((unsigned int *)v56 + 4);
v1068 = v1066;
*(_DWORD *)(v17 + 2088) += v1067;
v1069 = (char *)v1066;
v1070 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v1066 < (_QWORD *)((char *)v1066 + v1067) )
{
do
{
_mm_prefetchnta(v1069);
v1069 += 64;
}
while( v1069 < (char *)v1066 + v1067 );
}
v1071 = *(_QWORD *)(v17 + 2072);
v1072 = (unsigned int)v1067 >> 7;
if( (unsigned int)v1067 >> 7 )
{
do
{
v1073 = 8i64;
do
{
v1074 = v1071 ^ *v1068;
v1075 = v1068[1];
v1068 += 2;
v1071 = __ROL8__(__ROL8__(v1074, v1070) ^ v1075, v1070);
--v1073;
}
while( v1073 );
v1076 = __ROL8__(v47 ^ ((char *)v1068 - (char *)v1066), 17) ^ v47 ^ ((char *)v1068 - (char *)v1066);
v1710 = (v1076 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1070 = ((unsigned __int8)(v1710 ^ v1076) ^ (unsigned __int8)v1070) & 0x3F;
if( !v1070 )
LOBYTE(v1070) = 1;
--v1072;
}
while( v1072 );
v17 = (__int64)v1566;
}
v1077 = v1067 & 0x7F;
if( (unsigned int)v1077 >= 8 )
{
v1078 = (unsigned __int64)(unsigned int)v1077 >> 3;
do
{
v1071 = __ROL8__(*v1068++ ^ v1071, v1070);
v1077 = (unsigned int)(v1077 - 8);
--v1078;
}
while( v1078 );
v17 = (__int64)v1566;
}
for( ; (_DWORD)v1077; v1077 = (unsigned int)(v1077 - 1) )
{
v1079 = *(unsigned __int8 *)v1068;
v1068 = (_QWORD *)((char *)v1068 + 1);
v1071 = __ROL8__(v1079 ^ v1071, v1070);
}
for( i = v1071; ; LODWORD(v1071) = i ^ v1071 )
{
i >>= 31;
if( !i )
break;
}
v1081 = v1071 & 0x7FFFFFFF;
if( v1081 == *((_DWORD *)v56 + 5) )
goto LABEL_1770;
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v1082 = *((unsigned int *)v56 + 4);
v1083 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v1077 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1084 = KeGetCurrentIrql();
__writecr8(2ui64);
v1085 = v1083 & 0xFFFFFFFFFFFFF000ui64;
v1794 = (v1083 + v1082 - 1) | 0xFFF;
v1086 = (v1083 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v1084;
while( 1 )
{
v1087 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v1085,
0i64,
v1077,
v1068);
if( v1087 != -1073741267 )
break;
if( v50 )
goto LABEL_1788;
if( v1084 > 1u )
goto LABEL_1768;
v47 = v1084;
__writecr8(v1084);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1087 < 0 )
break;
LABEL_1768:
v1085 += 4096i64;
v1086 += 4096i64;
if( v1086 == v1794 )
{
__writecr8(v47);
v56 = v1565;
goto LABEL_1770;
}
}
LABEL_1788:
__writecr8(v47);
v56 = v1565;
}
}
v1100 = *(_DWORD *)(v17 + 2296);
if( !v1100 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1081 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
v1100 = *(_DWORD *)(v17 + 2296);
}
v1101 = *((_QWORD *)v56 + 1);
if( v1100 )
{
LABEL_1770:
v1088 = 1;
}
else
{
v1088 = 1;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1101;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v1089 = (unsigned __int64 **)*((_QWORD *)v56 + 1);
v1090 = *((_DWORD *)v56 + 4) >> 4;
v1795 = v1089;
if( v1090 )
{
v1091 = v1090;
v1567 = v1090;
do
{
v1092 = v1565;
v47 = **v1089;
v1642 = 0i64;
v1093 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *, __int64, _QWORD *))(v17 + 784))(
v47,
&v1642,
v1077,
v1068);
if( v1093 )
{
do
{
++v1088;
if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v1093, v1711) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v1094 = *(_QWORD **)(v17 + 2688);
v1095 = 48;
v1096 = 6i64;
do
{
v1095 -= 8;
*v1094 = *(_QWORD *)v1092;
v1092 += 8;
++v1094;
--v1096;
}
while( v1096 );
if( v1095 )
{
do
{
v1097 = *v1092++;
*(_BYTE *)v1094 = v1097;
v1094 = (_QWORD *)((char *)v1094 + 1);
--v1095;
}
while( v1095 );
v17 = (__int64)v1566;
}
v1092 = *(char **)(v17 + 2688);
}
*((_QWORD *)v1092 + 3) = v1093;
*((_QWORD *)v1092 + 4) = v47;
v1098 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v1098 = v1092;
*(_DWORD *)(v1098 + 16) = 48;
v1099 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v1099 + 8) = v1093;
*(_DWORD *)(v1099 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v1092 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v1092;
*(_QWORD *)(v17 + 2328) = 6i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v1093 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1642);
}
while( v1093 );
v1089 = v1795;
v1091 = v1567;
}
v1088 = 1;
v1089 += 2;
--v1091;
v1795 = v1089;
v1567 = v1091;
}
while( v1091 );
}
goto LABEL_237;
}
if( v79 != 30 )
{
if( v79 != 31 )
{
if( v79 == 32 )
{
sub_1403EA328(v17, (int *)v56, v55);
goto LABEL_238;
}
if( v79 == 33 )
{
sub_1403E93BC(v17, (int *)v56);
goto LABEL_238;
}
if( v79 != 35 )
{
if( v79 == 36 )
{
v823 = (char *)*((_QWORD *)v56 + 1);
v824 = *((unsigned int *)v56 + 4);
v825 = (__int64)v823;
*(_DWORD *)(v17 + 2088) += v824;
v826 = v823;
v827 = *(_DWORD *)(v17 + 2068);
for( j = *(_QWORD *)(v17 + 2072); v826 < &v823[v824]; v826 += 64 )
_mm_prefetchnta(v826);
v829 = *(_QWORD *)(v17 + 2072);
v830 = (unsigned int)v824 >> 7;
if( (unsigned int)v824 >> 7 )
{
do
{
v831 = 8i64;
do
{
v832 = *(_QWORD *)(v825 + 8) ^ __ROL8__(*(_QWORD *)v825 ^ v829, v827);
v825 += 16i64;
v829 = __ROL8__(v832, v827);
--v831;
}
while( v831 );
v833 = (__ROL8__(j ^ (v825 - (_QWORD)v823), 17) ^ j ^ (unsigned __int64)(v825 - (_QWORD)v823))
* (unsigned __int128)0x7010008004002001ui64;
v1705 = *((_QWORD *)&v833 + 1);
v834 = BYTE8(v833) ^ v833 ^ v827;
v24 = 1i64;
v827 = v834 & 0x3F;
if( !v827 )
LOBYTE(v827) = 1;
--v830;
}
while( v830 );
v17 = (__int64)v1566;
}
v835 = v824 & 0x7F;
if( (unsigned int)v835 >= 8 )
{
v836 = (unsigned __int64)(unsigned int)v835 >> 3;
do
{
v829 = __ROL8__(*(_QWORD *)v825 ^ v829, v827);
v825 += 8i64;
v835 = (unsigned int)(v835 - 8);
--v836;
}
while( v836 );
}
for( ; (_DWORD)v835; v835 = (unsigned int)(v835 - 1) )
{
v837 = *(unsigned __int8 *)v825++;
v829 = __ROL8__(v837 ^ v829, v827);
}
for( k = v829; ; LODWORD(v829) = k ^ v829 )
{
k >>= 31;
if( !k )
break;
}
v839 = v829 & 0x7FFFFFFF;
if( v839 == *((_DWORD *)v56 + 5) )
goto LABEL_1370;
v835 = 0i64;
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v840 = *((unsigned int *)v56 + 4);
v841 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v825 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v842 = KeGetCurrentIrql();
__writecr8(2ui64);
v843 = v841 & 0xFFFFFFFFFFFFF000ui64;
v1787 = (v841 + v840 - 1) | 0xFFF;
v844 = (v841 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v845 = v842;
while( 1 )
{
v846 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v843, 0i64);
if( v846 != -1073741267 )
break;
if( v50 )
goto LABEL_1365;
if( v842 > 1u )
goto LABEL_1363;
v845 = v842;
__writecr8(v842);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v846 < 0 )
break;
LABEL_1363:
v843 += 4096i64;
v844 += 4096i64;
if( v844 == v1787 )
{
__writecr8(v845);
v56 = v1565;
LABEL_1370:
v849 = *(_QWORD *)(v17 + 1344);
v850 = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64, __int64, __int64, __int64))(v17 + 336))(v849, v24, v835, v825);
v852 = **(unsigned int ***)(v17 + 1552);
v853 = v852 + 4;
v854 = *((_BYTE *)v852 + 12);
v855 = (unsigned __int64)&v852[6 * *v852 + 4];
while( 1 )
{
v856 = 24i64;
v857 = (__int64 *)(v56 + 24);
v858 = v853;
do
{
v859 = *(_QWORD *)v858;
v858 += 2;
v860 = *v857++;
if( v859 != v860 )
goto LABEL_1378;
v856 = (unsigned int)(v856 - 8);
}
while( (unsigned int)v856 >= 8 );
if( (_DWORD)v856 )
{
while( 1 )
{
v851 = *(unsigned __int8 *)v858;
v858 = (unsigned int *)((char *)v858 + 1);
v861 = *(unsigned __int8 *)v857;
v857 = (__int64 *)((char *)v857 + 1);
if( v851 != v861 )
break;
v72 = (_DWORD)v856 == 1;
v856 = (unsigned int)(v856 - 1);
if( v72 )
goto LABEL_1379;
}
LABEL_1378:
v853 += 6;
if( (unsigned __int64)v853 < v855 )
continue;
}
LABEL_1379:
v17 = (__int64)v1566;
(*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
*((_QWORD *)v1566 + 168),
v851,
v856,
v857);
__writecr8(v850);
if( !v854 )
goto LABEL_1386;
if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = 1i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( *((_QWORD *)v56 + 3) == 1i64 )
{
v50 = 0;
}
else
{
LABEL_1386:
v50 = 0;
if( v853 == (unsigned int *)v855 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v853;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v862 = *(_QWORD *)(v17 + 1344);
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64))(v17 + 336))(v862);
v863 = 0i64;
v864 = **(unsigned int ***)(v17 + 1552);
v865 = v864 + 4;
v866 = (unsigned __int64)&v864[6 * *v864 + 4];
while( 1 )
{
v865 += 6;
if( (unsigned __int64)v865 >= v866 )
break;
v867 = *((_QWORD *)v865 + 1);
if( v867 < v863 )
break;
if( (v867 & 0xFFFFFFFFFFFFF000ui64) != v867 )
break;
v868 = v867 + v865[4];
if( v868 <= v867 || v868 == v863 )
break;
v863 = v867 + v865[4];
}
(*(void(__fastcall **)(_QWORD))(v17 + 400))(*(_QWORD *)(v17 + 1344));
__writecr8((unsigned __int8)v47);
if( v865 == (unsigned int *)v866 || *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v865;
goto LABEL_459;
}
}
}
LABEL_1365:
__writecr8(v845);
v56 = v1565;
}
}
v847 = *(_DWORD *)(v17 + 2296);
v24 = *((unsigned int *)v56 + 5);
if( !v847 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v24 ^ v839;
v847 = *(_DWORD *)(v17 + 2296);
}
v848 = *((_QWORD *)v56 + 1);
if( !v847 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v848;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
goto LABEL_1370;
}
goto LABEL_2328;
}
if( (*((_DWORD *)v56 + 10) & 1) != 0 && (!*(_QWORD *)(v17 + 2432) || (*(_DWORD *)(v17 + 2452) & 4) != 0) )
goto LABEL_1736;
if( (*((_DWORD *)v56 + 10) & 1) != 0 )
{
v869 = *(_DWORD *)(v17 + 2452);
v870 = v869;
if( *(_DWORD *)(v17 + 2084) )
{
if( (((unsigned __int8)v869 ^ (unsigned __int8)(v869 >> 3)) & 4) != 0 )
goto LABEL_1736;
}
else
{
v870 = v869 ^ ((unsigned __int8)v869 ^ (unsigned __int8)(8 * v869)) & 0x20;
*(_DWORD *)(v17 + 2452) = v870;
}
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1467;
LOBYTE(v871) = v870;
if( !*(_DWORD *)(v17 + 2084) )
{
v871 = v870 ^ ((unsigned __int8)v870 ^ (unsigned __int8)(8 * v870)) & 0x20;
*(_DWORD *)(v17 + 2452) = v871;
goto LABEL_1409;
}
if( (((unsigned __int8)v870 ^ (unsigned __int8)(v870 >> 3)) & 4) != 0 )
{
LABEL_1467:
*(_DWORD *)(v17 + 2084) = 0;
goto LABEL_1447;
}
LABEL_1409:
if( (v871 & 4) != 0 )
{
v872 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
v873 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
while( v873 )
{
--v873;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v872)
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v872;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v872 += 4096i64;
*(_DWORD *)(v17 + 2088) += 256;
}
goto LABEL_1447;
}
v874 = (_QWORD *)*((_QWORD *)v56 + 1);
v875 = *((unsigned int *)v56 + 4);
v876 = v874;
*(_DWORD *)(v17 + 2088) += v875;
v877 = (char *)v874;
v878 = *(_DWORD *)(v17 + 2068);
v879 = *(_QWORD *)(v17 + 2072);
if( v874 < (_QWORD *)((char *)v874 + v875) )
{
do
{
_mm_prefetchnta(v877);
v877 += 64;
}
while( v877 < (char *)v874 + v875 );
}
v880 = *(_QWORD *)(v17 + 2072);
v881 = (unsigned int)v875 >> 7;
if( (unsigned int)v875 >> 7 )
{
do
{
v882 = 8i64;
do
{
v883 = v880 ^ *v876;
v884 = v876[1];
v876 += 2;
v880 = __ROL8__(__ROL8__(v883, v878) ^ v884, v878);
--v882;
}
while( v882 );
v885 = __ROL8__(v879 ^ ((char *)v876 - (char *)v874), 17) ^ v879 ^ ((char *)v876 - (char *)v874);
v1706 = (v885 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v878 = ((unsigned __int8)(v1706 ^ v885) ^ (unsigned __int8)v878) & 0x3F;
if( !v878 )
LOBYTE(v878) = 1;
--v881;
}
while( v881 );
v17 = (__int64)v1566;
}
v886 = v875 & 0x7F;
if( v886 >= 8 )
{
v887 = (unsigned __int64)v886 >> 3;
do
{
v880 = __ROL8__(*v876++ ^ v880, v878);
v886 -= 8;
--v887;
}
while( v887 );
}
if( v886 )
{
do
{
v888 = *(unsigned __int8 *)v876;
v876 = (_QWORD *)((char *)v876 + 1);
v880 = __ROL8__(v888 ^ v880, v878);
--v886;
}
while( v886 );
v17 = (__int64)v1566;
}
for( m = v880; ; LODWORD(v880) = m ^ v880 )
{
m >>= 31;
if( !m )
break;
}
v890 = *((_DWORD *)v56 + 5);
v891 = v880 & 0x7FFFFFFF;
if( v891 != v890 )
{
v892 = *((unsigned int *)v56 + 4);
v893 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v894 = KeGetCurrentIrql();
__writecr8(2ui64);
v895 = v893 & 0xFFFFFFFFFFFFF000ui64;
v896 = (v893 + v892 - 1) | 0xFFF;
v897 = (v893 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v898 = v894;
while( 1 )
{
v899 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v895, 0i64);
if( v899 != -1073741267 )
break;
if( v894 > 1u )
goto LABEL_1444;
v898 = v894;
__writecr8(v894);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v899 < 0 )
break;
LABEL_1444:
v895 += 4096i64;
v897 += 4096i64;
if( v897 == v896 )
goto LABEL_1445;
}
__writecr8(v898);
v56 = v1565;
v50 = 0;
v890 = *((_DWORD *)v1565 + 5);
}
v912 = *(_DWORD *)(v17 + 2296);
if( !v912 )
{
v913 = v891;
v914 = v890;
goto LABEL_1464;
}
goto LABEL_1465;
}
LABEL_1447:
LODWORD(v47) = -465226731;
}
else
{
v916 = (_QWORD *)*((_QWORD *)v56 + 1);
v917 = *((unsigned int *)v56 + 4);
v918 = v916;
*(_DWORD *)(v17 + 2088) += v917;
v919 = (char *)v916;
v920 = *(_DWORD *)(v17 + 2068);
v921 = *(_QWORD *)(v17 + 2072);
if( v916 < (_QWORD *)((char *)v916 + v917) )
{
do
{
_mm_prefetchnta(v919);
v919 += 64;
}
while( v919 < (char *)v916 + v917 );
}
v922 = *(_QWORD *)(v17 + 2072);
v923 = (unsigned int)v917 >> 7;
if( (unsigned int)v917 >> 7 )
{
do
{
v924 = 8i64;
do
{
v925 = v918[1] ^ __ROL8__(*v918 ^ v922, v920);
v918 += 2;
v922 = __ROL8__(v925, v920);
--v924;
}
while( v924 );
v926 = __ROL8__(v921 ^ ((char *)v918 - (char *)v916), 17) ^ v921 ^ ((char *)v918 - (char *)v916);
v1707 = (v926 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v920 = ((unsigned __int8)(v1707 ^ v926) ^ (unsigned __int8)v920) & 0x3F;
if( !v920 )
LOBYTE(v920) = 1;
--v923;
}
while( v923 );
v17 = (__int64)v1566;
}
v927 = v917 & 0x7F;
if( v927 >= 8 )
{
v928 = (unsigned __int64)v927 >> 3;
do
{
v922 = __ROL8__(*v918++ ^ v922, v920);
v927 -= 8;
--v928;
}
while( v928 );
}
for( ; v927; --v927 )
{
v929 = *(unsigned __int8 *)v918;
v918 = (_QWORD *)((char *)v918 + 1);
v922 = __ROL8__(v929 ^ v922, v920);
}
for( n = v922; ; LODWORD(v922) = n ^ v922 )
{
n >>= 31;
if( !n )
break;
}
v931 = v922 & 0x7FFFFFFF;
if( v931 == *((_DWORD *)v56 + 5) )
{
LABEL_1446:
v50 = 0;
goto LABEL_1447;
}
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v932 = *((unsigned int *)v56 + 4);
v933 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v934 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v935 = KeGetCurrentIrql();
__writecr8(2ui64);
v936 = v933 & 0xFFFFFFFFFFFFF000ui64;
v1788 = (v933 + v932 - 1) | 0xFFF;
v937 = (v933 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v898 = v935;
while( 1 )
{
v938 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v936,
0i64,
v934,
v918);
if( v938 != -1073741267 )
break;
if( v50 )
goto LABEL_1500;
if( v935 > 1u )
goto LABEL_1498;
v898 = v935;
__writecr8(v935);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v938 < 0 )
break;
LABEL_1498:
v936 += 4096i64;
v937 += 4096i64;
if( v937 == v1788 )
{
LABEL_1445:
__writecr8(v898);
v56 = v1565;
goto LABEL_1446;
}
}
LABEL_1500:
__writecr8(v898);
v56 = v1565;
}
}
v912 = *(_DWORD *)(v17 + 2296);
v50 = 0;
v913 = *((unsigned int *)v56 + 5);
if( !v912 )
{
v914 = v931;
LABEL_1464:
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v914 ^ v913;
v912 = *(_DWORD *)(v17 + 2296);
}
LABEL_1465:
v915 = *((_QWORD *)v56 + 1);
LODWORD(v47) = -465226731;
if( !v912 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v915;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v900 = *((_DWORD *)v56 + 10);
if( (v900 & 2) == 0 )
goto LABEL_238;
v901 = *((_QWORD *)v56 + 1);
if( (v900 & 4) != 0 )
{
v902 = *((_QWORD *)v56 + 3);
v903 = **(_QWORD **)(v901 + 112);
if( v903 != v902 )
{
v904 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v904 = v903;
*(_DWORD *)(v904 + 16) = 256;
v905 = *(_DWORD *)(v17 + 2296);
if( !v905 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v903 ^ v902;
v905 = *(_DWORD *)(v17 + 2296);
}
v906 = *(_QWORD *)(v901 + 112);
if( !v905 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v906;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
if( (*((_DWORD *)v56 + 10) & 8) == 0 )
goto LABEL_238;
v907 = *((_QWORD *)v56 + 4);
v908 = **(_QWORD **)(v901 + 120);
if( v908 == v907 )
goto LABEL_238;
v909 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v909 = v908;
*(_DWORD *)(v909 + 16) = 256;
v910 = *(_DWORD *)(v17 + 2296);
if( !v910 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v908 ^ v907;
v910 = *(_DWORD *)(v17 + 2296);
}
v911 = *(_QWORD *)(v901 + 120);
if( v910 )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v911;
goto LABEL_1323;
}
if( (*(_DWORD *)(v17 + 2096) & 1) == 0 )
goto LABEL_238;
if( !*(_QWORD *)(v17 + 2432) || (*(_DWORD *)(v17 + 2452) & 4) != 0 )
{
v940 = 0i64;
}
else
{
v939 = (*(__int64(__fastcall **)(__int64, __int64 *, _QWORD))(v17 + 976))(26i64, &v1657, 0i64);
v940 = v1657;
if( v939 < 0 )
v940 = 0i64;
}
v941 = *(__int64(__fastcall **)(_QWORD))(v17 + 944);
v1567 = v940;
v942 = 0;
v1568 = 0;
v943 = v941(0i64);
while( 2 )
{
v982 = v943;
if( !v943 )
{
v983 = *(_QWORD *)(v17 + 1248);
v50 = 0;
if( (*(int(__fastcall **)(__int64))(v17 + 928))(v983) >= 0 )
{
v984 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v983);
v1597 = v984;
v985 = (*(__int64(__fastcall **)(__int64, char *))(v17 + 1000))(v983, v1575);
v1791 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v983);
if( v984 == 114
|| *(_DWORD *)(v17 + 2296)
|| (*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v984 ^ 0x72i64, *(_DWORD *)(v17 + 2296)) )
{
v986 = (int *)v1565;
}
else
{
v986 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v986 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v986;
*(_QWORD *)(v17 + 2328) = v983;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v987 = 0;
if( (v984 & 7) == 1 )
{
v987 = 48;
}
else if( (v984 & 7) == 2 )
{
v987 = 16;
LOBYTE(v50) = 16;
}
else if( (v984 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v986 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v986;
*(_QWORD *)(v17 + 2328) = v983;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v47 = *(_QWORD *)(v17 + 1480);
v988 = (unsigned __int64)v984 >> 4;
v989 = v987 | *(_BYTE *)(v47 + 2 * v988);
v990 = (int *)v1565;
if( v989 != v985 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v990 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v990;
*(_QWORD *)(v17 + 2328) = v983;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v991 = v50 | *(_BYTE *)(v47 + 2 * v988 + 1);
v50 = 0;
if( v991 != v1575[0] && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v990 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v990;
*(_QWORD *)(v17 + 2328) = v983;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( v983 == *(_QWORD *)(v17 + 1248) )
v992 = 0i64;
else
v992 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v983, 1i64);
v1569 = (__int64)v992;
if( v992 )
{
v993 = *v992;
v994 = v992;
if( *v992 )
{
v995 = v1791;
v996 = v1565;
do
{
*v994 = v993 & 0xFFFFFFFFFFFFFFFCui64;
(*(void(**)(void))(v17 + 480))();
v997 = (unsigned __int8)v1575[0];
v47 = v994[1] & 0xFFFFFFFFFFFF0000ui64;
if( v47 == v995 )
v997 = v985;
v998 = v994[1] >> 6;
LOBYTE(v998) = v998 & 0xF;
if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v998, v997) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v999 = *(_QWORD **)(v17 + 2688);
v1000 = 48;
v1001 = 6i64;
do
{
v1000 -= 8;
*v999 = *(_QWORD *)v996;
v996 += 8;
++v999;
--v1001;
}
while( v1001 );
if( v1000 )
{
do
{
v1002 = *v996++;
*(_BYTE *)v999 = v1002;
v999 = (_QWORD *)((char *)v999 + 1);
--v1000;
}
while( v1000 );
v995 = v1791;
}
v996 = *(char **)(v17 + 2688);
}
*((_QWORD *)v996 + 3) = v47;
*((_QWORD *)v996 + 4) = *v994;
v996[40] = ((unsigned __int64)*((unsigned int *)v994 + 2) >> 6) & 0xF;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v996 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v996;
*(_QWORD *)(v17 + 2328) = v983;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v994 += 6;
v993 = *v994;
}
while( *v994 );
v992 = (unsigned __int64 *)v1569;
v50 = 0;
}
(*(void(__fastcall **)(unsigned __int64 *))(v17 + 256))(v992);
}
(*(void(__fastcall **)(__int64))(v17 + 936))(v983);
v942 = v1568;
*(_DWORD *)(v17 + 2088) += 0x8000;
}
if( v1567 )
(*(void(**)(void))(v17 + 480))();
v1003 = v942 << 8;
goto LABEL_1639;
}
if( v940 == v943 )
{
v47 = (unsigned __int64)v56;
if( (*(int(__fastcall **)(__int64))(v17 + 928))(v943) >= 0 )
{
v944 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v982);
v1592 = v944;
v1789 = (*(__int64(__fastcall **)(__int64, unsigned __int8 *))(v17 + 1000))(v982, &v1573);
v1581 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v982);
if( v944 != 97 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v944 ^ 0x61i64;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v945 = 0;
v946 = 0;
if( (v944 & 7) == 1 )
{
v945 = 48;
}
else if( (v944 & 7) == 2 )
{
v945 = 16;
v946 = 16;
}
else if( (v944 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
{
v947 = v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v947;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v948 = *(_QWORD *)(v17 + 1480);
v949 = (unsigned __int64)v944 >> 4;
v72 = (*(_BYTE *)(v948 + 2 * v949) | (unsigned __int8)v945) == v1789;
v950 = v1565;
if( !v72 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v950;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( ((unsigned __int8)v946 | *(_BYTE *)(v948 + 2 * v949 + 1)) != v1573 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v950;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( v982 == *(_QWORD *)(v17 + 1248) )
v951 = 0i64;
else
v951 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v982, 1i64);
v1569 = (__int64)v951;
if( v951 )
{
v952 = *v951;
v953 = v951;
if( *v951 )
{
v954 = v1789;
v955 = v1581;
do
{
*v953 = v952 & 0xFFFFFFFFFFFFFFFCui64;
(*(void(**)(void))(v17 + 480))();
v956 = v1573;
v957 = v953[1] & 0xFFFFFFFFFFFF0000ui64;
if( v957 == v955 )
v956 = v954;
v958 = v953[1] >> 6;
LOBYTE(v958) = v958 & 0xF;
if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v958, v956) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v959 = *(_QWORD **)(v17 + 2688);
v960 = 48;
v961 = 6i64;
do
{
v960 -= 8;
*v959 = *(_QWORD *)v47;
v47 += 8i64;
++v959;
--v961;
}
while( v961 );
if( v960 )
{
do
{
v962 = *(_BYTE *)v47++;
*(_BYTE *)v959 = v962;
v959 = (_QWORD *)((char *)v959 + 1);
--v960;
}
while( v960 );
v954 = v1789;
}
v47 = *(_QWORD *)(v17 + 2688);
}
*(_QWORD *)(v47 + 24) = v957;
*(_QWORD *)(v47 + 32) = *v953;
*(_BYTE *)(v47 + 40) = ((unsigned __int64)*((unsigned int *)v953 + 2) >> 6) & 0xF;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v47;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v953 += 6;
v952 = *v953;
}
while( *v953 );
goto LABEL_1590;
}
goto LABEL_1591;
}
goto LABEL_1592;
}
}
else if( (*(unsigned int(__fastcall **)(__int64))(v17 + 968))(v943) )
{
v47 = (unsigned __int64)v56;
if( (*(int(__fastcall **)(__int64))(v17 + 928))(v982) >= 0 )
{
v963 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v982);
v1593 = v963;
v1790 = (*(__int64(__fastcall **)(__int64, unsigned __int8 *))(v17 + 1000))(v982, &v1574);
v1581 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v982);
if( v963 != 97 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v963 ^ 0x61i64;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v964 = 0;
v965 = 0;
if( (v963 & 7) == 1 )
{
v964 = 48;
}
else if( (v963 & 7) == 2 )
{
v964 = 16;
v965 = 16;
}
else if( (v963 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
{
v966 = v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v966;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v967 = *(_QWORD *)(v17 + 1480);
v968 = (unsigned __int64)v963 >> 4;
v72 = (*(_BYTE *)(v967 + 2 * v968) | (unsigned __int8)v964) == v1790;
v969 = v1565;
if( !v72 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v969;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( ((unsigned __int8)v965 | *(_BYTE *)(v967 + 2 * v968 + 1)) != v1574 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v969;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( v982 == *(_QWORD *)(v17 + 1248) )
v951 = 0i64;
else
v951 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v982, 1i64);
v1569 = (__int64)v951;
if( v951 )
{
v970 = *v951;
v971 = v951;
if( *v951 )
{
v972 = v1790;
v973 = v1581;
do
{
*v971 = v970 & 0xFFFFFFFFFFFFFFFCui64;
(*(void(**)(void))(v17 + 480))();
v974 = v1574;
v975 = v971[1] & 0xFFFFFFFFFFFF0000ui64;
if( v975 == v973 )
v974 = v972;
v976 = v971[1] >> 6;
LOBYTE(v976) = v976 & 0xF;
if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v976, v974) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v977 = *(_QWORD **)(v17 + 2688);
v978 = 48;
v979 = 6i64;
do
{
v978 -= 8;
*v977 = *(_QWORD *)v47;
v47 += 8i64;
++v977;
--v979;
}
while( v979 );
if( v978 )
{
do
{
v980 = *(_BYTE *)v47++;
*(_BYTE *)v977 = v980;
v977 = (_QWORD *)((char *)v977 + 1);
--v978;
}
while( v978 );
v972 = v1790;
}
v47 = *(_QWORD *)(v17 + 2688);
}
*(_QWORD *)(v47 + 24) = v975;
*(_QWORD *)(v47 + 32) = *v971;
*(_BYTE *)(v47 + 40) = ((unsigned __int64)*((unsigned int *)v971 + 2) >> 6) & 0xF;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v47;
*(_QWORD *)(v17 + 2328) = v982;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v971 += 6;
v970 = *v971;
}
while( *v971 );
LABEL_1590:
v951 = (unsigned __int64 *)v1569;
}
LABEL_1591:
(*(void(__fastcall **)(unsigned __int64 *))(v17 + 256))(v951);
}
LABEL_1592:
(*(void(__fastcall **)(__int64))(v17 + 936))(v982);
v56 = v1565;
*(_DWORD *)(v17 + 2088) += 0x8000;
v942 = v1568;
v940 = v1567;
}
}
v981 = *(__int64(__fastcall **)(__int64))(v17 + 944);
v1568 = ++v942;
v943 = v981(v982);
continue;
}
}
if( (v56[42] & 1) != 0 )
{
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1736;
v1004 = *(_DWORD *)(v17 + 2452);
if( (v1004 & 4) != 0 )
goto LABEL_1736;
if( *(_DWORD *)(v17 + 2084) )
{
if( (v1004 & 0x20) != 0 )
goto LABEL_1736;
}
else
{
*(_DWORD *)(v17 + 2452) = v1004 ^ ((unsigned __int8)v1004 ^ (unsigned __int8)(8 * v1004)) & 0x20;
}
}
v1005 = *(unsigned int *)(v17 + 2084);
v1006 = *((unsigned int *)v56 + 9);
v1586 = *((_QWORD *)v56 + 1);
v1007 = v1586 + 12 * v1005;
v1008 = (_DWORD *)(v1007 + 12);
v1569 = v1007;
v1572 = v1007 + 12;
v1009 = v1006 / 0xC;
v1571 = v1006 / 0xC;
v1588 = v1586 + 12i64 * (unsigned int)(v1006 / 0xC);
v47 = (unsigned __int64)&v56[v1005 + 48];
v1567 = v47;
v1010 = v1006 / 0xC - 1;
v1792 = v1010;
if( (unsigned int)(v1006 / 0xC) )
{
v1011 = &v56[((v1010 + 7i64) & 0xFFFFFFFFFFFFFFF8ui64) + 48];
v1578 = v1011;
}
else
{
v1011 = v56 + 48;
v1578 = v56 + 48;
v1792 = v1006 / 0xC - 1;
}
BugCheckParameter2 = &v1011[24 * *((unsigned __int16 *)v56 + 20)];
if( !(_DWORD)v1009 || (unsigned int)v1005 >= v1010 )
goto LABEL_1687;
while( 2 )
{
if( *(char *)v47 < 0 )
goto LABEL_1684;
v1012 = *(_DWORD *)(v1007 + 4);
v1013 = *((_QWORD *)v56 + 3) + v1012;
v1014 = *v1008 - v1012;
*(_DWORD *)(v17 + 2088) += v1014;
v1015 = (_QWORD *)v1013;
v1016 = *(_DWORD *)(v17 + 2068);
v1017 = (char *)v1013;
v1018 = *(_QWORD *)(v17 + 2072);
v1581 = v1013;
v1019 = (unsigned int)v1014;
if( v1013 < (unsigned __int64)(v1014 + v1013) )
{
do
{
_mm_prefetchnta(v1017);
v1017 += 64;
}
while( (unsigned __int64)v1017 < v1014 + v1013 );
}
v1020 = v1018;
v1021 = (unsigned int)v1014 >> 7;
if( (unsigned int)v1014 >> 7 )
{
do
{
v1022 = 8i64;
do
{
v1023 = v1020 ^ *v1015;
v1024 = v1015[1];
v1015 += 2;
v1020 = __ROL8__(__ROL8__(v1023, v1016) ^ v1024, v1016);
--v1022;
}
while( v1022 );
v1025 = __ROL8__(v1018 ^ ((unsigned __int64)v1015 - v1013), 17) ^ v1018 ^ ((unsigned __int64)v1015 - v1013);
v1708 = (v1025 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1016 = ((unsigned __int8)v1708 ^ (unsigned __int8)(v1025 ^ v1016)) & 0x3F;
if( !v1016 )
LOBYTE(v1016) = 1;
--v1021;
}
while( v1021 );
v17 = (__int64)v1566;
}
v1026 = v1014 & 0x7F;
if( v1026 >= 8 )
{
v1027 = (unsigned __int64)v1026 >> 3;
do
{
v1020 = __ROL8__(*v1015++ ^ v1020, v1016);
v1026 -= 8;
--v1027;
}
while( v1027 );
}
if( v1026 )
{
do
{
v1028 = *(unsigned __int8 *)v1015;
v1015 = (_QWORD *)((char *)v1015 + 1);
v1020 = __ROL8__(v1028 ^ v1020, v1016);
--v1026;
}
while( v1026 );
v47 = v1567;
}
for( ii = v1020; ; LOBYTE(v1020) = ii ^ v1020 )
{
ii >>= 7;
if( !ii )
break;
}
v1030 = *(_BYTE *)v47;
v1031 = v1020 & 0x7F;
if( v1031 == (*(_BYTE *)v47 & 0x7F) )
{
LABEL_1681:
v50 = 0;
}
else
{
if( v1019 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1032 = KeGetCurrentIrql();
__writecr8(2ui64);
v1033 = v1013 & 0xFFFFFFFFFFFFF000ui64;
v1034 = (v1019 - 1 + v1013) | 0xFFF;
v1035 = v1033 - 1;
while( 1 )
{
v1036 = v1032;
while( 1 )
{
v1037 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1033, 0i64);
if( v1037 != -1073741267 )
break;
if( v1032 > 1u )
goto LABEL_1679;
v1036 = v1032;
__writecr8(v1032);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1037 < 0 )
break;
LABEL_1679:
v1033 += 4096i64;
v1035 += 4096i64;
if( v1035 == v1034 )
{
__writecr8(v1036);
goto LABEL_1681;
}
}
__writecr8(v1036);
v1013 = v1581;
v1030 = *(_BYTE *)v1567;
}
v50 = 0;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1030 & 0x7F ^ (unsigned __int64)v1031;
if( !*(_DWORD *)(v17 + 2296) )
{
v56 = v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1013;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
LABEL_1683:
v1007 = v1569;
*(_DWORD *)(v17 + 2088) += 64;
v47 = v1567;
v1008 = (_DWORD *)v1572;
LABEL_1684:
++v47;
v1007 += 12i64;
v1567 = v47;
v1008 += 3;
v1569 = v1007;
v1572 = (unsigned __int64)v1008;
if( (unsigned __int64)v1008 >= v1588 || *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
{
LODWORD(v1009) = v1571;
LODWORD(v1005) = ((int)v1007 - (int)v1586) / 12;
*(_DWORD *)(v17 + 2084) = v1005;
v1011 = v1578;
if( (unsigned int)v1005 < v1792 )
goto LABEL_238;
LABEL_1687:
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
goto LABEL_238;
if( (_DWORD)v1009 )
LODWORD(v1005) = v1005 - v1009 + 1;
v1038 = &v1011[24 * (unsigned int)v1005];
v1569 = (__int64)v1038;
while( 1 )
{
v1039 = (int *)(v1038 + 8);
v1040 = 2i64;
v1567 = 2i64;
v1793 = (int *)(v1038 + 8);
do
{
if( *v1039 < 0 )
goto LABEL_1729;
v47 = *((_QWORD *)v56 + 3) + (unsigned int)*(v1039 - 2);
v1041 = (unsigned int)(*(v1039 - 1) - *(v1039 - 2));
*(_DWORD *)(v17 + 2088) += v1041;
v1042 = (_QWORD *)v47;
v1043 = *(_DWORD *)(v17 + 2068);
v1044 = (char *)v47;
v1045 = *(_QWORD *)(v17 + 2072);
v1046 = (unsigned int)v1041;
v1572 = v47;
v1581 = (unsigned int)v1041;
if( v47 < v1041 + v47 )
{
do
{
_mm_prefetchnta(v1044);
v1044 += 64;
}
while( (unsigned __int64)v1044 < v1041 + v47 );
}
v1047 = v1045;
v1048 = (unsigned int)v1041 >> 7;
if( (unsigned int)v1041 >> 7 )
{
do
{
v1049 = 8i64;
do
{
v1050 = v1042[1] ^ __ROL8__(*v1042 ^ v1047, v1043);
v1042 += 2;
v1047 = __ROL8__(v1050, v1043);
--v1049;
}
while( v1049 );
v1051 = (__ROL8__(v1045 ^ ((unsigned __int64)v1042 - v47), 17) ^ v1045 ^ ((unsigned __int64)v1042
- v47))
* (unsigned __int128)0x7010008004002001ui64;
v1709 = *((_QWORD *)&v1051 + 1);
v1043 = (BYTE8(v1051) ^ (unsigned __int8)(v1051 ^ v1043)) & 0x3F;
if( !v1043 )
LOBYTE(v1043) = 1;
--v1048;
}
while( v1048 );
v17 = (__int64)v1566;
v1046 = v1581;
v1039 = v1793;
v1040 = v1567;
}
v1052 = v1041 & 0x7F;
if( v1052 >= 8 )
{
v1053 = (unsigned __int64)v1052 >> 3;
do
{
v1047 = __ROL8__(*v1042++ ^ v1047, v1043);
v1052 -= 8;
--v1053;
}
while( v1053 );
}
if( v1052 )
{
do
{
v1054 = *(unsigned __int8 *)v1042;
v1042 = (_QWORD *)((char *)v1042 + 1);
v1047 = __ROL8__(v1054 ^ v1047, v1043);
--v1052;
}
while( v1052 );
v17 = (__int64)v1566;
}
for( jj = v1047; ; LODWORD(v1047) = jj ^ v1047 )
{
jj >>= 31;
if( !jj )
break;
}
v1056 = *v1039;
v1057 = v1047 & 0x7FFFFFFF;
if( v1057 == (*v1039 & 0x7FFFFFFF) )
goto LABEL_1729;
if( !v1046 )
goto LABEL_1725;
v1058 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) == 0 )
goto LABEL_1725;
v1059 = KeGetCurrentIrql();
__writecr8(2ui64);
v1060 = v47 & 0xFFFFFFFFFFFFF000ui64;
v1061 = (v47 + v1046 - 1) | 0xFFF;
v1062 = (v47 & 0xFFFFFFFFFFFFF000ui64) - 1;
do
{
v47 = v1059;
while( 1 )
{
v1063 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v1060,
0i64,
v1058,
v1042);
if( v1063 != -1073741267 )
break;
if( v1059 > 1u )
goto LABEL_1733;
v47 = v1059;
__writecr8(v1059);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1063 < 0 )
{
__writecr8(v47);
v1039 = v1793;
v47 = v1572;
v1040 = v1567;
v56 = v1565;
v1056 = *v1793;
LABEL_1725:
v1064 = v1056;
if( !*(_DWORD *)(v17 + 2296) )
{
LODWORD(v1064) = v1056 & 0x7FFFFFFF;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1064 ^ v1057;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v47;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
goto LABEL_1728;
}
}
goto LABEL_1729;
}
LABEL_1733:
v1060 += 4096i64;
v1062 += 4096i64;
}
while( v1062 != v1061 );
__writecr8(v47);
v1040 = v1567;
LABEL_1728:
v1039 = v1793;
LABEL_1729:
v56 = v1565;
v1039 += 3;
--v1040;
v1793 = v1039;
v1567 = v1040;
}
while( v1040 );
v1065 = v1569;
++*(_DWORD *)(v17 + 2084);
v1038 = (char *)(v1065 + 24);
v1569 = (__int64)v1038;
if( v1038 == BugCheckParameter2 )
{
v50 = 0;
goto LABEL_1736;
}
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
goto LABEL_237;
}
}
continue;
}
}
}
break;
}
v56 = v1565;
goto LABEL_1683;
}
if( v79 == 38 )
{
(*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1751, *((unsigned int *)v56 + 11));
v1516 = (*(__int64(__fastcall **)(char *, char *))(v17 + 464))(v1751, v1752);
LODWORD(v1516) = _xgetbv(0);
v1518 = v1516 | (v1517 << 32);
(*(void(__fastcall **)(char *))(v17 + 408))(v1752);
v1519 = *((_QWORD *)v56 + 4);
v1520 = v1518 & *((_QWORD *)v56 + 3);
if( v1520 == v1519 )
goto LABEL_238;
v243 = *((_QWORD *)v56 + 5);
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1520 ^ v1519;
v108 = *(_DWORD *)(v17 + 2296);
goto LABEL_457;
}
if( v79 <= 42 )
{
*(_DWORD *)(v17 + 2088) += *((_DWORD *)v56 + 9);
v1395 = *((unsigned int *)v56 + 9);
v1396 = (_QWORD *)(v17 + *((unsigned int *)v56 + 8));
v1397 = *(_DWORD *)(v17 + 2068);
v1398 = v1396;
v47 = *(_QWORD *)(v17 + 2072);
v1399 = (char *)v1396;
if( v1396 < (_QWORD *)((char *)v1396 + v1395) )
{
do
{
_mm_prefetchnta(v1399);
v1399 += 64;
}
while( v1399 < (char *)v1396 + v1395 );
}
v1400 = *(_QWORD *)(v17 + 2072);
v1401 = (unsigned int)v1395 >> 7;
if( (unsigned int)v1395 >> 7 )
{
do
{
v1402 = 8i64;
do
{
v1403 = v1398[1] ^ __ROL8__(*v1398 ^ v1400, v1397);
v1398 += 2;
v1400 = __ROL8__(v1403, v1397);
--v1402;
}
while( v1402 );
v1404 = (__ROL8__(v47 ^ ((char *)v1398 - (char *)v1396), 17) ^ v47 ^ ((char *)v1398 - (char *)v1396))
* (unsigned __int128)0x7010008004002001ui64;
v1721 = *((_QWORD *)&v1404 + 1);
v1397 = (BYTE8(v1404) ^ (unsigned __int8)(v1404 ^ v1397)) & 0x3F;
if( !v1397 )
LOBYTE(v1397) = 1;
--v1401;
}
while( v1401 );
v17 = (__int64)v1566;
}
v1405 = v1395 & 0x7F;
if( v1405 >= 8 )
{
v1406 = (unsigned __int64)v1405 >> 3;
do
{
v1400 = __ROL8__(*v1398++ ^ v1400, v1397);
v1405 -= 8;
--v1406;
}
while( v1406 );
}
for( ; v1405; --v1405 )
{
v1407 = *(unsigned __int8 *)v1398;
v1398 = (_QWORD *)((char *)v1398 + 1);
v1400 = __ROL8__(v1407 ^ v1400, v1397);
}
v1408 = *((_QWORD *)v56 + 3);
if( v1400 == v1408 )
goto LABEL_238;
v1409 = *(_DWORD *)(v17 + 2296);
if( !v1409 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1400 ^ v1408;
v1409 = *(_DWORD *)(v17 + 2296);
}
v1410 = v17 + *((unsigned int *)v56 + 8);
if( v1409 )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1410;
goto LABEL_2327;
}
if( v79 == 43 )
goto LABEL_2132;
if( v79 != 44 )
{
if( v79 == 46 )
{
if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
goto LABEL_238;
v1166 = 0;
v47 = *(_QWORD *)(v17 + 1352);
(*(void(**)(void))(v17 + 376))();
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v1167 = *(_DWORD *)(v17 + 2384), v1167 >= 7) )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
v1168 = 0x80;
}
else
{
v1168 = 1 << v1167;
}
(*(void(__fastcall **)(unsigned __int64, _QWORD))(v17 + 312))(v47, 0i64);
if( v1168 == (char)0x80 )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
}
else
{
v1169 = *(volatile signed __int8 ***)(v17 + 1312);
v1170 = *v1169;
if( *v1169 != (volatile signed __int8 *)v1169 )
{
v1171 = ~v1168;
do
{
_InterlockedAnd8(&v1170[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v1171);
v1170 = *(volatile signed __int8 **)v1170;
++v1166;
}
while( v1170 != (volatile signed __int8 *)v1169 );
}
}
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
(*(void(**)(void))(v17 + 384))();
v1003 = v1166 << 7;
LABEL_1639:
*(_DWORD *)(v17 + 2088) += v1003;
goto LABEL_238;
}
if( v79 == 47 )
{
v1583 = *(_QWORD *)(*(_QWORD *)(v17 + 1704)
+ *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608))
+ *(_QWORD *)(v17 + 1672));
v1156 = (*(__int64(**)(void))(v17 + 1168))();
if( v1156 == 0xFFFFFFFFi64 )
{
v1583 = 0i64;
v1157 = *(_QWORD *)(v17 + 2440);
if( !v1157 )
goto LABEL_1897;
v1158 = (*(__int64(__fastcall **)(__int64, __int64 *))(v17 + 1152))(v1157, &v1583);
v1159 = v1583;
if( v1158 < 0 )
v1159 = 0i64;
v1583 = v1159;
if( !v1159 )
LABEL_1897:
v1583 = (*(__int64(__fastcall **)(_QWORD))(v17 + 960))(0i64);
*(_QWORD *)(v17 + 2440) = 0i64;
v1160 = 0;
if( !v1583 )
goto LABEL_1906;
LODWORD(v47) = 1;
while( 1 )
{
++v1160;
if( (*(int(**)(void))(v17 + 928))() >= 0 )
{
(*(void(__fastcall **)(__int64, char *))(v17 + 1080))(v1583, v1771);
v1156 = (*(__int64(**)(void))(v17 + 1168))();
(*(void(__fastcall **)(char *))(v17 + 1088))(v1771);
(*(void(__fastcall **)(__int64))(v17 + 936))(v1583);
if( v1156 != 0xFFFFFFFFi64 || v1160 > 0x100 )
break;
}
v1583 = (*(__int64(__fastcall **)(__int64))(v17 + 960))(v1583);
if( !v1583 )
goto LABEL_1906;
}
*(_QWORD *)(v17 + 2440) = (*(__int64(__fastcall **)(__int64))(v17 + 1160))(v1583);
(*(void(__fastcall **)(__int64))(v17 + 480))(v1583);
if( v1156 == 0xFFFFFFFFi64 )
{
LABEL_1906:
*(_DWORD *)(v17 + 2088) += v1160 << 12;
goto LABEL_238;
}
}
else
{
LODWORD(v47) = 1;
}
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v1161 = *(_QWORD **)(v17 + 2688);
v1162 = 48;
v1163 = 6i64;
do
{
v1162 -= 8;
*v1161 = *(_QWORD *)v56;
v56 += 8;
++v1161;
--v1163;
}
while( v1163 );
for( ; v1162; --v1162 )
{
v1164 = *v56++;
*(_BYTE *)v1161 = v1164;
v1161 = (_QWORD *)((char *)v1161 + 1);
}
v56 = *(char **)(v17 + 2688);
}
*((_QWORD *)v56 + 3) = v1156;
v1165 = v1583;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1165;
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_460;
}
if( v79 != 48 )
goto LABEL_2328;
if( !*((_DWORD *)v56 + 4) )
goto LABEL_238;
if( (*(_DWORD *)(v17 + 2452) & 0x4000) != 0 )
{
v1102 = *(volatile signed __int32 **)(v17 + 1248);
while( 1 )
{
_disable();
if( !_interlockedbittestandset(v1102, (*(_DWORD *)(v17 + 2448) >> 10) & 0x1F) )
break;
_enable();
_mm_pause();
}
}
if( (*((_DWORD *)v56 + 6) & 1) == 0 )
{
v1103 = (_QWORD *)*((_QWORD *)v56 + 1);
v1104 = *((unsigned int *)v56 + 4);
v1105 = v1103;
*(_DWORD *)(v17 + 2088) += v1104;
v1106 = (char *)v1103;
v1107 = *(_DWORD *)(v17 + 2068);
v1108 = *(_QWORD *)(v17 + 2072);
if( v1103 < (_QWORD *)((char *)v1103 + v1104) )
{
do
{
_mm_prefetchnta(v1106);
v1106 += 64;
}
while( v1106 < (char *)v1103 + v1104 );
}
v1109 = *(_QWORD *)(v17 + 2072);
v1110 = (unsigned int)v1104 >> 7;
if( (unsigned int)v1104 >> 7 )
{
do
{
v1111 = 8i64;
do
{
v1112 = v1105[1] ^ __ROL8__(*v1105 ^ v1109, v1107);
v1105 += 2;
v1109 = __ROL8__(v1112, v1107);
--v1111;
}
while( v1111 );
v1113 = (__ROL8__(v1108 ^ ((char *)v1105 - (char *)v1103), 17) ^ v1108 ^ (unsigned __int64)((char *)v1105 - (char *)v1103))
* (unsigned __int128)0x7010008004002001ui64;
v1712 = *((_QWORD *)&v1113 + 1);
v1107 = (BYTE8(v1113) ^ (unsigned __int8)(v1113 ^ v1107)) & 0x3F;
if( !v1107 )
LOBYTE(v1107) = 1;
--v1110;
}
while( v1110 );
v17 = (__int64)v1566;
}
v1114 = v1104 & 0x7F;
if( v1114 >= 8 )
{
v1115 = (unsigned __int64)v1114 >> 3;
do
{
v1109 = __ROL8__(*v1105++ ^ v1109, v1107);
v1114 -= 8;
--v1115;
}
while( v1115 );
}
for( ; v1114; --v1114 )
{
v1116 = *(unsigned __int8 *)v1105;
v1105 = (_QWORD *)((char *)v1105 + 1);
v1109 = __ROL8__(v1116 ^ v1109, v1107);
}
for( kk = v1109; ; LODWORD(v1109) = kk ^ v1109 )
{
kk >>= 31;
if( !kk )
break;
}
v1118 = v1109 & 0x7FFFFFFF;
if( v1118 != *((_DWORD *)v56 + 5) )
{
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v1119 = *((unsigned int *)v56 + 4);
v1120 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v1121 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1122 = KeGetCurrentIrql();
__writecr8(2ui64);
v1123 = v1120 & 0xFFFFFFFFFFFFF000ui64;
v1796 = (v1120 + v1119 - 1) | 0xFFF;
v1124 = (v1120 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v1125 = v1122;
while( 1 )
{
v1126 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v1123,
0i64,
v1121,
v1105);
if( v1126 != -1073741267 )
break;
if( v50 )
goto LABEL_1842;
if( v1122 > 1u )
goto LABEL_1840;
v1125 = v1122;
__writecr8(v1122);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1126 < 0 )
break;
LABEL_1840:
v1123 += 4096i64;
v1124 += 4096i64;
if( v1124 == v1796 )
goto LABEL_1841;
}
LABEL_1842:
v56 = v1565;
__writecr8(v1125);
}
}
v1127 = *((unsigned int *)v56 + 5);
LABEL_1844:
v1128 = *(_DWORD *)(v17 + 2296);
if( !v1128 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1118 ^ v1127;
v1128 = *(_DWORD *)(v17 + 2296);
}
v1129 = *((_QWORD *)v56 + 1);
if( !v1128 )
{
LODWORD(v47) = 1;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1129;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
goto LABEL_1890;
}
}
LABEL_1889:
LODWORD(v47) = 1;
LABEL_1890:
if( (*(_DWORD *)(v17 + 2452) & 0x4000) != 0 )
{
_InterlockedAnd(*(volatile signed __int32 **)(v17 + 1248), ~(1 << ((*(_DWORD *)(v17 + 2448) >> 10) & 0x1F)));
_enable();
}
goto LABEL_237;
}
if( *(_QWORD *)(v17 + 2432) )
{
v1130 = *(_DWORD *)(v17 + 2452);
LOBYTE(v1131) = v1130;
if( !*(_DWORD *)(v17 + 2084) )
{
v1131 = v1130 ^ ((unsigned __int8)v1130 ^ (unsigned __int8)(8 * v1130)) & 0x20;
*(_DWORD *)(v17 + 2452) = v1131;
goto LABEL_1852;
}
if( (((unsigned __int8)v1130 ^ (unsigned __int8)(v1130 >> 3)) & 4) == 0 )
{
LABEL_1852:
if( (v1131 & 4) != 0 )
{
v1132 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
v1133 = ((*((_DWORD *)v56 + 2) & 0xFFF) + (unsigned __int64)*((unsigned int *)v56 + 4) + 4095) >> 12;
if( v1133 )
{
LODWORD(v47) = 1;
do
{
--v1133;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1132)
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1132;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
*(_DWORD *)(v17 + 2088) += 256;
v1132 += 4096i64;
}
while( v1133 );
goto LABEL_1890;
}
}
else
{
v1134 = (_QWORD *)*((_QWORD *)v56 + 1);
v1135 = *((unsigned int *)v56 + 4);
v1136 = v1134;
*(_DWORD *)(v17 + 2088) += v1135;
v1137 = (char *)v1134;
v1138 = *(_DWORD *)(v17 + 2068);
v1139 = *(_QWORD *)(v17 + 2072);
if( v1134 < (_QWORD *)((char *)v1134 + v1135) )
{
do
{
_mm_prefetchnta(v1137);
v1137 += 64;
}
while( v1137 < (char *)v1134 + v1135 );
}
v1140 = *(_QWORD *)(v17 + 2072);
v1141 = (unsigned int)v1135 >> 7;
if( (unsigned int)v1135 >> 7 )
{
do
{
v1142 = 8i64;
do
{
v1143 = v1136[1] ^ __ROL8__(*v1136 ^ v1140, v1138);
v1136 += 2;
v1140 = __ROL8__(v1143, v1138);
--v1142;
}
while( v1142 );
v1144 = (__ROL8__(v1139 ^ ((char *)v1136 - (char *)v1134), 17) ^ v1139 ^ (unsigned __int64)((char *)v1136 - (char *)v1134))
* (unsigned __int128)0x7010008004002001ui64;
v1713 = *((_QWORD *)&v1144 + 1);
v1138 = (BYTE8(v1144) ^ (unsigned __int8)(v1144 ^ v1138)) & 0x3F;
if( !v1138 )
LOBYTE(v1138) = 1;
--v1141;
}
while( v1141 );
v17 = (__int64)v1566;
}
v1145 = v1135 & 0x7F;
if( v1145 >= 8 )
{
v1146 = (unsigned __int64)v1145 >> 3;
do
{
v1140 = __ROL8__(*v1136++ ^ v1140, v1138);
v1145 -= 8;
--v1146;
}
while( v1146 );
}
for( ; v1145; --v1145 )
{
v1147 = *(unsigned __int8 *)v1136;
v1136 = (_QWORD *)((char *)v1136 + 1);
v1140 = __ROL8__(v1147 ^ v1140, v1138);
}
for( mm = v1140; ; LODWORD(v1140) = mm ^ v1140 )
{
mm >>= 31;
if( !mm )
break;
}
v1127 = *((unsigned int *)v56 + 5);
v1118 = v1140 & 0x7FFFFFFF;
if( v1118 != (_DWORD)v1127 )
{
v1149 = *((unsigned int *)v56 + 4);
v1150 = *((_QWORD *)v56 + 1);
if( !*((_DWORD *)v56 + 4) || (*(_DWORD *)(v17 + 2452) & 0x40) == 0 )
goto LABEL_1844;
v1151 = KeGetCurrentIrql();
__writecr8(2ui64);
v1152 = v1150 & 0xFFFFFFFFFFFFF000ui64;
v1153 = (v1150 + v1149 - 1) | 0xFFF;
v1154 = (v1150 & 0xFFFFFFFFFFFFF000ui64) - 1;
do
{
v1125 = v1151;
while( 1 )
{
v1155 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1152, 0i64);
if( v1155 != -1073741267 )
break;
if( v1151 > 1u )
goto LABEL_1886;
v1125 = v1151;
__writecr8(v1151);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1155 < 0 )
goto LABEL_1842;
LABEL_1886:
v1152 += 4096i64;
v1154 += 4096i64;
}
while( v1154 != v1153 );
LABEL_1841:
__writecr8(v1125);
}
}
goto LABEL_1889;
}
}
*(_DWORD *)(v17 + 2084) = 0;
goto LABEL_1889;
}
v1172 = *((_DWORD *)v56 + 8);
v1571 = v17;
if( (v1172 & 2) == 0 )
goto LABEL_1991;
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1736;
v1173 = *(_DWORD *)(v17 + 2452);
if( (v1173 & 4) != 0 )
goto LABEL_1736;
if( (v1172 & 2) != 0 )
{
v1174 = *(_DWORD *)(v17 + 2452);
if( *(_DWORD *)(v17 + 2084) )
{
if( (((unsigned __int8)v1173 ^ (unsigned __int8)(v1173 >> 3)) & 4) != 0 )
goto LABEL_1736;
}
else
{
v1174 = v1173 ^ ((unsigned __int8)v1173 ^ (unsigned __int8)(8 * v1173)) & 0x20;
*(_DWORD *)(v17 + 2452) = v1174;
}
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1990;
LOBYTE(v1175) = v1174;
if( !*(_DWORD *)(v17 + 2084) )
{
v1175 = v1174 ^ ((unsigned __int8)v1174 ^ (unsigned __int8)(8 * v1174)) & 0x20;
*(_DWORD *)(v17 + 2452) = v1175;
goto LABEL_1939;
}
if( (((unsigned __int8)v1174 ^ (unsigned __int8)(v1174 >> 3)) & 4) != 0 )
{
LABEL_1990:
*(_DWORD *)(v17 + 2084) = 0;
goto LABEL_1977;
}
LABEL_1939:
if( (v1175 & 4) != 0 )
{
v1176 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
v1177 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
if( v1177 )
{
LODWORD(v47) = 1;
do
{
--v1177;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1176) && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1176;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
*(_DWORD *)(v17 + 2088) += 256;
v1176 += 4096i64;
}
while( v1177 );
}
goto LABEL_1977;
}
v1178 = (_QWORD *)*((_QWORD *)v56 + 1);
v1179 = *((unsigned int *)v56 + 4);
v1180 = v1178;
*(_DWORD *)(v17 + 2088) += v1179;
v1181 = (char *)v1178;
v1182 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v1178 < (_QWORD *)((char *)v1178 + v1179) )
{
do
{
_mm_prefetchnta(v1181);
v1181 += 64;
}
while( v1181 < (char *)v1178 + v1179 );
}
v1183 = *(_QWORD *)(v17 + 2072);
v1184 = (unsigned int)v1179 >> 7;
if( (unsigned int)v1179 >> 7 )
{
do
{
v1185 = 8i64;
do
{
v1186 = v1183 ^ *v1180;
v1187 = v1180[1];
v1180 += 2;
v1183 = __ROL8__(__ROL8__(v1186, v1182) ^ v1187, v1182);
--v1185;
}
while( v1185 );
v1188 = __ROL8__(v47 ^ ((char *)v1180 - (char *)v1178), 17) ^ v47 ^ ((char *)v1180 - (char *)v1178);
v1714 = (v1188 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1182 = ((unsigned __int8)(v1714 ^ v1188) ^ (unsigned __int8)v1182) & 0x3F;
if( !v1182 )
LOBYTE(v1182) = 1;
--v1184;
}
while( v1184 );
v17 = (__int64)v1566;
}
v1189 = v1179 & 0x7F;
if( v1189 >= 8 )
{
v1190 = (unsigned __int64)v1189 >> 3;
do
{
v1183 = __ROL8__(*v1180++ ^ v1183, v1182);
v1189 -= 8;
--v1190;
}
while( v1190 );
}
if( v1189 )
{
do
{
v1191 = *(unsigned __int8 *)v1180;
v1180 = (_QWORD *)((char *)v1180 + 1);
v1183 = __ROL8__(v1191 ^ v1183, v1182);
--v1189;
}
while( v1189 );
v17 = (__int64)v1566;
}
for( nn = v1183; ; LODWORD(v1183) = nn ^ v1183 )
{
nn >>= 31;
if( !nn )
break;
}
v1193 = *((_DWORD *)v56 + 5);
v1194 = v1183 & 0x7FFFFFFF;
if( v1194 != v1193 )
{
v1195 = *((unsigned int *)v56 + 4);
v1196 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1197 = KeGetCurrentIrql();
__writecr8(2ui64);
v1198 = v1196 & 0xFFFFFFFFFFFFF000ui64;
v1199 = (v1196 + v1195 - 1) | 0xFFF;
v1200 = (v1196 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v1197;
while( 1 )
{
v1201 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1198, 0i64);
if( v1201 != -1073741267 )
break;
if( v1197 > 1u )
goto LABEL_1974;
v47 = v1197;
__writecr8(v1197);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1201 < 0 )
break;
LABEL_1974:
v1198 += 4096i64;
v1200 += 4096i64;
if( v1200 == v1199 )
goto LABEL_1975;
}
__writecr8(v47);
v56 = v1565;
v50 = 0;
v1193 = *((_DWORD *)v1565 + 5);
}
v1205 = *(_DWORD *)(v17 + 2296);
if( !v1205 )
{
v1206 = v1193 ^ (unsigned __int64)v1194;
goto LABEL_1987;
}
goto LABEL_1988;
}
}
else
{
LABEL_1991:
v1208 = (_QWORD *)*((_QWORD *)v56 + 1);
v1209 = *((unsigned int *)v56 + 4);
v1210 = v1208;
*(_DWORD *)(v17 + 2088) += v1209;
v1211 = (char *)v1208;
v1212 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v1208 < (_QWORD *)((char *)v1208 + v1209) )
{
do
{
_mm_prefetchnta(v1211);
v1211 += 64;
}
while( v1211 < (char *)v1208 + v1209 );
}
v1213 = *(_QWORD *)(v17 + 2072);
v1214 = (unsigned int)v1209 >> 7;
if( (unsigned int)v1209 >> 7 )
{
do
{
v1215 = 8i64;
do
{
v1216 = v1210[1] ^ __ROL8__(*v1210 ^ v1213, v1212);
v1210 += 2;
v1213 = __ROL8__(v1216, v1212);
--v1215;
}
while( v1215 );
v1217 = __ROL8__(v47 ^ ((char *)v1210 - (char *)v1208), 17) ^ v47 ^ ((char *)v1210 - (char *)v1208);
v1715 = (v1217 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1212 = ((unsigned __int8)(v1715 ^ v1217) ^ (unsigned __int8)v1212) & 0x3F;
if( !v1212 )
LOBYTE(v1212) = 1;
--v1214;
}
while( v1214 );
v17 = (__int64)v1566;
}
v1218 = v1209 & 0x7F;
if( v1218 >= 8 )
{
v1219 = (unsigned __int64)v1218 >> 3;
do
{
v1213 = __ROL8__(*v1210++ ^ v1213, v1212);
v1218 -= 8;
--v1219;
}
while( v1219 );
}
for( ; v1218; --v1218 )
{
v1220 = *(unsigned __int8 *)v1210;
v1210 = (_QWORD *)((char *)v1210 + 1);
v1213 = __ROL8__(v1220 ^ v1213, v1212);
}
for( i1 = v1213; ; LODWORD(v1213) = i1 ^ v1213 )
{
i1 >>= 31;
if( !i1 )
break;
}
v1222 = v1213 & 0x7FFFFFFF;
if( v1222 == *((_DWORD *)v56 + 5) )
{
LABEL_1976:
v50 = 0;
goto LABEL_1977;
}
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v1223 = *((unsigned int *)v56 + 4);
v1224 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v1225 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1226 = KeGetCurrentIrql();
__writecr8(2ui64);
v1227 = v1224 & 0xFFFFFFFFFFFFF000ui64;
v1798 = (v1224 + v1223 - 1) | 0xFFF;
v1228 = (v1224 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v1226;
while( 1 )
{
v1229 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v1227,
0i64,
v1225,
v1210);
if( v1229 != -1073741267 )
break;
if( v50 )
goto LABEL_2023;
if( v1226 > 1u )
goto LABEL_2021;
v47 = v1226;
__writecr8(v1226);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1229 < 0 )
break;
LABEL_2021:
v1227 += 4096i64;
v1228 += 4096i64;
if( v1228 == v1798 )
{
LABEL_1975:
__writecr8(v47);
v56 = v1565;
goto LABEL_1976;
}
}
LABEL_2023:
__writecr8(v47);
v56 = v1565;
}
}
v1205 = *(_DWORD *)(v17 + 2296);
v50 = 0;
if( !v1205 )
{
v1206 = *((unsigned int *)v56 + 5) ^ (unsigned __int64)v1222;
LABEL_1987:
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1206;
v1205 = *(_DWORD *)(v17 + 2296);
}
LABEL_1988:
v1207 = *((_QWORD *)v56 + 1);
if( !v1205 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1207;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
LABEL_1977:
if( (*((_DWORD *)v56 + 8) & 1) == 0 )
goto LABEL_238;
v1202 = *((_QWORD *)v56 + 3);
v1203 = (*(__int64(__fastcall **)(__int64))(v17 + 504))(v1202);
v47 = v1203 + *(unsigned __int16 *)(v1203 + 20) + 24i64;
v1567 = v47 + 40i64 * *(unsigned __int16 *)(v1203 + 6);
if( v47 == v1567 )
goto LABEL_238;
v1204 = *(_DWORD *)(v17 + 2084);
if( !v1204 )
{
*(_DWORD *)(v17 + 2084) = 4096;
v1204 = 4096;
}
v1797 = v1202 == *(_QWORD *)(v17 + 1512) || v1202 == *(_QWORD *)(v17 + 1520);
while( 2 )
{
v1230 = *(_DWORD *)(v47 + 16);
v1231 = *(_DWORD *)(v47 + 12);
if( v1230 <= *(_DWORD *)(v47 + 8) )
v1230 = *(_DWORD *)(v47 + 8);
v1232 = (v1230 + v1231 + 4095) & 0xFFFFF000;
if( v1204 >= v1232 )
goto LABEL_2046;
if( (*(_DWORD *)(v47 + 36) & 0x2000000) != 0 )
goto LABEL_2045;
v1233 = *(_DWORD *)v47;
if( *(_DWORD *)v47 == 1414090313 && *(_DWORD *)(v47 + 4) == 1195525195 )
goto LABEL_2045;
if( v1233 == 1162297680 )
{
v1234 = *(_WORD *)(v47 + 4);
if( v1234 == 30839 || v1234 == 29303 || v1234 == 30583 )
goto LABEL_2045;
}
if( v1233 == 1095914053 && *(_WORD *)(v47 + 4) == 16724 )
goto LABEL_2045;
if( v1571 )
{
v1235 = *(char **)(v1571 + 2352);
*((_QWORD *)&v1649 + 1) = *(_QWORD *)(v1571 + 2360);
v1650 = *(_OWORD *)(v1571 + 2368);
*(_QWORD *)&v1649 = v1235;
}
else
{
v1649 = *(_OWORD *)VfExcludeSections;
v1235 = VfExcludeSections[0];
v1650 = *(_OWORD *)off_140C0EFE0;
}
v1236 = 7;
v1237 = (unsigned __int8 *)v47;
while( 1 )
{
v1238 = *v1237++;
v1239 = (unsigned __int8)*v1235++;
if( v1238 != v1239 )
break;
if( !--v1236 )
goto LABEL_2045;
}
v1242 = (__int64 *)*((_QWORD *)&v1649 + 1);
v1243 = 8;
v1244 = (__int64 *)v47;
do
{
v1245 = *v1244++;
v1246 = *v1242++;
if( v1245 != v1246 )
goto LABEL_2056;
v1243 -= 8;
}
while( v1243 >= 8 );
if( !v1243 )
goto LABEL_2045;
while( 1 )
{
v1247 = *(unsigned __int8 *)v1244;
v1244 = (__int64 *)((char *)v1244 + 1);
v1248 = *(unsigned __int8 *)v1242;
v1242 = (__int64 *)((char *)v1242 + 1);
if( v1247 != v1248 )
break;
if( !--v1243 )
goto LABEL_2045;
}
LABEL_2056:
v1249 = (unsigned __int8 *)v1650;
v1250 = 4;
v1251 = (unsigned __int8 *)v47;
while( 1 )
{
v1252 = *v1251++;
v1253 = *v1249++;
if( v1252 != v1253 )
break;
if( !--v1250 )
goto LABEL_2045;
}
v1254 = (unsigned __int8 *)*((_QWORD *)&v1650 + 1);
v1255 = 6;
v1256 = (unsigned __int8 *)v47;
while( 1 )
{
v1257 = *v1256++;
v1258 = *v1254++;
if( v1257 != v1258 )
break;
if( !--v1255 )
goto LABEL_2045;
}
v1259 = *(_DWORD *)(v47 + 36);
if( v1259 < 0 || (v1259 & 0x20000000) == 0 )
{
LABEL_2045:
v1204 = v1232;
LABEL_2046:
v1240 = (unsigned int *)v1571;
goto LABEL_2047;
}
v1260 = 1;
if( v1797 && *(_DWORD *)v47 != 778396769 && *(_DWORD *)v47 != 1162297680 )
v1260 = 0;
v1240 = (unsigned int *)v1571;
if( v1204 >= v1231 )
v1231 = v1204;
v1204 = v1231;
LABEL_2073:
v1261 = v1202 + v1204;
if( (*((_BYTE *)v1240 + 2171) & 4) != 0 )
{
__asm
{
xbegin $+6
xend
}
++v1240[527];
v1240[522] += 256;
}
else
{
if( v1260 )
{
v1262 = (*((__int64(__fastcall **)(__int64 *, __int64))v1240 + 138))(&v1680, v1202 + v1204);
if( v1262 < 0 )
{
if( v1262 == -1073741819 )
{
v1263 = (int *)v1565;
if( (*((_DWORD *)v1565 + 8) & 4) == 0 || *(int *)(v47 + 36) < 0 )
{
v1240 = (unsigned int *)v1571;
if( *(_DWORD *)(v1571 + 2296) )
goto LABEL_2083;
*(_QWORD *)(v1571 + 2304) = v1571 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v1240 + 289) = (char *)v1263 - 0x4C48B4211BBACBEBi64;
*((_QWORD *)v1240 + 290) = *v1263;
*((_QWORD *)v1240 + 291) = v1261;
v1240[574] = 1;
__b8((__int64)v1240, 0i64);
}
}
v1240 = (unsigned int *)v1571;
goto LABEL_2083;
}
}
else
{
v1680 = 0i64;
v1682 = 0;
v1684 = 4096;
v1681 = 8 * ((((unsigned __int64)(v1261 & 0xFFF) + 0x1FFF) >> 12) + 6);
v1683 = v1261 & 0xFFFFFFFFFFFFF000ui64;
v1685 = v1261 & 0xFFF;
v1716 = (*((__int64(__fastcall **)(__int64))v1240 + 139))(v1202 + v1204);
v1686 = v1716 >> 12;
}
v1265 = v1571;
++*(_DWORD *)(v1571 + 2112);
*(_QWORD *)(v1265 + 2664) = v1683 + v1685;
*(_QWORD *)(v1265 + 2656) = v1565;
v1266 = KeGetCurrentIrql();
__writecr8(2ui64);
RtlInitMinimalBarrier((_DWORD *)(v1265 + 2624), **(_DWORD **)(v1265 + 1528));
v1240 = (unsigned int *)(*(__int64(__fastcall **)(signed __int64))(v1571 + 1096))(v1571 + *(unsigned int *)(v1571 + 2036));
v1571 = (signed __int64)v1240;
__writecr8(v1266);
if( v1260 )
{
(*((void(__fastcall **)(__int64 *, _QWORD))v1240 + 140))(&v1680, 0i64);
v1240 = (unsigned int *)v1571;
}
v1240[522] += 81920;
}
LABEL_2083:
v1264 = v1240[522];
v1204 += 4096;
if( v1204 >= v1232 || v1264 >= (int)v1240[523] )
{
if( v1264 >= (int)v1240[523] )
{
v1241 = v1567;
goto LABEL_2087;
}
LABEL_2047:
v1241 = v1567;
v47 += 40i64;
if( v47 == v1567 )
{
LABEL_2087:
v17 = (__int64)v1566;
if( v47 == v1241 && v1204 >= v1232 )
{
v50 = 0;
v1240[521] = 0;
goto LABEL_238;
}
v1240[521] = v1204;
goto LABEL_237;
}
continue;
}
goto LABEL_2073;
}
}
if( v79 == 28 )
{
v727 = *((unsigned int *)v56 + 4);
if( !(_DWORD)v727 )
{
v1665 = v56 + 48;
v728 = *((_WORD *)v56 + 20);
v1564 = &v1601;
v1664[0] = v728;
v1664[1] = v728;
v729 = *(_QWORD *)(v17 + 1296);
v730 = *(int(__fastcall **)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *))(v17 + 488);
LOBYTE(v1563) = 0;
if( v730(v1664, 0i64, 0i64, 0i64, v729, v1563, 0i64, &v1601) < 0 )
goto LABEL_238;
if( (*(_DWORD *)(v1601 + 16) & 0x10) == 0 )
goto LABEL_341;
(*(void(__fastcall **)(_QWORD, char *))(v17 + 512))(*(_QWORD *)(v17 + 488), v1769);
if( v1770 )
{
v731 = *(__int64(**)(void))(v17 + 504);
v49 = v1770;
v1599 = v1770;
v732 = v731();
if( v732 )
{
v52 = *(_DWORD *)(v732 + 80);
v1596 = v52;
}
}
(*(void(__fastcall **)(_QWORD, char *))(v17 + 512))(*((_QWORD *)v56 + 3), v1765);
if( v1766 && (v733 = *(__int64(**)(void))(v17 + 504), v51 = v1766, v1594 = v1766, (v734 = v733()) != 0) )
{
v735 = *(_DWORD *)(v734 + 80);
v1590 = v735;
}
else
{
v735 = v1590;
}
LODWORD(v47) = 0x40000000;
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0 )
{
*((_QWORD *)v56 + 1) = v1601 + 112;
*((_DWORD *)v56 + 4) = 224;
}
v736 = 0;
v737 = v52;
do
{
v738 = *(_QWORD *)(v1601 + 8i64 * v736 + 112);
if( (!v52 || v738 < v49 || v738 > v52 + v49 - 1) && (!v735 || v738 < v51 || v738 > v51 + v735 - 1i64) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v774 = *(_QWORD **)(v17 + 2688);
v775 = 48;
v776 = 6i64;
do
{
v775 -= 8;
*v774 = *(_QWORD *)v56;
v56 += 8;
++v774;
--v776;
}
while( v776 );
v50 = 0;
if( v775 )
{
do
{
v777 = *v56++;
*(_BYTE *)v774 = v777;
v774 = (_QWORD *)((char *)v774 + 1);
--v775;
}
while( v775 );
v17 = (__int64)v1566;
}
v56 = *(char **)(v17 + 2688);
}
else
{
v50 = 0;
}
*((_QWORD *)v56 + 4) = v738;
v778 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v778 = v56;
*(_DWORD *)(v778 + 16) = 48;
v779 = *((_QWORD *)v56 + 1);
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v779;
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_460;
}
++v736;
}
while( v736 < 0x1Cu );
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
(*(void(__fastcall **)(__int64))(v17 + 480))(v1601);
goto LABEL_237;
}
v739 = (_QWORD *)*((_QWORD *)v56 + 1);
v740 = *((unsigned int *)v56 + 4);
v741 = v739;
*(_DWORD *)(v17 + 2088) += v740;
v742 = (char *)v739;
v743 = *(_DWORD *)(v17 + 2068);
v744 = *(_QWORD *)(v17 + 2072);
if( v739 < (_QWORD *)((char *)v739 + v740) )
{
do
{
_mm_prefetchnta(v742);
v742 += 64;
}
while( v742 < (char *)v739 + v740 );
}
v745 = *(_QWORD *)(v17 + 2072);
v746 = (unsigned int)v740 >> 7;
if( (unsigned int)v740 >> 7 )
{
do
{
v747 = 8i64;
do
{
v748 = v741[1] ^ __ROL8__(*v741 ^ v745, v743);
v741 += 2;
v745 = __ROL8__(v748, v743);
--v747;
}
while( v747 );
v749 = (__ROL8__(v744 ^ ((char *)v741 - (char *)v739), 17) ^ v744 ^ (unsigned __int64)((char *)v741
- (char *)v739))
* (unsigned __int128)0x7010008004002001ui64;
v1701 = *((_QWORD *)&v749 + 1);
v743 = ((unsigned __int8)(v749 ^ BYTE8(v749)) ^ (unsigned __int8)v743) & 0x3F;
if( !v743 )
LOBYTE(v743) = 1;
--v746;
}
while( v746 );
v17 = (__int64)v1566;
v49 = v1599;
}
v750 = v740 & 0x7F;
if( v750 >= 8 )
{
v751 = (unsigned __int64)v750 >> 3;
do
{
v745 = __ROL8__(*v741++ ^ v745, v743);
v750 -= 8;
--v751;
}
while( v751 );
}
LODWORD(v47) = 0;
if( v750 )
{
do
{
v752 = *(unsigned __int8 *)v741;
v741 = (_QWORD *)((char *)v741 + 1);
v745 = __ROL8__(v752 ^ v745, v743);
--v750;
}
while( v750 );
v17 = (__int64)v1566;
}
for( i2 = v745; ; LODWORD(v745) = i2 ^ v745 )
{
i2 >>= 31;
if( !i2 )
break;
}
v754 = 0;
*((_DWORD *)v56 + 5) = v745 & 0x7FFFFFFF;
v755 = *(char **)(v1601 + 80);
if( !v755 || (v754 = *(_DWORD *)v755, v756 = 0, (v757 = (unsigned int)(*(_DWORD *)v755 - 8) >> 3) == 0) )
{
LABEL_1230:
*(_DWORD *)(v17 + 2088) += v754;
v759 = v755;
v760 = *(_DWORD *)(v17 + 2068);
v761 = v755;
v47 = *(_QWORD *)(v17 + 2072);
v762 = &v755[v754];
if( v755 < v762 )
{
do
{
_mm_prefetchnta(v761);
v761 += 64;
}
while( v761 < v762 );
}
v50 = 0;
v763 = v754 >> 7;
v764 = *(_QWORD *)(v17 + 2072);
if( v754 >> 7 )
{
do
{
v765 = 8i64;
do
{
v766 = v764 ^ *v759;
v767 = v759[1];
v759 += 2;
v764 = __ROL8__(__ROL8__(v766, v760) ^ v767, v760);
--v765;
}
while( v765 );
v768 = __ROL8__(v47 ^ ((char *)v759 - v755), 17) ^ v47 ^ ((char *)v759 - v755);
v1702 = (v768 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v760 = ((unsigned __int8)(v768 ^ v1702) ^ (unsigned __int8)v760) & 0x3F;
if( !v760 )
LOBYTE(v760) = 1;
--v763;
}
while( v763 );
v17 = (__int64)v1566;
}
v769 = v754 & 0x7F;
if( v769 >= 8 )
{
v770 = (unsigned __int64)v769 >> 3;
do
{
v764 = __ROL8__(*v759++ ^ v764, v760);
v769 -= 8;
--v770;
}
while( v770 );
}
if( v769 )
{
do
{
v771 = *(unsigned __int8 *)v759;
v759 = (_QWORD *)((char *)v759 + 1);
v764 = __ROL8__(v771 ^ v764, v760);
--v769;
}
while( v769 );
v17 = (__int64)v1566;
}
for( i3 = v764; ; LODWORD(v764) = i3 ^ v764 )
{
i3 >>= 31;
if( !i3 )
break;
}
*((_DWORD *)v56 + 11) = v764 & 0x7FFFFFFF;
goto LABEL_238;
}
while( 1 )
{
v758 = *(_QWORD *)&v755[8 * v756 + 8];
if( v758
&& (!v737 || v758 < v49 || v758 > v49 + v737 - 1)
&& (!v1590 || v758 < v1594 || v758 > v1590 + v1594 - 1) )
{
break;
}
if( ++v756 >= v757 )
goto LABEL_1230;
}
*((_QWORD *)v56 + 4) = v758;
v50 = 0;
v773 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v773 = v56;
*(_DWORD *)(v773 + 16) = 48;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v755;
LABEL_459:
*(_DWORD *)(v17 + 2296) = 1;
LABEL_460:
__b8(v17, 0i64);
goto LABEL_238;
}
v780 = (_QWORD *)*((_QWORD *)v56 + 1);
*(_DWORD *)(v17 + 2088) += v727;
v781 = v780;
v782 = *(_DWORD *)(v17 + 2068);
v783 = (char *)v780;
v784 = *(_QWORD *)(v17 + 2072);
if( v780 < (_QWORD *)((char *)v780 + v727) )
{
do
{
_mm_prefetchnta(v783);
v783 += 64;
}
while( v783 < (char *)v780 + v727 );
}
v785 = *(_QWORD *)(v17 + 2072);
v786 = (unsigned int)v727 >> 7;
if( (unsigned int)v727 >> 7 )
{
do
{
v787 = 8i64;
do
{
v788 = v781[1] ^ __ROL8__(*v781 ^ v785, v782);
v781 += 2;
v785 = __ROL8__(v788, v782);
--v787;
}
while( v787 );
v789 = __ROL8__(v784 ^ ((char *)v781 - (char *)v780), 17) ^ v784 ^ ((char *)v781 - (char *)v780);
v1703 = (v789 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v782 = ((unsigned __int8)(v1703 ^ v789) ^ (unsigned __int8)v782) & 0x3F;
if( !v782 )
LOBYTE(v782) = 1;
--v786;
}
while( v786 );
v17 = (__int64)v1566;
}
v790 = v727 & 0x7F;
if( v790 >= 8 )
{
v791 = (unsigned __int64)v790 >> 3;
do
{
v785 = __ROL8__(*v781++ ^ v785, v782);
v790 -= 8;
--v791;
}
while( v791 );
}
for( ; v790; --v790 )
{
v792 = *(unsigned __int8 *)v781;
v781 = (_QWORD *)((char *)v781 + 1);
v785 = __ROL8__(v792 ^ v785, v782);
}
for( i4 = v785; ; LODWORD(v785) = i4 ^ v785 )
{
i4 >>= 31;
if( !i4 )
break;
}
v794 = v785 & 0x7FFFFFFF;
if( v794 == *((_DWORD *)v56 + 5) )
{
LABEL_1293:
v50 = 0;
}
else
{
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v795 = *((unsigned int *)v56 + 4);
v796 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v797 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v798 = KeGetCurrentIrql();
__writecr8(2ui64);
v799 = v796 & 0xFFFFFFFFFFFFF000ui64;
v1786 = (v796 + v795 - 1) | 0xFFF;
v800 = (v796 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v801 = v798;
while( 1 )
{
v802 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v799,
0i64,
v797,
v781);
if( v802 != -1073741267 )
break;
if( v50 )
goto LABEL_1312;
if( v798 > 1u )
goto LABEL_1291;
v801 = v798;
__writecr8(v798);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v802 < 0 )
break;
LABEL_1291:
v799 += 4096i64;
v800 += 4096i64;
if( v800 == v1786 )
{
__writecr8(v801);
v56 = v1565;
goto LABEL_1293;
}
}
LABEL_1312:
__writecr8(v801);
v56 = v1565;
}
}
v819 = *(_DWORD *)(v17 + 2296);
v50 = 0;
if( !v819 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v794 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
v819 = *(_DWORD *)(v17 + 2296);
}
v820 = *((_QWORD *)v56 + 1);
if( !v819 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v820;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v803 = 0;
v1601 = *((_QWORD *)v56 + 1) - 112i64;
v47 = *(_QWORD *)(v1601 + 80);
if( v47 )
v803 = *(_DWORD *)v47;
*(_DWORD *)(v17 + 2088) += v803;
v804 = (_QWORD *)v47;
v805 = *(_DWORD *)(v17 + 2068);
v806 = (char *)v47;
v807 = *(_QWORD *)(v17 + 2072);
v808 = v47 + v803;
if( v47 < v808 )
{
do
{
_mm_prefetchnta(v806);
v806 += 64;
}
while( (unsigned __int64)v806 < v808 );
}
v809 = *(_QWORD *)(v17 + 2072);
v810 = v803 >> 7;
if( v803 >> 7 )
{
do
{
v811 = 8i64;
do
{
v812 = v809 ^ *v804;
v813 = v804[1];
v804 += 2;
v809 = __ROL8__(__ROL8__(v812, v805) ^ v813, v805);
--v811;
}
while( v811 );
v814 = __ROL8__(v807 ^ ((unsigned __int64)v804 - v47), 17) ^ v807 ^ ((unsigned __int64)v804 - v47);
v1704 = (v814 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v805 = ((unsigned __int8)(v1704 ^ v814) ^ (unsigned __int8)v805) & 0x3F;
if( !v805 )
LOBYTE(v805) = 1;
--v810;
}
while( v810 );
v17 = (__int64)v1566;
}
v815 = v803 & 0x7F;
if( v815 >= 8 )
{
v816 = (unsigned __int64)v815 >> 3;
do
{
v809 = __ROL8__(*v804++ ^ v809, v805);
v815 -= 8;
--v816;
}
while( v816 );
}
if( v815 )
{
do
{
v817 = *(unsigned __int8 *)v804;
v804 = (_QWORD *)((char *)v804 + 1);
v809 = __ROL8__(v817 ^ v809, v805);
--v815;
}
while( v815 );
v17 = (__int64)v1566;
}
for( i5 = v809; ; LODWORD(v809) = i5 ^ v809 )
{
i5 >>= 31;
if( !i5 )
break;
}
v821 = *((unsigned int *)v56 + 11);
v822 = v809 & 0x7FFFFFFF;
if( v822 == (_DWORD)v821 )
goto LABEL_238;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v822 ^ v821;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v47;
LABEL_1323:
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_460;
}
if( v79 > 12 )
{
if( v79 <= 14 )
{
if( v79 == 14 )
{
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1736;
v684 = *(_DWORD *)(v17 + 2452);
if( ((v684 >> 2) & 1) != 0 )
goto LABEL_1736;
if( *(_DWORD *)(v17 + 2084) )
{
if( ((v684 >> 5) & 1) != 0 )
goto LABEL_1736;
}
else
{
*(_DWORD *)(v17 + 2452) = v684 ^ ((unsigned __int8)v684 ^ (unsigned __int8)(8 * v684)) & 0x20;
}
}
v685 = (_QWORD *)*((_QWORD *)v56 + 1);
v686 = *((unsigned int *)v56 + 4);
v687 = v685;
*(_DWORD *)(v17 + 2088) += v686;
v688 = (char *)v685;
v689 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v685 < (_QWORD *)((char *)v685 + v686) )
{
do
{
_mm_prefetchnta(v688);
v688 += 64;
}
while( v688 < (char *)v685 + v686 );
}
v690 = *(_QWORD *)(v17 + 2072);
v691 = (unsigned int)v686 >> 7;
if( (unsigned int)v686 >> 7 )
{
do
{
v692 = 8i64;
do
{
v693 = v690 ^ *v687;
v694 = v687[1];
v687 += 2;
v690 = __ROL8__(__ROL8__(v693, v689) ^ v694, v689);
--v692;
}
while( v692 );
v695 = (__ROL8__(v47 ^ ((char *)v687 - (char *)v685), 17) ^ v47 ^ ((char *)v687 - (char *)v685))
* (unsigned __int128)0x7010008004002001ui64;
v1700 = *((_QWORD *)&v695 + 1);
v689 = ((unsigned __int8)(v695 ^ BYTE8(v695)) ^ (unsigned __int8)v689) & 0x3F;
if( !v689 )
LOBYTE(v689) = 1;
--v691;
}
while( v691 );
v17 = (__int64)v1566;
}
v696 = v686 & 0x7F;
if( v696 >= 8 )
{
v697 = (unsigned __int64)v696 >> 3;
do
{
v690 = __ROL8__(*v687++ ^ v690, v689);
v696 -= 8;
--v697;
}
while( v697 );
v17 = (__int64)v1566;
}
for( ; v696; --v696 )
{
v698 = *(unsigned __int8 *)v687;
v687 = (_QWORD *)((char *)v687 + 1);
v690 = __ROL8__(v698 ^ v690, v689);
}
for( i6 = v690; ; LODWORD(v690) = i6 ^ v690 )
{
i6 >>= 31;
if( !i6 )
break;
}
v700 = v690 & 0x7FFFFFFF;
if( v700 == *((_DWORD *)v56 + 5) )
goto LABEL_1150;
_InterlockedOr(v1562, 0);
if( (*((_DWORD *)v56 + 6) & 1) != 0 )
{
if( **(_BYTE **)(v17 + 1408) )
goto LABEL_1150;
}
v701 = *((unsigned int *)v56 + 4);
v702 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v703 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v704 = KeGetCurrentIrql();
__writecr8(2ui64);
v705 = v702 & 0xFFFFFFFFFFFFF000ui64;
v706 = (v702 + v701 - 1) | 0xFFF;
v707 = (v702 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v704;
while( 1 )
{
v708 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v705,
0i64,
v703,
v687);
if( v708 != -1073741267 )
break;
if( v704 > 1u )
goto LABEL_1148;
v47 = v704;
__writecr8(v704);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v708 < 0 )
break;
LABEL_1148:
v705 += 4096i64;
v707 += 4096i64;
if( v707 == v706 )
{
__writecr8(v47);
v56 = v1565;
v50 = 0;
LABEL_1150:
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0 )
goto LABEL_238;
v709 = *((_DWORD *)v56 + 4);
if( !v709 )
goto LABEL_238;
sub_1403E92DC(v17, *((_QWORD *)v56 + 1), v709, (__int64)v1744);
v710 = 16;
v711 = (__int64 *)(v56 + 28);
v712 = v1744;
do
{
v713 = *(_QWORD *)v712;
v712 += 8;
v714 = *v711++;
if( v713 != v714 )
goto LABEL_1164;
v710 -= 8;
}
while( v710 >= 8 );
if( !v710 )
goto LABEL_1179;
while( 1 )
{
v715 = (unsigned __int8)*v712++;
v716 = *(unsigned __int8 *)v711;
v711 = (__int64 *)((char *)v711 + 1);
if( v715 != v716 )
break;
if( !--v710 )
goto LABEL_1179;
}
LABEL_1164:
_InterlockedOr(v1562, 0);
if( (*((_DWORD *)v56 + 6) & 1) == 0 || !**(_BYTE **)(v17 + 1408) )
{
v719 = *((unsigned int *)v56 + 4);
v720 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v721 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(2ui64);
v722 = v720 & 0xFFFFFFFFFFFFF000ui64;
v723 = (v720 + v719 - 1) | 0xFFF;
v724 = (v720 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v725 = (unsigned __int8)v47;
while( 1 )
{
v726 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, __int64 *))(v17 + 1128))(
v722,
0i64,
v721,
v711);
if( v726 != -1073741267 )
break;
if( (unsigned __int8)v47 > 1u )
goto LABEL_1174;
v725 = (unsigned __int8)v47;
__writecr8((unsigned __int8)v47);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v726 < 0 )
break;
LABEL_1174:
v722 += 4096i64;
v724 += 4096i64;
if( v724 == v723 )
{
__writecr8(v725);
v50 = 0;
goto LABEL_1179;
}
}
__writecr8(v725);
v720 = *((_QWORD *)v56 + 1);
v50 = 0;
}
}
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v720;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
LABEL_1179:
v179 = 16 * *((_DWORD *)v56 + 4);
LABEL_2414:
*(_DWORD *)(v17 + 2088) += v179;
goto LABEL_238;
}
}
__writecr8(v47);
v56 = v1565;
v50 = 0;
}
}
v717 = *(_DWORD *)(v17 + 2296);
if( !v717 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v700 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
v717 = *(_DWORD *)(v17 + 2296);
}
v718 = *((_QWORD *)v56 + 1);
if( !v717 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v718;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
goto LABEL_1150;
}
if( v79 == 15 )
{
if( *(_DWORD *)(v17 + 2392) == 11 )
{
*(_DWORD *)(v17 + 2088) += 256;
v47 = *(_QWORD *)(v17 + 1416);
v679 = (*(__int64(__fastcall **)(unsigned __int64))(v17 + 728))(v47);
if( v679 )
{
v680 = (*(__int64(__fastcall **)(__int64))(v17 + 736))(v679);
v681 = *((_QWORD *)v56 + 3);
v682 = v680;
if( v681 )
{
if( v681 != v680 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v680;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
else
{
v683 = *(_QWORD *)(v17 + 2424);
if( (!*(_DWORD *)(v17 + 2420) || v680 < v683 || v680 > v683 + *(unsigned int *)(v17 + 2420) - 1i64)
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v680;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
*((_QWORD *)v56 + 3) = v682;
}
(*(void(__fastcall **)(unsigned __int64, __int64))(v17 + 744))(v47, v679);
}
}
goto LABEL_238;
}
if( v79 == 21 )
{
v672 = *((_DWORD *)v56 + 10);
(*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1742, *((unsigned int *)v56 + 11));
v673 = (*(__int64(__fastcall **)(char *, char *))(v17 + 464))(v1742, v1762);
if( v1773 == 38 )
{
LODWORD(v673) = _xgetbv(0);
v675 = v673 | (v674 << 32);
}
else if( v672 )
{
v675 = __readcr4();
}
else
{
v675 = __readcr0();
}
(*(void(__fastcall **)(char *))(v17 + 408))(v1762);
v676 = *((_QWORD *)v56 + 4);
v677 = v675 & *((_QWORD *)v56 + 3);
if( v677 == v676 )
goto LABEL_238;
v678 = *((_QWORD *)v56 + 5);
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v677 ^ v676;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v678;
goto LABEL_459;
}
if( v79 != 24 )
{
if( v79 != 25 )
{
if( v79 == 26 )
{
if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
goto LABEL_238;
v266 = 0;
v267 = *(_QWORD *)(v17 + 1448);
v268 = *(_QWORD *)(v17 + 1352);
v1567 = *(_QWORD *)(v17 + 1456);
v269 = *(void(**)(void))(v17 + 376);
v1780 = 0;
v1569 = v267;
v269();
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v270 = *(_DWORD *)(v17 + 2384), v270 >= 7) )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
LOBYTE(v47) = 0x80;
}
else
{
LODWORD(v47) = 1;
LOBYTE(v47) = 1 << v270;
}
(*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v268, 0i64);
v271 = *(volatile signed __int8 ***)(v17 + 1312);
v272 = *v271;
if( *v271 != (volatile signed __int8 *)v271 )
{
do
{
_InterlockedOr8(&v272[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v47);
v272 = *(volatile signed __int8 **)v272;
++v266;
}
while( v272 != (volatile signed __int8 *)v271 );
v1780 = v266;
}
(*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v267, 0i64);
v273 = *(_QWORD ***)(v17 + 1440);
v274 = *v273;
if( *v273 != v273 )
{
v275 = v1567;
v276 = (int *)v1565;
do
{
v277 = (char *)v274 - *(_QWORD *)(v17 + 1856);
if( v277 != (char *)v275 )
{
v278 = *(_QWORD *)(v17 + 1720);
v279 = *(_QWORD *)&v277[*(_QWORD *)(v17 + 1848)];
if( ((unsigned __int8)v47 & *(_BYTE *)(v279 + v278)) == 0
&& (*(_DWORD *)(v279 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) != 0
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v276 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v276;
*(_QWORD *)(v17 + 2328) = v279;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v278 = *(_QWORD *)(v17 + 1720);
}
_InterlockedAnd8((volatile signed __int8 *)(v279 + v278), ~(_BYTE)v47);
v275 = v1567;
}
v274 = (_QWORD *)*v274;
}
while( v274 != v273 );
v266 = v1780;
v267 = v1569;
}
(*(void(__fastcall **)(__int64, _QWORD))(v17 + 320))(v267, 0i64);
if( (_BYTE)v47 == 0x80 )
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
(*(void(**)(void))(v17 + 384))();
*(_DWORD *)(v17 + 2088) += v266 << 8;
goto LABEL_237;
}
if( v79 == 27 )
{
if( (*(_DWORD *)(v17 + 2096) & 1) == 0 )
goto LABEL_238;
v244 = *(_QWORD *)(v17 + 1448);
v245 = *(_QWORD *)(v17 + 1456);
v246 = *(void(**)(void))(v17 + 376);
v247 = *(_QWORD *)(v17 + 1352);
v1572 = v244;
v1569 = v245;
v1568 = 0;
v246();
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v248 = *(_DWORD *)(v17 + 2384), v248 >= 7) )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
LOBYTE(v47) = 0x80;
}
else
{
LODWORD(v47) = 1;
LOBYTE(v47) = 1 << v248;
}
v249 = *(void(__fastcall **)(__int64, _QWORD))(v17 + 312);
LODWORD(v1570) = v47;
v249(v247, 0i64);
(*(void(__fastcall **)(unsigned __int64, _QWORD))(v17 + 312))(v244, 0i64);
v250 = *(unsigned __int64 **)(v17 + 1440);
v251 = 0i64;
v1567 = 0i64;
v252 = *v250;
if( (unsigned __int64 *)*v250 != v250 )
{
do
{
if( v252 - 24 != v245 )
{
v253 = *(_QWORD *)(v252 - 24 + *(_QWORD *)(v17 + 1848));
if( (*(_DWORD *)(v253 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) == 0 )
{
v254 = *(_QWORD *)(v252 - 24 + *(_QWORD *)(v17 + 1848));
if( v251 )
v254 = 1i64;
v251 = v254;
}
_InterlockedOr8((volatile signed __int8 *)(v253 + *(_QWORD *)(v17 + 1720)), v47);
}
v252 = *(_QWORD *)v252;
}
while( (unsigned __int64 *)v252 != v250 );
v1567 = v251;
}
v255 = *(_QWORD ***)(v17 + 1312);
v256 = *v255;
if( *v255 != v255 )
{
v257 = v1568;
v252 = (unsigned __int8)v47;
v258 = ~(_BYTE)v47;
v259 = v1569;
v1779 = v252;
do
{
v260 = (char *)v256 - *(_QWORD *)(v17 + 1744);
v261 = *(_QWORD *)(v17 + 1720);
if( (v260[v261] & (unsigned int)v252) == 0 )
{
v262 = *(_QWORD *)&v260[*(_QWORD *)(v17 + 1736)];
if( v262 && v262 != v259 && !*(_DWORD *)(v17 + 2296) )
{
v263 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v263 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v263;
*(_QWORD *)(v17 + 2328) = v260;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v261 = *(_QWORD *)(v17 + 1720);
}
v252 = v1779;
}
_InterlockedAnd8(&v260[v261], v258);
v256 = (_QWORD *)*v256;
++v257;
}
while( v256 != v255 );
LODWORD(v47) = v1570;
v245 = v1569;
v1568 = v257;
v251 = v1567;
}
v50 = 0;
if( v251 )
{
if( v251 == 1 )
{
v264 = *(_QWORD ***)(v17 + 1440);
for( i7 = *v264; i7 != v264; i7 = (_QWORD *)*i7 )
{
v252 = (unsigned __int64)(i7 - 3);
if( i7 - 3 != (_QWORD *)v245 )
{
v252 = *(_QWORD *)(v252 + *(_QWORD *)(v17 + 1848));
_InterlockedAnd8((volatile signed __int8 *)(v252 + *(_QWORD *)(v17 + 1720)), ~(_BYTE)v47);
}
}
}
else
{
_InterlockedAnd8((volatile signed __int8 *)(*(_QWORD *)(v17 + 1720) + v251), ~(_BYTE)v47);
}
}
(*(void(__fastcall **)(unsigned __int64, _QWORD, unsigned __int64))(v17 + 320))(v1572, 0i64, v252);
if( (_BYTE)v47 == 0x80 )
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
(*(void(**)(void))(v17 + 384))();
v179 = v1568 << 8;
goto LABEL_2414;
}
LABEL_2328:
v1411 = v79 - 2;
if( v1411 )
{
v1412 = v1411 - 1;
if( v1412 )
{
if( v1412 != 20 )
{
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = 257i64;
*(_QWORD *)(v17 + 2328) = 0i64;
LABEL_2327:
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_460;
}
(*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1745, *((unsigned int *)v56 + 10));
(*(void(__fastcall **)(char *, char *))(v17 + 464))(v1745, v1746);
v1413 = *(_QWORD *)(v17 + 2576);
if( v1413 )
{
v1414 = *(_DWORD *)(v1413 + 800);
v1413 = *(_QWORD *)(v17 + 2576);
}
else
{
v1415 = __readmsr(0x832u);
v1414 = v1415;
}
if( v1413 )
{
v1416 = *(_DWORD *)(v1413 + 832);
}
else
{
v1417 = __readmsr(0x834u);
v1416 = v1417;
}
(*(void(__fastcall **)(char *))(v17 + 408))(v1746);
if( (*(_BYTE *)(v17 + 2171) & 0x10) != 0 )
{
_disable();
v1418 = *(_QWORD *)(v17 + 2272);
v1419 = 38i64;
v1420 = 304;
v1421 = (_QWORD *)v1418;
LODWORD(v47) = 1;
do
{
*v1421 = 0i64;
v1420 -= 8;
++v1421;
--v1419;
}
while( v1419 );
for( ; v1420; --v1420 )
{
*(_BYTE *)v1421 = 0;
v1421 = (_QWORD *)((char *)v1421 + 1);
}
*(_OWORD *)(v1418 + 16) = *(_OWORD *)(v17 + 2120);
*(_OWORD *)(v1418 + 32) = *(_OWORD *)(v17 + 2136);
*(_OWORD *)(v1418 + 288) = *(_OWORD *)(v17 + 2152);
v1652[0] = 303;
*(_QWORD *)&v1652[1] = v1418;
*(_WORD *)(v1418 + 16) = v17 + 2168;
v1722 = v17 + 2168;
*(_WORD *)(v1418 + 22) = (unsigned int)(v17 + 2168) >> 16;
*(_DWORD *)(v1418 + 24) = (unsigned __int64)(v17 + 2168) >> 32;
__sidt(v1677);
__lidt(v1652);
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
CurrentPrcb = KeGetCurrentPrcb();
**(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
**(_QWORD **)(v17 + 1224) = CurrentPrcb;
**(_QWORD **)(v17 + 1232) = 0i64;
**(_QWORD **)(v17 + 1240) = 277i64;
}
KiErrata361Present();
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
**(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
**(_QWORD **)(v17 + 1224) = 0i64;
**(_QWORD **)(v17 + 1232) = 0i64;
**(_QWORD **)(v17 + 1240) = 0i64;
}
__lidt(v1677);
_enable();
}
else
{
LODWORD(v47) = 1;
}
v1423 = *((unsigned int *)v56 + 6);
if( (v1414 & *((_DWORD *)v56 + 7)) != (_DWORD)v1423
|| (v1414 & 0x10000) == 0 && (_BYTE)v1414 != 0xD1 && (unsigned __int8)(v1414 + 3) > 1u )
{
v1424 = v1423 | ((unsigned __int64)*((unsigned int *)v56 + 10) << 48) | 0x32000000000i64;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1423 ^ v1414;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1424;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
v1425 = *((unsigned int *)v56 + 8);
if( (v1416 & *((_DWORD *)v56 + 9)) != (_DWORD)v1425
|| (v1416 & 0x10000) == 0 && (_BYTE)v1416 != 0xD1 && (unsigned __int8)(v1416 + 3) > 1u )
{
v1426 = v1425 | ((unsigned __int64)*((unsigned int *)v56 + 10) << 48) | 0x34000000000i64;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1425 ^ v1416;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1426;
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_2411;
}
}
}
goto LABEL_2413;
}
(*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1747, *((unsigned int *)v56 + 10));
(*(void(__fastcall **)(char *, char *))(v17 + 464))(v1747, v1748);
KiGetGdtIdt(&v1638, v1764);
v1427 = v1639;
v1428 = *((unsigned int *)v56 + 4);
if( (*(_BYTE *)(v17 + 2171) & 2) != 0 )
{
v1429 = *(_QWORD *)(v17 + 2272);
v1430 = 38i64;
v1431 = 304;
v1432 = (_QWORD *)v1429;
do
{
*v1432 = 0i64;
v1431 -= 8;
++v1432;
--v1430;
}
while( v1430 );
for( ; v1431; --v1431 )
{
*(_BYTE *)v1432 = 0;
v1432 = (_QWORD *)((char *)v1432 + 1);
}
*(_OWORD *)(v1429 + 16) = *(_OWORD *)(v17 + 2120);
*(_OWORD *)(v1429 + 32) = *(_OWORD *)(v17 + 2136);
*(_OWORD *)(v1429 + 288) = *(_OWORD *)(v17 + 2152);
v1653[0] = 303;
*(_QWORD *)&v1653[1] = v1429;
*(_WORD *)(v1429 + 16) = v17 + 2168;
v1743 = v17 + 2168;
*(_WORD *)(v1429 + 22) = (unsigned int)(v17 + 2168) >> 16;
*(_DWORD *)(v1429 + 24) = (unsigned __int64)(v17 + 2168) >> 32;
_disable();
__sidt(v1678);
__lidt(v1653);
__writedr(7u, 0i64);
*(_WORD *)(v1429 + 16) = v17 + 2174;
*(_WORD *)(v1429 + 22) = (unsigned int)(v17 + 2174) >> 16;
*(_DWORD *)(v1429 + 24) = (unsigned __int64)(v17 + 2174) >> 32;
if( (*(_BYTE *)(v17 + 2171) & 0x20) != 0 )
{
*(_WORD *)(v17 + 2218) = KiGetSs();
__writedr(0, v17 + 2218);
__writedr(7u, 0x70001ui64);
LODWORD(v1434) = KiErrataSkx55Present(v17 + 2218);
*(_QWORD *)(v17 + 2280) = v1434;
__writedr(7u, 0i64);
__writedr(0, 0i64);
}
else
{
LODWORD(v1433) = KiErrata704Present();
*(_QWORD *)(v17 + 2280) = v1433;
}
*(_DWORD *)(v17 + 2288) = KeGetPcr()->Prcb.Number;
__lidt(v1678);
_enable();
}
Ldtr = KiGetLdtr();
Tr = KiGetTr();
*(_DWORD *)(v17 + 2088) += v1428;
v1437 = v1427 + v1428;
v1438 = *(unsigned int *)(v17 + 2068);
v1439 = Tr;
v1440 = *(_QWORD *)(v17 + 2072);
v1441 = (_QWORD *)v1427;
v1799 = Tr;
v1442 = (char *)v1427;
if( v1427 < (unsigned __int64)(v1427 + v1428) )
{
do
{
_mm_prefetchnta(v1442);
v1442 += 64;
}
while( (unsigned __int64)v1442 < v1437 );
}
v1443 = *(_QWORD *)(v17 + 2072);
v1444 = (unsigned int)v1428 >> 7;
if( (unsigned int)v1428 >> 7 )
{
do
{
v1445 = 8i64;
do
{
v1446 = v1443 ^ *v1441;
v1447 = v1441[1];
v1441 += 2;
v1443 = __ROL8__(__ROL8__(v1446, v1438) ^ v1447, v1438);
--v1445;
}
while( v1445 );
v1448 = __ROL8__(v1440 ^ ((unsigned __int64)v1441 - v1427), 17) ^ v1440 ^ ((unsigned __int64)v1441
- v1427);
v1437 = (v1448 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1724 = v1437;
v1438 = ((unsigned __int8)v1437 ^ (unsigned __int8)(v1448 ^ v1438)) & 0x3F;
if( !(_DWORD)v1438 )
v1438 = 1i64;
--v1444;
}
while( v1444 );
v17 = (__int64)v1566;
v1439 = v1799;
}
v1449 = v1428 & 0x7F;
if( v1449 >= 8 )
{
v1437 = (unsigned __int64)v1449 >> 3;
do
{
v1443 = __ROL8__(*v1441++ ^ v1443, v1438);
v1449 -= 8;
--v1437;
}
while( v1437 );
}
LODWORD(v47) = 0;
if( v1449 )
{
do
{
v1450 = *(unsigned __int8 *)v1441;
v1441 = (_QWORD *)((char *)v1441 + 1);
v1443 = __ROL8__(v1450 ^ v1443, v1438);
--v1449;
}
while( v1449 );
v17 = (__int64)v1566;
}
for( i8 = v1443; ; LODWORD(v1443) = i8 ^ v1443 )
{
i8 >>= 31;
if( !i8 )
break;
}
v1452 = v1443 & 0x7FFFFFFF;
(*(void(__fastcall **)(char *, unsigned __int64, _QWORD *, __int64))(v17 + 408))(
v1748,
v1437,
v1441,
v1438);
if( v1452 == *((_DWORD *)v56 + 5) && v1638 == *((_WORD *)v56 + 22) && !Ldtr && v1439 == 64 )
{
v50 = 0;
goto LABEL_2413;
}
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v1453 = *(_QWORD **)(v17 + 2688);
v1454 = 48;
v1455 = 6i64;
do
{
v1454 -= 8;
*v1453 = *(_QWORD *)v56;
v56 += 8;
++v1453;
--v1455;
}
while( v1455 );
if( v1454 )
{
do
{
v1456 = *v56++;
*(_BYTE *)v1453 = v1456;
v1453 = (_QWORD *)((char *)v1453 + 1);
--v1454;
}
while( v1454 );
v17 = (__int64)v1566;
}
v56 = *(char **)(v17 + 2688);
}
*((_QWORD *)v56 + 3) = v1639;
*((_QWORD *)v56 + 4) = v1452;
if( Ldtr )
{
v1457 = Ldtr;
goto LABEL_2406;
}
if( v1439 != 64 )
{
v1457 = v1439;
LABEL_2406:
*((_QWORD *)v56 + 3) = v1457;
}
v1458 = *(_DWORD *)(v17 + 2296);
v50 = 0;
if( !v1458 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1452 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
v1458 = *(_DWORD *)(v17 + 2296);
}
v1459 = *((_QWORD *)v56 + 1);
if( !v1458 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1459;
*(_DWORD *)(v17 + 2296) = 1;
LABEL_2411:
__b8(v17, 0i64);
}
LABEL_2413:
v179 = 0x8000;
goto LABEL_2414;
}
v1460 = *((unsigned int *)v56 + 10);
v1461 = *(void(__fastcall **)(char *, __int64))(v17 + 416);
LODWORD(v1577) = 0;
v1461(v1749, v1460);
(*(void(__fastcall **)(char *, char *))(v17 + 464))(v1749, v1750);
KiGetGdtIdt(v1763, &v1654);
v1462 = 0;
v1581 = v1655;
v1463 = v1655 + 4;
v1567 = v1655 + 4;
v1568 = 0;
while( 2 )
{
v1464 = 0i64;
v1606 = *(_QWORD *)(v17 + 2248);
v1465 = 0i64;
v1466 = *(_QWORD *)(v17 + 2256);
v1467 = *(unsigned int *)(v17 + 2224);
v1570 = 0i64;
v1468 = *(unsigned int *)(v17 + 2220);
v1569 = 0i64;
v1469 = KeGetCurrentIrql();
__writecr8(0xFui64);
v1470 = *(_WORD *)v1463;
LOWORD(v1600) = *(_WORD *)(v1463 - 4);
WORD1(v1600) = *(_WORD *)(v1463 + 2);
v1471 = *(_DWORD *)(v1463 + 4);
v1472 = *(_QWORD *)(v17 + 1560);
HIDWORD(v1600) = v1471;
v1473 = v1600;
v1800 = v1470;
v1474 = v1472 + 8i64 * v1462;
if( v1600 == v1474 )
{
if( (v1470 & 0x6000) != 0 )
{
__writecr8(v1469);
goto LABEL_2423;
}
v1465 = *(_QWORD *)(*(__int64(__fastcall **)(_QWORD, __int64, _QWORD))(v17 + 1136))(v1462, v1474, 0i64);
if( v1465 )
{
v1475 = *(_QWORD *)(v1468 + v1465);
v1570 = v1475;
if( v1568 < 0x30 )
{
__writecr8(v1469);
LABEL_2422:
v1464 = v1570;
LABEL_2423:
v1476 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v1476 = v1473;
*(_DWORD *)(v1476 + 16) = 128;
if( v1464 )
{
v1477 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v1477 + 8) = v1464;
*(_DWORD *)(v1477 + 20) = 128;
}
LODWORD(v1577) = 1;
goto LABEL_2442;
}
v1478 = *(_QWORD *)(v1467 + v1465);
LABEL_2430:
__writecr8(v1469);
if( !v1465 )
{
if( v1473 < v1606 )
goto LABEL_2422;
if( v1473 > v1466 )
goto LABEL_2422;
v1479 = (*(__int64(__fastcall **)(_QWORD, unsigned __int64, _QWORD))(v17 + 528))(
*(_QWORD *)(v17 + 2264),
v1606,
(unsigned int)(v1600 - v1606));
if( !v1479 || (*(_DWORD *)(v1479 + 36) & 0x2000000) != 0 )
goto LABEL_2422;
}
if( *(_WORD *)(v1567 - 2) != 16 || (*(_WORD *)v1567 & 0x1F00) != 3584 || *(__int16 *)v1567 >= 0 )
goto LABEL_2422;
v1480 = (unsigned int *)(*(__int64(__fastcall **)(unsigned __int64, unsigned __int64 *, _QWORD))(v17 + 608))(
v1473,
&v1606,
0i64);
if( v1480 && v1606 + *v1480 == v1473 && v1606 == *(_QWORD *)(v17 + 2248) )
{
if( !v1465 )
goto LABEL_2442;
}
else if( !v1465 )
{
goto LABEL_2422;
}
if( (v1800 & 0x6000) != 0 )
goto LABEL_2422;
if( v1465 != -1 )
{
v1500 = (unsigned int *)(*(__int64(__fastcall **)(__int64, unsigned __int64 *, _QWORD))(v17 + 608))(
v1475,
&v1606,
0i64);
if( !v1500 )
goto LABEL_2422;
if( v1606 + *v1500 != v1475 )
goto LABEL_2422;
if( v1606 != *(_QWORD *)(v17 + 2248) )
goto LABEL_2422;
v1501 = (*(__int64(__fastcall **)(_QWORD, unsigned __int64, _QWORD))(v17 + 528))(
*(_QWORD *)(v17 + 2264),
v1606,
(unsigned int)(v1475 - v1606));
if( !v1501
|| (*(_DWORD *)(v1501 + 36) & 0x2000000) != 0
|| v1568 == 254 && v1478 != *(_QWORD *)(v17 + 2232) )
{
goto LABEL_2422;
}
}
LABEL_2442:
v1462 = v1568 + 1;
v1463 = v1567 + 16;
v1568 = v1462;
v1567 += 16i64;
if( v1462 > 0xFF )
{
if( (*(_BYTE *)(v17 + 2171) & 1) != 0 )
{
_disable();
v1481 = 3221225602i64;
v1482 = __readmsr(0xC0000082);
v1483 = (unsigned __int64)(v17 + 2170) >> 32;
__writemsr(0xC0000082, v17 + 2170);
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
v1484 = KeGetCurrentPrcb();
v1483 = v17 - 0x5C5FC0A76E374B18i64;
**(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
**(_QWORD **)(v17 + 1224) = v1484;
**(_QWORD **)(v17 + 1232) = 3221225602i64;
v1481 = *(_QWORD *)(v17 + 1240);
*(_QWORD *)v1481 = 274i64;
}
((void(__fastcall *)(__int64, unsigned __int64))(v17 + 2172))(v1481, v1483);
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
**(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
**(_QWORD **)(v17 + 1224) = 0i64;
**(_QWORD **)(v17 + 1232) = 0i64;
**(_QWORD **)(v17 + 1240) = 0i64;
}
__writemsr(0xC0000082, v1482);
_enable();
}
v47 = v1581;
*(_DWORD *)(v17 + 2088) += 848;
v1485 = (_QWORD *)v47;
v1486 = *(_DWORD *)(v17 + 2088);
v1487 = (char *)v47;
v1488 = *(_DWORD *)(v17 + 2068);
v1489 = *(_QWORD *)(v17 + 2072);
if( v47 < v47 + 848 )
{
do
{
_mm_prefetchnta(v1487);
v1487 += 64;
}
while( (unsigned __int64)v1487 < v47 + 848 );
}
v1490 = *(_QWORD *)(v17 + 2072);
v1491 = 6;
do
{
v1492 = 8i64;
do
{
v1493 = v1485[1] ^ __ROL8__(*v1485 ^ v1490, v1488);
v1485 += 2;
v1490 = __ROL8__(v1493, v1488);
--v1492;
}
while( v1492 );
v1494 = (__ROL8__(v1489 ^ ((unsigned __int64)v1485 - v47), 17) ^ v1489 ^ ((unsigned __int64)v1485
- v47))
* (unsigned __int128)0x7010008004002001ui64;
v1725 = *((_QWORD *)&v1494 + 1);
v1488 = (BYTE8(v1494) ^ (unsigned __int8)(v1494 ^ v1488)) & 0x3F;
if( !v1488 )
LOBYTE(v1488) = 1;
--v1491;
}
while( v1491 );
v17 = (__int64)v1566;
v1495 = 80;
v1496 = (int)v1577;
v1497 = 10i64;
do
{
v1490 = __ROL8__(*v1485++ ^ v1490, v1488);
v1495 -= 8;
--v1497;
}
while( v1497 );
for( ; v1495; --v1495 )
{
v1498 = *(unsigned __int8 *)v1485;
v1485 = (_QWORD *)((char *)v1485 + 1);
v1490 = __ROL8__(v1498 ^ v1490, v1488);
}
for( i9 = v1490; ; LODWORD(v1490) = i9 ^ v1490 )
{
i9 >>= 31;
if( !i9 )
break;
}
v1502 = v1490 & 0x7FFFFFFF;
*((_DWORD *)v1566 + 522) = v1486 + 16;
v1503 = (_QWORD *)(v47 + 3600);
v1504 = *(_DWORD *)(v17 + 2068);
v1505 = *(_QWORD *)(v17 + 2072);
v1506 = (char *)(v47 + 3600);
if( v47 + 3600 < v47 + 3616 )
{
do
{
_mm_prefetchnta(v1506);
v1506 += 64;
}
while( (unsigned __int64)v1506 < v47 + 3616 );
}
v1507 = 16;
v1508 = 2i64;
do
{
v1505 = __ROL8__(*v1503++ ^ v1505, v1504);
v1507 -= 8;
--v1508;
}
while( v1508 );
for( ; v1507; --v1507 )
{
v1509 = *(unsigned __int8 *)v1503;
v1503 = (_QWORD *)((char *)v1503 + 1);
v1505 = __ROL8__(v1509 ^ v1505, v1504);
}
for( i10 = v1505; ; LODWORD(v1505) = i10 ^ v1505 )
{
i10 >>= 31;
if( !i10 )
break;
}
v1511 = v1505 & 0x7FFFFFFF;
(*(void(__fastcall **)(char *, _QWORD *))(v17 + 408))(v1750, v1503);
v1512 = (int *)v1565;
v1513 = *((unsigned int *)v1565 + 5);
if( v1502 == (_DWORD)v1513
&& v1511 == *((_QWORD *)v1565 + 3)
&& v1654 == *((_WORD *)v1565 + 22)
&& !v1496 )
{
v50 = 0;
}
else
{
if( v1496 )
{
v50 = 0;
}
else
{
v50 = 0;
if( v1511 == *((_QWORD *)v1565 + 3) )
{
if( !*(_DWORD *)(v17 + 2296) )
{
v1514 = v1513 ^ v1502;
goto LABEL_2492;
}
}
else if( !*(_DWORD *)(v17 + 2296) )
{
v1514 = v1511 ^ (unsigned __int64)*((unsigned int *)v1565 + 6);
LABEL_2492:
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1514;
}
}
v1515 = *((_QWORD *)v1512 + 1);
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v1512 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v1512;
*(_QWORD *)(v17 + 2328) = v1515;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
*(_DWORD *)(v17 + 2088) += 0x10000;
goto LABEL_238;
}
continue;
}
v1465 = -1i64;
v1478 = 0i64;
}
else
{
v1478 = v1569;
}
break;
}
v1475 = v1570;
goto LABEL_2430;
}
v280 = *(_QWORD ***)(v17 + 1328);
v281 = *(__int64(**)(void))(v17 + 888);
v1567 = (__int64)v280;
v1781 = 0;
v1578 = (char *)v281();
_disable();
v282 = *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608));
_enable();
(*(void(__fastcall **)(__int64))(v17 + 360))(v282);
LOBYTE(v283) = 1;
(*(void(__fastcall **)(_QWORD, __int64))(v17 + 240))(*(_QWORD *)(v17 + 1336), v283);
v284 = 0;
v285 = **(unsigned int ***)(v17 + 1552);
v286 = *v285;
v1569 = (__int64)(v285 + 4);
v1572 = (unsigned __int64)&v285[6 * v286 + 4];
if( *((_BYTE *)v285 + 12) )
{
v287 = *v280;
LODWORD(v286) = 0;
while( v287 != v280 )
{
v287 = (_QWORD *)*v287;
LODWORD(v286) = v286 + 1;
}
}
LODWORD(v47) = 8 * v286;
v288 = __rdtsc();
v289 = __ROR8__(v288, 3);
v1737 = ((v289 ^ v288) * (unsigned __int128)0x7010008004002001ui64) >> 64;
v290 = ((unsigned __int16)(8193 * (v289 ^ v288)) ^ (unsigned __int16)v1737) & 0x7FF;
v291 = __rdtsc();
v292 = (__ROR8__(v291, 3) ^ v291) * (unsigned __int128)0x7010008004002001ui64;
v293 = *(unsigned int *)(v17 + 2064);
v1738 = *((_QWORD *)&v292 + 1);
v294 = (*((_QWORD *)&v292 + 1) ^ (unsigned __int64)v292) % (unsigned int)(v290 + 1);
v295 = (*(__int64(__fastcall **)(__int64, _QWORD, __int64))(v17 + 248))(
512i64,
(unsigned int)(v290 + 8 * v286),
v293);
v296 = v295;
if( !v295 )
{
++*(_DWORD *)(v17 + 2584);
goto LABEL_544;
}
v297 = v294;
v298 = (_QWORD *)v295;
if( (unsigned int)v294 >= 8 )
{
v299 = (unsigned __int64)(unsigned int)v294 >> 3;
do
{
v300 = __rdtsc();
v297 -= 8;
v301 = (__ROR8__(v300, 3) ^ v300) * (unsigned __int128)0x7010008004002001ui64;
v1739 = *((_QWORD *)&v301 + 1);
*v298++ = v301 ^ *((_QWORD *)&v301 + 1);
--v299;
}
while( v299 );
v17 = (__int64)v1566;
v280 = (_QWORD **)v1567;
}
if( v297 )
{
v302 = __rdtsc();
v303 = (__ROR8__(v302, 3) ^ v302) * (unsigned __int128)0x7010008004002001ui64;
v1754 = *((_QWORD *)&v303 + 1);
v304 = v303 ^ *((_QWORD *)&v303 + 1);
do
{
*(_BYTE *)v298 = v304;
v298 = (_QWORD *)((char *)v298 + 1);
v304 >>= 8;
--v297;
}
while( v297 );
}
v305 = v290 - v294;
v306 = (_QWORD *)(v296 + (unsigned int)v294 + (unsigned __int64)(unsigned int)v47);
if( v305 >= 8 )
{
v298 = (_QWORD *)((unsigned __int64)v305 >> 3);
do
{
v307 = __rdtsc();
v305 -= 8;
v308 = (__ROR8__(v307, 3) ^ v307) * (unsigned __int128)0x7010008004002001ui64;
v1759 = *((_QWORD *)&v308 + 1);
*v306++ = v308 ^ *((_QWORD *)&v308 + 1);
v298 = (_QWORD *)((char *)v298 - 1);
}
while( v298 );
}
if( v305 )
{
v309 = __rdtsc();
v310 = (__ROR8__(v309, 3) ^ v309) * (unsigned __int128)0x7010008004002001ui64;
v1760 = *((_QWORD *)&v310 + 1);
v311 = v310 ^ *((_QWORD *)&v310 + 1);
do
{
*(_BYTE *)v306 = v311;
v306 = (_QWORD *)((char *)v306 + 1);
v311 >>= 8;
--v305;
}
while( v305 );
}
v47 = (unsigned int)v294 + v296;
v1633 = v296;
if( v47 )
{
v312 = *v280;
while( v312 != v280 )
{
v313 = *(_QWORD *)((char *)v312 + *(_QWORD *)(v17 + 1872) - *(_QWORD *)(v17 + 1864));
if( !(*(unsigned int(__fastcall **)(__int64))(v17 + 680))(v313) && v284 < (unsigned int)v286 )
{
v314 = v284++;
*(_QWORD *)(v47 + 8 * v314) = v313;
}
v312 = (_QWORD *)*v312;
++v1781;
}
(*(void(__fastcall **)(unsigned __int64, _QWORD, _QWORD *, _QWORD *))(v17 + 920))(v47, v284, v306, v298);
v315 = v1569;
v316 = v1572;
do
{
v317 = *(_QWORD *)(v315 + 8);
if( !(*(unsigned int(__fastcall **)(unsigned __int64))(v17 + 680))(v317) )
{
v318 = v284 - 1;
v319 = 0;
if( (int)(v284 - 1) < 0 )
goto LABEL_561;
do
{
v320 = (v318 + v319) >> 1;
if( v317 >= *(_QWORD *)(v47 + 8i64 * v320) )
{
if( v317 <= *(_QWORD *)(v47 + 8i64 * v320) )
break;
v319 = v320 + 1;
}
else
{
if( !v320 )
goto LABEL_561;
v318 = v320 - 1;
}
}
while( v318 >= v319 );
if( v318 < v319 )
{
LABEL_561:
if( !*(_DWORD *)(v17 + 2296) )
{
v321 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v321 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v321;
*(_QWORD *)(v17 + 2328) = v317;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
v315 += 24i64;
}
while( v315 < v316 );
v50 = 0;
}
else
{
LABEL_544:
v50 = 0;
v1633 = 0i64;
}
(*(void(__fastcall **)(_QWORD))(v17 + 280))(*(_QWORD *)(v17 + 1336));
(*(void(**)(void))(v17 + 368))();
(*(void(__fastcall **)(char *))(v17 + 896))(v1578);
if( !v1633 )
goto LABEL_238;
*(_DWORD *)(v17 + 2088) += v1781 << 9;
v169 = *(void(**)(void))(v17 + 256);
LABEL_342:
v169();
goto LABEL_238;
}
LODWORD(v47) = 0x40000000;
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 && (*(_DWORD *)(v17 + 2452) & 0x1000) == 0 )
{
v322 = __rdtsc();
v323 = (__ROR8__(v322, 3) ^ v322) * (unsigned __int128)0x7010008004002001ui64;
v1761 = *((_QWORD *)&v323 + 1);
*(_DWORD *)(v17 + 2084) = ((unsigned __int64)v323 ^ *((_QWORD *)&v323 + 1)) % 5;
}
while( 2 )
{
v324 = *(_DWORD *)(v17 + 2084);
if( !v324 )
{
v664 = v56;
v1641 = 0i64;
for( i11 = 0; ; ++i11 )
{
v671 = (*(__int64(__fastcall **)(__int64 *))(v17 + 768))(&v1641);
if( !v671 )
break;
if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v671, v1699) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v665 = *(_QWORD **)(v17 + 2688);
v666 = 48;
v667 = 6i64;
do
{
v666 -= 8;
*v665 = *(_QWORD *)v664;
v664 += 8;
++v665;
--v667;
}
while( v667 );
if( v666 )
{
do
{
v668 = *v664++;
*(_BYTE *)v665 = v668;
v665 = (_QWORD *)((char *)v665 + 1);
--v666;
}
while( v666 );
v17 = (__int64)v1566;
}
v664 = *(char **)(v17 + 2688);
}
*((_QWORD *)v664 + 3) = v671;
v669 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v669 = v664;
*(_DWORD *)(v669 + 16) = 48;
v670 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v670 + 8) = v671;
*(_DWORD *)(v670 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v664 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v664;
*(_QWORD *)(v17 + 2328) = 3i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
goto LABEL_1087;
}
v325 = v324 - 1;
if( !v325 )
{
v656 = v56;
v1640 = 0i64;
i11 = 0;
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(0xCui64);
for( i12 = (*(__int64(__fastcall **)(__int64 *))(v17 + 776))(&v1640);
i12;
i12 = (*(__int64(__fastcall **)(__int64 *))(v17 + 776))(&v1640) )
{
++i11;
if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(i12, v1698) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v658 = *(_QWORD **)(v17 + 2688);
v659 = 48;
v660 = 6i64;
do
{
v659 -= 8;
*v658 = *(_QWORD *)v656;
v656 += 8;
++v658;
--v660;
}
while( v660 );
if( v659 )
{
do
{
v661 = *v656++;
*(_BYTE *)v658 = v661;
v658 = (_QWORD *)((char *)v658 + 1);
--v659;
}
while( v659 );
v17 = (__int64)v1566;
}
v656 = *(char **)(v17 + 2688);
}
*((_QWORD *)v656 + 3) = i12;
v662 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v662 = v656;
*(_DWORD *)(v662 + 16) = 48;
v663 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v663 + 8) = i12;
*(_DWORD *)(v663 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v656 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v656;
*(_QWORD *)(v17 + 2328) = 4i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
__writecr8((unsigned __int8)v47);
goto LABEL_1087;
}
v326 = v325 - 1;
if( !v326 )
{
v644 = v56;
v645 = 0i64;
i11 = 0;
do
{
v1605 = 0;
while( 1 )
{
do
{
if( !(*(unsigned int(__fastcall **)(_QWORD, int *, __int64 *))(v17 + 760))(v50, &v1605, &v1634) )
goto LABEL_1060;
v648 = (*(__int64(__fastcall **)(__int64, __int64, __int64, _QWORD))(v17 + 728))(
v1634,
v646,
v647,
0i64);
}
while( !v648 );
++i11;
v47 = (*(__int64(__fastcall **)(__int64))(v17 + 736))(v648);
if( !(*(__int64(__fastcall **)(unsigned __int64, char *))(v17 + 520))(v47, v1697) )
break;
(*(void(__fastcall **)(__int64, __int64, __int64, _QWORD))(v17 + 744))(v1634, v648, v649, 0i64);
}
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v650 = *(_QWORD **)(v17 + 2688);
v651 = 48;
v652 = 6i64;
do
{
v651 -= 8;
*v650 = *(_QWORD *)v644;
v644 += 8;
++v650;
--v652;
}
while( v652 );
if( v651 )
{
do
{
v653 = *v644++;
*(_BYTE *)v650 = v653;
v650 = (_QWORD *)((char *)v650 + 1);
--v651;
}
while( v651 );
v17 = (__int64)v1566;
}
v644 = *(char **)(v17 + 2688);
}
*((_QWORD *)v644 + 3) = v47;
v654 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v654 = v644;
*(_DWORD *)(v654 + 16) = 48;
v655 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v655 + 8) = v47;
*(_DWORD *)(v655 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v644 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v644;
*(_QWORD *)(v17 + 2328) = v645;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
LABEL_1060:
++v50;
++v645;
}
while( v50 < 3 );
goto LABEL_1087;
}
v327 = v326 - 1;
if( v327 )
{
v328 = v327 - 1;
if( v328 )
{
if( v328 != 1 )
{
*(_DWORD *)(v17 + 2084) = 0;
LABEL_1090:
v1566 = (_BYTE *)v17;
goto LABEL_238;
}
v329 = v56;
v1801 = -1;
i11 = 0;
v331 = 0;
v47 = 0i64;
do
{
v1644 = 0i64;
while( (*(unsigned int(__fastcall **)(_QWORD, __int64 *, char *, __int64 *))(v17 + 1072))(
v331,
&v1644,
&v1801,
&v1613) )
{
++i11;
if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v1613, v1688) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v332 = *(_QWORD **)(v17 + 2688);
v333 = 48;
v334 = 6i64;
do
{
v333 -= 8;
*v332 = *(_QWORD *)v329;
v329 += 8;
++v332;
--v334;
}
while( v334 );
if( v333 )
{
do
{
v335 = *v329++;
*(_BYTE *)v332 = v335;
v332 = (_QWORD *)((char *)v332 + 1);
--v333;
}
while( v333 );
v17 = (__int64)v1566;
}
v329 = *(char **)(v17 + 2688);
}
*((_QWORD *)v329 + 3) = v1613;
v336 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v336 = v329;
*(_DWORD *)(v336 + 16) = 48;
v337 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v337 + 8) = v1613;
*(_DWORD *)(v337 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v329 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v329;
*(_QWORD *)(v17 + 2328) = v47;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
++v331;
++v47;
}
while( v331 < 3 );
}
else
{
v338 = *(__int64(__fastcall **)(_QWORD))(v17 + 792);
i11 = 0;
v1585 = 0;
v47 = v338(0i64);
if( v47 )
{
v339 = (__int64)v1565;
do
{
v1645 = 0i64;
v340 = (char *)v339;
v341 = 1;
v342 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1645);
if( v342 )
{
do
{
++v341;
if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v342, v1689) )
{
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v343 = *(_QWORD **)(v17 + 2688);
v344 = 48;
v345 = 6i64;
do
{
v344 -= 8;
*v343 = *(_QWORD *)v340;
v340 += 8;
++v343;
--v345;
}
while( v345 );
if( v344 )
{
do
{
v346 = *v340++;
*(_BYTE *)v343 = v346;
v343 = (_QWORD *)((char *)v343 + 1);
--v344;
}
while( v344 );
v17 = (__int64)v1566;
}
v340 = *(char **)(v17 + 2688);
}
*((_QWORD *)v340 + 3) = v342;
*((_QWORD *)v340 + 4) = v47;
v347 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v347 = v340;
*(_DWORD *)(v347 + 16) = 48;
v348 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v348 + 8) = v342;
*(_DWORD *)(v348 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v340 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v340;
*(_QWORD *)(v17 + 2328) = 6i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v342 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1645);
}
while( v342 );
i11 = v1585;
v339 = (__int64)v1565;
}
v349 = *(__int64(__fastcall **)(unsigned __int64))(v17 + 792);
i11 += v341;
v1585 = i11;
v47 = v349(v47);
}
while( v47 );
}
}
goto LABEL_1087;
}
v350 = (_BYTE *)v17;
v351 = *(__int64 **)(v17 + 1264);
i11 = 0;
v1595 = (_BYTE *)v17;
v352 = *v351;
v1586 = *v351;
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
goto LABEL_1087;
v353 = (int *)v1565;
v354 = *((_QWORD *)v1565 + 5);
if( v354 )
{
i11 = 1;
if( v352 != v354 )
{
*((_QWORD *)v1565 + 3) = v352;
v355 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)v355 = v353;
*(_DWORD *)(v355 + 16) = 48;
v356 = *(_QWORD *)(v17 + 1424);
*(_QWORD *)(v356 + 8) = v352;
*(_DWORD *)(v356 + 20) = 4096;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v353 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v353;
*(_QWORD *)(v17 + 2328) = 5i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
goto LABEL_1087;
}
if( !v352 )
{
LABEL_1087:
v50 = 0;
*(_DWORD *)(v17 + 2088) += i11 << 12;
++*(_DWORD *)(v17 + 2084);
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
goto LABEL_1090;
v56 = v1565;
LODWORD(v47) = 0x40000000;
continue;
}
break;
}
v357 = *(__int64(__fastcall **)(__int64, char *))(v17 + 512);
v1585 = 1;
v1589 = (_BYTE *)v17;
v358 = (unsigned int *)v357(v352, v1756);
v359 = v1757;
v360 = v1758;
v361 = (signed __int64)v358;
v1571 = (signed __int64)v358;
v1782 = v1758;
v1579 = v1758;
BugCheckParameter2 = v1757;
if( !v1757 )
{
v362 = -1073741701;
goto LABEL_1040;
}
v363 = 4;
v1611 = 0i64;
v364 = &v1612;
v365 = 0xFFFFFFFFi64;
v366 = 1i64;
do
{
*(_BYTE *)v364 = 0;
v364 = (int *)((char *)v364 + 1);
--v363;
}
while( v363 );
LODWORD(v47) = 0;
if( *(_DWORD *)(v17 + 2060) )
{
LODWORD(v366) = v1612;
LODWORD(v365) = HIDWORD(v1611);
v367 = v1611;
while( 1 )
{
v368 = 0;
v369 = v17;
if( *(_QWORD *)(v17 + 2680) )
v369 = *(_QWORD *)(v17 + 2680);
v1567 = v369;
v370 = (int *)(v369 + *(unsigned int *)(v369 + 2056));
if( v367 && (unsigned int)v365 <= (unsigned int)v47 )
{
v368 = v365;
v370 = (int *)(v369 + (unsigned int)v366);
}
if( v368 != (_DWORD)v47 )
break;
LABEL_649:
LODWORD(v1611) = 1;
v366 = (unsigned int)((_DWORD)v370 - v369);
HIDWORD(v1611) = v368;
v1612 = (_DWORD)v370 - v369;
v367 = 1;
v378 = *v370;
v365 = v368;
if( (unsigned int)v378 <= 0x2B )
{
v379 = 0x80000001002i64;
if( _bittest64(&v379, v378) )
{
if( *((_QWORD *)v370 + 1) == v361 && v370[4] == v360 )
goto LABEL_659;
}
}
if( (unsigned int)(v378 - 33) <= 1 && *((char **)v370 + 4) == v359 )
goto LABEL_659;
LODWORD(v47) = v47 + 1;
if( (unsigned int)v47 >= *(_DWORD *)(v17 + 2060) )
goto LABEL_658;
}
v371 = (unsigned int)v47 - v368;
v368 = v47;
while( 2 )
{
v372 = *v370;
if( *v370 > 12 )
{
if( v372 == 28 )
{
v377 = *((unsigned __int16 *)v370 + 20);
goto LABEL_646;
}
if( v372 == 30 )
{
v376 = (((v370[9] != 0 ? v370[9] - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
+ 24 * (*((unsigned __int16 *)v370 + 20) + 2);
goto LABEL_647;
}
if( v372 <= 32 )
goto LABEL_643;
if( v372 <= 34 )
{
v376 = 20 * (unsigned int)(((v370[8] & 0xFFF) + (unsigned __int64)(unsigned int)v370[10] + 4095) >> 12)
+ 48;
goto LABEL_647;
}
if( v372 != 43 )
goto LABEL_643;
}
else if( v372 != 12 )
{
v373 = v372 - 1;
if( v373 )
{
v374 = v373 - 6;
if( !v374 )
{
v376 = (unsigned int)(24 * (v370[6] + 2));
goto LABEL_647;
}
v375 = v374 - 1;
if( v375 )
{
if( v375 == 2 )
{
v376 = (unsigned int)(16 * (v370[7] + 3));
goto LABEL_647;
}
LABEL_643:
v376 = 48i64;
LABEL_647:
v370 = (int *)((char *)v370 + v376);
if( !--v371 )
{
v17 = (__int64)v1566;
LODWORD(v369) = v1567;
v360 = v1782;
v359 = (char *)BugCheckParameter2;
v361 = v1571;
goto LABEL_649;
}
continue;
}
v377 = *((unsigned __int16 *)v370 + 16);
LABEL_646:
v376 = (v377 + 55) & 0xFFFFFFF8;
goto LABEL_647;
}
}
break;
}
v376 = 4 * (v370[4] / 0xCu) + 48;
goto LABEL_647;
}
LABEL_658:
v370 = 0i64;
LABEL_659:
v352 = v1586;
v1598 = v370;
if( v370 )
{
v362 = -1073741554;
goto LABEL_1040;
}
v380 = (*(__int64(__fastcall **)(__int64, __int64, _QWORD, __int64))(v17 + 680))(v1586, v366, 0i64, v365);
v72 = (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0;
LODWORD(v47) = v380;
v1576 = v380;
LODWORD(v1570) = v1579;
if( !v72 )
{
v382 = sub_140A1BFE4((__int64)&v1595, v359, 9);
v350 = v1595;
v362 = v382;
LABEL_1040:
v1566 = v350;
v642 = &v350[-v17];
v17 = (__int64)v350;
v643 = &v1565[(_QWORD)v642];
v1565 = &v1565[(_QWORD)v642];
if( (int)(v362 + 0x80000000) < 0 || v362 == -1073741554 )
*((_QWORD *)v643 + 5) = v352;
i11 = v1585;
goto LABEL_1087;
}
v383 = *(__int64(__fastcall **)(char *, __int64, _QWORD, unsigned int *))(v17 + 496);
v1675 = 0i64;
v1637[4] = 0;
LOBYTE(v381) = 1;
v1672 = v383(v359, v381, 0i64, &v1579);
v384 = v1672 != 0 ? v1579 : 0;
v1579 = v384;
v385 = *(__int64(__fastcall **)(char *, __int64, __int64, unsigned int *))(v17 + 496);
v1637[1] = v384;
LOBYTE(v384) = 1;
v386 = v385(v359, v384, 12i64, &v1579);
v387 = v386;
v1572 = v386;
v1673 = v386;
LOBYTE(v387) = 1;
v1579 &= -(v386 != 0);
v388 = *(__int64(__fastcall **)(char *, __int64, __int64, unsigned int *))(v17 + 496);
v1580 = v1579;
v1637[2] = v1579;
v1674 = v388(v359, v387, 10i64, &v1579);
v1579 &= -(v1674 != 0);
v389 = *(__int64(__fastcall **)(char *))(v17 + 504);
v1637[3] = v1579;
v390 = v389(v359);
if( !v390 )
goto LABEL_664;
v391 = (*(__int64(__fastcall **)(char *, int *))(v17 + 1176))(v359, &v1662);
v392 = *(_DWORD *)(v17 + 2340);
v1676 = v391;
v1637[5] = v1662;
v1637[0] = *(_DWORD *)(v390 + 84);
LODWORD(v391) = v47;
v47 = *(unsigned int *)(v17 + 2020);
v1671 = v359;
v393 = (_DWORD)v391 != 0 ? 0xB : 0;
v394 = v47 + 288;
v1783 = v393;
if( (unsigned int)(v47 + 288) <= *(_DWORD *)(v17 + 2588) )
{
v395 = v17;
v1567 = v17;
*(_DWORD *)(v17 + 2020) = v394;
}
else
{
v1567 = sub_140A0EB30((_DWORD *)v17, v394, v392);
v395 = v1567;
if( !v1567 )
{
v1589 = 0i64;
LABEL_683:
v362 = -1073741670;
goto LABEL_1039;
}
v396 = *(_DWORD *)(v17 + 2448);
if( (v396 & 4) == 0 )
{
v397 = *(_DWORD *)(v17 + 2020);
v398 = *(_QWORD *)(v17 + 1992);
v399 = (_QWORD *)v17;
v400 = (v396 & 0x20000000) != 0 ? *(_DWORD *)(v17 + 2340) : 0;
if( v397 >= 8 )
{
v401 = (unsigned __int64)v397 >> 3;
do
{
*v399 = 0i64;
v397 -= 8;
++v399;
--v401;
}
while( v401 );
}
for( ; v397; --v397 )
{
*(_BYTE *)v399 = 0;
v399 = (_QWORD *)((char *)v399 + 1);
}
v402 = *(_DWORD *)(v395 + 2340);
*(_DWORD *)(v395 + 2340) = v400;
if( v400 == 3 )
{
(*(void(__fastcall **)(__int64))(v395 + 872))(v398);
}
else
{
v403 = 0;
if( (*(_DWORD *)(v395 + 2448) & 0x10000000) == 0 )
v403 = v400;
if( v403 )
(*(void(__fastcall **)(__int64, _QWORD))(v395 + 552))(v398 - 8, *(_QWORD *)(v398 - 8));
else(*(void(__fastcall **)(__int64))(v395 + 256))(v398);
}
*(_DWORD *)(v395 + 2340) = v402;
}
*(_DWORD *)(v395 + 2448) &= ~4u;
v393 = v1783;
}
v404 = v395 + v47;
*(_DWORD *)(v395 + 2060) += 6;
v405 = (__int64 *)&v1671;
v1648 = v395 + v47;
v1598 = (_DWORD *)(v395 + v47);
v406 = (unsigned int *)v1637;
v1569 = 6i64;
do
{
v407 = *v406;
v408 = 48;
v409 = (_QWORD *)*v405;
v410 = 6i64;
v1568 = *v406;
v411 = (_QWORD *)v404;
do
{
*v411 = 0i64;
v408 -= 8;
++v411;
--v410;
}
while( v410 );
for( ; v408; --v408 )
{
*(_BYTE *)v411 = 0;
v411 = (_QWORD *)((char *)v411 + 1);
}
*(_DWORD *)v404 = v393;
*(_QWORD *)(v404 + 8) = v409;
v412 = v409;
*(_DWORD *)(v404 + 16) = v407;
v413 = (char *)v409;
*(_DWORD *)(v395 + 2088) += v407;
v414 = *(_DWORD *)(v395 + 2068);
v415 = *(_QWORD *)(v395 + 2072);
if( v409 < (_QWORD *)((char *)v409 + v407) )
{
do
{
_mm_prefetchnta(v413);
v413 += 64;
}
while( v413 < (char *)v409 + v407 );
}
v416 = *(_QWORD *)(v395 + 2072);
v417 = (unsigned int)v407 >> 7;
if( (unsigned int)v407 >> 7 )
{
do
{
v418 = 8i64;
do
{
v419 = v416 ^ *v412;
v420 = v412[1];
v412 += 2;
v416 = __ROL8__(__ROL8__(v419, v414) ^ v420, v414);
--v418;
}
while( v418 );
v421 = __ROL8__(v415 ^ ((char *)v412 - (char *)v409), 17);
v1690 = ((v421 ^ v415 ^ (unsigned __int64)((char *)v412 - (char *)v409))
* (unsigned __int128)0x7010008004002001ui64) >> 64;
v414 = ((unsigned __int8)(v421 ^ v415 ^ ((_BYTE)v412 - (_BYTE)v409) ^ v1690) ^ (unsigned __int8)v414) & 0x3F;
if( !v414 )
LOBYTE(v414) = 1;
--v417;
}
while( v417 );
v395 = v1567;
LODWORD(v407) = v1568;
}
v422 = v407 & 0x7F;
if( v422 >= 8 )
{
v423 = (unsigned __int64)(v407 & 0x7F) >> 3;
do
{
v416 = __ROL8__(*v412++ ^ v416, v414);
v422 -= 8;
--v423;
}
while( v423 );
}
if( v422 )
{
do
{
v416 = __ROL8__(*(unsigned __int8 *)v412 ^ v416, v414);
v412 = (_QWORD *)((char *)v412 + 1);
--v422;
}
while( v422 );
v395 = v1567;
}
for( i13 = v416; ; LODWORD(v416) = i13 ^ v416 )
{
i13 >>= 31;
if( !i13 )
break;
}
v393 = v1783;
*(_DWORD *)(v404 + 20) = v416 & 0x7FFFFFFF;
++v406;
*(_DWORD *)(v395 + 2088) += v407;
++v405;
v404 = v1648 + 48;
v72 = v1569-- == 1;
v1648 += 48i64;
}
while( !v72 );
v425 = v1598;
v47 = (unsigned __int64)BugCheckParameter2;
v17 = (__int64)v1566;
v426 = v1576;
*v1598 = 44;
*((_QWORD *)v425 + 3) = v47;
if( (*(_DWORD *)(v395 + 2448) & 0x10200000) != 0 )
{
LABEL_714:
if( !v426 )
goto LABEL_716;
}
else if( !v426 )
{
if( (*(_DWORD *)(v395 + 2452) & 0x8000) != 0 )
{
v425[8] |= 1u;
if( (unsigned int)sub_140A0FC50(v395, v47) )
{
v425[8] |= 4u;
goto LABEL_714;
}
}
LABEL_716:
v350 = (_BYTE *)v395;
v1589 = (_BYTE *)v395;
v1595 = (_BYTE *)v395;
v362 = sub_140A0E098((__int64)&v1589, (unsigned int *)v1571, v1570, v47, v426, 9, (int *)&v1609, &v1631);
if( v362 < 0 )
goto LABEL_1039;
v350 = v1589;
v427 = v1631 - v1609;
v1598 = &v1589[(_QWORD)v1598 - v395];
v428 = (_QWORD *)(v47 + v1609);
v1595 = v1589;
v429 = v1598 + 48;
v430 = 48;
v431 = v1598 + 48;
v432 = 6i64;
do
{
*v431 = 0i64;
v430 -= 8;
++v431;
--v432;
}
while( v432 );
for( ; v430; --v430 )
{
*(_BYTE *)v431 = 0;
v431 = (_QWORD *)((char *)v431 + 1);
}
v433 = v428;
*v429 = v1783;
v434 = (char *)v428;
*((_QWORD *)v429 + 1) = v428;
v429[4] = v427;
*((_DWORD *)v350 + 522) += v427;
v435 = *((_DWORD *)v350 + 517);
v436 = *((_QWORD *)v350 + 259);
v437 = (unsigned __int64)v428 + v427;
if( (unsigned __int64)v428 < v437 )
{
do
{
_mm_prefetchnta(v434);
v434 += 64;
}
while( (unsigned __int64)v434 < v437 );
}
v438 = *((_QWORD *)v350 + 259);
v439 = v427 >> 7;
if( v427 >> 7 )
{
do
{
v440 = 8i64;
do
{
v441 = v433[1] ^ __ROL8__(*v433 ^ v438, v435);
v433 += 2;
v438 = __ROL8__(v441, v435);
--v440;
}
while( v440 );
v442 = (__ROL8__(v436 ^ ((char *)v433 - (char *)v428), 17) ^ v436 ^ (unsigned __int64)((char *)v433
- (char *)v428))
* (unsigned __int128)0x7010008004002001ui64;
v1691 = *((_QWORD *)&v442 + 1);
v435 = ((unsigned __int8)(v442 ^ BYTE8(v442)) ^ (unsigned __int8)v435) & 0x3F;
if( !v435 )
LOBYTE(v435) = 1;
--v439;
}
while( v439 );
v17 = (__int64)v1566;
v426 = v1576;
}
v443 = v427 & 0x7F;
if( (unsigned int)v443 >= 8 )
{
v444 = (unsigned __int64)(unsigned int)v443 >> 3;
do
{
v438 = __ROL8__(*v433++ ^ v438, v435);
v443 = (unsigned int)(v443 - 8);
--v444;
}
while( v444 );
}
if( (_DWORD)v443 )
{
do
{
v445 = *(unsigned __int8 *)v433;
v433 = (_QWORD *)((char *)v433 + 1);
v438 = __ROL8__(v445 ^ v438, v435);
v443 = (unsigned int)(v443 - 1);
}
while( (_DWORD)v443 );
v17 = (__int64)v1566;
}
for( i14 = v438; ; v438 = (unsigned int)i14 ^ (unsigned int)v438 )
{
i14 >>= 31;
if( !i14 )
break;
}
LODWORD(v438) = v438 & 0x7FFFFFFF;
v429[5] = v438;
v447 = v1598;
v1598[60] = 48;
if( v447[64] )
{
v438 = 4294967294i64;
v447[66] = v447[66] & 0xFFFFFFFE | (v426 != 0);
}
v1595 = v350;
v1615 = v1598 + 24;
LODWORD(v47) = (v426 != 0) + 13;
if( v1598 == (_DWORD *)-96i64 )
{
v448 = *((unsigned int *)v350 + 505);
v449 = v448 + 48;
if( (unsigned int)(v448 + 48) <= *((_DWORD *)v350 + 647) )
{
v450 = (__int64)v350;
*((_DWORD *)v350 + 505) = v449;
}
else
{
v450 = sub_140A0EB30(v350, v449, *((_DWORD *)v350 + 585));
if( !v450 )
{
v1589 = 0i64;
goto LABEL_683;
}
v451 = *((_DWORD *)v350 + 612);
if( (v451 & 4) == 0 )
{
v452 = *((_DWORD *)v350 + 505);
v453 = *((_QWORD *)v350 + 249);
v454 = (v451 & 0x20000000) != 0 ? *((_DWORD *)v350 + 585) : 0;
if( v452 >= 8 )
{
v455 = (unsigned __int64)v452 >> 3;
do
{
*(_QWORD *)v350 = 0i64;
v452 -= 8;
v350 += 8;
--v455;
}
while( v455 );
}
for( ; v452; --v452 )
*v350++ = 0;
v456 = *(_DWORD *)(v450 + 2340);
*(_DWORD *)(v450 + 2340) = v454;
if( v454 == 3 )
{
(*(void(__fastcall **)(__int64, __int64))(v450 + 872))(v453, 1i64);
}
else
{
v457 = 0;
if( (*(_DWORD *)(v450 + 2448) & 0x10000000) == 0 )
v457 = v454;
if( v457 )
(*(void(__fastcall **)(__int64, _QWORD))(v450 + 552))(v453 - 8, *(_QWORD *)(v453 - 8));
else(*(void(__fastcall **)(__int64, __int64))(v450 + 256))(v453, 1i64);
}
*(_DWORD *)(v450 + 2340) = v456;
}
*(_DWORD *)(v450 + 2448) &= ~4u;
}
++*(_DWORD *)(v450 + 2060);
v458 = v450 + v448;
v1663 = (_DWORD *)v458;
v459 = (_QWORD *)v458;
v460 = 48;
v461 = 6i64;
do
{
*v459 = 0i64;
v460 -= 8;
++v459;
--v461;
}
while( v461 );
for( ; v460; --v460 )
{
*(_BYTE *)v459 = 0;
v459 = (_QWORD *)((char *)v459 + 1);
}
v462 = v1572;
*(_DWORD *)v458 = v47;
v443 = v462;
v47 = v1580;
*(_QWORD *)(v458 + 8) = v462;
*(_DWORD *)(v458 + 16) = v47;
*(_DWORD *)(v450 + 2088) += v47;
v463 = *(_DWORD *)(v450 + 2068);
v464 = *(_QWORD *)(v450 + 2072);
if( v462 < v462 + v47 )
{
v465 = (char *)v462;
do
{
_mm_prefetchnta(v465);
v465 += 64;
}
while( (unsigned __int64)v465 < v462 + v47 );
}
v438 = *(_QWORD *)(v450 + 2072);
v466 = (unsigned int)v47 >> 7;
if( (unsigned int)v47 >> 7 )
{
do
{
v467 = 8i64;
do
{
v468 = v438 ^ *(_QWORD *)v443;
v469 = *(_QWORD *)(v443 + 8);
v443 += 16i64;
v438 = __ROL8__(__ROL8__(v468, v463) ^ v469, v463);
--v467;
}
while( v467 );
v470 = __ROL8__(v464 ^ (v443 - v462), 17) ^ v464 ^ (v443 - v462);
v1692 = (v470 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v463 = ((unsigned __int8)(v470 ^ v1692) ^ (unsigned __int8)v463) & 0x3F;
if( !v463 )
LOBYTE(v463) = 1;
--v466;
}
while( v466 );
v17 = (__int64)v1566;
v426 = v1576;
}
v471 = v47 & 0x7F;
if( v471 >= 8 )
{
v472 = (v47 & 0x7F) >> 3;
do
{
v438 = __ROL8__(*(_QWORD *)v443 ^ v438, v463);
v443 += 8i64;
v471 -= 8;
--v472;
}
while( v472 );
}
if( v471 )
{
do
{
v473 = *(unsigned __int8 *)v443++;
v438 = __ROL8__(v473 ^ v438, v463);
--v471;
}
while( v471 );
v17 = (__int64)v1566;
}
for( i15 = v438; ; v438 = (unsigned int)i15 ^ (unsigned int)v438 )
{
i15 >>= 31;
if( !i15 )
break;
}
LODWORD(v438) = v438 & 0x7FFFFFFF;
v350 = (_BYTE *)v450;
*(_DWORD *)(v458 + 20) = v438;
v1615 = v1663;
*(_DWORD *)(v450 + 2088) += v47;
}
else
{
v462 = v1572;
v1598[24] = v47;
LODWORD(v47) = v1580;
}
if( (*((_DWORD *)v350 + 612) & 0x40000000) != 0 && (_DWORD)v47 )
sub_1403E92DC((__int64)v350, v462, v47, (__int64)(v1615 + 7));
v1595 = v350;
v475 = 4294967294i64;
v1615[6] = 0;
v1615[6] |= 1u;
v476 = v1598;
v1598[36] = 35;
v476[46] = v476[46] & 0xFFFFFFFE | (v426 != 0);
if( v476[40] >= 0x94u )
{
v477 = (char *)BugCheckParameter2;
v47 = *((_QWORD *)v476 + 19);
v478 = (*((__int64(__fastcall **)(PVOID, __int64, __int64, unsigned __int64))v350 + 63))(
BugCheckParameter2,
4294967294i64,
v438,
v443);
if( !v478 )
{
v1589 = 0i64;
goto LABEL_683;
}
v479 = *(unsigned int *)(v478 + 80);
v476[46] |= 2u;
v480 = &v477[v479];
v481 = *(char **)(v47 + 112);
if( v481 >= v477 && v481 < v480 )
{
*((_QWORD *)v476 + 21) = *(_QWORD *)v481;
v476[46] |= 4u;
}
v482 = *(char **)(v47 + 120);
if( v482 >= v477 && v482 < v480 )
{
*((_QWORD *)v476 + 22) = *(_QWORD *)v482;
v476[46] |= 8u;
}
}
v72 = (*((_DWORD *)v350 + 612) & 0x400000) == 0;
v1589 = v350;
if( v72 )
goto LABEL_1038;
v483 = BugCheckParameter2;
v484 = (char *)(*((__int64(__fastcall **)(PVOID, __int64, __int64, unsigned __int64))v350 + 63))(
BugCheckParameter2,
v475,
v438,
v443);
v1578 = v484;
LODWORD(v47) = (_DWORD)v484;
if( !v484 )
goto LABEL_664;
v485 = *((_WORD *)v484 + 3);
v1784 = v485;
v1572 = (unsigned int)v1570 / 0xCui64;
if( !v485 )
{
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1627 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, 0i64, 0i64);
}
if( !*((_DWORD *)v350 + 574) )
{
*((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v350 + 289) = 0i64;
*((_QWORD *)v350 + 290) = 271i64;
*((_QWORD *)v350 + 291) = v483;
*((_DWORD *)v350 + 574) = 1;
goto LABEL_804;
}
goto LABEL_664;
}
v486 = 0;
v487 = v485;
v488 = (unsigned int *)v1571;
LODWORD(v1577) = 0;
v1568 = v485;
v1581 = 12i64 * ((unsigned int)v1570 / 0xC);
v1588 = v1571 + v1581;
v489 = (__int64)&v484[*((unsigned __int16 *)v484 + 10) + 24];
v1569 = v489;
v490 = (_DWORD *)v489;
v1567 = v489;
v491 = 1i64;
do
{
v492 = v490[4];
v493 = (unsigned int)v490[3];
if( v492 <= v490[2] )
v492 = v490[2];
v1580 = v490[3];
v494 = v493 + v492;
if( v486 )
{
if( v494 < *(_DWORD *)(v489 + 40i64 * (v486 - 1) + 12) )
{
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1626 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)1, 0i64);
}
if( !*((_DWORD *)v350 + 574) )
{
*((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v350 + 289) = 0i64;
*((_QWORD *)v350 + 290) = 271i64;
*((_QWORD *)v350 + 291) = v483;
*((_DWORD *)v350 + 574) = 1;
goto LABEL_804;
}
LABEL_664:
v362 = -1073741701;
goto LABEL_1039;
}
v486 = (unsigned int)v1577;
}
if( v488 != (unsigned int *)v1588 )
{
do
{
v495 = v488[1];
if( *v488 >= v494 || v495 <= (unsigned int)v493 )
break;
if( *v488 < (unsigned int)v493 || v495 > v494 )
{
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1623 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)2, 0i64);
}
LABEL_842:
if( !*((_DWORD *)v350 + 574) )
{
*((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v350 + 289) = 0i64;
*((_QWORD *)v350 + 290) = 271i64;
*((_QWORD *)v350 + 291) = v483;
*((_DWORD *)v350 + 574) = 1;
LABEL_804:
__b8((__int64)v350, 0i64);
}
goto LABEL_664;
}
v496 = v488[2];
v1693 = v488;
if( (v496 & 1) != 0 || (*((_BYTE *)v483 + v496) & 0x20) != 0 )
{
v497 = v490[4];
v498 = v490[3];
if( v497 <= v490[2] )
v497 = v490[2];
LODWORD(v47) = v498 + v497;
v499 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, PVOID, __int64, __int64))v350 + 131))(
v488,
v483,
v493,
v491);
v500 = v499;
if( *v499 < v498 || v499[1] > (unsigned int)v47 )
{
v501 = BugCheckParameter2;
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1624 = -805294751;
KeBugCheckEx(
__ROR4__(-805306349, 92),
(PVOID)0xA,
BugCheckParameter2,
(PVOID)(((_DWORD)v499 - (_DWORD)BugCheckParameter2) | 0x80000000),
0i64);
}
if( !*((_DWORD *)v350 + 574) )
{
*((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v350 + 289) = 0i64;
*((_QWORD *)v350 + 290) = 271i64;
*((_QWORD *)v350 + 291) = v501;
*((_DWORD *)v350 + 574) = 1;
__b8((__int64)v350, 0i64);
}
}
v502 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, PVOID, char *))v350 + 132))(
v500,
BugCheckParameter2,
(char *)BugCheckParameter2 + *v500);
if( *v502 >= v498 && v502[1] <= (unsigned int)v47 )
{
v483 = BugCheckParameter2;
}
else
{
v483 = BugCheckParameter2;
v503 = ((_DWORD)v502 - (_DWORD)BugCheckParameter2) | 0x80000000;
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1625 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, BugCheckParameter2, (PVOID)v503, 0i64);
}
if( !*((_DWORD *)v350 + 574) )
{
*((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
*((_QWORD *)v350 + 289) = 0i64;
*((_QWORD *)v350 + 290) = 271i64;
*((_QWORD *)v350 + 291) = v483;
*((_DWORD *)v350 + 574) = 1;
__b8((__int64)v350, 0i64);
}
}
v490 = (_DWORD *)v1567;
v493 = v1580;
}
v488 += 3;
}
while( v488 != (unsigned int *)v1588 );
v486 = (unsigned int)v1577;
v491 = 1i64;
v487 = v1568;
v489 = v1569;
}
++v486;
v490 += 10;
LODWORD(v1577) = v486;
v1567 = (__int64)v490;
}
while( v486 < v487 );
v504 = v1572;
v47 = (unsigned __int64)v1578;
v505 = v1581;
if( v488 != (unsigned int *)v1588 )
{
if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
{
v1622 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)3, 0i64);
}
goto LABEL_842;
}
if( (_DWORD)v1572 )
v506 = (v1572 + 6) & 0xFFFFFFF8;
else
v506 = 0;
v507 = *((unsigned int *)v350 + 505);
v508 = v507 + v506 + 24 * (v487 + 2);
if( v508 <= *((_DWORD *)v350 + 647) )
{
v509 = (__int64)v350;
v1577 = v350;
*((_DWORD *)v350 + 505) = v508;
goto LABEL_865;
}
v1577 = (_BYTE *)sub_140A0EB30(v350, v508, *((_DWORD *)v350 + 585));
v509 = (__int64)v1577;
if( !v1577 )
goto LABEL_683;
v510 = *((_DWORD *)v350 + 612);
if( (v510 & 4) == 0 )
{
v511 = *((_DWORD *)v350 + 505);
v512 = *((_QWORD *)v350 + 249);
v513 = (v510 & 0x20000000) != 0 ? *((_DWORD *)v350 + 585) : 0;
if( v511 >= 8 )
{
v514 = (unsigned __int64)v511 >> 3;
do
{
*(_QWORD *)v350 = 0i64;
v511 -= 8;
v350 += 8;
--v514;
}
while( v514 );
}
for( ; v511; --v511 )
*v350++ = 0;
v515 = *(_DWORD *)(v509 + 2340);
*(_DWORD *)(v509 + 2340) = v513;
if( v513 == 3 )
{
(*(void(__fastcall **)(__int64, __int64))(v509 + 872))(v512, 1i64);
}
else
{
v516 = 0;
if( (*(_DWORD *)(v509 + 2448) & 0x10000000) == 0 )
v516 = v513;
if( v516 )
(*(void(__fastcall **)(__int64, _QWORD))(v509 + 552))(v512 - 8, *(_QWORD *)(v512 - 8));
else(*(void(__fastcall **)(__int64, __int64))(v509 + 256))(v512, 1i64);
}
*(_DWORD *)(v509 + 2340) = v515;
}
*(_DWORD *)(v509 + 2448) &= ~4u;
v504 = v1572;
v487 = v1568;
LABEL_865:
v517 = v509 + v507;
++*(_DWORD *)(v509 + 2060);
v1656 = v509 + v507;
v518 = 48;
v519 = (_QWORD *)(v509 + v507);
v520 = 6i64;
do
{
*v519 = 0i64;
v518 -= 8;
++v519;
--v520;
}
while( v520 );
for( ; v518; --v518 )
{
*(_BYTE *)v519 = 0;
v519 = (_QWORD *)((char *)v519 + 1);
}
v521 = v1571;
*(_DWORD *)v517 = 30;
*(_QWORD *)(v517 + 8) = v521;
*(_DWORD *)(v517 + 16) = 0;
v522 = *(_QWORD *)(v509 + 2072);
for( i16 = v522; ; LODWORD(v522) = i16 ^ v522 )
{
i16 >>= 31;
if( !i16 )
break;
}
*(_DWORD *)(v517 + 20) = v522 & 0x7FFFFFFF;
v350 = (_BYTE *)v509;
v1608 = v1656;
v1589 = (_BYTE *)v509;
*(_QWORD *)(v1656 + 24) = BugCheckParameter2;
*(_DWORD *)(v1608 + 32) = *(_DWORD *)(v47 + 80);
*(_DWORD *)(v1608 + 36) = v1570;
*(_WORD *)(v1608 + 40) = v1784;
v524 = 0;
*(_WORD *)(v1608 + 42) = *(_WORD *)(v1608 + 42) & 0xFFFE | (v1576 != 0);
v1578 = (char *)(v1608 + 48);
if( v504 )
v47 = v1608 + 48 + (((unsigned int)(v504 - 1) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64);
else
v47 = v1608 + 48;
v525 = *(unsigned __int16 *)(v1608 + 40);
v72 = v504 == 0;
v526 = (unsigned int *)v1571;
v1572 = v47;
v527 = v47 + 24 * v525;
v528 = 12i64;
if( v72 )
v528 = v505;
v1581 = v47 + 24 * v525;
v1567 = v1571 + v528;
if( v487 )
{
v529 = v487;
v530 = (_DWORD *)(v47 + 8);
do
{
v531 = 2i64;
do
{
*(v530 - 2) = 0;
*(v530 - 1) = 0;
*v530 = 0x80000000;
v530 += 3;
--v531;
}
while( v531 );
--v529;
}
while( v529 );
v17 = (__int64)v1566;
}
if( v47 != v527 )
{
v532 = (unsigned __int8 *)v1569;
while( 1 )
{
v533 = 0;
if( (*((_DWORD *)v532 + 9) & 0x2000000) != 0
|| (v534 = *(_DWORD *)v532, *(_DWORD *)v532 == 1414090313) && *((_DWORD *)v532 + 1) == 1195525195
|| v534 == 1162297680 && ((v535 = *((_WORD *)v532 + 2), v535 == 30839) || v535 == 29303 || v535 == 30583)
|| v534 == 1095914053 && *((_WORD *)v532 + 2) == 16724 )
{
v533 = 1;
}
else
{
v536 = 7;
v537 = *(unsigned __int8 **)(v509 + 2352);
v538 = v532;
v1668 = *(__int64 **)(v509 + 2360);
v1669 = *(unsigned __int8 **)(v509 + 2368);
v1670 = *(unsigned __int8 **)(v509 + 2376);
v1667 = v537;
while( 1 )
{
v539 = *v538++;
v540 = *v537++;
if( v539 != v540 )
break;
if( !--v536 )
goto LABEL_912;
}
v541 = v1668;
v542 = 8;
v543 = (__int64 *)v532;
do
{
v544 = *v543++;
v545 = *v541++;
if( v544 != v545 )
goto LABEL_905;
v542 -= 8;
}
while( v542 >= 8 );
if( v542 )
{
while( 1 )
{
v546 = *(unsigned __int8 *)v543;
v543 = (__int64 *)((char *)v543 + 1);
v547 = *(unsigned __int8 *)v541;
v541 = (__int64 *)((char *)v541 + 1);
if( v546 != v547 )
break;
if( !--v542 )
goto LABEL_912;
}
LABEL_905:
v548 = v1669;
v549 = 4;
v550 = v532;
while( 1 )
{
v551 = *v550++;
v552 = *v548++;
if( v551 != v552 )
break;
if( !--v549 )
goto LABEL_912;
}
v553 = v1670;
v554 = 6;
v555 = v532;
while( 1 )
{
v556 = *v555++;
v557 = *v553++;
if( v556 != v557 )
break;
if( !--v554 )
goto LABEL_912;
}
}
else
{
LABEL_912:
v533 = 1;
}
v526 = (unsigned int *)v1571;
}
v558 = *((_DWORD *)v532 + 9);
if( v558 < 0 )
v533 = 1;
v1785 = v533;
if( v533 && *(_DWORD *)v532 == 1414090313 && *((_DWORD *)v532 + 1) == 1195525195 )
{
if( (*(_DWORD *)(v509 + 2452) & 0x2000) != 0 )
v533 = 0;
v1785 = v533;
}
v559 = (char *)BugCheckParameter2;
if( (*(_DWORD *)(v509 + 2452) & 0x4000) != 0
&& (v558 & 0x20000000) != 0
&& (BugCheckParameter2 == *(PVOID *)(v509 + 1512) || BugCheckParameter2 == *(PVOID *)(v509 + 1520)) )
{
v533 = 1;
v1785 = 1;
}
v560 = *((_DWORD *)v532 + 4);
v561 = *((_DWORD *)v532 + 3);
v562 = v1588;
if( v560 <= *((_DWORD *)v532 + 2) )
v560 = *((_DWORD *)v532 + 2);
v563 = v561 + v560;
v1568 = *((_DWORD *)v532 + 3);
v564 = 0;
v1576 = v563;
if( v526 == (unsigned int *)v1588 )
{
v565 = 0;
}
else
{
v524 = *v526;
v565 = v526[1];
}
v1580 = v565;
v566 = v561;
LODWORD(v1570) = v524;
if( v526 != (unsigned int *)v1588 && v524 > v561 && v565 <= v563 && !v533 )
{
*(_DWORD *)v47 = v561;
v567 = (__int64 *)&v1671;
*(_DWORD *)(v47 + 4) = v524;
v568 = *(unsigned int *)v47;
v566 = v524;
v569 = v524 - v568;
v570 = (unsigned __int64)&v559[v568];
v571 = &v559[v568 + v524 - (unsigned int)v568];
v572 = v1637;
do
{
if( v570 < *v567 + (unsigned __int64)(unsigned int)*v572 && (unsigned __int64)v571 > *v567 )
{
v563 = v1576;
v562 = v1588;
v526 = (unsigned int *)v1571;
goto LABEL_961;
}
++v564;
++v567;
++v572;
}
while( v564 < 6 );
v573 = (__int64)v1577;
v574 = (_QWORD *)v570;
*((_DWORD *)v1577 + 522) += v569;
v575 = *(_DWORD *)(v573 + 2068);
v576 = *(_QWORD *)(v573 + 2072);
v577 = (char *)v570;
if( v570 < (unsigned __int64)v571 )
{
do
{
_mm_prefetchnta(v577);
v577 += 64;
}
while( v577 < v571 );
}
v578 = v569 >> 7;
v579 = v576;
if( v569 >> 7 )
{
do
{
v580 = 8i64;
do
{
v581 = v574[1] ^ __ROL8__(*v574 ^ v579, v575);
v574 += 2;
v579 = __ROL8__(v581, v575);
--v580;
}
while( v580 );
v582 = (__ROL8__(v576 ^ ((unsigned __int64)v574 - v570), 17) ^ v576 ^ ((unsigned __int64)v574 - v570))
* (unsigned __int128)0x7010008004002001ui64;
v1694 = *((_QWORD *)&v582 + 1);
v575 = ((unsigned __int8)v582 ^ (unsigned __int8)(BYTE8(v582) ^ v575)) & 0x3F;
if( !v575 )
LOBYTE(v575) = 1;
--v578;
}
while( v578 );
v17 = (__int64)v1566;
v524 = v1570;
v565 = v1580;
}
v583 = v569 & 0x7F;
if( v583 >= 8 )
{
v584 = (unsigned __int64)v583 >> 3;
do
{
v579 = __ROL8__(*v574++ ^ v579, v575);
v583 -= 8;
--v584;
}
while( v584 );
}
if( v583 )
{
do
{
v585 = *(unsigned __int8 *)v574;
v574 = (_QWORD *)((char *)v574 + 1);
v579 = __ROL8__(v585 ^ v579, v575);
--v583;
}
while( v583 );
v17 = (__int64)v1566;
}
for( i17 = v579; ; LODWORD(v579) = i17 ^ v579 )
{
i17 >>= 31;
if( !i17 )
break;
}
v563 = v1576;
v561 = v1568;
v526 = (unsigned int *)v1571;
*(_DWORD *)(v1572 + 8) = v579 & 0x7FFFFFFF;
v562 = v1588;
}
LABEL_961:
if( v524 < v561 )
{
v588 = v1785;
}
else
{
v587 = v565 <= v563;
v588 = v1785;
if( v587 && v526 != (unsigned int *)v562 )
{
v589 = (unsigned int *)v1567;
LABEL_999:
v616 = v589[1];
while( v616 <= v563 && v589 != (unsigned int *)v562 )
{
if( v588 )
{
v590 = 0x80;
}
else
{
v591 = v526[1];
v566 = *v589;
v592 = (__int64)v1577;
if( *v589 < (unsigned int)v591 )
{
if( (*((_DWORD *)v1577 + 612) & 0x200000) == 0 )
{
v1630 = -805294751;
KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, BugCheckParameter2, (PVOID)6, 0i64);
}
if( !*((_DWORD *)v1577 + 574) )
{
v593 = (__int64)v1577;
*((_QWORD *)v1577 + 288) = v1577 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v592 + 2312) = 0i64;
v594 = BugCheckParameter2;
*(_QWORD *)(v592 + 2320) = 271i64;
*(_QWORD *)(v592 + 2328) = v594;
*(_DWORD *)(v592 + 2296) = 1;
__b8(v593, 0i64);
}
}
v595 = (__int64 *)&v1671;
v596 = v566 - v591;
v597 = (char *)BugCheckParameter2 + v591;
v598 = 0;
v599 = v1637;
v600 = (char *)BugCheckParameter2 + v591 + v566 - (unsigned int)v591;
do
{
if( (unsigned __int64)v597 < *v595 + (unsigned __int64)(unsigned int)*v599
&& (unsigned __int64)v600 > *v595 )
{
goto LABEL_996;
}
++v598;
++v595;
++v599;
}
while( v598 < 6 );
if( v596 < 4 )
{
LABEL_996:
v590 = 0x80;
}
else
{
*(_DWORD *)(v592 + 2088) += v596;
v601 = v597;
v602 = *(_DWORD *)(v592 + 2068);
v603 = *((_QWORD *)v1577 + 259);
for( i18 = v597; i18 < v600; i18 += 64 )
_mm_prefetchnta(i18);
v605 = *((_QWORD *)v1577 + 259);
v606 = v596 >> 7;
if( v596 >> 7 )
{
do
{
v607 = 8i64;
do
{
v608 = v605 ^ *v601;
v609 = v601[1];
v601 += 2;
v605 = __ROL8__(__ROL8__(v608, v602) ^ v609, v602);
--v607;
}
while( v607 );
v610 = __ROL8__(v603 ^ ((char *)v601 - v597), 17) ^ v603 ^ ((char *)v601 - v597);
v1695 = ((unsigned __int64)v610 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v602 = ((unsigned __int8)(v610 ^ v1695) ^ (unsigned __int8)v602) & 0x3F;
if( !v602 )
LOBYTE(v602) = 1;
--v606;
}
while( v606 );
v17 = (__int64)v1566;
v588 = v1785;
}
v611 = v596 & 0x7F;
if( v611 >= 8 )
{
v612 = (unsigned __int64)v611 >> 3;
do
{
v605 = __ROL8__(*v601++ ^ v605, v602);
v611 -= 8;
--v612;
}
while( v612 );
}
if( v611 )
{
do
{
v613 = *(unsigned __int8 *)v601;
v601 = (_QWORD *)((char *)v601 + 1);
v605 = __ROL8__(v613 ^ v605, v602);
--v611;
}
while( v611 );
v588 = v1785;
}
for( i19 = v605; ; LOBYTE(v605) = i19 ^ v605 )
{
i19 >>= 7;
if( !i19 )
break;
}
v590 = v605 & 0x7F;
}
v526 = (unsigned int *)v1571;
v563 = v1576;
}
v615 = v1578++;
*v615 = v590;
v526 += 3;
v589 = (unsigned int *)(v1567 + 12);
v1571 = (signed __int64)v526;
v562 = v1588;
v1567 = (__int64)v589;
if( v589 != (unsigned int *)v1588 )
goto LABEL_999;
}
}
}
v617 = v1572;
v524 = 0;
if( v588 || v566 == v563 )
goto LABEL_1029;
v618 = BugCheckParameter2;
v619 = v1637;
*(_DWORD *)(v1572 + 12) = v566;
v620 = (__int64 *)&v1671;
*(_DWORD *)(v617 + 16) = v563;
v621 = *(unsigned int *)(v617 + 12);
v622 = v563 - v621;
v623 = (unsigned __int64)v618 + v621;
v624 = 0;
v625 = v623 + v563 - (unsigned int)v621;
do
{
if( v623 < *v620 + (unsigned __int64)(unsigned int)*v619 && v625 > *v620 )
{
v526 = (unsigned int *)v1571;
LABEL_1029:
v509 = (__int64)v1577;
goto LABEL_1030;
}
++v624;
++v620;
++v619;
}
while( v624 < 6 );
v509 = (__int64)v1577;
v626 = (_QWORD *)v623;
v627 = (char *)v623;
*((_DWORD *)v1577 + 522) += v622;
v628 = *(_DWORD *)(v509 + 2068);
v629 = *(_QWORD *)(v509 + 2072);
if( v623 < v625 )
{
do
{
_mm_prefetchnta(v627);
v627 += 64;
}
while( (unsigned __int64)v627 < v625 );
}
v630 = *(_QWORD *)(v509 + 2072);
v631 = v622 >> 7;
if( v622 >> 7 )
{
do
{
v632 = 8i64;
do
{
v633 = v630 ^ *v626;
v634 = v626[1];
v626 += 2;
v630 = __ROL8__(__ROL8__(v633, v628) ^ v634, v628);
--v632;
}
while( v632 );
v635 = __ROL8__(v629 ^ ((unsigned __int64)v626 - v623), 17) ^ v629 ^ ((unsigned __int64)v626 - v623);
v1696 = (v635 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v628 = ((unsigned __int8)(v635 ^ v1696) ^ (unsigned __int8)v628) & 0x3F;
if( !v628 )
LOBYTE(v628) = 1;
--v631;
}
while( v631 );
v17 = (__int64)v1566;
}
v636 = v622 & 0x7F;
if( v636 >= 8 )
{
v637 = (unsigned __int64)v636 >> 3;
do
{
v630 = __ROL8__(*v626++ ^ v630, v628);
v636 -= 8;
--v637;
}
while( v637 );
}
if( v636 )
{
do
{
v638 = *(unsigned __int8 *)v626;
v626 = (_QWORD *)((char *)v626 + 1);
v630 = __ROL8__(v638 ^ v630, v628);
--v636;
}
while( v636 );
v17 = (__int64)v1566;
}
for( i20 = v630; ; LODWORD(v630) = i20 ^ v630 )
{
i20 >>= 31;
if( !i20 )
break;
}
v617 = v1572;
v526 = (unsigned int *)v1571;
*(_DWORD *)(v1572 + 20) = v630 & 0x7FFFFFFF;
LABEL_1030:
if( v526 != (unsigned int *)v1588 && *v526 >= v1568 && v526[1] <= v1576 )
{
v640 = v1567;
if( v1567 != v1588 )
{
v641 = v1578;
*v1578 = 0x80;
v1578 = v641 + 1;
v1567 = v640 + 12;
}
v526 += 3;
v1571 = (signed __int64)v526;
}
v47 = v617 + 24;
v532 = (unsigned __int8 *)(v1569 + 40);
v1572 = v47;
v1569 += 40i64;
if( v47 == v1581 )
{
v350 = v1589;
break;
}
}
}
LABEL_1038:
v1595 = v350;
v362 = 0;
LABEL_1039:
v352 = v1586;
goto LABEL_1040;
}
v425[8] |= 2u;
goto LABEL_716;
}
switch( v79 )
{
case 12:
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1736;
v1267 = *(_DWORD *)(v17 + 2452);
LOBYTE(v1268) = v1267;
if( *(_DWORD *)(v17 + 2084) )
{
if( (((unsigned __int8)v1267 ^ (unsigned __int8)(v1267 >> 3)) & 4) != 0 )
goto LABEL_1736;
}
else
{
v1268 = v1267 ^ ((unsigned __int8)v1267 ^ (unsigned __int8)(8 * v1267)) & 0x20;
*(_DWORD *)(v17 + 2452) = v1268;
}
if( (v1268 & 4) != 0 )
{
v47 = *((_QWORD *)v56 + 4);
if( v47 )
{
v1269 = *(unsigned int *)(v17 + 2084);
v1270 = ((((_WORD)v47 + (_WORD)v1269) & 0xFFF)
+ (unsigned __int64)(unsigned int)(*((_DWORD *)v56 + 10) - v1269)
+ 4095) >> 12;
v1271 = v47 + v1269;
}
else
{
v1271 = *((_QWORD *)v56 + 1);
v1270 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
}
v1272 = v1271 & 0xFFFFFFFFFFFFF000ui64;
while( v1270 )
{
--v1270;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1272) && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1272;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
*(_DWORD *)(v17 + 2088) += 256;
v1272 += 4096i64;
if( v47 )
{
*(_DWORD *)(v17 + 2084) += 4096;
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
break;
}
}
if( v47 && !v1270 )
*(_DWORD *)(v17 + 2084) = 0;
if( *(_DWORD *)(v17 + 2084) )
goto LABEL_238;
v1273 = *(_QWORD *)(v17 + 1344);
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64))(v17 + 336))(v1273);
v1275 = **(unsigned int ***)(v17 + 1552);
v1276 = v1275 + 4;
v1277 = *((_BYTE *)v1275 + 12);
v1278 = (unsigned __int64)&v1275[6 * *v1275 + 4];
do
{
v1279 = 24i64;
v1280 = (__int64 *)(v56 + 24);
v1281 = v1276;
do
{
v1282 = *(_QWORD *)v1281;
v1281 += 2;
v1283 = *v1280++;
if( v1282 != v1283 )
goto LABEL_2123;
v1279 = (unsigned int)(v1279 - 8);
}
while( (unsigned int)v1279 >= 8 );
if( !(_DWORD)v1279 )
break;
while( 1 )
{
v1274 = *(unsigned __int8 *)v1281;
v1281 = (unsigned int *)((char *)v1281 + 1);
v1284 = *(unsigned __int8 *)v1280;
v1280 = (__int64 *)((char *)v1280 + 1);
if( v1274 != v1284 )
break;
v72 = (_DWORD)v1279 == 1;
v1279 = (unsigned int)(v1279 - 1);
if( v72 )
goto LABEL_2124;
}
LABEL_2123:
v1276 += 6;
}
while( (unsigned __int64)v1276 < v1278 );
LABEL_2124:
v17 = (__int64)v1566;
(*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
*((_QWORD *)v1566 + 168),
v1274,
v1279,
v1280);
__writecr8((unsigned __int8)v47);
if( v1277 )
{
v50 = 0;
if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = 1i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( *((_QWORD *)v56 + 3) == 1i64 )
goto LABEL_238;
}
if( v1276 == (unsigned int *)v1278 )
{
v50 = 0;
if( *(_DWORD *)(v17 + 2296) )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1276;
*(_DWORD *)(v17 + 2296) = 1;
goto LABEL_460;
}
LABEL_237:
v50 = 0;
goto LABEL_238;
}
LABEL_2132:
if( !*(_DWORD *)(v17 + 2084) )
{
if( v79 == 12 )
{
if( !*(_QWORD *)(v17 + 2432) )
{
*(_DWORD *)(v17 + 2084) = 0;
goto LABEL_2175;
}
v1285 = *(_DWORD *)(v17 + 2452) ^ ((unsigned __int8)*(_DWORD *)(v17 + 2452) ^ (unsigned __int8)(8 * *(_DWORD *)(v17 + 2452))) & 0x20;
*(_DWORD *)(v17 + 2452) = v1285;
if( (v1285 & 4) != 0 )
{
v1286 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
v1287 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
if( !v1287 )
goto LABEL_2175;
LODWORD(v47) = 1;
do
{
--v1287;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1286)
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1286;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
*(_DWORD *)(v17 + 2088) += 256;
v1286 += 4096i64;
}
while( v1287 );
LABEL_2174:
v79 = v1773;
goto LABEL_2175;
}
v1288 = (_QWORD *)*((_QWORD *)v56 + 1);
v1289 = *((unsigned int *)v56 + 4);
v1290 = v1288;
*(_DWORD *)(v17 + 2088) += v1289;
v1291 = (char *)v1288;
v1292 = *(_DWORD *)(v17 + 2068);
v1293 = *(_QWORD *)(v17 + 2072);
if( v1288 < (_QWORD *)((char *)v1288 + v1289) )
{
do
{
_mm_prefetchnta(v1291);
v1291 += 64;
}
while( v1291 < (char *)v1288 + v1289 );
}
v1294 = *(_QWORD *)(v17 + 2072);
v1295 = (unsigned int)v1289 >> 7;
if( (unsigned int)v1289 >> 7 )
{
do
{
v1296 = 8i64;
do
{
v1297 = v1294 ^ *v1290;
v1298 = v1290[1];
v1290 += 2;
v1294 = __ROL8__(__ROL8__(v1297, v1292) ^ v1298, v1292);
--v1296;
}
while( v1296 );
v1299 = __ROL8__(v1293 ^ ((char *)v1290 - (char *)v1288), 17) ^ v1293 ^ ((char *)v1290 - (char *)v1288);
v1717 = (v1299 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1292 = ((unsigned __int8)(v1717 ^ v1299) ^ (unsigned __int8)v1292) & 0x3F;
if( !v1292 )
LOBYTE(v1292) = 1;
--v1295;
}
while( v1295 );
v17 = (__int64)v1566;
}
v1300 = v1289 & 0x7F;
LODWORD(v47) = 1;
if( v1300 >= 8 )
{
v1301 = (unsigned __int64)v1300 >> 3;
do
{
v1294 = __ROL8__(*v1290++ ^ v1294, v1292);
v1300 -= 8;
--v1301;
}
while( v1301 );
}
if( v1300 )
{
do
{
v1302 = *(unsigned __int8 *)v1290;
v1290 = (_QWORD *)((char *)v1290 + 1);
v1294 = __ROL8__(v1302 ^ v1294, v1292);
--v1300;
}
while( v1300 );
v17 = (__int64)v1566;
}
for( i21 = v1294; ; LODWORD(v1294) = i21 ^ v1294 )
{
i21 >>= 31;
if( !i21 )
break;
}
v1304 = *((_DWORD *)v56 + 5);
v1305 = v1294 & 0x7FFFFFFF;
if( v1305 == v1304 )
goto LABEL_2174;
v1306 = *((unsigned int *)v56 + 4);
v1307 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1308 = KeGetCurrentIrql();
__writecr8(2ui64);
v1309 = v1307 & 0xFFFFFFFFFFFFF000ui64;
v1310 = (v1307 + v1306 - 1) | 0xFFF;
v1311 = (v1307 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v1308;
while( 1 )
{
v1312 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1309, 0i64);
if( v1312 != -1073741267 )
break;
if( v1308 > 1u )
goto LABEL_2171;
v47 = v1308;
__writecr8(v1308);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1312 < 0 )
break;
LABEL_2171:
v1309 += 4096i64;
v1311 += 4096i64;
if( v1311 == v1310 )
goto LABEL_2172;
}
__writecr8(v47);
v56 = v1565;
v50 = 0;
v1304 = *((_DWORD *)v1565 + 5);
}
v1334 = *(_DWORD *)(v17 + 2296);
if( !v1334 )
{
v1335 = v1305;
v1336 = v1304;
goto LABEL_2198;
}
}
else
{
v1338 = (_QWORD *)*((_QWORD *)v56 + 1);
v1339 = *((unsigned int *)v56 + 4);
v1340 = v1338;
*(_DWORD *)(v17 + 2088) += v1339;
v1341 = (char *)v1338;
v1342 = *(_DWORD *)(v17 + 2068);
v1343 = *(_QWORD *)(v17 + 2072);
if( v1338 < (_QWORD *)((char *)v1338 + v1339) )
{
do
{
_mm_prefetchnta(v1341);
v1341 += 64;
}
while( v1341 < (char *)v1338 + v1339 );
}
v1344 = *(_QWORD *)(v17 + 2072);
v1345 = (unsigned int)v1339 >> 7;
if( (unsigned int)v1339 >> 7 )
{
do
{
v1346 = 8i64;
do
{
v1347 = v1344 ^ *v1340;
v1348 = v1340[1];
v1340 += 2;
v1344 = __ROL8__(__ROL8__(v1347, v1342) ^ v1348, v1342);
--v1346;
}
while( v1346 );
v1349 = __ROL8__(v1343 ^ ((char *)v1340 - (char *)v1338), 17) ^ v1343 ^ ((char *)v1340 - (char *)v1338);
v1718 = (v1349 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1342 = ((unsigned __int8)(v1718 ^ v1349) ^ (unsigned __int8)v1342) & 0x3F;
if( !v1342 )
LOBYTE(v1342) = 1;
--v1345;
}
while( v1345 );
v17 = (__int64)v1566;
}
v1350 = v1339 & 0x7F;
LODWORD(v47) = 1;
if( v1350 >= 8 )
{
v1351 = (unsigned __int64)v1350 >> 3;
do
{
v1344 = __ROL8__(*v1340++ ^ v1344, v1342);
v1350 -= 8;
--v1351;
}
while( v1351 );
}
if( v1350 )
{
do
{
v1352 = *(unsigned __int8 *)v1340;
v1340 = (_QWORD *)((char *)v1340 + 1);
v1344 = __ROL8__(v1352 ^ v1344, v1342);
--v1350;
}
while( v1350 );
v17 = (__int64)v1566;
}
for( i22 = v1344; ; LODWORD(v1344) = i22 ^ v1344 )
{
i22 >>= 31;
if( !i22 )
break;
}
v1354 = v1344 & 0x7FFFFFFF;
if( v1354 == *((_DWORD *)v56 + 5) )
{
LABEL_2173:
v50 = 0;
goto LABEL_2174;
}
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v1355 = *((unsigned int *)v56 + 4);
v1356 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v1357 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v1358 = KeGetCurrentIrql();
__writecr8(2ui64);
v1359 = v1356 & 0xFFFFFFFFFFFFF000ui64;
v1581 = (v1356 + v1355 - 1) | 0xFFF;
v1360 = (v1356 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v1358;
while( 1 )
{
v1361 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v1359,
0i64,
v1357,
v1340);
if( v1361 != -1073741267 )
break;
if( v50 )
goto LABEL_2234;
if( v1358 > 1u )
goto LABEL_2232;
v47 = v1358;
__writecr8(v1358);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1361 < 0 )
break;
LABEL_2232:
v1359 += 4096i64;
v1360 += 4096i64;
if( v1360 == v1581 )
{
LABEL_2172:
__writecr8(v47);
v56 = v1565;
goto LABEL_2173;
}
}
LABEL_2234:
__writecr8(v47);
v56 = v1565;
}
}
v1334 = *(_DWORD *)(v17 + 2296);
v50 = 0;
v1335 = *((unsigned int *)v56 + 5);
if( !v1334 )
{
v1336 = v1354;
LABEL_2198:
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1336 ^ v1335;
v1334 = *(_DWORD *)(v17 + 2296);
}
}
v1337 = *((_QWORD *)v56 + 1);
if( !v1334 )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1337;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
goto LABEL_2174;
}
LABEL_2175:
v1313 = *(unsigned int *)(v17 + 2084);
v1314 = *((unsigned int *)v56 + 4);
v1569 = *((_QWORD *)v56 + 1);
v1315 = (unsigned int *)(v1569 + 12 * v1313);
v1578 = (char *)v1315;
v1316 = (int *)&v56[4 * v1313 + 48];
v1567 = (__int64)v1316;
v1317 = v1569 + 12 * (v1314 / 0xC);
v1572 = v1317;
if( v1315 == (unsigned int *)v1317 )
goto LABEL_2291;
while( 2 )
{
if( *v1316 < 0 )
goto LABEL_2282;
v1318 = *((_QWORD *)v56 + 4) + *v1315;
LODWORD(v47) = v1315[1] - *v1315;
v1581 = v1318;
if( v79 == 43 )
{
v1362 = sub_140A0F5E8(v17, (__int64 *)v1318, v47);
*(_DWORD *)(v17 + 2088) += 8 * v47;
if( (*(_DWORD *)(v17 + 2452) & 0x800) != 0 )
{
v1363 = (_BYTE *)(v1318 - 6);
v1364 = (char *)(v1318 - 6 + 5);
v1365 = *v1364;
if( *(_BYTE *)(v1318 - 6) != 76
|| v1363[1] != 0x87
|| v1363[2]
|| v1363[3] != 0x98
|| v1363[4] != 0xC3
|| v1365 != -112 && v1365 != -15 )
{
goto LABEL_2586;
}
v1366 = *(volatile signed __int32 **)(v17 + 1248);
while( 1 )
{
_disable();
if( !_interlockedbittestandset(v1366, (*(_DWORD *)(v17 + 2448) >> 10) & 0x1F) )
break;
_enable();
_mm_pause();
}
v1367 = *(struct _KPRCB **)(v17 + 2272);
v1368 = 38i64;
v1369 = 304;
v1370 = v1367;
do
{
*(_QWORD *)&v1370->_MxCsr = 0i64;
v1369 -= 8;
v1370 = (struct _KPRCB *)((char *)v1370 + 8);
--v1368;
}
while( v1368 );
if( v1369 )
{
v1368 = 0xFFFFFFFFi64;
do
{
LOBYTE(v1370->_MxCsr) = 0;
v1370 = (struct _KPRCB *)((char *)v1370 + 1);
--v1369;
}
while( v1369 );
}
*(_OWORD *)&v1367->NextThread = *(_OWORD *)(v17 + 2120);
*(_OWORD *)&v1367->NestingLevel = *(_OWORD *)(v17 + 2136);
*(_OWORD *)&v1367->ProcessorState.SpecialRegisters.KernelDr0 = *(_OWORD *)(v17 + 2152);
v1651[0] = 303;
*(_QWORD *)&v1651[1] = v1367;
LOWORD(v1367->NextThread) = v17 + 2188;
v1371 = (unsigned __int64)(v17 + 2188) >> 16;
v1720 = v17 + 2188;
HIWORD(v1367->NextThread) = v1371;
LODWORD(v1367->IdleThread) = (unsigned __int64)(v17 + 2188) >> 32;
__sidt(v1679);
__lidt(v1651);
*v1364 = -15;
if( *v1364 != -15 )
goto LABEL_2262;
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
v1367 = KeGetCurrentPrcb();
**(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
v1371 = v1318;
**(_QWORD **)(v17 + 1224) = v1367;
**(_QWORD **)(v17 + 1232) = v1318;
**(_QWORD **)(v17 + 1240) = 275i64;
}
((void(__fastcall *)(unsigned __int64, struct _KPRCB *, __int64, __int64))(v1318 - 6 + 5))(
v1371,
v1367,
v1368,
1i64);
if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
{
**(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
**(_QWORD **)(v17 + 1224) = 0i64;
**(_QWORD **)(v17 + 1232) = 0i64;
**(_QWORD **)(v17 + 1240) = 0i64;
}
if( *v1364 == -15 )
{
*v1364 = -112;
v1372 = *v1364 == -112;
}
else
{
LABEL_2262:
v1372 = 0;
}
__lidt(v1679);
_InterlockedAnd(
*(volatile signed __int32 **)(v17 + 1248),
~(1 << ((*(_DWORD *)(v17 + 2448) >> 10) & 0x1F)));
_enable();
if( !v1372 )
{
LABEL_2586:
if( !*(_DWORD *)(v17 + 2296) )
{
v1373 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v1373 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v1373;
*(_QWORD *)(v17 + 2328) = v1363;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
v1317 = v1572;
v1315 = (unsigned int *)v1578;
}
}
else
{
*(_DWORD *)(v17 + 2088) += v47;
v1319 = (_QWORD *)v1318;
v1320 = *(_DWORD *)(v17 + 2068);
v1321 = (char *)v1318;
v1322 = *(_QWORD *)(v17 + 2072);
v1323 = v1318 + (unsigned int)v47;
if( v1318 < v1323 )
{
do
{
_mm_prefetchnta(v1321);
v1321 += 64;
}
while( (unsigned __int64)v1321 < v1323 );
}
v1324 = *(_QWORD *)(v17 + 2072);
v1325 = (unsigned int)v47 >> 7;
if( (unsigned int)v47 >> 7 )
{
do
{
v1326 = 8i64;
do
{
v1327 = v1324 ^ *v1319;
v1328 = v1319[1];
v1319 += 2;
v1324 = __ROL8__(__ROL8__(v1327, v1320) ^ v1328, v1320);
--v1326;
}
while( v1326 );
v1329 = __ROL8__(v1322 ^ ((unsigned __int64)v1319 - v1318), 17) ^ v1322 ^ ((unsigned __int64)v1319
- v1318);
v1719 = (v1329 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v1320 = ((unsigned __int8)(v1719 ^ v1329) ^ (unsigned __int8)v1320) & 0x3F;
if( !v1320 )
LOBYTE(v1320) = 1;
--v1325;
}
while( v1325 );
v17 = (__int64)v1566;
v1316 = (int *)v1567;
}
v1330 = v47 & 0x7F;
if( v1330 >= 8 )
{
v1331 = (v47 & 0x7F) >> 3;
do
{
v1324 = __ROL8__(*v1319++ ^ v1324, v1320);
v1330 -= 8;
--v1331;
}
while( v1331 );
v1317 = v1572;
}
if( v1330 )
{
do
{
v1332 = *(unsigned __int8 *)v1319;
v1319 = (_QWORD *)((char *)v1319 + 1);
v1324 = __ROL8__(v1332 ^ v1324, v1320);
--v1330;
}
while( v1330 );
v17 = (__int64)v1566;
v1316 = (int *)v1567;
}
for( i23 = v1324; ; LODWORD(v1324) = i23 ^ v1324 )
{
i23 >>= 31;
if( !i23 )
break;
}
v1362 = v1324 & 0x7FFFFFFF;
}
v1374 = *v1316;
if( v1362 != (*v1316 & 0x7FFFFFFF) )
{
v1375 = (unsigned int)v47;
if( (_DWORD)v47 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(2ui64);
v1376 = v1318 & 0xFFFFFFFFFFFFF000ui64;
v1377 = (v1375 + v1318 - 1) | 0xFFF;
v1378 = (v1318 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v1379 = (unsigned __int8)v47;
while( 1 )
{
v1380 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1376, 0i64);
if( v1380 != -1073741267 )
break;
if( (unsigned __int8)v47 > 1u )
goto LABEL_2277;
v1379 = (unsigned __int8)v47;
__writecr8((unsigned __int8)v47);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v1380 < 0 )
break;
LABEL_2277:
v1376 += 4096i64;
v1378 += 4096i64;
if( v1378 == v1377 )
{
__writecr8(v1379);
v1316 = (int *)v1567;
goto LABEL_2279;
}
}
__writecr8(v1379);
v1316 = (int *)v1567;
v1318 = v1581;
v1374 = *(_DWORD *)v1567;
}
v1382 = v1374;
if( !*(_DWORD *)(v17 + 2296) )
{
LODWORD(v1382) = v1374 & 0x7FFFFFFF;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1382 ^ v1362;
if( !*(_DWORD *)(v17 + 2296) )
{
v56 = v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1318;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v1315 = (unsigned int *)v1578;
v1317 = v1572;
LABEL_2281:
v50 = 0;
LABEL_2282:
++v1316;
v1315 += 3;
v1567 = (__int64)v1316;
v1578 = (char *)v1315;
v1381 = v1315 == (unsigned int *)v1317;
if( (unsigned __int64)v1315 >= v1317 )
goto LABEL_2285;
v79 = v1773;
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
{
v1381 = v1315 == (unsigned int *)v1317;
LABEL_2285:
if( !v1381 )
{
*(_DWORD *)(v17 + 2084) = ((__int64)v1315 - v1569) / 12;
goto LABEL_238;
}
LABEL_2291:
v1383 = *(_QWORD *)(v17 + 1344);
LODWORD(v47) = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64))(v17 + 336))(v1383);
v1385 = **(unsigned int ***)(v17 + 1552);
v1386 = v1385 + 4;
v1387 = *((_BYTE *)v1385 + 12);
v1388 = (unsigned __int64)&v1385[6 * *v1385 + 4];
do
{
v1389 = 24i64;
v1390 = (__int64 *)(v56 + 24);
v1391 = v1386;
do
{
v1392 = *(_QWORD *)v1391;
v1391 += 2;
v1393 = *v1390++;
if( v1392 != v1393 )
goto LABEL_2299;
v1389 = (unsigned int)(v1389 - 8);
}
while( (unsigned int)v1389 >= 8 );
if( !(_DWORD)v1389 )
break;
while( 1 )
{
v1384 = *(unsigned __int8 *)v1391;
v1391 = (unsigned int *)((char *)v1391 + 1);
v1394 = *(unsigned __int8 *)v1390;
v1390 = (__int64 *)((char *)v1390 + 1);
if( v1384 != v1394 )
break;
v72 = (_DWORD)v1389 == 1;
v1389 = (unsigned int)(v1389 - 1);
if( v72 )
goto LABEL_2300;
}
LABEL_2299:
v1386 += 6;
}
while( (unsigned __int64)v1386 < v1388 );
LABEL_2300:
v17 = (__int64)v1566;
(*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
*((_QWORD *)v1566 + 168),
v1384,
v1389,
v1390);
__writecr8((unsigned __int8)v47);
if( !v1387 )
goto LABEL_2305;
v50 = 0;
if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = 1i64;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
if( *((_QWORD *)v56 + 3) != 1i64 )
{
LABEL_2305:
v50 = 0;
if( v1386 == (unsigned int *)v1388 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v1386;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
LABEL_1736:
*(_DWORD *)(v17 + 2084) = 0;
goto LABEL_238;
}
continue;
}
}
LABEL_2279:
v1317 = v1572;
v1315 = (unsigned int *)v1578;
}
break;
}
v56 = v1565;
goto LABEL_2281;
case 0:
v221 = (_QWORD *)*((_QWORD *)v56 + 1);
v222 = *((unsigned int *)v56 + 4);
v223 = v221;
*(_DWORD *)(v17 + 2088) += v222;
v224 = (char *)v221;
v225 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v221 < (_QWORD *)((char *)v221 + v222) )
{
do
{
_mm_prefetchnta(v224);
v224 += 64;
}
while( v224 < (char *)v221 + v222 );
}
v226 = *(_QWORD *)(v17 + 2072);
v227 = (unsigned int)v222 >> 7;
if( (unsigned int)v222 >> 7 )
{
do
{
v228 = 8i64;
do
{
v229 = v223[1] ^ __ROL8__(*v223 ^ v226, v225);
v223 += 2;
v226 = __ROL8__(v229, v225);
--v228;
}
while( v228 );
v230 = (__ROL8__(v47 ^ ((char *)v223 - (char *)v221), 17) ^ v47 ^ ((char *)v223 - (char *)v221))
* (unsigned __int128)0x7010008004002001ui64;
v1736 = *((_QWORD *)&v230 + 1);
v225 = ((unsigned __int8)(v230 ^ BYTE8(v230)) ^ (unsigned __int8)v225) & 0x3F;
if( !v225 )
LOBYTE(v225) = 1;
--v227;
}
while( v227 );
v17 = (__int64)v1566;
}
v231 = v222 & 0x7F;
if( v231 >= 8 )
{
v232 = (unsigned __int64)v231 >> 3;
do
{
v226 = __ROL8__(*v223++ ^ v226, v225);
v231 -= 8;
--v232;
}
while( v232 );
}
for( ; v231; --v231 )
{
v233 = *(unsigned __int8 *)v223;
v223 = (_QWORD *)((char *)v223 + 1);
v226 = __ROL8__(v233 ^ v226, v225);
}
for( i24 = v226; ; LODWORD(v226) = i24 ^ v226 )
{
i24 >>= 31;
if( !i24 )
break;
}
v235 = v226 & 0x7FFFFFFF;
if( v235 == *((_DWORD *)v56 + 5) )
goto LABEL_237;
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v236 = *((unsigned int *)v56 + 4);
v237 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v238 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v239 = KeGetCurrentIrql();
__writecr8(2ui64);
v240 = v237 & 0xFFFFFFFFFFFFF000ui64;
v1778 = (v237 + v236 - 1) | 0xFFF;
v241 = (v237 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v47 = v239;
while( 1 )
{
v242 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v240,
0i64,
v238,
v223);
if( v242 != -1073741267 )
break;
if( v50 )
goto LABEL_452;
if( v239 > 1u )
goto LABEL_450;
v47 = v239;
__writecr8(v239);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v242 < 0 )
break;
LABEL_450:
v240 += 4096i64;
v241 += 4096i64;
if( v241 == v1778 )
goto LABEL_236;
}
LABEL_452:
__writecr8(v47);
v56 = v1565;
}
}
v108 = *(_DWORD *)(v17 + 2296);
v50 = 0;
if( !v108 )
{
v109 = *((unsigned int *)v56 + 5) ^ (unsigned __int64)v235;
LABEL_455:
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v109;
v108 = *(_DWORD *)(v17 + 2296);
}
LABEL_456:
v243 = *((_QWORD *)v56 + 1);
LABEL_457:
if( v108 )
goto LABEL_238;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v243;
goto LABEL_459;
case 1:
goto LABEL_2132;
case 4:
if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
goto LABEL_238;
v204 = *(void(**)(void))(v17 + 376);
v205 = 0;
v206 = *(_QWORD *)(v17 + 1352);
LODWORD(v1570) = 0;
v204();
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v207 = *(_DWORD *)(v17 + 2384), v207 >= 7) )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
v208 = 0x80;
}
else
{
v208 = 1 << v207;
}
v1777 = v208;
(*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v206, 0i64);
v209 = *(_QWORD ***)(v17 + 1312);
v210 = *v209;
if( *v209 != v209 )
{
do
{
v211 = (unsigned __int64)v210 - *(_QWORD *)(v17 + 1744);
if( v208 != 0x80
&& (v208 & *(_BYTE *)(v211 + *(_QWORD *)(v17 + 1720))) != 0
&& (*(_DWORD *)(v211 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) != 0
&& !*(_DWORD *)(v17 + 2296) )
{
v212 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v212 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v212;
*(_QWORD *)(v17 + 2328) = v211 | 1;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
_InterlockedOr8((volatile signed __int8 *)(v211 + *(_QWORD *)(v17 + 1720)), v208);
v210 = (_QWORD *)*v210;
++v205;
}
while( v210 != v209 );
LODWORD(v1570) = v205;
}
v213 = *(_QWORD *)(v17 + 1280);
v1567 = KeGetCurrentIrql();
__writecr8(0xCui64);
(*(void(__fastcall **)(__int64, char *))(v17 + 328))(v213, v1767);
v214 = *(unsigned __int64 **)(v17 + 1272);
v47 = *v214;
if( (unsigned __int64 *)*v214 != v214 )
{
v215 = v208;
v216 = v208;
v217 = (int *)v1565;
v218 = ~v215;
do
{
v219 = *(_QWORD *)(v17 + 1720);
v220 = v47 - *(_QWORD *)(v17 + 1712);
if( (*(char *)(v220 + v219) & v216) == 0 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v217 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v217;
*(_QWORD *)(v17 + 2328) = v220;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v219 = *(_QWORD *)(v17 + 1720);
}
_InterlockedAnd8((volatile signed __int8 *)(v220 + v219), v218);
v47 = *(_QWORD *)v47;
}
while( (unsigned __int64 *)v47 != v214 );
v208 = v1777;
v205 = v1570;
}
(*(void(__fastcall **)(char *))(v17 + 392))(v1767);
__writecr8((unsigned __int8)v1567);
if( v208 == 0x80 )
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
(*(void(**)(void))(v17 + 384))();
*(_DWORD *)(v17 + 2088) += v205 << 8;
goto LABEL_237;
case 5:
v180 = *(_DWORD *)(v17 + 2096);
if( (v180 & 1) == 0 )
goto LABEL_238;
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
{
v181 = __rdtsc();
v182 = (__ROR8__(v181, 3) ^ v181) * (unsigned __int128)0x7010008004002001ui64;
v1735 = *((_QWORD *)&v182 + 1);
v1776 = ((unsigned __int64)v182 ^ *((_QWORD *)&v182 + 1)) == 3
* (((unsigned __int64)v182 ^ *((_QWORD *)&v182 + 1))
/ 3);
}
else
{
v1776 = (v180 & 3) == 3;
}
v183 = *(void(**)(void))(v17 + 376);
v184 = 0;
v185 = *(_QWORD *)(v17 + 1352);
LODWORD(v1570) = 0;
v183();
if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v186 = *(_DWORD *)(v17 + 2384), v186 >= 7) )
{
(*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
v187 = 0x80;
}
else
{
v187 = 1 << v186;
}
(*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v185, 0i64);
v188 = *(volatile signed __int8 ***)(v17 + 1312);
v189 = *v188;
if( *v188 != (volatile signed __int8 *)v188 )
{
do
{
_InterlockedOr8(&v189[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v187);
v189 = *(volatile signed __int8 **)v189;
++v184;
}
while( v189 != (volatile signed __int8 *)v188 );
LODWORD(v1570) = v184;
}
v47 = 4i64;
v190 = **(_QWORD **)(v17 + 1360);
v191 = *(unsigned int *)(*(_QWORD *)(v17 + 1840) + v190);
while( 1 )
{
v192 = (__int64 *)(*(__int64(__fastcall **)(__int64, unsigned __int64))(v17 + 264))(v190, v47);
v194 = 0i64;
v195 = v192;
if( v192 )
break;
LABEL_393:
v47 += 4i64;
if( v47 >= v191 )
{
if( v187 == 0x80 )
(*(void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(v17 + 304))(
*(_QWORD *)(v17 + 2560),
0i64,
v193,
v194);
(*(void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(v17 + 320))(
*(_QWORD *)(v17 + 1352),
0i64,
v193,
v194);
(*(void(**)(void))(v17 + 384))();
*(_DWORD *)(v17 + 2088) += ((unsigned int)(v191 >> 2) + (_DWORD)v1570) << 8;
goto LABEL_237;
}
}
v196 = (_BYTE *)((*v192 >> 16) & 0xFFFFFFFFFFFFFFF0ui64);
v197 = *v196 & 0x7F;
if( v197 == 3 )
{
v193 = *(_QWORD *)(v17 + 1720);
v198 = v193;
if( (v187 & v196[v193]) == 0
&& (*(_DWORD *)&v196[*(_QWORD *)(v17 + 1728)] & *(_DWORD *)(v17 + 1752)) != 0
&& !*(_DWORD *)(v17 + 2296) )
{
v199 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v199 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v199;
*(_QWORD *)(v17 + 2328) = v196;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v198 = *(_QWORD *)(v17 + 1720);
}
_InterlockedAnd8(&v196[v198], ~v187);
goto LABEL_392;
}
if( v197 == 6 )
{
if( v1776 )
{
v200 = *(_QWORD *)(v17 + 1664);
v201 = *(_QWORD *)&v196[v200 + 32];
if( (v201 == *(_QWORD *)(v17 + 800) || v201 == *(_QWORD *)(v17 + 808))
&& *(_QWORD *)&v196[v200 + 48] == *(_QWORD *)(v17 + 816) )
{
v202 = *(_QWORD *)&v196[v200 + 40] == *(_QWORD *)(v17 + 824);
goto LABEL_389;
}
goto LABEL_390;
}
}
else
{
v202 = v197 == 0;
LABEL_389:
if( !v202 )
{
LABEL_390:
if( !*(_DWORD *)(v17 + 2296) )
{
v203 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v203 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v203;
*(_QWORD *)(v17 + 2328) = v196;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
LABEL_392:
(*(void(__fastcall **)(__int64, __int64 *, __int64, __int64))(v17 + 288))(v190, v195, v193, v194);
goto LABEL_393;
case 7:
(*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1740, *((unsigned int *)v56 + 7));
(*(void(__fastcall **)(char *, char *))(v17 + 464))(v1740, v1741);
for( i25 = 0; i25 < *((_DWORD *)v56 + 6); ++i25 )
{
v173 = *(unsigned int *)&v56[24 * i25 + 64];
if( (*(_BYTE *)(v17 + 2171) & 2) != 0
&& (_DWORD)v173 == -1073741694
&& KeGetPcr()->Prcb.Number == *(_DWORD *)(v17 + 2288) )
{
v174 = *(_QWORD *)(v17 + 2280);
}
else
{
v174 = __readmsr(v173);
}
v175 = *(_QWORD *)&v56[24 * i25 + 48];
v176 = *(_QWORD *)&v56[24 * i25 + 56];
v177 = v175 & v174;
if( v177 == v176 )
{
if( (*(_DWORD *)(v17 + 2452) & 0x200) != 0 && v175 == -1 )
__writemsr(v173, v177);
}
else
{
v178 = v173 | ((unsigned __int64)*((unsigned int *)v56 + 7) << 32);
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v177 ^ v176;
if( !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v178;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
}
}
}
(*(void(__fastcall **)(char *))(v17 + 408))(v1741);
v179 = *((_DWORD *)v56 + 6) << 15;
goto LABEL_2414;
case 8:
v139 = *((_QWORD *)v56 + 3);
v140 = *((_WORD *)v56 + 17);
if( *(_WORD *)(v139 + *(_QWORD *)(v17 + 1776) + *(_QWORD *)(v17 + 1824)) != v140 && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v139;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
v140 = *((_WORD *)v56 + 17);
}
if( (v140 & *(_WORD *)(v17 + 1832)) == 0
&& *(_QWORD *)(v139 + *(_QWORD *)(v17 + 1784)) != v139 + *(_QWORD *)(v17 + 1784)
&& !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v139;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v141 = (_QWORD *)*((_QWORD *)v56 + 1);
v142 = *((unsigned int *)v56 + 4);
v143 = v141;
*(_DWORD *)(v17 + 2088) += v142;
v144 = (char *)v141;
v145 = *(_DWORD *)(v17 + 2068);
v146 = *(_QWORD *)(v17 + 2072);
if( v141 < (_QWORD *)((char *)v141 + v142) )
{
do
{
_mm_prefetchnta(v144);
v144 += 64;
}
while( v144 < (char *)v141 + v142 );
}
v147 = *(_QWORD *)(v17 + 2072);
v148 = (unsigned int)v142 >> 7;
if( (unsigned int)v142 >> 7 )
{
do
{
v149 = 8i64;
do
{
v150 = v143[1] ^ __ROL8__(*v143 ^ v147, v145);
v143 += 2;
v147 = __ROL8__(v150, v145);
--v149;
}
while( v149 );
v151 = (__ROL8__(v146 ^ ((char *)v143 - (char *)v141), 17) ^ v146 ^ (unsigned __int64)((char *)v143
- (char *)v141))
* (unsigned __int128)0x7010008004002001ui64;
v1734 = *((_QWORD *)&v151 + 1);
v145 = ((unsigned __int8)v151 ^ (unsigned __int8)(BYTE8(v151) ^ v145)) & 0x3F;
if( !v145 )
LOBYTE(v145) = 1;
--v148;
}
while( v148 );
v17 = (__int64)v1566;
}
v152 = v142 & 0x7F;
if( v152 >= 8 )
{
v153 = (unsigned __int64)v152 >> 3;
do
{
v147 = __ROL8__(*v143++ ^ v147, v145);
v152 -= 8;
--v153;
}
while( v153 );
}
for( ; v152; --v152 )
{
v154 = *(unsigned __int8 *)v143;
v143 = (_QWORD *)((char *)v143 + 1);
v147 = __ROL8__(v154 ^ v147, v145);
}
for( i26 = v147; ; LODWORD(v147) = i26 ^ v147 )
{
i26 >>= 31;
if( !i26 )
break;
}
v156 = v147 & 0x7FFFFFFF;
if( v156 == *((_DWORD *)v56 + 5) )
{
LABEL_335:
v50 = 0;
}
else
{
if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
v50 = 1;
v157 = *((unsigned int *)v56 + 4);
v158 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) )
{
v159 = 64i64;
if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v160 = KeGetCurrentIrql();
__writecr8(2ui64);
v161 = v158 & 0xFFFFFFFFFFFFF000ui64;
v1775 = (v158 + v157 - 1) | 0xFFF;
v162 = (v158 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v163 = v160;
while( 1 )
{
v164 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v161,
0i64,
v159,
v143);
if( v164 != -1073741267 )
break;
if( v50 )
goto LABEL_343;
if( v160 > 1u )
goto LABEL_333;
v163 = v160;
__writecr8(v160);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v164 < 0 )
break;
LABEL_333:
v161 += 4096i64;
v162 += 4096i64;
if( v162 == v1775 )
{
__writecr8(v163);
v56 = v1565;
goto LABEL_335;
}
}
LABEL_343:
__writecr8(v163);
v56 = v1565;
}
}
v170 = *(_DWORD *)(v17 + 2296);
v50 = 0;
if( !v170 )
{
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v156 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
v170 = *(_DWORD *)(v17 + 2296);
}
v171 = *((_QWORD *)v56 + 1);
if( !v170 )
{
LODWORD(v47) = -465226731;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v171;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
goto LABEL_337;
}
}
LODWORD(v47) = -465226731;
LABEL_337:
v1660 = v56 + 48;
v165 = *((_WORD *)v56 + 16);
v1564 = &v1643;
v1659[0] = v165;
v1659[1] = v165;
v166 = *(_QWORD *)(v17 + 1288);
v167 = *(int(__fastcall **)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *))(v17 + 488);
LOBYTE(v1563) = 0;
if( v167(v1659, 0i64, 0i64, 0i64, v166, v1563, 0i64, &v1643) < 0 )
goto LABEL_238;
v168 = v1643;
if( v1643 != *((_QWORD *)v56 + 3) && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v168;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
LABEL_341:
v169 = *(void(**)(void))(v17 + 480);
goto LABEL_342;
case 10:
if( *((_DWORD *)v56 + 6) )
{
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_270;
v110 = *(_DWORD *)(v17 + 2452);
if( (v110 & 4) != 0 )
goto LABEL_270;
if( *(_DWORD *)(v17 + 2084) )
{
if( (v110 & 0x20) != 0 )
goto LABEL_270;
}
else
{
*(_DWORD *)(v17 + 2452) = v110 ^ ((unsigned __int8)v110 ^ (unsigned __int8)(8 * v110)) & 0x20;
}
}
v111 = (unsigned __int64)&v56[16 * *(unsigned int *)(v17 + 2084) + 48];
v112 = (unsigned __int64)&v56[16 * *((unsigned int *)v56 + 7) + 48];
v1774 = v112;
while( 1 )
{
if( *(int *)v111 >= 0 )
{
v113 = *(_QWORD *)(v111 + 8);
v114 = *(unsigned int *)(v111 + 4);
v115 = (_QWORD *)v113;
*(_DWORD *)(v17 + 2088) += v114;
v116 = (char *)v113;
v117 = *(_DWORD *)(v17 + 2068);
v118 = (unsigned int)v114;
v47 = *(_QWORD *)(v17 + 2072);
v1569 = v113;
if( v113 < (unsigned __int64)(v114 + v113) )
{
do
{
_mm_prefetchnta(v116);
v116 += 64;
}
while( (unsigned __int64)v116 < v114 + v113 );
}
v119 = v47;
v120 = (unsigned int)v114 >> 7;
if( (unsigned int)v114 >> 7 )
{
do
{
v121 = 8i64;
do
{
v122 = v119 ^ *v115;
v123 = v115[1];
v115 += 2;
v119 = __ROL8__(__ROL8__(v122, v117) ^ v123, v117);
--v121;
}
while( v121 );
v124 = __ROL8__(v47 ^ ((unsigned __int64)v115 - v113), 17) ^ v47 ^ ((unsigned __int64)v115 - v113);
v1733 = (v124 * (unsigned __int128)0x7010008004002001ui64) >> 64;
v117 = ((unsigned __int8)(v124 ^ v1733) ^ (unsigned __int8)v117) & 0x3F;
if( !v117 )
LOBYTE(v117) = 1;
--v120;
}
while( v120 );
v17 = (__int64)v1566;
v112 = v1774;
}
v125 = v114 & 0x7F;
if( (unsigned int)v125 >= 8 )
{
v126 = (unsigned __int64)(unsigned int)v125 >> 3;
do
{
v119 = __ROL8__(*v115++ ^ v119, v117);
v125 = (unsigned int)(v125 - 8);
--v126;
}
while( v126 );
}
if( (_DWORD)v125 )
{
do
{
v127 = *(unsigned __int8 *)v115;
v115 = (_QWORD *)((char *)v115 + 1);
v119 = __ROL8__(v127 ^ v119, v117);
v125 = (unsigned int)(v125 - 1);
}
while( (_DWORD)v125 );
v17 = (__int64)v1566;
}
for( i27 = v119; ; LODWORD(v119) = i27 ^ v119 )
{
i27 >>= 31;
if( !i27 )
break;
}
v130 = *(_DWORD *)v111;
v131 = v119 & 0x7FFFFFFF;
if( v131 == (*(_DWORD *)v111 & 0x7FFFFFFF) )
{
LABEL_284:
v50 = 0;
}
else
{
if( v118 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v132 = KeGetCurrentIrql();
__writecr8(2ui64);
v47 = v113 & 0xFFFFFFFFFFFFF000ui64;
v1567 = (v118 + v113 - 1) | 0xFFF;
v133 = (v113 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v134 = v132;
while( 1 )
{
v135 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
v47,
0i64,
v125,
v115);
if( v135 != -1073741267 )
break;
if( v132 > 1u )
goto LABEL_282;
v134 = v132;
__writecr8(v132);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v135 < 0 )
break;
LABEL_282:
v47 += 4096i64;
v133 += 4096i64;
if( v133 == v1567 )
{
__writecr8(v134);
v112 = v1774;
goto LABEL_284;
}
}
__writecr8(v134);
v130 = *(_DWORD *)v111;
v113 = v1569;
v112 = v1774;
}
v138 = v130;
v50 = 0;
if( !*(_DWORD *)(v17 + 2296) )
{
LODWORD(v138) = v130 & 0x7FFFFFFF;
*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v138 ^ v131;
if( !*(_DWORD *)(v17 + 2296) )
{
v136 = (int *)v1565;
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = (char *)v136 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *v136;
*(_QWORD *)(v17 + 2328) = v113;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
goto LABEL_286;
}
}
}
}
v136 = (int *)v1565;
LABEL_286:
v111 += 16i64;
v137 = v111 == v112;
if( v111 >= v112 )
goto LABEL_289;
if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
{
v137 = v111 == v112;
LABEL_289:
if( !v137 )
{
v129 = (__int64)(v111 - (_QWORD)(v136 + 12)) >> 4;
goto LABEL_291;
}
LABEL_270:
LODWORD(v129) = 0;
LABEL_291:
*(_DWORD *)(v17 + 2084) = v129;
goto LABEL_238;
}
}
}
if( v79 != 11 )
goto LABEL_2328;
if( !*(_QWORD *)(v17 + 2432) )
goto LABEL_1736;
if( *(_DWORD *)(v17 + 2084) )
{
v80 = *(_DWORD *)(v17 + 2452);
if( (((unsigned __int8)v80 ^ (unsigned __int8)(v80 >> 3)) & 4) != 0 )
goto LABEL_1736;
}
else
{
v80 = *(_DWORD *)(v17 + 2452) ^ ((unsigned __int8)*(_DWORD *)(v17 + 2452) ^ (unsigned __int8)(8
* *(_DWORD *)(v17 + 2452))) & 0x20;
*(_DWORD *)(v17 + 2452) = v80;
}
if( (v80 & 4) != 0 )
{
v81 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
v82 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
while( v82 )
{
--v82;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v81) && !*(_DWORD *)(v17 + 2296) )
{
*(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v17 + 2320) = *(int *)v56;
*(_QWORD *)(v17 + 2328) = v81;
*(_DWORD *)(v17 + 2296) = 1;
__b8(v17, 0i64);
}
v81 += 4096i64;
*(_DWORD *)(v17 + 2088) += 256;
}
goto LABEL_238;
}
v83 = (_QWORD *)*((_QWORD *)v56 + 1);
v84 = *((unsigned int *)v56 + 4);
v85 = v83;
*(_DWORD *)(v17 + 2088) += v84;
v86 = (char *)v83;
v87 = *(_DWORD *)(v17 + 2068);
v47 = *(_QWORD *)(v17 + 2072);
if( v83 < (_QWORD *)((char *)v83 + v84) )
{
do
{
_mm_prefetchnta(v86);
v86 += 64;
}
while( v86 < (char *)v83 + v84 );
}
v88 = *(_QWORD *)(v17 + 2072);
v89 = (unsigned int)v84 >> 7;
if( (unsigned int)v84 >> 7 )
{
do
{
v90 = 8i64;
do
{
v91 = v88 ^ *v85;
v92 = v85[1];
v85 += 2;
v88 = __ROL8__(__ROL8__(v91, v87) ^ v92, v87);
--v90;
}
while( v90 );
v93 = (__ROL8__(v47 ^ ((char *)v85 - (char *)v83), 17) ^ v47 ^ ((char *)v85 - (char *)v83))
* (unsigned __int128)0x7010008004002001ui64;
v1732 = *((_QWORD *)&v93 + 1);
v87 = ((unsigned __int8)(v93 ^ BYTE8(v93)) ^ (unsigned __int8)v87) & 0x3F;
if( !v87 )
LOBYTE(v87) = 1;
--v89;
}
while( v89 );
v17 = (__int64)v1566;
}
v94 = v84 & 0x7F;
if( v94 >= 8 )
{
v95 = (unsigned __int64)v94 >> 3;
do
{
v88 = __ROL8__(*v85++ ^ v88, v87);
v94 -= 8;
--v95;
}
while( v95 );
v17 = (__int64)v1566;
}
for( ; v94; --v94 )
{
v96 = *(unsigned __int8 *)v85;
v85 = (_QWORD *)((char *)v85 + 1);
v88 = __ROL8__(v96 ^ v88, v87);
}
for( i28 = v88; ; LODWORD(v88) = i28 ^ v88 )
{
i28 >>= 31;
if( !i28 )
break;
}
v98 = *((unsigned int *)v56 + 5);
v99 = v88 & 0x7FFFFFFF;
if( v99 != (_DWORD)v98 )
{
v100 = *((unsigned int *)v56 + 4);
v101 = *((_QWORD *)v56 + 1);
if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
{
v102 = KeGetCurrentIrql();
__writecr8(2ui64);
v103 = v101 & 0xFFFFFFFFFFFFF000ui64;
v104 = (v101 + v100 - 1) | 0xFFF;
v105 = (v101 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 2 )
{
v47 = v102;
while( 1 )
{
v106 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v103, 0i64);
if( v106 != -1073741267 )
break;
if( v102 > 1u )
goto LABEL_235;
v47 = v102;
__writecr8(v102);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v106 < 0 )
{
__writecr8(v47);
v56 = v1565;
v50 = 0;
v98 = *((unsigned int *)v1565 + 5);
goto LABEL_244;
}
LABEL_235:
v103 += 4096i64;
v105 += 4096i64;
if( v105 != v104 )
continue;
break;
}
LABEL_236:
__writecr8(v47);
goto LABEL_237;
}
LABEL_244:
v108 = *(_DWORD *)(v17 + 2296);
if( !v108 )
{
v109 = v99 ^ v98;
goto LABEL_455;
}
goto LABEL_456;
}
LABEL_238:
v107 = v1628 - 1;
if( !*(_DWORD *)(v17 + 2084) )
v107 = v1628;
v24 = 1i64;
v48 = v107 + 1;
if( *(_DWORD *)(v17 + 2296) || *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
goto LABEL_2508;
v49 = v1599;
v51 = v1594;
v52 = v1596;
}
++*(_DWORD *)(v17 + 2096);
v48 = 0;
if( *(_DWORD *)(v17 + 2392) != 11 || (v1521 = *(_DWORD *)(v17 + 2448), (v1521 & 1) != 0) )
{
LABEL_2508:
v13 = (__int64)v1591;
v2 = a2;
}
else
{
v2 = a2;
v13 = (__int64)v1591;
if( *(_DWORD *)(v17 + 2416) == -1 )
*(_DWORD *)(v17 + 2416) = 0;
else
*(_DWORD *)(v17 + 2448) = v1521 | 1;
}
v14 = v1602;
LABEL_2510:
*(_DWORD *)(v17 + 2080) = v48;
if( v1584 )
{
v1522 = *(_QWORD *)(*(_QWORD *)(v17 + 1704)
+ *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608))
+ *(_QWORD *)(v17 + 1672));
(*(void(__fastcall **)(char *))(v17 + 408))(v1753);
(*(void(__fastcall **)(char *))(v17 + 1088))(v1768);
(*(void(__fastcall **)(__int64))(v17 + 936))(v1522);
(*(void(__fastcall **)(__int64))(v17 + 952))(v1522);
}
if( v1607 && ((*(_DWORD *)(v17 + 2448) & 0x8000) != 0 || !*(_DWORD *)(v17 + 2296)) )
{
v1523 = *(_QWORD *)(v17 + 2432);
*(_QWORD *)(v17 + 2432) = 0i64;
(*(void(__fastcall **)(__int64, char *))(v17 + 664))(v1523, v1768);
v1524 = *(_DWORD *)(v17 + 2448);
if( (v1524 & 1) != 0 )
{
*(_DWORD *)(v17 + 2448) = v1524 & 0xFFFFFFFE;
v1523 = (*(__int64(__fastcall **)(__int64))(v17 + 640))(v1523);
if( v1523 )
*(_DWORD *)(v17 + 2416) = (*(__int64(__fastcall **)(__int64))(v17 + 672))(v1523);
else
*(_DWORD *)(v17 + 2416) = -1;
}
if( v1523 )
(*(void(__fastcall **)(__int64))(v17 + 648))(v1523);
}
if( *(_DWORD *)(v14 + 2296) )
{
v1525 = *(_QWORD *)(v14 + 2320);
v1526 = *(_QWORD *)(v14 + 2328);
v1527 = *(_QWORD *)(v14 + 2312);
v1528 = *(_QWORD *)(v14 + 2304);
v1594 = v1526;
v1599 = v1527;
v1600 = v1528;
v1587 = v14;
if( KeGetCurrentIrql() < 2u )
{
KeGetCurrentIrql();
__writecr8(2ui64);
}
v1529 = KeGetCurrentPrcb();
v1530 = *(void ***)((char *)&v1529->_MxCsr + *(_QWORD *)(v1587 + 1592));
v1531 = *(_QWORD *)((char *)&v1529->_MxCsr + *(_QWORD *)(v1587 + 1608));
v1532 = *(_QWORD *)(v1587 + 1600);
v1581 = v1531;
if( !*((_BYTE *)&v1529->_MxCsr + v1532) || &v1587 > (__int64 *)v1530 || &v1587 < (__int64 *)v1530 - 3072 )
v1530 = *(void ***)(v1531 + *(_QWORD *)(v1587 + 1656));
v1533 = v1587;
if( (*(_DWORD *)(v1587 + 2448) & 0x8000000) == 0 )
{
v1534 = __readcr0();
v1614 = v1534;
__writecr0(v1534 & 0xFFFFFFFFFFFEFFFFui64);
v1535 = v1587 + 2728;
v1536 = 16i64 * *(unsigned int *)(v1587 + 2720) + v1587 + 2728;
v1537 = 0;
v1538 = (_QWORD *)v1536;
if( *(_DWORD *)(v1587 + 2724) )
{
do
{
*(_QWORD *)*v1538 = v1538[1];
v1539 = __readcr4();
if( (v1539 & 0x20080) != 0 )
{
__writecr4(v1539 ^ 0x80);
__writecr4(v1539);
}
else
{
v1540 = __readcr3();
__writecr3(v1540);
}
v1538 += 2;
++v1537;
}
while( v1537 < *(_DWORD *)(v1533 + 2724) );
v1526 = v1594;
}
if( v1535 < v1536 )
{
do
{
v1541 = *(unsigned int *)(v1535 + 8);
v1542 = v1538;
v1543 = *(char **)v1535;
v1544 = v1541;
if( (unsigned int)v1541 >= 8 )
{
v1545 = (unsigned __int64)(unsigned int)v1541 >> 3;
do
{
v1544 -= 8;
*(_QWORD *)v1543 = *v1542++;
v1543 += 8;
--v1545;
}
while( v1545 );
}
if( v1544 )
{
v1546 = v1543 - (char *)v1542;
do
{
*((_BYTE *)v1542 + v1546) = *(_BYTE *)v1542;
v1542 = (_QWORD *)((char *)v1542 + 1);
--v1544;
}
while( v1544 );
}
v1538 = (_QWORD *)((char *)v1538 + v1541);
v1535 += 16i64;
}
while( v1535 < v1536 );
v1531 = v1581;
v1534 = v1614;
v1526 = v1594;
v1527 = v1599;
}
**(_BYTE **)(v1533 + 536) = -61;
__writecr0(v1534);
v1528 = v1600;
}
v1554 = *(_DWORD *)(v1587 + 2344);
if( v1554 )
{
if( KeGetCurrentIrql() < 2u )
{
KeGetCurrentIrql();
__writecr8(2ui64);
v1554 = *(_DWORD *)(v1587 + 2344);
}
if( v1554 )
{
v1555 = v1554 - 1;
if( v1555 )
{
v1556 = v1555 - 1;
if( v1556 )
{
v1557 = v1556 - 1;
if( v1557 )
{
v1558 = v1557 - 1;
if( v1558 )
{
if( v1558 == 1 )
_interlockedbittestandset(
*(volatile signed __int32 **)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v1587 + 1608)),
(*(_DWORD *)(v1587 + 2448) >> 10) & 0x1F);
else
_InterlockedOr64((volatile signed __int64 *)(*(_QWORD *)(v1587 + 1464) + 832i64), 1ui64);
}
else
{
_interlockedbittestandset(
*(volatile signed __int32 **)(*(_QWORD *)(v1587 + 1704)
+ *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr
+ *(_QWORD *)(v1587 + 1608))
+ *(_QWORD *)(v1587 + 1672)),
(*(_DWORD *)(v1587 + 2448) >> 10) & 0x1F);
}
goto LABEL_2582;
}
v1559 = *(volatile signed __int32 **)(v1587 + 1376);
}
else
{
v1559 = *(volatile signed __int32 **)(v1587 + 1368);
}
}
else
{
v1559 = *(volatile signed __int32 **)(v1587 + 1352);
}
_interlockedbittestandset64(v1559, 0i64);
}
}
LABEL_2582:
*(_QWORD *)(v1531 + *(_QWORD *)(v1587 + 1680)) = 0i64;
*(_QWORD *)(v1531 + *(_QWORD *)(v1587 + 1696)) = 0i64;
SdbpCheckDll(265i64, v1528, v1527, v1526, v1525, *(__int64(__fastcall **)(__int64))(v1587 + 344), v1530);
__debugbreak();
}
if( *(_DWORD *)(v14 + 2084) || *(_DWORD *)(v14 + 2080) )
{
v1547 = -1073741802;
*(_DWORD *)v2 = *(_DWORD *)(v14 + 2080);
*(_DWORD *)(v2 + 4) = *(_DWORD *)(v14 + 2084);
}
else
{
v1547 = *(_QWORD *)(v2 + 8) == 0i64 ? 0xC0000225 : 0;
}
if( v1614 == 2800 )
ExFreeToNPagedLookasideList((_NPAGED_LOOKASIDE_LIST *)&Lookaside, (VOID *)v13);
else
ExFreePoolWithTag((PVOID)v13, v24);
return v1547;
}Referenced by:
No references.