/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 ipv6pdip_main(int param_1,char **param_2)

{
  char cVar1;
  byte bVar2;
  bool bVar3;
  byte bVar4;
  size_t sVar5;
  char *pcVar6;
  int iVar7;
  uint uVar8;
  byte *pbVar9;
  FILE *pFVar10;
  int iVar11;
  char *pcVar12;
  uint uVar13;
  uint uVar14;
  byte *pbVar15;
  byte *pbVar16;
  uint uVar17;
  char *pcVar18;
  uint uVar19;
  uint uVar20;
  code *pcVar21;
  uint uVar22;
  byte local_120 [16];
  byte abStack_110 [16];
  byte local_100 [16];
  byte local_f0 [16];
  byte local_e0 [16];
  byte local_d0 [16];
  byte local_c0 [16];
  byte local_b0 [16];
  byte abStack_a0 [48];
  char local_70 [48];
  undefined4 local_40;
  char *local_3c;
  byte *local_38;
  byte *local_34;
  byte *local_30;
  
  local_3c = local_70;
  uVar17 = 0xffffffff;
  local_38 = local_120;
  local_34 = local_e0;
  local_30 = local_d0;
  uVar22 = 8;
  local_40 = 0xffffffff;
  uVar19 = 0xffffffff;
  bVar3 = false;
  uVar20 = 0;
LAB_0040a004:
  iVar7 = getopt(param_1,param_2,"n:l:s:L:p:m:h:v")   //possible issue identified - semgrep
  if (iVar7 < 1) {
    if ((int)uVar17 < (int)uVar19) {
      uVar22 = uVar19 - uVar17;
    }
    if (bVar3) {
      printf("%8s","naddr: ");
      pbVar15 = local_120;
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != abStack_110);
      putchar(10);
    }
    pbVar15 = local_c0;
    FUN_00409a30(0,local_120,local_100,pbVar15,uVar17);
    if (bVar3) {
      printf("%8s","nmask: ");
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_b0);
      putchar(10);
      printf("%8s","nid: ");
      pbVar15 = local_100;
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_f0);
      putchar(10);
    }
    uVar19 = uVar17 - uVar20;
    while (0 < (int)uVar19) {
      uVar8 = uVar19 & 7;
      if ((int)uVar19 < 8) {
        if (uVar8 != 0) {
          uVar13 = 0xff;
          iVar7 = 0;
          pbVar15 = local_e0 + 1;
          do {
            uVar14 = uVar13;
            if (uVar13 == 0xff) {
              uVar14 = (uint)pbVar15[-1];
            }
            uVar13 = (uint)*pbVar15;
            if (iVar7 == 0) {
              local_e0[0] = (byte)((int)uVar14 >> uVar8);
            }
            iVar7 = iVar7 + 1;
            *pbVar15 = (byte)(uVar14 << (8 - uVar8 & 0x1f)) | (byte)((int)uVar13 >> uVar8);
            pbVar15 = pbVar15 + 1;
          } while (iVar7 != 0x10);
          uVar19 = uVar19 - uVar8;
        }
      }
      else {
        iVar7 = 0;
        pbVar15 = local_e0 + 1;
        bVar4 = 0xff;
        do {
          if (bVar4 == 0xff) {
            bVar4 = pbVar15[-1];
          }
          bVar2 = *pbVar15;
          if (iVar7 == 0) {
            local_e0[0] = 0;
          }
          iVar7 = iVar7 + 1;
          *pbVar15 = bVar4;
          pbVar15 = pbVar15 + 1;
          bVar4 = bVar2;
        } while (iVar7 != 0x10);
        uVar19 = uVar19 - 8;
      }
    }
    if (bVar3) {
      printf("\n%8s","sid: ");
      pbVar15 = local_e0;
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_d0);
      putchar(10);
    }
    if (uVar20 != 0) {
      pbVar16 = local_e0;
      pbVar9 = local_c0;
      pbVar15 = pbVar16;
      do {
        *pbVar15 = ~*pbVar9 & *pbVar15;
        pbVar15 = pbVar15 + 1;
        pbVar9 = pbVar9 + 1;
      } while (pbVar15 != local_d0);
      if (bVar3) {
        printf("\n%8s","mask sid: ");
        do {
          bVar4 = *pbVar16;
          pbVar16 = pbVar16 + 1;
          printf("%02x ",(uint)bVar4);
        } while (pbVar16 != pbVar15);
        putchar(10);
      }
    }
    pcVar18 = (char *)(uVar22 + uVar17);
    iVar7 = 0;
    if ((char *)0x7f < pcVar18) {
      fputs("Invalid Prefix Length After Combining.\n",_stderr);
      return local_40;
    }
    do {
      pbVar15 = local_e0 + iVar7;
      pbVar9 = local_100 + iVar7;
      pbVar16 = local_d0 + iVar7;
      iVar7 = iVar7 + 1;
      *pbVar16 = *pbVar15 | *pbVar9;
    } while (iVar7 != 0x10);
    pbVar15 = local_c0;
    FUN_00409a30(0,local_d0,local_100,pbVar15,pcVar18);
    if (bVar3) {
      printf("\n%8s","nmask: ");
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_b0);
      putchar(10);
      printf("%8s","nid: ");
      pbVar15 = local_100;
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_f0);
      putchar(10);
    }
    pbVar15 = local_f0;
    FUN_00409a30(1,abStack_110,pbVar15,local_b0,pcVar18);
    if (bVar3) {
      printf("%8s",&DAT_00411cbc);
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != local_e0);
      putchar(10);
      printf("%8s","hmask: ");
      pbVar15 = local_b0;
      do {
        bVar4 = *pbVar15;
        pbVar15 = pbVar15 + 1;
        printf("%02x ",(uint)bVar4);
      } while (pbVar15 != abStack_a0);
      putchar(10);
    }
    iVar7 = 0;
    do {
      pbVar15 = local_f0 + iVar7;
      pbVar9 = local_100 + iVar7;
      pbVar16 = local_d0 + iVar7;
      iVar7 = iVar7 + 1;
      *pbVar16 = *pbVar15 | *pbVar9;
    } while (iVar7 != 0x10);
    pbVar15 = abStack_a0;
    memset(pbVar15,0,0x2e)   //possible issue identified - semgrep
    inet_ntop(10,local_d0,(char *)pbVar15,0x2e)   //possible issue identified - semgrep
    pcVar21 = printf;
    local_40 = 0;
    pFVar10 = (FILE *)"%s/%d\n";
    goto LAB_0040a5bc;
  }
  if (iVar7 == 0x6d) {
    uVar20 = atoi(_optarg);
    uVar8 = uVar20;
LAB_00409ec4:
    if (uVar8 < 0x80) goto LAB_0040a004;
    pcVar18 = "Invalid Specified Prefix Length.\n";
  }
  else {
    if (0x6d < iVar7) {
      if (iVar7 == 0x70) {
        uVar19 = atoi(_optarg);
        uVar8 = uVar19;
        goto LAB_00409ec4;
      }
      if (iVar7 < 0x71) {
        if (iVar7 != 0x6e) goto LAB_00409ff0;
        iVar7 = inet_pton(10,_optarg,local_38)   //possible issue identified - semgrep
        if (iVar7 < 1) {
          pcVar18 = "Invalid Network ID.\n";
          goto LAB_00409fc4;
        }
      }
      else if (iVar7 == 0x73) {
        memset(local_3c,0xff,0x2e)   //possible issue identified - semgrep
        pcVar18 = _optarg;
        sVar5 = strlen(_optarg);
        if (0x2d < sVar5) {
          sVar5 = 0x2e   //possible issue identified - semgrep
        }
        memcpy(local_3c,pcVar18,sVar5)   //possible issue identified - semgrep
        sVar5 = strlen(_optarg);
        local_38[sVar5 + 0xb0] = 0;
        pbVar15 = local_34;
        do {
          *pbVar15 = 0;
          pbVar15 = pbVar15 + 1;
        } while (pbVar15 != local_30);
        uVar8 = 0;
        pbVar15 = local_34;
        if (local_70[0] == '\0') {
LAB_00409e20:
          fprintf(_stderr,"%s\n",s_Usage__ipv6pdip__n__prefix___l___00422200);
          return 0xffffffff;
        }
        while( true ) {
          cVar1 = local_3c[uVar8];
          iVar11 = (int)cVar1;
          iVar7 = iVar11 + -0x30;
          if (9 < (byte)(cVar1 - 0x30U)) break;
LAB_00409db4:
          uVar8 = uVar8 + 1;
          if (iVar7 == 0x10000002) goto LAB_0040a000;
          if (iVar7 == 0x10000003) goto LAB_00409e08;
          if ((uVar8 & 1) == 1) {
            *pbVar15 = (byte)(iVar7 << 4);
          }
          else {
            *pbVar15 = (byte)iVar7 & 0xf | *pbVar15 & 0xf0;
            pbVar15 = pbVar15 + 1;
          }
        }
        iVar7 = iVar11 + -0x57;
        if (((byte)(cVar1 + 0x9fU) < 6) || (iVar7 = iVar11 + -0x37, (byte)(cVar1 + 0xbfU) < 6))
        goto LAB_00409db4;
        if (iVar11 != 0) {
LAB_00409e08:
          puts("Invalid character in SLA");
          goto LAB_00409e20;
        }
LAB_0040a000:
        local_40 = 0;
      }
      else {
        bVar3 = true;
        if (iVar7 != 0x76) {
LAB_00409ff0:
          pcVar21 = fprintf;
          pbVar15 = (byte *)0x410b9c;
          pcVar18 = s_Usage__ipv6pdip__n__prefix___l___00422200;
          pFVar10 = _stderr;
LAB_0040a5bc:
          (*pcVar21)(pFVar10,pbVar15,pcVar18);
          return local_40;
        }
      }
      goto LAB_0040a004;
    }
    if (iVar7 == 0x68) {
      memset(abStack_a0,0,0x2e)   //possible issue identified - semgrep
      pcVar18 = _optarg;
      pcVar6 = (char *)strlen(_optarg);
      if ((char *)0x2d < pcVar6) {
        pcVar6 = (char *)0x2e;
      }
      iVar7 = strncmp(pcVar18,"::",2);
      if (iVar7 == 0) {
        pcVar21 = memcpy;
        pcVar12 = pcVar18;
        pcVar18 = pcVar6;
      }
      else {
        pcVar21 = sprintf;
        if (*pcVar18 == ':') {
          pcVar12 = ":%s";
        }
        else {
          pcVar12 = "::%s";
        }
      }
      (*pcVar21)(abStack_a0,pcVar12,pcVar18);
      iVar7 = inet_pton(10,(char *)abStack_a0,abStack_110)   //possible issue identified - semgrep
      if (0 < iVar7) goto LAB_0040a004;
      pcVar18 = "Invalid Host ID.\n";
    }
    else {
      if (iVar7 == 0x6c) {
        uVar17 = atoi(_optarg);
        if (0x7f < uVar17) {
          pcVar18 = "Invalid Prefix Length.\n";
          goto LAB_00409fc4;
        }
        goto LAB_0040a004;
      }
      if (iVar7 != 0x4c) goto LAB_00409ff0;
      uVar22 = atoi(_optarg);
      if (uVar22 < 0x80) goto LAB_0040a004;
      pcVar18 = "Invalid SLA Length.\n";
    }
  }
LAB_00409fc4:
  fputs(pcVar18,_stderr);
  goto LAB_00409ff0;
}