   =========================================================================
   ==      NOTICE file for use with the Apache License, Version 2.0,      ==
   =========================================================================
   
   Apache JAMES Mime4j
   Copyright 2004-2008 The Apache Software Foundation
   
   This product includes software developed at
   The Apache Software Foundation (http://www.apache.org/).
   
   This product may include/use software, JUnit (http://www.junit.org/),
   developed by Kent Beck, Erich Gamma, and David Saff
   License: Common Public License Version 1.0
   (http://www.opensource.org/licenses/cpl.php)
