// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/tools/gt_readjoiner_assembly.c
// Function: gt_readjoiner_assembly_runner
static int gt_readjoiner_assembly_runner(GT_UNUSED int argc,
    GT_UNUSED const char **argv, GT_UNUSED int parsed_args,
    void *tool_arguments, GtError *err)
{
  GtReadjoinerAssemblyArguments *arguments = tool_arguments;
  GtLogger *verbose_logger, *default_logger;
  GtEncseqLoader *el;
  GtEncseq *reads;
  GtTimer *timer = NULL;
  GtStrgraph *strgraph = NULL;
  GtBitsequence *contained = NULL;
  const char *readset = gt_str_get(arguments->readset);
  bool eqlen = true;
  GtUword nreads, tlen, rlen;
  int had_err = 0;

  gt_assert(arguments);
  gt_error_check(err);
  default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX,
      stdout);
  gt_logger_log(default_logger,
      "gt readjoiner assembly (version "GT_READJOINER_VERSION")");
  verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX,
      stdout);
  gt_logger_log(verbose_logger, "verbose output activated");
  gt_logger_log(verbose_logger, "readset name = %s", readset);
  if (gt_showtime_enabled())
  {
    timer = gt_timer_new_with_progress_description(
        GT_READJOINER_ASSEMBLY_MSG_COUNTSPM);
    gt_timer_start(timer);
    gt_timer_show_cpu_time_by_progress(timer);
  }

  if (!arguments->paths2seq)
  {
    el = gt_encseq_loader_new();
    gt_encseq_loader_drop_description_support(el);
    gt_encseq_loader_disable_autosupport(el);
    reads = gt_encseq_loader_load(el, readset, err);
    if (reads == NULL)
    {
      had_err = -1;
    }
    if (had_err == 0)
    {
      eqlen = gt_encseq_accesstype_get(reads) == GT_ACCESS_TYPE_EQUALLENGTH;
      nreads = gt_encseq_num_of_sequences(reads);
      gt_logger_log(default_logger, "number of reads in filtered readset = "
                    GT_WU, nreads);
      tlen = gt_encseq_total_length(reads) - nreads + 1;
      gt_logger_log(verbose_logger, "total length of filtered readset = " GT_WU,
          tlen);

      if (eqlen)
      {
        rlen = gt_encseq_seqlength(reads, 0);
        gt_logger_log(verbose_logger, "read length = " GT_WU, rlen);
        gt_encseq_delete(reads);
        reads = NULL;
      }
      else
      {
        had_err = gt_readjoiner_assembly_build_contained_reads_list(
          arguments, &contained, err);
        rlen = 0;
        gt_logger_log(verbose_logger, "read length = variable");
        gt_assert(reads != NULL);
      }
    }

    if (had_err == 0)
    {
      if (!arguments->load)
      {
        had_err = gt_readjoiner_assembly_build_graph(arguments, &strgraph,
            reads, readset, eqlen, rlen, nreads, contained, default_logger,
            verbose_logger, timer, err);
      }
      else
      {
        gt_readjoiner_assembly_load_graph(&strgraph, reads, readset, rlen,
            default_logger, timer);
      }
    }

    if (!eqlen && reads != NULL && !arguments->errors)
    {
      gt_encseq_delete(reads);
      reads = NULL;
      if (had_err == 0)
        gt_strgraph_set_encseq(strgraph, NULL);
    }

    if (had_err == 0 && arguments->redtrans)
    {
      if (gt_showtime_enabled())
        gt_timer_show_progress(timer, GT_READJOINER_ASSEMBLY_MSG_REDTRANS,
            stdout);
      gt_strgraph_sort_edges_by_len(strgraph, false);
      (void)gt_strgraph_redtrans(strgraph, false);
      (void)gt_strgraph_redself(strgraph, false);
      (void)gt_strgraph_redwithrc(strgraph, false);
      gt_strgraph_log_stats(strgraph, verbose_logger);
    }

    if (had_err == 0 && arguments->errors)
    {
      if (gt_showtime_enabled())
        gt_timer_show_progress(timer, GT_READJOINER_ASSEMBLY_MSG_CLEANSG,
            stdout);
      gt_logger_log(default_logger, GT_READJOINER_ASSEMBLY_MSG_CLEANSG);
      had_err = gt_readjoiner_assembly_error_correction(strgraph,
          arguments->bubble, arguments->deadend, arguments->deadend_depth,
          verbose_logger);
    }

    if (had_err == 0 && arguments->save)
    {
      if (gt_showtime_enabled())
        gt_timer_show_progress(timer, GT_READJOINER_ASSEMBLY_MSG_SAVESG,
            stdout);
      gt_logger_log(default_logger, GT_READJOINER_ASSEMBLY_MSG_SAVESG);
      gt_strgraph_show(strgraph, GT_STRGRAPH_BIN,
          gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG, false);
    }

    if (!eqlen && reads != NULL)
    {
      gt_encseq_delete(reads);
      reads = NULL;
      if (had_err == 0)
        gt_strgraph_set_encseq(strgraph, NULL);
    }

    if (had_err == 0)
    {
      if (gt_showtime_enabled())
        gt_timer_show_progress(timer, GT_READJOINER_ASSEMBLY_MSG_TRAVERSESG,
            stdout);
      gt_logger_log(default_logger, GT_READJOINER_ASSEMBLY_MSG_TRAVERSESG);
      gt_readjoiner_assembly_show_current_space("(before traversal)");
      gt_strgraph_spell(strgraph, (GtUword)arguments->depthcutoff,
          (GtUword)arguments->lengthcutoff, arguments->vd, readset,
          GT_READJOINER_SUFFIX_CONTIG_PATHS, NULL, true,
          arguments->show_contigs_info, false, verbose_logger);
    }

    if (contained != NULL)
      gt_free(contained);
    gt_strgraph_delete(strgraph);
    strgraph = NULL;
    gt_assert(reads == NULL);
    gt_encseq_loader_delete(el);
  }

  if (had_err == 0)
  {
    gt_readjoiner_assembly_show_current_space("(before paths2seq)");
    had_err = gt_readjoiner_assembly_paths2seq(readset,
        (GtUword)arguments->lengthcutoff, arguments->vd,
        arguments->astat, arguments->coverage, arguments->copynum,
        arguments->buffersize, default_logger, &timer, err);
  }

  if (gt_showtime_enabled())
  {
    gt_timer_show_progress_final(timer, stdout);
    gt_timer_delete(timer);
  }
  gt_logger_delete(default_logger);
  gt_logger_delete(verbose_logger);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %r8, %rbx
movq %rcx, %r12
andq $0x0, 0x58(%rsp)
movq 0x10(%rcx), %rdi
callq 0xad1fa
movq %rax, 0x30(%rsp)
testq %rbx, %rbx
je 0x3910f
movq %rbx, %rdi
callq 0x89eb7
testb %al, %al
jne 0x39cd2
movq %rbx, 0x40(%rsp)
movzbl 0x1(%r12), %edi
movq 0x3fed8f(%rip), %r15    # 0x437eb0
movq (%r15), %rdx
xorl $0x1, %edi
leaq 0x2ad7a6(%rip), %rbx    # 0x2e68d4
movq %rbx, %rsi
callq 0x92b50
movq %rax, %r14
leaq 0x2b9c2f(%rip), %rsi    # 0x2f2d6f
xorl %r13d, %r13d
movq %rax, %rdi
xorl %eax, %eax
callq 0x92e71
movzbl (%r12), %edi
movq (%r15), %rdx
movq %rbx, %rsi
callq 0x92b50
movq %rax, %rbp
leaq 0x2b962c(%rip), %rsi    # 0x2f2793
movq %rax, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2b9634(%rip), %rsi    # 0x2f27ac
movq %rbp, %rdi
movq 0x30(%rsp), %rdx
xorl %eax, %eax
callq 0x92e71
callq 0xaaf34
testb %al, %al
je 0x391af
leaq 0x2b9bfd(%rip), %rdi    # 0x2f2d94
callq 0xaf4a5
movq %rax, %r13
movq %rax, %rdi
callq 0xaf4d6
movq %r13, %rdi
callq 0xafc4b
movq %r12, 0x10(%rsp)
cmpb $0x0, 0x21(%r12)
movq %rbp, 0x70(%rsp)
jne 0x399f9
callq 0x791cd
movq %rax, %rbx
movq %rax, %rdi
callq 0x7cece
movq %rbx, %rdi
callq 0x7d046
movq %rbx, 0x68(%rsp)
movq %rbx, %rdi
movq 0x30(%rsp), %rsi
movq 0x40(%rsp), %rdx
callq 0x7921d
testq %rax, %rax
je 0x392af
movq %rax, %rbx
movq %rax, %rdi
callq 0x81d17
movl %eax, %r15d
movq %rbx, %rdi
callq 0x705a1
movq %rax, %r12
leaq 0x2b9b9d(%rip), %rsi    # 0x2f2dba
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x92e71
movq %rbx, %rdi
callq 0x7055e
movq %r12, 0x28(%rsp)
subq %r12, %rax
movl %r15d, %r12d
leaq 0x1(%rax), %rdx
leaq 0x2b9b9c(%rip), %rsi    # 0x2f2de4
movq %rbp, %rdi
xorl %eax, %eax
callq 0x92e71
cmpl $0x2, %r15d
sete %al
movq %rax, 0x50(%rsp)
movq %r14, 0x48(%rsp)
movq %r13, 0x20(%rsp)
jne 0x392c3
movq %rbx, %rdi
xorl %esi, %esi
callq 0x75173
leaq 0x2b9b90(%rip), %rsi    # 0x2f2e0b
movq %rbp, %rdi
movq %rax, 0x60(%rsp)
movq %rax, %rdx
xorl %eax, %eax
callq 0x92e71
movq %rbx, %rdi
callq 0x735fd
movq $0x0, 0x18(%rsp)
movq 0x10(%rsp), %rbx
movq 0x3fec06(%rip), %r15    # 0x437eb0
jmp 0x3942f
pushq $-0x1
popq %r12
xorl %ebx, %ebx
movq $0x0, 0x8(%rsp)
jmp 0x399b8
movl %r12d, 0x38(%rsp)
movq %rbx, 0x18(%rsp)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0xad442
movq %rax, %rbx
leaq 0x2b950f(%rip), %rsi    # 0x2f27f4
movq %rax, %rdi
callq 0xacbfb
movq %rbx, %rdi
callq 0xad1fa
pushq $0x1
popq %r14
leaq 0x58(%rsp), %rdx
leaq 0x88(%rsp), %rcx
movq %rax, %rdi
movl %r14d, %esi
movq 0x40(%rsp), %r8
movq %r8, %r13
callq 0x172354
movl %eax, %r12d
leaq 0x2b94d3(%rip), %rbp    # 0x2f27f6
leaq 0x80(%rsp), %r15
movq 0x10(%rsp), %rax
cmpl 0x48(%rax), %r14d
jae 0x393bb
testl %r12d, %r12d
jne 0x393bb
movq %rbx, %rdi
callq 0xad357
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rsi
movq %rbx, %rdi
callq 0xacd13
movq %rbx, %rdi
pushq $0x2e
popq %rsi
callq 0xaced9
movq %rbx, %rdi
movl %r14d, %esi
callq 0xad151
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xacbfb
movq %rbx, %rdi
callq 0xad1fa
movq %rax, %rdi
xorl %esi, %esi
leaq 0x58(%rsp), %rdx
movq %r15, %rcx
movq %r13, %r8
callq 0x172354
movl %eax, %r12d
testl %eax, %eax
jne 0x393b3
movq 0x88(%rsp), %rax
cmpq 0x80(%rsp), %rax
jne 0x39c42
incl %r14d
jmp 0x3932b
movq %rbx, %rdi
callq 0xae103
leaq 0x2b9a53(%rip), %rsi    # 0x2f2e1d
movq $0x0, 0x8(%rsp)
movq 0x70(%rsp), %rbp
movq %rbp, %rdi
xorl %eax, %eax
callq 0x92e71
testl %r12d, %r12d
je 0x3940b
movq $0x0, 0x50(%rsp)
movq 0x48(%rsp), %r14
movq 0x3feab4(%rip), %r15    # 0x437eb0
movq 0x20(%rsp), %r13
movq 0x18(%rsp), %rbx
jmp 0x39698
movq $0x0, 0x60(%rsp)
movq 0x48(%rsp), %r14
movq 0x3fea90(%rip), %r15    # 0x437eb0
movq 0x20(%rsp), %r13
movq 0x10(%rsp), %rbx
movl 0x38(%rsp), %r12d
cmpb $0x0, 0x24(%rbx)
je 0x39498
leaq 0x2b9a2c(%rip), %rcx    # 0x2f2e68
movq 0x18(%rsp), %rbx
movq %rbx, %rdi
movq 0x60(%rsp), %rsi
movq 0x30(%rsp), %rdx
callq 0x180082
movq %rax, 0x8(%rsp)
callq 0xaaf34
testb %al, %al
je 0x39473
movq (%r15), %rdx
leaq 0x2b9b42(%rip), %rsi    # 0x2f2fad
movq %r13, %rdi
callq 0xaf86f
leaq 0x2b9b33(%rip), %rsi    # 0x2f2fad
xorl %r12d, %r12d
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2b9b3b(%rip), %rdi    # 0x2f2fc9
callq 0x39d66
jmp 0x39698
movq 0x58(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x28(%rsp), %rdi
callq 0x17f8d9
movq %rax, 0x8(%rsp)
movl 0x4(%rbx), %edx
testl %edx, %edx
je 0x394d3
leaq 0x2b92ff(%rip), %rsi    # 0x2f27be
movq %rbp, %rdi
xorl %eax, %eax
callq 0x92e71
movl 0x4(%rbx), %eax
movq %rax, 0x28(%rsp)
jmp 0x394dc
movq $0x0, 0x28(%rsp)
movl 0x48(%rbx), %r14d
callq 0xacb84
movq %rax, %rbx
leaq 0x2b98a5(%rip), %rsi    # 0x2f2d94
xorl %r15d, %r15d
movq 0x48(%rsp), %rdi
xorl %eax, %eax
callq 0x92e71
cmpl $0x2, %r12d
movl %r12d, 0x38(%rsp)
jne 0x39517
leaq 0x1471a0(%rip), %r13    # 0x1806b0
movq 0x8(%rsp), %rbp
jmp 0x39548
leaq 0x147192(%rip), %rax    # 0x1806b0
leaq 0x88(%rsp), %rbp
movq %rax, 0x8(%rbp)
movq 0x78(%rsp), %rax
movq %rax, (%rbp)
movq 0x8(%rsp), %rax
movq %rax, 0x10(%rbp)
andq $0x0, 0x18(%rbp)
leaq 0x145a1e(%rip), %r13    # 0x17ef66
xorl %r12d, %r12d
cmpl %r15d, %r14d
je 0x395b2
movq %rbx, %rdi
movq 0x30(%rsp), %rsi
callq 0xacbfb
movq %rbx, %rdi
pushq $0x2e
popq %rsi
callq 0xaced9
movq %rbx, %rdi
movl %r15d, %esi
callq 0xad151
movq %rbx, %rdi
leaq 0x2ba982(%rip), %rsi    # 0x2f3eff
callq 0xacbfb
movq %rbx, %rdi
callq 0xad1fa
movq %rax, %rdi
movq 0x28(%rsp), %rsi
movq %r13, %rdx
movq %rbp, %rcx
movq 0x40(%rsp), %r8
callq 0x17d808
movl %eax, %r12d
movq %rbx, %rdi
callq 0xad357
incl %r15d
jmp 0x3954b
movq %rbx, %rdi
callq 0xae103
leaq 0x2b9945(%rip), %rdi    # 0x2f2f06
callq 0x39d66
callq 0xaaf34
testb %al, %al
movq 0x3fe8dc(%rip), %r15    # 0x437eb0
movq 0x20(%rsp), %r13
je 0x395ed
movq (%r15), %rdx
leaq 0x2b9931(%rip), %rsi    # 0x2f2f16
movq %r13, %rdi
callq 0xaf86f
leaq 0x2b9922(%rip), %rsi    # 0x2f2f16
movq 0x48(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
testl %r12d, %r12d
movq 0x70(%rsp), %rbp
movq 0x18(%rsp), %rbx
jne 0x39698
movl 0x38(%rsp), %eax
cmpl $0x2, %eax
movq 0x60(%rsp), %rsi
jne 0x3962e
testq %rsi, %rsi
je 0x3962e
testq %rbx, %rbx
je 0x39649
testq %rbx, %rbx
je 0x39d38
testq %rsi, %rsi
jne 0x39d38
cmpl $0x2, %eax
je 0x39d38
movq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x17f988
leaq 0x2b993b(%rip), %rdi    # 0x2f2f9b
callq 0x39d66
movq 0x10(%rsp), %rax
movl 0x4(%rax), %esi
movl 0x48(%rax), %r9d
movzbl 0x22(%rax), %edx
movq %r12, %rdi
movq 0x78(%rsp), %rcx
movq 0x30(%rsp), %r8
pushq 0x40(%rsp)
leaq 0x2ba872(%rip), %rax    # 0x2f3eff
pushq %rax
callq 0x180db5
popq %rcx
popq %rdx
movl %eax, %r12d
testq %rbx, %rbx
sete %al
orb 0x50(%rsp), %al
jne 0x396af
movq 0x10(%rsp), %rax
cmpb $0x0, 0x20(%rax)
je 0x396d3
testl %r12d, %r12d
je 0x396f2
testq %rbx, %rbx
sete %al
movq 0x50(%rsp), %rcx
orb %al, %cl
jne 0x399b8
movq %rbx, 0x18(%rsp)
xorl %ebx, %ebx
jmp 0x39917
movq %rbx, %rdi
callq 0x735fd
testl %r12d, %r12d
jne 0x399b6
xorl %ebx, %ebx
movq 0x8(%rsp), %rdi
xorl %esi, %esi
callq 0x1811ac
movq 0x10(%rsp), %r12
cmpb $0x1, 0x22(%r12)
jne 0x39757
callq 0xaaf34
testb %al, %al
je 0x3971a
movq (%r15), %rdx
leaq 0x2b92be(%rip), %rsi    # 0x2f29d0
movq %r13, %rdi
callq 0xaf86f
movq 0x8(%rsp), %r12
movq %r12, %rdi
xorl %esi, %esi
callq 0x1813c8
movq %r12, %rdi
xorl %esi, %esi
callq 0x181eb3
movq %r12, %rdi
xorl %esi, %esi
callq 0x1817f9
movq %r12, %rdi
xorl %esi, %esi
callq 0x181bc3
movq %r12, %rdi
movq %rbp, %rsi
callq 0x185d98
movq 0x10(%rsp), %r12
cmpb $0x1, 0x20(%r12)
movq %rbx, 0x18(%rsp)
jne 0x398ab
callq 0xaaf34
testb %al, %al
je 0x39783
movq (%r15), %rdx
leaq 0x2b96b9(%rip), %rsi    # 0x2f2e34
movq %r13, %rdi
callq 0xaf86f
leaq 0x2b96aa(%rip), %rsi    # 0x2f2e34
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
movl 0x2c(%r12), %eax
movl %eax, 0x28(%rsp)
movq %r12, %rax
movl 0x30(%r12), %r12d
movl 0x34(%rax), %eax
movq %rax, 0x38(%rsp)
leaq 0x2b9824(%rip), %rsi    # 0x2f2fd8
movq %rbp, %r13
movq %rbp, %rdi
xorl %eax, %eax
callq 0x92e71
pushq $0x1
popq %r15
xorl %ebx, %ebx
movq %r15, %rbp
xorl %r14d, %r14d
cmpl %r12d, %ebx
jae 0x39808
testq %rbp, %rbp
je 0x39808
movq 0x8(%rsp), %rdi
xorl %esi, %esi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x1831ac
movq %rax, %rbp
addq %rax, %r14
incl %ebx
movq %r13, %rdi
leaq 0x2b97ef(%rip), %rsi    # 0x2f2fe9
movl %ebx, %edx
movq %rax, %rcx
xorl %eax, %eax
callq 0x92e71
jmp 0x397cd
leaq 0x2b9802(%rip), %rsi    # 0x2f3011
movq %r13, %rbp
movq %r13, %rdi
movl %ebx, %edx
movq %r14, %rcx
xorl %eax, %eax
callq 0x92e71
leaq 0x2b9812(%rip), %rsi    # 0x2f303a
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
pushq $0x1
popq %r13
leaq 0x2b9813(%rip), %r15    # 0x2f3050
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x10(%rsp), %r12
cmpl 0x28(%rsp), %ebx
jae 0x3987f
testq %r13, %r13
je 0x3987f
movq 0x8(%rsp), %rdi
movq 0x38(%rsp), %rsi
xorl %edx, %edx
callq 0x182b57
movq %rax, %r13
addq %rax, %r14
incl %ebx
movq %rbp, %rdi
movq %r15, %rsi
movl %ebx, %edx
movq %rax, %rcx
xorl %eax, %eax
callq 0x92e71
jmp 0x39847
leaq 0x2b97f7(%rip), %rsi    # 0x2f307d
movq %rbp, %rdi
movl %ebx, %edx
movq %r14, %rcx
xorl %eax, %eax
callq 0x92e71
movq 0x48(%rsp), %r14
movq 0x3fe60f(%rip), %r15    # 0x437eb0
movq 0x20(%rsp), %r13
movq 0x18(%rsp), %rbx
cmpb $0x1, 0x23(%r12)
jne 0x39903
callq 0xaaf34
testb %al, %al
je 0x398ce
movq (%r15), %rdx
leaq 0x2b9588(%rip), %rsi    # 0x2f2e4e
movq %r13, %rdi
callq 0xaf86f
leaq 0x2b9579(%rip), %rsi    # 0x2f2e4e
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
movq 0x10(%r12), %rdi
callq 0xad1fa
leaq 0x2b9578(%rip), %rcx    # 0x2f2e68
pushq $0x4
popq %rsi
movq 0x8(%rsp), %rdi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
testq %rbx, %rbx
sete %al
xorl %r12d, %r12d
movq 0x50(%rsp), %rcx
orb %al, %cl
movb $0x1, %bl
jne 0x3993e
movq 0x18(%rsp), %rdi
callq 0x735fd
testb %bl, %bl
je 0x399b6
movq $0x0, 0x18(%rsp)
movq 0x8(%rsp), %rdi
xorl %esi, %esi
callq 0x1811ac
callq 0xaaf34
testb %al, %al
je 0x39959
movq (%r15), %rdx
leaq 0x2b951b(%rip), %rsi    # 0x2f2e6c
movq %r13, %rdi
callq 0xaf86f
leaq 0x2b950c(%rip), %rsi    # 0x2f2e6c
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2b950d(%rip), %rdi    # 0x2f2e7e
callq 0x39d66
movq 0x10(%rsp), %rax
movl 0x8(%rax), %edx
movl 0xc(%rax), %esi
movzbl 0x25(%rax), %ecx
movzbl 0x28(%rax), %eax
subq $0x8, %rsp
leaq 0x2b9a21(%rip), %r9     # 0x2f33b5
movq 0x10(%rsp), %rdi
movq 0x38(%rsp), %r8
pushq %rbp
pushq $0x0
pushq %rax
pushq $0x1
pushq $0x0
callq 0x185e64
addq $0x30, %rsp
movq 0x18(%rsp), %rbx
jmp 0x399b8
xorl %ebx, %ebx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x399d3
leaq 0x2b8f20(%rip), %rsi    # 0x2f28e9
movl $0x274, %edx            # imm = 0x274
callq 0x936f9
movq 0x8(%rsp), %rdi
callq 0x17fc58
testq %rbx, %rbx
jne 0x39d00
movq 0x68(%rsp), %rdi
callq 0x79f01
testl %r12d, %r12d
jne 0x39c01
leaq 0x2b949f(%rip), %rdi    # 0x2f2e9f
callq 0x39d66
movq 0x10(%rsp), %rax
movl 0x8(%rax), %ecx
movq %rcx, 0x8(%rsp)
movb 0x25(%rax), %cl
movb %cl, 0x38(%rsp)
movb 0x26(%rax), %cl
movb %cl, 0x18(%rsp)
movsd 0x50(%rax), %xmm0
movsd %xmm0, 0x28(%rsp)
movb 0x27(%rax), %cl
movb %cl, 0x68(%rsp)
movq 0x40(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x791cd
movq %rax, %rbx
callq 0xaaf34
testb %al, %al
je 0x39a6a
testq %r13, %r13
je 0x39a71
movq (%r15), %rdx
leaq 0x2b96a3(%rip), %rsi    # 0x2f30fe
movq %r13, 0x20(%rsp)
movq %r13, %rdi
callq 0xaf86f
jmp 0x39a95
movq %r13, 0x20(%rsp)
jmp 0x39a95
leaq 0x2b9686(%rip), %rdi    # 0x2f30fe
callq 0xaf4a5
movq %rax, %r12
movq %rax, %rdi
callq 0xafc4b
movq %r12, 0x20(%rsp)
movq %r12, %rdi
callq 0xaf4d6
movq %r15, %rbp
leaq 0x2b965f(%rip), %rsi    # 0x2f30fe
movq %r14, %r12
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
movq %rbx, %rdi
callq 0x7cece
movq %rbx, %rdi
callq 0x7d046
movq %rbx, %rdi
callq 0x7d003
movq %rbx, %rdi
movq 0x30(%rsp), %rsi
movq 0x40(%rsp), %rdx
callq 0x7921d
testq %rax, %rax
je 0x39c73
movq %rax, %r13
movq %rax, %rdi
callq 0x776db
movq %rax, %r14
movq %r13, %rdi
callq 0x7055e
movq %rax, %r15
movq %r13, %rdi
callq 0x81dea
leaq -0x1(%r15), %rcx
movq %rcx, %rdx
shrq %rdx
xorl %esi, %esi
cmpq $0x40, %rcx
setb %sil
xorl %ecx, %ecx
cmpq $0x20, %r15
setb %cl
testb %al, %al
cmoveq %r15, %rdx
cmovel %ecx, %esi
decq %rdx
shrq $0x5, %rdx
addq $0x2, %rdx
testb %sil, %sil
pushq $0x2
popq %rax
cmoveq %rdx, %rax
xorl %ecx, %ecx
xorl %esi, %esi
cmpq %rcx, %rax
je 0x39b4d
addq (%r14,%rcx,8), %rsi
incq %rcx
jmp 0x39b3f
testq %rsi, %rsi
je 0x39ca4
leaq 0x2b960a(%rip), %rdi    # 0x2f3167
xorl %eax, %eax
callq 0x92a82
callq 0xaaf34
testb %al, %al
movq %r12, %r14
movq %rbp, %r15
je 0x39b87
movq (%r15), %rdx
leaq 0x2b959b(%rip), %rsi    # 0x2f3118
movq 0x20(%rsp), %rdi
callq 0xaf86f
leaq 0x2b958a(%rip), %rsi    # 0x2f3118
movq %r14, %rdi
xorl %eax, %eax
callq 0x92e71
subq $0x8, %rsp
movzbl 0x70(%rsp), %eax
movzbl 0x20(%rsp), %r10d
movzbl 0x40(%rsp), %r9d
leaq 0x2b9801(%rip), %rsi    # 0x2f33b5
leaq 0x2b8f98(%rip), %rdx    # 0x2f2b53
movq 0x38(%rsp), %rdi
movq %r13, %rcx
movq 0x10(%rsp), %r8
movsd 0x30(%rsp), %xmm0
pushq 0x48(%rsp)
pushq %r14
pushq 0x28(%rsp)
pushq %rax
pushq %r10
callq 0x175f28
addq $0x30, %rsp
movl %eax, %r12d
movq %r13, %rdi
callq 0x735fd
movq %rbx, %rdi
callq 0x79f01
movq 0x70(%rsp), %rbp
movq 0x20(%rsp), %r13
callq 0xaaf34
testb %al, %al
je 0x39c1d
movq (%r15), %rsi
movq %r13, %rdi
callq 0xafb49
movq %r13, %rdi
callq 0xafc5b
movq %r14, %rdi
callq 0x92fd0
movq %rbp, %rdi
callq 0x92fd0
movl %r12d, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x3fe31f(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab3c0(%rip), %rsi    # 0x2e5013
leaq 0x2b9258(%rip), %rdx    # 0x2f2eb2
leaq 0x2b9273(%rip), %rcx    # 0x2f2ed4
leaq 0x2b8c81(%rip), %r8     # 0x2f28e9
movl $0x1d9, %r9d            # imm = 0x1D9
jmp 0x39d2c
movq 0x3fe2ee(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab38f(%rip), %rsi    # 0x2e5013
leaq 0x313386(%rip), %rdx    # 0x34d011
leaq 0x2b944b(%rip), %rcx    # 0x2f30dd
leaq 0x2b8c50(%rip), %r8     # 0x2f28e9
movl $0x177, %r9d            # imm = 0x177
jmp 0x39d2c
movq 0x3fe2bd(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab35e(%rip), %rsi    # 0x2e5013
leaq 0x2b9472(%rip), %rdx    # 0x2f312e
leaq 0x2b9473(%rip), %rcx    # 0x2f3136
leaq 0x2b8c1f(%rip), %r8     # 0x2f28e9
movl $0x155, %r9d            # imm = 0x155
jmp 0x39d2c
movq 0x3fe28f(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab330(%rip), %rsi    # 0x2e5013
leaq 0x2ab4d5(%rip), %rdx    # 0x2e51bf
leaq 0x2b9060(%rip), %rcx    # 0x2f2d51
leaq 0x2b8bf1(%rip), %r8     # 0x2f28e9
movl $0x1f0, %r9d            # imm = 0x1F0
jmp 0x39d2c
movq 0x3fe261(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab302(%rip), %rsi    # 0x2e5013
leaq 0x2b9179(%rip), %rdx    # 0x2f2e91
leaq 0x2b9032(%rip), %rcx    # 0x2f2d51
leaq 0x2b8bc3(%rip), %r8     # 0x2f28e9
movl $0x277, %r9d            # imm = 0x277
xorl %eax, %eax
callq 0x17a50
callq 0x17390
movq 0x3fe229(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2ab2ca(%rip), %rsi    # 0x2e5013
leaq 0x2b91d9(%rip), %rdx    # 0x2f2f29
leaq 0x2b9221(%rip), %rcx    # 0x2f2f78
leaq 0x2b8b8b(%rip), %r8     # 0x2f28e9
movl $0x1aa, %r9d            # imm = 0x1AA
jmp 0x39d2c