/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400e78ec FUN_1400e78ec * Pseudocode, not original source. */ undefined8 FUN_1400e78ec(longlong param_1,byte *param_2,uint param_3) { longlong lVar1; longlong lVar2; uint uVar3; undefined8 uVar4; ulonglong uVar5; ulonglong uVar6; ulonglong uVar7; uVar6 = 0; if ((((param_1 == 0) || (lVar2 = *(longlong *)(param_1 + 0x28), lVar2 == 0)) || (param_2 == (byte *)0x0)) || ((*(int *)(lVar2 + 0x2c) == 2 || ((*(int *)(lVar2 + 0x2c) == 1 && (*(int *)(lVar2 + 8) != 0x2a)))))) { uVar4 = 0xfffffffe; } else { if (*(int *)(lVar2 + 0x2c) != 0) { uVar3 = FUN_1400ea49c(*(uint *)(param_1 + 0x4c),param_2,param_3); *(uint *)(param_1 + 0x4c) = uVar3; } if (2 < param_3) { uVar3 = *(int *)(lVar2 + 0x44) - 0x106; if (uVar3 < param_3) { param_2 = param_2 + (param_3 - uVar3); param_3 = uVar3; } memcpy(*(void **)(lVar2 + 0x50),param_2,(ulonglong)param_3); *(uint *)(lVar2 + 0x94) = param_3; *(uint *)(lVar2 + 0x84) = param_3; uVar3 = (uint)**(byte **)(lVar2 + 0x50); *(uint *)(lVar2 + 0x70) = uVar3; *(uint *)(lVar2 + 0x70) = (uVar3 << ((byte)*(undefined4 *)(lVar2 + 0x80) & 0x1f) ^ (uint)(*(byte **)(lVar2 + 0x50))[1]) & *(uint *)(lVar2 + 0x7c); uVar7 = uVar6; do { lVar1 = uVar7 + 2; uVar5 = *(uint *)(lVar2 + 0x4c) & uVar7; uVar7 = uVar7 + 1; uVar3 = ((uint)*(byte *)(lVar1 + *(longlong *)(lVar2 + 0x50)) ^ *(int *)(lVar2 + 0x70) << ((byte)*(undefined4 *)(lVar2 + 0x80) & 0x1f)) & *(uint *)(lVar2 + 0x7c); *(uint *)(lVar2 + 0x70) = uVar3; *(undefined2 *)(*(longlong *)(lVar2 + 0x60) + uVar5 * 2) = *(undefined2 *)(*(longlong *)(lVar2 + 0x68) + (ulonglong)uVar3 * 2); *(short *)(*(longlong *)(lVar2 + 0x68) + (ulonglong)*(uint *)(lVar2 + 0x70) * 2) = (short)uVar6; uVar3 = (int)uVar6 + 1; uVar6 = (ulonglong)uVar3; } while (uVar3 <= param_3 - 3); } uVar4 = 0; } return uVar4; }