/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14010c750 FUN_14010c750 * 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_14010c750(uint *param_1,int *param_2,uint *param_3,undefined8 *param_4,int param_5) { uint *puVar1; int iVar2; undefined8 uVar3; ulonglong uVar4; uint *puVar5; uint uVar6; int iVar7; ulonglong unaff_RBX; int iVar8; int iVar9; uint uVar10; uint uVar11; code *pcVar12; undefined1 auStack_18c8 [32]; uint local_18a8; uint local_18a4; int local_18a0; uint *local_1898; int local_1890; uint local_1888 [6]; uint local_1870; int *local_1868; undefined8 *local_1860; uint auStack_1858 [6]; uint local_1840 [1530]; ulonglong local_58; local_58 = DAT_1401ac5a0 ^ (ulonglong)auStack_18c8; local_1898 = param_3; local_1868 = param_2; local_1860 = param_4; iVar2 = FUN_140103a40(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; } uVar3 = FUN_140103790(local_1840); if ((int)uVar3 != 0) { return unaff_RBX; } iVar8 = iVar2 + -1; uVar11 = 1 << (sbyte)iVar2; iVar7 = 1 << ((byte)iVar8 & 0x1f); local_18a0 = iVar7; local_18a4 = uVar11; for (iVar9 = iVar7; iVar9 < (int)uVar11; iVar9 = iVar9 + 1) { uVar3 = FUN_140103790(auStack_1858 + (longlong)iVar9 * 6); if ((int)uVar3 != 0) { if (iVar7 < iVar9) { uVar4 = (ulonglong)(uint)(iVar9 - local_18a0); puVar5 = auStack_1858 + (longlong)iVar7 * 6; do { FUN_1401037f0((int *)puVar5); puVar5 = puVar5 + 6; uVar4 = uVar4 - 1; } while (uVar4 != 0); } FUN_1401037f0((int *)local_1840); return unaff_RBX; } param_3 = local_1898; } if (param_5 == 0) { uVar3 = FUN_140104e00((longlong)param_3,&local_18a8); if ((int)uVar3 != 0) goto LAB_14010cc9d; if (((int)(*param_3 * 2 + 1) < 0x200) && ((int)*param_3 < 0x100)) { pcVar12 = FUN_14010c500; } else { pcVar12 = FUN_140104f30; } } else if (param_5 == 1) { FUN_14010fb90((longlong)param_3,(int *)&local_18a8); pcVar12 = FUN_14010fa80; } else { uVar4 = FUN_14010f9e0(param_3,&local_18a8); if ((int)uVar4 != 0) goto LAB_14010cc9d; pcVar12 = FUN_14010f8f0; } uVar3 = FUN_140103790(local_1888); uVar11 = local_18a4; if ((int)uVar3 != 0) goto LAB_14010cc9d; if (param_5 == 0) { uVar3 = FUN_140104e60(local_1888,param_3); if ((int)uVar3 != 0) goto LAB_14010cc8e; uVar4 = FUN_140104ce0(param_1,local_1888,param_3,local_1840); iVar9 = (int)uVar4; } else { FUN_14010c4c0(local_1888,1); uVar4 = FUN_14010bc40(param_1,param_3,local_1840); iVar9 = (int)uVar4; } if (iVar9 == 0) { puVar5 = auStack_1858 + (longlong)local_18a0 * 6; uVar3 = FUN_140103890(local_1840,puVar5); puVar1 = local_1898; if ((int)uVar3 == 0) { iVar9 = 0; if (0 < iVar8) { do { iVar7 = FUN_1401043c0(puVar5,puVar5); if ((iVar7 != 0) || (iVar7 = (*pcVar12)(puVar5,puVar1,local_18a8), iVar7 != 0)) goto LAB_14010cc8e; iVar9 = iVar9 + 1; } while (iVar9 < iVar8); } iVar9 = local_18a0 + 1; iVar8 = local_18a0; if (iVar9 < (int)local_18a4) { do { iVar7 = FUN_140104250(auStack_1858 + (longlong)iVar8 * 6,local_1840, auStack_1858 + (longlong)iVar9 * 6); if ((iVar7 != 0) || (iVar7 = (*pcVar12)(auStack_1858 + (longlong)iVar9 * 6,puVar1,local_18a8), iVar7 != 0)) goto LAB_14010cc8e; iVar9 = iVar9 + 1; iVar8 = iVar8 + 1; } while (iVar9 < (int)local_18a4); } iVar9 = 0; iVar8 = 0; local_1890 = 1; uVar10 = 0; local_1898 = (uint *)(longlong)(*local_1868 + -1); puVar5 = local_1898; uVar11 = 0; do { do { do { while( true ) { local_1890 = local_1890 + -1; if (local_1890 == 0) { if (puVar5 == (uint *)0xffffffffffffffff) { if (((iVar9 != 2) || (iVar8 < 1)) || (iVar2 = 0, iVar8 < 1)) goto LAB_14010cc5e; goto LAB_14010cbf0; } puVar5 = (uint *)((longlong)puVar5 + -1); uVar11 = *(uint *)(*(longlong *)(local_1868 + 4) + 4 + (longlong)puVar5 * 4); local_1890 = 0x1c; local_1898 = puVar5; } local_1870 = uVar11 * 2; uVar6 = uVar11 >> 0x1b & 1; uVar11 = local_1870; if (iVar9 == 0) break; if ((iVar9 != 1) || (uVar6 != 0)) goto LAB_14010cac3; iVar7 = FUN_1401043c0(local_1888,local_1888); if ((iVar7 != 0) || (iVar7 = (*pcVar12)(local_1888,puVar1,local_18a8), puVar5 = local_1898, uVar11 = local_1870, iVar7 != 0)) goto LAB_14010cc8e; } } while (uVar6 == 0); LAB_14010cac3: iVar8 = iVar8 + 1; iVar9 = 2; uVar10 = uVar10 | uVar6 << ((sbyte)iVar2 - (char)iVar8 & 0x1fU); puVar5 = local_1898; } while (iVar8 != iVar2); iVar8 = 0; if (iVar2 != 0) { do { iVar9 = FUN_1401043c0(local_1888,local_1888); if ((iVar9 != 0) || (iVar9 = (*pcVar12)(local_1888,puVar1,local_18a8), iVar9 != 0)) goto LAB_14010cc8e; iVar8 = iVar8 + 1; } while (iVar8 < iVar2); } iVar8 = FUN_140104250(local_1888,auStack_1858 + (longlong)(int)uVar10 * 6,local_1888); if ((iVar8 != 0) || (iVar8 = (*pcVar12)(local_1888,puVar1,local_18a8), iVar8 != 0)) break; iVar8 = 0; iVar9 = 1; uVar10 = 0; puVar5 = local_1898; uVar11 = local_1870; } while( true ); } } goto LAB_14010cc8e; while (iVar2 = iVar2 + 1, iVar2 < iVar8) { LAB_14010cbf0: iVar9 = FUN_1401043c0(local_1888,local_1888); if (((iVar9 != 0) || (iVar9 = (*pcVar12)(local_1888,puVar1,local_18a8), iVar9 != 0)) || ((uVar10 = uVar10 * 2, (local_18a4 & uVar10) != 0 && ((iVar9 = FUN_140104250(local_1888,local_1840,local_1888), iVar9 != 0 || (iVar9 = (*pcVar12)(local_1888,puVar1,local_18a8), iVar9 != 0)))))) goto LAB_14010cc8e; } LAB_14010cc5e: if ((param_5 != 0) || (iVar2 = (*pcVar12)(local_1888,puVar1,local_18a8), iVar2 == 0)) { FUN_14010b960((undefined8 *)local_1888,local_1860); } LAB_14010cc8e: FUN_1401037f0((int *)local_1888); uVar11 = local_18a4; LAB_14010cc9d: FUN_1401037f0((int *)local_1840); if (local_18a0 < (int)uVar11) { puVar5 = auStack_1858 + (longlong)local_18a0 * 6; uVar4 = (ulonglong)(uVar11 - local_18a0); do { FUN_1401037f0((int *)puVar5); puVar5 = puVar5 + 6; uVar4 = uVar4 - 1; } while (uVar4 != 0); } return unaff_RBX; }