<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF 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

      http://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.

-->
<flex-config>

    <compiler>
        <accessible>true</accessible>

        <external-library-path>
            <path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
            <path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
            <path-element>../../libs/framework.swc</path-element>
            <path-element>../../libs/apache.swc</path-element>
            <path-element>../../libs/spark.swc</path-element>
            <path-element>../../libs/textLayout.swc</path-element>
            <path-element>../../libs/mobile/mobilecomponents.swc</path-element>
            <path-element>../../themes/Mobile/mobile.swc</path-element>
        </external-library-path>

        <keep-as3-metadata>
            <name>Bindable</name>
            <name>Managed</name>
            <name>ChangeEvent</name>
            <name>NonCommittingChangeEvent</name>
            <name>Transient</name>
            <name>SkinPart</name>
        </keep-as3-metadata>

        <locale/>

        <library-path/>

        <namespaces>
            <namespace>
                <uri>http://flex.apache.org/experimental/ns</uri>
                <manifest>manifest.xml</manifest>
            </namespace>
            <namespace>
                <uri>library://ns.adobe.com/flex/spark</uri>
                <manifest>spark-manifest.xml</manifest>
            </namespace>
        </namespaces>

        <source-path>
            <path-element>src</path-element>
        </source-path>

        <show-deprecation-warnings>false</show-deprecation-warnings>
        <warn-no-constructor>false</warn-no-constructor>
    </compiler>

	<include-namespaces>
		 <uri>http://flex.apache.org/experimental/ns</uri>
	</include-namespaces>

    <include-classes>
        <class>ExperimentalMobileClasses</class>
    </include-classes>

    <include-file>
        <name>defaults.css</name>
        <path>defaults.css</path>
    </include-file>

    <resource-bundle-list>bundles.properties</resource-bundle-list>

    <target-player>${playerglobal.version}</target-player>
</flex-config>
