// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/sfx-run.c
// Function: gt_runsuffixerator
int gt_runsuffixerator(bool doesa,
                       Suffixeratoroptions *so,
                       GenomediffInfo *gd_info,
                       GtLogger *logger,
                       GtError *err)
{
  GtTimer *sfxprogress = NULL;
  Outfileinfo outfileinfo;
  bool haserr = false;
  unsigned int prefixlength;
  Sfxstrategy sfxstrategy;
  GtEncseq *encseq = NULL;
  GtReadmode readmode = gt_index_options_readmode_value(so->idxopts);

  gt_error_check(err);

  so->outlcptab
    = so->genomediff ? true
                     : gt_index_options_outlcptab_value(so->idxopts);
  if (gt_showtime_enabled())
  {
    sfxprogress = gt_timer_new_with_progress_description("determining sequence "
                                        "length and number of special symbols");
    gt_timer_start(sfxprogress);
  }

  if (gt_str_length(so->inputindex) > 0)
  {
    GtEncseqLoader *el;
    el = gt_encseq_loader_new_from_options(so->loadopts, err);
    if (!gt_encseq_options_ssp_value(so->loadopts))
    {
      GtEncseqMetadata* emd = gt_encseq_metadata_new(gt_str_get(so->inputindex),
                                                     err);
      if (emd == NULL)
      {
        haserr = true;
      } else
      {
        GtEncseqAccessType at = gt_encseq_metadata_accesstype(emd);
        if (!gt_encseq_access_type_isviautables(at))
        {
          gt_encseq_loader_do_not_require_ssp_tab(el);
        }
      }
      gt_encseq_metadata_delete(emd);
    }
    if (!haserr) {
      gt_encseq_loader_set_logger(el, logger);
      /* as we only construct the des, sds, and ssptable, but do not
         need it later during the construction of the enhanced suffix
         array, we do not load it again: we just load the information
         stored in the .esq file. It would be better to use the
         in memory constructed encseq rather than the one mapped into
         memory. This would require to free the des, sds, and ssptable. */
      gt_encseq_loader_disable_autosupport(el);
      gt_encseq_loader_do_not_require_des_tab(el);
      gt_encseq_loader_do_not_require_sds_tab(el);
      gt_encseq_loader_do_not_require_ssp_tab(el);
      encseq = gt_encseq_loader_load(el, gt_str_get(so->inputindex), err);
    }
    gt_encseq_loader_delete(el);
    if (encseq == NULL)
    {
      haserr = true;
    }
  } else
  {
    GtEncseqEncoder *ee = NULL;
    ee = gt_encseq_encoder_new_from_options(so->encopts, err);
    /* '-plain' implies no description support */
    if (gt_encseq_options_plain_value(so->loadopts)) {
        gt_encseq_encoder_do_not_create_des_tab(ee);
        gt_encseq_encoder_do_not_create_sds_tab(ee);
    }
    if (ee == NULL)
      haserr = true;
    if (!haserr) {
      int rval;
      gt_encseq_encoder_set_timer(ee, sfxprogress);
      gt_encseq_encoder_set_logger(ee, logger);
      rval = gt_encseq_encoder_encode(ee, so->db, gt_str_get(so->indexname),
                                      err);
      if (rval != 0)
        haserr = true;
      if (!haserr) {
        GtEncseqLoader *el = gt_encseq_loader_new_from_options(so->loadopts,
                                                               err);
        /* as we only construct the des, sds, and ssptable, but do not
           need it later during the construction of the enhanced suffix
           array, we do not load it again: we just load the information
           stored in the .esq file. It would be better to use the
           in memory constructed encseq rather than the one mapped into
           memory. This would require to free the des, sds, and ssptable. */
        gt_encseq_loader_disable_autosupport(el);
        gt_encseq_loader_do_not_require_des_tab(el);
        gt_encseq_loader_do_not_require_sds_tab(el);
        gt_encseq_loader_do_not_require_ssp_tab(el);
        encseq = gt_encseq_loader_load(el, gt_str_get(so->indexname), err);
        if (!encseq)
          haserr = true;
        gt_encseq_loader_delete(el);
      }
    }
    if (encseq == NULL)
    {
      haserr = true;
    }
    gt_encseq_encoder_delete(ee);
  }
  if (!haserr)
  {
    gt_encseq_show_features(encseq,logger,false);
    if (readmode == GT_READMODE_COMPL ||
        readmode == GT_READMODE_REVCOMPL)
    {
      if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq)))
      {
        gt_error_set(err,"option -%s only can be used for DNA alphabets",
                          readmode == GT_READMODE_COMPL ? "cpl" : "rcl");
        haserr = true;
      }
    }
  }
  if (!haserr && gt_index_options_outkystab_value(so->idxopts)
              && !gt_index_options_outkyssort_value(so->idxopts))
  {
    if (gt_extractkeysfromdesfile(gt_str_get(so->indexname),
                                  false, logger, err) != 0)
    {
      haserr = true;
    }
  }
  prefixlength = gt_index_options_prefixlength_value(so->idxopts);
  sfxstrategy = gt_index_options_sfxstrategy_value(so->idxopts);
  if (!haserr)
  {
    if (gt_index_options_outsuftab_value(so->idxopts)
        || gt_index_options_outbwttab_value(so->idxopts)
        || so->outlcptab
        || gt_index_options_outbcktab_value(so->idxopts)
        || !doesa)
    {
      unsigned int numofchars = gt_alphabet_num_of_chars(
                                          gt_encseq_alphabet(encseq));

      if (detpfxlen(&prefixlength,
                    so,
                    numofchars,
                    gt_encseq_total_length(encseq),
                    sfxstrategy.spmopt_minlength == 0 ? true : false,
                    logger,
                    err) != 0)
      {
        haserr = true;
      }
    } else
    {
      if (readmode != GT_READMODE_FORWARD)
      {
        gt_error_set(err,"option '-dir %s' only makes sense in combination "
                          "with at least one of the options -suf, -lcp, or "
                          "-bwt",
                          gt_readmode_show(readmode));
        haserr = true;
      }
    }
  }
  outfileinfo.outfpsuftab = NULL;
  outfileinfo.outfpbwttab = NULL;
  outfileinfo.outlcpinfo = NULL;
  outfileinfo.outfpbcktab = NULL;
  outfileinfo.numberofallsortedsuffixes = 0;
  outfileinfo.longest.defined = false;
  outfileinfo.longest.valueunsignedlong = 0;
  outfileinfo.bustate_shulen = NULL;
  outfileinfo.encseq = NULL;
  if (!haserr)
  {
    if (initoutfileinfo(&outfileinfo,prefixlength,encseq,so,
                        sfxstrategy.compressedoutput,gd_info,err) != 0)
    {
      haserr = true;
    }
  }
  if (!haserr)
  {
    if (gt_index_options_outsuftab_value(so->idxopts)
        || gt_index_options_outbwttab_value(so->idxopts)
        || so->outlcptab
        || !doesa)
    {
      if (doesa)
      {
        if (suffixeratorwithoutput(
                               &outfileinfo,
                               encseq,
                               readmode,
                               prefixlength,
                               gt_index_options_numofparts_value(so->idxopts),
                               gt_index_options_maximumspace_value(so->idxopts),
                               gt_index_options_swallow_tail_value(so->idxopts),
                               &sfxstrategy,
                               sfxprogress,
                               so->showprogress,
                               logger,
                               err) != 0)
        {
          haserr = true;
        }
      } else
      {
#ifndef S_SPLINT_S
        sfxstrategy.outsuftabonfile = false;
        if (run_packedindexconstruction(logger,
                                        sfxprogress,
                                        so->showprogress,
                                        so,
                                        prefixlength,
                                        encseq,
                                        &sfxstrategy,
                                        err) != 0)
        {
          haserr = true;
        }
#endif
      }
    }
  }
  if (!haserr && outfileinfo.bustate_shulen != NULL &&
      gt_sfx_multiesa2shulengthdist_last(outfileinfo.bustate_shulen,err) != 0)
  {
    haserr = true;
  }
  gt_fa_fclose(outfileinfo.outfpsuftab);
  gt_fa_fclose(outfileinfo.outfpbwttab);
  gt_fa_fclose(outfileinfo.outfpbcktab);
  if (!haserr)
  {
    GtUword numoflargelcpvalues, maxbranchdepth;
    double averagelcp;

    if (outfileinfo.outlcpinfo == NULL)
    {
      numoflargelcpvalues = maxbranchdepth = 0;
      averagelcp = 0.0;
    } else
    {
      numoflargelcpvalues
        = gt_Outlcpinfo_numoflargelcpvalues(outfileinfo.outlcpinfo);
      maxbranchdepth = gt_Outlcpinfo_maxbranchdepth(outfileinfo.outlcpinfo);
      averagelcp = gt_Outlcpinfo_lcptabsum(outfileinfo.outlcpinfo)/
                   outfileinfo.numberofallsortedsuffixes;
    }
    if (gt_outprjfile(gt_str_get(so->indexname),
                      readmode,
                      encseq,
                      outfileinfo.numberofallsortedsuffixes,
                      prefixlength,
                      numoflargelcpvalues,
                      averagelcp,
                      maxbranchdepth,
                      &outfileinfo.longest,
                      err) != 0)
    {
      haserr = true;
    }
  }
  gt_Outlcpinfo_delete(outfileinfo.outlcpinfo);
  gt_sfx_multiesashulengthdist_delete(outfileinfo.bustate_shulen,gd_info);
  gt_encseq_delete(encseq);
  encseq = NULL;
  if (!haserr
        && gt_index_options_outkystab_value(so->idxopts)
        && gt_index_options_outkyssort_value(so->idxopts))
  {
    if (gt_extractkeysfromdesfile(gt_str_get(so->indexname),
                                  true,
                                  logger, err) != 0)
    {
      haserr = true;
    }
  }
  if (sfxprogress != NULL)
  {
    gt_timer_show_progress_final(sfxprogress, stdout);
    gt_timer_delete(sfxprogress);
  }
  return haserr ? -1 : 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %r8, %r13
movq %rcx, 0x28(%rsp)
movq %rdx, 0x98(%rsp)
movq %rsi, %r12
movl %edi, 0x38(%rsp)
movq 0x18(%rsi), %rdi
callq 0x1b6003
movl %eax, 0x1c(%rsp)
testq %r13, %r13
je 0x1f03ba
movq %r13, %rdi
callq 0xfcc32
testb %al, %al
jne 0x1f114d
movb $0x1, %al
cmpb $0x0, 0x2(%r12)
jne 0x1f03ce
movq 0x18(%r12), %rdi
callq 0x1b5f52
movb %al, 0x3(%r12)
callq 0x119160
testb %al, %al
je 0x1f03f5
leaq 0x1c89f4(%rip), %rdi    # 0x3b8dd7
callq 0x11c986
movq %rax, %rbp
movq %rax, %rdi
callq 0x11c9e3
jmp 0x1f03f7
xorl %ebp, %ebp
movq 0x28(%r12), %rdi
callq 0x11b0ca
testq %rax, %rax
movq %r12, 0x30(%rsp)
movq %rbp, 0x90(%rsp)
je 0x1f04e1
movq 0x10(%r12), %rdi
movq %r13, %rsi
callq 0xf2311
movq %rax, %rbx
movq 0x10(%r12), %rdi
callq 0xfc83b
testb %al, %al
jne 0x1f0479
movq 0x28(%r12), %rdi
callq 0x11b0a1
movq %rax, %rdi
movq %r13, %rsi
callq 0xfb8bc
testq %rax, %rax
je 0x1f0817
movq %rax, %r14
movq %rax, %rdi
callq 0xfbf76
movl %eax, %edi
callq 0xfb5ad
testb %al, %al
jne 0x1f0471
movq %rbx, %rdi
callq 0xf23d9
movq %r14, %rdi
callq 0xfbf9f
movq %rbx, %rdi
movq 0x28(%rsp), %rsi
callq 0xf249c
movq %rbx, %rdi
callq 0xf238b
movq %rbx, %rdi
callq 0xf23ac
movq %rbx, %rdi
callq 0xf2408
movq %rbx, %rdi
callq 0xf23d9
movq 0x28(%r12), %rdi
callq 0x11b0a1
movq %rbx, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0xef129
movq %rax, %r14
xorl %ebp, %ebp
movq %rbx, %rdi
callq 0xefbe3
testq %r14, %r14
movzbl %bpl, %eax
movl $0x1, %r12d
cmovnel %eax, %r12d
jmp 0x1f05e2
movq 0x8(%r12), %rdi
movq %r13, %rsi
callq 0xefe3d
movq %rax, %rbx
movq 0x10(%r12), %rdi
callq 0xfc78f
testb %al, %al
je 0x1f050f
movq %rbx, %rdi
callq 0xf0202
movq %rbx, %rdi
callq 0xf023e
testq %rbx, %rbx
je 0x1f05c3
sete %r15b
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xf01c0
movq %rbx, %rdi
movq 0x28(%rsp), %rsi
callq 0xf02fc
movq 0x20(%r12), %rdi
movq 0x30(%r12), %r14
callq 0x11b0a1
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
movq %r13, %rcx
callq 0xf030c
testl %eax, %eax
setne %bpl
orb %r15b, %bpl
jne 0x1f05c6
movq 0x10(%r12), %rdi
movq %r13, %rsi
callq 0xf2311
movq %rax, %r14
movq %rax, %rdi
callq 0xf238b
movq %r14, %rdi
callq 0xf23ac
movq %r14, %rdi
callq 0xf2408
movq %r14, %rdi
callq 0xf23d9
movq 0x20(%r12), %rdi
callq 0x11b0a1
movq %r14, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0xef129
testq %rax, %rax
movzbl %bpl, %ecx
movl $0x1, %ebp
cmovnel %ecx, %ebp
movq %r14, %rdi
movq %rax, %r14
callq 0xefbe3
jmp 0x1f05c9
movb $0x1, %bpl
xorl %r14d, %r14d
testq %r14, %r14
movzbl %bpl, %eax
movl $0x1, %r12d
cmovnel %eax, %r12d
movq %rbx, %rdi
callq 0xf018f
testb %r12b, %r12b
movq 0x30(%rsp), %rbp
jne 0x1f0691
movq %r14, %rdi
movq 0x28(%rsp), %rsi
xorl %edx, %edx
callq 0xeda55
movl 0x1c(%rsp), %eax
andl $-0x2, %eax
cmpl $0x2, %eax
jne 0x1f061f
movq %r14, %rdi
callq 0xebcd9
movq %rax, %rdi
callq 0xd1749
testb %al, %al
je 0x1f0666
movq 0x18(%rbp), %rdi
callq 0x1b5ff4
testb %al, %al
je 0x1f0691
movq 0x18(%rbp), %rdi
callq 0x1b5fe5
testb %al, %al
jne 0x1f0691
movq 0x20(%rbp), %rdi
callq 0x11b0a1
movq %rax, %rdi
xorl %esi, %esi
movq 0x28(%rsp), %rdx
movq %r13, %rcx
callq 0x1b058c
testl %eax, %eax
movzbl %r12b, %eax
movl $0x1, %r12d
cmovel %eax, %r12d
jmp 0x1f0691
cmpl $0x2, 0x1c(%rsp)
leaq 0x17f2bf(%rip), %rax    # 0x36f931
leaq 0x17f2b4(%rip), %rdx    # 0x36f92d
cmoveq %rax, %rdx
leaq 0x1c878d(%rip), %rsi    # 0x3b8e11
movq %r13, %rdi
xorl %eax, %eax
callq 0xfcb67
movb $0x1, %r12b
movq 0x18(%rbp), %rdi
callq 0x1b5f96
movl %eax, %r15d
movq 0x18(%rbp), %rsi
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
callq 0x1b6012
movq 0x30(%rbx), %rax
movq %rax, 0x110(%rsp)
movupd (%rbx), %xmm0
movupd 0x10(%rbx), %xmm1
movupd 0x20(%rbx), %xmm2
movapd %xmm2, 0x100(%rsp)
movapd %xmm1, 0xf0(%rsp)
movapd %xmm0, 0xe0(%rsp)
testb %r12b, %r12b
movq %r14, 0x20(%rsp)
jne 0x1f084b
movq 0x18(%rbp), %rdi
callq 0x1b5f74
testb %al, %al
jne 0x1f072c
movq 0x18(%rbp), %rdi
callq 0x1b5f30
testb %al, %al
jne 0x1f072c
cmpb $0x0, 0x3(%rbp)
jne 0x1f072c
movq 0x18(%rbp), %rdi
callq 0x1b5f0e
movl 0x38(%rsp), %ecx
xorb $0x1, %cl
orb %al, %cl
cmpb $0x1, %cl
jne 0x1f111b
movl %r12d, 0x10(%rsp)
movq %r14, %rdi
callq 0xebcd9
movq %rax, %rdi
callq 0xd11be
movl %eax, %ebx
movq %r14, %rdi
callq 0xe7b9c
movq %rax, %r14
movl 0x108(%rsp), %r12d
xorl %ebp, %ebp
testl %r12d, %r12d
sete %bpl
movq 0x30(%rsp), %rax
movq 0x18(%rax), %rsi
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x1b6012
xorl %eax, %eax
cmpl $0x0, 0x28(%r15)
sete %al
leaq 0x1c861a(%rip), %rcx    # 0x3b8da0
movsd (%rcx,%rax,8), %xmm0
movl %ebx, %edi
movq %r14, %rsi
movl %ebp, %edx
movq 0x30(%rsp), %rbp
callq 0x1e2c5c
movl %eax, %r15d
movq 0x18(%rbp), %rdi
callq 0x1b5f96
testl %eax, %eax
je 0x1f07ff
movl %r15d, 0x18(%rsp)
xorl %r15d, %r15d
testl %r12d, %r12d
sete %r15b
movq 0x18(%rbp), %rdi
callq 0x1b5f96
movl %eax, %ebp
movzbl 0x6d(%rsp), %edx
shll $0x2, %edx
movl %ebx, %edi
movq %r14, %rsi
movl %r15d, %ecx
callq 0x1e2d15
movl %eax, %ebx
movl %eax, %edi
movl %ebp, %esi
movq %r13, %rdx
callq 0x1e2e55
testl %eax, %eax
je 0x1f0829
movb $0x1, %r12b
movl %ebp, %r15d
movq 0x30(%rsp), %rbp
movq 0x20(%rsp), %r14
jmp 0x1f084b
leaq 0x1c86d4(%rip), %rsi    # 0x3b8eda
movq 0x28(%rsp), %rdi
movl %r15d, %edx
xorl %eax, %eax
callq 0x103fe1
jmp 0x1f0841
xorl %r14d, %r14d
xorl %edi, %edi
callq 0xfbf9f
movb $0x1, %bpl
jmp 0x1f04c3
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl 0x18(%rsp), %edx
callq 0x1e2e9b
movl %ebp, %r15d
movq 0x30(%rsp), %rbp
movq 0x20(%rsp), %r14
movl 0x10(%rsp), %r12d
xorpd %xmm0, %xmm0
movupd %xmm0, 0x59(%rsp)
movapd %xmm0, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testb %r12b, %r12b
movl %r15d, 0x18(%rsp)
je 0x1f0885
xorl %r15d, %r15d
jmp 0x1f0acd
movl %r12d, 0x10(%rsp)
movq %r13, %r12
movb 0x116(%rsp), %r13b
cmpb $0x1, 0x3(%rbp)
jne 0x1f08b3
movq 0x20(%rbp), %rdi
callq 0x11b0a1
movb 0x2(%rbp), %cl
testq %rax, %rax
je 0x1f08ba
testb $0x1, %cl
jne 0x1f08c3
jmp 0x1f08de
xorl %ebx, %ebx
jmp 0x1f0964
testb $0x1, %cl
je 0x1f1157
movq %r14, %rdi
movq 0x98(%rsp), %rsi
callq 0x1a6856
movq %rax, 0x80(%rsp)
movb 0x2(%rbp), %cl
testb $0x1, %cl
movb %r13b, 0xe(%rsp)
je 0x1f08ec
xorl %ebx, %ebx
jmp 0x1f08f8
movq 0x20(%rbp), %rdi
callq 0x11b0a1
movq %rax, %rbx
movq %r14, %rdi
callq 0xebcb6
movl %eax, %r13d
movq 0x18(%rbp), %rdi
callq 0x1b5fb8
movl %eax, %r14d
movq 0x18(%rbp), %rdi
callq 0x1b6040
leaq 0x8f9(%rip), %r9        # 0x1f1218
xorl %r15d, %r15d
cmpb $0x0, 0x2(%rbp)
cmoveq %r15, %r9
movzbl %r14b, %ecx
movzbl %al, %r8d
movq %rbx, %rdi
movl %r13d, %esi
movl 0x18(%rsp), %edx
pushq %r12
pushq 0x88(%rsp)
callq 0x1ec389
addq $0x10, %rsp
movq %rax, %rbx
movq %rax, 0x78(%rsp)
testq %rax, %rax
movb 0xe(%rsp), %r13b
je 0x1f0a5a
movq 0x18(%rbp), %rdi
callq 0x1b5f74
testb %al, %al
je 0x1f09bc
movq 0x20(%rbp), %rdi
callq 0x11b0a1
leaq 0x1690b2(%rip), %rcx    # 0x359a33
leaq 0x1967f0(%rip), %rsi    # 0x387178
testb %r13b, %r13b
cmovneq %rcx, %rsi
leaq 0x16514b(%rip), %rdx    # 0x355ae1
leaq 0x1c8426(%rip), %rcx    # 0x3b8dc3
movq %rax, %rdi
movl $0x99, %r8d
movq %r12, %r9
callq 0xfcf97
movq %rax, 0x40(%rsp)
testq %rax, %rax
je 0x1f0a5f
movq 0x18(%rbp), %rdi
callq 0x1b5f30
testb %al, %al
movq %r12, %r13
je 0x1f0a05
movq 0x20(%rbp), %rdi
callq 0x11b0a1
leaq 0x1b38db(%rip), %rsi    # 0x3a42b7
leaq 0x1650fe(%rip), %rdx    # 0x355ae1
leaq 0x1c83d9(%rip), %rcx    # 0x3b8dc3
movq %rax, %rdi
movl $0x9c, %r8d
movq %r13, %r9
callq 0xfcf97
movq %rax, 0x48(%rsp)
testq %rax, %rax
je 0x1f0a6a
movq 0x18(%rbp), %rdi
callq 0x1b5f0e
movb $0x1, %r14b
testb %al, %al
movl 0x10(%rsp), %r12d
je 0x1f0a55
movq 0x20(%rbp), %rdi
callq 0x11b0a1
leaq 0x1ade80(%rip), %rsi    # 0x39e8aa
leaq 0x1650b0(%rip), %rdx    # 0x355ae1
leaq 0x1c838b(%rip), %rcx    # 0x3b8dc3
movq %rax, %rdi
movl $0x9f, %r8d
movq %r13, %r9
callq 0xfcf97
movq %rax, 0x50(%rsp)
testq %rax, %rax
setne %r14b
movq %rbx, %r15
jmp 0x1f0a75
xorl %r14d, %r14d
jmp 0x1f0a65
xorl %r14d, %r14d
movq %rbx, %r15
movq %r12, %r13
jmp 0x1f0a70
xorl %r14d, %r14d
movq %rbx, %r15
movl 0x10(%rsp), %r12d
movq 0x18(%rbp), %rdi
callq 0x1b5f74
movq 0x20(%rsp), %rbx
movq %rbx, %rcx
testb %al, %al
jne 0x1f0ab4
movq 0x18(%rbp), %rdi
callq 0x1b5f30
movq %rbx, %rcx
testb %al, %al
jne 0x1f0ab4
cmpb $0x0, 0x3(%rbp)
movq %rbx, %rcx
jne 0x1f0ab4
movq 0x18(%rbp), %rdi
callq 0x1b5f0e
xorl %ecx, %ecx
testb %al, %al
cmovneq %rbx, %rcx
movq %rcx, 0x60(%rsp)
movzbl %r12b, %eax
testb %r14b, %r14b
movl $0x1, %r12d
cmovnel %eax, %r12d
movq %rbx, %r14
testb %r12b, %r12b
jne 0x1f0f56
movq 0x18(%rbp), %rdi
callq 0x1b5f74
testb %al, %al
jne 0x1f0af4
movq 0x18(%rbp), %rdi
callq 0x1b5f30
testb %al, %al
je 0x1f0d15
cmpb $0x0, 0x38(%rsp)
movl %r12d, 0x10(%rsp)
je 0x1f0bb7
movq 0x18(%rbp), %rdi
callq 0x1b5fd7
movl %eax, %ebx
movq 0x18(%rbp), %rdi
callq 0x1b5fc7
movq %r14, %r12
movq %rax, %r14
movq 0x18(%rbp), %rdi
callq 0x1b6040
movb %al, 0xe(%rsp)
movzbl 0x1(%rbp), %eax
leaq 0xe0(%rsp), %r10
movq %r12, %rdi
movl 0x1c(%rsp), %esi
movl 0x18(%rsp), %edx
movl %ebx, %ecx
movq %r14, %r8
movq %r15, %r9
pushq %r13
pushq 0x30(%rsp)
pushq %rax
pushq 0xa8(%rsp)
pushq %r10
pushq 0x78(%rsp)
callq 0x1f7465
addq $0x30, %rsp
movq %rax, %r15
testq %rax, %rax
je 0x1f0d2f
movb $0x0, 0xf(%rsp)
cmpb $0x1, 0x116(%rsp)
movl 0x10(%rsp), %r12d
jne 0x1f0d4e
movq 0x20(%rsp), %rdi
callq 0xe7b9c
movq %rax, %rdi
callq 0x105e91
movq 0x40(%rsp), %rdi
movzwl %ax, %esi
callq 0xd64bc
movq %rax, 0x88(%rsp)
jmp 0x1f0d5a
movb $0x0, 0x115(%rsp)
movb 0x1(%rbp), %al
movb %al, 0x38(%rsp)
movq 0x18(%rbp), %rsi
leaq 0x120(%rsp), %rbx
movq %rbx, %rdi
callq 0x1b604f
movq %r14, %rdi
callq 0xebcd9
movq %rax, %rdi
callq 0xd11be
movupd (%rbx), %xmm0
movupd 0x10(%rbx), %xmm1
movapd %xmm0, 0xa0(%rsp)
movapd %xmm1, 0xb0(%rsp)
movq 0x20(%rbx), %rcx
movq %rcx, 0xc0(%rsp)
cmpl $0xb, %eax
setae %al
movl 0xa8(%rsp), %edx
cmpl $0x4, %edx
setae %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x1f0c3b
movl $0x3, 0xa8(%rsp)
movl $0x3, %edx
movl 0xac(%rsp), %ecx
movl 0xb4(%rsp), %r8d
leaq 0x1c8361(%rip), %rsi    # 0x3b8fb2
movq 0x28(%rsp), %r12
movq %r12, %rdi
xorl %eax, %eax
callq 0x103fe1
movq 0x18(%rbp), %rdi
callq 0x1b6003
movl %eax, %ebx
movq 0x18(%rbp), %rdi
callq 0x1b5fd7
movq %rbp, %rcx
movl %eax, %ebp
movq 0x18(%rcx), %rdi
callq 0x1b5fc7
movq %rax, %r15
movq 0x20(%rsp), %r14
movq %r14, %rdi
callq 0xe7b9c
incq %rax
subq $0x8, %rsp
movzbl 0x40(%rsp), %r10d
leaq 0xe8(%rsp), %r8
movl %ebx, %edi
movl 0x20(%rsp), %esi
movl %ebp, %edx
movq %r15, %rcx
movq %r14, %r9
pushq %r13
pushq %r12
pushq %rax
pushq %r10
movq 0xb8(%rsp), %rax
pushq %rax
callq 0x19f158
addq $0x30, %rsp
testq %rax, %rax
je 0x1f0f29
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0x19931c
testq %rax, %rax
je 0x1f0f21
movq %rax, %rdi
callq 0x19bd88
movq %rbx, %rdi
callq 0x19f7a1
movq 0x30(%rsp), %rbp
movl 0x10(%rsp), %r12d
jmp 0x1f0f56
cmpb $0x0, 0x38(%rsp)
je 0x1f0af4
cmpb $0x0, 0x3(%rbp)
je 0x1f0f56
jmp 0x1f0af4
movb $0x0, 0x68(%rsp)
movq $0x0, 0x70(%rsp)
xorl %ebx, %ebx
movq 0x20(%rsp), %r14
movl 0x10(%rsp), %r12d
jmp 0x1f0f35
movq $0x0, 0x88(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0xf(%rsp), %rsi
movq %r15, %rdx
callq 0x1f8bd2
testq %rax, %rax
je 0x1f0eba
movq %rax, %rbx
movq 0x40(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0xa0(%rsp), %r14
movq %r13, 0xd8(%rsp)
movq %r15, 0xd0(%rsp)
cmpq $0x0, 0x38(%rsp)
je 0x1f0de0
movb 0xf(%rsp), %al
andb 0xe(%rsp), %al
jne 0x1f0de0
movq 0x120(%rsp), %rdx
cmpb $0x1, 0x116(%rsp)
jne 0x1f0dd3
movq %rbx, %rdi
movq 0x88(%rsp), %rsi
callq 0x1fccaf
jmp 0x1f0de0
movq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0x1fcc78
movq 0x120(%rsp), %r12
testq %r13, %r13
je 0x1f0dfd
movq %r13, %rdi
callq 0xfcc32
testb %al, %al
jne 0x1f1148
movq 0x48(%rsp), %r13
testq %r13, %r13
je 0x1f0e7f
movb $0x0, 0xa0(%rsp)
testq %r12, %r12
je 0x1f0e72
movq %r13, %rbp
xorl %r15d, %r15d
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1fc7ed
testq %rax, %rax
je 0x1f0e45
testq %rbp, %rbp
je 0x1f0e68
movq 0x60(%rsp), %rdi
decq %rax
movq %rax, %rsi
movl 0x1c(%rsp), %edx
callq 0xe7bbc
jmp 0x1f0e47
movb $-0x2, %al
movb %al, 0xa0(%rsp)
movl $0x1, %esi
movl $0x1, %edx
movq %r14, %rdi
movq %r13, %rcx
callq 0x11f89c
movq %r13, %rbp
jmp 0x1f0e6a
xorl %ebp, %ebp
incq %r15
cmpq %r15, %r12
jne 0x1f0e1a
movq 0x30(%rsp), %rbp
movq 0xd0(%rsp), %r15
movq 0x120(%rsp), %rax
addq %rax, 0x58(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0xf(%rsp), %rsi
movq %r15, %rdx
callq 0x1f8bd2
movq %rax, %rbx
testq %rax, %rax
movq 0xd8(%rsp), %r13
movl 0x10(%rsp), %r12d
jne 0x1f0d9d
cmpb $0x1, 0x116(%rsp)
jne 0x1f0ed1
movq 0x88(%rsp), %rdi
callq 0xd68ba
movb $0x1, 0x68(%rsp)
movq %r15, %rdi
callq 0x1f95f8
movq %rax, %rbx
movq %rax, 0x70(%rsp)
movq 0x20(%rsp), %r14
movq %r14, %rdi
callq 0xe7b9c
cmpq %rax, %rbx
jae 0x1f1152
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x1f0f33
movq %r15, %rsi
movq %r13, %rdx
callq 0x1f9589
testl %eax, %eax
sete %bl
movq $0x0, 0x50(%rsp)
jmp 0x1f0f35
movq %rbx, %rdi
callq 0x19f7a1
movb $0x1, %r12b
movq 0x30(%rsp), %rbp
jmp 0x1f0f81
movb $0x1, %bl
movq %r15, %rdi
movq %r13, %rsi
callq 0x1f68c4
movzbl %r12b, %r12d
testb $0x1, %bl
movl $0x1, %ecx
cmovel %ecx, %r12d
testl %eax, %eax
cmovnel %ecx, %r12d
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
sete %al
orb %r12b, %al
jne 0x1f0f81
movq %r13, %rsi
callq 0x1a6f07
testl %eax, %eax
movzbl %r12b, %eax
movl $0x1, %r12d
cmovel %eax, %r12d
movq 0x40(%rsp), %rdi
callq 0xfd018
movq 0x48(%rsp), %rdi
callq 0xfd018
movq 0x50(%rsp), %rdi
callq 0xfd018
movq 0x78(%rsp), %r15
testb %r12b, %r12b
jne 0x1f106b
testq %r15, %r15
je 0x1f1002
movq %r15, %rdi
callq 0x1ec9f3
movq %rax, %rbx
movq %r15, %rdi
callq 0x1eca1a
movq %rax, %r14
movq %r15, %rdi
callq 0x1eca04
movq 0x58(%rsp), %r15
movq %r15, %xmm2
punpckldq 0x1568fe(%rip), %xmm2 # xmm2 = xmm2[0],mem[0],xmm2[1],mem[1]
subpd 0x156906(%rip), %xmm2   # 0x3478f0
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x10(%rsp)
jmp 0x1f1016
xorpd %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x58(%rsp), %r15
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x20(%rbp), %rdi
callq 0x11b0a1
subq $0x8, %rsp
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq 0x28(%rsp), %rdx
movq %r15, %rcx
movl 0x20(%rsp), %r8d
movq %rbx, %r9
movsd 0x18(%rsp), %xmm0
pushq %r13
leaq 0x78(%rsp), %rax
pushq %rax
pushq %r14
movq %rdx, %r14
callq 0x32a15c
addq $0x20, %rsp
testl %eax, %eax
movzbl %r12b, %eax
movl $0x1, %r12d
cmovel %eax, %r12d
movq 0x78(%rsp), %r15
movq %r15, %rdi
callq 0x1ec697
movq 0x80(%rsp), %rdi
movq 0x98(%rsp), %rsi
callq 0x1a6f27
movq %r14, %rdi
callq 0xea375
testb %r12b, %r12b
jne 0x1f10dc
movq 0x18(%rbp), %rdi
callq 0x1b5ff4
testb %al, %al
je 0x1f10dc
movq 0x18(%rbp), %rdi
callq 0x1b5fe5
testb %al, %al
je 0x1f10dc
movq 0x20(%rbp), %rdi
callq 0x11b0a1
movl $0x1, %ebx
movq %rax, %rdi
movl $0x1, %esi
movq 0x28(%rsp), %rdx
movq %r13, %rcx
callq 0x1b058c
testl %eax, %eax
movzbl %r12b, %r12d
cmovnel %ebx, %r12d
movq 0x90(%rsp), %rbx
testq %rbx, %rbx
je 0x1f1103
movq 0x2c7de8(%rip), %rax    # 0x4b8ed8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x11cf39
movq %rbx, %rdi
callq 0x11d054
movzbl %r12b, %eax
negl %eax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x1c(%rsp), %edi
testl %edi, %edi
je 0x1f084b
callq 0x1130f8
leaq 0x1c7d0c(%rip), %rsi    # 0x3b8e3f
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xfcb67
movb $0x1, %r12b
jmp 0x1f084b
callq 0x7a013
callq 0x79fa3
callq 0x7a04c
callq 0x79fdc