Apache Avro
Copyright 2010-2015 The Apache Software Foundation

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

Based upon the representations of upstream licensors, it is understood that
portions of the mapreduce API included in the Java implementation are licensed
from various contributors under one or more contributor license agreements to
Odiago, Inc. and were then contributed by Odiago to Apache Avro, which has now
made them available under the Apache 2.0 license. The original file header text
is:

| Licensed to Odiago, Inc. under one or more contributor license
| agreements.  See the NOTICE file distributed with this work for
| additional information regarding copyright ownership.  Odiago, Inc.
| licenses this file to you under the Apache License, Version 2.0
| (the "License"); you may not use this file except in compliance
| with the License.  You may obtain a copy of the License at
|
|     https://www.apache.org/licenses/LICENSE-2.0
|
| Unless required by applicable law or agreed to in writing, software
| distributed under the License is distributed on an "AS IS" BASIS,
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
| implied.  See the License for the specific language governing
| permissions and limitations under the License.

The Odiago NOTICE at the time of the contribution:

| This product includes software developed by Odiago, Inc.
| (https://www.wibidata.com).

The documentation contains the default Apache Forrest skin.
Apache Forrest includes the following in its NOTICE file:

| Apache Forrest
| Copyright 2002-2007 The Apache Software Foundation.
|
| This product includes software developed at
| The Apache Software Foundation (https://www.apache.org/).
|
| See also the file LICENSE.txt
|
| ------------------------------------------------------------------------
| The purpose of this NOTICE.txt file is to contain notices that are
| required by the copyright owner and their license. Some of the
| accompanying products have an attribution requirement, so see below.
| Other accompanying products do not require attribution, so are not listed.
|
| ------------------------------------------------------------------------
| This product includes software developed by the OpenSymphony Group
| http://www.opensymphony.com/
|
| This product includes software developed for project Krysalis
| http://www.krysalis.org/
|
| This product includes software developed by Andy Clark.
| https://people.apache.org/~andyc/neko/
|
| This product includes software developed by the ExoLab Project
| https://www.exolab.org/
|
| This product includes software developed by TouchGraph LLC
| https://www.touchgraph.com/
|
| This product includes software developed by Marc De Scheemaecker
| http://nanoxml.cyberelf.be/
|
| This product includes software developed by the ANTLR project
| https://www.antlr.org/
|
| This product includes software developed by Chaperon
| http://chaperon.sourceforge.net/
|
| This product includes software developed by Sal Mangano (included in the XSLT Cookbook published by O'Reilly)
| https://www.oreilly.com/catalog/xsltckbk/
|
| This product includes software developed by The Werken Company.
| http://jaxen.werken.com/
|
| This product includes software developed by the jfor project
| http://www.jfor.org/
