/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14020bc80 FUN_14020bc80 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ ulonglong FUN_14020bc80(undefined8 param_1,int *param_2,int *param_3,undefined8 param_4,int param_5) { int *piVar1; int iVar2; uint uVar3; ulonglong uVar4; int *piVar5; int iVar6; int iVar7; ulonglong uVar8; int iVar9; undefined1 *puVar10; uint uVar11; code *pcVar12; undefined1 auStack_18c8 [32]; undefined4 local_18a8; uint local_18a4; int local_18a0; int *local_1898; int local_1890; undefined1 local_1888 [24]; uint local_1870; int *local_1868; undefined8 local_1860; undefined1 auStack_1858 [24]; undefined1 local_1840 [6120]; ulonglong local_58; local_58 = DAT_1403463c0 ^ (ulonglong)auStack_18c8; local_1898 = param_3; local_1868 = param_2; local_1860 = param_4; iVar2 = FUN_1402010a0(param_2); if (iVar2 < 8) { iVar2 = 2; } else if (iVar2 < 0x25) { iVar2 = 3; } else if (iVar2 < 0x8d) { iVar2 = 4; } else if (iVar2 < 0x1c3) { iVar2 = 5; } else if (iVar2 < 0x518) { iVar2 = 6; } else { iVar2 = (0xdc9 < iVar2) + 7; } uVar4 = FUN_140200df0(local_1840); if ((int)uVar4 != 0) { return uVar4; } iVar7 = iVar2 + -1; uVar11 = 1 << (sbyte)iVar2; iVar6 = 1 << ((byte)iVar7 & 0x1f); local_18a0 = iVar6; local_18a4 = uVar11; for (iVar9 = iVar6; iVar9 < (int)uVar11; iVar9 = iVar9 + 1) { uVar3 = FUN_140200df0(auStack_1858 + (longlong)iVar9 * 0x18); if (uVar3 != 0) { if (iVar6 < iVar9) { uVar4 = (ulonglong)(uint)(iVar9 - local_18a0); puVar10 = auStack_1858 + (longlong)iVar6 * 0x18; do { FUN_140200e50(puVar10); puVar10 = puVar10 + 0x18; uVar4 = uVar4 - 1; } while (uVar4 != 0); } FUN_140200e50(local_1840); return (ulonglong)uVar3; } param_3 = local_1898; } if (param_5 == 0) { uVar3 = FUN_140202460(); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1cd; if ((*param_3 * 2 + 1 < 0x200) && (*param_3 < 0x100)) { pcVar12 = FUN_14020ba30; } else { pcVar12 = FUN_140202590; } } else if (param_5 == 1) { FUN_14020f0c0(); pcVar12 = FUN_14020efb0; } else { uVar3 = FUN_14020ef10(param_3,&local_18a8); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1cd; pcVar12 = FUN_14020ee20; } uVar3 = FUN_140200df0(local_1888); uVar4 = (ulonglong)uVar3; uVar11 = local_18a4; if (uVar3 != 0) goto LAB_14020c1cd; if (param_5 == 0) { uVar11 = FUN_1402024c0(local_1888,param_3); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; uVar11 = FUN_140202340(param_1,local_1888,param_3); } else { FUN_14020b9f0(local_1888,1); uVar11 = FUN_14020b170(param_1,param_3,local_1840); } uVar4 = (ulonglong)uVar11; if (uVar11 == 0) { puVar10 = auStack_1858 + (longlong)local_18a0 * 0x18; uVar11 = FUN_140200ef0(local_1840,puVar10); piVar1 = local_1898; uVar4 = (ulonglong)uVar11; if (uVar11 == 0) { iVar9 = 0; if (0 < iVar7) { do { uVar11 = FUN_140201a20(puVar10,puVar10); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; uVar11 = (*pcVar12)(puVar10,piVar1,local_18a8); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; iVar9 = iVar9 + 1; } while (iVar9 < iVar7); } iVar9 = local_18a0 + 1; iVar7 = local_18a0; if (iVar9 < (int)local_18a4) { do { uVar11 = FUN_1402018b0(auStack_1858 + (longlong)iVar7 * 0x18,local_1840, auStack_1858 + (longlong)iVar9 * 0x18); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; uVar11 = (*pcVar12)(auStack_1858 + (longlong)iVar9 * 0x18,piVar1,local_18a8); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; iVar9 = iVar9 + 1; iVar7 = iVar7 + 1; } while (iVar9 < (int)local_18a4); } iVar9 = 0; uVar4 = 0; iVar7 = 0; local_1890 = 1; uVar11 = 0; local_1898 = (int *)(longlong)(*local_1868 + -1); piVar5 = local_1898; LAB_14020bfa6: while( true ) { local_1890 = local_1890 + -1; uVar8 = uVar4; if (local_1890 == 0) { if (piVar5 == (int *)0xffffffffffffffff) { if (((iVar9 != 2) || (iVar7 < 1)) || (iVar2 = 0, iVar7 < 1)) goto LAB_14020c18e; goto LAB_14020c120; } piVar5 = (int *)((longlong)piVar5 + -1); uVar8 = (ulonglong)*(uint *)(*(longlong *)(local_1868 + 4) + 4 + (longlong)piVar5 * 4); local_1890 = 0x1c; local_1898 = piVar5; } local_1870 = (int)uVar8 * 2; uVar4 = (ulonglong)local_1870; uVar8 = uVar8 >> 0x1b; if (iVar9 == 0) goto code_r0x00014020bfef; if ((iVar9 != 1) || ((uVar8 & 1) != 0)) goto LAB_14020bff3; uVar3 = FUN_140201a20(local_1888,local_1888); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) break; uVar3 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) break; uVar4 = (ulonglong)local_1870; piVar5 = local_1898; } } } goto LAB_14020c1be; code_r0x00014020bfef: if ((uVar8 & 1) != 0) { LAB_14020bff3: iVar7 = iVar7 + 1; iVar9 = 2; uVar11 = uVar11 | ((uint)uVar8 & 1) << ((sbyte)iVar2 - (char)iVar7 & 0x1fU); piVar5 = local_1898; if (iVar7 == iVar2) { iVar7 = 0; if (iVar2 != 0) { do { uVar3 = FUN_140201a20(local_1888,local_1888); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; uVar3 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; iVar7 = iVar7 + 1; } while (iVar7 < iVar2); } uVar11 = FUN_1402018b0(local_1888,auStack_1858 + (longlong)(int)uVar11 * 0x18,local_1888); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; uVar11 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; uVar4 = (ulonglong)local_1870; iVar7 = 0; iVar9 = 1; uVar11 = 0; piVar5 = local_1898; } } goto LAB_14020bfa6; while( true ) { uVar3 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; uVar11 = uVar11 * 2; if ((local_18a4 & uVar11) != 0) { uVar3 = FUN_1402018b0(local_1888,local_1840,local_1888); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; uVar3 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; } iVar2 = iVar2 + 1; if (iVar7 <= iVar2) break; LAB_14020c120: uVar3 = FUN_140201a20(local_1888,local_1888); uVar4 = (ulonglong)uVar3; if (uVar3 != 0) goto LAB_14020c1be; } LAB_14020c18e: if (param_5 == 0) { uVar11 = (*pcVar12)(local_1888,piVar1,local_18a8); uVar4 = (ulonglong)uVar11; if (uVar11 != 0) goto LAB_14020c1be; } FUN_14020ae90(local_1888,local_1860); uVar4 = 0; LAB_14020c1be: FUN_140200e50(local_1888); uVar11 = local_18a4; LAB_14020c1cd: FUN_140200e50(local_1840); if (local_18a0 < (int)uVar11) { puVar10 = auStack_1858 + (longlong)local_18a0 * 0x18; uVar8 = (ulonglong)(uVar11 - local_18a0); do { FUN_140200e50(puVar10); puVar10 = puVar10 + 0x18; uVar8 = uVar8 - 1; } while (uVar8 != 0); } return uVar4; }