Output would be - Start Async Start End Promise 1 Timeout 1 Async End Timeout 2
Explanation -
Firstly Synchronous Calls would be executed, therefore it would print start.
Then the synchronous call inside the Async function would be printed i.e. Async Start.
And further it would print another synchronous call i.e. End.
Now, Microtask runs before macrotasks, so it would print Promise 1.
Its the turn for Macrotask (setTimeout) runs and prints Timeout 1.
Now AsyncEnd is printed as its the turn of the async function to completely executed.
At the end another macrotask runs and prints Timeout 2.