##JavaScript (ES6), 156 … 117 115 bytes
Sadly, the infamous String.fromCharCode()
costs 19 bytes.
f=(x=y=k=0)=>k<95?String.fromCharCode(++x-22?y+1>>1^5&&(y<9?x/2^5:x-y>>1&&21-y-x>>1)?32:32+k++:(x=!++y,10))+f(x):''
console.log(f())
##JavaScript (ES6), 156 … 117 115 bytes
Sadly, the infamous String.fromCharCode()
costs 19 bytes.
f=(x=y=k=0)=>k<95?String.fromCharCode(++x-22?y+1>>1^5&&(y<9?x/2^5:x-y>>1&&21-y-x>>1)?32:32+k++:(x=!++y,10))+f(x):''
console.log(f())