/* WARNING: Removing unreachable block (ram,0x004025a8) */
/* WARNING: Removing unreachable block (ram,0x0040261c) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 write_jpeg(char *param_1,int param_2,ushort param_3,ushort param_4,char *param_5)
{
undefined1 uVar1;
byte bVar2;
byte bVar3;
double dVar4;
double dVar5;
undefined1 *puVar6;
size_t sVar7;
int iVar8;
int *piVar9;
byte bVar10;
int iVar11;
int iVar12;
int *piVar13;
int iVar14;
int iVar15;
int *piVar16;
uint uVar17;
int iVar18;
char cVar19;
byte *pbVar20;
double *pdVar21;
int iVar22;
uint uVar23;
int iVar24;
uint uVar25;
undefined2 *puVar26;
undefined4 uVar27;
undefined4 uVar28;
uint uVar29;
undefined2 local_78;
undefined2 local_76;
undefined2 local_74 [2];
undefined4 local_70;
undefined8 local_68;
if ((param_1 == (char *)0x0) || (param_2 == 0)) {
uVar27 = 0xffffffff;
}
else {
DAT_004183b8 = param_3;
if ((param_3 & 7) != 0) {
DAT_004183b8 = (param_3 & 0xfff8) + 8;
}
DAT_004183ba = param_4;
if ((param_4 & 7) != 0) {
DAT_004183ba = (param_4 & 0xfff8) + 8;
}
DAT_004183b4 = param_2;
DAT_0041857c = fopen(param_1,"wb") //possible issue identified - semgrep
DQTinfo = 0xffdb;
_DAT_00418776 = 0x84;
DAT_004187b9 = 1;
DAT_00418778 = 0;
iVar15 = 0;
do {
pbVar20 = &DAT_00415088 + iVar15;
uVar29 = ((uint)(byte)(&DAT_004150c8)[iVar15] * 0x32 + 0x32) / 100;
iVar15 = iVar15 + 1;
if (uVar29 == 0) {
uVar29 = 1;
}
(&DAT_00418779)[*pbVar20] = (char)uVar29;
} while (iVar15 != 0x40);
iVar15 = 0;
do {
pbVar20 = &DAT_00415088 + iVar15;
uVar29 = ((uint)(byte)(&DAT_00415108)[iVar15] * 0x32 + 0x32) / 100;
iVar15 = iVar15 + 1;
if (uVar29 == 0) {
uVar29 = 1;
}
(&DAT_004187ba)[*pbVar20] = (char)uVar29;
} while (iVar15 != 0x40);
_DHTinfo = 0xffc4;
_DAT_004185d2 = 0x1a2;
DAT_004185d4 = 0;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004185d5)[iVar15] = (&DAT_00415149)[iVar15];
iVar15 = iVar11;
} while (iVar11 != 0x10);
puVar6 = &DAT_0041515c;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004185e5)[iVar15] = *puVar6;
puVar6 = &DAT_0041515d + iVar15;
iVar15 = iVar11;
} while (iVar11 != 0xc);
DAT_004185f1 = 0x10;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004185f2)[iVar15] = (&DAT_00415189)[iVar15];
iVar15 = iVar11;
} while (iVar11 != 0x10);
puVar6 = &DAT_0041519c;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_00418602)[iVar15] = *puVar6;
puVar6 = &DAT_0041519d + iVar15;
iVar15 = iVar11;
} while (iVar11 != 0xa2);
DAT_004186a4 = 1;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004186a5)[iVar15] = (&DAT_00415169)[iVar15];
iVar15 = iVar11;
} while (iVar11 != 0x10);
puVar6 = &DAT_0041517c;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004186b5)[iVar15] = *puVar6;
puVar6 = &DAT_0041517d + iVar15;
iVar15 = iVar11;
} while (iVar11 != 0xc);
DAT_004186c1 = 0x11;
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004186c2)[iVar15] = (&DAT_00415241)[iVar15];
iVar15 = iVar11;
} while (iVar11 != 0x10);
iVar15 = 0;
do {
iVar11 = iVar15 + 1;
(&DAT_004186d2)[iVar15] = (&DAT_00415254)[iVar15];
iVar15 = iVar11;
} while (iVar11 != 0xa2);
pbVar20 = &DAT_00415149;
uVar29 = 0;
uVar23 = 0;
cVar19 = '\x01';
while( true ) {
bVar10 = 1;
while( true ) {
if (*pbVar20 < bVar10) break;
bVar2 = (&DAT_0041515c)[uVar23];
uVar23 = uVar23 + 1 & 0xff;
*(short *)(&DAT_00415546 + (uint)bVar2 * 4) = (short)uVar29;
(&DAT_00415544)[(uint)bVar2 * 4] = cVar19;
uVar29 = uVar29 + 1 & 0xffff;
bVar10 = bVar10 + 1;
}
cVar19 = cVar19 + '\x01';
pbVar20 = pbVar20 + 1;
if (cVar19 == '\x11') break;
uVar29 = (uVar29 & 0x7fff) << 1;
}
pbVar20 = &DAT_00415169;
uVar29 = 0;
uVar23 = 0;
cVar19 = '\x01';
while( true ) {
bVar10 = 1;
while( true ) {
if (*pbVar20 < bVar10) break;
bVar2 = (&DAT_0041517c)[uVar23];
uVar23 = uVar23 + 1 & 0xff;
*(short *)(&DAT_00415576 + (uint)bVar2 * 4) = (short)uVar29;
(&DAT_00415574)[(uint)bVar2 * 4] = cVar19;
uVar29 = uVar29 + 1 & 0xffff;
bVar10 = bVar10 + 1;
}
cVar19 = cVar19 + '\x01';
pbVar20 = pbVar20 + 1;
if (cVar19 == '\x11') break;
uVar29 = (uVar29 & 0x7fff) << 1;
}
pbVar20 = &DAT_00415189;
uVar29 = 0;
uVar23 = 0;
cVar19 = '\x01';
while( true ) {
bVar10 = 1;
while( true ) {
if (*pbVar20 < bVar10) break;
bVar2 = (&DAT_0041519c)[uVar23];
uVar23 = uVar23 + 1 & 0xff;
*(short *)((uint)bVar2 * 4 + 0x4155a6) = (short)uVar29;
(&DAT_004155a4)[(uint)bVar2 * 4] = cVar19;
uVar29 = uVar29 + 1 & 0xffff;
bVar10 = bVar10 + 1;
}
cVar19 = cVar19 + '\x01';
pbVar20 = pbVar20 + 1;
if (cVar19 == '\x11') break;
uVar29 = (uVar29 & 0x7fff) << 1;
}
pbVar20 = &DAT_00415241;
uVar29 = 0;
uVar23 = 0;
cVar19 = '\x01';
while( true ) {
bVar10 = 1;
while( true ) {
if (*pbVar20 < bVar10) break;
bVar2 = (&DAT_00415254)[uVar23];
uVar23 = uVar23 + 1 & 0xff;
*(short *)(&DAT_004159a6 + (uint)bVar2 * 4) = (short)uVar29;
(&DAT_004159a4)[(uint)bVar2 * 4] = cVar19;
uVar29 = uVar29 + 1 & 0xffff;
bVar10 = bVar10 + 1;
}
cVar19 = cVar19 + '\x01';
pbVar20 = pbVar20 + 1;
if (cVar19 == '\x11') break;
uVar29 = (uVar29 & 0x7fff) << 1;
}
DAT_00415da4 = malloc(0xffff) //possible issue identified - semgrep
if (DAT_00415da4 == (void *)0x0) {
error_exit("not enough memory.\n");
}
DAT_00415da8 = (int)DAT_00415da4 + 0x7fff;
DAT_00415dac = malloc(0x3fffc) //possible issue identified - semgrep
if (DAT_00415dac == (void *)0x0) {
error_exit("not enough memory.\n");
}
DAT_00415db0 = (int)DAT_00415dac + 0x1fffc;
cVar19 = '\x01';
iVar11 = 2;
iVar15 = 1;
while( true ) {
iVar12 = iVar15 << 2;
for (iVar8 = iVar15; iVar8 < iVar11; iVar8 = iVar8 + 1) {
*(char *)(DAT_00415da8 + iVar8) = cVar19;
*(char *)(DAT_00415db0 + iVar12) = cVar19;
*(short *)(DAT_00415db0 + iVar12 + 2) = (short)iVar8;
iVar12 = iVar12 + 4;
}
iVar8 = 1 - iVar11;
iVar12 = iVar8 * 4;
uVar29 = iVar11 + -1 + iVar8;
for (; iVar8 <= -iVar15; iVar8 = iVar8 + 1) {
*(char *)(DAT_00415da8 + iVar8) = cVar19;
*(char *)(DAT_00415db0 + iVar12) = cVar19;
*(short *)(DAT_00415db0 + iVar12 + 2) = (short)uVar29;
iVar12 = iVar12 + 4;
uVar29 = (uVar29 & 0xffff) + 1;
}
cVar19 = cVar19 + '\x01';
iVar15 = iVar15 << 1;
if (cVar19 == '\x10') break;
iVar11 = iVar11 << 1;
}
iVar15 = 0;
iVar8 = 0;
iVar11 = 0;
do {
piVar13 = (int *)((int)&DAT_00415db4 + iVar15);
piVar16 = (int *)((int)&DAT_004169b4 + iVar15);
piVar9 = (int *)((int)&DAT_004175b4 + iVar15);
iVar12 = iVar15 << 0xd;
iVar15 = iVar15 + 4;
*piVar13 = iVar8;
*piVar16 = iVar11;
*piVar9 = iVar12;
iVar8 = iVar8 + 0x4c8b;
iVar11 = iVar11 + -0x2b32;
} while (iVar15 != 0x400);
iVar15 = 0;
iVar8 = 0;
iVar11 = 0;
do {
iVar12 = iVar15 * -0x1533;
piVar16 = (int *)((int)&DAT_004161b4 + iVar15);
piVar9 = (int *)((int)&DAT_00416db4 + iVar15);
piVar13 = (int *)((int)&DAT_004179b4 + iVar15);
iVar15 = iVar15 + 4;
*piVar16 = iVar8;
*piVar13 = iVar11;
*piVar9 = iVar12;
iVar8 = iVar8 + 0x9646;
iVar11 = iVar11 + -0x6b2e;
} while (iVar15 != 0x400);
iVar15 = 0;
iVar11 = 0;
do {
iVar12 = iVar15 * -0x534;
piVar16 = (int *)((int)&DAT_004165b4 + iVar15);
piVar13 = (int *)((int)&DAT_004171b4 + iVar15);
iVar8 = iVar15 << 0xd;
piVar9 = (int *)((int)&DAT_00417db4 + iVar15);
iVar15 = iVar15 + 4;
*piVar16 = iVar11;
*piVar13 = iVar8;
*piVar9 = iVar12;
iVar11 = iVar11 + 0x1d2f;
} while (iVar15 != 0x400);
memcpy(&local_68,&DAT_00404ee0,0x40) //possible issue identified - semgrep
uVar29 = 0;
do {
uVar27 = *(undefined4 *)((int)&local_68 + uVar29);
uVar28 = *(undefined4 *)((int)&local_68 + uVar29 + 4);
pdVar21 = (double *)&local_68;
uVar23 = uVar29;
do {
uVar17 = uVar23 & 0xff;
dVar5 = *pdVar21;
dVar4 = *pdVar21;
bVar10 = (&DAT_004187ba)[(byte)(&DAT_00415088)[uVar17]];
pdVar21 = pdVar21 + 1;
uVar23 = uVar17 + 1;
(&DAT_004181b4)[uVar17] =
(float)(1.0 / ((double)(byte)(&DAT_00418779)[(byte)(&DAT_00415088)[uVar17]] *
(double)CONCAT44(uVar28,uVar27) * dVar4 * 8.0));
(&DAT_004182b4)[uVar17] =
(float)(1.0 / ((double)bVar10 * (double)CONCAT44(uVar28,uVar27) * dVar5 * 8.0));
} while (pdVar21 != (double *)&stack0xffffffd8);
uVar29 = uVar29 + 8;
} while (uVar29 != 0x40);
_DAT_0041506a = param_4;
DAT_0041506c = param_3;
fputc(0xff,DAT_0041857c);
fputc(0xd8,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_00415050 >> 8),DAT_0041857c);
fputc((int)_DAT_00415050,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_00415052 >> 8),DAT_0041857c);
fputc((int)_DAT_00415052,DAT_0041857c);
fputc(0x4a,DAT_0041857c);
fputc(0x46,DAT_0041857c);
fputc(0x49,DAT_0041857c);
fputc(0x46,DAT_0041857c);
fputc(0,DAT_0041857c);
fputc((int)DAT_00415059,DAT_0041857c);
fputc((int)DAT_0041505a,DAT_0041857c);
fputc((int)DAT_0041505b,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_0041505c >> 8),DAT_0041857c);
fputc((int)_DAT_0041505c,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_0041505e >> 8),DAT_0041857c);
fputc((int)_DAT_0041505e,DAT_0041857c);
fputc((int)DAT_00415060,DAT_0041857c);
fputc((int)DAT_00415061,DAT_0041857c);
if (param_5 != (char *)0x0) {
fputc(0xff,DAT_0041857c);
fputc(0xfe,DAT_0041857c);
sVar7 = strlen(param_5);
uVar29 = (sVar7 & 0xffff) + 2;
fputc(uVar29 >> 8,DAT_0041857c);
fputc(uVar29 & 0xff,DAT_0041857c);
for (uVar29 = 0; uVar29 < (sVar7 & 0xffff); uVar29 = uVar29 + 1 & 0xffff) {
cVar19 = *param_5;
param_5 = param_5 + 1;
fputc((int)cVar19,DAT_0041857c);
}
}
fputc((uint)(byte)((ushort)DQTinfo >> 8),DAT_0041857c);
fputc((int)DQTinfo,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_00418776 >> 8),DAT_0041857c);
fputc((int)_DAT_00418776,DAT_0041857c);
puVar6 = &DAT_00418779;
fputc((int)DAT_00418778,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004187b9);
puVar6 = &DAT_004187ba;
fputc((int)DAT_004187b9,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != (undefined1 *)0x4187fa);
fputc((uint)(byte)((ushort)_DAT_00415064 >> 8),DAT_0041857c);
fputc((int)_DAT_00415064,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_00415066 >> 8),DAT_0041857c);
fputc((int)_DAT_00415066,DAT_0041857c);
fputc((int)DAT_00415068,DAT_0041857c);
fputc((uint)(byte)(_DAT_0041506a >> 8),DAT_0041857c);
puVar6 = &DAT_004185d5;
fputc((int)_DAT_0041506a,DAT_0041857c);
fputc((uint)(byte)(DAT_0041506c >> 8),DAT_0041857c);
fputc((int)DAT_0041506c,DAT_0041857c);
fputc((int)DAT_0041506e,DAT_0041857c);
fputc((int)DAT_0041506f,DAT_0041857c);
fputc((int)DAT_00415070,DAT_0041857c);
fputc((int)DAT_00415071,DAT_0041857c);
fputc((int)DAT_00415072,DAT_0041857c);
fputc((int)DAT_00415073,DAT_0041857c);
fputc((int)DAT_00415074,DAT_0041857c);
fputc((int)DAT_00415075,DAT_0041857c);
fputc((int)DAT_00415076,DAT_0041857c);
fputc((int)DAT_00415077,DAT_0041857c);
fputc((uint)(byte)((ushort)_DHTinfo >> 8),DAT_0041857c);
fputc((int)_DHTinfo,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_004185d2 >> 8),DAT_0041857c);
fputc((int)_DAT_004185d2,DAT_0041857c);
fputc((int)DAT_004185d4,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004185e5);
puVar6 = &DAT_004185e5;
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004185f1);
puVar6 = &DAT_004185f2;
fputc((int)DAT_004185f1,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_00418602);
puVar6 = &DAT_00418602;
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004186a4);
puVar6 = &DAT_004186a5;
fputc((int)DAT_004186a4,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004186b5);
puVar6 = &DAT_004186b5;
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004186c1);
puVar6 = &DAT_004186c2;
fputc((int)DAT_004186c1,DAT_0041857c);
do {
uVar1 = *puVar6;
puVar6 = puVar6 + 1;
fputc((int)uVar1,DAT_0041857c);
} while (puVar6 != &DAT_004186d2);
puVar26 = (undefined2 *)&DAT_004186d2;
do {
uVar1 = *(undefined1 *)puVar26;
puVar26 = (undefined2 *)((int)puVar26 + 1);
fputc((int)uVar1,DAT_0041857c);
} while (puVar26 != &DQTinfo);
fputc((uint)(byte)((ushort)_DAT_00415078 >> 8),DAT_0041857c);
fputc((int)_DAT_00415078,DAT_0041857c);
fputc((uint)(byte)((ushort)_DAT_0041507a >> 8),DAT_0041857c);
fputc((int)_DAT_0041507a,DAT_0041857c);
fputc((int)DAT_0041507c,DAT_0041857c);
fputc((int)DAT_0041507d,DAT_0041857c);
fputc((int)DAT_0041507e,DAT_0041857c);
fputc((int)DAT_0041507f,DAT_0041857c);
fputc((int)DAT_00415080,DAT_0041857c);
fputc((int)DAT_00415081,DAT_0041857c);
fputc((int)DAT_00415082,DAT_0041857c);
fputc((int)DAT_00415083,DAT_0041857c);
fputc((int)DAT_00415084,DAT_0041857c);
fputc((int)DAT_00415085,DAT_0041857c);
DAT_004152f6 = '\a';
DAT_00415540 = 0;
local_78 = 0;
local_76 = 0;
local_74[0] = 0;
for (uVar29 = 0; uVar23 = 0, uVar29 < DAT_004183ba; uVar29 = uVar29 + 8 & 0xffff) {
for (; uVar23 < DAT_004183b8; uVar23 = uVar23 + 8 & 0xffff) {
uVar17 = 0;
iVar15 = uVar23 + uVar29 * DAT_0041506c;
do {
iVar11 = iVar15 * 3;
cVar19 = '\0';
uVar25 = uVar17;
do {
pbVar20 = (byte *)(DAT_004183b4 + iVar11);
bVar10 = pbVar20[2];
bVar2 = pbVar20[1];
bVar3 = *pbVar20;
iVar24 = (&DAT_004169b4)[bVar10];
iVar18 = (&DAT_00416db4)[bVar2];
iVar12 = (&DAT_004179b4)[bVar2];
iVar22 = (&DAT_004175b4)[bVar10];
iVar14 = (&DAT_00417db4)[bVar3];
iVar8 = (&DAT_004171b4)[bVar3];
cVar19 = cVar19 + '\x01';
(&DAT_004183bc)[uVar25] =
(char)((uint)((&DAT_004161b4)[bVar2] + (&DAT_00415db4)[bVar10] +
(&DAT_004165b4)[bVar3]) >> 0x10) + -0x80;
(&DAT_004183fc)[uVar25] = (char)((uint)(iVar18 + iVar24 + iVar8) >> 0x10);
(&DAT_0041843c)[uVar25] = (char)((uint)(iVar12 + iVar22 + iVar14) >> 0x10);
uVar25 = uVar25 + 1 & 0xff;
iVar11 = iVar11 + 3;
} while (cVar19 != '\b');
uVar17 = uVar17 + 8 & 0xff;
iVar15 = iVar15 + (uint)DAT_0041506c;
} while (uVar17 != 0x40);
FUN_004021c8(&DAT_004183bc,&DAT_004181b4,&local_78,&DAT_00415544,&DAT_004155a4);
FUN_004021c8(&DAT_004183fc,&DAT_004182b4,&local_76,&DAT_00415574,&DAT_004159a4);
FUN_004021c8(&DAT_0041843c,&DAT_004182b4,local_74,&DAT_00415574,&DAT_004159a4);
}
}
uVar29 = (int)DAT_004152f6 + 1;
if (-1 < DAT_004152f6) {
local_70 = CONCAT22((short)(1 << (uVar29 & 0x1f)) + -1,(undefined2)local_70);
local_70 = CONCAT31(local_70._1_3_,(char)uVar29);
FUN_0040207c(local_70);
}
fputc(0xff,DAT_0041857c);
fputc(0xd9,DAT_0041857c);
free(DAT_00415da4);
free(DAT_00415dac);
fclose(DAT_0041857c);
uVar27 = 0;
}
return uVar27;
}