Files
metasploit-gs/api/Msf/OptBase.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

2060 lines
52 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Msf::OptBase
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../css/style.css" type="text/css" />
<link rel="stylesheet" href="../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Msf::OptBase";
relpath = '../';
</script>
<script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../_index.html">Index (O)</a> &raquo;
<span class='title'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span>
&raquo;
<span class="title">OptBase</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Msf::OptBase
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Msf::OptBase</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/opt_base.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>The base class for all options.</p>
</div>
</div>
<div class="tags">
</div><div id="subclasses">
<h2>Direct Known Subclasses</h2>
<p class="children"><span class='object_link'><a href="OptAddress.html" title="Msf::OptAddress (class)">OptAddress</a></span>, <span class='object_link'><a href="OptAddressRange.html" title="Msf::OptAddressRange (class)">OptAddressRange</a></span>, <span class='object_link'><a href="OptBool.html" title="Msf::OptBool (class)">OptBool</a></span>, <span class='object_link'><a href="OptDatabaseRefOrPath.html" title="Msf::OptDatabaseRefOrPath (class)">OptDatabaseRefOrPath</a></span>, <span class='object_link'><a href="OptEnum.html" title="Msf::OptEnum (class)">OptEnum</a></span>, <span class='object_link'><a href="OptFloat.html" title="Msf::OptFloat (class)">OptFloat</a></span>, <span class='object_link'><a href="OptInt.html" title="Msf::OptInt (class)">OptInt</a></span>, <span class='object_link'><a href="OptIntRange.html" title="Msf::OptIntRange (class)">OptIntRange</a></span>, <span class='object_link'><a href="OptMeterpreterDebugLogging.html" title="Msf::OptMeterpreterDebugLogging (class)">OptMeterpreterDebugLogging</a></span>, <span class='object_link'><a href="OptPath.html" title="Msf::OptPath (class)">OptPath</a></span>, <span class='object_link'><a href="OptProxies.html" title="Msf::OptProxies (class)">OptProxies</a></span>, <span class='object_link'><a href="OptRaw.html" title="Msf::OptRaw (class)">OptRaw</a></span>, <span class='object_link'><a href="OptRegexp.html" title="Msf::OptRegexp (class)">OptRegexp</a></span>, <span class='object_link'><a href="OptRhosts.html" title="Msf::OptRhosts (class)">OptRhosts</a></span>, <span class='object_link'><a href="OptSessionTlvLogging.html" title="Msf::OptSessionTlvLogging (class)">OptSessionTlvLogging</a></span>, <span class='object_link'><a href="OptString.html" title="Msf::OptString (class)">OptString</a></span>, <span class='object_link'><a href="OptTimedelta.html" title="Msf::OptTimedelta (class)">OptTimedelta</a></span></p>
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#advanced-instance_method" title="#advanced (instance method)">#<strong>advanced</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Whether or not this is an advanced option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#aliases-instance_method" title="#aliases (instance method)">#<strong>aliases</strong> &#x21d2; Array&lt;String&gt; </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Array of aliases for this option for backward compatibility.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#conditions-instance_method" title="#conditions (instance method)">#<strong>conditions</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The list of potential conditions.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#default-instance_method" title="#default (instance method)">#<strong>default</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The default value of the option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#desc-instance_method" title="#desc (instance method)">#<strong>desc</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The description of the option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#enums-instance_method" title="#enums (instance method)">#<strong>enums</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The list of potential valid values.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#evasion-instance_method" title="#evasion (instance method)">#<strong>evasion</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Whether or not this is an evasion option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#fallbacks-instance_method" title="#fallbacks (instance method)">#<strong>fallbacks</strong> &#x21d2; Array&lt;String&gt; </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Array of fallbacks for this option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#max_length-instance_method" title="#max_length (instance method)">#<strong>max_length</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The max length of the input value.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#name-instance_method" title="#name (instance method)">#<strong>name</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The name of the option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#owner-instance_method" title="#owner (instance method)">#<strong>owner</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The module or entity that owns this option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#regex-instance_method" title="#regex (instance method)">#<strong>regex</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>A optional regex to validate the option value.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#required-instance_method" title="#required (instance method)">#<strong>required</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Whether or not the option is required.</p>
</div></span>
</li>
</ul>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#advanced%3F-instance_method" title="#advanced? (instance method)">#<strong>advanced?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if this is an advanced option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#display_value-instance_method" title="#display_value (instance method)">#<strong>display_value</strong>(value) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns a string representing a user-friendly display of the chosen value.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#empty_required_value%3F-instance_method" title="#empty_required_value? (instance method)">#<strong>empty_required_value?</strong>(value) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if the value supplied is nil and its required to be a valid value.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#evasion%3F-instance_method" title="#evasion? (instance method)">#<strong>evasion?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if this is an evasion option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(in_name, attrs = [], required: false, desc: nil, default: nil, conditions: [], enums: [], regex: nil, aliases: [], max_length: nil, fallbacks: []) &#x21d2; OptBase </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Initializes a named option with the supplied attribute array.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#invalid_value_length%3F-instance_method" title="#invalid_value_length? (instance method)">#<strong>invalid_value_length?</strong>(value) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if the value supplied is longer then the max allowed length.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#normalize-instance_method" title="#normalize (instance method)">#<strong>normalize</strong>(value) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Normalizes the supplied value to conform with the type that the option is conveying.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#required%3F-instance_method" title="#required? (instance method)">#<strong>required?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if this is a required option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#type%3F-instance_method" title="#type? (instance method)">#<strong>type?</strong>(in_type) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if the supplied type is equivalent to this options type.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#valid%3F-instance_method" title="#valid? (instance method)">#<strong>valid?</strong>(value, check_empty: true, datastore: nil) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>If its required and the value is nil or empty, then its not valid.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#validate_on_assignment%3F-instance_method" title="#validate_on_assignment? (instance method)">#<strong>validate_on_assignment?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if this option can be validated on assignment.</p>
</div></span>
</li>
</ul>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(in_name, attrs = [], required: false, desc: nil, default: nil, conditions: [], enums: [], regex: nil, aliases: [], max_length: nil, fallbacks: []) &#x21d2; <tt><span class='object_link'><a href="" title="Msf::OptBase (class)">OptBase</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Initializes a named option with the supplied attribute array. The array is composed of three values.</p>
<p><a href="0">attrs</a> = required (boolean type) <a href="1">attrs</a> = description (string) <a href="2">attrs</a> = default value <a href="3">attrs</a> = possible enum values <a href="4">attrs</a> = Regex to validate the option</p>
<p>Attrs can also be specified explicitly via named parameters, or attrs can also be a string as standin for the required description field.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 27</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_in_name'>in_name</span><span class='comma'>,</span> <span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>required:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='label'>desc:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>default:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>conditions:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>enums:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>regex:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>aliases:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>max_length:</span> <span class='kw'>nil</span><span class='comma'>,</span>
<span class='label'>fallbacks:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_in_name'>in_name</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_aliases'>aliases</span> <span class='op'>=</span> <span class='id identifier rubyid_aliases'>aliases</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_max_length'>max_length</span> <span class='op'>=</span> <span class='id identifier rubyid_max_length'>max_length</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_conditions'>conditions</span> <span class='op'>=</span> <span class='id identifier rubyid_conditions'>conditions</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_fallbacks'>fallbacks</span> <span class='op'>=</span> <span class='id identifier rubyid_fallbacks'>fallbacks</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>0</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_required'>required</span> <span class='op'>=</span> <span class='id identifier rubyid_required'>required</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_desc'>desc</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>:</span> <span class='id identifier rubyid_desc'>desc</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_enums'>enums</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='op'>*</span><span class='lparen'>(</span><span class='id identifier rubyid_enums'>enums</span><span class='rparen'>)</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span>
<span class='kw'>if</span> <span class='id identifier rubyid_default'>default</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_enums'>enums</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='id identifier rubyid_enums'>enums</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>else</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='id identifier rubyid_default'>default</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_regex_temp'>regex_temp</span> <span class='op'>=</span> <span class='id identifier rubyid_regex'>regex</span>
<span class='kw'>else</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_required'>required</span> <span class='op'>=</span> <span class='id identifier rubyid_required'>required</span>
<span class='kw'>else</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_required'>required</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_desc'>desc</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_desc'>desc</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_default'>default</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_enums'>enums</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>3</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_enums'>enums</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_enums'>enums</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='op'>*</span><span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_enums'>enums</span><span class='rparen'>)</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_regex_temp'>regex_temp</span> <span class='op'>=</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='lbracket'>[</span><span class='int'>4</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_regex'>regex</span>
<span class='kw'>end</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_max_length'>max_length</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_desc'>desc</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> Max parameter length: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_max_length'>max_length</span><span class='embexpr_end'>}</span><span class='tstring_content'> characters</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span>
<span class='comment'># convert to string
</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span> <span class='op'>=</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='kw'>if</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Regexp</span>
<span class='comment'># remove start and end character, they will be added later
</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span> <span class='op'>=</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\^</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\$$</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='comment'># Add start and end marker to match the whole regex
</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>^</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='embexpr_end'>}</span><span class='tstring_content'>$</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>begin</span>
<span class='const'>Regexp</span><span class='period'>.</span><span class='id identifier rubyid_compile'>compile</span><span class='lparen'>(</span><span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_regex'>regex</span> <span class='op'>=</span> <span class='id identifier rubyid_regex_temp'>regex_temp</span>
<span class='kw'>rescue</span> <span class='const'>RegexpError</span><span class='comma'>,</span> <span class='const'>TypeError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid Regex </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_regex_temp'>regex_temp</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id="advanced=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="advanced-instance_method">
#<strong>advanced</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Whether or not this is an advanced option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
185
186
187</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 185</span>
<span class='kw'>def</span> <span class='id identifier rubyid_advanced'>advanced</span>
<span class='ivar'>@advanced</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="aliases=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="aliases-instance_method">
#<strong>aliases</strong> &#x21d2; <tt>Array&lt;String&gt;</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Array of aliases for this option for backward compatibility.</p>
<p>This is useful in the scenario of an existing option being renamed to a new value. Either the current option name or list of aliases can be used in modules for retrieving datastore values, or by a user when setting datastore values manually.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array&lt;String&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>the array of aliases</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
216
217
218</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 216</span>
<span class='kw'>def</span> <span class='id identifier rubyid_aliases'>aliases</span>
<span class='ivar'>@aliases</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="conditions=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="conditions-instance_method">
#<strong>conditions</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The list of potential conditions</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
197
198
199</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 197</span>
<span class='kw'>def</span> <span class='id identifier rubyid_conditions'>conditions</span>
<span class='ivar'>@conditions</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="default=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="default-instance_method">
#<strong>default</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The default value of the option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
177
178
179</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 177</span>
<span class='kw'>def</span> <span class='id identifier rubyid_default'>default</span>
<span class='ivar'>@default</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="desc=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="desc-instance_method">
#<strong>desc</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The description of the option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
173
174
175</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 173</span>
<span class='kw'>def</span> <span class='id identifier rubyid_desc'>desc</span>
<span class='ivar'>@desc</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="enums=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="enums-instance_method">
#<strong>enums</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The list of potential valid values</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
201
202
203</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 201</span>
<span class='kw'>def</span> <span class='id identifier rubyid_enums'>enums</span>
<span class='ivar'>@enums</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="evasion=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="evasion-instance_method">
#<strong>evasion</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Whether or not this is an evasion option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
189
190
191</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 189</span>
<span class='kw'>def</span> <span class='id identifier rubyid_evasion'>evasion</span>
<span class='ivar'>@evasion</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="fallbacks=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="fallbacks-instance_method">
#<strong>fallbacks</strong> &#x21d2; <tt>Array&lt;String&gt;</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Array of fallbacks for this option.</p>
<p>This is useful in the scenario of wanting specialised option names such as SMBUser, but to also support gracefully checking a list of more generic fallbacks option names such as Username.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array&lt;String&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>the array of fallbacks</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
226
227
228</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 226</span>
<span class='kw'>def</span> <span class='id identifier rubyid_fallbacks'>fallbacks</span>
<span class='ivar'>@fallbacks</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="max_length=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="max_length-instance_method">
#<strong>max_length</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The max length of the input value</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
231
232
233</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 231</span>
<span class='kw'>def</span> <span class='id identifier rubyid_max_length'>max_length</span>
<span class='ivar'>@max_length</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="name=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="name-instance_method">
#<strong>name</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The name of the option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
165
166
167</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 165</span>
<span class='kw'>def</span> <span class='id identifier rubyid_name'>name</span>
<span class='ivar'>@name</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="owner=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="owner-instance_method">
#<strong>owner</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The module or entity that owns this option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
193
194
195</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 193</span>
<span class='kw'>def</span> <span class='id identifier rubyid_owner'>owner</span>
<span class='ivar'>@owner</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="regex=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="regex-instance_method">
#<strong>regex</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>A optional regex to validate the option value</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
205
206
207</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 205</span>
<span class='kw'>def</span> <span class='id identifier rubyid_regex'>regex</span>
<span class='ivar'>@regex</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="required=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="required-instance_method">
#<strong>required</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Whether or not the option is required.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
169
170
171</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 169</span>
<span class='kw'>def</span> <span class='id identifier rubyid_required'>required</span>
<span class='ivar'>@required</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="advanced?-instance_method">
#<strong>advanced?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if this is an advanced option.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
91
92
93</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 91</span>
<span class='kw'>def</span> <span class='id identifier rubyid_advanced?'>advanced?</span>
<span class='id identifier rubyid_advanced'>advanced</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="display_value-instance_method">
#<strong>display_value</strong>(value) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns a string representing a user-friendly display of the chosen value</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
149
150
151</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 149</span>
<span class='kw'>def</span> <span class='id identifier rubyid_display_value'>display_value</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="empty_required_value?-instance_method">
#<strong>empty_required_value?</strong>(value) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if the value supplied is nil and its required to be a valid value</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
134
135
136</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 134</span>
<span class='kw'>def</span> <span class='id identifier rubyid_empty_required_value?'>empty_required_value?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
<span class='id identifier rubyid_required?'>required?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="evasion?-instance_method">
#<strong>evasion?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if this is an evasion option.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
98
99
100</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 98</span>
<span class='kw'>def</span> <span class='id identifier rubyid_evasion?'>evasion?</span>
<span class='id identifier rubyid_evasion'>evasion</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="invalid_value_length?-instance_method">
#<strong>invalid_value_length?</strong>(value) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if the value supplied is longer then the max allowed length</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
156
157
158
159
160</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 156</span>
<span class='kw'>def</span> <span class='id identifier rubyid_invalid_value_length?'>invalid_value_length?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_max_length'>max_length</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='id identifier rubyid_max_length'>max_length</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="normalize-instance_method">
#<strong>normalize</strong>(value) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Normalizes the supplied value to conform with the type that the option is conveying.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
142
143
144</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 142</span>
<span class='kw'>def</span> <span class='id identifier rubyid_normalize'>normalize</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
<span class='id identifier rubyid_value'>value</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="required?-instance_method">
#<strong>required?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if this is a required option.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
84
85
86</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 84</span>
<span class='kw'>def</span> <span class='id identifier rubyid_required?'>required?</span>
<span class='id identifier rubyid_required'>required</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="type?-instance_method">
#<strong>type?</strong>(in_type) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if the supplied type is equivalent to this options type.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
105
106
107</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 105</span>
<span class='kw'>def</span> <span class='id identifier rubyid_type?'>type?</span><span class='lparen'>(</span><span class='id identifier rubyid_in_type'>in_type</span><span class='rparen'>)</span>
<span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='id identifier rubyid_in_type'>in_type</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="valid?-instance_method">
#<strong>valid?</strong>(value, check_empty: true, datastore: nil) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>If its required and the value is nil or empty, then its not valid.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
119
120
121
122
123
124
125
126
127
128</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 119</span>
<span class='kw'>def</span> <span class='id identifier rubyid_valid?'>valid?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='label'>check_empty:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>datastore:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_check_empty'>check_empty</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_required?'>required?</span>
<span class='comment'># required variable not set
</span> <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_regex'>regex</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>return</span> <span class='op'>!</span><span class='op'>!</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_regex'>regex</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="validate_on_assignment?-instance_method">
#<strong>validate_on_assignment?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if this option can be validated on assignment</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
112
113
114</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/opt_base.rb', line 112</span>
<span class='kw'>def</span> <span class='id identifier rubyid_validate_on_assignment?'>validate_on_assignment?</span>
<span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:03:17 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>