Загрузка данных


int __stdcall sub_E359A0(int a1, int a2, int a3, void (__stdcall **a4)(_DWORD *, int, int, int, int), int a5, int a6, int a7)
{
  int result; // eax
  int v8; // esi
  void (__cdecl *v9)(int); // edi
  int (__stdcall *v10)(int); // ebx
  int v11; // eax
  int v12; // eax
  int (__stdcall *v13)(int); // edi
  int v14; // edi
  _WORD *v15; // esi
  int v16; // eax
  bool v17; // zf
  int v18; // eax
  _BYTE *v19; // ecx
  _WORD *v20; // esi
  int v21; // eax
  int v22; // eax
  _BYTE *v23; // ecx
  int v24; // eax
  int (__stdcall *v25)(int); // esi
  int v26; // ebx
  _DWORD *v27; // ebx
  _DWORD *v28; // esi
  int v29; // eax
  int v30; // eax
  int v31; // [esp+8h] [ebp-18h] BYREF
  _WORD *v32; // [esp+Ch] [ebp-14h]
  _WORD *v33; // [esp+10h] [ebp-10h]
  int v34; // [esp+14h] [ebp-Ch]
  unsigned int v35; // [esp+18h] [ebp-8h]
  int v36; // [esp+1Ch] [ebp-4h] BYREF
  int v37; // [esp+30h] [ebp+10h]
  int v38; // [esp+30h] [ebp+10h]

  v34 = 0;
  v31 = 0;
  v36 = 0;
  v33 = decode_string_xor4((int)&unk_E384B8);
  v32 = decode_string_xor4((int)&unk_E384D0);
  result = sub_E313DF(4096);
  v8 = result;
  if ( result )
  {
    v9 = (void (__cdecl *)(int))dword_E371CC;
    dword_E371CC(result);
    v35 = 0;
    v10 = dword_E37150;
    if ( a2 != 1 )
    {
      do
      {
        v11 = v10(v8);
        v9(v8 + 2 * v11);
        ++v35;
      }
      while ( v35 < a2 - 1 );
    }
    v12 = v10(v8);
    v9(v8 + 2 * v12);
    v13 = dword_E3716C;
    v37 = dword_E3716C(aWql);
    v14 = v13(v8);
    sub_E313F8(v8);
    v15 = v33;
    if ( v33 )
    {
      v16 = v10((int)v33);
      v17 = 2 * v16 == 0;
      v18 = 2 * v16;
      v19 = v33;
      if ( !v17 )
      {
        do
        {
          *v19++ = 0;
          --v18;
        }
        while ( v18 );
      }
      dword_E37110(v19, v15);
    }
    v20 = v32;
    if ( v32 )
    {
      v21 = v10((int)v32);
      v17 = 2 * v21 == 0;
      v22 = 2 * v21;
      v23 = v32;
      if ( !v17 )
      {
        do
        {
          *v23++ = 0;
          --v22;
        }
        while ( v22 );
      }
      dword_E37110(v23, v20);
    }
    v24 = (*(int (__stdcall **)(int, int, int, int, _DWORD))(*(_DWORD *)dword_E3A084 + 80))(
            dword_E3A084,
            v37,
            v14,
            48,
            0);
    v25 = dword_E37168;
    v26 = v24;
    dword_E37168(v37);
    result = v25(v14);
    if ( v26 >= 0 )
    {
      while ( 1 )
      {
        v30 = v34;
        if ( !v34 )
          break;
        (*(void (__stdcall **)(int, int, int, int *, int *))(*(_DWORD *)v34 + 16))(v34, -1, 1, &v36, &v31);
        if ( !v31 )
        {
          v30 = v34;
          break;
        }
        v27 = (_DWORD *)sub_E313DF(4 * a2);
        if ( a2 )
        {
          v28 = v27;
          v38 = a2;
          do
          {
            v29 = sub_E313DF(16);
            *v28 = v29;
            dword_E37170(v29);
            sub_E35421(v36, *(_DWORD *)((char *)v28 + a1 - (_DWORD)v27), *v28);
            ++v28;
            --v38;
          }
          while ( v38 );
        }
        (*a4)(v27, a2, a5, a6, a7);
        sub_E313F8(v27);
        (*(void (__stdcall **)(int))(*(_DWORD *)v36 + 8))(v36);
        v36 = 0;
      }
      (*(void (__stdcall **)(int))(*(_DWORD *)v30 + 8))(v30);
      result = v36;
      if ( v36 )
        result = (*(int (__stdcall **)(int))(*(_DWORD *)v36 + 8))(v36);
    }
  }
  return result;
}