/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a2700 FUN_1401a2700 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ undefined8 FUN_1401a2700(longlong param_1,longlong param_2,uint *param_3,uint param_4) { uint uVar1; longlong lVar2; undefined8 *puVar3; longlong *plVar4; longlong lVar5; longlong *plVar6; bool bVar7; undefined4 uVar8; undefined2 uVar9; char cVar10; int iVar11; longlong lVar12; undefined8 *puVar13; undefined8 *puVar14; undefined8 uVar15; ulonglong uVar16; ulonglong uVar17; longlong *plVar18; double dVar19; double dVar20; undefined1 auStack_2a8 [32]; uint local_288; undefined4 local_280; uint local_278 [2]; undefined8 local_270; undefined4 local_268; undefined4 uStack_264; undefined4 local_260; undefined2 local_25c; ulonglong local_258; undefined4 local_250; undefined **local_248; undefined4 local_240; undefined2 local_23c; int local_238; uint local_234; longlong local_230; undefined8 local_228; undefined8 local_220; undefined4 local_218; undefined8 local_210; undefined4 local_208; undefined **local_200; undefined4 local_1f8; undefined2 local_1f4; longlong local_1f0; uint *local_1e8; longlong local_1e0; longlong local_1d8; undefined1 local_1d0; undefined8 local_1c8; longlong local_1b8 [3]; undefined4 auStack_1a0 [74]; ulonglong local_78; local_1c8 = 0xfffffffffffffffe; local_78 = DAT_1403463c0 ^ (ulonglong)auStack_2a8; if (9 < *(uint *)(param_2 + 0x18)) { local_234 = param_4; local_1f0 = param_2; local_1e8 = param_3; if (*(longlong *)(param_1 + 0x28) == 0) { SetLastError(0); dVar19 = (double)FUN_1401a1eb0(param_1); local_278[0] = 0; *param_3 = 0; local_230 = param_1 + 0x50; plVar18 = (longlong *)(param_1 + 0x38); do { local_1d8 = param_1 + 0x50; FUN_14016db50(local_1d8); local_1d0 = 1; local_238 = *(int *)(param_1 + 0x48) * 3 + 3; puVar13 = (undefined8 *)*plVar18; local_268 = 0x402776a0; uStack_264 = 1; local_258 = local_258 & 0xffffffff00000000; local_270 = 0; puVar3 = puVar13; local_260 = DAT_140344450; local_25c = DAT_140344454; do { if (puVar3 == (undefined8 *)0x0) break; local_200 = Proud::AddrPort::vftable; local_228 = 0; local_210 = 0; local_220 = 0; local_218 = 5; local_208 = 0; local_1f8 = DAT_140344450; local_1f4 = DAT_140344454; cVar10 = FUN_14019c560(puVar3,0,&local_270); if (cVar10 == '\0') { cVar10 = FUN_14019c2f0(puVar3,0,&local_270); if (cVar10 != '\0') { local_218 = 2; local_208 = *(undefined4 *)((longlong)puVar3 + 0x304); FUN_14016f840(&local_200); puVar14 = puVar3 + 0x30; goto LAB_1401a2b38; } cVar10 = FUN_14019c3c0(puVar3,0,&local_270); if (cVar10 != '\0') { local_218 = 3; puVar14 = puVar3 + 0x18; goto LAB_1401a2b38; } cVar10 = FUN_14019c490(puVar3,0,&local_270); if (cVar10 != '\0') { local_218 = 4; puVar14 = puVar3 + 0x68; goto LAB_1401a2b38; } } else { local_218 = 1; puVar14 = puVar3 + 0x48; LAB_1401a2b38: FUN_14019bbb0(puVar14,0,0); local_228 = puVar3[0x5d]; local_220 = CONCAT44((int)((ulonglong)local_270 >> 0x20),(undefined4)local_258); if (puVar3[2] != 0) { FUN_14019c130(); } if (puVar3[2] != 0) { FUN_14019c130(plVar18); } if (*(longlong *)(param_1 + 0x40) == 0) { *plVar18 = (longlong)puVar3; } else { *(undefined8 **)(*(longlong *)(param_1 + 0x40) + 8) = puVar3; *puVar3 = *(undefined8 *)(param_1 + 0x40); } *(undefined8 **)(param_1 + 0x40) = puVar3; puVar3[2] = plVar18; *(int *)(param_1 + 0x48) = *(int *)(param_1 + 0x48) + 1; uVar1 = *param_3; if (((int)uVar1 < 0) || (*(int *)(param_2 + 0x18) <= (int)uVar1)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar14 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(param_2 + 0x10)); *puVar14 = local_228; *(undefined4 *)(puVar14 + 1) = (undefined4)local_220; *(undefined4 *)((longlong)puVar14 + 0xc) = local_220._4_4_; *(undefined4 *)(puVar14 + 2) = local_218; puVar14[3] = local_210; *(undefined4 *)(puVar14 + 4) = local_208; *(undefined4 *)(puVar14 + 6) = local_1f8; *(undefined2 *)((longlong)puVar14 + 0x34) = local_1f4; *param_3 = *param_3 + 1; if (9 < *param_3) goto LAB_1401a2db3; } puVar3 = (undefined8 *)puVar3[1]; } while (puVar3 != puVar13); lVar12 = *(longlong *)(param_1 + 0xa0); uVar8 = DAT_140344450; uVar9 = DAT_140344454; while (DAT_140344450 = uVar8, DAT_140344454 = uVar9, lVar12 != 0) { plVar4 = *(longlong **)(param_1 + 0x90); if (plVar4 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } lVar12 = plVar4[2]; lVar2 = plVar4[3]; local_1e0 = plVar4[4]; lVar5 = *plVar4; *(longlong *)(param_1 + 0x90) = lVar5; if (lVar5 == 0) { *(undefined8 *)(param_1 + 0x98) = 0; } else { *(undefined8 *)(lVar5 + 8) = 0; } plVar6 = *(longlong **)(param_1 + 0x88); if (plVar6 == (longlong *)0x0) { FUN_14016d970(); } else { (**(code **)(*plVar6 + 0x10))(plVar6,plVar4); } *(longlong *)(param_1 + 0xa0) = *(longlong *)(param_1 + 0xa0) + -1; uVar15 = 0; if (lVar12 != 0) { uVar15 = *(undefined8 *)(lVar12 + 0x2e8); } uVar1 = *local_1e8; if (((int)uVar1 < 0) || (*(int *)(local_1f0 + 0x18) <= (int)uVar1)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar13 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(local_1f0 + 0x10)); *puVar13 = uVar15; puVar13[1] = 0; *(int *)(puVar13 + 2) = (int)local_1e0; puVar13[3] = lVar2; *(undefined4 *)(puVar13 + 4) = 0; *(undefined4 *)(puVar13 + 6) = uVar8; *(undefined2 *)((longlong)puVar13 + 0x34) = uVar9; *local_1e8 = *local_1e8 + 1; if (9 < *local_1e8) goto LAB_1401a2db3; param_3 = local_1e8; param_2 = local_1f0; uVar8 = DAT_140344450; uVar9 = DAT_140344454; lVar12 = *(longlong *)(param_1 + 0xa0); } if (*param_3 != 0) { LAB_1401a2db3: FUN_14016dbe0(local_230); return 1; } FUN_14016dbe0(param_1 + 0x50); local_1d0 = 0; uVar16 = (ulonglong)local_234; if ((local_234 == 0) || ((local_234 != 0xffffffff && (dVar20 = (double)FUN_1401a1eb0(param_1), (double)uVar16 < (dVar20 - dVar19) * 1000.0))) ) { return 0; } bVar7 = local_238 <= (int)local_278[0]; if (bVar7) { local_278[0] = 0; } else { local_278[0] = local_278[0] + 1; } Sleep((uint)bVar7); } while( true ); } uVar16 = 0; local_278[0] = 0; SetLastError(0); lVar12 = FUN_14016f040(); local_280 = 0; local_288 = param_4; iVar11 = (**(code **)(lVar12 + 0x20))(*(undefined8 *)(param_1 + 0x28),local_1b8,10,local_278); if (iVar11 == 0) { GetLastError(); } else if (local_278[0] != 0) { *param_3 = local_278[0]; plVar18 = local_1b8 + 1; uVar17 = uVar16; do { local_248 = Proud::AddrPort::vftable; local_270 = 0; local_258 = 0; local_268 = 0; uStack_264 = 0; local_260 = 5; local_250 = 0; local_240 = DAT_140344450; local_23c = DAT_140344454; lVar12 = *plVar18; iVar11 = (int)uVar17; if (lVar12 == 0) { uStack_264 = 0xffffffff; if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar12 = *(longlong *)(param_2 + 0x10); *(undefined8 *)(uVar16 + lVar12) = 0; } else { lVar2 = plVar18[-1]; if (lVar2 == 0) { local_270 = 0; } else { local_270 = *(undefined8 *)(lVar2 + 0x2e8); } if (lVar12 < 0) { local_268 = (undefined4)plVar18[2]; uStack_264 = 0; local_260 = 0; local_250 = 0; if ((iVar11 < 0) || (local_258 = lVar12, *(int *)(param_2 + 0x18) <= iVar11)) { local_258 = lVar12; /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } } else { if (lVar2 == 0) { LAB_1401a2935: local_260 = 0; local_258 = lVar12; } else if (lVar12 == lVar2 + 0x180) { local_260 = 2; local_250 = *(undefined4 *)(lVar2 + 0x304); FUN_14016f840(&local_248,lVar2 + 0x2f0); FUN_14019bbb0(lVar2 + 0x180,0,0); } else if (lVar12 == lVar2 + 0x240) { local_260 = 1; FUN_14019bbb0(lVar2 + 0x240,0,0); } else if (lVar12 == lVar2 + 0xc0) { local_260 = 3; FUN_14019bbb0(lVar2 + 0xc0,0,0); } else { if (lVar12 != lVar2 + 0x340) goto LAB_1401a2935; local_260 = 4; FUN_14019bbb0(lVar2 + 0x340,0,0); } local_268 = (undefined4)plVar18[2]; uStack_264 = 0; if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } } uStack_264 = 0; lVar12 = *(longlong *)(param_2 + 0x10); *(undefined8 *)(uVar16 + lVar12) = local_270; } *(undefined4 *)(uVar16 + 8 + lVar12) = local_268; *(undefined4 *)(uVar16 + 0xc + lVar12) = uStack_264; *(undefined4 *)(uVar16 + 0x10 + lVar12) = local_260; *(ulonglong *)(uVar16 + 0x18 + lVar12) = local_258; *(undefined4 *)(uVar16 + 0x20 + lVar12) = local_250; *(undefined4 *)(uVar16 + 0x30 + lVar12) = local_240; *(undefined2 *)(uVar16 + 0x34 + lVar12) = local_23c; uVar17 = (ulonglong)(iVar11 + 1U); plVar18 = plVar18 + 4; uVar16 = uVar16 + 0x38; if (local_278[0] <= iVar11 + 1U) { return 1; } } while( true ); } } return 0; }