// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/gff3_parser.c
// Function: process_id_attr
static int process_id_attr(const char *id, GtFeatureNode *feature_node,
                           bool *is_child, GtGFF3Parser *parser, GtQueue
                           *genome_nodes, const char *filename,
                           unsigned int line_number, GtError *err)
{
  GtFeatureNode *fn;
  int had_err = 0;

  gt_error_check(err);
  gt_assert(id && feature_node && parser);

  if ((fn = gt_feature_info_get(parser->feature_info, id))) {
    /* this id has been used already -> try to make this a multi-feature */
    if (gt_genome_node_get_line_number((GtGenomeNode*) fn) <
        parser->last_terminator) {
      gt_error_set(err, "the multi-feature with %s \"%s\" on line %u in file "
                   "\"%s\" is separated from its counterpart on line %u by "
                   "terminator %s on line %u", GT_GFF_ID, id, line_number,
                   filename, gt_genome_node_get_line_number((GtGenomeNode*) fn),
                   GT_GFF_TERMINATOR, parser->last_terminator);
      had_err = -1;
    }
    /* check seqid */
    if (!had_err &&
        gt_str_cmp(gt_genome_node_get_seqid((GtGenomeNode*) feature_node),
                   gt_genome_node_get_seqid((GtGenomeNode*) fn))) {
      gt_error_set(err, "the multi-feature with %s \"%s\" on line %u in file "
                   "\"%s\" has a different sequence id than its counterpart on "
                   "line %u", GT_GFF_ID, id, line_number, filename,
                   gt_genome_node_get_line_number((GtGenomeNode*) fn));
      had_err = -1;
    }
    if (!had_err) {
      GtFeatureNode *pseudo_parent;
      bool has_parent = gt_feature_node_get_attribute(fn, GT_GFF_PARENT)
                        ? true : false;
      gt_assert(!gt_feature_node_is_pseudo(fn));
      pseudo_parent = gt_feature_info_get_pseudo_parent(parser->feature_info,
                                                        id);
      if (pseudo_parent || !gt_feature_node_is_multi(fn)) {
        if (!pseudo_parent) {
          gt_feature_node_make_multi_representative(fn);
          if (!has_parent) { /* create pseudo node */
            GtFeatureNode *pseudo_node = (GtFeatureNode*)
                                        gt_feature_node_new_pseudo_template(fn);
            feature_node_is_part_of_pseudo_node(pseudo_node, fn,
                                                parser->feature_info);
            replace_node(fn, pseudo_node, genome_nodes);
            gt_feature_node_add_child(pseudo_node, feature_node);
            update_pseudo_node_range(pseudo_node, feature_node);
            *is_child = true;
          }
        }
        else {
          gt_assert(pseudo_parent);
          update_pseudo_node_range(pseudo_parent, feature_node);
          gt_feature_node_add_child(pseudo_parent, feature_node);
          *is_child = true;
        }
      }
      else {
        gt_assert(has_parent);
        gt_assert(gt_feature_node_get_multi_representative(fn) == fn);
      }
      gt_feature_node_set_multi_representative(feature_node, fn);
    }
  }
  else {
    gt_feature_info_add(parser->feature_info, id, feature_node);
    if (!parser->strict)
      gt_orphanage_reg_parent(parser->orphanage, id);
  }

  if (!had_err)
    parser->incomplete_node = true;

  return had_err;
}

// Assembly:
subq $0xb8, %rsp
movq 0xc8(%rsp), %rax
movl 0xc0(%rsp), %eax
movq %rdi, 0xb0(%rsp)
movq %rsi, 0xa8(%rsp)
movq %rdx, 0xa0(%rsp)
movq %rcx, 0x98(%rsp)
movq %r8, 0x90(%rsp)
movq %r9, 0x88(%rsp)
movl $0x0, 0x7c(%rsp)
cmpq $0x0, 0xc8(%rsp)
je 0x2e264
movq 0xc8(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0x2e22c
jmp 0x2e264
movq 0x185da5(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12fe29(%rip), %rsi    # 0x15e066
leaq 0x130404(%rip), %rdx    # 0x15e648
leaq 0x136810(%rip), %rcx    # 0x164a5b
leaq 0x135359(%rip), %r8     # 0x1635ab
movl $0x20d, %r9d            # imm = 0x20D
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e266
jmp 0x2e268
cmpq $0x0, 0xb0(%rsp)
je 0x2e289
cmpq $0x0, 0xa8(%rsp)
je 0x2e289
cmpq $0x0, 0x98(%rsp)
jne 0x2e2c1
movq 0x185d48(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12fdcc(%rip), %rsi    # 0x15e066
leaq 0x1367ca(%rip), %rdx    # 0x164a6b
leaq 0x1367b3(%rip), %rcx    # 0x164a5b
leaq 0x1352fc(%rip), %r8     # 0x1635ab
movl $0x20e, %r9d            # imm = 0x20E
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e2c3
movq 0x98(%rsp), %rax
movq (%rax), %rdi
movq 0xb0(%rsp), %rsi
callq 0xa6220
movq %rax, 0x80(%rsp)
cmpq $0x0, %rax
je 0x2e6d0
movq 0x80(%rsp), %rdi
callq 0x25850
movq 0x98(%rsp), %rcx
cmpl 0x50(%rcx), %eax
jae 0x2e39d
movq 0xc8(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0xb0(%rsp), %rax
movq %rax, 0x48(%rsp)
movl 0xc0(%rsp), %eax
movl %eax, 0x54(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x80(%rsp), %rdi
callq 0x25850
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rcx
movl 0x54(%rsp), %r8d
movq 0x58(%rsp), %r9
movl %eax, %r11d
movq 0x98(%rsp), %rax
movl 0x50(%rax), %eax
leaq 0x136715(%rip), %rsi    # 0x164a88
leaq 0x1364c6(%rip), %rdx    # 0x164840
leaq 0x135a87(%rip), %r10    # 0x163e08
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movl %eax, 0x10(%rsp)
movb $0x0, %al
callq 0xc0d0
movl $0xffffffff, 0x7c(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x7c(%rsp)
jne 0x2e44c
movq 0xa8(%rsp), %rdi
callq 0x258a0
movq %rax, 0x38(%rsp)
movq 0x80(%rsp), %rdi
callq 0x258a0
movq 0x38(%rsp), %rdi
movq %rax, %rsi
callq 0x19bd0
cmpl $0x0, %eax
je 0x2e44c
movq 0xc8(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0xb0(%rsp), %rax
movq %rax, 0x20(%rsp)
movl 0xc0(%rsp), %eax
movl %eax, 0x2c(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x80(%rsp), %rdi
callq 0x25850
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rcx
movl 0x2c(%rsp), %r8d
movq 0x30(%rsp), %r9
leaq 0x1366d5(%rip), %rsi    # 0x164b08
leaq 0x136406(%rip), %rdx    # 0x164840
movl %eax, (%rsp)
movb $0x0, %al
callq 0xc0d0
movl $0xffffffff, 0x7c(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x7c(%rsp)
jne 0x2e6ce
movq 0x80(%rsp), %rdi
leaq 0x1363dd(%rip), %rsi    # 0x164843
callq 0x1fde0
movq %rax, %rdx
xorl %eax, %eax
movl $0x1, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x6f(%rsp)
movq 0x80(%rsp), %rdi
callq 0x21880
testb $0x1, %al
jne 0x2e49b
jmp 0x2e4d3
movq 0x185b36(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12fbba(%rip), %rsi    # 0x15e066
leaq 0x133a4e(%rip), %rdx    # 0x161f01
leaq 0x1365a1(%rip), %rcx    # 0x164a5b
leaq 0x1350ea(%rip), %r8     # 0x1635ab
movl $0x229, %r9d            # imm = 0x229
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e4d5
movq 0x98(%rsp), %rax
movq (%rax), %rdi
movq 0xb0(%rsp), %rsi
callq 0xa6380
movq %rax, 0x70(%rsp)
cmpq $0x0, 0x70(%rsp)
jne 0x2e50f
movq 0x80(%rsp), %rdi
callq 0x217b0
testb $0x1, %al
jne 0x2e621
cmpq $0x0, 0x70(%rsp)
jne 0x2e5a9
movq 0x80(%rsp), %rdi
callq 0x21950
testb $0x1, 0x6f(%rsp)
jne 0x2e5a7
movq 0x80(%rsp), %rdi
callq 0x20920
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x98(%rsp), %rax
movq (%rax), %rdx
callq 0x2f130
movq 0x80(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x90(%rsp), %rdx
callq 0x2f2b0
movq 0x60(%rsp), %rdi
movq 0xa8(%rsp), %rsi
callq 0x20db0
movq 0x60(%rsp), %rdi
movq 0xa8(%rsp), %rsi
callq 0x2f390
movq 0xa0(%rsp), %rax
movb $0x1, (%rax)
jmp 0x2e61c
jmp 0x2e5ab
cmpq $0x0, 0x70(%rsp)
jne 0x2e5eb
movq 0x185a1e(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12faa2(%rip), %rsi    # 0x15e066
leaq 0x14402b(%rip), %rdx    # 0x1725f6
leaq 0x136489(%rip), %rcx    # 0x164a5b
leaq 0x134fd2(%rip), %r8     # 0x1635ab
movl $0x23b, %r9d            # imm = 0x23B
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e5ed
movq 0x70(%rsp), %rdi
movq 0xa8(%rsp), %rsi
callq 0x2f390
movq 0x70(%rsp), %rdi
movq 0xa8(%rsp), %rsi
callq 0x20db0
movq 0xa0(%rsp), %rax
movb $0x1, (%rax)
jmp 0x2e6b9
jmp 0x2e623
testb $0x1, 0x6f(%rsp)
jne 0x2e662
movq 0x1859a7(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12fa2b(%rip), %rsi    # 0x15e066
leaq 0x136539(%rip), %rdx    # 0x164b7b
leaq 0x136412(%rip), %rcx    # 0x164a5b
leaq 0x134f5b(%rip), %r8     # 0x1635ab
movl $0x242, %r9d            # imm = 0x242
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e664
jmp 0x2e666
movq 0x80(%rsp), %rdi
callq 0x21c40
cmpq 0x80(%rsp), %rax
je 0x2e6b5
movq 0x185954(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12f9d8(%rip), %rsi    # 0x15e066
leaq 0x1364f1(%rip), %rdx    # 0x164b86
leaq 0x1363bf(%rip), %rcx    # 0x164a5b
leaq 0x134f08(%rip), %r8     # 0x1635ab
movl $0x243, %r9d            # imm = 0x243
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2e6b7
jmp 0x2e6b9
movq 0xa8(%rsp), %rdi
movq 0x80(%rsp), %rsi
callq 0x21a90
jmp 0x2e719
movq 0x98(%rsp), %rax
movq (%rax), %rdi
movq 0xb0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0xa6290
movq 0x98(%rsp), %rax
testb $0x1, 0x1b(%rax)
jne 0x2e717
movq 0x98(%rsp), %rax
movq 0x38(%rax), %rdi
movq 0xb0(%rsp), %rsi
callq 0x35750
jmp 0x2e719
cmpl $0x0, 0x7c(%rsp)
jne 0x2e72c
movq 0x98(%rsp), %rax
movb $0x1, 0x18(%rax)
movl 0x7c(%rsp), %eax
addq $0xb8, %rsp
retq
nopl (%rax,%rax)