/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401de850 FUN_1401de850 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x0001401dea12) */ /* WARNING: Removing unreachable block (ram,0x0001401dea24) */ /* WARNING: Removing unreachable block (ram,0x0001401dea3f) */ /* WARNING: Removing unreachable block (ram,0x0001401dea47) */ /* WARNING: Removing unreachable block (ram,0x0001401dea51) */ undefined8 FUN_1401de850(longlong param_1,undefined8 param_2,undefined8 param_3,uint *param_4,uint *param_5) { uint *puVar1; longlong lVar2; void *pvVar3; undefined8 *puVar4; ulonglong uVar5; longlong lVar6; longlong *local_res8; longlong *local_res20; undefined4 local_138 [2]; undefined8 local_130 [2]; undefined8 local_120; undefined8 local_118; undefined **local_110; undefined8 local_108; undefined8 local_100; undefined8 local_f8; undefined8 local_f0; undefined8 local_e8; longlong local_e0; ulonglong local_d8; uint local_d0; uint local_cc; uint local_c8; undefined **local_c0; undefined8 local_b8; undefined8 local_b0; undefined8 local_a8; undefined8 local_a0; undefined4 local_98; undefined **local_90; undefined4 local_88; undefined2 local_84; undefined **local_78; undefined8 local_70; undefined8 local_68; undefined8 local_60; undefined8 local_58; undefined8 local_48; undefined1 local_40; undefined8 *local_38; undefined8 local_30; local_30 = 0xfffffffffffffffe; local_48 = (**(code **)(**(longlong **)(param_1 + 0x20) + 0x58))(); FUN_14016db50(local_48); local_40 = 1; lVar6 = *(longlong *)(param_1 + 0x20); if ((*(char *)(lVar6 + 0x1790) != '\0') || (*(int *)(lVar6 + 0x6c8) != 0)) { FUN_1401d4c70(lVar6,1,&DAT_140290b00,*(undefined4 *)(lVar6 + 0x1578),*param_4,*param_5); } FUN_1401d2620(*(undefined8 *)(param_1 + 0x20),&local_res20,*param_4); FUN_1401d8f20(*(undefined8 *)(param_1 + 0x20),&local_res8,*param_5); if ((local_res8 != (longlong *)0x0) && (lVar6 = *local_res8, lVar6 != 0)) { uVar5 = (ulonglong)*param_4 % (ulonglong)*(uint *)(lVar6 + 0x30); if (*(longlong *)(lVar6 + 0x10) != 0) { puVar1 = *(uint **)(*(longlong *)(lVar6 + 0x10) + uVar5 * 8); while( true ) { if ((puVar1 == (uint *)0x0) || ((uint)uVar5 != puVar1[8] % *(uint *)(lVar6 + 0x30))) goto LAB_1401de96f; if (*puVar1 == *param_4) break; puVar1 = *(uint **)(puVar1 + 4); } FUN_140174c00(lVar6 + 8,puVar1,0); } } LAB_1401de96f: lVar6 = 0; if ((local_res20 != (longlong *)0x0) && (lVar2 = *local_res20, lVar2 != 0)) { uVar5 = (ulonglong)*param_5 % (ulonglong)*(uint *)(lVar2 + 0x5d8); if (*(longlong *)(lVar2 + 0x5b8) != 0) { puVar1 = *(uint **)(*(longlong *)(lVar2 + 0x5b8) + uVar5 * 8); while( true ) { if ((puVar1 == (uint *)0x0) || ((uint)uVar5 != puVar1[8] % *(uint *)(lVar2 + 0x5d8))) goto LAB_1401de9f3; if (*puVar1 == *param_5) break; puVar1 = *(uint **)(puVar1 + 4); } FUN_1401d9df0(lVar2 + 0x5b0,puVar1,0); } LAB_1401de9f3: if (local_res20 != (longlong *)0x0) { local_res20[1] = local_res20[1] + 1; } FUN_1401d9340(*(undefined8 *)(param_1 + 0x20)); if (local_res20 != (longlong *)0x0) { lVar6 = *local_res20; } *(int *)(lVar6 + 0x680) = *(int *)(lVar6 + 0x680) + 1; } lVar6 = *(longlong *)(param_1 + 0x20); if (*param_4 == *(uint *)(lVar6 + 0x1578)) { uVar5 = (ulonglong)*param_5 % (ulonglong)*(uint *)(lVar6 + 0x608); if (*(longlong *)(lVar6 + 0x5e8) != 0) { puVar1 = *(uint **)(*(longlong *)(lVar6 + 0x5e8) + uVar5 * 8); while( true ) { if ((puVar1 == (uint *)0x0) || ((uint)uVar5 != puVar1[8] % *(uint *)(lVar6 + 0x608))) goto LAB_1401deaf0; if (*puVar1 == *param_5) break; puVar1 = *(uint **)(puVar1 + 4); } FUN_1401d9df0(lVar6 + 0x5e0,puVar1,0); } } LAB_1401deaf0: local_130[0] = 0; local_120 = 0; local_118 = 0; local_108 = 0; local_100 = 0; local_f8 = 0; local_f0 = 0; local_110 = Proud::ByteArray::vftable; local_d8 = 0; local_e0 = 0; local_e8 = 0; local_b8 = 0; local_b0 = 0; local_a8 = 0; local_a0 = 0; local_c0 = Proud::ByteArray::vftable; local_90 = Proud::AddrPort::vftable; local_88 = 0; local_84 = 0; local_70 = 0; local_68 = 0; local_60 = 0; local_58 = 0; local_78 = Proud::ByteArray::vftable; local_138[0] = 9; local_cc = *param_4; local_d0 = *param_5; if ((local_res8 == (longlong *)0x0) || (*local_res8 == 0)) { local_98 = 0; } else { local_98 = (undefined4)*(undefined8 *)(*local_res8 + 0x28); } local_c8 = local_cc; FUN_1401dcb50(*(undefined8 *)(param_1 + 0x20),local_138); FUN_14019a9e0(&local_78); FUN_14019a9e0(&local_c0); local_38 = &local_e8; FUN_14016d0e0(&local_e8); if (local_e0 != 0) { if ((longlong)local_d8 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_d8 = local_d8 & 0xffffffff00000000; } FUN_14019a9e0(&local_110); FUN_14018b600(&local_118); FUN_14018b580(&local_120); FUN_140154b00(local_130); if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) { pvVar3 = (void *)*local_res8; if (pvVar3 != (void *)0x0) { FUN_1401c9600((longlong)pvVar3 + 8); operator_delete(pvVar3); } FUN_14016d970(local_res8); } if ((local_res20 != (longlong *)0x0) && (local_res20[1] = local_res20[1] + -1, local_res20[1] == 0)) { puVar4 = (undefined8 *)*local_res20; if (puVar4 != (undefined8 *)0x0) { (**(code **)*puVar4)(puVar4,1); } FUN_14016d970(local_res20); } FUN_14016dbe0(local_48); return 1; }