/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400d6760 FUN_1400d6760 * Pseudocode, not original source. */ void FUN_1400d6760(longlong *param_1,undefined8 param_2,undefined8 param_3,ulonglong param_4, longlong param_5,double param_6,uint *param_7) { ushort uVar1; longlong lVar2; int iVar3; uint uVar4; ulonglong uVar5; longlong *plVar6; longlong *plVar7; longlong *plVar8; undefined8 uVar9; undefined2 uVar10; longlong **pplVar11; ulonglong uVar12; ulonglong uVar13; longlong *local_78; exception local_70 [88]; uVar10 = (undefined2)param_3; uVar9 = param_2; uVar12 = param_4; uVar5 = FUN_14006fbe0(param_4); if (((char)uVar5 != '\0') && (iVar3 = FUN_1400de5d0(param_5,uVar9,param_3,uVar12), 0 < iVar3)) { uVar1 = *(ushort *)(param_4 + 0xc); pplVar11 = (longlong **)(ulonglong)uVar1; uVar4 = *(uint *)(param_4 + 8); uVar13 = (ulonglong)uVar4; uVar12 = (ulonglong)(uVar1 ^ uVar4) % (ulonglong)*(uint *)(param_1 + 9); uVar5 = uVar12; if (param_1[5] != 0) { lVar2 = *(longlong *)(param_1[5] + uVar12 * 8); while ((lVar2 != 0 && (uVar5 = (ulonglong)*(uint *)(lVar2 + 0x28) % (ulonglong)*(uint *)(param_1 + 9), (int)uVar12 == (int)uVar5))) { if ((*(uint *)(lVar2 + 8) == uVar4) && (*(ushort *)(lVar2 + 0xc) == uVar1)) { plVar6 = *(longlong **)(lVar2 + 0x10); goto LAB_1400d6878; } lVar2 = *(longlong *)(lVar2 + 0x18); } } plVar6 = FUN_1400d6330((longlong *)param_1[0xf],uVar5,pplVar11,uVar13); pplVar11 = &local_78; plVar6[0x31] = param_1[0xf]; *(undefined4 *)((longlong)plVar6 + 0x1bc) = 1; plVar6[0x32] = (longlong)param_1; *(undefined4 *)(plVar6 + 0x2f) = *(undefined4 *)(param_4 + 8); *(undefined2 *)((longlong)plVar6 + 0x17c) = *(undefined2 *)(param_4 + 0xc); *(undefined2 *)(plVar6 + 0x30) = uVar10; plVar6[0x2d] = (longlong)param_6; uVar5 = param_4; local_78 = plVar6; FUN_1400d6280((char *)(param_1 + 4),param_4,pplVar11); LAB_1400d6878: if (((int)plVar6[0x2f] != *(int *)(param_4 + 8)) || (*(short *)((longlong)plVar6 + 0x17c) != *(short *)(param_4 + 0xc))) { FUN_14006ba50(local_70,L"PacketQueue consistency failed!",pplVar11,uVar13); /* WARNING: Subroutine does not return */ _CxxThrowException(local_70,(ThrowInfo *)&DAT_1401a93e8); } uVar4 = *param_7; if (((int)uVar4 < 0) || (5 < (int)uVar4)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (DAT_1401ac144 == '\0') { uVar4 = 0; } *param_7 = uVar4; if (5 < uVar4) { /* WARNING: Subroutine does not return */ FUN_14006be30(0,uVar5,pplVar11,uVar13); } plVar8 = plVar6 + (longlong)(int)uVar4 * 7 + 3; iVar3 = (int)param_2; if ((*(longlong *)(param_7 + 2) != 0) && (iVar3 != 0)) { if (*(char *)((longlong)param_7 + 0x19) == '\0') { plVar7 = (longlong *)plVar8[3]; } else { plVar7 = (longlong *)*plVar8; } for (; plVar7 != (longlong *)0x0; plVar7 = (longlong *)plVar7[1]) { if (((plVar7[8] != 0) && (*(longlong *)(param_7 + 2) == plVar7[8])) && (iVar3 == *(int *)((longlong)plVar7 + 0x4c))) goto LAB_1400d695b; } } plVar7 = (longlong *)FUN_1400d4440(param_1 + 0x10); if (*(char *)((longlong)param_7 + 0x19) == '\0') { plVar8 = plVar8 + 3; } FUN_1400d37e0(plVar8,plVar7,pplVar11,uVar13); plVar7[8] = *(longlong *)(param_7 + 2); uVar4 = param_7[5]; *(int *)((longlong)plVar7 + 0x4c) = iVar3; *(uint *)(plVar7 + 9) = uVar4; LAB_1400d695b: thunk_FUN_1400de670(param_5,(longlong)(plVar7 + 3),(SIZE_T)pplVar11,uVar13); if ((int)plVar6[0x2b] + (int)plVar6[0x28] + (int)plVar6[0x24] + (int)plVar6[0x21] + (int)plVar6[0x1d] + (int)plVar6[0x1a] + (int)plVar6[0x16] + (int)plVar6[0x13] + (int)plVar6[0xf] + (int)plVar6[0xc] + (int)plVar6[8] + (int)plVar6[5] + (int)plVar6[0x36] < 1) { FUN_14006ba50(local_70,L"PacketQueue consistency 2 failed!",pplVar11,uVar13); /* WARNING: Subroutine does not return */ _CxxThrowException(local_70,(ThrowInfo *)&DAT_1401a93e8); } plVar6[0x2d] = (longlong)param_6; FUN_1400d3e60(param_1,plVar6,param_6,uVar13); } return; }