undefined4 sendACK(int param_1,in_addr_t param_2)

{
  uint uVar1;
  bool bVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  char *__src;
  int iVar6;
  undefined4 uVar7;
  uint uVar8;
  undefined4 *puVar9;
  uint local_348;
  char acStack_344 [256];
  undefined1 auStack_244 [16];
  in_addr local_234;
  undefined1 auStack_228 [212];
  undefined1 auStack_154 [308];
  
  uVar3 = DAT_0041bc60;
  FUN_004043f0(auStack_244,param_1,5);
  local_234.s_addr = param_2;
  iVar4 = find_static_lease_by_chaddr(param_1 + 0x1c);
  if (iVar4 == 0) {
    uVar8 = get_option(param_1,0x33);
    if (uVar8 != 0) {
      uVar3 = uVar8 + 3 & 3;
      uVar1 = uVar8 & 3;
      uVar3 = (*(int *)((uVar8 + 3) - uVar3) << (3 - uVar3) * 8 |
              uVar8 & 0xffffffffU >> (uVar3 + 1) * 8) & -1 << (4 - uVar1) * 8 |
              *(uint *)(uVar8 - uVar1) >> uVar1 * 8;
      uVar3 = uVar3 << 0x18 | uVar3 >> 0x18 | uVar3 >> 8 & 0xff00 | (uVar3 & 0xff00) << 8;
      if ((uVar3 != 0xffffffff) &&
         ((local_348 = DAT_0041bc60, DAT_0041bc60 < uVar3 || (uVar3 < DAT_0041bc7c)))) {
        bVar2 = false;
        goto LAB_0040475c;
      }
    }
    local_348 = uVar3;
    bVar2 = false;
  }
  else {
    local_348 = 0xffffffff;
    bVar2 = true;
  }
LAB_0040475c:
  add_simple_option(auStack_154,0x33,
                    local_348 << 0x18 | local_348 >> 0x18 | local_348 >> 8 & 0xff00 |
                    (local_348 & 0xff00) << 8);
  for (puVar9 = DAT_0041bc4c; puVar9 != (undefined4 *)0x0; puVar9 = (undefined4 *)puVar9[1]) {
    if (*(char *)*puVar9 != '3') {
      add_option_string(auStack_154);
    }
  }
  FUN_00404494(auStack_244);
  pcVar5 = inet_ntoa(local_234);
  syslog(0xe5,"DHCP: Server sending ACK to %s. (Lease time = %ld)",pcVar5,local_348);
  __src = (char *)get_option(param_1,0xc);
  pcVar5 = __src;
  if (__src != (char *)0x0) {
    pcVar5 = acStack_344;
    memcpy(pcVar5,__src,(uint)(byte)__src[-1])   //possible issue identified - semgrep
    acStack_344[(byte)__src[-1]] = '\0';
  }
  iVar6 = FUN_00404520(auStack_244,0);
  uVar7 = 0xffffffff;
  if (-1 < iVar6) {
    if ((iVar4 != 0) && (*(undefined4 *)(iVar4 + 0x18) = 1, pcVar5 != (char *)0x0)) {
      strncpy((char *)(iVar4 + 0x1c),pcVar5,0x40)   //possible issue identified - semgrep
      *(undefined1 *)(iVar4 + 0x5b) = 0;
    }
    uVar7 = 0;
    if (!bVar2) {
      iVar4 = add_lease(auStack_228,local_234.s_addr,local_348,pcVar5);
      if (iVar4 != 0) {
        *(undefined4 *)(iVar4 + 0x18) = 1;
      }
      write_leases();
      uVar7 = 0;
    }
  }
  return uVar7;
}