/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140101bd0 FUN_140101bd0 * Pseudocode, not original source. */ void FUN_140101bd0(longlong param_1,int param_2,int param_3,uint param_4) { ushort uVar1; int iVar2; int iVar3; byte *pbVar4; ulonglong uVar5; iVar2 = *(int *)(param_1 + 0x1714); uVar5 = (ulonglong)param_4; if (iVar2 < 0xc) { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | (short)param_2 + -0x101 << ((byte)iVar2 & 0x1f); iVar2 = iVar2 + 5; } else { uVar1 = (short)param_2 - 0x101; *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar1 << ((byte)iVar2 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar2 = *(int *)(param_1 + 0x1714) + -0xb; *(ushort *)(param_1 + 0x1710) = uVar1 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } *(int *)(param_1 + 0x1714) = iVar2; if (iVar2 < 0xc) { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | (short)param_3 + -1 << ((byte)iVar2 & 0x1f); iVar2 = iVar2 + 5; } else { uVar1 = (short)param_3 - 1; *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar1 << ((byte)iVar2 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar2 = *(int *)(param_1 + 0x1714) + -0xb; *(ushort *)(param_1 + 0x1710) = uVar1 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } *(int *)(param_1 + 0x1714) = iVar2; if (iVar2 < 0xd) { *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | (short)param_4 + -4 << ((byte)iVar2 & 0x1f); iVar2 = iVar2 + 4; } else { uVar1 = (short)param_4 - 4; *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar1 << ((byte)iVar2 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar2 = *(int *)(param_1 + 0x1714) + -0xc; *(ushort *)(param_1 + 0x1710) = uVar1 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } *(int *)(param_1 + 0x1714) = iVar2; if (0 < (int)param_4) { pbVar4 = &DAT_14014f730; do { iVar2 = *(int *)(param_1 + 0x1714); if (iVar2 < 0xe) { iVar3 = iVar2 + 3; *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xaa6 + (ulonglong)*pbVar4 * 4) << ((byte)iVar2 & 0x1f); } else { uVar1 = *(ushort *)(param_1 + 0xaa6 + (ulonglong)*pbVar4 * 4); *(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar1 << ((byte)iVar2 & 0x1f); *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1710); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; *(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) = *(undefined1 *)(param_1 + 0x1711); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1; iVar3 = *(int *)(param_1 + 0x1714) + -0xd; *(ushort *)(param_1 + 0x1710) = uVar1 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f); } pbVar4 = pbVar4 + 1; uVar5 = uVar5 - 1; *(int *)(param_1 + 0x1714) = iVar3; } while (uVar5 != 0); } FUN_140101660(param_1,param_1 + 0xbc,param_2 + -1); FUN_140101660(param_1,param_1 + 0x9b0,param_3 + -1); return; }