// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/stream_evaluator.c
// Function: process_predicted_feature
static int process_predicted_feature(GtFeatureNode *fn, void *data,
                                     GT_UNUSED GtError *err)
{
  ProcessPredictedFeatureInfo *info = (ProcessPredictedFeatureInfo*) data;
  GtRange predicted_range;
  GtUword i, num;
  GtStrand predicted_strand;
  GtArray *real_genome_nodes;
  GtGenomeNode **real_gn;

  gt_error_check(err);
  gt_assert(fn && data);

  predicted_range = gt_genome_node_get_range((GtGenomeNode*) fn);
  predicted_strand = gt_feature_node_get_strand(fn);
  real_genome_nodes = gt_array_new(sizeof (GtGenomeNode**));

  if (gt_feature_node_has_type(fn, gt_ft_gene)) {
    /* store predicted gene */
    gt_evaluator_add_predicted(info->mRNA_gene_evaluator, 1);
    gt_evaluator_add_predicted(info->CDS_gene_evaluator, 1);
    /* determine true gene */
    switch (predicted_strand) {
      case GT_STRAND_FORWARD:
      case GT_STRAND_REVERSE:
        gt_bsearch_all_mark(real_genome_nodes, &fn,
                            predicted_strand == GT_STRAND_FORWARD
                            ? gt_array_get_space(info->slot->genes_forward)
                            : gt_array_get_space(info->slot->genes_reverse),
                            predicted_strand == GT_STRAND_FORWARD
                            ? gt_array_size(info->slot->genes_forward)
                            : gt_array_size(info->slot->genes_reverse),
                            sizeof (GtGenomeNode*),
                            (GtCompareWithData)
                            gt_genome_node_compare_with_data,
                            NULL,
                            predicted_strand == GT_STRAND_FORWARD
                            ? info->slot->overlapped_genes_forward
                            : info->slot->overlapped_genes_reverse);
        if (gt_array_size(real_genome_nodes)) {
          /* gene(s) with the same range found -> check if they are equal */
          compare_features(real_genome_nodes, fn, info->slot->genes_forward,
                           info->slot->genes_reverse,
                           info->slot->true_mRNA_genes_forward,
                           info->slot->true_mRNA_genes_reverse,
                           info->mRNA_gene_evaluator, genes_are_equal,
                           gt_ft_exon);
          compare_features(real_genome_nodes, fn, info->slot->genes_forward,
                           info->slot->genes_reverse,
                           info->slot->true_CDS_genes_forward,
                           info->slot->true_CDS_genes_reverse,
                           info->CDS_gene_evaluator, genes_are_equal,
                           gt_ft_CDS);
        }
        else {
          /* no gene with the same range found -> check if this is a wrong
             gene */
          if (!gt_feature_node_overlaps_nodes_mark(fn,
                                    predicted_strand == GT_STRAND_FORWARD
                                    ? info->slot->genes_forward
                                    : info->slot->genes_reverse,
                                    predicted_strand == GT_STRAND_FORWARD
                                    ? info->slot->overlapped_genes_forward
                                    : info->slot->overlapped_genes_reverse)) {
            (*info->wrong_genes)++;
          }
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping predicted gene with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) {
    /* store predicted mRNA */
    gt_evaluator_add_predicted(info->mRNA_mRNA_evaluator, 1);
    gt_evaluator_add_predicted(info->CDS_mRNA_evaluator, 1);
    /* determine true mRNA */
    switch (predicted_strand) {
      case GT_STRAND_FORWARD:
      case GT_STRAND_REVERSE:
        gt_bsearch_all_mark(real_genome_nodes, &fn,
                            predicted_strand == GT_STRAND_FORWARD
                            ? gt_array_get_space(info->slot->mRNAs_forward)
                            : gt_array_get_space(info->slot->mRNAs_reverse),
                            predicted_strand == GT_STRAND_FORWARD
                            ? gt_array_size(info->slot->mRNAs_forward)
                            : gt_array_size(info->slot->mRNAs_reverse),
                            sizeof (GtGenomeNode*),
                            (GtCompareWithData)
                            gt_genome_node_compare_with_data,
                            NULL,
                            predicted_strand == GT_STRAND_FORWARD
                            ? info->slot->overlapped_mRNAs_forward
                            : info->slot->overlapped_mRNAs_reverse);
        if (gt_array_size(real_genome_nodes)) {
          /* mRNA(s) with the same range found -> check if they are equal */
          compare_features(real_genome_nodes, fn, info->slot->mRNAs_forward,
                           info->slot->mRNAs_reverse,
                           info->slot->true_mRNA_mRNAs_forward,
                           info->slot->true_mRNA_mRNAs_reverse,
                           info->mRNA_mRNA_evaluator, mRNAs_are_equal,
                           gt_ft_exon);
          compare_features(real_genome_nodes, fn, info->slot->mRNAs_forward,
                           info->slot->mRNAs_reverse,
                           info->slot->true_CDS_mRNAs_forward,
                           info->slot->true_CDS_mRNAs_reverse,
                           info->CDS_mRNA_evaluator, mRNAs_are_equal,
                           gt_ft_CDS);
        }
        else {
          /* no mRNA with the same range found -> check if this is a wrong
             mRNA */
          if (!gt_feature_node_overlaps_nodes_mark(fn,
                                    predicted_strand == GT_STRAND_FORWARD
                                    ? info->slot->mRNAs_forward
                                    : info->slot->mRNAs_reverse,
                                    predicted_strand == GT_STRAND_FORWARD
                                    ? info->slot->overlapped_mRNAs_forward
                                    : info->slot->overlapped_mRNAs_reverse)) {
            (*info->wrong_mRNAs)++;
          }
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping predicted mRNA with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) {
    /* store predicted LTR */
    gt_evaluator_add_predicted(info->LTR_evaluator, 1);
    /* determine true LTR */
    gt_bsearch_all_mark(real_genome_nodes, &fn,
                        gt_array_get_space(info->slot->LTRs),
                        gt_array_size(info->slot->LTRs),
                        sizeof (GtGenomeNode*),
                        (GtCompareWithData) gt_genome_node_compare_delta,
                        &info->LTRdelta,
                        info->slot->overlapped_LTRs);

    if (gt_array_size(real_genome_nodes)) {
      for (i = 0; i < gt_array_size(real_genome_nodes); i++) {
        real_gn = *(GtGenomeNode***) gt_array_get(real_genome_nodes, i);
        num = real_gn - (GtGenomeNode**) gt_array_get_space(info->slot->LTRs);
        if (!gt_bittab_bit_is_set(info->slot->true_LTRs, num)) {
          gt_bittab_set_bit(info->slot->true_LTRs, num);
          gt_evaluator_add_true(info->LTR_evaluator);
          /*@loopbreak@*/
          break;
        }
      }
    }
    else {
      /* no LTR with the same range found -> check if this is a wrong LTR */
      if (!gt_feature_node_overlaps_nodes_mark(fn, info->slot->LTRs,
                                               info->slot->overlapped_LTRs)) {
        (*info->wrong_LTRs)++;
      }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_exon)) {
    /* store predicted exon (mRNA level)*/
    store_predicted_exon(info->mRNA_exon_evaluators, fn);

    /* store predicted exon (mRNA level, collapsed) */
    store_predicted_exon_collapsed(predicted_strand == GT_STRAND_FORWARD
                                   ? info->slot->used_mRNA_exons_forward
                                   : info->slot->used_mRNA_exons_reverse,
                                   &predicted_range,
                                   info->mRNA_exon_evaluators_collapsed, fn);

    /* determine true exon (mRNA level)*/
    switch (predicted_strand) {
      case GT_STRAND_FORWARD:
      case GT_STRAND_REVERSE:
        store_true_exon(fn, predicted_strand, &predicted_range,
                        info->exondiff, info->exondiffcollapsed,
                        info->slot->mRNA_exons_forward,
                        info->slot->mRNA_exons_reverse,
                        info->slot->mRNA_counts_forward,
                        info->slot->mRNA_counts_reverse,
                        info->slot->mRNA_exon_bittabs_forward,
                        info->slot->mRNA_exon_bittabs_reverse,
                        info->mRNA_exon_evaluators,
                        info->mRNA_exon_evaluators_collapsed);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(predicted_strand == GT_STRAND_FORWARD
                              ? info->slot->pred_mRNA_nucleotides_forward
                              : info->slot->pred_mRNA_nucleotides_reverse,
                              predicted_range, info->slot->real_range,
                              predicted_strand == GT_STRAND_FORWARD
                              ? &info->slot->FP_mRNA_nucleotides_forward
                              : &info->slot->FP_mRNA_nucleotides_reverse);
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping predicted exon with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
    }
  }
  else if (gt_feature_node_has_type(fn, gt_ft_CDS)) {
    /* store predicted exon (CDS level)*/
    store_predicted_exon(info->CDS_exon_evaluators, fn);

    /* store predicted exon (CDS level, collapsed) */
    store_predicted_exon_collapsed(predicted_strand == GT_STRAND_FORWARD
                                   ? info->slot->used_CDS_exons_forward
                                   : info->slot->used_CDS_exons_reverse,
                                   &predicted_range,
                                   info->CDS_exon_evaluators_collapsed, fn);

    /* determine true exon (CDS level) */
    switch (predicted_strand) {
      case GT_STRAND_FORWARD:
      case GT_STRAND_REVERSE:
        store_true_exon(fn, predicted_strand, &predicted_range,
                        info->exondiff, info->exondiffcollapsed,
                        info->slot->CDS_exons_forward,
                        info->slot->CDS_exons_reverse,
                        info->slot->CDS_counts_forward,
                        info->slot->CDS_counts_reverse,
                        info->slot->CDS_exon_bittabs_forward,
                        info->slot->CDS_exon_bittabs_reverse,
                        info->CDS_exon_evaluators,
                        info->CDS_exon_evaluators_collapsed);
        /* nucleotide level */
        if (info->nuceval) {
          add_nucleotide_exon(predicted_strand == GT_STRAND_FORWARD
                              ? info->slot->pred_CDS_nucleotides_forward
                              : info->slot->pred_CDS_nucleotides_reverse,
                              predicted_range, info->slot->real_range,
                              predicted_strand == GT_STRAND_FORWARD
                              ? &info->slot->FP_CDS_nucleotides_forward
                              : &info->slot->FP_CDS_nucleotides_reverse);
        }
        break;
      default:
        if (info->verbose) {
          fprintf(stderr, "skipping predicted exon with unknown orientation "
                  "(line %u)\n",
                  gt_genome_node_get_line_number((GtGenomeNode*) fn));
        }
      }
  }
  gt_array_delete(real_genome_nodes);
  return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1e8, %rsp            # imm = 0x1E8
movq %rdi, 0x1e0(%rsp)
movq %rsi, 0x1d8(%rsp)
movq %rdx, 0x1d0(%rsp)
movq 0x1d8(%rsp), %rax
movq %rax, 0x1c8(%rsp)
cmpq $0x0, 0x1d0(%rsp)
je 0xee3bc
movq 0x1d0(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xee384
jmp 0xee3bc
movq 0xc5c4d(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x6fcd1(%rip), %rsi     # 0x15e066
leaq 0x702ac(%rip), %rdx     # 0x15e648
leaq 0x8c851(%rip), %rcx     # 0x17abf4
leaq 0x8c1fe(%rip), %r8      # 0x17a5a8
movl $0x3ea, %r9d            # imm = 0x3EA
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xee3be
jmp 0xee3c0
cmpq $0x0, 0x1e0(%rsp)
je 0xee3d6
cmpq $0x0, 0x1d8(%rsp)
jne 0xee40e
movq 0xc5bfb(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x6fc7f(%rip), %rsi     # 0x15e066
leaq 0x8c43f(%rip), %rdx     # 0x17a82d
leaq 0x8c7ff(%rip), %rcx     # 0x17abf4
leaq 0x8c1ac(%rip), %r8      # 0x17a5a8
movl $0x3eb, %r9d            # imm = 0x3EB
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xee410
movq 0x1e0(%rsp), %rdi
callq 0x259f0
movq %rax, 0x180(%rsp)
movq %rdx, 0x188(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movq 0x188(%rsp), %rax
movq %rax, 0x1c0(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x20a10
movl %eax, 0x1a4(%rsp)
movl $0x8, %edi
callq 0x75ab0
movq %rax, 0x198(%rsp)
movq 0x1e0(%rsp), %rdi
leaq 0xa108e(%rip), %rsi     # 0x18f510
callq 0x21700
testb $0x1, %al
jne 0xee490
jmp 0xee851
movq 0x1c8(%rsp), %rax
movq 0x18(%rax), %rdi
movl $0x1, %esi
movq %rsi, 0x178(%rsp)
callq 0x1509b0
movq 0x178(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x1509b0
movl 0x1a4(%rsp), %eax
subl $0x1, %eax
ja 0xee805
jmp 0xee4d9
movq 0x198(%rsp), %rax
movq %rax, 0x170(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee510
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rdi
callq 0x761a0
movq %rax, 0x168(%rsp)
jmp 0xee52c
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0x761a0
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rax
movq %rax, 0x160(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee563
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rdi
callq 0x76490
movq %rax, 0x158(%rsp)
jmp 0xee57f
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0x76490
movq %rax, 0x158(%rsp)
movq 0x158(%rsp), %rax
movq %rax, 0x150(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee5b5
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x120(%rax), %rax
movq %rax, 0x148(%rsp)
jmp 0xee5cf
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x128(%rax), %rax
movq %rax, 0x148(%rsp)
movq 0x150(%rsp), %rcx
movq 0x160(%rsp), %rdx
movq 0x170(%rsp), %rdi
movq 0x148(%rsp), %rax
leaq 0x1e0(%rsp), %rsi
movl $0x8, %r8d
leaq -0xc87f4(%rip), %r9     # 0x25e10
xorl %r10d, %r10d
movq $0x0, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x110350
movq 0x198(%rsp), %rdi
callq 0x76490
cmpq $0x0, %rax
je 0xee731
movq 0x198(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rdx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xd8(%rax), %r8
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xe0(%rax), %r9
movq 0x1c8(%rsp), %rax
movq 0x18(%rax), %r11
leaq 0x206c(%rip), %r10      # 0xf0700
leaq 0x8c71b(%rip), %rax     # 0x17adb6
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0xf04d0
movq 0x198(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rdx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xe8(%rax), %r8
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xf0(%rax), %r9
movq 0x1c8(%rsp), %rax
movq 0x20(%rax), %r11
leaq 0x1fee(%rip), %r10      # 0xf0700
leaq 0x73b22(%rip), %rax     # 0x16223b
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0xf04d0
jmp 0xee803
movq 0x1e0(%rsp), %rax
movq %rax, 0x140(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee763
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq %rax, 0x138(%rsp)
jmp 0xee77a
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x138(%rsp)
movq 0x138(%rsp), %rax
movq %rax, 0x130(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee7b0
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x120(%rax), %rax
movq %rax, 0x128(%rsp)
jmp 0xee7ca
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x128(%rax), %rax
movq %rax, 0x128(%rsp)
movq 0x130(%rsp), %rsi
movq 0x140(%rsp), %rdi
movq 0x128(%rsp), %rdx
callq 0x24370
testb $0x1, %al
jne 0xee801
movq 0x1c8(%rsp), %rax
movq 0x60(%rax), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xee803
jmp 0xee84c
movq 0x1c8(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xee84a
movq 0xc57be(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x120(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x25850
movq 0x120(%rsp), %rdi
movl %eax, %edx
leaq 0x8c3cb(%rip), %rsi     # 0x17ac0e
movb $0x0, %al
callq 0xb890
jmp 0xee84c
jmp 0xef3bf
movq 0x1e0(%rsp), %rdi
leaq 0x73436(%rip), %rsi     # 0x161c96
callq 0x21700
testb $0x1, %al
jne 0xee86e
jmp 0xeec34
movq 0x1c8(%rsp), %rax
movq 0x28(%rax), %rdi
movl $0x1, %esi
movq %rsi, 0x118(%rsp)
callq 0x1509b0
movq 0x118(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x1509b0
movl 0x1a4(%rsp), %eax
subl $0x1, %eax
ja 0xeebe8
jmp 0xee8b7
movq 0x198(%rsp), %rax
movq %rax, 0x110(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee8ef
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdi
callq 0x761a0
movq %rax, 0x108(%rsp)
jmp 0xee90b
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rdi
callq 0x761a0
movq %rax, 0x108(%rsp)
movq 0x108(%rsp), %rax
movq %rax, 0x100(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee943
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdi
callq 0x76490
movq %rax, 0xf8(%rsp)
jmp 0xee95f
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rdi
callq 0x76490
movq %rax, 0xf8(%rsp)
movq 0xf8(%rsp), %rax
movq %rax, 0xf0(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xee995
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x130(%rax), %rax
movq %rax, 0xe8(%rsp)
jmp 0xee9af
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x138(%rax), %rax
movq %rax, 0xe8(%rsp)
movq 0xf0(%rsp), %rcx
movq 0x100(%rsp), %rdx
movq 0x110(%rsp), %rdi
movq 0xe8(%rsp), %rax
leaq 0x1e0(%rsp), %rsi
movl $0x8, %r8d
leaq -0xc8bd4(%rip), %r9     # 0x25e10
xorl %r10d, %r10d
movq $0x0, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x110350
movq 0x198(%rsp), %rdi
callq 0x76490
cmpq $0x0, %rax
je 0xeeb13
movq 0x198(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rcx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xf8(%rax), %r8
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x100(%rax), %r9
movq 0x1c8(%rsp), %rax
movq 0x28(%rax), %r11
leaq 0x1fab(%rip), %r10      # 0xf0a20
leaq 0x8c33a(%rip), %rax     # 0x17adb6
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0xf04d0
movq 0x198(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rcx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x108(%rax), %r8
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x110(%rax), %r9
movq 0x1c8(%rsp), %rax
movq 0x30(%rax), %r11
leaq 0x1f2c(%rip), %r10      # 0xf0a20
leaq 0x73740(%rip), %rax     # 0x16223b
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0xf04d0
jmp 0xeebe6
movq 0x1e0(%rsp), %rax
movq %rax, 0xe0(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xeeb46
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0xd8(%rsp)
jmp 0xeeb5d
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rax
movq %rax, 0xd8(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0xd0(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xeeb93
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x130(%rax), %rax
movq %rax, 0xc8(%rsp)
jmp 0xeebad
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x138(%rax), %rax
movq %rax, 0xc8(%rsp)
movq 0xd0(%rsp), %rsi
movq 0xe0(%rsp), %rdi
movq 0xc8(%rsp), %rdx
callq 0x24370
testb $0x1, %al
jne 0xeebe4
movq 0x1c8(%rsp), %rax
movq 0x68(%rax), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xeebe6
jmp 0xeec2f
movq 0x1c8(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xeec2d
movq 0xc53db(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0xc0(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x25850
movq 0xc0(%rsp), %rdi
movl %eax, %edx
leaq 0x8c024(%rip), %rsi     # 0x17ac4a
movb $0x0, %al
callq 0xb890
jmp 0xeec2f
jmp 0xef3bd
movq 0x1e0(%rsp), %rdi
leaq 0x8bc63(%rip), %rsi     # 0x17a8a6
callq 0x21700
testb $0x1, %al
jne 0xeec51
jmp 0xeee6e
movq 0x1c8(%rsp), %rax
movq 0x38(%rax), %rdi
movl $0x1, %esi
callq 0x1509b0
movq 0x198(%rsp), %rax
movq %rax, 0xb0(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rdi
callq 0x761a0
movq %rax, 0xb8(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rdi
callq 0x76490
movq 0xb0(%rsp), %rdi
movq 0xb8(%rsp), %rdx
movq %rax, %rcx
movq 0x1c8(%rsp), %r10
addq $0x10, %r10
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x140(%rax), %rax
leaq 0x1e0(%rsp), %rsi
movl $0x8, %r8d
leaq -0xc8ead(%rip), %r9     # 0x25e40
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x110350
movq 0x198(%rsp), %rdi
callq 0x76490
cmpq $0x0, %rax
je 0xeee1f
movq $0x0, 0x1b0(%rsp)
movq 0x1b0(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0x198(%rsp), %rdi
callq 0x76490
movq %rax, %rcx
movq 0xa8(%rsp), %rax
cmpq %rcx, %rax
jae 0xeee1d
movq 0x198(%rsp), %rdi
movq 0x1b0(%rsp), %rsi
callq 0x75c80
movq (%rax), %rax
movq %rax, 0x190(%rsp)
movq 0x190(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rdi
callq 0x761a0
movq %rax, %rcx
movq 0xa0(%rsp), %rax
subq %rcx, %rax
sarq $0x3, %rax
movq %rax, 0x1a8(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x118(%rax), %rdi
movq 0x1a8(%rsp), %rsi
callq 0x79c60
testb $0x1, %al
jne 0xeee02
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x118(%rax), %rdi
movq 0x1a8(%rsp), %rsi
callq 0x78fe0
movq 0x1c8(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x150880
jmp 0xeee1d
jmp 0xeee04
movq 0x1b0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x1b0(%rsp)
jmp 0xeed1e
jmp 0xeee69
movq 0x1e0(%rsp), %rdi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x20(%rax), %rsi
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x140(%rax), %rdx
callq 0x24370
testb $0x1, %al
jne 0xeee67
movq 0x1c8(%rsp), %rax
movq 0x70(%rax), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xeee69
jmp 0xef3bb
movq 0x1e0(%rsp), %rdi
leaq 0x8bf39(%rip), %rsi     # 0x17adb6
callq 0x21700
testb $0x1, %al
jne 0xeee8b
jmp 0xef122
movq 0x1c8(%rsp), %rax
movq 0x40(%rax), %rdi
movq 0x1e0(%rsp), %rsi
callq 0xf0be0
cmpl $0x0, 0x1a4(%rsp)
jne 0xeeeca
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x168(%rax), %rax
movq %rax, 0x98(%rsp)
jmp 0xeeee4
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x170(%rax), %rax
movq %rax, 0x98(%rsp)
movq 0x98(%rsp), %rdi
movq 0x1c8(%rsp), %rax
movq 0x48(%rax), %rdx
movq 0x1e0(%rsp), %rcx
leaq 0x1b8(%rsp), %rsi
callq 0xf0d20
movl 0x1a4(%rsp), %eax
subl $0x1, %eax
ja 0xef0dc
jmp 0xeef1f
movq 0x1e0(%rsp), %rdi
movl 0x1a4(%rsp), %esi
movq 0x1c8(%rsp), %rax
movb 0xa(%rax), %cl
movq 0x1c8(%rsp), %rax
movb 0xb(%rax), %r8b
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x28(%rax), %r9
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x30(%rax), %r12
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x48(%rax), %r15
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x50(%rax), %r14
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x148(%rax), %rbx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x150(%rax), %r11
movq 0x1c8(%rsp), %rax
movq 0x40(%rax), %r10
movq 0x1c8(%rsp), %rax
movq 0x48(%rax), %rax
leaq 0x1b8(%rsp), %rdx
andb $0x1, %cl
andb $0x1, %r8b
movzbl %cl, %ecx
movzbl %r8b, %r8d
movq %r12, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq %r11, 0x20(%rsp)
movq %r10, 0x28(%rsp)
movq %rax, 0x30(%rsp)
callq 0xf0e80
movq 0x1c8(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xef0da
cmpl $0x0, 0x1a4(%rsp)
jne 0xef032
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xa0(%rax), %rax
movq %rax, 0x90(%rsp)
jmp 0xef04c
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xb0(%rax), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x68, %rax
movq %rax, 0x88(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xef093
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x78, %rax
movq %rax, 0x78(%rsp)
jmp 0xef0a9
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x80, %rax
movq %rax, 0x78(%rsp)
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rax
movq 0x78(%rsp), %r9
movq 0x1b8(%rsp), %rsi
movq 0x1c0(%rsp), %rdx
movq (%rax), %rcx
movq 0x8(%rax), %r8
callq 0xf0370
jmp 0xef11d
movq 0x1c8(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xef11b
movq 0xc4ee7(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x70(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x25850
movq 0x70(%rsp), %rdi
movl %eax, %edx
leaq 0x8bb72(%rip), %rsi     # 0x17ac86
movb $0x0, %al
callq 0xb890
jmp 0xef11d
jmp 0xef3b9
movq 0x1e0(%rsp), %rdi
leaq 0x7310a(%rip), %rsi     # 0x16223b
callq 0x21700
testb $0x1, %al
jne 0xef13f
jmp 0xef3b7
movq 0x1c8(%rsp), %rax
movq 0x50(%rax), %rdi
movq 0x1e0(%rsp), %rsi
callq 0xf0be0
cmpl $0x0, 0x1a4(%rsp)
jne 0xef17b
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x178(%rax), %rax
movq %rax, 0x68(%rsp)
jmp 0xef192
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x180(%rax), %rax
movq %rax, 0x68(%rsp)
movq 0x68(%rsp), %rdi
movq 0x1c8(%rsp), %rax
movq 0x58(%rax), %rdx
movq 0x1e0(%rsp), %rcx
leaq 0x1b8(%rsp), %rsi
callq 0xf0d20
movl 0x1a4(%rsp), %eax
subl $0x1, %eax
ja 0xef374
jmp 0xef1ca
movq 0x1e0(%rsp), %rdi
movl 0x1a4(%rsp), %esi
movq 0x1c8(%rsp), %rax
movb 0xa(%rax), %cl
movq 0x1c8(%rsp), %rax
movb 0xb(%rax), %r8b
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x38(%rax), %r9
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rax), %r12
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x58(%rax), %r15
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x60(%rax), %r14
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x158(%rax), %rbx
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0x160(%rax), %r11
movq 0x1c8(%rsp), %rax
movq 0x50(%rax), %r10
movq 0x1c8(%rsp), %rax
movq 0x58(%rax), %rax
leaq 0x1b8(%rsp), %rdx
andb $0x1, %cl
andb $0x1, %r8b
movzbl %cl, %ecx
movzbl %r8b, %r8d
movq %r12, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq %r11, 0x20(%rsp)
movq %r10, 0x28(%rsp)
movq %rax, 0x30(%rsp)
callq 0xf0e80
movq 0x1c8(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0xef372
cmpl $0x0, 0x1a4(%rsp)
jne 0xef2da
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xc0(%rax), %rax
movq %rax, 0x60(%rsp)
jmp 0xef2f1
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
movq 0xd0(%rax), %rax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x68, %rax
movq %rax, 0x58(%rsp)
cmpl $0x0, 0x1a4(%rsp)
jne 0xef331
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x88, %rax
movq %rax, 0x48(%rsp)
jmp 0xef347
movq 0x1c8(%rsp), %rax
movq (%rax), %rax
addq $0x90, %rax
movq %rax, 0x48(%rsp)
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rax
movq 0x48(%rsp), %r9
movq 0x1b8(%rsp), %rsi
movq 0x1c0(%rsp), %rdx
movq (%rax), %rcx
movq 0x8(%rax), %r8
callq 0xf0370
jmp 0xef3b5
movq 0x1c8(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0xef3b3
movq 0xc4c4f(%rip), %rax     # 0x1b3fd8
movq (%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x25850
movq 0x40(%rsp), %rdi
movl %eax, %edx
leaq 0x8b8da(%rip), %rsi     # 0x17ac86
movb $0x0, %al
callq 0xb890
jmp 0xef3b5
jmp 0xef3b7
jmp 0xef3b9
jmp 0xef3bb
jmp 0xef3bd
jmp 0xef3bf
movq 0x198(%rsp), %rdi
callq 0x770a0
xorl %eax, %eax
addq $0x1e8, %rsp            # imm = 0x1E8
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nopl (%rax)