// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::lexer::helper::sequence_validator::invalid_bracket_check(exprtk::lexer::token::token_type, exprtk::lexer::token::token_type)
bool invalid_bracket_check(const lexer::token::token_type base, const lexer::token::token_type t)
            {
               if (details::is_right_bracket(static_cast<details::char_t>(base)))
               {
                  switch (t)
                  {
                     case lexer::token::e_assign : return (']' != base);
                     case lexer::token::e_string : return (')' != base);
                     default                     : return false;
                  }
               }
               else if (details::is_left_bracket(static_cast<details::char_t>(base)))
               {
                  if (details::is_right_bracket(static_cast<details::char_t>(t)))
                     return false;
                  else if (details::is_left_bracket(static_cast<details::char_t>(t)))
                     return false;
                  else
                  {
                     switch (t)
                     {
                        case lexer::token::e_number  : return false;
                        case lexer::token::e_symbol  : return false;
                        case lexer::token::e_string  : return false;
                        case lexer::token::e_add     : return false;
                        case lexer::token::e_sub     : return false;
                        case lexer::token::e_colon   : return false;
                        case lexer::token::e_ternary : return false;
                        default                      : return true ;
                     }
                  }
               }
               else if (details::is_right_bracket(static_cast<details::char_t>(t)))
               {
                  switch (base)
                  {
                     case lexer::token::e_number  : return false;
                     case lexer::token::e_symbol  : return false;
                     case lexer::token::e_string  : return false;
                     case lexer::token::e_eof     : return false;
                     case lexer::token::e_colon   : return false;
                     case lexer::token::e_ternary : return false;
                     default                      : return true ;
                  }
               }
               else if (details::is_left_bracket(static_cast<details::char_t>(t)))
               {
                  switch (base)
                  {
                     case lexer::token::e_rbracket    : return true;
                     case lexer::token::e_rsqrbracket : return true;
                     case lexer::token::e_rcrlbracket : return true;
                     default                          : return false;
                  }
               }

               return false;
            }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movl %edx, 0x20(%rsp)
movl 0x24(%rsp), %eax
movsbl %al, %edi
callq 0x259630
testb $0x1, %al
jne 0x25cc93
jmp 0x25cce5
movl 0x20(%rsp), %eax
movl %eax, 0x1c(%rsp)
subl $0x9, %eax
je 0x25ccc4
jmp 0x25cca2
movl 0x1c(%rsp), %eax
subl $0xa, %eax
jne 0x25ccdb
jmp 0x25ccad
movl $0x5d, %eax
cmpl 0x24(%rsp), %eax
setne %al
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0x25ce79
movl $0x29, %eax
cmpl 0x24(%rsp), %eax
setne %al
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movl 0x24(%rsp), %eax
movsbl %al, %edi
callq 0x259690
testb $0x1, %al
jne 0x25ccfa
jmp 0x25cdaa
movl 0x20(%rsp), %eax
movsbl %al, %edi
callq 0x259630
testb $0x1, %al
jne 0x25cd0c
jmp 0x25cd16
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movl 0x20(%rsp), %eax
movsbl %al, %edi
callq 0x259690
testb $0x1, %al
jne 0x25cd28
jmp 0x25cd32
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movl 0x20(%rsp), %eax
addl $-0x7, %eax
movl %eax, %ecx
movq %rcx, 0x10(%rsp)
subl $0x38, %eax
ja 0x25cda0
movq 0x10(%rsp), %rax
leaq 0x33e5bf(%rip), %rcx    # 0x59b310
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x1, 0x37(%rsp)
jmp 0x25ce79
movl 0x20(%rsp), %eax
movsbl %al, %edi
callq 0x259630
testb $0x1, %al
jne 0x25cdbc
jmp 0x25ce1b
movl 0x24(%rsp), %eax
addl $-0x6, %eax
movl %eax, %ecx
movq %rcx, 0x8(%rsp)
subl $0x39, %eax
ja 0x25ce14
movq 0x8(%rsp), %rax
leaq 0x33e44d(%rip), %rcx    # 0x59b228
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
movb $0x1, 0x37(%rsp)
jmp 0x25ce79
movl 0x20(%rsp), %eax
movsbl %al, %edi
callq 0x259690
testb $0x1, %al
jne 0x25ce2d
jmp 0x25ce6e
movl 0x24(%rsp), %eax
movl %eax, 0x4(%rsp)
subl $0x29, %eax
je 0x25ce52
jmp 0x25ce3c
movl 0x4(%rsp), %eax
subl $0x5d, %eax
je 0x25ce59
jmp 0x25ce47
movl 0x4(%rsp), %eax
subl $0x7d, %eax
je 0x25ce60
jmp 0x25ce67
movb $0x1, 0x37(%rsp)
jmp 0x25ce79
movb $0x1, 0x37(%rsp)
jmp 0x25ce79
movb $0x1, 0x37(%rsp)
jmp 0x25ce79
movb $0x0, 0x37(%rsp)
jmp 0x25ce79
jmp 0x25ce70
jmp 0x25ce72
jmp 0x25ce74
movb $0x0, 0x37(%rsp)
movb 0x37(%rsp), %al
andb $0x1, %al
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nop