<?xml version="1.0"?>
<!--
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.
-->
<package >
  <metadata>
    <id>Org.Apache.REEF.Examples</id>
    <version>$version$</version>
    <title>Org.Apache.REEF.Examples</title>
    <authors>The Apache REEF project</authors>
    <owners>The Apache REEF project</owners>
    <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
    <projectUrl>http://reef.apache.org/</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>REEF Examples</description>
    <copyright>The Apache Software Foundation</copyright>
     <dependencies>
      <dependency id="Org.Apache.REEF.Tang" version="$version$" />
      <dependency id="Org.Apache.REEF.Wake" version="$version$" />
      <dependency id="Org.Apache.REEF.Utilities" version="$version$" />
      <dependency id="Microsoft.Hadoop.Avro" version="1.5.6" />
      <dependency id="protobuf-net" version="2.0.0.668" />
      <dependency id="Rx-Core" version="2.2.5" />
      <dependency id="Org.Apache.REEF.Common" version="$version$" />
      <dependency id="Org.Apache.REEF.Driver" version="$version$" />
      <dependency id="Org.Apache.REEF.Network" version="$version$" />
    </dependencies>
  </metadata>
  <files>
      <file src="..\bin\$Platform$\$Configuration$\Org.Apache.REEF.Examples\Org.Apache.REEF.Examples.dll" target="lib\net45" />
      <file src="..\bin\$Platform$\$Configuration$\Org.Apache.REEF.Examples\Org.Apache.REEF.Examples.pdb" target="lib\net45" />
  </files>
</package>
