mod_macro.html.en revision c44eeebd065e2c8cd028016b45c58afb480aaf8f
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe This file is generated from xml source: DO NOT EDIT
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<title>mod_macro - Apache HTTP Server Version 2.5</title>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
2e545ce2450a9953665f701bb05350f0d3f26275nd<script src="/style/scripts/prettify.min.js" type="text/javascript">
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<link href="/images/favicon.ico" rel="shortcut icon" /></head>
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div>
3f08db06526d6901aa08c110b5bc7dde6bc39905nd<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Modules</a></div>
0066eddda7203f6345b56f77d146a759298dc635gryzor<p><span>Available Languages: </span><a href="/en/mod/mod_macro.html" title="English"> en </a> |
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung<a href="/fr/mod/mod_macro.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a></p>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides macros within apache httpd runtime configuration files</td></tr>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<tr><th><a href="module-dict.html#ModuleIdentifier">Module�Identifier:</a></th><td>macro_module</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="module-dict.html#SourceFile">Source�File:</a></th><td>mod_macro.c</td></tr></table>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <p>Provides macros within Apache httpd runtime configuration files,
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe to ease the process of creating numerous similar configuration
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin blocks. When the server starts up, the macros are expanded using the
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin provided parameters, and the result is processed as along with the
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin rest of the configuration file.</p>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<li><img alt="" src="/images/down.gif" /> <a href="#usage">Usage</a></li>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<li><img alt="" src="/images/down.gif" /> <a href="#tips">Tips</a></li>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<li><img alt="" src="/images/down.gif" /> <a href="#examples">Examples</a></li>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<li><img alt="" src="/images/down.gif" /> <a href="#macro"><Macro></a></li>
57b31f30545668d28e895efe7f5c0eb15d37a03figalic<li><img alt="" src="/images/down.gif" /> <a href="#undefmacro">UndefMacro</a></li>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<li><img alt="" src="/images/down.gif" /> <a href="#use">Use</a></li>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<div class="directive-section"><h2><a name="Macro" id="Macro"><Macro></a> <a name="macro" id="macro">Directive</a></h2>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a configuration file macro</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <p>The <code class="directive">Macro</code> directive controls the definition of
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe a macro within the server runtime configuration files.
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe The first argument is the name of the macro.
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe Other arguments are parameters to the macro. It is good practice to prefix
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe parameter names with any of '<code>$%@</code>', and not macro names
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe with such characters.
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <pre class="prettyprint lang-config"><Macro LocalAccessPolicy>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</Macro>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<Macro RestrictedAccessPolicy $ipnumbers>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe Require ip $ipnumbers
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</Macro></pre>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<div class="directive-section"><h2><a name="UndefMacro" id="UndefMacro">UndefMacro</a> <a name="undefmacro" id="undefmacro">Directive</a></h2>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin <p>The <code class="directive">UndefMacro</code> directive undefines a macro
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe which has been defined before hand.</p>
27dcd8d81085fd60aadcd8a9bad35a607b26b758nilgun <pre class="prettyprint lang-config">UndefMacro LocalAccessPolicy
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrinUndefMacro RestrictedAccessPolicy</pre>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin<div class="directive-section"><h2><a name="Use" id="Use">Use</a> <a name="use" id="use">Directive</a></h2>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use a macro</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <p>The <code class="directive">Use</code> directive controls the use of a macro.
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe The specified macro is expanded. It must be given the same number of
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe arguments as in the macro definition. The provided values are
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe associated to their corresponding initial parameters and are substituted
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe before processing.</p>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <pre class="prettyprint lang-config">Use LocalAccessPolicy
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweUse RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <p>is equivalent, with the macros defined above, to:</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>Macros are defined using <code class="directive"><Macro></code> blocks, which contain the portion of
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweyour configuration that needs to be repeated, complete with variables
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowefor those parts that will need to be substituted.</p>
4aa603e6448b99f9371397d439795c91a93637eand<p>For example, you might use a macro to define a <code class="directive"><VirtualHost></code> block, in order to define
e487d6c09669296f94a5190cc34586a98e624a00ndmultiple similar virtual hosts:</p>
4aa603e6448b99f9371397d439795c91a93637eand<pre class="prettyprint lang-config"><Macro VHost $name $domain>
e487d6c09669296f94a5190cc34586a98e624a00nd<VirtualHost *:80>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe ServerName $domain
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe ServerAlias www.$domain
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</VirtualHost>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</Macro></pre>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>Macro names are case-insensitive, like httpd configuration
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowedirectives. However, variable names are case sensitive.</p>
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin<p>You would then invoke this macro several times to create virtual
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<pre class="prettyprint lang-config">Use VHost example example.com
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweUse VHost myhost hostname.org
4aa603e6448b99f9371397d439795c91a93637eandUse VHost apache apache.org
4aa603e6448b99f9371397d439795c91a93637eandUndefMacro VHost</pre>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>At server startup time, each of these <code class="directive">Use</code>
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweinvocations would be expanded into a full virtualhost, as
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowedescribed by the <code class="directive">Macro</code> definition.</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>The <code class="directive">UndefMacro</code> directive is used so that later
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowemacros using the same variable names don't result in conflicting
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowedefinitions.</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>A more elaborate version of this example may be seen below in the
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweExamples section.</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
27dcd8d81085fd60aadcd8a9bad35a607b26b758nilgun<p>Parameter names should begin with a sigil such as <code>$</code>,
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<code>%</code>, or <code>@</code>, so that they are clearly
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweidentifiable, and also in order to help deal with interactions with
4aa603e6448b99f9371397d439795c91a93637eandother directives, such as the core <code class="directive"><a href="/mod/core.html#define">Define</a></code> directive. Failure to do so will
4aa603e6448b99f9371397d439795c91a93637eandresult in a warning. Nevertheless, you are encouraged to have a good
53c8c4e968f092ac29976710db5829444e4c11fahumbedoohknowledge of your entire server configuration in order to avoid reusing
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowethe same variables in different scopes, which can cause confusion.</p>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh<p>Parameters prefixed with either <code>$</code> or <code>%</code> are
4aa603e6448b99f9371397d439795c91a93637eandnot escaped. Parameters prefixes with <code>@</code> are escaped in
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>Avoid using a parameter which contains another parameter as a prefix,
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe(For example, <code>$win</code> and <code>$winter</code>) as this may
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowecause confusion at expression evaluation time. In the event of such
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweconfusion, the longest possible parameter name is used.</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>If you want to use a value within another string, it is useful to
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowesurround the parameter in braces, to avoid confusion:</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<pre class="prettyprint lang-config"><Macro DocRoot ${docroot}>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe</Macro></pre>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>A common usage of <code class="module"><a href="/mod/mod_macro.html">mod_macro</a></code> is for the creation of
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowedynamically-generated virtual hosts.</p>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<pre class="prettyprint lang-config">## Define a VHost Macro for repetitive configurations
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<Macro VHost $host $port $dir>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe Listen $port
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <VirtualHost *:$port>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe ServerName $host
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe DocumentRoot $dir
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin # Public document root
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <Directory $dir>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe Require all granted
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe </Directory>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe # limit access to intranet subdir.
4aa603e6448b99f9371397d439795c91a93637eand Require ip 10.0.0.0/8
17ade6df5ec233536985eb1c130a906c725dd614humbedooh </Directory>
4aa603e6448b99f9371397d439795c91a93637eand </VirtualHost>
e487d6c09669296f94a5190cc34586a98e624a00nd</Macro>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe## Use of VHost with different arguments.
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweUse VHost www.example.fr 1234 /vhosts/example.fr/htdocs</pre>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe<p>It's recommended that you undefine a macro once you've used it. This
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrinavoids confusion in a complex configuration file where there may be
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweconflicts in variable names.</p>
48b62528cd9513fe8b5f1bbcee92ab3b28c94807rbowen<pre class="prettyprint lang-config"><Macro DirGroup $dir $group>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe <Directory $dir>
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe Require group $group
4aa603e6448b99f9371397d439795c91a93637eand </Directory>
4aa603e6448b99f9371397d439795c91a93637eand</Macro>
5f4e50966b2b9b58436a1651cbe588d1b595657ewroweUndefMacro DirGroup</pre>
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung<p><span>Available Languages: </span><a href="/en/mod/mod_macro.html" title="English"> en </a> |
727872d18412fc021f03969b8641810d8896820bhumbedooh<a href="/fr/mod/mod_macro.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a></p>
0d0ba3a410038e179b695446bb149cce6264e0abnd</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
727872d18412fc021f03969b8641810d8896820bhumbedooh<script type="text/javascript"><!--//--><![CDATA[//><!--
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedoohvar comments_shortname = 'httpd';
0d0ba3a410038e179b695446bb149cce6264e0abndvar comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_macro.html';
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedooh(function(w, d) {
727872d18412fc021f03969b8641810d8896820bhumbedooh if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
0d0ba3a410038e179b695446bb149cce6264e0abnd d.write('<div id="comments_thread"><\/div>');
0d0ba3a410038e179b695446bb149cce6264e0abnd var s = d.createElement('script');
0d0ba3a410038e179b695446bb149cce6264e0abnd s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
0d0ba3a410038e179b695446bb149cce6264e0abnd (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
0d0ba3a410038e179b695446bb149cce6264e0abnd d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh})(window, document);
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen<p class="apache">Copyright 2015 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
0d0ba3a410038e179b695446bb149cce6264e0abnd<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
7fec19672a491661b2fe4b29f685bc7f4efa64d4ndif (typeof(prettyPrint) !== 'undefined') {
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd prettyPrint();