initial setup
chapter 2 implementation
chapter 3 implementation