##JavaScript (ES6), <s>156</s> <s>144</s> <s>136</s> <s>134</s> 121 bytes

Sadly, the infamous `String.fromCharCode()` costs 19 bytes.

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

    f=(x=y=!(k=32))=>k<127?(++x-22?String.fromCharCode(y+1>>1^5&&(y<9?x>>1^5:x-y>>1&&21-y-x>>1)?32:k++):(x=!++y,`
    `))+f(x):''

    console.log(f())

<!-- end snippet -->