Vowels up, consonants down Challenge

You will be given a string that can contain lowercase letters, uppercase letters, or spaces. You have to turn the vowels (a, e, i, o, u) in the string to upper case and consonants to lower case. This applies whether or not the letter was originally upper case or lower case. Spaces remain as is. Note that "y" is a consonant.

Examples

Hello World -&gt; hEllO wOrld
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVXWYZ -&gt; AbcdEfghIjklmnOpqrstUvwxyz AbcdEfghIjklmnOpqrstUvxwyz


Info


The input string can contain letters A to Z, lowercase or uppercase, and spaces.


Input

The string

Output

The formatted string (Vowels uppercase and consonants lowercase).
JavaScript (Node.js),  55 ... 46  45 bytes
Saved 1 byte thanks to @KevinCruijssen
s=&gt;Buffer(s).map(c=&gt;c^(c^~68174912&gt;&gt;c)&amp;32)+''

Try it online!
How?
The constant \$68174912\$ is a bitmask describing the positions of the vowels:
00000100000100000100010001000000
     v     v     v   v   v
zyxwvutsrqponmlkjihgfedcba`_^]\[

As per the ECMAScript specification, the following expression:
~68174912 &gt;&gt; c &amp; 32

is equivalent to:
~68174912 &gt;&gt; (c % 32) &amp; 32

and therefore evaluates to \$32\$ for a consonant or \$0\$ for a vowel, no matter the case of \$c\$.
Commented
s =&gt;                   // s = input string
  Buffer(s)            // turn s into a buffer
  .map(c =&gt;            // for each ASCII code c:
    c ^                //   change the case if:
      ( c              //     c is not in lower case
        ^              //     XOR
        ~68174912 &gt;&gt; c //     c is a consonant
      ) &amp; 32           //
  ) + ''               // end of map(); coerce back to a string