/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ea350 FUN_1401ea350 * Pseudocode, not original source. */ void FUN_1401ea350(longlong *param_1,longlong param_2,int param_3,int param_4) { short sVar1; undefined1 uVar2; undefined4 uVar3; int iVar4; int iVar5; uint uVar6; uint uVar7; undefined *puVar8; longlong *plVar9; longlong lVar10; iVar4 = 0; if (*(int *)((longlong)param_1 + 0xac) < 1) { uVar7 = param_3 + 5; LAB_1401ea3e3: uVar6 = uVar7; uVar7 = uVar6; } else { lVar10 = *param_1; if (*(int *)(lVar10 + 0x48) == 2) { uVar3 = FUN_1401e9590(); *(undefined4 *)(lVar10 + 0x48) = uVar3; } FUN_1401e9dc0(param_1,param_1 + 0x168); FUN_1401e9dc0(param_1,param_1 + 0x16b); iVar4 = FUN_1401ea010(param_1); uVar6 = (int)param_1[0x2e0] + 10U >> 3; uVar7 = *(int *)((longlong)param_1 + 0x1704) + 10U >> 3; if (uVar7 <= uVar6) goto LAB_1401ea3e3; } if ((uVar6 < param_3 + 4U) || (param_2 == 0)) { sVar1 = (short)param_4; if (((int)param_1[0x16] == 4) || (uVar7 == uVar6)) { iVar4 = *(int *)((longlong)param_1 + 0x1714); if (iVar4 < 0xe) { *(ushort *)(param_1 + 0x2e2) = *(ushort *)(param_1 + 0x2e2) | sVar1 + 2 << ((byte)iVar4 & 0x1f); iVar4 = iVar4 + 3; } else { *(ushort *)(param_1 + 0x2e2) = *(ushort *)(param_1 + 0x2e2) | sVar1 + 2U << ((byte)iVar4 & 0x1f); *(char *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = (char)param_1[0x2e2]; *(int *)(param_1 + 5) = (int)param_1[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = *(undefined1 *)((longlong)param_1 + 0x1711); *(int *)(param_1 + 5) = (int)param_1[5] + 1; iVar4 = *(int *)((longlong)param_1 + 0x1714) + -0xd; *(ushort *)(param_1 + 0x2e2) = (ushort)(sVar1 + 2U) >> (0x10U - (char)*(int *)((longlong)param_1 + 0x1714) & 0x1f); } *(int *)((longlong)param_1 + 0x1714) = iVar4; plVar9 = (longlong *)&DAT_140292940; puVar8 = &DAT_1402924c0; } else { iVar5 = *(int *)((longlong)param_1 + 0x1714); if (iVar5 < 0xe) { *(ushort *)(param_1 + 0x2e2) = *(ushort *)(param_1 + 0x2e2) | sVar1 + 4 << ((byte)iVar5 & 0x1f); iVar5 = iVar5 + 3; } else { *(ushort *)(param_1 + 0x2e2) = *(ushort *)(param_1 + 0x2e2) | sVar1 + 4U << ((byte)iVar5 & 0x1f); *(char *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = (char)param_1[0x2e2]; *(int *)(param_1 + 5) = (int)param_1[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = *(undefined1 *)((longlong)param_1 + 0x1711); *(int *)(param_1 + 5) = (int)param_1[5] + 1; iVar5 = *(int *)((longlong)param_1 + 0x1714) + -0xd; *(ushort *)(param_1 + 0x2e2) = (ushort)(sVar1 + 4U) >> (0x10U - (char)*(int *)((longlong)param_1 + 0x1714) & 0x1f); } *(int *)((longlong)param_1 + 0x1714) = iVar5; FUN_1401e8eb0(param_1,(int)param_1[0x169] + 1,(int)param_1[0x16c] + 1,iVar4 + 1); plVar9 = param_1 + 0x136; puVar8 = (undefined *)((longlong)param_1 + 0xbc); } FUN_1401e9120(param_1,puVar8,plVar9); } else { FUN_1401ea090(param_1,param_2,param_3,param_4); } FUN_1401e84c0(param_1); if (param_4 == 0) { return; } if (*(int *)((longlong)param_1 + 0x1714) < 9) { if (*(int *)((longlong)param_1 + 0x1714) < 1) goto LAB_1401ea5a0; uVar2 = (undefined1)param_1[0x2e2]; } else { *(char *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = (char)param_1[0x2e2]; *(int *)(param_1 + 5) = (int)param_1[5] + 1; uVar2 = *(undefined1 *)((longlong)param_1 + 0x1711); } *(undefined1 *)((ulonglong)*(uint *)(param_1 + 5) + param_1[2]) = uVar2; *(int *)(param_1 + 5) = (int)param_1[5] + 1; LAB_1401ea5a0: *(undefined2 *)(param_1 + 0x2e2) = 0; *(undefined4 *)((longlong)param_1 + 0x1714) = 0; return; }