signed int __usercall sub_4498C0@<eax>(int a1@<ebp>)
{
  signed int v1; // eax@1
  char v2; // dl@2
  char v3; // cl@2
  char v4; // dl@2
  char v5; // cl@2
  char v6; // dl@2
  signed int v7; // eax@3
  char v8; // dl@4
  char v9; // cl@4
  char v10; // dl@4
  char v11; // cl@4
  char v12; // dl@4
  FILE *v13; // edi@6
  signed int result; // eax@7
  char *v15; // esi@8
  signed int v16; // edx@14
  char v17; // bl@20
  char v18; // di@20
  __int16 *v19; // esi@20
  char *v20; // edx@20
  signed int v21; // eax@21
  char *v22; // ecx@26
  char *v23; // esi@26
  char v24; // dl@27
  signed int v25; // ecx@32
  int v26; // edx@33
  signed int v27; // ecx@38
  char v28; // [sp+Ch] [bp-280h]@1
  char v29; // [sp+Dh] [bp-27Fh]@1
  char v30; // [sp+Eh] [bp-27Eh]@1
  char v31; // [sp+Fh] [bp-27Dh]@1
  char v32; // [sp+10h] [bp-27Ch]@1
  char v33; // [sp+11h] [bp-27Bh]@1
  char v34; // [sp+12h] [bp-27Ah]@1
  char v35; // [sp+13h] [bp-279h]@1
  char v36; // [sp+14h] [bp-278h]@1
  char v37; // [sp+15h] [bp-277h]@1
  char v38; // [sp+16h] [bp-276h]@1
  char v39; // [sp+17h] [bp-275h]@1
  char v40; // [sp+18h] [bp-274h]@1
  char v41; // [sp+19h] [bp-273h]@1
  char v42; // [sp+1Ah] [bp-272h]@1
  char v43; // [sp+1Bh] [bp-271h]@1
  char v44; // [sp+1Ch] [bp-270h]@1
  char v45; // [sp+1Dh] [bp-26Fh]@1
  char v46; // [sp+1Eh] [bp-26Eh]@1
  char v47; // [sp+1Fh] [bp-26Dh]@1
  char v48; // [sp+20h] [bp-26Ch]@1
  char v49; // [sp+21h] [bp-26Bh]@1
  char v50; // [sp+22h] [bp-26Ah]@1
  char v51; // [sp+23h] [bp-269h]@1
  char v52; // [sp+24h] [bp-268h]@1
  char v53; // [sp+25h] [bp-267h]@1
  char v54; // [sp+26h] [bp-266h]@1
  char v55; // [sp+27h] [bp-265h]@1
  char v56; // [sp+28h] [bp-264h]@1
  char v57; // [sp+29h] [bp-263h]@1
  char v58; // [sp+2Ah] [bp-262h]@1
  char v59; // [sp+2Bh] [bp-261h]@1
  char v60; // [sp+2Ch] [bp-260h]@1
  char v61; // [sp+2Dh] [bp-25Fh]@1
  char v62; // [sp+2Eh] [bp-25Eh]@1
  char v63; // [sp+2Fh] [bp-25Dh]@1
  char v64; // [sp+30h] [bp-25Ch]@1
  char v65; // [sp+31h] [bp-25Bh]@1
  char v66; // [sp+32h] [bp-25Ah]@1
  char v67; // [sp+33h] [bp-259h]@1
  char v68; // [sp+34h] [bp-258h]@1
  char v69; // [sp+35h] [bp-257h]@1
  char v70; // [sp+36h] [bp-256h]@1
  char v71; // [sp+37h] [bp-255h]@1
  char v72; // [sp+38h] [bp-254h]@1
  char v73; // [sp+39h] [bp-253h]@1
  char v74; // [sp+3Ah] [bp-252h]@1
  char v75; // [sp+3Bh] [bp-251h]@1
  char v76; // [sp+3Ch] [bp-250h]@1
  char v77; // [sp+3Dh] [bp-24Fh]@1
  char v78; // [sp+3Eh] [bp-24Eh]@1
  char v79; // [sp+3Fh] [bp-24Dh]@1
  char v80; // [sp+40h] [bp-24Ch]@1
  char v81; // [sp+41h] [bp-24Bh]@1
  char v82; // [sp+42h] [bp-24Ah]@1
  char v83; // [sp+43h] [bp-249h]@1
  char v84; // [sp+44h] [bp-248h]@1
  char v85; // [sp+45h] [bp-247h]@1
  char v86; // [sp+46h] [bp-246h]@1
  char v87; // [sp+47h] [bp-245h]@1
  char v88; // [sp+48h] [bp-244h]@1
  char v89; // [sp+49h] [bp-243h]@1
  char v90; // [sp+4Ah] [bp-242h]@1
  char v91; // [sp+4Bh] [bp-241h]@1
  char v92; // [sp+4Ch] [bp-240h]@1
  char v93; // [sp+4Dh] [bp-23Fh]@1
  char v94; // [sp+4Eh] [bp-23Eh]@1
  char v95; // [sp+4Fh] [bp-23Dh]@1
  char v96; // [sp+50h] [bp-23Ch]@1
  char v97; // [sp+51h] [bp-23Bh]@1
  char v98; // [sp+52h] [bp-23Ah]@1
  char v99; // [sp+53h] [bp-239h]@1
  char v100; // [sp+54h] [bp-238h]@1
  char v101; // [sp+55h] [bp-237h]@1
  char v102; // [sp+56h] [bp-236h]@1
  char v103; // [sp+57h] [bp-235h]@1
  char v104; // [sp+58h] [bp-234h]@1
  char v105; // [sp+59h] [bp-233h]@1
  char v106; // [sp+5Ah] [bp-232h]@1
  char v107; // [sp+5Bh] [bp-231h]@1
  char v108; // [sp+5Ch] [bp-230h]@1
  char v109; // [sp+5Dh] [bp-22Fh]@1
  char v110; // [sp+5Eh] [bp-22Eh]@1
  char v111; // [sp+5Fh] [bp-22Dh]@1
  char v112; // [sp+60h] [bp-22Ch]@1
  char v113; // [sp+61h] [bp-22Bh]@1
  char v114; // [sp+62h] [bp-22Ah]@1
  char v115; // [sp+63h] [bp-229h]@1
  char v116; // [sp+64h] [bp-228h]@1
  char v117; // [sp+65h] [bp-227h]@1
  char v118; // [sp+66h] [bp-226h]@1
  char v119; // [sp+67h] [bp-225h]@1
  char v120; // [sp+68h] [bp-224h]@1
  char v121; // [sp+69h] [bp-223h]@1
  char v122; // [sp+6Ah] [bp-222h]@1
  char v123; // [sp+6Bh] [bp-221h]@1
  char v124; // [sp+6Ch] [bp-220h]@1
  char v125; // [sp+6Dh] [bp-21Fh]@1
  char v126; // [sp+6Eh] [bp-21Eh]@1
  char v127; // [sp+6Fh] [bp-21Dh]@1
  char v128; // [sp+70h] [bp-21Ch]@1
  char v129; // [sp+71h] [bp-21Bh]@1
  char v130; // [sp+72h] [bp-21Ah]@1
  char v131; // [sp+73h] [bp-219h]@1
  char v132; // [sp+74h] [bp-218h]@1
  char v133; // [sp+75h] [bp-217h]@1
  char v134; // [sp+76h] [bp-216h]@1
  char v135; // [sp+77h] [bp-215h]@1
  char v136; // [sp+78h] [bp-214h]@1
  char v137; // [sp+79h] [bp-213h]@1
  char v138; // [sp+7Ah] [bp-212h]@1
  char v139; // [sp+7Bh] [bp-211h]@1
  char v140; // [sp+7Ch] [bp-210h]@1
  char v141; // [sp+7Dh] [bp-20Fh]@1
  char v142; // [sp+7Eh] [bp-20Eh]@1
  char v143; // [sp+7Fh] [bp-20Dh]@1
  char v144; // [sp+80h] [bp-20Ch]@1
  char v145; // [sp+81h] [bp-20Bh]@1
  char v146; // [sp+82h] [bp-20Ah]@1
  char v147; // [sp+83h] [bp-209h]@1
  char v148; // [sp+84h] [bp-208h]@1
  char v149; // [sp+85h] [bp-207h]@1
  char v150; // [sp+86h] [bp-206h]@1
  char v151; // [sp+87h] [bp-205h]@1
  char v152; // [sp+88h] [bp-204h]@1
  char v153; // [sp+89h] [bp-203h]@1
  char v154; // [sp+8Ah] [bp-202h]@1
  char v155; // [sp+8Bh] [bp-201h]@1
  char v156; // [sp+8Ch] [bp-200h]@6

  v56 = -64;
  v57 = -64;
  v58 = -64;
  v60 = -64;
  v62 = -64;
  v28 = 0;
  v29 = 0;
  v30 = 0;
  v31 = 5;
  v32 = -128;
  v33 = 0;
  v34 = 0;
  v35 = 5;
  v36 = 0;
  v37 = -128;
  v38 = 0;
  v39 = 5;
  v40 = -128;
  v41 = -128;
  v42 = 0;
  v43 = 5;
  v44 = 0;
  v45 = 0;
  v46 = -128;
  v47 = 5;
  v48 = -128;
  v49 = 0;
  v50 = -128;
  v51 = 5;
  v52 = 0;
  v53 = -128;
  v54 = -128;
  v55 = 5;
  v59 = 5;
  v61 = -36;
  v63 = 5;
  v64 = -90;
  v65 = -54;
  v66 = -16;
  v67 = 5;
  v68 = -34;
  v69 = 0;
  v70 = 0;
  v71 = 5;
  v72 = -1;
  v73 = 95;
  v74 = 0;
  v75 = 5;
  v76 = -1;
  v77 = -1;
  v78 = -96;
  v79 = 5;
  v80 = 0;
  v81 = 95;
  v82 = -46;
  v83 = 5;
  v84 = 80;
  v85 = -46;
  v86 = -1;
  v87 = 5;
  v88 = 40;
  v89 = -31;
  v90 = 40;
  v91 = 5;
  v92 = -11;
  v93 = -61;
  v94 = -106;
  v95 = 5;
  v96 = -31;
  v97 = -96;
  v98 = 95;
  v99 = 5;
  v100 = -61;
  v116 = -1;
  v128 = -1;
  v133 = -1;
  v136 = -1;
  v137 = -1;
  v142 = -1;
  v144 = -1;
  v146 = -1;
  v149 = -1;
  v150 = -1;
  v152 = -1;
  v153 = -1;
  v154 = -1;
  v101 = 125;
  v102 = 70;
  v103 = 5;
  v104 = -101;
  v105 = 85;
  v106 = 30;
  v107 = 5;
  v108 = 70;
  v109 = 65;
  v110 = 55;
  v111 = 5;
  v112 = 40;
  v113 = 35;
  v114 = 30;
  v115 = 5;
  v117 = -5;
  v118 = -16;
  v119 = 5;
  v120 = -96;
  v121 = -96;
  v122 = -92;
  v123 = 5;
  v124 = -128;
  v125 = -128;
  v126 = -128;
  v127 = 5;
  v129 = 0;
  v130 = 0;
  v131 = 5;
  v132 = 0;
  v134 = 0;
  v135 = 5;
  v138 = 0;
  v139 = 5;
  v140 = 0;
  v141 = 0;
  v143 = 5;
  v145 = 0;
  v147 = 5;
  v148 = 0;
  v151 = 5;
  v155 = 5;
  v1 = 0;
  do
  {
    v2 = *(&v29 + v1);
    byte_6158AA[v1] = *(&v30 + v1);
    v3 = *(&v28 + v1);
    byte_6158A9[v1] = v2;
    v4 = *(&v118 + v1);
    byte_6158A8[v1] = v3;
    v5 = *(&v117 + v1);
    byte_6158AB[v1] = 2;
    byte_615C82[v1] = v4;
    v6 = *(&v116 + v1);
    byte_615C81[v1] = v5;
    byte_615C80[v1] = v6;
    byte_615C83[v1] = 2;
    v1 += 4;
  }
  while ( v1 < 40 );
  v7 = 0;
  do
  {
    v8 = *(&v69 + v7);
    byte_6158D2[v7] = *(&v70 + v7);
    v9 = *(&v68 + v7);
    byte_6158D1[v7] = v8;
    v10 = *(&v94 + v7);
    byte_6158D0[v7] = v9;
    v11 = *(&v93 + v7);
    byte_6158D3[v7] = 5;
    byte_615C6A[v7] = v10;
    v12 = *(&v92 + v7);
    byte_615C69[v7] = v11;
    byte_615C68[v7] = v12;
    byte_615C6B[v7] = 5;
    v7 += 4;
  }
  while ( v7 < 24 );
  if ( !dword_614D70 )
  {
    sprintf(&v156, aSS, &off_54BD54, aPalPalet_00_cg);
    v13 = fopen(&v156, aRb);
    if ( !v13 )
    {
      MessageBoxA(hWnd, aJtLOEv, aErrorCode13, 0x10u);
      return 0;
    }
    v15 = &byte_6158E9;
    do
    {
      v15[1] = fgetc(v13);
      *v15 = fgetc(v13);
      *(v15 - 1) = fgetc(v13);
      v15[2] = 5;
      v15 += 4;
    }
    while ( (signed int)v15 < (signed int)byte_615C69 );
    fclose(v13);
    qmemcpy(&unk_615CB4, byte_6158A8, 0x400u);
  }
  byte_615B4A = 0;
  byte_615B49 = 0;
  byte_615B48 = 0;
  (*(void (__stdcall **)(_DWORD, signed int, char *, char *, _DWORD))(**((_DWORD **)pMem + 1) + 20))(
    *((_DWORD *)pMem + 1),
    4,
    byte_6158A8,
    (char *)pMem + 144,
    0);
  if ( !*((_DWORD *)pMem + 36) )
  {
    MessageBoxA(hWnd, aLEJtLev, aErrorCode15, 0x10u);
    return 0;
  }
  v16 = dword_5439B0;
  if ( dword_5439B0 == 8 )
  {
    if ( (*(int (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)pMem + 2) + 124))(
           *((_DWORD *)pMem + 2),
           *((_DWORD *)pMem + 36)) )
    {
      while ( MessageBoxA(hWnd, aNiWJtLIw, aErrorCode16, 0x35u) != 2 )
      {
        if ( !(*(int (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)pMem + 2) + 124))(
                *((_DWORD *)pMem + 2),
                *((_DWORD *)pMem + 36)) )
          goto LABEL_18;
      }
      return 0;
    }
LABEL_18:
    v16 = dword_5439B0;
  }
  result = 1;
  if ( v16 == 16 )
  {
    v17 = dword_614950;
    v18 = dword_6154A4;
    v19 = &word_616BD8;
    v20 = byte_6158AA;
    do
    {
      LOWORD(a1) = (unsigned __int8)((unsigned __int8)*(v20 - 2) >> dword_614540);
      LOWORD(result) = (unsigned __int8)((unsigned __int8)*(v20 - 1) >> dword_6163CC);
      v21 = result << dword_6154A0;
      a1 = v21 + (a1 << dword_61509C);
      LOWORD(v21) = (unsigned __int8)((unsigned __int8)*v20 >> v17);
      result = v21 << v18;
      *v19 = result + a1;
      if ( !((_WORD)result + (_WORD)a1) )
        *v19 = 1;
      v20 += 4;
      ++v19;
    }
    while ( (signed int)v20 < 6380714 );
    word_616BD8 = 0;
    result = 1;
  }
  else if ( v16 == 24 )
  {
    v22 = &byte_6160B6;
    v23 = byte_6158A9;
    do
    {
      *v22 = *(v23 - 1);
      *(v22 - 1) = *v23;
      v24 = v23[1];
      *(v22 - 2) = v24;
      if ( !((unsigned __int8)*(v22 - 1) | (unsigned __int8)(*v22 | v24)) )
        *(v22 - 2) = 1;
      v23 += 4;
      v22 += 3;
    }
    while ( (signed int)v23 < 6380713 );
    byte_6160B6 = 0;
    word_6160B4 = 0;
  }
  else if ( v16 >= 32 )
  {
    v25 = 0;
    do
    {
      v26 = (unsigned __int8)byte_6158AA[v25 * 4]
          + (((unsigned __int8)byte_6158A9[v25 * 4] + ((unsigned __int8)byte_6158A8[v25 * 4] << 8)) << 8);
      dword_614958[v25] = v26;
      if ( !v26 )
        dword_614958[v25] = 1;
      ++v25;
    }
    while ( v25 < 256 );
    dword_614958[0] = 0;
  }
  if ( !dword_614D70 )
  {
    v27 = 0;
    do
    {
      *((_BYTE *)off_545128 + v27) = v27;
      *((_BYTE *)off_54512C + v27) = v27;
      *((_BYTE *)off_545130 + v27) = v27;
      ++v27;
    }
    while ( v27 < 256 );
  }
  dword_614D70 = 1;
  dword_614D84 = 0;
  return result;
}