Apache Royale Compiler
Copyright 2020 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
and Adobe ASC 2.0 and JBurgGenerator.java, is Adobe Systems Incorporated 
(http://www.adobe.com/).
    Copyright 2003 - 2012 Adobe Systems Incorporated. All Rights Reserved.

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

Portions of JBurgGenerator.java contains code written by Tom Harwood
    Copyright Tom Harwood (2003-2008).
