Source: https://courses.cs.washington.edu/courses/cse466/12au/calendar/09a-ErrorControlCodes.pdf