/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400e8adc FUN_1400e8adc * Pseudocode, not original source. */ void FUN_1400e8adc(longlong *param_1) { uint uVar1; ushort uVar2; uint uVar3; ulonglong _Size; ushort *puVar4; uint uVar5; ulonglong uVar6; uVar1 = *(uint *)((longlong)param_1 + 0x44); _Size = (ulonglong)uVar1; while( true ) { uVar3 = ((int)param_1[0xb] - *(int *)((longlong)param_1 + 0x9c)) - *(uint *)((longlong)param_1 + 0x94); if ((uVar1 - 0x106) + *(int *)((longlong)param_1 + 0x44) <= *(uint *)((longlong)param_1 + 0x94)) { memcpy((void *)param_1[10],(void *)(param_1[10] + _Size),_Size); uVar6 = (ulonglong)*(uint *)((longlong)param_1 + 0x74); *(uint *)(param_1 + 0x13) = (int)param_1[0x13] - uVar1; *(int *)((longlong)param_1 + 0x94) = *(int *)((longlong)param_1 + 0x94) - uVar1; *(int *)((longlong)param_1 + 0x84) = *(int *)((longlong)param_1 + 0x84) - uVar1; puVar4 = (ushort *)(param_1[0xd] + uVar6 * 2); do { puVar4 = puVar4 + -1; uVar2 = 0; if (uVar1 <= *puVar4) { uVar2 = *puVar4 - (short)uVar1; } uVar5 = (int)uVar6 - 1; uVar6 = (ulonglong)uVar5; *puVar4 = uVar2; } while (uVar5 != 0); puVar4 = (ushort *)(param_1[0xc] + _Size * 2); uVar5 = uVar1; do { puVar4 = puVar4 + -1; uVar2 = 0; if (uVar1 <= *puVar4) { uVar2 = *puVar4 - (short)uVar1; } uVar5 = uVar5 - 1; *puVar4 = uVar2; } while (uVar5 != 0); uVar3 = uVar3 + uVar1; } if ((int)((longlong *)*param_1)[1] == 0) break; uVar3 = FUN_1400e86fc((longlong *)*param_1, (void *)((ulonglong)*(uint *)((longlong)param_1 + 0x9c) + (ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10]), uVar3); *(int *)((longlong)param_1 + 0x9c) = *(int *)((longlong)param_1 + 0x9c) + uVar3; if (2 < *(uint *)((longlong)param_1 + 0x9c)) { uVar3 = (uint)*(byte *)((ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10]); *(uint *)(param_1 + 0xe) = uVar3; *(uint *)(param_1 + 0xe) = (uVar3 << ((byte)(int)param_1[0x10] & 0x1f) ^ (uint)*(byte *)((ulonglong)(*(uint *)((longlong)param_1 + 0x94) + 1) + param_1[10])) & *(uint *)((longlong)param_1 + 0x7c); } if (0x105 < *(uint *)((longlong)param_1 + 0x9c)) { return; } if (*(int *)(*param_1 + 8) == 0) { return; } } return; }