void FUN_00413c1c(undefined4 *param_1)

{
  undefined4 *__ptr;
  int iVar1;
  int iVar2;
  void *pvVar3;
  int *__ptr_00;
  
  __ptr_00 = (int *)*param_1;
  do {
    if (__ptr_00 == (int *)0x0) {
      return;
    }
    iVar2 = *__ptr_00;
    if (iVar2 == 0) {
      param_1[1] = __ptr_00[1];
    }
    else {
      *(int *)(iVar2 + 4) = __ptr_00[1];
    }
    iVar1 = __ptr_00[2];
    *(int *)__ptr_00[1] = iVar2;
    if (iVar1 == 0) {
      if (__ptr_00[4] != 0) {
        dprintf(3,"clear_iaconf","assumption failure");
                    /* WARNING: Subroutine does not return */
        exit(1);
      }
      __ptr = (undefined4 *)__ptr_00[8];
      while (__ptr != (undefined4 *)0x0) {
        pvVar3 = (void *)*__ptr;
        free((void *)__ptr[2]);
        free(__ptr);
        __ptr = (undefined4 *)pvVar3;
      }
      dhcp6_clear_list(__ptr_00 + 6);
    }
    free(__ptr_00);
    __ptr_00 = (int *)*param_1;
  } while( true );
}