undefined4 FUN_004045cc(int param_1,int param_2,undefined4 param_3,undefined4 param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  int *piVar6;
  int *piVar7;
  undefined4 local_88;
  undefined4 *local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  int local_74;
  int local_70;
  int local_6c;
  int local_68;
  int local_64;
  int local_60;
  int local_5c;
  int local_58;
  int local_54;
  int local_50;
  int local_4c;
  int local_48;
  int local_44;
  int local_40;
  int *local_3c;
  int *local_38;
  int *local_34;
  int *local_30;
  
  iVar1 = find_hostconf(param_4);
  if (iVar1 != 0) {
    dprintf(7,"update_ia","found a host configuration named %s",*(undefined4 *)(iVar1 + 4));
  }
  iVar2 = FUN_00404330(param_4,0,*(undefined4 *)(param_2 + 8),*(undefined4 *)(param_2 + 0xc));
  if (iVar2 == 0) {
    uVar5 = duidstr(param_4);
    dprintf(6,"update_ia","no binding found for %s",uVar5);
    if (param_1 == 5) {
      iVar1 = FUN_00403984(*(undefined4 *)(param_2 + 8),*(undefined4 *)(param_2 + 0xc),3,param_3);
      if (iVar1 == 0) {
        return 0;
      }
      dprintf(5,"update_ia","failed to make an option list");
    }
    else if (param_1 != 6) {
      uVar5 = dhcp6msgstr(param_1);
      dprintf(3,"update_ia","impossible message type %s",uVar5);
      return 0xffffffff;
    }
    uVar5 = 0xffffffff;
  }
  else {
    local_88 = 0;
    local_84 = &local_88;
    FUN_00404500(iVar2);
    piVar7 = *(int **)(param_2 + 0x28);
    if (piVar7 != (int *)0x0) {
      local_3c = &local_5c;
      local_38 = &local_54;
      local_34 = &local_74;
      local_30 = &local_6c;
      local_40 = iVar2 + 0x1c;
      do {
        if (*(int *)(param_2 + 8) == 4) {
          if (piVar7[2] == 5) {
            local_54 = piVar7[5];
            local_4c = piVar7[7];
            local_58 = piVar7[4];
            local_50 = piVar7[6];
            local_48 = piVar7[8];
            local_5c = piVar7[3];
            local_44 = piVar7[9];
            iVar3 = dhcp6_find_listval(local_40,5,local_3c,0);
            if (iVar3 == 0) {
              uVar5 = in6addr2str(local_38,0);
              iVar3 = local_44;
              uVar4 = FUN_00404404(iVar2);
              dprintf(7,"update_ia","%s/%d is not found in %s",uVar5,iVar3,uVar4);
              local_5c = 0;
              local_58 = 0;
            }
            else {
              local_58 = *(undefined4 *)(iVar3 + 0x10);
              local_5c = *(int *)(iVar3 + 0xc);
            }
            uVar5 = 5;
            piVar6 = local_3c;
            goto LAB_00404834;
          }
        }
        else {
          if (*(int *)(param_2 + 8) != 6) {
            dprintf(3,"update_ia","unsupported IA type");
            return 0xffffffff;
          }
          if (piVar7[2] == 7) {
            local_6c = piVar7[5];
            local_64 = piVar7[7];
            local_70 = piVar7[4];
            local_68 = piVar7[6];
            local_60 = piVar7[8];
            local_74 = piVar7[3];
            iVar3 = dhcp6_find_listval(local_40,7,local_34,0);
            if (iVar3 == 0) {
              uVar5 = in6addr2str(local_30,0);
              uVar4 = FUN_00404404(iVar2);
              dprintf(7,"update_ia","%s is not found in %s",uVar5,uVar4);
              local_74 = 0;
              local_70 = 0;
            }
            else {
              local_70 = *(undefined4 *)(iVar3 + 0x10);
              local_74 = *(int *)(iVar3 + 0xc);
            }
            uVar5 = 7;
            piVar6 = local_34;
LAB_00404834:
            iVar3 = dhcp6_add_listval(&local_88,uVar5,piVar6,0);
            if (iVar3 == 0) {
              dprintf(5,"update_ia","failed  to copy binding info");
              goto LAB_00404868;
            }
          }
        }
        piVar7 = (int *)*piVar7;
      } while (piVar7 != (int *)0x0);
    }
    local_7c = 0;
    local_78 = 0;
    local_80 = *(undefined4 *)(iVar2 + 0x18);
    FUN_00403448(&local_80,&local_88,iVar1);
    iVar1 = dhcp6_add_listval(param_3,*(undefined4 *)(param_2 + 8),&local_80,&local_88);
    if (iVar1 == 0) {
LAB_00404868:
      dhcp6_clear_list(&local_88);
      uVar5 = 0xffffffff;
    }
    else {
      dhcp6_clear_list(&local_88);
      uVar5 = 0;
    }
  }
  return uVar5;
}