<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="Robot Framework 3.1.2 (Python 3.9.10 on linux)" name="Generator">
<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAAAAAAAAAAAAAAAALIAAAD/AAAA4AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA4AAAAP8AAACxAAAAAAAAAKYAAAD/AAAAuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/AAAA/wAAAKkAAAD6AAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN8AAAD/AAAA+gAAAMMAAAAAAAAAAgAAAGsAAABrAAAAawAAAGsAAABrAAAAawAAAGsAAABrAAAADAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAIsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANEAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAAAAAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAFAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAADwAAAB8AAAAAAAAAGAAAABcAAAAAAAAAH8AAABKAAAAAAAAAAAAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAADCAAAA/wAAACkAAADqAAAA4QAAAAAAAAD7AAAA/wAAALAAAAAGAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAIwAAAP4AAAD/AAAA/wAAAGAAAAAAAAAAAAAAAMkAAAD/AAAAigAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAAAAAAAIAAAAcAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAA2gAAAP8AAAD7AAAAywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4AAAD/AAAAqwAAAP8AAACvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIAAAD/AAAAsgAAAAAAAAC5AAAA/wAAAMoAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMkAAAD/AAAAvAAAAAAAAAAAAAAAAAAAAKwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArQAAAAAAAAAAwAMAAIABAAAf+AAAP/wAAD/8AAAgBAAAP/wAAD/8AAA//AAAJIwAADHEAAA//AAAP/wAAB/4AACAAQAAwAMAAA==">
<style media="all" type="text/css">
body {
    background: white;
    color: black;
    font-size: small;
    font-family: sans-serif;
    padding: 0 0.5em;
}
.metadata th {
    text-align: left;
    padding-right: 1em;
}
a.name, span.name {
    font-style: italic;
}
a, a:link, a:visited {
    color: #c30;
}
a img {
    border: 1px solid #c30 !important;
}
a:hover, a:active {
    text-decoration: underline;
    color: black;
}
a:hover {
    text-decoration: underline !important;
}
.shortcuts {
    margin: 1em 0;
    font-size: 0.9em;
}
.shortcuts a {
    display: inline-block;
    text-decoration: none;
    white-space: nowrap;
    color: black;
}
.shortcuts a::first-letter {
    font-weight: bold;
    letter-spacing: 0.1em;
}
.normal-first-letter::first-letter {
    font-weight: normal !important;
    letter-spacing: 0 !important;
}
.keywords {
    border: 1px solid #ccc;
    border-collapse: collapse;
    empty-cells: show;
    margin: 0.3em 0;
    width: 100%;
}
.keywords th, .keywords td {
    border: 1px solid #ccc;
    padding: 0.2em;
    vertical-align: top;
}
.keywords th {
    background: #ddd;
    color: black;
}
.kw, .args, .tags {
    min-width: 100px;
    max-width: 20%;
}
td.kw a {
    color: inherit;
    text-decoration: none;
    font-weight: bold;
}
.args span {
    font-style: italic;
    padding: 0 0.1em;
}
.tags a {
    color: inherit;
    text-decoration: none;
    padding: 0 0.1em;
}
.footer {
    font-size: 0.9em;
}
/* Docs originating from HTML and reST are wrapped to divs. */
.doc div > *:first-child {
    margin-top: 0;
}
.doc div > *:last-child {    /* Does not work with IE8. */
    margin-bottom: 0;
}
#search, #open-search {
    position: fixed;
    bottom: 5px;
    right: 5px;
    z-index: 1000;
}
#search {
    width: 30em;
    display: none;
}
#open-search {
    border: 2px solid #ccc;
    border-radius: 4px;
    width: 40px;
    height: 40px;
    background-color: white;
    background-repeat: no-repeat;
    background-position: center;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAY5JREFUSImt1LtrFGEUBfCfURsFHwEr29UNkS3MFklrQK0EIYUk/5IQ0FSmCCKW1mpAommToCKoK+lsLUKeSFbXFLuT3B13Hjt64INvOPeec+fOnUs2mpjHBrbRwQE+YQFTObm5qGMZf0qct7gxjPgM9kqKJ+cAs2XFf4fEX3iOe7iKsxjFHTxFO8R2ikzqqcq/oVFQUANfUm8ynhUce97qVVoGo/gaclcGBTVDQDuvigw09Lfrr+maD+TSkOIJngWNx2lyI5C3KxrcDRof0+R2IC9XNLgSNPbTZDKa7YricFr/v3EqIUZ0xxPO4FxFg0vhnoz7scFmICcqGjTDvRWJEayG57mKBg/C/U2anHDSu5+oDSlex6GTlTE2KOhVMPmACyXFL+qOZZL7Xf/3OMY17KZMrheI13px6e26nmVyX3eDxnYt4lav0qTiaTzp8VkrPNdkNyOpkyM4lEkNL0uK/CjgXw8ySHATD7GGLd0/fgfv8QiTOI93BSb/jCKT/4Isk1ZOTiWTF0H8M8aPANvFyARlADGFAAAAAElFTkSuQmCC);
    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0zLjUgMGMtMS45MyAwLTMuNSAxLjU3LTMuNSAzLjVzMS41NyAzLjUgMy41IDMuNWMuNTkgMCAxLjE3LS4xNCAxLjY2LS40MWExIDEgMCAwIDAgLjEzLjEzbDEgMWExLjAyIDEuMDIgMCAxIDAgMS40NC0xLjQ0bC0xLTFhMSAxIDAgMCAwLS4xNi0uMTNjLjI3LS40OS40NC0xLjA2LjQ0LTEuNjYgMC0xLjkzLTEuNTctMy41LTMuNS0zLjV6bTAgMWMxLjM5IDAgMi41IDEuMTEgMi41IDIuNSAwIC42Ni0uMjQgMS4yNy0uNjYgMS43Mi0uMDEuMDEtLjAyLjAyLS4wMy4wM2ExIDEgMCAwIDAtLjEzLjEzYy0uNDQuNC0xLjA0LjYzLTEuNjkuNjMtMS4zOSAwLTIuNS0xLjExLTIuNS0yLjVzMS4xMS0yLjUgMi41LTIuNXoiCiAgLz4KPC9zdmc+), none;
    background-size: 24px 24px;
}
#open-search:hover {
    background-color: #ccc;
}
fieldset {
    background: white;
    border: 2px solid #ccc;
    border-radius: 4px;
    padding: 6px 8px;
}
fieldset fieldset {
    border: 1px solid #ccc;
    margin: 4px 0;
}
#search-title {
    font-size: 1.1em;
    font-weight: bold;
    letter-spacing: 1px;
}
#search-string {
    box-sizing: border-box;
    width: 100%;
}
#hide-unmatched {
    margin: 0.5em 0 0 1em;
}
#search-buttons {
    float: right;
}
.highlight {
    background: yellow;
}
.no-match {
    color: gray !important;
}
tr.no-match.hide-unmatched {
    display: none;
}
</style>
<style media="all" type="text/css">
/* Pygments 'default' style sheet. Generated with Pygments 2.1.3 using:
     pygmentize -S default -f html -a .code > src/robot/htmldata/libdoc/pygments.css
*/
.code .hll { background-color: #ffffcc }
.code  { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #888888 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0044DD } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mb { color: #666666 } /* Literal.Number.Bin */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<style media="print" type="text/css">
body {
    margin: 0;
    padding: 0;
    font-size: 8pt;
}
a {
    text-decoration: none;
}
#search, #open-search {
    display: none;
}
</style>
<style media="all" type="text/css">
#javascript-disabled {
    width: 600px;
    margin: 100px auto 0 auto;
    padding: 20px;
    color: black;
    border: 1px solid #ccc;
    background: #eee;
}
#javascript-disabled h1 {
    width: 100%;
    float: none;
}
#javascript-disabled ul {
    font-size: 1.2em;
}
#javascript-disabled li {
    margin: 0.5em 0;
}
#javascript-disabled b {
    font-style: italic;
}
</style>
<style media="all" type="text/css">
.doc > * {
    margin: 0.7em 1em 0.1em 1em;
    padding: 0;
}
.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
    margin: 0.7em 0 0.1em 0;
}
.doc > *:first-child {
    margin-top: 0.1em;
}
.doc table {
    border: 1px solid #ccc;
    background: transparent;
    border-collapse: collapse;
    empty-cells: show;
    font-size: 0.9em;
}
.doc table th, .doc table td {
    border: 1px solid #ccc;
    background: transparent;
    padding: 0.1em 0.3em;
    height: 1.2em;
}
.doc table th {
    text-align: center;
    letter-spacing: 0.1em;
}
.doc pre {
    font-size: 1.1em;
    letter-spacing: 0.05em;
    background: #f4f4f4;
}
.doc code {
    padding: 0 0.2em;
    letter-spacing: 0.05em;
    background: #eee;
}
.doc li {
    list-style-position: inside;
    list-style-type: square;
}
.doc img {
    border: 1px solid #ccc;
}
.doc hr {
    background: #ccc;
    height: 1px;
    border: 0;
}
</style>
<script type="text/javascript">
window.util = function () {
    function map(elems, func) {
        var ret = [];
        for (var i = 0, len = elems.length; i < len; i++) {
            ret[i] = func(elems[i]);
        }
        return ret;
    }
    function filter(elems, predicate) {
        var ret = [];
        for (var i = 0, len = elems.length; i < len; i++) {
            if (predicate(elems[i]))
                ret.push(elems[i]);
        }
        return ret;
    }
    function all(elems) {
        for (var i = 0, len = elems.length; i < len; i++) {
            if (!elems[i])
                return false;
        }
        return true;
    }
    function any(elems) {
        for (var i = 0, len = elems.length; i < len; i++) {
            if (elems[i])
                return elems[i];
        }
        return false;
    }
    function contains(elems, e) {
        for (var i = 0, len = elems.length; i < len; i++) {
            if (elems[i] == e)
                return true;
        }
        return false;
    }
    function last(items) {
        return items[items.length-1];
    }
    function unescape(string) {
        return string.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
    }
    function escape(string) {
        return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    }
    function normalize(string) {
        return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
    }
    function regexpEscape(string) {
        return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
    }
    function Matcher(pattern) {
        pattern = regexpEscape(normalize(pattern));
        var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
        var regexp = new RegExp(rePattern);
        function matches(string) {
            return regexp.test(normalize(string));
        }
        return {
            matches: matches,
            matchesAny: function (strings) {
                for (var i = 0, len = strings.length; i < len; i++)
                    if (matches(strings[i]))
                        return true;
                return false;
            }
        };
    }
    function formatParentName(item) {
        var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
        return parentName.replace(/\./g, ' . ');
    }
    function timeFromDate(date) {
        if (!date)
            return 'N/A';
        return formatTime(date.getHours(), date.getMinutes(),
                          date.getSeconds(), date.getMilliseconds());
    }
    function dateFromDate(date) {
        if (!date)
            return 'N/A';
        return padTo(date.getFullYear(), 4) +
               padTo(date.getMonth() + 1, 2) +
               padTo(date.getDate(), 2);
    }
    function dateTimeFromDate(date) {
        if (!date)
            return 'N/A';
        return dateFromDate(date) + ' ' + timeFromDate(date);
    }
    function formatTime(hours, minutes, seconds, milliseconds) {
        return padTo(hours, 2) + ':' +
               padTo(minutes, 2) + ':' +
               padTo(seconds, 2) + '.' +
               padTo(milliseconds, 3);
    }
    function formatElapsed(elapsed) {
        var millis = elapsed;
        var hours = Math.floor(millis / (60 * 60 * 1000));
        millis -= hours * 60 * 60 * 1000;
        var minutes = Math.floor(millis / (60 * 1000));
        millis -= minutes * 60 * 1000;
        var seconds = Math.floor(millis / 1000);
        millis -= seconds * 1000;
        return formatTime(hours, minutes, seconds, millis);
    }
    function padTo(number, len) {
        var numString = number + "";
        while (numString.length < len) numString = "0" + numString;
        return numString;
    }
    function timestamp(millis) {
        // used also by tools that do not set window.output.baseMillis
        var base = window.output ? window.output.baseMillis : 0;
        return new Date(base + millis);
    }
    function createGeneratedString(timestamp) {
        var date = new Date(timestamp);
        var dt = dateTimeFromDate(date).slice(0, 17);  // drop millis
        var offset = date.getTimezoneOffset();
        var sign = offset > 0 ? '-' : '+';
        var hh = Math.floor(Math.abs(offset) / 60);
        var mm = Math.abs(offset) % 60;
        return dt + ' UTC' + sign + padTo(hh, 2) + ':' + padTo(mm, 2);
    }
    function createGeneratedAgoString(timestamp) {
        function timeString(time, shortUnit) {
            var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
                        s: 'second'}[shortUnit];
            var end = time == 1 ? ' ' : 's ';
            return time + ' ' + unit + end;
        }
        function compensateLeapYears(days, years) {
            // Not a perfect algorithm but ought to be enough
            return days - Math.floor(years / 4);
        }
        var generated = Math.round(timestamp / 1000);
        var current = Math.round(new Date().getTime() / 1000);
        var elapsed = current - generated;
        var prefix = '';
        if (elapsed < 0) {
            prefix = '- ';
            elapsed = Math.abs(elapsed);
        }
        var secs  = elapsed % 60;
        var mins  = Math.floor(elapsed / 60) % 60;
        var hours = Math.floor(elapsed / (60*60)) % 24;
        var days  = Math.floor(elapsed / (60*60*24)) % 365;
        var years = Math.floor(elapsed / (60*60*24*365));
        if (years) {
            days = compensateLeapYears(days, years);
            return prefix + timeString(years, 'y') + timeString(days, 'd');
        } else if (days) {
            return prefix + timeString(days, 'd') + timeString(hours, 'h');
        } else if (hours) {
            return prefix + timeString(hours, 'h') + timeString(mins, 'm');
        } else if (mins) {
            return prefix + timeString(mins, 'm') + timeString(secs, 's');
        } else {
            return prefix + timeString(secs, 's');
        }
    }
    function parseQueryString(query) {
        var result = {};
        if (!query)
            return result;
        var params = query.split('&');
        var parts;
        function decode(item) {
            return decodeURIComponent(item.replace('+', ' '));
        }
        for (var i = 0, len = params.length; i < len; i++) {
            parts = params[i].split('=');
            result[decode(parts.shift())] = decode(parts.join('='));
        }
        return result;
    }
    return {
        map: map,
        filter: filter,
        all: all,
        any: any,
        contains: contains,
        last: last,
        escape: escape,
        unescape: unescape,
        normalize: normalize,
        regexpEscape: regexpEscape,
        Matcher: Matcher,
        formatParentName: formatParentName,
        timeFromDate: timeFromDate,
        dateFromDate: dateFromDate,
        dateTimeFromDate: dateTimeFromDate,
        formatElapsed: formatElapsed,
        timestamp: timestamp,
        createGeneratedString: createGeneratedString,
        createGeneratedAgoString: createGeneratedAgoString,
        parseQueryString: parseQueryString
    };
}();
</script>
<script type="text/javascript">
/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
</script>
<script type="text/javascript">
/*
 * jQuery Templates Plugin 1.0.0pre
 * http://github.com/jquery/jquery-tmpl
 * Requires jQuery 1.4.2
 *
 * Copyright Software Freedom Conservancy, Inc.
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 */
(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
</script>
<script type="text/javascript">
/*
 * jQuery Highlight plugin
 *
 * Based on highlight v3 by Johann Burkard
 * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
 *
 * Copyright (c) 2009 Bartek Szopka
 *
 * Licensed under MIT license.
 */
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a<e.childNodes.length;a++){a+=jQuery.highlight(e.childNodes[a],t,n,r)}}return 0}});jQuery.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};jQuery.extend(t,e);return this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this);e.normalize()}).end()};jQuery.fn.highlight=function(e,t){var n={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(n,t);if(e.constructor===String){e=[e]}e=jQuery.grep(e,function(e,t){return e!=""});e=jQuery.map(e,function(e,t){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")});if(e.length==0){return this}var r=n.caseSensitive?"":"i";var i="("+e.join("|")+")";if(n.wordsOnly){i="\\b"+i+"\\b"}var s=new RegExp(i,r);return this.each(function(){jQuery.highlight(this,s,n.element,n.className)})}
</script>
<script type="text/javascript">
libdoc = {"all_tags":[],"contains_tags":false,"doc":"<p>This library is intended to supported different Protocol Buffer definitions. Precondition is that python files generated from Protocol Buffer files are available in a pip package which must be installed before the library is used.\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Supported device\x3c/td>\n<td>Pip package\x3c/td>\n<td>Pip package version\x3c/td>\n<td>Library Name\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.1\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.2\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.3\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.4\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.5\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.6\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.8\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.9.9\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.10.1\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.10.2\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>0.12.0\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n<tr>\n<td>dmi\x3c/td>\n<td>device-management-interface\x3c/td>\n<td>1.0.0\x3c/td>\n<td>grpc_robot.Dmi\x3c/td>\n\x3c/tr>\n\x3c/table>","generated":"2022-02-07 12:57:36","inits":[],"keywords":[{"args":[],"doc":"<p>Closes the connection to the gRPC host.\x3c/p>","matched":true,"name":"Connection Close","shortdoc":"","tags":[]},{"args":["host","port","**kwargs"],"doc":"<p>Opens a connection to the gRPC host.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>host: &lt;string&gt;|&lt;IP address&gt;; Name or IP address of the gRPC host.\x3c/li>\n<li>port: &lt;number&gt;; TCP port of the gRPC host.\x3c/li>\n\x3c/ul>\n<p><b>Named Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>timeout: &lt;number&gt;; Timeout in seconds for a gRPC response. Default: 30 s\x3c/li>\n\x3c/ul>","matched":true,"name":"Connection Open","shortdoc":"","tags":[]},{"args":[],"doc":"<p>Retrieves the connection parameters for the gRPC channel.\x3c/p>\n<p><b>Return\x3c/b>: A dictionary with the keys:\x3c/p>\n<ul>\n<li>timeout\x3c/li>\n\x3c/ul>","matched":true,"name":"Connection Parameters Get","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>Sets the gRPC channel connection parameters.\x3c/p>\n<p><b>Named Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>timeout: &lt;number&gt;; Timeout in seconds for a gRPC response.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: Same dictionary as the keyword <i>Connection Parameter Get\x3c/i> with the values before they got changed.\x3c/p>","matched":true,"name":"Connection Parameters Set","shortdoc":"","tags":[]},{"args":[],"doc":"<p>Retrieve the version of the currently used python module <i>device-management-interface\x3c/i>.\x3c/p>\n<p><b>Return\x3c/b>: version string consisting of three dot-separated numbers (x.y.z)\x3c/p>","matched":true,"name":"Dmi Version Get","shortdoc":"","tags":[]},{"args":[],"doc":"<p>Returns the list of keyword names\x3c/p>","matched":true,"name":"Get Keyword Names","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>ListEvents\x3c/i> from <i>NativeEventsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/p>\n<pre>\n{    # type: ListEventsResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'events': {    # type: EventsCfg\n    'items': [    # list of:\n      {    # type: EventCfg\n        'event_id': &lt;   0 - EVENT_NAME_UNDEFINED |\n                      100 - EVENT_TRANSCEIVER_PLUG_OUT |\n                      101 - EVENT_TRANSCEIVER_PLUG_IN |\n                      102 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD |\n                      103 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD |\n                      104 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD |\n                      105 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD |\n                      106 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD |\n                      107 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD |\n                      108 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD |\n                      109 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD |\n                      110 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD |\n                      111 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD |\n                      112 - EVENT_TRANSCEIVER_FAILURE |\n                      113 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED |\n                      114 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED |\n                      115 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED |\n                      116 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED |\n                      117 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED |\n                      118 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED |\n                      119 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                      120 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED |\n                      121 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                      122 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED |\n                      123 - EVENT_TRANSCEIVER_FAILURE_RECOVERED |\n                      200 - EVENT_PSU_PLUG_OUT |\n                      201 - EVENT_PSU_PLUG_IN |\n                      202 - EVENT_PSU_FAILURE |\n                      203 - EVENT_PSU_FAILURE_RECOVERED |\n                      300 - EVENT_FAN_FAILURE |\n                      301 - EVENT_FAN_PLUG_OUT |\n                      302 - EVENT_FAN_PLUG_IN |\n                      303 - EVENT_FAN_FAILURE_RECOVERED |\n                      400 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL |\n                      401 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL |\n                      402 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                      403 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                      500 - EVENT_HW_DEVICE_RESET |\n                      501 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL |\n                      502 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL |\n                      503 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                      504 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                      505 - EVENT_HW_DEVICE_REBOOT |\n                      506 - EVENT_HW_TEMPERATURE_SENSOR_FAILED |\n                      507 - EVENT_HW_ALL_TEMPERATURE_SENSORS_FAILED &gt;\n        'is_configured': &lt;bool&gt;,\n        'thresholds': {    # type: Thresholds\n          '<i>ONEOF threshold\x3c/i>: <b>upper\x3c/b>': {    # type: WaterMarks\n            'high': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n            'low': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n          }\n          '<i>ONEOF threshold\x3c/i>: <b>lower\x3c/b>': {    # type: WaterMarks\n            'high': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n            'low': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n          }\n        }\n      }\n    ]\n  }\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Event Mgmt Service List Events","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>RPC <i>StreamEvents\x3c/i> from <i>NativeEventsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>: <i>none\x3c/i>\x3c/p>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/p>\n<pre>\n[    # list of:\n  {    # type: Event\n    'event_metadata': {    # type: EventMetaData\n      'device_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_name': &lt;string&gt;,\n    }\n    'event_id': &lt;   0 - EVENT_NAME_UNDEFINED |\n                  100 - EVENT_TRANSCEIVER_PLUG_OUT |\n                  101 - EVENT_TRANSCEIVER_PLUG_IN |\n                  102 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD |\n                  103 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD |\n                  104 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD |\n                  105 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD |\n                  106 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD |\n                  107 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD |\n                  108 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD |\n                  109 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD |\n                  110 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD |\n                  111 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD |\n                  112 - EVENT_TRANSCEIVER_FAILURE |\n                  113 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED |\n                  114 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED |\n                  115 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED |\n                  116 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED |\n                  117 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED |\n                  118 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED |\n                  119 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                  120 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED |\n                  121 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                  122 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED |\n                  123 - EVENT_TRANSCEIVER_FAILURE_RECOVERED |\n                  200 - EVENT_PSU_PLUG_OUT |\n                  201 - EVENT_PSU_PLUG_IN |\n                  202 - EVENT_PSU_FAILURE |\n                  203 - EVENT_PSU_FAILURE_RECOVERED |\n                  300 - EVENT_FAN_FAILURE |\n                  301 - EVENT_FAN_PLUG_OUT |\n                  302 - EVENT_FAN_PLUG_IN |\n                  303 - EVENT_FAN_FAILURE_RECOVERED |\n                  400 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL |\n                  401 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL |\n                  402 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                  403 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                  500 - EVENT_HW_DEVICE_RESET |\n                  501 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL |\n                  502 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL |\n                  503 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                  504 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                  505 - EVENT_HW_DEVICE_REBOOT |\n                  506 - EVENT_HW_TEMPERATURE_SENSOR_FAILED |\n                  507 - EVENT_HW_ALL_TEMPERATURE_SENSORS_FAILED &gt;\n    'raised_ts': &lt;google.protobuf.Timestamp&gt;,\n    'threshold_info': {    # type: ThresholdInformation\n      'observed_value': {    # type: ValueType\n        '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n        '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n        '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n      }\n      'thresholds': {    # type: Thresholds\n        '<i>ONEOF threshold\x3c/i>: <b>upper\x3c/b>': {    # type: WaterMarks\n          'high': {    # type: ValueType\n            '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n          }\n          'low': {    # type: ValueType\n            '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n          }\n        }\n        '<i>ONEOF threshold\x3c/i>: <b>lower\x3c/b>': {    # type: WaterMarks\n          'high': {    # type: ValueType\n            '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n          }\n          'low': {    # type: ValueType\n            '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n            '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n          }\n        }\n      }\n    }\n    'add_info': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Hw Event Mgmt Service Stream Events","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>UpdateEventsConfiguration\x3c/i> from <i>NativeEventsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: EventsConfigurationRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  '<i>ONEOF operation\x3c/i>: <b>changes\x3c/b>': {    # type: EventsCfg\n    'items': [    # list of:\n      {    # type: EventCfg\n        'event_id': &lt;   0 - EVENT_NAME_UNDEFINED |\n                      100 - EVENT_TRANSCEIVER_PLUG_OUT |\n                      101 - EVENT_TRANSCEIVER_PLUG_IN |\n                      102 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD |\n                      103 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD |\n                      104 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD |\n                      105 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD |\n                      106 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD |\n                      107 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD |\n                      108 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD |\n                      109 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD |\n                      110 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD |\n                      111 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD |\n                      112 - EVENT_TRANSCEIVER_FAILURE |\n                      113 - EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED |\n                      114 - EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED |\n                      115 - EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED |\n                      116 - EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED |\n                      117 - EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED |\n                      118 - EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED |\n                      119 - EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                      120 - EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED |\n                      121 - EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED |\n                      122 - EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED |\n                      123 - EVENT_TRANSCEIVER_FAILURE_RECOVERED |\n                      200 - EVENT_PSU_PLUG_OUT |\n                      201 - EVENT_PSU_PLUG_IN |\n                      202 - EVENT_PSU_FAILURE |\n                      203 - EVENT_PSU_FAILURE_RECOVERED |\n                      300 - EVENT_FAN_FAILURE |\n                      301 - EVENT_FAN_PLUG_OUT |\n                      302 - EVENT_FAN_PLUG_IN |\n                      303 - EVENT_FAN_FAILURE_RECOVERED |\n                      400 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL |\n                      401 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL |\n                      402 - EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                      403 - EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                      500 - EVENT_HW_DEVICE_RESET |\n                      501 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL |\n                      502 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL |\n                      503 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED |\n                      504 - EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED |\n                      505 - EVENT_HW_DEVICE_REBOOT |\n                      506 - EVENT_HW_TEMPERATURE_SENSOR_FAILED |\n                      507 - EVENT_HW_ALL_TEMPERATURE_SENSORS_FAILED &gt;\n        'is_configured': &lt;bool&gt;,\n        'thresholds': {    # type: Thresholds\n          '<i>ONEOF threshold\x3c/i>: <b>upper\x3c/b>': {    # type: WaterMarks\n            'high': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n            'low': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n          }\n          '<i>ONEOF threshold\x3c/i>: <b>lower\x3c/b>': {    # type: WaterMarks\n            'high': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n            'low': {    # type: ValueType\n              '<i>ONEOF val\x3c/i>: <b>int_val\x3c/b>': &lt;int64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>uint_val\x3c/b>': &lt;uint64&gt;,\n              '<i>ONEOF val\x3c/i>: <b>float_val\x3c/b>': &lt;float&gt;,\n            }\n          }\n        }\n      }\n    ]\n  }\n  '<i>ONEOF operation\x3c/i>: <b>reset_to_default\x3c/b>': &lt;bool&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: EventsConfigurationResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Event Mgmt Service Update Events Configuration","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetHWComponentInfo\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HWComponentInfoGetRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'component_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'component_name': &lt;string&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/p>\n<pre>\n[    # list of:\n  {    # type: HWComponentInfoGetResponse\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - UNKNOWN_DEVICE |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_UNREACHABLE &gt;\n    'component': {    # type: Component\n      'name': &lt;string&gt;,\n      'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                  1 - COMPONENT_TYPE_UNKNOWN |\n                  2 - COMPONENT_TYPE_CHASSIS |\n                  3 - COMPONENT_TYPE_BACKPLANE |\n                  4 - COMPONENT_TYPE_CONTAINER |\n                  5 - COMPONENT_TYPE_POWER_SUPPLY |\n                  6 - COMPONENT_TYPE_FAN |\n                  7 - COMPONENT_TYPE_SENSOR |\n                  8 - COMPONENT_TYPE_MODULE |\n                  9 - COMPONENT_TYPE_PORT |\n                 10 - COMPONENT_TYPE_CPU |\n                 11 - COMPONENT_TYPE_BATTERY |\n                 12 - COMPONENT_TYPE_STORAGE |\n                 13 - COMPONENT_TYPE_MEMORY |\n                 14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n      'description': &lt;string&gt;,\n      'parent': &lt;string&gt;,\n      'parent_rel_pos': &lt;int32&gt;,\n      'children': [    # list of:\n        &lt; recursive type: Component &gt;\n      ]\n      'hardware_rev': &lt;string&gt;,\n      'firmware_rev': &lt;string&gt;,\n      'software_rev': &lt;string&gt;,\n      'serial_num': &lt;string&gt;,\n      'mfg_name': &lt;string&gt;,\n      'model_name': &lt;string&gt;,\n      'alias': &lt;string&gt;,\n      'asset_id': &lt;string&gt;,\n      'is_fru': &lt;bool&gt;,\n      'mfg_date': &lt;google.protobuf.Timestamp&gt;,\n      'uri': {    # type: Uri\n        'uri': &lt;string&gt;,\n      }\n      'uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'state': {    # type: ComponentState\n        'state_last_changed': &lt;google.protobuf.Timestamp&gt;,\n        'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                         1 - COMP_ADMIN_STATE_UNKNOWN |\n                         2 - COMP_ADMIN_STATE_LOCKED |\n                         3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                         4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n        'oper_state': &lt; 0 - COMP_OPER_STATE_UNDEFINED |\n                        1 - COMP_OPER_STATE_UNKNOWN |\n                        2 - COMP_OPER_STATE_DISABLED |\n                        3 - COMP_OPER_STATE_ENABLED |\n                        4 - COMP_OPER_STATE_TESTING &gt;\n        'usage_state': &lt; 0 - COMP_USAGE_STATE_UNDEFINED |\n                         1 - COMP_USAGE_STATE_UNKNOWN |\n                         2 - COMP_USAGE_STATE_IDLE |\n                         3 - COMP_USAGE_STATE_ACTIVE |\n                         4 - COMP_USAGE_STATE_BUSY &gt;\n        'alarm_state': &lt; 0 - COMP_ALARM_STATE_UNDEFINED |\n                         1 - COMP_ALARM_STATE_UNKNOWN |\n                         2 - COMP_ALARM_STATE_UNDER_REPAIR |\n                         3 - COMP_ALARM_STATE_CRITICAL |\n                         4 - COMP_ALARM_STATE_MAJOR |\n                         5 - COMP_ALARM_STATE_MINOR |\n                         6 - COMP_ALARM_STATE_WARNING |\n                         7 - COMP_ALARM_STATE_INDETERMINATE &gt;\n        'standby_state': &lt; 0 - COMP_STANDBY_STATE_UNDEFINED |\n                           1 - COMP_STANDBY_STATE_UNKNOWN |\n                           2 - COMP_STANDBY_STATE_HOT |\n                           3 - COMP_STANDBY_STATE_COLD |\n                           4 - COMP_STANDBY_STATE_PROVIDING_SERVICE &gt;\n      }\n      'sensor_data': [    # list of:\n        {    # type: ComponentSensorData\n          'value': &lt;int32&gt;,\n          'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                     1 - VALUE_TYPE_OTHER |\n                     2 - VALUE_TYPE_UNKNOWN |\n                     3 - VALUE_TYPE_VOLTS_AC |\n                     4 - VALUE_TYPE_VOLTS_DC |\n                     5 - VALUE_TYPE_AMPERES |\n                     6 - VALUE_TYPE_WATTS |\n                     7 - VALUE_TYPE_HERTZ |\n                     8 - VALUE_TYPE_CELSIUS |\n                     9 - VALUE_TYPE_PERCENT_RH |\n                    10 - VALUE_TYPE_RPM |\n                    11 - VALUE_TYPE_CMM |\n                    12 - VALUE_TYPE_TRUTH_VALUE |\n                    13 - VALUE_TYPE_PERCENT |\n                    14 - VALUE_TYPE_METERS |\n                    15 - VALUE_TYPE_BYTES &gt;\n          'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                      1 - VALUE_SCALE_YOCTO |\n                      2 - VALUE_SCALE_ZEPTO |\n                      3 - VALUE_SCALE_ATTO |\n                      4 - VALUE_SCALE_FEMTO |\n                      5 - VALUE_SCALE_PICO |\n                      6 - VALUE_SCALE_NANO |\n                      7 - VALUE_SCALE_MICRO |\n                      8 - VALUE_SCALE_MILLI |\n                      9 - VALUE_SCALE_UNITS |\n                     10 - VALUE_SCALE_KILO |\n                     11 - VALUE_SCALE_MEGA |\n                     12 - VALUE_SCALE_GIGA |\n                     13 - VALUE_SCALE_TERA |\n                     14 - VALUE_SCALE_PETA |\n                     15 - VALUE_SCALE_EXA |\n                     16 - VALUE_SCALE_ZETTA |\n                     17 - VALUE_SCALE_YOTTA &gt;\n          'precision': &lt;int32&gt;,\n          'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                      1 - SENSOR_STATUS_OK |\n                      2 - SENSOR_STATUS_UNAVAILABLE |\n                      3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n          'units_display': &lt;string&gt;,\n          'timestamp': &lt;google.protobuf.Timestamp&gt;,\n          'value_update_rate': &lt;uint32&gt;,\n          'data_type': &lt;string&gt;,\n        }\n      ]\n      '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentAttributes\n        'connector_type': &lt; 0 - CONNECTOR_TYPE_UNDEFINED |\n                            1 - RJ45 |\n                            2 - FIBER_LC |\n                            3 - FIBER_SC_PC |\n                            4 - FIBER_MPO |\n                            5 - RS232 &gt;\n        'speed': &lt; 0 - SPEED_UNDEFINED |\n                   1 - DYNAMIC |\n                   2 - GIGABIT_1 |\n                   3 - GIGABIT_10 |\n                   4 - GIGABIT_25 |\n                   5 - GIGABIT_40 |\n                   6 - GIGABIT_100 |\n                   7 - GIGABIT_400 |\n                   8 - MEGABIT_2500 |\n                   9 - MEGABIT_1250 &gt;\n        'protocol': &lt; 0 - PROTOCOL_UNDEFINED |\n                      1 - ETHERNET |\n                      2 - GPON |\n                      3 - XGPON |\n                      4 - XGSPON |\n                      5 - GFAST |\n                      6 - SERIAL |\n                      7 - EPON |\n                      8 - BITS &gt;\n        'physical_label': &lt;string&gt;,\n        'mapping_label': &lt;string&gt;,\n        'pon_id_config': {    # type: PonIdConfig\n          'pon_id': &lt;bytes&gt;,\n          'pon_id_transmit_periodicity': &lt;uint32&gt;,\n        }\n        'speed_autonegotiation': &lt;bool&gt;,\n      }\n      '<i>ONEOF specific\x3c/i>: <b>container_attr\x3c/b>': {    # type: ContainerComponentAttributes\n        'physical_label': &lt;string&gt;,\n      }\n      '<i>ONEOF specific\x3c/i>: <b>psu_attr\x3c/b>': {    # type: PsuComponentAttributes\n        'supported_voltage': &lt; 0 - SUPPORTED_VOLTAGE_UNDEFINED |\n                               1 - V48 |\n                               2 - V230 |\n                               3 - V115 &gt;\n      }\n      '<i>ONEOF specific\x3c/i>: <b>transceiver_attr\x3c/b>': {    # type: TransceiverComponentsAttributes\n        'form_factor': &lt;  0 - FORM_FACTOR_UNKNOWN |\n                          1 - QSFP |\n                          2 - QSFP_PLUS |\n                          3 - QSFP28 |\n                          4 - SFP |\n                          5 - SFP_PLUS |\n                          6 - XFP |\n                          7 - CFP4 |\n                          8 - CFP2 |\n                          9 - CPAK |\n                         10 - X2 |\n                         11 - OTHER |\n                         12 - CFP |\n                         13 - CFP2_ACO |\n                         14 - CFP2_DCO &gt;\n        'trans_type': &lt; 0 - TYPE_UNKNOWN |\n                        1 - ETHERNET |\n                        2 - GPON |\n                        3 - XGPON |\n                        4 - XGSPON |\n                        5 - CPON |\n                        6 - NG_PON2 |\n                        7 - EPON &gt;\n        'max_distance': &lt;uint32&gt;,\n        'max_distance_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                 1 - VALUE_SCALE_YOCTO |\n                                 2 - VALUE_SCALE_ZEPTO |\n                                 3 - VALUE_SCALE_ATTO |\n                                 4 - VALUE_SCALE_FEMTO |\n                                 5 - VALUE_SCALE_PICO |\n                                 6 - VALUE_SCALE_NANO |\n                                 7 - VALUE_SCALE_MICRO |\n                                 8 - VALUE_SCALE_MILLI |\n                                 9 - VALUE_SCALE_UNITS |\n                                10 - VALUE_SCALE_KILO |\n                                11 - VALUE_SCALE_MEGA |\n                                12 - VALUE_SCALE_GIGA |\n                                13 - VALUE_SCALE_TERA |\n                                14 - VALUE_SCALE_PETA |\n                                15 - VALUE_SCALE_EXA |\n                                16 - VALUE_SCALE_ZETTA |\n                                17 - VALUE_SCALE_YOTTA &gt;\n        'rx_wavelength': [    # list of:\n          &lt;uint32&gt;,\n        ]\n        'tx_wavelength': [    # list of:\n          &lt;uint32&gt;,\n        ]\n        'wavelength_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                               1 - VALUE_SCALE_YOCTO |\n                               2 - VALUE_SCALE_ZEPTO |\n                               3 - VALUE_SCALE_ATTO |\n                               4 - VALUE_SCALE_FEMTO |\n                               5 - VALUE_SCALE_PICO |\n                               6 - VALUE_SCALE_NANO |\n                               7 - VALUE_SCALE_MICRO |\n                               8 - VALUE_SCALE_MILLI |\n                               9 - VALUE_SCALE_UNITS |\n                              10 - VALUE_SCALE_KILO |\n                              11 - VALUE_SCALE_MEGA |\n                              12 - VALUE_SCALE_GIGA |\n                              13 - VALUE_SCALE_TERA |\n                              14 - VALUE_SCALE_PETA |\n                              15 - VALUE_SCALE_EXA |\n                              16 - VALUE_SCALE_ZETTA |\n                              17 - VALUE_SCALE_YOTTA &gt;\n      }\n    }\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Hw Component Info","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetLogLevel\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: GetLogLevelRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'entities': [    # list of:\n    &lt;string&gt;,\n  ]\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetLogLevelResponse\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'logLevels': [    # list of:\n    {    # type: EntitiesLogLevel\n      'logLevel': &lt; 0 - TRACE |\n                    1 - DEBUG |\n                    2 - INFO |\n                    3 - WARN |\n                    4 - ERROR &gt;\n      'entities': [    # list of:\n        &lt;string&gt;,\n      ]\n    }\n  ]\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Log Level","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetLoggableEntities\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: GetLoggableEntitiesRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetLogLevelResponse\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'logLevels': [    # list of:\n    {    # type: EntitiesLogLevel\n      'logLevel': &lt; 0 - TRACE |\n                    1 - DEBUG |\n                    2 - INFO |\n                    3 - WARN |\n                    4 - ERROR &gt;\n      'entities': [    # list of:\n        &lt;string&gt;,\n      ]\n    }\n  ]\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Loggable Entities","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetLoggingEndpoint\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetLoggingEndpointResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'logging_endpoint': &lt;string&gt;,\n  'logging_protocol': &lt;string&gt;,\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Logging Endpoint","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>RPC <i>GetManagedDevices\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>: <i>none\x3c/i>\x3c/p>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/p>\n<pre>\n{    # type: ManagedDevicesResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'devices': [    # list of:\n    {    # type: ManagedDeviceInfo\n      'info': {    # type: ModifiableComponent\n        'name': &lt;string&gt;,\n        'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                    1 - COMPONENT_TYPE_UNKNOWN |\n                    2 - COMPONENT_TYPE_CHASSIS |\n                    3 - COMPONENT_TYPE_BACKPLANE |\n                    4 - COMPONENT_TYPE_CONTAINER |\n                    5 - COMPONENT_TYPE_POWER_SUPPLY |\n                    6 - COMPONENT_TYPE_FAN |\n                    7 - COMPONENT_TYPE_SENSOR |\n                    8 - COMPONENT_TYPE_MODULE |\n                    9 - COMPONENT_TYPE_PORT |\n                   10 - COMPONENT_TYPE_CPU |\n                   11 - COMPONENT_TYPE_BATTERY |\n                   12 - COMPONENT_TYPE_STORAGE |\n                   13 - COMPONENT_TYPE_MEMORY |\n                   14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n        'parent': {    # type: Component\n          'name': &lt;string&gt;,\n          'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                      1 - COMPONENT_TYPE_UNKNOWN |\n                      2 - COMPONENT_TYPE_CHASSIS |\n                      3 - COMPONENT_TYPE_BACKPLANE |\n                      4 - COMPONENT_TYPE_CONTAINER |\n                      5 - COMPONENT_TYPE_POWER_SUPPLY |\n                      6 - COMPONENT_TYPE_FAN |\n                      7 - COMPONENT_TYPE_SENSOR |\n                      8 - COMPONENT_TYPE_MODULE |\n                      9 - COMPONENT_TYPE_PORT |\n                     10 - COMPONENT_TYPE_CPU |\n                     11 - COMPONENT_TYPE_BATTERY |\n                     12 - COMPONENT_TYPE_STORAGE |\n                     13 - COMPONENT_TYPE_MEMORY |\n                     14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n          'description': &lt;string&gt;,\n          'parent': &lt;string&gt;,\n          'parent_rel_pos': &lt;int32&gt;,\n          'children': [    # list of:\n            &lt; recursive type: Component &gt;\n          ]\n          'hardware_rev': &lt;string&gt;,\n          'firmware_rev': &lt;string&gt;,\n          'software_rev': &lt;string&gt;,\n          'serial_num': &lt;string&gt;,\n          'mfg_name': &lt;string&gt;,\n          'model_name': &lt;string&gt;,\n          'alias': &lt;string&gt;,\n          'asset_id': &lt;string&gt;,\n          'is_fru': &lt;bool&gt;,\n          'mfg_date': &lt;google.protobuf.Timestamp&gt;,\n          'uri': {    # type: Uri\n            'uri': &lt;string&gt;,\n          }\n          'uuid': {    # type: Uuid\n            'uuid': &lt;string&gt;,\n          }\n          'state': {    # type: ComponentState\n            'state_last_changed': &lt;google.protobuf.Timestamp&gt;,\n            'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                             1 - COMP_ADMIN_STATE_UNKNOWN |\n                             2 - COMP_ADMIN_STATE_LOCKED |\n                             3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                             4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n            'oper_state': &lt; 0 - COMP_OPER_STATE_UNDEFINED |\n                            1 - COMP_OPER_STATE_UNKNOWN |\n                            2 - COMP_OPER_STATE_DISABLED |\n                            3 - COMP_OPER_STATE_ENABLED |\n                            4 - COMP_OPER_STATE_TESTING &gt;\n            'usage_state': &lt; 0 - COMP_USAGE_STATE_UNDEFINED |\n                             1 - COMP_USAGE_STATE_UNKNOWN |\n                             2 - COMP_USAGE_STATE_IDLE |\n                             3 - COMP_USAGE_STATE_ACTIVE |\n                             4 - COMP_USAGE_STATE_BUSY &gt;\n            'alarm_state': &lt; 0 - COMP_ALARM_STATE_UNDEFINED |\n                             1 - COMP_ALARM_STATE_UNKNOWN |\n                             2 - COMP_ALARM_STATE_UNDER_REPAIR |\n                             3 - COMP_ALARM_STATE_CRITICAL |\n                             4 - COMP_ALARM_STATE_MAJOR |\n                             5 - COMP_ALARM_STATE_MINOR |\n                             6 - COMP_ALARM_STATE_WARNING |\n                             7 - COMP_ALARM_STATE_INDETERMINATE &gt;\n            'standby_state': &lt; 0 - COMP_STANDBY_STATE_UNDEFINED |\n                               1 - COMP_STANDBY_STATE_UNKNOWN |\n                               2 - COMP_STANDBY_STATE_HOT |\n                               3 - COMP_STANDBY_STATE_COLD |\n                               4 - COMP_STANDBY_STATE_PROVIDING_SERVICE &gt;\n          }\n          'sensor_data': [    # list of:\n            {    # type: ComponentSensorData\n              'value': &lt;int32&gt;,\n              'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                         1 - VALUE_TYPE_OTHER |\n                         2 - VALUE_TYPE_UNKNOWN |\n                         3 - VALUE_TYPE_VOLTS_AC |\n                         4 - VALUE_TYPE_VOLTS_DC |\n                         5 - VALUE_TYPE_AMPERES |\n                         6 - VALUE_TYPE_WATTS |\n                         7 - VALUE_TYPE_HERTZ |\n                         8 - VALUE_TYPE_CELSIUS |\n                         9 - VALUE_TYPE_PERCENT_RH |\n                        10 - VALUE_TYPE_RPM |\n                        11 - VALUE_TYPE_CMM |\n                        12 - VALUE_TYPE_TRUTH_VALUE |\n                        13 - VALUE_TYPE_PERCENT |\n                        14 - VALUE_TYPE_METERS |\n                        15 - VALUE_TYPE_BYTES &gt;\n              'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                          1 - VALUE_SCALE_YOCTO |\n                          2 - VALUE_SCALE_ZEPTO |\n                          3 - VALUE_SCALE_ATTO |\n                          4 - VALUE_SCALE_FEMTO |\n                          5 - VALUE_SCALE_PICO |\n                          6 - VALUE_SCALE_NANO |\n                          7 - VALUE_SCALE_MICRO |\n                          8 - VALUE_SCALE_MILLI |\n                          9 - VALUE_SCALE_UNITS |\n                         10 - VALUE_SCALE_KILO |\n                         11 - VALUE_SCALE_MEGA |\n                         12 - VALUE_SCALE_GIGA |\n                         13 - VALUE_SCALE_TERA |\n                         14 - VALUE_SCALE_PETA |\n                         15 - VALUE_SCALE_EXA |\n                         16 - VALUE_SCALE_ZETTA |\n                         17 - VALUE_SCALE_YOTTA &gt;\n              'precision': &lt;int32&gt;,\n              'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                          1 - SENSOR_STATUS_OK |\n                          2 - SENSOR_STATUS_UNAVAILABLE |\n                          3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n              'units_display': &lt;string&gt;,\n              'timestamp': &lt;google.protobuf.Timestamp&gt;,\n              'value_update_rate': &lt;uint32&gt;,\n              'data_type': &lt;string&gt;,\n            }\n          ]\n          '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentAttributes\n            'connector_type': &lt; 0 - CONNECTOR_TYPE_UNDEFINED |\n                                1 - RJ45 |\n                                2 - FIBER_LC |\n                                3 - FIBER_SC_PC |\n                                4 - FIBER_MPO |\n                                5 - RS232 &gt;\n            'speed': &lt; 0 - SPEED_UNDEFINED |\n                       1 - DYNAMIC |\n                       2 - GIGABIT_1 |\n                       3 - GIGABIT_10 |\n                       4 - GIGABIT_25 |\n                       5 - GIGABIT_40 |\n                       6 - GIGABIT_100 |\n                       7 - GIGABIT_400 |\n                       8 - MEGABIT_2500 |\n                       9 - MEGABIT_1250 &gt;\n            'protocol': &lt; 0 - PROTOCOL_UNDEFINED |\n                          1 - ETHERNET |\n                          2 - GPON |\n                          3 - XGPON |\n                          4 - XGSPON |\n                          5 - GFAST |\n                          6 - SERIAL |\n                          7 - EPON |\n                          8 - BITS &gt;\n            'physical_label': &lt;string&gt;,\n            'mapping_label': &lt;string&gt;,\n            'pon_id_config': {    # type: PonIdConfig\n              'pon_id': &lt;bytes&gt;,\n              'pon_id_transmit_periodicity': &lt;uint32&gt;,\n            }\n            'speed_autonegotiation': &lt;bool&gt;,\n          }\n          '<i>ONEOF specific\x3c/i>: <b>container_attr\x3c/b>': {    # type: ContainerComponentAttributes\n            'physical_label': &lt;string&gt;,\n          }\n          '<i>ONEOF specific\x3c/i>: <b>psu_attr\x3c/b>': {    # type: PsuComponentAttributes\n            'supported_voltage': &lt; 0 - SUPPORTED_VOLTAGE_UNDEFINED |\n                                   1 - V48 |\n                                   2 - V230 |\n                                   3 - V115 &gt;\n          }\n          '<i>ONEOF specific\x3c/i>: <b>transceiver_attr\x3c/b>': {    # type: TransceiverComponentsAttributes\n            'form_factor': &lt;  0 - FORM_FACTOR_UNKNOWN |\n                              1 - QSFP |\n                              2 - QSFP_PLUS |\n                              3 - QSFP28 |\n                              4 - SFP |\n                              5 - SFP_PLUS |\n                              6 - XFP |\n                              7 - CFP4 |\n                              8 - CFP2 |\n                              9 - CPAK |\n                             10 - X2 |\n                             11 - OTHER |\n                             12 - CFP |\n                             13 - CFP2_ACO |\n                             14 - CFP2_DCO &gt;\n            'trans_type': &lt; 0 - TYPE_UNKNOWN |\n                            1 - ETHERNET |\n                            2 - GPON |\n                            3 - XGPON |\n                            4 - XGSPON |\n                            5 - CPON |\n                            6 - NG_PON2 |\n                            7 - EPON &gt;\n            'max_distance': &lt;uint32&gt;,\n            'max_distance_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                     1 - VALUE_SCALE_YOCTO |\n                                     2 - VALUE_SCALE_ZEPTO |\n                                     3 - VALUE_SCALE_ATTO |\n                                     4 - VALUE_SCALE_FEMTO |\n                                     5 - VALUE_SCALE_PICO |\n                                     6 - VALUE_SCALE_NANO |\n                                     7 - VALUE_SCALE_MICRO |\n                                     8 - VALUE_SCALE_MILLI |\n                                     9 - VALUE_SCALE_UNITS |\n                                    10 - VALUE_SCALE_KILO |\n                                    11 - VALUE_SCALE_MEGA |\n                                    12 - VALUE_SCALE_GIGA |\n                                    13 - VALUE_SCALE_TERA |\n                                    14 - VALUE_SCALE_PETA |\n                                    15 - VALUE_SCALE_EXA |\n                                    16 - VALUE_SCALE_ZETTA |\n                                    17 - VALUE_SCALE_YOTTA &gt;\n            'rx_wavelength': [    # list of:\n              &lt;uint32&gt;,\n            ]\n            'tx_wavelength': [    # list of:\n              &lt;uint32&gt;,\n            ]\n            'wavelength_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                   1 - VALUE_SCALE_YOCTO |\n                                   2 - VALUE_SCALE_ZEPTO |\n                                   3 - VALUE_SCALE_ATTO |\n                                   4 - VALUE_SCALE_FEMTO |\n                                   5 - VALUE_SCALE_PICO |\n                                   6 - VALUE_SCALE_NANO |\n                                   7 - VALUE_SCALE_MICRO |\n                                   8 - VALUE_SCALE_MILLI |\n                                   9 - VALUE_SCALE_UNITS |\n                                  10 - VALUE_SCALE_KILO |\n                                  11 - VALUE_SCALE_MEGA |\n                                  12 - VALUE_SCALE_GIGA |\n                                  13 - VALUE_SCALE_TERA |\n                                  14 - VALUE_SCALE_PETA |\n                                  15 - VALUE_SCALE_EXA |\n                                  16 - VALUE_SCALE_ZETTA |\n                                  17 - VALUE_SCALE_YOTTA &gt;\n          }\n        }\n        'parent_rel_pos': &lt;int32&gt;,\n        'alias': &lt;string&gt;,\n        'asset_id': &lt;string&gt;,\n        'uri': {    # type: Uri\n          'uri': &lt;string&gt;,\n        }\n        'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                         1 - COMP_ADMIN_STATE_UNKNOWN |\n                         2 - COMP_ADMIN_STATE_LOCKED |\n                         3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                         4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n        '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentChangeAttributes\n          'pon_id_config': {    # type: PonIdConfig\n            'pon_id': &lt;bytes&gt;,\n            'pon_id_transmit_periodicity': &lt;uint32&gt;,\n          }\n        }\n      }\n      'device_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n    }\n  ]\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Managed Devices","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>RPC <i>GetMsgBusEndpoint\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>: <i>none\x3c/i>\x3c/p>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetMsgBusEndpointResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'msgbus_endpoint': &lt;string&gt;,\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Msg Bus Endpoint","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetPhysicalInventory\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: PhysicalInventoryRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/p>\n<pre>\n[    # list of:\n  {    # type: PhysicalInventoryResponse\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - UNKNOWN_DEVICE |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_UNREACHABLE &gt;\n    'inventory': {    # type: Hardware\n      'last_change': &lt;google.protobuf.Timestamp&gt;,\n      'root': {    # type: Component\n        'name': &lt;string&gt;,\n        'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                    1 - COMPONENT_TYPE_UNKNOWN |\n                    2 - COMPONENT_TYPE_CHASSIS |\n                    3 - COMPONENT_TYPE_BACKPLANE |\n                    4 - COMPONENT_TYPE_CONTAINER |\n                    5 - COMPONENT_TYPE_POWER_SUPPLY |\n                    6 - COMPONENT_TYPE_FAN |\n                    7 - COMPONENT_TYPE_SENSOR |\n                    8 - COMPONENT_TYPE_MODULE |\n                    9 - COMPONENT_TYPE_PORT |\n                   10 - COMPONENT_TYPE_CPU |\n                   11 - COMPONENT_TYPE_BATTERY |\n                   12 - COMPONENT_TYPE_STORAGE |\n                   13 - COMPONENT_TYPE_MEMORY |\n                   14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n        'description': &lt;string&gt;,\n        'parent': &lt;string&gt;,\n        'parent_rel_pos': &lt;int32&gt;,\n        'children': [    # list of:\n          &lt; recursive type: Component &gt;\n        ]\n        'hardware_rev': &lt;string&gt;,\n        'firmware_rev': &lt;string&gt;,\n        'software_rev': &lt;string&gt;,\n        'serial_num': &lt;string&gt;,\n        'mfg_name': &lt;string&gt;,\n        'model_name': &lt;string&gt;,\n        'alias': &lt;string&gt;,\n        'asset_id': &lt;string&gt;,\n        'is_fru': &lt;bool&gt;,\n        'mfg_date': &lt;google.protobuf.Timestamp&gt;,\n        'uri': {    # type: Uri\n          'uri': &lt;string&gt;,\n        }\n        'uuid': {    # type: Uuid\n          'uuid': &lt;string&gt;,\n        }\n        'state': {    # type: ComponentState\n          'state_last_changed': &lt;google.protobuf.Timestamp&gt;,\n          'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                           1 - COMP_ADMIN_STATE_UNKNOWN |\n                           2 - COMP_ADMIN_STATE_LOCKED |\n                           3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                           4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n          'oper_state': &lt; 0 - COMP_OPER_STATE_UNDEFINED |\n                          1 - COMP_OPER_STATE_UNKNOWN |\n                          2 - COMP_OPER_STATE_DISABLED |\n                          3 - COMP_OPER_STATE_ENABLED |\n                          4 - COMP_OPER_STATE_TESTING &gt;\n          'usage_state': &lt; 0 - COMP_USAGE_STATE_UNDEFINED |\n                           1 - COMP_USAGE_STATE_UNKNOWN |\n                           2 - COMP_USAGE_STATE_IDLE |\n                           3 - COMP_USAGE_STATE_ACTIVE |\n                           4 - COMP_USAGE_STATE_BUSY &gt;\n          'alarm_state': &lt; 0 - COMP_ALARM_STATE_UNDEFINED |\n                           1 - COMP_ALARM_STATE_UNKNOWN |\n                           2 - COMP_ALARM_STATE_UNDER_REPAIR |\n                           3 - COMP_ALARM_STATE_CRITICAL |\n                           4 - COMP_ALARM_STATE_MAJOR |\n                           5 - COMP_ALARM_STATE_MINOR |\n                           6 - COMP_ALARM_STATE_WARNING |\n                           7 - COMP_ALARM_STATE_INDETERMINATE &gt;\n          'standby_state': &lt; 0 - COMP_STANDBY_STATE_UNDEFINED |\n                             1 - COMP_STANDBY_STATE_UNKNOWN |\n                             2 - COMP_STANDBY_STATE_HOT |\n                             3 - COMP_STANDBY_STATE_COLD |\n                             4 - COMP_STANDBY_STATE_PROVIDING_SERVICE &gt;\n        }\n        'sensor_data': [    # list of:\n          {    # type: ComponentSensorData\n            'value': &lt;int32&gt;,\n            'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                       1 - VALUE_TYPE_OTHER |\n                       2 - VALUE_TYPE_UNKNOWN |\n                       3 - VALUE_TYPE_VOLTS_AC |\n                       4 - VALUE_TYPE_VOLTS_DC |\n                       5 - VALUE_TYPE_AMPERES |\n                       6 - VALUE_TYPE_WATTS |\n                       7 - VALUE_TYPE_HERTZ |\n                       8 - VALUE_TYPE_CELSIUS |\n                       9 - VALUE_TYPE_PERCENT_RH |\n                      10 - VALUE_TYPE_RPM |\n                      11 - VALUE_TYPE_CMM |\n                      12 - VALUE_TYPE_TRUTH_VALUE |\n                      13 - VALUE_TYPE_PERCENT |\n                      14 - VALUE_TYPE_METERS |\n                      15 - VALUE_TYPE_BYTES &gt;\n            'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                        1 - VALUE_SCALE_YOCTO |\n                        2 - VALUE_SCALE_ZEPTO |\n                        3 - VALUE_SCALE_ATTO |\n                        4 - VALUE_SCALE_FEMTO |\n                        5 - VALUE_SCALE_PICO |\n                        6 - VALUE_SCALE_NANO |\n                        7 - VALUE_SCALE_MICRO |\n                        8 - VALUE_SCALE_MILLI |\n                        9 - VALUE_SCALE_UNITS |\n                       10 - VALUE_SCALE_KILO |\n                       11 - VALUE_SCALE_MEGA |\n                       12 - VALUE_SCALE_GIGA |\n                       13 - VALUE_SCALE_TERA |\n                       14 - VALUE_SCALE_PETA |\n                       15 - VALUE_SCALE_EXA |\n                       16 - VALUE_SCALE_ZETTA |\n                       17 - VALUE_SCALE_YOTTA &gt;\n            'precision': &lt;int32&gt;,\n            'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                        1 - SENSOR_STATUS_OK |\n                        2 - SENSOR_STATUS_UNAVAILABLE |\n                        3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n            'units_display': &lt;string&gt;,\n            'timestamp': &lt;google.protobuf.Timestamp&gt;,\n            'value_update_rate': &lt;uint32&gt;,\n            'data_type': &lt;string&gt;,\n          }\n        ]\n        '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentAttributes\n          'connector_type': &lt; 0 - CONNECTOR_TYPE_UNDEFINED |\n                              1 - RJ45 |\n                              2 - FIBER_LC |\n                              3 - FIBER_SC_PC |\n                              4 - FIBER_MPO |\n                              5 - RS232 &gt;\n          'speed': &lt; 0 - SPEED_UNDEFINED |\n                     1 - DYNAMIC |\n                     2 - GIGABIT_1 |\n                     3 - GIGABIT_10 |\n                     4 - GIGABIT_25 |\n                     5 - GIGABIT_40 |\n                     6 - GIGABIT_100 |\n                     7 - GIGABIT_400 |\n                     8 - MEGABIT_2500 |\n                     9 - MEGABIT_1250 &gt;\n          'protocol': &lt; 0 - PROTOCOL_UNDEFINED |\n                        1 - ETHERNET |\n                        2 - GPON |\n                        3 - XGPON |\n                        4 - XGSPON |\n                        5 - GFAST |\n                        6 - SERIAL |\n                        7 - EPON |\n                        8 - BITS &gt;\n          'physical_label': &lt;string&gt;,\n          'mapping_label': &lt;string&gt;,\n          'pon_id_config': {    # type: PonIdConfig\n            'pon_id': &lt;bytes&gt;,\n            'pon_id_transmit_periodicity': &lt;uint32&gt;,\n          }\n          'speed_autonegotiation': &lt;bool&gt;,\n        }\n        '<i>ONEOF specific\x3c/i>: <b>container_attr\x3c/b>': {    # type: ContainerComponentAttributes\n          'physical_label': &lt;string&gt;,\n        }\n        '<i>ONEOF specific\x3c/i>: <b>psu_attr\x3c/b>': {    # type: PsuComponentAttributes\n          'supported_voltage': &lt; 0 - SUPPORTED_VOLTAGE_UNDEFINED |\n                                 1 - V48 |\n                                 2 - V230 |\n                                 3 - V115 &gt;\n        }\n        '<i>ONEOF specific\x3c/i>: <b>transceiver_attr\x3c/b>': {    # type: TransceiverComponentsAttributes\n          'form_factor': &lt;  0 - FORM_FACTOR_UNKNOWN |\n                            1 - QSFP |\n                            2 - QSFP_PLUS |\n                            3 - QSFP28 |\n                            4 - SFP |\n                            5 - SFP_PLUS |\n                            6 - XFP |\n                            7 - CFP4 |\n                            8 - CFP2 |\n                            9 - CPAK |\n                           10 - X2 |\n                           11 - OTHER |\n                           12 - CFP |\n                           13 - CFP2_ACO |\n                           14 - CFP2_DCO &gt;\n          'trans_type': &lt; 0 - TYPE_UNKNOWN |\n                          1 - ETHERNET |\n                          2 - GPON |\n                          3 - XGPON |\n                          4 - XGSPON |\n                          5 - CPON |\n                          6 - NG_PON2 |\n                          7 - EPON &gt;\n          'max_distance': &lt;uint32&gt;,\n          'max_distance_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                   1 - VALUE_SCALE_YOCTO |\n                                   2 - VALUE_SCALE_ZEPTO |\n                                   3 - VALUE_SCALE_ATTO |\n                                   4 - VALUE_SCALE_FEMTO |\n                                   5 - VALUE_SCALE_PICO |\n                                   6 - VALUE_SCALE_NANO |\n                                   7 - VALUE_SCALE_MICRO |\n                                   8 - VALUE_SCALE_MILLI |\n                                   9 - VALUE_SCALE_UNITS |\n                                  10 - VALUE_SCALE_KILO |\n                                  11 - VALUE_SCALE_MEGA |\n                                  12 - VALUE_SCALE_GIGA |\n                                  13 - VALUE_SCALE_TERA |\n                                  14 - VALUE_SCALE_PETA |\n                                  15 - VALUE_SCALE_EXA |\n                                  16 - VALUE_SCALE_ZETTA |\n                                  17 - VALUE_SCALE_YOTTA &gt;\n          'rx_wavelength': [    # list of:\n            &lt;uint32&gt;,\n          ]\n          'tx_wavelength': [    # list of:\n            &lt;uint32&gt;,\n          ]\n          'wavelength_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                 1 - VALUE_SCALE_YOCTO |\n                                 2 - VALUE_SCALE_ZEPTO |\n                                 3 - VALUE_SCALE_ATTO |\n                                 4 - VALUE_SCALE_FEMTO |\n                                 5 - VALUE_SCALE_PICO |\n                                 6 - VALUE_SCALE_NANO |\n                                 7 - VALUE_SCALE_MICRO |\n                                 8 - VALUE_SCALE_MILLI |\n                                 9 - VALUE_SCALE_UNITS |\n                                10 - VALUE_SCALE_KILO |\n                                11 - VALUE_SCALE_MEGA |\n                                12 - VALUE_SCALE_GIGA |\n                                13 - VALUE_SCALE_TERA |\n                                14 - VALUE_SCALE_PETA |\n                                15 - VALUE_SCALE_EXA |\n                                16 - VALUE_SCALE_ZETTA |\n                                17 - VALUE_SCALE_YOTTA &gt;\n        }\n      }\n      'last_booted': &lt;google.protobuf.Timestamp&gt;,\n    }\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Hw Management Service Get Physical Inventory","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>RPC <i>HeartbeatCheck\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>: <i>none\x3c/i>\x3c/p>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: Heartbeat\n  'heartbeat_signature': &lt;fixed32&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Heartbeat Check","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>RebootDevice\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: RebootDeviceRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: RebootDeviceResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Reboot Device","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>SetHWComponentInfo\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HWComponentInfoSetRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'component_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'component_name': &lt;string&gt;,\n  'changes': {    # type: ModifiableComponent\n    'name': &lt;string&gt;,\n    'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                1 - COMPONENT_TYPE_UNKNOWN |\n                2 - COMPONENT_TYPE_CHASSIS |\n                3 - COMPONENT_TYPE_BACKPLANE |\n                4 - COMPONENT_TYPE_CONTAINER |\n                5 - COMPONENT_TYPE_POWER_SUPPLY |\n                6 - COMPONENT_TYPE_FAN |\n                7 - COMPONENT_TYPE_SENSOR |\n                8 - COMPONENT_TYPE_MODULE |\n                9 - COMPONENT_TYPE_PORT |\n               10 - COMPONENT_TYPE_CPU |\n               11 - COMPONENT_TYPE_BATTERY |\n               12 - COMPONENT_TYPE_STORAGE |\n               13 - COMPONENT_TYPE_MEMORY |\n               14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n    'parent': {    # type: Component\n      'name': &lt;string&gt;,\n      'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                  1 - COMPONENT_TYPE_UNKNOWN |\n                  2 - COMPONENT_TYPE_CHASSIS |\n                  3 - COMPONENT_TYPE_BACKPLANE |\n                  4 - COMPONENT_TYPE_CONTAINER |\n                  5 - COMPONENT_TYPE_POWER_SUPPLY |\n                  6 - COMPONENT_TYPE_FAN |\n                  7 - COMPONENT_TYPE_SENSOR |\n                  8 - COMPONENT_TYPE_MODULE |\n                  9 - COMPONENT_TYPE_PORT |\n                 10 - COMPONENT_TYPE_CPU |\n                 11 - COMPONENT_TYPE_BATTERY |\n                 12 - COMPONENT_TYPE_STORAGE |\n                 13 - COMPONENT_TYPE_MEMORY |\n                 14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n      'description': &lt;string&gt;,\n      'parent': &lt;string&gt;,\n      'parent_rel_pos': &lt;int32&gt;,\n      'children': [    # list of:\n        &lt; recursive type: Component &gt;\n      ]\n      'hardware_rev': &lt;string&gt;,\n      'firmware_rev': &lt;string&gt;,\n      'software_rev': &lt;string&gt;,\n      'serial_num': &lt;string&gt;,\n      'mfg_name': &lt;string&gt;,\n      'model_name': &lt;string&gt;,\n      'alias': &lt;string&gt;,\n      'asset_id': &lt;string&gt;,\n      'is_fru': &lt;bool&gt;,\n      'mfg_date': &lt;google.protobuf.Timestamp&gt;,\n      'uri': {    # type: Uri\n        'uri': &lt;string&gt;,\n      }\n      'uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'state': {    # type: ComponentState\n        'state_last_changed': &lt;google.protobuf.Timestamp&gt;,\n        'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                         1 - COMP_ADMIN_STATE_UNKNOWN |\n                         2 - COMP_ADMIN_STATE_LOCKED |\n                         3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                         4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n        'oper_state': &lt; 0 - COMP_OPER_STATE_UNDEFINED |\n                        1 - COMP_OPER_STATE_UNKNOWN |\n                        2 - COMP_OPER_STATE_DISABLED |\n                        3 - COMP_OPER_STATE_ENABLED |\n                        4 - COMP_OPER_STATE_TESTING &gt;\n        'usage_state': &lt; 0 - COMP_USAGE_STATE_UNDEFINED |\n                         1 - COMP_USAGE_STATE_UNKNOWN |\n                         2 - COMP_USAGE_STATE_IDLE |\n                         3 - COMP_USAGE_STATE_ACTIVE |\n                         4 - COMP_USAGE_STATE_BUSY &gt;\n        'alarm_state': &lt; 0 - COMP_ALARM_STATE_UNDEFINED |\n                         1 - COMP_ALARM_STATE_UNKNOWN |\n                         2 - COMP_ALARM_STATE_UNDER_REPAIR |\n                         3 - COMP_ALARM_STATE_CRITICAL |\n                         4 - COMP_ALARM_STATE_MAJOR |\n                         5 - COMP_ALARM_STATE_MINOR |\n                         6 - COMP_ALARM_STATE_WARNING |\n                         7 - COMP_ALARM_STATE_INDETERMINATE &gt;\n        'standby_state': &lt; 0 - COMP_STANDBY_STATE_UNDEFINED |\n                           1 - COMP_STANDBY_STATE_UNKNOWN |\n                           2 - COMP_STANDBY_STATE_HOT |\n                           3 - COMP_STANDBY_STATE_COLD |\n                           4 - COMP_STANDBY_STATE_PROVIDING_SERVICE &gt;\n      }\n      'sensor_data': [    # list of:\n        {    # type: ComponentSensorData\n          'value': &lt;int32&gt;,\n          'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                     1 - VALUE_TYPE_OTHER |\n                     2 - VALUE_TYPE_UNKNOWN |\n                     3 - VALUE_TYPE_VOLTS_AC |\n                     4 - VALUE_TYPE_VOLTS_DC |\n                     5 - VALUE_TYPE_AMPERES |\n                     6 - VALUE_TYPE_WATTS |\n                     7 - VALUE_TYPE_HERTZ |\n                     8 - VALUE_TYPE_CELSIUS |\n                     9 - VALUE_TYPE_PERCENT_RH |\n                    10 - VALUE_TYPE_RPM |\n                    11 - VALUE_TYPE_CMM |\n                    12 - VALUE_TYPE_TRUTH_VALUE |\n                    13 - VALUE_TYPE_PERCENT |\n                    14 - VALUE_TYPE_METERS |\n                    15 - VALUE_TYPE_BYTES &gt;\n          'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                      1 - VALUE_SCALE_YOCTO |\n                      2 - VALUE_SCALE_ZEPTO |\n                      3 - VALUE_SCALE_ATTO |\n                      4 - VALUE_SCALE_FEMTO |\n                      5 - VALUE_SCALE_PICO |\n                      6 - VALUE_SCALE_NANO |\n                      7 - VALUE_SCALE_MICRO |\n                      8 - VALUE_SCALE_MILLI |\n                      9 - VALUE_SCALE_UNITS |\n                     10 - VALUE_SCALE_KILO |\n                     11 - VALUE_SCALE_MEGA |\n                     12 - VALUE_SCALE_GIGA |\n                     13 - VALUE_SCALE_TERA |\n                     14 - VALUE_SCALE_PETA |\n                     15 - VALUE_SCALE_EXA |\n                     16 - VALUE_SCALE_ZETTA |\n                     17 - VALUE_SCALE_YOTTA &gt;\n          'precision': &lt;int32&gt;,\n          'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                      1 - SENSOR_STATUS_OK |\n                      2 - SENSOR_STATUS_UNAVAILABLE |\n                      3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n          'units_display': &lt;string&gt;,\n          'timestamp': &lt;google.protobuf.Timestamp&gt;,\n          'value_update_rate': &lt;uint32&gt;,\n          'data_type': &lt;string&gt;,\n        }\n      ]\n      '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentAttributes\n        'connector_type': &lt; 0 - CONNECTOR_TYPE_UNDEFINED |\n                            1 - RJ45 |\n                            2 - FIBER_LC |\n                            3 - FIBER_SC_PC |\n                            4 - FIBER_MPO |\n                            5 - RS232 &gt;\n        'speed': &lt; 0 - SPEED_UNDEFINED |\n                   1 - DYNAMIC |\n                   2 - GIGABIT_1 |\n                   3 - GIGABIT_10 |\n                   4 - GIGABIT_25 |\n                   5 - GIGABIT_40 |\n                   6 - GIGABIT_100 |\n                   7 - GIGABIT_400 |\n                   8 - MEGABIT_2500 |\n                   9 - MEGABIT_1250 &gt;\n        'protocol': &lt; 0 - PROTOCOL_UNDEFINED |\n                      1 - ETHERNET |\n                      2 - GPON |\n                      3 - XGPON |\n                      4 - XGSPON |\n                      5 - GFAST |\n                      6 - SERIAL |\n                      7 - EPON |\n                      8 - BITS &gt;\n        'physical_label': &lt;string&gt;,\n        'mapping_label': &lt;string&gt;,\n        'pon_id_config': {    # type: PonIdConfig\n          'pon_id': &lt;bytes&gt;,\n          'pon_id_transmit_periodicity': &lt;uint32&gt;,\n        }\n        'speed_autonegotiation': &lt;bool&gt;,\n      }\n      '<i>ONEOF specific\x3c/i>: <b>container_attr\x3c/b>': {    # type: ContainerComponentAttributes\n        'physical_label': &lt;string&gt;,\n      }\n      '<i>ONEOF specific\x3c/i>: <b>psu_attr\x3c/b>': {    # type: PsuComponentAttributes\n        'supported_voltage': &lt; 0 - SUPPORTED_VOLTAGE_UNDEFINED |\n                               1 - V48 |\n                               2 - V230 |\n                               3 - V115 &gt;\n      }\n      '<i>ONEOF specific\x3c/i>: <b>transceiver_attr\x3c/b>': {    # type: TransceiverComponentsAttributes\n        'form_factor': &lt;  0 - FORM_FACTOR_UNKNOWN |\n                          1 - QSFP |\n                          2 - QSFP_PLUS |\n                          3 - QSFP28 |\n                          4 - SFP |\n                          5 - SFP_PLUS |\n                          6 - XFP |\n                          7 - CFP4 |\n                          8 - CFP2 |\n                          9 - CPAK |\n                         10 - X2 |\n                         11 - OTHER |\n                         12 - CFP |\n                         13 - CFP2_ACO |\n                         14 - CFP2_DCO &gt;\n        'trans_type': &lt; 0 - TYPE_UNKNOWN |\n                        1 - ETHERNET |\n                        2 - GPON |\n                        3 - XGPON |\n                        4 - XGSPON |\n                        5 - CPON |\n                        6 - NG_PON2 |\n                        7 - EPON &gt;\n        'max_distance': &lt;uint32&gt;,\n        'max_distance_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                                 1 - VALUE_SCALE_YOCTO |\n                                 2 - VALUE_SCALE_ZEPTO |\n                                 3 - VALUE_SCALE_ATTO |\n                                 4 - VALUE_SCALE_FEMTO |\n                                 5 - VALUE_SCALE_PICO |\n                                 6 - VALUE_SCALE_NANO |\n                                 7 - VALUE_SCALE_MICRO |\n                                 8 - VALUE_SCALE_MILLI |\n                                 9 - VALUE_SCALE_UNITS |\n                                10 - VALUE_SCALE_KILO |\n                                11 - VALUE_SCALE_MEGA |\n                                12 - VALUE_SCALE_GIGA |\n                                13 - VALUE_SCALE_TERA |\n                                14 - VALUE_SCALE_PETA |\n                                15 - VALUE_SCALE_EXA |\n                                16 - VALUE_SCALE_ZETTA |\n                                17 - VALUE_SCALE_YOTTA &gt;\n        'rx_wavelength': [    # list of:\n          &lt;uint32&gt;,\n        ]\n        'tx_wavelength': [    # list of:\n          &lt;uint32&gt;,\n        ]\n        'wavelength_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                               1 - VALUE_SCALE_YOCTO |\n                               2 - VALUE_SCALE_ZEPTO |\n                               3 - VALUE_SCALE_ATTO |\n                               4 - VALUE_SCALE_FEMTO |\n                               5 - VALUE_SCALE_PICO |\n                               6 - VALUE_SCALE_NANO |\n                               7 - VALUE_SCALE_MICRO |\n                               8 - VALUE_SCALE_MILLI |\n                               9 - VALUE_SCALE_UNITS |\n                              10 - VALUE_SCALE_KILO |\n                              11 - VALUE_SCALE_MEGA |\n                              12 - VALUE_SCALE_GIGA |\n                              13 - VALUE_SCALE_TERA |\n                              14 - VALUE_SCALE_PETA |\n                              15 - VALUE_SCALE_EXA |\n                              16 - VALUE_SCALE_ZETTA |\n                              17 - VALUE_SCALE_YOTTA &gt;\n      }\n    }\n    'parent_rel_pos': &lt;int32&gt;,\n    'alias': &lt;string&gt;,\n    'asset_id': &lt;string&gt;,\n    'uri': {    # type: Uri\n      'uri': &lt;string&gt;,\n    }\n    'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                     1 - COMP_ADMIN_STATE_UNKNOWN |\n                     2 - COMP_ADMIN_STATE_LOCKED |\n                     3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                     4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n    '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentChangeAttributes\n      'pon_id_config': {    # type: PonIdConfig\n        'pon_id': &lt;bytes&gt;,\n        'pon_id_transmit_periodicity': &lt;uint32&gt;,\n      }\n    }\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: HWComponentInfoSetResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Set Hw Component Info","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>SetLogLevel\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: SetLogLevelRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'loglevels': [    # list of:\n    {    # type: EntitiesLogLevel\n      'logLevel': &lt; 0 - TRACE |\n                    1 - DEBUG |\n                    2 - INFO |\n                    3 - WARN |\n                    4 - ERROR &gt;\n      'entities': [    # list of:\n        &lt;string&gt;,\n      ]\n    }\n  ]\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: SetLogLevelResponse\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Set Log Level","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>SetLoggingEndpoint\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: SetLoggingEndpointRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'logging_endpoint': &lt;string&gt;,\n  'logging_protocol': &lt;string&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: SetRemoteEndpointResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Set Logging Endpoint","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>SetMsgBusEndpoint\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: SetMsgBusEndpointRequest\n  'msgbus_endpoint': &lt;string&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: SetRemoteEndpointResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Set Msg Bus Endpoint","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>StartManagingDevice\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: ModifiableComponent\n  'name': &lt;string&gt;,\n  'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n              1 - COMPONENT_TYPE_UNKNOWN |\n              2 - COMPONENT_TYPE_CHASSIS |\n              3 - COMPONENT_TYPE_BACKPLANE |\n              4 - COMPONENT_TYPE_CONTAINER |\n              5 - COMPONENT_TYPE_POWER_SUPPLY |\n              6 - COMPONENT_TYPE_FAN |\n              7 - COMPONENT_TYPE_SENSOR |\n              8 - COMPONENT_TYPE_MODULE |\n              9 - COMPONENT_TYPE_PORT |\n             10 - COMPONENT_TYPE_CPU |\n             11 - COMPONENT_TYPE_BATTERY |\n             12 - COMPONENT_TYPE_STORAGE |\n             13 - COMPONENT_TYPE_MEMORY |\n             14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n  'parent': {    # type: Component\n    'name': &lt;string&gt;,\n    'class': &lt;  0 - COMPONENT_TYPE_UNDEFINED |\n                1 - COMPONENT_TYPE_UNKNOWN |\n                2 - COMPONENT_TYPE_CHASSIS |\n                3 - COMPONENT_TYPE_BACKPLANE |\n                4 - COMPONENT_TYPE_CONTAINER |\n                5 - COMPONENT_TYPE_POWER_SUPPLY |\n                6 - COMPONENT_TYPE_FAN |\n                7 - COMPONENT_TYPE_SENSOR |\n                8 - COMPONENT_TYPE_MODULE |\n                9 - COMPONENT_TYPE_PORT |\n               10 - COMPONENT_TYPE_CPU |\n               11 - COMPONENT_TYPE_BATTERY |\n               12 - COMPONENT_TYPE_STORAGE |\n               13 - COMPONENT_TYPE_MEMORY |\n               14 - COMPONENT_TYPE_TRANSCEIVER &gt;\n    'description': &lt;string&gt;,\n    'parent': &lt;string&gt;,\n    'parent_rel_pos': &lt;int32&gt;,\n    'children': [    # list of:\n      &lt; recursive type: Component &gt;\n    ]\n    'hardware_rev': &lt;string&gt;,\n    'firmware_rev': &lt;string&gt;,\n    'software_rev': &lt;string&gt;,\n    'serial_num': &lt;string&gt;,\n    'mfg_name': &lt;string&gt;,\n    'model_name': &lt;string&gt;,\n    'alias': &lt;string&gt;,\n    'asset_id': &lt;string&gt;,\n    'is_fru': &lt;bool&gt;,\n    'mfg_date': &lt;google.protobuf.Timestamp&gt;,\n    'uri': {    # type: Uri\n      'uri': &lt;string&gt;,\n    }\n    'uuid': {    # type: Uuid\n      'uuid': &lt;string&gt;,\n    }\n    'state': {    # type: ComponentState\n      'state_last_changed': &lt;google.protobuf.Timestamp&gt;,\n      'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                       1 - COMP_ADMIN_STATE_UNKNOWN |\n                       2 - COMP_ADMIN_STATE_LOCKED |\n                       3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                       4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n      'oper_state': &lt; 0 - COMP_OPER_STATE_UNDEFINED |\n                      1 - COMP_OPER_STATE_UNKNOWN |\n                      2 - COMP_OPER_STATE_DISABLED |\n                      3 - COMP_OPER_STATE_ENABLED |\n                      4 - COMP_OPER_STATE_TESTING &gt;\n      'usage_state': &lt; 0 - COMP_USAGE_STATE_UNDEFINED |\n                       1 - COMP_USAGE_STATE_UNKNOWN |\n                       2 - COMP_USAGE_STATE_IDLE |\n                       3 - COMP_USAGE_STATE_ACTIVE |\n                       4 - COMP_USAGE_STATE_BUSY &gt;\n      'alarm_state': &lt; 0 - COMP_ALARM_STATE_UNDEFINED |\n                       1 - COMP_ALARM_STATE_UNKNOWN |\n                       2 - COMP_ALARM_STATE_UNDER_REPAIR |\n                       3 - COMP_ALARM_STATE_CRITICAL |\n                       4 - COMP_ALARM_STATE_MAJOR |\n                       5 - COMP_ALARM_STATE_MINOR |\n                       6 - COMP_ALARM_STATE_WARNING |\n                       7 - COMP_ALARM_STATE_INDETERMINATE &gt;\n      'standby_state': &lt; 0 - COMP_STANDBY_STATE_UNDEFINED |\n                         1 - COMP_STANDBY_STATE_UNKNOWN |\n                         2 - COMP_STANDBY_STATE_HOT |\n                         3 - COMP_STANDBY_STATE_COLD |\n                         4 - COMP_STANDBY_STATE_PROVIDING_SERVICE &gt;\n    }\n    'sensor_data': [    # list of:\n      {    # type: ComponentSensorData\n        'value': &lt;int32&gt;,\n        'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                   1 - VALUE_TYPE_OTHER |\n                   2 - VALUE_TYPE_UNKNOWN |\n                   3 - VALUE_TYPE_VOLTS_AC |\n                   4 - VALUE_TYPE_VOLTS_DC |\n                   5 - VALUE_TYPE_AMPERES |\n                   6 - VALUE_TYPE_WATTS |\n                   7 - VALUE_TYPE_HERTZ |\n                   8 - VALUE_TYPE_CELSIUS |\n                   9 - VALUE_TYPE_PERCENT_RH |\n                  10 - VALUE_TYPE_RPM |\n                  11 - VALUE_TYPE_CMM |\n                  12 - VALUE_TYPE_TRUTH_VALUE |\n                  13 - VALUE_TYPE_PERCENT |\n                  14 - VALUE_TYPE_METERS |\n                  15 - VALUE_TYPE_BYTES &gt;\n        'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                    1 - VALUE_SCALE_YOCTO |\n                    2 - VALUE_SCALE_ZEPTO |\n                    3 - VALUE_SCALE_ATTO |\n                    4 - VALUE_SCALE_FEMTO |\n                    5 - VALUE_SCALE_PICO |\n                    6 - VALUE_SCALE_NANO |\n                    7 - VALUE_SCALE_MICRO |\n                    8 - VALUE_SCALE_MILLI |\n                    9 - VALUE_SCALE_UNITS |\n                   10 - VALUE_SCALE_KILO |\n                   11 - VALUE_SCALE_MEGA |\n                   12 - VALUE_SCALE_GIGA |\n                   13 - VALUE_SCALE_TERA |\n                   14 - VALUE_SCALE_PETA |\n                   15 - VALUE_SCALE_EXA |\n                   16 - VALUE_SCALE_ZETTA |\n                   17 - VALUE_SCALE_YOTTA &gt;\n        'precision': &lt;int32&gt;,\n        'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                    1 - SENSOR_STATUS_OK |\n                    2 - SENSOR_STATUS_UNAVAILABLE |\n                    3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n        'units_display': &lt;string&gt;,\n        'timestamp': &lt;google.protobuf.Timestamp&gt;,\n        'value_update_rate': &lt;uint32&gt;,\n        'data_type': &lt;string&gt;,\n      }\n    ]\n    '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentAttributes\n      'connector_type': &lt; 0 - CONNECTOR_TYPE_UNDEFINED |\n                          1 - RJ45 |\n                          2 - FIBER_LC |\n                          3 - FIBER_SC_PC |\n                          4 - FIBER_MPO |\n                          5 - RS232 &gt;\n      'speed': &lt; 0 - SPEED_UNDEFINED |\n                 1 - DYNAMIC |\n                 2 - GIGABIT_1 |\n                 3 - GIGABIT_10 |\n                 4 - GIGABIT_25 |\n                 5 - GIGABIT_40 |\n                 6 - GIGABIT_100 |\n                 7 - GIGABIT_400 |\n                 8 - MEGABIT_2500 |\n                 9 - MEGABIT_1250 &gt;\n      'protocol': &lt; 0 - PROTOCOL_UNDEFINED |\n                    1 - ETHERNET |\n                    2 - GPON |\n                    3 - XGPON |\n                    4 - XGSPON |\n                    5 - GFAST |\n                    6 - SERIAL |\n                    7 - EPON |\n                    8 - BITS &gt;\n      'physical_label': &lt;string&gt;,\n      'mapping_label': &lt;string&gt;,\n      'pon_id_config': {    # type: PonIdConfig\n        'pon_id': &lt;bytes&gt;,\n        'pon_id_transmit_periodicity': &lt;uint32&gt;,\n      }\n      'speed_autonegotiation': &lt;bool&gt;,\n    }\n    '<i>ONEOF specific\x3c/i>: <b>container_attr\x3c/b>': {    # type: ContainerComponentAttributes\n      'physical_label': &lt;string&gt;,\n    }\n    '<i>ONEOF specific\x3c/i>: <b>psu_attr\x3c/b>': {    # type: PsuComponentAttributes\n      'supported_voltage': &lt; 0 - SUPPORTED_VOLTAGE_UNDEFINED |\n                             1 - V48 |\n                             2 - V230 |\n                             3 - V115 &gt;\n    }\n    '<i>ONEOF specific\x3c/i>: <b>transceiver_attr\x3c/b>': {    # type: TransceiverComponentsAttributes\n      'form_factor': &lt;  0 - FORM_FACTOR_UNKNOWN |\n                        1 - QSFP |\n                        2 - QSFP_PLUS |\n                        3 - QSFP28 |\n                        4 - SFP |\n                        5 - SFP_PLUS |\n                        6 - XFP |\n                        7 - CFP4 |\n                        8 - CFP2 |\n                        9 - CPAK |\n                       10 - X2 |\n                       11 - OTHER |\n                       12 - CFP |\n                       13 - CFP2_ACO |\n                       14 - CFP2_DCO &gt;\n      'trans_type': &lt; 0 - TYPE_UNKNOWN |\n                      1 - ETHERNET |\n                      2 - GPON |\n                      3 - XGPON |\n                      4 - XGSPON |\n                      5 - CPON |\n                      6 - NG_PON2 |\n                      7 - EPON &gt;\n      'max_distance': &lt;uint32&gt;,\n      'max_distance_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                               1 - VALUE_SCALE_YOCTO |\n                               2 - VALUE_SCALE_ZEPTO |\n                               3 - VALUE_SCALE_ATTO |\n                               4 - VALUE_SCALE_FEMTO |\n                               5 - VALUE_SCALE_PICO |\n                               6 - VALUE_SCALE_NANO |\n                               7 - VALUE_SCALE_MICRO |\n                               8 - VALUE_SCALE_MILLI |\n                               9 - VALUE_SCALE_UNITS |\n                              10 - VALUE_SCALE_KILO |\n                              11 - VALUE_SCALE_MEGA |\n                              12 - VALUE_SCALE_GIGA |\n                              13 - VALUE_SCALE_TERA |\n                              14 - VALUE_SCALE_PETA |\n                              15 - VALUE_SCALE_EXA |\n                              16 - VALUE_SCALE_ZETTA |\n                              17 - VALUE_SCALE_YOTTA &gt;\n      'rx_wavelength': [    # list of:\n        &lt;uint32&gt;,\n      ]\n      'tx_wavelength': [    # list of:\n        &lt;uint32&gt;,\n      ]\n      'wavelength_scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                             1 - VALUE_SCALE_YOCTO |\n                             2 - VALUE_SCALE_ZEPTO |\n                             3 - VALUE_SCALE_ATTO |\n                             4 - VALUE_SCALE_FEMTO |\n                             5 - VALUE_SCALE_PICO |\n                             6 - VALUE_SCALE_NANO |\n                             7 - VALUE_SCALE_MICRO |\n                             8 - VALUE_SCALE_MILLI |\n                             9 - VALUE_SCALE_UNITS |\n                            10 - VALUE_SCALE_KILO |\n                            11 - VALUE_SCALE_MEGA |\n                            12 - VALUE_SCALE_GIGA |\n                            13 - VALUE_SCALE_TERA |\n                            14 - VALUE_SCALE_PETA |\n                            15 - VALUE_SCALE_EXA |\n                            16 - VALUE_SCALE_ZETTA |\n                            17 - VALUE_SCALE_YOTTA &gt;\n    }\n  }\n  'parent_rel_pos': &lt;int32&gt;,\n  'alias': &lt;string&gt;,\n  'asset_id': &lt;string&gt;,\n  'uri': {    # type: Uri\n    'uri': &lt;string&gt;,\n  }\n  'admin_state': &lt; 0 - COMP_ADMIN_STATE_UNDEFINED |\n                   1 - COMP_ADMIN_STATE_UNKNOWN |\n                   2 - COMP_ADMIN_STATE_LOCKED |\n                   3 - COMP_ADMIN_STATE_SHUTTING_DOWN |\n                   4 - COMP_ADMIN_STATE_UNLOCKED &gt;\n  '<i>ONEOF specific\x3c/i>: <b>port_attr\x3c/b>': {    # type: PortComponentChangeAttributes\n    'pon_id_config': {    # type: PonIdConfig\n      'pon_id': &lt;bytes&gt;,\n      'pon_id_transmit_periodicity': &lt;uint32&gt;,\n    }\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: StartManagingDeviceResponse\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - UNKNOWN_DEVICE |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_UNREACHABLE &gt;\n    'device_uuid': {    # type: Uuid\n      'uuid': &lt;string&gt;,\n    }\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Hw Management Service Start Managing Device","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>StopManagingDevice\x3c/i> from <i>NativeHWManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: StopManagingDeviceRequest\n  'name': &lt;string&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: StopManagingDeviceResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Management Service Stop Managing Device","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetMetric\x3c/i> from <i>NativeMetricsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: GetMetricRequest\n  'meta_data': {    # type: MetricMetaData\n    'device_uuid': {    # type: Uuid\n      'uuid': &lt;string&gt;,\n    }\n    'component_uuid': {    # type: Uuid\n      'uuid': &lt;string&gt;,\n    }\n    'component_name': &lt;string&gt;,\n  }\n  'metric_id': &lt;   0 - METRIC_NAME_UNDEFINED |\n                   1 - METRIC_FAN_SPEED |\n                 100 - METRIC_CPU_TEMP |\n                 101 - METRIC_CPU_USAGE_PERCENTAGE |\n                 200 - METRIC_TRANSCEIVER_TEMP |\n                 201 - METRIC_TRANSCEIVER_VOLTAGE |\n                 202 - METRIC_TRANSCEIVER_BIAS |\n                 203 - METRIC_TRANSCEIVER_RX_POWER |\n                 204 - METRIC_TRANSCEIVER_TX_POWER |\n                 205 - METRIC_TRANSCEIVER_WAVELENGTH |\n                 300 - METRIC_DISK_TEMP |\n                 301 - METRIC_DISK_CAPACITY |\n                 302 - METRIC_DISK_USAGE |\n                 303 - METRIC_DISK_USAGE_PERCENTAGE |\n                 304 - METRIC_DISK_READ_WRITE_PERCENTAGE |\n                 305 - METRIC_DISK_FAULTY_CELLS_PERCENTAGE |\n                 400 - METRIC_RAM_TEMP |\n                 401 - METRIC_RAM_CAPACITY |\n                 402 - METRIC_RAM_USAGE |\n                 403 - METRIC_RAM_USAGE_PERCENTAGE |\n                 500 - METRIC_POWER_MAX |\n                 501 - METRIC_POWER_USAGE |\n                 502 - METRIC_POWER_USAGE_PERCENTAGE |\n                 600 - METRIC_INNER_SURROUNDING_TEMP &gt;\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetMetricResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'metric': {    # type: Metric\n    'metric_id': &lt;   0 - METRIC_NAME_UNDEFINED |\n                     1 - METRIC_FAN_SPEED |\n                   100 - METRIC_CPU_TEMP |\n                   101 - METRIC_CPU_USAGE_PERCENTAGE |\n                   200 - METRIC_TRANSCEIVER_TEMP |\n                   201 - METRIC_TRANSCEIVER_VOLTAGE |\n                   202 - METRIC_TRANSCEIVER_BIAS |\n                   203 - METRIC_TRANSCEIVER_RX_POWER |\n                   204 - METRIC_TRANSCEIVER_TX_POWER |\n                   205 - METRIC_TRANSCEIVER_WAVELENGTH |\n                   300 - METRIC_DISK_TEMP |\n                   301 - METRIC_DISK_CAPACITY |\n                   302 - METRIC_DISK_USAGE |\n                   303 - METRIC_DISK_USAGE_PERCENTAGE |\n                   304 - METRIC_DISK_READ_WRITE_PERCENTAGE |\n                   305 - METRIC_DISK_FAULTY_CELLS_PERCENTAGE |\n                   400 - METRIC_RAM_TEMP |\n                   401 - METRIC_RAM_CAPACITY |\n                   402 - METRIC_RAM_USAGE |\n                   403 - METRIC_RAM_USAGE_PERCENTAGE |\n                   500 - METRIC_POWER_MAX |\n                   501 - METRIC_POWER_USAGE |\n                   502 - METRIC_POWER_USAGE_PERCENTAGE |\n                   600 - METRIC_INNER_SURROUNDING_TEMP &gt;\n    'metric_metadata': {    # type: MetricMetaData\n      'device_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_name': &lt;string&gt;,\n    }\n    'value': {    # type: ComponentSensorData\n      'value': &lt;int32&gt;,\n      'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                 1 - VALUE_TYPE_OTHER |\n                 2 - VALUE_TYPE_UNKNOWN |\n                 3 - VALUE_TYPE_VOLTS_AC |\n                 4 - VALUE_TYPE_VOLTS_DC |\n                 5 - VALUE_TYPE_AMPERES |\n                 6 - VALUE_TYPE_WATTS |\n                 7 - VALUE_TYPE_HERTZ |\n                 8 - VALUE_TYPE_CELSIUS |\n                 9 - VALUE_TYPE_PERCENT_RH |\n                10 - VALUE_TYPE_RPM |\n                11 - VALUE_TYPE_CMM |\n                12 - VALUE_TYPE_TRUTH_VALUE |\n                13 - VALUE_TYPE_PERCENT |\n                14 - VALUE_TYPE_METERS |\n                15 - VALUE_TYPE_BYTES &gt;\n      'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                  1 - VALUE_SCALE_YOCTO |\n                  2 - VALUE_SCALE_ZEPTO |\n                  3 - VALUE_SCALE_ATTO |\n                  4 - VALUE_SCALE_FEMTO |\n                  5 - VALUE_SCALE_PICO |\n                  6 - VALUE_SCALE_NANO |\n                  7 - VALUE_SCALE_MICRO |\n                  8 - VALUE_SCALE_MILLI |\n                  9 - VALUE_SCALE_UNITS |\n                 10 - VALUE_SCALE_KILO |\n                 11 - VALUE_SCALE_MEGA |\n                 12 - VALUE_SCALE_GIGA |\n                 13 - VALUE_SCALE_TERA |\n                 14 - VALUE_SCALE_PETA |\n                 15 - VALUE_SCALE_EXA |\n                 16 - VALUE_SCALE_ZETTA |\n                 17 - VALUE_SCALE_YOTTA &gt;\n      'precision': &lt;int32&gt;,\n      'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                  1 - SENSOR_STATUS_OK |\n                  2 - SENSOR_STATUS_UNAVAILABLE |\n                  3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n      'units_display': &lt;string&gt;,\n      'timestamp': &lt;google.protobuf.Timestamp&gt;,\n      'value_update_rate': &lt;uint32&gt;,\n      'data_type': &lt;string&gt;,\n    }\n  }\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Metrics Mgmt Service Get Metric","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>ListMetrics\x3c/i> from <i>NativeMetricsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: ListMetricsResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'metrics': {    # type: MetricsConfig\n    'metrics': [    # list of:\n      {    # type: MetricConfig\n        'metric_id': &lt;   0 - METRIC_NAME_UNDEFINED |\n                         1 - METRIC_FAN_SPEED |\n                       100 - METRIC_CPU_TEMP |\n                       101 - METRIC_CPU_USAGE_PERCENTAGE |\n                       200 - METRIC_TRANSCEIVER_TEMP |\n                       201 - METRIC_TRANSCEIVER_VOLTAGE |\n                       202 - METRIC_TRANSCEIVER_BIAS |\n                       203 - METRIC_TRANSCEIVER_RX_POWER |\n                       204 - METRIC_TRANSCEIVER_TX_POWER |\n                       205 - METRIC_TRANSCEIVER_WAVELENGTH |\n                       300 - METRIC_DISK_TEMP |\n                       301 - METRIC_DISK_CAPACITY |\n                       302 - METRIC_DISK_USAGE |\n                       303 - METRIC_DISK_USAGE_PERCENTAGE |\n                       304 - METRIC_DISK_READ_WRITE_PERCENTAGE |\n                       305 - METRIC_DISK_FAULTY_CELLS_PERCENTAGE |\n                       400 - METRIC_RAM_TEMP |\n                       401 - METRIC_RAM_CAPACITY |\n                       402 - METRIC_RAM_USAGE |\n                       403 - METRIC_RAM_USAGE_PERCENTAGE |\n                       500 - METRIC_POWER_MAX |\n                       501 - METRIC_POWER_USAGE |\n                       502 - METRIC_POWER_USAGE_PERCENTAGE |\n                       600 - METRIC_INNER_SURROUNDING_TEMP &gt;\n        'is_configured': &lt;bool&gt;,\n        'poll_interval': &lt;uint32&gt;,\n      }\n    ]\n  }\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Metrics Mgmt Service List Metrics","shortdoc":"","tags":[]},{"args":["**kwargs"],"doc":"<p>RPC <i>StreamMetrics\x3c/i> from <i>NativeMetricsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>: <i>none\x3c/i>\x3c/p>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: Metric\n    'metric_id': &lt;   0 - METRIC_NAME_UNDEFINED |\n                     1 - METRIC_FAN_SPEED |\n                   100 - METRIC_CPU_TEMP |\n                   101 - METRIC_CPU_USAGE_PERCENTAGE |\n                   200 - METRIC_TRANSCEIVER_TEMP |\n                   201 - METRIC_TRANSCEIVER_VOLTAGE |\n                   202 - METRIC_TRANSCEIVER_BIAS |\n                   203 - METRIC_TRANSCEIVER_RX_POWER |\n                   204 - METRIC_TRANSCEIVER_TX_POWER |\n                   205 - METRIC_TRANSCEIVER_WAVELENGTH |\n                   300 - METRIC_DISK_TEMP |\n                   301 - METRIC_DISK_CAPACITY |\n                   302 - METRIC_DISK_USAGE |\n                   303 - METRIC_DISK_USAGE_PERCENTAGE |\n                   304 - METRIC_DISK_READ_WRITE_PERCENTAGE |\n                   305 - METRIC_DISK_FAULTY_CELLS_PERCENTAGE |\n                   400 - METRIC_RAM_TEMP |\n                   401 - METRIC_RAM_CAPACITY |\n                   402 - METRIC_RAM_USAGE |\n                   403 - METRIC_RAM_USAGE_PERCENTAGE |\n                   500 - METRIC_POWER_MAX |\n                   501 - METRIC_POWER_USAGE |\n                   502 - METRIC_POWER_USAGE_PERCENTAGE |\n                   600 - METRIC_INNER_SURROUNDING_TEMP &gt;\n    'metric_metadata': {    # type: MetricMetaData\n      'device_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_uuid': {    # type: Uuid\n        'uuid': &lt;string&gt;,\n      }\n      'component_name': &lt;string&gt;,\n    }\n    'value': {    # type: ComponentSensorData\n      'value': &lt;int32&gt;,\n      'type': &lt;  0 - VALUE_TYPE_UNDEFINED |\n                 1 - VALUE_TYPE_OTHER |\n                 2 - VALUE_TYPE_UNKNOWN |\n                 3 - VALUE_TYPE_VOLTS_AC |\n                 4 - VALUE_TYPE_VOLTS_DC |\n                 5 - VALUE_TYPE_AMPERES |\n                 6 - VALUE_TYPE_WATTS |\n                 7 - VALUE_TYPE_HERTZ |\n                 8 - VALUE_TYPE_CELSIUS |\n                 9 - VALUE_TYPE_PERCENT_RH |\n                10 - VALUE_TYPE_RPM |\n                11 - VALUE_TYPE_CMM |\n                12 - VALUE_TYPE_TRUTH_VALUE |\n                13 - VALUE_TYPE_PERCENT |\n                14 - VALUE_TYPE_METERS |\n                15 - VALUE_TYPE_BYTES &gt;\n      'scale': &lt;  0 - VALUE_SCALE_UNDEFINED |\n                  1 - VALUE_SCALE_YOCTO |\n                  2 - VALUE_SCALE_ZEPTO |\n                  3 - VALUE_SCALE_ATTO |\n                  4 - VALUE_SCALE_FEMTO |\n                  5 - VALUE_SCALE_PICO |\n                  6 - VALUE_SCALE_NANO |\n                  7 - VALUE_SCALE_MICRO |\n                  8 - VALUE_SCALE_MILLI |\n                  9 - VALUE_SCALE_UNITS |\n                 10 - VALUE_SCALE_KILO |\n                 11 - VALUE_SCALE_MEGA |\n                 12 - VALUE_SCALE_GIGA |\n                 13 - VALUE_SCALE_TERA |\n                 14 - VALUE_SCALE_PETA |\n                 15 - VALUE_SCALE_EXA |\n                 16 - VALUE_SCALE_ZETTA |\n                 17 - VALUE_SCALE_YOTTA &gt;\n      'precision': &lt;int32&gt;,\n      'status': &lt; 0 - SENSOR_STATUS_UNDEFINED |\n                  1 - SENSOR_STATUS_OK |\n                  2 - SENSOR_STATUS_UNAVAILABLE |\n                  3 - SENSOR_STATUS_NONOPERATIONAL &gt;\n      'units_display': &lt;string&gt;,\n      'timestamp': &lt;google.protobuf.Timestamp&gt;,\n      'value_update_rate': &lt;uint32&gt;,\n      'data_type': &lt;string&gt;,\n    }\n  }\n]\n\x3c/pre>","matched":true,"name":"Hw Metrics Mgmt Service Stream Metrics","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>UpdateMetricsConfiguration\x3c/i> from <i>NativeMetricsManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict: <b>Note\x3c/b>: Bold dictionary keys are cases of an ONEOF type that is not transmitted in gRPC.\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: MetricsConfigurationRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  '<i>ONEOF operation\x3c/i>: <b>changes\x3c/b>': {    # type: MetricsConfig\n    'metrics': [    # list of:\n      {    # type: MetricConfig\n        'metric_id': &lt;   0 - METRIC_NAME_UNDEFINED |\n                         1 - METRIC_FAN_SPEED |\n                       100 - METRIC_CPU_TEMP |\n                       101 - METRIC_CPU_USAGE_PERCENTAGE |\n                       200 - METRIC_TRANSCEIVER_TEMP |\n                       201 - METRIC_TRANSCEIVER_VOLTAGE |\n                       202 - METRIC_TRANSCEIVER_BIAS |\n                       203 - METRIC_TRANSCEIVER_RX_POWER |\n                       204 - METRIC_TRANSCEIVER_TX_POWER |\n                       205 - METRIC_TRANSCEIVER_WAVELENGTH |\n                       300 - METRIC_DISK_TEMP |\n                       301 - METRIC_DISK_CAPACITY |\n                       302 - METRIC_DISK_USAGE |\n                       303 - METRIC_DISK_USAGE_PERCENTAGE |\n                       304 - METRIC_DISK_READ_WRITE_PERCENTAGE |\n                       305 - METRIC_DISK_FAULTY_CELLS_PERCENTAGE |\n                       400 - METRIC_RAM_TEMP |\n                       401 - METRIC_RAM_CAPACITY |\n                       402 - METRIC_RAM_USAGE |\n                       403 - METRIC_RAM_USAGE_PERCENTAGE |\n                       500 - METRIC_POWER_MAX |\n                       501 - METRIC_POWER_USAGE |\n                       502 - METRIC_POWER_USAGE_PERCENTAGE |\n                       600 - METRIC_INNER_SURROUNDING_TEMP &gt;\n        'is_configured': &lt;bool&gt;,\n        'poll_interval': &lt;uint32&gt;,\n      }\n    ]\n  }\n  '<i>ONEOF operation\x3c/i>: <b>reset_to_default\x3c/b>': &lt;bool&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: MetricsConfigurationResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Hw Metrics Mgmt Service Update Metrics Configuration","shortdoc":"","tags":[]},{"args":[],"doc":"<p>Retrieve the version of the currently running library instance.\x3c/p>\n<p><b>Return\x3c/b>: version string consisting of three dot-separated numbers (x.y.z)\x3c/p>","matched":true,"name":"Library Version Get","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>ActivateImage\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: ImageStatus\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - ERROR_IN_REQUEST |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_IN_WRONG_STATE |\n                4 - INVALID_IMAGE |\n                5 - WRONG_IMAGE_CHECKSUM |\n                6 - OPERATION_ALREADY_IN_PROGRESS |\n                7 - UNKNOWN_DEVICE |\n                8 - DEVICE_NOT_REACHABLE &gt;\n    'state': &lt; 0 - UNDEFINED_STATE |\n               1 - COPYING_IMAGE |\n               2 - INSTALLING_IMAGE |\n               3 - COMMITTING_IMAGE |\n               4 - REBOOTING_DEVICE |\n               5 - UPGRADE_COMPLETE |\n               6 - UPGRADE_FAILED |\n               7 - ACTIVATION_COMPLETE |\n               8 - ACTIVATION_FAILED &gt;\n    'description': &lt;string&gt;,\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Sw Management Service Activate Image","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>DownloadImage\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: DownloadImageRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'image_info': {    # type: ImageInformation\n    'image': {    # type: ImageVersion\n      'image_name': &lt;string&gt;,\n      'version': &lt;string&gt;,\n    }\n    'image_install_script': &lt;string&gt;,\n    'image_url': &lt;string&gt;,\n    'sha256sum': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: ImageStatus\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - ERROR_IN_REQUEST |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_IN_WRONG_STATE |\n                4 - INVALID_IMAGE |\n                5 - WRONG_IMAGE_CHECKSUM |\n                6 - OPERATION_ALREADY_IN_PROGRESS |\n                7 - UNKNOWN_DEVICE |\n                8 - DEVICE_NOT_REACHABLE &gt;\n    'state': &lt; 0 - UNDEFINED_STATE |\n               1 - COPYING_IMAGE |\n               2 - INSTALLING_IMAGE |\n               3 - COMMITTING_IMAGE |\n               4 - REBOOTING_DEVICE |\n               5 - UPGRADE_COMPLETE |\n               6 - UPGRADE_FAILED |\n               7 - ACTIVATION_COMPLETE |\n               8 - ACTIVATION_FAILED &gt;\n    'description': &lt;string&gt;,\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Sw Management Service Download Image","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetSoftwareVersion\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: GetSoftwareVersionInformationResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'info': {    # type: SoftwareVersionInformation\n    'active_versions': [    # list of:\n      {    # type: ImageVersion\n        'image_name': &lt;string&gt;,\n        'version': &lt;string&gt;,\n      }\n    ]\n    'standby_versions': [    # list of:\n      {    # type: ImageVersion\n        'image_name': &lt;string&gt;,\n        'version': &lt;string&gt;,\n      }\n    ]\n  }\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Sw Management Service Get Software Version","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>GetStartupConfigurationInfo\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: StartupConfigInfoRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n{    # type: StartupConfigInfoResponse\n  'status': &lt; 0 - UNDEFINED_STATUS |\n              1 - OK_STATUS |\n              2 - ERROR_STATUS &gt;\n  'reason': &lt; 0 - UNDEFINED_REASON |\n              1 - UNKNOWN_DEVICE |\n              2 - INTERNAL_ERROR |\n              3 - DEVICE_UNREACHABLE &gt;\n  'config_url': &lt;string&gt;,\n  'version': &lt;string&gt;,\n  'reason_detail': &lt;string&gt;,\n}\n\x3c/pre>","matched":true,"name":"Sw Management Service Get Startup Configuration Info","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>RevertToStandbyImage\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: HardwareID\n  'uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: ImageStatus\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - ERROR_IN_REQUEST |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_IN_WRONG_STATE |\n                4 - INVALID_IMAGE |\n                5 - WRONG_IMAGE_CHECKSUM |\n                6 - OPERATION_ALREADY_IN_PROGRESS |\n                7 - UNKNOWN_DEVICE |\n                8 - DEVICE_NOT_REACHABLE &gt;\n    'state': &lt; 0 - UNDEFINED_STATE |\n               1 - COPYING_IMAGE |\n               2 - INSTALLING_IMAGE |\n               3 - COMMITTING_IMAGE |\n               4 - REBOOTING_DEVICE |\n               5 - UPGRADE_COMPLETE |\n               6 - UPGRADE_FAILED |\n               7 - ACTIVATION_COMPLETE |\n               8 - ACTIVATION_FAILED &gt;\n    'description': &lt;string&gt;,\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Sw Management Service Revert To Standby Image","shortdoc":"","tags":[]},{"args":["param_dict","**kwargs"],"doc":"<p>RPC <i>UpdateStartupConfiguration\x3c/i> from <i>NativeSoftwareManagementService\x3c/i>.\x3c/p>\n<p><b>Parameters\x3c/b>:\x3c/p>\n<ul>\n<li>param_dict:\x3c/li>\n\x3c/ul>\n<pre>\n{    # type: ConfigRequest\n  'device_uuid': {    # type: Uuid\n    'uuid': &lt;string&gt;,\n  }\n  'config_url': &lt;string&gt;,\n}\n\x3c/pre>\n<p><b>Named parameters\x3c/b>:\x3c/p>\n<ul>\n<li>return_enum_integer: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the enum values as integer values rather than their labels. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>return_defaults: &lt;bool&gt; or &lt;string&gt;; Whether or not to return the default values. Default: <i>${FALSE}\x3c/i> or <i>false\x3c/i>.\x3c/li>\n\x3c/ul>\n<ul>\n<li>timeout: &lt;int&gt; or &lt;string&gt;; Number of seconds to wait for the response. Default: The timeout value set by keywords <i>Connection Open\x3c/i> and <i>Connection Parameters Set\x3c/i>.\x3c/li>\n\x3c/ul>\n<p><b>Return\x3c/b>:\x3c/p>\n<pre>\n[    # list of:\n  {    # type: ConfigResponse\n    'status': &lt; 0 - UNDEFINED_STATUS |\n                1 - OK_STATUS |\n                2 - ERROR_STATUS &gt;\n    'reason': &lt; 0 - UNDEFINED_REASON |\n                1 - UNKNOWN_DEVICE |\n                2 - INTERNAL_ERROR |\n                3 - DEVICE_UNREACHABLE &gt;\n    'reason_detail': &lt;string&gt;,\n  }\n]\n\x3c/pre>","matched":true,"name":"Sw Management Service Update Startup Configuration","shortdoc":"","tags":[]}],"name":"grpc_robot.Dmi","named_args":true,"scope":"test suite","version":"unknown"};
</script>
<title></title>
</head>
<body>

<div id="javascript-disabled">
  <h1>Opening library documentation failed</h1>
  <ul>
    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
    <li>Make sure you are using a <b>modern enough browser</b>. If using Internet Explorer, version 8 or newer is required.</li>
    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
  </ul>
</div>

<script type="text/javascript">
    // Not using jQuery here for speed and to support ancient browsers.
    document.getElementById('javascript-disabled').style.display = 'none';
</script>

<script type="text/javascript">
    $(document).ready(function() {
        parseTemplates();
        document.title = libdoc.name;
        renderTemplate('base', libdoc, $('body'));
        if (libdoc.inits.length) {
            renderTemplate('importing', libdoc);
        }
        renderTemplate('shortcuts', libdoc);
        if (libdoc.contains_tags) {
            renderTemplate('tags', libdoc);
        }
        renderTemplate('keywords', libdoc);
        renderTemplate('footer', libdoc);
        scrollToHash();
        $(document).bind('keydown', handleKeydown);
    });

    function parseTemplates() {
        $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
            $.template(elem.id, elem.text);
        });
    }

    function renderTemplate(name, arguments, container) {
        if (!container) {
            container = $('#' + name + '-container');
            container.empty();
        }
        if (!arguments.search) {
            arguments.search = false;
        }
        $.tmpl(name + '-template', arguments).appendTo(container);
    }

    function handleKeydown(event) {
        event = event || window.event;
        var keyCode = event.keyCode || event.which;
        if (keyCode === 27)  // esc
            setTimeout(closeSearch, 0);
        if (keyCode === 83 && $('#search').is(':hidden'))  // s
            setTimeout(openSearch, 0);
    }

    function scrollToHash() {
        if (window.location.hash) {
            var hash = window.location.hash.substring(1).replace('+', ' ');
            window.location.hash = '';
            window.location.hash = hash;
        }
    }

    function tagSearch(tag) {
        var include = {tags: true, tagsExact: true};
        markMatches(tag, include);
        highlightMatches(tag, include);
        $('#keywords-container').find('.kw-row').addClass('hide-unmatched');
    }

    function doSearch() {
        var string = $('#search-string').val();
        var include = getIncludesAndDisableIfOnlyOneLeft();
        if (string) {
            markMatches(string, include);
            highlightMatches(string, include);
            setMatchVisibility();
        } else {
            resetKeywords();
        }
    }

    function getIncludesAndDisableIfOnlyOneLeft() {
        var name = $('#include-name');
        var args = $('#include-args');
        var doc = $('#include-doc');
        var tags = $('#include-tags');
        var include = {name: name.prop('checked'),
                       args: args.prop('checked'),
                       doc: doc.prop('checked'),
                       tags: !!tags.prop('checked')};
        if ((!include.name) && (!include.args) && (!include.doc)) {
            tags.prop('disabled', true);
        } else if ((!include.name) && (!include.args) && (!include.tags)) {
            doc.prop('disabled', true);
        } else if ((!include.name) && (!include.doc) && (!include.tags)) {
            args.prop('disabled', true);
        } else if ((!include.args) && (!include.doc) && (!include.tags)) {
            name.prop('disabled', true);
        } else {
            name.prop('disabled', false);
            args.prop('disabled', false);
            doc.prop('disabled', false);
            tags.prop('disabled', false);
        }
        return include;
    }

    function markMatches(pattern, include) {
        pattern = util.regexpEscape(pattern);
        if (include.tagsExact) {
            pattern = '^' + pattern + '$';
        }
        var regexp = new RegExp(pattern, 'i');
        var test = regexp.test.bind(regexp);
        var result = {contains_tags: libdoc.contains_tags};
        var matchCount = 0;
        result.keywords = util.map(libdoc.keywords, function (kw) {
            kw = $.extend({}, kw);
            kw.matched = (include.name && test(kw.name) ||
                          include.args && test(kw.args) ||
                          include.doc && test($(kw.doc).text()) ||
                          include.tags && util.any(util.map(kw.tags, test)));
            if (kw.matched)
                matchCount++;
            return kw
        });
        renderTemplate('shortcuts', result);
        renderTemplate('keywords', result);
        if (libdoc.contains_tags) {
            renderTemplate('tags', libdoc);
        }
        var ending = matchCount != 1 ? 's.' : '.';
        $('#match-count').show().text(matchCount + ' matched keyword' + ending);
        $('#altogether-count').hide();
        if (matchCount == 0)
            $('#keywords-container').find('table').empty();
    }

    function highlightMatches(string, include) {
        var shortcuts = $('#shortcuts-container').find('.match');
        var keywords = $('#keywords-container').find('.match');
        if (include.name) {
            shortcuts.highlight(string);
            keywords.find('.kw').highlight(string);
        }
        if (include.args) {
            keywords.find('.args').highlight(string);
        }
        if (include.doc) {
            keywords.find('.doc').highlight(string);
        }
        if (include.tags) {
            var matches = keywords.find('.tags').find('a').add(
                    $('#tags-container').find('a'));
            if (include.tagsExact) {
                matches = matches.filter(function (index, tag) {
                    return $(tag).text().toUpperCase() == string.toUpperCase();
                });
            }
            matches.highlight(string);
        }
    }

    function openSearch() {
        $('#search').show();
        $('#open-search').hide();
        $('#search-string').focus().select();
        $(document).scrollTop($("#Shortcuts").offset().top);
    }

    function closeSearch() {
        $('#search').hide();
        $('#open-search').show();
    }

    function resetSearch() {
        $('#search-string').val('');
        $('#include-name').prop('checked', true);
        $('#include-args').prop('checked', true);
        $('#include-doc').prop('checked', true);
        $('#hide-unmatched').prop('checked', false);
        resetKeywords();
    }

    function resetKeywords() {
        renderTemplate('shortcuts', libdoc);
        renderTemplate('keywords', libdoc);
        if (libdoc.contains_tags) {
            renderTemplate('tags', libdoc);
        }
        $('#match-count').hide();
        $('#altogether-count').show();
    }

    function setMatchVisibility() {
        var kws = $('#keywords-container').find('.kw-row');
        var hide = $('#hide-unmatched').prop('checked');
        kws.toggleClass('hide-unmatched', hide);
    }

    // http://stackoverflow.com/a/18484799
    var delay = (function () {
        var timer = 0;
        return function(callback, ms) {
            clearTimeout(timer);
            timer = setTimeout(callback, ms);
        };
    })();

</script>

<script type="text/x-jquery-tmpl" id="base-template">
    <h1>${name}</h1>
    <table class="metadata">
        {{if version}}<tr><th>Library version:</th><td>${version}</td></tr>{{/if}}
        {{if scope}}<tr><th>Library scope:</th><td>${scope}</td></tr>{{/if}}
        <tr><th>Named arguments:</th><td>{{if named_args}}supported{{else}}not supported{{/if}}</td></tr>
    </table>
    <div id="introduction-container">
        <h2 id="Introduction">Introduction</h2>
        <div class="doc">{{html doc}}</div>
    </div>
    <div id="importing-container"></div>
    <div id="shortcuts-container"></div>
    <div id="tags-container"></div>
    <div id="keywords-container"></div>
    <div id="footer-container"></div>
    <form id="search" action="javascript:void(0)">
        <fieldset>
            <legend id="search-title">Search keywords</legend>
            <input type="text" id="search-string" onkeyup="delay(doSearch, 500)">
            <fieldset>
                <legend>Search from</legend>
                <input type="checkbox" id="include-name" onclick="doSearch()" checked>
                <label for="include-name">Name</label>
                <input type="checkbox" id="include-args" onclick="doSearch()" checked>
                <label for="include-args">Arguments</label>
                <input type="checkbox" id="include-doc" onclick="doSearch()" checked>
                <label for="include-doc">Documentation</label>
                {{if libdoc.contains_tags}}
                <input type="checkbox" id="include-tags" onclick="doSearch()" checked>
                <label for="include-tags">Tags</label>
                {{/if}}
            </fieldset>
            <input type="checkbox" id="hide-unmatched" onclick="setMatchVisibility()" checked>
            <label for="hide-unmatched">Hide unmatched keywords</label>
            <div id="search-buttons">
                <input type="button" value="Reset" onclick="resetSearch()"
                       title="Reset search">
                <input type="button" value="Close" onclick="closeSearch()"
                       title="Close search (shortcut: <Esc>)">
            </div>
        </fieldset>
    </form>
    <div id="open-search" onclick="openSearch()" title="Search keywords (shortcut: s)"></div>
</script>

<script type="text/x-jquery-tmpl" id="importing-template">
    <h2 id="Importing">Importing</h2>
    <table border="1" class="keywords">
        <tr>
            <th class="args">Arguments</th>
            <th class="doc">Documentation</th>
        </tr>
        {{each inits}}
        <tr class="kw-row">
            <td class="args">
            {{each args}}
              <span>${$value}</span>{{if $index < args.length-1}}, {{/if}}
            {{/each}}
            </td>
            <td class="doc">{{html $value.doc}}</td>
        </tr>
        {{/each}}
    </table>
</script>

<script type="text/x-jquery-tmpl" id="shortcuts-template">
    <h2 id="Shortcuts">Shortcuts</h2>
    <div class='shortcuts'>
        {{each keywords}}
        <a href="#${encodeURIComponent($value.name)}"
           class="{{if $value.matched === false}}no-{{/if}}match"
           title="${$value.shortdoc}">${$value.name}</a>
        {{if $index < keywords.length-1}} &middot; {{/if}}
        {{/each}}
    </div>
</script>

<script type="text/x-jquery-tmpl" id="tags-template">
    <h2 id="Tags">Tags</h2>
    <div class='shortcuts'>
        {{each all_tags}}
        <a href="javascript:tagSearch('${$value}')"
           title="Show tests with this tag">${$value}</a> &middot;
        {{/each}}
        <a href="javascript:resetKeywords()" class="normal-first-letter"
           title="Show all tests">[Reset]</a>
    </div>
</script>

<script type="text/x-jquery-tmpl" id="keywords-template">
    <h2 id="Keywords">Keywords</h2>
    <table border="1" class="keywords">
        <tr>
            <th class="kw">Keyword</th>
            <th class="args">Arguments</th>
            {{if libdoc.contains_tags}}
            <th class="tags">Tags</th>
            {{/if}}
            <th class="doc">Documentation</th>
        </tr>
        {{each keywords}}
            {{tmpl($value) 'keyword-template'}}
        {{/each}}
    </table>
</script>

<script type="text/x-jquery-tmpl" id="keyword-template">
    <tr class="kw-row {{if matched === false}}no-{{/if}}match">
        <td class="kw">
            <a name="${name}" href="#${encodeURIComponent(name)}"
               title="Link to this keyword">${name}</a>
        </td>
        <td class="args">
            {{each args}}
            <span>${$value}</span>{{if $index < args.length-1}}, {{/if}}
            {{/each}}
        </td>
        {{if libdoc.contains_tags}}
        <td class="tags">
            {{each tags}}
            <a href="javascript:tagSearch('${$value}')"
               title="Show tests with this tag">${$value}</a>{{if $index < tags.length-1}}, {{/if}}
            {{/each}}
        </td>
        {{/if}}
        <td class="doc">{{html doc}}</td>
    </tr>
</script>


<script type="text/x-jquery-tmpl" id="footer-template">
    <p class="footer">
        <span id="altogether-count">Altogether ${keywords.length} keywords.</span>
        <span id="match-count"></span>
        <br>
        Generated by <a href="http://robotframework.org/robotframework/#built-in-tools">Libdoc</a> on ${generated}.
    </p>
</script>

</body>
</html>
