uint FUN_00403a20(uint param_1,int param_2,uint param_3)
{
uint *puVar1;
int iVar2;
uint uVar3;
uint *puVar4;
uint uVar5;
uint local_a8 [32];
uVar5 = 1 << (param_1 & 0x1f);
puVar4 = local_a8 + (param_1 >> 5);
uVar3 = 0;
puVar1 = local_a8;
do {
do {
do {
*puVar1 = 0;
puVar1 = puVar1 + 1;
} while (puVar1 != (uint *)&stack0xffffffd8);
*puVar4 = *puVar4 | uVar5;
iVar2 = FUN_0047f0b0(param_1 + 1,local_a8,0,0,0);
puVar1 = local_a8;
} while ((iVar2 < 0) || ((uVar5 & *puVar4) == 0));
iVar2 = FUN_0047f050(param_1,param_2 + uVar3,param_3 - uVar3);
if (iVar2 < 1) {
return uVar3;
}
uVar3 = uVar3 + iVar2;
if (*(char *)(param_2 + uVar3 + -1) == '\0') {
return uVar3;
}
} while (param_3 < uVar3);
return uVar3;
}