// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/extended/snp_annotator_visitor.c
// Function: gt_snp_annotator_visitor_new
GtNodeVisitor* gt_snp_annotator_visitor_new(GtFeatureNode *gene,
                                            GtTransTable *trans_table,
                                            GtRegionMapping *rmap,
                                            GtError *err)
{
  GtNodeVisitor *nv;
  GtSNPAnnotatorVisitor *sav;
  gt_assert(gene && gt_feature_node_get_type(gene) == gt_symbol(gt_ft_gene));
  nv = gt_node_visitor_create(gt_snp_annotator_visitor_class());
  sav = snp_annotator_visitor_cast(nv);
  sav->gene = (GtFeatureNode*) gt_genome_node_ref((GtGenomeNode*) gene);
  sav->rmap = gt_region_mapping_ref(rmap);
  sav->mRNA_type = gt_symbol(gt_ft_mRNA);
  sav->CDS_type = gt_symbol(gt_ft_CDS);
  sav->SNV_type = gt_symbol(gt_ft_SNV);
  sav->SNP_type = gt_symbol(gt_ft_SNP);
  sav->rnaseqs = gt_hashmap_new(GT_HASH_DIRECT, NULL, gt_free_func);
  if (trans_table) {
    sav->tt = trans_table;
    sav->own_tt = false;
  } else {
    sav->tt = gt_trans_table_new_standard(err);
    sav->own_tt = true;
  }
  if (!sav->tt || gt_snp_annotator_visitor_prepare_gene(sav, err) != 0) {
    gt_node_visitor_delete(nv);
    return NULL;
  }
  return nv;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rcx, (%rsp)
testq %rdi, %rdi
je 0x175ab2
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, %r12
callq 0x142988
movq %rax, %r15
leaq 0x267fd4(%rip), %rdi    # 0x3dd74b
callq 0x11c5ff
cmpq %rax, %r15
jne 0x175ab2
callq 0x175000
movq %rax, %rdi
callq 0x163080
movq %rax, %r13
callq 0x175000
movq %rax, %rdi
movq %r13, %rsi
callq 0x1630b1
movq %rax, %r15
movq %r12, %rdi
callq 0x1443a0
movq %rax, 0x10(%r15)
movq %r14, %rdi
callq 0x16d803
movq %rax, 0x18(%r15)
leaq 0x2051da(%rip), %rdi    # 0x37a9a1
callq 0x11c5ff
movq %rax, 0x38(%r15)
leaq 0x20cc42(%rip), %rdi    # 0x382419
callq 0x11c5ff
movq %rax, 0x40(%r15)
leaq 0x21da9c(%rip), %rdi    # 0x393283
callq 0x11c5ff
movq %rax, 0x48(%r15)
leaq 0x21da90(%rip), %rdi    # 0x393287
callq 0x11c5ff
movq %rax, 0x50(%r15)
leaq -0x7115d(%rip), %rdx    # 0x1046aa
xorl %edi, %edi
xorl %esi, %esi
callq 0x1008fc
movq %rax, 0x20(%r15)
testq %rbx, %rbx
je 0x175824
movq %rbx, 0x28(%r15)
movb $0x0, 0x30(%r15)
jmp 0x17583f
movq (%rsp), %rdi
callq 0x11e038
movq %rax, 0x28(%r15)
movb $0x1, 0x30(%r15)
testq %rax, %rax
je 0x175a99
movq %r13, 0x8(%rsp)
callq 0x11ac6c
movq %rax, %r12
movq 0x10(%r15), %rdi
callq 0x144635
movq %rax, 0x20(%rsp)
movq 0x10(%r15), %rdi
callq 0x143f54
movq %rax, %r13
xorl %ebp, %ebp
movq %r13, %rdi
callq 0x1440ea
testq %rax, %rax
je 0x1759e2
movq %rax, %rbx
movq %rax, %rdi
callq 0x142988
cmpq 0x38(%r15), %rax
jne 0x175868
testq %rbp, %rbp
je 0x175927
movq %r12, %rdi
callq 0x11b0ca
leaq 0x1(%rax), %rdi
movl $0x1, %esi
leaq 0x21dac1(%rip), %rdx    # 0x39336c
movl $0x138, %ecx            # imm = 0x138
callq 0x10436a
movq %rax, %r14
movq %r12, %rdi
callq 0x11b0a1
movq %rbp, 0x18(%rsp)
movq %rax, %rbp
movq %r12, %rdi
callq 0x11b0ca
movq %r14, %rdi
movq %rbp, %rsi
movq 0x18(%rsp), %rbp
movq %rax, %rdx
callq 0x17370
movq 0x10(%r15), %rdi
callq 0x1424d6
cmpl $0x1, %eax
jne 0x175910
movq %r12, %rdi
callq 0x11b0ca
movq %r14, %rdi
movq %rax, %rsi
movq (%rsp), %rdx
callq 0x16eef8
testl %eax, %eax
jne 0x175a84
movq 0x20(%r15), %rdi
movq %rbp, %rsi
movq %r14, %rdx
callq 0x100b18
movq %r12, %rdi
callq 0x11b132
movq %rbx, %rdi
callq 0x143f54
movq %rax, %r14
movq %rax, %rdi
callq 0x1440ea
testq %rax, %rax
je 0x1759d2
movq %rax, %rbp
movq %rbp, %rdi
callq 0x142988
cmpq 0x40(%r15), %rax
jne 0x1759be
movq %rbp, %rdi
callq 0x144679
movq %rdx, %r8
movq %rax, 0x28(%rsp)
movq %rdx, 0x30(%rsp)
movq 0x18(%r15), %rdi
leaq 0x10(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq %rax, %rcx
movq (%rsp), %r9
callq 0x16d815
testl %eax, %eax
jne 0x175a7c
movq 0x10(%rsp), %rbp
leaq 0x28(%rsp), %rdi
callq 0x112233
movq %r12, %rdi
movq %rbp, %rsi
movq %rax, %rdx
callq 0x11ae1b
movq 0x10(%rsp), %rdi
leaq 0x21d9b8(%rip), %rsi    # 0x39336c
movl $0x150, %edx            # imm = 0x150
callq 0x1045eb
movq %r14, %rdi
callq 0x1440ea
movq %rax, %rbp
testq %rax, %rax
jne 0x175946
movq %r14, %rdi
callq 0x14417c
movq %rbx, %rbp
jmp 0x175868
testq %rbp, %rbp
je 0x175a65
movq %r12, %rdi
callq 0x11b0ca
leaq 0x1(%rax), %rdi
leaq 0x21d972(%rip), %rdx    # 0x39336c
movl $0x1, %esi
movl $0x159, %ecx            # imm = 0x159
callq 0x10436a
movq %rax, %rbx
movq %r12, %rdi
callq 0x11b0a1
movq %rax, %r14
movq %r12, %rdi
callq 0x11b0ca
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x17370
movq 0x10(%r15), %rdi
callq 0x1424d6
cmpl $0x1, %eax
jne 0x175a56
movq %r12, %rdi
callq 0x11b0ca
movq %rbx, %rdi
movq %rax, %rsi
movq (%rsp), %rdx
callq 0x16eef8
testl %eax, %eax
jne 0x175a84
movq 0x20(%r15), %rdi
movq %rbp, %rsi
movq %rbx, %rdx
callq 0x100b18
movq %r13, %rdi
callq 0x14417c
movq %r12, %rdi
callq 0x11bdbf
movq 0x8(%rsp), %rax
jmp 0x175aa3
movq %r14, %rdi
callq 0x14417c
movq %r13, %rdi
callq 0x14417c
movq %r12, %rdi
callq 0x11bdbf
movq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0x1632f2
xorl %eax, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x54da9
nop