Copyright (c) 2010-2016 Robert Kieffer and other contributors