// File: /workspace/github_c_makefile_star2_O0/thegenemyers[P]DASCRUBBER/DAStrim.c
// Function: GAPS
static void GAPS(int aread, Overlap *ovls, int novl)
{ int       alen;

  int       nblk;
  Interval *block;
  int      *status;

#if defined(DEBUG_HQ_BLOCKS) || defined(DEBUG_HOLE_FINDER) || defined(DEBUG_GAP_STATUS) || defined(DEBUG_SUMMARY)
  printf("\n");
  printf("AREAD %d\n",aread);
#endif

  alen = DB->reads[aread].rlen;
  if (alen < HGAP_MIN)
    {
#ifdef ANNOTATE
      fwrite(&HQ_INDEX,sizeof(int64),1,HQ_AFILE);
      fwrite(&SN_INDEX,sizeof(int64),1,SN_AFILE);
      fwrite(&SP_INDEX,sizeof(int64),1,SP_AFILE);
      fwrite(&AD_INDEX,sizeof(int64),1,AD_AFILE);

      fwrite(&HL_INDEX,sizeof(int64),1,HL_AFILE);

      fwrite(&KP_INDEX,sizeof(int64),1,KP_AFILE);
#endif

      fwrite(&TR_INDEX,sizeof(int64),1,TR_AFILE);
      return;
    }

  nreads += 1;
  totlen += alen;

  //  Partition into HQ-blocks

  block = HQ_BLOCKS(aread,&nblk);

  //  Find holes and modify HQ-blocks if necessary

  if (nblk > 0)
    nblk = FIND_HOLES(aread,ovls,novl,block,nblk);

  //  Determine the status of each gap between a pair of blocks

  if (nblk > 0)
    status = GAP_ANALYSIS(aread,ovls,novl,block,&nblk);

  //  No blocks? ==> nothing to do

  if (nblk <= 0)
    { nelim += 1;
      nelimbp += alen;
#ifdef ANNOTATE
      fwrite(&HQ_INDEX,sizeof(int64),1,HQ_AFILE);
      fwrite(&SN_INDEX,sizeof(int64),1,SN_AFILE);
      fwrite(&SP_INDEX,sizeof(int64),1,SP_AFILE);
      fwrite(&AD_INDEX,sizeof(int64),1,AD_AFILE);

      fwrite(&HL_INDEX,sizeof(int64),1,HL_AFILE);

      fwrite(&KP_INDEX,sizeof(int64),1,KP_AFILE);
#endif

      fwrite(&TR_INDEX,sizeof(int64),1,TR_AFILE);
      return;
    }

#ifdef ANNOTATE
  { int i;

    for (i = 0; i < nblk; i++)
      { fwrite(&(block[i].beg),sizeof(int),1,HQ_DFILE);
        fwrite(&(block[i].end),sizeof(int),1,HQ_DFILE);
        if (i > 0)
          { if (status[i] == SPAN || status[i] == LOWQ)
              { fwrite(&(block[i-1].end),sizeof(int),1,SN_DFILE);
                fwrite(&(block[i].beg),sizeof(int),1,SN_DFILE);
                SN_INDEX += 2*sizeof(int);
              }
            else if (status[i] == SPLIT)
              { fwrite(&(block[i-1].end),sizeof(int),1,SP_DFILE);
                fwrite(&(block[i].beg),sizeof(int),1,SP_DFILE);
                SP_INDEX += 2*sizeof(int);
              }
            else //  status[i] == ADAPT 
              { fwrite(&(block[i-1].end),sizeof(int),1,AD_DFILE);
                fwrite(&(block[i].beg),sizeof(int),1,AD_DFILE);
                AD_INDEX += 2*sizeof(int);
              }
          }
      }
    HQ_INDEX += 2*sizeof(int)*nblk;
    fwrite(&HQ_INDEX,sizeof(int64),1,HQ_AFILE);
    fwrite(&SN_INDEX,sizeof(int64),1,SN_AFILE);
    fwrite(&SP_INDEX,sizeof(int64),1,SP_AFILE);
    fwrite(&AD_INDEX,sizeof(int64),1,AD_AFILE);
  }
#endif

  //   Find largest non-adaptemer/subread range: block[abeg..aend)

  { int cmax, amax, abeg = 0, aend = 0;
    int p, i;

    amax = 0;
    p = 0;
    cmax = block[0].end-block[0].beg;
    for (i = 1; i < nblk; i++)
      if (status[i] == ADAPT)
        { if (cmax > amax)
            { amax = cmax;
              abeg = p;
              aend = i;
            }
          p = i;
          cmax = block[i].end - block[i].beg; 
        }
      else if (status[i] != SPLIT)
        cmax += block[i].end - block[i-1].end;
      else
        cmax += block[i].end - block[i].beg;
    if (cmax > amax)
      { amax = cmax;
        abeg = p;
        aend = nblk;
      }

    if (block[aend-1].end - block[aend-1].beg < TRACE_SPACING)
      { aend -= 1;
        nblk -= 1;  // assert: aend == nblk && status[aend-1] = SPLIT
      }
    if (block[aend-1].end == alen)
      block[aend-1].end = (alen/TRACE_SPACING)*TRACE_SPACING;
 
#ifdef DEBUG_SUMMARY
    printf("  :::  Keeping [%d,%d]\n",block[abeg].beg,block[aend-1].end);
#endif

  //  Accummulate statistics

    if (block[0].beg > 0)
      { n5trm += 1;
        n5trmbp += block[0].beg;
      }
    if (block[nblk-1].end < alen)
      { n3trm += 1;
        n3trmbp += alen - block[nblk-1].end;
      }
    if (abeg > 0)
      { natrm   += 1;
        natrmbp += block[abeg].beg - block[0].beg;
      }
    if (aend < nblk)
      { natrm   += 1;
        natrmbp += (block[nblk-1].end - block[aend-1].end);
      }
    for (i = abeg+1; i < aend; i++)
      { ngaps += 1;
        ngapsbp += block[i].beg - block[i-1].end;
        if (status[i] == LOWQ)
          { nlowq   += 1;
            nlowqbp += block[i].beg - block[i-1].end;
          }
        else if (status[i] == SPAN)
          { nspan   += 1;
            nspanbp += block[i].beg - block[i-1].end;
          }
        else // status[i] == SPLIT
          { nchim   += 1;
            nchimbp += block[i].beg - block[i-1].end;
          }
      }

#ifdef ANNOTATE
    fwrite(&(block[abeg].beg),sizeof(int),1,KP_DFILE);
    for (i = abeg+1; i < aend; i++)
      if (status[i] == SPLIT)
        { fwrite(&(block[i-1].end),sizeof(int),1,KP_DFILE);
          fwrite(&(block[i].beg),sizeof(int),1,KP_DFILE);
          KP_INDEX += 2*sizeof(int);
        }
    fwrite(&(block[aend-1].end),sizeof(int),1,KP_DFILE);
    KP_INDEX += 2*sizeof(int);
    fwrite(&KP_INDEX,sizeof(int64),1,KP_AFILE);
#endif

  //  Output .trim track for this read

    fwrite(&(block[abeg].beg),sizeof(int),1,TR_DFILE);
    fwrite(&(block[abeg].end),sizeof(int),1,TR_DFILE);
    TR_INDEX += 2*sizeof(int);
    for (i = abeg+1; i < aend; i++)
      { fwrite(status+i,sizeof(int),1,TR_DFILE);
        fwrite(&(block[i].beg),sizeof(int),1,TR_DFILE);
        fwrite(&(block[i].end),sizeof(int),1,TR_DFILE);
        TR_INDEX += 3*sizeof(int);
      }
    fwrite(&TR_INDEX,sizeof(int64),1,TR_AFILE);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq 0x2c05f(%rip), %rax     # 0x31188
movq 0x60(%rax), %rax
movslq -0x4(%rbp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl 0x2c2d5(%rip), %eax     # 0x3141c
jge 0x521d
movq 0x2c2f4(%rip), %rcx     # 0x31448
leaq 0x2c2fd(%rip), %rdi     # 0x31458
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c2ef(%rip), %rcx     # 0x31460
leaq 0x2c2f8(%rip), %rdi     # 0x31470
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c2ea(%rip), %rcx     # 0x31478
leaq 0x2c2f3(%rip), %rdi     # 0x31488
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c2e5(%rip), %rcx     # 0x31490
leaq 0x2c2ee(%rip), %rdi     # 0x314a0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c2e0(%rip), %rcx     # 0x314a8
leaq 0x2c2e9(%rip), %rdi     # 0x314b8
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c2db(%rip), %rcx     # 0x314c0
leaq 0x2c2e4(%rip), %rdi     # 0x314d0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c22e(%rip), %rcx     # 0x31430
leaq 0x2c237(%rip), %rdi     # 0x31440
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
jmp 0x5bf0
movq 0x2c2bc(%rip), %rax     # 0x314e0
addq $0x1, %rax
movq %rax, 0x2c2b1(%rip)     # 0x314e0
movslq -0x18(%rbp), %rax
addq 0x2c2ae(%rip), %rax     # 0x314e8
movq %rax, 0x2c2a7(%rip)     # 0x314e8
movl -0x4(%rbp), %edi
leaq -0x1c(%rbp), %rsi
callq 0x5c00
movq %rax, -0x28(%rbp)
cmpl $0x0, -0x1c(%rbp)
jle 0x5271
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
movl -0x14(%rbp), %edx
movq -0x28(%rbp), %rcx
movl -0x1c(%rbp), %r8d
callq 0x60e0
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
jle 0x5292
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
movl -0x14(%rbp), %edx
movq -0x28(%rbp), %rcx
leaq -0x1c(%rbp), %r8
callq 0x74f0
movq %rax, -0x30(%rbp)
cmpl $0x0, -0x1c(%rbp)
jg 0x5390
movq 0x2c24d(%rip), %rax     # 0x314f0
addq $0x1, %rax
movq %rax, 0x2c242(%rip)     # 0x314f0
movslq -0x18(%rbp), %rax
addq 0x2c257(%rip), %rax     # 0x31510
movq %rax, 0x2c250(%rip)     # 0x31510
movq 0x2c181(%rip), %rcx     # 0x31448
leaq 0x2c18a(%rip), %rdi     # 0x31458
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c17c(%rip), %rcx     # 0x31460
leaq 0x2c185(%rip), %rdi     # 0x31470
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c177(%rip), %rcx     # 0x31478
leaq 0x2c180(%rip), %rdi     # 0x31488
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c172(%rip), %rcx     # 0x31490
leaq 0x2c17b(%rip), %rdi     # 0x314a0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c16d(%rip), %rcx     # 0x314a8
leaq 0x2c176(%rip), %rdi     # 0x314b8
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c168(%rip), %rcx     # 0x314c0
leaq 0x2c171(%rip), %rdi     # 0x314d0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c0bb(%rip), %rcx     # 0x31430
leaq 0x2c0c4(%rip), %rdi     # 0x31440
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
jmp 0x5bf0
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x556c
movq -0x28(%rbp), %rdi
movslq -0x34(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2c097(%rip), %rcx     # 0x31450
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x34(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2c06e(%rip), %rcx     # 0x31450
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
cmpl $0x0, -0x34(%rbp)
jle 0x555c
movq -0x30(%rbp), %rax
movslq -0x34(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
je 0x5417
movq -0x30(%rbp), %rax
movslq -0x34(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jne 0x5480
movq -0x28(%rbp), %rdi
movl -0x34(%rbp), %eax
subl $0x1, %eax
cltq
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2c033(%rip), %rcx     # 0x31468
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x34(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2c00e(%rip), %rcx     # 0x31468
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2c000(%rip), %rax     # 0x31470
addq $0x8, %rax
movq %rax, 0x2bff5(%rip)     # 0x31470
jmp 0x555a
movq -0x30(%rbp), %rax
movslq -0x34(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
jne 0x54f4
movq -0x28(%rbp), %rdi
movl -0x34(%rbp), %eax
subl $0x1, %eax
cltq
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2bfd4(%rip), %rcx     # 0x31480
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x34(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2bfaf(%rip), %rcx     # 0x31480
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2bfa1(%rip), %rax     # 0x31488
addq $0x8, %rax
movq %rax, 0x2bf96(%rip)     # 0x31488
jmp 0x5558
movq -0x28(%rbp), %rdi
movl -0x34(%rbp), %eax
subl $0x1, %eax
cltq
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2bf86(%rip), %rcx     # 0x31498
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x34(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2bf61(%rip), %rcx     # 0x31498
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2bf53(%rip), %rax     # 0x314a0
addq $0x8, %rax
movq %rax, 0x2bf48(%rip)     # 0x314a0
jmp 0x555a
jmp 0x555c
jmp 0x555e
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5397
movslq -0x1c(%rbp), %rax
shlq $0x3, %rax
addq 0x2bedd(%rip), %rax     # 0x31458
movq %rax, 0x2bed6(%rip)     # 0x31458
movq 0x2bebf(%rip), %rcx     # 0x31448
leaq 0x2bec8(%rip), %rdi     # 0x31458
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2beba(%rip), %rcx     # 0x31460
leaq 0x2bec3(%rip), %rdi     # 0x31470
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2beb5(%rip), %rcx     # 0x31478
leaq 0x2bebe(%rip), %rdi     # 0x31488
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2beb0(%rip), %rcx     # 0x31490
leaq 0x2beb9(%rip), %rdi     # 0x314a0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movl $0x0, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x48(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x28(%rbp), %rcx
subl (%rcx), %eax
movl %eax, -0x38(%rbp)
movl $0x1, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x56e1
movq -0x30(%rbp), %rax
movslq -0x4c(%rbp), %rcx
cmpl $0x3, (%rax,%rcx,4)
jne 0x567f
movl -0x38(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jle 0x565d
movl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x48(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x4c(%rbp), %eax
movl %eax, -0x44(%rbp)
movl -0x4c(%rbp), %eax
movl %eax, -0x48(%rbp)
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl 0x4(%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movslq -0x4c(%rbp), %rdx
subl (%rcx,%rdx,8), %eax
movl %eax, -0x38(%rbp)
jmp 0x56d1
movq -0x30(%rbp), %rax
movslq -0x4c(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
je 0x56b2
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl 0x4(%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x4c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
addl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
jmp 0x56cf
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl 0x4(%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movslq -0x4c(%rbp), %rdx
subl (%rcx,%rdx,8), %eax
addl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
jmp 0x56d1
jmp 0x56d3
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x5629
movl -0x38(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jle 0x56fb
movl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x48(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movl -0x44(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x44(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl (%rcx,%rdx,8), %eax
cmpl 0x2bdb6(%rip), %eax     # 0x314d8
jge 0x5736
movl -0x44(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x44(%rbp)
movl -0x1c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x1c(%rbp)
movq -0x28(%rbp), %rax
movl -0x44(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,8), %eax
cmpl -0x18(%rbp), %eax
jne 0x5770
movl -0x18(%rbp), %eax
cltd
idivl 0x2bd82(%rip)           # 0x314d8
movl %eax, %edx
imull 0x2bd79(%rip), %edx     # 0x314d8
movq -0x28(%rbp), %rax
movl -0x44(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl %edx, 0x4(%rax,%rcx,8)
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
jle 0x57a0
movq 0x2bd78(%rip), %rax     # 0x314f8
addq $0x1, %rax
movq %rax, 0x2bd6d(%rip)     # 0x314f8
movq -0x28(%rbp), %rax
movslq (%rax), %rax
addq 0x2bd7f(%rip), %rax     # 0x31518
movq %rax, 0x2bd78(%rip)     # 0x31518
movq -0x28(%rbp), %rax
movl -0x1c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,8), %eax
cmpl -0x18(%rbp), %eax
jge 0x57ec
movq 0x2bd43(%rip), %rax     # 0x31500
addq $0x1, %rax
movq %rax, 0x2bd38(%rip)     # 0x31500
movl -0x18(%rbp), %eax
movq -0x28(%rbp), %rcx
movl -0x1c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bd3b(%rip), %rax     # 0x31520
movq %rax, 0x2bd34(%rip)     # 0x31520
cmpl $0x0, -0x40(%rbp)
jle 0x5825
movq 0x2bd0f(%rip), %rax     # 0x31508
addq $0x1, %rax
movq %rax, 0x2bd04(%rip)     # 0x31508
movq -0x28(%rbp), %rax
movslq -0x40(%rbp), %rcx
movl (%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
subl (%rcx), %eax
cltq
addq 0x2bd0a(%rip), %rax     # 0x31528
movq %rax, 0x2bd03(%rip)     # 0x31528
movl -0x44(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x5871
movq 0x2bcd4(%rip), %rax     # 0x31508
addq $0x1, %rax
movq %rax, 0x2bcc9(%rip)     # 0x31508
movq -0x28(%rbp), %rax
movl -0x1c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x44(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bcbe(%rip), %rax     # 0x31528
movq %rax, 0x2bcb7(%rip)     # 0x31528
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x59b3
movq 0x2bca3(%rip), %rax     # 0x31530
addq $0x1, %rax
movq %rax, 0x2bc98(%rip)     # 0x31530
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl (%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x4c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bc93(%rip), %rax     # 0x31550
movq %rax, 0x2bc8c(%rip)     # 0x31550
movq -0x30(%rbp), %rax
movslq -0x4c(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jne 0x5915
movq 0x2bc5f(%rip), %rax     # 0x31538
addq $0x1, %rax
movq %rax, 0x2bc54(%rip)     # 0x31538
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl (%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x4c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bc4f(%rip), %rax     # 0x31558
movq %rax, 0x2bc48(%rip)     # 0x31558
jmp 0x59a3
movq -0x30(%rbp), %rax
movslq -0x4c(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jne 0x5963
movq 0x2bc16(%rip), %rax     # 0x31540
addq $0x1, %rax
movq %rax, 0x2bc0b(%rip)     # 0x31540
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl (%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x4c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bc06(%rip), %rax     # 0x31560
movq %rax, 0x2bbff(%rip)     # 0x31560
jmp 0x59a1
movq 0x2bbde(%rip), %rax     # 0x31548
addq $0x1, %rax
movq %rax, 0x2bbd3(%rip)     # 0x31548
movq -0x28(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl (%rax,%rcx,8), %eax
movq -0x28(%rbp), %rcx
movl -0x4c(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
subl 0x4(%rcx,%rdx,8), %eax
cltq
addq 0x2bbce(%rip), %rax     # 0x31568
movq %rax, 0x2bbc7(%rip)     # 0x31568
jmp 0x59a3
jmp 0x59a5
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x587a
movq -0x28(%rbp), %rdi
movslq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2baff(%rip), %rcx     # 0x314c8
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x5a6f
movq -0x30(%rbp), %rax
movslq -0x4c(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
jne 0x5a5f
movq -0x28(%rbp), %rdi
movl -0x4c(%rbp), %eax
subl $0x1, %eax
cltq
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2baaf(%rip), %rcx     # 0x314c8
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x4c(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2ba8a(%rip), %rcx     # 0x314c8
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2ba7c(%rip), %rax     # 0x314d0
addq $0x8, %rax
movq %rax, 0x2ba71(%rip)     # 0x314d0
jmp 0x5a61
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x59e1
movq -0x28(%rbp), %rdi
movl -0x44(%rbp), %eax
subl $0x1, %eax
cltq
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2ba3b(%rip), %rcx     # 0x314c8
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2ba2d(%rip), %rax     # 0x314d0
addq $0x8, %rax
movq %rax, 0x2ba22(%rip)     # 0x314d0
movq 0x2ba0b(%rip), %rcx     # 0x314c0
leaq 0x2ba14(%rip), %rdi     # 0x314d0
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2b957(%rip), %rcx     # 0x31438
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2b92e(%rip), %rcx     # 0x31438
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2b920(%rip), %rax     # 0x31440
addq $0x8, %rax
movq %rax, 0x2b915(%rip)     # 0x31440
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x5bd3
movq -0x30(%rbp), %rdi
movslq -0x4c(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq 0x2b8e2(%rip), %rcx     # 0x31438
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x4c(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq 0x2b8bd(%rip), %rcx     # 0x31438
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq -0x28(%rbp), %rdi
movslq -0x4c(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x4, %rdi
movq 0x2b894(%rip), %rcx     # 0x31438
movl $0x4, %esi
movl $0x1, %edx
callq 0x22b0
movq 0x2b886(%rip), %rax     # 0x31440
addq $0xc, %rax
movq %rax, 0x2b87b(%rip)     # 0x31440
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x5b34
movq 0x2b856(%rip), %rcx     # 0x31430
leaq 0x2b85f(%rip), %rdi     # 0x31440
movl $0x8, %esi
movl $0x1, %edx
callq 0x22b0
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)