Intermediate. Cleaned up the code a bit