Apache Open Climate Workbench
Copyright 2014 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

obs4MIPs
Copyright © 2012-2014 United States Government as represented by 
the Administrator of the National Aeronautics and Space Administration. 
All Other Rights Reserved.
