This is a long one, but well worth the time.