cpsc 310