/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14008fb10 FUN_14008fb10 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x00014008fbd3) */ /* WARNING: Removing unreachable block (ram,0x00014008fbda) */ /* WARNING: Removing unreachable block (ram,0x00014008fbe6) */ /* WARNING: Removing unreachable block (ram,0x00014008fc10) */ /* WARNING: Removing unreachable block (ram,0x00014008fc30) */ undefined8 FUN_14008fb10(longlong *param_1,int param_2,longlong **param_3,longlong param_4,ulonglong *param_5) { int iVar1; char cVar2; undefined4 uVar3; uint uVar4; uint uVar5; int *piVar6; undefined4 *puVar7; longlong *plVar8; undefined8 *puVar9; longlong lVar11; longlong lVar12; uint *puVar13; ulonglong *puVar14; undefined **ppuVar15; longlong *plVar16; longlong *plVar17; undefined ***pppuVar18; char *pcVar19; longlong *plVar20; uint *puVar21; int iVar22; uint uVar23; longlong lVar24; longlong **pplVar25; ulonglong uVar26; uint uVar27; longlong lVar28; uint **ppuVar29; longlong lVar30; int local_res10; uint *local_158; longlong *local_150; longlong local_148; int *local_140; longlong *local_138; longlong *local_130; longlong local_128; int *local_120; undefined1 local_118; int *local_110; undefined1 local_108; uint local_100; int local_fc; undefined **local_f8; undefined8 local_f0; undefined8 local_e8; undefined8 local_e0; undefined8 local_d8; longlong *local_d0; undefined1 local_c8; int *local_c0; undefined1 local_b8; undefined8 local_b0; undefined8 local_a8 [2]; exception local_98 [88]; undefined8 uVar10; local_b0 = 0xfffffffffffffffe; pplVar25 = param_3; lVar28 = param_4; piVar6 = (int *)(**(code **)(*param_1 + 0x58))(); local_120 = piVar6; FUN_14006b350(piVar6); local_118 = 1; if (DAT_1401b42cf != '\0') { pplVar25 = (longlong **)*param_1; (*(code *)pplVar25[0x19])(param_1); } if (param_2 == 0) { FUN_140063e10((longlong)param_3,(longlong)(param_1 + 0x309),pplVar25,lVar28); FUN_14006b3e0((longlong)piVar6); } else { if (*(int *)(param_3 + 3) == 0) { local_fc = *(int *)(param_3 + 3); FUN_140063f80((longlong)param_3,1,pplVar25,lVar28); puVar7 = (undefined4 *)FUN_140008250((longlong)param_3); *puVar7 = 0; } local_138 = param_1 + 0xd9; plVar20 = (longlong *)0x0; FUN_14008a140((longlong)local_138,0); local_130 = param_1 + 0xde; FUN_14008c670((char *)local_130); local_res10 = 0; local_148 = 0; if (0 < *(int *)(param_3 + 3)) { do { lVar11 = local_148; plVar16 = (longlong *)0x180; plVar8 = (longlong *)FUN_14006cbf0(0x180); local_150 = plVar8; if (plVar8 == (longlong *)0x0) { puVar9 = (undefined8 *)0x0; } else { plVar20 = param_1; puVar9 = FUN_1400d96c0(plVar8,(longlong)param_1,pplVar25,lVar28); plVar16 = plVar8; } if (puVar9 == (undefined8 *)0x0) { plVar8 = (longlong *)0x0; } else { plVar16 = (longlong *)0x10; plVar8 = (longlong *)FUN_14006cbf0(0x10); plVar8[1] = 1; *plVar8 = (longlong)puVar9; } lVar24 = 0; local_150 = plVar8; if ((lVar11 < 0) || (*(int *)(param_3 + 3) <= local_res10)) { /* WARNING: Subroutine does not return */ FUN_14006be30(plVar16,plVar20,pplVar25,lVar28); } uVar4 = *(uint *)((longlong)param_3[2] + lVar11 * 4); pcVar19 = (char *)param_1[0x43]; lVar30 = lVar24; local_100 = uVar4; if (((pcVar19 == (char *)0x0) || (pcVar19 == PTR_DAT_1401ac008)) || (*(int *)(pcVar19 + -8) == 0)) { lVar12 = lVar24; if (plVar8 != (longlong *)0x0) { lVar12 = *plVar8; } if (*(longlong **)(lVar12 + 0x150) != (longlong *)0x0) { lVar30 = **(longlong **)(lVar12 + 0x150); } pcVar19 = (char *)(ulonglong)uVar4; uVar3 = FUN_140073ab0(lVar30,(short)uVar4,pplVar25,lVar28); cVar2 = (char)uVar3; } else { lVar12 = lVar24; if (plVar8 != (longlong *)0x0) { lVar12 = *plVar8; } if (*(longlong **)(lVar12 + 0x150) != (longlong *)0x0) { lVar30 = **(longlong **)(lVar12 + 0x150); } pplVar25 = (longlong **)(ulonglong)uVar4; uVar10 = FUN_140073b00(lVar30,pcVar19,(short)uVar4,lVar28); cVar2 = (char)uVar10; } if (cVar2 == '\0') { if (*(char *)((longlong)param_1 + 0x255) == '\0') { FUN_14006cb70(lVar30,pcVar19,pplVar25,lVar28); local_158 = (uint *)PTR_DAT_1401ac010; uVar4 = FUN_14006c9f0(&DAT_14015cd00); uVar5 = 0; uVar26 = 0; if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar26 = (ulonglong)local_158[-2]; } uVar27 = uVar4; if ((((int)uVar4 <= (int)uVar26) && (uVar27 = uVar5, local_158 != (uint *)0x0)) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar27 = local_158[-2]; } uVar23 = 1; if (1 < (int)uVar27) { uVar23 = uVar27; } uVar27 = uVar5; if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar27 = local_158[-2]; } if ((int)uVar27 < (int)uVar23) { if (local_158 == (uint *)0x0) { local_158 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar23 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar23 == 0) { FUN_1400031e0((longlong *)&local_158,PTR_DAT_1401ac010,uVar26,lVar28); } else { uVar27 = uVar5; if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar27 = local_158[-2]; } if (uVar23 != uVar27) { puVar13 = (uint *)FUN_14006cbf0((longlong)(int)uVar23 * 2 + 10); if (puVar13 != (uint *)0x0) { *puVar13 = 0; puVar13[1] = 1; } *puVar13 = uVar23; uVar27 = uVar5; if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar27 = local_158[-2]; } puVar21 = (uint *)PTR_DAT_1401ac010; if ((int)uVar23 < (int)uVar27) { LAB_1400901d3: if (local_158 != (uint *)0x0) { puVar21 = local_158; } } else { uVar23 = uVar5; if (local_158 != (uint *)0x0) { if (local_158 != (uint *)PTR_DAT_1401ac010) { uVar23 = local_158[-2]; } goto LAB_1400901d3; } } uVar26 = (ulonglong)uVar23; FUN_14006ca20(puVar13 + 2,puVar21,uVar23); FUN_1400031e0((longlong *)&local_158,puVar21,uVar26,lVar28); local_158 = puVar13 + 2; } } } FUN_140002e40((longlong *)&local_158); puVar13 = local_158; if (local_158 == (uint *)0x0) { puVar13 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar13,&DAT_14015cd00,uVar4); puVar13 = local_158; if (local_158 == (uint *)0x0) { puVar13 = (uint *)PTR_DAT_1401ac010; } uVar5 = FUN_14006c9f0((short *)puVar13); uVar27 = 0; uVar4 = 0; if (0 < (int)uVar5) { uVar4 = uVar5; } uVar5 = uVar27; if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) { uVar5 = local_158[-2]; } if (((int)uVar5 <= (int)uVar4) && (uVar4 = uVar27, local_158 != (uint *)0x0)) { if (local_158 == (uint *)PTR_DAT_1401ac010) goto LAB_140090290; uVar4 = local_158[-2]; } if (((local_158 != (uint *)PTR_DAT_1401ac010) && (local_158 != (uint *)0x0)) && (local_158 + -2 != (uint *)0x0)) { local_158[-2] = uVar4; *(undefined2 *)((longlong)local_158 + (longlong)(int)uVar4 * 2) = 0; } LAB_140090290: local_f0 = 0; local_e8 = 0; local_e0 = 0; local_d8 = 0; local_f8 = Proud::ByteArray::vftable; ppuVar29 = &local_158; uVar10 = 1; puVar14 = (ulonglong *) FUN_140078c10((longlong *)&local_140,0x10,1,(longlong *)ppuVar29, (longlong)&local_f8); FUN_140078ae0(param_5,puVar14,uVar10,ppuVar29); piVar6 = local_140; if (local_140 != (int *)0x0) { local_110 = local_140; FUN_14006b350(local_140); local_108 = 1; *(longlong *)(local_140 + 0x10) = *(longlong *)(local_140 + 0x10) + -1; if (*(longlong *)(local_140 + 0x10) == 0) { FUN_14006b3e0((longlong)piVar6); local_108 = 0; FUN_1400640e0(local_140,puVar14,uVar10,ppuVar29); } else { FUN_14006b3e0((longlong)piVar6); local_108 = 0; } } pppuVar18 = &local_f8; FUN_140078360(pppuVar18); puVar13 = local_158; if (((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) && (puVar21 = local_158 + -2, puVar21 != (uint *)0x0)) { piVar6 = (int *)FUN_14006cb70(pppuVar18,puVar14,uVar10,ppuVar29); local_c0 = piVar6; FUN_14006b350(piVar6); local_b8 = 1; puVar13 = puVar13 + -1; *puVar13 = *puVar13 - 1; if (*puVar13 == 0) { FUN_14006cc60(puVar21); } FUN_14006b3e0((longlong)piVar6); local_b8 = 0; } local_158 = (uint *)PTR_DAT_1401ac010; FUN_14008a140((longlong)local_138,0); FUN_14008c670((char *)local_130); plVar20 = local_150; if (plVar8 != (longlong *)0x0) { plVar8 = plVar8 + 1; *plVar8 = *plVar8 + -1; if (*plVar8 == 0) { puVar9 = (undefined8 *)*local_150; if (puVar9 != (undefined8 *)0x0) { (**(code **)*puVar9)(puVar9,1); } FUN_14006cc60(plVar20); } } FUN_14006b3e0((longlong)local_120); ppuVar15 = Proud::CFastArray::vftable; *param_3 = (longlong *)Proud::CFastArray::vftable; if (param_3[2] != (longlong *)0x0) { if (param_3[1] == (longlong *)0x0) { ppuVar15 = (undefined **)FUN_14006cc60(param_3[2]); } else { ppuVar15 = (undefined **)(**(code **)(*param_3[1] + 0x18))(); } } return (ulonglong)ppuVar15 & 0xffffffffffffff00; } iVar1 = *(int *)(param_4 + 0x18); if (iVar1 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } iVar22 = *(int *)(param_4 + 0x18); uVar5 = iVar22 + 1; plVar20 = (longlong *)(ulonglong)uVar5; FUN_140063f80(param_4,uVar5,pplVar25,lVar28); iVar22 = iVar22 - iVar1; if ((0 < iVar22) && (iVar22 = iVar22 + -1, lVar24 = (longlong)iVar22, -1 < iVar22)) { lVar30 = (iVar1 + lVar24) * 4 + 4; do { lVar11 = FUN_140008250(param_4); lVar12 = FUN_140008250(param_4); *(undefined4 *)(lVar12 + lVar30) = *(undefined4 *)(lVar11 + -4 + lVar30); lVar30 = lVar30 + -4; lVar24 = lVar24 + -1; lVar11 = local_148; } while (-1 < lVar24); } lVar24 = FUN_140008250(param_4); plVar16 = local_150; *(uint *)(lVar24 + (longlong)iVar1 * 4) = uVar4; if (plVar8 != (longlong *)0x0) { plVar8 = plVar8 + 1; *plVar8 = *plVar8 + -1; if (*plVar8 == 0) { if ((undefined8 *)*local_150 != (undefined8 *)0x0) { plVar20 = (longlong *)0x1; (*(code *)**(undefined8 **)*local_150)(); } FUN_14006cc60(plVar16); } } } else { lVar11 = lVar24; if (plVar8 != (longlong *)0x0) { lVar11 = *plVar8; } lVar30 = lVar24; if (*(longlong **)(lVar11 + 0x150) != (longlong *)0x0) { lVar30 = **(longlong **)(lVar11 + 0x150); } if (plVar8 != (longlong *)0x0) { lVar24 = *plVar8; } puVar9 = FUN_140071560(lVar30,local_a8); *(undefined4 *)(lVar24 + 0x160) = *(undefined4 *)(puVar9 + 1); *(undefined2 *)(lVar24 + 0x164) = *(undefined2 *)((longlong)puVar9 + 0xc); if (plVar8 == (longlong *)0x0) { lVar11 = 0; } else { lVar11 = *plVar8; } if (*(short *)(lVar11 + 0x164) == 0) { LAB_14009042d: FUN_14006ba50(local_98,L"m_cachedLocalAddr has an unexpected value!",pplVar25,lVar28); /* WARNING: Subroutine does not return */ _CxxThrowException(local_98,(ThrowInfo *)&DAT_1401a93e8); } if (plVar8 == (longlong *)0x0) { lVar11 = 0; } else { lVar11 = *plVar8; } if (*(short *)(lVar11 + 0x164) == -1) goto LAB_14009042d; iVar1 = (int)local_138[3]; if (iVar1 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } lVar11 = local_138[3]; FUN_14008a140((longlong)local_138,(int)lVar11 + 1); plVar20 = local_138; iVar22 = (int)lVar11 - iVar1; if ((0 < iVar22) && (iVar22 = iVar22 + -1, -1 < iVar22)) { lVar11 = (longlong)(iVar22 + iVar1 + 1) << 3; lVar24 = (longlong)(iVar22 + iVar1) << 3; do { lVar30 = FUN_14007a110((longlong)plVar20); lVar12 = FUN_14007a110((longlong)plVar20); FUN_1400a2a80((longlong *)(lVar11 + lVar12),(longlong *)(lVar24 + lVar30)); lVar24 = lVar24 + -8; lVar11 = lVar11 + -8; iVar22 = iVar22 + -1; } while (-1 < iVar22); } lVar11 = FUN_14007a110((longlong)local_138); FUN_1400a2a80((longlong *)(lVar11 + (longlong)iVar1 * 8),(longlong *)&local_150); plVar16 = (longlong *)0x0; plVar20 = plVar16; if (plVar8 != (longlong *)0x0) { plVar20 = (longlong *)*plVar8; } pplVar25 = &local_150; FUN_14008f8a0((char *)local_130,(longlong)(plVar20 + 0x2b),(longlong *)pplVar25); plVar20 = plVar16; if (plVar8 != (longlong *)0x0) { plVar20 = (longlong *)*plVar8; } plVar17 = plVar16; if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) { plVar17 = *(longlong **)plVar20[0x2a]; } FUN_1400716c0((longlong)plVar17,plVar20,pplVar25,lVar28); plVar20 = plVar16; if (plVar8 != (longlong *)0x0) { plVar20 = (longlong *)*plVar8; } plVar17 = plVar16; if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) { plVar17 = *(longlong **)plVar20[0x2a]; } FUN_1400765b0(param_1[0xf1],plVar17,(longlong *)pplVar25,lVar28); plVar20 = plVar16; if (plVar8 != (longlong *)0x0) { plVar20 = (longlong *)*plVar8; } plVar17 = plVar16; if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) { plVar17 = *(longlong **)plVar20[0x2a]; } FUN_1400dafe0((longlong)plVar17); if ((plVar8 == (longlong *)0x0) || (plVar20 = (longlong *)(*plVar8 + 0x40), *plVar8 == 0)) { plVar20 = plVar16; } FUN_1400d8980(&local_128,(longlong)plVar20); plVar17 = plVar16; if (plVar8 != (longlong *)0x0) { plVar17 = (longlong *)*plVar8; } plVar17 = plVar17 + 0x15; local_d0 = plVar17; FUN_14006b350((int *)plVar17); local_c8 = 1; if (plVar8 != (longlong *)0x0) { plVar16 = (longlong *)*plVar8; } FUN_1400d8bf0((longlong)plVar16,plVar20,(undefined **)pplVar25,lVar28); FUN_14006b3e0((longlong)plVar17); local_c8 = 0; FUN_1400d8990(&local_128); plVar16 = local_150; lVar11 = local_148; if (plVar8 != (longlong *)0x0) { plVar8 = plVar8 + 1; *plVar8 = *plVar8 + -1; if (*plVar8 == 0) { if ((undefined8 *)*local_150 != (undefined8 *)0x0) { plVar20 = (longlong *)0x1; (*(code *)**(undefined8 **)*local_150)(); } FUN_14006cc60(plVar16); lVar11 = local_148; } } } local_res10 = local_res10 + 1; local_148 = lVar11 + 1; piVar6 = local_120; } while (local_res10 < *(int *)(param_3 + 3)); } FUN_14006b3e0((longlong)piVar6); } ppuVar15 = Proud::CFastArray::vftable; *param_3 = (longlong *)Proud::CFastArray::vftable; if (param_3[2] != (longlong *)0x0) { if (param_3[1] == (longlong *)0x0) { ppuVar15 = (undefined **)FUN_14006cc60(param_3[2]); } else { ppuVar15 = (undefined **)(**(code **)(*param_3[1] + 0x18))(); } } return CONCAT71((int7)((ulonglong)ppuVar15 >> 8),1); }