/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14020e470 FUN_14020e470 * Pseudocode, not original source. */ undefined8 FUN_14020e470(longlong param_1,uint param_2,char *param_3,uint *param_4,int param_5) { undefined4 uVar1; int iVar2; undefined4 *puVar3; undefined8 uVar4; ulonglong uVar5; uint uVar6; uint uVar7; undefined8 *puVar8; uint local_28; uint local_24; uint local_20; if (((param_1 == 0) || (param_3 == (char *)0x0)) || (param_4 == (uint *)0x0)) { return 0x10; } uVar6 = 0; local_20 = 0; if (param_2 != 0) { puVar8 = (undefined8 *)(param_1 + 8); do { uVar1 = *(undefined4 *)(puVar8 + 1); puVar3 = (undefined4 *)*puVar8; if (*(int *)(puVar8 + -1) == 0) break; switch(*(int *)(puVar8 + -1)) { case 1: uVar4 = FUN_14020e410(&local_28); break; case 2: uVar4 = FUN_14020e180(puVar3,&local_28); break; case 3: uVar4 = FUN_14020e0d0(*puVar3,&local_28); break; case 4: uVar4 = FUN_14020df20(uVar1,&local_28); break; case 5: uVar4 = FUN_14020ddd0(uVar1,&local_28); break; case 6: uVar6 = uVar6 + 2; goto LAB_14020e5bf; case 7: uVar4 = FUN_14020db20(puVar3,uVar1,&local_28); break; case 8: uVar4 = FUN_14020d940(puVar3,uVar1,&local_28); break; case 9: uVar4 = FUN_14020d700(puVar3,uVar1,&local_28); break; case 10: uVar4 = FUN_14020d3f0(puVar3,uVar1,&local_28); break; case 0xb: uVar4 = FUN_14020f3f0(puVar3,&local_28); break; default: goto LAB_14020e8e7; case 0xd: case 0xe: case 0xf: uVar4 = FUN_14020ce70(puVar3,uVar1,&local_28); } if ((int)uVar4 != 0) { return uVar4; } uVar6 = uVar6 + local_28; LAB_14020e5bf: puVar8 = puVar8 + 7; local_20 = local_20 + 1; } while (local_20 < param_2); } if (uVar6 < 0x80) { uVar7 = uVar6 + 2; } else if (uVar6 < 0x100) { uVar7 = uVar6 + 3; } else if (uVar6 < 0x10000) { uVar7 = uVar6 + 4; } else { if (0xffffff < uVar6) { LAB_14020e8e7: return 0x10; } uVar7 = uVar6 + 5; } if (*param_4 < uVar7) { *param_4 = uVar7; return 6; } *param_3 = (param_5 != 0xd) + '0'; uVar7 = 1; uVar5 = 1; local_28 = 1; if (uVar6 < 0x80) { param_3[1] = (char)uVar6; local_28 = uVar7; } else { if (uVar6 < 0x100) { param_3[1] = -0x7f; local_28 = uVar7; } else { if (uVar6 < 0x10000) { param_3[1] = -0x7e; local_28 = uVar7; } else { if (0xffffff < uVar6) goto LAB_14020e6c4; param_3[1] = -0x7d; local_28 = 2; param_3[2] = (char)(uVar6 >> 0x10); } local_28 = local_28 + 1; param_3[local_28] = (char)(uVar6 >> 8); } local_28 = local_28 + 1; param_3[local_28] = (char)uVar6; } local_28 = local_28 + 1; uVar5 = (ulonglong)local_28; LAB_14020e6c4: *param_4 = *param_4 - (int)uVar5; uVar6 = 0; if (param_2 != 0) { puVar8 = (undefined8 *)(param_1 + 8); do { iVar2 = *(int *)(puVar8 + -1); uVar1 = *(undefined4 *)(puVar8 + 1); puVar3 = (undefined4 *)*puVar8; if (iVar2 == 0) break; switch(iVar2) { case 1: local_24 = *param_4; uVar4 = FUN_140210950(*puVar3,param_3 + uVar5,&local_24); break; case 2: local_24 = *param_4; uVar4 = FUN_1402106b0(puVar3,param_3 + uVar5,&local_24); break; case 3: local_24 = *param_4; uVar4 = FUN_140210590(*puVar3,param_3 + uVar5,&local_24); break; case 4: local_24 = *param_4; uVar4 = FUN_140210420(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 5: local_24 = *param_4; uVar4 = FUN_1402102f0(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 6: param_3[uVar5] = '\x05'; param_3[local_28 + 1] = '\0'; local_28 = local_28 + 2; *param_4 = *param_4 - 2; goto LAB_14020e8b9; case 7: local_24 = *param_4; uVar4 = FUN_140210090(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 8: local_24 = *param_4; uVar4 = FUN_14020ff60(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 9: local_24 = *param_4; uVar4 = FUN_14020fe30(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 10: local_24 = *param_4; uVar4 = FUN_14020fc30(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 0xb: local_24 = *param_4; uVar4 = FUN_14020f8a0(puVar3,param_3 + uVar5,&local_24); break; default: goto LAB_14020e8e7; case 0xd: local_24 = *param_4; uVar4 = FUN_14020e470(puVar3,uVar1,param_3 + uVar5,&local_24,iVar2); break; case 0xe: local_24 = *param_4; uVar4 = FUN_14020f7a0(puVar3,uVar1,param_3 + uVar5,&local_24); break; case 0xf: local_24 = *param_4; uVar4 = FUN_14020f4b0(puVar3,uVar1,param_3 + uVar5,&local_24); } if ((int)uVar4 != 0) { return uVar4; } local_28 = local_28 + local_24; *param_4 = *param_4 - local_24; LAB_14020e8b9: uVar5 = (ulonglong)local_28; puVar8 = puVar8 + 7; uVar6 = uVar6 + 1; } while (uVar6 < param_2); } *param_4 = (uint)uVar5; return 0; }