<!--
 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.

-->
<?xml version="1.0" encoding="utf-8"?> 
<!-- JNLP File for Jakarta Log4j Chainsaw v2 Application --> 
<jnlp 
  spec="1.0+" 
codebase="http://logging.apache.org/log4j/docs/webstart/chainsaw/"
  href="chainsawWebStart.jnlp"> 
  <information> 
    <title>Log4j Chainsaw v2</title> 
    <vendor>Apache</vendor> 
    <homepage href="http://logging.apache.org/log4j"/> 
    <description>A Log4j log viewing application</description> 
    <description kind="short">A Log4j log viewing application</description> 
    <icon href="http://logging.apache.org/log4j/docs/images/logo.jpg"/> 
    <icon kind="splash" href="http://logging.apache.org/log4j/docs/images/logo.jpg"/> 
    <offline-allowed/> 
  </information> 
  <security> 
      <all-permissions/> 
  </security> 
  <resources> 
    <j2se version="1.4+" max-heap-size="256m"/> 
    <j2se version="1.3+" max-heap-size="256m"/> 
	${dependencies}
	<property name="org.apache.commons.logging.Log" value="org.apache.commons.logging.impl.Log4JLogger"/>
  </resources> 
  <application-desc main-class="$mainClass"/>
</jnlp> 
