rendered paste body//----- (004CBBC0) --------------------------------------------------------
int __cdecl sub_4CBBC0(int a1)
{
int v1; // esi@1
int result; // eax@2
char (**v3)[18]; // eax@3
int v4; // ebx@5
int (__cdecl *v5)(_DWORD); // eax@13
int v6; // eax@1
int v7; // eax@11
int v8; // ecx@13
v6 = sub_4CC080(0x4Cu, (int)".\\crypto\\dh\\dh_lib.c", 111);
v1 = v6;
if ( !v6 )
{
sub_4CEC20(5u, 105, 65, (int)".\\crypto\\dh\\dh_lib.c", 114);
return 0;
}
v3 = (char (**)[18])dword_542C1C;
if ( !dword_542C1C )
{
v3 = sub_4CC8C0();
dword_542C1C = (int)v3;
}
v4 = a1;
*(_DWORD *)(v1 + 68) = v3;
if ( v4 )
{
if ( !sub_4CD7D0(v4) )
{
sub_4CEC20(5u, 105, 38, (int)".\\crypto\\dh\\dh_lib.c", 124);
sub_4CC300((void *)v1);
return 0;
}
*(_DWORD *)(v1 + 72) = v4;
}
else
{
*(_DWORD *)(v1 + 72) = sub_4CE580();
}
if ( !*(_DWORD *)(v1 + 72) || (v7 = _fileno(*(FILE **)(v1 + 72)), *(_DWORD *)(v1 + 68) = v7, v7) )
{
v8 = *(_DWORD *)(v1 + 68);
*(_DWORD *)v1 = 0;
*(_DWORD *)(v1 + 4) = 0;
*(_DWORD *)(v1 + 8) = 0;
*(_DWORD *)(v1 + 12) = 0;
*(_DWORD *)(v1 + 16) = 0;
*(_DWORD *)(v1 + 20) = 0;
*(_DWORD *)(v1 + 24) = 0;
*(_DWORD *)(v1 + 36) = 0;
*(_DWORD *)(v1 + 40) = 0;
*(_DWORD *)(v1 + 44) = 0;
*(_DWORD *)(v1 + 48) = 0;
*(_DWORD *)(v1 + 52) = 0;
*(_DWORD *)(v1 + 32) = 0;
*(_DWORD *)(v1 + 56) = 1;
*(_DWORD *)(v1 + 28) = *(_DWORD *)(v8 + 24);
sub_4CE4A0(8, v1, v1 + 60);
v5 = *(int (__cdecl **)(_DWORD))(*(_DWORD *)(v1 + 68) + 16);
if ( v5 )
{
if ( !v5(v1) )
{
if ( *(_DWORD *)(v1 + 72) )
sub_4CD860(*(void **)(v1 + 72));
sub_4CE510(8, v1, v1 + 60);
sub_4CC300((void *)v1);
v1 = 0;
}
}
result = v1;
}
else
{
sub_4CEC20(5u, 105, 38, (int)".\\crypto\\dh\\dh_lib.c", 137);
sub_4CD860(*(void **)(v1 + 72));
sub_4CC300((void *)v1);
result = 0;
}
return result;
}
//----- (004CBD20) --------------------------------------------------------
void __cdecl sub_4CBD20(void *Memory)
{
int v1; // esi@1
int (__cdecl *v2)(_DWORD); // eax@3
int v3; // eax@2
v1 = (int)Memory;
if ( Memory )
{
sub_4CF410((int)((char *)Memory + 56), -1, 26, (int)".\\crypto\\dh\\dh_lib.c", 178);
if ( v3 <= 0 )
{
v2 = *(int (__cdecl **)(_DWORD))(*(_DWORD *)(v1 + 68) + 20);
if ( v2 )
v2(v1);
if ( *(_DWORD *)(v1 + 72) )
sub_4CD860(*(void **)(v1 + 72));
sub_4CE510(8, v1, v1 + 60);
if ( *(_DWORD *)(v1 + 8) )
sub_4CCD30(*(void **)(v1 + 8));
if ( *(_DWORD *)(v1 + 12) )
sub_4CCD30(*(void **)(v1 + 12));
if ( *(_DWORD *)(v1 + 36) )
sub_4CCD30(*(void **)(v1 + 36));
if ( *(_DWORD *)(v1 + 40) )
sub_4CCD30(*(void **)(v1 + 40));
if ( *(_DWORD *)(v1 + 44) )
sub_4CC300(*(void **)(v1 + 44));
if ( *(_DWORD *)(v1 + 52) )
sub_4CCD30(*(void **)(v1 + 52));
if ( *(_DWORD *)(v1 + 20) )
sub_4CCD30(*(void **)(v1 + 20));
if ( *(_DWORD *)(v1 + 24) )
sub_4CCD30(*(void **)(v1 + 24));
sub_4CC300((void *)v1);
}
}
}