# File lib/mail/encodings.rb, line 115
    def Encodings.value_decode(str)
      # Optimization: If there's no encoded-words in the string, just return it
      return str unless str.index("=?")
      
      str = str.gsub(/\?=(\s*)=\?/, '?==?') # Remove whitespaces between 'encoded-word's

      # Split on white-space boundaries with capture, so we capture the white-space as well
      str.split(/([ \t])/).map do |text|
        if text.index('=?') .nil?
          text
        else
          # Join QP encoded-words that are adjacent to avoid decoding partial chars
          text.gsub!(/\?\=\=\?.+?\?[Qq]\?/m, '') if text =~ /\?==\?/
        
          # Separate encoded-words with a space, so we can treat them one by one
          text.gsub!(/\?\=\=\?/, '?= =?')
          text.split(/ /).map do |word|
            word.to_str.
              gsub(/=\?.+\?[Bb]\?.+\?=/m) {|substr| b_value_decode(substr)}.
              gsub(/=\?.+\?[Qq]\?.+\?=/m) {|substr| q_value_decode(substr)}
            end
        end
      end.join("")
    end