=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0.                                                       ==
=========================================================================

The Apache Open For Business Project (Apache OFBiz)
Copyright 2001-2011 The Apache Software Foundation

=========================================================================
==  Apache General Notice (Covers OFBiz and all ASF libraries)         ==
=========================================================================

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

=========================================================================
==  Apache Ant Notice                                                  ==
=========================================================================

This product includes also software developed by :
  - the W3C consortium (http://www.w3c.org) ,
  - the SAX project (http://www.saxproject.org)

The <sync> task is based on code Copyright (c) 2002, Landmark
Graphics Corp that has been kindly donated to the Apache Software
Foundation.

=========================================================================
==  Apache Avalon Notice                                               ==
=========================================================================

This product is developed by the Apache Avalon Project.
http://avalon.apache.org

The names "Avalon" and "Merlin" must not be used to endorse or promote
products derived from this software without prior written permission.
For written permission, please contact pmc@avalon.apache.org.

=========================================================================
==  Apache Batik Notice                                                ==
=========================================================================

This software contains code from the World Wide Web Consortium (W3C) for the
Document Object Model API (DOM API) and SVG Document Type Definition (DTD).

This software contains code from the International Organisation for Standardization
for the definition of character entities used in the software's documentation.

=========================================================================
==  Apache Derby Notice                                                ==
=========================================================================

Portions of Derby were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Derby CLA".
The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.

(C) Copyright IBM Corp. 2003.

The portion of the functionTests under 'nist' was originally
developed by the National Institute of Standards and Technology (NIST),
an agency of the United States Department of Commerce, and adapted by
International Business Machines Corporation in accordance with the NIST
Software Acknowledgment and Redistribution document at
http://www.itl.nist.gov/div897/ctg/sql_form.htm

=========================================================================
==  Apache FOP Notice                                                  ==
=========================================================================

This software consists of voluntary contributions made by many individuals
on behalf of The Apache Software Foundation and was originally created by
James Tauber <jtauber@jtauber.com>.

=========================================================================
==  Apache Geronimo Notice                                             ==
=========================================================================

Portions of the Web Console were orginally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "IBM Console CLA".

The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 2004, 2005 International Business Machines Corporation.  All rights reserved.

=========================================================================
==  Apache Jackrabbit Notice                                           ==
=========================================================================

Apache Jackrabbit
Copyright 2010 The Apache Software Foundation

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

Based on source code originally developed by
Day Software (http://www.day.com/).

=========================================================================
==  Apache Log4J Notice                                                ==
=========================================================================

This product includes source code based on Sun
Microsystems' book titled "Java Nativer Interface:
Programmer's Guide and Specification" and freely available
to the public at http://java.sun.com/docs/books/jni.

=========================================================================
==  Apache Lucene Notice                                               ==
=========================================================================

The snowball stemmers in
  contrib/snowball/src/java/net/sf/snowball
were developed by Martin Porter and Richard Boulton.
The full snowball package is available from
  http://snowball.tartarus.org/

=========================================================================
==  Apache Tomcat Notice                                               ==
=========================================================================

Java compilation software for JSP pages is provided by Eclipse,
which is open source software.  The orginal software and
related infomation is available at
http://www.eclipse.org.

=========================================================================
==  Apache Xerces Java Notice                                          ==
=========================================================================

Portions of this software were originally based on the following:
  - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
  - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
  - voluntary contributions made by Paul Eng on behalf of the
    Apache Software Foundation that were originally developed at iClick, Inc.,
    software copyright (c) 1999.

=========================================================================
==  Apache Xalan distribution.                                         ==
=========================================================================

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

Portions of this software was originally based on the following:
 - software copyright (c) 1999-2002, Lotus Development Corporation.,
   http://www.lotus.com.
 - software copyright (c) 2001-2002, Sun Microsystems.,
   http://www.sun.com.
 - software copyright (c) 2003, IBM Corporation., http://www.ibm.com.
 - voluntary contributions made by Ovidiu Predescu <ovidiu@cup.hp.com> on
   behalf of the Apache Software Foundation that was originally developed
   at Hewlett Packard Company.
The binary distribution package (ie. jars, samples and documentation) of
this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt

 - Scott Hudson, Frank Flannery, C. Scott Ananian
     - CUP Parser Generator runtime (javacup\runtime) - see runtime.README.txt

The source distribution package (ie. all source and tools required to build
Xalan Java) of this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt
     - Ant - see ant.README.txt
     - Stylebook doc tool - see stylebook-1.0-b3_xalan-2.README.txt

 - Elliot Joel Berk and C. Scott Ananian
     - Lexical Analyzer Generator (JLex) - see JLex.README.txt

=========================================================================
==  Apache Xalan serializer                                            ==
=========================================================================

This product includes software developed by IBM Corporation (http://www.ibm.com)
and The Apache Software Foundation (http://www.apache.org/).

Portions of this software was originally based on the following:
  - software copyright (c) 1999-2002, Lotus Development Corporation.,
    http://www.lotus.com.
  - software copyright (c) 2001-2002, Sun Microsystems.,
    http://www.sun.com.
  - software copyright (c) 2003, IBM Corporation., http://www.ibm.com.

=========================================================================
==  Barcode4J Notice                                                   ==
=========================================================================

This product includes software developed for project
Krysalis (http://www.krysalis.org/).

This product includes software developed by the
JDOM Project (http://www.jdom.org/).

=========================================================================
==  Freemarker Notice                                                  ==
=========================================================================

This product includes software developed by the
Visigoth Software Society (http://www.visigoths.org/).

=========================================================================
==  Groovy Notice                                                      ==
=========================================================================

This product includes software developed by
The Groovy community (http://groovy.codehaus.org/).

=========================================================================
==  JDBM Notice                                                        ==
=========================================================================

This product includes software developed by the JDBM Project
(http://jdbm.sourceforge.net/).

=========================================================================
==  MX4J Notice                                                        ==
=========================================================================

This software consists of voluntary contributions made by many
individuals on behalf of the MX4J project.  For more information on
MX4J, please see <http://mx4j.sourceforge.net>

=========================================================================
==  PNG Behavior Notice                                                ==
=========================================================================

This product includes software developed by
WebFX (webfx.eae.net):

framework/images/webapp/images/pngbehavior.htc

=========================================================================
==  JSON-LIB Notice                                                    ==
=========================================================================

This product includes software developed by
Douglas Crockford (http://www.crockford.com).

=========================================================================
==  DataVision Notice                                                  ==
=========================================================================

Icons

DataVision uses graphic images developed by Sun. The image files are copied
into DataVision.jar.

Copyright 2000 by Sun Microsystems, Inc. All Rights Reserved.

Sun grants you (``Licensee'') a non-exclusive, royalty free, license to use,
and redistribute this software graphics artwork, as individual graphics or
as a collection, as part of software code or programs that you develop,
provided that i) this copyright notice and license accompany the software
graphics artwork; and ii) you do not utilize the software graphics artwork
in a manner which is disparaging to Sun. Unless enforcement is prohibited
by applicable law, you may not modify the graphics, and must use them true
to color and unmodified in every way.

This software graphics artwork is provided ``AS IS,'' without a warranty of
any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR
A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS
LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A
RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE GRAPHICS ARTWORK.

IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE,
PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL
OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE GRAPHICS
ARTWORK, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

If any of the above provisions are held to be in violation of applicable
law, void, or unenforceable in any jurisdiction, then such provisions are
waived to the extent necessary for this Disclaimer to be otherwise
enforceable in such jurisdiction.

=========================================================================
==  CoolTips Notice                                                    ==
=========================================================================
This product includes software developed by
Andrej Okonetschnikow (http://code.google.com/p/tooltips/).

========================================================================
==  JPIM Notice                                                       ==
========================================================================
This product includes software developed by jpim development team (
http://jpim.sourceforge.net/index.html)
-------------------------------------------
jpim is released under a modified BSD style license.

Java PIM Library (jpim)
Copyright (c) 2001-2003 jpim development team.
=========================================================================
==  JavaCC Notice                                                      ==
=========================================================================

This product includes software developed by the javacc team
(http://javacc.dev.java.net/).  The included version is 4.1.
=========================================================================
==  XPP3   Notice                                                      ==
=========================================================================

This product includes software developed by the Indiana University
Extreme! Lab (http://www.extreme.indiana.edu/).
=========================================================================
==  FamFamFam Notice                                                   ==
=========================================================================

This product includes images delevoped by Mark James <mjames@gmail.com>
Birmingham, UK. www.famfamfam.com

Creative Commons Attribution 2.5 License Generic.
http://creativecommons.org/licenses/by/2.5/

You are free:

    * to Share — to copy, distribute and transmit the work
    * to Remix — to adapt the work
    * to make commercial use of the work

Under the following conditions:

    * Attribution — You must attribute the work in the manner specified
      by the author or licensor (but not in any way that suggests that
      they endorse you or your use of the work).
    * Waiver — Any of the above conditions can be waived if you get
      permission from the copyright holder.
    * Public Domain — Where the work or any of its elements is in the 
      public domain under applicable law, that status is in no way 
      affected by the license.   
    * Other Rights — In no way are any of the following rights affected 
      by the license:
        * Your fair dealing or fair use rights, or other applicable copyright 
          exceptions and limitations;      
        * The author's moral rights;
        * Rights other persons may have either in the work itself or in how 
          the work is used, such as publicity or privacy rights.    
    * Notice — For any reuse or distribution, you must make clear to others 
      the license terms of this work. The best way to do this is with a link to 
      this web page. 
=========================================================================

This product includes software developed by Steven Levithan
(http://blog.stevenlevithan.com/archives/date-time-format). MIT license
=========================================================================

This product includes software developed by Matthew Eernisse (mde@fleegix.org)
and Open Source Applications Foundation. Licensed under the ASL2
https://github.com/mde/timezone-js
=========================================================================