| <!DOCTYPE html> |
| |
| |
| |
| |
| <html class="no-js"> |
| |
| <head lang="en-us"> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1"> |
| <meta http-equiv="X-UA-Compatible" content="IE=10" /> |
| <title>Management UI - Eclipse hawkBit</title> |
| <meta name="generator" content="Hugo 0.54.0" /> |
| |
| |
| <meta name="description" content="IoT. Update. Device."> |
| |
| <link rel="canonical" href="https://www.eclipse.org/hawkbit/ui/"> |
| |
| <meta name="author" content="The Eclipse hawkBit Project"> |
| |
| |
| <meta property="og:url" content="https://www.eclipse.org/hawkbit/ui/"> |
| <meta property="og:title" content="Eclipse hawkBit"> |
| <meta property="og:image" content="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png"> |
| <meta name="apple-mobile-web-app-title" content="Eclipse hawkBit"> |
| <meta name="apple-mobile-web-app-capable" content="yes"> |
| <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> |
| |
| |
| |
| <link rel="shortcut icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico"> |
| <link rel="icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico"> |
| |
| <style> |
| @font-face { |
| font-family: 'Icon'; |
| src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot'); |
| src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot') |
| format('embedded-opentype'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.woff') |
| format('woff'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.ttf') |
| format('truetype'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.svg') |
| format('svg'); |
| font-weight: normal; |
| font-style: normal; |
| } |
| </style> |
| |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/application.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/temporary.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/palettes.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/highlight/highlight.css"> |
| |
| |
| |
| |
| <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Ubuntu:400,700|Ubuntu+Mono"> |
| <style> |
| body, input { |
| font-family: 'Ubuntu', Helvetica, Arial, sans-serif; |
| } |
| pre, code { |
| font-family: 'Ubuntu Mono', 'Courier New', 'Courier', monospace; |
| } |
| </style> |
| |
| |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/css/hawkbit.css"> |
| |
| <link rel="stylesheet" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css"> |
| |
| <script src="https://www.eclipse.org/hawkbit/javascripts/modernizr.js"></script> |
| <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> |
| |
| |
| |
| <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous"> |
| </head> |
| <body class="palette-primary-deep-purple palette-accent-light-green"> |
| |
| |
| |
| |
| |
| |
| |
| <div class="backdrop"> |
| <div class="backdrop-paper"></div> |
| </div> |
| |
| <input class="toggle" type="checkbox" id="toggle-drawer"> |
| <input class="toggle" type="checkbox" id="toggle-search"> |
| <label class="toggle-button overlay" for="toggle-drawer"></label> |
| |
| <header class="header"> |
| <nav aria-label="Header"> |
| <div class="bar default"> |
| <div class="button button-menu" role="button" aria-label="Menu"> |
| <label class="toggle-button icon icon-menu" for="toggle-drawer"> |
| <span></span> |
| </label> |
| </div> |
| <div class="stretch"> |
| <div class="title"> |
| Management UI |
| </div> |
| </div> |
| |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="GitHub"> |
| <a href="https://github.com/eclipse/hawkbit" title="@eclipse/hawkbit on GitHub" target="_blank" class="toggle-button icon icon-github"></a> |
| </div> |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="Gitter"> |
| <a href="https://gitter.im/eclipse/hawkbit" title="@eclipse/hawkbit on Gitter" target="_blank" class="toggle-button icon fab fa-gitter"></a> |
| </div> |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="Docker"> |
| <a href="https://hub.docker.com/u/hawkbit" title="hawkbit on Docker Hub" target="_blank" class="toggle-button icon fab fa-docker"></a> |
| </div> |
| |
| |
| |
| </div> |
| <div class="bar search"> |
| <div class="button button-close" role="button" aria-label="Close"> |
| <label class="toggle-button icon icon-back" for="toggle-search"></label> |
| </div> |
| <div class="stretch"> |
| <div class="field"> |
| <input class="query" type="text" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck> |
| </div> |
| </div> |
| <div class="button button-reset" role="button" aria-label="Search"> |
| <button class="toggle-button icon icon-close" id="reset-search"></button> |
| </div> |
| </div> |
| </nav> |
| </header> |
| |
| <main class="main"> |
| <div class="drawer"> |
| <nav aria-label="Navigation"> |
| <a href="https://www.eclipse.org/hawkbit/" class="project"> |
| <div class="banner"> |
| |
| <div class="logo"> |
| <img src="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png"> |
| </div> |
| |
| <div class="name"> |
| <strong>Eclipse hawkBit™ </strong> |
| |
| <br> |
| eclipse/hawkbit |
| |
| </div> |
| </div> |
| </a> |
| |
| <div class="scrollable"> |
| <div class="wrapper"> |
| |
| <ul class="repo"> |
| <li class="repo-download"> |
| <a href="https://hawkbit.eclipse.org" target="_blank" title="hawkBit Sandbox" data-action="sandbox"> |
| <i class="fas fa-desktop"></i> Sandbox |
| </a> |
| </li> |
| <li class="repo-stars"> |
| <a href="https://github.com/eclipse/hawkbit/stargazers" target="_blank" title="Stargazers" data-action="star"> |
| <i class="icon icon-star"></i> Stars |
| <span class="count">–</span> |
| </a> |
| </li> |
| </ul> |
| <hr> |
| |
| |
| <div class="toc"> |
| |
| <ul> |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="What is hawkBit" href="/hawkbit/whatishawkbit/"> |
| |
| What is hawkBit |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Getting started" href="/hawkbit/gettingstarted/"> |
| |
| Getting started |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Guides" href="/hawkbit/guides/"> |
| |
| Guides |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Features" href="/hawkbit/features/"> |
| |
| Features |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Concepts" href="/hawkbit/concepts/"> |
| |
| Concepts |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Architecture" href="/hawkbit/architecture/"> |
| |
| Architecture |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a class="current" title="Management UI" href="/hawkbit/ui/"> |
| |
| Management UI |
| </a> |
| |
| |
| <ul id="scrollspy"> |
| </ul> |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="APIs" href="/hawkbit/apis/"> |
| |
| APIs |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Community" href="/hawkbit/community/"> |
| |
| Community |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Release notes" href="/hawkbit/release-notes/"> |
| |
| Release notes |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| </ul> |
| |
| |
| |
| <hr> |
| |
| <ul> |
| <li> |
| <a href="https://gitter.im/eclipse/hawkbit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" title="Chat on Gitter" target="_blank"> |
| <img src="https://badges.gitter.im/eclipse/hawkbit.svg" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://circleci.com/gh/eclipse/hawkbit" title="Circle CI Status" target="_blank"> |
| <img src="https://circleci.com/gh/eclipse/hawkbit.svg?style=shield" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://sonar.ops.bosch-iot-rollouts.com" title="SonarQube Status" target="_blank"> |
| <img src="https://sonar.ops.bosch-iot-rollouts.com/api/badges/gate?key=org.eclipse.hawkbit:hawkbit-parent" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent" title="Maven Central Status" target="_blank"> |
| <img src="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent/badge.svg" /> |
| </a> |
| </li> |
| </ul> |
| |
| </div> |
| </div> |
| </div> |
| </nav> |
| |
| </div> |
| |
| <article class="article"> |
| <div class="wrapper"> |
| <h1>Management UI </h1> |
| |
| |
| |
| <p>The hawkBit Management UI provides several views for the different use cases:</p> |
| |
| <ul> |
| <li><em>Deployment Management</em> view for target administration and manual deployment.</li> |
| <li><em>Distribution Management</em> view software repository metadata management.</li> |
| <li><em>Artifact Management</em> view to manage the artifacts.</li> |
| <li><em>Target Filter Management</em> view to manage target filters that can be used both in Deployment and Rollout Management views.</li> |
| <li><em>Rollout Management</em> for large scale rollout orchestration.</li> |
| </ul> |
| |
| <h2 id="deployment-management">Deployment Management</h2> |
| |
| <h3 id="purpose">Purpose</h3> |
| |
| <p>Target status overview, target management and manual deployments.</p> |
| |
| <h3 id="feature-explained">Feature explained</h3> |
| |
| <ul> |
| <li>Target Status: check status of all targets.</li> |
| |
| <li><p>Target list allows filters based on:</p> |
| |
| <ul> |
| <li>Assigned/installed <em>DistributionSet</em> (drag and drop a set on the filter icon on the top of the list)</li> |
| <li>Target update status: click 1-X status to reduce the list of targets that have one of them.</li> |
| <li>Target tag: click 1-X tags to reduce the list to targets that have one of them.</li> |
| <li>Name, description: use search button on the top of the list.</li> |
| </ul></li> |
| |
| <li><p><em>DistributionSet</em> list allows filters based on:</p> |
| |
| <ul> |
| <li><em>DistributionSet</em> tag: click 1-X tags to reduce the list of sets that have one of them.</li> |
| <li>Name, description: use search button on the top of the list.</li> |
| </ul></li> |
| |
| <li><p>Start roll out by drag and drop targets on a DS.</p></li> |
| |
| <li><p>Target list supports CTRL-A for “select all”.</p></li> |
| |
| <li><p>Delete sets, tags or targets by dragging them on delete icon.</p></li> |
| |
| <li><p>Select <em>Target</em> to see <em>Action</em> History.</p></li> |
| |
| <li><p>Bulk target upload: create bulk targets by upload.</p></li> |
| </ul> |
| |
| <p>Hints for bulk upload: |
| - Expected file type : csv. |
| - Expected file format : Each line with two values (ControllerID,Target Name). ControllerID is mandatory. |
| - Example:</p> |
| |
| <pre><code>Controller_id_1,targetName1 |
| Controller_id_2,targetName2 |
| </code></pre> |
| |
| <p><img src="../images/ui/deployment_mgmt.png" alt="Deployment Management view" /></p> |
| |
| <h2 id="distribution-management">Distribution Management</h2> |
| |
| <h3 id="purpose-1">Purpose</h3> |
| |
| <p>Distribution Set view to manage software repository metadata, i.e. Distribution Sets, their Software Modules and the respective types.</p> |
| |
| <h3 id="features-explained">Features explained</h3> |
| |
| <ul> |
| <li>Browse, create, delete and update Distribution Sets.</li> |
| <li>Browse, create, delete and update Distribution Set Types.</li> |
| <li>Browse, create, delete and update Software Modules.</li> |
| <li>Browse, create, delete and update Software Module Types.</li> |
| <li>Assign Software Modules to Distribution Sets.</li> |
| </ul> |
| |
| <p><img src="../images/ui/distribution_mgmt.png" alt="Distribution Management view" /></p> |
| |
| <h2 id="artifact-management">Artifact Management</h2> |
| |
| <h3 id="purpose-2">Purpose</h3> |
| |
| <p>Software artifact management, both metadata (i.e. Software Modules) and artifacts themselves.</p> |
| |
| <h3 id="features-explained-1">Features explained</h3> |
| |
| <ul> |
| <li>Browse, create, delete and update Software Modules.</li> |
| <li>Browse, create, delete and update Software Module Types.</li> |
| <li>Upload and delete software artifacts for a module.</li> |
| </ul> |
| |
| <p><img src="../images/ui/artifact_mgmt.png" alt="Artifact Management view" /></p> |
| |
| <h2 id="rollout-management">Rollout Management</h2> |
| |
| <h3 id="purpose-3">Purpose</h3> |
| |
| <p>Software rollout in large scale, rollout status overview and rollout management.</p> |
| |
| <h3 id="features-explained-2">Features explained</h3> |
| |
| <ul> |
| <li>Create, update, copy and delete of rollouts.</li> |
| <li>Start, pause and resume of rollouts.</li> |
| <li>Progress monitoring for the entire rollout and the individual groups.</li> |
| <li>Drill down to see the groups in a rollout and targets in each group.</li> |
| <li>Rollout attributes: |
| |
| <ul> |
| <li>Selection of targets as input for the rollout based on <em>target filter</em></li> |
| <li>Selection of <em>distribution set</em></li> |
| <li>Auto-splitting of the input target list based on <em>group number</em> defined</li> |
| <li><em>Trigger threshold</em> to define the percentage of installation to be completed , to trigger the start of next group</li> |
| <li><em>Error threshold</em> defines the percentage of error tolerance of a group before calling for a emergency shutdown of a rollout</li> |
| </ul></li> |
| </ul> |
| |
| <p><img src="../images/ui/rollout_mgmt.png" alt="Rollout Management view" /></p> |
| |
| <p><img src="../images/ui/rollout_groups.png" alt="Rollout Management view" /></p> |
| |
| <div class="admonition note"> |
| <p class="admonition-title"></p> |
| <p>Deletion of targets which are in a rollout, changes the rollout statistics.</p> |
| </div> |
| |
| <h2 id="target-filter-management">Target Filter Management</h2> |
| |
| <h3 id="purpose-4">Purpose</h3> |
| |
| <p>Custom target filter overview and filter management.</p> |
| |
| <h3 id="features-explained-3">Features explained</h3> |
| |
| <ul> |
| <li>Custom target filter allows user to filter targets by defining custom query.</li> |
| <li>Displays custom target filter list and user can search any particular filter.</li> |
| <li>Create, update and delete features are supported for target filters.</li> |
| </ul> |
| |
| <h3 id="how-to-filter">How to Filter</h3> |
| |
| <p>The basic syntax to filter is: <code>field<basic_operator>value <composite_operator> field<basic_operator>value <...></code></p> |
| |
| <ul> |
| <li><code>field</code>: is the name of the resource field.</li> |
| <li><code>value</code>: is the value of the target field</li> |
| <li><code><basic_operator></code>: Are operators to do simple queries. Supported basic operators are: |
| |
| <ul> |
| <li><code>==</code> : equal</li> |
| <li><code>!=</code> : not equal</li> |
| <li>Use <code>=IN=</code> for ‘in’ parameter.(Example: name=IN=(target1,target2).</li> |
| </ul></li> |
| <li><code><composite_operator></code>: Are operators to join simple queries: Supported composite operators are: |
| |
| <ul> |
| <li><code>and</code></li> |
| <li><code>or</code></li> |
| <li>Use <code>=IN=</code> for ‘in’ parameter.(Example: name=IN=(target1,target2).</li> |
| <li>Use <code>*</code> for wildcard matches.</li> |
| </ul></li> |
| </ul> |
| |
| <h3 id="examples">Examples</h3> |
| |
| <table> |
| <thead> |
| <tr> |
| <th>Custom query</th> |
| <th>Description</th> |
| </tr> |
| </thead> |
| |
| <tbody> |
| <tr> |
| <td>updatestatus==error</td> |
| <td>Gives all targets in ‘error’ state.</td> |
| </tr> |
| |
| <tr> |
| <td>controllerId!=192.168.2.42</td> |
| <td>Gives all targets that do not have the controllerId 192.168.2.42.</td> |
| </tr> |
| |
| <tr> |
| <td>name==*CCU*</td> |
| <td>Gives all targets which contain the term ‘CCU’ in there name.</td> |
| </tr> |
| |
| <tr> |
| <td>name==*CCU* or description==*CCU*</td> |
| <td>Gives all targets that either have the term ‘CCU’ in their name or their description.</td> |
| </tr> |
| |
| <tr> |
| <td>name==*SHC* and description==*SHC*</td> |
| <td>Gives all targets that have the term SHC in their name and their description.</td> |
| </tr> |
| |
| <tr> |
| <td>name==CCU* and updatestatus==pending</td> |
| <td>Gives all targets with their name starting with ‘CCU’ and which are in ‘pending’ state.</td> |
| </tr> |
| |
| <tr> |
| <td>(assignedds.name==‘ECU-DS’ and description==test) or updatestatus!=error</td> |
| <td>Gives all targets which are either assigned to ‘ECU-DS’ and have description equals to ‘test’ or which are not in error status.</td> |
| </tr> |
| |
| <tr> |
| <td>(updatestatus!=In_sync or updatestatus!=error) and name==*SHC1*</td> |
| <td>Gives all targets that do not have the update status In_sync or error and that contains the term SHC1 in their name.</td> |
| </tr> |
| |
| <tr> |
| <td>(updatestatus!=error or updatestatus!=pending) and (name==*CCU* or description==*CCU*)</td> |
| <td>Gives all targets that either have the term ‘CCU’ in their name or their description and that either have the <em>update status</em> not in state error or pending.</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p><img src="../images/ui/target_filter.png" alt="Target Filter Management view" /></p> |
| |
| |
| <aside class="copyright" role="note"> |
| <div class="logo"> |
| <a href="https://www.eclipse.org" target="_blank"> |
| <img src="/hawkbit/images/eclipse_foundation_logo.png" /> |
| </a> |
| </div> |
| <p class="notice"> |
| |
| © 2019 The Eclipse hawkBit Project – |
| |
| Documentation built with |
| <a href="https://www.gohugo.io" target="_blank">Hugo</a> |
| using the |
| <a href="http://github.com/digitalcraftsman/hugo-material-docs" target="_blank">Material</a> theme. |
| </p> |
| <p class="quickLinks"> |
| <a href="http://www.eclipse.org/legal/privacy.php" target="_blank"> |
| > Privacy Policy |
| </a> |
| <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank"> |
| > Terms of Use |
| </a> |
| <a href="http://www.eclipse.org/legal/copyright.php" target="_blank"> |
| > Copyright Agent |
| </a> |
| <a href="http://www.eclipse.org/legal" target="_blank"> |
| > Legal |
| </a> |
| <a href="https://www.eclipse.org/org/documents/epl-v10.php" target="_blank"> |
| > License |
| </a> |
| </p> |
| </aside> |
| |
| |
| <footer class="footer"> |
| |
| |
| <nav class="pagination" aria-label="Footer"> |
| <div class="previous"> |
| |
| <a href="https://www.eclipse.org/hawkbit/architecture/" title="Architecture"> |
| <span class="direction"> |
| Previous |
| </span> |
| <div class="page"> |
| <div class="button button-previous" role="button" aria-label="Previous"> |
| <i class="icon icon-back"></i> |
| </div> |
| <div class="stretch"> |
| <div class="title"> |
| Architecture |
| </div> |
| </div> |
| </div> |
| </a> |
| |
| </div> |
| |
| <div class="next"> |
| |
| <a href="https://www.eclipse.org/hawkbit/apis/management_api/" title="Management API"> |
| <span class="direction"> |
| Next |
| </span> |
| <div class="page"> |
| <div class="stretch"> |
| <div class="title"> |
| Management API |
| </div> |
| </div> |
| <div class="button button-next" role="button" aria-label="Next"> |
| <i class="icon icon-forward"></i> |
| </div> |
| </div> |
| </a> |
| |
| </div> |
| </nav> |
| |
| |
| |
| |
| |
| </footer> |
| </div> |
| </article> |
| |
| <div class="results" role="status" aria-live="polite"> |
| <div class="scrollable"> |
| <div class="wrapper"> |
| <div class="meta"></div> |
| <div class="list"></div> |
| </div> |
| </div> |
| </div> |
| </main> |
| |
| <script> |
| |
| var base_url = 'https:\/\/www.eclipse.org\/hawkbit\/'; |
| var repo_id = 'eclipse\/hawkbit'; |
| |
| </script> |
| |
| <script src="https://www.eclipse.org/hawkbit/javascripts/application.js"></script> |
| |
| |
| <script> |
| /* Add headers to scrollspy */ |
| var headers = document.getElementsByTagName("h2"); |
| var scrollspy = document.getElementById('scrollspy'); |
| |
| if(scrollspy) { |
| if(headers.length > 0) { |
| for(var i = 0; i < headers.length; i++) { |
| var li = document.createElement("li"); |
| li.setAttribute("class", "anchor"); |
| |
| var a = document.createElement("a"); |
| if(!headers[i].id) |
| a.setAttribute("href", headers[i].parentNode.href); |
| else |
| a.setAttribute("href", "#" + headers[i].id); |
| a.setAttribute("title", headers[i].innerHTML); |
| a.innerHTML = headers[i].innerHTML; |
| |
| li.appendChild(a); |
| scrollspy.appendChild(li); |
| } |
| } else { |
| scrollspy.parentElement.removeChild(scrollspy) |
| } |
| |
| |
| /* Add permanent link next to the headers */ |
| var headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6"); |
| |
| for(var i = 0; i < headers.length; i++) { |
| var a = document.createElement("a"); |
| a.setAttribute("class", "headerlink"); |
| a.setAttribute("href", "#" + headers[i].id); |
| a.setAttribute("title", "Permanent link"); |
| a.innerHTML = "#"; |
| headers[i].appendChild(a); |
| } |
| } |
| </script> |
| |
| <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/highlight.min.js"></script> |
| <script>hljs.initHighlightingOnLoad();</script> |
| </body> |
| </html> |
| |