From 7ff1c4d15a2a0599d2ae31288aa37312b469ab4c Mon Sep 17 00:00:00 2001 From: Oliver Holworthy <1216955+oliverholworthy@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:02:04 +0100 Subject: [PATCH 1/3] Update docs theme from `sphinx_rtd_theme` to `sphinx_book_theme` --- docs/source/_static/NVIDIA-LogoBlack.svg | 1 + docs/source/_static/NVIDIA-LogoWhite.svg | 58 ++ docs/source/_static/css/custom.css | 500 ++++++++++++++++-- docs/source/_static/css/versions.css | 140 +++++ docs/source/_static/favicon.png | Bin 0 -> 2197 bytes .../source/_static/js/rtd-version-switcher.js | 5 + docs/source/_templates/layout.html | 30 +- docs/source/_templates/merlin-ecosystem.html | 14 + docs/source/_templates/versions.html | 2 +- docs/source/conf.py | 29 +- requirements/docs.txt | 5 +- 11 files changed, 733 insertions(+), 51 deletions(-) create mode 100755 docs/source/_static/NVIDIA-LogoBlack.svg create mode 100755 docs/source/_static/NVIDIA-LogoWhite.svg create mode 100644 docs/source/_static/css/versions.css create mode 100755 docs/source/_static/favicon.png create mode 100644 docs/source/_static/js/rtd-version-switcher.js create mode 100644 docs/source/_templates/merlin-ecosystem.html diff --git a/docs/source/_static/NVIDIA-LogoBlack.svg b/docs/source/_static/NVIDIA-LogoBlack.svg new file mode 100755 index 0000000000..c612396c71 --- /dev/null +++ b/docs/source/_static/NVIDIA-LogoBlack.svg @@ -0,0 +1 @@ +NVIDIA-LogoBlack \ No newline at end of file diff --git a/docs/source/_static/NVIDIA-LogoWhite.svg b/docs/source/_static/NVIDIA-LogoWhite.svg new file mode 100755 index 0000000000..942ca3b2a0 --- /dev/null +++ b/docs/source/_static/NVIDIA-LogoWhite.svg @@ -0,0 +1,58 @@ + + + + + + + NVIDIA-LogoBlack + + + + + diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css index 319ddff89a..7287e49212 100644 --- a/docs/source/_static/css/custom.css +++ b/docs/source/_static/css/custom.css @@ -1,34 +1,472 @@ -.wy-nav-content { - margin: 0; - background: #fcfcfc; - padding-top: 40px; +/* +# Copyright 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* Parts of this are adapted from the NVIDIA Omniverse Docs Sphinx Theme */ + +/* Set up for old browsers*/ +@supports not (font-variation-settings: normal) { + @font-face { + font-family: "NVIDIA"; + src: url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Lt.woff") format("woff"), + url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Lt.woff2") format("woff2"); + font-weight: 300; + font-style: normal; + } + @font-face { + font-family: "NVIDIA"; + src: url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Rg.woff") format("woff"), + url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Rg.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + } + @font-face { + font-family: "NVIDIA"; + src: url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Md.woff") format("woff"), + url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Md.woff2") format("woff2"); + font-weight: 500; + font-style: normal; + } + @font-face { + font-family: "NVIDIA"; + src: url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Bd.woff") format("woff"), + url("https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/NVIDIASans_W_Bd.woff2") format("woff2"); + font-weight: 700; + font-style: normal; + } +} + +/* Set up for modern browsers, all weights */ +@supports (font-variation-settings: normal) { + @font-face { + font-family: 'NVIDIA'; + src: url('https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/var/NVIDIASansVF_W_Wght.woff2') format('woff2 supports variations'), + url('https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/var/NVIDIASansVF_W_Wght.woff2') format('woff2-variations'); + font-weight: 100 1000; + font-stretch: 25% 151%; + font-style: normal; + } + @font-face{ + font-family:'NVIDIA'; + src:url('https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/var/NVIDIASansVF_Wght_W_Italic.woff2') format('woff2 supports variations'), + url('https://images.nvidia.com/etc/designs/nvidiaGDC/clientlibs_base/fonts/nvidia-sans/GLOBAL/var/NVIDIASansVF_Wght_W_Italic.woff2') format('woff2-variations'); + font-weight:100 1000; + font-stretch:25% 151%; + font-style:italic; + } } -.wy-side-nav-search { +:root +{ + /* nv branding */ + --nv-green: #76b900; + --nv-green-illuminate: #76d300; /* button state - hover */ + --nv-black: #000000; + --nv-white: #ffffff; + --nv-green-2: #004831; + + --nv-success: var(--nv-green); + --nv-error: #f44336; + + --nv-font-face: NVIDIA,Arial,Helvetica,Sans-Serif; + --nv-font-face-mono: SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace; + + /* nv branding: light theme */ + --text: #1a1a1a; + --background-default: #ffffff; + --background-alternate: #eeeeee; + --ui-and-graphics: #999999; + + --white: #ffffff; + --gray-1: #f7f7f7; + --gray-2: #eeeeee; + --gray-3: #dddddd; + --gray-4: #cccccc; + + /* nv branding: light theme mobile (closely matches our old font sizes) */ + --h1-color: var(--nv-green); + --h1-font-weight: 100; + --h1-letter-spacing: -0.02em; + --h1-font-size: 36px; + --h1-line-height: 1em; + --h1-text-transform: uppercase; + + --h2-color: var(--nv-green); + --h2-font-weight: 100; + --h2-letter-spacing: -0.02em; + --h2-font-size: 24px; + --h2-line-height: 1em; + --h2-text-transform: uppercase; + + --h3-color: var(--nv-green); + --h3-font-weight: 100; + --h3-letter-spacing: -0.02em; + --h3-font-size: 21px; + --h3-line-height: 1em; + --h3-text-transform: uppercase; + + --h4-color: var(--nv-green); + --h4-font-weight: 100; + --h4-letter-spacing: -0.02em; + --h4-font-size: 18px; + --h4-line-height: 1em; + --h4-text-transform: uppercase; + + --h5-color: var(--nv-green); + --h5-font-size: var(--body-font-size); + + --h6-color: var(--nv-green); + --h6-font-weight: 400; + + --body-font-color: var(--text); + --body-font-weight: normal; + --body-font-size: 16px; + --body-line-height: 1.5em; + + --small-font-color: var(--ui-and-graphics); + --small-font-weight: normal; + --small-font-size: 12px; + --small-line-height: 1.25em; + + --ul-font-color: var(--text); + --ul-font-weight: normal; + --ul-font-size: 16px; + --ul-line-height: 2em; + --ul-marker-font-face: FontAwesome; + --ul-marker-content: '\f105 \00a0 \00a0'; + + --ol-font-color: var(--text); + --ol-font-weight: normal; + --ol-font-size: 16px; + --ol-line-height: 2em; + --ol-list-style-type: decimal; + --ol-ol-list-style-type: upper-alpha; + --ol-ol-ol-list-style-type: decimal; /* not specified in style guide */ + + --disabled-font-color: var(--gray-4); + --disabled-font-weight: normal; + --disabled-font-size: 16px; + --disabled-line-height: 1em; /* style guide says 16px */ + + --error-font-color: var(--nv-error); + --error-font-weight: normal; + --error-font-size: 16px; + --error-line-height: 1em; /* style guide says 16px */ + + --success-font-color: var(--nv-success); + --success-font-weight: normal; + --success-font-size: 16px; + --success-line-height: 1em; /* style guide says 16px */ + + /* omni-style */ + --sidebar-color: #000000; + --sidebar-alt-color: #333333; + --sidebar-headline-color: var(--nv-green); + --sidebar-text-color: #cccccc; + + --table-background-header: var(--nv-black); + --table-background-alternate: var(--background-alternate); /* for alternating rows */ + --table-text: var(--text); + --table-border: var(--ui-and-graphics); + --table-border-header: var(--gray-3); + + /* this is off-brand, but `uppercase` makes headings with source code look bad. */ + --h1-text-transform: none; + --h2-text-transform: none; + --h3-text-transform: none; + --h4-text-transform: none; + + --h3-font-weight: normal; /* this is off-brand and overrides the above definition */ + + --note-background-color: var(--nv-green); + --note-background-alt-color: #cccccc; + + --important-background-color: #f44336; + --important-background-alt-color: #cccccc; + + --link-color: var(--nv-green); + --link-visited-color: var(--nv-green); + --link-hover-color: var(--nv-green-illuminate); + + --background-color: var(--background-default); + + /* template T* tryAcquireInterface(const void* pluginInterface) */ + --api-member-header-background-color: var(--gray-2); + --api-member-header-border-color: var(--sidebar-headline-color); + --api-member-header-text-color: var(--text); + --api-member-header-link-color: var(--link-color); + + --api-member-background-color: var(--gray-1); + + /* struct carb::Framework */ + --api-header-text-color: var(--nv-green); + --api-header-border-color: var(--ui-and-graphics); + + /* sphinx-design color modifications */ + --sd-color-tabs-label-active: var(--nv-green); + --sd-color-tabs-underline-active: var(--nv-green); + + --sd-color-tabs-label-hover: var(--nv-green-illuminate); + --sd-color-tabs-underline-hover: var(--nv-green-illuminate); +} + +/* Custom Styles */ +:root { + --pst-font-size-base: none; + --pst-color-admonition-note: var(--pst-color-primary); + --pst-color-admonition-default: var(--pst-color-primary); + --pst-color-info: 255, 193, 7; + --pst-color-admonition-tip: var(--pst-color-info); + --pst-color-admonition-hint: var(--pst-color-info); + --pst-color-admonition-important: var(--pst-color-info); + --pst-color-warning: 245, 162, 82; + --pst-color-danger: 230, 101, 129; + --pst-color-admonition-warning: var(--pst-color-danger); + --pst-color-link: 118, 185, 0; + --pst-color-inline-code: 92, 22, 130; + --font-family-sans-serif: NVIDIA Sans, Helvetica, Arial, var(--pst-font-family-base-system); + --pst-font-family-heading: NVIDIA Sans, Helvetica, Arial, var(--pst-font-family-base-system); + --pst-font-family-monospace: Roboto Mono, var(--pst-font-family-monospace-system); + font-family: NVIDIA Sans, Helvetica, Arial,Sans-serif; +} + + +html[data-theme="light"] { + --pst-color-primary: var(--nv-green); +} +html[data-theme="dark"] { + --pst-color-primary: var(--nv-green); +} + +/**********************************************************************************************************************/ +/* Standard Text Formatting */ +/**********************************************************************************************************************/ + +/* Headline Formatting */ +.bd-container h1 +{ + color: var(--h1-color); + + font-weight: var(--h1-font-weight); + font-size: var(--h1-font-size); + font-style: normal; + + line-height: var(--h1-line-height); + margin-top: 0.75em; + margin-bottom: 0.75em !important; /* override RTD theme */ + + text-transform: var(--h1-text-transform); +} + +.bd-container h2 +{ + color: var(--h2-color); + + font-weight: var(--h2-font-weight); + font-size: var(--h2-font-size); + font-style: normal; + + line-height: var(--h2-line-height); + margin-top: 1.25em; + margin-bottom: 0.5em !important; /* override RTD theme */ + + text-transform: var(--h2-text-transform); +} + +.bd-container h3 +{ + color: var(--h3-color); + + font-weight: var(--h3-font-weight); + font-size: var(--h3-font-size); + font-style: normal; + + line-height: var(--h3-line-height); + margin-top: 1.25em; + margin-bottom: 0.5em !important; /* override RTD theme */ + + text-transform: var(--h3-text-transform); +} + +.bd-container h4 +{ + color: var(--h4-color); + + font-weight: var(--h4-font-weight); + font-size: var(--h4-font-size); + font-style: normal; + + line-height: var(--h4-line-height); + margin-top: 1.25em; + margin-bottom: 0.5em !important; /* override RTD theme */ + + text-transform: var(--h4-text-transform); +} + +.bd-container h5 +{ + color: var(--h5-color); + + font-size: var(--h5-font-size); +} + +.bd-container h6 +{ + color: var(--h6-color); + + font-weight: var(--h6-font-weight); +} + +/* Math should inherit its color */ +span[id*=MathJax-Span] +{ + color: inherit; +} + +/* text highlighted by search */ +.rst-content .highlighted +{ + background: #f1c40f3b; + box-shadow: 0 0 0 1px #f1c40f; + display: inline; + font-weight: inherit; +} + +/* a local table-of-contents messes with heading colors. make sure to use the regular heading colors */ +.rst-content .toc-backref +{ + color: inherit; +} + +/* make links to function looks like other literals */ +.rst-content code.xref, +.rst-content tt.xref, +a .rst-content code, +a .rst-content tt +{ + color: #e74c3c; + font-weight: inherit; +} + +/* Link Colors */ +a +{ + color: var(--link-color); +} + +a:visited +{ + color: var(--link-visited-color); +} + +a:hover +{ + color: var(--link-hover-color); +} + +/* follow branding guide for small footer text */ +footer p +{ + color: var(--small-font-color); + font-weight: var(--small-font-weight); + font-size: var(--small-font-size); + line-height: var(--small-line-height); +} + +/* add nvidia logo (like www.nvidia.com) */ +html[data-theme="light"] footer.bd-footer-content p.copyright::before +{ + content: url(../NVIDIA-LogoBlack.svg); + display: block; + width: 110px; + margin: 0px; + position: relative; + left: -9px; +} + +/* add nvidia logo (like www.nvidia.com) */ +html[data-theme="dark"] footer.bd-footer-content p.copyright::before +{ + content: url(../NVIDIA-LogoWhite.svg); display: block; - width: 300px; - padding: .809em; - padding-top: 0.809em; - margin-bottom: .809em; - z-index: 200; - background-color: #2980b9; - text-align: center; - color: #fcfcfc; - padding-top: 40px; -} - -div.banner { - position: fixed; - top: 10px; - left: 20px; - margin: 0; - z-index: 1000; - width: 1050px; - text-align: center; -} - -p.banner { - border-radius: 4px; - color: #004831; - background: #76b900; -} \ No newline at end of file + width: 110px; + margin: 0px; + position: relative; + left: -9px; +} + + +/**********************************************************************************************************************/ +/* Lists */ +/**********************************************************************************************************************/ + +/* unordered list should have a nv-green > */ +.rst-content section ul:not(.treeView):not(.collapsibleList) li:not(.collapsibleListClosed):not(.collapsibleListOpen):not(.lastChild)::marker, +.rst-content .toctree-wrapper ul li::marker, +.wy-plain-list-disc li::marker, +article ul li::marker +{ + font-family: var(--ul-marker-font-face); + content: var(--ul-marker-content); + color: var(--nv-green); + font-weight: 600; +} + +/* top-level ordered list should have a nv-green number */ +.rst-content section ol li::marker, +.rst-content ol.arabic li::marker, +.wy-plain-list-decimal li::marker, +article ol li::marker +{ + color: var(--nv-green); + font-weight: 600; + list-style: var(--ol-list-style-type); +} + +/* second-level ordered list should have a nv-green uppercase letter */ +.rst-content section ol ol li, +.rst-content ol.arabic ol.arabic li, +.wy-plain-list-decimal ol ol li, +article ol ol li +{ + list-style: var(--ol-ol-list-style-type); +} + +/* third-level ordered lists aren't in the branding guide. let's use numbers. */ +.rst-content section ol ol ol li, +.rst-content ol.arabic ol.arabic ol li, +.wy-plain-list-decimal ol ol ol li, +article ol ol ol li +{ + list-style: var(--ol-ol-ol-list-style-type); +} + +/* start the first paragraph immediately (don't add space at the top) */ +dd p:first-child +{ + margin-top: 0px; +} diff --git a/docs/source/_static/css/versions.css b/docs/source/_static/css/versions.css new file mode 100644 index 0000000000..cafebc54ba --- /dev/null +++ b/docs/source/_static/css/versions.css @@ -0,0 +1,140 @@ +/* Version Switcher */ + +.rst-versions { + flex-align: bottom; + bottom: 0; + left: 0; + z-index: 400 +} + +.rst-versions a { + color: var(--nv-green); + text-decoration: none +} + +.rst-versions .rst-badge-small { + display: none +} + +.rst-versions .rst-current-version { + padding: 12px; + display: block; + text-align: right; + font-size: 90%; + cursor: pointer; + border-top: 1px solid rgba(0,0,0,.1); + *zoom:1 +} + +.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after { + display: table; + content: "" +} + +.rst-versions .rst-current-version:after { + clear: both +} + +.rst-versions .rst-current-version .fa-book { + float: left +} + +.rst-versions .rst-current-version .icon-book { + float: left +} + +.rst-versions .rst-current-version.rst-out-of-date { + background-color: #E74C3C; + color: #fff +} + +.rst-versions .rst-current-version.rst-active-old-version { + background-color: #F1C40F; + color: #000 +} + +.rst-versions.shift-up { + height: auto; + max-height: 100% +} + +.rst-versions.shift-up .rst-other-versions { + display: block +} + +.rst-versions .rst-other-versions { + font-size: 90%; + padding: 12px; + color: gray; + display: none +} + +.rst-versions .rst-other-versions hr { + display: block; + height: 1px; + border: 0; + margin: 20px 0; + padding: 0; + border-top: solid 1px #413d3d +} + +.rst-versions .rst-other-versions dd { + display: inline-block; + margin: 0 +} + +.rst-versions .rst-other-versions dd a { + display: inline-block; + padding: 6px; + color: var(--nv-green); + font-weight: 500; +} + +.rst-versions.rst-badge { + width: auto; + bottom: 20px; + right: 20px; + left: auto; + border: none; + max-width: 300px +} + +.rst-versions.rst-badge .icon-book { + float: none +} + +.rst-versions.rst-badge .fa-book { + float: none +} + +.rst-versions.rst-badge.shift-up .rst-current-version { + text-align: right +} + +.rst-versions.rst-badge.shift-up .rst-current-version .fa-book { + float: left +} + +.rst-versions.rst-badge.shift-up .rst-current-version .icon-book { + float: left +} + +.rst-versions.rst-badge .rst-current-version { + width: auto; + height: 30px; + line-height: 30px; + padding: 0 6px; + display: block; + text-align: center +} + +@media screen and (max-width: 768px) { + .rst-versions { + width:85%; + display: none + } + + .rst-versions.shift { + display: block + } +} diff --git a/docs/source/_static/favicon.png b/docs/source/_static/favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..a00f862ecfbbe5cf3799ac2b550438a706e804a0 GIT binary patch literal 2197 zcmcImX;_n27QWw?6v8G(S*?KpmZeZgKqo>m36)L4DvBG0;Fb;y7^4P6LK3VYiWZs2 z7L-k$5>OCmMNk2Wq*fLMeWHUU4M}i{A|&QvjUkZv=r6ncm><(0-*fIg@4e@|=iGbF z{Z7ZnMp&7zF$VxxZHWxs3IK!*A%HPKL^7-HAR^3|k-Lrn@ac->4|>#kLhgPK{Y4I1&t3f4>FR7sl}&oXV_k>Z-YGFz#}Hv-2m zuAKb`YJC_Vug$M!2wpn&k5RPqSR-^u+L{UZFG|>j$uPK&1_fpSy&7QL!OCcWF9TEp z#H0VEz>92J*SL%$^;M>eujLPC4!75goT!4{bNtCtj2Qct=2gVmcPetI=0a&kyDGy< zEYFgT_$YJ5o$7mccI^Wl=>IFxjL#ik52^3HI|dD*k{$=VmyzZT9cDT^K-KZze^;sIsQAujlyUc-p%jsMVW~TT``x0?`1T=dV< z&!lr#Grw8ZRc?aKB&nZ~KiHUowlqGd_yqQnq!y4(f@#as7$^R>D!()Zs%$+h;1b=7 zsKeUQGbrt=9!1vU7O;Tmxn;(eRdCKBuUy zAiYE+rRD+`r}OZLPzqJXClt~3!~=j`-daC9`wY90rK``o>~kME^;jI=t7p^53?Ae0ieftDm z>p0d*;XJykPwR)=N3-CtXWG&hR6(=@B>1c0U?pI+E zlRe%g(SoQz2PYZN-6yffZ}hVjM;CH`c3c`nZp`$mU(0tPYn;@ns9xZ3 zqi-)rv!qTzG>$*G34NC?#;x5 z&7rEZ=@#OZ2|LR?Oz1+-=yfj3x&n6$qT3jf4g|vP=m8s^%T=uvQisMUFJpyjG)!d~ z4r{L&r+@Beo$hu+0GV9WIbJ-mq+9>+kZnSas04HC=;lB81wAuvlKnwCyR2i>}KA#`mHKtX-vNyFc%Ovt|cu zc`g>hZuLL2LsAU)z>zmxH}2e?;{wl)$vDc~#B<^mxoB}`)H|K-UZsn>}g){^wibnNSFyH)WxOSpy{qxKBei8N(vuP zenh=oa%|f9M5mn8Ha?#SLzs_X8>q(}#!xq6d)$E#=^n}|%>Gqi$sIn9<_!v|c97EB z_55bwunu-a^AcR+DUcG6tt+qOCw;O1?>A^~T;nIHE#xYQU^|FTiUeg_?fJd-nZM+r zd0xlrM}x|G&R{^|xWJg(OG}&Ha0qUcsvpr}v->YD<|$tZxHV|{DSh$S!KY0Ja$Y+W z2)GYA(DZE-L$+yB*9L>P2e9-vAdZ_Hme#^zh9wu_b4Wlb2FyV%V->LE5+DpichihY zkQ9S2{S8Po`*p|ZsXPMGoi=;b$QZ`rl073TQmzy#yTQf*j|jcV~b`gvQrtO+{(dirpyfT}tKhsDEqUTSmt-U7GV~ zB9NrGN%FsKLAK}}<`{K>h%vH&v-cJnG4`-|kbVv#OwJM~?Y|d*j)2MM#7T>%Et%!{ q&Qza5^vS>WasAT={QUI`Q}&~6