contributed by CAS member, BC
credit to BC and DR
credit to BB and DR
credit to DR and CM
credit to DB and DR
All of the following are courtesy SS