// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/diagonalbandalign_affinegapcost.c
// Function: evaluateaffineDBcrosspoints
static GtAffineAlignRnode evaluateaffineDBcrosspoints(
                                             GtLinspaceManagement *spacemanager,
                                             GtAffineDiagAlignentry *Diagcolumn,
                                             const GtScoreHandler *scorehandler,
                                             GtAffineAlignEdge edge,
                                             GtAffineAlignEdge from_edge,
                                             GtAffineAlignEdge to_edge,
                                             GtUword rowoffset,
                                             GtUword coloffset,
                                             const GtUchar *useq,
                                             GtUword ustart,
                                             GtUword ulen,
                                             const GtUchar *vseq,
                                             GtUword vstart,
                                             GtUword vlen,
                                             GtWord left_dist,
                                             GtWord right_dist)
{
  GtUword i,new_ulen, new_vlen, col_start, col_end,
          row_start = 0, row_end;
  GtWord new_left, new_right, diag;
  GtDiagAlignentry cpoint = {0,0,0}, prevcpoint;
  GtAffineDiagAlignentry temp_entry;
  GtAffineAlignRnode rpoint, temprpoint, lastrpoint;
  GtAffineAlignEdge prevcp_type,cp_type;

  diag = GT_DIV2(left_dist+right_dist);
  gt_assert(vstart == coloffset);

  if (ulen == 0)
  {
    switch (edge) {
      case(Affine_R):
      {
        Diagcolumn[0].val_R.currentrowindex = rowoffset;
        Diagcolumn[0].val_R.last_type = from_edge;
        prevcp_type = Affine_R;
        break;
      }
      case(Affine_I):
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        prevcp_type = Affine_I;
        break;
      }
      case(Affine_D):
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
        prevcp_type = Affine_D;
        break;
      }
      default:
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        prevcp_type = Affine_I;
      }
    }

    for (i = 1; i <=vlen; i++)
    {
      Diagcolumn[i].val_I.currentrowindex = rowoffset;
      Diagcolumn[i].val_I.last_type = prevcp_type;
      prevcp_type = Affine_I;
    }
    return (GtAffineAlignRnode) {vlen, prevcp_type};

  }

  if (vlen == 0)
  {
    switch (edge) {
      case(Affine_R):
      {
        Diagcolumn[0].val_R.currentrowindex = rowoffset;
        Diagcolumn[0].val_R.last_type = from_edge;
        break;
      }
      case(Affine_I):
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        break;
      }
      case(Affine_D):
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
        break;
      }
      default:
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
      }
    }
    return (GtAffineAlignRnode) {0, edge};
  }

  if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
                                         sizeof (GtAffinealignDPentry),
                                         sizeof (GtAffineAlignRtabentry)))
  { /* call square function */
    return affineDtab_in_square_space(spacemanager, Diagcolumn,
                                      useq, ustart, ulen, vseq, vstart, vlen,
                                      left_dist, right_dist, rowoffset,
                                      from_edge, edge, to_edge,scorehandler);
  }

  rpoint = evaluateallaffineDBcolumns(spacemanager, Diagcolumn, scorehandler,
                                      edge, from_edge, to_edge, rowoffset,
                                      useq, ustart, ulen,  vseq, vstart, vlen,
                                      left_dist, right_dist);

  lastrpoint = rpoint;
  col_start = rpoint.idx;
  cp_type = rpoint.edge;

  /* if no crosspoint is found */
  if (col_start == GT_UWORD_MAX)
  {
    gt_assert(diag != 0);
    if (diag < 0)
    {
      return evaluateaffineDBcrosspoints(spacemanager, Diagcolumn, scorehandler,
                                         edge, from_edge, to_edge, rowoffset,
                                         coloffset, useq, ustart, ulen, vseq,
                                         vstart, vlen, diag+1, right_dist);
    } else
    {
      if (diag > 0)
      {
        return evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                                           scorehandler,
                                           edge, from_edge, to_edge, rowoffset,
                                           coloffset, useq, ustart, ulen, vseq,
                                           vstart, vlen, left_dist, diag-1);
      }
    }
  }
  else
  {
    switch (cp_type) {
    case Affine_R:
      cpoint = Diagcolumn[col_start].val_R;
      cp_type = Affine_R;
      row_start = Diagcolumn[col_start].val_R.currentrowindex;
      break;
    case Affine_D:
      cpoint = Diagcolumn[col_start].val_D;
      cp_type = Affine_D;
      row_start = Diagcolumn[col_start].val_D.currentrowindex;
      break;
    default:
      gt_assert(cp_type == Affine_I);
      cpoint = Diagcolumn[col_start].val_I;
      cp_type = Affine_I;
      row_start = Diagcolumn[col_start].val_I.currentrowindex;
      break;
    }
  }

  /* exception, if last cpoint != (m+1)entry */
  if (col_start != vlen)
  {
    if (diag + ((GtWord)ulen-(GtWord)vlen) > 0)
    {
      new_ulen = ulen - (row_start+1-rowoffset);
      new_vlen = vlen-col_start;
      new_left = GT_MAX((GtWord)left_dist-diag+1,
                    -(GtWord)new_ulen);
      new_right = 0;
      temp_entry = Diagcolumn[col_start];
      lastrpoint = evaluateaffineDBcrosspoints(spacemanager,
                      Diagcolumn+col_start, scorehandler, Affine_D,
                      cpoint.last_type, to_edge,
                      row_start+1, coloffset+col_start, useq,
                      row_start+1, new_ulen, vseq,
                      vstart+col_start, new_vlen, new_left, new_right);
      Diagcolumn[col_start] = temp_entry;
      Diagcolumn[col_start+1].val_R.last_type = cp_type;
      Diagcolumn[col_start+1].val_D.last_type = cp_type;
      Diagcolumn[col_start+1].val_I.last_type = cp_type;

      lastrpoint.idx += col_start;
    }
    else
    {
      new_ulen = ulen - (row_start - rowoffset);
      new_vlen = vlen-col_start-1;
      new_left = -1;
      new_right = GT_MIN((GtWord)right_dist-((GtWord)diag)-1,new_vlen);

      lastrpoint = evaluateaffineDBcrosspoints(spacemanager,
                            Diagcolumn+col_start+1,scorehandler, Affine_I,
                            cp_type, to_edge, row_start, coloffset+col_start+1,
                            useq, row_start, new_ulen, vseq, vstart+col_start+1,
                            new_vlen, new_left, new_right);
      lastrpoint.idx += (col_start+1);
    }
  }
  /* look at all 'normally' crosspoints */
  while (cpoint.lastcpoint != GT_UWORD_MAX)
  {
    prevcpoint = cpoint;
    prevcp_type = cp_type;
    col_end = col_start;
    row_end = row_start;
    col_start = prevcpoint.lastcpoint;
    switch (prevcpoint.last_type) {
    case Affine_R:
      cpoint = Diagcolumn[col_start].val_R;
      cp_type = Affine_R;
      row_start = Diagcolumn[col_start].val_R.currentrowindex;
      break;
    case Affine_D:
      cpoint = Diagcolumn[col_start].val_D;
      cp_type = Affine_D;
      row_start = Diagcolumn[col_start].val_D.currentrowindex;
      break;
    default:
      gt_assert(prevcpoint.last_type == Affine_I);
      cpoint = Diagcolumn[col_start].val_I;
      cp_type = Affine_I;
      row_start = Diagcolumn[col_start].val_I.currentrowindex;
      break;
    }

    if (prevcp_type == Affine_R ||
       ((prevcp_type == Affine_I) && (col_end-col_start == 1)))
    {
      continue;/* next crosspoint is also on the diagonal*/
    }
    else if (prevcp_type == Affine_D)
    {
      new_ulen = row_end - row_start - 1;
      new_vlen = col_end-col_start-1;
      new_left = -1;
      new_right = GT_MIN(right_dist-diag-1,new_vlen);

      temprpoint = evaluateaffineDBcrosspoints(spacemanager,
                           Diagcolumn+col_start+1, scorehandler,
                           Affine_I, cp_type, Affine_D, row_start,
                           coloffset + col_start + 1, useq, row_start,
                           new_ulen, vseq, vstart + col_start + 1,
                           new_vlen, new_left, new_right);
      if (temprpoint.idx + col_start + 1 < vlen)
      {
        GtUword update_idx = temprpoint.idx+1+col_start+1;
        Diagcolumn[update_idx].val_R.last_type = temprpoint.edge;
        Diagcolumn[update_idx].val_D.last_type = temprpoint.edge;
        Diagcolumn[update_idx].val_I.last_type = temprpoint.edge;
      }
      if (temprpoint.idx + col_start + 1 == lastrpoint.idx)
      {
        lastrpoint = temprpoint;
        lastrpoint.idx += col_start + 1;
      }
    }
    else if (prevcp_type == Affine_I)
    {
      new_ulen = row_end - row_start-1;
      new_left = GT_MAX(left_dist-diag+1,
                        -(GtWord)new_ulen);
      new_right = 0;
      temp_entry = Diagcolumn[col_start];
      temprpoint = evaluateaffineDBcrosspoints(spacemanager,
                            Diagcolumn + col_start, scorehandler,
                            Affine_D, cpoint.last_type, Affine_I, row_start + 1,
                            coloffset + col_start,
                            useq, row_start+1, new_ulen,
                            vseq, vstart+col_start, col_end-col_start-1,
                            new_left, new_right);
      Diagcolumn[col_start] = temp_entry;
      Diagcolumn[col_start+1].val_R.last_type = cp_type;
      Diagcolumn[col_start+1].val_D.last_type = cp_type;
      Diagcolumn[col_start+1].val_I.last_type = cp_type;
      Diagcolumn[col_end].val_I.last_type = temprpoint.edge;
    }
    else
    {
      /* if (Diagcolumn[cpoint].last_type == Linear_X), never reach this line */
      gt_assert(false);
    }
  }
  col_end = col_start;
  row_end = row_start;
  /* exception, if first crosspoint != 0-entry */
   if (vstart-coloffset != col_end)
   {
     switch (cp_type) {
     case Affine_D:
      if (row_end == ustart-1)
         gt_assert(false);
       new_ulen = row_end-ustart-1;
       new_left =  GT_MAX(-new_ulen, diag);
       new_right = GT_MIN(right_dist, (GtWord)col_end);

       rpoint = evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                                        scorehandler, edge, from_edge,Affine_D,
                                        rowoffset,coloffset, useq, ustart,
                                        new_ulen, vseq, vstart, col_end,
                                        new_left, new_right);
       if (col_start + 1 <= vlen)
       {
         Diagcolumn[col_start+1].val_R.last_type = rpoint.edge;
         Diagcolumn[col_start+1].val_D.last_type = rpoint.edge;
         Diagcolumn[col_start+1].val_I.last_type = rpoint.edge;
       }
       if (rpoint.idx == lastrpoint.idx)
         lastrpoint = rpoint;
       break;
     case Affine_I:
       new_ulen = row_end-ustart;
       new_vlen = col_end-1;
       new_left = GT_MAX(left_dist,
                 -(GtWord)new_ulen);

       new_right = GT_MIN(diag,new_vlen);
       rpoint = evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                               scorehandler,edge, from_edge, Affine_I,rowoffset,
                               coloffset, useq, ustart, new_ulen, vseq, vstart,
                               new_vlen, new_left, new_right);

       Diagcolumn[col_start].val_I.last_type = rpoint.edge;
       break;
     default:
       gt_assert(false);
     }
   }
   else if (cp_type == Affine_D)
   {
     Diagcolumn[1].val_I.last_type = Affine_R;
     Diagcolumn[1].val_D.last_type = Affine_R;
     Diagcolumn[1].val_R.last_type = Affine_R;
     Diagcolumn[0].val_R.currentrowindex = rowoffset;
     Diagcolumn[0].val_R.last_type = from_edge;
   }
  return lastrpoint;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq 0x338(%rsp), %rax
movq 0x330(%rsp), %rax
movq 0x328(%rsp), %rax
movq 0x320(%rsp), %rax
movq 0x318(%rsp), %rax
movq 0x310(%rsp), %rax
movq 0x308(%rsp), %rax
movq 0x300(%rsp), %rax
movq 0x2f8(%rsp), %rax
movq 0x2f0(%rsp), %rax
movq %rdi, 0x2a0(%rsp)
movq %rsi, 0x298(%rsp)
movq %rdx, 0x290(%rsp)
movl %ecx, 0x28c(%rsp)
movl %r8d, 0x288(%rsp)
movl %r9d, 0x284(%rsp)
movq $0x0, 0x250(%rsp)
leaq 0x218(%rsp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x19360
movq 0x330(%rsp), %rax
addq 0x338(%rsp), %rax
sarq %rax
movq %rax, 0x230(%rsp)
movq 0x320(%rsp), %rax
cmpq 0x2f8(%rsp), %rax
je 0x155075
movq 0x4e6f5c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3c0fc5(%rip), %rsi    # 0x516013
leaq 0x3f859b(%rip), %rdx    # 0x54d5f0
leaq 0x3f85a8(%rip), %rcx    # 0x54d604
leaq 0x3f8339(%rip), %r8     # 0x54d39c
movl $0x419, %r9d            # imm = 0x419
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x155077
cmpq $0x0, 0x310(%rsp)
jne 0x155226
movl 0x28c(%rsp), %eax
movl %eax, 0x104(%rsp)
testl %eax, %eax
je 0x1550b9
jmp 0x15509a
movl 0x104(%rsp), %eax
subl $0x1, %eax
je 0x155122
jmp 0x1550a8
movl 0x104(%rsp), %eax
subl $0x2, %eax
je 0x1550ef
jmp 0x155155
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x8(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x10(%rax)
movl $0x0, 0x184(%rsp)
jmp 0x155186
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x38(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x40(%rax)
movl $0x2, 0x184(%rsp)
jmp 0x155186
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x20(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x28(%rax)
movl $0x1, 0x184(%rsp)
jmp 0x155186
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x38(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x40(%rax)
movl $0x2, 0x184(%rsp)
movq $0x1, 0x278(%rsp)
movq 0x278(%rsp), %rax
cmpq 0x328(%rsp), %rax
ja 0x155203
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
imulq $0x48, 0x278(%rsp), %rdx
addq %rdx, %rax
movq %rcx, 0x38(%rax)
movl 0x184(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x278(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
movl $0x2, 0x184(%rsp)
movq 0x278(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x278(%rsp)
jmp 0x155192
movq 0x328(%rsp), %rax
movq %rax, 0x2a8(%rsp)
movl 0x184(%rsp), %eax
movl %eax, 0x2b0(%rsp)
jmp 0x156b0f
cmpq $0x0, 0x328(%rsp)
jne 0x155322
movl 0x28c(%rsp), %eax
movl %eax, 0x100(%rsp)
testl %eax, %eax
je 0x155265
jmp 0x155249
movl 0x100(%rsp), %eax
subl $0x1, %eax
je 0x1552b5
jmp 0x155257
movl 0x100(%rsp), %eax
subl $0x2, %eax
je 0x15528d
jmp 0x1552dd
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x8(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x10(%rax)
jmp 0x155303
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x38(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x40(%rax)
jmp 0x155303
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x20(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x28(%rax)
jmp 0x155303
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x20(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x28(%rax)
movq $0x0, 0x2a8(%rsp)
movl 0x28c(%rsp), %eax
movl %eax, 0x2b0(%rsp)
jmp 0x156b0f
movq 0x2a0(%rsp), %rdi
movq 0x310(%rsp), %rsi
movq 0x328(%rsp), %rdx
movl $0x30, %r8d
movq %r8, %rcx
callq 0x1a3480
testb $0x1, %al
jne 0x155351
jmp 0x15540c
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x300(%rsp), %rdx
movq 0x308(%rsp), %rcx
movq 0x310(%rsp), %r8
movq 0x318(%rsp), %r9
movq 0x320(%rsp), %rbp
movq 0x328(%rsp), %r13
movq 0x330(%rsp), %r12
movq 0x338(%rsp), %r15
movq 0x2f0(%rsp), %r14
movl 0x288(%rsp), %ebx
movl 0x28c(%rsp), %r11d
movl 0x284(%rsp), %r10d
movq 0x290(%rsp), %rax
movq %rbp, (%rsp)
movq %r13, 0x8(%rsp)
movq %r12, 0x10(%rsp)
movq %r15, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movl %ebx, 0x28(%rsp)
movl %r11d, 0x30(%rsp)
movl %r10d, 0x38(%rsp)
movq %rax, 0x40(%rsp)
callq 0x156b30
movq %rax, 0x2a8(%rsp)
movl %edx, 0x2b0(%rsp)
jmp 0x156b0f
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x290(%rsp), %rdx
movl 0x28c(%rsp), %ecx
movl 0x288(%rsp), %r8d
movl 0x284(%rsp), %r9d
movq 0x2f0(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x308(%rsp), %r12
movq 0x310(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
movq 0x328(%rsp), %r11
movq 0x330(%rsp), %r10
movq 0x338(%rsp), %rax
movq %rbp, (%rsp)
movq %r13, 0x8(%rsp)
movq %r12, 0x10(%rsp)
movq %r15, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movq %rbx, 0x28(%rsp)
movq %r11, 0x30(%rsp)
movq %r10, 0x38(%rsp)
movq %rax, 0x40(%rsp)
callq 0x156df0
movq %rax, 0x170(%rsp)
movl %edx, 0x178(%rsp)
movq 0x170(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq 0x178(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movq 0x1a8(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq 0x1a8(%rsp), %rax
movq %rax, 0x260(%rsp)
movl 0x1b0(%rsp), %eax
movl %eax, 0x180(%rsp)
cmpq $-0x1, 0x260(%rsp)
jne 0x155776
jmp 0x155532
cmpq $0x0, 0x230(%rsp)
jne 0x155575
movq 0x4e6a5c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3c0ac5(%rip), %rsi    # 0x516013
leaq 0x3f80cb(%rip), %rdx    # 0x54d620
leaq 0x3f80a8(%rip), %rcx    # 0x54d604
leaq 0x3f7e39(%rip), %r8     # 0x54d39c
movl $0x479, %r9d            # imm = 0x479
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x155577
cmpq $0x0, 0x230(%rsp)
jge 0x155673
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x290(%rsp), %rdx
movl 0x28c(%rsp), %ecx
movl 0x288(%rsp), %r8d
movl 0x284(%rsp), %r9d
movq 0x2f0(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq 0x2f8(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x308(%rsp), %r12
movq 0x310(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
movq 0x328(%rsp), %r11
movq 0x230(%rsp), %r10
addq $0x1, %r10
movq 0x338(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, (%rsp)
movq 0xf8(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x2a8(%rsp)
movl %edx, 0x2b0(%rsp)
jmp 0x156b0f
cmpq $0x0, 0x230(%rsp)
jle 0x15576f
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x290(%rsp), %rdx
movl 0x28c(%rsp), %ecx
movl 0x288(%rsp), %r8d
movl 0x284(%rsp), %r9d
movq 0x2f0(%rsp), %rax
movq %rax, 0xe0(%rsp)
movq 0x2f8(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x308(%rsp), %r12
movq 0x310(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
movq 0x328(%rsp), %r11
movq 0x330(%rsp), %r10
movq 0x230(%rsp), %rax
subq $0x1, %rax
movq %rax, 0xe8(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, (%rsp)
movq 0xe8(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x2a8(%rsp)
movl %edx, 0x2b0(%rsp)
jmp 0x156b0f
jmp 0x155771
jmp 0x155915
movl 0x180(%rsp), %eax
movl %eax, 0xdc(%rsp)
testl %eax, %eax
je 0x15579b
jmp 0x15578a
movl 0xdc(%rsp), %eax
subl $0x1, %eax
je 0x155802
jmp 0x15586a
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x0, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq %rax, 0x250(%rsp)
jmp 0x155913
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x18(%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x20(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x28(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x1, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq %rax, 0x250(%rsp)
jmp 0x155913
jmp 0x15586c
cmpl $0x2, 0x180(%rsp)
je 0x1558ae
movq 0x4e6723(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3c078c(%rip), %rsi    # 0x516013
leaq 0x3f7d9c(%rip), %rdx    # 0x54d62a
leaq 0x3f7d6f(%rip), %rcx    # 0x54d604
leaq 0x3f7b00(%rip), %r8     # 0x54d39c
movl $0x49a, %r9d            # imm = 0x49A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x1558b0
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x30(%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x38(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x40(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x2, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x38(%rax), %rax
movq %rax, 0x250(%rsp)
jmp 0x155915
movq 0x260(%rsp), %rax
cmpq 0x328(%rsp), %rax
je 0x155dcb
movq 0x230(%rsp), %rax
movq 0x310(%rsp), %rcx
subq 0x328(%rsp), %rcx
addq %rcx, %rax
cmpq $0x0, %rax
jle 0x155bec
movq 0x310(%rsp), %rax
movq 0x250(%rsp), %rcx
addq $0x1, %rcx
subq 0x2f0(%rsp), %rcx
subq %rcx, %rax
movq %rax, 0x270(%rsp)
movq 0x328(%rsp), %rax
subq 0x260(%rsp), %rax
movq %rax, 0x268(%rsp)
movq 0x330(%rsp), %rax
subq 0x230(%rsp), %rax
addq $0x1, %rax
xorl %ecx, %ecx
subq 0x270(%rsp), %rcx
cmpq %rcx, %rax
jle 0x1559d0
movq 0x330(%rsp), %rax
subq 0x230(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xd0(%rsp)
jmp 0x1559e2
xorl %eax, %eax
subq 0x270(%rsp), %rax
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rax
movq %rax, 0x240(%rsp)
movq $0x0, 0x238(%rsp)
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
leaq 0x1b8(%rsp), %rdi
movl $0x48, %edx
callq 0x19610
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
movq 0x290(%rsp), %rdx
movl 0x228(%rsp), %r8d
movl 0x284(%rsp), %r9d
movq 0x250(%rsp), %rax
addq $0x1, %rax
movq 0x2f8(%rsp), %rbp
addq 0x260(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x250(%rsp), %r12
addq $0x1, %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
addq 0x260(%rsp), %rbx
movq 0x268(%rsp), %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %rcx
movq %rcx, 0xc8(%rsp)
movl $0x1, %ecx
movq %rax, (%rsp)
movq 0xc8(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x160(%rsp)
movl %edx, 0x168(%rsp)
movq 0x160(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x168(%rsp), %rax
movq %rax, 0x190(%rsp)
movq 0x298(%rsp), %rdi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rdi
leaq 0x1b8(%rsp), %rsi
movl $0x48, %edx
callq 0x19610
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x28(%rax)
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
movq 0x260(%rsp), %rax
addq 0x188(%rsp), %rax
movq %rax, 0x188(%rsp)
jmp 0x155dc9
movq 0x310(%rsp), %rax
movq 0x250(%rsp), %rcx
subq 0x2f0(%rsp), %rcx
subq %rcx, %rax
movq %rax, 0x270(%rsp)
movq 0x328(%rsp), %rax
subq 0x260(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x268(%rsp)
movq $-0x1, 0x240(%rsp)
movq 0x338(%rsp), %rax
subq 0x230(%rsp), %rax
subq $0x1, %rax
cmpq 0x268(%rsp), %rax
jae 0x155c73
movq 0x338(%rsp), %rax
subq 0x230(%rsp), %rax
subq $0x1, %rax
movq %rax, 0xc0(%rsp)
jmp 0x155c83
movq 0x268(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0xc0(%rsp), %rax
movq %rax, 0x238(%rsp)
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
addq $0x48, %rsi
movq 0x290(%rsp), %rdx
movl 0x180(%rsp), %r8d
movl 0x284(%rsp), %r9d
movq 0x250(%rsp), %rax
movq 0x2f8(%rsp), %rbp
addq 0x260(%rsp), %rbp
addq $0x1, %rbp
movq 0x300(%rsp), %r13
movq 0x250(%rsp), %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
addq 0x260(%rsp), %rbx
addq $0x1, %rbx
movq 0x268(%rsp), %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %rcx
movq %rcx, 0xb8(%rsp)
movl $0x2, %ecx
movq %rax, (%rsp)
movq 0xb8(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x150(%rsp)
movl %edx, 0x158(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x158(%rsp), %rax
movq %rax, 0x190(%rsp)
movq 0x260(%rsp), %rax
addq $0x1, %rax
addq 0x188(%rsp), %rax
movq %rax, 0x188(%rsp)
jmp 0x155dcb
jmp 0x155dcd
cmpq $-0x1, 0x218(%rsp)
je 0x15659a
movq 0x228(%rsp), %rax
movq %rax, 0x210(%rsp)
movups 0x218(%rsp), %xmm0
movaps %xmm0, 0x200(%rsp)
movl 0x180(%rsp), %eax
movl %eax, 0x184(%rsp)
movq 0x260(%rsp), %rax
movq %rax, 0x258(%rsp)
movq 0x250(%rsp), %rax
movq %rax, 0x248(%rsp)
movq 0x200(%rsp), %rax
movq %rax, 0x260(%rsp)
movl 0x210(%rsp), %eax
movl %eax, 0xb4(%rsp)
testl %eax, %eax
je 0x155e5f
jmp 0x155e4e
movl 0xb4(%rsp), %eax
subl $0x1, %eax
je 0x155ec6
jmp 0x155f2e
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x0, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq %rax, 0x250(%rsp)
jmp 0x155fd7
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x18(%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x20(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x28(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x1, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq %rax, 0x250(%rsp)
jmp 0x155fd7
jmp 0x155f30
cmpl $0x2, 0x210(%rsp)
je 0x155f72
movq 0x4e605f(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3c00c8(%rip), %rsi    # 0x516013
leaq 0x3f76ec(%rip), %rdx    # 0x54d63e
leaq 0x3f76ab(%rip), %rcx    # 0x54d604
leaq 0x3f743c(%rip), %r8     # 0x54d39c
movl $0x4dd, %r9d            # imm = 0x4DD
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x155f74
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x30(%rax), %rcx
movq %rcx, 0x218(%rsp)
movq 0x38(%rax), %rcx
movq %rcx, 0x220(%rsp)
movq 0x40(%rax), %rax
movq %rax, 0x228(%rsp)
movl $0x2, 0x180(%rsp)
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rcx
addq %rcx, %rax
movq 0x38(%rax), %rax
movq %rax, 0x250(%rsp)
cmpl $0x0, 0x184(%rsp)
je 0x156001
cmpl $0x2, 0x184(%rsp)
jne 0x156006
movq 0x258(%rsp), %rax
subq 0x260(%rsp), %rax
cmpq $0x1, %rax
jne 0x156006
jmp 0x155dcd
cmpl $0x1, 0x184(%rsp)
jne 0x1562c3
movq 0x248(%rsp), %rax
subq 0x250(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x270(%rsp)
movq 0x258(%rsp), %rax
subq 0x260(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x268(%rsp)
movq $-0x1, 0x240(%rsp)
movq 0x338(%rsp), %rax
subq 0x230(%rsp), %rax
subq $0x1, %rax
cmpq 0x268(%rsp), %rax
jae 0x156094
movq 0x338(%rsp), %rax
subq 0x230(%rsp), %rax
subq $0x1, %rax
movq %rax, 0xa8(%rsp)
jmp 0x1560a4
movq 0x268(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0xa8(%rsp), %rax
movq %rax, 0x238(%rsp)
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
addq $0x48, %rsi
movq 0x290(%rsp), %rdx
movl 0x180(%rsp), %r8d
movq 0x250(%rsp), %rax
movq 0x2f8(%rsp), %rbp
addq 0x260(%rsp), %rbp
addq $0x1, %rbp
movq 0x300(%rsp), %r13
movq 0x250(%rsp), %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
addq 0x260(%rsp), %rbx
addq $0x1, %rbx
movq 0x268(%rsp), %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %rcx
movq %rcx, 0xa0(%rsp)
movl $0x2, %ecx
movl $0x1, %r9d
movq %rax, (%rsp)
movq 0xa0(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x140(%rsp)
movl %edx, 0x148(%rsp)
movq 0x140(%rsp), %rax
movq %rax, 0x198(%rsp)
movq 0x148(%rsp), %rax
movq %rax, 0x1a0(%rsp)
movq 0x198(%rsp), %rax
addq 0x260(%rsp), %rax
addq $0x1, %rax
cmpq 0x328(%rsp), %rax
jae 0x156264
movq 0x198(%rsp), %rax
addq $0x1, %rax
addq 0x260(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x138(%rsp)
movl 0x1a0(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x138(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movl 0x1a0(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x138(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x28(%rax)
movl 0x1a0(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x138(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
movq 0x198(%rsp), %rax
addq 0x260(%rsp), %rax
addq $0x1, %rax
cmpq 0x188(%rsp), %rax
jne 0x1562be
movq 0x198(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq 0x260(%rsp), %rax
addq $0x1, %rax
addq 0x188(%rsp), %rax
movq %rax, 0x188(%rsp)
jmp 0x156593
cmpl $0x2, 0x184(%rsp)
jne 0x156557
movq 0x248(%rsp), %rax
subq 0x250(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x270(%rsp)
movq 0x330(%rsp), %rax
subq 0x230(%rsp), %rax
addq $0x1, %rax
xorl %ecx, %ecx
subq 0x270(%rsp), %rcx
cmpq %rcx, %rax
jle 0x15632e
movq 0x330(%rsp), %rax
subq 0x230(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x98(%rsp)
jmp 0x156340
xorl %eax, %eax
subq 0x270(%rsp), %rax
movq %rax, 0x98(%rsp)
movq 0x98(%rsp), %rax
movq %rax, 0x240(%rsp)
movq $0x0, 0x238(%rsp)
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
leaq 0x1b8(%rsp), %rdi
movl $0x48, %edx
callq 0x19610
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rsi
movq 0x290(%rsp), %rdx
movl 0x228(%rsp), %r8d
movq 0x250(%rsp), %rax
addq $0x1, %rax
movq 0x2f8(%rsp), %rbp
addq 0x260(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x250(%rsp), %r12
addq $0x1, %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
addq 0x260(%rsp), %rbx
movq 0x258(%rsp), %r11
subq 0x260(%rsp), %r11
subq $0x1, %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %rcx
movq %rcx, 0x90(%rsp)
movl $0x1, %ecx
movl $0x2, %r9d
movq %rax, (%rsp)
movq 0x90(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x128(%rsp)
movl %edx, 0x130(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0x198(%rsp)
movq 0x130(%rsp), %rax
movq %rax, 0x1a0(%rsp)
movq 0x298(%rsp), %rdi
imulq $0x48, 0x260(%rsp), %rax
addq %rax, %rdi
leaq 0x1b8(%rsp), %rsi
movl $0x48, %edx
callq 0x19610
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x28(%rax)
movl 0x180(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
movl 0x1a0(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x258(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
jmp 0x156591
jmp 0x156559
movq 0x4e5a40(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3bfaa9(%rip), %rsi    # 0x516013
leaq 0x4027f2(%rip), %rdx    # 0x558d63
leaq 0x3f708c(%rip), %rcx    # 0x54d604
leaq 0x3f6e1d(%rip), %r8     # 0x54d39c
movl $0x51a, %r9d            # imm = 0x51A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x156593
jmp 0x156595
jmp 0x155dcd
movq 0x260(%rsp), %rax
movq %rax, 0x258(%rsp)
movq 0x250(%rsp), %rax
movq %rax, 0x248(%rsp)
movq 0x320(%rsp), %rax
subq 0x2f8(%rsp), %rax
cmpq 0x258(%rsp), %rax
je 0x156a8d
movl 0x180(%rsp), %eax
movl %eax, 0x8c(%rsp)
subl $0x1, %eax
je 0x156602
jmp 0x1565ed
movl 0x8c(%rsp), %eax
subl $0x2, %eax
je 0x15689c
jmp 0x156a51
movq 0x248(%rsp), %rax
movq 0x308(%rsp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x156655
jmp 0x15661d
movq 0x4e597c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3bf9e5(%rip), %rsi    # 0x516013
leaq 0x40272e(%rip), %rdx    # 0x558d63
leaq 0x3f6fc8(%rip), %rcx    # 0x54d604
leaq 0x3f6d59(%rip), %r8     # 0x54d39c
movl $0x525, %r9d            # imm = 0x525
movb $0x0, %al
callq 0x199f0
callq 0x19370
movq 0x248(%rsp), %rax
subq 0x308(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x270(%rsp)
xorl %eax, %eax
subq 0x270(%rsp), %rax
cmpq 0x230(%rsp), %rax
jbe 0x156699
xorl %eax, %eax
subq 0x270(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x1566a9
movq 0x230(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x240(%rsp)
movq 0x338(%rsp), %rax
cmpq 0x258(%rsp), %rax
jge 0x1566da
movq 0x338(%rsp), %rax
movq %rax, 0x78(%rsp)
jmp 0x1566e7
movq 0x258(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x78(%rsp), %rax
movq %rax, 0x238(%rsp)
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x290(%rsp), %rdx
movl 0x28c(%rsp), %ecx
movl 0x288(%rsp), %r8d
movq 0x2f0(%rsp), %rax
movq 0x2f8(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x308(%rsp), %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
movq 0x258(%rsp), %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %r9
movq %r9, 0x70(%rsp)
movl $0x1, %r9d
movq %rax, (%rsp)
movq 0x70(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x118(%rsp)
movl %edx, 0x120(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq 0x120(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movq 0x260(%rsp), %rax
addq $0x1, %rax
cmpq 0x328(%rsp), %rax
ja 0x156865
movl 0x1b0(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movl 0x1b0(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x28(%rax)
movl 0x1b0(%rsp), %ecx
movq 0x298(%rsp), %rax
movq 0x260(%rsp), %rdx
addq $0x1, %rdx
imulq $0x48, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
movq 0x1a8(%rsp), %rax
cmpq 0x188(%rsp), %rax
jne 0x156897
movq 0x1a8(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq %rax, 0x190(%rsp)
jmp 0x156a8b
movq 0x248(%rsp), %rax
subq 0x308(%rsp), %rax
movq %rax, 0x270(%rsp)
movq 0x258(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x268(%rsp)
movq 0x330(%rsp), %rax
xorl %ecx, %ecx
subq 0x270(%rsp), %rcx
cmpq %rcx, %rax
jle 0x1568ee
movq 0x330(%rsp), %rax
movq %rax, 0x68(%rsp)
jmp 0x1568fd
xorl %eax, %eax
subq 0x270(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x240(%rsp)
movq 0x230(%rsp), %rax
cmpq 0x268(%rsp), %rax
jae 0x15692b
movq 0x230(%rsp), %rax
movq %rax, 0x60(%rsp)
jmp 0x156938
movq 0x268(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x238(%rsp)
movq 0x2a0(%rsp), %rdi
movq 0x298(%rsp), %rsi
movq 0x290(%rsp), %rdx
movl 0x28c(%rsp), %ecx
movl 0x288(%rsp), %r8d
movq 0x2f0(%rsp), %rax
movq 0x2f8(%rsp), %rbp
movq 0x300(%rsp), %r13
movq 0x308(%rsp), %r12
movq 0x270(%rsp), %r15
movq 0x318(%rsp), %r14
movq 0x320(%rsp), %rbx
movq 0x268(%rsp), %r11
movq 0x240(%rsp), %r10
movq 0x238(%rsp), %r9
movq %r9, 0x58(%rsp)
movl $0x2, %r9d
movq %rax, (%rsp)
movq 0x58(%rsp), %rax
movq %rbp, 0x8(%rsp)
movq %r13, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq %r15, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x154f60
movq %rax, 0x108(%rsp)
movl %edx, 0x110(%rsp)
movq 0x108(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq 0x110(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movl 0x1b0(%rsp), %ecx
movq 0x298(%rsp), %rax
imulq $0x48, 0x260(%rsp), %rdx
addq %rdx, %rax
movl %ecx, 0x40(%rax)
jmp 0x156a8b
jmp 0x156a53
movq 0x4e5546(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x3bf5af(%rip), %rsi    # 0x516013
leaq 0x4022f8(%rip), %rdx    # 0x558d63
leaq 0x3f6b92(%rip), %rcx    # 0x54d604
leaq 0x3f6923(%rip), %r8     # 0x54d39c
movl $0x547, %r9d            # imm = 0x547
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x156aef
cmpl $0x1, 0x180(%rsp)
jne 0x156aed
movq 0x298(%rsp), %rax
movl $0x0, 0x88(%rax)
movq 0x298(%rsp), %rax
movl $0x0, 0x70(%rax)
movq 0x298(%rsp), %rax
movl $0x0, 0x58(%rax)
movq 0x2f0(%rsp), %rcx
movq 0x298(%rsp), %rax
movq %rcx, 0x8(%rax)
movl 0x288(%rsp), %ecx
movq 0x298(%rsp), %rax
movl %ecx, 0x10(%rax)
jmp 0x156aef
movq 0x188(%rsp), %rax
movq %rax, 0x2a8(%rsp)
movq 0x190(%rsp), %rax
movq %rax, 0x2b0(%rsp)
movq 0x2a8(%rsp), %rax
movl 0x2b0(%rsp), %edx
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq