/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14004a750 FUN_14004a750 * Pseudocode, not original source. */ undefined8 FUN_14004a750(longlong param_1,uint param_2,short *param_3,int *param_4,longlong *param_5) { undefined *puVar1; undefined *puVar2; int *piVar3; int *piVar4; int *piVar5; longlong lVar6; longlong *plVar7; longlong lVar8; undefined8 *puVar9; undefined **ppuVar10; longlong *plVar11; undefined8 uVar12; ulonglong uVar13; wchar_t *pwVar14; int *piVar15; undefined *puVar16; undefined *local_res8; undefined *local_res20; undefined *local_118; undefined *local_110; undefined *local_108; int *local_100; undefined1 local_f8; undefined8 local_e8; undefined8 local_e0; undefined8 local_d8; undefined8 local_d0; undefined8 local_c8; undefined8 local_c0; undefined8 local_b8; undefined8 local_b0; ulonglong local_a8; undefined8 local_a0; undefined4 local_98; int *local_88; undefined1 local_80; int *local_78; undefined1 local_70; int *local_68; undefined1 local_60; int *local_58; undefined1 local_50; int *local_48; undefined1 local_40; undefined8 local_38; local_38 = 0xfffffffffffffffe; piVar15 = param_4; piVar3 = (int *)(**(code **)(**(longlong **)(param_1 + 0x20) + 0x58))(); local_100 = piVar3; FUN_14002e6e0(piVar3); local_f8 = 1; if (DAT_14015bfcf != '\0') { param_3 = (short *)**(longlong **)(param_1 + 0x20); (**(code **)(param_3 + 100)) (*(longlong **)(param_1 + 0x20), L"Proud::CNetServerImpl::C2SStub::NotifyLogHolepunchFreqFail"); } local_a8 = 0; local_e0 = 0; local_e8 = 0; local_d0 = 0; local_d8 = 0; local_b0 = 0; local_b8 = 0; local_c0 = 0; local_c8 = 0; local_a0 = 0; local_98 = 0; plVar7 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0xa8); puVar9 = &local_e8; (**(code **)(*plVar7 + 0xb0))(); if (*(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0) != 0) { FUN_140030200(plVar7,puVar9,param_3,piVar15); local_res8 = PTR_DAT_140155010; piVar15 = (int *)(local_a8 >> 0x20); FUN_14001b7a0((longlong *)&local_res8,L"[Client %d] Pair=%d/%d##CCU=%d##",(ulonglong)param_2, piVar15); plVar7 = FUN_140043f80((longlong *)&local_108,(longlong *)&local_res8,param_5,piVar15); param_3 = (short *)*plVar7; if ((short *)*plVar7 == (short *)0x0) { param_3 = (short *)PTR_DAT_140155010; } uVar12 = 2; piVar4 = *(int **)(*(longlong *)(param_1 + 0x20) + 0x17f0); FUN_14008f2e0((longlong)piVar4,2,param_3,piVar15); if (((local_108 != (undefined *)0x0) && (local_108 != PTR_DAT_140155010)) && (local_108 + -8 != (undefined *)0x0)) { piVar4 = (int *)FUN_140030200(piVar4,uVar12,param_3,piVar15); local_88 = piVar4; FUN_14002e6e0(piVar4); local_80 = 1; piVar5 = (int *)(local_108 + -4); *piVar5 = *piVar5 + -1; if (*piVar5 == 0) { FUN_1400302f0(local_108 + -8); } FUN_14002e770((longlong)piVar4); } puVar16 = local_res8; if (((local_res8 != (undefined *)0x0) && (local_res8 != PTR_DAT_140155010)) && (puVar1 = local_res8 + -8, puVar1 != (undefined *)0x0)) { piVar5 = (int *)FUN_140030200(piVar4,uVar12,param_3,piVar15); local_68 = piVar5; FUN_14002e6e0(piVar5); local_60 = 1; piVar4 = (int *)(puVar16 + -4); *piVar4 = *piVar4 + -1; if (*piVar4 == 0) { FUN_1400302f0(puVar1); } FUN_14002e770((longlong)piVar5); } } lVar8 = *(longlong *)(param_1 + 0x20); if (*(int *)(lVar8 + 0x1804) < *param_4) { uVar13 = (ulonglong)param_2; lVar6 = FUN_140041ab0(lVar8,param_2); if (lVar6 != 0) { FUN_140030200(lVar8,uVar13,param_3,piVar15); local_res20 = PTR_DAT_140155010; puVar9 = (undefined8 *)(*(longlong *)(lVar6 + 0x748) + 0x128); plVar7 = (longlong *)(**(code **)*puVar9)(puVar9,&local_110); puVar16 = (undefined *)*plVar7; if ((undefined *)*plVar7 == (undefined *)0x0) { puVar16 = PTR_DAT_140155010; } uVar13 = (ulonglong)param_2; pwVar14 = L"[Client %d %s] Pair=%d/%d##CCU=%d"; ppuVar10 = &local_res20; FUN_14001b7a0((longlong *)ppuVar10,L"[Client %d %s] Pair=%d/%d##CCU=%d",uVar13,puVar16); if (((local_110 != (undefined *)0x0) && (local_110 != PTR_DAT_140155010)) && (local_110 + -8 != (undefined *)0x0)) { piVar3 = (int *)FUN_140030200(ppuVar10,pwVar14,uVar13,puVar16); local_48 = piVar3; FUN_14002e6e0(piVar3); local_40 = 1; piVar15 = (int *)(local_110 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(local_110 + -8); } FUN_14002e770((longlong)piVar3); } *(int *)(*(longlong *)(param_1 + 0x20) + 0x1804) = *param_4; plVar7 = FUN_140043f80((longlong *)&local_118,(longlong *)&local_res20,param_5,puVar16); plVar11 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x1808); FUN_140003170(plVar11,plVar7,param_5,puVar16); if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_140155010)) && (local_118 + -8 != (undefined *)0x0)) { piVar3 = (int *)FUN_140030200(plVar11,plVar7,param_5,puVar16); local_78 = piVar3; FUN_14002e6e0(piVar3); local_70 = 1; piVar15 = (int *)(local_118 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(local_118 + -8); } FUN_14002e770((longlong)piVar3); } puVar1 = local_res20; lVar8 = *(longlong *)(param_1 + 0x20); LOCK(); *(undefined4 *)(lVar8 + 0x1840) = 1; UNLOCK(); piVar3 = local_100; if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_140155010)) && (puVar2 = local_res20 + -8, puVar2 != (undefined *)0x0)) { piVar3 = (int *)FUN_140030200(lVar8,plVar7,param_5,puVar16); local_58 = piVar3; FUN_14002e6e0(piVar3); local_50 = 1; piVar15 = (int *)(puVar1 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(puVar2); } FUN_14002e770((longlong)piVar3); piVar3 = local_100; } } } uVar12 = FUN_14002e770((longlong)piVar3); return CONCAT71((int7)((ulonglong)uVar12 >> 8),1); }