int
__stdcall calc(const char
*
key,
int
blank)
{
char v3;
/
/
al
int
v4;
/
/
ebx
bigNumber
*
v5;
/
/
eax
int
v6;
/
/
ebx
char v7;
/
/
al
int
result;
/
/
eax
signed
int
keylen;
/
/
[esp
+
10h
] [ebp
-
208h
]
signed
int
i;
/
/
[esp
+
14h
] [ebp
-
204h
] MAPDST
bigNumber ansAndRet;
/
/
[esp
+
18h
] [ebp
-
200h
]
bigNumber Val;
/
/
[esp
+
60h
] [ebp
-
1B8h
]
bigNumber vala;
/
/
[esp
+
A8h] [ebp
-
170h
]
bigNumber valc;
/
/
[esp
+
F0h] [ebp
-
128h
]
bigNumber valb;
/
/
[esp
+
138h
] [ebp
-
E0h]
bigNumber valx;
/
/
[esp
+
180h
] [ebp
-
98h
]
bigNumber a2;
/
/
[esp
+
1C8h
] [ebp
-
50h
]
Val.
len
=
-
1
;
LOBYTE(Val.sig)
=
0
;
memset(&Val,
0
,
0x40u
);
initBigNumber(
1
,
0
, &vala);
initBigNumber(
62
,
0
, &valb);
initBigNumber(
18
,
0
, &valc);
keylen
=
strlen(key);
i
=
0
;
for
( i
=
0
; i < keylen;
+
+
i )
{
v3
=
key[i];
if
( v3 <
'0'
|| v3 >
'9'
)
{
if
( v3 <
'A'
|| v3 >
'Z'
)
{
if
( v3 <
'a'
|| v3 >
'z'
)
v4
=
-
1
;
else
v4
=
v3
-
'='
;
}
else
{
v4
=
v3
-
'7'
;
}
}
else
{
v4
=
v3
-
'0'
;
}
if
( v4 !
=
-
1
)
{
initBigNumber(v4,
0
, &valx);
v5
=
sub_4038E1(&vala, &a2, &valx);
sub_40447F((
int
)&Val, &ansAndRet, (
int
)v5);
sub_404669(&vala, &valb, &ansAndRet);
}
}
v6
=
0
;
if
( Val.
len
>
=
0
)
{
while
(
1
)
{
qmemcpy(&vala, mod(&Val, &ansAndRet, &valc), sizeof(vala));
qmemcpy(&Val, div(Val.num, &ansAndRet, &valc), sizeof(Val));
if
( vala.num[
0
] <
=
9u
&& !vala.
len
)
break
;
if
( (unsigned
int
)(vala.num[
0
]
-
10
) <
=
7
&& !vala.
len
)
{
v7
=
LOBYTE(vala.num[
0
])
+
'7'
;
goto LABEL_22;
}
if
( vala.
len
!
=
-
1
|| vala.num[
0
] )
{
printf(
"error %d %d \n"
, vala.num[
0
], vala.
len
);
goto LABEL_28;
}
*
(_BYTE
*
)(blank
+
v6)
=
'0'
;
LABEL_26:
+
+
v6;
LABEL_28:
if
( Val.
len
<
0
)
goto LABEL_29;
}
v7
=
LOBYTE(vala.num[
0
])
+
'0'
;
LABEL_22:
*
(_BYTE
*
)(blank
+
v6)
=
v7;
goto LABEL_26;
}
LABEL_29:
result
=
blank;
*
(_BYTE
*
)(blank
+
v6)
=
0
;
return
result;
}