// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::vararg_function<std::allocator<exprtk::details::expression_node<double>*>, std::vector>(exprtk::details::operator_type const&, std::vector<exprtk::details::expression_node<double>*, std::allocator<exprtk::details::expression_node<double>*>>&)
inline expression_node_ptr vararg_function(const details::operator_type& operation,
                                                    Sequence<expression_node_ptr,Allocator>& arg_list)
         {
            if (!all_nodes_valid(arg_list))
            {
               details::free_all_nodes(*node_allocator_,arg_list);

               return error_node();
            }
            else if (is_constant_foldable(arg_list))
               return const_optimise_varargfunc(operation,arg_list);
            else if ((1 == arg_list.size()) && details::is_ivector_node(arg_list[0]))
               return vectorize_func(operation,arg_list);
            else if ((1 == arg_list.size()) && special_one_parameter_vararg(operation))
               return arg_list[0];
            else if (all_nodes_variables(arg_list))
               return varnode_optimise_varargfunc(operation,arg_list);

            #ifndef exprtk_disable_string_capabilities
            if (details::e_smulti == operation)
            {
               expression_node_ptr result = node_allocator_->
                 allocate<details::str_vararg_node<Type,details::vararg_multi_op<Type> > >(arg_list);
               if (result && result->valid())
               {
                  return result;
               }

               parser_->set_error(parser_error::make_error(
                  parser_error::e_synthesis,
                  token_t(),
                  "ERR262 - Failed to synthesize node: str_vararg_node<vararg_multi_op>",
                  exprtk_error_location));

               details::free_node(*node_allocator_, result);
            }
            else
            #endif
            {
               expression_node_ptr result = error_node();

               switch (operation)
               {
                  #define case_stmt(op0, op1)                                               \
                  case op0 : result = node_allocator_->                                     \
                                allocate<details::vararg_node<Type,op1<Type> > >(arg_list); \
                             break;                                                         \

                  case_stmt(details::e_sum   , details::vararg_add_op  )
                  case_stmt(details::e_prod  , details::vararg_mul_op  )
                  case_stmt(details::e_avg   , details::vararg_avg_op  )
                  case_stmt(details::e_min   , details::vararg_min_op  )
                  case_stmt(details::e_max   , details::vararg_max_op  )
                  case_stmt(details::e_mand  , details::vararg_mand_op )
                  case_stmt(details::e_mor   , details::vararg_mor_op  )
                  case_stmt(details::e_multi , details::vararg_multi_op)
                  #undef case_stmt
                  default : return error_node();
               }

               if (result && result->valid())
               {
                  return result;
               }

               parser_->set_error(parser_error::make_error(
                  parser_error::e_synthesis,
                  token_t(),
                  "ERR263 - Failed to synthesize node: vararg_node",
                  exprtk_error_location));

               details::free_node(*node_allocator_, result);
            }

            return error_node();
         }

// Assembly:
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rdi, 0x2e8(%rsp)
movq %rsi, 0x2e0(%rsp)
movq %rdx, 0x2d8(%rsp)
movq 0x2e8(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x39cd40
testb $0x1, %al
jne 0x39af95
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39cdc0
callq 0x2821f0
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x30(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39ce40
testb $0x1, %al
jne 0x39afad
jmp 0x39afd4
movq 0x30(%rsp), %rdi
movq 0x2e0(%rsp), %rsi
movq 0x2d8(%rsp), %rdx
callq 0x39f290
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x2d8(%rsp), %rdi
callq 0x39d0d0
movq %rax, %rcx
movl $0x1, %eax
cmpq %rcx, %rax
jne 0x39b034
movq 0x2d8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x39d110
movq (%rax), %rdi
callq 0x39f460
testb $0x1, %al
jne 0x39b00d
jmp 0x39b034
movq 0x30(%rsp), %rdi
movq 0x2e0(%rsp), %rsi
movq 0x2d8(%rsp), %rdx
callq 0x39f4e0
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x2d8(%rsp), %rdi
callq 0x39d0d0
movq %rax, %rcx
movl $0x1, %eax
cmpq %rcx, %rax
jne 0x39b087
movq 0x30(%rsp), %rdi
movq 0x2e0(%rsp), %rsi
callq 0x39f660
testb $0x1, %al
jne 0x39b066
jmp 0x39b087
movq 0x2d8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x39d110
movq (%rax), %rax
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x2d8(%rsp), %rdi
callq 0x39f6e0
testb $0x1, %al
jne 0x39b09a
jmp 0x39b0c1
movq 0x30(%rsp), %rdi
movq 0x2e0(%rsp), %rsi
movq 0x2d8(%rsp), %rdx
callq 0x39f780
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
jmp 0x39b0c3
jmp 0x39b0c5
jmp 0x39b0c7
jmp 0x39b0c9
movq 0x2e0(%rsp), %rcx
movl $0x5b, %eax
cmpl (%rcx), %eax
jne 0x39b315
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39f910
movq %rax, 0x2d0(%rsp)
cmpq $0x0, 0x2d0(%rsp)
je 0x39b130
movq 0x2d0(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
testb $0x1, %al
jne 0x39b11b
jmp 0x39b130
movq 0x2d0(%rsp), %rax
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x30(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, 0x20(%rsp)
leaq 0x1f8(%rsp), %rdi
callq 0x251250
leaq 0x1d7(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x11b6f0
movq 0x28(%rsp), %rdx
leaq 0x20c640(%rip), %rsi    # 0x5a77a9
leaq 0x1d8(%rsp), %rdi
callq 0x134520
jmp 0x39b178
leaq 0x180(%rsp), %rdi
movl $0x837a, %esi           # imm = 0x837A
callq 0x371f20
jmp 0x39b18c
leaq 0x20bd80(%rip), %rsi    # 0x5a6f13
leaq 0x1a0(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x29dd70
jmp 0x39b1aa
leaq 0x228(%rsp), %rdi
movl $0x7, %esi
leaq 0x1f8(%rsp), %rdx
leaq 0x1d8(%rsp), %rcx
leaq 0x1a0(%rsp), %r8
callq 0x3741e0
jmp 0x39b1d6
movq 0x20(%rsp), %rdi
leaq 0x228(%rsp), %rsi
callq 0x371e40
jmp 0x39b1ea
leaq 0x228(%rsp), %rdi
callq 0x371330
leaq 0x1a0(%rsp), %rdi
callq 0x11b838
leaq 0x180(%rsp), %rdi
callq 0x11b838
leaq 0x1d8(%rsp), %rdi
callq 0x11b838
leaq 0x1d7(%rsp), %rdi
callq 0x11b820
leaq 0x1f8(%rsp), %rdi
callq 0x2512e0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x2d0(%rsp), %rsi
callq 0x284bd0
jmp 0x39b6b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b2f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b2e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b2dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b2cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
leaq 0x228(%rsp), %rdi
callq 0x371330
leaq 0x1a0(%rsp), %rdi
callq 0x11b838
leaq 0x180(%rsp), %rdi
callq 0x11b838
leaq 0x1d8(%rsp), %rdi
callq 0x11b838
leaq 0x1d7(%rsp), %rdi
callq 0x11b820
leaq 0x1f8(%rsp), %rdi
callq 0x2512e0
jmp 0x39b6cf
callq 0x2821f0
movq %rax, 0x178(%rsp)
movq 0x2e0(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x1c(%rsp)
subl $0x9, %eax
je 0x39b408
jmp 0x39b33b
movl 0x1c(%rsp), %eax
subl $0xa, %eax
je 0x39b42b
jmp 0x39b34a
movl 0x1c(%rsp), %eax
subl $0xb, %eax
je 0x39b3e5
jmp 0x39b359
movl 0x1c(%rsp), %eax
subl $0xc, %eax
je 0x39b39f
jmp 0x39b364
movl 0x1c(%rsp), %eax
subl $0xd, %eax
je 0x39b3c2
jmp 0x39b36f
movl 0x1c(%rsp), %eax
subl $0x1c, %eax
je 0x39b44b
jmp 0x39b37e
movl 0x1c(%rsp), %eax
subl $0x1d, %eax
je 0x39b46b
jmp 0x39b38d
movl 0x1c(%rsp), %eax
subl $0x5a, %eax
je 0x39b48b
jmp 0x39b4ab
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39f990
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fa10
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fa90
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fb10
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fb90
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fc10
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fc90
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2d8(%rsp), %rsi
callq 0x39fd10
movq %rax, 0x178(%rsp)
jmp 0x39b4bd
callq 0x2821f0
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
cmpq $0x0, 0x178(%rsp)
je 0x39b4f1
movq 0x178(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
testb $0x1, %al
jne 0x39b4dc
jmp 0x39b4f1
movq 0x178(%rsp), %rax
movq %rax, 0x2f0(%rsp)
jmp 0x39b6bf
movq 0x30(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, 0x8(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x251250
leaq 0x7f(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x11b6f0
movq 0x10(%rsp), %rdx
leaq 0x20c2c7(%rip), %rsi    # 0x5a77ee
leaq 0x80(%rsp), %rdi
callq 0x134520
jmp 0x39b536
leaq 0x38(%rsp), %rdi
movl $0x839f, %esi           # imm = 0x839F
callq 0x371f20
jmp 0x39b547
leaq 0x20b9c5(%rip), %rsi    # 0x5a6f13
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x29dd70
jmp 0x39b55f
leaq 0xd0(%rsp), %rdi
movl $0x7, %esi
leaq 0xa0(%rsp), %rdx
leaq 0x80(%rsp), %rcx
leaq 0x58(%rsp), %r8
callq 0x3741e0
jmp 0x39b588
movq 0x8(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x371e40
jmp 0x39b59c
leaq 0xd0(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x7f(%rsp), %rdi
callq 0x11b820
leaq 0xa0(%rsp), %rdi
callq 0x2512e0
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x178(%rsp), %rsi
callq 0x284bd0
jmp 0x39b6b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b699
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b68c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b682
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
jmp 0x39b678
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c8(%rsp)
movl %eax, 0x1c4(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x7f(%rsp), %rdi
callq 0x11b820
leaq 0xa0(%rsp), %rdi
callq 0x2512e0
jmp 0x39b6cf
callq 0x2821f0
movq %rax, 0x2f0(%rsp)
movq 0x2f0(%rsp), %rax
addq $0x2f8, %rsp            # imm = 0x2F8
retq
movq 0x1c8(%rsp), %rdi
callq 0x11b4e0
nopl (%rax)