// File: /workspace/github_cpp_makefile_star2_O1/demon386[P]git-store/./boost/token_functions.hpp
// Function: bool boost::char_separator<char, std::char_traits<char>>::operator()<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
bool operator()(InputIterator& next, InputIterator end, Token& tok)
    {
      typedef tokenizer_detail::assign_or_plus_equal<
        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<
          InputIterator
        >::iterator_category
      > assigner;

      assigner::clear(tok);

      // skip past all dropped_delims
      if (m_empty_tokens == drop_empty_tokens)
        for (; next != end  && is_dropped(*next); ++next)
          { }

      InputIterator start(next);

      if (m_empty_tokens == drop_empty_tokens) {

        if (next == end)
          return false;


        // if we are on a kept_delims move past it and stop
        if (is_kept(*next)) {
          assigner::plus_equal(tok,*next);
          ++next;
        } else
          // append all the non delim characters
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
      }
      else { // m_empty_tokens == keep_empty_tokens

        // Handle empty token at the end
        if (next == end)
        {
          if (m_output_done == false)
          {
            m_output_done = true;
            assigner::assign(start,next,tok);
            return true;
          }
          else
            return false;
        }

        if (is_kept(*next)) {
          if (m_output_done == false)
            m_output_done = true;
          else {
            assigner::plus_equal(tok,*next);
            ++next;
            m_output_done = false;
          }
        }
        else if (m_output_done == false && is_dropped(*next)) {
          m_output_done = true;
        }
        else {
          if (is_dropped(*next))
            start=++next;
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
          m_output_done = true;
        }
      }
      assigner::assign(start,next,tok);
      return true;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r13
movq %rsi, %r14
movq %rdi, %r12
cmpl $0x0, 0x44(%rdi)
setne %cl
movq (%rsi), %rax
cmpq %rdx, %rax
sete %dl
orb %cl, %dl
jne 0x18069
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181ac
testb %al, %al
je 0x18069
movq (%r14), %rax
incq %rax
movq %rax, (%r14)
cmpq %r13, %rax
jne 0x1804c
movq (%r14), %r15
cmpl $0x0, 0x44(%r12)
je 0x180a1
cmpq %r13, %r15
je 0x180f2
movsbl (%r15), %esi
movq %r12, %rdi
callq 0x181e6
movb 0x48(%r12), %cl
testb %al, %al
je 0x18102
testb %cl, %cl
je 0x18118
incq (%r14)
movb $0x0, 0x48(%r12)
jmp 0x1811e
cmpq %r13, %r15
je 0x180fe
movsbl (%r15), %esi
movq %r12, %rdi
callq 0x181e6
movq (%r14), %rcx
testb %al, %al
je 0x180c1
incq %rcx
movq %rcx, (%r14)
jmp 0x1811e
cmpq %r13, %rcx
je 0x1811e
movsbl (%rcx), %esi
movq %r12, %rdi
callq 0x181ac
testb %al, %al
jne 0x1811e
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181e6
testb %al, %al
jne 0x1811e
movq (%r14), %rcx
incq %rcx
movq %rcx, (%r14)
jmp 0x180c1
cmpb $0x0, 0x48(%r12)
je 0x18195
xorl %eax, %eax
jmp 0x18137
testb %cl, %cl
jne 0x18146
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181ac
testb %al, %al
je 0x18146
movb $0x1, 0x48(%r12)
movq (%r14), %r8
movq 0x8(%rbx), %rdx
subq %r15, %r8
movq %rbx, %rdi
xorl %esi, %esi
movq %r15, %rcx
callq 0xb4f0
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181ac
testb %al, %al
je 0x18161
movq (%r14), %r15
incq %r15
movq %r15, (%r14)
movq (%r14), %rax
cmpq %r13, %rax
je 0x18118
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181ac
testb %al, %al
jne 0x18118
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x181e6
testb %al, %al
jne 0x18118
movq (%r14), %rax
incq %rax
movq %rax, (%r14)
jmp 0x18164
movb $0x1, 0x48(%r12)
movq 0x8(%rbx), %rdx
movq %rbx, %rdi
xorl %esi, %esi
movq %r15, %rcx
xorl %r8d, %r8d
jmp 0x18130