/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14020df70 FUN_14020df70 * Pseudocode, not original source. */ undefined8 FUN_14020df70(byte *param_1,uint param_2,longlong param_3,uint *param_4) { byte bVar1; uint uVar2; uint uVar3; uint uVar4; byte *pbVar5; uint uVar6; if ((((param_1 == (byte *)0x0) || (param_3 == 0)) || (param_4 == (uint *)0x0)) || (param_2 < 4)) { return 0x10; } if ((*param_1 & 0x1f) == 3) { bVar1 = param_1[1]; uVar4 = 0; if ((char)bVar1 < '\0') { uVar2 = bVar1 & 0x7f; if ((bVar1 & 0x7f) == 0) { return 7; } if (2 < uVar2) { return 7; } uVar3 = 0; pbVar5 = param_1 + 2; uVar6 = uVar2 + 2; do { bVar1 = *pbVar5; pbVar5 = pbVar5 + 1; uVar3 = uVar3 << 8 | (uint)bVar1; uVar2 = uVar2 - 1; } while (uVar2 != 0); } else { uVar6 = 2; uVar3 = bVar1 & 0x7f; } if ((uVar3 != 0) && (uVar3 + uVar6 <= param_2)) { uVar3 = (uVar3 * 8 + -8) - (param_1[uVar6] & 7); if (*param_4 < uVar3) { *param_4 = uVar3; return 6; } if (uVar3 != 0) { param_1 = param_1 + (int)(uVar6 + 1); do { *(bool *)param_3 = (*param_1 & (byte)(1 << (7U - (char)(uVar4 & 7) & 0x1f))) != 0; if ((uVar4 & 7) == 7) { param_1 = param_1 + 1; } uVar4 = uVar4 + 1; param_3 = param_3 + 1; } while (uVar4 < uVar3); } *param_4 = uVar3; return 0; } } return 7; }