int __fastcall sub_401B00(_DWORD *a1, unsigned int *a2, unsigned int a3) { int result; // r0 unsigned int v6; // r9 int v7; // r4 int v8; // r1 unsigned int v9; // r0 unsigned int v10; // r3 char v11; // r5 int v12; // r2 _DWORD *v13; // r1 result = 32774; if ( a3 <= 0x419 ) { v6 = a3; if ( (a3 & 3) == 0 ) { v7 = 0; *a1 = 0; a1[1] = 0; sub_401464(a1: a1 + 3, a2: 1200); v8 = 0; v9 = 0; do { do { v10 = *a2; v11 = 4 * v8; v12 = v8 + 1; a1[v7++ + 3] = (v9 + (*a2 << (4 * v8))) & 0xFFFFFFF; v8 = 0; v9 = 0; } while ( v12 == 8 ); v6 -= 4; ++a2; v8 = v12; v9 = v10 >> (28 - v11); } while ( v6 != 0 ); if ( v9 != 0 ) { v13 = &a1[v7++]; v13[3] = v9 & 0xFFFFFFF; } *a1 = v7; result = 0; if ( a1[v7 + 2] == 0 && v7 != 0 ) { do { if ( a1[v7 + 2] != 0 ) break; *a1 = --v7; } while ( v7 != 0 ); return 0; } } } return result; }