Files
123123/doc-10.0.10/Docs2017/api/mgmt_api/javax/management/MBeanServerInvocationHandler.html
T
GizzlerandCursor 58b7826162 Add live TLS certificate probing and improve restart error handling.
Configure CertificateCheckUrl per container for curl-like TLS checks, classify Sonic permission errors, and extend setup wizard for container management.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 13:16:21 +02:00

390 lines
19 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.5.0_19) on Fri Aug 12 11:25:10 EDT 2011 -->
<TITLE>
MBeanServerInvocationHandler (Management Application API)
</TITLE>
<META NAME="keywords" CONTENT="javax.management.MBeanServerInvocationHandler class">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
parent.document.title="MBeanServerInvocationHandler (Management Application API)";
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="MBeanServerInvocationHandler.html#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Sonic Management API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="MBeanServerFactory.html" title="class in javax.management"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="MBeanServerNotification.html" title="class in javax.management"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../index.html@javax%252Fmanagement%252FMBeanServerInvocationHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MBeanServerInvocationHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
javax.management</FONT>
<BR>
Class MBeanServerInvocationHandler</H2>
<PRE>
java.lang.Object
<IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>javax.management.MBeanServerInvocationHandler</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.reflect.InvocationHandler</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>MBeanServerInvocationHandler</B><DT>extends java.lang.Object<DT>implements java.lang.reflect.InvocationHandler</DL>
</PRE>
<P>
<p><CODE>InvocationHandler</CODE> that forwards methods in an MBean's
management interface through the MBean server to the MBean.</p>
<p>Given an <A HREF="MBeanServerConnection.html" title="interface in javax.management"><CODE>MBeanServerConnection</CODE></A>, the <A HREF="ObjectName.html" title="class in javax.management"><CODE>ObjectName</CODE></A>
of an MBean within that MBean server, and a Java interface
<code>Intf</code> that describes the management interface of the
MBean using the patterns for a Standard MBean, this class can be
used to construct a proxy for the MBean. The proxy implements
the interface <code>Intf</code> such that all of its methods are
forwarded through the MBean server to the MBean.</p>
<p>If you have an MBean server <code>mbs</code> containing an MBean
with <A HREF="ObjectName.html" title="class in javax.management"><CODE>ObjectName</CODE></A> <code>name</code>, and if the MBean's
management interface is described by the Java interface
<code>Intf</code>, you can construct a proxy for the MBean like
this:</p>
<pre>
Intf proxy = (Intf)
MBeanServerInvocationHandler.<A HREF="MBeanServerInvocationHandler.html#newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)"><CODE>newProxyInstance</CODE></A>(mbs,
name,
Intf.class,
false);
</pre>
<p>Suppose, for example, <code>Intf</code> looks like this:</p>
<pre>
public interface Intf {
public String getSomeAttribute();
public void setSomeAttribute(String value);
public void someOperation(String param1, int param2);
}
</pre>
<p>Then you can execute:</p>
<ul>
<li><code>proxy.getSomeAttribute()</code> which will result in a
call to <code>mbs.</code><A HREF="MBeanServerConnection.html#getAttribute(javax.management.ObjectName, java.lang.String)"><CODE>getAttribute</CODE></A><code>(name, "SomeAttribute")</code>.
<li><code>proxy.setSomeAttribute("whatever")</code> which will result
in a call to <code>mbs.</code><A HREF="MBeanServerConnection.html#setAttribute(javax.management.ObjectName, javax.management.Attribute)"><CODE>setAttribute</CODE></A><code>(name, new Attribute("SomeAttribute", "whatever"))</code>.
<li><code>proxy.someOperation("param1", 2)</code> which will be
translated into a call to <code>mbs.</code><A HREF="MBeanServerConnection.html#invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[])"><CODE>invoke</CODE></A><code>(name, "someOperation", &lt;etc&gt;)</code>.
</ul>
<p>If the last parameter to <A HREF="MBeanServerInvocationHandler.html#newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)"><CODE>newProxyInstance</CODE></A> is <code>true</code>, then the MBean is assumed
to be a <A HREF="NotificationBroadcaster.html" title="interface in javax.management"><CODE>NotificationBroadcaster</CODE></A> or <A HREF="NotificationEmitter.html" title="interface in javax.management"><CODE>NotificationEmitter</CODE></A> and the returned proxy will implement <A HREF="NotificationEmitter.html" title="interface in javax.management"><CODE>NotificationEmitter</CODE></A>. A call to <A HREF="NotificationBroadcaster.html#addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)"><CODE>NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)</CODE></A> on the proxy will
result in a call to <A HREF="MBeanServerConnection.html#addNotificationListener(javax.management.ObjectName, javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)"><CODE>MBeanServerConnection.addNotificationListener(ObjectName,
NotificationListener, NotificationFilter, Object)</CODE></A>, and likewise
for the other methods of <A HREF="NotificationBroadcaster.html" title="interface in javax.management"><CODE>NotificationBroadcaster</CODE></A> and <A HREF="NotificationEmitter.html" title="interface in javax.management"><CODE>NotificationEmitter</CODE></A>.</p>
<p>The methods <CODE>Object.toString()</CODE>, <CODE>Object.hashCode()</CODE>,
and <CODE>Object.equals(Object)</CODE>, when invoked on a proxy using
this invocation handler, are forwarded to the MBean server as
methods on the proxied MBean. This will only work if the MBean
declares those methods in its management interface.</p>
<P>
<P>
<DL>
<DT><B>Since:</B></DT>
<DD>JMX 1.2</DD>
</DL>
<HR>
<P>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="MBeanServerInvocationHandler.html#MBeanServerInvocationHandler(javax.management.MBeanServerConnection, javax.management.ObjectName)">MBeanServerInvocationHandler</A></B>(<A HREF="MBeanServerConnection.html" title="interface in javax.management">MBeanServerConnection</A>&nbsp;connection,
<A HREF="ObjectName.html" title="class in javax.management">ObjectName</A>&nbsp;objectName)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invocation handler that forwards methods through an MBean
server.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>
<TD><CODE><B><A HREF="MBeanServerInvocationHandler.html#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])">invoke</A></B>(java.lang.Object&nbsp;proxy,
java.lang.reflect.Method&nbsp;method,
java.lang.Object[]&nbsp;args)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.Object</CODE></FONT></TD>
<TD><CODE><B><A HREF="MBeanServerInvocationHandler.html#newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)">newProxyInstance</A></B>(<A HREF="MBeanServerConnection.html" title="interface in javax.management">MBeanServerConnection</A>&nbsp;connection,
<A HREF="ObjectName.html" title="class in javax.management">ObjectName</A>&nbsp;objectName,
java.lang.Class&nbsp;interfaceClass,
boolean&nbsp;notificationBroadcaster)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a proxy that implements the given interface by
forwarding its methods through the given MBean server to the
named MBean.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="MBeanServerInvocationHandler(javax.management.MBeanServerConnection, javax.management.ObjectName)"><!-- --></A><H3>
MBeanServerInvocationHandler</H3>
<PRE>
public <B>MBeanServerInvocationHandler</B>(<A HREF="MBeanServerConnection.html" title="interface in javax.management">MBeanServerConnection</A>&nbsp;connection,
<A HREF="ObjectName.html" title="class in javax.management">ObjectName</A>&nbsp;objectName)</PRE>
<DL>
<DD><p>Invocation handler that forwards methods through an MBean
server. This constructor may be called instead of relying on
<A HREF="MBeanServerInvocationHandler.html#newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)"><CODE>newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)</CODE></A>, for instance if you need to supply a
different <CODE>ClassLoader</CODE> to <CODE>Proxy.newProxyInstance</CODE>.</p>
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>connection</CODE> - the MBean server connection through which all
methods of a proxy using this handler will be forwarded.<DD><CODE>objectName</CODE> - the name of the MBean within the MBean server
to which methods will be forwarded.</DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])"><!-- --></A><H3>
invoke</H3>
<PRE>
public java.lang.Object <B>invoke</B>(java.lang.Object&nbsp;proxy,
java.lang.reflect.Method&nbsp;method,
java.lang.Object[]&nbsp;args)
throws java.lang.Throwable</PRE>
<DL>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE>invoke</CODE> in interface <CODE>java.lang.reflect.InvocationHandler</CODE></DL>
</DD>
<DD><DL>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<HR>
<A NAME="newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)"><!-- --></A><H3>
newProxyInstance</H3>
<PRE>
public static java.lang.Object <B>newProxyInstance</B>(<A HREF="MBeanServerConnection.html" title="interface in javax.management">MBeanServerConnection</A>&nbsp;connection,
<A HREF="ObjectName.html" title="class in javax.management">ObjectName</A>&nbsp;objectName,
java.lang.Class&nbsp;interfaceClass,
boolean&nbsp;notificationBroadcaster)</PRE>
<DL>
<DD><p>Return a proxy that implements the given interface by
forwarding its methods through the given MBean server to the
named MBean.</p>
<p>This method is equivalent to <CODE>Proxy.newProxyInstance</CODE><code>(interfaceClass.getClassLoader(),
interfaces, handler)</code>. Here <code>handler</code> is the
result of <A HREF="MBeanServerInvocationHandler.html#MBeanServerInvocationHandler(javax.management.MBeanServerConnection, javax.management.ObjectName)"><CODE>new
MBeanServerInvocationHandler(connection, objectName)</CODE></A>, and
<code>interfaces</code> is an array that has one element if
<code>notificationBroadcaster</code> is false and two if it is
true. The first element of <code>interfaces</code> is
<code>interfaceClass</code> and the second, if present, is
<code>NotificationEmitter.class</code>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>connection</CODE> - the MBean server to forward to.<DD><CODE>objectName</CODE> - the name of the MBean within
<code>connection</code> to forward to.<DD><CODE>interfaceClass</CODE> - the management interface that the MBean
exports, which will also be implemented by the returned proxy.<DD><CODE>notificationBroadcaster</CODE> - make the returned proxy
implement <A HREF="NotificationEmitter.html" title="interface in javax.management"><CODE>NotificationEmitter</CODE></A> by forwarding its methods
via <code>connection</code>.
<DT><B>Returns:</B><DD>the new proxy instance.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="MBeanServerInvocationHandler.html#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Sonic Management API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="MBeanServerFactory.html" title="class in javax.management"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="MBeanServerNotification.html" title="class in javax.management"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../index.html@javax%252Fmanagement%252FMBeanServerInvocationHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MBeanServerInvocationHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="MBeanServerInvocationHandler.html#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
<font size="-1">Copyright &copy; 2001-2011
<a href="http://www.progress.com" target="_top"> Progress Software Corporation</a>. All Rights Reserved.
<br>HTML formatted on 12-Aug-2011.</font>
</BODY>
</HTML>