
<!DOCTYPE HTML>
<!--
/***************************************************************************************************************************
 * 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.
 ***************************************************************************************************************************/
 -->
<html>
<head>
	<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
	<style type='text/css'>
		/* For viewing in file system and page designer */
		@IMPORT url('../src/main/javadoc/javadoc.css');
		@IMPORT url('../src/main/javadoc/resources/juneau-doc.css');
		@IMPORT url('../src/main/javadoc/resources/juneau-code.css');
		body { 
			margin: 20px; 
		}	
	</style>
</head>
<body>

	<h2 class='topic'>&lt;h2 class='topic'&gt;&lt;/h2&gt;</h5>
	<h3 class='topic'>&lt;h3 class='topic'&gt;&lt;/h3&gt;</h5>
	<h4 class='topic'>&lt;h4 class='topic'&gt;&lt;/h4&gt;</h5>
	<h5 class='topic'>&lt;h5 class='topic'&gt;&lt;/h5&gt;</h5>
	<h5 class='figure'>&lt;h5 class='figure'&gt;&lt;/h5&gt;</h5>
	<h5 class='section'>&lt;h5 class='section'&gt;&lt;/h5&gt;</h5>
	
	<ul class='javatree'>
		<li class='jp'><c>com.apache.foo</c>
		<li class='jp'><c>com.apache.foo</c>
		<ul>
			<li class='jc'><c>Foo.class</c>
			<li class='jc'><c>Foo.class</c>
			<li class='jp'><c>com.apache.foo</c>
			<ul>
				<li class='jc'><c>Foo.class</c>
				<li class='jc'><c>Foo.class</c>
				<li class='jp'><c>com.apache.foo</c>
				<ul>
					<li class='jc'><c>Foo.class</c>
				</ul>
				<li class='jc'><c>Foo.class</c>
				<li class='jc'><c>Foo.class</c>
			</ul>
		</ul>
		<li class='jp'><c>com.apache.foo</c>
		<li class='jp'><c>com.apache.foo</c>
	</ul>
	
	<p class='bcode console'>
	&lt;p class='bcode console'&gt;
	</p>
	<p class='bcode'>
	&lt;p class='bcode'&gt;
	</p>
	<div class='info'>
	&lt;div class='info'&gt;
	</div>
	<div class='warn'>
	&lt;div class='warn'&gt;
	</div>
	<div class='severe'>
	&lt;div class='severe'&gt;
	</div>
	
	<p>
	foo <span class='snippet'>&lt;span class='snippet'&gt;</span> foo
	</p>
	<p>
	foo <c>&lt;c&gt;code&lt;/c&gt;</c> foo
	</p>
	<p>
	foo <l>&lt;l&gt;literal&lt;/l&gt;</l> foo
	</p>
	
	<h5 class='section'>See Also:</h5>
	<ul class='section'>
		<li>Foo
		<li>Bar
	</ul>
	
	<ul class='seealso'>
		<li>Foo
		<li>Bar
	</ul>
	
	<ul class='notes'>
		<li>Note1
		<li>Note2<br>Note2<br>Note2
		<li>Note3
	</ul>
	
</body>
