int FUN_00481860(undefined4 param_1,byte param_2,int param_3,undefined4 param_4)

{
  bool bVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  byte local_28 [8];
  
  iVar5 = 0;
  iVar2 = param_3;
  if ((param_2 & 0x80) != 0) {
    iVar2 = FUN_00483e50(param_4);
    iVar5 = param_3 - iVar2;
    if (iVar5 < 1) {
      iVar5 = 0;
    }
    else {
      local_28[0] = param_2 & 0x7f;
      iVar4 = iVar5;
      do {
        iVar3 = FUN_004887a0(local_28,1,param_1);
        if (iVar3 != 1) {
          iVar4 = iVar5 - iVar4;
          bVar1 = iVar4 != iVar5;
          iVar5 = iVar4;
          if (bVar1) {
            return iVar4;
          }
          break;
        }
        iVar4 = iVar4 + -1;
      } while (iVar4 != 0);
    }
  }
  iVar4 = 0;
  if (0 < iVar2) {
    iVar4 = FUN_004887a0(param_4,iVar2,param_1);
  }
  return iVar5 + iVar4;
}