// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk-extras/exprtk_truthtable_gen.cpp
// Function: void truth_table_generator<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void truth_table_generator(const std::string& boolean_expression)
{
   typedef exprtk::symbol_table<T>    symbol_table_t;
   typedef exprtk::expression<T>      expression_t;
   typedef exprtk::parser<T>          parser_t;
   typedef exprtk::parser_error::type err_t;
   typedef typename parser_t::settings_store settings_t;

   symbol_table_t symbol_table;

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   static const std::size_t compile_options =
      settings_t::e_replacer            +
      settings_t::e_joiner              +
      settings_t::e_numeric_check       +
      settings_t::e_bracket_check       +
      settings_t::e_sequence_check      +
      settings_t::e_strength_reduction  +
      settings_t::e_disable_usr_on_rsrvd;

   parser_t parser(settings_t(compile_options)
                     .disable_all_base_functions    ()
                     .disable_all_control_structures());

   parser.enable_unknown_symbol_resolver();

   parser.dec().collect_variables() = true;
   parser.dec().collect_functions() = true;

   if (!parser.compile(boolean_expression,expression))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             boolean_expression.c_str());

      for (std::size_t i = 0; i < parser.error_count(); ++i)
      {
         err_t error = parser.get_error(i);

         printf("Error: %02d Position: %02d "
                "Type: [%s] "
                "Message: %s "
                "Expression: %s\n",
                static_cast<int>(i),
                static_cast<int>(error.token.position),
                exprtk::parser_error::to_str(error.mode).c_str(),
                error.diagnostic.c_str(),
                boolean_expression.c_str());

         exprtk::parser_error::update_error(error,boolean_expression);

         printf("Error[%02d] at line: %d column: %d\n",
                static_cast<int>(i),
                static_cast<int>(error.line_no),
                static_cast<int>(error.column_no));
      }

      return;
   }

   typedef typename parser_t::dependent_entity_collector::symbol_t dec_symbol_t;

   std::deque<dec_symbol_t> symbol_list;

   parser.dec().symbols(symbol_list);

   if (symbol_list.empty())
   {
      printf("Error: No variables found to build truth table.\n");
      return;
   }

   for (std::size_t i = 0; i < symbol_list.size(); ++i)
   {
      if (exprtk::details::imatch(symbol_list[i].first,"not"))
      {
         symbol_list.erase(symbol_list.begin() + i);

         if (i >= symbol_list.size())
            break;
      }

      if (parser_t::e_st_function == symbol_list[i].second)
      {
         printf("Error: call to function '%s' not allowed.\n",symbol_list[i].first.c_str());
         return;
      }
   }

   if (symbol_list.size() > 32)
   {
      printf("Error: no more than 32 unique variables allowed.\n");
      return;
   }

   unsigned int upper_bound = 1 << symbol_list.size();

   const int index_width = static_cast<int>(std::ceil(std::log10(upper_bound)));

   // Print truth table header
   printf(" #%s ",std::string(index_width - 1,' ').c_str());

   for (std::size_t i = 0; i < symbol_list.size(); ++i)
   {
      printf("| %s ",symbol_list[i].first.c_str());
   }

   printf("| %s \n",boolean_expression.c_str());

   for (std::size_t i = 0; i < upper_bound; ++i)
   {
      for (std::size_t j = 0; j < symbol_list.size(); ++j)
      {
         symbol_table.get_variable(symbol_list[j].first)->ref() = T((i & (1 << (symbol_list.size() - j - 1))) ? 0 : 1);
      }

      const std::size_t result = static_cast<std::size_t>(expression.value());

      printf(" %*d ", index_width, static_cast<int>(i));

      for (std::size_t j = 0; j < symbol_list.size(); ++j)
      {
         printf("| %d ",static_cast<int>(symbol_table.get_variable(symbol_list[j].first)->value()));
      }

      printf("| %d \n", static_cast<int>(result));
   }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xaf8, %rsp            # imm = 0xAF8
movq %rdi, 0x10(%rsp)
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movl $0x1, %esi
callq 0x11820e
leaq 0x40(%rsp), %rdi
callq 0x118256
movq 0x48(%rsp), %rax
movq 0x50(%rsp), %rcx
subq %rax, %rcx
je 0x117462
sarq $0x3, %rcx
movq 0x8(%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %r14, %rax
je 0x117471
cmpq (%rax), %rdx
je 0x117471
addq $0x8, %rax
decq %rcx
jne 0x11744f
leaq 0x48(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x11b7b0
leaq 0x60(%rsp), %rdi
movl $0x85f, %esi            # imm = 0x85F
callq 0x1182e2
leaq 0x70(%rsp), %r14
movq 0x18(%r14), %rcx
leaq 0x2eddd0(%rip), %rdi    # 0x405260
leaq 0x2ee509(%rip), %rsi    # 0x4059a0
movq %r14, %rdx
callq 0x11ba2a
leaq 0xa0(%rsp), %r15
movq 0x18(%r15), %rcx
leaq 0x2ee60e(%rip), %rdi    # 0x405ac0
leaq 0x2ee6c7(%rip), %rsi    # 0x405b80
movq %r15, %rdx
callq 0x11ba2a
leaq 0x1d0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1183e2
leaq 0x160(%rsp), %rdi
callq 0x11b9b2
leaq 0x130(%rsp), %rdi
callq 0x11b9b2
leaq 0x100(%rsp), %rdi
callq 0x11b9b2
leaq 0xd0(%rsp), %rdi
callq 0x11b9b2
movq %r15, %rdi
callq 0x11b9b2
movq %r14, %rdi
callq 0x11b9b2
leaq 0x5b0(%rsp), %rax
movb $0x1, -0x18(%rax)
movq %rax, -0x8(%rax)
movw $0x101, -0x128(%rax)    # imm = 0x101
leaq 0x1d0(%rsp), %rdi
leaq 0x40(%rsp), %rdx
movq 0x10(%rsp), %rsi
callq 0x118c06
testb %al, %al
je 0x117904
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %esi, %esi
callq 0x2a0d8a
leaq 0x480(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1199da
movq 0x70(%rsp), %r8
movq 0x90(%rsp), %rax
cmpq %r8, %rax
je 0x11799d
leaq 0x28(%rsp), %r15
leaq 0x60(%rsp), %rcx
movq 0x28(%rcx), %rdi
xorl %r13d, %r13d
movabsq $-0x3333333333333333, %r9 # imm = 0xCCCCCCCCCCCCCCCD
leaq 0x190216(%rip), %r12    # 0x2a77d7
movq 0xa8(%rsp), %rcx
movq %rcx, %rdx
subq %rdi, %rdx
sarq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
movq 0x80(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
subq 0x98(%rsp), %rax
sarq $0x3, %rax
imulq %r9, %rax
leaq (%rax,%rdx,4), %rax
subq %r8, %rcx
sarq $0x3, %rcx
imulq %r9, %rcx
addq %rax, %rcx
cmpq %rcx, %r13
jae 0x117963
movq %r8, %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
imulq %r9, %rcx
addq %r13, %rcx
js 0x11763e
cmpq $0xb, %rcx
ja 0x11765a
leaq (,%r13,4), %rax
addq %r13, %rax
leaq (%r8,%rax,8), %rbx
jmp 0x117681
movq %rcx, %rax
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
jmp 0x11766e
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rdi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rbx
movq %r15, 0x18(%rsp)
leaq 0x18(%rsp), %rdi
movq %r12, %rsi
leaq 0x190145(%rip), %rdx    # 0x2a77da
callq 0x118178
movq 0x8(%rbx), %r14
cmpq 0x20(%rsp), %r14
jne 0x1176f0
movq 0x18(%rsp), %rbp
testq %r14, %r14
je 0x1176f9
movq (%rbx), %r12
decq %r14
xorl %r15d, %r15d
movsbl (%r12,%r15), %edi
callq 0x114410
movl %eax, %ebx
movsbl (%rbp,%r15), %edi
callq 0x114410
cmpl %eax, %ebx
sete %bl
jne 0x1176e2
leaq 0x1(%r15), %rax
cmpq %r15, %r14
movq %rax, %r15
jne 0x1176b8
leaq 0x28(%rsp), %r15
leaq 0x1900e9(%rip), %r12    # 0x2a77d7
jmp 0x1176fb
movq 0x18(%rsp), %rbp
xorl %ebx, %ebx
jmp 0x1176fb
movb $0x1, %bl
cmpq %r15, %rbp
je 0x117710
movq 0x28(%rsp), %rsi
incq %rsi
movq %rbp, %rdi
callq 0x114090
movq 0x70(%rsp), %r8
movq 0x88(%rsp), %rdi
testb %bl, %bl
je 0x11775a
movq %r8, %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
movabsq $-0x3333333333333333, %rax # imm = 0xCCCCCCCCCCCCCCCD
imulq %rax, %rcx
addq %r13, %rcx
js 0x11776c
cmpq $0xb, %rcx
ja 0x117788
leaq (,%r13,4), %rax
addq %r13, %rax
leaq (%r8,%rax,8), %rcx
movq (%rdi), %rax
jmp 0x1177b5
movq %r8, %rsi
movabsq $-0x3333333333333333, %r9 # imm = 0xCCCCCCCCCCCCCCCD
jmp 0x117859
movq %rcx, %rax
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
jmp 0x11779c
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
leaq (%rdi,%rdx,8), %rdi
movq (%rdi), %rax
imulq $-0x1e0, %rdx, %rdx     # imm = 0xFE20
addq %rax, %rdx
leaq (%rcx,%rcx,4), %rcx
leaq (%rdx,%rcx,8), %rcx
movq %rcx, 0x18(%rsp)
movq %rax, 0x20(%rsp)
addq $0x1e0, %rax            # imm = 0x1E0
movq %rax, 0x28(%rsp)
movq %rdi, 0x30(%rsp)
leaq 0x1b0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
leaq 0x18(%rsp), %rdx
callq 0x2a1cea
movq 0xa8(%rsp), %rax
movq 0x88(%rsp), %rdi
movq %rax, %rcx
subq %rdi, %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x90(%rsp), %rax
subq 0x98(%rsp), %rax
leaq (%rcx,%rcx,2), %rcx
sarq $0x3, %rax
movabsq $-0x3333333333333333, %r9 # imm = 0xCCCCCCCCCCCCCCCD
imulq %r9, %rax
leaq (%rax,%rcx,4), %rax
movq 0x70(%rsp), %rsi
movq 0x80(%rsp), %rcx
subq %rsi, %rcx
sarq $0x3, %rcx
imulq %r9, %rcx
addq %rax, %rcx
movq %rsi, %r8
cmpq %rcx, %r13
jae 0x117963
subq 0x78(%rsp), %rsi
sarq $0x3, %rsi
imulq %r9, %rsi
addq %r13, %rsi
js 0x117889
cmpq $0xc, %rsi
jae 0x1178b0
leaq (,%r13,4), %rax
addq %r13, %rax
cmpl $0x5, 0x20(%r8,%rax,8)
jne 0x1178f4
jmp 0x1180a2
movq %rsi, %rax
notq %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x3, %rdx
notq %rdx
movq (%rdi,%rdx,8), %rcx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
jmp 0x1178d6
movq %rsi, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
movq %rdx, %rax
shrq $0x3, %rax
andq $-0x8, %rdx
movq (%rdi,%rdx), %rcx
imulq $-0x1e0, %rax, %rax     # imm = 0xFE20
leaq (%rcx,%rax), %rdx
leaq (%rsi,%rsi,4), %r9
cmpl $0x5, 0x20(%rdx,%r9,8)
movabsq $-0x3333333333333333, %r9 # imm = 0xCCCCCCCCCCCCCCCD
je 0x118095
incq %r13
movq 0x90(%rsp), %rax
jmp 0x1175c1
movq 0x4e8(%rsp), %r8
movabsq $-0x30c30c30c30c30c3, %r15 # imm = 0xCF3CF3CF3CF3CF3D
cmpq %r8, 0x508(%rsp)
je 0x117976
movq 0x500(%rsp), %rsi
movq %r8, %rcx
subq 0x4f0(%rsp), %rcx
movq %rcx, %rax
sarq $0x3, %rax
imulq %r15, %rax
cmpq $-0xa7, %rcx
jl 0x1179ae
cmpq $0x3, %rax
jb 0x1179d2
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x1179c4
cmpq $0x21, %rcx
jb 0x117c2a
leaq 0x194bc1(%rip), %rdi    # 0x2ac535
jmp 0x1179a4
movq %r14, 0x60(%rsp)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, 0x70(%rsp)
movq $0x8, 0x68(%rsp)
movb $0x0, 0x78(%rsp)
movq %r14, %rsi
jmp 0x1179ef
leaq 0x194bc2(%rip), %rdi    # 0x2ac566
callq 0x1144e0
jmp 0x1180b7
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
imulq $-0x1f8, %rdx, %r8      # imm = 0xFE08
addq (%rsi,%rdx,8), %r8
addq %rcx, %r8
leaq 0x60(%rsp), %rdi
movq %r14, (%rdi)
movq 0x38(%r8), %rsi
movq 0x40(%r8), %rdx
addq %rsi, %rdx
callq 0x11a5b4
movq 0x60(%rsp), %rsi
movq 0x10(%rsp), %rax
movq (%rax), %rdx
leaq 0x18ff63(%rip), %rdi    # 0x2a7961
xorl %eax, %eax
callq 0x114050
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x117a1c
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x114090
movq $-0x1, %r12
leaq 0x60(%rsp), %r14
xorl %r13d, %r13d
xorl %ebp, %ebp
movq 0x520(%rsp), %rax
movq 0x500(%rsp), %rdi
movq %rax, %rcx
subq %rdi, %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x508(%rsp), %rcx
subq 0x510(%rsp), %rcx
sarq $0x3, %rcx
imulq %r15, %rcx
addq %rax, %rcx
movq 0x4e8(%rsp), %rsi
movq 0x4f8(%rsp), %rax
subq %rsi, %rax
sarq $0x3, %rax
imulq %r15, %rax
addq %rcx, %rax
cmpq %rax, %rbp
jae 0x1180c1
movq %rsi, %rdx
subq 0x4f0(%rsp), %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
movq %rbp, %rcx
addq %rdx, %rcx
js 0x117abb
cmpq $0x2, %rcx
ja 0x117ad6
addq %r13, %rsi
jmp 0x117afe
movq %r12, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
jmp 0x117ae9
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
imulq $-0x1f8, %rdx, %rax     # imm = 0xFE08
addq (%rdi,%rdx,8), %rax
imulq $0xa8, %rcx, %rsi
addq %rax, %rsi
movq %r14, %rdi
callq 0x17dec8
movq 0x88(%rsp), %rbx
movl 0x90(%rsp), %esi
leaq 0x18(%rsp), %rdi
callq 0x1197a1
movq 0x18(%rsp), %rcx
movq 0x98(%rsp), %r8
movq 0x10(%rsp), %rax
movq (%rax), %r9
leaq 0x18fe40(%rip), %rdi    # 0x2a797b
movl %ebp, %esi
movl %ebx, %edx
xorl %eax, %eax
callq 0x114050
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x117b62
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x114090
movq %r14, %rdi
movq 0x10(%rsp), %rsi
callq 0x11984e
movl 0xf8(%rsp), %edx
movl 0x100(%rsp), %ecx
leaq 0x18fe39(%rip), %rdi    # 0x2a79bd
movl %ebp, %esi
xorl %eax, %eax
callq 0x114050
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x117bb2
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x114090
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x117bd7
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x114090
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x117bfc
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x114090
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x117c18
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x114090
incq %rbp
addq $0xa8, %r13
decq %r12
jmp 0x117a2d
movl $0x1, %ebx
shll %cl, %ebx
xorps %xmm0, %xmm0
cvtsi2sd %rbx, %xmm0
callq 0x114250
callq 0x114510
cvttsd2si %xmm0, %eax
movq %rax, 0x38(%rsp)
decl %eax
movslq %eax, %rsi
leaq 0x18(%rsp), %rdi
movq %r15, (%rdi)
movl $0x20, %edx
callq 0x1142a0
movq 0x18(%rsp), %rsi
leaq 0x18fd9d(%rip), %rdi    # 0x2a7a0c
xorl %eax, %eax
callq 0x114050
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x117c8d
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x114090
movq $-0x1, %r14
leaq 0x18fd77(%rip), %r15    # 0x2a7a12
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0xa8(%rsp), %rax
movq 0x88(%rsp), %rsi
movq %rax, %rcx
subq %rsi, %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x90(%rsp), %rcx
subq 0x98(%rsp), %rcx
sarq $0x3, %rcx
movabsq $-0x3333333333333333, %rdi # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdi, %rcx
leaq (%rcx,%rax,4), %rcx
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %rdi, %rdx
addq %rcx, %rdx
cmpq %rdx, %r13
jae 0x117d93
movq %rax, %rdx
subq 0x78(%rsp), %rdx
sarq $0x3, %rdx
imulq %rdi, %rdx
movq %r13, %rcx
addq %rdx, %rcx
js 0x117d34
cmpq $0xb, %rcx
ja 0x117d50
addq %r12, %rax
jmp 0x117d77
movq %r14, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
jmp 0x117d64
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rax
movq (%rax), %rsi
movq %r15, %rdi
xorl %eax, %eax
callq 0x114050
incq %r13
addq $0x28, %r12
decq %r14
jmp 0x117ca1
movq 0x10(%rsp), %rax
movq (%rax), %rsi
leaq 0x18fc76(%rip), %rdi    # 0x2a7a18
xorl %eax, %eax
callq 0x114050
movl %ebx, %eax
movq %rax, 0x10(%rsp)
xorl %r13d, %r13d
movq $-0x1, %r15
xorl %r14d, %r14d
xorl %r12d, %r12d
movabsq $-0x3333333333333333, %rdi # imm = 0xCCCCCCCCCCCCCCCD
movq 0xa8(%rsp), %rax
movq 0x88(%rsp), %rsi
movq %rax, %rcx
subq %rsi, %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x90(%rsp), %rcx
subq 0x98(%rsp), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
leaq (%rcx,%rax,4), %rax
movq 0x70(%rsp), %rbx
movq 0x80(%rsp), %rbp
subq %rbx, %rbp
sarq $0x3, %rbp
imulq %rdi, %rbp
addq %rax, %rbp
cmpq %rbp, %r12
jae 0x117efb
movq %rbx, %rdx
subq 0x78(%rsp), %rdx
sarq $0x3, %rdx
imulq %rdi, %rdx
movq %r12, %rcx
addq %rdx, %rcx
js 0x117e53
cmpq $0xb, %rcx
ja 0x117e6f
addq %r14, %rbx
jmp 0x117e96
movq %r15, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
jmp 0x117e83
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rbx
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movl $0x1f0, %eax            # imm = 0x1F0
addq %rax, %rdi
movq %rbx, %rsi
callq 0x263bd8
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0x24f496
addl %r15d, %ebp
movl $0x1, %edx
movl %ebp, %ecx
shll %cl, %edx
movslq %edx, %rcx
movsd 0x18b139(%rip), %xmm0   # 0x2a3010
testq %rcx, %r13
je 0x117ee0
xorpd %xmm0, %xmm0
movq 0x48(%rax), %rax
movq 0x28(%rax), %rax
movsd %xmm0, (%rax)
incq %r12
addq $0x28, %r14
decq %r15
jmp 0x117dc0
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
cvttsd2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x18b0ea(%rip), %xmm0   # 0x2a3008
cvttsd2si %xmm0, %rbp
andq %rcx, %rbp
orq %rax, %rbp
leaq 0x18faef(%rip), %rdi    # 0x2a7a1f
movq 0x38(%rsp), %rsi
movl %r13d, %edx
xorl %eax, %eax
callq 0x114050
movq $-0x1, %r14
xorl %r15d, %r15d
xorl %r12d, %r12d
movq 0xa8(%rsp), %rax
movq 0x88(%rsp), %rsi
movq %rax, %rcx
subq %rsi, %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x90(%rsp), %rcx
subq 0x98(%rsp), %rcx
sarq $0x3, %rcx
movabsq $-0x3333333333333333, %rdi # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdi, %rcx
leaq (%rcx,%rax,4), %rax
movq 0x70(%rsp), %rbx
movq 0x80(%rsp), %rcx
subq %rbx, %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rax, %rcx
cmpq %rcx, %r12
jae 0x118075
movq %rbx, %rdx
subq 0x78(%rsp), %rdx
sarq $0x3, %rdx
imulq %rdi, %rdx
movq %r12, %rcx
addq %rdx, %rcx
js 0x117fdf
cmpq $0xb, %rcx
ja 0x117ffb
addq %r15, %rbx
jmp 0x118022
movq %r14, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
jmp 0x11800f
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rbx
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movl $0x1f0, %eax            # imm = 0x1F0
addq %rax, %rdi
movq %rbx, %rsi
callq 0x263bd8
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0x24f496
movq 0x48(%rax), %rax
movq 0x28(%rax), %rax
cvttsd2si (%rax), %esi
leaq 0x18f9c6(%rip), %rdi    # 0x2a7a25
xorl %eax, %eax
callq 0x114050
incq %r12
addq $0x28, %r15
decq %r14
jmp 0x117f4c
leaq 0x18f9af(%rip), %rdi    # 0x2a7a2b
movl %ebp, %esi
xorl %eax, %eax
callq 0x114050
incq %r13
cmpq 0x10(%rsp), %r13
jne 0x117db3
jmp 0x1180b7
addq %rcx, %rax
leaq (%rsi,%rsi,4), %rcx
leaq (%rax,%rcx,8), %rax
jmp 0x1180a6
leaq (%r8,%rax,8), %rax
movq (%rax), %rsi
leaq 0x18f931(%rip), %rdi    # 0x2a79e1
xorl %eax, %eax
callq 0x114050
leaq 0x60(%rsp), %rdi
callq 0x119b78
leaq 0x1d0(%rsp), %rdi
callq 0x119bc2
leaq 0x40(%rsp), %rdi
callq 0x119e84
leaq 0x8(%rsp), %rdi
callq 0x119ed2
addq $0xaf8, %rsp            # imm = 0xAF8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x118137
jmp 0x11811f
jmp 0x118137
jmp 0x11811f
jmp 0x118100
jmp 0x11811f
movq %rax, %rbx
jmp 0x118151
movq %rax, %rbx
jmp 0x11815b
jmp 0x118137
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118bbe
jmp 0x118151
jmp 0x118137
jmp 0x118137
movq %rax, %rbx
jmp 0x118144
jmp 0x118126
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x119970
jmp 0x118144
jmp 0x118137
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x119b78
leaq 0x1d0(%rsp), %rdi
callq 0x119bc2
leaq 0x40(%rsp), %rdi
callq 0x119e84
leaq 0x8(%rsp), %rdi
callq 0x119ed2
movq %rbx, %rdi
callq 0x1142f0