Apache Open Climate Workbench
Copyright 2018 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.

This product includes work released as public domain by Yannick Copin
(ycopin on Github). For details please see:
    https://gist.github.com/ycopin/3342888
    https://github.com/ycopin
    http://snovae.in2p3.fr/ycopin/
