/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14008c3d0 FUN_14008c3d0 * Pseudocode, not original source. */ void FUN_14008c3d0(undefined8 *param_1,longlong param_2,longlong param_3) { longlong lVar1; undefined8 *puVar2; undefined8 *puVar3; longlong lVar4; undefined8 *puVar5; longlong lVar6; if (param_2 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (-1 < param_3) { param_1[3] = param_3; } if (param_2 == 0) { if ((100 < (ulonglong)param_1[2]) && ((void *)*param_1 != (void *)0x0)) { operator_delete__((void *)*param_1); *param_1 = 0; } param_1[2] = 100; param_1[1] = 0; return; } lVar4 = param_1[2]; if (param_2 <= lVar4) { param_1[1] = param_2; return; } lVar1 = param_1[3]; if (lVar1 == 0) { lVar1 = (longlong)(param_1[1] + (ulonglong)((uint)((longlong)param_1[1] >> 0x3f) & 7)) >> 3; if (lVar1 < 4) { lVar1 = 4; } else if (0x400 < lVar1) { lVar1 = 0x400; } } lVar6 = param_2; if (param_2 < lVar1 + lVar4) { lVar6 = lVar1 + lVar4; } if (lVar6 < lVar4) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } puVar2 = operator_new(lVar6 << 4); puVar5 = param_1 + 4; if (100 < (ulonglong)param_1[2]) { puVar5 = (undefined8 *)*param_1; } lVar4 = param_1[1]; if (0 < lVar4) { puVar3 = puVar2; do { lVar4 = lVar4 + -1; *puVar3 = *(undefined8 *)(((longlong)puVar5 - (longlong)puVar2) + (longlong)puVar3); puVar3[1] = *(undefined8 *) (((longlong)puVar5 - (longlong)puVar2) + -8 + (longlong)(puVar3 + 2)); puVar3 = puVar3 + 2; } while (lVar4 != 0); } memset(puVar2 + param_1[1] * 2,0,(param_2 - param_1[1]) * 0x10); if (100 < (ulonglong)param_1[2]) { operator_delete__(puVar5); } *param_1 = puVar2; param_1[2] = lVar6; param_1[1] = param_2; return; }