void FUN_00402ef0(int *param_1,int param_2,uint param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  undefined4 local_30;
  int local_2c;
  int local_28;
  
  if ((param_2 == 0) || (uVar3 = 0, param_3 == 0)) {
    if ((*param_1 != 0) && (iVar1 = sobj_empty(param_1[1]), iVar1 == 0)) {
      sobj_unescape_uri(param_1[1]);
      sobj_unescape_uri(param_1[2]);
      local_2c = param_1[1];
      local_28 = param_1[2];
      local_30 = 0;
      (*(code *)param_1[3])(param_1[4],&local_30);
    }
    sobj_free(param_1[1]);
    sobj_free(param_1[2]);
    *param_1 = 0;
  }
  else {
    for (; uVar3 < param_3; uVar3 = uVar3 + 1) {
      iVar1 = (int)*(char *)(param_2 + uVar3);
      if (*param_1 == 0) {
        if (iVar1 != 0x3d) {
          iVar2 = param_1[1];
          goto LAB_00403054;
        }
        *param_1 = 1;
      }
      else if (iVar1 == 0x26) {
        FUN_00402ef0(param_1,0,0);
      }
      else {
        iVar2 = param_1[2];
LAB_00403054:
        sobj_add_char(iVar2,iVar1);
      }
    }
  }
  return;
}