/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400df690 FUN_1400df690 * Pseudocode, not original source. */ void FUN_1400df690(longlong param_1,undefined8 param_2,longlong param_3,undefined8 param_4) { int iVar1; int iVar2; int iVar3; longlong lVar4; int iVar5; undefined8 *_Src; longlong lVar6; undefined8 *puVar7; longlong lVar8; iVar1 = *(int *)(param_1 + 0x18); lVar6 = (longlong)iVar1; iVar5 = (int)param_2; if (iVar1 == 0) { iVar1 = *(int *)(param_1 + 0x18); FUN_1400d3c80(param_1,iVar1 + 1,param_3); puVar7 = (undefined8 *)0x0; if (0 < iVar1) { _Src = puVar7; if (*(int *)(param_1 + 0x18) != 0) { _Src = *(undefined8 **)(param_1 + 0x10); } memmove(_Src + 1,_Src,(longlong)iVar1 << 3); } if (*(int *)(param_1 + 0x18) != 0) { puVar7 = *(undefined8 **)(param_1 + 0x10); } *puVar7 = CONCAT44(iVar5,iVar5); } else { iVar3 = iVar1 + -1; if ((iVar3 < 0) || (iVar1 <= iVar3)) { /* WARNING: Subroutine does not return */ FUN_14006be30(param_1,param_2,param_3,param_4); } lVar8 = *(longlong *)(param_1 + 0x10); lVar4 = (longlong)iVar3; iVar3 = *(int *)(lVar8 + lVar4 * 8); if ((iVar3 != iVar5) && (iVar2 = *(int *)(lVar8 + 4 + lVar4 * 8), iVar2 != iVar5)) { if ((iVar2 + 1 != iVar5) && (iVar3 + 1 != iVar5)) { if (iVar1 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } iVar3 = *(int *)(param_1 + 0x18); FUN_1400d3c80(param_1,iVar3 + 1,lVar8); iVar3 = iVar3 - iVar1; lVar8 = 0; if (0 < iVar3) { lVar4 = lVar8; if (*(int *)(param_1 + 0x18) != 0) { lVar4 = *(longlong *)(param_1 + 0x10); } memmove((void *)(lVar4 + 8 + lVar6 * 8),(void *)(lVar4 + lVar6 * 8),(longlong)iVar3 << 3); } if (*(int *)(param_1 + 0x18) != 0) { lVar8 = *(longlong *)(param_1 + 0x10); } *(ulonglong *)(lVar8 + lVar6 * 8) = CONCAT44(iVar5,iVar5); return; } *(int *)(lVar8 + 4 + lVar4 * 8) = iVar5; return; } } return; }