| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- NewPage --> |
| <html lang="en"> |
| <head> |
| <!-- Generated by javadoc (1.7.0_131) on Wed Mar 29 10:23:48 UTC 2017 --> |
| <title>Executor</title> |
| <meta name="date" content="2017-03-29"> |
| <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style"> |
| </head> |
| <body> |
| <script type="text/javascript"><!-- |
| try { |
| if (location.href.indexOf('is-external=true') == -1) { |
| parent.document.title="Executor"; |
| } |
| } |
| catch(err) { |
| } |
| //--> |
| </script> |
| <noscript> |
| <div>JavaScript is disabled on your browser.</div> |
| </noscript> |
| <!-- ========= START OF TOP NAVBAR ======= --> |
| <div class="topNav"><a name="navbar_top"> |
| <!-- --> |
| </a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li><a href="../../../org/apache/mesos/package-summary.html">Package</a></li> |
| <li class="navBarCell1Rev">Class</li> |
| <li><a href="package-tree.html">Tree</a></li> |
| <li><a href="../../../deprecated-list.html">Deprecated</a></li> |
| <li><a href="../../../index-all.html">Index</a></li> |
| <li><a href="../../../help-doc.html">Help</a></li> |
| </ul> |
| </div> |
| <div class="subNav"> |
| <ul class="navList"> |
| <li>Prev Class</li> |
| <li><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><span class="strong">Next Class</span></a></li> |
| </ul> |
| <ul class="navList"> |
| <li><a href="../../../index.html?org/apache/mesos/Executor.html" target="_top">Frames</a></li> |
| <li><a href="Executor.html" target="_top">No Frames</a></li> |
| </ul> |
| <ul class="navList" id="allclasses_navbar_top"> |
| <li><a href="../../../allclasses-noframe.html">All Classes</a></li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_top"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| </div> |
| <div> |
| <ul class="subNavList"> |
| <li>Summary: </li> |
| <li>Nested | </li> |
| <li>Field | </li> |
| <li>Constr | </li> |
| <li><a href="#method_summary">Method</a></li> |
| </ul> |
| <ul class="subNavList"> |
| <li>Detail: </li> |
| <li>Field | </li> |
| <li>Constr | </li> |
| <li><a href="#method_detail">Method</a></li> |
| </ul> |
| </div> |
| <a name="skip-navbar_top"> |
| <!-- --> |
| </a></div> |
| <!-- ========= END OF TOP NAVBAR ========= --> |
| <!-- ======== START OF CLASS DATA ======== --> |
| <div class="header"> |
| <div class="subTitle">org.apache.mesos</div> |
| <h2 title="Interface Executor" class="title">Interface Executor</h2> |
| </div> |
| <div class="contentContainer"> |
| <div class="description"> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <hr> |
| <br> |
| <pre>public interface <span class="strong">Executor</span></pre> |
| <div class="block">Callback interface to be implemented by frameworks' executors. |
| Note that only one callback will be invoked at a time, so it is not |
| recommended that you block within a callback because it may cause a |
| deadlock. |
| <p> |
| Each callback includes a reference to the executor driver that was |
| used to run this executor. The reference will not change for the |
| duration of an executor (i.e., from the point you do |
| <a href="../../../org/apache/mesos/ExecutorDriver.html#start()"><code>ExecutorDriver.start()</code></a> to the point that |
| <a href="../../../org/apache/mesos/ExecutorDriver.html#join()"><code>ExecutorDriver.join()</code></a> returns). |
| This is intended for convenience so that an executor |
| doesn't need to store a reference to the driver itself.</div> |
| </li> |
| </ul> |
| </div> |
| <div class="summary"> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <!-- ========== METHOD SUMMARY =========== --> |
| <ul class="blockList"> |
| <li class="blockList"><a name="method_summary"> |
| <!-- --> |
| </a> |
| <h3>Method Summary</h3> |
| <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation"> |
| <caption><span>Methods</span><span class="tabEnd"> </span></caption> |
| <tr> |
| <th class="colFirst" scope="col">Modifier and Type</th> |
| <th class="colLast" scope="col">Method and Description</th> |
| </tr> |
| <tr class="altColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#disconnected(org.apache.mesos.ExecutorDriver)">disconnected</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver)</code> |
| <div class="block">Invoked when the executor becomes "disconnected" from the slave |
| (e.g., the slave is being restarted due to an upgrade).</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#error(org.apache.mesos.ExecutorDriver,%20java.lang.String)">error</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| java.lang.String message)</code> |
| <div class="block">Invoked when a fatal error has occurred with the executor and/or |
| executor driver.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#frameworkMessage(org.apache.mesos.ExecutorDriver,%20byte[])">frameworkMessage</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| byte[] data)</code> |
| <div class="block">Invoked when a framework message has arrived for this |
| executor.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#killTask(org.apache.mesos.ExecutorDriver,%20org.apache.mesos.Protos.TaskID)">killTask</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.TaskID.html" title="class in org.apache.mesos">Protos.TaskID</a> taskId)</code> |
| <div class="block">Invoked when a task running within this executor has been killed |
| (via <a href="../../../org/apache/mesos/SchedulerDriver.html#killTask(org.apache.mesos.Protos.TaskID)"><code>SchedulerDriver.killTask(org.apache.mesos.Protos.TaskID)</code></a>).</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#launchTask(org.apache.mesos.ExecutorDriver,%20org.apache.mesos.Protos.TaskInfo)">launchTask</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.TaskInfo.html" title="class in org.apache.mesos">Protos.TaskInfo</a> task)</code> |
| <div class="block">Invoked when a task has been launched on this executor (initiated |
| via <a href="../../../org/apache/mesos/SchedulerDriver.html#launchTasks(java.util.Collection,%20java.util.Collection,%20org.apache.mesos.Protos.Filters)"><code>SchedulerDriver.launchTasks(java.util.Collection<org.apache.mesos.Protos.OfferID>, java.util.Collection<org.apache.mesos.Protos.TaskInfo>, org.apache.mesos.Protos.Filters)</code></a>.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#registered(org.apache.mesos.ExecutorDriver,%20org.apache.mesos.Protos.ExecutorInfo,%20org.apache.mesos.Protos.FrameworkInfo,%20org.apache.mesos.Protos.SlaveInfo)">registered</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.ExecutorInfo.html" title="class in org.apache.mesos">Protos.ExecutorInfo</a> executorInfo, |
| <a href="../../../org/apache/mesos/Protos.FrameworkInfo.html" title="class in org.apache.mesos">Protos.FrameworkInfo</a> frameworkInfo, |
| <a href="../../../org/apache/mesos/Protos.SlaveInfo.html" title="class in org.apache.mesos">Protos.SlaveInfo</a> slaveInfo)</code> |
| <div class="block">Invoked once the executor driver has been able to successfully |
| connect with Mesos.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#reregistered(org.apache.mesos.ExecutorDriver,%20org.apache.mesos.Protos.SlaveInfo)">reregistered</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.SlaveInfo.html" title="class in org.apache.mesos">Protos.SlaveInfo</a> slaveInfo)</code> |
| <div class="block">Invoked when the executor re-registers with a restarted slave.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><code>void</code></td> |
| <td class="colLast"><code><strong><a href="../../../org/apache/mesos/Executor.html#shutdown(org.apache.mesos.ExecutorDriver)">shutdown</a></strong>(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver)</code> |
| <div class="block">Invoked when the executor should terminate all of its currently |
| running tasks.</div> |
| </td> |
| </tr> |
| </table> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| <div class="details"> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <!-- ============ METHOD DETAIL ========== --> |
| <ul class="blockList"> |
| <li class="blockList"><a name="method_detail"> |
| <!-- --> |
| </a> |
| <h3>Method Detail</h3> |
| <a name="registered(org.apache.mesos.ExecutorDriver, org.apache.mesos.Protos.ExecutorInfo, org.apache.mesos.Protos.FrameworkInfo, org.apache.mesos.Protos.SlaveInfo)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>registered</h4> |
| <pre>void registered(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.ExecutorInfo.html" title="class in org.apache.mesos">Protos.ExecutorInfo</a> executorInfo, |
| <a href="../../../org/apache/mesos/Protos.FrameworkInfo.html" title="class in org.apache.mesos">Protos.FrameworkInfo</a> frameworkInfo, |
| <a href="../../../org/apache/mesos/Protos.SlaveInfo.html" title="class in org.apache.mesos">Protos.SlaveInfo</a> slaveInfo)</pre> |
| <div class="block">Invoked once the executor driver has been able to successfully |
| connect with Mesos. In particular, a scheduler can pass some |
| data to its executors through the <a href="../../../org/apache/mesos/Protos.ExecutorInfo.html#getData()"><code>Protos.ExecutorInfo.getData()</code></a> |
| field.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that was registered and connected |
| to the Mesos cluster.</dd><dd><code>executorInfo</code> - Describes information about the executor that was |
| registered.</dd><dd><code>frameworkInfo</code> - Describes the framework that was registered.</dd><dd><code>slaveInfo</code> - Describes the slave that will be used to launch |
| the tasks for this executor.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a>, |
| <a href="../../../org/apache/mesos/MesosSchedulerDriver.html" title="class in org.apache.mesos"><code>MesosSchedulerDriver</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="reregistered(org.apache.mesos.ExecutorDriver, org.apache.mesos.Protos.SlaveInfo)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>reregistered</h4> |
| <pre>void reregistered(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.SlaveInfo.html" title="class in org.apache.mesos">Protos.SlaveInfo</a> slaveInfo)</pre> |
| <div class="block">Invoked when the executor re-registers with a restarted slave.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that was re-registered with the |
| Mesos master.</dd><dd><code>slaveInfo</code> - Describes the slave that will be used to launch |
| the tasks for this executor.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="disconnected(org.apache.mesos.ExecutorDriver)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>disconnected</h4> |
| <pre>void disconnected(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver)</pre> |
| <div class="block">Invoked when the executor becomes "disconnected" from the slave |
| (e.g., the slave is being restarted due to an upgrade).</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that was disconnected.</dd></dl> |
| </li> |
| </ul> |
| <a name="launchTask(org.apache.mesos.ExecutorDriver, org.apache.mesos.Protos.TaskInfo)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>launchTask</h4> |
| <pre>void launchTask(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.TaskInfo.html" title="class in org.apache.mesos">Protos.TaskInfo</a> task)</pre> |
| <div class="block">Invoked when a task has been launched on this executor (initiated |
| via <a href="../../../org/apache/mesos/SchedulerDriver.html#launchTasks(java.util.Collection,%20java.util.Collection,%20org.apache.mesos.Protos.Filters)"><code>SchedulerDriver.launchTasks(java.util.Collection<org.apache.mesos.Protos.OfferID>, java.util.Collection<org.apache.mesos.Protos.TaskInfo>, org.apache.mesos.Protos.Filters)</code></a>. Note that this task can be |
| realized with a thread, a process, or some simple computation, |
| however, no other callbacks will be invoked on this executor |
| until this callback has returned.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that launched the task.</dd><dd><code>task</code> - Describes the task that was launched.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a>, |
| <a href="../../../org/apache/mesos/Protos.TaskInfo.html" title="class in org.apache.mesos"><code>Protos.TaskInfo</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="killTask(org.apache.mesos.ExecutorDriver, org.apache.mesos.Protos.TaskID)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>killTask</h4> |
| <pre>void killTask(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| <a href="../../../org/apache/mesos/Protos.TaskID.html" title="class in org.apache.mesos">Protos.TaskID</a> taskId)</pre> |
| <div class="block">Invoked when a task running within this executor has been killed |
| (via <a href="../../../org/apache/mesos/SchedulerDriver.html#killTask(org.apache.mesos.Protos.TaskID)"><code>SchedulerDriver.killTask(org.apache.mesos.Protos.TaskID)</code></a>). Note that no |
| status update will be sent on behalf of the executor, the executor is |
| responsible for creating a new TaskStatus (i.e., with TASK_KILLED) |
| and invoking <a href="../../../org/apache/mesos/ExecutorDriver.html#sendStatusUpdate(org.apache.mesos.Protos.TaskStatus)"><code>ExecutorDriver.sendStatusUpdate(org.apache.mesos.Protos.TaskStatus)</code></a>.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that owned the task that was killed.</dd><dd><code>taskId</code> - The ID of the task that was killed.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a>, |
| <a href="../../../org/apache/mesos/Protos.TaskID.html" title="class in org.apache.mesos"><code>Protos.TaskID</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="frameworkMessage(org.apache.mesos.ExecutorDriver, byte[])"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>frameworkMessage</h4> |
| <pre>void frameworkMessage(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| byte[] data)</pre> |
| <div class="block">Invoked when a framework message has arrived for this |
| executor. These messages are best effort; do not expect a |
| framework message to be retransmitted in any reliable fashion.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that received the message.</dd><dd><code>data</code> - The message payload.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="shutdown(org.apache.mesos.ExecutorDriver)"> |
| <!-- --> |
| </a> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <h4>shutdown</h4> |
| <pre>void shutdown(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver)</pre> |
| <div class="block">Invoked when the executor should terminate all of its currently |
| running tasks. Note that after Mesos has determined that an |
| executor has terminated any tasks that the executor did not send |
| terminal status updates for (e.g. TASK_KILLED, TASK_FINISHED, |
| TASK_FAILED, etc) a TASK_LOST status update will be created.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that should terminate.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a></dd></dl> |
| </li> |
| </ul> |
| <a name="error(org.apache.mesos.ExecutorDriver, java.lang.String)"> |
| <!-- --> |
| </a> |
| <ul class="blockListLast"> |
| <li class="blockList"> |
| <h4>error</h4> |
| <pre>void error(<a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos">ExecutorDriver</a> driver, |
| java.lang.String message)</pre> |
| <div class="block">Invoked when a fatal error has occurred with the executor and/or |
| executor driver. The driver will be aborted BEFORE invoking this |
| callback.</div> |
| <dl><dt><span class="strong">Parameters:</span></dt><dd><code>driver</code> - The executor driver that was aborted due this error.</dd><dd><code>message</code> - The error message.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><code>ExecutorDriver</code></a></dd></dl> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <!-- ========= END OF CLASS DATA ========= --> |
| <!-- ======= START OF BOTTOM NAVBAR ====== --> |
| <div class="bottomNav"><a name="navbar_bottom"> |
| <!-- --> |
| </a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li><a href="../../../org/apache/mesos/package-summary.html">Package</a></li> |
| <li class="navBarCell1Rev">Class</li> |
| <li><a href="package-tree.html">Tree</a></li> |
| <li><a href="../../../deprecated-list.html">Deprecated</a></li> |
| <li><a href="../../../index-all.html">Index</a></li> |
| <li><a href="../../../help-doc.html">Help</a></li> |
| </ul> |
| </div> |
| <div class="subNav"> |
| <ul class="navList"> |
| <li>Prev Class</li> |
| <li><a href="../../../org/apache/mesos/ExecutorDriver.html" title="interface in org.apache.mesos"><span class="strong">Next Class</span></a></li> |
| </ul> |
| <ul class="navList"> |
| <li><a href="../../../index.html?org/apache/mesos/Executor.html" target="_top">Frames</a></li> |
| <li><a href="Executor.html" target="_top">No Frames</a></li> |
| </ul> |
| <ul class="navList" id="allclasses_navbar_bottom"> |
| <li><a href="../../../allclasses-noframe.html">All Classes</a></li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_bottom"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| </div> |
| <div> |
| <ul class="subNavList"> |
| <li>Summary: </li> |
| <li>Nested | </li> |
| <li>Field | </li> |
| <li>Constr | </li> |
| <li><a href="#method_summary">Method</a></li> |
| </ul> |
| <ul class="subNavList"> |
| <li>Detail: </li> |
| <li>Field | </li> |
| <li>Constr | </li> |
| <li><a href="#method_detail">Method</a></li> |
| </ul> |
| </div> |
| <a name="skip-navbar_bottom"> |
| <!-- --> |
| </a></div> |
| <!-- ======== END OF BOTTOM NAVBAR ======= --> |
| </body> |
| </html> |