Copyright (c) 2015 Alan A. Block