Apache Flex
Copyright 2012-2017 The Apache Software Foundation

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

The Initial Developer of the Original Code, known as Adobe Flex, is Adobe
Systems Incorporated (http://www.adobe.com/).
    Copyright 2003 - 2012 Adobe Systems Incorporated. All Rights Reserved.

The asc compiler contains code written by Jeff Dyer at: 
    Copyright Mountain View Compiler Company (1998-2003).

The easing equations in the mx tween class are based on code written by Robert
Penner.
    Copyright 2001 Robert Penner. All rights reserved.

The Batik SVG toolkit source contains code from the World Wide Web Consortium
(W3C) for the Document Object Model API (DOM API) and SVG Document Type
Definition (DTD).

The Batik SVG toolkit source contains code from the International Organisation
for Standardization for the definition of character entities used in the
software's documentation.

The Batik SVG toolkit source includes images from the Tango Desktop Project
(http://tango.freedesktop.org/).

The Batik SVG toolkit source includes images from the Pasodoble Icon Theme
(http://www.jesusda.com/projects/pasodoble).

Portions of Xerces 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.

Changes to Xerces sources in this product were developed by Adobe Systems Inc.

