// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/ltr/ltrdigest_file_out_stream.c
// Function: gt_ltr_visitor_feature_node
static int gt_ltr_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                       GT_UNUSED GtError *err)
{
  GtLTRVisitor *lv;
  GtRange node_range;
  GtArray *pdomarr = NULL;
  const char *pfamname;
  const char *fnt;
  lv = gt_ltr_visitor_cast(nv);
  gt_assert(lv);
  gt_error_check(err);

  fnt = gt_feature_node_get_type(fn);

  if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0)
  {
    lv->element->mainnode = fn;
  } else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0)
  {
    if (lv->element->leftLTR == NULL)
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->leftLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->leftLTR_5 = node_range.start - 1;
      lv->element->leftLTR_3 = node_range.end - 1;
    }
    else
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->rightLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->rightLTR_5 = node_range.start - 1;
      lv->element->rightLTR_3 = node_range.end - 1;
    }
  } else if (strcmp(fnt, gt_ft_target_site_duplication) == 0)
  {
    if (lv->element->leftTSD == NULL)
    {
      lv->element->leftTSD = fn;
    }
    else
    {
      lv->element->rightTSD = fn;
    }
  } else if (strcmp(fnt, gt_ft_RR_tract) == 0)
  {
    if (lv->element->ppt == NULL)
    {
      lv->element->ppt = fn;
    }
  } else if (strcmp(fnt, gt_ft_primer_binding_site) == 0)
  {
    if (lv->element->pbs == NULL)
    {
      lv->element->pbs = fn;
    }
  } else if (strcmp(fnt, gt_ft_protein_match) == 0)
  {
    char buf[BUFSIZ];
    if (!lv->element->pdoms)
    {
      lv->element->pdoms = gt_hashmap_new(GT_HASH_STRING, gt_free_func,
                                          (GtFree) gt_array_delete);
    }
    pfamname = gt_feature_node_get_attribute(fn, "name");
    (void) snprintf(buf, BUFSIZ-1, "%s", pfamname);
    gt_cstr_rep(buf, '/', '_');
    if (!(pdomarr = (GtArray*) gt_hashmap_get(lv->element->pdoms, buf)))
    {
      char *pfamcpy = gt_cstr_dup(buf);
      pdomarr = gt_array_new(sizeof (GtFeatureNode*));
      gt_hashmap_add(lv->element->pdoms, pfamcpy, pdomarr);
      if (lv->element->pdomorder != NULL)
        gt_array_add(lv->element->pdomorder, pfamcpy);
    }
    gt_array_add(pdomarr, fn);
  }
  return 0;
}

// Assembly:
subq $0x2078, %rsp           # imm = 0x2078
movq %rdi, 0x2070(%rsp)
movq %rsi, 0x2068(%rsp)
movq %rdx, 0x2060(%rsp)
movq $0x0, 0x2040(%rsp)
callq 0x3027d0
movq %rax, %rdi
movq 0x2070(%rsp), %rsi
callq 0x1b2350
movq %rax, 0x2058(%rsp)
cmpq $0x0, 0x2058(%rsp)
jne 0x3028ab
movq 0x339726(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x21378f(%rip), %rsi    # 0x516013
leaq 0x2907f7(%rip), %rdx    # 0x593082
leaq 0x2907f3(%rip), %rcx    # 0x593085
leaq 0x290248(%rip), %r8     # 0x592ae1
movl $0x8d, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3028ad
jmp 0x3028af
cmpq $0x0, 0x2060(%rsp)
je 0x302905
movq 0x2060(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x3028cd
jmp 0x302905
movq 0x3396cc(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x213735(%rip), %rsi    # 0x516013
leaq 0x2138da(%rip), %rdx    # 0x5161bf
leaq 0x290799(%rip), %rcx    # 0x593085
leaq 0x2901ee(%rip), %r8     # 0x592ae1
movl $0x8e, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x302907
movq 0x2068(%rsp), %rdi
callq 0x16d430
movq %rax, 0x2030(%rsp)
movq 0x2030(%rsp), %rdi
leaq 0x264c11(%rip), %rsi    # 0x56753c
callq 0x19980
cmpl $0x0, %eax
jne 0x302952
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x302d0c
movq 0x2030(%rsp), %rdi
leaq 0x267555(%rip), %rsi    # 0x569eb6
callq 0x19980
cmpl $0x0, %eax
jne 0x302aa9
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x28(%rax)
jne 0x302a17
movq 0x2068(%rsp), %rdi
callq 0x171cc0
movq %rax, 0x2020(%rsp)
movq %rdx, 0x2028(%rsp)
movq 0x2020(%rsp), %rax
movq %rax, 0x2048(%rsp)
movq 0x2028(%rsp), %rax
movq %rax, 0x2050(%rsp)
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x28(%rax)
movq 0x2048(%rsp), %rcx
subq $0x1, %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x2050(%rsp), %rcx
subq $0x1, %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, (%rax)
jmp 0x302aa4
movq 0x2068(%rsp), %rdi
callq 0x171cc0
movq %rax, 0x2010(%rsp)
movq %rdx, 0x2018(%rsp)
movq 0x2010(%rsp), %rax
movq %rax, 0x2048(%rsp)
movq 0x2018(%rsp), %rax
movq %rax, 0x2050(%rsp)
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x30(%rax)
movq 0x2048(%rsp), %rcx
subq $0x1, %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x2050(%rsp), %rcx
subq $0x1, %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x10(%rax)
jmp 0x302d0a
movq 0x2030(%rsp), %rdi
leaq 0x266860(%rip), %rsi    # 0x569318
callq 0x19980
cmpl $0x0, %eax
jne 0x302b0c
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x38(%rax)
jne 0x302aef
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x38(%rax)
jmp 0x302b07
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x40(%rax)
jmp 0x302d08
movq 0x2030(%rsp), %rdi
leaq 0x290039(%rip), %rsi    # 0x592b54
callq 0x19980
cmpl $0x0, %eax
jne 0x302b55
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x48(%rax)
jne 0x302b50
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x48(%rax)
jmp 0x302d06
movq 0x2030(%rsp), %rdi
leaq 0x29000b(%rip), %rsi    # 0x592b6f
callq 0x19980
cmpl $0x0, %eax
jne 0x302b9e
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x50(%rax)
jne 0x302b99
movq 0x2068(%rsp), %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x50(%rax)
jmp 0x302d04
movq 0x2030(%rsp), %rdi
leaq 0x250685(%rip), %rsi    # 0x553232
callq 0x19980
cmpl $0x0, %eax
jne 0x302d02
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x68(%rax)
jne 0x302bf9
movl $0x1, %edi
leaq -0x21a1aa(%rip), %rsi   # 0xe8a30
leaq -0x280c61(%rip), %rdx   # 0x81f80
callq 0xe0c40
movq %rax, %rcx
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x68(%rax)
movq 0x2068(%rsp), %rdi
leaq 0x2521f6(%rip), %rsi    # 0x554dfe
callq 0x16c040
movq %rax, 0x2038(%rsp)
leaq 0x10(%rsp), %rdi
movq 0x2038(%rsp), %rcx
movl $0x1fff, %esi           # imm = 0x1FFF
leaq 0x2993f3(%rip), %rdx    # 0x59c021
movb $0x0, %al
callq 0x19b90
leaq 0x10(%rsp), %rdi
movl $0x2f, %esi
movl $0x5f, %edx
callq 0xa2ef0
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x68(%rax), %rdi
leaq 0x10(%rsp), %rsi
callq 0xe0f20
movq %rax, 0x2040(%rsp)
cmpq $0x0, %rax
jne 0x302ce8
leaq 0x10(%rsp), %rdi
callq 0xa2db0
movq %rax, 0x8(%rsp)
movl $0x8, %edi
callq 0x80990
movq %rax, 0x2040(%rsp)
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x68(%rax), %rdi
movq 0x8(%rsp), %rsi
movq 0x2040(%rsp), %rdx
callq 0xe0fc0
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
cmpq $0x0, 0x60(%rax)
je 0x302ce6
movq 0x2058(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x60(%rax), %rdi
leaq 0x8(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
jmp 0x302ce8
movq 0x2040(%rsp), %rdi
leaq 0x2068(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
jmp 0x302d04
jmp 0x302d06
jmp 0x302d08
jmp 0x302d0a
jmp 0x302d0c
xorl %eax, %eax
addq $0x2078, %rsp           # imm = 0x2078
retq
nopw %cs:(%rax,%rax)