Apache Wicket
Copyright 2006-2023 The Apache Software Foundation

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

This is an aggregated NOTICE file for the Apache Wicket projects included
in this distribution.

NB: DO NOT ADD LICENSES/NOTICES/ATTRIBUTIONS TO THIS FILE, BUT IN THE
    NOTICE FILE OF THE CORRESPONDING PROJECT. THE RELEASE PROCEDURE WILL
    AUTOMATICALLY INCLUDE THE NOTICE IN THIS FILE.

---------------------------------------------------------------------------
src/./wicket-guice
---------------------------------------------------------------------------
   Apache Wicket
   Copyright 2006-2023 Apache Software Foundation

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

   This product includes Guice, developed at Google, and licensed
   under the Apache License 2.0. (http://code.google.com/p/google-guice/).
---------------------------------------------------------------------------
src/./wicket-examples
---------------------------------------------------------------------------
   Apache Wicket Examples
   Copyright 2006-2023 Apache Software Foundation

   This product includes software developed at
   The Apache Software Foundation (http://www.apache.org/).
   
   Contains Script.aculo.us javascript library released under a MIT license.
   Copyright (c) 2005 Thomas Fuchs
   
   Contains prototype.js javascript library released under a MIT style license.
   (c) 2005 Sam Stephenson
   
   Contains behaviour.js javascript library released under BSD license.
   Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work
   of Simon Willison
   
   com.meterware.httpunit.ParsedHTML is taken from HttpUnit, released
   under a MIT style license.
   Copyright (c) 2000-2004, Russell Gold
   
   Contains software developed by the Dojo foundation.
   The dojo javascript is dual licensed under the AFL and BSD license.
   Included in this software under the BSD license.
   Copyright (c) 2004-2005, The Dojo Foundation

   This product includes software developed by the Spring Framework Project
   (http://www.springframework.org).

   This product includes software developed by the ByteBuddy Project
   (https://bytebuddy.net/).

   This product includes ASM, released under a BSD style license (https://asm.ow2.io/).
   Copyright (c) 2000-2011 INRIA, France Telecom

   This product includes jhighlight (https://jhighlight.dev.java.net/)
   which is released under CDDL 1.0 license (http://www.opensource.org/licenses/cddl1.php).

---------------------------------------------------------------------------
src/./wicket-core
---------------------------------------------------------------------------
   Apache Wicket
   Copyright 2006-2023 Apache Software Foundation

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

   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
   Copyright (c) 2004-2008 QOS.ch
   
   Contains Diff library from Mavens JRCS, released under
   The Apache Software License, Version 1.1.
   (c) 1999-2003

   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
   and has the following notice:
      "Licence:
       Use this however/wherever you like, just don't blame me if it breaks
       anything.

       Credit:
       If you're nice, you'll leave this bit:

       Class by Stickman -- http://www.the-stickman.com
       with thanks to:
       [for Safari fixes]
          Luis Torrefranca -- http://www.law.pitt.edu
          and
          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
       [for duplicate name bug]
          'neal'"
   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/

---------------------------------------------------------------------------
src/./wicket-metrics
---------------------------------------------------------------------------

   Apache Wicket Metrics
   Copyright 2006-2023 Apache Software Foundation

   This product includes software developed at
   The Apache Software Foundation (http://www.apache.org/).
   
   This product uses AspectJ, developed at Eclipse, and licensed
   under the Eclipse Public License. (https://eclipse.org/aspectj/).
