// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_swap_expression(exprtk::details::expression_node<double>* (&) [2])
inline expression_node_ptr synthesize_swap_expression(expression_node_ptr (&branch)[2])
         {
            const bool v0_is_ivar = details::is_ivariable_node(branch[0]);
            const bool v1_is_ivar = details::is_ivariable_node(branch[1]);

            const bool v0_is_ivec = details::is_ivector_node  (branch[0]);
            const bool v1_is_ivec = details::is_ivector_node  (branch[1]);

            #ifndef exprtk_disable_string_capabilities
            const bool v0_is_str = details::is_generally_string_node(branch[0]);
            const bool v1_is_str = details::is_generally_string_node(branch[1]);
            #endif

            expression_node_ptr result = error_node();
            std::string node_name      = "Unknown";

            if (v0_is_ivar && v1_is_ivar)
            {
               typedef details::variable_node<T>* variable_node_ptr;

               variable_node_ptr v0 = variable_node_ptr(0);
               variable_node_ptr v1 = variable_node_ptr(0);

               if (
                    (0 != (v0 = dynamic_cast<variable_node_ptr>(branch[0]))) &&
                    (0 != (v1 = dynamic_cast<variable_node_ptr>(branch[1])))
                  )
               {
                  result    = node_allocator_->allocate<details::swap_node<T> >(v0,v1);
                  node_name = "swap_node";
               }
               else
               {
                  result    = node_allocator_->allocate<details::swap_generic_node<T> >(branch[0],branch[1]);
                  node_name = "swap_generic_node";
               }
            }
            else if (v0_is_ivec && v1_is_ivec)
            {
               result    = node_allocator_->allocate<details::swap_vecvec_node<T> >(branch[0],branch[1]);
               node_name = "swap_vecvec_node";
            }
            #ifndef exprtk_disable_string_capabilities
            else if (v0_is_str && v1_is_str)
            {
               if (is_string_node(branch[0]) && is_string_node(branch[1]))
               {
                  result = node_allocator_->allocate<details::swap_string_node<T> >
                                               (branch[0], branch[1]);
                  node_name = "swap_string_node";
               }
               else
               {
                  result = node_allocator_->allocate<details::swap_genstrings_node<T> >
                                               (branch[0], branch[1]);
                  node_name = "swap_genstrings_node";
               }
            }
            #endif
            else
            {
               parser_->set_synthesis_error("Only variables, strings, vectors or vector elements can be swapped");
               return error_node();
            }

// Assembly:
subq $0x288, %rsp            # imm = 0x288
movq %rdi, 0x278(%rsp)
movq %rsi, 0x270(%rsp)
movq 0x278(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x270(%rsp), %rax
movq (%rax), %rdi
callq 0x3f1100
movb %al, 0x26f(%rsp)
movq 0x270(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x3f1100
movb %al, 0x26e(%rsp)
movq 0x270(%rsp), %rax
movq (%rax), %rdi
callq 0x39f460
movb %al, 0x26d(%rsp)
movq 0x270(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x39f460
movb %al, 0x26c(%rsp)
movq 0x270(%rsp), %rax
movq (%rax), %rdi
callq 0x3a7600
movb %al, 0x26b(%rsp)
movq 0x270(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x3a7600
movb %al, 0x26a(%rsp)
callq 0x2821f0
movq %rax, 0x260(%rsp)
leaq 0x23f(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x11b6f0
movq 0x88(%rsp), %rdx
leaq 0x1cab15(%rip), %rsi    # 0x5a7c1a
leaq 0x240(%rsp), %rdi
callq 0x134520
jmp 0x3dd114
leaq 0x23f(%rsp), %rdi
callq 0x11b820
testb $0x1, 0x26f(%rsp)
je 0x3dd2e3
testb $0x1, 0x26e(%rsp)
je 0x3dd2e3
movq $0x0, 0x220(%rsp)
movq $0x0, 0x218(%rsp)
movq 0x270(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x78(%rsp)
cmpq $0x0, %rax
je 0x3dd1b4
movq 0x78(%rsp), %rdi
leaq 0x38d069(%rip), %rsi    # 0x76a1e0
leaq 0x38d0aa(%rip), %rdx    # 0x76a228
xorl %eax, %eax
movl %eax, %ecx
callq 0x11b6d0
movq %rax, 0x70(%rsp)
jmp 0x3dd1bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x23f(%rsp), %rdi
callq 0x11b820
jmp 0x3dd802
xorl %eax, %eax
movq %rax, 0x70(%rsp)
jmp 0x3dd1bd
movq 0x70(%rsp), %rcx
movq %rcx, 0x220(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
je 0x3dd292
movq 0x270(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x68(%rsp)
cmpq $0x0, %rax
je 0x3dd20f
movq 0x68(%rsp), %rdi
leaq 0x38cfe8(%rip), %rsi    # 0x76a1e0
leaq 0x38d029(%rip), %rdx    # 0x76a228
xorl %eax, %eax
movl %eax, %ecx
callq 0x11b6d0
movq %rax, 0x60(%rsp)
jmp 0x3dd218
xorl %eax, %eax
movq %rax, 0x60(%rsp)
jmp 0x3dd218
movq 0x60(%rsp), %rcx
movq %rcx, 0x218(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
je 0x3dd292
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x218(%rsp), %rdx
callq 0x3f1240
movq %rax, 0x58(%rsp)
jmp 0x3dd254
movq 0x58(%rsp), %rax
movq %rax, 0x260(%rsp)
leaq 0x1ca9ba(%rip), %rsi    # 0x5a7c22
leaq 0x240(%rsp), %rdi
callq 0x11b340
jmp 0x3dd277
jmp 0x3dd2de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd7f5
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x270(%rsp), %rsi
movq %rsi, %rdx
addq $0x8, %rdx
callq 0x3f12d0
movq %rax, 0x50(%rsp)
jmp 0x3dd2b9
movq 0x50(%rsp), %rax
movq %rax, 0x260(%rsp)
leaq 0x1ca95f(%rip), %rsi    # 0x5a7c2c
leaq 0x240(%rsp), %rdi
callq 0x11b340
jmp 0x3dd2dc
jmp 0x3dd2de
jmp 0x3dd516
testb $0x1, 0x26d(%rsp)
je 0x3dd346
testb $0x1, 0x26c(%rsp)
je 0x3dd346
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x270(%rsp), %rsi
movq %rsi, %rdx
addq $0x8, %rdx
callq 0x3f1360
movq %rax, 0x48(%rsp)
jmp 0x3dd31e
movq 0x48(%rsp), %rax
movq %rax, 0x260(%rsp)
leaq 0x1ca90c(%rip), %rsi    # 0x5a7c3e
leaq 0x240(%rsp), %rdi
callq 0x11b340
jmp 0x3dd341
jmp 0x3dd514
testb $0x1, 0x26b(%rsp)
je 0x3dd440
testb $0x1, 0x26a(%rsp)
je 0x3dd440
movq 0x270(%rsp), %rax
movq (%rax), %rdi
callq 0x23c9a0
movb %al, 0x47(%rsp)
jmp 0x3dd378
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x3dd382
jmp 0x3dd3ef
movq 0x270(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x23c9a0
movb %al, 0x46(%rsp)
jmp 0x3dd399
movb 0x46(%rsp), %al
testb $0x1, %al
jne 0x3dd3a3
jmp 0x3dd3ef
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x270(%rsp), %rsi
movq %rsi, %rdx
addq $0x8, %rdx
callq 0x3f13f0
movq %rax, 0x38(%rsp)
jmp 0x3dd3ca
movq 0x38(%rsp), %rax
movq %rax, 0x260(%rsp)
leaq 0x1ca871(%rip), %rsi    # 0x5a7c4f
leaq 0x240(%rsp), %rdi
callq 0x11b340
jmp 0x3dd3ed
jmp 0x3dd43b
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x270(%rsp), %rsi
movq %rsi, %rdx
addq $0x8, %rdx
callq 0x3f1480
movq %rax, 0x30(%rsp)
jmp 0x3dd416
movq 0x30(%rsp), %rax
movq %rax, 0x260(%rsp)
leaq 0x1ca836(%rip), %rsi    # 0x5a7c60
leaq 0x240(%rsp), %rdi
callq 0x11b340
jmp 0x3dd439
jmp 0x3dd43b
jmp 0x3dd512
movq 0x80(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, 0x20(%rsp)
leaq 0x1f7(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x11b6f0
movq 0x28(%rsp), %rdx
leaq 0x1ca806(%rip), %rsi    # 0x5a7c75
leaq 0x1f8(%rsp), %rdi
callq 0x134520
jmp 0x3dd47e
movq 0x20(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x3e7640
jmp 0x3dd492
leaq 0x1f8(%rsp), %rdi
callq 0x11b838
leaq 0x1f7(%rsp), %rdi
callq 0x11b820
callq 0x2821f0
movq %rax, 0x280(%rsp)
movl $0x1, 0x1f0(%rsp)
jmp 0x3dd7d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd500
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x1f8(%rsp), %rdi
callq 0x11b838
leaq 0x1f7(%rsp), %rdi
callq 0x11b820
jmp 0x3dd7f5
jmp 0x3dd514
jmp 0x3dd516
cmpq $0x0, 0x260(%rsp)
je 0x3dd5ff
movq 0x260(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x1f(%rsp)
jmp 0x3dd53c
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x3dd549
jmp 0x3dd5ff
movq 0x80(%rsp), %rax
movq 0x68(%rax), %rax
addq $0x3a8, %rax            # imm = 0x3A8
movq %rax, 0x8(%rsp)
leaq 0x1cf(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x11b6f0
movq 0x10(%rsp), %rdx
leaq 0x1ca73a(%rip), %rsi    # 0x5a7cb8
leaq 0x1d0(%rsp), %rdi
callq 0x134520
jmp 0x3dd58d
movq 0x8(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x3eb500
leaq 0x1d0(%rsp), %rdi
callq 0x11b838
leaq 0x1cf(%rsp), %rdi
callq 0x11b820
movq 0x260(%rsp), %rax
movq %rax, 0x280(%rsp)
movl $0x1, 0x1f0(%rsp)
jmp 0x3dd7d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x1cf(%rsp), %rdi
callq 0x11b820
jmp 0x3dd7f5
movq 0x80(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, (%rsp)
leaq 0xf0(%rsp), %rdi
callq 0x251250
jmp 0x3dd61e
leaq 0x1ca6b0(%rip), %rsi    # 0x5a7cd5
leaq 0xd0(%rsp), %rdi
leaq 0x240(%rsp), %rdx
callq 0x3784f0
jmp 0x3dd63c
leaq 0x90(%rsp), %rdi
movl $0x8888, %esi           # imm = 0x8888
callq 0x371f20
jmp 0x3dd650
leaq 0x1c98bc(%rip), %rsi    # 0x5a6f13
leaq 0xb0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
callq 0x29dd70
jmp 0x3dd66e
leaq 0x120(%rsp), %rdi
movl $0x7, %esi
leaq 0xf0(%rsp), %rdx
leaq 0xd0(%rsp), %rcx
leaq 0xb0(%rsp), %r8
callq 0x3741e0
jmp 0x3dd69a
movq (%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x371e40
jmp 0x3dd6ad
leaq 0x120(%rsp), %rdi
callq 0x371330
leaq 0xb0(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0xd0(%rsp), %rdi
callq 0x11b838
leaq 0xf0(%rsp), %rdi
callq 0x2512e0
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x260(%rsp), %rsi
callq 0x284bd0
jmp 0x3dd709
callq 0x2821f0
movq %rax, 0x280(%rsp)
movl $0x1, 0x1f0(%rsp)
jmp 0x3dd7d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd7c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd7bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd7af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x3dd7a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x120(%rsp), %rdi
callq 0x371330
leaq 0xb0(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0xd0(%rsp), %rdi
callq 0x11b838
leaq 0xf0(%rsp), %rdi
callq 0x2512e0
jmp 0x3dd7f5
leaq 0x240(%rsp), %rdi
callq 0x11b838
movq 0x280(%rsp), %rax
addq $0x288, %rsp            # imm = 0x288
retq
leaq 0x240(%rsp), %rdi
callq 0x11b838
movq 0x230(%rsp), %rdi
callq 0x11b4e0
nop