// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/rdj-strgraph.c
// Function: gt_strgraph_reddepaths
GtUword gt_strgraph_reddepaths(GtStrgraph *strgraph,
    GtUword maxdepth, bool show_progressbar)
{
  GtStrgraphVnum i, from, to;
  GtStrgraphVEdgenum j, from_to;
  GtUword depth, d;
  GtUword counter = 0, nofdepaths = 0;
  GtUint64 progress = 0;
  bool i_branching;
  GtStrgraphEdgeID *edges;

  gt_assert(strgraph != NULL);

  edges = gt_malloc(sizeof (GtStrgraphEdgeID) * (maxdepth + 1));

  if (show_progressbar)
    gt_progressbar_start(&progress,
        (GtUint64)GT_STRGRAPH_NOFVERTICES(strgraph));

  for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
  {
    if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0)
    {
      if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i))
        continue;
      i_branching =
        (GT_STRGRAPH_V_OUTDEG(strgraph, i) > (GtStrgraphVEdgenum)1 &&
         GT_STRGRAPH_V_INDEG(strgraph, i) > 0) ||
        (GT_STRGRAPH_V_OUTDEG(strgraph, i) == (GtStrgraphVEdgenum)1 &&
         GT_STRGRAPH_V_INDEG(strgraph, i) > (GtStrgraphVEdgenum)1);
      for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++)
      {
        if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j) &&
            !GT_STRGRAPH_EDGE_HAS_MARK(strgraph, i, j))
        {
          from = i;
          from_to = j;
          to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to);
          edges->vnum = from;
          edges->edgenum = from_to;
          depth = 1UL;
          while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to) &&
              depth <= maxdepth)
          {
            depth++;
            from = to;
            from_to = gt_strgraph_find_only_edge(strgraph, from);
            to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to);
            gt_assert(depth >= 1UL);
            gt_assert(depth - 1UL <= maxdepth);
            edges[depth - 1UL].vnum = from;
            edges[depth - 1UL].edgenum = from_to;
          }
          if (depth <= maxdepth &&
              (!i_branching || GT_STRGRAPH_V_OUTDEG(strgraph, to) == 0))
          {
            nofdepaths++;
            for (d = 0; d < depth; d++)
            {
              GT_STRGRAPH_EDGE_SET_MARK(strgraph, edges[d].vnum,
                  edges[d].edgenum);
            }
          }
        }
      }
    }
    if (show_progressbar)
      progress++;
  }
  gt_free(edges);
  counter = gt_strgraph_reduce_marked_edges(strgraph);
  if (show_progressbar)
    gt_progressbar_stop();
  gt_log_log("dead-paths = "GT_WU"", nofdepaths);
  gt_log_log("dead-path edges = "GT_WU"", counter);
#ifndef NDEBUG
  gt_strgraph_check_outdegs(strgraph);
#endif
  return counter;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq $0x0, 0x40(%rsp)
testq %rdi, %rdi
je 0x1d383e
movl %edx, %ebx
movq %rsi, %rbp
movq %rdi, %r15
movq %rsi, %rdi
shlq $0x4, %rdi
addq $0x10, %rdi
leaq 0x1dc400(%rip), %rsi    # 0x3af32d
movl $0x479, %edx            # imm = 0x479
callq 0x104226
movq %rax, 0x28(%rsp)
testb %bl, %bl
je 0x1d2f51
movq 0x80(%r15), %rsi
leaq 0x40(%rsp), %rdi
callq 0x10ba28
cmpq $0x0, 0x80(%r15)
je 0x1d3750
movq 0x28(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x48(%rsp)
addq $0x18, %rax
movq %rax, 0x50(%rsp)
movq $0x0, (%rsp)
movq $0x0, 0x20(%rsp)
movl %ebx, 0x34(%rsp)
movq %rbp, 0x58(%rsp)
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d3816
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d3816
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3816
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
testq %rax, %rax
je 0x1d372d
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d3820
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d3820
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3820
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d305c
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d382f
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d382f
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d382f
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
je 0x1d3736
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d3825
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d3825
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3825
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
cmpq $0x2, %rax
jb 0x1d30ec
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d3834
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d3834
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3834
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
movb $0x1, %cl
movl %ecx, 0xc(%rsp)
testq %rax, %rax
jne 0x1d3182
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d382a
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d382a
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d382a
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d317a
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d3839
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d3839
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3839
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
cmpq $0x2, %rax
setae %al
movl %eax, 0xc(%rsp)
jmp 0x1d3182
movl $0x0, 0xc(%rsp)
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37ee
movq (%rsp), %rcx
incq %rcx
movq %rcx, 0x38(%rsp)
xorl %r12d, %r12d
movq 0x38(%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d37ee
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37ee
movq %r12, 0x10(%rsp)
movq (%rax), %rdi
movq %rdx, %rsi
imulq 0x38(%rsp), %rsi
callq 0x2f37dc
movq %rax, %r12
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37f3
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d37f3
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37f3
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
subq %rax, %r12
movq 0x10(%rsp), %rax
cmpq %r12, %rax
jae 0x1d3729
movq %rax, %r12
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37fd
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d37fd
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37fd
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
testq %rbx, %rbx
je 0x1d37f8
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1d37f8
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1d37f8
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2f37dc
movq %rax, %r14
movq 0x90(%r15), %rdi
callq 0x2f09dd
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %eax, %ecx
shll %cl, %edx
notl %edx
addl %edx, %edx
movslq %edx, %rax
andq %r14, %rax
shrq %rax
cmpq 0x90(%r15), %rax
je 0x1d3714
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d3802
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d3802
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3802
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
testq %rbx, %rbx
je 0x1d3807
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1d3807
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1d3807
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2f37dc
testb $0x1, %al
jne 0x1d3714
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d3811
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1d3811
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d3811
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2f37dc
testq %rbx, %rbx
je 0x1d380c
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1d380c
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1d380c
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2f37dc
movq %r12, %rbx
movq %rax, %r12
movq 0x80(%r15), %rdi
callq 0x2f09dd
movl %eax, %r13d
movq 0x90(%r15), %rdi
callq 0x2f09dd
movl %eax, %ebp
movq 0x90(%r15), %rdi
callq 0x2f09dd
movq 0x28(%rsp), %rcx
movq (%rsp), %rdx
movq %rdx, (%rcx)
movq %rbx, 0x8(%rcx)
movq 0x70(%r15), %rsi
testq %rsi, %rsi
je 0x1d37c1
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %r13d, %ecx
shll %cl, %edx
notl %edx
incb %bpl
movl %ebp, %ecx
shll %cl, %edx
movslq %edx, %rcx
andq %rcx, %r12
incb %al
movl %eax, %ecx
shrq %cl, %r12
movl $0x1, %eax
movq %rax, 0x18(%rsp)
movq 0x50(%rsp), %rbx
cmpq %r12, 0x8(%rsi)
jbe 0x1d37c1
movl 0x10(%rsi), %edx
cmpq $0x41, %rdx
jae 0x1d37c1
movq (%rsi), %rdi
movq %rdx, %rsi
imulq %r12, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
movq 0x58(%rsp), %rbp
jne 0x1d35bc
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d37c6
movl %r12d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r12, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d37c6
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37c6
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d35bc
cmpq %rbp, 0x18(%rsp)
ja 0x1d35bc
movq %r15, %rdi
movq %r12, %rsi
callq 0x1d3843
movq %rax, %r13
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37d0
cmpq %r12, 0x8(%rax)
jbe 0x1d37d0
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37d0
movq %rbx, %rbp
movq 0x88(%r15), %r14
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r12, %rsi
callq 0x2f37dc
testq %r14, %r14
je 0x1d37cb
addq %r13, %rax
cmpq %rax, 0x8(%r14)
jbe 0x1d37cb
movl 0x10(%r14), %edx
cmpq $0x41, %rdx
jae 0x1d37cb
movq %r13, 0x60(%rsp)
movq (%r14), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2f37dc
movq %rax, %r13
movq 0x80(%r15), %rdi
callq 0x2f09dd
movl %eax, %r14d
movq 0x90(%r15), %rdi
callq 0x2f09dd
movq %r15, %rbx
movl %eax, %r15d
movq 0x90(%rbx), %rdi
callq 0x2f09dd
incq 0x18(%rsp)
je 0x1d37e9
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %r14d, %ecx
shll %cl, %edx
notl %edx
incb %r15b
movl %r15d, %ecx
shll %cl, %edx
movslq %edx, %rcx
andq %rcx, %r13
incb %al
movl %eax, %ecx
shrq %cl, %r13
movq %r12, -0x8(%rbp)
movq 0x60(%rsp), %rax
movq %rax, (%rbp)
movq 0x70(%rbx), %rsi
addq $0x10, %rbp
movq %r13, %r12
testq %rsi, %rsi
movq %rbx, %r15
movq %rbp, %rbx
jne 0x1d3427
jmp 0x1d37c1
cmpq %rbp, 0x18(%rsp)
ja 0x1d370f
cmpb $0x0, 0xc(%rsp)
je 0x1d360a
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1d381b
cmpq %r12, 0x8(%rax)
jbe 0x1d381b
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d381b
movq (%rax), %rdi
imulq %rdx, %r12
movq %r12, %rsi
callq 0x2f37dc
testq %rax, %rax
jne 0x1d370f
incq 0x20(%rsp)
movq 0x48(%rsp), %rbx
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37da
movq -0x8(%rbx), %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d37da
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37da
movq 0x88(%r15), %r14
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
movq %rax, %r13
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1d37d5
movq -0x8(%rbx), %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d37d5
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d37d5
addq (%rbx), %r13
movq %r15, %r12
movq 0x88(%r15), %r15
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
testq %r15, %r15
je 0x1d37e4
addq (%rbx), %rax
cmpq %rax, 0x8(%r15)
jbe 0x1d37e4
movl 0x10(%r15), %edx
cmpq $0x41, %rdx
jae 0x1d37e4
movq (%r15), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2f37dc
testq %r14, %r14
je 0x1d37df
cmpq %r13, 0x8(%r14)
jbe 0x1d37df
movl 0x10(%r14), %edx
cmpq $0x41, %rdx
jae 0x1d37df
orq $0x1, %rax
movq (%r14), %rdi
imulq %rdx, %r13
movq %r13, %rsi
movq %rax, %rcx
callq 0x2f388c
addq $0x10, %rbx
decq 0x18(%rsp)
movq %r12, %r15
jne 0x1d3614
movq 0x10(%rsp), %r12
incq %r12
movq 0x60(%r15), %rax
testq %rax, %rax
jne 0x1d319e
jmp 0x1d37ee
movl 0x34(%rsp), %ebx
testb %bl, %bl
je 0x1d3736
incq 0x40(%rsp)
movq (%rsp), %rcx
incq %rcx
movq %rcx, (%rsp)
cmpq 0x80(%r15), %rcx
jb 0x1d2f90
jmp 0x1d3759
movq $0x0, 0x20(%rsp)
leaq 0x1dbbcd(%rip), %rsi    # 0x3af32d
movq 0x28(%rsp), %rdi
movl $0x4b1, %edx            # imm = 0x4B1
callq 0x1045eb
movq %r15, %rdi
callq 0x1d23d2
movq %rax, %r14
testb %bl, %bl
je 0x1d3783
callq 0x10bf8a
leaq 0x1dc1a6(%rip), %rdi    # 0x3af930
movq 0x20(%rsp), %rsi
xorl %eax, %eax
callq 0x103d72
leaq 0x1dc1a4(%rip), %rdi    # 0x3af941
movq %r14, %rsi
xorl %eax, %eax
callq 0x103d72
movq %r15, %rdi
callq 0x1d0e7b
movq %r14, %rax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x6f0a4
callq 0x6f06b
callq 0x6eedc
callq 0x6ef15
callq 0x6efc0
callq 0x6eff9
callq 0x6ef4e
callq 0x6ef87
callq 0x6eea3
callq 0x6f26c
callq 0x6f233
callq 0x6f1c1
callq 0x6f1fa
callq 0x6f188
callq 0x6f14f
callq 0x6f0dd
callq 0x6f116
callq 0x6f3fb
callq 0x6f032
callq 0x6f3c2
callq 0x6f350
callq 0x6f2de
callq 0x6f389
callq 0x6f317
callq 0x6f2a5
callq 0x6f434