// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/extended/condenseq_creator.c
// Function: gt_condenseq_creator_create
int gt_condenseq_creator_create(GtCondenseqCreator *condenseq_creator,
                                GtStr *basename,
                                GtEncseq *encseq,
                                GtLogger *logger,
                                GtLogger *kdb_logger,
                                GtError *err)
{
  int had_err = 0;
  GtCondenseq *ces;
  FILE *fp = NULL;
  GtUword buffersize;
  GtTimer *timer = NULL;
  gt_assert(condenseq_creator != NULL);
  gt_assert(encseq != NULL);

  gt_logger_log(logger, "number of kmer-pos cutoff setting:");
  if (condenseq_creator->cutoff_value == GT_UNDEF_UWORD)
    gt_logger_log(logger, "mean/" GT_WU, condenseq_creator->mean_fraction);
  else if (condenseq_creator->cutoff_value == 0)
    gt_logger_log(logger, "disabled");
  else
    gt_logger_log(logger, GT_WU, condenseq_creator->cutoff_value);

  gt_logger_log(logger, "xdrop extension settings:");
  if (condenseq_creator->use_diagonals) {
    if (condenseq_creator->use_full_diags)
      gt_logger_log(logger, "use full diagonals");
    else
      gt_logger_log(logger, "use sparse diagonals");
  }
  else if (condenseq_creator->extend_all_kmers)
    gt_logger_log(logger, "brute force xdrop extension");
  else
    gt_logger_log(logger, "filtered xdrop extension");

  if (gt_showtime_enabled()) {
    timer = gt_timer_new_with_progress_description("create condenseq");
    gt_timer_start(timer);
  }
  condenseq_creator->input_es = encseq;
  ces = gt_condenseq_new(encseq, logger);
  /* TODO DW: check if these values make sense. and if after init the buffer is
     always flushed! -> should be -> init_kmer_db*/
  buffersize = condenseq_creator->initsize * 100;
  if (buffersize > (GtUword) 100000)
    buffersize = (GtUword) 100000;
  gt_log_log("buffersize for kmer-db: " GT_WU, buffersize);
  if (gt_showtime_enabled())
    gt_timer_show_progress(timer, "create kmer db", stderr);
  condenseq_creator->kmer_db =
    gt_kmer_database_new(gt_alphabet_num_of_chars(ces->alphabet),
                         condenseq_creator->kmersize,
                         buffersize,
                         encseq);
  if (condenseq_creator->use_cutoff) {
    if (condenseq_creator->mean_cutoff)
      gt_kmer_database_use_mean_cutoff(condenseq_creator->kmer_db,
                                       condenseq_creator->mean_fraction,
                                       GT_CES_C_MIN_POS_NUM_CUTOFF);
    else
      gt_kmer_database_set_cutoff(condenseq_creator->kmer_db,
                                  condenseq_creator->cutoff_value);
    if (condenseq_creator->prune_kmer_db)
      gt_kmer_database_set_prune(condenseq_creator->kmer_db);
  }
  condenseq_creator->ces = ces;
  if (condenseq_creator->use_diagonals || condenseq_creator->use_full_diags) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "create diagonals", stderr);
    condenseq_creator->diagonals =
      gt_malloc(sizeof (*condenseq_creator->diagonals));
    if (condenseq_creator->use_full_diags) {
      condenseq_creator->diagonals->full =
        ces_c_diagonals_full_new((size_t) gt_encseq_total_length(encseq));
    }
    else
      condenseq_creator->diagonals->full = NULL;
    if (condenseq_creator->use_diagonals) {
      condenseq_creator->diagonals->sparse =
        ces_c_sparse_diags_new((size_t) condenseq_creator->initsize);
    }
    else
      condenseq_creator->diagonals->sparse = NULL;
  }
  else
    condenseq_creator->diagonals = NULL;

  ces_c_xdrops = 0;
  had_err = ces_c_analyse(condenseq_creator, timer, err);

  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, alphabet", stderr);
    gt_log_log(GT_WU " kmer positions in final kmer_db",
               gt_kmer_database_get_kmer_count(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " xdrop calls.", ces_c_xdrops);
    gt_log_log(GT_WU " uniques", condenseq_creator->ces->uds_nelems);
    gt_log_log(GT_WU " links", condenseq_creator->ces->lds_nelems);
    gt_log_log(GT_WU " bytes in final kmer_db",
               gt_kmer_database_get_used_size(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " bytes allocated for kmer_db",
               gt_kmer_database_get_byte_size(condenseq_creator->kmer_db));

    if (gt_log_enabled() &&
        (condenseq_creator->use_diagonals ||
         condenseq_creator->use_full_diags)) {
#ifdef GT_CONDENSEQ_CREATOR_DIST_DEBUG
      GtFile *out = gt_file_new_from_fileptr(gt_log_fp());
      gt_log_log("dist of number added:");
      gt_disc_distri_show(condenseq_creator->add, out);
      gt_log_log("dist of number replaced:");
      gt_disc_distri_show(condenseq_creator->replace, out);
      gt_log_log("dist of number deleted:");
      gt_disc_distri_show(condenseq_creator->delete, out);
      gt_file_delete_without_handle(out);
#endif
      gt_log_log("min_d: " GT_WU ", max_d: " GT_WU " (# diagonals: " GT_WU ") ",
                 condenseq_creator->min_d,
                 condenseq_creator->max_d,
                 condenseq_creator->max_d - condenseq_creator->min_d + 1);
      if (condenseq_creator->diagonals != NULL) {
        if (condenseq_creator->diagonals->sparse != NULL)
          gt_log_log("Sparse diagonals allocated: " GT_WU ", max used: " GT_WU,
                     condenseq_creator->diagonals->sparse->allocated,
                     condenseq_creator->diagonals->sparse->max);
        if (condenseq_creator->diagonals->full != NULL)
          gt_log_log("Full diagonals allocated: " GT_WU,
                     condenseq_creator->diagonals->full->allocated);
      }
    }
    had_err = gt_alphabet_to_file(ces->alphabet,
                                  gt_str_get(basename), err);
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename),
                                 GT_CONDENSEQ_FILE_SUFFIX,
                                 "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, condenseq", stderr);
    had_err = gt_condenseq_write(condenseq_creator->ces, fp, err);
    gt_fa_xfclose(fp);
    fp = NULL;
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename), ".fas", "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    GtEncseqEncoder *es_enc;
    GtStrArray *toencode;
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique fasta", stderr);
    ces_c_write_unique_fasta(condenseq_creator, fp);
    gt_fa_xfclose(fp);
    /*encoding of unique_es*/
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique encseq", stderr);
    es_enc = gt_encseq_encoder_new();
    gt_encseq_encoder_disable_description_support(es_enc);
    gt_encseq_encoder_do_not_create_md5_tab(es_enc);
    toencode = gt_str_array_new();
    gt_str_array_add(toencode, basename);
    gt_str_append_cstr(gt_str_array_get_str(toencode, 0), ".fas");
    had_err = gt_encseq_encoder_encode(es_enc,
                                       toencode,
                                       gt_str_get(basename),
                                       err);
    gt_encseq_encoder_delete(es_enc);
    gt_str_array_delete(toencode);
  }
  condenseq_creator->input_es = NULL;
  gt_condenseq_delete(ces);
  condenseq_creator->ces = NULL;
  ces_c_diags_delete(condenseq_creator->diagonals);
  condenseq_creator->diagonals = NULL;
  gt_kmer_database_print(condenseq_creator->kmer_db,
                         kdb_logger,
                         gt_logger_enabled(logger));
  gt_kmer_database_delete(condenseq_creator->kmer_db);
  condenseq_creator->kmer_db = NULL;
  if (gt_showtime_enabled())
    gt_timer_show_progress_final(timer, stderr);
  gt_timer_delete(timer);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %r9, 0x18(%rsp)
movq %rsi, 0x28(%rsp)
testq %rdi, %rdi
je 0x136633
movq %rdx, %r14
testq %rdx, %rdx
je 0x136638
movq %r8, %r15
movq %rcx, %rbp
movq %rdi, %rbx
leaq 0x24d4cb(%rip), %rsi    # 0x382c02
movq %rcx, %rdi
xorl %eax, %eax
callq 0x10906e
movq 0x108(%rbx), %rdx
testq %rdx, %rdx
je 0x135763
cmpq $-0x1, %rdx
jne 0x135776
movq 0x118(%rbx), %rdx
leaq 0x24d4c4(%rip), %rsi    # 0x382c25
jmp 0x13577d
leaq 0x22ba99(%rip), %rsi    # 0x361203
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10906e
jmp 0x135787
leaq 0x28feaf(%rip), %rsi    # 0x3c562c
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10906e
leaq 0x24d4a0(%rip), %rsi    # 0x382c2e
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10906e
cmpb $0x1, 0x144(%rbx)
jne 0x1357b8
leaq 0x24d4a0(%rip), %rax    # 0x382c48
leaq 0x24d4ac(%rip), %rsi    # 0x382c5b
cmpb $0x0, 0x145(%rbx)
jmp 0x1357cd
leaq 0x24d4b1(%rip), %rax    # 0x382c70
leaq 0x24d4c6(%rip), %rsi    # 0x382c8c
cmpb $0x0, 0x146(%rbx)
cmovneq %rax, %rsi
movq $0x0, 0x8(%rsp)
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10906e
callq 0x11ed94
testb %al, %al
movq %r15, 0x40(%rsp)
je 0x13580b
leaq 0x24d4ac(%rip), %rdi    # 0x382ca5
callq 0x1226d6
movq %rax, 0x8(%rsp)
movq %rax, %rdi
callq 0x122733
movq %r14, (%rbx)
movq %r14, %rdi
movq %rbp, %rsi
callq 0x131ca2
movq %rax, 0x30(%rsp)
imulq $0x64, 0xe8(%rbx), %rax
movl $0x186a0, %r15d         # imm = 0x186A0
cmpq %r15, %rax
cmovbq %rax, %r15
leaq 0x24d47c(%rip), %rdi    # 0x382cb6
movq %r15, %rsi
xorl %eax, %eax
callq 0x108e02
callq 0x11ed94
testb %al, %al
je 0x135868
movq 0x38e72c(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24d474(%rip), %rsi    # 0x382cd2
movq 0x8(%rsp), %rdi
callq 0x1229c8
movq 0x30(%rsp), %rax
movq (%rax), %rdi
callq 0xd3713
movl 0x138(%rbx), %esi
movl %eax, %edi
movq %r15, %rdx
movq %r14, %rcx
callq 0x15e918
movq %rax, 0x8(%rbx)
cmpb $0x1, 0x147(%rbx)
jne 0x1358d5
cmpb $0x1, 0x148(%rbx)
jne 0x1358b4
movq 0x118(%rbx), %rsi
movl $0x1e, %edx
movq %rax, %rdi
callq 0x15f81c
jmp 0x1358c3
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0x15f7ed
cmpb $0x1, 0x149(%rbx)
jne 0x1358d5
movq 0x8(%rbx), %rdi
callq 0x15f84b
movq 0x30(%rsp), %rax
movq %rax, 0x28(%rbx)
cmpb $0x0, 0x144(%rbx)
movq %rbx, (%rsp)
jne 0x1358f8
cmpb $0x1, 0x145(%rbx)
jne 0x135a5d
callq 0x11ed94
testb %al, %al
je 0x13591c
movq 0x38e678(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24d3cf(%rip), %rsi    # 0x382ce1
movq 0x8(%rsp), %rdi
callq 0x1229c8
leaq 0x24d081(%rip), %rsi    # 0x3829a4
movl $0x10, %edi
movl $0x6af, %edx            # imm = 0x6AF
callq 0x1092b2
movq %rax, 0x30(%rbx)
cmpb $0x1, 0x145(%rbx)
jne 0x1359a7
movq %r14, %rdi
callq 0xec1d8
movq %rax, %r14
leaq 0x24d053(%rip), %r13    # 0x3829a4
movl $0x18, %edi
movq %r13, %rsi
movl $0x5d, %edx
callq 0x1092b2
movq %rax, %r15
leaq (,%r14,8), %r12
movq %r12, %rdi
movq %r13, %rsi
movl $0x5e, %edx
callq 0x1092b2
movq %rax, (%r15)
testq %r14, %r14
je 0x135996
movq %rax, %rdi
movl $0xff, %esi
movq %r12, %rdx
callq 0x173a0
movq %r14, 0x8(%r15)
movq %r14, 0x10(%r15)
movq 0x30(%rbx), %rax
movq %r15, (%rax)
jmp 0x1359ae
movq $0x0, (%rax)
cmpb $0x1, 0x144(%rbx)
jne 0x135a4f
movq (%rsp), %rax
movq 0xe8(%rax), %rbx
leaq 0x24cfd7(%rip), %r15    # 0x3829a4
movl $0x50, %edi
movq %r15, %rsi
movl $0x75, %edx
callq 0x1092b2
movq %rax, %r14
movq %rbx, %r12
shlq $0x4, %r12
movq %r12, %rdi
movq %r15, %rsi
movl $0x76, %edx
callq 0x1092b2
movq %rax, 0x8(%r14)
movq %rbx, 0x30(%r14)
movq $0x0, 0x48(%r14)
movq %r12, %rdi
movq %r15, %rsi
movl $0x79, %edx
callq 0x1092b2
movq %rax, (%r14)
movq %rbx, 0x28(%r14)
movq (%rsp), %rbx
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movups %xmm0, 0x38(%r14)
leaq 0xede(%rip), %rdi       # 0x136916
xorl %esi, %esi
xorl %edx, %edx
callq 0x16dec0
movq %rax, 0x10(%r14)
movq 0x30(%rbx), %rax
movq %r14, 0x8(%rax)
jmp 0x135a65
movq 0x30(%rbx), %rax
movq $0x0, 0x8(%rax)
jmp 0x135a65
movq $0x0, 0x30(%rbx)
movq $0x0, 0x393c78(%rip) # 0x4c96e8
movl 0x138(%rbx), %edx
movq (%rbx), %rdi
movq 0xf0(%rbx), %rcx
xorl %esi, %esi
callq 0x1f7dc2
movq %rax, 0x18(%rbx)
callq 0x11ed94
testb %al, %al
je 0x135aaf
movq 0x38e4e5(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24d8a7(%rip), %rsi    # 0x38334c
movq 0x8(%rsp), %rdi
callq 0x1229c8
movl 0x138(%rbx), %eax
movq %rax, 0x10(%rsp)
cmpb $0x1, 0x147(%rbx)
jne 0x135ad5
cmpb $0x1, 0x149(%rbx)
jne 0x135ad5
movq 0x8(%rbx), %rdi
callq 0x15f867
movq %rbx, %rdi
callq 0x136c8d
movl %eax, %r14d
testl %eax, %eax
jne 0x135aef
movq %rbx, %rdi
callq 0x136d0c
movl %eax, %r14d
movq %rbp, 0x38(%rsp)
cmpl $0x1, %r14d
jne 0x135b05
movb $0x1, %bpl
xorl %r15d, %r15d
jmp 0x135dc3
movq 0x8(%rbx), %rdi
movq (%rsp), %rax
movq 0xe8(%rax), %rbx
callq 0x15f877
xorl %r15d, %r15d
movl $0x0, %ebp
cmpq %rax, %rbx
movq (%rsp), %rbx
jbe 0x135dc3
movq 0x10(%rsp), %rax
decq %rax
movq %rax, 0x20(%rsp)
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r15
callq 0x15f877
subq %rax, %r15
movq 0x8(%rbx), %rdi
movq 0xd0(%rbx), %rax
movq 0xd8(%rbx), %rcx
addq 0x10(%rsp), %rcx
negq %rcx
leaq (%rax,%rcx), %r12
incq %r12
movq 0xf0(%rbx), %r13
movq 0xf8(%rbx), %rbp
callq 0x15f877
leaq 0x24d90e(%rip), %rdi    # 0x383497
movq %r13, %rsi
movq %rbp, %rdx
movq %r15, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x108e02
movq 0x100(%rbx), %rax
cmpq %rax, %r15
cmovbeq %rax, %r15
movq %r12, %rcx
subq %r15, %rcx
jae 0x135c11
leaq 0x24d959(%rip), %rdi    # 0x383512
movq %r12, %rsi
xorl %eax, %eax
callq 0x108e02
movq %r12, %rax
shrq $0x20, %rax
jne 0x135ca0
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
addq 0x20(%rsp), %r12
movl %r12d, %edx
callq 0x13218c
movq 0xf0(%rbx), %rsi
addq %rsi, %r12
movq %rbx, %rdi
movq %r12, %rdx
callq 0x136d40
incq 0xf8(%rbx)
movq %rbx, %rdi
callq 0x136c8d
xorl %r15d, %r15d
jmp 0x135c7f
cmpq %rax, %rcx
jae 0x135cbb
movq 0xd0(%rbx), %rdx
movq %rdx, %rax
shrq $0x20, %rax
jne 0x135d2e
xorl %r15d, %r15d
leaq 0x24d89b(%rip), %rdi    # 0x3834d3
movq %r12, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movq 0x20(%rsp), %rax
leal (%r12,%rax), %edx
callq 0x13218c
movq 0xf0(%rbx), %rsi
addq %rsi, %r12
movq %rbx, %rdi
movq %r12, %rdx
callq 0x136d40
incq 0xf8(%rbx)
movq %rbx, %rdi
callq 0x136c8d
movb $0x1, %bpl
movl $0x1, %r14d
testl %eax, %eax
jne 0x135d7e
movq %rbx, %rdi
callq 0x136d0c
movl %eax, %r14d
jmp 0x135d7e
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x18(%rsp), %rdi
leaq 0x24d3d7(%rip), %rsi    # 0x38308a
movq %r12, %rdx
jmp 0x135d71
addq 0x20(%rsp), %r15
leaq 0x24d830(%rip), %rdi    # 0x3834f7
movq %r12, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x108e02
movq %r15, %rax
shrq $0x20, %rax
jne 0x135d5b
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movl %r15d, %edx
callq 0x13218c
movq 0xf0(%rbx), %rsi
leaq (%rsi,%r15), %rdx
movq %rbx, %rdi
callq 0x136d40
movq 0xf0(%rbx), %rsi
addq %r15, %rsi
movq %rsi, 0xf0(%rbx)
addq %r15, 0xd8(%rbx)
movq %rbx, %rdi
callq 0x136d78
movl %eax, %r14d
xorl %r15d, %r15d
movb $0x1, %bpl
jmp 0x135d7e
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x18(%rsp), %rdi
leaq 0x24d349(%rip), %rsi    # 0x38308a
xorl %eax, %eax
callq 0x1019cf
leaq 0x24d784(%rip), %rdi    # 0x3834d3
movq %r12, %rsi
xorl %eax, %eax
callq 0x108e02
jmp 0x135d78
xorl %ebp, %ebp
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x18(%rsp), %rdi
leaq 0x24d31c(%rip), %rsi    # 0x38308a
movq %r15, %rdx
xorl %eax, %eax
callq 0x1019cf
movl $0xffffffff, %r15d      # imm = 0xFFFFFFFF
testb %bpl, %bpl
je 0x135d8c
movq 0x8(%rbx), %rdi
callq 0x15ec22
cmpl $0x1, %r14d
setne %al
testb %al, %bpl
je 0x135db9
movq 0x8(%rbx), %rdi
movq (%rsp), %rax
movq 0xe8(%rax), %rbx
callq 0x15f877
cmpq %rax, %rbx
movq (%rsp), %rbx
ja 0x135b3b
cmpl $0x1, %r14d
sete %al
andb %al, %bpl
testb %bpl, %bpl
je 0x135df4
movq 0x8(%rbx), %rdi
callq 0x15f877
movq 0xf0(%rbx), %rcx
leaq 0x24d749(%rip), %rsi    # 0x383528
movq 0x18(%rsp), %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1019cf
movl $0xffffffff, %r15d      # imm = 0xFFFFFFFF
xorl %ebp, %ebp
testl %r15d, %r15d
je 0x135e09
xorl %ebx, %ebx
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq 0x18(%rsp), %r15
jmp 0x135e4d
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r14
callq 0x15f877
movb $0x1, %bl
cmpq %rax, %r14
movq 0x18(%rsp), %r15
jbe 0x135e4d
movq (%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x15f877
leaq 0x24d74c(%rip), %rsi    # 0x383585
xorl %ebx, %ebx
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1019cf
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
testb %bl, %bl
je 0x135e6a
movq (%rsp), %rax
movq 0xf0(%rax), %rsi
leaq 0x24d77a(%rip), %rdi    # 0x3835dd
xorl %eax, %eax
callq 0x108e02
movq (%rsp), %r14
cmpb $0x1, 0x147(%r14)
jne 0x135e8b
cmpb $0x1, 0x149(%r14)
jne 0x135e8b
movq 0x8(%r14), %rdi
callq 0x15f84b
testb %bl, %bl
movq %r14, %rbx
je 0x1360c8
movq 0x18(%rbx), %rdi
callq 0x1f838f
xorl %ebp, %ebp
testb %al, %al
jne 0x1360c8
movq 0x8(%rbx), %rdi
movq 0x28(%rbx), %rax
movq 0x78(%rax), %rax
shrq $0x2, %rax
movabsq $0x28f5c28f5c28f5c3, %rcx # imm = 0x28F5C28F5C28F5C3
mulq %rcx
movq %rdx, %r14
shrq $0x2, %r14
callq 0x15f877
leaq 0x24d48e(%rip), %rdi    # 0x383367
xorl %r12d, %r12d
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x8(%rbx), %rdi
callq 0x15fb92
leaq 0x24d497(%rip), %rdi    # 0x38338d
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x8(%rbx), %rdi
callq 0x15fb6f
leaq 0x24d49b(%rip), %rdi    # 0x3833ab
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0xf0(%rbx), %rax
xorl %edx, %edx
divq %r14
movq %rax, %rbp
callq 0x11ed94
testb %al, %al
je 0x135f53
movq 0x38e047(%rip), %rax    # 0x4c3f80
movq (%rax), %rsi
leaq 0x1(%rbp), %rcx
leaq 0x24d490(%rip), %rdx    # 0x3833d7
movq 0x8(%rsp), %rdi
xorl %eax, %eax
callq 0x1229df
movq 0x18(%rbx), %rdi
callq 0x1f7f9f
movl $0x0, %r13d
testq %rax, %rax
je 0x136096
xorl %r13d, %r13d
movq %rbx, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x13693a
movl %eax, %r12d
cmpl $0x2, %eax
jne 0x135f92
movq 0x18(%rbx), %rdi
callq 0x1f7f9f
testq %rax, %rax
jne 0x135f6e
movl %r12d, %eax
xorl $0x3, %eax
orl %r13d, %eax
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovel %eax, %r13d
testl %r13d, %r13d
jne 0x13607a
movq 0xf0(%rbx), %rax
incq %rax
movq %rax, 0xf0(%rbx)
incq 0xd8(%rbx)
xorl %edx, %edx
divq %r14
cmpq %rax, %rbp
jae 0x13607a
movq %rax, %r15
leaq 0x24d42e(%rip), %rdi    # 0x38340b
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x8(%rbx), %rdi
callq 0x15f877
leaq 0x24d425(%rip), %rdi    # 0x38341c
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x3936e0(%rip), %rsi    # 0x4c96e8
leaq 0x24d434(%rip), %rdi    # 0x383443
xorl %eax, %eax
callq 0x108e02
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x24cd14(%rip), %rdi    # 0x382d3c
xorl %eax, %eax
callq 0x108e02
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x24cd0a(%rip), %rdi    # 0x382d48
xorl %eax, %eax
callq 0x108e02
callq 0x11ed94
testb %al, %al
je 0x136077
movq %r15, %rcx
incq %rcx
cmpq $0x64, %rcx
ja 0x136077
movq 0x38df1f(%rip), %rax    # 0x4c3f80
movq (%rax), %rsi
movq 0x8(%rsp), %rdi
leaq 0x24d367(%rip), %rdx    # 0x3833d7
xorl %eax, %eax
callq 0x1229df
movq %r15, %rbp
testl %r12d, %r12d
movq 0x18(%rsp), %r15
jne 0x136096
movq 0x18(%rbx), %rdi
callq 0x1f7f9f
testq %rax, %rax
jne 0x135f6e
movl %r12d, %eax
xorl $0x3, %eax
orl %r13d, %eax
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
cmovnel %r13d, %ebp
cmpl $0x1, %r12d
je 0x1360c8
testl %ebp, %ebp
jne 0x1360c8
leaq 0x24d3a5(%rip), %rsi    # 0x38345e
movq %r15, %rdi
xorl %eax, %eax
callq 0x1019cf
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq 0x18(%rbx), %rdi
callq 0x1f827b
movq 0x10(%rbx), %rdi
callq 0x1f827b
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
testl %ebp, %ebp
jne 0x136247
callq 0x11ed94
testb %al, %al
je 0x13610d
movq 0x38de87(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24cbef(%rip), %rsi    # 0x382cf2
movq 0x8(%rsp), %rdi
callq 0x1229c8
movq 0x8(%rbx), %rdi
callq 0x15f877
leaq 0x24cbea(%rip), %rdi    # 0x382d07
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x3935ba(%rip), %rsi    # 0x4c96e8
leaq 0x24cbf6(%rip), %rdi    # 0x382d2b
xorl %eax, %eax
callq 0x108e02
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x24cbee(%rip), %rdi    # 0x382d3c
xorl %eax, %eax
callq 0x108e02
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x24cbe4(%rip), %rdi    # 0x382d48
xorl %eax, %eax
callq 0x108e02
movq 0x8(%rbx), %rdi
callq 0x15fb92
leaq 0x24cbd7(%rip), %rdi    # 0x382d52
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
movq 0x8(%rbx), %rdi
callq 0x15fb6f
leaq 0x24cbd8(%rip), %rdi    # 0x382d6d
movq %rax, %rsi
xorl %eax, %eax
callq 0x108e02
callq 0x108df6
testb %al, %al
je 0x136225
cmpb $0x0, 0x144(%rbx)
jne 0x1361ba
cmpb $0x1, 0x145(%rbx)
jne 0x136225
movq 0x120(%rbx), %rsi
movq 0x128(%rbx), %rdx
movq %rdx, %rcx
subq %rsi, %rcx
incq %rcx
leaq 0x24cbb5(%rip), %rdi    # 0x382d8d
xorl %eax, %eax
callq 0x108e02
movq 0x30(%rbx), %rax
testq %rax, %rax
je 0x136225
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x136207
movq 0x30(%rax), %rsi
movq 0x40(%rax), %rdx
leaq 0x24cbb8(%rip), %rdi    # 0x382db8
xorl %eax, %eax
callq 0x108e02
movq 0x30(%rbx), %rax
movq (%rax), %rax
testq %rax, %rax
je 0x136225
movq 0x8(%rax), %rsi
leaq 0x24cbc9(%rip), %rdi    # 0x382de7
xorl %eax, %eax
callq 0x108e02
movq 0x30(%rsp), %rax
movq (%rax), %r14
movq 0x28(%rsp), %rdi
callq 0x120d23
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0xd44c7
movl %eax, %ebp
movq $0x0, 0x10(%rsp)
testl %ebp, %ebp
jne 0x136294
movq 0x28(%rsp), %rdi
callq 0x120d23
leaq 0x24c039(%rip), %rsi    # 0x38229e
leaq 0x2667c5(%rip), %rdx    # 0x39ca31
leaq 0x24c731(%rip), %rcx    # 0x3829a4
movq %rax, %rdi
movl $0x6f1, %r8d            # imm = 0x6F1
movq %r15, %r9
callq 0x101dff
movq %rax, 0x10(%rsp)
cmpq $0x1, %rax
movl $0x0, %ebp
sbbl %ebp, %ebp
testl %ebp, %ebp
jne 0x1362e3
callq 0x11ed94
testb %al, %al
je 0x1362bc
movq 0x38dcd8(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24cb53(%rip), %rsi    # 0x382e05
movq 0x8(%rsp), %rdi
callq 0x1229c8
movq 0x28(%rbx), %rdi
movq 0x10(%rsp), %rbx
movq %rbx, %rsi
movq %r15, %rdx
callq 0x132513
movl %eax, %ebp
movq %rbx, %rdi
callq 0x101f02
movq $0x0, 0x10(%rsp)
testl %ebp, %ebp
jne 0x136324
movq 0x28(%rsp), %rdi
callq 0x120d23
leaq 0x29334a(%rip), %rsi    # 0x3c9642
leaq 0x266732(%rip), %rdx    # 0x39ca31
leaq 0x24c69e(%rip), %rcx    # 0x3829a4
movq %rax, %rdi
movl $0x6fd, %r8d            # imm = 0x6FD
movq %r15, %r9
callq 0x101dff
xorl %ebp, %ebp
movq %rax, 0x10(%rsp)
cmpq $0x1, %rax
sbbl %ebp, %ebp
testl %ebp, %ebp
jne 0x1364fa
callq 0x11ed94
testb %al, %al
je 0x136350
movq 0x38dc44(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24cad5(%rip), %rsi    # 0x382e1b
movq 0x8(%rsp), %rdi
callq 0x1229c8
movq (%rsp), %rax
movq 0x28(%rax), %rax
cmpq $0x0, 0x98(%rax)
je 0x136440
movl $0x20, %ebx
xorl %r12d, %r12d
xorl %ebp, %ebp
movq $0x0, 0x20(%rsp)
movq (%rsp), %r13
movq 0x10(%rax), %rax
movl (%rax,%rbx), %r15d
testq %r15, %r15
je 0x13662e
movq -0x8(%rax,%rbx), %r14
callq 0x108df6
testb %al, %al
je 0x1363ba
movq 0x10(%rsp), %rdi
leaq 0x24d2f1(%rip), %rsi    # 0x383699
movq %r12, %rdx
movq %r14, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x17ab0
jmp 0x1363d0
movq 0x10(%rsp), %rdi
leaq 0x24d2f4(%rip), %rsi    # 0x3836ba
movq %r12, %rdx
xorl %eax, %eax
callq 0x17ab0
cmpl %r15d, 0x20(%rsp)
jae 0x1363f7
leal 0x1(%r15), %esi
movq %rbp, %rdi
movq %rsi, 0x20(%rsp)
leaq 0x24c5ba(%rip), %rdx    # 0x3829a4
movl $0x65e, %ecx            # imm = 0x65E
callq 0x1094e6
movq %rax, %rbp
movq (%r13), %rdi
leaq (%r14,%r15), %rcx
decq %rcx
movq %rbp, %rsi
movq %r14, %rdx
callq 0xed87b
movq 0x10(%rsp), %rdi
leaq 0x24d2a8(%rip), %rsi    # 0x3836c1
movl %r15d, %edx
movq %rbp, %rcx
xorl %eax, %eax
callq 0x17ab0
incq %r12
movq 0x28(%r13), %rax
addq $0x28, %rbx
cmpq 0x98(%rax), %r12
jb 0x13637d
jmp 0x136442
xorl %ebp, %ebp
leaq 0x24c55b(%rip), %rsi    # 0x3829a4
movq %rbp, %rdi
movl $0x666, %edx            # imm = 0x666
callq 0x109670
movq 0x10(%rsp), %rdi
callq 0x101f02
callq 0x11ed94
testb %al, %al
je 0x136484
movq 0x38db10(%rip), %rax    # 0x4c3f80
movq (%rax), %rdx
leaq 0x24c9ba(%rip), %rsi    # 0x382e34
movq 0x8(%rsp), %rdi
callq 0x1229c8
callq 0xf444b
movq %rax, %r14
movq %rax, %rdi
callq 0xf46af
movq %r14, %rdi
callq 0xf491b
callq 0x121b54
movq %rax, %r15
movq %rax, %rdi
movq 0x28(%rsp), %rbx
movq %rbx, %rsi
callq 0x121cc0
movq %r15, %rdi
xorl %esi, %esi
callq 0x121d35
leaq 0x29317d(%rip), %rsi    # 0x3c9642
movq %rax, %rdi
callq 0x12097f
movq %rbx, %rdi
callq 0x120d23
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq 0x18(%rsp), %rcx
callq 0xf49ba
movl %eax, %ebp
movq %r14, %rdi
callq 0xf483d
movq %r15, %rdi
callq 0x121e8b
xorl %ebx, %ebx
movq (%rsp), %r14
movq %rbx, (%r14)
movq 0x30(%rsp), %rdi
callq 0x1323d6
movq %rbx, 0x28(%r14)
movq 0x30(%r14), %r14
testq %r14, %r14
je 0x1365c1
movq (%r14), %rax
testq %rax, %rax
je 0x13654d
movq (%rax), %rdi
leaq 0x24c474(%rip), %r15    # 0x3829a4
movq %r15, %rsi
movl $0x87, %edx
callq 0x109670
movq (%r14), %rdi
movq %r15, %rsi
movl $0x88, %edx
callq 0x109670
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x1365ad
movq 0x8(%rax), %rdi
leaq 0x24c443(%rip), %r15    # 0x3829a4
movq %r15, %rsi
movl $0x8b, %edx
callq 0x109670
movq 0x8(%r14), %rax
movq 0x10(%rax), %rdi
callq 0x16df09
movq 0x8(%r14), %rax
movq 0x18(%rax), %rdi
callq 0x16efbe
movq 0x8(%r14), %rax
movq (%rax), %rdi
movq %r15, %rsi
movl $0x8e, %edx
callq 0x109670
movq 0x8(%r14), %rdi
movq %r15, %rsi
movl $0x8f, %edx
callq 0x109670
leaq 0x24c3f0(%rip), %rsi    # 0x3829a4
movq %r14, %rdi
movl $0x91, %edx
callq 0x109670
xorl %ebx, %ebx
movq (%rsp), %r15
movq %rbx, 0x30(%r15)
movq 0x8(%r15), %r14
movq 0x38(%rsp), %rdi
callq 0x108f3c
movzbl %al, %edx
movq %r14, %rdi
movq 0x40(%rsp), %rsi
callq 0x15fbb5
movq 0x8(%r15), %rdi
callq 0x15eade
movq %rbx, 0x8(%r15)
callq 0x11ed94
testb %al, %al
je 0x136613
movq 0x38d97a(%rip), %rax    # 0x4c3f80
movq (%rax), %rsi
movq 0x8(%rsp), %rdi
callq 0x122c67
movq 0x8(%rsp), %rdi
callq 0x122d79
movl %ebp, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x3ec8a
callq 0x3ecfc
callq 0x3ecc3