<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="mpark/wg21" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <meta name="dcterms.date" content="2024-10-06" />
  <title>Unicode in the Library, Part 1: UTF Transcoding</title>
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
      div.csl-block{margin-left: 1.5em;}
      ul.task-list{list-style: none;}
      pre > code.sourceCode { white-space: pre; position: relative; }
      pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
      pre > code.sourceCode > span:empty { height: 1.2em; }
      .sourceCode { overflow: visible; }
      code.sourceCode > span { color: inherit; text-decoration: inherit; }
      div.sourceCode { margin: 1em 0; }
      pre.sourceCode { margin: 0; }
      @media screen {
      div.sourceCode { overflow: auto; }
      }
      @media print {
      pre > code.sourceCode { white-space: pre-wrap; }
      pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
      }
      pre.numberSource code
        { counter-reset: source-line 0; }
      pre.numberSource code > span
        { position: relative; left: -4em; counter-increment: source-line; }
      pre.numberSource code > span > a:first-child::before
        { content: counter(source-line);
          position: relative; left: -1em; text-align: right; vertical-align: baseline;
          border: none; display: inline-block;
          -webkit-touch-callout: none; -webkit-user-select: none;
          -khtml-user-select: none; -moz-user-select: none;
          -ms-user-select: none; user-select: none;
          padding: 0 4px; width: 4em;
          color: #aaaaaa;
        }
      pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
      div.sourceCode
        {  background-color: #f6f8fa; }
      @media screen {
      pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
      }
      code span { } /* Normal */
      code span.al { color: #ff0000; } /* Alert */
      code span.an { } /* Annotation */
      code span.at { } /* Attribute */
      code span.bn { color: #9f6807; } /* BaseN */
      code span.bu { color: #9f6807; } /* BuiltIn */
      code span.cf { color: #00607c; } /* ControlFlow */
      code span.ch { color: #9f6807; } /* Char */
      code span.cn { } /* Constant */
      code span.co { color: #008000; font-style: italic; } /* Comment */
      code span.cv { color: #008000; font-style: italic; } /* CommentVar */
      code span.do { color: #008000; } /* Documentation */
      code span.dt { color: #00607c; } /* DataType */
      code span.dv { color: #9f6807; } /* DecVal */
      code span.er { color: #ff0000; font-weight: bold; } /* Error */
      code span.ex { } /* Extension */
      code span.fl { color: #9f6807; } /* Float */
      code span.fu { } /* Function */
      code span.im { } /* Import */
      code span.in { color: #008000; } /* Information */
      code span.kw { color: #00607c; } /* Keyword */
      code span.op { color: #af1915; } /* Operator */
      code span.ot { } /* Other */
      code span.pp { color: #6f4e37; } /* Preprocessor */
      code span.re { } /* RegionMarker */
      code span.sc { color: #9f6807; } /* SpecialChar */
      code span.ss { color: #9f6807; } /* SpecialString */
      code span.st { color: #9f6807; } /* String */
      code span.va { } /* Variable */
      code span.vs { color: #9f6807; } /* VerbatimString */
      code span.wa { color: #008000; font-weight: bold; } /* Warning */
      code.diff {color: #898887}
      code.diff span.va {color: #006e28}
      code.diff span.st {color: #bf0303}
  </style>
  <style type="text/css">
body {
margin: 5em;
font-family: serif;

hyphens: auto;
line-height: 1.35;
text-align: justify;
}
@media screen and (max-width: 30em) {
body {
margin: 1.5em;
}
}
div.wrapper {
max-width: 60em;
margin: auto;
}
ul {
list-style-type: none;
padding-left: 2em;
margin-top: -0.2em;
margin-bottom: -0.2em;
}
a {
text-decoration: none;
color: #4183C4;
}
a.hidden_link {
text-decoration: none;
color: inherit;
}
li {
margin-top: 0.6em;
margin-bottom: 0.6em;
}
h1, h2, h3, h4 {
position: relative;
line-height: 1;
}
a.self-link {
position: absolute;
top: 0;
left: calc(-1 * (3.5rem - 26px));
width: calc(3.5rem - 26px);
height: 2em;
text-align: center;
border: none;
transition: opacity .2s;
opacity: .5;
font-family: sans-serif;
font-weight: normal;
font-size: 83%;
}
a.self-link:hover { opacity: 1; }
a.self-link::before { content: "§"; }
ul > li:before {
content: "\2014";
position: absolute;
margin-left: -1.5em;
}
:target { background-color: #C9FBC9; }
:target .codeblock { background-color: #C9FBC9; }
:target ul { background-color: #C9FBC9; }
.abbr_ref { float: right; }
.folded_abbr_ref { float: right; }
:target .folded_abbr_ref { display: none; }
:target .unfolded_abbr_ref { float: right; display: inherit; }
.unfolded_abbr_ref { display: none; }
.secnum { display: inline-block; min-width: 35pt; }
.header-section-number { display: inline-block; min-width: 35pt; }
.annexnum { display: block; }
div.sourceLinkParent {
float: right;
}
a.sourceLink {
position: absolute;
opacity: 0;
margin-left: 10pt;
}
a.sourceLink:hover {
opacity: 1;
}
a.itemDeclLink {
position: absolute;
font-size: 75%;
text-align: right;
width: 5em;
opacity: 0;
}
a.itemDeclLink:hover { opacity: 1; }
span.marginalizedparent {
position: relative;
left: -5em;
}
li span.marginalizedparent { left: -7em; }
li ul > li span.marginalizedparent { left: -9em; }
li ul > li ul > li span.marginalizedparent { left: -11em; }
li ul > li ul > li ul > li span.marginalizedparent { left: -13em; }
div.footnoteNumberParent {
position: relative;
left: -4.7em;
}
a.marginalized {
position: absolute;
font-size: 75%;
text-align: right;
width: 5em;
}
a.enumerated_item_num {
position: relative;
left: -3.5em;
display: inline-block;
margin-right: -3em;
text-align: right;
width: 3em;
}
div.para { margin-bottom: 0.6em; margin-top: 0.6em; text-align: justify; }
div.section { text-align: justify; }
div.sentence { display: inline; }
span.indexparent {
display: inline;
position: relative;
float: right;
right: -1em;
}
a.index {
position: absolute;
display: none;
}
a.index:before { content: "⟵"; }

a.index:target {
display: inline;
}
.indexitems {
margin-left: 2em;
text-indent: -2em;
}
div.itemdescr {
margin-left: 3em;
}
.bnf {
font-family: serif;
margin-left: 40pt;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.ncbnf {
font-family: serif;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 40pt;
}
.ncsimplebnf {
font-family: serif;
font-style: italic;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 40pt;
background: inherit; 
}
span.textnormal {
font-style: normal;
font-family: serif;
white-space: normal;
display: inline-block;
}
span.rlap {
display: inline-block;
width: 0px;
}
span.descr { font-style: normal; font-family: serif; }
span.grammarterm { font-style: italic; }
span.term { font-style: italic; }
span.terminal { font-family: monospace; font-style: normal; }
span.nonterminal { font-style: italic; }
span.tcode { font-family: monospace; font-style: normal; }
span.textbf { font-weight: bold; }
span.textsc { font-variant: small-caps; }
a.nontermdef { font-style: italic; font-family: serif; }
span.emph { font-style: italic; }
span.techterm { font-style: italic; }
span.mathit { font-style: italic; }
span.mathsf { font-family: sans-serif; }
span.mathrm { font-family: serif; font-style: normal; }
span.textrm { font-family: serif; }
span.textsl { font-style: italic; }
span.mathtt { font-family: monospace; font-style: normal; }
span.mbox { font-family: serif; font-style: normal; }
span.ungap { display: inline-block; width: 2pt; }
span.textit { font-style: italic; }
span.texttt { font-family: monospace; }
span.tcode_in_codeblock { font-family: monospace; font-style: normal; }
span.phantom { color: white; }

span.math { font-style: normal; }
span.mathblock {
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 1.2em;
margin-bottom: 1.2em;
text-align: center;
}
span.mathalpha {
font-style: italic;
}
span.synopsis {
font-weight: bold;
margin-top: 0.5em;
display: block;
}
span.definition {
font-weight: bold;
display: block;
}
.codeblock {
margin-left: 1.2em;
line-height: 127%;
}
.outputblock {
margin-left: 1.2em;
line-height: 127%;
}
div.itemdecl {
margin-top: 2ex;
}
code.itemdeclcode {
white-space: pre;
display: block;
}
span.textsuperscript {
vertical-align: super;
font-size: smaller;
line-height: 0;
}
.footnotenum { vertical-align: super; font-size: smaller; line-height: 0; }
.footnote {
font-size: small;
margin-left: 2em;
margin-right: 2em;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
div.minipage {
display: inline-block;
margin-right: 3em;
}
div.numberedTable {
text-align: center;
margin: 2em;
}
div.figure {
text-align: center;
margin: 2em;
}
table {
border: 1px solid black;
border-collapse: collapse;
margin-left: auto;
margin-right: auto;
margin-top: 0.8em;
text-align: left;
hyphens: none; 
}
td, th {
padding-left: 1em;
padding-right: 1em;
vertical-align: top;
}
td.empty {
padding: 0px;
padding-left: 1px;
}
td.left {
text-align: left;
}
td.right {
text-align: right;
}
td.center {
text-align: center;
}
td.justify {
text-align: justify;
}
td.border {
border-left: 1px solid black;
}
tr.rowsep, td.cline {
border-top: 1px solid black;
}
tr.even, tr.odd {
border-bottom: 1px solid black;
}
tr.capsep {
border-top: 3px solid black;
border-top-style: double;
}
tr.header {
border-bottom: 3px solid black;
border-bottom-style: double;
}
th {
border-bottom: 1px solid black;
}
span.centry {
font-weight: bold;
}
div.table {
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
width: 90%;
}
span.indented {
display: block;
margin-left: 2em;
margin-bottom: 1em;
margin-top: 1em;
}
ol.enumeratea { list-style-type: none; background: inherit; }
ol.enumerate { list-style-type: none; background: inherit; }

code.sourceCode > span { display: inline; }
</style>
  <link href="data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAVoJEAN6CRADegkQAWIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wCCRAAAgkQAAIJEAACCRAAsgkQAvoJEAP+CRAD/gkQA/4JEAP+CRADAgkQALoJEAACCRAAAgkQAAP///wD///8AgkQAAIJEABSCRACSgkQA/IJEAP99PQD/dzMA/3czAP99PQD/gkQA/4JEAPyCRACUgkQAFIJEAAD///8A////AHw+AFiBQwDqgkQA/4BBAP9/PxP/uZd6/9rJtf/bybX/upd7/39AFP+AQQD/gkQA/4FDAOqAQgBc////AP///wDKklv4jlEa/3o7AP+PWC//8+3o///////////////////////z7un/kFox/35AAP+GRwD/mVYA+v///wD///8A0Zpk+NmibP+0d0T/8evj///////+/fv/1sKz/9bCs//9/fr//////+/m2/+NRwL/nloA/5xYAPj///8A////ANKaZPjRmGH/5cKh////////////k149/3UwAP91MQD/lmQ//86rhv+USg3/m1YA/5hSAP+bVgD4////AP///wDSmmT4zpJY/+/bx///////8+TV/8mLT/+TVx//gkIA/5lVAP+VTAD/x6B//7aEVv/JpH7/s39J+P///wD///8A0ppk+M6SWP/u2sf///////Pj1f/Nj1T/2KFs/8mOUv+eWhD/lEsA/8aee/+0glT/x6F7/7J8Rvj///8A////ANKaZPjRmGH/48Cf///////+/v7/2qt//82PVP/OkFX/37KJ/86siv+USg7/mVQA/5hRAP+bVgD4////AP///wDSmmT40ppk/9CVXP/69O////////7+/v/x4M//8d/P//7+/f//////9u7n/6tnJf+XUgD/nFgA+P///wD///8A0ppk+NKaZP/RmWL/1qNy//r07///////////////////////+vXw/9akdP/Wnmn/y5FY/6JfFvj///8A////ANKaZFTSmmTo0ppk/9GYYv/Ql1//5cWm//Hg0P/x4ND/5cWm/9GXYP/RmGH/0ppk/9KaZOjVnmpY////AP///wDSmmQA0ppkEtKaZI7SmmT60ppk/9CWX//OkVb/zpFW/9CWX//SmmT/0ppk/NKaZJDSmmQS0ppkAP///wD///8A0ppkANKaZADSmmQA0ppkKtKaZLrSmmT/0ppk/9KaZP/SmmT/0ppkvNKaZCrSmmQA0ppkANKaZAD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkUtKaZNzSmmTc0ppkVNKaZADSmmQA0ppkANKaZADSmmQA////AP5/AAD4HwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAMADAADgBwAA+B8AAP5/AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wCCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAAyCRACMgkQA6oJEAOqCRACQgkQAEIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wD///8A////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRABigkQA5oJEAP+CRAD/gkQA/4JEAP+CRADqgkQAZoJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAAD///8A////AP///wD///8AgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAA4gkQAwoJEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQAxIJEADyCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAP///wD///8A////AP///wCCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAWgkQAmIJEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAJyCRAAYgkQAAIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wD///8A////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAdIJEAPCCRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAPSCRAB4gkQAAIJEAACCRAAAgkQAAIJEAAD///8A////AP///wD///8AgkQAAIJEAACCRAAAgkQASoJEANKCRAD/gkQA/4JEAP+CRAD/g0YA/39AAP9zLgD/bSQA/2shAP9rIQD/bSQA/3MuAP9/PwD/g0YA/4JEAP+CRAD/gkQA/4JEAP+CRADUgkQAToJEAACCRAAAgkQAAP///wD///8A////AP///wB+PwAAgkUAIoJEAKiCRAD/gkQA/4JEAP+CRAD/hEcA/4BBAP9sIwD/dTAA/5RfKv+viF7/vp56/76ee/+wiF7/lWAr/3YxAP9sIwD/f0AA/4RHAP+CRAD/gkQA/4JEAP+CRAD/gkQArIJEACaBQwAA////AP///wD///8A////AIBCAEBzNAD6f0EA/4NFAP+CRAD/gkQA/4VIAP92MwD/bSUA/6N1Tv/ezsL/////////////////////////////////38/D/6V3Uv9uJgD/dTEA/4VJAP+CRAD/gkQA/4JEAP+BQwD/fUAA/4FDAEj///8A////AP///wD///8AzJRd5qBlKf91NgD/dDUA/4JEAP+FSQD/cy4A/3YyAP/PuKP//////////////////////////////////////////////////////9K7qP94NQD/ciwA/4VJAP+CRAD/fkEA/35BAP+LSwD/mlYA6v///wD///8A////AP///wDdpnL/4qx3/8KJUv+PUhf/cTMA/3AsAP90LgD/4dK+/////////////////////////////////////////////////////////////////+TYxf91MAD/dTIA/31CAP+GRwD/llQA/6FcAP+gWwD8////AP///wD///8A////ANGZY/LSm2X/4ap3/92mcP+wdT3/byQA/8mwj////////////////////////////////////////////////////////////////////////////+LYxv9zLgP/jUoA/59bAP+hXAD/nFgA/5xYAPL///8A////AP///wD///8A0ppk8tKaZP/RmWL/1p9q/9ubXv/XqXj////////////////////////////7+fD/vZyG/6BxS/+gcUr/vJuE//r37f//////////////////////3MOr/5dQBf+dVQD/nVkA/5xYAP+cWAD/nFgA8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/SmWP/yohJ//jo2P//////////////////////4NTG/4JDFf9lGAD/bSQA/20kAP9kGAD/fz8S/+Xb0f//////5NG9/6txN/+LOgD/m1QA/51aAP+cWAD/m1cA/5xYAP+cWADy////AP///wD///8A////ANKaZPLSmmT/0ppk/8+TWf/Unmv//v37//////////////////////+TWRr/VwsA/35AAP+ERgD/g0UA/4JGAP9lHgD/kFga/8KXX/+TRwD/jT4A/49CAP+VTQD/n10A/5xYAP+OQQD/lk4A/55cAPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/y4tO/92yiP//////////////////////8NnE/8eCQP+rcTT/ez0A/3IyAP98PgD/gEMA/5FSAP+USwD/jj8A/5lUAP+JNwD/yqV2/694Mf+HNQD/jkAA/82rf/+laBj/jT4A8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/LiUr/4byY///////////////////////gupX/0I5P/+Wuev/Lklz/l1sj/308AP+QSwD/ol0A/59aAP+aVQD/k0oA/8yoh///////+fXv/6pwO//Lp3v///////Pr4f+oay7y////AP///wD///8A////ANKaZPLSmmT/0ppk/8uJSv/hvJj//////////////////////+G7l//Jhkb/0ppk/96nc//fqXX/x4xO/6dkFP+QSQD/llEA/5xXAP+USgD/yaOA///////38uv/qG05/8ijdv//////8efb/6ZpLPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/zIxO/9yxh///////////////////////7dbA/8iEQf/Sm2X/0Zlj/9ScZv/eqHf/2KJv/7yAQf+XTgD/iToA/5lSAP+JNgD/yKFv/611LP+HNQD/jT8A/8qmeP+kZRT/jT4A8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/Pk1n/1J5q//78+//////////////////+/fv/1aFv/8iEQv/Tm2b/0ppl/9GZY//Wn2z/1pZc/9eldf/Bl2b/kUcA/4w9AP+OQAD/lUwA/59eAP+cWQD/jT8A/5ZOAP+eXADy////AP///wD///8A////ANKaZPLSmmT/0ppk/9KZY//KiEn/8d/P///////////////////////47+f/05tm/8iCP//KiEj/yohJ/8eCP//RmGH//vfy///////n1sP/rXQ7/4k4AP+TTAD/nVoA/5xYAP+cVwD/nFgA/5xYAPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/0ptl/8uLTf/aq37////////////////////////////+/fz/6c2y/961jv/etY7/6Myx//78+v//////////////////////3MWv/5xXD/+ORAD/mFQA/51ZAP+cWAD/nFgA8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/SmmT/0ppk/8mFRP/s1b//////////////////////////////////////////////////////////////////////////////+PD/0JFU/7NzMv+WUQD/kUsA/5tXAP+dWQDy////AP///wD///8A////ANKaZP/SmmT/0ppk/9KaZP/Sm2X/z5NZ/8yMT//z5NX/////////////////////////////////////////////////////////////////9Ofa/8yNUP/UmGH/36p5/8yTWv+qaSD/kksA/5ROAPz///8A////AP///wD///8A0ppk5NKaZP/SmmT/0ppk/9KaZP/TnGf/zY9T/82OUv/t1sD//////////////////////////////////////////////////////+7Yw//OkFX/zI5R/9OcZ//SmmP/26V0/9ymdf/BhUf/ol8R6P///wD///8A////AP///wDSmmQ80ppk9tKaZP/SmmT/0ppk/9KaZP/TnGj/zpFW/8qJSv/dson/8uHS//////////////////////////////////Lj0//etIv/y4lL/86QVf/TnGj/0ppk/9KaZP/RmWP/05xn/9ymdfjUnWdC////AP///wD///8A////ANKaZADSmmQc0ppkotKaZP/SmmT/0ppk/9KaZP/Tm2b/0Zli/8qJSf/NjlH/16Z3/+G8mP/myKr/5siq/+G8mP/Xp3f/zY5S/8qISf/RmGH/05tm/9KaZP/SmmT/0ppk/9KaZP/SmmSm0pljINWdaQD///8A////AP///wD///8A0ppkANKaZADSmmQA0ppkQtKaZMrSmmT/0ppk/9KaZP/SmmT/0ptl/9GYYf/Nj1P/y4lL/8qISP/KiEj/y4lK/82PU//RmGH/0ptl/9KaZP/SmmT/0ppk/9KaZP/SmmTO0ppkRtKaZADSmmQA0ppkAP///wD///8A////AP///wDSmmQA0ppkANKaZADSmmQA0ppkANKaZGzSmmTu0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmTw0ppkcNKaZADSmmQA0ppkANKaZADSmmQA////AP///wD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZBLSmmSQ0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppklNKaZBTSmmQA0ppkANKaZADSmmQA0ppkANKaZAD///8A////AP///wD///8A0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQy0ppkutKaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppkvtKaZDbSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkAP///wD///8A////AP///wDSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkXNKaZODSmmT/0ppk/9KaZP/SmmT/0ppk5NKaZGDSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA////AP///wD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkBtKaZIbSmmTo0ppk6tKaZIrSmmQK0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZAD///8A////AP/8P///+B///+AH//+AAf//AAD//AAAP/AAAA/gAAAHwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAfwAAAP/AAAP/8AAP//gAH//+AH///4H////D//" rel="icon" />
  
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->
</head>
<body>
<div class="wrapper">
<header id="title-block-header">
<h1 class="title" style="text-align:center">Unicode in the Library, Part
1: UTF Transcoding</h1>
<table style="border:none;float:right">
  <tr>
    <td>Document #:</td>
    <td>P2728R7</td>
  </tr>
  <tr>
    <td>Date:</td>
    <td>2024-10-06</td>
  </tr>
  <tr>
    <td style="vertical-align:top">Project:</td>
    <td>Programming Language C++</td>
  </tr>
  <tr>
    <td style="vertical-align:top">Audience:</td>
    <td>
      SG-16 Unicode<br>
      SG-9 Ranges<br>
      LEWG<br>
    </td>
  </tr>
  <tr>
    <td style="vertical-align:top">Reply-to:</td>
    <td>
      Eddie Nolan<br>&lt;<a href="mailto:eddiejnolan@gmail.com" class="email">eddiejnolan@gmail.com</a>&gt;<br>
    </td>
  </tr>
</table>
</header>
<div style="clear:both">
<div id="TOC" role="doc-toc">
<h1 id="toctitle">Contents</h1>
<ul>
<li><a href="#changelog" id="toc-changelog"><span class="toc-section-number">1</span> Changelog<span></span></a>
<ul>
<li><a href="#changes-since-r0" id="toc-changes-since-r0"><span class="toc-section-number">1.1</span> Changes since
R0<span></span></a></li>
<li><a href="#changes-since-r1" id="toc-changes-since-r1"><span class="toc-section-number">1.2</span> Changes since
R1<span></span></a></li>
<li><a href="#changes-since-r2" id="toc-changes-since-r2"><span class="toc-section-number">1.3</span> Changes since
R2<span></span></a></li>
<li><a href="#changes-since-r3" id="toc-changes-since-r3"><span class="toc-section-number">1.4</span> Changes since
R3<span></span></a></li>
<li><a href="#changes-since-r4" id="toc-changes-since-r4"><span class="toc-section-number">1.5</span> Changes since
R4<span></span></a></li>
<li><a href="#changes-since-r5" id="toc-changes-since-r5"><span class="toc-section-number">1.6</span> Changes since
R5<span></span></a></li>
<li><a href="#changes-since-r6" id="toc-changes-since-r6"><span class="toc-section-number">1.7</span> Changes since
R6<span></span></a></li>
</ul></li>
<li><a href="#motivation" id="toc-motivation"><span class="toc-section-number">2</span> Motivation<span></span></a></li>
<li><a href="#the-shortest-unicode-primer-imaginable" id="toc-the-shortest-unicode-primer-imaginable"><span class="toc-section-number">3</span> The shortest Unicode primer
imaginable<span></span></a></li>
<li><a href="#basic-examples" id="toc-basic-examples"><span class="toc-section-number">4</span> Basic examples<span></span></a>
<ul>
<li><a href="#transcoding-a-utf-8-string-literal-to-a-stdu32string" id="toc-transcoding-a-utf-8-string-literal-to-a-stdu32string"><span class="toc-section-number">4.1</span> Transcoding a UTF-8 string literal
to a <code class="sourceCode cpp">std<span class="op">::</span>u32string</code><span></span></a></li>
<li><a href="#sanitizing-potentially-invalid-unicode" id="toc-sanitizing-potentially-invalid-unicode"><span class="toc-section-number">4.2</span> Sanitizing potentially invalid
Unicode<span></span></a></li>
<li><a href="#returning-the-final-non-ascii-code-point-in-a-string-transcoding-backwards-lazily" id="toc-returning-the-final-non-ascii-code-point-in-a-string-transcoding-backwards-lazily"><span class="toc-section-number">4.3</span> Returning the final non-ASCII code
point in a string, transcoding backwards lazily:<span></span></a></li>
<li><a href="#transcoding-strings-and-throwing-a-descriptive-exception-on-invalid-utf" id="toc-transcoding-strings-and-throwing-a-descriptive-exception-on-invalid-utf"><span class="toc-section-number">4.4</span> Transcoding strings and throwing a
descriptive exception on invalid UTF<span></span></a></li>
<li><a href="#adapting-a-range-of-non-character-type-values" id="toc-adapting-a-range-of-non-character-type-values"><span class="toc-section-number">4.5</span> Adapting a range of
non-character-type values<span></span></a></li>
</ul></li>
<li><a href="#proposed-design" id="toc-proposed-design"><span class="toc-section-number">5</span> Proposed design<span></span></a>
<ul>
<li><a href="#dependencies" id="toc-dependencies"><span class="toc-section-number">5.1</span> Dependencies<span></span></a></li>
<li><a href="#discussion-of-whether-transcoding-views-should-accept-ranges-of-char-and-wchar_t" id="toc-discussion-of-whether-transcoding-views-should-accept-ranges-of-char-and-wchar_t"><span class="toc-section-number">5.2</span> Discussion of whether transcoding
views should accept ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code><span></span></a></li>
<li><a href="#error-handling-mechanism" id="toc-error-handling-mechanism"><span class="toc-section-number">5.3</span> Error handling
mechanism<span></span></a>
<ul>
<li><a href="#why-stdexpectedvoid-e" id="toc-why-stdexpectedvoid-e"><span class="toc-section-number">5.3.1</span> Why <code class="sourceCode cpp">std<span class="op">::</span>expected<span class="op">&lt;</span><span class="dt">void</span>, E<span class="op">&gt;</span></code>?<span></span></a></li>
<li><a href="#existing-practice" id="toc-existing-practice"><span class="toc-section-number">5.3.2</span> Existing
practice<span></span></a></li>
<li><a href="#stductranscoding_error-enumerators" id="toc-stductranscoding_error-enumerators"><span class="toc-section-number">5.3.3</span> <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>transcoding_error</code>
enumerators<span></span></a></li>
<li><a href="#examples" id="toc-examples"><span class="toc-section-number">5.3.4</span> Examples<span></span></a></li>
</ul></li>
<li><a href="#erroneous-behavior" id="toc-erroneous-behavior"><span class="toc-section-number">5.4</span> Erroneous
Behavior<span></span></a></li>
<li><a href="#optimization-for-transcoding-views-wrapping-other-transcoding-views" id="toc-optimization-for-transcoding-views-wrapping-other-transcoding-views"><span class="toc-section-number">5.5</span> Optimization for transcoding views
wrapping other transcoding views<span></span></a></li>
<li><a href="#other-design-notes" id="toc-other-design-notes"><span class="toc-section-number">5.6</span> Other design
notes<span></span></a></li>
<li><a href="#null-terminated-sequence-sentinel-null_sentinel-and-associated-cpo-null_term" id="toc-null-terminated-sequence-sentinel-null_sentinel-and-associated-cpo-null_term"><span class="toc-section-number">5.7</span> Null-terminated sequence sentinel
<code class="sourceCode cpp">null_sentinel</code> and associated CPO
<code class="sourceCode cpp">null_term</code><span></span></a></li>
<li><a href="#exposition-only-concepts-and-traits" id="toc-exposition-only-concepts-and-traits"><span class="toc-section-number">5.8</span> Exposition-only concepts and
traits<span></span></a></li>
<li><a href="#transcoding-views" id="toc-transcoding-views"><span class="toc-section-number">5.9</span> Transcoding
views<span></span></a></li>
<li><a href="#add-code-unit-views-and-adaptors" id="toc-add-code-unit-views-and-adaptors"><span class="toc-section-number">5.10</span> Add code unit views and
adaptors<span></span></a></li>
<li><a href="#why-there-are-three-to_utfn_views-views-plus-utf_view-and-three-as_charn_t_views" id="toc-why-there-are-three-to_utfn_views-views-plus-utf_view-and-three-as_charn_t_views"><span class="toc-section-number">5.11</span> Why there are three
<code class="sourceCode cpp">to_utfN_view</code>s views plus
<code class="sourceCode cpp">utf_view</code>, and three
<code class="sourceCode cpp">as_charN_t_view</code>s<span></span></a></li>
<li><a href="#why-as_charn_t_view-is-not-implemented-in-terms-of-transform_view" id="toc-why-as_charn_t_view-is-not-implemented-in-terms-of-transform_view"><span class="toc-section-number">5.12</span> Why
<code class="sourceCode cpp">as_charN_t_view</code> is not implemented
in terms of
<code class="sourceCode cpp">transform_view</code><span></span></a></li>
<li><a href="#why-utf_view-always-transcodes-even-in-utf-n-to-utf-n-cases" id="toc-why-utf_view-always-transcodes-even-in-utf-n-to-utf-n-cases"><span class="toc-section-number">5.13</span> Why
<code class="sourceCode cpp">utf_view</code> always transcodes, even in
UTF-N to UTF-N cases<span></span></a></li>
<li><a href="#add-a-feature-test-macro" id="toc-add-a-feature-test-macro"><span class="toc-section-number">5.14</span> Add a feature test
macro<span></span></a></li>
<li><a href="#relevant-pollsminutes" id="toc-relevant-pollsminutes"><span class="toc-section-number">5.15</span> Relevant
Polls/Minutes<span></span></a>
<ul>
<li><a href="#sg16-review-of-p2728r7-on-2023-09-13-telecon" id="toc-sg16-review-of-p2728r7-on-2023-09-13-telecon"><span class="toc-section-number">5.15.1</span> SG16 review of P2728R7 on
2023-09-13 (Telecon)<span></span></a></li>
<li><a href="#sg16-review-of-p2728r6-on-2023-08-23-telecon" id="toc-sg16-review-of-p2728r6-on-2023-08-23-telecon"><span class="toc-section-number">5.15.2</span> SG16 review of P2728R6 on
2023-08-23 (Telecon)<span></span></a></li>
<li><a href="#sg9-review-of-d2728r4-on-2023-06-12-during-varna-2023" id="toc-sg9-review-of-d2728r4-on-2023-06-12-during-varna-2023"><span class="toc-section-number">5.15.3</span> SG9 review of
<span>D2728R4</span> on 2023-06-12 during Varna
2023<span></span></a></li>
<li><a href="#sg16-review-of-p2728r3-on-2023-05-10-telecon" id="toc-sg16-review-of-p2728r3-on-2023-05-10-telecon"><span class="toc-section-number">5.15.4</span> SG16 review of P2728R3 on
2023-05-10 (Telecon)<span></span></a></li>
<li><a href="#sg16-review-of-p2728r0-on-2023-04-12-telecon" id="toc-sg16-review-of-p2728r0-on-2023-04-12-telecon"><span class="toc-section-number">5.15.5</span> SG16 review of P2728R0 on
2023-04-12 (Telecon)<span></span></a></li>
<li><a href="#sg16-review-of-p2728r0-on-2023-03-22-telecon" id="toc-sg16-review-of-p2728r0-on-2023-03-22-telecon"><span class="toc-section-number">5.15.6</span> SG16 review of P2728R0 on
2023-03-22 (Telecon)<span></span></a></li>
</ul></li>
</ul></li>
<li><a href="#implementation-experience" id="toc-implementation-experience"><span class="toc-section-number">6</span> Implementation
experience<span></span></a></li>
<li><a href="#appendix-implementing-existing-practice-for-error-handling" id="toc-appendix-implementing-existing-practice-for-error-handling"><span class="toc-section-number">7</span> Appendix: Implementing Existing
Practice for Error Handling<span></span></a>
<ul>
<li><a href="#iconv" id="toc-iconv"><span class="toc-section-number">7.1</span>
<code class="sourceCode cpp">iconv</code><span></span></a></li>
<li><a href="#icu-u_strfromutf8withsub" id="toc-icu-u_strfromutf8withsub"><span class="toc-section-number">7.2</span> ICU
<code class="sourceCode cpp">u_strFromUTF8WithSub</code><span></span></a></li>
<li><a href="#windows-multibytetowidechar" id="toc-windows-multibytetowidechar"><span class="toc-section-number">7.3</span> Windows
<code class="sourceCode cpp">MultiByteToWideChar</code><span></span></a></li>
<li><a href="#python-decode" id="toc-python-decode"><span class="toc-section-number">7.4</span> Python
<code class="sourceCode cpp">decode<span class="op">()</span></code><span></span></a></li>
</ul></li>
<li><a href="#special-thanks" id="toc-special-thanks"><span class="toc-section-number">8</span> Special Thanks<span></span></a></li>
<li><a href="#bibliography" id="toc-bibliography"><span class="toc-section-number">9</span> References<span></span></a></li>
</ul>
</div>
<h1 data-number="1" id="changelog"><span class="header-section-number">1</span> Changelog<a href="#changelog" class="self-link"></a></h1>
<h2 data-number="1.1" id="changes-since-r0"><span class="header-section-number">1.1</span> Changes since R0<a href="#changes-since-r0" class="self-link"></a></h2>
<ul>
<li>When naming code points in interfaces, use
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>.</li>
<li>When naming code units in interfaces, use
<code class="sourceCode cpp">charN_t</code>.</li>
<li>Remove each eager algorithm, leaving in its corresponding view.</li>
<li>Remove all the output iterators.</li>
<li>Change template parameters to
<code class="sourceCode cpp">utfN_view</code> to the types of the
from-range, instead of the types of the transcoding iterators used to
implement the view.</li>
<li>Remove all make-functions.</li>
<li>Replace the misbegotten
<code class="sourceCode cpp">as_utfN<span class="op">()</span></code>
functions with the <code class="sourceCode cpp">as_utfN</code> view
adaptors that should have been there all along.</li>
<li>Add missing
<code class="sourceCode cpp">transcoding_error_handler</code>
concept.</li>
<li>Turn
<code class="sourceCode cpp">unpack_iterator_and_sentinel</code> into a
CPO.</li>
<li>Lower the UTF iterator concepts from bidirectional to input.</li>
</ul>
<h2 data-number="1.2" id="changes-since-r1"><span class="header-section-number">1.2</span> Changes since R1<a href="#changes-since-r1" class="self-link"></a></h2>
<ul>
<li>Reintroduce the transcoding-from-a-buffer example.</li>
<li>Generalize <code class="sourceCode cpp">null_sentinel_t</code> to a
non-Unicode-specific facility.</li>
<li>In utility functions that search for ill-formed encoding, take a
range argument instead of a pair of iterator arguments.</li>
<li>Replace <code class="sourceCode cpp">utf<span class="op">{</span><span class="dv">8</span>,<span class="dv">16</span>,<span class="dv">32</span><span class="op">}</span>_view</code>
with a single <code class="sourceCode cpp">utf_view</code>.</li>
</ul>
<h2 data-number="1.3" id="changes-since-r2"><span class="header-section-number">1.3</span> Changes since R2<a href="#changes-since-r2" class="self-link"></a></h2>
<ul>
<li>Add
<code class="sourceCode cpp"><span class="kw">noexcept</span></code>
where appropriate.</li>
<li>Remove non-essential constants and utility functions, and elaborate
on the usage of the ones that remain.</li>
<li>Note differences from similar elements proposed in <span class="citation" data-cites="P1629R1">[<a href="https://wg21.link/p1629r1" role="doc-biblioref">P1629R1</a>]</span>.</li>
<li>Extend the examples slightly.</li>
<li>Correct an error in the description of the view adaptors’ semantics,
and provide several examples of their use.</li>
</ul>
<h2 data-number="1.4" id="changes-since-r3"><span class="header-section-number">1.4</span> Changes since R3<a href="#changes-since-r3" class="self-link"></a></h2>
<ul>
<li>Changed the definition of the
<code class="sourceCode cpp">code_unit</code> concept, and added
<code class="sourceCode cpp">as_charN_t</code> adaptors.</li>
<li>Removed the utility functions and Unicode-related constants, except
<code class="sourceCode cpp">replacement_character</code>.</li>
<li>Changed the constraint on
<code class="sourceCode cpp">utf_iterator</code> slightly.</li>
<li>Change <code class="sourceCode cpp">null_sentinel_t</code> back to
being Unicode-specific.</li>
</ul>
<h2 data-number="1.5" id="changes-since-r4"><span class="header-section-number">1.5</span> Changes since R4<a href="#changes-since-r4" class="self-link"></a></h2>
<ul>
<li>Replace <code class="sourceCode cpp">unpacking_owning_view</code>
with <code class="sourceCode cpp">unpacking_view</code>, and use it to
do unpacking, rather than sometimes doing the unpacking in the
adaptor.</li>
<li>Ensure
<code class="sourceCode cpp"><span class="kw">const</span></code> and
non-<code class="sourceCode cpp"><span class="kw">const</span></code>
overloads for <code class="sourceCode cpp">begin</code> and
<code class="sourceCode cpp">end</code> in all views.</li>
<li>Move <code class="sourceCode cpp">null_sentinel_t</code> to
<code class="sourceCode cpp">std</code>, remove its
<code class="sourceCode cpp">base</code> member function, and make it
useful for more than just pointers, based on SG-9 guidance.</li>
</ul>
<h2 data-number="1.6" id="changes-since-r5"><span class="header-section-number">1.6</span> Changes since R5<a href="#changes-since-r5" class="self-link"></a></h2>
<ul>
<li>Simplify the complicated constraint on the comparison operator for
<code class="sourceCode cpp">null_sentinel_t</code>.</li>
<li>Introduce <code class="sourceCode cpp">ranges<span class="op">::</span>project_view</code>,
and implement <code class="sourceCode cpp">charN_view</code>s in terms
of that.</li>
<li>Convert the <code class="sourceCode cpp">utfN_view</code>s to
aliases, rather than individual classes.</li>
</ul>
<h2 data-number="1.7" id="changes-since-r6"><span class="header-section-number">1.7</span> Changes since R6<a href="#changes-since-r6" class="self-link"></a></h2>
<ul>
<li>Fix a bug in <code class="sourceCode cpp">null_sentinel_t</code>
causing it not to satisfy
<code class="sourceCode cpp">sentinel_for</code> by changing its <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">==</span></code>
to return
<code class="sourceCode cpp"><span class="dt">bool</span></code>.</li>
<li>Fix a bug in <code class="sourceCode cpp">null_sentinel_t</code>
where it did not support non-copyable input iterators by having
operator== take input iterators by reference.</li>
<li>Rename <code class="sourceCode cpp">as_utfN</code> to
<code class="sourceCode cpp">to_utfN</code> to emphasize that a
conversion is taking place and to contrast with the code unit views,
which remain named <code class="sourceCode cpp">as_charN_t</code>.</li>
<li>Refactor <code class="sourceCode cpp">utf_view</code> into an
exposition-only
<code class="sourceCode cpp"><em>utf-view-impl</em></code> class used as
an implementation detail of separate
<code class="sourceCode cpp">to_utf8_view</code>,
<code class="sourceCode cpp">to_utf16_view</code>, and
<code class="sourceCode cpp">to_utf32_view</code> classes, addressing
broken deduction guides in the previous revision.</li>
<li>Remove <code class="sourceCode cpp">project_view</code> and copy
most of its implementation into separate
<code class="sourceCode cpp">char8_view</code>,
<code class="sourceCode cpp">char16_view</code>, and
<code class="sourceCode cpp">char32_view</code> classes, addressing
broken deduction guides in the previous revision.</li>
<li>Change <code class="sourceCode cpp">utf_iterator</code> to an
exposition-only member class of
<code class="sourceCode cpp"><em>utf-view-impl</em></code>.</li>
<li>Eliminate iterator unpacking mechanism and replace it with an
alternative solution to the problem of transcoding ranges wrapping other
transcoding ranges. This simplifies the API at the expense of removing
the transcoding iterator’s
<code class="sourceCode cpp">begin<span class="op">()</span></code> and
<code class="sourceCode cpp">end<span class="op">()</span></code> member
functions and losing the ability to implement unpacking for user-defined
UTF iterators.</li>
<li>Remove <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>format</code>.</li>
<li>Make all concepts exposition-only.</li>
<li>Remove <code class="sourceCode cpp">transcoding_error_handler</code>
mechanism.</li>
<li>Introduce new error handling mechanism based on a new
<code class="sourceCode cpp">transcoding_error</code> enumeration which
is returned by an
<code class="sourceCode cpp">success<span class="op">()</span></code>
member function of the transcoding view’s iterator.</li>
<li>Remove ability to pass pointers to range adaptor closure objects,
which violated the restriction that only ranges may be passed to range
adaptor closure objects.</li>
<li>Remove
<code class="sourceCode cpp">std<span class="op">::</span>format</code>
and
<code class="sourceCode cpp">std<span class="op">::</span>ostream</code>
functionality. It doesn’t make sense for this mechanism to be the only
way we have to format/output
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>; we
can revisit this functionality when we have already figured out how to
support e.g. <code class="sourceCode cpp">std<span class="op">::</span>u8string</code>.</li>
<li>Replace code examples with new ones reflecting API changes.</li>
<li>Provide a reference implementation.</li>
</ul>
<h1 data-number="2" id="motivation"><span class="header-section-number">2</span> Motivation<a href="#motivation" class="self-link"></a></h1>
<p>Unicode is important to many, many users in everyday software. It is
not exotic or weird. Well, it’s weird, but it’s not weird to see it
used. C and C++ are the only major production languages with essentially
no support for Unicode.</p>
<p>Let’s fix.</p>
<p>To fix, first we start with the most basic representations of strings
in Unicode: UTF. You might get a UTF string from anywhere; on Windows
you often get them from the OS, in UTF-16. In web-adjacent applications,
strings are most commonly in UTF-8. In ASCII-only applications,
everything is in UTF-8, by its definition as a superset of ASCII.</p>
<p>Often, an application needs to switch between UTFs: 8 -&gt; 16, 32
-&gt; 16, etc. In SG-16 we’ve taken to calling such UTF-N -&gt; UTF-M
operations “transcoding”.</p>
<p>This paper provides interfaces to do UTF transcoding based on the
ranges API.</p>
<p>A particular reason for urgency in adding transcoding operations to
the standard library is that the standard library has previously
contained problematic-to-broken UTF transcoding facilities in the form
of
<code class="sourceCode cpp">std<span class="op">::</span>codecvt</code>
facets which are currently slated for removal without replacement as
<span class="citation" data-cites="P2871R3">[<a href="https://wg21.link/p2871r3" role="doc-biblioref">P2871R3</a>]</span> and <span class="citation" data-cites="P2873R2">[<a href="https://wg21.link/p2873r2" role="doc-biblioref">P2873R2</a>]</span> make their way through the
committee. GitHub searches show that these facilities are widely used;
the functionality contained in this paper can serve as a proper
replacement.</p>
<h1 data-number="3" id="the-shortest-unicode-primer-imaginable"><span class="header-section-number">3</span> The shortest Unicode primer
imaginable<a href="#the-shortest-unicode-primer-imaginable" class="self-link"></a></h1>
<p>There are multiple encoding types defined in Unicode: UTF-8, UTF-16,
and UTF-32.</p>
<p>A <em>code unit</em> is the lowest-level datum-type in your Unicode
data. Examples are a
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> in
UTF-8 and a
<code class="sourceCode cpp"><span class="dt">char32_t</span></code> in
UTF-32.</p>
<p>A <em>code point</em> is a 32-bit integral value that represents a
single Unicode value. Examples are U+0041 “A” “LATIN CAPITAL LETTER A”
and U+0308 “¨” “COMBINING DIAERESIS”.</p>
<p>A code point may be consist of multiple code units. For instance, 3
UTF-8 code units in sequence may encode a particular code point.</p>
<h1 data-number="4" id="basic-examples"><span class="header-section-number">4</span> Basic examples<a href="#basic-examples" class="self-link"></a></h1>
<h2 data-number="4.1" id="transcoding-a-utf-8-string-literal-to-a-stdu32string"><span class="header-section-number">4.1</span> Transcoding a UTF-8 string
literal to a <code class="sourceCode cpp">std<span class="op">::</span>u32string</code><a href="#transcoding-a-utf-8-string-literal-to-a-stdu32string" class="self-link"></a></h2>
<div class="sourceCode" id="cb1"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>u32string hello_world <span class="op">=</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>  <span class="st">u8&quot;こんにちは世界&quot;</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf32 <span class="op">|</span> std<span class="op">::</span>ranges<span class="op">::</span>to<span class="op">&lt;</span>std<span class="op">::</span>u32string<span class="op">&gt;()</span>;</span></code></pre></div>
<h2 data-number="4.2" id="sanitizing-potentially-invalid-unicode"><span class="header-section-number">4.2</span> Sanitizing potentially invalid
Unicode<a href="#sanitizing-potentially-invalid-unicode" class="self-link"></a></h2>
<p>Here, we sanitize potentially invalid Unicode C strings by replacing
invalid code units with replacement characters according to Unicode’s
recommended Substitution of Maximal Subparts:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">typename</span> CharT<span class="op">&gt;</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>basic_string<span class="op">&lt;</span>CharT<span class="op">&gt;</span> sanitize<span class="op">(</span>CharT <span class="kw">const</span><span class="op">*</span> str<span class="op">)</span> <span class="op">{</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> std<span class="op">::</span>uc<span class="op">::</span>null_term<span class="op">(</span>str<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf<span class="op">&lt;</span>CharT<span class="op">&gt;</span> <span class="op">|</span> std<span class="op">::</span>ranges<span class="op">::</span>to<span class="op">&lt;</span>std<span class="op">::</span>basic_string<span class="op">&lt;</span>CharT<span class="op">&gt;&gt;()</span>;</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="4.3" id="returning-the-final-non-ascii-code-point-in-a-string-transcoding-backwards-lazily"><span class="header-section-number">4.3</span> Returning the final non-ASCII
code point in a string, transcoding backwards lazily:<a href="#returning-the-final-non-ascii-code-point-in-a-string-transcoding-backwards-lazily" class="self-link"></a></h2>
<div class="sourceCode" id="cb3"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>optional<span class="op">&lt;</span><span class="dt">char32_t</span><span class="op">&gt;</span> last_nonascii<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>view <span class="kw">auto</span> str<span class="op">)</span> <span class="op">{</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>  <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> c <span class="op">:</span> str <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf32 <span class="op">|</span> std<span class="op">::</span>views<span class="op">::</span>reverse</span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>                    <span class="op">|</span> std<span class="op">::</span>views<span class="op">::</span>filter<span class="op">([](</span><span class="dt">char32_t</span> c<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> c <span class="op">&gt;</span> <span class="bn">0x7f</span>; <span class="op">})</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a>                    <span class="op">|</span> std<span class="op">::</span>views<span class="op">::</span>take<span class="op">(</span><span class="dv">1</span><span class="op">))</span> <span class="op">{</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> c;</span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> std<span class="op">::</span>nullopt;</span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="4.4" id="transcoding-strings-and-throwing-a-descriptive-exception-on-invalid-utf"><span class="header-section-number">4.4</span> Transcoding strings and
throwing a descriptive exception on invalid UTF<a href="#transcoding-strings-and-throwing-a-descriptive-exception-on-invalid-utf" class="self-link"></a></h2>
<p>(This example assumes the existence of the
<code class="sourceCode cpp">enum_to_string</code> function from <span class="citation" data-cites="P2996R5">[<a href="https://wg21.link/p2996r5" role="doc-biblioref">P2996R5</a>]</span>)</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">typename</span> FromChar, <span class="kw">typename</span> ToChar<span class="op">&gt;</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>basic_string<span class="op">&lt;</span>ToChar<span class="op">&gt;</span> transcode_or_throw<span class="op">(</span>std<span class="op">::</span>basic_string_view<span class="op">&lt;</span>FromChar<span class="op">&gt;</span> input<span class="op">)</span> <span class="op">{</span></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>  std<span class="op">::</span>basic_string<span class="op">&lt;</span>ToChar<span class="op">&gt;</span> result;</span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a>  <span class="kw">auto</span> view <span class="op">=</span> input <span class="op">|</span> to_utf<span class="op">&lt;</span>ToChar<span class="op">&gt;</span>;</span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a>  <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> view<span class="op">.</span>begin<span class="op">()</span>, end <span class="op">=</span> view<span class="op">.</span>end<span class="op">()</span>; it <span class="op">!=</span> end; <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">())</span> <span class="op">{</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a>      result<span class="op">.</span>push_back<span class="op">(*</span>it<span class="op">)</span>;</span>
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a>      <span class="cf">throw</span> std<span class="op">::</span>runtime_error<span class="op">(</span><span class="st">&quot;error at position &quot;</span> <span class="op">+</span></span>
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a>                               std<span class="op">::</span>to_string<span class="op">(</span>it<span class="op">.</span>base<span class="op">()</span> <span class="op">-</span> input<span class="op">.</span>begin<span class="op">())</span> <span class="op">+</span> <span class="st">&quot;: &quot;</span> <span class="op">+</span></span>
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a>                               enum_to_string<span class="op">(</span>it<span class="op">.</span>success<span class="op">().</span>error<span class="op">()))</span>;</span>
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb4-14"><a href="#cb4-14" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> result;</span>
<span id="cb4-15"><a href="#cb4-15" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="4.5" id="adapting-a-range-of-non-character-type-values"><span class="header-section-number">4.5</span> Adapting a range of
non-character-type values<a href="#adapting-a-range-of-non-character-type-values" class="self-link"></a></h2>
<p>Let’s say that we want to take code points that we got from ICU, and
transcode them to UTF-8. The problem is that ICU’s code point type is
<code class="sourceCode cpp"><span class="dt">int</span></code>. Since
<code class="sourceCode cpp"><span class="dt">int</span></code> is not a
character type, it’s not deduced by
<code class="sourceCode cpp">to_utf8</code> to be UTF-32 data. We can
address this by using the <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>as_char32_t</code>
to cast the
<code class="sourceCode cpp"><span class="dt">int</span></code>s to
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>vector<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;</span> input <span class="op">=</span> get_icu_code_points<span class="op">()</span>;</span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="co">// This is ill-formed without the as_char32_t adaptation.</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> input_utf8 <span class="op">=</span></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>  input <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>as_char32_t <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf8 <span class="op">|</span> std<span class="op">::</span>ranges<span class="op">::</span>to<span class="op">&lt;</span>std<span class="op">::</span>u8string<span class="op">&gt;()</span>;</span></code></pre></div>
<h1 data-number="5" id="proposed-design"><span class="header-section-number">5</span> Proposed design<a href="#proposed-design" class="self-link"></a></h1>
<h2 data-number="5.1" id="dependencies"><span class="header-section-number">5.1</span> Dependencies<a href="#dependencies" class="self-link"></a></h2>
<p>This proposal depends on the existence of <span class="citation" data-cites="P2727R4">[<a href="https://wg21.link/p2727r4" role="doc-biblioref">P2727R4</a>]</span> “std::iterator_interface”.</p>
<h2 data-number="5.2" id="discussion-of-whether-transcoding-views-should-accept-ranges-of-char-and-wchar_t"><span class="header-section-number">5.2</span> Discussion of whether
transcoding views should accept ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code><a href="#discussion-of-whether-transcoding-views-should-accept-ranges-of-char-and-wchar_t" class="self-link"></a></h2>
<p>Here are some examples of the differences between having the
transcoding views accept ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code> or
reject them. The <code class="sourceCode cpp">to_utfN</code> and
<code class="sourceCode cpp">as_charN</code> adaptors are discussed
later in this paper.</p>
<p>The <code class="sourceCode cpp">to_utfN</code> adaptors produce
<code class="sourceCode cpp">to_utfN_view</code>s, which do
transcoding.</p>
<p>The <code class="sourceCode cpp">as_charN_t</code> adaptors produce
<code class="sourceCode cpp">as_charN_view</code>s that are each very
similar to a <code class="sourceCode cpp">transform_view</code> that
casts each element of the adapted range to a
<code class="sourceCode cpp">charN_t</code> value. An
<code class="sourceCode cpp">as_charN_view</code> differs from the
equivalent transform in that it may be a borrowed range.</p>
<p>Note the use of the shorthand
“<code class="sourceCode cpp">charN_t</code>” below with
<code class="sourceCode cpp">std<span class="op">::</span>wstring</code>.
That’s there because whether you write
<code class="sourceCode cpp">as_char16_t</code> or
<code class="sourceCode cpp">as_char32_t</code> is
implementation-dependent.</p>
<table>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>Rejecting ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code></strong>
</div></th>
<th><div style="text-align:center">
<strong>Accepting ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code></strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><div>

<div class="sourceCode" id="cb6"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> <span class="kw">namespace</span> std<span class="op">::</span>uc;</span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v1  <span class="op">=</span> <span class="st">u8&quot;text&quot;</span> <span class="op">|</span> to_utf32;  <span class="co">// Ok.</span></span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v2  <span class="op">=</span> <span class="st">u&quot;text&quot;</span>  <span class="op">|</span> to_utf8;   <span class="co">// Ok.</span></span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v3  <span class="op">=</span> <span class="st">U&quot;text&quot;</span>  <span class="op">|</span> to_utf16;  <span class="co">// Ok.</span></span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v4  <span class="op">=</span> std<span class="op">::</span>u8string<span class="op">(</span><span class="st">u8&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf32;  <span class="co">// Ok.</span></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v5  <span class="op">=</span> std<span class="op">::</span>u16string<span class="op">(</span><span class="st">u&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf8;   <span class="co">// Ok.</span></span>
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v6  <span class="op">=</span> std<span class="op">::</span>u32string<span class="op">(</span><span class="st">U&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf16;  <span class="co">// Ok.</span></span>
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v7  <span class="op">=</span> std<span class="op">::</span>string  <span class="op">|</span> to_utf32; <span class="co">// Error; ill-formed.</span></span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v8  <span class="op">=</span> std<span class="op">::</span>wstring <span class="op">|</span> to_utf8;  <span class="co">// Error; ill-formed.</span></span>
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v9  <span class="op">=</span> std<span class="op">::</span>string  <span class="op">|</span> as_char8_t <span class="op">|</span> to_utf32; <span class="co">// Ok.</span></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v10 <span class="op">=</span> std<span class="op">::</span>wstring <span class="op">|</span> as_charN_t <span class="op">|</span> to_utf8;  <span class="co">// Ok.</span></span></code></pre></div>

</div></td>
<td><div>

<div class="sourceCode" id="cb7"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> <span class="kw">namespace</span> std<span class="op">::</span>uc;</span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v1  <span class="op">=</span> <span class="st">u8&quot;text&quot;</span> <span class="op">|</span> to_utf32;  <span class="co">// Ok.</span></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v2  <span class="op">=</span> <span class="st">u&quot;text&quot;</span>  <span class="op">|</span> to_utf8;   <span class="co">// Ok.</span></span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v3  <span class="op">=</span> <span class="st">U&quot;text&quot;</span>  <span class="op">|</span> to_utf16;  <span class="co">// Ok.</span></span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v4  <span class="op">=</span> std<span class="op">::</span>u8string<span class="op">(</span><span class="st">u8&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf32;  <span class="co">// Ok.</span></span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v5  <span class="op">=</span> std<span class="op">::</span>u16string<span class="op">(</span><span class="st">u&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf8;   <span class="co">// Ok.</span></span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v6  <span class="op">=</span> std<span class="op">::</span>u32string<span class="op">(</span><span class="st">U&quot;text&quot;</span><span class="op">)</span> <span class="op">|</span> to_utf16;  <span class="co">// Ok.</span></span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v7  <span class="op">=</span> std<span class="op">::</span>string  <span class="op">|</span> to_utf32; <span class="co">// Ok.</span></span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v8  <span class="op">=</span> std<span class="op">::</span>wstring <span class="op">|</span> to_utf8;  <span class="co">// Ok.</span></span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v9  <span class="op">=</span> std<span class="op">::</span>string  <span class="op">|</span> as_char8_t <span class="op">|</span> to_utf32; <span class="co">// Ok.</span></span>
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> v10 <span class="op">=</span> std<span class="op">::</span>wstring <span class="op">|</span> as_charN_t <span class="op">|</span> to_utf8;  <span class="co">// Ok.</span></span></code></pre></div>

</div></td>
</tr>
</tbody>
</table>
<p>In short, rejecting
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code>
forces you to write
“<code class="sourceCode cpp"><span class="op">|</span> as_char8_t</code>”
everywhere you want to use a
<code class="sourceCode cpp">std<span class="op">::</span>string</code>
with the interfaces proposed in this paper.</p>
<p>SG-16 has previously expressed strong support for rejecting
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code>, as
can be observed in the polling history section.</p>
<p>The feeling in SG-16 was that the
<code class="sourceCode cpp">charN_t</code> types are designed to
represent UTF encodings, and
<code class="sourceCode cpp"><span class="dt">char</span></code> is not.
A <code class="sourceCode cpp"><span class="dt">char</span> <span class="kw">const</span> <span class="op">*</span></code>
string could be in any one of dozens (hundreds?) of encodings. The
addition of
“<code class="sourceCode cpp"><span class="op">|</span> as_char8_t</code>”
to adapt ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> is
meant to act as a lexical indicator of user intent.</p>
<p>The authors believe this decision is a mistake. Our argument for
accepting ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code> is
as follows.</p>
<p>First, note that none of the
<code class="sourceCode cpp">charN_t</code> types imposes any invariant
that a range of its contents contains valid Unicode. As a result, they
cannot enforce preconditions for APIs that require valid Unicode input
at the level of the type system.</p>
<p>Therefore, we claim that the main use case of the
<code class="sourceCode cpp">charN_t</code> types in APIs is to
facilitate a coding style that allows APIs to advertise to users whether
they expect Unicode-encoded strings (whether with a wide or a narrow
contract).</p>
<p>For example, users of this coding style may write an API like the
following:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co">// Expect input to be in Windows-1252</span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span><span class="dt">size_t</span> word_count<span class="op">(</span>std<span class="op">::</span>string_view<span class="op">)</span>;</span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a><span class="co">// Expect input to be in Unicode</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span><span class="dt">size_t</span> word_count<span class="op">(</span>std<span class="op">::</span>u8string_view<span class="op">)</span>;</span></code></pre></div>
<p>If <code class="sourceCode cpp">to_utfN</code> rejects ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code>, it
would bring this standard library API into alignment with this
style.</p>
<p>However, there are a number of reasons why we consider this approach
undesirable for our use case.</p>
<p>First of all, for any large C++ API surface dealing with Unicode that
was not designed very recently, there will be APIs that expect UTF-8 in
the form of
<code class="sourceCode cpp">std<span class="op">::</span>string</code>
parameters. This means that the semantic value of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> is
one-sided; in such an ecosystem, while the presence of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>
certainly indicates that the API expects UTF-8, the absence of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> may
still indicate a
<code class="sourceCode cpp"><span class="dt">char</span></code>-based
API that also expects UTF-8.</p>
<p>Furthermore, because
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> is
such a recent addition to the standard, and because it’s so poorly
supported by other standard library facilities such as <code class="sourceCode cpp"><span class="op">&lt;</span>iostream<span class="op">&gt;</span></code>
and
<code class="sourceCode cpp">std<span class="op">::</span>format</code>,
its penetration has been extremely low; a Github Code Search showed
15.3M references to
<code class="sourceCode cpp">std<span class="op">::</span>string</code>
and 6.7k references to <code class="sourceCode cpp">std<span class="op">::</span>u8string</code>.</p>
<p>Finally, due to the particular history of implementation choices by
compiler writers, the proportion of C++ users who have the ability to
properly benefit from the use of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> is
unfortunately smaller than intended.</p>
<p>For the vast majority of users of Unix-like operating systems, both
the basic literal encoding and the execution encoding are UTF-8, and so
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> is
mostly redundant, since it has approximately the same meaning as
<code class="sourceCode cpp"><span class="dt">char</span></code>. This
leaves Windows developers as the remaining large pool of users who could
potentially take advantage of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>.</p>
<p>The issue is that Windows users are divided into two categories:
those who use MSVC’s
<code class="sourceCode cpp"><span class="op">/</span>utf8</code>
compiler flag, and those who do not.</p>
<p>Users of
<code class="sourceCode cpp"><span class="op">/</span>utf8</code> are in
the future:
<code class="sourceCode cpp"><span class="op">/</span>utf8</code>
switches the basic literal encoding and execution encoding to UTF-8.
These users have less need for
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>
because their
<code class="sourceCode cpp"><span class="dt">char</span></code>s are
UTF-8.</p>
<p>Non-users of
<code class="sourceCode cpp"><span class="op">/</span>utf8</code> are
dealing with non-Unicode basic literal and execution encodings, so
theoretically they’re the target audience for
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>. But
unfortunately, without the
<code class="sourceCode cpp"><span class="op">/</span>utf8</code> flag,
MSVC breaks compliance with the standard, in that it violates the
requirement that <code class="sourceCode cpp"><span class="st">u8&quot;&quot;</span></code>
string literals are encoded in Unicode. Attempting to create such a
string literal on MSVC without specifying
<code class="sourceCode cpp"><span class="op">/</span>utf8</code>
results in Windows-1252 code units inside of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>
bytes. For these users,
<code class="sourceCode cpp"><span class="dt">char8_t</span></code> is
theoretically useful but broken in practice.</p>
<p>Rejecting
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code> for
UTF transcoding will therefore have limited benefits. On the other hand,
rejecting these types will send users over to Stack Overflow to discover
they need to copy boilerplate called <code class="sourceCode cpp"><span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>as_char8_t</code>
for reasons that will seem academic to most of them.</p>
<h2 data-number="5.3" id="error-handling-mechanism"><span class="header-section-number">5.3</span> Error handling mechanism<a href="#error-handling-mechanism" class="self-link"></a></h2>
<p>When invalid code units are encountered, the UTF transcoding views
replace those code units with U+FFFD replacement characters according to
the Unicode standard’s recommended “Substitution of Maximal Subparts”
algorithm.</p>
<p>However, users of the transcoding views may want to know when invalid
code units have been encountered, and to implement custom behaviors if
this is the case. Simply checking whether the transcoded code points
contain U+FFFD replacement characters is not sufficient because these
characters are an in-band signal that can also appear in valid UTF.</p>
<p>What’s called for is a basis operation with which arbitrary error
handling approaches may be implemented.</p>
<p>The UTF transcoding views in this paper provide such a basis
operation by adding an
<code class="sourceCode cpp">success<span class="op">()</span></code>
member function to the iterator of the transcoding view, which informs
users whether the current code point is a U+FFFD that was inserted in
response to an invalid code unit sequence. The
<code class="sourceCode cpp">success<span class="op">()</span></code>
member function returns a <code class="sourceCode cpp">std<span class="op">::</span>expected<span class="op">&lt;</span><span class="dt">void</span>, std<span class="op">::</span>uc<span class="op">::</span>transcoding_error<span class="op">&gt;</span></code>,
where <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>transcoding_error</code>
is a new enum class containing enumerators for every category of
transcoding error.</p>
<p>Users who choose not to implement error handling will simply sanitize
any invalid code unit sequences using U+FFFD replacement. Users who want
to implement error handling can implement any of the following
approaches, either by wrapping the iterator or by iterating with a
traditional for loop:</p>
<ul>
<li>Throwing an exception</li>
<li>Using an character other than U+FFFD for replacing invalid code
units</li>
<li>Dropping illegal code units</li>
<li>Producing an error log message</li>
<li>Collecting statistics on transcoding errors</li>
<li>Implementing a custom transcoding view whose
<code class="sourceCode cpp">value_type</code> is <code class="sourceCode cpp">std<span class="op">::</span>expected<span class="op">&lt;</span>charN_t, std<span class="op">::</span>uc<span class="op">::</span>transcoding_error<span class="op">&gt;</span></code></li>
</ul>
<h3 data-number="5.3.1" id="why-stdexpectedvoid-e"><span class="header-section-number">5.3.1</span> Why <code class="sourceCode cpp">std<span class="op">::</span>expected<span class="op">&lt;</span><span class="dt">void</span>, E<span class="op">&gt;</span></code>?<a href="#why-stdexpectedvoid-e" class="self-link"></a></h3>
<p>The main alternative to consider here would be to specify that
default-constructed <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>transcoding_error</code>
values represent success, or add a
<code class="sourceCode cpp">success</code> enumerator whose value is
zero. There is precedent for doing this in the standard in the error
handling approach of <code class="sourceCode cpp">std<span class="op">::</span>from_chars</code>,
which returns a <code class="sourceCode cpp">std<span class="op">::</span>from_chars_result</code>
containing a
<code class="sourceCode cpp">std<span class="op">::</span>errc</code>
that has an <code class="sourceCode cpp"><span class="kw">operator</span> <span class="dt">bool</span><span class="op">()</span></code>
that returns
<code class="sourceCode cpp"><span class="kw">true</span></code> if the
<code class="sourceCode cpp">std<span class="op">::</span>errc</code> is
default-constructed.</p>
<p>However, that design decision was made before <code class="sourceCode cpp">std<span class="op">::</span>expected</code> was
added to the standard library in C++23. Now that we have this facility,
we should take the opportunity to use the type system to structurally
separate the error cases from the success cases, instead of lumping them
all together in the same type as in the case of
<code class="sourceCode cpp">std<span class="op">::</span>errc</code>.</p>
<h3 data-number="5.3.2" id="existing-practice"><span class="header-section-number">5.3.2</span> Existing practice<a href="#existing-practice" class="self-link"></a></h3>
<ul>
<li><a href="https://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.17/iconv.3.html"><code class="sourceCode cpp">iconv<span class="op">()</span></code></a>
<ul>
<li>Uses two possible <code class="sourceCode cpp">errno</code> error
codes:
<ul>
<li><code class="sourceCode cpp">EINVAL</code> (the initial subsequence
of a valid sequence was at the end of the input sequence)</li>
<li><code class="sourceCode cpp">EILSEQ</code> (any other invalid
sequence in the input)</li>
</ul></li>
<li>Uses an out-parameter to point to the beginning of the invalid
sequence</li>
</ul></li>
<li>ICU
<ul>
<li><a href="https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ustring_8h.html#a8fd0b27d2f87358cb5730ce6952af9a6"><code class="sourceCode cpp">u_strFromUTF8WithSub<span class="op">()</span></code></a>
<ul>
<li>Either replaces invalid input sequences with a user-provided
<code class="sourceCode cpp"><span class="dt">int32_t</span></code>
(documentation recommends U+FFFD) or sets an error code using an
out-param</li>
</ul></li>
</ul></li>
<li><a href="https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar">MultiByteToWideChar()</a>
<ul>
<li>User specifies a flag to decide whether to fail on invalid
input</li>
<li>If set, any invalid input results in the error code
<code class="sourceCode cpp">ERROR_NO_UNICODE_TRANSLATION</code></li>
<li>If unset, uses U+FFFD replacement (unless pre-Vista in which case
illegal sequences are dropped)</li>
</ul></li>
<li>Python <a href="https://docs.python.org/3/howto/unicode.html"><code class="sourceCode cpp">decode<span class="op">()</span></code></a>
<ul>
<li><p>Invalid sequences result in exceptions containing verbose
descriptions of the offending sequence</p></li>
<li><p>Example:</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>&gt;&gt;&gt; b&#39;\x80abc&#39;.decode(&quot;utf-8&quot;, &quot;strict&quot;)</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a>Traceback (most recent call last):</span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a>    ...</span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a>UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0x80 in position 0:</span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>  invalid start byte</span></code></pre></div></li>
<li><p>List of error messages:</p>
<ul>
<li><code class="sourceCode cpp">unexpected end of data</code></li>
<li><code class="sourceCode cpp">invalid start byte</code></li>
<li><code class="sourceCode cpp">invalid continuation byte</code></li>
<li><code class="sourceCode cpp">code point in surrogate code point range<span class="op">(</span><span class="bn">0xd800</span>, <span class="bn">0xe000</span><span class="op">)</span></code></li>
<li><code class="sourceCode cpp">truncated data</code></li>
<li><code class="sourceCode cpp">code point <span class="kw">not</span> in range<span class="op">(</span><span class="bn">0x110000</span><span class="op">)</span></code></li>
<li><code class="sourceCode cpp">illegal encoding</code></li>
<li><code class="sourceCode cpp">illegal UTF<span class="op">-</span><span class="dv">16</span> surrogate</code></li>
</ul></li>
</ul></li>
</ul>
<p>The claim that <code class="sourceCode cpp">to_utfN_view</code>’s
<code class="sourceCode cpp">success<span class="op">()</span></code>
API is a basis operation is supported by the fact that each of the above
APIs can be implemented using it, but not vice versa. See <a href="#appendix-implementing-existing-practice-for-error-handling">Appendix:
Implementing Existing Practice for Error Handling</a> for code examples
which demonstrate this.</p>
<h3 data-number="5.3.3" id="stductranscoding_error-enumerators"><span class="header-section-number">5.3.3</span> <code class="sourceCode cpp">std<span class="op">::</span>uc<span class="op">::</span>transcoding_error</code>
enumerators<a href="#stductranscoding_error-enumerators" class="self-link"></a></h3>
<ul>
<li><code class="sourceCode cpp">truncated_utf8_sequence</code>
<ul>
<li>An ill-formed subsequence that matches the beginning of some
well-formed sequence.</li>
<li>Example invalid code unit sequence: UTF-8 <code class="sourceCode cpp"><span class="bn">0xE1</span> <span class="bn">0x80</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">unpaired_high_surrogate</code>
<ul>
<li>Example invalid code unit sequence: UTF-16
<code class="sourceCode cpp"><span class="bn">0xD800</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">unpaired_low_surrogate</code>
<ul>
<li>Example invalid code unit sequence: UTF-16
<code class="sourceCode cpp"><span class="bn">0xDC00</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">unexpected_utf8_continuation_byte</code>
<ul>
<li>Example invalid code unit sequence: UTF-8
<code class="sourceCode cpp"><span class="bn">0x80</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">overlong</code>
<ul>
<li>An overlong UTF-8 encoding.</li>
<li>Example invalid code unit sequence: UTF-8 <code class="sourceCode cpp"><span class="bn">0xE0</span> <span class="bn">0x80</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">encoded_surrogate</code>
<ul>
<li>Applies to both UTF-8 and UTF-32.</li>
<li>Example invalid code unit sequence: UTF-8 <code class="sourceCode cpp"><span class="bn">0xED</span> <span class="bn">0xA0</span></code>,
UTF-32
<code class="sourceCode cpp"><span class="bn">0x0000D800</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">out_of_range</code>
<ul>
<li>Applies to both UTF-8 and UTF-32</li>
<li>In UTF-8, this applies to
<code class="sourceCode cpp"><span class="bn">0xF4</span></code> if it
is followed by a continuation byte greater than
<code class="sourceCode cpp"><span class="bn">0x8F</span></code></li>
<li>In UTF-32, this is any code unit greater than
<code class="sourceCode cpp"><span class="bn">0x10FFFF</span></code></li>
<li>Example invalid code unit sequence: UTF-8 <code class="sourceCode cpp"><span class="bn">0xF4</span> <span class="bn">0x90</span></code>,
UTF-32
<code class="sourceCode cpp"><span class="bn">0x110000</span></code>.</li>
</ul></li>
<li><code class="sourceCode cpp">invalid_utf8_leading_byte</code>
<ul>
<li>In UTF-8, this applies to
<code class="sourceCode cpp"><span class="bn">0xC0</span></code>-<code class="sourceCode cpp"><span class="bn">0xC1</span></code>
and
<code class="sourceCode cpp"><span class="bn">0xF5</span></code>-<code class="sourceCode cpp"><span class="bn">0xFF</span></code>.</li>
<li>Example invalid code unit sequence: UTF-8
<code class="sourceCode cpp"><span class="bn">0xC0</span></code>.</li>
</ul></li>
</ul>
<p>An alternative approach to minimize the number of enumerators could
merge <code class="sourceCode cpp">truncated_utf8_sequence</code> with
<code class="sourceCode cpp">unpaired_high_surrogate</code> and merge
<code class="sourceCode cpp">unexpected_utf8_continuation_byte</code>
with <code class="sourceCode cpp">unpaired_low_surrogate</code>, but
based on feedback, splitting these up seems to be preferred.</p>
<h3 data-number="5.3.4" id="examples"><span class="header-section-number">5.3.4</span> Examples<a href="#examples" class="self-link"></a></h3>
<p>The first two rows of each of the following tables are taken directly
from the “U+FFFD Substitution of Maximal Subparts” section of the
Unicode standard, and augmented to show the associated
<code class="sourceCode cpp">success<span class="op">()</span></code>
for each resulting code point.</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABTQAAANhCAYAAADZhDRwAAABdWlDQ1BrQ0dDb2xvclNwYWNlRGlz%20cGxheVAzAAAokXWQvUvDUBTFT6tS0DqIDh0cMolD1NIKdnFoKxRFMFQFq1OafgltfCQpUnETVyn4%20H1jBWXCwiFRwcXAQRAcR3Zw6KbhoeN6XVNoi3sfl/Ticc7lcwBtQGSv2AijplpFMxKS11Lrke4OH%20nlOqZrKooiwK/v276/PR9d5PiFlNu3YQ2U9cl84ul3aeAlN//V3Vn8maGv3f1EGNGRbgkYmVbYsJ%203iUeMWgp4qrgvMvHgtMunzuelWSc+JZY0gpqhrhJLKc79HwHl4plrbWD2N6f1VeXxRzqUcxhEyYY%20ilBRgQQF4X/8044/ji1yV2BQLo8CLMpESRETssTz0KFhEjJxCEHqkLhz634PrfvJbW3vFZhtcM4v%202tpCAzidoZPV29p4BBgaAG7qTDVUR+qh9uZywPsJMJgChu8os2HmwiF3e38M6Hvh/GMM8B0CdpXz%20ryPO7RqFn4Er/QcXKWq8UwZBywAAAERlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAAB%20AAAAJgAAAAAAAqACAAQAAAABAAAFNKADAAQAAAABAAADYQAAAAAFUitfAAACBmlUWHRYTUw6Y29t%20LmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0%20az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu%20b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJk%20ZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3Rp%20ZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlm%20LzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgog%20ICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTU4NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+%20CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMjI0PC9leGlmOlBpeGVsWURpbWVuc2lv%20bj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ct8q%20BYkAAEAASURBVHgB7J0HuCRF1YZrCQu45JwWlpyUILDkHCUIkoOCAgoIroBkyRnBBKhITj8iElRA%20FJAkOYhkQTISV5a4ZLb/8x6ptqfvhO65M/fOzP3qee6d7urqCm9VV3edOnVqWGIuyImACIiACIiA%20CIiACIiACIiACIiACIiACIiACIhAFxCYqAvyqCyKgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiI%20gBOQQFMNQQREQAREQAREQAREQAREQAREQAREQAREQAREoGsISKDZNVWljIqACIiACIiACIiACIiA%20CIiACIiACIiACIiACEigqTYgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiLQNQQk0OyaqlJGRUAE%20REAEREAEREAEREAEREAEREAEREAEREAEJNBUGxABERABERABERABERABERABERABERABERABEega%20AhJodk1VKaMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISaKoNiIAIiIAIiIAIiIAIiIAIiIAI%20iIAIiIAIiIAIdA0BCTS7pqqUUREQAREQAREQAREQAREQAREQAREQAREQAREQAQk01QZEQAREQARE%20QAREQAREQAREQAREQAREQAREQAS6hoAEml1TVcqoCIiACIiACIiACIiACIiACIiACIiACIiACIiA%20BJpqAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAl1DYJKuyakyKgIdROCNN94IEyZMCDPNNFMH%205ar7sjJ27Njw1FNPhVdffTXMOuusYZ555vHf7iuJcjyYBD755JPw9NNPh2effdazMWrUqDDvvPOG%20ySabbDCzpbRFQAREQAREQAREQAREQAREQATaRKCQhuZ//vOf8IUvfKHU3xZbbFE4yzvvvLPHffLJ%20Jxe+57vf/a7fc+SRRxa+p0zAf//732G//fYL6667bvjiF78YNtxww3D00UeHt956q0w0FWHfeeed%20cMwxx4T1118/LLLIImGttdYKe++9d3juuecqwjVzcuyxxzqP5ZdfvuHtM8wwg4e99NJLG4atF+Dc%20c8/1eIq0jSeeeMKjQtBQJPw3vvEND99MGrXuQfgIH+I+9dRTw8cff1yveFWvnXfeeWHFFVcMM888%20s//985//rBquHZ6//OUvU3aXXHJJ3STmn39+D3vNNdfUDTdYF++6666wwQYbOEN4brbZZs51ttlm%20C2uvvXa44447KrL297//3cuDwHMw3fvvvx/4S5JkwLKBsI40y7TXss/ZgBWmxQl98MEHgb5v5MiR%203qfSpvhbdNFFA22JPnv8+PEtTlXRiYAIiIAIiIAIiIAIiIAIiIAIDDaBQhqaDN4ZOJZxb7/9duHg%20DNaJ/9NPPy18D4N77mGw32r317/+NSCQzQovH3300fCnP/0p/OxnPwsIYxZYYIFSyaKFttJKK4XX%20X389vQ9h2I033hjOOOOMcPHFF4dNNtkkvVb2AHbwyOa5VhyE4++9996rFaSQ/4cffujxFAmMNiMu%20pt3onii8aSaNWveQNsL5u+++O1x00UXhlFNO8fpEWF3EoU24++67B+JHODrjjDOGiSYqNCdQJPqG%20YWjrlAE3ZswYF/yRh2oucu5EYc6tt94a1ltvPec48cQThy9/+cth+PDh4d5773WhHc/f3/72t3Dz%20zTeHFVZYwYsXn3fYD6abcsopXZj5zDPPuDbpQOTl+OOPD4cffnjYYYcdwvnnn18oyVj/jQLH56xR%20uE68/tlnn4Wtt946XHXVVZ49BJhMFNHXvvDCC+HNN98Mhx12WLjvvvvC73//+zBs2LBOLIbyJAIi%20IAIiIAIiIAIiIAIiIAIi0ASBQtIYhCZoF+b/5ptvPk/yoIMO6nPtj3/8YxPZGfxbEJjssssuLhhc%20Zpllwk033RQeeuihgFABzcZx48aFb37zm6Uzuv3227swc/bZZw9oRrI8EuHE4osv7tpX3/72t8O7%20775bOt5OuGHaaaftU//5trLQQgtVZPXEE0+se09ecNNMGvl70Lq9/vrrvS6nmmoqF3x89atfdQFn%20ReZqnFx22WUuhENL8LXXXguPPfZYWHDBBWuEbq83wtW99tqrvYm0KfZtttnGOSLIRDv5nnvuCbfd%20dltgGT+CpznmmMMFmwirBlITsk3FHdRoyz5ng5rZkomfffbZLsxEUPmrX/0qvPjiiwFh+PPPPx+Y%20gEKLH8e76JxzzikZu4KLgAiIgAiIgAiIgAiIgAiIgAh0MoFCGpoMGBEA5R3aVTjslFW7ng/fDedo%20+yBkmW666XxwPPXUU3u2v/SlL7mQBU0pNPzQKmXpdBGH1iTaZ7gzzzzTl0RyjI03hDcssUVAdf/9%2094fVV1+dS13nytZ/M22mbBpAzN7DceSNBi5LU//1r3+F73znO85+kknqPw7UOW6ppZbqCG2v//u/%20/wvbbrutm0PwjHXBvyeffDK88sornlOW0M8555xprtF+REt5mmmmCWussYYLqDBVsPDCC6dhdFCO%20QDPPWbkUBi80Grw4tH132203P47/WHL+i1/8wicdCMdEBqZN5ERABERABERABERABERABERABHqD%20QCENzWaKirbhz3/+cxfWIZBAeLfccsuFH/7why68qxUnA8+ddtopLLnkkmGJJZYIaC6W0fZkCeVP%20fvKT8LWvfS1gRxCh1Y9+9CPX2qmVZtb/wQcf9NNNN900RGFmvB7tgrLUEW2/oo7l91HTjCWRWQeT%20uGwZrcZOcVdffXXAXmSvOtoG9kxxaODWa2PYb9xxxx0DtjlxLGHl/Ac/+IGfx39oGqI1ueqqq3rb%20ow2RRt4MAOlx/09/+lO/9be//a1r/dLeizg0G6N5AgQ5ZdtN0Xyi6UY+KQNLmE844QQXnqKZjRAe%20reUyZiIoGwLk6GpNCMAPzWWEnWjB5h1a0gceeKAvVUdbtlFeipa3Xr1Q17CIz/G+++7r57fffnua%20vTJ9D9qo2H5cZZVVfOl6tNOLKQT6Fxx9IWleeeWVfo4WK+ek3S5XlBXpH3XUUZ4fJoDYjIdz6u7X%20v/619/3kFU1JBIr040wKYcOW/EdtdMqLJi5tCo14TCm89NJLhYoX21KtdkQkLNOnHVWLs0x9ERd9%20BNr7PKeYHOF9gMmQWC+YI4kOYSrlR8M/73h3cG3XXXfNX/JJsyLvL96tkS8mHDCFwTODxvhWW20V%20/vGPf/SJGw+489zG9+PSSy8dWD2QbcfZG+nr9thjD393U39ovV5xxRXZIOkx2rFoXxOO9z11jY3o%20WE9pQB2IgAiIgAiIgAiIgAiIgAiIQCsI2AC9aWeDJ3bGSI444oiKOMx2WWIDdL/G9fyfCTgTs9+Y%203mODIA9jg9rEhHt9wnO/CYoSE56k95i2jYczAWnqZ4PqxAZoVe83+2qJ2axMw9Y6+POf/5yYoCmx%20AV6fIDZI9bjnmmuuPtcaeZgAze+1gWhFUFs26f5mQzAxwVTFtTIn1AGcbGl3w9ummGIKD0vatZzZ%20LkzIUz1nGnYejy3trhes4pptpuP32OC/wr/WSTNpFL3HBEeJCTs8Pya0q5WF5IILLvAw+XY899xz%20p/ccd9xxiWl41gxnWr1pWLPF6uHWWWedxIQX6T0jRoxIw1Q7gBl5MIFmYgKaBO6cm1CzT3AzbeDX%20TFhaca1MPu+8806Pg2eZvObLz7kt2a+Iv9GJaWem8RDnyy+/3OgWvx7zQts1YUkaRzZP1fJSprz1%206sU0tqumafZvPX9l+h4YmECsanyUxyZ0PE76imz54jF128iVfc6Irwwrwo8ePdrz94c//CExwXKa%2015NOOikxrUk/Nw3iqs8FdWVC4vSeWDZ+6SuL9IUmEPT7TQs1McEoWSrsytQX750999yzal5jfvnd%20aKON0vRj+U8//fTULx48/PDDHpdpJEcv/y2Tpxi/CRi9n87y45i+m2cm60y47O+HfNh4bhsoZYMn%20P/7xj5NJJ520arn32WefirC2oV/VcMRtGteJTRZUhNeJCIiACIiACIiACIiACIiACPSXABpHTbta%20Ak3bHdwHN7PMMktiWn6JaWgkthlLgqApCn3+8pe/pOlGgSaDn+mnnz658MILE9MOS0xbKLEdqdOB%20ktlBS++pJtA07SAPiwDmhhtuSMzOYWIaMqmQE0GA2chM4yhyYHbZfGBom0skDJxt+X1iO2QXubUi%20DEIxBof8mTZNQlkoG0Isyn3ooYdWhC97MpgCTcpEXdX6M+2+tDhR0MKAuFZ4sy+aho/CyTJpxHuK%20CFptp3nnb9pOaZr5A4RutFdbmu5hV155ZT83zSgPamYK3J96/MpXvuLl4h6EibPOOqtfQ3BqS9Y9%20fBSckT8z2+BtHoGJabblk644zwo0uXDWWWd53LRJ04KrCFtNoFk2n1GISLl4bo888sjEloAnprGa%20fOtb30rL/MADD1Sk3ejEdjRP75188smdGYJd0jOtuaq3N5OXsuWtVy+mied1Dgv+6NdoE/QPuDJ9%20D8Jz4qBtXHvttS68o78zzcWUi2mmev9FGltuuaX7myaqp5mv62rAyj5nZVmRZhRomo1lzx/PEm0E%20gV0UuFFO28U+sU2eEgS5CMkiQ3655ze/+U1iWovJaaedll4zLcBqxarws83ZEtPOTO9hQsw0PJPf%20/e53LvCvCJw7KVNf9NUxz6ahmZjWYmJaqS5EjWXnen8FmmXylOVrqxkS0450hmZ7OJ2kMS3utNS2%20KVtiGpxeDtvQLDFzFQkCVNMCTrLPI0xxxEeZ6J94N9lGS4lthJXQdhGWci2+Bz/66KO0HhAyE6+t%20SvB3cJx8MK3RNC86EAEREAEREAEREAEREAEREIFWEGiLQHPZZZf1AY/Zi+yTR1uG5tfQgowuCjQR%20zFQTjtiSOL9n1KhRqZZmXqBpG7Z4GAZrZo8yRu2/aPugVckgjIFcGbfYYov5fdzLH0KHZt0BBxxQ%20EVeMc911100YcPbHDaZAM5aj1i9CsOiioKVWWPzR6oouCifrhedaNo14TxGBpi1J9TpBmNDIRS2k%20zTffvCIoGsfkAYFTvh4RBCAI57ot9fT7ouAMP4TvaFsWcXmBJveQJvGg8RcFpvhXE2iWzWdWiGjL%20o4k2dQipo4YowvoyDgHI9773vSRqCpP/+Gd2ThMEMdkJD+JuJi9ly1ukXuijyCvCnejK9j0Id4hj%204403jlGkv2ZD1wXcWc1ahISEp60WdWWfs7KsyEcUaJK3U045pSJrUeCG5mZ2QoNAUXsfzb1sm+Wa%20meDwssZnBb96DuGuLQH3e8hH9o++m4koJtOyrkx9ocXNe4d4eQ/lHYLnOEnXH4FmmTyRh8gXgaqZ%20tKjIlpmG8PwiTIyO9kQZWAHxyCOPRG//pQ6ipvr+++/vfrGO8qsvuBg1h5nQxMEgcjc70O4X//FM%20MUmJVrmcCIiACIiACIiACIiACIiACLSSQFtsaJqGTLBBU9huu+1snPNfh70y00ZKbeKZ4CdeSn9N%20u81tZ6Yenx8ccsghfoStNnYHr+ZME9O9TdgU2FyE3crjn2n3uS01Apg2ULXba/phBxG7YNG+oWkY%20ue0zGwT6PVYZwQbVVf+i7TDKig0+bHnisBdnWjEB+2W46667zu0Avvrqq37ebf/YHIqNcmr9mRZe%20nyJh165WeBMg9AnfTBp9Iqni8cknn7gvm0A149jgxkwZ+K22ZLPPZkHU9Te/+U2/jr29vMOenQkf%20896Fz23JczAtX7dTx4ZVtVx/84mNvqyjTldbbTX3YkMrXJFngXCm4RVMAOab/rCbPXYO4YTDxp8t%20YfaNXtiBPtaPX/z8X5G89Le8ZeqlbN8TuWGnFnvB2GCMtkiJC/ua2EFshSvynPWXFf2YCairZtc0%20eUP++ce+Io4ymlC74j5souIij4qLVU5gib3IO+64I9D+OY82NbHfiV1P+hPskUZXpr7YOZ33Ds60%20yv03+w+byNij7K8rk6dsWrxj2UQr60zY6afxueQE+5Y43rEm6PXj+I864B1k5la8r+I+3t84bJ/G%2092j8pT/jGWaDLzayMzMnwbSNPTzvX9McTzf+Ij3aM+HkREAEREAEREAEREAEREAERKCVBOpv69xk%20SmZb0Ac0bA5hmlW+MQTCvWrCiWwSptmZPU2PTXvIhZRmd9MFN2x8kHcMXnFms8z/8tfj+QsvvBAP%20C/2yIUp0l156qe8qjRCJ3cjZYRpBLTsyV3NsoMDmEAy22egBx8YqtiQ/3QgIoQaDQIRd7IBuy/uq%20RdVWv8svvzywsUTW2bJBFyp8//vfz3r7BiZsfJN17B7OxjllHBuD5OOud38zadSLL16L7aGaEDWG%20qffLLtw4NnZiI6tqLgquEQBkHUJaBvz9cQiA2FyGOqGNscFKTC8bb3/yibC3msDXNNM8CQSZuCLP%20ggf8/N8MM8zgwkwEmjgE+my8grCT59mWQQfTak6fHcIUzUt/ylu2Xsr2PUyQmMacP3NsNMUfQiWz%20W+vtgY1nTPuV4vbbFXnO+sOKDJpmYs18mqZon2vwxdGv511sU3n/Ruew4w+HMJT3ziWXXOIbFPHe%20oI9lgykEvGXqyzSsPU7yHCe13CPzj/cWk3j9cWXylE0nTgRk/SLD+FxyLZaDjZeqOQSzccO6W265%20JQ0yxxxzpMfVDug/6W9OPPFE32ke4S9CUByC6zXXXNM3HeJ9KScCIiACIiACIiACIiACIiACrSTQ%20FoGm2cD0QY0tLXWNNQSQ66+/frBlbC6kiNof+YLktXWy19GyxNXa0ZlBKw5BQD1hQL00uJ/4GRCj%209RIH3vjj0ChCyMLOvGibItBEkGU2Ff8bIPc/asLYsju/wqAOAU3WIQxA8wdBpy2zbVqgGctlGzJl%20o+9zTJ3wh4vlYwBr9tD6hMUD4VLWmT08F55l/br1mJ27oyChWYEmceBoB7a0vCoKhLG4uLNzDGQb%20VaV1EP2a+UU7DgEZQhwzxRDuvffePtH0J5+1ypVPpMizQD7RAEP4lBe8ouVldkpdyImg92bTfEbA%20GScDSK9oXvpT3rL1UrbvsSW4vvs1QjDKh/ac2fv1SQ0mNmxzHvdDg3kgXH9Ykb+RI0cORDYr0mDC%205ZprrvHnJ6+xi0CP3eP5s2X9LiTm2aM9ff3rXw9l6iuyoa+M/WVFRuwkaoTm/WudZwWNMUyZPMV7%20+C36PIwbN85vi31RNo78ccwL/o36xfguYVJipZVW8ncj7zsmuMwsg/+hsYmmrm1C10eDPZ+2zkVA%20BERABERABERABERABESgKIGWCzTNnpcLVdDGZJBjdgeD2bVM8/P444+ny9lSz88Pai0nZzBKvLi4%20JPHzW9IftH1sswZf+sgyw2Yd8bAEE6Esg9+8i0JK27XVLyFotQ0v8sEqzs0uqJ/Heysu2onZF3Ov%20GGf+epHzqLX6+uuvO6taQl0Yx+X+ZnfRoz7wwAMDWmFZh/CWASlMs47lzb3iWO4c2xWD8WZcbI8I%20wW1jk6rCnagdZbs3VyRRRLhQcUONEwSJCAsQgD344IOuLZUP2p985uOqdV7kWUCIh0YwfQP8qzmW%20KDNZgACK9hqFStXC1vLrT3nL1kszfQ91hjYtfzg02M877zyfQGBSYu+99/by1ypfK/37w4p8lOXV%20iryPHz8+XebOZFksQz5uriGgpk+3zYr8cpn6iuYk0D5Ggzgurc6mQz9ZxtmGYX2Cl8lTn5sLeCCY%20ZGl+1EjP38IkCH095i+YeMTRRtEqj5OJ+Xvy52iLsuyfP+rHNuYLtuN9uP32210LmWd+dWlq5rHp%20XAREQAREQAREQAREQAREoEkCEzV5X83bGBQhzGQwxHLrrDDTNlgI9YR2CDuy2iExEexeotWChkwU%203MVr8dd2cPVD7O9FgV28xi+akQy48hqS2TAcR6GTbR6Uv+TntjO3/8ZBX9VAOc9FF13UfaI2YO5y%20al+slsAzH77aOQPi6Gy34HjY5xdtGZxtbhIiMwaxHGf/0CKLYbL+1ZY49kmkCzwY3B988MGeU2w1%201jJ30Kgo8IgaWpgMyDsEIVFw96UvfSl/uWXnLBeN5gowk4AAJ+s6JZ+RMxrO1QQ7Mc9o4OF4HqP2%20cbxW5Hcgyxufo6J9D0I26iu7tJfJBUwHsEQch2B6oNxAsmpVmeAXJ1din1Ytbt4ntimQX4r1FH+L%201BfLpmM6TBrkHc/3xRdfnPd2Eyl4MoGXd1l7nvFamTzFe8r8xveDbT7Ux/QL71Y0KDGRgoYwwmGE%201LxH0SDOu+eff97tZtJubEOzgNkU6mPLLbdMg8LMNvfylQxTTz21+w9km04zogMREAEREAEREAER%20EAEREIGeJdBygWbU5mAwFDfFgR4aG7vttptr/XHOBgN5h7Ycg6Ls0lw0Rw466CAPuuOOOwYEbdUc%20S23RSkRgOmbMGLfnF8MhOEBTFE2aqA0Zr+V/bddo92LQyRLw6BDGsvT1yiuvdK+11lorXmr4azto%20exg0zlhaTlzRMRi0Hd/9FHtj0dluswFBGwPNIo6NGeJmIwhGfvWrX1UIdqkP2/07XVq+xRZbpIPu%20IvF3axhYxz/aHO0DwR/LUdGEY3kqvJp1tHc2fMKhjcSS6ujYOArNVzQ0SQfbqe10COux88cy0Lis%20Nf52Sj7ZZAthB8vOWVbOMvmsI78IXWxHd/ded911s5cLH7ervNE+YVZgXLbvofxo/tnu5RUTOJQ9%20bkCTnTCJabZr07B2sSpcWU0EZHILLV4cS/TRys++N/CnjdHPMcFG+Ni/lqkvNr/hfYJjoyhMjkTH%20c2Y7n7vmZvSLv3PNNZcfMhmXrTcEhNUmnMrkKaZR5he7lpSFSQSO46ZLaD/bruWp6Q2eTyYj0RDG%20Yef47rvvTpOiT4MHmpvEh41NbGbTnnk35gWgCDzjsvRsm04j1IEIiIAIiIAIiIAIiIAIiIAINEvA%20BtFNO9OWZDeQ5IgjjkjjMBuUiQkd3d+WjiamjZTYMrPENvNwvxlnnNF/bbOIxAZSfp9tkuF+xMWf%20DfgTEwImprWS2ODK/WzglJhmSJqODQDd/4c//GHqZ5sQpeFtw5HEBrCJaZukcXNuGjVp+GoHJvRK%20TKMyvceW8SYbbLBBYgPU1M80TxITEFa7vaZftow2APQ4KV8ss2nvJTZYTO83watfM+3J1K/RgWm1%20JaYNk8ZpyyMT27AoWWeddRL4xbRmmWWWxJam143ObBwmNmCtG8YEpB6nCZLrhstepN7Jhwmsst41%20j5tJI94Ty1vr1wbYie2+WzPt/AUTinvebYORiksmSElMkJjyNW2lxATjCW0wpm0Cl/QeszHn/oQr%2042BGfLSNWo7ymAAsTdc2RkmDls2nCRs9HtpRNQcH8gOXMs6WnCem/Zvm0YTx/jyYgDOxTVtS/9Gj%20Ryc2yeFRN5OXsuUtUi+msef5gzFt2UxTeP7K9D2mBZeYENHjMU047yNtp+zElgWnZbfl5ynSCy64%20IPXn+aatNXJln7OyrEif+qH+TYjfJzu207Zfs03a+lyjrNz34x//uM81M/Ph144++ug+1/IeJoxL%20lltuOQ9PfLA00xGJCeUSs/WbPge8Q8zuccXtZerL7E8mpj2fpkN7pV+Nfa1paPs1s4ecpmEa4Gkb%20N2FqYhMoCf0N+TRtSf+dcsop0/AclMlTPb62tL5q/LYU3P3JA+9h3svkgXP+bEl4mh/e4/RP+JN/%203k+8k81mp/vR/m1XdA/Pu9AmHtJ4eK9tttlmHn8Mzzs1+35LE9KBCIiACIiACIiACIiACIiACDRJ%20AE2upl0c5GUFmkRmGpEJg744UOIXoYgt2Utuu+22dKBp2muedhT2EY9tCpIOmrjPlpsmpqmY2KYZ%20Ffk0bU+PP5+2bbDhg88oCCUOBlW2cUoqHKmIqMqJae4le+65Z4JANlsGWz6fmBZewkC6rOMeBD/E%20kY2TNEwLJnnjjTcqoowCTQSpZZxpxDjDrFArpsfA1DbQSGwJZsMoGYAzUK/nouCwjEATAS35MXME%209aJOrzWTRrwnljv+Mni3XX594I4wHeF1GVdLoEkcxGVaTS4oiOkhtOM5sKWtFclcd911zqCsQBNm%20xI0gqZ4zm6hpG8sKNLmnTD6jEBEhYzVn9h89naLC6WwcZrrBn+usYDNyQ+Bu5gAqntdm81KmvEXq%205YorrnDBY+xfzjjjjLRYZfoe29AmsU2R0nqKZUfYZSYK0jg5oO9ASBcFZ0UmOco+Z6RThhXhERqS%2073oCTVsOTtAK1yqBJpHaknLvV81OZh+WtC0mc0zbviL9eFKmvhD4IvCzzeLSdOi7bdWAC2bhkBVo%20kgbCbvrGWLdMECGIZGKOvFXrN4vmKQo0q/G1Ze6eZrX4L7300opJPvLGBKJpC/d5r9mqCn+XZMtM%20eASWUZgZWSIA5d1CXLG8/MKIfiL//o736VcEREAEREAEREAEREAEREAEmiUwjBtt4NFyR7Qsn2T3%20XmxymZAiTQObZixFw2akCd5S/3jAsjZsj7GDqwl9au4uG8NX+2WJO3GYEMvTJ66yjmXa2AujDGyq%20YELZslFUDc9yVTZnMC0Zj5flkK12Jpxw/iyzZ3khtgixB2cDzFYnpfhyBNgciDqm7dL+OtV1Qj4x%20M0Ebfc76CmxlslQXO7ksg261G6jylul76FvIF/0lm9ewhLcT3ECxalVZMStBn0pbwpSECXTdZnL2%20vVMrrTL1RT098cQT3qdil5L3F0vIbcIsmECzYkk66cV3iE1YBWzoFn0PlclTrXLV8+e5oxymyetL%20xk1AXy+4P59sOMd7kHtqOd47L774oi/3xzwMz3O0MVzrHvmLgAiIgAiIgAiIgAiIgAiIQDME2ibQ%20bCYzukcEREAEREAEuolAPYFmN5VDeRUBERABERABERABERABERCBbiJQXy2jm0qivIqACIiACIiA%20CIiACIiACIiACIiACIiACIiACPQ8AQk0e76KVUAREAEREAEREAEREAEREAEREAEREAEREAER6B0C%20WnLeO3WpkoiACIiACAwwgaeeeio88MADbrfTdlkf4NSVnAiIgAiIgAiIgAiIgAiIgAgMTQISaA7N%20elepRUAEREAEREAEREAEREAEREAEREAEREAERKArCWjJeVdWmzItAiIgAiIgAiIgAiIgAiIgAiIg%20AiIgAiIgAkOTwCRFiz1s2LCiQRVOBERABERABERABERABERABERABERABERABERgCBM49NBDw1FH%20HdUWAtLQbAtWRSoCIiACIiACIiACIiACIiACIiACIiACIiACItAOAhJotoOq4hQBERABERABERAB%20ERABERABERABERABERABEWgLAQk024JVkYqACIiACIiACIiACIiACIiACIiACIiACIiACLSDQGEb%20mvnEkyTJe+l8iBC45ZZbwmqrrTZESqtiViPw8ssvh/Hjx4cFFlig2mX5DREC6guGSEXXKebYsWMD%20f4suumidULrU6wTUF/R6DTcu31tvvRWee+65sOSSSzYOrBA9S+DOO+8MSy+9dBg+fHjPllEFq0/g%20/fffD48++mhYdtll6wfU1Z4mcN9994VFFlkkjBgxoqfLqcJVJ7DxxhuHq6++Or04evTo9LjVB9LQ%20bDVRxScCIiACIiACIiACIiACIiACIiACIiACIiACItA2AhJotg2tIhYBERABERABERABERABERAB%20ERABERABERABEWg1AQk0W01U8YmACIiACIiACIiACIiACIiACIiACIiACIiACLSNgASabUOriEVA%20BERABERABERABERABERABERABERABERABFpNQALNVhNVfCIgAiIgAiIgAiIgAiIgAiIgAiIgAiIg%20AiIgAm0jIIFm29AqYhEQAREQAREQAREQAREQAREQAREQAREQAREQgVYTkECz1UQVnwiIgAiIgAiI%20gAiIgAiIgAiIgAiIgAiIgAiIQNsISKDZNrSKWAREQAREQAREQAREQAREQAREQAREQAREQAREoNUE%20JNBsNVHFJwIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi0DYCEmi2Da0iFgEREAEREAEREAEREAER%20EAEREAEREAEREAERaDUBCTRbTVTxiYAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAItI2ABJptQ6uI%20RUAEREAEREAEREAEREAEREAEREAEREAEREAEWk1gklZHmI3v+uuvD7feemvWy48nmmiiMGLEiDDX%20XHOFddddN0w//fR9wsijdwh8/PHH4corrwz33ntvuP/++8Nbb70V5ptvvrDccsuFXXfdNUw99dRV%20C0u4f/zjH+GZZ54JI0eODEsssUSYeeaZq4aVZ3cQOPPMM8MLL7wQRo0aFXbeeeeqma7Vb2QDDxs2%20LBx22GFhkkna2oVlk9RxkwQ+/fTTcNRRR4UkSRrGcPjhh1fUqfqAhsi6LsC4cePCPffcE1588UXv%2015daaqkwyyyz1CzHY489Fh555JFAO1p00UXDl770pTDxxBPXDK8LnU2gVv9e77uwaB+y6qqrhnXW%20WaezASh3/iwXeSfk61Pvg95sPGXfCVB44oknwo033hi23nprjSF7pFk88MADgff9hAkTwmKLLeZj%20vmrveq5T/w8++GBgLBC/C3oEg4rxOYFXXnkl/P73vw/LLrtsWGaZZWpyUV9QE83QumCDzELOqDAa%20Tf+K3LT33nun4bP3Zo+nm266xAY3RaLrE+akk05KNt988+Thhx/uc00e7SNw8803F478ueeeS0aP%20Hl2zHVD/V111VZ/4zjnnnMQEnRX3TTbZZMnxxx/fJ6w8Bp7ASy+9lDz55JOlEn711VeTSSed1Ot0%20+PDhydixY6veX6TfoA95++23q94vz4EjUKQvoJ6yfX694/fffz/NvPqAFEVHH7z++uvJo48+WiiP%20P/vZz5Kpppqqoj3QFxxyyCF97n/55ZcTm/CsCEvbsQ/bxD5g+4SXx+ASKNIXkMMi/Xv+u7BoH0Lc%20coNH4M0330xMKNEwA83Up94HDbF2TIA77rgj+eijjwrlp8w7IRuhCTL93fC3v/0t663jDiEwfvz4%20wmP7559/Pll55ZX7vOtNiSUxoWVFiZ566qnElGH6hF199dUTU36pCKuTwSdgikzJe++9VzojJrRO%201l57ba/nI444ou796gvq4hnUixtttFHFs1pN3tOqDA6IetOaa64Z9txzTxuL/NehsWcdWEBbyzqn%20sMkmmwQTkPhMSwxT5PfOO+8MV1xxRdhjjz2KBFeYASbw7LPP+qwKs68LLbRQOPTQQ8Pyyy/v9fyn%20P/0p/N///V+46667wlZbbRVsMBRM8Ok5tA8U196zRu6zr/aiCszc0V4OOugg1+zdbrvtBrg0Sq6/%20BC644ILwySefeP3TB1x44YXBBqA1o833G/mAX/jCF/JeOu9wAmeffXYwYUXVXKJtO8UUU/g19QFV%20EXW1JzPte+21l2tXfuc73wlLL710uOmmm1x7/5hjjumjtb3jjjsGtPnmmGMOf8eb4DOcddZZ4b77%207gubbbZZ+Pvf/x7wk+tOAvn+veh3Yb0+ZP755+9OGEM410XqU++D3mwgZd8JUHj33XfDySefHH77%2029/2JpQhVirGeZtuuqmP8Rgnfve73/VVfJdccolrYJrSUjClpTD55JMHE5IH3hus8uL74etf/3rg%20vXHaaaf5GJLvAsaUpvwyxCj2XnFPOeWUcMMNN9QtmPqCuniG3sWiklEjUyFlLXJfnIk3YWbV4Ghg%202DIjj9eWFlcNU8/TOi+/15Yd1Aumay0mYMLHQjGa0NHrZ8UVV0xMqNnnHmbpZ5ttNg/zta99Lb2+%203nrruZ8JqlM/Dk488UT3X2SRRSr8dTLwBJrR0LSPFa8/e1H5ry0pqZrxRv1G1ZvkOSgEivQFWW2c%20//znP4XyqT6gEKaOCFRUQ9Mmrvy5/+EPf1iR7zFjxrg/GhbR2WSl+5mAO0F7Izo0wGaffXa/ZgPa%206K3fDiBQpC8gm43692rfhc30IR2AZMhloRkNzSLvBL0PuqspFdXQLPNOMCWIxMyNJCbY8v4/jkml%20odmZbaOohqYtMff6nGaaaSpWbWVXdMV3y6mnnuph0dzMruZ57bXXkplmmsmvmRCsM4EM0Vw1o6Fp%20Job8OZ9yyim9TvMamuoLuqcxDaSG5qBuCoTdrGmnndalyKaSHG677bZggxuffasmWrYlJ3799NNP%2091/sZ+BsyYKfY3sj65jBw07fCiusEHbZZRfXCGM2J+vQItx///3DWmut5RqCG2+8scf3zjvvZIPp%20uCSBhx56KPzmN7/xu6ivalpZ2M6k7rCdde211wZ7AfoMnL28/D7qJeu+973vuQbX448/7hq+2Ws6%207mwCaFhg5wR7eWhUo3Vly1QDWtZyIpAlwCy8+oAskd44tkGHFwR7SFm3xhpr+KkJNlLvP//5z368%20zTbbuEZ+vMD3wre//W0/5Z0h13sE8t+FvVdClagMAb0PytDqrrBl3gk2hPcVPthfX3jhhYOZL+qu%20wiq3VQnENjDPPPOEGWecMQ3DewDbmLj4bcBKPVwcC/qJ/WNvhQ022MBP2XdBrnsJIKNB89ZME4UT%20TjihakHUF1TFMuQ9B1WgyYCE5cgIttggBiHHL37xi3DggQeG2MnFGmKpKgIuVMtZnm4zNeHpp5/2%20y3/84x/93Gz6+fmHH34Ytthii8BgCCEom9GwrGWHHXbwpWp8IOHo+L785S8Hs8XpA2gELFdffbUv%20g8Ww/AcffODh9K88AQQSdDpmA8M3cagVA8vNqQ8EyGwUZTY3/dw0NysGstzPclQ2BsLFuvYT/et4%20Ajx/uG984xsuwI4mA1hCKicCWQLqA7I0eueYpWI43rFZd9lll/lpdjMXJj9wmCjJOyYocXoH5Mn0%20xnn+u7A3SqVSNEtA74NmyXX+fWXeCQisUGaIf+uvv37nF1A5bEiAdzzmo3jnY4Iuun/9618BxRg2%20BYrthDEiwuwll1wyBkt/2TAMZ5qeqZ8Ouo8ApumQzfz6178OpnVbtQDqC6piGfKeA2JD85///Gc4%20//zzU9gICum48MNuGrsd8ssMDYOav/zlLwH7Gd///vfTe7Cl8MYbbwTsKe6zzz5h++23d61MbGyd%20e+65PvCZc845PbwtTQ6XX365a1wiSGGWB23OnXbaKVxzzTXBlry5FijCUTpBZgMQpCJYZQYIOxzs%20woqWiC2FTvOgg+IE4mATjbxGLrtTdRRkI9yu5my5oXvHcNXCyK+zCCCs/t3vfucfJttuu61njueX%20iQS0qNHSZTYu7/L9RvY6z2i1e7JhdNx5BOjXbRlJ1YzxkcqERXy21QdUxdS1ntjN/MMf/uB2MKN9%205euuu87fuWZGxO1rxsLVawN6B0RK3f2b799rfRfmS1mrD5lvvvmCbSyRD67zDifQqD7r9QUUTf1B%20h1dwneyVeSfUiUaXupgAtjEZCzDeR7GJ8biZrvDdrSnWcccdl67ww65iNce7JK7qIA657iRwyy23%20uGyGNoDs5dJLL+3OgijXg0JgQASaCCNrGXdFQInWVnS84BBosmFMVqDJRw8OoSTLl/mLAo25557b%20Z224jpFYBJoMmhk8zTrrrHj7Ulc0OTE6jAD02GOPDa+88opf436EmTHcT37yExmcdhrN/4szbSNH%20jiwVyWeffebhay0niZuGRC3bUpEr8KAQuPjii4PZuwnMqMfnEcGV2dD0Zec823EZaTaD9fqNVVZZ%20JX3+s/fouLMJZDeHy+fU7OS4QFN9QJ5Mb5wz246Bfzbz+etf/+p/sWRbbrlliBOS+NVrA3oHRGrd%20/Vuvf89/F2ZLWqsP4TtSAs0sqe44blSf9foCSqj+oDvquVouy7wTqt0vv94ggAYmCk1oZWaFlowf%20GykVsWEQpuIYEyIIMzurvQFliJXC7GT7KlpWZ7ICV04EyhIYEIGmbQrju5jFzLEUGZsYzKiwNHnB%20BRd0gScaOnRMCD1YJo6WH9foqNgND6EjS8nrOexoMtPPbH1+aRv3YYMLQebdd9/tabHbNsLNW2+9%20NXz1q1/1D2Ly0KgTrZcHXQupFhYzbWXchAkT6gb/9NNP/fqwYcPqhtPFziEQl5sjhEQzKzoGrZh5%20YNl5NYFmvt+I9/E7/fTTZ0913CUEDj/8cDctUS27K620knurD6hGp/v9dt11Vzf9wvIyhBho76NZ%20gYY2qzTuv//+9J1drw3oHdD9bYES5Pv3et+F2RLX6kOYIJPrPgKN6rNeX0Bp1R90X53HHJd5J8R7%209NtbBBBi8i2AqTiWn6O0xKo99mBgBSZyAcbpq622WkXBmehA+Yj+gzH/hhtuGM4444yKMDrpHgJ8%20E7J7PSZn4t4q3ZN75bQTCAyIQBM7lfvtt1+f8qJJiYDyiiuu8A176LjQzPvWt74Vjj/+eNfSPPLI%20I72Bs2yVl1+cje0T2ececakz9jWrCUnifdjhRBsUjU7SYtMS/nDY4GAToaOPPrphejE+/VYSmH/+%20+d0D+0eNHAaeeSGhoTXZZJN5cDYIqubQ9MOxTEGu8wlg6uG+++7zjGLqgb+8w7wDs6z5mdVa/Ub+%20fp13DwGe9RlmmKFuhtUH1MXTlRexgc3yobgB3KqrrpqWA+1MNgrCHAzvZUwN1GsDegek6Lr6oFb/%20Xu27MFvQIn1INryOO5tAo/qs1xdQMvUHnV2/tXJX9p1QKx75dzcBzMMhzFx33XVdySkqqyAHYN+L%20Cy+8MFx00UUVAk0Ul775zW+64hMyAZasY4qO7wu57iNAG6COMUmGYgNyGRztAsdGQfgx7q+1etMD%206t+QJjCoTz8dV9wchMFMdAgTucayc1x2uXkMU+s3GpFFOMp9tf6YCaLzQ9A6duxYF2aiqYnWAKrP%20P/7xj12AWisd+dcngGYt7qqrrqq7uRIzMtgyxZ4qguRoD4kl62hs5F0UWMdw+es67ywCUTsTUw8b%20bbRRn7+55prLM6zNgTqr3gYzN/HZVh8wmLXQ2rTvuOMO/yClH8gKM0kFzbpo9J+l6LjYBtDeyDu9%20A/JEeuu81ndhb5VSpSlKIPYFeh8UJdYd4cq+E7qjVMplWQKYmMPtvPPOPu7P3j9mzBg/jd8FnGBn%20kfE7qzi/8pWvBISb++67r4SZWXBddnz77bd7jtHKZSVu/Ntxxx3dHzuq+J155pldVjJldyAJDIiG%20Zr0C8VLDsQwtunnnndd3x0bdnI4MoRiDntGjR8cgNX/ZXACHUBLtT3ZIy7qf//znvtydAdTJJ5/s%20MwAHH3ywLzXH/hLHqK2jDcoyd4RqccYoG4+O6xPAVhovGUwLnH766b5zfLU72IwJt/TSS7tNRGbb%20sI3KbAxLEJdZZpn0tldffdU3k6I+Yj2nF3XQcQSYXWPWDYfAspp9M2ZfmYUl3I9+9KNUM6vjCqMM%20DRgBhNzqAwYM94AkFDeCistD84lGLatoFzsuH8YUzP77718RPK6kYLM/ud4kUO27sDdLqlI1IqD3%20QSNC3Xm97DuhO0upXDciUK8d5L8LGANiEo7xIcvN995770bR63oXEGCFTjUzf88884xv6Mx4n93t%20kQ3JiUAtAoOmoRntYiLQwK211loVeWQ5OA5hB50adjXyLgoao1oy19ngB8EJtvqOOeaYilsQjO61%20114uYGNTITRADz30UN88KBuQDUtw2HGIaWSv67gxAbQt40AULdisoed49wUXXOAvJc4POOAA98Z2%20CpvH4BCIZu0ncY7dFATbs8wyi4fRv84lgCkJbKjW232Wl9iIESPCuHHj3PRE55ZGORsoAuoDBor0%20wKXzxS9+0Scr0Lhkgivbr2PrGlvarJjgwxbHoAXHyo2sdgbaGHGWHpvXcr1FoNF3YW+VVqUpQkDv%20gyKUui9M2XdC95VQOS5CICqtYPrttddeS29h3H/YYYf5edy5HBN0CDMZU0qYmaLq+gOWmjNezP+h%20YIbbeuut/VqUDXR9gVWAthAYEA1Ndjm+8cYbKwrw73//O2AXE4fUHcFi1m2yySYutHr55ZfdZkJ2%20J/QYLu6YjKo6EnzUkun4sKexxhpruE1GBkQMkth84LbbbvNbSYuPJGxwIODkYWE5LDMAr7/+eipY%20abQBUcyHfqsTgO1DDz3kxp3Zsf6nP/2pLxVACxObidG2IrZOs7Mz2C5F+MzSAna+xRg0dhaZrUHA%20jI0tuc4nEJebMylRyzE7S92joYkWJy82ud4lgH2cvNZ8LC3+aN8xGaI+IFLpjV/s4LEiAnt5u+++%20u28CxDuXAQx9PSsh+HiNO52jfcn7+bzzznPbWrzPeWffdNNNAdtrrLDQx213t41mvgu7u8TKfbME%209D5ollzn3lf2ndC5JVHO+kOAcSLKLY888ojbz2a8h8kyNg1mDwbMyB1xxBGeRFyezu8DDzxQNdlD%20Djmkwt5m1UDyFAER6D0CNpAo5KzkGDRM/4rcZDMoafjsvRzb4CSxGbrEBF2JLQ+vGt0PfvADv3+z%20zTaret06QI/DBsIe7sorr0zD2WYkiQkyk3iNNGeeeebk1FNPTcNwYMKxxLT9KvJp2puJzQAltjyu%20IqxO/kvAtGlKofjlL3+Z2CZBiQkjKzibbaTEBFlV4zLhs9dttt2Y9m3yhz/8oWp4eQ4sAdu8IzFb%20djUTffHFF72+qXPTlq4Zjgv24eLtgrDcF/sN+ga5ziZQpC+gf88+x/WOX3nllbTA6gNSFB19YJOA%20yaOPPlooj+ecc04yatSoivYQ38v5961paCRm6D+xgW8anu8GmyBJTKO7UHoKNHAEivQF5Cb279X6%20gVrfhdk+xLT+B65QSqkUAerGBA0N72mmPvU+aIi1YwKYyYjEtK0L5afMOyEboU2E+3vBJkGz3jru%20EAK2sWtiiiiFcsMYYfvtt68YrzMesEnPxJSRPA76lmrvjLxfrTFloYwoUMsJmK3T5L333msqXtss%20yOvcVtvWvV99QV08g3qRZzj7jJoCQ9vyM4yYLbGGzjqXijAFb6u4p+wJGpLsfsWStA033LDs7R6e%203bOfeOKJwBJztD+qaQdh14vdVdkcaPrppw8jR47UTlp1aKM5ySxaWWcfsW7AmWVlzMBFY+/14nnr%20rbfcfAB1Fzd8qhde1waGAJrT7ES/wAILDEyCSqUjCTTbF5QpjPqAMrQGPizvTf7K2LQkvE1eBFZZ%20NHoPYGYE7Xw0M+lvtMvlwNdxkRQHoi8okg+FGTwC9NVoVbEpZ7uc3gftItu6eO+88063iz98+PDC%20kZZ5JxSOVAEHjQBLxm2iMzUjUyQj7GZN/8EvpqpYzSfX3QRYickKWkyLyQ09ApiPQoYXHSuyWJ3V%20DjcgS86byTg7mZo2XsAgeH+WltEhNvq4Yikbtjf5k2sfAZaSrrDCCqUSwI7pUkstVeoeBRYBEegd%20AuoDeqcuY0mYnCo6QcUkpCZOIjn9isDQJqD3QW/Wf5l3Qm8SUKkQgKPsIicCIiACZQl0nEDzkksu%20CZdddllgl0s0JzH+W02rsmxBFV4EREAEREAEREAEREAEREAEREAEREAEREAERKD7CXScQJOl3ywz%20x7EpwB577NH9lFUCERABERABERABERABERABERABERABERABERCBlhDoOIGmGYwPW265ZWBZydRT%20T92SQioSERABERABERABERABERABERABERABERABERCB3iDQcQLNiSaayO1m9gZelUIEREAEREAE%20REAEREAEREAEREAEREAEREAERKCVBCZqZWSKSwREQAREQAREQAREQAREQAREQAREQAREQAREQATa%20SUACzXbSVdwiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAItJSCBZktxKjIREAEREAEREAEREAER%20EAEREAEREAEREAEREIF2EpBAs510FbcIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBLCUig2VKc%20ikwEREAEREAEREAEREAEREAEREAEREAEREAERKCdBJre5fzvf/97O/OluDuYwNtvvx1U/x1cQQOQ%20tffeey988skn4d133x2A1JREpxJQX9CpNTNw+Xr//ffDBx98ED788MOBS1QpdRwB9QUdVyUDnqGP%20PvoovPPOO/o+HHDynZXguHHjwoMPPhgmnnjizsqYcjNgBBgfvPHGG+oLBox4ZyY0duzY8Nlnn4VJ%20J520MzOoXLWVAN+FWTd+/PjsaUuPmxZoLrDAAi3NiCLrHgJvvvlmUP13T321I6evv/56QJAxatSo%20dkSvOLuEgPqCLqmoNmaTwSt/888/fxtTUdSdTkB9QafXUPvzhzDzpZde0vdh+1F3dApMeM8333wS%20YnR0LbU3c0xwIsjSWLG9nDs9dtrBPPPME6aYYopOz6ry1wYCI0aMqIh18sknrzhv5UnTAs2pppqq%20lflQXF1EYJJJJgmq/y6qsDZkFc3MCRMmqB20gW03Ram+oJtqqz155YOVWVe9E9rDt1tiVV/QLTXV%20vnwiwBg+fLj6gvYh7oqY0caacsopvS10RYaVyZYTQDuXdqDvgpaj7aoIeR8g1MoLtrqqEMps0wT4%20Lsy6dmrty4ZmlrSORUAEREAEREAEREAEREAEREAEREAEREAEREAEOpqABJodXT3KnAiIgAiIgAiI%20gAiIgAiIgAiIgAiIgAiIgAiIQJaABJpZGjoWAREQAREQAREQAREQAREQAREQAREQAREQARHoaAIS%20aHZ09ShzIiACIiACIiACIiACIiACIiACIiACIiACIiACWQISaGZp6FgEREAEREAEREAEREAEREAE%20REAEREAEREAERKCjCUig2dHVo8yJgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAhkCUigmaWhYxEQ%20AREQAREQAREQAREQAREQAREQAREQAREQgY4mIIFmR1ePMicCIiACIiACIiACIiACIiACIiACIiAC%20IiACIpAlIIFmloaORUAEREAEREAEREAEREAEREAEREAEREAEREAEOpqABJodXT3KnAiIgAiIgAiI%20gAiIgAiIgAiIgAiIgAiIgAiIQJaABJpZGjoWAREQAREQAREQAREQAREQAREQAREQAREQARHoaAKT%20DFTuHnnkkXDDDTeEe++9N3A8zzzzhGWXXTasvPLKYbXVVhuobCidASLw6aefhqOOOiokSVI3xVVX%20XTWss8464frrrw+33npr3bDDhg0Lhx12mIfpb9yTTDJJmGuuucICCywQFl100TD99NPXTVsXmyMw%200PWaz2WjNjPttNN6G6AdLLzwwoHwcq0loL6gtTy7NTb1Bd1ac63Nd5l2cNNNN+m7oLX4OyK2dr4T%20WtFm9F0wMM2kTF9Ajvr73Z8vlb4P80QG/rydfQGl6W+b0VhxYNvEW2+9Ff7xj3+EZ555JowcOTIs%20scQSYeaZZ66aiTJhsxG88sor4fe//73LoJZZZpnspYrjJ554Itx4441h6623loyggkyHnpjAqZCz%207COZSv8K3fR5oJNOOimxTiG9NxsPx7vsskvywQcflImyIuzzzz+fbL755smhhx5a4d/uE8pFug8/%20/HC7k+qo+G+++eaG+Xn77bdr1ne2/vfee2+Pi9+sf61j4m113JNPPnligtJk/PjxDculAP8l8NJL%20LyVPPvlkQxyDWa+xDRVtMzbBktx5550Ny6QA/yOgvuB/LIbq0euvv548+uijDYuvvqAhoq4OUKQv%20oIBl2kGZsPouGPzm8+abbyYPPPBAw4y0uq6y7/pWtxl9FzSszj4B7rjjjuSjjz7q45/3aHVd0Q6I%20E9fquNUO8rVX/5zx1D333FM/kF1tZ1/Q6rg1VmxYnX0CmBJb8t577/Xxr+ZxzjnnJFNPPXWFLGCy%20ySZLjj/++D7By4TN3jxhwoRk7bXX9jSOOOKI7KU+xybI9HB/+9vf+lyTRzECG220UUV9XnXVVcVu%20bCJU2zU0v/3tb4ezzjrLNZ/sBRM23njjsNRSSwUThgT7AA6x478tAABAAElEQVRHHnmkX3/ooYfC%207bffHpgNKeus0wqXX355GDt2bNlb+xXehB/hiiuuCHvssUe/4un1m88+++ww3XTTVS3m/PPPX+G/%205pprhj333LPCL3vyhS98Ibz//vupV7Nxf/LJJ+Gpp54KDz74oLcdZvGoy/vvvz8MHz48jV8HrSEw%20UPVaLbf12sx//vOfYMKY8Oc//9m1x1dcccVw0UUXhe22265aVPLrJ4Fmn9dqydar13z4ev2M+oI8%20rfaeqy9oL99uib1IO4hlKRJW3wWRVnf9tvqdEEvfnzaj74JIcWB++1NX+RzWe9fnw3Je7ztC7aAa%20sfb5tbov0DuhfXXV6phNaBh23nlnX9WJRuTqq68ebHIsnHnmmeGggw7yFZVxXFYmbD6fp5xyiq8W%20zvtnz999991w8sknh9/+9rdZbx13OIHy0sMSBbr77rtdWImQ8oILLgjbbrttevfo0aMDfzTaDTfc%20MNhMTjjjjDPCd7/73TSMDnqDwCabbBJmmGGGQoVh+ffXvva1QmEJ1Iq4Weq+5ZZbuimEE044IV3W%20XjgTCtiQwGDUa61MVWszpiHuExPnnntu+P73vx/WW2+9wm22Vjry70ugGvu+of7rMxhtRn1Brdpo%20nf9g1Gut3Fdrj+oLatFqrX+ZdlAmLLmsVq+1cl8rbvUFtYi11r8VdVUtR7XqtVpY/KrlQ31BLVqt%209W9FXdXKUSviVjuoRbe1/tWewVoptKJey8atd0ItYv33P/bYY12YiYLYaaedlkY433zzhQMOOCAc%20c8wxqaJJmbBpRHaA8sqBBx4YppxyymBao9lLfnzttdd6Wv/617/Chx9+2Oe6PDqbQFs3BaLh4Lbf%20fvsKYWYWCULNrF3EOKNy3HHHhTFjxoR33nknG9yP99lnn7Dvvvv6MQ0dIRQOjTvuQbKO++c//+nn%20aFzdd999Ya+99nJ7naYC63Y1XnjhBQ8X/xVN85ZbbvF40e7D/exnP/Pzxx57LEal3y4igB3P2AZp%20A+rIuqjyWpTVKaaYIpx++ulhjjnmCMzKn3rqqS2KWdF0EwH1Bd1UW+3Jq/qC9nDttljVF3RbjbU+%20v+oLWs+0G2NUO+jGWmt9nvVOaD1TYjTzFL5il+P999+fn9R973vfCzx/jz/+eDDzgqXCppHYwccf%20fxy+/vWvh6mmmiqVGWWvc2yrnAMrtkaNGuV7Kkw66aT5IDrvYAJtE2gyo4XgDxeFj7U4oGaMEe7X%20XnvNjcESDiEkQoUo4Mze+4tf/MKFD/ih1XnxxRf75Zdfftnv4V4cAkviIH02H/r5z38ebrvttnDN%20NdeEww8/PCy99NIB1eXoiqaJwVriffrpp/3WP/7xj37OMnq57iRAGxwxYoR3lrFeu7MkynWzBDA1%20sOuuu/rtzOTJDU0C6guGZr1nS62+IEtj6B6rLxi6dR9Lrr4gkhjav2oHQ7v+Y+n1TogkWvf73HPP%20+dh7ttlm86Xl2ZgRZrIxEA4ZS5mw2XhsjxWXL/36178OM800U/ZSerzBBhu44BThKX/rr79+ek0H%20nU+gbUvOUdlF2o1q7xe/+MW6JLBhsvjii/tulmhVYseuqGNZO/egqk4c2DwwI7IVtyMonXvuucOF%20F14Yll9+eRd0Ys/TjJO6CjOanfl7KiLIneywww6+JBVtUHbpY5kq8c4555y5kDqFwCWXXOLtIE8D%20VXIEzVlHXZ5//vlZr/R4s80289mV1MMOysSdvS9/bMaevSOlE6PTXGyxxfJBdN4PAu2s17Jx1yvG%20Qgst5Jc1OVGPUvPXyjyvZeu1TNz1SqC+oB6d/l9rZ72WjbteadQX1KPT/2tl6qpMWHKmvqD/9TNQ%20MZSpqzLtoEzYRmVVX9CIUP+ul62rdrWZRqVQO2hEqH/X21mvZeKuVwp9H9aj09w1ZDQ4VshVc7PP%20Prt7Ey7KaoqEjXGhXMfKXTQ0MWl36aWXxkv67SECbRNoPvvss46pVqPLM0TgiEO4WMYtuOCCLtnn%20HrQ8F1544aq3X3311algFUHalVdeGbDBgeACQafttF71vmqebHDDH6rLOPJeK91q9w81v1qb/Hzj%20G9/oI9C84YYbahrsXWWVVVLmkWGZuOM9tX6ZHUKg+corr9QKIv8mCbSzXsvGXa8ItAGc2kA9Ss1f%20K/O8lq3XMnE3KoH6gkaEmr/eznotG3e9UqgvqEen/9fK1FWZsORMfUH/62egYihTV2XaQZmwjcqq%20vqARof5dL1tX7WozjUqhdtCIUP+ut7Ney8TdqBT6PmxEqNz1zz77zG+otcQbLU0cS9PLhOUeNo1G%20CY06kykxiPSua5tAMwr7qhlerYYz2sqstRt2tXuK+qE9mdcSnXjiiX1HLWxwsrN1GYFm0XQV7r8E%20WN7Pcu68q6YFiXbupptumg/q59NPP30f/zJx97k55zFu3Dj3ibNBucs67QeBdtZr2bjrFUNtoB6d%20/l8r87yWrdcycTcqidpBI0LNX29nvZaNu14p1Abq0en/tTJ1VSYsOVNf0P/6GagYytRVmXZQJmyj%20sqovaESof9fL1lW72kyjUqgdNCLUv+vtrNcycTcqhdpBI0Llrk+YMKHuDZ9++qlfHzZsWCgTlpsQ%20ZGN+kA1/UHqT610CbRNoRo1F7FpiB5Nl5fUcS9RxUaW/Xtiy1+add96qt2D4FffMM8/4r/61hwBG%20fYvucv7lL3857LfffoUzUibuRpFicBgX20Wj8LpenEA767Vs3PVyjX0WnNqAY2j5vzLPa9l6LRN3%20o4KpL2hEqPnr7azXsnHXK4X6gnp0+n+tTF2VCUvO1Bf0v34GKoYydVWmHZQJ26is6gsaEerf9bJ1%201a4206gUageNCPXvejvrtUzcjUqh78NGhMpdj8vIx48fX/XGuJcKy/3LhL388st9P5Ztt902rLTS%20SuHdd9/1+OPGv2wUhB/x1tIOrZoheXYkgbZtCoSWGxp12NGMm/TUIoCGZNwhPK9Jmb+HBhil9flr%20tc7feuutqpei9ug000xT9Xr0bCbNeK9+u4PAX/7yl/Dmm28GNHdrCcC7oyTKZX8IYGcHt8ACC/Qn%20Gt3bxQTUF3Rx5bUw6+oLWgizS6NSX9ClFdfibKsvaDHQLo1O7aBLK66F2dY7oYUwP48qrorE5CAy%20o7yLexoQrkzY22+/3aP6zW9+E6aeeur0b8cdd3T/4447zv3OPPPMfJI670ICbRNowuIHP/iBIznp%20pJNCFB7mGaE+fMQRR7g3m75EYVKUlueFkY888khDleN8GnfeeWeoJvm/8cYbPej888/vv61MM58H%20nXcuAdoGO6DhsLVBxyc39Aj87ne/C3fddZfP1O22225DD4BK7O8J9QVqCOoL1Ab0XaA2AAH1BWoH%20agdqAxDQO6E97WCuueby/THQxETBLeteffVV31uF5eaLLLKIb96LScMiYZdddlnfBIiNgLJ/cdd0%204sM/yp2y6eq4+wi0VaC51157uTQdqfuqq67aZ6MN1H632mqrwIY9k0wySUBaHl00vpzdjYrwBx10%20UAyS/tLQcVGNOL3w+QGad/vuu2+FIPTmm28Ol112WeDebbbZxkOWSZMbGqX7efL66VACzATdcccd%20Ye211w733nuvq7IfeeSRHZpbZatdBDAafcIJJ4Ttt9/ek8CeLhuHyQ0dAuoLhk5d1yup+oJ6dIbG%20NfUFQ6OeG5VSfUEjQkPjutrB0KjneqXUO6Eenf5fQ/6z/vrre0R5WQ3nbAQ0evToMMsss7isqGhY%20lppfccUVff4OPvhgT2vrrbf2azG+/pdEMQwmgbbZ0KRQ2M286qqrwhZbbBEeeOCBMM8884Rlllkm%20LLnkkgGbmWhDsRkQGnHnnntuhf3MTTbZJKDajfYmwkd2M//rX/8akNZHGwoRHI0ch1BqhRVWCNhj%20+cUvfhEv++/pp58eUD9eeeWVw0svvRSuu+463zFrp512CosvvriHKZMmN8w666x+38477+wzBwhk%20l1tuOffTv84jcPHFF4eolcsLiraEsBvHTvW0wZEjR3ZexpWjlhLAlgqmBXBMgmAXKRqa3n333QMa%205XK9TUB9QW/Xb9HSqS8oSqp3w6kv6N26LVMy9QVlaPVuWLWD3q3boiXTO6EoqdaFO/roo11edMst%20t4Q555wzrLbaauGee+7xPU5QHjvxxBPTxMqETW/SQc8TaKtAE3oIF1EhHjNmjAsRESpGuwaoDa+7%207rrhtNNO62OzDiEhy8t/9atfhZtuusn/EIhec801viw4CqJIY6aZZgr777+/h0VI+sEHH+CdOpay%20o3151llnhYcfftj9Z5xxxoCU/pBDDknDlUmTmxB+8PA9/vjjrn36yiuvpHHp4H8EovDofz61j8qE%20JZYy4dmZLu5Ox31o4aE5TBvde++9XeW9ds50pT8EytQT6ZQJXyYscT/xxBP8uJtuuul8EoSlB2hq%20r7XWWvGSfttAoExdlQlLVsuEV1/QhsotGGWZeipbr2XjVl9QsNLaEKxMXZUJW7bNqC9oQ+WWiLJM%203bYrLNlVX1Ci0loctEy9knSZ8GXCErfaARQGx5WpqzJhKU2Z8HonDHz9syH0DTfcEDD3hewn2qtF%202eiUU05xAWfMVZmw8Z7sLxqhuPibvZY9bnQ9G1bHg09gmGmq9bXAWiVfcXl1vFTwthg8/X3hhRfC%20o48+6tqaaF1ONFH9Ve/sQMULBol91IhMI2twgBbmeuut54IKjMJicwHjstNOO20Y9fkO59Wi6E+a%201eLrNT+EuMyeyA1dAi+//LLbk9HmOUO3DVBy9QVDu/4p/dixY/1v0UUXFYwhTEB9wRCu/M+Ljs17%20VjywCktu6BJg34Kll146DB8+fOhCGOIlZ7zNWB87hnJDl8B9993nK1hHjBhRGALvkWeffdblPiis%201XNlwtaLR9faQ2DjjTd2s5IxdlZtb7TRRvG0pb9t19DM5xbjr/wVdWhxsky9FY4l8EU+tFqZZivy%20rThEQAREQAREQAREQAREQAREQAREQAREoBcJoHS21FJLFSpambCFIlSgriVQXz2ya4uljIuACIiA%20CIiACIiACIiACIiACIiACIiACIiACPQigZ4WaKLiPM000/jmRL1YeSqTCIiACIiACIiACIiACIiA%20CIiACIiACIiACAw1AgO+5HwgAbNbHfYV5ERABERABERABERABERABERABERABERABERABHqDQE9r%20aPZGFakUIiACIiACIiACIiACIiACIiACIiACIiACIiACkYAEmpGEfkVABERABERABERABERABERA%20BERABERABERABDqegASaHV9FyqAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEAkIIFmJKFfERAB%20ERABERABERABERABERABERABERABERCBjicggWbHV5EyKAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi%20IAIiEAlIoBlJ6FcEREAEREAEREAEREAEREAEREAEREAEREAERKDjCUzSbA6ffPLJZm/VfV1OYPz4%208UH13+WV2M/sv/322+Hjjz8OSZL0Mybd3s0E1Bd0c+21Ju/vvfde4E/vhNbw7NZY1Bd0a821Lt8f%20fPBBGDdunPqC1iHtypjeeeed8PTTT4eJJ564K/OvTPefAOODt956S31B/1F2dQy0gWeffTYMHz68%20q8uhzDdHgLFB1n344YfZ05YeNy3QnGqqqVqaEUXWPQT4SFH9d099tSOnfKwMGzZM7aAdcLsoTvUF%20XVRZbcrqhAkTfHJD74Q2Ae6SaNUXdElFtTGbfBO8++67+i5oI+NuiHrSSScNI0aMCPzKDU0CH330%20kde/vguGZv3HUse+YPLJJ49e+h1CBCaZpFLMONFE7VsYXplSCcizzTZbidAK2ksE0MRR/fdSjZYv%20C5qZaOSoHZRn10t3qC/opdpsrix8sCDUVF/QHL9euUt9Qa/UZPPlQBtH3wXN8+uVO5977rkw66yz%20SiurVyq0iXK8//77YezYsfouaIJdL93y0ksvhZlnntknOHqpXCpLMQJ5QXY7NXXbJyotVlaFEgER%20EAEREAEREAEREAEREAEREAEREAEREAEREIHCBCTQLIxKAUVABERABERABERABERABERABERABERA%20BERABAabgASag10DSl8EREAEREAEREAEREAEREAEREAEREAEREAERKAwAQk0C6NSQBEQAREQAREQ%20AREQAREQAREQAREQAREQAREQgcEmIIHmYNeA0hcBERABERABERABERABERABERABERABERABEShM%20QALNwqgUUAREQAREQAREQAREQAREQAREQAREQAREQAREYLAJSKA52DWg9EVABERABERABERABERA%20BERABERABERABERABAoTkECzMCoFFAEREAEREAEREAEREAEREAEREAEREAEREAERGGwCEmgOdg0o%20fREQAREQAREQAREQAREQAREQAREQAREQAREQgcIEJNAsjEoBRUAEREAEREAEREAEREAEREAEREAE%20REAEREAEBpuABJqDXQNKXwRyBMaNGxfGjh2b89WpCIiACIiACIiACIiACIiACIiACIiACIgABCTQ%20zLSD7bffPiy//PJhwQUXDGeeeWbmig7LErjooovCsGHDwnnnnVf21paFv/jiiyvyUCZPW221ld+L%20cLHV7vXXXw+33npreO211yqifuyxx8Iqq6wSZppppjDvvPOm1+66666w2Wabhfnnn9/b5hZbbBHu%20vffe9HrRA9r1qFGjigZXuDYRqFX//U2unW22v3nrlPvzfUKn5Ev5GJoE1BcMzXrPl7od7YDvCb7B%20xowZk09O5xkCeidkYOhw0AmoLxj0KuiIDDDGu/vuu1uaF40RWopTkXUYAQk0P6+QW265JfBh8+1v%20fztMNdVU4cADDwxvvPFGh1VX92VnookGr4lNmDChKrDBzBMZuv7668Nqq60W/vSnP1Xk7/jjjw+3%203XZb2GmnncLRRx/t16699tqw8sorh6uuuiqMHDkyTDnllOGKK65wwft1111XcX+jk1o8Gt2n660l%20UKv+W5uKYqtGQM9ANSryGywC6gsGi3xnpat2MHj1oXfC4LFXyn0JqC/oy2Qo+my33XYBAaScCIhA%20MQKDJ20qlr8BC3XQQQeFhRZaKHzzm98Me+21V0Az75hjjhmw9HstIbRdP/nkk/CNb3yjY4rWiXnK%20wnnwwQfDtNNO69rBtEHcEUccET777LNw++23h5tuuin8/e9/D5dcckngI/yoo47K3q5jERABERAB%20ERABERABERABERABERABERgSBCTQtGpG++3OO+8MO++8c5h44onD1ltvHWabbbZw9tlnh3feeWdI%20NIRWF/KGG27w5dNRC/G3v/1tWGGFFcIDDzwQ9thjDxcejxgxwjUN0UrEcY0w+++/f5/snHzyyX4t%20quA/8sgjgaXXc8wxR5hiiil8mTbnL730Up97o0c+T/i///77Ye+99w5LLLFE+MIXvhAWXnjh8POf%20/zwkSRJvK/y7/vrrexvK34DW7xprrOHea6+9tgspOUFgTnlPOeUU/33qqafCe++958fkCffuu++G%20SSaZJCy99NJ+zj/MIuA++OAD/+3kf0WYkP911lkn7LfffgGNVI4R7M4333w+ufDhhx9WFJG633TT%20Tb3u55prrvD1r3893H///WmYX//6187we9/7XurHAYJgeEdhMXFsu+224dJLL/W2SprUPxqy//nP%20fyru5aRRuoT5+OOPw8EHHxyWWWYZ16ade+65w7e+9a3wwgsvcDlUq/+HHnrIr/GvSBqtbLNpwm0+%20QCh/7LHHOv9pppkmLLLIImGHHXaoeF7pF6ifJ598siI3b775pvvzHEXXiBMmQ4jr3//+dzjxxBPD%20csstF/bcc894e8VvkbxxQ5k2euONN7qZiNlnn93NPOy6667hmmuu8TxhQmIoOvUF6gto9wPdDsaP%20H+/vX/oDJg2j472y0UYb+TNJf4Ir806g3zjuuOO8r6dPw1wMfVxe449vy4033jjMOeec/l7j3XD+%20+efHbNR9JxRNg28buM4888xhuummC1/72tfCv/71rzSNTjxo1O+W+R4swqnV74Qi37SRO23tgAMO%20CKNHjw60lVVXXTX8+c9/Dmhh7bLLLjHYkPtVX6C+4LLLLvM+mH4y6xjr0WdjKgxX5nlr1B8UHSNc%20ffXVnoff/e53ruy0wAILeP+65ppr+orObH45bvRdSphGY4Q4TnnxxRfDq6++6ulnzYYUSaMbxwiw%20kROBfhEwwU0hZ4kg4Un/Ct30eSB7QBMTEiQmiElMaJhccMEFyUcffZRGYdpniQkfkr/97W+JPcDJ%20j3/84+QrX/lKcscddySHHHJIYgICD2vCjsQGvR5XvPn5559PTIst2WSTTZIVV1wx2W233RLr+OLl%209LdePF/+8pcTszWU2OA3DW9Lfr2sP/vZz1I/HfyXwM0339wQxYUXXuj8zj33XA9rAkk/N9uQiS3p%209/o1m5DuZ8uoE1ven9hHX2JCpYRzE9ZVpMF99iHo/tbRJ2Zn0uts0UUXTbbZZpvE7EN6XDaoSO/L%205yF/TnpLLbWU32eCh+SrX/1qYi8sP5900kn9l3wVdeTbPlj7BKfdm7DU/cmfDTrSNBdbbLHkJz/5%20ScKvCS4TE6j7sQlAPPw+++zjYWmPNlBKTMCe7L777u536KGH9kmrnocJCBMTsNULUviaCY4TEzw1%20DF+ECZEQzoTTyWSTTZZ88YtfTOxDNxk+fLiX07Sn03RMSzUxAbaHI8zqq6/u7YB2Y9qrHu6tt95K%20zFao32sfIu5HP0H7IZ2Yb5u08DA8+zbY9PqfZ5553I/7zcZpqXQ//fTTxMwD+P2zzDJLsuGGGyaz%20zjqrnxMvbala/cd8Fylbq9tsWsAmD4r0BfZxmay11lrOYcYZZ3TOtHfeJzzHZuvNUz/hhBPczwT9%20FbnhfUFYEx64fxFOhx12mN/z3e9+13+53wTZSb4PKJo3Ei7aRq+88kpvu/QhZlrC/ziefPLJPS+8%20x3rJmc2v5NFHH21YJPUF6gtoJIPRDviOow9YcsklE1s54m3VJg3d7zvf+U7adsu8EzbYYAO/n28G%20EyD6+4s0dtxxxzS+P/7xj94X8F63SRXv/zkm3E9/+lMPV++dUCSN3/zmN/7dwPfDSiut5H0t3xvx%20G4Zv64FyNvmUmCCyYXJF+t2i34MkVoRTq98JRb5pyRvloI6pc5uA9fefmQ9K3we0i15zjN2yY7xa%205VNf0Lt9gU0kJffcc0+tqk/943Nkyi+pHwcm8Pdn5kc/+pH7x3D1xpAxgkb9QdExggk+PQ88u/Sn%20PMemnOLjD/xssjwmmRT5Li0yRqA/j9/HpMkxchNckTQ6bYxgtkATU9RJOelgaBGwSeP0GeKZMQXC%20tgFAE62QIyPZvyI3IZTafPPN0/vihxzxMNjnwcOdccYZHsZmt/2DM6bzl7/8JUHQhLDi//7v/9J4%20bNbG7+NjkWsxfDZ+20QloUONrlY8hEGgwYdG1pkWjcfLQFyukkARIUZecBBfRgh6nnnmmTTCLbfc%200jmb/VL3s9lqP//973+fhjGtCvczTTf3M41GP49CPzxpSwjseAHYDJiHy+chf/7LX/7S46GOowAV%20oSGCj9imWi3QJGM24+jxn3POOZ7P+O9LX/qSC3jiOb820+bCPfKD8AdhHsemSVLogzEbV6cLNCmX%20aTGkWbaZSC8rwmocA1EE2AzWohAQf5tF9WfYZk05dcfkCP0BwmMELlwj/ihgJ1AcvJr2TMqSDw4z%20k+BhESbjiqZrG2D5fQhZ4wucgRuTLaR96qmnenzV6r9oGq1us56hfvwr0heYNpKXf9lll01M89VT%204zkzO8XuzwsPZ1qsXo8IHbIOYQF99HPPPVe4LuLgFe6m8Z2YCRGPMt8HFM0bNzP4atRGaT8Ir+mH%20TEszLQYf52a71++XQDPF4gfZCR88inAu+rwQn/oCKLTfFekLyEUZIUaj561oO6C/YQKM+I488kh/%20NulTTFO84jux6DuB7xXi4l1BHnD0+Qx28bdN/xL6AiZteQ/xrRodAzzS5n3O+wFX7Z1QJA2ERkzG%20kUZWIMAkUZxM60SBZtF+t8j3YBFOMG71O6HoNy3febSJ7JiH7804ySeBZn0lAOqule8E9QUQbb9r%20l0Cz0RiyaH9Q5LsgCjSZjEaYGB2C2qmnntrHIihhFX0PFR0jkA7vjqxcomganTZGkEAztpqh+dsz%20Ak00J3mRo7X28MMP+8cbgggGrPj/4Ac/8BqOAk06DQZ9aNUwS8EgFEEkYRHk2HJQFwqYarprT9Gh%20cI0Z8ZdfftmFEgjC+FDEP6vBViue++67z8OiSZN1aGcRBxpjCJXk/kegyMAlLziIH3957Ss06OCM%20Vi7ONmfycwYK0cV2ZMuq3AuNXlsWXqFRi9AqauXZMm0Pl89D/pw6J+2scIwbEY7GNjTYAk1bDp0K%207RHORe1OBisI/Mu4Thdo8tEaJzliuZidRKMXZ0tQvL6qDdDQrmWQiPZudGhlU78M+Pi15eXxkv8y%20eKW/efbZZyv8qXOEprDGFU3XlpN7OvQpWff000+7lnnUFq02eC2aRqvbbDafzRwX6QsiF7Q2so6J%20h/jMotmDiwIBmOHoe6kLNF9xRTnFwSsz9VmX7wPK5I322aiNwoO2ZmZLssn6MasOuCaBZiWaagLN%20RpyLtoOYkvqCSKJ9v0X6AlKnbhutZIjhWtkOXnnlFX+vM9lA3863HZOlWVf0ncCzzPsmTtDEOPiW%204BlHEGemdPw4TtjEMPza8md/J8SJlmrvhCJpMMgmPd5/ecc3FdeqvS/zYVt1XlRDs2i/W+R7sAgn%20ytfqd0LRb1omOKmHxx9/vAJz7MMk0Cwm0FRfUL+/6bS+oF0CzUZjyKL9AQ9jo++CKNBkhWneoXzB%20c40AMT7L1fra7Ngk9nuNxgiklRdoFk2j08YIEmjmW87QOh9IgeYk9kC2xWH7D9tl9hIKf/jDH4IJ%20YDwdW+IbbLbabSiatpTbHIoZMGGG27Mzrb3olf6aZlawGRW3l4gnu5Bj39JUwIPNeqThTBsq2Idq%20sE4t2Aed2+Vj1/Lo8vHYANcvmVZNDOK/9sHrNhWxRYEtosUXX7ziuk6aI2ACqoobY92YpoL7U59z%20zz232zW1Galgg49gSziDCaRTO5RmWsDtK2L70Dp5t1tiH4tum4RIbKBRkUatExOaeB3TJrOO9mMf%20mQH7KYPpYGLL4dyOps06ur1H8mODn2BCfLfRh31BGPWCM4GrP7vZstA+YtswrRO/hC0sdnrPOmxe%202mvCn1VsleEOP/xw30neBpnBljqH008/PXuLH2OD04RqFf7TTz99sGXvwWZhnX3RdGN7yto7JWJb%20IlPRz1Uk9vlJ2TQ6tc1WKxv9Z3ymstdpt9hIMs1LrzfT4HR7qPZhHi6//HLvu01o73Zu2dALV5RT%20TKfRLpFl8kacjdoobQBH/5F32E8zYWbeW+dVCDTiXLQdqC+oAreLvFrZDvgG5d2BnUybAPU+udp3%20XdF3Au8bbG9nXXxXYQc49gV80+RdEbuJtPGiadiETz6JYAPbPn6d4lG03y3yPViEU7bcrXonxDgb%20fdPSDkz5wu1zx3v45TvBNGuzXjquQ0B9QbH+ptv6gjpVXvVSo+etTH9QZIxAJrB5m3f0r8g42PuA%20fRxwjcYmGiPkKepcBFpHoG0CTToVW1bhA8BqgiFbKh5sxtwFUrE4tuQ2VBNmcp1dyGOnwTlCChwb%20SeQdhqZ5+dF5/POf/wwMlKPLx2O2v/xSXqiBJ36Ug49fudYQQLBRzyGMRHiBsX0M3bNJC4b8bflv%20MG06v/Wvf/2rG9lHAI5gx2yg+m7qCP1iu6iXRryGceZawkDTFo7B+v1rS1yaioPNQ8zWi2+ewuY1%200bEJzvXXXx/MtmAwrbeOHrjEPOd/qzFp1DaobxyTDwi9qzmzu5l6s8FSfHZN69IFlDZDml7noFaa%20sV3QRoqm+/bbb1f0URUJNTgpmsZAtdkG2S112ZZF+sZW8fnN3mzal37KxBGOjb3o0zEUzyZRTGZQ%20F3EQWpSTR2b/okArnud/y+SNe2u1lxgv7zxctYFqFHbEsPr9LwH1BZUtoWgb78a+oLKklWcD0Q4Q%20pEXHZAkT4/l+qdYznn8ncM43azXHtyPvA1zs46qFq+dHO2iUBm0AF/OWja+V3zDZeFtxXLTfLfI9%20WIRTNs+D8U6o9j6gvSOwlutLQH1BJZMibbxb+4LKkv7vrFob4Gqt/jneWYRVDFtkjFArzdjnmiaq%20xggRqH5FYBAJtE2gyQw1DqFidnfafFmzu1LnZ7uzYW2ZevbUtXrwyGtWxkCmru1pk35WoFkrnqhB%20Gu/nlx20EWjasqCst47bTACBHQJNtLTQqMVFDS2Of/jDH7qwnF0i11tvPbzcIeQr49CcQ2hIG6Su%20s85MJGRPCx9XE1rEHa4LR/J5QDOj4EfVNE7jR7mZRigb7YCHbxWThRZayPOO0Ouoo46qKAdafggv%20s32Ima7wXa7NfEEwG7y+SyH1yi6w0dlmQa6FGTWF8Se/DHwZiM4wwwyuTY5/o3RpT7aUxHdIRyM0%20OuJih1M0i/fdd9/oXfFbtGztaLMVGWnDCX00O1jyHKD9lHXxOaO/xqHJYkt0ArtKmikA15Jmggqt%20WVxRTtddd52HbzSoL5M3j7DBP+oHl91NOd6Cxu9Qd+oLhnZfENv/YLQD+hpbYuiTYTynaILbsuFg%20NnZjtvy36DuByUQzcVQxwDa7mT6pynuDyXTcE0884b/Zf7Zs0sOZ6ZxgG8RkL6XH9HWN0kA7CBcn%205tOb7SD2rVm/Tjku0+82+h4swilb7la9E3jXF3G0Nfr+/PuP+2sJbYrE2yth1BcM7b4gtuN8O2h2%203FSmPygyRiB/9KW2+WzMqv+yKhDH8130u5SwGiM4Nv0TgZYT+K/KW8ujDcFsEHqsCBBtl/Oaf2Y/%20K029mlAxXsxfsx2L/VKcBY/h4m8UQsaBcPSvFQ/aonmHVhcuCo/y13XeHgJmqN+X42CqAMEG52hh%20RoeACG3dddddN3q5gNtsa/p50Y/EeL/tIJ7GwwGC1GqDkIpAVU4QYiHIYPlzdAx4zGh0PK34bZTP%20KJxDWw3zCtGhBYYfLi+gj2E65bcsk3r5ZokWmt1nn312YKl9dMyQ2u6urqkaZ6npc8wOb2D5jW1A%20EGyjJxdc77bbbvE2/2U296STTqrwQ/MV4Whcslc0XZZP4zB1kXWco2lou9BmvSsGM0XTaHWbrchQ%20m06iVizLe7Lummuu8YEekxaYlIgOATSaK2PGjPHJpOxkRlFOMa5Gv2Xz1ig+lpojHKffymqD2SYh%20rnHe6P5evq6+4L99w1DuC2jfg9EO0AhEMMYvywLp45k8MTvr4R//+EfFY1fknWAbugSEl7Z7esW9%20p512mpubsI1g/JsFbSIm07LfAGbnOdjGRMHsQ/aZSM1+ExRJg/6GcrA6hcn76CjDT37yk3jacb9l%20+t1G34NFOJUBUCZvReJdZ511PNjxxx+fBqft5Cdl04tD6EB9gfoC2gCOlXfR8XycddZZ8bTUb9H+%20oOgYgcTJS1ZGgGZnNGHFOKHod6nGCKWqUoFFoBwBGzgWchYrayPSv0Y3mcaUh7WZWN/tMR/ePgTd%20IK8JDtJdztmNNu/iZj75jXm22247j5+dcvOODX3YSIL8xg0/asXDxkGEY2OhvDNNLr8WN6zIXx+q%2050WM/+c334gG1LM7ccKP3X/h/6Mf/agC509/+lP355oJHCuusUEI/ptvvnliLxo3rm8aEWl4+1D0%208Pk85M8xyB83/2GnazYa2nPPPRNbtpzGVWZTIBsw+X0mfE0o79577+0bD9igxttjLAS7cpN/s9OY%20fP/73093fa+2yzm7mRPWBPFu3B9D/2yUg59pDMYoC/2aGYbElmoXCtsokGm1JqaF3ShYUpRJ0Y0i%20TjjhBC875aCe2TBqmWWWcT82E8OxMRDPLhuJxTzSf2BkG260A1zc0RY/NnE55ZRTfEMyEzz6rrGm%20vevh+FckXTYmoxzEZ0I4bwMmgPS4SGvs2LEeX636L5JGq9tsWsAmD4r0BTbplLI2jWrf2I12b0t2%20fGMNE2xWpG5C6cQ+cp2jCQf7bMpWhFPcAIKNObIu3weUyVvRNnrsscd63tmNc9ddd/V3y4gRI3xX%20TNrGUN0USH2B+gKexcFoB6YZ78/kzjvvnHYHJth0P96n7DqNK/pOoN+IG/TxLcr7nrh5zumzTHPS%2042PjS555voPZzIJvAlsN4n70E9FVeycUTYN4SYP8sMkF31LxnYh/tY0qYrqt/i26KVCZfpc81vse%20LMqp1e+Eot+0vLN5F1AXJtz0NsA3It+FfGuaULrV1TDo8bEBoE0eNMyH+oLe7QuKbgrENzqbczJm%2053vJJmJ80zieD56ZODYs+rwV6Q+KjhHipkDkgx3HbVI+MbuZ6cbG2Q3finyXFh0j8ODQh9vqvORb%203/qWbzyEX5E0Om2MoE2BqLmh6wZyUyA0YQo5HujsX5GbouAJoUPW2aZAHheDVtv4pSmBpi0p9DgQ%20WmQFDzYz7YIe8mozJ2mytQSaNnvu8ZjR3zQsB2a70P25T66SQBEhRhQcmCaE31zrZWTLxJ1zfGnF%20lGw2zAVB1OMzzzwTvf3XNCqSBRdc0O/jui0hSkzzLjHNvdSPgPk85M8Jg8CbukeIRVz8brbZZgmC%20KM7LCLN5SbJjL/fxhwCEj2jbqKpCoGmzexVp8vGHM21LF1z6yef/aIcIWePLnXg5Nu21xLQ2s0Eb%20HiPQtCUPDcMVCVBUoFmUSS1hkWleVrAjb6YFkwqi4QE3+hgEYTh2OcSfNpd1piXnHwim3Z3Qvhi8%200o4YdGb54letjTdKl7Rs6Z8PUPhAIw/8MWB54IEH0qzUqn8CFEmjlW02zVSTB9U4VYuK9rLhhhtW%20TBbAmX68mjM7ms5uhx12qHa5ISfTgPL7bal7xf3V+oCieSvTRn/1q18lZv83bW9mAzcxMxqep7yQ%20tSKDXXjCpCTtvpFTX6C+gDYy0O2APoD+GEEi79OsM208fybjZHqZd4ItTU9MGyj9duC9YrZ+E1sp%20kiZhmkY+Icu1+D5g4M53gS2xTMPVeicUSYNImOiMk7OkgwDNNAI9TVudkKbT7oOiAk3yUbTfJWy9%2070GuF+HU6ndCmW/af//7374TPe0AIQVC9KuuuirhnDbYa66oQFN9Qe/2BUUFmrT9U0891cdxsY9E%20ucNWoXn/FceGZZ63Rv1B0TFCFGiaPXdXQIn5ow83U3rpRFh8fot8vxcZIxAfY+c4sc94NLoiaXTS%20GEECzVhzQ/O3ZwSafEgibKITMDuWrv205pprpoNaNOJwZ5xxhoeJH5XZaq8liCSMbSDk96Hpg7Ye%20GlpR0MVMuW0Qk0ZVKx60OfnAMDtGaVgOEJqR71782KgoaBMnRYUYTURd+BYGA2gBm52qCg1gs7uS%20lNGqjAny8uVFg0C8v46PNLO9WpGv/saJ4N+WlLnGIceD7YoKNGM+28GEPDBQaNYxeEXohKP+zU5O%20YuYCGkZXJF0GqMTHbGkzrkgarWyzzeSRe8r2BQideTbKTBTUy1sRTvXuz15rVd4eeugh75uIm3YQ%20BRdo7fJOoY/qJVdUoBnLrL4gkij2W6SNd2Nf0CvtgG8G+rQ4oVarVvleQXMTIWdZVzQNBrL9eSeW%20zVc+fBmBZry3Vf0u8RXlFNNu9NuKvDHGMFNELvwwkwLJu+++68maSRJ/H+y0006NstF114sKNGPB%201BdEEo1/i7bxwe4LeCeZ7djGBfo8BM8a47m4kqnwjXUCFmVVK4oo0LTl6R4EQanZzmzYhxd5Zw+V%20MYIEmrVa19DwH0iBZqVRNxtttdJhH/Puu+8Ou+yyixtAt4bt0dvSGLddZJpnfh53AMzbmOMifmyK%20kt+JkmvYwGCXa+wYYfcQx85jpnHndpJMuOl+/KsVD3kx1W431MsmLCb49HuiwW9sFMl1HgHagy07%207pOxWgb2+wTMediMW7oBUfYSthRHjx6d9ap6THuJtmDaYXOV9otB6bxrJn/5OAbivB1M4rPaivxT%20/2YCoFBURdK1CZXC8VVLtEgarWyz1fLQDj/6Z2yitcoV4VQ0rVbkDdtP2FTCxi/vu5g/7ENdeuml%20bjw+vwFZ0fz1Sjj1BeVqMrahend1Y1/QK+3AtPsL9WnVvlfq1Wn2WtE02F29muvk74RW9LuxzEU5%20xfCNfluRN1sV4JsB2nLVYCtJgmn6+6aW2PXGYfNvqDv1BcVbQNE23m19Ac9a3FynOI36IYuyqh/L%20/67mN7X835XKoyLv7MEcI5Dbgw8+2G0vV+a88gz79WYapdJTZyLQoQTaKtCkzIsvvrhv/MBGJmy0%20wg7DvLyiEJMwNkPpfxznnc2I5L3Sc4RaBx10kP9hsJfNWOgQzS5NGiYe1IsHweqOO+7om4jY8lO/%20BSPrfHiYrbcYhX6HIAE2laIt2FxK3dJjmH8wXKfnbzCYDPU01SYGrwUw8cCHoi1RCuzcjhF401oK%20prXp7yV2Na42OTd4OVbKvUxAfUEv127xsqkdFGfV6pAIBcwEiW8ExUaFCEXYPNI00QIbEJk5klYn%20qfhEoCYB9QU10QypC7ZkPpgZqLplzm+iXDewLorAIBNou0Azlg+NlXbuyGzLRwN/zbhtttnGhaLn%20nntu2GeffYKp6gdbShnMwHq6W3sz8eqe7ieAgGLFFVfs2IJ0ev46FpxlbPfddw9mEqOTs9hU3tQm%20msLWsptsAxLX+mfwavZ/XZOc3em/853vVNWyblnCiqhpAuoLmkbXUzeqHfRUdXZEYRAK2NLbwPjC%20lmIH27QkfPWrXw22x4ArUrACTa7zCKgv6Lw6GegcLbHEEq5dbaapBjrptqdnG9UF/uREoFcIDJhA%20s5OBodGJWrXtJuZamrbrbmAWi4GpnAiIQG8SOPTQQ3uzYCrVoBNYffXVA39y3UFAfUF31FO7c6l2%200G7CQzN+xhOs/oorwIYmhe4qtfqC7qqvduQWk3MyO9cOsopTBFpPQALNz5my5BxbN7YTbcCWJvZu%20pppqqtYTV4wiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAJNE5BA83N0LPtg4wY5ERABERABERAB%20ERABERABERABERABERABERCBziUwUedmTTkTAREQAREQAREQAREQAREQAREQAREQAREQAREQgUoC%20EmhW8tCZCIhABxKYMGFCeO6558Inn3zSgblTlkRABAaKgPqCgSLd2emMGzfOd4ru7FwqdyIgAu0m%20oL6g3YQ7P359F3R+HSmHItBOAhJotpOu4m47gcceeyxgLmDMmDGe1kUXXeTn5513XtvTrpfAyJEj%20wyKLLFIvSKlr9957b7j77rtL3dNNgV9//fVw6623htdee61Pto844ogw++yz+458p5xyil+/6667%20wmabbRbmn3/+sOCCC4YtttgiwKhbXK3yUp5Ro0Z1SzGUTxFoOYFazwYJqS9oOe6OjbBWO+Cdv8oq%20q4SZZpopzDvvvGn+e/Gd0CnfMylkHYjAIBBQXxCC+oLg3/jVxkHVvgvGjx/vm/2yqc+cc84ZVlpp%20pXD00UeHDz/8cBBacHNJVhv3aYzQHEvd1fsEJNDs/ToekiWcaKLBbdqfffZZS7lvt912Yauttmpp%20nJ0U2fXXXx9WW2218Kc//akiWy+99FI45phjfIMuNuxaeeWVw7XXXuu/V111VUBwPOWUU4Yrrrgi%20LL/88uG6666ruL9TT2qVl/wOdtvtVGbK19AgUOvZUF8wNOo/lrJWOzj++OPDbbfdFnbaaScfoBJe%2074RITb8i0HsE1Bf8r06H8vdhtXFQte8CVnJtsMEG4ZBDDgmvvvpqWGyxxcLjjz8eDjvssLDeeusF%20tDm7wVUrL/keym2gG+rt/9k7D7CriayPD6JUBUEsiCAWFBELCIi9ATawu6LY66Ki2LuCig10rbsi%20oGJvqCvYPl3bKhZEFLBgwS4qKigiUiTf+R93Ym5ukpvcN7f/53ne9yaTmcnMbyaTmZMzZ5jH0hDg%20pkCl4c67FojAgAEDTP/+/U39+vULdAcmW0wC+BoL4fAJJ5xgBg8erLfGF1f44VqPHj3U74EHHjAH%20HHCAufjii02fPn2KmcVU7zVjxoxU02NiJFAtBNgXVEtN1q0c77zzjllxxRXNqFGj3ISgoVON7wSO%20Z9wq5gEJZBFgX5CFpOY8gsYF+MCFFV/9+vUzjzzyiM4H8X7o0qWL+j/33HOmV69eFcmKc4SKrDZm%20uggESqvGVoQC8halI4AXCLTqunXrZpo3b67LxIYNG5b1dWz69Om6ZLhNmzamcePGupQMS4jx5c3r%20nn32WbPLLruYVVZZxbRo0cLsvffe5qOPPvIGMQiD5WhW0+/+++83W2yxhZkyZYoKxdZff33TtGlT%201eaDlofXYSnCWWedpUIy5Hfbbbc1Tz31lMFXsqOPPtobNPYxBG3IDyZgHTt2VK2SH374QeNDmxB5%20AyO/GzNmjF4788wz9ffLL7/UL40Ib5fXI05cxv70i3WO+jrqqKOybnfMMceYHXbYQf0xsMCEFA7a%20mCjj1KlTzZ577mlOO+009b/uuuvU/9133zXz5s0zyy67rNlss830Gv5BOxNuwYIF+pvk36uvvqoD%20HyxLQT2hvY4dOzYrCeQJy9zXWmsts9JKK2n+UU9e17t3b3PGGWeoxhCOkd4666yjwli71CWsvEgH%20bQ1t37o46SFsHM4Ihy/T11xzjdloo430mYR2a+fOnc0tt9yCy3QkUDACcdpo2LPBvsCYaukL8m0H%20MDeCd8PHH39sfv31Vz0+5ZRTtL2W4p2Ady/GM8gTxgswMXPooYdmjVvi1FtYu893PPPQQw9pvvBu%208zpM/pFfLF+1Lu74y4bnLwmkRYB9QfzxYbX2BXH6qvvuu0/7Lf88KGpcgDaKOYJVbsGvnTMknScs%20WrTInHvuuTo3wJh5zTXXNEcccYT54osvMh6FOHOEOHPSsPLiZpwjZCDnCQn8RcCJ6SSG4/2LGY3B%20qpDACy+8EKtUovKvbaZDhw6OCB8dEVjq+WGHHebGlxeUI7awHLGD6XTq1MkR7UpHbCJqOBEEuuHu%20vfdeR15IjgiyHLGF4uy0005OkyZNnOWWW07DDho0SMPeeeeden7bbbfp+YgRI/RcbG05K6ywgrPr%20rrs6YoNE/eTF5Pz4448aToRNDu6HNt6uXTtnjz32cGQ5s9OoUSP1E61ADRf3X+vWrTUeyiWCMk1P%20BGHqJzYSHbEV6Yhg02nYsKGz6qqrOkuWLMlIWoRqWraRI0c6slxC46GsOBYBoRs2DmM3cIoHImx2%20Pvzww5wpgrFoUWaFEwGk1h8ugLsIqbWMYitTy/jWW285MhHUOkCdgCfKLl/knVNPPVXDij0cRwR0%20zi+//OIMHDhQ/S644IKse0V5PPbYY06DBg20baGOkRe0M9zzH//4hxtVBNtuW0DewV0E4xpOtEfd%20cCgv2jnqVQSFjgzYNX2kd84552i4sPLiogg/HRksaTj8i5OeDZeLM8KdffbZmudmzZo5svTGkS/Y%20bv7+85//IEgiF7cvSJQoA1cUAbFv5siHhpx5Zl/AvgCNJN92IB9i9B2AMQD6aLwPjjvuOG13xX4n%20iDBTxyDo11u1aqXvd/uexnhG7Hy6z0OcPjzsnZDveMaOe+TDrpsPHOA9hjxfddVV6h93/JWRSMTJ%20nDlzHPl4HBGCl2qBwMSJE52FCxfmLCr7gvjvhErrC8SGpfPGG2/kbANx+irM/2z/6p0Hhc0RMK9D%20OMy1ZDNRzcPkyZMdjHtFacaRD2I582UDYG4mpq6038Rcbffdd3dWW201Pceczs4h484RbHmj5qRh%205UWeKm2OIHZAE/G23PlbHQT69u2rzwrGHfgTU3EFK5iJm7LNjP2NG4/hqo9AHCHGPffco433kEMO%20ccSeiULAS0S08tRflgOon2hd6LmdmMATwkV02nghyZcxHRhBKIhJjHeAjkmDfbHkEmjiRTRz5ky9%20J/7tv//+el/kE+7WW2/Vc7yscH84+YrnTlryFWhCYGQHdngxggeeIUzA4GSZtJ7L11c9x79PP/1U%20/fbaay/XD0JYCFq9Li5jb5y0jtMUaCJPojGiZUY9eN24cePU/6abbnK9f/vtNxUUgiMmjxig4Bi8%20LGs3cMQB6gNc0a4g2LQOL2AIopE2Jq5ov1bILpqbNpgKdCG8RFjEgcMAHXkRTV83nGjAqB/SsC6s%20vEGDlTjpxZkYQPiLyTeeq88//9xmxRk9erTm76KLLnL94h7E6QvipsVwlUkgTYEmCIQ9G+wL4vUt%205d4XxMlfVDsQ7XLtm71PS7HfCXgPoF/u3r27fphEXtC/2g9GGMRbV5d3QpgQI9d4xk6aveMl5Mcv%200Iwz/rLliPNLgWYcStUfJk2BJmiFvRPYFxhViIia25SqL0hToGmfmKB5UNC4AOFlBZyO7THehaIE%20+msoGti5p00z169sMKtxt99+e1cwh3mBaIeq/w033JBojmDrI1cfjnwFlbfS5ggUaOZqYdV9vZgC%20TS45l16OLn0CMhDX3cZFy02XB+MOWOp99dVX683uuOMO/cUSACwnFs06Pcc/0bjTpdQw7CwCKiOD%20I/PVV18ZETYa0bB0w2GJF5b3xnEi8NSlwjas3WBn1qxZ6mXzIy8bIy899RPtzMDl4DaNXL8w3Ixl%20cqIBqEFFcGauvfZaI5ql7pIvuxxbvsi5yT344IN6fPjhh7t+QQdxGQfFrWS/CRMmGOxoCyfCRN0w%20CMfwEwEbDmM5hMfyRbQp2NqxDkvOsQQby+J//vlntdUp2qhqmxNLCq0TzWNdKi+vI7c+cU0msGbo%200KE2mBokl6/LxrY190LMg7TSEwGuEaGlwXIWEY67d587d64eYxknHQlUEgH2BRtq/5K0b6m2vqDY%207QDvXjiMXWB+BA7vIthwFq0gg/zYfhXX0urDkRZcrvHMn6Fy/48z/sqdCkOQQPkQYF/w5+ahSd8J%201dQXYNyOuRbMgsBhTieCTZ1PwkwUTJTEdSJM16CYG2IOC4e5HUw3YRm6KNUkniMgjbT6cKSV1vul%202sYFYENXOwSWrZ2isqTFJCDak9D+NZtssknGbe0LBgIiuC233FJtDMLWJOw7wZ4TdqODzRI4TBI+%20+eQTPcYO136HnbHjOAiUvE6Wn+upzQ/uIcsR1M6lNxxe8hBE5uMgNMLkxutatmypNgtlKYa+VGXp%20vNpjwS7d//znP1X4CZsyoh2ou/R54/qP4zL2x6vkc9TXscceq+xEQ9UceOCBWhwMOsSUgdq4FC0R%20HbzkKqdtV7LcLyuo12aqtdMKm6p+Z/1sGFyXL6iuUNyGR3uzbc36xf1NKz0M6E488UTdCR4fAmBQ%20f9q0aWqbFXnBs0ZHApVCgH3BnzWVT99STX1BqdoBJsnYoM7rwBU2Kj/77DO17y0anHo5rT7c3ivX%20eMaGy/UbZ/yVKw1eJ4FyIcC+wLgf+JOON6upL4DQEvsowE4/lEVEG9KImS8DRRbYx5fVUiqMjNNu%20MU+AEgrmgl4nS8bVhjL8br/9dr1k5wN68r9/1s87R8CltPpwpJXW+6WaxgXgQldbBKihWVv1XbTS%20YgMUdI7YfMT7t+mmm+oGJmIvU/MidvtUc/Lkk09WQWbXrl1VKxK/1lnhJtLzO2hRxnFW6zIsLIxE%20BwkusYkKBLP5uLB72nKgXPjSd+SRRxoI4bBJkCwFNhB2YndTGy7s3nEZh8UvpT+45uOgVQnNF/Cx%20wkykc/DBB+ufLHNRjd44aeMrLhwGK1EOWsJwQfVp48qSRzeJoHDuxTwO6pKelzO+vortTyO2M40s%207dcNuMQEghFbpHnkilFI4Z2T3wAAQABJREFUIB0C3jaaJEX2BUlo/bkhmI1Rjn1BpbUDbEyH97ff%20lfM7wc84zvjLXz6ek0ChCfjbadz7leqdwL4gbg3FD5dvG8AdsMs5HASbEGbC4dcKHp955hn1i/MP%208wRsVhvlks4RkFZdxvX+vNQlLS/nchwX+MvKcxIII0ANzTAy9K8TAewmjqXijz76aEbHjQ5TNnxx%20l2mdd955ujO12HZSQYu9qfeFgy9hcNjh2u+gYZaGwz0gSMSudd7luG+++WbWruxx7wfhJJY2WG1Q%20xMNXU3ypw6THLlXD0nIsUcaXxBkzZmjy0DbM5eIyzpVOoa8HfSn27w4YNw/ffPONBg3SJsQu5XD4%20EhvH2XZlmXvjYLd1tFMsKVxLdjWHg0as39n2J7Zu/JeKfp6LM3bJxEAPX60ff/xxd5CGSYDX5EPR%20M84b1gyBXG00CQj2BeG0cnEudV+QK3/hJcu+Uqp2gB3E/eMF5K6c3wn+926c8Vc2cfqQQHoE2Bek%20xzIqJT/ncusLcuUvqmz+a/adAEGz14ktTV2JFHeOgLiYJ2AeKJu4GrFB7yaHeZzYytdVhhtvvLH6%20c47g4uEBCRSdQPbn5aJngTesRgJYSg3hJeyYeN2NN96oy7SgIQaHlwK+fvXp08cNhuVar7zyip7j%206xGWdWE5OJYY22XCuAgNRdgxScPJbnmazOWXX+4mh/zDJla+DvkbPnx4RnTY6pRNNIx3qTwEqLi/%20bEyjyyGwTB+arH7n/ZKGa3EZ+9Mp5jkGAFjajMGAdRByf/vtt/Y049dfxoyLcmJNGGBZPmytWgcN%20W/jBBbGz4by/0ALGl8277747Iz+y86sKmF988UUjm/4YLBts3ry5tj+v8BMatsOGDdMke/Xq5U06%209nGu8sZNKA5nu+QFz5r3i7O1EZRWXuLmmeFqi0CcNuolkqs9si/w0vrrOA7nUvYFcfL3V2kyNUu9%20/va4FO3A9vewSex1+FCED6NYgYLJcz4uV7uPkyYYw0ED0zqMZ2QDOHuqv3HGXxkReEICKRJgXxAN%20sxb6grh9lSUVh4l9J4waNcpG01+M9bHiLu4cAZFgQgTO7v+gJ/87f+SRR3SPCM4RLBX+kkDpCGR+%20vihdPnjnKiMwePBgIztTG9n100ydOtVAeATbmNiQBBqLWGYNh4H/yy+/bGTXcd2cRXbrMyNHjjR2%20gxIIRKE9duaZZ5rzzz9fv4bBhiIEnLC7iS9nabjTTjtNB/s333yzCk07d+5sINCCVqjd1Cef+2A5%20L+yFbrXVVuaDDz7QzWawtN0/EcLmQE8//bRqd2AjJb9bccUVzeTJk5UbXp4DBw40cRn70yrmOeye%20QmCGZc4HHXSQkd3R1Vaof4kEygeH+oaGC0wQWM1Ib35h+0Z2M1fNX2ioot3ATikE5OC83377qX0c%20b5yw49atW6tNSQxUYD8IdfDjjz9qu8LkD20CSwpbtGihbQ92J3v27KnGvOGHwRHqBAJ3u8lU2L38%20/nHL648Xdh6Hs7XZg48AMGeAP2hG2+U5svujaqV6zT2E3Y/+JJCUQJw2ijTjPhvsC4JrIA7nUvYF%20cfJX7u3g9NNP1/ECljBi8w3ZyVM3mIMdbKwewIfMoFUEwTX2p29Qu48KH3UN7zO8u7C5HT724V2J%20sZfVHrVx446/bHj+kkCaBNgXBNOspb4gbl8FUuDinwcFEcTcCAoOUDjA/NL2zxBwYj6H/juuO+ec%20c8xtt91mrrjiCgNlhy5duqh5MHwswhwC5q4KMUdA/uKWN05Z4jxrpRwXxCkDw5BAJAH5WhHLSSIw%20JOj+xYrEQFVJQHaSjlUuWXLtiBahI2r/2m5Ey80RwY8j2pdu/LffftuRianbrsQmpvP3v//dEdsn%20rp8NLIInRzbLcf3FJoojGpV6Li8wDSa7j+q5aELquexMp+diINomo7+ypF39r7rqKtdfdlJ39thj%20Dwf5lMmII527M378eD0XjQw3XJwDedE5sgu7I0IxR4R3ei88PyhrED+xweLIy8sRIZMjGpxZt0B5%205EumpiMadu71OIzdwCkeiGDSEQFizhRlAOCIENAtv+zG51x44YXOnnvu6ciyeze+CLAdMZ7tthUx%20V6DXxo0bp3FF0OyGFRuajmxuk8EVjE866SRHtDbdcHEORHDpiNBZ69j2b8gX8ihLYDKSQJsUrRu3%20LLLjoSOCeUfMCrjhUL4ePXq45/ZABNqxyivGvR1Z4mKjOXHTi8v5lFNO0TZmyyo7tTsiyHRkwqvl%20GjJkiHvvOAdBbTlOPIapHgLor+TDT84CxW2j7Av+7PuqtS+oazsQ7RpHdpbNaG+leCfgHbj77rs7%20MkF23wl4v4st7Iy8xe3Dg9p9XcYzN9xwg4PxlO3rxZa5I5N8PbfjniTjr4xChZyILXBnypQpIVfp%20XSsEMH7DmDaXY1/wJ6E448NK6wvEnr0j2uq5moBej9NXIWDQPChojoCw8qHeQZ9n+z/8iqKKg7lf%20UofxjSguOPKRyE0P5/6+Ls4cIcmcNKi8lTYumDRpkoN3G11tEpCPCe4zg2cQMpVCuXpIWG6S0/m/%20NseMljNdBqg8AtBc9C6ZzlUCGEyG5iXsDAZtdIMlBDKw0SXkCGM354GfCI0Mdgb3OixJRzpYDpyW%20wzJwLIOG1g+0B7G5jExEVOtChD6qGQkD0/k4bBiD8uNrnrWb6U8H927btq2RCZJqH/qv5zrPxThX%20/KTXYaMGjMAmjhNhsdoTBV9bv3HiRYWBFiXsAMH2DrQ5/fZyouIGXYPNU6QJjc+oPML+Dpa7Y2fB%20oE0hgtIull8czrDrirJ62yOWz3/66af6jEaV3V+OpH2BPz7PK5/A7NmzDf7sRm+5ShSnjeZKw3+d%20fYGfiDFxOJeyL4iTv+xSRfuUoh0sXrxYxwnoT61mVXQui3cVecPYA+MOu7TTf/ek4y9/fO85NuzD%20+CzJkk5vfB5XBwHYl8Wu0HFXN7EvKHy9F7svwLwHK9ywoiyOi5O/OOn4w2DDVawMgwkQ/1zSHzbX%20OeY8GCdj7gmtzDDHOcJfZLCKUpR7dC7/ly+PaoVAv379zIQJE9ziikBTNaZdjxQPKNBMEWatJFWN%20QgwsO8YyBCwFFy01rUos1cKSZtjFwvJi2M0S7buc1YwOPGzy4I8MYRwESFhiff311+u9sBN1ubuk%20As1ilgfC6bTrqZj5r6R7VWNfUEn8yyGvSQWaxcwz+4Li0S7nvoDtoDjtgALN4nAu97skFWgWszzs%20C4pDO6lAszi5+usu5557rtrF/8sn+2jAgAGunfzsq/SJQ4ACzTiUqjdMMQWatKFZve2IJUtAAC+u%20f/3rX+5u49ioB5vZYLIOQeaBBx6omoDYmCiXdjLse8Z1sA0qS0n0PrAlUwnCzLhlK1U4fIVNu55K%20VRbelwRIIH8C7AvyZ1dNMdkOqqk2WRYSyJ8A+4L82VVTzGOOOUZXxEWVSUybRF3mNRIggTIiQIFm%20GVUGs1I6AnhxYXdSGH8W+z/m559/NmJP08CQ8mGHHaYG/rGkGULHNB2W5WCzJCzdPu+889JMumbT%20KkQ91SxMFpwEKpgA+4IKrrwUs852kCJMJkUCFUyAfUEFV16KWYeZqqCNR1O8BZMiARIoIgEKNIsI%20m7cqbwL4coudrfFXLIedv/FHRwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkEI/AMvGCMRQJkAAJkAAJ%20kAAJkAAJkAAJkAAJkAAJkAAJkAAJlJ4ABZqlrwPmgARIgARIgARIgARIgARIgARIgARIgARIgARI%20ICYBCjRjgmIwEiABEiABEiABEiABEiABEiABEiABEiABEiCB0hOgQLP0dcAckAAJkAAJkAAJkAAJ%20kAAJkAAJkAAJkAAJkAAJxCRAgWZMUAxGAiSQnMD3339vXnrpJfPdd99lRF533XVN+/btM/yKfdK2%20bVuzwQYbpHbbsLKmdgMmRAIVTCDs+WBfUMGVmkfWg9rBXXfdZerVq2duv/32PFJML0ra74RJkyaZ%20119/Pb0MMiUSqCIC7AuqqDLrUJSgfrIcxgVjxozR99L9999fh9L9FTWovf91lUckQAJ1IUCBZl3o%20MS4JkEAkgWeeecZst9125oknnsgKt8wype1+/vjjj6w81cUjqqx1SZdxSaAaCEQ9H+wLqqGG45Wh%20ltrBQQcdZP72t7/FA8NQJFBjBNgX1FiFhxQ3rJ/kuCAEGL1JgASyCCyb5UMPEiABEigwgRkzZhT4%20DkyeBEigEgiwL6iEWipsHgcMGGD69+9v6tevX9gbMXUSIIGyJsC+oKyrp2iZ47igaKh5IxKoCgKl%20VZGqCoQsBAmQQBCBXr16mSFDhuilSy+91GyxxRZm6tSpeo4vsvvtt19GNFzbZ599zFprrWVWWmkl%20s8MOOxgs+fC63r17mzPOOMM8+eSTBscrrriiWWeddczgwYPN77//7g0a+/iBBx4w22yzjabVsWNH%20c+SRR5offvjBjQ8NG+Qdy0W8btGiRap9utdee5moskIT9LLLLjPdunUzzZs313sNGzbMLF261Jsc%20j0mgaglEPR/sC2qnLwhrB88++6z2i15NfvSb6CfR96LfhHmQQw891Hz99dfuc4KlgLg+ZcoUc8IJ%20J5j111/fNG3a1PTs2dO8/PLLbrikB1HvhP/7v//Te6JP9zu8r5CfM888U3+//PJL8+233+rxSSed%205AafPn26wXujTZs2pl27dubggw82kydPdq/zgASqnUDafQF4FXt8yL6gbq30vvvuC+0n8x0XFOKd%20MGfOHHP44YebDh06mBYtWpgdd9zR3HPPPW7hOUdwUfCABEpHwInpJIeO9y9mNAarQgIvvPBCFZaK%20RUpCQCaVzocffhgZRYSEziqrrKL9xuqrr+5suOGGzltvvaVxRAjprLnmmm78p556ymnUqJGGlcmo%20s9tuuzkyMdVzmai64ZZffnlHJoFOw4YNnc6dOzu77LKL06BBAw13zjnnuOHiHLRu3Vrjie02Z401%201nD22GMPR4Sp6if2PR2x+6nJnHbaaep34403ZiQ7YcIE9RdhqhNVVpQFfacMhpy9995b84/zww47%20LCO9SjxhX1CJtZZunkXQ77z77ruRiUY9H+wLaqcvCGsHd955p/aRt912m7YjEWY6O+20k/q1atVK%20+2a8P9Bvrrzyys57772n4UaMGKF+a6+9trPCCis4u+66qyO219QP74off/wxsl36L8Z5J8jHLn3/%20rLrqqs6SJUsykpCPVs5yyy3njBw5Ut93yC/OkfejjjpKwz7//PNO48aNNQ28v7bffnsH7yD5OOe+%20HzMSraATmfg7IlyuoBwzq4UgMHHiRGfhwoWRSafdF+BmxR4fsi8Ir+L58+c7b7zxRngAuXLvvfeG%209pP5jgvSfCegH0cfbvtxtFlRtNC+G35XXnmllo9zhPBqFvuozq+//hoegFeqmkDfvn3dZwjPzPjx%204wtWXhM3ZftQ29+48Riu+ghQiFF9dZq0RHEEmkhTNnvQzuzWW2/NuIV3sLJ48WJnvfXW03Bjx451%20w0FgCuElJnt4KcJhwIo+6KyzznLDibaL+iGNJM5OXvv16+cOvjFBPeSQQzS9U089VZPD5Bn33Hrr%20rTOSh0AS/m+//bb6B5VVvuJqGKSJcsLh5Y5BEeLKhknqV6n/2BdUas2ll+84Ak3cLej5gD/7gtrq%20C4LagV+gifcA+sfu3bs7EBrAiUa7c/bZZ6s/BslwdvIK4eLMmTPVD//2339/DYf+N4mL+0444IAD%20NH3RLHWT//TTT9VPNC9dPwhXRQPTPcc7oFOnTk6TJk0yhJf4OIb3nGj+uGEr8YACzUqstfTzHEeg%20ibum2RcgvVKMD9kXgHy2iyPQtLH8/ST88x0XpPlOsAJNKFvgQ5R1ENQ2a9ZM+3HRwNcPbJwjWDqZ%20vxRoZvKotbNiCjS55Fx6IToSIIHSEcAusCK8NH369NElhTYnWN6BJevyAjAy8LXeRgatZujQoe65%20aL8Y/M2aNcv1i3sAo+PXX3+9ES1PjQIbbtdee62RCad7Tyx13HLLLc0rr7xisIQQTiam5t///rfZ%20dNNNzSabbKJ+Qf9koq67JP7jH/8wyy67rAbBksirr75aj++4446gaPQjgZokwL6gJqs9q9DoN+Gu%20u+46NT+CYxH4mYsvvtiI9rwRAaCZO3cuvNUNGjRITZXYc7sRT6HeCaJtqbcSDSN7S/Pggw/qMZYm%20hjlZoWDkA5lB/C5durjBdt99dyMf1oxMms1XX33l+vOABGqdQNK+oNjjQ/YFhW+hSccFyFGa7wQs%20fxdNereg8qHNDBw40Pz222/m4YcfVnMonCO4eHhAAiUhQIFmSbDzpiRAApbARx99pIfbbrut9XJ/%20rZ8Ngwvy5dbIknM3DA5kuaHJZ9dy2C/DBNnrWrZsaWQ5u9rMnDdvnl7CoBWCVdjngYPNN0yooyav%20CIfJK+JB6CnL2t0/WYaOyyrI1QP+IwESMPY5t8+9F4n1s2FwjX2Bl1D1HKOO0cdvvvnmGYWS5dtq%20cw2e3naAD1peh/cBXKHeCbIc3ojJFJ3MwpYy3EMPPWRkObyxfbt6+v7hfQA3atQo911g3wtPP/20%20viu85fJF5ykJ1ByBpH1Bsd8J7AsK3yRtn2jHAN47Wj8bxl5L851g72HTxu92222npx9//LH+co6g%20GPiPBEpG4E+VoZLdnjcmARKodQJia0kR+IWU8ISmJBy+hFoXFM5eS/oblhYmznB2sirLiszJJ59s%20YMT89NNPV20chMGX2yiHjYoQbqONNgoM5hemBgaiJwnUCAH2BTVS0TmKiXYAjXZo0PtdObwTIDDF%205nEXXXSRwcYg6N9lGaJuTmffHf5849xuXIeN7yAQDXJ2tUDQNfqRQK0RYF9QazWeXd6k4wKkEDa2%20z049t09QWrafl6X1mgDnCLk5MgQJFJIABZqFpMu0SYAEchLA5A7Oaq94I0ybNk1PxcaO1zu1488/%20/9xAC9Nq9CBhaPXgay8mzthtHQ7LxPv3729Gjx5tZAMU8+ijj6omDjRyohx23RV7UhreOygSW50G%20yw9t+lFp8BoJ1AoB9gW1UtPR5UQ7ePXVV80XX3yhu4B7Q3vfCW+++ab3UirHcd8J0M6H6RMsO58x%20Y4beW+wqR+YB7wO4/fbbT5fPewN/9tlnuiogyoSJNzyPSaAWCMTtCwrBgn1BIagmT7OU4wLkFu8c%20jP+97v3339dT2ZBOfzlH8NLhMQkUn0D25+/i54F3JAESqHICsqFDaAlhj6Z58+ZGNnBwJ4YIDO3I%20YcOGabxevXqFxq/LBWjMDB8+PCMJ2LWUjU7cJSX2orWVdMwxxxjZ/CB0ubm3rFiOBOEl7HJ6neyY%20rsspZbMkrzePSaDqCXifD39h2Rf4iVTveVQ7sP09NCC97vHHH1dNSNlYx6y++ureS6kdx30nwFxJ%207969zWOPPWZkEyM1KwKbyn7nLedmm21mZDdzM2bMGH2H2LDQ8tlqq630nWNXBdhr/CWBaifgfUb8%20ZWVf4CdSnedRbaCU4wLQhiKD1x6zbOxpbr75Zq0Iu/QcJ5wjKBL+I4GSEKCGZkmw86YkUBsEMHmD%20g0APXzmxbNt+bbUEWrRoYc4//3xzxhlnmJ49e6oxb/jdfffdZvLkySr4s5s82Dhp/l5yySVqyxIT%20yg8++MDccsstBpsD+SfTyBvs8kBzCJqZ2MjB64LKOnjwYHPTTTcZ2Z3XTJ061XTt2tXgyy6Wrttl%20i940eEwC1Uog6PlgX1B7fUFQO/C3eZj1wCTy9ttv14mk7JRpYKvsn//8p24OhI9Q2CSoUC7uOwET%20WNi+xLsNG7/5HcqKdxiWp9uNJPAuwB82BUJ8TOSxydE333xjjj/++IzVAv70eE4C1USAfQH7ArTn%20oH7S285LPUeAggPG/0cccYSu3IJWPlaU4b3ktfPMOYK31nhMAkUmEHcLecmW4/2LG4/hqo/ACy+8%20UH2FYokSEfj6668d2Zk8Zxz5kumIQW1H7KFp/yHLrzWOGG53ZKlGRnzRWnFE68btZ2QJhyMTQUeW%20hLvhZAdLp0ePHu65PRBhpCNLxO1prN/WrVs7soO5c9pppzmyHNy973rrreeEtfGrrrpKw4lgNuse%20YWWVZUuOaGq6DEQb1REBrSO7pmelUWkeYZwqrRzMb/4EZLDviBmGnAmEPR/sC2qrLwhqB7KTsfar%20oh3vtiO8Y+SjkSM2JTP6ZrFZ6YYZMWKEXnviiSdcPxw888wz6o/+OolL+k4Q226OTMYdsafm4Dnw%20O5SnVatWmpc+ffq4l0VD35GPYm65RLPTGTJkiCPamW6YSjyQlQvOlClTKjHrzHOKBDDOw7ORy6XZ%20F+BepRwfsi/IrG3ROnfErnCmZ8hZUD+Z77ggzXfCyJEjtY+WD1CObBTq9teYa8hKLWfBggVZJeIc%20IRPJpEmTHDzndLVJQIT+7nMDGeL48eMLBqIeUo4jQ/V/DY8ZLU7SDFNhBF588cWs5bgVVgRmt44E%20oE2CZXIdOnSoY0rZ0b/77jvzyy+/6A7GQZtCZMeouw82HZo5c6aRCW2kXctBgwYZLBeXSZsJWl4Y%20lRMYNsc9YA/UGhSPCl8J19gXVEItFTaPs2fPNvjDMuC0HfuCtIkWLr1C9QWLFy9W7Uz0zVajq3Cl%20+CvlOO+Eb7/91rRt21a19WFXOanDexRj6TZt2iSNWpbh586da2ALNOm7sSwLw0zlTQCrWGBeIe0N%20rtgX5F0lRY+I/hP25qGZnrYrxbgAZYBNZ5QL8x6s4gpynCNkUoGda1Ec0X0IMq/wrBYI9OvXT1eg%202LKKQFM1m+15mr9ccp4mTaZFAiRQZwKrrrqqwV8+DktDRIMzZ1S8ZEVzxg2HDYDkC6x77j/AssAv%20v/zSwL4mBmj5TNiwKRBe7HQkQALxCLAviMepmkPh409d+s1CvBOwcRwmtJdffrnaSD722GPzqoJC%202QHNKzOMRAJlToB9QZlXUJGyV5dxAbJ47rnnqs3+qOwOGDDAteFvw8FucpjjHCGMDP1JoDgEKNAs%20DmfehQRIoAgEWrZsqQOVXBrkzZo1i52bn3/+2bRv316/zEJDAPbV6EiABMqbAPuC8q6fYuWuEO3g%20zDPPNLJMXjWTt9xyS7PbbrsVqzi8DwmQQJ4E2BfkCa7KomFjT78NfH8RV1ttNb9X6DnnCKFoeIEE%20ikaAAs2ioeaNSIAECk1AbHUaTDDTdNCsxG7lEJL279/f7Lzzzmkmz7RIgAQKQIB9QQGgVmCShWgH%20WE6Lzd2w9PC8886rQCrMMgnUHgH2BbVX50ElxmaE/g0Jg8LF9eMcIS4phiOBwhGgQLNwbJkyCZBA%20FRBo1KiReeihh6qgJCwCCZBAXQiwL6gLveqJe9BBBxn80ZEACdQ2AfYFtV3/KD3HBWwDJFB6AsuU%20PgvMAQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnEI0CBZjxODEUCJEACJEACJEACJEACJEAC%20JEACJEACJEACJFAGBCjQLINKYBZIgARIgARIgARIgARIgARIgARIgARIgARIgATiEaBAMx4nhiIB%20EiABEiABEiABEiABEiABEiABEiABEiABEigDAhRolkElMAskQAIkQAIkQAIkQAIkQAIkQAIkQAIk%20QAIkQALxCFCgGY8TQ5EACZAACZAACZAACZAACZAACZAACZAACZAACZQBAQo0y6ASmAUSIAESIAES%20IAESIAESIAESIAESIAESIAESIIF4BCjQjMeJoUiABEiABEiABEiABEiABEiABEiABEiABEiABMqA%20AAWaZVAJzAIJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEA8AhRoxuPEUCRAAiRAAiRAAiRAAiRA%20AiRAAiRAAiRAAiRAAmVAgALNMqgEZoEESIAESIAESIAESIAESIAESIAESIAESIAESCAeAQo043Fi%20KBIgARIgARIgARIgARIgARIgARIgARIgARIggTIgQIFmGVQCs0ACJEACJEACJEACJEACJEACJEAC%20JEACJEACJBCPAAWa8TgxFAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQBkQoECzDCqBWSABEiAB%20EiABEiABEiABEiABEiABEiABEiABEohHgALNeJwYigRIgARIgARIgARIgARIgARIgARIgARIgARI%20oAwIUKBZBpXALJAACZAACZAACZAACZAACZAACZAACZAACZAACcQjQIFmPE4MRQIkQAIkQAIkQAIk%20QAIkQAIkQAIkQAIkQAIkUAYEKNAsg0pgFkiABEiABEiABEiABEiABEiABEiABEiABEiABOIRWDZe%20sOxQPXv2zPakT00Q+OWXX0yzZs1qoqwsZDCBRYsWmaVLl5pGjRoFB6BvTRBgX1AT1RxZyMWLFxv8%20NWnSJDIcL1Y3AfYF1V2/cUq3ZMkSs3DhQtO0adM4wRmmSgnMmzdP28Ayy1BnpkqrOGex/vjjD7Ng%20wQKz/PLL5wzLANVL4NdffzWNGzc29evXr95CsmShBGbMmJFx7b333jN9+/bN8EvrJG+B5uuvv55W%20HpgOCZAACZAACZAACZAACZAACZAACZAACZAACZBAFRGAgLtQjp/PCkWW6ZIACZAACZAACZAACZAA%20CZAACZAACZAACZAACaROgALN1JEyQRIgARIgARIgARIgARIgARIgARIgARIgARIggUIRiL3kfPTo%200Rl56Ny5c8Y5T2qHwPz582kjqXaqO7CksJkHG5oNGzYMvE7P2iDAvqA26jmqlLCbhz/a042iVP3X%202BdUfx3nKiH6AYwNYDONrnYJoC9AG6ANzdptA7ChCXu6tK1du20AJYcd1QYNGtCGZo02gy+++MLA%20vrp1vXr1soep/9ZzxKWeKhMkARIgARIgARIgARIgARIgARIgARIgARIgARIggQIQ4JLzAkBlkiRA%20AiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAoUhQIFmYbgyVRIgARIgARIgARIgARIgARIgARIgARIg%20ARIggQIQiG1DswD3ZpIkULEEfvzxR7UhufLKK1dsGZjx4hCYPXu2+fjjj823335rVlttNbPWWmvp%20b3HuzrukTaDUzz5s1H3yySfm008/1aK1b9/erL322rRnm3ZFMz0SIAESIAESIAESIAESIIGyJhBL%20Q/OHH35Qw74w7hv3b7/99otd8KOOOkrTHTFiROw4xx9/vMYZOnRo7DhJAn711VfmjDPOMH369DHY%20AGn33Xc3l1xyiZk7d26SZDLCfvPNN+acc84xu+66q9loo43MXnvtZS6//HLz+++/Z4TL52TYsGHK%20o2fPnjmjr7TSShr2gQceyBk2KsBtt92m6cRpEzNmzNCkMPmOE/6QQw7R8PncIywOhI/gg7RvuOEG%20s2jRoqjiBV67/fbbzZZbbmlWWWUV/fvggw8CwxXC89///rfLDkINuO+++871gxHuMD+9kONfGLeg%20+rL1mSPJqrn8r3/9SzkffPDBscv02muvmd12203bCdrMPvvso22ndevWBoaRJ06cGDstBiw9gVI+%20+yg9jKujn2/btq3ZYIMNtG2hfXXq1MmgTeH9hM0Y6DIJ/PbbbwZ/NBeeyYVnJEACJEACJEACJEAC%20JFDpBGJpaGIigMlUEvfzzz/HDo7JBtLHDolxHYRRiGMFO3HjxQn3n//8x0Ag6xVevvvuu+aJJ54w%201157rYGgokOHDnGScsM8/PDD5sgjjzReLtOnTzcQUt111136u+6667rhkx6AHXh48xyWBsLh79df%20fw0LEssfglikE8dhR2w4e+9ccaywMZ97hMXBvSGcf/3115X59ddfr/UJYXUcB027gQMHqgAawtFW%20rVoVdRdHCCz9vNH+rZ+dsAf5xSlfGLeguLY+g65Vo59l731+o8r50ksvmZ133lnbSv369U3Xrl11%20p79JkyapIB19zH//+1/zwgsvmC222CIqKV4rAwLl8OwfcMABZvz48UoDAkwINaH5i10E58yZYy68%208ELz5ptvmkcffdTUq1evDKiVRxaWX355FWbOnDlTtaPLI1fMBQmQAAmQAAmQAAmQAAmQQF0JxNLQ%20hOAG2677/9ZZZx29P7QO/dcee+yxuuatJPEh1Dn66KNVMNitWzfz/PPPm6lTp6omJTQbf/rpJ3P4%204YcnyhsmnIgDYcjWW2+taX700Udm9OjRpnnz5ua9995TbdBEiZZR4BVXXDGr/v3tYf3118/I8ZVX%20XhkZZ+zYsRnh87mHPw60bp955hmtyxVWWEGFAXvssYcKODNuFnLy0EMPqYAKS4ahGYl6W2+99UJC%20V663n5u/LnHur8/KLW1hct6/f39tKxBkfvbZZ+aNN94wL7/8ssFyZQic2rRpo4JNCKmsILowOWGq%20aRAo9bM/ZswYFWZCUAlt4S+//NJAKP75558bfGzDigU4vHdvvfXWNIrMNEiABEiABEiABEiABEiA%20BEigrAnE0tDEJAoCIL+D5hFcw4YNA6/7w1fCOTRgIIBo0aKFThibNWum2cYScWgNXnTRRSoAg1Yp%20luLGcf/4xz/MvHnzzBprrKECtUaNGmk0aGRCKLzDDjuokOOtt95STa44aZZbmKD2EZXHfNpM0nvg%20/t44OIYgCct9oYGL5ZoQLB977LFm8uTJZtllox8H1Dlcly5dql4DystNC81/sQl8+OGHZtasWRr+%20n//8pz73NjK0xfbcc0/9kIHnHoIpLN/v2LGjDcLfMiRQ6mcfmrxw0Pr9+9//rsf2H5ac33TTTfqB%20BeHw0QZmXOhIgARIgARIgARIgARIgARIoJoJxNLQzAcABHjXXXedCo8wWcemBZtvvrk577zzDJbv%20hTlMxrA0e9NNNzWbbLKJOeaYY1TrJCy83x9Cx2uuucbsvffeBgJDCK2uuuoq1WTxhw06f+edd9Qb%209i2tMNOGs3ZBsfwU2n5x3dtvv61BYbvRCjNt3O23317LifMnn3zSepf8d8KECQY246rVoW1ceuml%20Wjxo4EZpFEPQfNhhhxnYmITDsk6cn3baaXpu/0ELb/DgwWbbbbfVtoc2hHv4zQDgfogPQTfc/fff%20rxq8aO+V6BYuXKhlgbYhnnU851ia//TTT2cVJ6rs0DYDFzCDAAm/u+yyi5p3+Nvf/mbQJuEQ7qyz%20zlJ7qNCQhZAnzB5s0v4A7QAa2qgLmJXAM//cc89llSPKA0Jy68I+eqCNbLzxxirshKav1yXNM/pT%20fGiBbV5oD/fo0cMMGTJENcJPP/10ZYqPNHBff/21trWTTz5Zz/3/brzxRg3/1FNPZVyKmydvHcIU%20whVXXKH2h/HhBh8SYDM4zLQIOJ9wwgnafvB87rTTThofGsF+Fzc/iAetWNie3GabbZSPtYkMUx/W%207qw/fXteLs++bVNh7Qn5PfTQQ7U9oY6tS1rfUc8n0rz44ovd9oRNiXCOtjxy5Eh7S9VGjtMP2gho%20v8OHD3ff2dCahxYq8o7+4Oyzz7ZB9Tfu2AL9M+JbDWj7LLzyyisZ6aE/t+0OHy6h7QoTMX5Xl3bk%20T4vnJEACJEACJEACJEACJEACKRCQwX7eToQJjmTBkclzRhpiz8uRSaNew3X/nwg9HLHf6MaR5Zka%20Ria9zjLLLJMVHvFlguTIRNiNIxooGk4EpK6fTLCczTbbLDC+2BxzZAMXN2zYgUzkHRE0OTLpyQoi%20WjCadrt27bKuRXmIYETjibZWYDARuup10RQMvB7HE3UATrIUOGfwxo0ba1hZxhgaVuz6OQ0aNAi9%20jgsoD+4pS5Qjw3kvymY6GkdskXq9Q4/zuUfcOCLMcERrVvMjwrPQPNxxxx0axt+O11xzTTfOZZdd%205oiGZ2g4sdvphhVbrBqud+/ejgjf3ThNmzZ1wwQdjBs3zg0rAh0NIhp+rp/Yzgz1C0rP7xeXmzee%20aCM68vHBzYOf0aBBgxybL8SLKvurr76q6aAfkE10stJEe5TltG6d+e8lQhBv1pwk/QH6lhNPPDHr%20nvYeImDTa3379s24R9CJaGe66aCOZTOwoGCBfknyjAREGOPIJjHu/Wx+8Wv7HRwjHJxlLLut67n/%2037777qtpyQZt7qUkebLpo/9H2b35sccisHLTxoHYY3UuuOACR1YCBIZH+US45cZJkh/UhZeDzYP9%20lY9nbrpBB+Xy7B933HHKRjTbHRHEBmU10M/WR9z6jno+cQMRlms+xPazI8Jzt75EIKn3T9IPIgL6%20Dzzvtj68vyLQVn+MM6xLMraQVRaB6d5yyy02Oefqq692lltuucBwp556qhuuru3ITYgHJEACJEAC%20JEACJEACJEACqRGA9kLeLkygKbuD6wRh1VVXdUTLzxHtEkc2Y1EBmBX6iPaWe18r0MRkpmXLls6d%20d97piKaPIxpvjmg1upMNCDOsCxJoiqaIhsVk+tlnn3XEzqEjNjBdIefqq6/uiI1Mm0SsXwiMMCmU%20DRccTCYx6ZYdsmPFtYFkp3TNF4SyQQ4CXpRdtNGCLsfyK6VAExNC1FXYn2hquWWwAk1MFsPCf/LJ%20J254K2RLcg8bJ46g1U6aRZPHvaf/AAIptFcInFFPYgdVz2XjFw0qZgrUH9dES07LhTiieelAkAB/%20CE5F61DDW6EB8idmG7TNQ5gmWk7+W2ecF0ugGZc1BFFiZ1bLJ0vUHQgKxF6sI1rOjtiMdZnI5ktu%20OaLKboUv4AXhJYS9EF4hPdGcctNDHyF2e51p06Y5olHmPt+i8ejeBwdJ+gP0Lbgv/kRDUwWAotWo%20wiOxIexeiyPQxL1lR3M3jmhla7tAeVBGK4xGOL9LkmcIiq0wCO3swQcfdGx/NWDAAPf+KFNdBJpJ%208uStQ/T1Q4cOdWRJvSOajs4RRxzh5mnKlClu0cU+pesvWobKSDa70X5W7BbrNTxX1iXJDz5UoPzg%20Ixrwjmh76rtFtPXce4qGrE0667dcnn3ZiM4R7Uw3z6j3k046SevcK+z1F8DWR1KBZljfZAWa9plA%20/4k6xrOYtB/EByXbfiG0FtuyKrh+8cUXnZ49e7pl9Qo0k4wtRONX+2n7XGMsgn4czwic2CDVe6AP%20hkAdbU42DnLQZtD/IJ5919e1HfnrheckQAIkQAIkQAIkQAIkQAJ1J1AQgWb37t11MjBq1KisHNqJ%20CrQgrbMCTQgLvRNde91Oztu3b+9qafoFmnZSLLtPO7KEzUbVX0xioVWJCcrdd9+dcS3XyYYbbqjx%207KQIE+Gkzk7CxH6eAyGJ1yE/Nm0IYvN1pRRo2vyH/UKgYZ0VaIaFhf+BBx5og7taoFHhcc17jyQC%20TQhQEB9CklwOWmsICy02r7MCaVlSq9pm3muYJEMQjniy3FYvWaEe/FDnUQIJb1rFEmgiX1F/lvV9%20993nhpMdu71Z1WMIBpEOhFKyTDRn2a3wBXFuvvnmjPTs841r0ALzOgiq4A/O1tnwcfoDCFbQtyAN%209DV+B4GX/RATV6Apy/AdaKdabWikbf8g/BU7mipc8d4rSZ4RzwphIZB5//33vUnp8UEHHeTeM1+B%20ZtI8eetQlnln5AkfNiAoAwdoPsJBKC42INUP7wG/gzAc4SFkl03VnKT5EVMFGr9fv37+pB0x96Ef%20E/DhIZcr9bOP/Il9TEdMIWh5bFuyv3hP4aMbPhx6na2PpAJNpBvUN1mBJq57P1Tgnkn7QQjgkQ6E%20h/73IlZwWO15r0Az6dgC+bKavxBWeh3Kh/v7V5ggjJjL0Wv23mm1I+/9eUwCJEACJEACJEACJEAC%20JFA3AgWxoSkTFTN9+nQjE2qZL/zpYPMMNiKtvTiZyNpL7i9swMF2pt+df/756gU7cKK957+s56KJ%20qb8ibDLYeAO7lds/mQyrfTEEuPfeezVc3H+wgygTbdfOpSxRM7L8T238IQ3Bb7ARQ9CftXsm2oi6%20OY1M0tQ+HOzUwR4gbHrB7pl1IvywhxX1i82hsFFO2J/fbigKhw2SwsKLcCmr/PncIyuRAA/RclNf%20bAKVj8PmL2LKQKNecsklWZsFiQaS2ixEgCBbjLApKJrD+dw6URzRdAxso2i3loFNMC5rWx7YsBSt%20VRvd/QUPONieg20+vwsruwgm1Y6uNzxs8MKJSQoDW7ReB7uRcF7bjEn6A9HYMuhb4PCs+t0GG2yg%209v38/lHnIqQxIvDRTX/Gjh2rzznaAhxsAMqSXbX9CXuBln+SPCMd0RDGj9oJFmGSHnv/wV5xXV3S%20PHnvBzuqXod+YLvttlMva0f522+/dd8Jfpu0CIgNcGDPE/0l+sek+bH3Q3zYZsZO87adIC20Tdhn%20zccV+9lHWWCPeeLEiWozFefWpiZ2Ooc9S/SdsEOdhgt7PpG2mHYxIrB3b5MPC2zAByfazEbMd7hp%204UDMbwRubJTv2CIjcTlB+8MYBQ52uu1Ywf6KhrnBM4wNvrBhXCHbkWaC/0iABEiABEiABEiABEiA%20BBITiN7WOXFyf0bA5AQTHGwUIBoiBpMtCPfsxD0sWdG+CLyEyTqElBAIIh3RmsgKh3vAiWaX/mUF%20+J+HLIkNuxToL0vNXH9sPCLag0aW1hps5oNjCGqxW3GQw+YC2H1WtGPMPffcY2TJpZFl8BkTQdEc%20NdhMBZsiyBL9oGQK7ieaf65wxN4MAjBM/P2bh0B4hA0fvA47YmPzjCQOwlx/2lHx87lHVHr2mm0P%20QUJUGybqV7QV9TIEbUHCeFzE5B8Ok2Ovg+AQQvxiOLRZbNAS5L7//nsjmozupbisbdlt+dwE/neA%20dg9hrSzb1bKLXUw3SFTZIVzGRwivQ3g4CDogDPc60Z70nupxkv5AtGg1Du4RtjET+iYIU5I60U5V%20Yab9cAEBHjYegrATeYRQBxscYSOzJHlGPmy+w/hj92sIvOwO3UnzjvBJ82TvgToM+khg6wofguBs%20GcAeHzj8Du0AAnPrkuYHH6Ow6RaEv9jUC38QjIqNYH32sAGUaI3a5BP92vZf7GcfeccfHPpovGNF%20W1rft3hH4qMePhz6n5MkhYt6PpGOaCpnJJcPC7xj4LART5AL8s93bOFP335YhX+bNm38lzPO8Y4o%20ZDvKuBlPSIAESIAESIAESIAESIAEYhPIlgTEjhoeUGxgqtYDdj+W5V4qgMRuxbLESyfwVjPCn0KU%20hqIVcATteIt0MJGDw+Q0aoIadQ/ER/qYJDZv3txYIQr84aDJAwEEdseFtikEmpjMBmmnIbwsA8SP%20OkwAUW4ID7GTOjRBsIsvdmGH1idcXQSatlyyaYKmFfYPdYI/OFs+sVlmxFZYYBQIXrwOQim/QNN7%20vZKOsQuzFZDkK9BEGnBoB9AsDHIQEMJBM8/rZKMqtw68/oU4RvmC2ikETLbtJL0v2jBckAauTatU%20ZU/SH9g6xPNgnwmbf/trNeHsedQvBGjQAIPQyS9shJBXbLGqkBPCbGjIQsAJgWaSPOP+Nt/QJAtz%20SQWaVtBo00uaJxsv7Fmw1+3vTz/9pIdog2HsbVj8Js2P2FtVrU4Io8FZ7CbqRyVoF+NPzBeoX5Aw%201XvfoGPLv9DPPgR/jz/+uPLxa73i+cXu7fiTZfUqpEU/g3Z18MEHB2U7w89f3/Zirr5JbF7aoPqb%20Dwtbl1bInZGgnASt4sh3bOFP294b/rn6frwvC9mO/HnjOQmQAAmQAAmQAAmQAAmQQDwCqQs0586d%20q0vFoI0JrSSxPZah/SW23tylXv4shi0nxwQN6cLZ5aX+uNDiFDtxqv2IpXf5OqQD7VJMnIImhFZI%20aZfQQtAq9gMjb4eJGf7EfqSB1qbfyY7q6mWX1fqvxzm3WqvQtgOrMKEuGNuJouz+q0mfffbZBppK%20XgfhrdgcU6Zef2jIVYvDUmDbrrbaaqu8imXbI4TgX331lfFP9JGo1UKTnbIz7mGFfRmeBTqBmQT8%20pekgCJDd293l2v60xTalsVpYxS57kv7AmgyAtjU0KCF09Ds8C3EdhGf4cIH+D20syEEIjA8iEDzh%20mYRAKEmekSaYYjmsbKAWdAv9OCM2FQOvhXlCm9brkubJGzfOsRUmQcCEjzF+rU70VWKLWfsssTua%20mBHyAIEjtODxBwct/9tvv121ZHHPU045RetBLyb4V6xnf/78+a5WPz4M2vv6s4prEETi/SWb9Pgv%20B57769sGytU3+a/bPCXpB/G+E5vZbv9o721//R8+6zK2sGnaX7RrOLQNaM7bD6b2etBvodpR0L3o%20RwIkQAIkQAIkQAIkQAIkkJvAMrmDJAsBoSKEmRj8Y7m1dykrBBxWEBiUKgQBXs0JGwZ2L6FJAg0e%20K7iz1+yv7HCsh7BNZwV29hp+sawTNuzwG+Ws4EU26wkMJjtzqz+0TeO6K6+8UidMWM7qzxuEEbDr%20Bmcn3HHT9YazEzT4wUZnmBs9erReguasZYZlwTj2/kEjxYbx+ls7gGHpV4o/bNGde+65ml3YMQwz%20d5CrPOBhtfcgePE7CMmsUCtoCaU/fCWd2/I8/PDDaovQn3eUG+VHO0ryvPjTyefctu04/QEEK1ZQ%20P2bMmKzboQwwGRHX2bYELe4wgRHS8gp7oaGYJM+Ib/nDFEZQv2nbHcJaB9MdcBB0WjuW9hrMYfj7%2056R5smnF/cVHFauZGcRYNgFSO5onnniiakAnzQ+EfLCBCi1063BP2bBIbRjDDxrz+bhiPfvIv22f%20tv8Oyi/agBVgW05J6zso3Th++bCweYTw32p42nthDAGhs9fVZWzhTQfHEMBCKIv3MTR3/Q7v5fXX%20X1/HDLJpmylkO/Lfm+ckQAIkQAIkQAIkQAIkQALxCKQu0LSaDpgo2E1xkBVomWCDB6vpZJererMJ%20DYz9998/Y2nupEmTzDnnnKPBDjvsMF365Y1jj2XXc9VKxIT8pJNOUkGKvYbJLDRFce+uXbta78Bf%202ala/bGxwtNPP+2GgTAWy0IfeeQR9cNy8bhue7G3CQetGdk91SAtOCxvR3khrMVSbq+w8MwzzzQQ%20tMHuZhyHyZfduACT9X/9618ZwlPUh+z+7S4t32+//dQuaZy0KzkMWNs/tDm0jwsuuECXaEI7C8sd%20wStfh/ZuNzOBHVQsN7YOtguh+QoNTdxHdru3l6riF88zNIHx3GIDMCtMQeGw4Yr9eCA7hwdqrhYS%20QpL+AEu20WfAYSMUu1kJzrHcFPmH5mZch43EIICCwBDLymHj0OvwvENQd+2116p3nz599DdJnhEB%20/CGUQTvGxxCvUBOan3YzNU38f/+gQQwBMzTp8MHJfmBBHWLTHL+9zaR58t4rzjE+Btg+TnbpNq+9%209pobDXYZ7bMJcwmwR5o0P6gHaOAOHTo0gw/qwG4Ela+wvVjPPgS+0OaFwxJ5rEDwm69AW0OfDkEg%20wu+4444aPml9a6Q8/uXDAsvnIXCF2QHY/UQbhLPjAGvf2GYn37GFXdIOzVXr8MEVmrlwsOUMTXPr%208AygP4DmJvoG2NgsZDuy9+UvCZAACZAACZAACZAACZBAQgIyscvbibYkdnZwhgwZ4qYhQjpHtPvU%20X5ZVOqLZ4IhAz5GlhOrXqlUr/ZXl144I9zSeGNxXP6SFP5k8ONtuu60jGhyOTDzUTyYVjmhNuPeR%20ia36y06+rp9sQuSGl8mvI5M6RzQx3LRxLtpWbvigAxF6ObKZhhtHbKs5YufSkc17XD9Z+uiIICAo%20eqAfwu69995ufOQN5ZPJnPrhXJaOZsQVwateE+3JDP+oE9H4cpo1a+beR5bOOrJhkdO7d28H/Cxf%20sdXpyNL0qKQcsf/nyGQuMowISDVNEWpFhvNeRL0jHyLM8XqHHudzDxvHljfsVwQZWdxDMyIXRCiu%20eZfJd0YwES44on3r8hWNKkcE4w7q1d5bhBBunCeeeEL9ES6JE00mNz3bjmWHbtdPhBmaXJBfnPtY%20bknqUzZZcURgoHkQ4Zq2N9kcyX0OZRMPB/mxLqrsIvjTdNBu/U606Nx7+K+JwFiviSAn41KS/kCE%20Ko6Yk9B0UGfygUDLYp8nEbzpNbGFm3GPsBPUlQgOM9JDPyICTkc2a3H9e/To4YgAx00mSZ4RST5c%20uKzBH30t+i/c23t/0W5z7+Hti9AvoI9AnaOvFW1VzRvaunVJ8hRVh0gPzw74etMXLVZHlkqrP+oQ%207QfPpn12RHvVkeXHNjtOkvyInUxHBGGaFvjgfYTyy1J3N33RBHTTDjso9bMvGozO5ptv7uYZZREz%20GY4Izx35GOY+g6hDsfGcUYwk9R31fCJRtFfUi3y4ybgHTpL2g4gjWu0O6hxpIu94X9t3Pt698Ed7%20hstnbIF4tk2jn8L7R8zJwFvTQx+MeyAPovGs72Wx/6p+CP/UU09p2LTakSbGfyRAAiRAAiRAAiRA%20AiRAAqkQgHZg3s4KALwCTSQmGpEqEMBEwf5BSCHLOR1ZXu1OvkR7Te9tBZpIRzbMcOyEAnExmRVN%20RUeWQ2bkU7STNG3/vWXTBxVM2EkR0kB6gwYNyhAcZCTmOxGNJ0eWODoQyNr841eWzzuihedgcpnU%20ifaUIzt7O1YwgvQgMOzZs6cjWoNZyVmBJgSpSZwsj1OGVsjkzT8mbaIV44gmXc4kZZMJzWtUwHwE%20YBDQIk+iHRaVtHstn3vYON6y4xgC5G7dujli21CF6RBeJ3FhQg2kgbRE48exAnvcDwIlCMZk2XPG%20bf7v//5PGSQVaCIdpIu27Rdeom5F607vYwWaXr+MDIScWG5JBJpIauLEiQ7aq7fNQRAoNmgdPEte%20F1V2KwyDwM/v8hFoIo0k/QEEMmgbsiGY+9yjDxDNcEc27lK/uAJN3FvMU2jf5RUs2jaJjwpi8iCw%20T0qSZ9wHQii0Je990G9MmDDBFap7BZqibaofaWxe8AvmEOyJtrGW0//BIW6eouoQeRVN0sD0RcPQ%20EW31jP4R+YKwTrT0ETXDxc0PIsmGOo5szuTWqS23mOlwZFl+RrphJ6V+9pEvvEOQDyv8teXAL+oe%20H65kZUFWEZLUd9TziYRRH7hfkEAT15P0gwgPJ9rcKoiHkBZpQ9gsG885YrJBzyFEtS7p2ALxxCSG%20pmnHBLfccotNzpGVI/q+9D7zyAM+plphpg2cRjuyafGXBEiABEiABEiABEiABEig7gTqIQkZwKfu%20kCyW9MEuG+xVeXfwxtJU2KXCBjsiBMm6N5Z8YfMg7JQrE3XXxlpWwAgPLHFHGljShvsjraQOyzFh%20SwtlkElW4GYhSdPEkkBw+fnnn9UGXj75inNPmVjqfbDMHstLYRsUtgKxGQldYQlgcyAsb0TbRfur%20FYc299577+kydDxzImQpm6In6Q/Qd2G5M54b2KYN6qOSFAxLaPEc4rmHrUwRNqotYLuENiytJHlG%20GuhTkG885yJY12Tx++OPP+rmXv4d19EPY1mtCDM1T2H58PonzZM3bpxj9LkwVYLl87B1KYLxyGhJ%208oN+HM8m6heb52ApcdquGM8+TGhgOTbaFMwNwAYyzJV437FB5cqnvoPSieuXlAXqHuURzXa9xVVX%20XaVmK+SDp4EdbevqMrawaQT94vnEpnp412MDvzBXjHYUdm/6kwAJkAAJkAAJkAAJkAAJ/EWgYALN%20v27BIxIgARIggVIQiBJoliI/vCcJWALYsAv2ZiFcxodDr4AfwnlsGgTB7RVXXOHa47Vx+UsCJEAC%20JEACJEACJEACJEACqW8KRKQkQAIkQAIkQAIkEEUAG/BBgx3a7GJT2jz44INGzDQYMQNgxBSLCjOh%20KXn88cdHJcNrJEACJEACJEACJEACJEACNUoge713jYJgsUmABEiABEiABIpDADuHi51M1dLE7vZ/%20+9vfMm4MMymy6ZgR25oZ/jwhARIgARIgARIgARIgARIgARDgknO2AxIgARKoUgJY1rto0SIDbbgW%20LVpUaSlZrEomANu748ePN9OmTTM//fSTa2NWdqSnzedKrljmnQRIgARIgARIgARIgAQKTLDEEvgA%20AEAASURBVIACzQIDZvIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQALpEaANzfRYMiUSIAESIAES%20IAESIAESIAESIAESIAESIAESIIECE4htQxPG+72uc+fO3lMe1xCB+fPnG9g/o6tdAosXLzZLly41%20DRs2rF0ILLlhX8BGsGTJEoO/Ro0aEUYNE2BfUMOV/7+i//HHHwZjA/YFtd0WfvvtN9O4cWNTr169%202gZRw6XH/ADmZJo0aVLDFFj0BQsW6DxxmWWoP1eLreHzzz838+bNc4s+fPhwM3DgQPc8zYPYAk0M%20Vr3u9ddf957ymARIgARIgARIgARIgARIgARIgARIgARIgARIgASUwKxZswpGgiLzgqFlwiRAAiRA%20AiRAAiRAAiRAAiRAAiRAAiRAAiRAAmkToEAzbaJMjwRIgARIgARIgARIgARIgARIgARIgARIgARI%20oGAEYi859+fgtdde83vxvEYIvPXWW6Zr1641UloWM4jA7NmzDWyjtGvXLugy/WqEAPuCGqnoiGLO%20mTPHzJ0716y11loRoXip2gmwL6j2Gs5dPtjKwpKy9dZbL3dghqhaAtOmTTMdO3Y0yy23XNWWkQWL%20JgD7mTNnzjSdOnWKDsirVU3g/fffN+3bt1ebulVdUBYukMBpp51mXnnlFfdaIfuDvAWam2++uZtB%20HtQWAbyoWP+1Vef+0n7zzTe6IUyHDh38l3heQwTYF9RQZYcUFR838FfIgUrIreldRgTYF5RRZZQo%20K/iw8dlnn5lNN920RDngbcuBADaE2WyzzUyDBg3KITvMQwkIYGMobAjUvXv3EtydtywXAvXr1zcb%20bLABNxIulwopcj5atGiRcUf/BuMZF+t4wiXndQTI6CRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRA%20AsUjQIFm8VjzTiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAnUkQIFmHQEyOgmQAAmQAAmQAAmQ%20AAmQAAmQAAmQAAmQAAmQQPEIUKBZPNa8EwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQB0JUKBZ%20R4CMTgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkUDwCFGgWjzXvRAIkQAIkQAIkQAIkQAIkQAIk%20QAIkQAIkQAIkUEcCFGjWESCjkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJFI8ABZrFY807kQAJ%20kAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ1JEABZp1BMjoJEACJEACJEACJEACJEACJEACJEACJEAC%20JEACxSNAgWbxWPNOJEACJEACJEACJEACJEACJEACJEACJEACJEACdSRAgWYdATI6CZAACZAACZAA%20CZAACZAACZAACZAACZAACZBA8QgsW8hbPfPMM+all17KusUyyyxjmjZtatq1a2f69OljWrZsmRWG%20HpVNYMmSJebiiy82juPkLMhFF11kll32r6Y4d+5c8/bbb5uZM2eatm3bmk022cSsssoqOdNhgPIn%20MGrUKPPFF1+Y9u3bm6OOOioyw2wHkXgq8uKUKVPMe++9Z5YuXWo23HBDfbbr168fWBbWfyCWivUM%20Gw/4C7TNNtvouCDsHbLiiiuaDh066F/Hjh1NvXr1/EnwvIwJhLWDqHFhWFvwF3Pbbbc1vXv39nvz%20vMwIhNUnnuXllltO5wRdu3Y1W2yxRUbOw9qONxDSuPDCCzPGlN7rPC4fAnHqE7m174Sg8Jg7YC6J%20d0KnTp04nyyf6s0rJx9//LEZO3asxj3yyCPNWmutlZVOWP/hD8j3gZ9IZZ3PmjXLPProo6Z79+6m%20W7duoZmfMWOGee6558wBBxzA5z+UUg1cEIFTLCcoIJly/+JEOuWUU9zw3rje4xYtWjhvvPFGnOSy%20wgwfPtzZd999nWnTpmVdo0fhCLzwwgs5E//5559z1r1tB7/99pub3q233uo0a9YsI27Dhg2dyy+/%203A3Dg9IT+Prrr50PP/wwUUa+/fZbRyYrWrcNGjRwZs+eHRqf7SAUTVldiNMXIMOff/65s/XWW2c8%2013j+5WOF884772SVifWfhaRsPb7//nvn3XffzZm/OOMBtIkzzzxT04rzDpGBrvPqq6/mvDcDFJ5A%203L4gTjvwjwvjtAW0HaRNVzoCc+bMceSjVc4MxK3PQw891Pnjjz/c9OK0HbQDpE9XOgITJ050Fi5c%20mDMDcevTvhNyhW/UqJEjwmxn/vz5Oe/NAIUlgDrIZ24/aNAgd5x46qmnBmYybv/B90EgvqJ6Tpo0%20yfn1118T31OUHpxevXppWxgyZEhkfBFkarj//ve/keF4sfgE+vbt6z7PeDePHz++YJn4Sy1O7lQo%20t+OOO5oTTzzRTX7RokVGJrgG2lr4GrPnnnsaEZAk1rSQiYx5+OGHzQknnOCmzYPyIzBmzBgjE5TA%20jOHrauPGjfWadEaqtSetXb+0bL/99gYaXWgn55xzjn6FPeiggwLToWf5E7jjjjvM4sWL9TlHH3Dn%20nXcaGXBkZZztIAtJRXvged5rr730WV5//fXN8ccfb6B9ed999xkRZhr5KGXko5SRyYiWk/Vf0dWd%20M/P+8YA/QufOnf1exvsO+eGHH4wIUM1TTz1lZLBsttxyS3PXXXcZvhuysJW1h78dxB0XetuCv4Dr%20rruu34vnZU7AW594V/zyyy9GhOOqpYUxA57v4447LqMU/raTcVFOmjRp4vfieRkTyFWf/neCNzzG%20lJhHYiwxbtw4XRmGeeHkyZONfDgv41Iza34Cv//+u7n77rtdbzz/oswSWY/e/sON+L8Dvg/8RCrn%20/PrrrzfPPvtsZIbnzZtnRowYYe6///7IcLxYIwTiikoFR4aUNU48+zVNhJmBwb/55htHlhlpurLE%20ODBMlOc+++yjcUXVOCoYr6VMII4mhvcLmkxAY+Vg55131voUAXVG+CuvvFL9N9hggwx/npSOQD4a%20miLM0nqUF5X+ypLjwAKwHQRiKUvPOH2BLDHX+m7evHmGVq5XY9ebDuu/LKs6NFNJNTTDxgP+G+R6%20h0Cz/4gjjtC21apVKyfue8Z/H56nQ8D7DEelmM+4MFdbiLofrxWPQD4ammHP7cCBA/XZlo9hbgFy%20tR03IA9KSiCphmbcd0Ku+n/xxRcdMU+l7Wbo0KElZVDrN89HQ/Oee+7Ruttvv/0cWS6uxw888EAW%20Sr4PspCUrUc+GprTp093oG29/PLLaxvwa2g+8cQTzkYbbaRhvLIpamiWXzMopoZmSTcFWnXVVQ3s%20YcGJSrJ5+eWXzUknnaQSd/X0/ZNliHr95ptv1l98kYO79tpr9Ry22bwOUnvY6YMdnqOPPlo1wqAF%204HWffvqpkeUMZqeddjI9evQw/fr10/TwlZiueARkeYqRCZHeEPXhdbIEQbU433//fdXs9V7jcWUQ%20gNYd7Jx06dJFNarbtGmjWlbQsvY6tgMvjeo4/u6777QgsIUkgie3UOj/YfMKDlp3cKx/xcB/MQhA%20sx9jAfQlaD833HBDjFgMUu4E/OPCcs8v81cYAuutt54mjLkBHQnEIQCbibCfCnfZZZcZaPzRVQ6B%200aNHa2YPOeQQM2DAAD22fpVTCua0LgQgozn44IPNCiusYK644orApERsp6v9sBcD7KjD7jIdCZRU%20oPnkk0+an376yYjNRLP55pvrxOSmm24yZ599trGTYFtFWFYAQdeNN96oy9Mxefnkk0/08mOPPaaT%20GbHpp+d4ickXHtO/f38DISiWpUEtXezxGNHq1EkzAmLjGRgeF1ucKkzDMrYJEyboMlgYll+wYIGm%20x3+FJ/DZZ59pvbRu3VqXlnvviIkrNgaCs3Xsvc7j8ieA5w8OAxVs/mCXh/oHK2wH5V+XSXPYs2dP%20XQIIgTaWhln30UcfmalTpxpsCoQlZHCsf0uHv3EIYEmhXY6K9zdd5RPwjwsrv0QsQT4E7NJTbBxK%20RwJxCUCJBZvO4uOonSPGjctwpSOATWCff/55s9JKK5ldd93V7L///rrUHMuOYaKOrjYIXHDBBSqb%20GTlypFl55ZUDC73bbrsZKDjZv1122SUwHD1ri0BRbGh+8MEH7q5lwAtBod3JDDYUsRs2fqHBA0Hi%20008/rfbVTj75ZLc20Kn9+OOPBnYVxVCwfr2BNid2vbvtttsMJs1rrLGGhpclympLBRqXEKRACwja%20nNgx7fHHHzfnnXeeaoFCOApbbvgaAEEqBKuw2QihpxgzVhtde++9t5sHHuRHALbyRHU8MPKmm26q%20wkorwIa2TZBbffXV1duGCwpDv/IkAG3nBx98UAVXBx54oGYSX1/xIQFa1NCwxtc4OFu/bAeKoyr+%20wTYm6hr9OT5cob+VpYm6eyEKCE0Ka2OX9V8VVR5ZCP94wBsYOxTjw2MSB7uscPzYlYRa6cP620HY%20uNCf07DxxDrrrGNk4zF/cJ6XOQFvfULzRjYL1HH9m2++aTbeeGN9X/iL4G873usYv9vxhNefx+VL%20IKo+k74TMN7ArucQduCdIKaNyrfgzJlLAMpHeP6hiASNO4wJIbjCLte4JiYE3LDeA2//4fXn+8BL%20ozKOxWSEymYwR4DsRcwNVEbGmcuyIFAUgSaEkWHGXSGghNaWdccee6wKNPF11ivQRKcFB6EkOjr8%202UHLmmuuqWrHuA4jsRBoQoD273//26y22mrw1qWu0OTE5AcC0GHDhplZs2bpNcSHMNOGu+aaa2hk%20Vmmk88+7IZQ/RbGNoQJN2clSL4WpjtuNg/DVla6yCIhdHCP27gy+otnnERq3GGhCqwrP9jHHHKOF%20YjuorLqNm1toYOKDFbQyYezburZt2+rAxZ6z/i2J6v2NGg+g1EkFmtDqh7Pvcz3hv7InENUO/ONC%20b2HCxhMYR1Kg6SVVGcdh9YncX3TRRcY+397SRLWdbbbZxp0beOPwuHwJRNUncp3POwECTb4TyrfO%20vTnDuO/2229XL688AIoPEGhizo6+AKu7/C6s/+D7wE+qvM/FLqo+5+jvaT6ovOuqXHNXFIEmdinE%20LrfW4SsMbF5hl1LYTYStHLzQoK0HG5YQemCZOL6u4RqEWOjUIHTEUvIoBzua+NKPrzNYPu53sNmJ%20l9zrr7+u9xLjsircfOmll8wee+yhA2LkgZqZfnL5n+NFhCUgQW6rrbZS76VLlwZddv2WLFmix/ha%20S1dZBOxyc0w0YLPWOkxaIdDEsnMr0GQ7sHSq5xdCTNhOhSkQaNLjoxQ08u+9917VxEG/j354u+22%20M6z/6qn3sJL4xwNh4eL6w2wNnNXijxuP4UpLwN8OosaF3pyGjSeoieWlVDnH/vrEewIaexjz77vv%20vmoH32+axt92vKVt2bKl95THFUAgqj7zyT7fCflQK10cyAJko1EjGzrpMmM7T0CfjrHil19+qYpO%20WIrud/7+w17n+8CSqIxfCKa/+OILA5Mzdm+Vysg5c1kuBIoi0ISdyjPOOCOrzNCkhIDy4Ycf1g17%20MLGFhp7sXGouv/xyAy1NqJmjgWPZKmxlWU29rMT+52GXncF2ihWSBIVF5wltUGh04l7YtAR/cLIb%20r24idMkll+S8X1Da9MskgE19YBclyjVs2FAvy854gcGg4QeH5SR0lUMAph6wdAwOph7w53cw7zBt%202jQju9YZtgM/nco/HzdunAozYQsNA1f7UQL9PDQv7rzzTnPXXXepQJP1X/n1nasEYeOBXPHCrsPu%20KhwMxNNVDoGwdhA0LvSWKs54whuex+VNIKw+J0+erB/Axo4dqyZLrFkSlCas7ZR3SZm7MAJp16e1%20uch3Qhjx8vK3Hyy+//57VUYKyh3CBAk0w/qPoDToV54EMEfAHAAmyaDkBLkMnN3UCxsFwQ/z/7BV%20nOVZMuaqmASy9beLeHdMbO3mILBtaR12JMc1axTcu9zchgn7tUZkIRxFvLA/aApBfR2CVtjsgTAT%20y9DxpRCqz1dffbW72UDYveifHgGrXQPbqtDU8DsrqLbh/Nd5Xp4ErHYmTD307ds36w+2juDsgMbW%20L9tBedZnPrmCTWQ4GOu3wkybDuwgw/3nP//RX9a/YuC/BATs+KBDhw4JYjFouRIIGxeWa36Zr8IQ%202GyzzdSUFFbn2HdIYe7EVKuJANoKbHRjs8G11167mopWlWWB3XSspkS/HzRH6NWrl5Z7/PjxBgJP%20uuoj8Morr2ihsGoLK3Ht32GHHab+sLMPv1GjRlVf4Vmi1AgURUMzKrcTJ07Uy02aNHGD4SWETgwb%20/mCii44M6uPY5CeX22CDDTQIhJLQ/sRLzeuuu+46Xe4Om24jRozQLwDnnnuuLjWH/SUc33LLLSrM%20xJIXCNf8k3BvejxOhwAEW7CJiq8w+DLfrVs3N+Fvv/1WN5FCPdj6dS/yoGwJ4OsavrrBQWAZZN8M%202nnQ0kO4q666So25sx2UbZXmlTG7IZg1G+FNxGpeW3vI7Ae8dHiciwA2G3vttdf0q/3f//73XMF5%20vUIIBI0LKyTrzGZKBLAJqP2Q7Z0fpJQ8k6lCAljhhV2S4TCuhBCErrwJQAMbY8OddtpJ5/pBuV13%203XV1x3qEDVrtGRSHfpVDoHv37oFm/rDzPVb5Yd7fsWNHfqConCotSU5LpqFp7WJCoAGHzszrsBwc%20Di8lTHphd83vrKDRqiXjOjb4geAENjguvfTSjCgQjA4ePNjcfPPNuqkQNEDx8sPmQV6HDUvgYMfB%203sN7ncfpE4CdFGwaA3f66adn2NLDOYxGQ6C96qqrpn9zplgQAjAlgS/lUbsNwlYt7KvC5hHCsx0U%20pCpKmqj9OAHTHnYXc2QI/fqFF16oecPu53Csf8XAfzkI4IPlFVdcYbBpABxWdaCfoatsArnGhZVd%20OuY+LgGs0IDgAksNIczEiio6EggjAMUTfASBIgz2X4DpmrBdscPSoH9pCNhVXFYbLygX2PUazoYN%20CkO/yiWApeaY//n/oGAGd8ABB+g1KyOo3JIy54UkUBQNTexy/Nxzz2WU46uvvlK7mPCERqb9qmYD%207bnnniq8+uabb1T7wrvzmQ1jd0zGUkZI8KGWjInx8OHDzQ477GCGDBlisJQd0n8YGX/55Zc1Ku6F%20ifPhhx+uAk48LFB1xxcAqLTjoYLLtQGRBuK/nARgE8OvKWsjwR/L/WG3FDZLIXR+8cUXzRprrKE2%209WBfEV9pIFiGbS26yiFgBx/4KBHmoL0HoSY0NKHFiRcb20EYrcr0x0ekO+64w0yfPt20adNGn2ts%209gZ7mrB/CDMh6KutY/1bEtX5GzQe8JYU7/qzzz7b66V2lew7BB8w0W7sBlIDBw7Ud35GBJ6UPYGg%20dpBrXFj2hWIGExPwjw8hxIRA0zqM+7BZCF31EgjqC7yl9b8TvOEhzMQqLnw8h4NSC3bFbtu2rTcJ%20HpchAcz9oIWNecA+++wTmkMINCGgnjFjhs4XrdJRaAReIAESqDkCRRFoQvvK7jpnCUOg2LlzZ9XM%20vPjii7OWBsDwKzox2LLEruPWNqaNj19MZCD8ev/993XncuxeDoevudjFHFobb731ln6xgz8GRRBm%20YjctuJNPPll3UL/mmmvMI488on74B+Pj+DoMjSK6uhPASyjKYVd6CDRhZxG73WPpIIQf1jYaBijX%20X3+9CkKi0uG18iGAienzzz+vgugogSZyjOccAk2ERzy2g/KpxzRygmcbpkPOP/98fabxcQt/+EiB%20D0kw/WFtZ+J+rP80qJdvGkHjAW9uIaz0O+87BO/nLbbYQj9i9u/fP2t1hz8uz8uTQFA7yDUuREms%20YLs8S8VcJSXgfbZt3FatWhnYwcfqnJ133tl6u79sAy6KqjgI6gu8BfO/E7zh0Ragnb/tttvqZlGn%20nHKKmq/yxudxeRLAh244KA9hpVaYw5JzzOthXgZxIBewjn2BJVF9vxgPwNnfsBLmuh4Wj/7VRaCe%20fN3K3oEloIz+pdcxowWkFN8LnRx2v4LB4N133z1+RE9ICMswYMIkCFp/QZ0f7Hdg13NsDtSyZUv9%20ssedtDwQfYcQIm+33XY+33RP586dq2YDUGdBwux078bUkhKA5jTsFRV6Iw62g6Q1U9zwSfsCaN9g%20coJfTEIaN24cmWHWfySesriI9yb+OnXqVBb5YSZKQyBpX1CaXPKuhSSA/hr9O4SRdLVL4NVXXzXY%201KlBgwa1C6HGSw6TQu+++66ukKxxFDVd/DfffFM/PkcJrGsaUJUXHgqJkOFZh1W4UGQphCuKhmY+%20GYcaOmxbYpOIuthNwIQ51+AK0n1oAeKPrjwIwH5ply5dyiMzzEXJCLAdlAx9QW6MCQ6Wm8d1rP+4%20pBiOBEiABEiABEiABEiABEiABGqLQNkJNLHM+KGHHlIDz9CcxNLvIK3K2qomlpYESIAESIAESIAE%20SIAESIAESIAESIAESIAESAAEyk6giaXfWGYOh017TjjhBD3mPxIgARIgARIgARIgARIgARIgARIg%20ARIgARIgARIoO4EmDDrvv//+BksNmzVrxhoiARIgARIgARIgARIgARIgARIgARIgARIgARIgAZdA%202Qk0l1lmGbWb6eaQByRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTwPwLLkAQJkAAJkAAJkAAJ%20kAAJkAAJkAAJkAAJkAAJkAAJVAoBCjQrpaaYTxIgARIgARIgARIgARIgARIgARIgARIgARIgAUOB%20JhsBCZAACZAACZAACZAACZAACZAACZAACZAACZBAxRCgQLNiqooZJQESIAESIAESIAESIAESIAES%20IAESIAESIAESoECTbYAESIAESIAESIAESIAESIAESIAESIAESIAESKBiCOS9y/nnn39eMYVkRtMl%20sGDBAsP6T5dppaU2Z84cs3DhQraDSqu4lPPLviBloBWY3C+//GLwx3dCBVZeillmX5AizApN6rff%20fmNfUKF1l2a258+fb7788kuz7LJ5TzHTzA7TKgGBRYsWmXnz5nFcUAL25XRLtIGvv/7aNGzYsJyy%20xbwUiQDGBF4HuUGhXN5vG8dxCpUnplvmBFD3rP8yr6QCZ8+2AbaDAoMu8+RtOyjzbDJ7BSRg+wD7%20W8BbMekyJsC+oIwrp0hZW7p0qY4N2RcUCXiZ3sb2BWwHZVpBRcgW+gI4toEiwC7jW7AvKOPKKUHW%20Ctkf5C3QbN++fQlQ8JblQACaOKz/cqiJ0uWhQYMGBl/h2Q5KVwflcGf2BeVQC6XNw+zZs1UTh31B%20aeuh1HdnX1DqGij9/efOnWsWL17McUHpq6KkOZg1a5Zp166dwTiRrjYJWG1tjgtqs/5tqX/44Qez%20xhprmKZNm1ov/tYQgSZNmmSUtlGjRhnnaZ7QhmaaNJkWCZAACZAACZAACZAACZAACZAACZAACZAA%20CZBAQQlQoFlQvEycBEiABEiABEiABEiABEiABEiABEiABEiABEggTQIUaKZJk2mRAAmQAAmQAAmQ%20AAmQAAmQAAmQAAmQAAmQAAkUlAAFmgXFy8RJgARIgARIgARIgARIgARIgARIgARIgARIgATSJECB%20Zpo0mRYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEBBCVCgWVC8TJwESIAESIAESIAESIAESIAE%20SIAESIAESIAESCBNAhRopkmTaZEACZAACZAACZAACZAACZAACZAACZAACZAACRSUAAWaBcXLxEmA%20BEiABEiABEiABEiABEiABEiABEiABEiABNIkQIFmmjSZFgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQ%20AAmQQEEJUKBZULxMnARIgARIgARIgARIgARIgARIgARIgARIgARIIE0CFGimSZNpkQAJkAAJkAAJ%20kAAJkAAJkAAJkAAJkAAJkAAJFJTAsgVN3ZP49OnTzbPPPmsmTZpkcLzWWmuZ7t27m6233tpst912%20npA8rAYCS5YsMRdffLFxHCeyONtuu63p3bu3eeaZZ8xLL70UGbZevXrmwgsv1DB1TXvZZZc17dq1%20Mx06dDCdOnUyLVu2jLw3L+ZHoNj16s9lrjaz4oorahtAO+jYsaNBeLp0CbAvSJdnpabGvqBSay7d%20fCdpB88//zzHBeniL4vUCvlOSKPNcFxQnGaSpC9Ajuo67veXiuNDP5HinxeyL0Bp6tpmOFcsbpuY%20O3euefvtt83MmTNN27ZtzSabbGJWWWWVwEwkCetNYNasWebRRx9VGVS3bt28lzKOZ8yYYZ577jlz%20wAEHUEaQQaZMT0TgFMtJ9iGZcv9iRfpfoOHDhzvSKbhxveng+Oijj3YWLFiQJMmMsJ9//rmz7777%20OhdccEGGf6FPUC7cd9q0aYW+VVml/8ILL+TMz88//xxa3976P+WUUzQt/Hr9w46RbtppN2rUyBFB%20qTN//vyc5WKAPwl8/fXXzocffpgTRynr1bahuG1GPrA4r776as4yMcBfBNgX/MWiVo++//575913%20381ZfPYFORFVdIA4fQEKmKQdJAnLcUHpm8+cOXOcKVOm5MxI2nXlfden3WY4LshZnVkBJk6c6Cxc%20uDDL3++Rdl2hHSBNuLTTZjvw1170OeZTb7zxRnQguVrIviDttDlXzFmdWQFEic359ddfs/yDPG69%209VanWbNmGbKAhg0bOpdffnlW8CRhvZGXLl3q9OrVS+8xZMgQ76WsYxFkarj//ve/WdfoEY9A3759%20M+pz/Pjx8SLmEargGprHHHOMGT16tGo+yQvG9OvXz3Tp0sWIMMTIANgMHTpUr0+dOtW88sorBl9D%20kjrptMy4cePM7Nmzk0atU3gRfpiHH37YnHDCCXVKp9ojjxkzxrRo0SKwmOuuu26G/4477mhOPPHE%20DD/vSZMmTcxvv/3meuWb9uLFi83HH39s3nnnHW07+IqHupw8ebJp0KCBmz4P0iFQrHoNym1Um/nh%20hx+MCGPMU089pdrjW265pbnrrrvMQQcdFJQU/epIIN/nNei2UfXqDx/Vz7Av8NMq7Dn7gsLyrZTU%2047QDW5Y4YTkusLQq6zftd4ItfV3aDMcFlmJxfutSV/4cRr3r/WFxHjWOYDsIIlY4v7T7Ar4TCldX%20aacsQkNz1FFH6apOaERuv/32Rj6OmVGjRplzzjlHV1TaeVmSsP58Xn/99bpa2O/vPZ83b54ZMWKE%20uf/++73ePC5zAsmlhwkK9Prrr6uwEkLKO+64wxx44IFu7B49ehj8odHuvvvuRr7kmFtuucUcf/zx%20bhgeVAeBPffc06y00kqxCoPl33vvvXessAiURtpY6r7//vurKYQrrrjCXdYeOxMMmJNAKeo1LFNB%20bUY0xPXDxG233WZOPvlks/POO8dus2H3oX82gSD22aH+9ClFm2FfEFYb6fmXol7Dch/UHtkXhNFK%201z9JO0gSFrkMqtew3Ielzb4gjFi6/mnUVVCOwuo1KCz8gvLBviCMVrr+adRVWI7SSJvtIIxuuv5B%20z2DYHdKo16Rp850QRqzu/sOGDVNhJhTEbrzxRjfBddZZx5x11lnm0ksvdRVNkoR1E5IDKK+cffbZ%20ZvnllzeiNeq9pMdPPvmk3uujjz4yv//+e9Z1epQ3gYJuCoSGAzdgwIAMYaYXCYSaXruI9ovKZZdd%20Zk466STzyy+/eIPr8amnnmpOP/10PUZDhxAKDhp3iAPJOtwHH3yg59C4evPNN83gwYPVXqeowKpd%20jS+++ELD2X9x7/niiy9qutDug7v22mv1/L333rNJ8beCCMCOp22DaAPsyCqo8lLKauPGjc3NN99s%202rRpY/BV/oYbbkgpZSZTSQTYF1RSbRUmr+wLCsO10lJlX1BpNZZ+ftkXpM+0ElNkO6jEWks/z3wn%20pM8UKYp5Cl2xi+MzzzwTP64bNGiQwfP3/vvvGzEvmCism4gcLFq0yBx88MFmhRVWcGVG3us4llXO%20Biu22rdvr3sqLLfccv4gPC9jAgUTaOKLFgR/cFb4GMYBasYwwv3dd9+pMViEgxASQgUr4PTGvemm%20m1T4AD9odd5zzz16+ZtvvtE4iAsHgSXSwP2x+dB1111nXn75ZfP444+biy66yGy22WYGqsvWxb0n%20DNYi3U8++USjPvbYY3qOZfR0lUkAbbBp06baWdp6rcySMNf5EoCpgeOOO06j40seXW0SYF9Qm/Xu%20LTX7Ai+N2j1mX1C7dW9Lzr7AkqjtX7aD2q5/W3q+EyyJ9H4/++wznXu3bt1al5Z7U4YwExsDwUHG%20kiSsNx3ZY0XlSyNHjjQrr7yy95J7vNtuu6ngFMJT/O2yyy7uNR6UP4GCLTmHyi6k3VDt7dy5cyQJ%202DDZeOONdTdLaFXCjl1ch2XtiANVdaQBmwdiRDYjOgSla665prnzzjtNz549VdAJe55inFRVmKHZ%206Y+TkYDv5NBDD9UlqdAGxS59WKaKdNdYYw1fSJ6CwH333aftwE8DquQQNHsd6nLs2LFeL/d4n332%200a8rroccJEnbG89/LMaetSNFJ4ZOc8MNN/QH4XkdCBSyXpOmHVWM9ddfXy/z40QUpfyvJXlek9Zr%20krSjSsC+IIpO3a8Vsl6Tph1VGvYFUXTqfi1JXSUJi5yxL6h7/RQrhSR1laQdJAmbq6zsC3IRqtv1%20pHVVqDaTqxRsB7kI1e16Ies1SdpRpeD4MIpOftcgo4HDCrkgt/rqq6s3wllZTZywNi0o12HlLjQ0%20YdLugQcesJf4W0UECibQ/PTTTxVTWKPzM4TAEQ7CxSRuvfXWU8k+4kDLs2PHjoHRJ0yY4ApWIUh7%205JFHDGxwQHABQafstB4YL8gTG9zgD6rLcMh72H2D4teaX9gmP4ccckiWQPPZZ58NNdi7zTbbuMwt%20wyRp2zhhv/g6BIHmrFmzwoLQP08ChazXpGlHFQFtAI5tIIpS/teSPK9J6zVJ2rlKwL4gF6H8rxey%20XpOmHVUK9gVRdOp+LUldJQmLnLEvqHv9FCuFJHWVpB0kCZurrOwLchGq2/WkdVWoNpOrFGwHuQjV%207Xoh6zVJ2rlKwfFhLkLJrv/xxx8aIWyJN7Q04bA0PUlYxMGm0VBCQ53RlBiIVK8rmEDTCvuCDK8G%204bS2MsN2ww6KE9cP2pN+LdH69evrjlqwwYmdrZMINOPel+H+JIDl/VjO7XdBWpDQzt1rr738QfW8%20ZcuWWf5J0s6K7PP46aef1Md+DfJd5mkdCBSyXpOmHVUMtoEoOnW/luR5TVqvSdLOVRK2g1yE8r9e%20yHpNmnZUKdgGoujU/VqSukoSFjljX1D3+ilWCknqKkk7SBI2V1nZF+QiVLfrSeuqUG0mVynYDnIR%20qtv1QtZrkrRzlYLtIBehZNeXLl0aGWHJkiV6vV69eiZJWESCIBvmB7HhD5Te6KqXQMEEmlZjEXYt%20YQcTy8qjHJaow1mV/qiwSa+tvfbagVFg+BVu5syZ+st/hSEAo75xdznv2rWrOeOMM2JnJEnauRKF%20wWE42y5yhef1+AQKWa9J047KNeyzwLENKIbU/yV5XpPWa5K0cxWMfUEuQvlfL2S9Jk07qhTsC6Lo%201P1akrpKEhY5Y19Q9/opVgpJ6ipJO0gSNldZ2RfkIlS360nrqlBtJlcp2A5yEarb9ULWa5K0c5WC%2048NchJJdt8vI58+fHxjR7qWC5f5Jwo4bN073YznwwAPNVlttZebNm6fp241/sVEQ/JBumHZoYIbo%20WZYECrYpELTcoFEHO5p2k54wAtCQtDuE+zUp/XHQAK203n8t7Hzu3LmBl6z2aPPmzQOvW8987mnj%208rcyCDz99NNmzpw5Bpq7YQLwyigJc1kXArCzA9ehQ4e6JMO4FUyAfUEFV16KWWdfkCLMCk2KfUGF%20VlzK2WZfkDLQCk2O7aBCKy7FbPOdkCLM/yVlV0XC5CBkRn5n9zT4f/bOA+xqIuvjo2JFwI4Ne+8F%20FStW7B3Lioro6ooFC5a1Y8Pee8VeWXTFtmD/7A0L6qKuXQGxgoqKmu/8z3qyuXmTeyf3ze3/eZ73%20vclk6m8mM8nJmTMIlyXsM888o0ndfvvtrnPnzuFf37591X/w4MHqd80118Sz5HkDEqiYQBMsBg4c%20qEjOOeccZ8LDOCOoDw8aNEi9semLCZNMWh4XRo4ePbqkynE8j+eee84lSf4fe+wxDbrYYovpb555%20xsvA8/olgL6BHdDgYGsDAx9d6xG4++673fPPP69f6vbff//WA8Aa6zzBsYAdgWMB+wCfC9gHQIBj%20AfsB+wH7AAhwTqhMP1hggQV0fwxoYkLBLerGjRune6tgufnSSy+tm/fCpKFP2NVWW003AcJGQNE/%202zUd6cHf5E7RfHnceAQqKtA89NBDVZoOqft6663XZqMNqP3uvPPODhv2dOjQwUFabs6ML0d3o0L4%20Y445xoKEv+jocKZGHF748wCad0cccUSBIPSJJ55wQ4cOdYi76667asgseSJCqXz/zJ4/dUoAX4Ke%20ffZZt/HGG7uXXnpJVdlPPvnkOi0ti1UpAjAafeaZZ7o+ffpoFrCni43D6FqHAMeC1mnrYjXlWFCM%20Tmtc41jQGu1cqpYcC0oRao3r7Aet0c7Fask5oRid9l+D/GezzTbThOKyGpxjI6DVV1/dde3aVWVF%20vmGx1HzYsGFt/o499ljNa5dddtFrll77a8IUakmgYjY0USnYzRw+fLjr3bu3GzVqlFt44YVd9+7d%203UorreRgMxPaUNgMCBpxQ4YMKbCfue222zqodkN7E8JH7Gb+6KOPOkjrzYaCgUMnh4NQas0113Sw%20x3LZZZfZZf298sorHdSP11lnHff555+7ESNG6I5Ze++9t1thhRU0TJY8EWHuuefWePvss49+OYBA%20do011lA//qs/ArfddpszrVxMUOhLEHbDYad69MFu3brVX8FZolwJwJYKTAvA4SMI7CKZoen+/fs7%20aJTTNTcBjgXN3b6+teNY4EuqecNxLGjets1SM44FWWg1b1j2g+ZtW9+acU7wJZVfuFNPPVXlRU8+%20+aSbf/75Xc+ePd2LL76oe5xAeeyss84KM8sSNozEg6YnUFGBJuhBuAgV4gEDBqgQEUJFs2sAteFe%20vXq5Sy+9tI3NOggJsbz8iiuucI8//rj+QSD6wAMP6LJgE0QhjznnnNMdddRRGhZC0smTJ8M7dFjK%20Du3La6+91r355pvqP8ccczhI6Y8//vgwXJY8EQnCD9x877zzjmqfjh07NkyLB/8jYMKj//mkH2UJ%20i1SyhMfOdLY7HeJBCw+aw+ijhx12mKq8p5eMV9pDIEs7IZ8s4bOERdpjxozBj7pZZ51VP4Jg6QE0%20tTfaaCO7xN8KEMjSVlnCoqhZwnMsqEDjeiaZpZ2ytmvWtDkWeDZaBYJlaassYbP2GY4FFWjcDElm%20adtKhUVxORZkaLScg2ZpV2SdJXyWsEib/QAUauOytFWWsKhNlvCcE6rf/tgQ+pFHHnEw9wXZj9mr%20hbLRxRdfrAJOK1WWsBYn+guNUDj7jV6LHpe6Hg3L49oTmEo01dpaYE0oly2vtkue0Sx4+PvJJ5+4%20t956S7U1oXU59dTFV71jBypMMJDYm0ZkmFiJA2hhbrrppiqogFFY2FyAcdlZZpnFLfTnDudJSbQn%20z6T0ms0PQlx8PaFrXQJffPGF2pPh5jmt2wdQc44Frd3+qP2ECRP0b5llliGMFibAsaCFG//PqsPm%20PVY8YBUWXesSwL4Fq666qptuuulaF0KL1xzv23jXhx1DutYl8PLLL+sK1o4dO3pDwDzy4YcfqtwH%20CmvFXJawxdLhtcoQ2HrrrdWspKWOVdtbbbWVneb6W3ENzXhpYfwVf74OWpxYpp6HwxJ4nwetPPPM%20o9xMgwRIgARIgARIgARIgARIgARIgARIgASakQCUzlZeeWWvqmUJ65UgAzUsgeLqkQ1bLRacBEiA%20BEiABEiABEiABEiABEiABEiABEiABEigGQk0tUATKs5dunTRzYmasfFYJxIgARIgARIgARIgARIg%20ARIgARIgARIgARJoNQJVX3JeTcDYrQ72FehIgARIgARIgARIgARIgARIgARIgARIgARIgASag0BT%20a2g2RxOxFiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAkaAAk0jwV8SIAESIAESIAESIAESIAES%20IAESIAESIAESIIG6J0CBZt03EQtIAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRgBCjQNBL8JQES%20IAESIAESIAESIAESIAESIAESIAESIAESqHsCFGjWfROxgCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRA%20AiRAAkaAAk0jwV8SIAESIAESIAESIAESIAESIAESIAESIAESIIG6J9Ch3BJ+/fXX5UZlvAYn8Ouv%20vzq2f4M3YjuLP2nSJDd58mT2g3ZybPToHAsavQXbX/6JEye6n376iWNB+1E2dAocCxq6+XIp/A8/%20/MDnglxINnYiv/zyi/v2229dhw5lv2I2NgCW3v3888/6x3fF1u4M6Affffed9oXWJtGatcdzYdRN%20mTIleprrcdmzzRdffJFrQZhY4xDAwwrbv3HaqxIlhUATA9M000xTieSZZoMQ4FjQIA1VwWJCmPnj%20jz9yTqgg40ZImmNBI7RSZcuIl1cINfl8WFnO9Z46PnaPHTuWz4f13lAVLB/eD/BswLGggpAbIGk8%20G44fP95NO+20DVBaFjFvAngmiLq6FGguv/zy0TLyuIUIfPPNN47t30INnlBVPKRgolp88cUTrtKr%20VQhwLGiVlk6v54QJExz+lllmmfRAvNL0BDgWNH0Tl6wgNHE++ugjPh+WJNXcASDUxnww3XTTNXdF%20WbtUAhBm/v777xwLUgm1xgV86FxyySVdx44dW6PCrGUBgc6dOxeczzTTTAXneZ7QhmaeNJkWCZAA%20CZAACZAACZAACZAACZAACZAACZAACZBARQlQoFlRvEycBEiABEiABEiABEiABEiABEiABEiABEiA%20BEggTwIUaOZJk2mRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlUlAAFmhXFy8RJgARIgARIgARI%20gARIgARIgARIgARIgARIgATyJECBZp40mRYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEBFCVCg%20WVG8TJwESIAESIAESIAESIAESIAESIAESIAESIAESCBPAhRo5kmTaZEACZAACZAACZAACZAACZAA%20CZAACZAACZAACVSUAAWaFcXLxEmABEiABEiABEiABEiABEiABEiABEiABEiABPIkQIFmnjSZFgmQ%20AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEUJUKBZUbxMnARIgARIgARIgARIgARIgARIgARIgARI%20gARIIE8CFGjmSZNpkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJVJQABZoRvH369HE9evRwSyyx%20hLvmmmsiV3hIAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRQDwQo0PyzFZ588kl32223uX333dd1%206tTJ/f3vf3dff/11PbQRy1BlAjvvvLObaqqp3DfffJNLznmnl0uhmEjNCHz55ZfuqaeecuPHj8+1%20DOxnueKseGIvvfSSe+GFF3LN5+2339axa8CAAbmm28qJ5c007/RauW2ape6VmBPYzxqvd1RiTuBz%20Qf79IG+mvFfzb6NGT5FjQaO3IMtfbQIUaP5J/JhjjnFLLrmk22uvvdyhhx6qwqzTTjut2u3B/EiA%20BJqcwMiRI13Pnj3dgw8+2OQ1ZfWKEdhtt90cXozoSIAEWpsA54TWbn+rPecEI8FfEmhtAhwLWrv9%20WfvsBCjQFGbDhw93zz33nNtnn33cNNNM43bZZRc3zzzzuOuuu85NnDgxO1XGIAESIAESIAESIAES%20IAESIAESIAESIAESIAESqAiBqgg077zzThUWrrnmmu6vf/2ru/nmm92vv/4aVujZZ591WCL39NNP%206zLM888/322xxRYqZDzhhBPccccdp2Effvhhd9BBB2laFvmTTz5xJ598sttuu+3c2muv7fr37+/u%20uusuuxz+Fktn0KBBukwPX0TgpptuOnfAAQe4SZMmuSFDhoRp8CAbgd9//90NHjzYde/e3XXp0sWt%20u+667vTTT3d//PFHmBD6BvrFqFGj3IEHHqhash07dlRbpugPUYc+c+yxx2p6M888s1twwQVdv379%20HPpA1L3xxhtuhx12cAsvvLCbffbZ3QYbbKDC6WgYHP/000/usMMOcyuuuKKbaaaZ3FJLLeUuuugi%20FwRBPKgbPXq09rH55pvPLbDAAm733Xd3r7zySkG4LOkVREw5QVmWXXZZBx6oB/g99NBDYeihQ4cq%20Owjjow7LWMH0lltuUW/Yg8X5Z5995s466yy3xhpr6H2U5h9Nq73Hm222WcH9aunBtAPaxdwmm2zi%20jjzySK0fjmeZZRa36KKLqrb0zz//bMH0t1RbXHXVVVrfgw8+uCDeHXfcof7QwIbDmPGXv/xFxwuw%20RZ7oA3vvvbf76quvCuLipFS+CFOqj2688cYO4w0cNMDRLuiv5nzyyLufWd6V+vXtp1nGglJjy48/%20/qj9C3xff/31sGroS1tttZVyB+v7779fj++++27Vzl988cXdrLPO6jbccEM1QRJG/POgVL4WHvfk%201ltv7eaff37tVxgDb7zxRr1s/fDTTz9148aN0/yjS8R983jkkUcc7q+55ppLy7z99tu79957z4pQ%20l78+/TvLWFCMswEAT8w76AuYh5Zeemm35557us8//9yChL++TGvRRmPGjHG9e/d2Xbt21fkK8x/6%20DZ5TzPmMt5jfwALjENpj1113dXPPPbcbO3Zsoj/6aJ7Op4zIL0s/KNavfMcC5JllTvDtA6X6aLE5%20wTcP336LOtaDq8Wc4PtckHVOKNb3jHWp54JSc4JPHo32XGBsStUty3NBKc6WZ63eEZB/nvdqM7wj%20cCwofI9t5bHA7k/+kkBZBOTh1stJ4pDyhH8+kSZPnhzsuOOOYRzRfgyPt9xyy0BeLjWZq6++Wv3l%20pSNYaaWVwjD/+te/gnnnnTcQQUNw6623hv7yMK7x7rvvPr1m5YqmLwKtQB5kw2KmpYMwYi8xECFV%20GBYHzz//vOa30UYbFfjzJAieeOIJLwwilFaGIiQI5GU7EGGgnvft2zeMf+6556rfIossEojt0mDz%20zTcPFltsMfUToWUgdkw17G+//Rass8466i8vdAH6j7yE6bkILsNwIvQOZphhBvWXDZ4ClEEEgnou%20AtMwX/S9lVdeWf3RN7bZZpsA5URfmnbaafXX8n788ceDGWecMZh++ukDeRkL1l9/fe0z6Jevvvqq%20ppklvbAQRQ7OOeccLYMIKwJ54Qzk5S5A/0bZxLaKxjR2snS5ICUwQD3OPvts9T/xxBP1XIT0+otr%20ItQL0vwLEks5EWFA8O6776Zc/Z832nD11Vf/n8efR2gbESKH/giH/gHGyy23nHKWDwtaXjEHEYbz%20aYvvvvsuWGihhTSuCKo07scffxyIMCNAPlZu0cLWMLj/RfCkfQB9CXwQX2xcZsrXp4+K4DRAmyIP%209DsRWId9yKduefezsIJlHviMBb791MKVGgtQVJ+x5cILL1TOmFOmTJmiNZQPGOq333776bm85Oo5%202gP3FtpHBO3aD+EnHwA0nP3zyRfzEvou7lf5eKBp2tx0wQUXBLfffru2u+WJPiCrAywLr7ohDaTZ%20oUOHQD7kBZincD/Z2CXC/DC9Sh+I/b/grbfeKpmNT/9GIr5jQSnOSEsEQsoGrOeYYw69x8Eb53PO%20OWcgtssQTF0Wpj79IEt6Voa0X1kpEs536623XiAfX/WZBfXA3GrOZ7yVD4paf8y1Nt5h3BXBZaJ/%20dBy0fJJ+fcYCxPMpo4XLa07wGQuQZ5Y5wacP+PTRYnOCTx559jMwaI/79ttvA/k4XTIJG+tLPbtY%20uDzmBN/ngixzgs+Y5vNcgDa0cQljeHRO8Mmj3p4LREkl+OWXX0r2A5+6+fYBH84oUK3eEZB3nvdq%20vb8j4N36xRdfRLWLOmtfjgX/fY9ttrEA76s//PBD0T7Ai81LQBRIwncsPK/KiuiKVRbaaF4OBYn+%20+UQSDQCNA4HGm2++qS8XEACZ0HLgwIGajAk0IYiaeuqpAwhecFPLpiz60o98IVAS7angkksuCeSL%20twobOnfurOlDQPbFF1/oBHrvvffqiwriiFZmWEwID5LSefnll9VfbNqFYXGAh3iEx4O+fPksuNbq%20Jz4vLrLBkvLbY489QmECBjUIC8BVNkVRjDaZQUj5wQcfhGh32mknDYd04G644QY9hzDRBke8rG67%207bbqj34BoYXsUK/nog0VpgUBFl6MILgyYeDll1+u4SAIgOAdDi96EPShfPiDQBNpLrPMMiosMOEl%20wspXfE1PNLlwGvimp4E9/kHghzL85z//CUOLCQT1MwGfsSv1IGCCS6R31FFH6X2FRNP8wwyLHFRC%20oInyHX300WGu8uVe64s2hfNtC4T9v//7PxX4QHgIgQvaCemLxjUuq7OXV9GkCx++8VCMPouwhx9+%20uIbzzdenjyJB0ZzV9K+//npNH/9888i7n4UFKPPAZyzw7acWrtRY4Du24H7GBwi0pWjxB4899pje%20s6KhF37sspdXzD14uTKHB3HMLxASQtAD55Mv+g8+yEDYCGGGOYw7GH8gRMO4BYdw8Q9pPnngRREC%20eOQRvfchnLOPPPUm0PTt3+ACgVepscCXM+YBpLXaaqsFonWN5HWcl03/1B8PW3BZmNaijewjlawM%200PLiH14Y8UwEAYjNiT7CQhNoggv6oKyECMAzzT/MsMSBz1iAJHzKaOFK9QPffuUzFiBP3znBpw/4%209lHkmzQn+OSRpd8in0q7Sgk085oTfJ4LfOcE377n+1yAtonPCb551NtzgY9A07duvs8FPpyRZ63e%20EfK+V+v9HaFSAk2OBTOFShAYMyr9Loo82uMo0GwPvcaP2xQCTWgUQAiJh1dZylTQKrJEWK/NNtts%20qqVpAk08vMpy8YKwJohcddVVCwSLEHwgPL5ux50sy9VreBlFOeDS0rnppps0rGwGFE9GX2aRhyxZ%20bHOtlT18Xlyg/YEXeHuJNF4QCoKpmB5QL3tYkeW3FkR/oVmHcOedd56ey7IsPYcAOuog8JNl6AHC%2048UMcXr16hUNoseyvFqvHXLIIXoOATbCRoWUuIAv3RA64BoEmrJ8W4+TBATQ6kQdZelo4JueZu7x%20DxrGKIOYUFBhvZUND4qmYWjsokINhLOX37iGJrQ9os4EmnH/aJi040oINDFWgH/UQVMBmrtwvm1h%208Y8//nhlCOEPWMrycrukv3h5xQeUDz/8sMAf7Y6xA8JQON98ffoo0kt6efXNI+9+hvK0x/mMBb79%201MKVGgt8xxbUC3MP7mcIfdCe+EAVHc/t5VXMDLTBYHMMXhbhfPK1McgEZdFEMQZhrMKHOrj4yyv8%20fPKA4BX9GeNP3GG8xLWk8SoeNq9zHw1N3/6NMmEcKDUW+HK2exLjZtTJ0sRQixtCmCxMa9FGskRS%202xUf5vB8A2EZ3Pvvvx+gbvZRDtxKacRHBZdRDZo0/yi3Ysc+YwHi+5TRwpXqB1n6VamxAHn6zgk+%20fcC3jyLfpDnBJ48s/Rb5VNpVSqCZ55xQ6rnAd07w7Xs2BhV7drV2ic8JvnnU23OBj0DTt26+zwU+%20nO2erMU7Qt73ar2/I1RKoMmxoO3qm0q+i9rYVO4vBZrlkmuOeNUUaHaQl5+KONEWcfKQrXbwYJMm%207mCvDjabZFILLy2//PJONPPC8+gBdiEXAWnoJYIoPYbdxbiDjSbY3xNhl/v3v//tRDsjDBJPR5bK%206TVZYhqGsQP4oR7ywmZe/PUkAG5yO6p9ymgU2ISCE6Fc1FttRUY9RIilpxYebSlCJieC7WgwJ0uR%201D4aPOULrV6TJXn6G/1nfmZjztKTZefRYE4EHmpj0vqIfIaYAABAAElEQVQs6gEHe5PDhg0rCAs7%20i6gj0vRNryCBIiew8ygPQO6KK65wV155pRMtUbXrB9udsPNXjkvbUTnNv5w82hMH9yz4Rx36gfUB%2037aA3UK4k046SXcSx1ghy02VYzRtHMMeavzelw8tTpa9O3nZV/t0vvlaHyjWR+P523nWPEr1W0u3%20EX9FiF1Q7PhYAFa+YwtsA+LehW08jOOwpbjCCisUpI8TGx+iF+QlUW3OitBIvX3yRR+Akw9t+hv9%20B/vRpVyWPMQER5vkUOZ6dL792+7dUmOBL2eMzTamR7mIgFvtRX700Ufh+I3rPkxr0UZ4NoL9TNgb%20E0GX2gJFWXEsH2OdaBhHq+d1jHEv+mxkkdL87Xo1f0v1gyz9yncs8J0TSo1Bvn00jWct+llaWWrt%20n+ec4PNcgPqWmhPsfcT32ZDPBYW9yPfetVil+oDP81ct3xFkBZpWxWeOsToX+23FdwTwKNUPfMZN%2048qxwEjwlwQan0DFBJomsMIkgw1A0lzUMD82Z0lzsky94BJeROCw8UuSky+dKmRC/tGH9rR08LAb%20d6INoQJN0aiJX+J5CQKiaefw0ogXsSQXFyLFBVnxON9//32BQDt+HeeypEO9k9KCMBQOhtPhYDwc%205Uty0ZdD1AMO/WzBBRdMCq6bSPmml5hAgicEIhC2w0C0aFw6+eLtZFm9/mFjH1k6nhDrv16iaZN4%20zYQF8Ytp/vFweZ4nlTGp3aJ5+raFxZFlmOHHCNG6VAGlfMW3y/qblqf1DbSrb74+fbQg88iJbx55%2097NIEap+mNQHUIi0NrECglWWscU+YiC+2GV2stzYiWauJae/SXlaHxBNAw3jky/6AJyNN3qS4Z9P%20HugDcFa+aPLRsSvqX+tj3/5t5UxqD7uGX1/OmBPEzmib9kYa1kaYE7IwrVUbYeMq9F8xq6Mfux54%204AGHP9HK1Q0UZSkeqpXoku61tHE/zT8x4Rw9k8pYqh9k7VfljgWopt1vNieUGoN8+2gawlr1s7Ty%20VMM/qQ8gX59+UKo9rPw+zwVpeVofwJzg2/f4XGDkC399+VmsUn3Ah3Ot3xFQF+tDVi/8ljNvt+I7%20AliV6gc+4ybSgeNY8F8O/E8CzUCgYgJNWeanfCBAxAtkmpPlUbrrG64nCRUtXvwadiuFs4dGC2e/%20JoSEtlXUpaUDbdG4gxAErlYP+PHyNNL5kksuqUI4vHxFJyBZKuegMYddu7M4aGLKkh3dfRradubw%20giJLQ91aa60Val7Zl18Lg1+x4aqnEHTDIT3Z+El3uoXgOuosLPxQDzhox5xyyil6bP8gVIfWFwTx%20vulZ3GK/eKh/7bXXdOdi7MKOPzyIQRNAlpLqzvHYEdycaTDaeXzXd/NPe2hK87d47f2Nlw/ppZWx%20WF6+bWFpiC1e3dldbGI62VRMNZnQttjF2pxsFqRamKYFCH+UF/0KAg/0U998ffroEUccYVkX/GbJ%20w6ffFiReJyfxflBOH0BVwAoCfp+xBe0tSwz1YwTaB1rPsoStzQcBhMNuz1H3zjvv6CniwfnkixUB%20cNiROu5kqZSOfdiZtFu3bvHLeu6Th2mM2uqCaELRsSvqX+tj3/7tW05rk1Kc8SEKu0yjr0HzLuqM%20FeYEe7n2YVqLNsKHX7Hr7aCBu+mmm2o1MM/169dPP9SIvUWdJ3Ahfp/BL+leSxv30/yRTl7Ot4yl%208svSr3zHAt85odQYxLGgVOu17atJ/bR0Kn5js6Xj81yAsKXmBN++x+cCI1/468sPzzs+zoezrc6o%20xTsChGdwPnNMqfo22zsC6hufEzgWFPYC3/sF90GjviMU1phnJJCNQKGaSra4RUPLxgt6HQJHCIN2%202WWXgj/ZaMHJph9ObCSF6cS1ZsILchC/Joad9bJs9BANpscQMtmkYeEsUDwd02owjU8Lh1+xraen%20WO5Ll42AbLbjILyU3UULIl566aW6pFs2RCnwL3UiO9trEGijRB3O77nnHtXCgSYuBN14uYu+6EKj%20AktN4UxDT2zo6Pmpp56qv/bvH//4R0FcLBOCeQTZkMeJfSgL5vCFXnYX1hdMpO+bXphAkQOxy+lk%20V3NNO/pF+aCDDnJi40tfvsW4uS6jRjKPPvpomBqYX3vtteF5rQ8gfBabhSqItrJAEIX7P6vzbQuk%20C81W2VhMl5DKxiAOy3MgFNh///0LsoUgQ3aLLPATu7oqqLblu775+vTRaEZRbRTfPPLsZ9GyVPLY%20PkDk1U99xxbcOzDRYB8D0K6y0Y+TzeL0g0G0zrhnoh+18PIBUw9w1g988l1llVX0Aw4E6NE+LnZ2%20nWxM5J588kkX/YAS7QPIyycP2Tld64Fxzpa1Ii768vnnn4/DunO+/du34L6cbbzH0rKog2YjTEpg%20bhf72jonoW/4MK1FG2FeAsMhQ4aE1UDZ99lnHz2fNGmS/uY53oYZ5XyQZxl9+1WWscBnTvDpA759%20NIo3Oh745NGIYwHqW6s5wfe5AGUsNSf49j0+F4BmW+fLr23MZB8fzrV8R8jzXm22dwS0aLWfDzkW%20JN9H9CWBhiUgdoC8nFQwiP75RBJbIRoHu51HHXZ/RVryUKO7+9qmQNiBOe5sM5/4TuMjRozQNLDx%20kHyNCKPJw2ggAlS9Ji+ioX9aOvLiqWHFXk4YFgffffed+iMeXSEBH+P/IsjWTTjQzrvttlsAw97y%208hV07NhRN3nBZgZwZvC71MY22MUeGwQgvT59+mg8GPbGTr8w5D9hwgRNT4RTGkaEkLrLvbzgB/Lg%20pH7yQKE7uSIgNuawzX+wy7VoTQUiMAymm246DYt8sDkM3Jlnnql+suQ8EC3NAP25e/fu6idf+zVM%20lvQ0Qol/2KQKZUCZsYO7PFwHZgRcNHQ0NjYHEgG9bmDzt7/9LUBdsSGEaMRq3PimQDCIHnW2KVDc%20Pxom7dh3UyDsyot6yMudtplom2r5UEbRgAyT990owqctsEmTaGHqxmNgBIfxAwb3UZabb75Z/dBv%20cI4/+eASXHzxxQHaU5aoar+Kjis++fr2UexKiDzFTmeATarEtpKWxyePvPuZZtyOfz5jgW8/9R0L%20fMcW0YZVzhh3zImWs/qJHSbdSMU2gEB7YMdxEXwFYtIhkJUFGi66uY9vvgMHDtS4oh0YwIA9+jw2%20c0Ee8mHFiqJjCDYVEy27wDYe8s0D6SI9bHSETS5wr9uYBP962xQIlfbp3wjnOxb4cAZPu88xbmIs%20xT0ny/50QzcRbCJLdb5Ma9FGou2n4yaed1BvEWwGgwcPDrDjK/oQNuGA8xlvRWimfQebaERdmn80%20TLFjn7EA8X3KiHC+/cCnX/mMBcjT+gruoWJzgm8f8OmjyDdpTvDNw7ffIp9KO99NgWoxJ/g+F2SZ%20E3z6nu9zAdoGY3h8TvDJo96eCzAeyUeEkt3Np26+zwW+nGv1jgAYed6r9f6O4LspEMeCtu+x6CvN%20MhZwUyC0Zuu6am4KhM0VvBwe8KJ/PpFkqVcgy5c0nnwZU2HBhhtuGAqNIESCK0egiXiygZCmjZeT%20HXfcUdMXjUz1g+AsuoN1mkBTlnHpA4QsAUSSoZMlv5pO/KE/DNDCB74vLrJ0KxAtAxUQoe+I9mQg%20G9AEzzzzTEgv7WFl5MiRyt+EcoggWrcq4IMQz/oiBH6jRo0K08OBaFOGu9ojHPoCdjEWLZaCcNjd%20GoJsCLAQDr8QGkJQinM8nJsTzdJQAIprEHhAsCnamRYkyJJeGCnlAA8De+65Z3ivWPmwm11053i8%20oNs9hjBiszSQjSMK2IlmmJ7jfoy6NP9omLRjX4EmXiJ69Oih+aN8eEmFIHXbbbf1EmiKFmxBOJSn%20VFtgd1jkhb4VdU899ZTe6+iHoo2nL68YL/DSaUJgxINfUh8vlS/y8umjov1X0O9MGIH4Pnnk2c+Q%20Z3tcEqek9Hz6aZaxoNTYgr6OcQKCRHycijqM6WhnfECzl1cx4aACZvjjD8J2sf0c7h5t8Uvli3DY%20gVo0v3W8i6aHfi/LqiypQDRG9aMewmDMMeeTB8JiR3P7KIM0INw644wztPyikWzJVfxXVkRov/fJ%20yKd/pwmy4mOBL2eMVVtuuWXBWIp7HB9F486XaS3aaPjw4To2WZ/CL4TwooEeVsNnvIXgEveGfRiz%20yGn+dr3Ur+9Y4FNG5OXbDxC2WL/yHQuQDgSavnOCTx/w7aNpc4JPHii3b79F2Eo6X4EmylDtOcH3%20uSDrnFCs7xlrn+cChE2bE3zyqKfnAl+BJupcqm5Zngt8OdfqHQH1zeterfd3BF+BJphwLGj7Htss%20YwEFmujhreuaRqCJJpTlpgGEmdCkswdxaJVgADOHyQXXjj32WPMKf/HAji+W0LyMO7wcQksB6Vna%20EG5CSCVLjguCF0sH5UMeePExB404pHnccceZF3//JOD74mLA0HZis6ZA+GfXyvnFw7/YN1Ity2Lx%20ZclngK9/USFCUnhMvHgQSupj8fDoI5999lncu+A8S3oFERNOkBa0c8SeXzBx4sSEEIFyRRjTUk0M%20lLOnr0DTssVLLPoAXvDycj5tUSwvvLwutdRSGgSc0aeiwuK0uD75+vbR9uSRZz9LK0cp/yxjAYT/%20effT9o4t9vIqy4+0qhAg4F4r1U998xVTJgG00Uull8TZNw+8yJYak5LSz8svi0DT8vS5hyysz68P%20Z/Q/jEHRD1VpafsyrXYbQegITSQ8V2FMxXmSq8R4m5RP1C/LWIB4lShje/tVOXOCbx/w6aNRntFj%203zx8+2007TyPswg0kW8zzQk+fa9VnguyCDSt//nws7Clfn051+odAeXP616t13cElEvMupRqqvA6%20x4IQhdeBz/1SD+8IFGh6NWfTBqqmQHMqUBTBXUknAr+CMJ7RwjiTJ09W24TYkAOb7IiAM7yWxwHs%20n4kwQjdukGXDmZKEbbW+ffvqZhGiraVxYb8INrZkOaizDY4yJdrEgWEHzuzKNXE1K1I1EdqrnbZi%20icuS+tDmZ7FwtbwmL9VqR3TxxRevZTHalbdobavNVdv8pV2J1VFk2BDGZmulHDbZMltmpcKmXW/0%20sUBWBzgx16A2V2HnuZlctcYa+ZDi8Edb09l7TzXv1eylyxaj0ccC1JZzQvvmBNGGdyK4ddgMtFEd%2054T2P3+KVrTa/M36LtaofSbPcldr3s6zzElpiZkn3csCdksb1XEsaP9YgPcM7KkiKyUbtRuw3O0g%20ICb9nJjUCVOQlUZOhJzheZ4HFdvlPF5Isf1U0Ycc+bKuG6bE8/U5x+62xxxzjBrcP/zww3UzINE2%200N1xKcz0IcgwvgRkGauT5Y9Fg88999xFr/MiCRQjMNtss6nQvNRHJ2yCQte8BDjW1H/b8l6t/zZq%20hhKynzVDK7a/DpwT2s+w0imwjSpNmOmDAPsZ+0GzEaiaQLOeweErInbBls0ZdGdk7ICKB0AxJF/P%20xWbZGpCAbBTi8EdXewL9+/d3Yn+09gXJuQRiC9attdZaOafanMmtuOKKOs6L6YGmqyDHmvpvUt6r%209dVGnBPqqz1qURrOCbWgzjyNAOdtI1H7X44FtW8DloAEfAlQoPknKSw5l92PndjkdFhOK7vduk6d%20OvlyZDgSIIEGI3DCCSc0WIlZ3LwJyKZiDn90JEACJMA5gX2AcwL7AAmQAAhwLGA/IIHGIUCB5p9t%20BRuhjz76aOO0HEtKAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAi1IYOoWrDOrTAIkQAIkQAIkQAIk%20QAIkQAIkQAIkQAIkQAIk0KAEKNBs0IZjsUmABEiABEiABEiABEiABEiABEiABEiABEigFQlQoNmK%20rc46k0CDEfjjjz/cRx995KZMmdJgJWdx8yTwzTffuAkTJuSZJNMiARJoQAIcCxqw0XIuMp8LcgbK%205EigQQlwLGjQhmOxSSAnAhRo5gSSydQPgS+//NI99dRTbvz48fVTKJakKIFibTZo0CA377zz6u7w%20F198sabz/PPPux122MEttthibokllnC9e/d2L730UtE86uliWn1Rn4UWWqieilrVsqANX3jhhTZ5%20vv32227dddd1c845p1tkkUX0+o8//uhOP/10Ndw+//zzu7XXXtudeuqp7ueff24Tv149kup7yy23%20ONh0vuGGG+q12A1XriTODVeJFitw2hiZNBYATTPOCRwLnM7rSXNC0nNBs84Jrf5ckPfQlza25J0P%2008uXQNo8zrEgX85MjQQakQAFmo3YaixzUQIjR450PXv2dA8++GDRcLxYPwTS2uzzzz93p512muvU%20qZMbPHiwW2edddxDDz2kv8OHD3fdunVzM888sxs2bJjr0aOHGzFiRP1UqkhJ0uqLKFNP3brD8m67%207eZ23nnnNuTOOOMM9/TTT7u9995bhZbQ1N1iiy3c8ccf78aNG+eWXXZZ984777gTTzzRbbrppg5f%206xvBpdUXZW/lfpB32xXjnHdeTC8fAmljZHwsQG6cE/JhXo+pJN27Sc8FzT4ncD7Ir3emjS355cCU%20KkGAY8F/qXIsqETvYpqNToC7nDd6C7L8JNDEBKCZ8fvvv7sDDzzQHXrooVrTNdZYQ/1wbfXVV1e/%20u+66y+2yyy7ulFNOcb169WpYImPGjGnYsley4K+//rqbZZZZ3DXXXKPZQIABLeytt97a3XPPPW6a%20aabRPrHyyiur/2OPPeY23njjShapYmn36dPH7brrrlqnimXChEmgQQnExwJUAxo6mCeabU7gWJDc%20SZOeC5p5TuBzQXI/oC8JcCxgHyABEgCB1lUFYvtXnABeMLAkdM0113RdunRxSy+9tNtzzz0dvq7H%20HQQQWEKMpcVYcvu3v/3NPfDAAxoXS8nMjR49WpcXzzfffG7GGWfUJahYbmxpQoiBlxs4aPYh7zfe%20eEPPUR5o+XXv3l3LgyWsKF+jaHNpJRrs32abbeb22WefNqXed9993QYbbKD+aW227bbbuoEDB2qY%20iy66SNvyrbfecpMmTXIdOnRwq666apgutDPhJk+eHPr5Hjz33HMqGMOyZQjN0D9uvPHGNtHRj9BH%20F154YTf77LNr+a+77rqCcJtssok78sgjVWMIx0hv0UUXVWGsLYVOqy8Swhdo9GdzPukhrA9nhENf%20P//8893yyy+v9wC0W5dbbjl39dVX43JF3NChQ7XtwDnq8CCK+xPLKu+44w49/vTTT1XjEv4DBgxw%200MLF8fvvv+9++OEHPT7ssMO0DyAt9AEIM+Hwa30iaz/49ddf3bHHHqttDyYLLrig69evn/vkk080%20bfvnM6bdeeedWs5Ro0apIH7JJZd0HTt2VA1iaJnCpdUX1x555BFdXm8a5j7pIZ4PZ4SDKzWO/jdU%20/v997iHkinvl6KOP1g8WmDvWW2899/DDD+v98de//jUsWKn+XIwzEgGH7bbbzmE+WWCBBdzuu+/u%20XnnllTB9HuRPwGesShojYW4kaSxACWsxJ/iMBSibzxieVF/cK806FviMVWn3brHnAvCu9pzgM6b5%20jOFp9UWdmvG5APWC8+GHcNV4R0A+nBNAoXqOY0G258NmHguq1+uYU1MSCDydVD6I/nlGY7AmJPDE%20E0+UrJU87AcbbbSR9pk55pgj2GabbQJZFqrnYgcvEDtYYRqiYRVMN910wbTTThvIUnH9w/EMM8yg%204eXLu4YVYUeAuGJfLlhmmWUC0WIKxH6ihhHhpIbB71xzzaV+IhzVPF999VW9JktU1X/xxRcPtt9+%20+0BeYvW8b9++ep3//AmIADl49913S0YQ4VAgWpRtwokAMphpppnUP63N5EUwkCXl2kbzzDOPtqVo%205wSHH364+om9xEAEGsHEiROD/v37q98JJ5zQJq9iHvfdd5/2PRGGBaL5GaAsOMZYd8EFF4RRRZgS%209keUHX1JhFQaTrRHw3CoL/rV9NNPH4igMJCXd00f6R1zzDEaLq2+uCjCz0CEaRoO/3zSs3ClOCPc%203//+dy1z586dA1maHYiGY1i+Rx99FEEyOZ+x4Nxzz9U8RUBXkDaYgsvZZ58d3H777eH4gHsfY4UI%20woN7771Xj0WAre0Cf/nYEXz99dc6XsjHj0A2i9J0RRAVoF7yoSMQ4WdBXsVOfvvtt0BMGWhZunbt%20Gmy55ZbB3HPPrecivNa8EN93TLP6iq3PQEwlBJtvvnkgNtA0PbQnyp5WX+Rz8803a9ghQ4bgNPBJ%20LxquGGeE8xlHEc7XiT2yQD40lAzuew+JMFPvQ/QNETLq3IFxwOYD3KfmSvXnYpwff/xx7Su4V3Gf%20rr/++jq3yEeIwOYMy4e/pQn4jAVIpdw5QT7EJI4FSLPac4LvWGD1LXdOaLSx4Ntvvw3kQw6qXdTZ%20mFZsrEq7d9OeC2oxJ/iOaVbfcueERnsuePbZZ4NffvmlaB/ARV9+1XpH4JxQssm8A4g92+DFF18s%20Gd7uDY4FTufGUs+HjTYWiN3TTM/jJTsMAzQUga222krfZ/A8jz9RUqlY+Z1vylYY+/WNx3DNR8Dn%20xUU03LTzrrbaasFXX32lECB8shdQdHI4CBMgNIAQQ77Aqh/+4UFH7IRoGibQFA0NPYdAwxxefjHA%20I75oWam3aHxpuOuvv96CBbfddpv67bHHHoHYWlJ/CD1ES1D9ZflqGJYHpQnkKdBEbkltBv9//OMf%202j6XXXYZTtX99NNPKoDAWAQBNwRYOBZNK6+HaEsHfQ+CJggwIdg0hwkYQnOkjRdX9BcTnKNfm4NA%20Fy+qCIs4cHhZR1lEu8yCBfLFX/2Qhrm0+iY9rPik5yMkwP2Hjwu4Vz7++GMrSnDttddq+U466aTQ%20z/fAZyzweWC1/NAeEGLFnWiUantE/cVeqrYd6oOPF+AE4VTWe1k239G4EGiZIBTtLppA6n/JJZdo%20tr5jmtUXwtEPPvggLPJOO+2k6WEsMpdU3zQhRqn0LN9iLwbI13cctTKW+vURaGa5hzBuoy0hWMb4%20Dicat+EHMhNoZunPcc4oDz6K4aNKVHh5//336/284YYblqo2r8cI+IwFiOIzViFc2hiZNBZUe07w%20HQusvj5jeFJ9G20syFOgCXZw8XsXfknPBfCv5pyQZUyzsbnUGI46JNW30Z4LfASavvyq9Y7AOQG9%20Lz+Xp0DTSpV0b3As8Hvn8Jl3szxTWZuU+qVAsxSh5r5eTYEml5zLkyZd/gTkQVwTxVJhLM+Fw869%20sHGIJeXy4ui+++473ejjww8/1KW8tgQZYbGxB/6iDkuJkJ5o4YXeop2ntrPkYcTJF+HQP36A8iB/%200brT5cq4jmWg5513nga96aab4lF4XqcE0HfMDAHaFBsGwcFPXqr12OcfwmMps2jQ6ZJzi4Ml51iC%20jWXx33//vdplE+Gl2uaEyQRzoumr5g1kOtJl0+YvDw7u5JNPtlPdsAab1owdOzb0y3KQV3ryYuBE%20aKnLnbG81hzuQzgs6W4Uh3a58MIL9d5HmUWQ6USwqWMAzABgCaqvE0GCBpWXTh0TcAKj61iaj2Xo%20oq2p133HNA0s/w4++GA1T2DnttlRuf0gr/TaM45aXbL+wryA7z1kYzHaA+0KJ9qZai4kmm97+rMI%20MR12y4Y5DNhdNSdCVB0LRFPHffbZZ+bN3zonUO05IetYkNcYbs3QyGOB1SHv32rPCVnGNKtrXu2G%209PLqU+0ZR61e5fz68oOZlmq8I3BOKKcV6zMOx4Jl9b0j67NmrcaC+uxFLFWjEejQaAVmeRuDwHvv%20vacvo9jAJeogdIAdLFkm6hDmP//5j16Oh4MnNnyBoXdza621ltojxAYweBiCrRvsbAz7d3AQbqU5%20vLxC8LTiiisWBBFNLD3HyzZd/RNAe+23334qsBJNN/eXv/xFCw2hlJgOUMG4aImocKtUbazvyRLw%20NkGjdvrQT+Fgxy/uzM/C4LpoU4SCGAsPoav1NfPz/c0rPdx7Bx10kO4EDzuf2FzjzTffVJuVKEux%20+8e3rNUKB6GlaCKqHVNZmuhE88WNHz9ed0gX7Skn2rAqjPQpD/qBaOqF9jctjiwPVBu7du47pll4%20CLGjzgTv5faDvNJrzzgarU+WY7s/7H6JxjU/C4P2ENMBbqmllooGK7CNhwvt6c+YD+CwydSwYcP0%202P7JigKdK1Ae2NWlq28CtZoTIGyPP7fEn29khYrCy2sMt5Zo5LHA6pD3b7XnBNHs1yrY+BWtj/nZ%20mGbX8mo3pJdXn2rPOGr1KufX2BiraBrmhzD2nBa/1xA+73cEpMk5ARQa23EscKrokfVZs1ZjQWP3%20Npa+XghQoFkvLdFk5YC2JDZugaZT3EF4ACfLxMJNXLChR9zFB2Ox8afaM9gwAlo1q6yyipMl5A6C%20LXxdLeYQB4M1NkNJctAapaseAVnaUFZm0KqERiE0JU2YiYSwmcfIkSMdtLtkuZMTW6wl08dXXDjr%20j2kRTPPXtMWi4Swu+rK5pHB2rZzf9qQX5Yyvr2LLVj8SzDbbbE7sRur9A+FRVOu5nDKWEydatqzx%207UMHHlwhzITDL14yIYhEX4B2pY9DP8AGY6Wc75hm6bSn3SyN6G+56cU5t2ccjZYny3GWewgbOiXN%20B6gHPkqZa09/xnwAJ+ZOdAMoSzP6K3ado6c8rjCBeD/1za5Wc4LP843Vodx71+LHf8tNL864FmNB%20vC7R83j5otdKHVd7TsgyplnZy203ix/9bU9aUc7tGUej5cl67MvPNvhLmhPyfkdAHTgnZG3JyoSP%209tGsOXAs8CcW5VyrscC/tAxJAukEKNBMZ8Mr7SCAhwLsaoxdgqPLW5EktMLgxB6KCjVxDG2xuBOD%200gVexx13nApAxb5mwXJ0CC9KOew0DEGXbDJSoD2HARzCUFsWXyodXs9OIP7QiRTiu0f7pvrFF19o%200CRtQtOmgqaej4PgC27MmDFtgp922mnaL2DiAH0ZzrS6ooGjfTnqX4vjUpyxYy4e9GDa4YEHHgiF%20eBAIVEOgGS9fuX0AbK0fQKgQdWJLUzVNffsA4qIfvPzyyw6aeWJjNEwO2iHYaRsajUcccYT2A58x%20DWnV0pXi3J5xtNx6ZbmH0B4Y++NzB7hGH77b058xH8D17t1bzaBE64XVA2IXtI02fzQMj9tHIN5H%20kVq544GNBdWeE3zGgvZRan/sOOc441qMBdFalSpfNGypY+sH1ZoTVlhhBS0SnwtKtUzydd85wZ7T%20qvGOgJJyTkhur0r7ciyoNGGXuEosOie055mq8qVnDiRQnEBb9bni4XmVBLwIbLzxxhoONvuiDoIU%20vKzKhgwOwgcsI8FSzLvvvluXoFtY2djDYXCNOggYoEnVq1ev0Bsvn88884yeR1924RE9lx3XHYSX%20sLsXdZdeeqmWQTaiiHrzOCcCEBDhQRTCInMQKo8bN85OC36jbVZw4c8TMxkwdOhQB/up5vAVH35w%20K620knkX/YWGL7Qcbr311oLyyC7QagPzySefdLLpj8OywS5duqgmcFT4CVMHp59+uuZh/b1ohgkX%20S9U3IUqilw9nW+KF+yeqkWg2JPMqS7yAJiSENpA53IuyGZGdFvz6lMP6AZaHRR3aElp8vn0AcWEC%20A87s6erJn+eyu2poc9fauNSYZvF9f33q65OWL+es46hP3qXCZLmHZBdjTe6MM84Ik0V/gf3lqMva%20n6OcYUdUdjN30PCFiQpzspGBW3vttVXD20yZ2DX+5kPAZ6yK5hRtt6i/HdtYUM05oVJjAepUqr5W%2072K/9TwWoNy+5bM6+jCxflCtOSHLmGb18P31qa9PWj73WtZx1CdfnzC+/Kr1jsA5wafV8g/DsaA4%2001YYC4oT4FUS8CQgL39eTpLTnUft1ysSAzUlAZ/dTGUZZzDPPPNon5HNfQLsFHzIIYfoDsuiSRGI%20YDNkI0IhDYcdILGDudhCDGTDnkCWwqq/aJVpWFkiq+c77rij7swsS0oD0axUP/RLeeHVcNipFufL%20Lbec5omdhlGeueaaS/132223ALtOyoYQmo8IVAPZHCYsDw9KE/Dd5VyWgitzER4q88MOO0x3ohZB%20ou4wbDkltRmuJe1giN3M0b6yWUsgRvYDEUQFYptK/eTruiXp9Ttw4ECNJ9oCgWhlBigfdi5H+uiX%205s455xz1EyFIINqMgWwYE8gDsPrJA3cgDx0aVAz1B2LXyaKFvz169PCqr9jFChZccMEwnm96PpxF%20oKjlxe7t6P+ifRrIhkjqh/rKZkjBK6+8Eubtc+AzFmA3eDE9ofXH/Q12YIQ+gHzPPvvsMCuUAeND%20v379gssvvzz0j+9sLDZ0dSxBuqJxqn2gf//+gWjnBLJUOFM9RLMn3J2+T58+ykaEvrqDOsawCRMm%20aDl8xzSwRb1K7TaORJPqKxuOaPwhQ4Zovr7p+XL2HUc1c49/PrucIxnfe+ibb74JMBeAoQg39Z7E%20+IH+grbF/QaXpT8ncT7zzDM1D9xvmDsGDRqk7YF8DzjgAM2D//wJ+IwFSM1nrEK4tDkhPhYgbLXn%20BN+xAGXzHcOT6ttoY4HvLue+YxX4Jd27Sc8FtZgTfMc03zE8rb6N9lzgs8s56urLrxrvCCgP5wRQ%20yMf57nLOseC/vGXloT6PlHoebrSxgLuc53M/NWoq1dzlHNosXg4P+dE/r0gM1JQEfF9cIPSSXWP1%20JdT6jmzWEYwYMaINlyuuuCKQTSBUmCHacIHYRwwGDx6sfU52OdTwr732WoD4lpbsfBvsv//+gWjZ%20hH4IKLs1B2JUXIUbCIuHK7iPP/44EE3N0B/5yM7DgWh46nX+8yfgK9AUbccAwjxrM7zcnXjiicG2%20225bIOBLazN7cbnyyivDwokNzUA2twkFYkgbwo4BAwYEorUZhvM5EM2v4NRTTw3QF6yMYhdTyyhL%20YAqSQD8TreIwHITue++9dyA7aofh0l5eRevLq754WJElVpnT8+UMga3Ykg3rIDu1B6INHcgSXPWD%20UCeL8x0L8EED96sxhlBCNKr0PPoAJzZQA/lir/4QKpoTjUsVYNs5fvGhA+lYmvjFRwwxQREN5nX8%201ltvqaAMAlJLD4KzUaNGFcT3GdPSXl5RLqRdqr4mxAALuCzp+XD2HUcLKl7kxFegiSR87iGEkx3G%20A7H3qvclBNz4YDF8+HA9F+04BFHn25/T+pVo6AcQ8Fubo5/hHhDtTMuCv54EfMcC37EqbU5IGgtq%20MSf4jAVA1545odHGAl+BJrj4jFUIl3TvJj0XIGwt5gSfMS3LGJ5U30Z7LvAVaKLNfPghXDXeEZAP%205wRQaL/zFWgiJ44FgT63+jwfNtpYQIFm+++lRk6hmgLNqQBKbqKSLm6fyDNayXQZoPEIYCmuz6Yr%20VrMpU6Y40YB0ou2ky/zM335hhxAbk4imjMOSPyyHxWZC2OgFS0hh46Nbt24aHOr3WBKMTR1gg9MM%20hcNPBEwOm52UcjBGLlqbGh8bBdFlJwB7VWgrEYh5RRYBhe5Mjt2nrc28IhYJhGWo6BuwvQN7THHb%20WUWiJl4SgbeaJcAGUcXKCPuMWO4uDxaJm14lJl4lTx/OIoB1qCvuR7Mdi+W1H374YcE95VPkLGMB%20xgHcd8jTlhn55FEqDJYMi3BBTVj43P/F0kOfBgeYGph11llTg5Ya01IjVuGCD+c8xlGrimiwOvzB%20jIivK3YPwX4lTFJgrJAPFTrOiFBI5xCMN/IRQZeKW1559GeMZ3imQbvTlUcgy1iAHHzGqqwlqcWc%20wLHgf62EDftgBsjX5IfPWPW/1P2PajEnFBvT/EtemZA+91oe46iVHvZlsYQ7y8ZqxfhV+x0B9eCc%20YK1Z3i82ypQPxWqyyScFjgU+lNofptpjAWyfL7300vp+3v7SM4VGI7D11ls7WX0SFlsUE5wIOcPz%20PA8o0MyTZouklfXFpRgWvIDIUnAVYsqXHBVKIDzs7clyWN2wA0bXIeCkqx8CWQWa1Sw5BCKypLlk%20lpho8xSslcywCQPkORbkjQe7nN92221Fk5Ul5qEd1KIBeTGVQDkCzdTE5AJsmWITJtgqFW1JDQob%20uTvttJNuZoWPXGI2pFgSvFYDAvU8FnBOqE6HyCrQrE6p/pcL54T/sajkUTkCzbTy8B0hjUx9+2cV%20aFa7NhwLqkOcAs3qcK7XXKop0CzcIrZeibBcTUsAWnWYWI488kjVDsMGHfi6/sYbb+jXXewyTWFm%200zZ/RSoGLT0IskppkUMrmK55Cey7775OTF4UraDYYS16nRerTwBCZlleqBtz3X777W6BBRbQjcUg%20OMVmLGKOpPqFYo4NTYBzQkM3X26F55yQG8qqJcR3hKqhbqmMOBa0VHOzsi1AgALNFmjkeq8itHHE%208LvDyyuWpGLpOXZi3m+//VRDs97Lz/LVFwE8AK+11lr1VSiWpuoEYIYAf3SNRQBC5hdffNHJpkhO%20bLE52YDFiT1NJ5sZOdkwzsXN3zRW7VjaWhDgnFAL6vWXJ+eE+msTnxLxHcGHEsNkIcCxIAsthiWB%20+idAgWb9t1FLlHD99dd3+KMjARIgARJobQLQqBs4cKD+tTYJ1p4ESIAESIDvCOwDJEACJEACaQRo%20mDCNDP1JgARIgARIgARIgARIgARIgARIgARIgARIgATqjgAFmnXXJCwQCZAACZAACZAACZAACZAA%20CZAACZAACZAACZBAGgEKNNPI0J8ESIAESIAESIAESIAESIAESIAESIAESIAESKDuCFCgWXdNwgKR%20AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkEaBAM40M/UmABNpN4Msvv3RPPfWUGz9+fEFaiy22%20mFtooYUK/Kp90q1bN7f00kvnlm1aXXPLoIETeumll9wLL7xQUINbbrlFd6y+4YYbCvyreXLddddp%20Ge68887csk2qa26JMyESaHACSeNkPYwFwJr3nMCxIL2zJrGph+eCvOeEpP6eToVXSKD1CHAsaL02%20Z41JIG8CFGjmTZTpkQAJhARGjhzpevbs6R588MHQzw6mnrq2w8/vv/9uRcnlt1hdc8mggRPZbbfd%203M4775xYg1r2g7z7ACpYrK6JAOhJAi1EoNg4WcuxAE2Q93jAsSC9Y6exabY+UKy/p9PhFRJoHQIc%20C1qnrVlTEqgUgQ6VSpjpkgAJkEAagTFjxqRdon+LEOjTp4/bdddd3TTTTNMiNWY1SYAEkghwLEii%200np+fC5ovTZnjUkgiQDHgiQq9CMBEkgjUFsVqbRS0Z8ESKDhCWy88cZu0KBBWo/TTjvNrbnmmu6N%20N97Qc3yR7d27d0EdcW2HHXZwCy+8sJt99tndBhts4LD8K+o22WQTd+SRR7qHHnrI4XiWWWZxiy66%20qDv00EPdzz//HA3qfXzXXXe5ddddV9Naaqml3N577+2++uqrMD40C1F2LB2Lul9//VW1T7fbbjtX%20rK7Q+hk8eLDr3r2769Kli+Z1+umnuz/++COaXFMe33HHHcru008/dePGjdPjAQMGaF0feeQRZRHV%203gUrsAFvsIJJgD333NN9/vnnIR8sD8f1UaNGuQMPPNAtueSSrmPHjq5Hjx7u6aefDsNlOfj222/d%20Xnvt5RZffHE366yzug033NDddtttYRIjRozQPNGOcYc+ivIcddRR+ptUV8QZPXq0Q1+Zb7753AIL%20LOB2331398orr8ST4zkJNC2BtHGynsYCwC82J3AsaF/3LDYnlPtcUIs5gc8F7esHjE0CHAv++z7U%20yu8IvAtIIDcCgaeTDIPon2c0BmtCAk888UQT1opVykJABEzBu+++WzSKCAmDueaaS8eNeeedN1h2%202WWDV199VeOIEDJYcMEFw/gPP/xwMMMMM2hYEUwFW2yxRSBCKj0XoVUYbuaZZw5EIBRMP/30wXLL%20LRdsttlmwXTTTafhjjnmmDCcz8E888yj8aaaaqpg/vnnD7bZZptAhKnqJ/Y9A7H7qckMHDhQ/S69%209NKCZO+//371F2FqUKyuqAvGThGWBdtvv72WH+d9+/YtSK8RT0qNBbfffru2O+o77bTT6vE+++yj%20Vb355puVy5AhQ/RcHuqCjTbaSP3mmGMObQ/0GcSdc845g7ffflvDnXvuueq3yCKLBJ06dQo233zz%20QGyvqR/6x9dff63hfP5dddVVGs/Kh3YUQbr2L/idddZZmowIuNWva9euwW+//VaQtAiqtW5Iy8ob%20r+vjjz8ezDjjjJoG+uz6668foN+JQD68JwoSbaATEfQHb731VgOVmEWtBIFSYwHyTBsn62EsQPl8%205gSOBSCV7OTDUCAfmpIv/ulbbE4o97mgFnMCnwvSm/nZZ58Nfvnll/QAvNL0BH788cfgxRdfLFpP%20jgX/fR9q5ncEsY8a/PDDD0X7AS82L4GtttoqfMfCO9Xw4cMrVlnnmzIKEv3zjcdwzUfA58Wl+WrN%20GkUJ+Ag0EV42e9Bx4/rrr49GD6IvLlOmTAmWWGIJDXfjjTeG4SAwhfASgh9MinAQWGEcOvroo8Nw%20ovmmfkgji7OX16233jp8+Iawao899tD0Dj/8cE0OgjTkuc466xQkD4Ek/F977TX1T6qraPlpGKSJ%20esJhcofQDHFlwyT1a9R/vmMBBI6ilVhQzbgQA20PJquttloAoQGcaLEGf//739UfEyOcvbxCuPjB%20Bx+oH/7ttNNOGg7MfZ0JNCFMh9DRHB7EO3fuHMw000yBaJaq9y677KLpizaZBQs+/PBD9RPNy9Av%20Xle0+zLLLKNpmUAfgSEQR98WbdAwbiMeUKDZiK2Wf5l9x4KkcbIexgIQ8Z0TOBYk9x8fgabFjI+T%208C/3uaAWcwKfC6wl2/5SoNmWSav5+Ag0jQnHAqfvHc34jkCBpvXy1vytpkCTS87lDZqOBEigdgSw%20+7UIL12vXr10ebGVBMt/sWRdpgGHXXDNiVDTnXzyyXbqRCtO/8aOHRv6+R5gA4KLL77YiZanRoE9%20xwsvvNCJICvME8ue11prLffMM884LCeGkwcP989//tOttNJKbsUVV1S/pH/yoq67aF9wwQWuQ4cO%20GgTLo8877zw9vummm5KitaQfWMFddNFFanIAxyLwc6eccooTjVknAkD33XffwVvdwQcfrOYJ7Nw2%20HSqnH2Cpo2hNWlJOhKquf//+7qeffnLDhg1Tf9Es1V/RKgjD3X333XqM5eppToSYTl5+HeKvvPLK%20YbAtt9zSiTDdiSDVffbZZ6E/D0ig1QnUcizwmRM4FlS+h2Z9LkCJqjkn8Lmg8n2AOZAACHAsYD8g%20ARIoRYACzVKEeJ0ESKCiBN577z1Nf7311muTj/lZGAQQLQ4nS84LwsrS47J2qIUtQwjLom622WZz%20spxdbWZOmjRJL+EFFoJV2OqCg803CNeKCbIQDoIsxIPQU5a1h3+yxASXVZCrB/zn0MZo1zXWWKOA%20hizfVtuU8Iz2Awiyow59AA72iLI662fReD179tTT999/X39lObwTMwkq4IT9VLihQ4c6WQ7vrD3V%20M/YPfQDummuuCdvf+sK//vUv7R/ResWi85QEWo5ALccCnzmBY0Hlu6SNiUljs/lZGCtNtecEPhcY%20ef6SQOUI2H1u9300J/OzMHaNY4GR4C8JtAaB/6oMtUZdWUsSIIE6JCC2lrRUcSElPKEpCQdNOXNJ%204exa1t+0tCBEgzPBlSwxdIcccoiDEfMjjjjCQTMPYaDZV8xhoyKEW3755RODxYWpiYFaxBP9AFqs%200JCKu1r0A+sDsnRKi4NyYcOok046yWFjELSpLE3XDaksbLzcOLfNqrDZFQSiSc40hJOu0Y8EWo1A%20vY0F4G/3OOYEfDzhWFDZXpn1uQClSZvPyylpUlrWB2xO4HNBOWQZhwSyEeBYkI0XQ5NAKxKgQLMV%20W511JoE6IgBBD5xpskWL9uabb+qp2NiJeud2/PHHHztoYZp2HxKGhh++9kKIht3W4bBMfNddd3XX%20Xnutkw1Q3L333qtaedDOK+awA7fYk9Lw0RcksdXpsBTZ0i+WRqtcQz947rnn3CeffKK7gEfrHe0H%20L7/8cvRSLsdIH+0bde+8846eyuZDoTc0cmHuAMvOx4wZo/5iSzW8nnSAPgDXu3dvXT4fDfPRRx+p%20JnAxswXR8DwmgVYgUMuxwHdO4FhQ2Z5Yy+cC1MxnTuBzQWX7AFMnARDgWMB+QAIkUIpAW1WYUjF4%20nQRIgAQyEpDNXVJjwF5hly5dnGzmEgqJEBiaMKeffrrG23jjjVPjt+cCtOfOOeecgiRg11I2OnG2%205Ngumt20fffd18nmB6nLzaN1xdJECC9hlzPqZMd0XVotmyVFvZv6OMolqaLWxtCAjLoHHnhANSFl%20Yx0377zzRi/ldgxBddT2pmzc5K688kpNP9oPsBx1k002cffdd5+TTYzUlADsqMZdtK6rrrqqk93M%203XXXXaf9xsJCy2fttdfWfmaawHaNvyTQ7ASi90i8rrUcC3znBI4F8VbLfl6sD9TyuQA18Z0T+FyQ%20vd0ZgwTiBDgW8B0h3id4TgJZCFBDMwsthiUBEshEAIIcOAj0oPGAZdv2tdUSmnXWWd3xxx/vjjzy%20SNejRw817A+/W2+91b3yyisq+LMNXyxOnr+nnnqq2rKEcOnf//63u/rqqx02B4oL1lA22OWBFiE0%20M7GpS9Ql1fXQQw91l112mZOdut0bb7zhVlllFQfNPyxdt2WL0TSa9Rhs0JZYpmkb7sTriqX8eIm8%204YYbVLgou+M52K+8/PLLdXMgCJ6xSVAlHATYaN9+/fqpZi40MKExjDLEbXriBRa2L9GfsdlT3CXV%20Fe2PP2wKhPh4eMcmR1988YU74IADCjSE4+nxnASaiUDSOBmvXy3HApTFd07gWBBvOf/zpHEyGrvW%20zwW+cwKfC6KtxmMSyE6AYwHfEbL3GsYggRgB343kJVoQ/fONx3DNR+CJJ55ovkqxRpkIfP7554Hs%20TF4yjmi6BWK0OxDbiDp+yPJrjSMb+wSylLcgvmiwBaKBF44zspwrEAFYIEvCw3Cyw3mw+uqrh+d2%20IMLIQJaI26nX7zzzzBPITqXBwIEDA1kOHua7xBJLBGl9/Oyzz9ZwIphtk0daXWUJYyCamiED0UYN%20REAbyK7pbdJoNI80TvF6iNZrMMcccyg72c1eL8tOxnqOa+bQr0RQHIhNyYL2EJuVFiQ499xz9dqD%20Dz4Y+uFg5MiR6o828nVXXXWVxhFhYyAbQYV5oi+JJm4wefLkNkmJPadAHsADsacWyEtvm+tJdUUg%200coNRBAe5iGancGgQYMC0c5sk0YjeYCBmGFopCKzrBUg4DsWJI2T9TAWAEnWOYFjQWFHkpULwahR%20owo9U86SxslynwtqPSfwuaCwkfGch3uDrnUJyAqUQGyMewHgWNC87wgvvfRSgDmfrjUJiFJI+M4D%20GeLw4cMrBmIqpByTcSaexjVjPKMlpkXPxibw5JNPtlmO29g1YumzEoBmGZbMLr744lmjlgw/fvx4%20N3HiRN3NPGmDmJIJlBEAmw598MEHTl5oi9q1PPjggx2Wi8tLm0taalwsaxg2Rx6wB2qbCxQL3wjX%20KjUWTJkyRbUz0R6m0VUNHrDfib6Afg0t3SQ3btw4161bN9XQhS3VrA73DubP+eabL2vUugw/YcIE%20hz+YBKBrXQLNNhb4zAkcCwr7+3fffedgFzjr3FiYSvJZLZ4LUBKfOYHPBYVthlUsMLXCze4KubTS%20GcZP2JvHipy8HceCvIlWLj3YvBfFEd2HoHK5MOV6JbD11lvrajQrnwg0deWbnef5yyXnedJkWiRA%20Au0m0LVrV4e/chyWiYkGZ8momGRFYzAMhw2AREMvPI8fYInwp59+6uRLsj6glfPChk2BMLHTlSYA%20gW97WB177LFqk7VYTn369AlttFo42MVLc9gsCkLOM844Q+2i7rfffmlBi/pXyg5o0Ux5kQQalEB7%20x4JKzAkcC6rfmdrzXIDSVmJO4HNB9fsBcyQBjgXsAyRAAnECFGjGifCcBEigYQnMNttsKsgqpUHe%20uXNn7zp+//33bqGFFlLNPWgOwr4aXX0TwMZNcRun8RLPPffcca+i50cddZSTpbGqjbjWWmvpLvdF%20I/AiCZBAzQlUYk7gWFDzZs1cgLznBD4XZG4CRiCBuiDAsaAumoGFIIFcCVCgmStOJkYCJFBLAmKr%2000HYlKeDZiV2K4eQdNddd3WbbrppnskzrQoQwMZT8c2n2psNltBhQycsRz/uuOPamxzjkwAJVIFA%20JeYEjgVVaLics8h7TuBzQc4NxORIoEoEOBZUCTSzIYEqEqBAs4qwmRUJkEDjEZhhhhnc0KFDG6/g%20LHGuBHbbbTeHPzoSIIHWJsCxoLXbH7XncwH7AAmQAAhwLGA/IIHaE5i69kVgCUiABEiABEiABEiA%20BEiABEiABEiABEiABEiABEjAjwAFmn6cGIoESIAESIAESIAESIAESIAESIAESIAESIAESKAOCFCg%20WQeNwCKQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAn4EaBA048TQ5EACZAACZAACZAACZAACZAA%20CZAACZAACZAACdQBAQo066ARWAQSIAESIAESIAESIAESIAESIAESIAESIAESIAE/AhRo+nFiKBIg%20ARIgARIgARIgARIgARIgARIgARIgARIggTogQIFmHTQCi0ACJEACJEACJEACJEACJEACJEACJEAC%20JEACJOBHgAJNP04MRQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkUAcEKNCsg0ZgEUiABEiABEiA%20BEiABEiABEiABEiABEiABEiABPwIUKDpx4mhSIAESIAESIAESIAESIAESIAESIAESIAESIAE6oAA%20BZp10AgsAgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgB8BCjT9ODEUCZAACZAACZAACZAACZAA%20CZAACZAACZAACZBAHRCgQLMOGoFFIAESIAESIAESIAESIAESIAESIAESIAESIAES8CNAgaYfJ4Yi%20ARIgARIgARIgARIgARIgARIgARIgARIgARKoAwIUaNZBI7AIJEACJEACJEACJEACJEACJEACJEAC%20JEACJEACfgQo0PTjxFAkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJ1QIACzTpoBBaBBEiABEiA%20BEiABEiABEiABEiABEiABEiABEjAjwAFmn6cGIoESIAESIAESIAESIAESIAESIAESIAESIAESKAO%20CHQotwyHHHJIuVEZr8EJfPbZZ27YsGENXgsWvz0EfvjhB/fbb7+5WWaZpT3JMG6DE+BY0OANmEPx%20f/rpJzd58mQ3++yz55Aak2hUAhwLGrXl8iv3L7/84iZOnOjmnHPO/BJlSg1HYOzYsW6uueZy00wz%20TcOVnQXOh8CUKVPcN99847p27ZpPgkylIQmMHz/ezTbbbG7aaadtyPKz0O0jMHr06IIEPv7444Lz%20PE/KFmhefPHFeZaDaZEACZAACZAACZAACZAACZAACZAACZAACZAACTQJAQi4K+W45LxSZJkuCZAA%20CZAACZAACZAACZAACZAACZAACZAACZBA7gQo0MwdKRMkARIgARIgARIgARIgARIgARIgARIgARIg%20ARKoFAHvJec77LBDQRl69uxZcM6T1iHw3Xff0XZi6zR3Yk1hK+v33393M800U+J1erYGAY4FrdHO%20xWr566+/OtjL6tixY7FgvNbkBDgWNHkDe1QPdrV//vlnN/PMM3uEZpBmJfD999+7Tp06uamnps5M%20s7ZxqXrh/eDHH390nTt3LhWU15uYwKRJk/Q9kfZ0m7iRi1QNNjS//vrrMESvXr3C47wPpgrE5Z0o%200yMBEiABEiABEiABEiABEiABEiABEiABEiABEiCBShDg57NKUGWaJEACJEACJEACJEACJEACJEAC%20JEACJEACJEACFSFAgWZFsDJREiABEiABEiABEiABEiABEiABEiABEiABEiCBShCgQLMSVJkmCZAA%20CZAACZAACZAACZAAshon9AAAQABJREFUCZAACZAACZAACZBARQh4bwpUkdyZKAm0CAEYxf3jjz/c%20nHPOWfMaT5gwwb3yyitqtH2VVVZxM844Y83LxAK0NgH0yffff9+NGzfOzT333G7hhRfW39amwtqT%20AAmQAAmQAAmQAAmQAAmQAAmkEfDS0Pzqq690lyrsaOz717t377Q82/jvs88+mu65557b5lqaxwEH%20HKBxTj755LQg7fL/7LPP3JFHHumwI9Nyyy3nttxyS3fqqac67OSZh7vrrrvcEkss4a699trU5H76%206Sd3xhlnuO23394tv/zybtNNN3VHHHGEQ9na604//XTl16NHj5JJzT777BoWZW6PGzJkiKbj04fG%20jBmjWZUTZ6GFFvLKZ4899iiaB4SP4INwl1xyicNuvlndDTfc4NZaay0311xz6d+///3vrEnkEh67%20Tu67774qKEJZNt98c7fOOuvoDoQrrbSSw72Xtj8Y+iH+4td33HFH5VysD+dS+IyJgDf62KBBg8KY%20SeNFkl8YochB1v5VJKmmuzT//PMr+3feecerbs8//7zbYost9N5Au+2www56v8wzzzxu4403ds8+%20+6xXOgxEAiRAAiRAAiRAAiRAAiRAAiTQWgS8NDQhyJg8eXImMhCg+DoIS5D+b7/95htFhUuIM2XK%20FO84vgEfffRRB4FsVHj51ltvuQcffNBdeOGFDi/hiy++uG9ybcL98ssvKkB677333LffftvmOjw+%20+eQTt+GGG7r//Oc/4fXRo0e7ESNGuGuuucYNHTrUbbLJJuG1rAdgDX7ROqalgXD4++GHH9KCePn/%20/PPP3v0I2oxw5cSx8pYqlAko0/JAOhDmv/DCC+6WW25xF198sbY/hNs+Dlpn/fv31zpAODrHHHO4%20qaf2+obgk7x3mDfffFMFRdCAg5t22mndCius4CZOnOjQB19//XX9+7//+z930003uS5duhSkPfPM%20M6sw84MPPlCBqF388ccftT1///1386qLX/RTtF10bEBb+/j5VCBr//JJs1nC2L2EMb2Ue+qpp/Qj%20DeJMM800DtrC0003nXvppZd0fMc4jD75xBNPuDXXXLNUcrxOAiRAAiRAAiRAAiRAAiRAAiTQQgS8%20pCsQxED4Ef9bdNFFFdUxxxzT5tp9993XkBjxcv3Xv/5VBX3du3d3jz/+uHvjjTdUUxKait98843b%20a6+9yqobBJkjR45UzSO8tBdz+++/vwozO3bsqFqc7777rrv//vsdmKMd+vXr5yZNmlQsibq9Nsss%20s7TpL/G+teSSSxaUv5w4Z511VtF8brzxxqJ5QBMW7QUt2U6dOumS2G222UYFnAURU04gdEZ/wvLZ%208ePHu7ffflu1clOCV8QbdYAwCMJM1AFatvjY8PLLLzv0qS+//NIdd9xxmjfuWWgBxzUxK1KwJkg0%20a/9qgirnWoVdd91V7w8IMj/66CP34osvuqefftrBPMO9997r5ptvPhVs7rLLLuyTuZJnYiRAAiRA%20AiRAAiRAAiRAAiTQ+AS8NDSnmmoqFYbEqwutGrjpp58+8Xo8fCOcDx8+XF+uZ511VgcNoc6dO2ux%20seQbWl4nnXSSCrSggYRlrb4OSynvuecer+DQynzooYc07PXXX+923nlnPYZW6LLLLqtCsc8//1zT%2023PPPb3SrLdAEK5ldVnjlNMvo3ngGEIVLH2Fxi6WxkKjcb/99lMblB06FL99TEtt5ZVXdriHauFO%20PPFEB01KCOMfeeQRh+XlUQfN0dNOO81hGTWWpEMb9e677w77XDQsjwsJlNO/ClNo3TMI08eOHasA%20Lr/8coel6uagEbztttuqpvAGG2zgPv30UwcTFEsttZQF4S8JkAAJkAAJkAAJkAAJkAAJkECLE/DS%200CyHEbQHL7roIhUG4UV0kUUWcWussYZqg2EpbpqDRtzee++tgpcVV1xRhSxZtD0hdDz//PPV7uRi%20iy2mQqizzz7bffzxx2lZFvhj+S3cdtttFwozLYDZBcUS26x2LCEwglDU/uLLei0P/P7rX//SU2yO%20YXnadaSz1VZb6enDDz9s3jX/hYD1uuuu06XLNS9MBQqAvgTBHxw0dov1yVdffdX17dvXwf4nHLQh%20cT5w4EA9t3/QSDv00EPdeuut55A++hzySDIDcMopp2ga0GT78MMPHc4R76qrrrLk2vzCjiGWkMPB%20HmxcmBmNAK3k9ddfX72gsYk+jvKi3KaxCfutOH/mmWeiUfX4gQcecNBeRT1gGxZC+Ndee61NOHiA%20x4EHHqjjAe4H2LIcNmxYm7Dl1LlNInXk4dve6F/gfMEFF2jp77zzTtUKx3gIh3EV12EGA8uxIYgG%20R9h7RRuZ5jbMJEC7EVrd0DYfMGCAw32a5HzbBHExfuPDDuywQvt49dVXV3ulWcyM4MOAubQPQ+jf%20MI0AYSe0m+MuS5kRF/cs+jk44uMQxtbHHntMtULBE+ZEzF122WXKGBr6cYexH+H/9re/xS959+1o%20G2LpPUxToK6l7h2U1+4d3GsbbbSRO/PMM1UTvU1hxCMLI3zAg9Ys+hLma/Snww47TD/iJKVNPxIg%20ARIgARIgARIgARIgARKoKQERVpTt5OUrkMIHsvlGQRpiFzKQjXT0Gq7H/0TAGYiduzCOvERpGHnx%20DsTGYJvwiC+Cn0DsPoZxZCMhDSfCl9BPBD3BqquumhhfNpkIZEOWMGzagQgJAxEkBCK0aRNEXnI1%207QUWWKDNtaweO+20k6YlwtY2UVFX1Hnrrbducw0estRVr4uQIvG6jyfaDHnI0u6SwWUXbA0rAsvU%20sCKE1TCDBw9ODSOaWBpGlo+nholfKCeObHqj+YiAIp5c4rlvHiLkC0S4ommL4DExLXiKEFHDxPv9%20ggsuGMYBJ9HwTA0nmpJhWByI0EjD/vOf/wxEiBTGO+eccwrCRU/E5qeGE423QISk0UuJxyKUDNMV%20DbpAtJTD82hdrr76ao0vy9P1etq9LvYQg+eee64gr/POOy8QG56J6R5++OEFYcupMxIQgYymf+yx%20x4bpJY0XSX5hhCIHWfsXksrS3mKrV8svNnID+TgTshLzE1oq4/6Xv/wlsQ+JYDkQYXQYL9p2IgQL%20xLxDQe2ytIkIyIJu3bolpi1CwtAf4Yo50c4Mw6KeX3zxRbHgba5lKTPmjYMOOijML8oDx2CCX/lQ%20FOZjjK+88srQzw7EJq2Gx30VdVnKZOmLMD/AfRIvU/zeEZvCwQknnBCIpnebsIiLNhFhdbQ4QZby%20yKZgiekibfn4FoiQvSBtnpAACZAACZAACZAACZAACZBArQlURENTXt4dNrDp2rWrwy7P0MbB5ipY%20WohlutjpOUnLC0utYSvx5ptvVo1KaDTZTtTQnjFtM3nJSnTQmnnllVd0V3Isr4XdQmjYiJBTlzdi%20kx3YsSzm5EVTteaw4y4ctHGwCRA0kkTgokuHoe1WSScv95p8dBlmND/ztyWb0WuNcIwl0LAhmvYH%20u5NxV04cbKyUlgc2uMnqsKGP2faMapjF08ESdWjZYmk6HHYTxzn6NRxsoYqwTTfBgpYb+jnaHJp4%200MqFNjF2EMfmM3EnQjjV0IRm1sknn+w222yzeJDw3HaKh+ZXMY1gi7DuuuvaoS7x/cc//hFqC+MC%207mXUA2WOOtzr0P6EhhfuF9gmRR+FtjS0x8xBuwxan9jwSYQzatcT7QCtVGwGA83qSy+91IKHv1nq%20HEaqwoFv/yq3vdF3MdbMNttsTgRyyidardtvv121I7FxDsYCEWDpZWgi4hh9BGHQJsYVtlQxNprL%200ibYSAwan1gCjn4K0wQ4FqG169OnTyZNPsSHGQ44aOVDIxAmHaCVivE2uqGTldV+s5QZcTBvWP2h%20oQmtRWg6Q4MV9qFtsyxLv5zfrGWyPDAnLrPMMiXvHWgwn3rqqaotDTMjYI5yX3LJJWpOAu2AupnL%20Uh7cpzBNAQetU2iAQ9sW/QTtgmPTTrf0+UsCJEACJEACJEACJEACJEACNSfQHolqmobmaqutptoe%20sht3m+RlGZtegxakOdPQhPbJqFGjzDv8lZdljSPLrUMtzbh2lWzAomHEJmAgSyLDuDiARhK0KgV2%20cOuttxZcK3UiNis1HuLiT5Z0loridb2YhqbYj9O8jjrqqMS0oKWHssjLeOJ1H89aamgay7RfEcSF%20VTDtybSw5h+NYxp0di3pF9pt5iwPH81RESYoe1kOa9FTf03rSYSTBWGgoYwyieAzgOZV1ImQIhDb%20jHpdNiMKL5m2IuJB89LH9erVS9PZbbfdfIJrGPQp5IGymzOtMBE+mpf+mpYZ4sQ1QEWQqemIQCSM%20Y5qccY1uBJAluBoeY4q5cuqMuNXS0EzqV+YX7V9Z29s0NJEWmMU174w7NHVF6G249NcYQ6tObLgW%20XBOTH8o42q8svE+biD1fjS+2kwMxZ1CQNk7Qz6z+pTQ0EV4+LgUHH3xwYBrgFhe/Yr82wDgIze+4%20y1JmaFVj3kCamEfiTpayh1qu7dHQzFImlMHa0OfewRghQk+tA+bKuDNNbGg+i/BRL2cpDxgYe/kg%20WJA8+qII1APZuKnAnyckQAIkQAIkQAIkQAIkQAIkUGsCFdHQhOYOtLbkBVfek/7roAWCjW7MFhq0%20tOIOml9Jdv6OP/54DQqtGmhxJjmzdQbNNmwqAS0/+5MXPWeb50BjKYuDXUPYFTP7ddB8ghaLbfgi%20Dah27GDLLv5XTIuvWBmgCQgHZknO2MHOYSM6bCaFjXLS/maYYYY21SonDrQE0/KALdJynGmOYdOo%20chw06aChDAeNq/hmQbB3uNdee+l1aFnFHbSNRQgU987t3MqDfu3rcJ/HNUCh6Qxn9nLxizEBDjYf%207d60X9QZWprYLAZa1lFX6TpbXlnvZZ/+1d72FuGjm3feea2IBb/9+vVz8XsFGnVwsGEqgsKC8LB3%20CQdNS7isbQJbj3DQpIRd5LiD7dUsDu0twjjV8oRWL8Zo9H842AGVDzcO/Qi2We2+y1pmaC5i3oCD%20hn3cLb300mpvOe6f5TxrmaJp+9w748aNC+fNuB1epLX//vs72FOGJjDaPGt5oHUOjVk4zJ/XXntt%20uGET5mTsOh+/JzUw/5EACZAACZAACZAACZAACZBADQkU36a5zIKJrUB9IcKGJVgah80rINyzl9K0%20ZEWzM/ESXp4hpBS7m5oONk6IO+QBJzbP9C9+3c6xTDSLiy61u+uuu5xoXjmxIagbqOAYQkfsxJvk%20sNkJNpfI6kygmSawNEEnBAK1cBDmHnPMMQVZ26ZL2CUeL+BRBw62VBv+2D0cG+dkceXEwQYphxxy%20SJZsSoa1/lOuQNSWgaONk4T3KAAEeHAQ7sWdbQgV9086x6YhI0aMcFbmpDBRP9xfEIbARdsrGibp%202IRQ0Wu2A7wJRu1DBsJg5/hiDuU1BgiXpc7F0i11Leu97NO/2tPeEOLHl/dH6yCayNFTPUYcuCSB%20o7WJBpB/WdvElmZH28bSwi+WTmODH/vYE71W7Hj22WdXYaZ9dML4gWXzEHZiXMeYcvTRR+uS+6xl%20tg22wMU+SsXLgnkHH+HKdVnLFOXnc+8Yd/uoEy8nPtjZBwRcK6c8YpdZBaMQ/uKDAxyE4zDTAnMC%2066+/vvrxHwmQAAmQAAmQAAmQAAmQAAnUC4GKCDRhKxAvRbBXCY0vCCBh60+WwenLqWlqxSHENYqi%201/HSBifLx6Pe4TGEMXCwwYm/NFcsD8RB+tBggsaZCQcsLWg94eUattegbQqBJgRTsJGY5GS5epJ3%20ST/TdosLBi2i2c4sVk8Lm/ZrHGQDp7Qg6o82NLujxgNadRA2JDkIsPEXdRBIZRGQRePW0zFsWprg%20vFyBptnFRL+RpeWJ1YPwFs52q44Gks0/oqdFj405ds1GWpZuWqRnn302vGRxQ48iB2n1iEax+xN+%20pdhZf7P4Wepsccr5rcS93J72lo3M2oxB5dQrLU7WNrG6FPuQ4ivQhL1YCM/XXHPNAuE1ygptQdif%20hYATAt0nRPsdAk7YWC23zBi7bPyK80jbZT0ezs5NSG/nWctk8fDrc+988803GgVjdlodommWUx6w%20XnvttXVuk2Xm+sEJ9m3xB41NaAPLpnBtNMqj+fKYBEiABEiABEiABEiABEiABKpJIHeBJjRisIkH%20tDHxkiS2+JzYtQzrJLbXwqWnoeefB2nLySGMMU0bWzYZjwuNJGz2gOW4p5xySvyy9znSgcAQQtnd%20d9+9TTwTUkJIBAdBKzblyNNBwxUuTfBr/haunLxNy/XLL79UtmnCUbSJLXGXXYw1KwhcX3/99YJs%20seRfdmdX/tHNKRDIlsEWRGjAEyyLtX6Il/9ynPVfCM2xWUuSsM40sqBhGXelhJLR8NCugpAOQnpo%20FSctV42Glx3T9RRlTNIci4bNemwagygPNE/tA4VPOlnq7JNeWphK3Mvtae9K1ztrm9x777269Ni0%20seMc0c+w+ZuPg0YkNp3CHIH7KslhOT0+GkGgiXEIAtWsZTbzDtC+xQciW1odzQ9CuyzONm2zOFnL%20ZPF8f+0DAASV+AAVN3eB8VnsVes4LXZHMzOycuCex+Z3+MMmbNgUCGMCNvAbMmSIttX61NQ0XPwl%20ARIgARIgARIgARIgARKoMYGp884fQkUIMyG4wHLrqDATS6hNEJiUL15yo9olFgZ2L6EVA+0UE8TZ%20NfvFTs5wsLtmAji7hl8sWcQLG36LORMiyeZBicGwIzUctE0r5WyHdSxXjS/NhnAXttLgLFw55bCX%20cMS1HYCT0oF2Dhw0bY0x2gHH0T/YooODVlnUH8cwF9Do7rXXXtOdyVEP2PRLM49Qqp7og6YRBiFE%203EHwYgIe2dwmfjnTOfqo2bE9++yzC5aixhNCf7fdr2Hb00cTLJ5GsXMI9iCgw70Jbbu4g5AMWqHg%20I5vgxC837Hk12zsrpKxtYv0RpjeSxmnrtz7lsPsHmu5xAWE0PnbchsO4DA3FrGXGx5SOHTtqGtAw%20jDvcb7fddlvcOxyz8AEu7rAre9RlLVM0rs8xPiTZ/ZhUVtkQT5eLH3TQQarxmbU8mE8wfstGdWFx%20wAzCUbRP586d1T/+ESsMzAMSIAESIAESIAESIAESIAESqAGB3AWapnkFwUV0UxxofGDzAtOGwbLl%20uIP2G16qokttX3rppdBeY9++fZ3suBqPpufQCoWWIQSmAwYMKNhQ58knn1RNUeQtu7UmxjdP2Xla%20D/HSKjvsmreDMBZLHu+55x7122ijjcJreR/07NnTwT4eGB544IGhTUowhN0+aBpBYIwNHMzJ7vAq%20aIOwDXYTSzkIj5AP3Omnn+6uuOKKAkEw8pbdv90ll1yiYXr37h2+5KtHk/5DO9sf+ij60wknnODW%20XXdd1Y6CHULwKtfh/jBNSWg/YemtOdgehHYrNDSRz5FHHmmXyv6FcBKabtDEhVbpAw88EG4Kg0Sh%20VYf67LHHHpoH7g8TglqmZnvRTB2Yf5Zf9NfDDjtMo8Cu6QsvvBBGR71xz0JzE8uZS9nYDCM2wEG1%202zsLkqxtgvEbQmloCe6yyy4FQk1oUdrmbT5lwGZrEJph2TmWlcfNVOADFgR1F154oSbXq1cv/c1a%20ZvQn9C04bLAEkyHmYNoA9iGTTHsssMACGgwf06LXIYyPfwDKWibL3/cXH0Cw5BvuxBNPdM8//3wY%20FR+9bDyC6RPYI81aHmj6Q5MVc1v8YwM+LpgJiEp+xAsrxAMSIAESIAESIAESIAESIAES8CUgL45l%20O9GWxFbIwaBBg8I0REASiNBR/UWQEojtzECWqQWyTE795phjDv0VgV1w0UUXaTzZRVz9kBb+5EU3%20WG+99QLR7gvk5Uz9RMgRiBZXmI8IMNVfdtYN/WQTojC8vNgFsuQ2EG2VMG2ci0ZOGD7pQIRYgWxu%20EcaRXbID2dU3kBfc0E80VwIR+CVF9/YTwa2mJ5pziXFE0BXmJ9o5weqrr65cjJG8pBfEkxfRMLws%20Ly64lnYi2k+BaN+E8WQ5ZiAbHAWbbLJJAN6WV9euXQMRiKUlo/4i/NXwgwcPTg0nAlINI4Ln1DDx%20C+XEQd9C2UUYEk8u8dzysPqm/coLfSC7/SamkeQp5ha0HCJ4LrgsAvtANijRa8hLtKMCEaQH6LOW%20t5hNKIiD9sc19IusTj4KBLJsNUxbBCSBCGi1DHZ/IW3ZWCSQJcNtkhctN40rgs0AbMUcg4ZBeMST%20jbjaxHnzzTf1mmjnhtcwNqCuiIM+LRp/ep+LHcEwfdmtOQxfbp2RLvI49thjw7SSxoskvzBCkYOs%20/Stre4sNQy0/WCW5Yty33357jXveeee1iSomNPSaCLnDa1nbRD58hGOsCDd1bMd4KRrc+gfu+BNN%20/TCPtANZcl4QRz6y6FgrAs5AdpDXdJAW+oF87AqTyVpmsUEZiKmQMD3kg3HOxj7cD8hHbP2GeYhG%20dlg29FXcL7j/EU602/W3PX27WBsm3TuixRqI9rvmi/LIhmJheVAm0V4NxBRJWP4sjDCXicBY00Za%20mHd32GEHbVu7N9HG8uEhTJ8HJEACJEACJEACJEACJEACJFBrAu3S0DRtTHkJCh00eKDpAQ1AaLiJ%20gMJBewebH2DJH+ywQeMLGmPy4hbGw4EIRnUzCNgXfOqpp1Q7DvGgdYil16Y1g7CWt/3CDxtJQLMS%20di6hRfTYY485LFlEGrCtOWzYsDAewic5hIXNMCzfg2YbNB+xSQJ2XsbyeWjV3XHHHRXfHAEbEIEV%20tGegMYil7tDQxPK/M888U7VFk8oPP9OoS7tu/rDNhiWV4IY40ESCLUwwhGaOvDi7/v3760Y4UdMB%20Fj/6a3nab/RatY+tDNG+UU4ZsFS+e/fuajtOhO9qo7WUhq9PPkgXGorQWBQBv7YBlntj8w/cNzCb%20AK3QqLM6Rf18j1EHEcRqPeadd17dhRp2X20JKZabQssL/RwaXnEHO7joK9DaxX1rm8NYuKSymZ/9%20IizGBpikQH8DA9z/uM+hAQbTBFj6KoIeS9a7H4cRYgfRvK0v2C+C2rH9xqKnnlq6vvGytreln1qA%20Py/4hiuWTtY2gZamLVHGsnOM7dhVG7Zgof2Y1H/S8hehmd4HGN9h0gLahuiDWOYM+7LyIUXNPEDj%203DZKQ1pZywybk9BqhL1OpIN8MM5huTm0/qHFHHfYEf2mm25SrX+Mv7hfoEGM/gnNfZQ3yj9rmSy/%20aBpxv+g1mPKAtjhWMGCOggkMs6UM0yO4j8y+M9LJUh7UBdqwGOuhNYt8MFeibXEN2rjgZRvJWTn5%20SwIkQAIkQAIkQAIkQAIkQAK1JDAVJKqVKACS/eijj9z48ePV7hleTs1h4wgIzPACFn1ps+tYggpB%20G17cIGyBYC2rg/APaUCYAJtiSCurgwAHtv1Qh4VEoJO0oUTWNMsJD17YFAMvtRAc4CUzbwfhM9oL%20y/IhUIbNOtifg1CXrrIEILzBcm70dfTXSjvkBQEnhB4Q0OK3Fg79DQJS3Fui9ViLItQkz2q3d5ZK%20ZmmT77//XoWDGCcgmG+Pg7kRjD3IH4IzfLyCvWQfoXGWMmNegkATYxzsCGP+wRJyfPASDc2CJemo%20j80BX3/9tYMNUd95JEuZsnJDmWDOBQJl2Nc0G5fF0vEtD+aBTz/9VE0BwLwL2sFs/hZLn9dIgARI%20gARIgARIgARIgARIoNoEKibQrHZFmB8JkAAJkAAJZCVQTKCZNS2GJwESIAESIAESIAESIAESIAES%20qA6Bdi05r04RmQsJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ/JcABZrsCSRAAiRAAiRAAiRA%20AiRAAiRAAiRAAiRAAiRAAg1DgEvOG6apWFASIAESIIG8Cbz//vu6+Rs2zFp77bXzTp7pkQAJkAAJ%20kAAJkAAJkAAJkAAJVIAABZoVgMokSYAESIAESIAESIAESIAESIAESIAESIAESIAEKkOgg2+yK620%20UkHQnj17FpzzpHUIYEfiWWaZpXUqzJq2IfDLL7+433//nTsgtyHTWh4cC1qrvZNq++uvv7opU6a4%20jh07Jl2mX4sQ4FjQIg1dpJq//fab+/nnn93MM89cJBQvNTuB77//3nXq1MlNPTWtmjV7W6fVD+8H%20P/30k/aDtDD0b34CkyZN0vfEaaaZpvkryxq2ITB69Gj39df/z955gE1NdG14VMSComBXEAsoYEMB%20u2JB5bNhR8HesaDYsWLD3vX/VFRsn71jx4YNC4gNFRvYQEUFC6KC5j/P0YnZvNnNZDfZ+sx1ve8m%20k8mUeyaTmZMzZ773/U8//XTTu3dv/zzNA2eB5ltvvZWTbvg85yJPSIAESIAESIAESIAESIAESIAE%20SIAESIAESIAEGpbAmDFjMhNo8vNZwzYrFpwESIAESIAESIAESIAESIAESIAESIAESIAEao8ABZq1%20V2fMMQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAk0LAHnJedhQpdddlnYi+cNQgC7Ardv375BSsti%20RhGAjSTY0Vx00UWjLtOvQQiwL2iQii5QzF9++cXgb/HFFy8QipfqnQD7gnqv4fjywWbeDz/8YNq0%20aRMfmCHqlsCECRNM27ZtTbNmRU8x65ZNoxQMtrUnT55s2rVr1yhFZjkjCHz++edmscUWM3PNNVfE%20VXrVO4Frr73WjBs3zi9mlv1B0W+bAQMG+BnkQWMRGDlypOGmUI1V5+HSTpo0yUyfPt106NAhfInn%20DUSAfUEDVXaeok6ZMsXgr3PnznlC0LsRCLAvaIRaLlxGbAw1ceJEE95EtPBdvFpvBEaNGmW6du1q%20mjdvXm9FY3kcCeDjBgQZ3bt3d7yDweqRwOjRo02nTp24aWQ9Vq5DmUaMGJEj0IRwOyvHJedZkWW8%20JEACJEACJEACJEACJEACJEACJEACJEACJEACqROgQDN1pIyQBEiABEiABEiABEiABEiABEiABEiA%20BEiABEggKwIUaGZFlvGSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkToACzdSRMkISIAESIAES%20IAESIAESIAESIAESIAESIAESIIGsCFCgmRVZxksCJEACJEACJEACJEACJEACJEACJEACJEACJJA6%20AQo0U0fKCEmABEiABEiABEiABEiABEiABEiABEiABEiABLIiQIFmVmQZLwmQAAmQAAmQAAmQAAmQ%20AAmQAAmQAAmQAAmQQOoEKNBMHSkjJAESIAESIAESIAESIAESIAESIAESIAESIAESyIoABZpZkWW8%20JEACJEACJEACJEACJEACJEACJEACJEACJEACqROgQDN1pIyQBEiABEiABEiABEiABEiABEiABEiA%20BEiABEggKwIUaGZFlvGSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkTqBZ6jEGIhwxYoR5/vnn%20Az5/H84+++ymRYsWZumllzabb765ad26dZMw9KhtArNmzTJnnHGG8TyvYEE23HBDs9lmm0WGmTx5%20snnggQdM9+7dTbdu3SLD0LM2CHzzzTfmzTffNF999ZXp0KGD6dKli5l//vljM3/rrbeaRRddVPuJ%202MAMUNUE0Ce8++675p133tH+f+WVVzYrrLBC3jxPmzbNjB071nz66admmWWWMV27djULLrhg3vC8%20UBsEkvQFM2fONG+//ba2G4wZOnXqZFZaaaXaKChzGUkg37gwGHi22WYzp556qnn22Wcjx5BRYZs1%20y3Q4G0ySxxkReOihh3SM0L9//4IpcFxQEE/NXfzhhx/Ma6+9Zr744gvTtm1bs/rqq5vFFlssshwY%20F2AsiXEBwq622mo6RowMTM+qJ5Bvroh3wJxzzqnygTXWWMOss846OWVJ8h7huyEHXc2cxMkAOEeo%20maosT0ZF4OTkJDeQTPl/LjcNHDjQDx+8N3jcqlUrT15kLtE1CXPBBRd4O+64oycT5CbX6JEdgeee%20ey428h9//DG27tEO0Eai3F9//eX17NlT4xg8eHBUEPpVkIAIJr0PP/wwNge//fabd8IJJ3gyoMhp%20DzJY9R5++OGC97/33nt6z6abblowHC9WjoBLX4Dcvfrqq54IonLaAJ7/fv36eTIoySkAnv2LL77Y%20m2uuuXLCt2zZ0rv00ktzwvKk8gS+/fZbb9y4cbEZSdoXyKTV69y5c04bQJvBe2HKlCmx6TFAeQm4%209gUu40LUM8YQScKWt7RMLYrA1KlTPfkIFXUp1g/tR5Qd9HkvFJjjgkJ0quPayy+/7P3+++9OmcE7%20XT5u5/TzzZs3904++eQm999www0exgHoH+wfxgnnnHNOk7D0qCyB6dOnO83tXeeKe+65p/fnn3/6%20heK7wUdR1Qevv/6698svvyTOYyEZAOcIiXFW7Iatt97a76vRZw8fPjyzvJTlk/Ymm2xiDjvsMCnL%203+6PP/4wn332mRk6dKj5+OOPTe/evfWrLL7IJHGjRo0y9913nzn00EOT3MawZSZw/fXXGxFcR6ba%20vn37SP/LL7/cPPXUU5HX6Fk7BGRQai688EKzwAILmMMPP9wsueSS5tFHHzUizDTbbrutEUGI6dix%20Y5MCjR492vTt27eJPz1qjwC0cqGJLwNX/UV/LwIpc8UVV5j//e9/qsWNX+uuueYac9RRR+nX+SOO%20OEI18mSya26//XZz5JFHmiWWWMLssssuNjh/a4RAkr5gxowZ2j98/vnnZqONNjLy4dK8//775p57%207tH3gkxutB+pkaIzmxEEwuPCcJB5553X90oS1r+JBzVDAO+Gvfbay8hEtWCeOS4oiKfmLmIFFt7p%20c8wxhznwwAN1FQa0su+//35z1llnmWVkZcZ+++2n5XrhhRf0WGbDpk+fPvpewAoOzCMHDRqkK/44%20Zqy5JpCT4eBcEfX8008/GYz9brrpJnPzzTebdddd1xx00EE59/DdkIOjbk4KyQA4R6ibak63IK6i%20Ukk1R8rqcp/9giLCzMjgkyZN8r/IQhsjqdthhx00T88880zSWxm+BAL4kh7ngl/dvvvuu7jgOddl%20Wao399xze/PNN5/WLzU0c/BUxYmLhqYsH/JkoOrJhwoPX+mC7oADDtC63XXXXYPengi7vDZt2uT0%20NdTQzEFUVScufYFMVLQ+RYDt4cuqdfIxy5tnnnn0HQCtGzhZYuxBexfvGxFy2qD6K0tQ1X/99dfP%208edJZQm4aGgm7QtkwKp1LcLMHK2Mxx9/XP3Rp8hkp7IFZ+o5BFz6AtwQNy4MRpokbPA+HleGQLEa%20mrvvvruu4sC4D31/2HFcECZS3eeuGpryYVLr+6STTsop0IABA/z+317YYost1E8UWKyX/p533nnq%20L+ZIcvx5UlkCxWho5psrigkKrePtttvOLxTfDT6Kqj4oRkOzkAyAc4Sqru4mmSunhmZFNwWCjRRr%20E01Uks2LL75o5EWmGl1RYltZbqDXr776av196623NJgsWdBzmRTn3HbnnXfqFz3Y3th///3NLbfc%20YqAdGnQTJkwwxx13nBGhiVlzzTXNNttsYxAfvgzRlZ8A6kcGt2pf8dxzzy1/BphiagTeeOMNI0tE%209Ktq2AYqtLXgoGEtPaCfJmzmiSBbtTahzUlX+wRkQKOFgIZuUAt/+eWXNyLQVq0caGTATZw40cDG%20Iuwr77bbbupn/+2zzz56CPtZdLVFIGlfMGbMGC0gtDFgc9s6aPpC2x99BtoKHQmQQG0TuOuuuwxs%20YmJMsOyyy0YWhuOCSCw174l3PRzs5AfdxhtvrKci4NJfWb5u5IOJHmO+FnQYV8iHUdXgx8o/uvoj%20YG2tQ05AV98E4mQAnCPUd/2XUrqyLDnPl8HHHnvMwBi02EQxa621lhqEvuqqq3TSu8cee+QYhcaA%20Bi8yhJevebpc0cYLQ+JwUD0Xm1tGbHWpUOzee+9VfyxneOWVVwzU2SHkhL/YXVHD0nhxwrAsJk3y%20ddhg8o3lsFjeiBcoXpR05SNwyimnaL1A0IU6p6tdAqKBrZmH4fawEy1M9cLLC4PaxRdfXM8feeQR%20PyiEINgIhq62Cdh2ACFl2C211FLqhaXFcBiwwgQBPkIFhZ+4hn4aDuYL6GqLgG0Drn3B9ttvr8++%20aGjmFBQfMdEOsFEY3vV0JEACtUsA5kgOPvhgfdYxrsf4PMpxXBBFpfb9MGcbOXKkzrlgisY6mBaB%20sxuGQogBoSbMzYTHEZijYWMgzPHErrtp166djYa/dULAmiTCB026+iYQJwPgHKG+67+U0pVFoPnB%20Bx+oDQybUdjHgu1M2MXA7mPYDRu/+DqLF9gTTzxh7rjjDgP7adbBnuL3339vMMGBfTXZTEK1MrHT%202bBhw8zaa69trJBEliCo0BIalxBiYuKDidC+++5rMDDCwAl2/a688kqdHEEjEIJUCFZhk0WWsuuO%20e7K8zWBiRVcaAdQltO7CDhpasnzU98bABvWC+gB3fLmnq10Cyy23nGYeu1qHHXa7tg7CLCvQtH78%20rR8CaAcQWqMPtl/abelgQxXOCjS7dOmimhb2evAXmvNw+PhFV1sEkvYFvXr18guIj5hPP/202tvF%20OxsfH88880y1u+YH4kHNEQiPC4MFwBhMNgrxvZKE9W/iQVUTgJb13nvvbX799Vd/LlDVGWbmUicA%20u5kPPvigue666wxWy2Elz5NPPqnzMFlCrvY1kajV5LQfQMMZsat5bLjwdZ7XBoHgXBH9A2ytY44P%2027mrrrqqzg3DJeG7IUykds9dZACcI9Ru/Wad87IINCGMzLfBCwSU0Ma0Di84CDTxRSYo0ERHBweh%20JJac4c8OePFFzm4s8vPPPxsINCFAw4vSCkpWX311A03OFVdcUQWgZ599tpk8ebLGifshzIRDONlh%20N++XYg3Ef4kIBDeECt6IercCTRiFx0YP+AKLzULoap/AGmusYbCxA4RWeKbwIQIOX9hgCN46DkIt%20ifr83WCDDQw2cMOSQhzbPll2uzPYFACuUBvARhHHH3+8Tnpl91MVZtUnqfotVSl9AQThwU2g8M4I%20ntcvtfouWaFxIfoJO74DhSRh65ta/ZTusssu03o9//zzdeO3+ikZS+JKYJFFFtEN37AaBx+t8Gfd%20zjvv7CupwHQR3Jxzzmkv5/zalXTQ4qSrXQL55ooo0Wmnnabzw3Dp+G4IE6nN81JkAJwj1Gadp53r%20sgg0sTOZGPP1844vL7CNAg1ILOuG1g46JUjeYcMSE14s/cbyAVzDSwoTXwgdd9ppJz+eqAPY0YQG%20KLT/sHQ87GCzE4LMV199VdPCjssQbj7//PO6qyomS8gDNTPD5Io/x4uoRYsWTSJYaaWVfD+8yKCl%20BTME1q6qf5EHNUlg4YUXNieeeKIKso4++mjVmoYWNr7Cff3116Z169ZqQgIfJ+jql8AJJ5ygH5HQ%20n6+88sqqhY/+H5MXLB2GMDNfG8DO1tjlFAJRCMdhLoRLjWuvrZTSF0AYChur0NSEHWyMGaC9g34k%20rPFbe2QaN8fhcWGQBN4NQZckbPA+HlcnAXzkxM7U6623nsHYgK4xCcBGMlbR4d2OOQAUSqBxh9UY%20WLkHW8qYx0FgUcjNmjVLL4fN1BS6h9eqj0B4rgjzcWgPmP/vuOOOOhaENm/Q8d0QpFG7x8XKADhH%20qN06TzvnZRFoYkJy7LHHNsk7NCkhoIS9RExUINDEFzhs/nDOOeeolubpp5+uQi5s0oOXn/0S1ySy%20fzwwaYb75JNPjOyk/I9v0x/Y7oE2KDQ6kdYLL7ygfwgJG23YRAjL2uLSaxozfcIEYLR7oYUWCnv7%205xBSwCg8NgHBABd1AoeXGRzsLMIPNk7zfaHVgPxXdQRg3gFf4fEcy86X+gdt6ttuu81ccMEFKqTA%205mB09UsAwkpMTGArDUJMaNvjAwcGqOj/sTFQuA1AIwOaO2g3+KAFkyIwUUIBVu22k2L7AryP7QdR%20rNCQXRPVdAzsrOGDCV1tEsg3LowqTZKwUffTr3oIoG+HySjYSMdqHNkN2c+cFVxhvAfhVJSpIj8w%20D2qaAOofZqVgQgSKDBtuuKFfHmhnYqMgmAjDXA17HsAF24ofWA5gtgAOcwS62iWQb66I8aMdA2Le%20EPwAzndD7da3zXkxMgDOESw9/loCs9uDSvxiwNK3b19NOmj0G8JEXLOGgIPLzePyCeEJHISjuC/f%20HzpHvEghaIWdDgg0oamJrz1Qfb7oootUgBqXHq+XTuCll17SSLARE7Rw7d9ee+2l/kOGDFG/oUOH%20lp4YYyg7AXw4wKAUz9mXX36pNhIhzPr00081L3YJctkzxgTLRgCbwaCPh7kBfHSCtt3dd9+tmrrI%20RLAN4ANGnz59VFiFCcq1116rgnAKM8tWXZkl5NIXYAUHPkYiLNpC2Nnd7mFbi44ESKC2CEAoBTMS%20mJBCGGHHe/gdP368FgbH1u5ubZWOuXUlgA/cEFzDDFhQmIn7sXoLGwbB4SOotZGJvRfwfgg7q8hi%20w4Wv87y2CWBzUChCQBMXJuno6otAUhkA5wj1Vf9plaYsGpqFMouXGhyWHFiHgUzPnj3VGDBeZrC1%20hhccNvmJc1iKBgehJLR/sMN50MFuD5Y74mWJDWigBQgtDyw1xx+OMYGGNijU3PHy5DKGIMH0j/El%20NmqJPwReGPiiTvEy4wA3ffZZxojdiA855BC1hYZNt7Ds1Lpnn31WN/nCMx20lWav87d+CGCJ0DPP%20PKMG3bfcckvToUMHv3B2N1P099ZBkw9fbLE8HSZBonbGtmH5WxsEkvYFEFZ+9tlnZquttjLB3W9R%20WqvBD6EHHQmQQG0RwCqbqPEeSoGPXpis4jo0s+nql4DVvrXLxcMltVqXGB9iZ3P8ou+Hth42D7IO%205osg6MQ8zc7/7DX+1gcBbAhshdZBWUF9lI6lSCoD4ByBbSaKQMUEmlhGiGUGWGoOt+mmm+bkD9oZ%20mNRgoxi82LDULOysoNEuTcZ1bPADweSLL75ozjrrLDUkbO+DYBSbkUCwAlsd0AB98803VVgaHGCt%20ttpqegtsOdo0bBz8TZ8AlprjL+ywHAWaWvhDfdHVFgE8P7BzN2nSJNXEwEcCOGjp4YUEh+ebrr4J%204KMQtK/x8QoaOHb5GJ5vfJmFdubmm2+uEL744gtz+eWX61JD2FUOL0Wvb1L1W7qkfQEmrBBoXn31%201SrUbNbs76HKt99+qyspQAqrLOhIgARqiwDMOMHMVJSDfWTYRMt3Peoe+tUmAXywxFjgo48+0n4e%20cz6smoOD3UzYSsY5hB3o/3v16qWrOo455hj9QGrD4hzavmuttRbHC7XZFArmGsJqrNLDhw4IM/ne%20L4irJi8mkQFwjlCTVVyWTJdFoAl7edDQCTosPYVdTDho3p1yyinBy6qVgckshCH4ohvcCd0GtMsU%20sWkEvsyh08NLDTY2Nt54YzN48GD94osXIgwLQ8gJh7Twgtx7771VwAmBGexyQQsQEyY7mIrbgMjm%20g78kQALRBAYOHKhmHfr3729uvPFGs8oqq2hfABu3MAsR9VxHx0TfWiWwww476MclCKiWWmopAy1N%20aOzhgxYcbBhbTXpo7mLgij5/9913jywytDWwkQBdbRFI0hece+65qp2LjQOxUQTe59DOweZAWH2B%20FRsDBgyoLQDMLQmQAAmQgBKAMBOr5GA3EeNDbAKEeRg2CYTyCT6EYsVcmzZtNDz2NIA/PpLDr0eP%20Hua1115T00VQPMGeDHS1TQB7KNixIEqCsSAEmtahjrGRJF3jEuAcoXHrPq7kZRFowl4a/oIOAkV8%20oYNmJl5k4eVjdkILW5bYddzaxgzGgZcgXm74ooudy/EHhy842MUctjjfeOMN3TEd/ugIIczEblpw%20RxxxhG44cfHFF+tEST3lHwwOw7YmJtp0pRMIvqCSxGa1cuxvknsZtjoI4Os5HAQUr7zyiv7hKysG%20rjfffHOT5z6Ya9Z7kEbtHmNDMNg9Qn/75JNP+lr5+JCFj05BofbYsWO1oLCzBg3NKNe+ffsob/pV%20OYEkfQHqGNq7aDP4EPnuu+9q6Zo3b662NbFZFDaWoqtdAknGBUnC1i4R5hzv/Lj3ftx1UqwdApiL%20oR/HHHDixInG2sm3czXM8ayDrU2MCbC5IN4Hdm8FrMrDqg4IOOlqm4C1oRssBVZUQvkB44ctttgi%20eEmP+W5ogqRuPGxfb39RMM4R6qZ6Uy/IbPIVrKmF5YhkwkuvHW+LiMndCxqSsKWG5QewpVWMmzFj%20hi5zhJASX/WiOj/YcLGblrRu3VpttkGgShdNAEJkDh6i2TSKLzSnIXQK2kMsVHYsCcJSAWhZQZs6%20+IIqdB+vVTeBpH0BtOsmTJigRv75pb2669Y1d9jsC39YLurikvYFMDkDLQ1MfDF5Zd/hQrn8YZL2%20BeXPIVPMmgA07yGYggCCrnEJjBo1ymAjF3yAcnV4h2CMiJV3cZv7oJ1hHIE5XZSyi2uaDJcdAby3%20x40bpyYDskuFMVc7gdGjR+ucjx+gq72msskfFBIhw7MOWvZQaMrClUVDs5iMwwDwgw8+qMagYTul%20WAd7PXGDK0yQMFHCHx0JkED6BPAhYZlllkk/YsZYUwSw0UNcf1xTBWJmExNI2hdAo3vVVVdNnA5v%20IAESIAESqA0CEEy6CidhkxmmSOhIgARIgARIAASqTqCJZQTY+RYbSEBzEku/o7QqWX0kQAIkQAIk%20QAIkQAIkQAIkQAIkQAIkQAIkQAKNR6DqBJpY+o1l5nDYtOfQQw9tvFphiUmABEiABEiABEiABEiA%20BEiABEiABEiABEiABCIJVJ1AEzuh7rzzzgZLCsIbBUWWgJ4kQAIkQAIkQAIkQAIkQAIkQAIkQAIk%20QAIkQAINQ6DqBJqzzz672s1smBpgQUmABEiABEiABEiABEiABEiABEiABEiABEiABJwJzO4ckgFJ%20gARIgARIgARIgARIgARIgARIgARIgARIgARIoMIEKNCscAUweRIgARIgARIgARIgARIgARIgARIg%20ARIgARIgAXcCFGi6s2JIEiABEiABEiABEiABEiABEiABEiABEiABEiCBChOgQLPCFcDkSYAESIAE%20SIAESIAESIAESIAESIAESIAESIAE3AlQoOnOiiFJgARIgARIgARIgARIgARIgARIgARIgARIgAQq%20TKDoXc5/+eWXCmedyVeKwKxZswzrv1L0qyPd3377zfz+++9sB9VRHRXLBfuCiqGvmoRnzJhh/vjj%20D/YFVVMjlckI+4LKcK+mVH/99Vf2BdVUIRXKy8yZM8306dO1LVQoC0y2wgQwR0A74FyxwhVR4eTR%20BvBe8Dyvwjlh8pUggHFh0P3555/B01SPixZojh8/PtWMMLLaIYCBCuu/duori5xikIKOCkJNusYl%20wL6gcevelhwCTfxlOVCxafG3egmwL6jeuilXzjAe+Omnnzg+LBfwKk0HbeCjjz4yc8wxR5XmkNnK%20mgAEWdOmTWNfkDXoKo9/6tSp5pNPPjFzzjlnleeU2cuCQPiDBuYKWbmiBZpdu3bNKk+Mt8oJoIGy%20/qu8kjLO3qRJk/QLfIcOHTJOidFXMwH2BdVcO+XJ25QpUwz+OnfuXJ4EmUpVEmBfUJXVUtZMQYAx%20ceJE06VLl7Kmy8Sqi8CoUaO0DTRv3ry6MsbclI0AtPLGjRvHuWLZiFdnQqNHjzadOnUyLVq0qM4M%20MleZElhwwQVz4p9vvvlyztM8oQ3NNGkyLhIgARIgARIgARIgARIgARIgARIgARIgARIggUwJUKCZ%20KV5GTgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkCYBCjTTpMm4SIAESIAESIAESIAESIAESIAE%20SIAESIAESIAEMiVAgWameBk5CZAACZAACZAACZAACZAACZAACZAACZAACZBAmgQo0EyTJuMiARIg%20ARIgARIgARIgARIgARIgARIgARIgARLIlAAFmpniZeQkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk%20QAJpEqBAM02ajIsESIAESIAESIAESIAESIAESIAESIAESIAESCBTAhRoZoqXkZMACZAACZAACZAA%20CZAACZAACZAACZAACZAACaRJgALNNGkyLhIgARIgARIgARIgARIgARIgARIgARIgARIggUwJUKCZ%20KV5GTgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkCYBCjTTpMm4SIAESIAESIAESIAESIAESIAE%20SIAESIAESIAEMiXQLNPYA5G/++675qmnnjKvv/66wfGyyy5runfvbtZff33To0ePQEge1gOBWbNm%20mTPOOMN4nlewOBtuuKHZbLPNzIgRI8zzzz9fMOxss81mTj31VA1TatzNmjUzSy+9tOnQoYPp3Lmz%20ad26dcG0ebE4AuWu13Au49rMggsuqG0A7aBjx44G4enSJcC+IF2etRob+4Jarbl0852kHTz77LMc%20F6SLvypiy/KdkEab4bigPM0kSV+AHJU67g+XiuPDMJHyn2fZF6A0pbYZzhXL2yamTZtm3nzzTfPp%20p5+atm3bmtVWW80suuiikZlIEjYYweTJk80DDzygMqhu3boFL+Ucjx8/3jzzzDOmT58+lBHkkKnS%20ExE4OTnJPiRT/p/TTf8EuuCCCzzpFPx7g/HgeP/99/dmzJiRJMqcsJ999pm34447eqecckqOf9Yn%20KBfSfeedd7JOqqrif+6552Lz8+OPP+at72D9Dxw4UOPCb9A/3zHiTTvuueee2xNBqTd9+vTYcjHA%203wS++uor78MPP4zFUcl6tW3Itc3IBxZv1KhRsWVigH8JsC/4l0WjHn377bfeuHHjYovPviAWUU0H%20cOkLUMAk7SBJWI4LKt98pk6d6o0dOzY2I2nXVfBdn3ab4bggtjqbBHj55Ze933//vYl/2CPtukI7%20QJxwacfNdhCuvcLnmE+99tprhQPJ1Sz7grTj5lwxtjqbBBAlNu+XX35p4h/lccMNN3gtW7bMkQXM%20Nddc3jnnnNMkeJKwwZv/+usvr2fPnprG4MGDg5eaHIsgU8O98MILTa7Rw43A1ltvnVOfw4cPd7ux%20iFCZa2gecMAB5rrrrlPNJ3nBmG222casvvrqRoQhRgbA5vTTT9frb7/9tnnppZcMvoYkddJpmXvv%20vddMmTIl6a0lhRfhh7nvvvvMoYceWlI89X7z9ddfb1q1ahVZzPbt2+f4b7LJJuawww7L8QuezDvv%20vObXX3/1vYqNe+bMmebjjz82b731lrYdfMVDXY4ZM8Y0b97cj58H6RAoV71G5bZQm/nuu++MCGPM%20448/rtrj6667rrn11ltN3759o6KiX4kEin1eo5ItVK/h8IX6GfYFYVrZnrMvyJZvrcTu0g5sWVzC%20clxgadXWb9rvBFv6UtoMxwWWYnl+S6mrcA4LvevDYXFeaBzBdhBFLDu/tPsCvhOyq6u0Yxahodlv%20v/10VSc0IjfaaCMjH8fM0KFDzaBBg3RFpZ2XJQkbzufll1+uq4XD/sHzn3/+2Vx44YXmzjvvDHrz%20uMoJJJceJijQq6++qsJKCClvvvlms9tuu/l3r7nmmgZ/aLRbbbWVkS855tprrzWHHHKIH4YH9UGg%20d+/eZqGFFnIqDJZ/b7/99k5hESiNuLHUfeedd1ZTCOeee66/rN05EwwYS6AS9ZovU1FtRjTE9cPE%20sGHDzBFHHGG22GIL5zabLx36NyUQxb5pqL99KtFm2Bfkq430/CtRr/lyH9Ue2Rfko5Wuf5J2kCQs%20chlVr/lyny9u9gX5iKXrn0ZdReUoX71GhYVfVD7YF+Sjla5/GnWVL0dpxM12kI9uuv5Rz2C+FNKo%2016Rx852Qj1jp/meffbYKM6EgduWVV/oRLr/88ub44483Z511lq9okiSsH5EcQHnlhBNOMPPNN58R%20rdHgJT1+7LHHNK2PPvrI/Pbbb02u06O6CWS6KRAaDly/fv1yhJlBJBBqBu0i2i8qQ/DCPS4AAEAA%20SURBVIYMMQMGDDA//fRTMLgeH3XUUeaYY47RYzR0CKHgoHGHeyBZh/vggw/0HBpXo0ePNkceeaTa%206xQVWLWr8fnnn2s4+881zZEjR2q80O6Du/TSS/X8vffes1Hxt4YIwI6nbYNoA+zIaqjyUsrqPPPM%20Y66++mqz1FJLGXyVv+KKK1KKmdHUEgH2BbVUW9nklX1BNlxrLVb2BbVWY+nnl31B+kxrMUa2g1qs%20tfTzzHdC+kwRo5in0BW7OD7uuOPw47vDDz/c4Pl7//33jZgXTBTWj0QO/vjjD7P77rub+eef35cZ%20Ba/jWFY5G6zYWmaZZXRPhTnnnDMchOdVTCAzgSa+aEHwB2eFj/k4QM0YRri/+eYbNQaLcBBCQqhg%20BZzBe6+66ioVPsAPWp233XabXp40aZLeg3vhILBEHEgfmw9ddtll5sUXXzSPPPKIOe2000zXrl0N%20VJetc00TBmsR7yeffKK3PvTQQ3qOZfR0tUkAbbBFixbaWdp6rc2SMNfFEoCpgYMOOkhvx5c8usYk%20wL6gMes9WGr2BUEajXvMvqBx696WnH2BJdHYv2wHjV3/tvR8J1gS6f1OnDhR595LLLGELi0Pxgxh%20JjYGgoOMJUnYYDyyx4rKl6655hqzyCKLBC/5x1tuuaUKTiE8xV+vXr38azyofgKZLTmHyi6k3VDt%20XXnllQuSgA2TVVddVXezhFYl7Ni5Oixrxz1QVUccsHkgRmRzboegtF27duaWW24xa6+9tgo6Yc9T%20jJOqCjM0O8P35EQQOtlzzz11SSq0QbFLH5apIt42bdqEQvIUBO644w5tB2EaUCWHoDnoUJc33XRT%200Ms/3mGHHfTriu8hB0niDt4XPhZjz9qRohNDp7nSSiuFg/C8BAJZ1mvSuAsVY8UVV9TL/DhRiFLx%2015I8r0nrNUnchUrAvqAQndKvZVmvSeMuVBr2BYXolH4tSV0lCYucsS8ovX7KFUOSukrSDpKEjSsr%20+4I4QqVdT1pXWbWZuFKwHcQRKu16lvWaJO5CpeD4sBCd4q5BRgOHFXJRbskll1RvhLOyGpewNi4o%2012HlLjQ0YdLurrvuspf4W0cEMhNoTpgwQTHla3RhhhA4wkG4mMStsMIKKtnHPdDy7NixY+TtDz/8%20sC9YhSDt/vvvN7DBAcEFBJ2y03rkfVGe2OAGf1BdhkPe86UbdX+j+eXb5GePPfZoItB86qmn8hrs%203WCDDXzmlmGSuO09+X7xdQgCzcmTJ+cLQv8iCWRZr0njLlQEtAE4toFClIq/luR5TVqvSeKOKwH7%20gjhCxV/Psl6Txl2oFOwLCtEp/VqSukoSFjljX1B6/ZQrhiR1laQdJAkbV1b2BXGESruetK6yajNx%20pWA7iCNU2vUs6zVJ3HGl4PgwjlCy63/++afekG+JN7Q04bA0PUlY3INNo6GEhjqjKTEQqV+XmUDT%20CvuiDK9G4bS2MvPthh11j6sftCfDWqJzzDGH7qgFG5zY2TqJQNM1XYb7mwCW92M5d9hFaUFCO3e7%207bYLB9Xz1q1bN/FPEneTm0MeP/zwg/rYr0GhyzwtgUCW9Zo07kLFYBsoRKf0a0me16T1miTuuJKw%20HcQRKv56lvWaNO5CpWAbKESn9GtJ6ipJWOSMfUHp9VOuGJLUVZJ2kCRsXFnZF8QRKu160rrKqs3E%20lYLtII5QadezrNckcceVgu0gjlCy63/99VfBG2bNmqXXZ5ttNpMkLG6CIBvmB7HhD5Te6OqXQGYC%20TauxCLuWsIOJZeWFHJaow1mV/kJhk15bbrnlIm+B4Ve4Tz/9VH/5LxsCMOrrusv5GmusYY499ljn%20jCSJOy5SGByGs+0iLjyvuxPIsl6Txl0o17DPAsc2oBhS/5fkeU1ar0nijisY+4I4QsVfz7Jek8Zd%20qBTsCwrRKf1akrpKEhY5Y19Qev2UK4YkdZWkHSQJG1dW9gVxhEq7nrSusmozcaVgO4gjVNr1LOs1%20SdxxpeD4MI5Qsut2Gfn06dMjb7R7qWC5f5Kw9957r+7Hsttuu5n11lvP/Pzzzxq/3fgXGwXBD/Hm%200w6NzBA9q5JAZpsCQcsNGnWwo2k36clHABqSdofwsCZl+B40QCutD1/Ldz5t2rTIS1Z7dIEFFoi8%20bj2LSdPey9/aIPDEE0+YqVOnGmju5hOA10ZJmMtSCMDODlyHDh1KiYb31jAB9gU1XHkpZp19QYow%20azQq9gU1WnEpZ5t9QcpAazQ6toMarbgUs813Qoow/4nKroqEyUHIjMLO7mmAcEnCvvTSSxrV7bff%20blq2bOn/7bXXXuo/ZMgQ9Rs6dGg4SZ7XIIHMBJpgcfTRRyuSCy64wFjhYZgR1IcHDx6s3tj0xQqT%20rLQ8LIx89913Y1WOw2mMGjXKREn+n3nmGQ3avn17/U0zzXAeeF69BNA2sAMaHGxtoOOjazwCd999%20t3nllVf0S93BBx/ceABYYn1PsC9gQ2BfwDbAcQHbAAiwL2A7YDtgGwABvhOyaQdLL7207o8BTUwo%20uAXd119/rXurYLl5p06ddPNemDR0Cdu9e3fdBAgbAQX/7K7piA/+Vu4UTJfHtUcgU4HmkUceqdJ0%20SN033HDDJhttQO13l112Mdiwp1mzZgbScuus8eXgblQIP2jQIBvE/0VDh7NqxP6Ffw6geXfMMcfk%20CEKfe+45c8899xjcu+uuu2rIJGnihrh0/0meP1VKAF+CXn75ZdOzZ0/z+uuvqyr76aefXqW5Zbay%20IgCj0eeee67p16+fJgF7utg4jK5xCLAvaJy6LlRS9gWF6DTGNfYFjVHPcaVkXxBHqDGusx00Rj0X%20KiXfCYXolH4N8p9evXppRGFZDc6xEdCaa65pFltsMZUVuYbFUvP77ruvyd+JJ56oafXp00ev2fhK%20LwljqCSBzGxoolCwmzl8+HCz0047mbFjx5pll13WdOvWzXTp0sXAZia0obAZEDTihg0blmM/s3fv%203gaq3dDehPARu5k//fTTBtJ6a0PBgkMjh4NQap111jGwx3LVVVfZy/p79dVXG6gfr7/++uarr74y%20Tz75pO6Yte+++5pVV11VwyRJEzcsvvjiet9+++2nXw4gkF1rrbXUj/+qj8Btt91mrFYuXlBoSxB2%20w2GnerTBtm3bVl/GmaNUCcCWCkwLwOEjCOwiWUPT/fv3N9Aop6tvAuwL6rt+XUvHvsCVVP2GY19Q%20v3WbpGTsC5LQqt+wbAf1W7euJeM7wZVUeuHOPPNMlReNHDnStGnTxvTo0cO89tpruscJlMfOO+88%20P7EkYf2beFD3BDIVaIIehItQIR4wYIAKESFUtHYNoDa8+eabmyuvvLKJzToICbG8/L///a959tln%209Q8C0UceeUSXBVtBFNJYZJFFzHHHHadhISSdMWMGvH2HpezQvrzuuuvMO++8o/4LL7ywgZT+5JNP%209sMlSRM3QfiBh+/9999X7dPJkyf7cfHgXwJWePSvT/6jJGERS5Lw2JnO7k6H+6CFB81htNGBAweq%20ynv+nPFKKQSS1BPSSRI+SVjEPX78ePyoa9WqlX4EwdIDaGpvuumm9hJ/MyCQpK6ShEVWk4RnX5BB%205TpGmaSektZr0rjZFzhWWgbBktRVkrBJ2wz7ggwqN0GUSeo2q7DILvuCBJWWctAk9Yqkk4RPEhZx%20sx2AQmVckrpKEhalSRKe74Ty1z82hH7qqacMzH1B9mPt1ULZ6PLLL1cBp81VkrD2nuAvNELh7G/w%20WvA47nowLI8rT2A20VRraoE1Il92ebW95HibDe7/fv7552bcuHGqrQmty9lnL7zqHTtQ4QUDib3V%20iPQjizmAFuYWW2yhggoYhYXNBRiXXXDBBc0y/+xwHhVFKWlGxVdvfhDi4usJXeMSmDRpktqT4eY5%20jdsGUHL2BY1d/yj9lClT9K9z586E0cAE2Bc0cOX/U3TYvMeKB6zComtcAti3oGvXrqZ58+aNC6HB%20S475Nub6sGNI17gERo8erStYW7Ro4QwB75EJEyao3AcKa4VckrCF4uG1bAhss802albSxo5V21tv%20vbU9TfU3cw3NcG5h/BV/rg5anFimnobDEniXgVaaaaaRb8ZBAiRAAiRAAiRAAiRAAiRAAiRAAiRA%20AvVIAEpnq6++ulPRkoR1ipCBapZAYfXImi0WM04CJEACJEACJEACJEACJEACJEACJEACJEACJFCP%20BOpaoAkV5wUWWEA3J6rHymOZSIAESIAESIAESIAESIAESIAESIAESIAESKDRCJR9yXk5AWO3OthX%20oCMBEiABEiABEiABEiABEiABEiABEiABEiABEqgPAnWtoVkfVcRSkAAJkAAJkAAJkAAJkAAJkAAJ%20kAAJkAAJkAAJWAIUaFoS/CUBEiABEiABEiABEiABEiABEiABEiABEiABEqh6AhRoVn0VMYMkQAIk%20QAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKWAAWalgR/SYAESIAESIAESIAESIAESIAESIAESIAESIAE%20qp4ABZpVX0XMIAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgCVAgaYlwV8SIAESIAESIAESIAES%20IAESIAESIAESIAESIIGqJ0CBZtVXETNIAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRgCTSzB0l/%20R44cmfQWhq8TAt9//71h/ddJZRZZjN9++838+eefZtKkSUXGwNvqgQD7gnqoxdLK8Mcffxj8TZky%20pbSIeHdNE2BfUNPVl0rmZ86caWbMmGF+/PHHVOJjJLVJYOrUqeall14ys89OnZnarMHSc435wc8/%20/8y5YukoazoGvAt++uknM8ccc9R0OZj54ghgXBh0aAtZuaIFmj169MgqT4y3yglAmMn6r/JKyjh7%20EGROnz7ddOjQIeOUGH01E2BfUM21U568QZCJv86dO5cnQaZSlQTYF1RltZQ1U9OmTTMTJ040Xbp0%20KWu6TKy6CIwaNcp07drVNG/evLoyxtyUjcCvv/5qxo0bZ7p37162NJlQ9REYPXq06dSpk2nRokX1%20ZY45ypzAQgstlJNGy5Ytc87TPOHnszRpMi4SIAESIAESIAESIAESIAESIAESIAESIAESIIFMCVCg%20mSleRk4CJEACJEACJEACJEACJEACJEACJEACJEACJJAmAQo006TJuEiABEiABEiABEiABEiABEiA%20BEiABEiABEiABDIlQIFmpngZOQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQJoEKNBMkybjIgES%20IAESIAESIAESIAESIAESIAESIAESIAESyJQABZqZ4mXkJEACJEACJEACJEACJEACJEACJEACJEAC%20JEACaRKgQDNNmoyLBEiABEiABEiABEiABEiABEiABEiABEiABEggUwIUaGaKl5GTAAmQAAmQAAmQ%20AAmQAAmQAAmQAAmQAAmQAAmkSYACzTRpMi4SIAESIAESIAESIAESIAESIAESIAESIAESIIFMCVCg%20mSleRk4CJEACJEACJEACJEACJEACJEACJEACJEACJJAmAQo006TJuEiABEiABEiABEiABEiABEiA%20BEiABEiABEiABDIlQIFmAG+/fv3M2muvbVZYYQUzdOjQwBUeNhqBv/76y0ycONHMnDmz0YrO8pIA%20CZAACZAACVQRAY5JqqgymBUSIAESIAESIIGqIUCB5j9VMXLkSHPbbbeZAw44wMw///zmhBNOMN9/%20/33VVBQzYsy3335rnn/+efPNN99kimPw4MFmySWXNMsuu6y5/PLLM02LkTcegaza8S677GJmm202%2088MPPzQe1Bos8euvv25effXVVHP+3nvvaRsYMGBAqvEysmwINGJf0L59e7PMMstkA9QhVozz0E/e%20eOONGvrWW2/NOS8URZZ9bKG2EDUmeeWVV8wOO+xgwBMf4XfaaSeDPiWpw72VrI+k+WV4EqhnAoX6%20gWLLzXFBseQqd18W48Ms31+VI8WUSeBvAhRo/tMSBg0aZFZccUWz9957myOPPFKFAmeddRbbSRUR%20GDFihOnRo4d59NFHM8vVV199ZVDvEGoPGTLErL/++pmlxYgbk0A52nFjkq2tUvft29dggEnXuAQa%20tS+YffbKDT2h6RjlKpkn5CdfW4gakzz22GM6Nhk+fLhp27atmW+++cx9992nK4yefPLJqOLl9cvH%20I+8NvEACJJAZgXz9QGYJMuKqJMDxYVVWCzNVxQQqN6qsIigYFI4aNcrst99+Zo455jB9+vQxSyyx%20hLn++uvNTz/9VEU5ZVayJgCNqT///NMceuihBkLutdZaK+skGT8JkAAJkAAJNASB8ePHm48++qhq%20ygpTQzAts8cee1RNnoIZiRqTQGMT45SXXnrJPPvss+aNN94wd9xxh4Fw8owzzgjezmMSIAESIAES%20IAESqGsCZRFo3nnnnSosXGeddcz+++9vbrnlFvPHH3/4YF9++WWDJXIvvviiLie++OKLzZZbbqlC%20xlNOOcWcdNJJGvbxxx83hx12mMZlb/7888/N6aefbrbbbjuz3nrrmf79+5u77rrLXvZ/C8WDwSGW%20IOGLCFzz5s3NIYccYn7++WczbNgwPw4eJCOAAffZZ59tUO8LLLCA6dSpk9lzzz0NNA6CrlevXjl1%20aq9h+f/GG2+spz179jSoJzhoUCLOt99+W89d/rnkpXfv3uboo4/W6C677DJNY9y4cS7Rq81V5OnL%20L7805513ngpC0Vbh3n33XV0OttRSS5l55pnHLLLIInoe5LDZZpuZY4891kDzAscLLrigWX755VVb%20+LfffsvJwzPPPKNLzbAsHkvFDjroIPPII49ofrEMzTqUGVqm3bp1U/4bbLCB1kc5NTJc6hb5TVJ+%208MTzDp5LL7202X333c2YMWNssc0111yjLA4//HDfDweY8KGOoIENhzh222037S/ABsw7duxo9t13%20X/Pdd99pmOC/uHQRFv3aiSeeqMyhNdOuXTuzzz77GPRTcHHt2CWNX3/91QwcONCsttpqZt5559U8%20o716nqdpVNu/e+65R7njo1HQYaKO+sCSTzi8J3A+duxY/aAAjfkWLVqo1hHeDUEX17anT5+ufQfi%20e+utt/xb8SxtvfXWmg5YP/zww3p89913q3Z+hw4dTKtWrcwmm2yiJkj8G/85iEvXhkdZt9lmG9Om%20TRttV3gGb7rpJr1s2+EXX3xhvv76a00/uETcNY2nnnrK4PladNFFNc/bb799VQmKLAv7y76AfQHa%20AsZZWB4N5/rM4wMjnuUPP/xQ77P/pk6dqv4YK8Dh3Ybx4yqrrKLvPPTBK6+8srn22mvtLU1+8Ryh%20/w+u/Eizj3Vp9/neC/nGJBibNmvWzHTt2tUvD+y/w82YMcP34wEJVDMBl2cD+U9rfOg6LkCaScaH%20ru/sQuMCpJmvH8A11zRqbVxQifGh6xwh6fjQZfweN0eIGx+6pJHm+wttj44EaoKATIKdnBQGs2X/%20z+UmGVh5O+64o3+PaD/6x1tttZUnk0uNRgab6i/CL69Lly5+mCeeeMIToY0nggbvf//7n+8vA1u9%2076GHHtJrNl/B+MW2kCcvLz+b+eJBGBFmeiIY8cPiQARDmt6mm26a488Tz3vuuediMcjL1wM71M3C%20Cy/sbbvttt5KK62k5yLQ88Smix+HTDq8Nddc0z+3BzJA90Rgo6cy4fBk4q73oy4Rl2gl2KAFf13z%20IoMmT5ZvaRqioatpiDCkYNz24qmnnqr3iSBcf1FuEZx5IrTwUF60sc6dO3u77rqrJzarNAzKZB0Y%20iIDOm2uuuTyZgHky0PNEsK7hRFPUBvPuv/9+9Z9zzjk9WX6vfziee+65NawIRP2w8lFA/URI44mw%20Q+NHvvbaay8/TLEHIoz1ZHIZe7tL3SIS1/KLNoonQmHlBEYbbbSRskUfYdvDtGnTPBH0atlFUKV5%20/OyzzzwRqms6Nt+oY/BA3YjgSduo2E1VP9wvtlr98rmkO2vWLE9MFOj9iy22mIc+bvHFF9dzxCs2%20eb1C7dglDfSZq6++usaJ5wDPFeoX5UA7wC/SKZdz6QsuvPBCzZcIDHKyJR+o1P/8889XfxtuueWW%2088Tkg/ef//zHE/twGgbtI1gul7Z96aWX6r14p4gGlqYhgmD1O/DAA/VcBrZ6bvmhfuQjirYv+MnH%20iZw8u6SL9xKeXbyPRMNb69y+my655BLv9ttv9/tC1Bn6Mlkd4KfjkgbiQJwi1PDkQ572tegrbRsQ%20Yb4fX9YHYvPLkw8/scmwL2BfgEYiH+o8+dCj7cX1mT/33HP1OZWPmXqf/XfzzTerv3y4Uy+xfa7n%20LVu29LbYYgtPPir479Gnn35aw8gHdQ0jH6sjz9PuY13afb73Qr4xyVFHHaVlOPPMMz0R4nqyksiT%20j/nqJx/vtVyu/4L14XpPvnAiYPbkg1S+y/RvEAKipOL9/vvvsaV1eTYQCcK5jI9dxlAu4wKkmWR8%206PLOjhsXIM18/QCuuaRRTeMCzK1fe+01ZL2gs++Aco4PXecIScaHLm3PZY5QaHzokkba76+Cledw%20UWyBer/88otDSAapRwKiQKLjEsyn8CcrojMrJrR6nJzNjP11uUk06rQAEFa98847HgRLEDpYoaVo%20w2k0VqAJoYzYMfIgFMJDLZtbqEATaUKIIdpT3hVXXOHJVy4VNmDQimsQ0EyaNElfoA888IAKkOAf%20HNhh8h8Vz+jRo9UfwqGggzAD4SFgkq8dwUsNf+wixBBtJOXXvXt3T7TdlBkG3nbCgUZuneugRjS5%20NM4bbrjB3ur0myQv9957r6Zx1VVXOcVtA1mBJtrMcccdp20X12RTIY1PtChtUBXkYxIB4YN8rVN/%20MMC9xx9/vB9OvsSpHwSgcHgZQjCG+0RL0w8HwRCeG9xvBZqy8YGeyzI6X5iDlwqENQgnmyv59xdz%20kIVAM678EEpBKAzBjRVeIu/yFVWFkqJV5xflhRdeUIEPhOAQuOAa4reTWAS0A1ZMeu3gG4zBDGEx%20aYRzTVc2mdD7IGS1L3D0eaJlo/7ou+Ci2rFrGv/3f/+nceFjAT4YweG5gvAcecZfUPCnATL859IX%20JB2wQhj86aef+rneeeedtVxo03CubRtcIPQGE9Hi12cGwmvRFPc/dtkBK949GCxah4E43i9oa6JF%20qd4u6aL9QAgLYSMmMNZhUIe08XEDbQIO4cIf0lzSQFuFAB5pBCcB+EhkBei1LtBEnRXqC12fF3Bm%20XwAK2TuXvgC5CArQbN8Q98yLhrs+Pxg7Bh0+1OG5mjhxovaD+HiK9yM+YFl33XXXaR9w2mmnqVec%20QDPtPrbU8U3UmARjUtu3oU/B+BjPjGiV+e8yW/6432B9xIWNu06BZhyhxriehUAzrXeCy7gAteQ6%20PnR5ZycZF0SND13SqLZxQVYCzbh3hQsr1K/LuMB1fOg6HnGdIyB/4fGhaxppv7+Ql1IcBZql0Kv9%20e+tCoIkvxhhkYTA3efLknFrB4BTXWrdurcIdK9DEC0uWi+eEtYJIWVqTI1jEZAfh8UUr7CDUwTVM%20RpEPuHzx2C/8shlQOBq9H/G4auk1iaBOPVwmLrJ0QusAA5uggwDPas9h8AtX6oA/GH/UcZK8RE0e%20ouIM+1mBJr6iBp3YuPJkObAnS9F9bwjYLANZOqb+YIA/q7VsA0N7C9pqcOCO9ig2Xu1l/xfabLhm%20BZo4x0TPCpNtQAgCEU5MP1ivon6zEGjGlV+WKGveo4Q10FREeaERa93JJ5+s4SH8QZllebm9pL8Y%20sEIQPGHChBx/CATRd0AYCuearm1n+EgSdJ988okny9A9qy0aNWB1TQMfXlCWoEAXaaHdYGKLa7Uu%200AxrYYEbynXRRRcp1iRtG+8ecIGQA/WJD1TB/twOWMXMQLDK9Ni+YzBAhHNJV5bGa16DH2z0Zvk3%20dOhQbQf4UAcXHrDCzyUNCF7BA20+7MAI16KekXDYtM6z0NBkXxBdh8F+rhb7ArS5oADNCjTjnnnc%20Zz/GoT+Fg1AP/TS04uEwtsBHI7zDg86mYT+gxwk00+aKthy3AgX5jXovwD9qTIJxMlYl4FlHv4Y/%20HOODBlY2JXHB+khyX1RYCjSjqDSeXxYCzTTfCXHjAtSY6/jQ5Z2dZFwQ1Q+4pFFt44KsBJpx7woX%20VvaJjJsjuI4PXcfvrnME5C88PnRNI+33l2VV7C8FmsWSq4/7yinQbCaDoEycaIuoLR8ZLKmdsnAi%20sFcnLxUjD6l/CXaPRBvHPw8eYIMWEYL6XjKh12PYVgo7+XKt9gdl4Gs++OADI1qCfpBwPNZGogiY%20/DD2AH4oh0zYrBd/HQnA6L8ID5psqiOCBbV5JRoVau8tWDeOUScOVs68hHctXnfddbUtwq4r2jrs%20n7z//vu+DVkRwvnlwbMCZkGH3dZFo0u90J7hojYqkgmT2t/UAPIP7Va6Q7WzaP3wa+MK2yILhqnU%20cVz5USY4EQzpjq7BfMLmJcqLuobdQjjRyFG7aOgrRHPHXH311cFb9Bg2OMPPvnxoUbtroqWndnRd%2000X9yAQ7x64ZEpEl1Gq7tEniAY+kaciy88Ddxn/WYPOn1p0I8XOKgGcAzrbdJG1bJvjaXmAPC/04%20bPquuuqqOfHjZMMNN2ziJwNDtYf78ccf6zWXdO0zKh/amsQH+9FxLkkaIshpEh3yXA+OfUF8P2f7%20m3roC+KeebRp2EqWSbsRAZ/amxbBnYGtMGzqA4exBexWY5dv2KOG7VxZGaR2anE9+K7FeT5X7VzR%20D4rJDH03iTaS2oFGWUQQYmS1ktrXFsGi8shXRvqTQK0RSPOd4DoucB0fxo21OS5Ir7XFvStcxlA2%20Ny5zBISNGx9a2UTc3MS+W4K2jxE/5wigQEcCpRHITKBpBSZ4gK3B9qisBjdGwSYX+ZwsNcq5BIEY%20nCzB1d/wP/m6YZA2/oJCs3zx4AUXdth0BJ2jaNSEL/E8hoAsf1Cj9aIB1yQkhD5wmIwUcrI0pNBl%2052tp5MU1MStMs+HFbpduDiIadAYTzzXWWEN3U8VExArlbdiwMNP6219r7F+Wmlov/9cKe6wH0sME%20Dx8JolxYiBcVJku/qLqNKz/KBIdnXmywRWYPG3pZJ8u+/Y8RorVoIKCUL6T2sv7mSxPs4GDA2zXd%20H3/8Meeji0bg+M81DeTH5i0ctSybDntV9XlUG0CG89WJLUzSth3cURlCEDF7YcL9UlSalrNoGmjS%20LumiDcDZPk5PEvxzSQNtAM7mLxh9rbUB5D2qHUTVR7Ccrs+LvYd9gSVRnb9x9Y1cYyMhfMDGJhIQ%20WIo9aX0G7EdEWdZpRINVP+zhoxQE/ti5XExHGGwK6erK1cdGtXuXPGLjP7EBpxssYlM76yDwHTFi%20hJFVR0Y05Ey9fNyw5eNv4xCIejbi+oik74RixwWoBfvuteNDnBcaa3NckLztRrUBxOLSDuLqw+bG%20ZVyQL03bBjA+dG17nCNY8vwlgfQJZCbQlGV+mlsIEDGBzOegWYZd2eCihIr2vvA17JoNZ18UNpz9%20tUJIDGyDLl880BYNOwhB4MJCqnA4njclAKETdvTD7s74yhl00JqAg9DZurBADv52Z2gbptjfpHkp%20Nh3cFxYonHTSSaqpLHYujWxS4EeNiUdSh694cNA8CTsI64IOO0RjUiM2ZXMGAJj0QZC60EILBYNn%20epxW3aJMcJjYnnHGGTl5xgcOaOAFP4qILV7ddR6TWtlUTHexRtvDLtbWia011XSxWoDwR34x2IVQ%20Cpxc00X9yHJz3SEdGqHWIS5ZvmygrXvMMcdY75zfJGlgQosPQfjgEnT2uQr6VdNxuB0U+3wnadtg%20IsuKVACO+oGGlyxBNWLnNgcNwsmGXTl+0KSGs8+dS7pYEQA3fvx4/Q3+k6VS+uxhR3rZfCx4yT92%20ScNqjNrVBf7NclBrbQB5L6YduD4vlg37Akuidn8hmITAUkxQGDEToit/sBrHjvEwjhSTK0aWpptH%20HnnE/7iE/jKJQBPPe9p9bLjvQy0U0+5xn9iLx0+kxqkdq4oNeA3DfyRQ7QTSejaSvBNcxwWu48O4%20sTbHBfGtMNwOiu0fXcZQNjcu4wKEjRsfurY9zhEsef6SQPoEmqrPpZSGbLygMUHgCAGE2P3L+ZON%20FnT5rdhF8VMMa834F+QgfE02StHLsjlKMJgeQ7BhJ3s2nA0UjkcMDOslq/Fpw+EXg2Y42YhEf/nP%20nYDVhINKf9BhogHhG5iKXVO9BOEPhHRYNmwdBHFoI1Eu35e7qLDwS5KXfHEU6w9hFpYjbL755n4U%20aGtiW1PPk5QFS80heMOELvh1WTb48T8K2ERk0xgD4aXs6Gi99PfKK6/UJeuysVKOf1YnSeu2UD6w%20TAOmKq6//nqDJXXW4Qup7PSsGilWe+2OO+4wsrGYaunIplBGNs1RIeDBBx9sb9NffFm94IILcvyg%204YI+xGq4uKa7zjrraDxixzAnPpxDm0h2pM7xD9a9axq2HcnutjlxYRlmlBAtJ1CFTqxwF9rK1qFt%20ymYd9jTRr2vbhmY2tJbwi6VAqFerrfXmm2/mpIm8BD9q4cu9NVFg24FLutDAhgYBBOjB/ktsuxrZ%20mMiMHDkyRxAdbAPIkEsa6AdQDmh5YwWCdWjLF198sT2tul/2BcY0el9QaqPExyks7xwwYICunLHL%20zRGvfSeij7RLAOGPpdhw4WdNPSP+pd3HJm33cfm0H+2gqSo24v0SYAUH/ODCK5H8QDwggSoikPTZ%20KJR11zFUknGBy/jQ5Z2ddFyAcgb7AZc0anlcgPKWe3zoOkdA3uLGh65tj3ME0KQjgYwIyODQyUny%20XvDP5SYYa8c92O086LD7K/zlZaY7CNtNgbA7dNjZzXxgAD7oxE6SxiEDV0++pvuX5AXkiQBVr8lE%201PfPF49MPDWs2Mjww+JAlvSoP+6jyyXgsimQCLL9XQJFM1GN9R9xxBG6OQc2bxHBph+pCB2Utbz0%20PRjwHzhwoG7eIYIBNfpvA2I3a7SblVde2UNcwZ2QbZio3yR5iTLAHxVn2M9uCgTj30Fnn4Edd9zR%20w26r2BxGtP60HCiLaBpqcNeNA8QGoN6Lnf6wc7rYzPJatGihOzIjPrspEMpsNwro27evct1vv/00%20rAhFPdHyCmYz8bHrpkCudeta/nPPPVfLL0vOlR36lm7duqmffG3VcmBjINHC1I3HxPSF+qH/gJFt%20MMKmEHB2F0v4YaMl7EiPOETwqDtIB/sVl3RFc0Y3dkJ8MtFW5jI51riQ1pQpUzTdfO3YJQ1sKGM3%20/8Hu7NhwSuzGebLUXsuGtKttUyDUgXxI0mcZbVaEbrpJBp5v5Pf8889XLnbzjuDO3bgg2s054Vzb%20tmjD6n1o99ZhYx6kic22sEu8NfoOP+w4Lh9gvPPOO88TgYCGC27u45ouNh9BfKIZ7sGAPfoz0aZV%20Pzy/1qHdoi/cZ599PLvxkGsaiBdp4BmHYXswtM8B/KtxUyD2BewL0PbFFp6H/hvO9ZnXwPJPPljp%20uBFtHO+x4LhQJsT6TKB/RLzoG7FBBMLiD8/HmDFjtP/H+bBhwzTa8CZBafexru0+33shakyC3cxR%20BllxpM86NgNDnwY/jH+TuGB9JLkvKiw3BYqi0nh+rpsCuT4baY4PXcYFqDHX8aHrO9t1XBDVD7im%20UU3jAtdNgSoxPnSdIyQZH7qM313nCGh/UeNDlzTSfn8hL6U4bgpUCr3av7ecmwLha7eTw0Ap+Ody%20kyw59mQJrt4ndixVWLDJJpv4k28MOOGKEWjiPtlASOMWWxYeBEYQRohGpvpByCNLaxFMXT6BpizN%200UmlLAG0QfVXNHg0HuxKRpdLwEWgiTsg9Npqq638+kb7Qf1AGB10eLmsvfbayhthMHiBgLB37945%20Ak3RmvIgeIbACeEwaHJ1rnmxkwfRznKNWsOJ9pXmCW0+6NCObJtEnvE8iJagJ1qGfnkRPt+ATTQP%20cxgg7H//+1+vY8eO2m7F9ILu3j1kyBCNLyhQleUynnzZ9XkhrNgb87DzeqnOVaDpWrdJyi9apr5Q%20D0whfIJgE5NdODuJxaQ26EST1Wcm2ng6YEXdYKBphWuID35RbTwuXaQlmuGefClXAR7iwh/Ox44d%2062elUDt2SQO7sgefAzwPO+ywgwfhKdLDpLJcLopTVNrYfdi+C5BHsTfliTaR5jdOoCnmGXLCIf64%20to3nEEJUCBLxcSro0KcjD/iAZgesYpNPP5TAH39ibsAT288q9AzeG5cuwor2qScatB6et2B86NNk%20WZUfnWiM+sIZ1J11LmkgLIQYVriNdPCR45xzztE0RSPZRpf5r2gza7uPS4h9AfsCtBEI0GTpnTaX%20fALNqGfeti+xo6ltfM8997Re/i8+HmA8aJ+7Dh06eOj3ZUmg+uE9YQWYeP7gwufwS7OPdW33+d4L%20UWMS9Gn4kBV8b+FYNFc90dpEEZxdsD6cb8oTkALNPGAazNtVoOn6bKQ1PnQdF6C6INB0HR+6vLNd%20xwX5+gGXNJDvahkXuAo0kedyjw9d5whJx4cu43eXOQKY5BsfuqSR5vsLeSnFUaBZCr3av7duBJqo%20CllK7EGYKRuZ+INMaJWgA7POCnegvRZ20JqBFgs0L8MOk0MIcqwmGgaxGMxisi/LL3OCF4oH+UMa%20ENJYB206xCc2EK0Xf/8h4CrEsMAgaJLNlWIFLRjcIBxe/Fk517ykmT7aqSwz98SOTk7ZxEZMYm26%20t99+W+NC/jDwsQISaASivSLOsMOzA65W4Be+Xsy5q0DTxp1F3SIPX375pU0i8S8GrBAMw2HwJXZy%20PDF7EBuPS7qoG8SHr6XFOJc0kGcMjqL6xmLSLOaeJH0B2h+eAaupWkx64XtKbdt2wCrLjzRqTBrE%20dmbOcxpOE+eu6eK5hzZ0MX2aaxoYvJbyHESVL4mfq0DTxsm+wJJw+63HvsCt5MWFgkAv3JfLMtMm%2071+X2NPsY7No9zNnzvTE7IQHLSccV9pRoFnpGqiO9F0Fmja3WTwbLv2mTT/qt5jxoes7uxHGBUkE%20muBfT+NDl7bXKHMECjSjepfG8SunQHM2YBVBSKwTgV9OGMfb/Htg3wc23rAhBwyXR+3U7Acu4gD2%20z2CDEcZ5gzsdu0QF22p77bWXbhYh2lp6C2yWwNajLGs2doMjl7gaIQzswFm7cpUsrwjA1Y5coTzA%20xpYs8ywUpOC1cqRRMAOBiyIUMSK8V/tg8pLwbZDC9ox8cdTNS0Rw2cTebCCK1A6xMYEMWIxowKQW%20Z7kjEq1tg83F7OYv5U4/q/Rg/xObrcU5bGAEG1aluGrpC4otg6wOMLIM3sCeEuw815MrV98lAmqD%20v1q2Nc2+gH1Bkme/nH1sknzZsJXKH3ZfF2ENbXjaimjQX9GENLArmHQuVk24+E4o7Z0g5kB0LwtR%20GKqmak2UF44PS5s/AzbmGdhTRVbNJmLPwPVBQEyj6QaOtjTDhw83IuS0p6n+5u5SkWrUuZHBSHuW%20hsrla5rBXzEOu9sOGjTIiE0lc9RRR+lmQKJ5pLvjUphZDNHy3CNLQo0saS+YWHhX+4KBIy6WI42I%20ZCO9sKkMhBSyPFZ3iIeBadGIMKK1qQNH7J4c3vQqMiJ61jUB7PqLDWPiPjphYxm6+iVQTX1X/VKu%207pKxL8imfqqda7XnL5taYawkQAJxBNg3xBFqjOscHzZGPTdSKcsm0KxmqPiKCC0+2ZxBd0bGTtzo%209MV4dDVnu+HzJptuGPxl6cqRRpL8o02KsWhtp9Aels0VdAf1Aw88UDU0k8TV6GH79+9vxK5j3WGA%204Hvdddetu3JlUSDsGIxnSkwPZBF9ReOstr6rojBiEmdfEAOIl3MIVHsfW+35y4HJExKoQgJ8J1Rh%20pZQ5Sxwflhk4kyOBEghQoPkPPCw5F+PwRmxyGiynld1ujeyiWQJa3koC2RDYaKONDP7oSiNwyimn%20lBYB7655ArJhk8EfXWMTYF/Q2PXP0pMACZBAkADfCUEajXnM8WFj1jtLXZsEKND8p95gIxS2COlI%20gARIgARIgARIgARIgARIgARIgARIgARIgASql8Ds1Zs15owESIAESIAESIAESIAESIAESIAESIAE%20SIAESIAEcglQoJnLg2ckQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJVTIACzSquHGaNBEjgbwJ/%20/fWXmThxopk5cyaRNDCBH374wUyZMqWBCbDo7AvYBkiABEiABCwBjgssicb95bigceueJScBEKBA%20k+2ABEig4gS+/fZb8/zzz5tvvvmmSV4GDx5sllxySd3R/vLLL9frr7zyitlhhx1M+/btzQorrGB2%202mkn8/rrrze5t1o98pUX5VlmmWWqNduZ5wt1+OqrrzZJ57333jMbbLCBWWSRRcxyyy2n16dPn27O%20Pvts3dSnTZs2Zr311jNnnnmm+e2335rcX60eUeW99dZbDWw633jjjdWa7Uzzle/ZQKLsCzJFXzeR%20o7/AMzRgwAC/TNXQt7Zt29Z06tTJz1OpB4WelVLj5v0kUC0E8rXzqHEB8lyP48NGHxegXqPGS/CP%20GhfU6/iwGt5jYE5HAtVGgALNaqsR5ocEGpDAiBEjTI8ePcyjjz6aU/qvvvrKnHXWWWb++ec3Q4YM%20Meuvv7557LHH9Hf48OEGE8T55pvP3HfffWbttdc2Tz75ZM791XqSr7zI7+yzN2633LdvX7PLLrs0%20qbZzzjnHvPjii2bfffdVoSU0dbfccktz8sknm6+//tqstNJK5v333zennnqq2WKLLQy+1teCy1de%205L1R20G+Z4N9QS206OrOY6WfqT///DNVQPmelVQTYWQkUGEC+dp5eFyAbHJ8WOHKyjD5qPFS1Lig%203seHlX6PZVjFjJoEiibAXc6LRscbSYAEsiYAbT1MAg899FBz5JFHanJrrbWW+uHammuuqX533XWX%206dOnjznjjDPM5ptvnnW2Mot//PjxmcVdyxG/9dZbZsEFFzRDhw7VYmDSAo3ebbbZxtx///1mjjnm%200Dax+uqrq/8zzzxjevbsWZNF7tevn9l11121TDVZgIwyzb4gI7ANEi371gapaBazYQiExwUoOLT1%20MGast/EhxwXRzTpqXFDP40O+x6LbAX1JoHFVgVj3JEACmRPo1auX2W+//Zqkc8ABB5iNN95Y/SF4%20wiAUDtqY66yzjnn77bdN7969zdFHH63+l112mfqPGzfO/Pzzz6ZZs2ama9eueg3/oJ0JN2PGDP1N%208m/UqFEqGMOyZQjNunXrZm666aYmUSBPWOa+7LLLmoUWWkjzf/311+eE22yzzcyxxx6rWgI4RnzL%20L7+8CmPtUuh85UVE+AKN5fPWucSHsC6cEQ6aixdffLFZZZVVzAILLKDarSuvvLK59tprcTkTd889%2092jdgXPQYSCKusZSqjvuuEOPv/jiC9W4hD+Wi0ILF8cff/yx+eWXX/R44MCB2gYQF9oAhJlw+LVt%20Imk7+OOPP8yJJ56odQ+N33bt2pl99tnHfP755xq3/YeJEpa5I0/gh+Wje+65p4GWgHV33nmnXh87%20dqwK4ldccUXTokULbaPQMoXLV15ce+qpp3R5vdVWdokP97lwRji4d999V9vZUkstZeaZZx5dyo92%20FyzH3yHT++/SRvM9G+wLjKmHvsC2JrS/7bbbzqD9Lb300mb33Xc3Y8aMsZf117WN4nlB21p00UVN%20q1atzPbbb28++uijnLhwUmzfinvxgQR9P0yfwCTIQQcdZB555BF9zrG8NanDBziY0MD7oWPHjqp5%20/t133/nRQEsdfQyW2gYd+imsZAC7fM8KwqOfwooGvMvQTyEt9Fu1orkeLDOP65dAse8EmB6KGheA%20VCXGhy7jAuTNpQ/P91zX67jAZdySb7xUaFwA3uUeH7rMEVzGc/nKizIV+x5zedYQfyXmCEiXjgRK%20JuA5OknIC/453sZgdUjgueeeq8NSsUhJCIjgw/vwww9jbxHhkCdalE3CiQDSm3feedVfJlueTEa1%20f5EJoyfLh7033njDk8GfJ0vK1X+JJZZQf/ki7x111FHqJ/YSPXn5ej/99JPXv39/9TvllFOapFXI%2046GHHvKaN2/uiTDME81PD3nBMfq6Sy65xL/18ccf9+aee271R95lubMnQio9F+1RPxzKK5N0b665%205vJEUOjJIELjR3yDBg3ScPnKi4si/PREmKbh8M8lPhsujjPCnXDCCZrnli1berI02xMNRz9/Tz/9%20NIIkci59wYUXXqhpioAuJ24wBZfzzz/fu/3227V+cT7nnHPqsQjCvQceeECPRYCt9YK2IcIE7/vv%20v9dwIlzwZLMojVcEIh7KJQI6T4SfOWkVOpk1a5Ynpgw0L4sttpi31VZbeYsvvriei/Ba08L9Mmnx%20Nt10U/VfeOGFvW233dbPs9j29MSelyZjyyu2Pj0xleD95z//8cTukd6H+kTe85UXEdxyyy0adtiw%20Yc7xIaBNtxBnhBOhsYf8io1Br3Pnzp5og3pih1bTRNtM6kTo4smHhtjb2BewL0AjefbZZ/UZRR+J%20/nGjjTbStijCPe33Eca1jeI5Qn+N/kFs6OrzifcK+hD0JYcffjiiU1ds3yoa4NpHIk4RJuofju37%20QLSBbBKxv3iPIV949uQDmvYh6GPgh75MbEhrHPIhT/2uvPLKnDgffvhh9ZfVCvquinpv4ga8nxBn%20hw4dPBHw6jsJ53vttVdOfGmfTJ061ZMPOWlHy/hqjMDLL7/s/f7777G5LvadIB9lI8cFSLDc40PX%20cQHy5jKeyzc+rLVxgdiw9F577TUUu6BzGbfkGy/lmyNUYnzoOkew5S12fFjse8zlWUNFpT1HELun%20icbjBRsLL9Ycga233lrHIhh/4E+UVDIrg3GN2WbG/rrex3D1R8BFiFF/pWaJggTSFGgiXtHS087u%20hhtuCCbj3Xvvvep/1VVX+f6//vqrToTRF0EwAwEWjkVrxWkQbSOCIAuCJkyIIdi0Di9gTDgRNwar%20Yo/HF/iI5qYNpgJdCC8RFvfAYdCAvBx//PF+ONE0Uj8IjazLV96owYpLfC6DFQh/IYjDZPyzzz6z%20WfGuu+46zd9pp53m+7keuPQFdgAXJ2hDmqgP0dhqkrxolGp9BC+IvVStO5QHgnBwgpBElqIHg8Ue%20y+Y7ei8EK1YQinqXr//qf8UVV2gcqHuk0b17d0+0qdQPTO0AEC9uOFteCEc//fRT9cO/nXfeWe+/%207bbbfL+o8uabuMTFZ9ON4yzaLZoPCIatE+1hFaaDpWiBWW+n3zQFmkgw37PBvsCtb6nmvgB9KYTo%20EDrio5V1ENShH91kk03Uy6WNQmACoSD672Cbx4cF+0EiTqAZ17fiHQGBI54L0dK02fUweRU7Zvoc%20FSPQxIckK/BBGnvssYfGBWEMHMqAvOFDS9BBIAn/N998U72jnhX0LwiDOMEbDv2arIhQ/6T9o0bg%20+I8CTUdQdR4sTYEmUEW1c/hHjQvKPT50HRcgv6WMD2ttXJCmQBPs4KLGS1HjAoQt5/gwyRzBjtPi%20xnP5yltrcwQKNFGTjevKKdDkknMZ+dGRAAnUDgGZ/OoulsixTIJ1wyAcY+mfCNhw6OQQHkuZRYNO%20l5zbm7BMD0uwsSz+xx9/VFtMoo2qtjmxvNg60X7RpfLyqtJl09ZfBq3m9NNPt6e6YQ02rZk8ebLv%20l+Qgrfhk4mxEaKnLnbHM07pp06bpIZZ014pDvVx66aW6tBJ5FkGmEaGDESGBgRkALDtzdTJZ0qAy%200NSl4TiB0XUszccydBGO6HWZUOgvzB/A5AAc2h/stop2lUG7tCxxTYQpap4Ax3B2s6Ni20Fa8WEZ%20Fsog2sx/Z0z+i5azspSBuTL0L1T5AfuClbR/SdqmKtUXiBDTYGdimCGBvVvrRCta+2DR3jRffvml%20LhWMa6MiNNGwuBd9uHUwAwGzHy4urm+FiYgJEybocnNrIgXxYuMx/BXj0LdgyaysDNDbRSCrfZkI%20ef33CMqw7rrrmpdeesnADAccns0HH3zQdOnSxay22mrqF/UP/RT6JVlhoKZZEAYmLy666CINfvPN%20N0fdRj8SqAsC5X4nJB0XxPU5SSuB44KmxMo9PoT5pCRzBOQ4rXpDXGm1qUqNC1AGOhIolUCzUiPg%20/SRAAiRQLgKiOWcOPPBAFViJJorZbbfdNGkIpUR7RSeeoiWiwq24PH3yyScaRJb4NAm6//77+37W%20HtuGG27o+9kD62fDwF++oKqAzYbBL3ZpR96LcWnFB4HfYYcdpjvBY8IPg/rvvPOO2qxEvjAJrhUH%20oaVoZakdU1mOZORrt5Hlmio0hP1T0YZVYaRLedAOIEyw9jftPbIkSO3O2XPUMQSn2JQq6MAV9rxk%206XuO7T4IsYMObQCu2HaQVnwQlKBNwY4fBuKwVYgd4mGfD65W2gH7Aq2uovqWSvUFEGbCYXOv++67%207+8C/PMfNiTxcQjPGYSHcW3U9t+ixZgTD05kaXgTvyiPuL7VphF+5hEXNqTD5hNJHT4m4QNI0LVu%203drAlrEs0dR3G/oKCH0htIXNtWOOOUZt6+KDyd577x28tckxGINjWOhp+x1MvOlIoB4JVOqd4DIu%20kJUdijyuz0laLxwXNCVW7vGhrPLRTNj5QDBH1i84R8D1tOoNcaXVpio1LkAZ6EigVALU0CyVIO8n%20ARJITACGp4tx0KrEpA47PlphJuLBphL4k2UuOgl0iRtfceEgzCrkoPUHh0Fr2Nl7ZZmTfykqnH+x%20iINS4gtyxtdXsa2mmkWytF83g5FliUZskRaRq9JvCeYtaWxWkICBK4SZcPi1A8sRI0Y4R4l2gI1x%204hzaATajgoZV2FVzOwhzFlupqjl6xBFHqCBzjTXW0A1E8FsJF86fax7YF7iS+jtckHOl+gK7Mdqy%20srEaNiYL/kGIiY0LoLno0katAB6TsLAT+5Zhr8jzuL7Vbi4GLcqwswLCsH/ceb40bTlsufr06aOa%20N9ggAu7uu+/WD3XYFKKQA2PEFWSLY2h2gq8s+S90O6+RQMUJBPuqJJmp1DuB44IkteQWttg2gNjL%20PT5MOkdAHvO9B3AtqSslriDnSo0LkpaX4UkgigA1NKOo0I8ESCA1AlETv/Du0a6JTZo0SYNGaZFh%20l3I4aOq5OGjgwY0fP75JcOy2juWRWPaIyTec1S4KBoaGI5zY9gl6V+Q4jjN2ycRAD4ID7NBrhXiY%20BASXH2eV+XD+im0DyJ9tB5hIBB12IUbbcG0DuBftYPTo0QYaYmJj1I8OX9TFFqou/YSGFNoBdmpH%20voNL9nFDsB0grkq6OM4nnXSSgaBG7ADmLJtNIgQutnzhvCGeYtuBbQPsC5rWRhznSvUFK664omZ2%20p512UlMNwZxDwxm7ekOzEBqWcW3U9t+yIVUwGj22z2OTCwk9bBrQZg87aFMW48R+sa+Fae9HfaG/%20wYcRa84Cy8Rlwy4jNo4NyigbpOkHKbHtbG+L/AVjaHYifHCii8kq3mk2/sib6UkCZSYQ11clyU6l%203gku44Ik5cgibJhz+L1byXEByhuXvyRMbDso1/hw1VVX1exxjpCklhiWBNIl0FTVJN34GRsJkEAD%20E4CACJNBCIusw0Tr66+/tqc5v8GvhTkX/jmxy+juuecetftnw2DyCz84aKK4OGikYcL3v//9Lyc/%20sFkGG5gjR440sumPwVKhBRZYwGCJe1D4CU2as88+W5Pq2bOnS5JNwsSVt8kNeTxcONslL5tvvrkv%20zER01oZkWnkJZ9EKCaF1ZR0m15ioRzmXfNh2gKWrQYe6xHJL1zaAe7FcHM7amNOTf85lh2PfDp2t%20Y9ghDToIhyHcgOYTBKpJnUt5XeJ05Yx2AGE22oF1ECbBXh9cWvmxcdtflzZqw+I3Lh+2DbAvCFIz%20KpSP63Mr1RfArIPsZq52bmEaxDpo1ssu5SrIRL+qPRDgAABAAElEQVTq0kaxDLxly5baL9ul4YgP%20Goqwf5uGQxpY/g3tSMsM8crGOroEvJg0kL8LLrgg51bYtYQwN7xUHsvO4WDPGbzyLTcPPiubbrqp%20Qf8KG8NBJzumq7kMaOfTkUA1EKiHd0JW4wLUT/C5Lra+amFcgLLV8viQc4RiWyfvI4H0COSqt6QX%20L2MiARIgAQP7ZhCYYQMFLJWT3dHN//3f/+VojgATJrlwmIRBuwbLYa1mpF745x9sI8pu5qp9Ak0U%202Tla7ZFhkgbbYND8QRgXt8QSS6hNSQiyYFcQk8fvv/9ebQtiQnj00Ufr8uJWrVqZk08+WTeaWHvt%20tdWYN/wgPBszZoxOEu2GLy7pIoxreV3jc+FsbfZgso8lifiDlp5dnoNJOjR40l56DLZYpo2NliB4%20Rr1hGWWUFhW4gOm+++6rguT+/ftHIjjyyCNVgA2BMjbukJ30dIMnCDixZBUala5u0KBBZtiwYebc%20c8/VDTiwWYnskKkDbLQRmDKAQ5wQwt4o9pKwCYtNE+0ZWoIQUkRpCxbKh2t5C8Vhr7lyhuAVzPDs%20YDMV2YndXHPNNcZuCoVnMAuNXZc2irK4PhvsC2zN5/66cK5UXwAB5AknnKB/eM7Q52LSjo08oFVz%20yCGHqADRtY0ed9xx2jej7cO2MuKHbdi0tKRh2xL5hfYSbC3j3QOBJITo2IgBm2kV42DmA+8rCHE/%20+OAD7RuxrD38sQTvG9QVNMCgmYkNkIIu6llB33jVVVdpvt9++23tz2EjF30uhLPoW+lIoBoIuPRV%20yGdUO6+W8WFW4wKUOzgexnkxrtrHBa75Q9ldx0vlHh9mMUdIUl6XduHyrFVqXOCSf4YhgVgCos3i%205CQiL/jndBMD1SUB2Um6LsvFQrkTEMGkJxOy2BtE29GTSZnfd8gk0Dv11FO93r17e7K8zr9fhCme%20GM/2ZImIhpUlc3rt3nvv1fOrr77aDys2ND3Z3MYT7Uo/XhwPGDDAkwmmH87lQASXnkwuPdHA9ONC%20vpBHWQKTE4XYa/REA88PJ0sCPZkcerKjth8O5ZPNIvxzeyATV6fyinFvT5Y52ts81/hcOQ8cONAT%20QaZfBtmp3RNBpidCRvUbPHiwn7bLgWtfcMUVV3hi185PV2y6eSIU0PPzzz/fT0o0lTzRKFB/0SD0%20/UXj0pPdxv1zHIgg1kM8wfeSbKzhydLpnHAuJ7Kk0xNtLE8Er358OB87dmzO7Wj3IlTwRGjqhxPB%20micCUD+c7Jau12TTIt8PB8gX8hpXXtk1VcOBBVyS+Fw4v/nmmx7ybLmhXg4++GAP7dv6acKO/0Sz%20zAO/OOfaRtkX/N331WtfgHYi2oKeCOj89obnG32PaGdqM0rSRuWDVE5cYkvXO+ecczRumdj6zbJY%20nojgv//9r9exY0dPPljou0LsN3tDhgzRNOTjgJ9G3IF8IPFkB3NPPpblvL/wPObrS9Ff4LmUj3xN%20os/3rMiydk80Nf33Kd5v8tHNEy3sJnGk6SFapE36zDTjZ1y1QQDjN7ErGJvZUt8JUeOCSowPXcYF%20gOE6not6rmttXCBa956sXIltAwjgMm5BuKjxYdQcAWErMT50mSMkGc9FlbfY95jrs5b2HOH111/3%200J7pGpOAKH744zyMY4YPH54ZiNkQsyQS68KaJ463xcbLALVHAEtxw0ujaq8UzHEpBKBNg2WCIhBz%20iubLL79Uu2HQqoraYMEpklAgaFHCDhBs7+BrfdheTih47ClsmyHOZWQH2kJ5hH1GaObIwCJyg5jY%20hDIM4MJZBLAGZYX2obWnhmWeEyZMUFughcoeznqSvmDmzJmqDYg07TKocHzFnGMpJjR/sdwbGlWl%20OLRpcICpAXx1z+dQlo8//lgZWu2RfGHL7e/CGVpxMsBVbTPYf7V1Dj/Y7kvCccqUKQZ/rpuNuLTR%20pMzYFzQl5sK5Un2BzS3eIxhL4nkLu6RtFGYToHUeFVc47iTn0CSH5me7du30nQdzDdA4h+Y2tPTx%20Dmrbtm2SKDUsNpKDdnSwH46K5PDDDzdYLi4fVxKZ0kBc2KwCaeAZB5usHTbsQz0kMfmRdZ4Yf/kJ%20QKMY5iWwWsLFufRVLvEEw1TincBxwb81gP4Ntn/t7u7/Xok+chm3RN9Z2LcS40POEf6tE6yWkI94%20Oq7815dHjUJgm2220RU4trwi0NTVbfY8zV8KNNOk2SBxJRFiNAiShitmUoFmOQHBFploScYmiRdt%20moK12ATrMEA19wUnnnii2tcrhL1fv36+HdRC4XgtP4GkAs38MaV/hX1B+kzzxVjNfUG+PMf5Qyiy%206KKLqs1Z0TTxbeTC3hvMNWDTINGsNFgaHueSvm+sQBcbTsBMR7GbEMXlK83rFGimSbN240oq0Cxn%20SflOKA/tpALN8uTq31Q4PvyXRZZHFGhmSbf64y6nQJM2NKu/PTCHJEACCQhAuwwb+MRpkUPrhq5+%20CWAjjbDNuXBpZRl72IvndUSAfUEdVWYFigKtf0x8jz32WNVyxAZi0PiBbUpon1122WX6USzt982P%20P/6oKwUgFIDmEmxu0pEACZROgO+E0hnWQwwcH9ZDLbIMJPAvAQo0/2XBIxIggToggEkoDI3TNTYB%20mCGI2jigsak0VunZFzRWfWdRWmz60a1bN3P77bfr8m0sPRf7vroJETQ04dJ+34hNaIPdyvFRbtdd%20d9VN9bIoG+MkgUYjwHdCo9V4dHk5PozmQl8SqFUCFGjWas0x3yRAAiRAAiRAAiRAApkS2GijjQz+%20yuVkoy7dSb1c6TEdEiABEiABEiABEqhVArPXasaZbxIgARIgARIgARIgARIgARIgARIgARIgARIg%20gcYjQIFm49U5S0wCJEACJEACJEACJEACJEACJEACJEACJEACNUuAAs2arTpmnARIgARIgARIgARI%20gARIgARIgARIgARIgAQajwAFmo1X5ywxCZAACZAACZAACZAACZAACZAACZAACZAACdQsAQo0a7bq%20mHESqH4C3377rXn++efNN998k5PZ9u3bm2WWWSbHr9wnbdu2NZ06dUot2XxlTS2BGo7o9ddfN6++%20+mpOCW699VYz22yzmRtvvDHHv5wn119/vebhzjvvTC3ZqLKmFnkNR5Tv+WBfUMOVyqyTAAmQQJEE%20ot4J1TAuQHHSHh9yXJC/kUSxqYZxQdrjw6j2np8Kr5AACSQhQIFmEloMSwIkkIjAiBEjTI8ePcyj%20jz7a5L7ZZ69s9/Pnn382yVMpHoXKWkq89XBv3759zS677BJZlEq2g7TbAApYqKyRABrEs9DzUck2%20APxpt4NCZW2Q6mYxSYAESKAggUL9ZL29EzguyN8U8rGptzZQqL3np8MrJEACLgSauQRiGBIgARJI%20k8D48ePTjI5x1SCBfv36mV133dXMMcccNZh7ZjktAuwL0iLJeEiABEigtglwXFDb9ZdW7jkuSIsk%204yGBxiBQWRWpxmDMUpJAQxLo2bOnGTx4sJb9rLPOMuuss455++239RxfZHfaaaccLri2ww47mGWX%20XdYstNBCZuONNzZY8hF0m222mTn22GPNY489ZnC84IILmuWXX94ceeSR5rfffgsGdT6+6667zAYb%20bKBxdezY0ey7777mu+++8++HZiHyjuUiQffHH3+o9ul2221nCpUV2l9Dhgwx3bp1MwsssICmdfbZ%20Z5u//vorGF1dHt9xxx3K7osvvjBff/21Hg8YMEDL+tRTTymLoPYuWIENeIMVTALsueee5quvvvL5%20YHk4ro8dO9YceuihZsUVVzQtWrQwa6+9tnnxxRf9cEkOpk6davbee2/ToUMH06pVK7PJJpuY2267%20zY/iySef1DRRj2GHNor8HHfccfobVVbc8+677xq0laWWWsosvfTSZvfddzdjxowJR1eX54WeD/YF%20jdEX1GXDZqFIgASKIpDvnVDsuACZKPf4kOOCoqrev6nQ+LDYcUElxoecI/hVygMSqBwBz9FJDr3g%20n+NtDFaHBJ577rk6LBWLlISACJi8Dz/8sOAtIiT0Fl10Ue03llxySW+llVby3njjDb1HhJBeu3bt%20/Psff/xxb+6559awIpjyttxyS0+EVHouQis/3HzzzeeJQMiba665vJVXXtnr1auX17x5cw03aNAg%20P5zLwRJLLKH3iR1Hr02bNt62227riTBV/cS+pyd2PzWao48+Wv2uvPLKnGgffvhh9RdhqleorCgL%20+k4Rlnnbb7+95h/ne+21V058tXgS1xfcfvvtWu8o75xzzqnH++23nxb1lltuUS7Dhg3TcxFmeptu%20uqn6LbzwwlofaDO4d5FFFvHee+89DXfhhReq33LLLefNP//83n/+8x9P7C2pH9rH999/r+Fc/l1z%20zTV6n80f6lEE6dq+4HfeeedpNCLgVr/FFlvMmzVrVk7UIqjWsiEum99wWZ999llvnnnm0TjQZjfa%20aCMP7U4E8v4zkRNpDZ2IoN8bN25cwRwXej7YFzRGX1CwgfBiXRCQD0OefGiqi7KwEMUTePnll73f%20f/+9YAT53gnFjguQWLnHhxwX5K/i6dOne6+99lr+AHKl0Piw2HFBJcaHnCPkr2axj+r98ssv+QPw%20Sl0T2Hrrrf05FuZUw4cPz6y8xjVmZCT453ofw9UfgTghRv2VmCUKE3ARaOIeMfCu/cYNN9yQE0Vw%20sDJz5kxvhRVW0HA33XSTHw4CUwgvIfjBSxEOA1b0Q8cff7wfTjTf1A9xJHFWoLnNNtv4g28Iq/bY%20Yw+N76ijjtLoIEhDmuuvv35O9BBIwv/NN99U/6iyipafhkGcKCccXu4QmuFe2TBJ/Wr1n2tfAIGj%20aCXmFDM8cUHdg0n37t09TBTgRIvVO+GEE9QfL0Y4O2CFcPHTTz9VP/zbeeedNRyYuzor0IQwHUJH%206zAQb9mypTfvvPN6olmq3n369NH4RYPEBvMmTJigfqJ56fuFy4p679y5s8ZlBfoIDIE42rZog/r3%201uKBi0AT5Yp6PuDPvqCx+gLUOV19EqBAsz7rNWmpXASaiDPqnVDsuADxVWJ8yHEByDd1LgJNe1d4%20zAT/YscFlRgfco5ga7LpLwWaTZk0kk85BZpcci4zaDoSIIHKEcDu1yK8NJtvvrkuL7Y5wfJfLFmX%20zt/IwNd6Gxm0mtNPP90/F604g7/Jkyf7fq4HMDp++eWXG9Hy1Ftgz/HSSy81Isjy08Sy53XXXde8%209NJLBsuJ4URIZR588EHTpUsXs9pqq6lf1D8ZnOsu2pdccolp1qyZBsHy6IsuukiPb7755qjbGtIP%20rOAuu+wyNTmAYxH4mTPOOMOIxqwRAaCZNm0avNUdfvjhap7AnttNh4ppB1jeJFqTNiojQlXTv39/%208+uvv5r77rtP/UWzVH9Fq8APd/fdd+sxlqvncyLENDLgNbh/9dVX94NttdVWRoTpRgSp5ssvv/T9%20G/mAfUEj1z7LTgIkQAK5BJKOC8o9PuS4ILe+sjhLOi5AHso5PuQcIYtaZ5wkkIwABZrJeDE0CZBA%20ygQ++ugjjXHDDTdsErP1s2EQQL7cGllynhNWlh4XtVMxbBlCWBZ0rVu3NrKcXW1m/vzzz3oJg1YI%20VmGfBw52niBcKyTIQjgIsnAfhJ6yrN3/k2XouKyCXD3gP4M6Rr2utdZaOTRk+bbapoRnsB1AiB10%20aANwxexYbdtZML4ePXro6ccff6y/shzeiJkEFXDCfircPffcY2Q5vLH1qZ6hf2gDcEOHDvXr37aF%20J554QttHsFyh2xvq1HKIqg/rZ8MADPuChmoeLCwJkECDEUB/n2RcUO53AscF2TdI+863Y4BgitbP%20hrHXyj0+5BzBkucvCVSGwN8qQ5VJm6mSAAmQgBFbS0ohLKSEJzQl4aApZ11UOHst6W++uCBEg7OC%20K1lWZI444ggDI+bHHHOMgWYewkCzr5DDRkUIt8oqq0QGCwtTIwM1iCfaAbRYoTUbdpVoB7YNyNIp%20zQ7yhQ2jTjvtNIPNAFCnsjRdN6SyYcP5xrndrAqbXUEgGuWshnDUtf9n7zzArSaaPr4UsaBUGypY%20UcEOiooFC6Kvil1p9t4VsVdsWFA/u6jYe0VF7A0VsYCoiIgiYsOCSBFFBc03/3ndvDm5yTmbc5N7%20T/nP89x7ks3uZveXZJNMZmeqKY1jQTUdbfaVBEiABPITKLXnArTW3u/xfIgPqXwuyH8Ma7s16XMB%209hf3bF9MW6LqsueAfT7kO0IxZFmGBNIjQIVmeixZEwmQQBEEoOiBWEu2YBXjx4/XVfGxE0xObfmr%20r74ysMK01n2oGBZ++NoLJRqirUMwTbx3795m6NChRgKgmCeeeEKt8mCdl08QgVv8SWn+4EOR+Oo0%20mIps689XR7Vsw3kwevRo8/XXX2sU8GC/g+fBmDFjgptSWUb9OL5BmThxoq5K8CE/GRa5cHeAaeeT%20Jk3SdPGl6m+PWsA5ANlrr710+nwwz9SpU9USOJ/bgmD+Sl/mWFDpR5j9IwESIAF3Aq7PBe41uud0%20fT7kc4E702Jy1udzAdrr8nzId4RijizLkEB6BGqawqRXN2siARIgASUgwV1iScBfYfPmzY0Ec/GV%20RMiMr98XX3yxluvevXts+dpsgPXc4MGDc6qAX0sJdGLslGO70fpKOuyww4wEP4idbh7sK6YjQXkJ%20v5xBkYjpOrVagiUFkyt6OcglqqP2GMMCMigjRoxQS0gJrGOWW2654KbUlqGoDvrelMBNZsiQIVp/%208DyAi4LtttvOPPXUU0aCGKkrAfhRDUuwr507dzYSzdzcdtttet7YvPiyv9lmm+l5Zi2B7bZK/g2y%20CfeTY0GYCNdJgARIoLIJ5Lsn1OdzgevzIZ8Lan9+5jsH6vO5AD1zfT7kO0LtzwPWQALFEqCFZrHk%20WI4ESKAgAShyIFDo4Ssnpm3br622cMuWLc3ZZ59tTjnlFLPJJpuoM2+k3XfffWbs2LGq+LMBX2yZ%20NH8vvPBC9WUJ5dKnn35qbrnlFoPgQGHFGtoGvzywIoRlJoK6BCWqryeeeKK54YYbjETqNh999JHp%201KmTgeUfpq7bqUrBOip1GWxwLDE1ywbcCfcVU/nx4HjnnXeqclGi4xn4r7zxxhs1OBAUzwgSlIVA%20gY3je9BBB6llLiwwYTGMNoR9euKhFb4vcT4j2FNYovqK448/BAVCeTy8I8jRtGnTzNFHH51jIRyu%20r1LWo64PjgXVNxZUyvnMfpAACdSOQNQ9IVxjfT4XoC2uz4d8LggfOff1qGemYOn6fkdwfT7kO0Lw%20qHGZBOqYgGv4eGmWF/xzLcd8lUfgtddeq7xOsUeJCHz33XeeRCYvWEYs3Txx2u2Jb0QdP2T6tZYR%20x+2eTOXNKS8WbJ5Y4PnjjEzh8EQB5smUcD+fRLD0unTp4q/bBVFGejJF3K46/bZp08aT6ITegAED%20PJkO7u939dVX9+LO8csvv1zziWK2xj7i+irTljyx1PQZiDWqJwpaT6Km16ij3BLiOIX7IVav3pJL%20LqnsJJq9bpbopbqObVZwXomi2BOfkjnHQ3xW2izeFVdcodueeeYZPw0LL774oqbjGLnKzTffrGVE%202ehJICh/nziXxBLXmzdvXo2qxJ+TJw/gnvhQ8uRBt8b2qL4ik1jleqII9/chlp3ewIEDPbHOrFFH%20OSWAgbhhKNjkuOuDY0F1jQUFTxRmKFsCMnPBGzduXNm2nw1PhwCe83CfLCRR94Rinwuwr/p8PuRz%20Qe7RlhkonvgYz02MWYt6Zir2uaC+nw/5jpB7kN977z0P1zmlOgmIUYj/zgMd4vDhwzMD0QA1u+hQ%20w5YxjsVcqmaeMiMwcuTIGtNxy6wLbG4tCcCyDFNm27dvX8uaahb/8ccfzZw5czSCcVSAmJolap+C%20oENTpkwxouTM69fyuOOOM5guLi9tJmqqcb6WwLE59gF/oNaheL785bAtq7Fg/vz5ap2J42GtOOqC%20B/x34lzAeQ0r3Sj54YcfTNu2bdVCF75UkwquHdw/l19++aRFSzL/9OnTDf7gEiBt4ViQNtHs6stq%20LMiuxaw5bQKzZs0y8Auc9N6YdjtYX/0SwCwWuFpJO9hdfT0XuDwf8rkg95wDM/ibx4yctKU+ngvQ%20B5fnQ74j5B5t+LwXwxGNQ5C7hWvVQKBnz546G832VRSaOvPNrqf5yynnadJkXSRAArUmsMwyyxj8%20FSOYGiIWnAWL4iYrFoN+PgQAEgs9fz28gCnC33zzjZEvyfqAVswLG4IC4cZOKUwACt/asDrzzDPV%20J2u+PfXr18/30WrzwRdWnCBYFJScl1xyifpFPfzww+Oy5k3Pyg9o3p2W6UaOBWV64NhsEiABEkiZ%20QG2fC7J4PuRzQcoH2aG62jwXoPosng/5juBw4JiFBDIkQIVmhnBZNQmQQN0SaNWqlSqyClmQN2vW%20zLlhs2fPNiuttJJa7sFCAD6VKKVNAIGbwj5Owy1edtllw0l510899VQj0+HUGrFr164a5T5vAW6s%20VwIcC+oVP3dOAiRAAiVFIIt7Ap8LSuoQOzUm7edDviM4YWcmEsiUABWameJl5SRAAnVJQHx1Giib%200hRYViJaOZSkvXv3Nttvv32a1bOuDAgg2Ew44Extd4MpdAjohOnoZ511Vm2rY/mMCXAsyBgwqycB%20EiCBMiKQxT2BzwVldAL829S0nw/5jlB+5wBbXHkEqNCsvGPKHpEACaRIYJFFFjGPPvpoijWyqnIk%200LdvX4M/SvUS4FhQvceePScBEiCBMAE+F4SJVN86nwuq75izx6VHoGHpNYktIgESIAESIAESIAES%20IAESIAESIAESIAESIAESIIFoAlRoRnNhKgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQAkSoEKz%20BA8Km0QCJEACJEACJEACJEACJEACJEACJEACJEACJBBNgArNaC5MJQESIAESIAESIAESIAESIAES%20IAESIAESIAESKEECVGiW4EFhk0iABEiABEiABEiABEiABEiABEiABEiABEiABKIJUKEZzYWpJEAC%20JEACJEACJEACJEACJEACJEACJEACJEACJUiACs0SPChsEgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQ%20AAmQQDQBKjSjuTCVBEiABEiABEiABEiABEiABEiABEiABEiABEigBAlQoVmCB4VNIgESIAESIAES%20IAESIAESIAESIAESIAESIAESiCZAhWY0F6aSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmUIAEq%20NEvwoLBJJEACJEACJEACJEACJEACJEACJEACJEACJEAC0QSo0IzmwlQSIAESIAESIAESIAESIAES%20IAESIAESIAESIIESJECFZgkeFDaJBEiABEiABEiABEiABEiABEiABEiABEiABEggmgAVmtFcmEoC%20JEACJEACJEACJEACJEACJEACJEACJEACJFCCBKjQLMGDwiaRAAmQAAmQAAmQAAmQAAmQAAmQAAmQ%20AAmQAAlEE6BCM5oLU0mABEiABEiABEiABEiABEiABEiABEiABEiABEqQABWaJXhQ2CQSIAESIAES%20IAESIAESIAESIAESIAESIAESIIFoAlRoRnNhKgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQAkS%20aFxsmx544IFii7JcmRP45JNPzLRp08q8F2x+bQjMnDnT/PHHH6ZNmza1qYZly5wAx4IyP4ApNH/O%20nDkGfx9++GEKtbGKciXAsaBcj1x67f7tt9/M9OnTzcSJE9OrlDWVHYHPPvvMTJ482TRuXPQrZtn1%20mQ3OJfDnn3+ab7/9Vs+D3C1cqyYCU6ZMMePHjzeLLLJINXWbff2XwHfffZfDYsaMGTnraa4Ufbfp%2027dvmu1gXSRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAhVC4IsvvsisJ5xynhlaVkwCJEACJEAC%20JEACJEACJEACJEACJEACJEACJJA2ASo00ybK+kiABEiABEiABEiABEiABEiABEiABEiABEiABDIj%204DzlfMUVV8xpRNeuXXPWuVI9BGbPnm2aN29ePR1mT2sQ+Ouvv8zff/9tFl100RrbmFA9BDgWVM+x%20juvp/PnzDf4WW2yxuCxMrwICHAuq4CAX6OKCBQsMfOc1bdq0QE5urmQCv/76q54DDRvSZqaSj3O+%20vuH94PfffzdLLLFEvmzcVuEE5s6dq++JjRo1qvCesntRBOBPGzE3rHTo0MEupv7bwBNJvVZWSAIk%20QAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIZEODnswygskoSIAESIAESIAESIAESIAESIAESIAES%20IAESIIFsCFChmQ1X1koCJEACJEACJEACJEACJEACJEACJEACJEACJJABASo0M4DKKkmABEiABEiA%20BEiABEiABEiABEiABEiABEiABLIh4BwUKJvds1YSqA4CM2bMMP/8849ZaqmlqqPD7GUiAgiq8sUX%20X5gvv/xSy6200kpmlVVWMQsvvHCiepiZBEiABEiABEiABEiABEiABEiABKqBgJOF5s8//6wRTBHF%201PVvr732cuZ3yCGHaL1XXHGFc5mjjz5ay5x//vnOZZJk/Pbbb80pp5xievToYdZee22z0047mQsv%20vNDMmjUrSTWxeR9++GGz+uqrm6FDh8bmCW5Imj9YNmr54osvVn6bbLJJ1OactNatW2tetKE2cscd%20d2g9LufQpEmTdFfFlIEyyGUf++23X959QPkIPsh33XXXGUT2Tip33nmn6dq1q1l66aX179NPP01a%20RVH5+/fv78QgyGncuHFF7ascCkFhiIiLxRzDJP276aablPu+++7rVGzevHkG12Lbtm0Nor/tuOOO%20+texY0fTpk0bHXN+++03p7qYiQRIgARIgARIgARIgARIgARIgASqhYCThSYCoePFO4nMnj3bOTsU%20Dah/wYIFzmWgmEAZKCrSlpdfftlAIRtUXk6YMME888wz5uqrrzZvv/22ad++fdG7/fPPPw2Ut59/%20/nlOOPu4CpPmj6snmA7W4BfsY3B7cBn58Dd37txgcuLlP/74Q+txKQhrRkgxZWx7C+3HKrfi9oF6%20oMx/5513zL333muuvfZaPf5QbrvI9OnTzVFHHaV9gHJ0ySWXNA0bOn1DcKk+b56///7bmbWtCNdh%20pcoll1xizjvvPLP//vubu+66K7NuWu4u4x/y9urVywwfPlzbAwUmlJqTJ082X3/9tY4N5557rhkz%20Zox54oknTIMGDTJrNysmARIgARIgARIgARIgARIgARIggXIi4KRdgSJmzpw5Nf5WXXVV7esZZ5xR%20Y9tTTz1VThz8tkK5deihh6qib8MNNzSvvvqq+eijjwwUIrBU/OWXX8yBBx7o50+yAMXkiy++aLp3%20727ee++9gkWT5i9YYYlkaNGiRY3zJXx+rbHGGjmtLabMZZddlnc/YcVWeB+w0sXxwrFfYoklVNG0%20yy67qIIzp3ExK48++qgqM1deeWXz448/mk8++UStcmOyp5oMhXmYadAaOLwN6y7Wuqk2ssoru+22%2021SZCUUlLDu/+eYbg48pX331lcEHFFihQzCW3n777VVOi90nARIgARIgARIgARIgARIgARIggf8R%20cLLQxAs3FDphadSokSbBz1vU9nD+cliHtdTUqVNNy5YtVbnQrFkzbfY666yj01Vh5QWLPVizYbqu%20q+yxxx5m2LBhrtlN0vzOFZdIxmLOl6Rlijkvg/vA8vLLL68KaFjsYjowrGoPP/xwM3bsWNO4cf7L%20x1o8brDBBnVuXdekSRODv6AEz9dgP4N5uFx3BF577TXd2fbbb2+OPPLInB1jyvkNN9ygSnDkg2Id%20rjkoJEACJEACJEACJEACJEACJEACJEACxjhZaBYD6tdffzXXXHONKoPWXHNNDXCx8cYbm7POOstg%20Km6c4MX94IMPNuuvv75Zb731zGGHHaYWSnH5w+mYRnzVVVeZ3Xff3ay22mqqhLr88svV6imcN2r9%20ww8/1OTddtvNWGWmzWf9gmKqKKz3kgj8OkIpav+aN2+et3jS/Hkrq4ON3333nYHFmeVXB7us013g%20XLrooot0n7DYzWeB/P7775sDDjjAwP8nBFOGsT5gwABdt//effddc+KJJ5ott9xSz1Wcc9hHlBuA%20Cy64QOuAsh2BY7COcjfffLOtrla/+eqHYg3th7VyWHAdYNsRRxzhb4KFIdLQF0zbv/TSS9UHLSy6%20YZ0Mi9co9xIYM7DNXrudO3c2/fr1M6NGjfLrDi7gw8JBBx1kunTpYlZccUWz1lpr6YeA4LHBeIK2%202I8Jb775pq6ffPLJwar0GB1zzDEGYxSuUVhHPv744zl5givYByy5MUbB/QTGhldeeSWYpeAylOOQ%20oKI5XAhT5FdYYQWD6yssSce6uDZbJnCnYQX7gyX6CSecYJNyfq+//nrl+Nxzz+Wku7aprs4R1/ag%20E7CO7d27tx5/BGSCxTJ80drjlNNRrpAACZAACZAACZAACZAACZAACdQvAfGPWbRIUBtPWu8NHDgw%20p46ZM2d6EkhHt2F7+E8UnJ74Y/TLyEuk5hGFhyc+BmvkR3lR/HiiBPHLiLWS5hMFqZ8mih5PlCCR%205cU/nScBWfy8cQvygu793//9nydKlBpZRLGjdbdr167GtqQJe++9t9YlylanoknzF6oUxwxcZWp3%20oazeoosuqnlFYRmb9/nnn9c8gwYNis1z4403ah6Z2h2bJ7yhmDISgEf3IwqacHWR6677EEW2J8ol%20rVuUdZF1IfHuu+/WPOHzXpRufhlwEgvP2HyirPPzYkGUdpr3ySef9GQKu19u8ODBOfnyrdx///1+%20uXC+fPWLBaGWGzJkSLiYN378eN22+OKL+9tGjx6taRgDtttuO3+fQR4ydd/PjwWZYq3nYjBPcFkC%20cuXkv/XWWyPrtWVker3ml48qkfmWW245v74rr7zSW2ihhSLznXTSSX4+LGAMOvbYYyPzYt+i+NZt%20O++8c065qBVRAmtesST2xEdrVJbYtCRjXTFttsdw2WWXjWzDnnvuqW0X1wb+9iRtsvVneY4kaQ/6%20Yc+d8K98fPLkI4bfTy6QAAmQAAmQAAmQAAmQAAmQAAnUP4FMLDRFWWM+/vhjs8wyyxhEeYaFC4Kr%20iOJIp+ki0nOU1dUXX3xh4MfwnnvuUYtKWLDZSNSwHhJFkbxrxgsssTAVGFHJX3rpJfVbCKsyWHp9%20//33ZptttjHwS5lPMP0TVnOITA2BBRqCAGGquSg3dOowop9TiieAqM3wIRr3Bz+mYSmmDAKrxO1j%20ypQp4V0UXEdAH+vbM5/VFqwQRcGrU9NR6eabb67rOK8hTz/9tDnzzDPVSvE///mPwXk+bdo089BD%20DxlRIOm5LwqjyKA+mHYsihqz7bbbmvPPP9/ssMMOWmda/9KsH2MArj+0E1HrYbkKi0oIrAU/+OAD%20XZZh0PTp00fzIHjSfffdp32EdSVcL0DOOecc33cpAu4g2BIEVoSwjIRvW1jObrbZZpoOa2EILO5w%20LOSDgK7bYyPKXV1HWVjOIggV9oGAPDg3YF2KKfuw9oY1ohWMQXYdFpqwvoXVLIJGwdcwyrsKWMA6%20E2MSoqLDChgWkfC9ivMhnyQZ69Jsc1ptsvVkdY6gfldGsOJE8CUILI1xfeEcwz0ElppYxvlAIQES%20IAESIAESIAESIAESIAESKCECtdGpxllobrTRRmrtAiuqsMg0Pt0GK0gr1kJTfHV648aNs8n+r0w7%201TIyDdu30gxbaIoSQPOIQsSTKe1+WSxIwBMPVpWC3RNlSc62QisyjVXLoSz+ZKpqoSJO25NaXCbN%20X6gR9WmhaVnG/Yryy2++tZ6My2vTg2WshabdFvUrCrQa+3CxHJUpwHoeyHRvv3zcgrX6gjVbUGCh%20jDaJcs0TRVpwkycKMQ8We9gu06/9bdaCEukSbd1PT7LgYqEZVX+xFpqo6+KLL85pokxB98AZ22DJ%20ChFFrq7DOlsUXDn5xQ+pbxV76qmn6rYRI0ZofljLhsVaCsOqLiiiVNUyOH5BsZbkYStz5LHWnRjn%20ILDQxRiEtmNMCosEffKtbl0sNFFe/GN6Mm1d60S9wT+MPaJo8+RjUM6ukox1xbbZWlC6WmgmaRM6%20Y+tHf7M4R5K0B8fNcpcPYjmsn3nmGa9Vq1Zep06dctK5QgIkQAIkQAIkQAIkQAIkQAIkUL8EMrHQ%20fOSRR9RCs2/fvvKe+F+BFcyzzz6rQS6QAouosMBaDb4zw3L22WdrEiyhYMUZJbAEg8CyTaa/anRp%20WPrhT6aTGviigzzwwAP66/oPfg1h5QVfeRCZnqpWPDbgixw+g6AdUX/5rPhc91+J+RBMCoFy4v4W%20WWSRGt0upgx8D8btAz5Ki5H58+drMQSNKkZgKQwLZYhMo64RLAh+JmF1CInyyQhr4+OOO063Z/Ev%207fqtJaVtK45tt27ddNX60oXvQgiuf/jBDIq4OzAvvPCCga9Gy2XrrbfW8eWNN94IZlU/kzZyfdT4%20kpNZVrB/WAhC4KvXjhf2F/uDleZnn32mlt+IQo4xCAJr7bB06NBB/X+G0/OtgwUsVd966y21Ase6%209amJSOfwbYpzFdaqVpKMdVm02bYj+JukTcFyWM7iHEnSHlhdwzIagvuHuCtQi36s45ycMWOGHn+s%20U0iABEiABEiABEiABEiABEiABEqDQP4wzUW2EQE6oLhBwBKxxDF4MYdyzyqD4qoVy87ITQgqBCWl%20+N3UesRiqkY+7AMifv70r0aGfxMwDTmJBKcaPvzwwzo19pZbbjFbbbWVLkNRCwVLlCCwCAKqVJpA%20mXvGGWfkdAtBPiCIEv/DDz/kbAMHO1UbGxBhG9OPk0gxZRD4JS6oSZJ9B/Pa86dYhSimXkMwfT1K%20eY9tUCpCoEgLi1j+hZNSXU+zfih9oxS/Njo8PgZA7DTtDTfcMLIvUBTizwqUnIgCjqnkCDyGc2ni%20xIl5g43ZssFfsczzVxHNPp/guNtgTVCu2w8c4TIYw/BBJ6lsuummBn8QBEzCuPnggw/qGIpxD4o2%20tBdK+iRjnWWbRZuDfUzSpmC5rM6RJO3BtXjZZZdppHkorKHchmC6OdyUIDAVxnsKCZAACZAACZAA%20CZAACZAACZBA6RDIRKEJX4F4KYRvOJlGbqCAhK8/+LaEwstaRYUxQFERJ7CyhMj08cgseOmHwAcn%20/uIk3z5QBvVDoYAo5FACBGWfffbR9sNfHqxN4fcPL8PwkRglYWuzqDz1lWY5SACnvE3AMbR+Ry0P%20WLDJtOfIclDE4C8oUJIFFZrBbeW0jIjdVlFSrEITdUBw3sjU8sjuQ3kLQdTvsLRt2zaclOp60vqt%20UjKqEXH9C+eF/0uI7Xd4e3gdXCTYkO9TE9c7FJw4z3DdBqN1h8sG1+2YgbRCxxPXgD12uA7stRCs%20D8vWujKcHl6Hn0aZOq/1hC0UofDdYost9K9nz55qJYg+wwocvjZtu13GujTbHOxD+LgnaVOwnqzO%20kaTtgQU//K9ibJdp5qokhy9V/MFiE/5O4ZcV9zMKCZAACZAACZAACZAACZAACZBA/RNIXaEJKyYE%20FoE1Jl4SxY+gQaAPK7CkilNoxk0nx8u8tY6SCM+2qpxfWHEiQAem42KaZrGCemBdCqUslAdhsUpK%20BCCBQNEanvoaLlOK69bK9aefflK2cUpgHBM7fbd9+/baFSiNPvzww5xuYYongimBP4KlBAWWTpUg%20mM5sz0MbfCZpv+z5C6U5Ak5FKRCtVR2CxITFVekXLue6nrT+QsFrXPYLZSKmXVvr13AZBHbCtS2R%20yc2uu+6q17dEgdcgPAh4g0BeUBBDcF66KjRxrUNQFtaw9qOJJkb8s64CYJUNK2Q7TTmY1TXYFIJc%20WdcB+Nhjz4tgXVjGtjZt2uiYJBHldXOSsS7NNgfbFj7uSdoUrMd1Oek5Ukx74O4Bwd/wh+ODoECD%20Bw/WAHZ33HGH3s+2oqWm6yFjPhIgARIgARIgARIgARIgARLIlMB/tQAp7gKKBygzoSTAdOugMlMC%20VGgk4rjdYaqmtawJ5oHfS1gEwSrKKuKC27G87rrratKTTz7pK+CCeU477TSDF1b85hOrREKk5ShB%20RGoIrE3LWawyB32wUZuj+gPrJAgskyxjHAcsB//slGAoX4LpWIa7gHIXKNwQmRyyyy67mDj3CIX6%20iXPQWvFJ0Kwa2aEss34g11lnnRrb6yPBHj98jAhL0LdjeJvruj0XJZBLDbcUuO5hHQe3BdanqLUA%20Rjp8HFplJvaXxJUBlIhQ4EJhj6jrYYEbBVgW45h99913OgW5adOmms1GUQ+WwbGz0dOD6VHLuF5s%20XfYai8qH8VCCAukmXEsQ++sy1uFjgt1PkjbbY459W1+nunP59+OPP9YYx5O0ydaT5DfpOZKkPU8/%20/bS6NJDAa36TwAzKc1jiN2vWTNPDH3H8zFwgARIgARIgARIgARIgARIgARKocwKpKzStlROUBMGg%20OLB4OfLII3UKH3qJacthgfUbXiqDU21hnWX9NR5wwAFGIs6Gi+k6rEJhZQjLyeOPP95AuWBl5MiR%20aikK6ymJVmuTI38l8rSmQ1EDH31WoIy96qqrzLBhwzRp2223tZtK4leiw6uiDco2BFEpJFDU2OAs%20EmXY3HTTTTmKYBw/iTBurrvuOq1qr732qgjFZCEuOM72D+cozqdzzjlHp/9iej6mA4NXsYLrY8CA%20AVoc1l8S4duvCr5JYd0KC03s55RTTvG31edCu3btdPf4sBD0jwolYD5luGub4Z4CwXdg9YdlWK9C%20MF0aPjLtNH8E6ILYMSbsY/TNN9/0P1iExxfrtzPYfihC+/fvr3XC1yqsPq3gWGAcwT7QNvjYxC/S%20IBKBXt1P2PyYkg5fi8H67baoX3wUgMsKyKBBg9TqNDjuIR2KRFx3+ECE/PDnCEky1hXbZlgO4yMG%20jgU+TFkrbYzRBx98sLFB0bRBCdtkyyT5TXqOJGEEn8+wZMXYHlZsQ5FtXW6U+0esJLyZlwRIgARI%20gARIgARIgARIgARKnoBYQBUtYi2JqB7ewIED/TrEB6UnSkdNl4jGnkyZ9GSanifBHzRtySWX1N+l%20l17aE2WFlpMo4pqGuvAn1jHelltu6YmVjSdKB00ThYInFlP+fuSFVdPPOussP02CEPn5W7du7YkC%20wBMrLL9urIui088ftSCKEE/88fllJEq2t+OOO3qi1PHTxHLHkxf8qOLOaaK41fouv/xypzKF8suL%20uN8+CVrkVKf48fPE+sgvJ1NoPQlw5Il/Qg+87fFYZpllPJmanrdOUf5qflHOxOYTBanmEcVzbJ7w%20hmLK4NxC22Xqcbi6yHW7D9vfuF9RaHhjx46NrCMqUdwtaDskoEvOZlFceRJURrdhX2Kt54ki3cM5%20a/ctbhNyynTp0kW3iQI0Jz3JilgP+vWHy+WrX6xTPVFuaVlRrHni39EDC7RVLOf0Vyz6/CrFglLT%20cD5FCXigLPhYkWm+moZ0jBEYM1Cn5SHuK2xWTwJ1+emimPdEie+3x44vKNe1a1dPIlRrOZma7pfB%20OQ/+EIxX4I/86JtYxerYI74dNU0UoZ5EWNe8+Cf+Pj1xO+HXhf3jmrHXkVjf6jbx5+mXiVsQha23%208cYb+3WJtagnrgw8Udxq27FvtAtjoPh2zKkmyVhXbJt33313v20YD9BPXLtoj1h+6rbgMUzSpqzP%20EcBybQ/G8h49evh9xX1njz320HPQnge4J4gSN+cYcIUESIAESIAESIAESIAESIAESKD+CGAqd9Fi%20X+yDCk1UJhaRHl70rTICv1BuyJRHT6yoPPuiLtZoum+r0EQ9hx9+uGdfIlFOgteowkKmOea0U6w9%20tf7wvl9++WVVOFhFKOpAfeKvzhPropw64lbEEs879thjPShkg32Q6fOeWNV5UETUVgopKMP1F8of%20VGjefvvt4eKx62KBpMztMQn2FwoeCVjiybTT2PJ2A7ijbD4FrVUcZq3QFF+L2haxLLPNy/tr2xXs%20O5ahUJPI2x6UaVC+Q9mdROIUmqgDdYl1oCrv7H6hNMR1I1OJa+wGyjnkq41CU1w6+OdzeAeF6hef%20sqrMsm0Vyz9PfFfqRwa0O3hMrbJKInKHd6PrvXr10naEFc4PP/xwzgcI7AsfN84///yca04sFr0j%20jjjCQxtse8Rq05Pp555YeeqvTRc/pbpPXLNQFFqFI84RK2I9rteA+Ib160N5KLaCykybHwppnBPB%20/BgrxILcu/LKK7UOF4Um6pMp5arYFVcNOfvG/sEVHxfEWtzuOuc3yVhXTJvF2lQ/5liW+MUxvfPO%20Oz2xMtb2ho+ha5uyPkcsKNf2QLGNsQ7nW7C/OK44X8P3H1s/f0mABEiABEiABEiABEiABEiABOqH%20QAPsVl7gUhdUO3XqVPW3Bl91YuXn7wN+2TCVDwF2RJHmp9sFTGeEvz5RRKpvM0y3TCqY4o464AsO%20+0ddSQXTLOFHDz7jEJRClLJJqyib/Jiii+OFafmYZgpfovC/Jy/0ZdOHcm0oggMhEBX8KuJ8LVWx%2014NYPRr49yzmmnLpG6Y1T5o0yYilrcF0YPk4EVlMlFB6vmI72Nmp6Bh74O8QQYRQRxLBNYBAWbje%20C5XFftBOXC/w8Rg1lrnuG24OEBQJ1x9cG6Dt8N0ZHDfj6koy1kW1GW4DEKAIUeKHDx9eYzcYrzH1%20XpSZxrofqJEplJCkTaGiTquu54itzLU9GAe/+eYbne4P9ybor/V5a+viLwmQAAmQAAmQAAmQAAmQ%20AAmQQP0TyEyhWf9dYwtIgARIgAQKESik0CxUnttJgARIgARIgARIgARIgARIgARIoK4JRJs+1XUr%20uD8SIAESIAESIAESIAESIAESIAESIAESIAESIAEScCBAhaYDJGYhARIgARIgARIgARIgARIgARIg%20ARIgARIgARIoDQKccl4ax4GtIAESIIF6ITB58mQzbtw49dspUdbrpQ3cKQmQAAmQAAmQAAmQAAmQ%20AAmQAAkkIUCFZhJazEsCJEACJEACJEACJEACJEACJEACJEACJEACJFCvBGqGGI9pDqLgBqVr167B%20VS5XEYHZs2eb5s2bV1GP2dUwgb/++ssgMveiiy4a3sT1KiLAsaCKDnZMV+fPn2/wx2jwMYCqJJlj%20QZUc6DzdXLBggfnjjz/M4osvnicXN1U6gTlz5ug50LAhvZpV+rGO6x/eD37//XezxBJLxGVhehUQ%20mDt3rr4nNmrUqAp6yy6GCUycONHMnDnTTz7ooINMp06d/PU0F5wtNBs0aJDmflkXCZAACZAACZAA%20CZAACZAACZAACZAACZAACZBAhRI455xzzAUXXJBJ7/j5LBOsrJQESIAESIAESIAESIAESIAESIAE%20SIAESIAESCALAlRoZkGVdZIACZAACZAACZAACZAACZAACZAACZAACZAACWRCwNmHZnjvffr0CSdx%20vUoI/PTTT2bppZeukt6ym1EE4BsHPnLoHyeKTvWkcSyonmMd11P4zPvzzz/pVzkOUJWkcyyokgOd%20p5vwrf3bb7+Zli1b5snFTZVO4Oeff9ZzgH7zKv1Ix/cP/nThV7l169bxmbil4gnMmDFDnw0bNy5a%203VTxjCq5gyNHjjTTpk3zu5jleFD0GXb//ff7DeRCdRHACdqtW7fq6jR7m0MAAxReXNq3b5+TzpXq%20IsCxoLqOd1Rvp0+fbvDXsWPHqM1MqxICHAuq5EDn6easWbPM1KlTzfrrr58nFzdVOoHRo0ebzp07%20myZNmlR6V9m/GAIwepgwYYLZaKONYnIwuRoIjBkzxnTo0ME0bdq0GrrLPoYI9OzZM0ehueqqq4Zy%20pLfKKefpsWRNJEACJEACJEACJEACJEACJEACJEACJEACJEACGROgQjNjwKyeBEiABEiABEiABEiA%20BEiABEiABEiABEiABEggPQJUaKbHkjWRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlkTIAKzYwB%20s3oSIAESIAESIAESIAESIAESIAESIAESIAESIIH0CFChmR5L1kQCJEACJEACJEACJEACJEACJEAC%20JEACJEACJJAxASo0MwbM6kmABEiABEiABEiABEiABEiABEiABEiABEiABNIjQIVmeixZEwmQAAmQ%20AAmQAAmQAAmQAAmQAAmQAAmQAAmQQMYEqNDMGDCrJwESIAESIAESIAESIAESIAESIAESIAESIAES%20SI8AFZrpsWRNJEACJEACJEACJEACJEACJEACJEACJEACJEACGROgQjNjwKyeBEiABEiABEiABEiA%20BEiABEiABEiABEiABEggPQJUaKbHkjWRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlkTKBxlvW/%20+OKL5vXXX6+xi4YNG5qmTZuadu3amR49ephWrVrVyMOE8iawYMECc8EFFxjP8wp25LzzzjONG9c8%20FSdNmmReeeUV06tXL54jBSmWdoZffvnFvPvuu+abb74xbdu2NRtssIFZZpllYhv9ySefmI8//tjg%20POrYsaNZZ511TKNGjWLzc0PpEqjNWDBr1iwzbtw4M2XKFLPSSiuZzp07mxYtWpRuZ9myWAJxzwPB%20Ag0aNDDnnntuzv2AY0GQUOUs//jjj+aDDz4w3333nWnfvr1Zf/31zRJLLJG3g3wmyIun7Dbi3oD7%20/Pjx4/WdYO211zarr756ZD/++ecfg+P/4YcfGowT9rkgMjMTy4JAsfcE27l7773XLL300voeadP4%20W14E4p4PcY0vtNBC+u7XqVMns+mmm+Z0rLbnTk5lXClJAt9//7154oknzEYbbWQ23HDD2DbyuSAW%20TXVtEIWTkwgVaKb8P5dC/fv39/MHywaXW7Zs6Ymiw6W6GnkGDx7s7bnnnp48DNXYxoTsCLz22msF%20K589e3bBY2/Pg99//z2yPlFkah1vvPFG5HYm1h8BeQn1PvvsM6cGXH311Z68qOacD02aNPHOPvvs%20GuWnTZvmyUeOnLw4T+Rm5slNq0Z+JtQvgazGAnl59a666ipv4YUXzjkXmjVr5uF8opQOgZ9++smb%20MGFCwQa5PA/gWse9A8KxoCDSksrgMhagwX/88Yd3+umne/IRM+falg9c3tNPP523T3wmyIun3jfO%20nDnTkw9QTu145513vLXWWivnHMD1369fP08+ZOXUMXnyZG/jjTeukXerrbby5GNXTl6u1D+Bt956%20y/vzzz8LNiTpPSFYoXzo0vNh2223DSZzuUQI/Pbbb07v9q7vivvvv7/3999/+72rzbnjV8KFzAm8%2099573ty5cxPvB+8A3bt312t84MCBecvzuSAvnnrduPPOO+fct4cPH55Ze2qaxckTRdqyzTbbmGOP%20Pdav9q+//jJfffWVufXWW408qJhdd91Vv9Lji0wSGT16tHn88cfNMccck6QY89Yxgdtuu82I4jpy%20r7DMXHTRRXO2/frrr+aKK64wDz30UE46V8qPAL6unXjiiWpdefjhh6uF3auvvmqGDRtmLrroIrOS%20WN0dcsghfscOOOAAgy+vyy+/vF7Xovg0Q4cONWPGjDF77LGHef/99w3SKOVJwHUsuPnmm81JJ52k%20X+hPOOEEIy++RhQm5oEHHtDzqU2bNmafffYpTwhV3urw80AYx2KLLaZJHAvCZCpjXT5k6f29efPm%205rjjjjPLLbeceeaZZ4woM80uu+xiRDlu1lxzzZzO8pkgB0fZr8AqF7OzRJmhv3gHmD59urnuuuvM%20fffdpzN78AsRxZjBmPH111/r88O+++5r8A5x/fXX6z0BzwVvv/22kY9fZc+lWjvgek+wfPA82Ldv%20X7vK3wohEHw+FK2HmTNnjl7jd911l7n77rtN165dzRFHHJHT26TnTk5hrpQsgWuvvda89NJLedvH%2054K8eKpvo6uqMOtAeQAAQABJREFUVMjkaFldytkvKKLMjMwOCwyZfq71ytSjyDz5EuVBRsvKtOR8%202bgtZQKiWChYY/Cr288//1wwPzLIS40nU4u9RRZZJOdco4WmE746zeRqoSlKJz2WZ511Vk77jj/+%20eE2HhYUV+UChaaLg9uSDh032YPUhL726TZTcfjoX6p9AFmPB/PnzPVhr4Z4jL7U5nZTpyJq++eab%2056Rzpf4IJLXQjHseCPaAY0GQRnksu4wF4nLEE9chnny89mC5EZTDDjtMr+3evXv7yXwm8FGUxYKr%20haZ83NRjLQpsD5Y4VmCJifs/3gtggQcRJafmXW+99bzgbB5xWeAttdRSuk1efG0V/C0BAkktNF3u%20CeiWKL69FVZYQY+5fSelhWYJHPCIJhRjoRn3rnjUUUfpMd9tt938PRXSL/gZuVCvBIqx0BQ3JKoH%20WHzxxfW4hy00+VxQr4c00c7r0kKzXoMCwYee9YcmJsnmzTffNKLo0K/3Uarl22+/XbcPGTJEf+FL%20ByJTEHUdvraCAgs/WH/B98ahhx5q7rnnHv2yG8zz5ZdfmlNPPdXITdF06dLF9OzZU+vDlyFK3RKQ%20q8SIMkOt9mChAf8plPImAD9pEPhACcrWW2+tq/IA4yc/99xzuiwvtOpf127AGCEvu7r67LPP2mT+%20ViiBqVOnGpw38LHcp0+fnF4edNBBug7fe5TKJcCxoDKPLSzsZdqgWtqEfWLBchOCWTd4FoDwmUAx%20VNw/ecnVPsFCNzgza9VVVzW4/8NfJmZxQOBDGYK8wdk88J2444476jbeDxRDxf/D+4EoOdSCG5bd%20lOogYP3qQk9AqWwCsL6HFT78aV966aWRneVzQSSWqk+skynncZShnECwEPGLZsQ/jgYMueGGG/QB%20Z7/99ssJGoIbGRSPyC/WXjo1xdb71FNP6SJMz+EoXHw06QXx2GOPaTqCiWBKCszZoeREOqan4CEI%20ihUEnkCgIrEMNHjQwtQnTG0Ui4OcByi7P/5mQwAPp/YBFXvA9DPxt5DNzlhrnRDANTly5Ei9pjCt%20zMqjjz6qi9ttt51NUof/WNlkk038NLtgHYKL306bxN8KJYCHVnzQwDEPvuyiuxirIZiuSqlcAnDy%20DuFYUFnHWGblaIcQGC4sYnmlSXihwQeNZZddVp8H+EwQJlX+6/Y8wEersMDdDARTzCEIIIr7AYJG%20hYX3gzCRyl4fMWKE30F8HEGQQErlE7DuJ+CmglLZBM455xzVzeDDJvQ+UUJdQRQVptWJQvPTTz81%208IFhZd68eeo7E2nwoYho2PhdeeWVDRQczz//vHnwwQcNfKdZgS+FGTNmGJmiqr7VxHG4WmXC394d%20d9yhLz72gfiyyy5TpSUsLqHEhJIT1pwHH3ywwQ0RClH4aIQPHjwQ4WsAFKlQrOJrMHzyICIzrER2%2033132wT+FkkAxxJfVaMED6kylShqE9MqgAD8Zj755JPqBxPW0LDKeeGFF/Q669Chg/pDtN201pz2%20hcam49d+jbd5gtu4XD4EXMYCjAkTJ06M7BSs8SH4AEYpTwLh54FgL3DvxZd5e51zLAjSKf/lVVZZ%20RTuBqNZhQbRrK1BmQaFJqUwCOA9wjeO53Fpf2Z7ChyrEKjThSy1KMI5YS27eD6IIlU+ayz2hfHrD%20lhZLIPh8CCs8+NXFOz58pq677rr6rh6um+dOmEj5rsP4BboZ6GSge3n44YfLtzNseZ0TqBOFJpSR%20cc5doaCENaYVKECg0MQXmaBCEwMdBEpJBJjBH158ICuuuKLvRB5OYqHQhAINihT7ULzBBhsYWHKu%20scYaqgC9+OKLzffff++XhzITgnwSXZcBaZRGOv+CAaHCNYpvDCo0w1AqaF18XJk999xTg/m8/PLL%20Bn9W9t57b2M/QiANUxEhUa4G7FQzBAiglC+BYscCTEE87bTT9MMYgkJdeOGF5Quhylue73lgiy22%200Ps6x4LKPEk6depkEPQJSis8ZyHwFwRW2QgeZ8UqtO06fyuLAK5zBPWEmwEs2+d0zMhBIEFIvnMA%20CnG4h8LzAF5+xfd6ZQGqst643BOqDElVdjff8+F5551nEAwyLDx3wkTKcx0B4iSSvR5jBIejkEBS%20AnWi0ERkMnHm67cNX17gOw9fVzGtG19oMSjBMgcPKXi4wdRvTC/FNjy04CEHSse99trLrydqAX40%20YQEKXzyYOh4W+OODIvOdd97RfSG6JpSbr7/+uk5xlmATmk7LzDC54tdxI8K0oSjZbLPNopKZViEE%20EJEQVtJ4icXDCj4Y4IsqLO1gmT127Fj/OoXSKk4WLFigm8JTkOPyM700CRQzFsBaE76Q8QKM8wgu%20Q2B1TylPAuHngWAvWrVqpascC4JUKmd5ySWXNGeeeaYqsgYMGKDXMmbmwDLjhx9+MDj+cCuED9aU%20yiVw+umnq2EBnvHXXnttnZmFdwJ88IRvTCgzo84BfOiAIhz3ETzn77TTTuaWW26pXFBV0jOXe0KV%20oKjqboafD+E+Du8LeP+HYQSeA4cOHZrDiOdODo6yXcH7Iazy4YrQxlYp286w4fVCoE4Umvgqf8op%20p9ToICwpoaCErwQE7IFCE9ZZCPxwySWXqJXm+eefryc4gvRAOWIttWpU9m+C9bH3xRdf+IFEovJK%20lGYDa1BYdGJfEklb/5AX/tkQRAhWQIX2F1U303IJwJl769atcxO5VvEE4P8EUwbgnxY3qS233NLv%20M6wzESgILiBwLWJqKfzaQiQ6op/PLkh0U12En1tK+RJIMhbg5fXyyy83uAfgoxb8KcJNSXiKYvnS%20qM6Wxz0PBGlwLAjSqKxluPyB5T6ua4mGrH/wkXj//febwYMHq0ITASMplUsAykp8zDzyyCNViYkZ%20WPjoDaUF3gkQGCh8DsBY4cADD1RjBzyX41yBhS+eLyjlTcDlnlDePWTrXQjEPR9irLDPf7jugx87%20eO64kC3tPDBSuPfeezUIKIycoJeBQKENgV9tpOH9L2oGn2biv6onUK9PArC26tu3rx6EoLNnKBOx%20zToCDk43L3TE8KAMgXIU5eL+MDjiQQiKVvjpgEITlpr42gPT5yuvvFIVqIX2x+0kQALRBPCyipsQ%203DwElZnIvdZaaxkEDILYaejWT+bnn3+u6cF/9kOFzRPcxuXKI4AHmF69eqk1Fx5iYIWD84nKzMo7%201lE9stc5x4IoOuWfho/J+JCFZ69vv/1WfeZCmTVlyhTtnJ2CXP49ZQ/iCCAwFJ774W4A93dY5j7y%20yCNqqYsywXMAFrx4ZsfMrf/85z8Gys2TTz6Zysw4uEwngQoigOBP+OiFmVpwSUepLAKjRo3SDiEY%20M2bi2r8DDjhA0wcNGqRpt956a2V1nL1JlUCdWGjmazFeUiGYSmgFDsO7d++uzoCh7IBfHShAEOSn%20kCDQCARKSXzpRYTzoFxzzTU63R3KFDifxRcATIHCVHP8YRkvz7AGhZk7psdzmmuQIJdJwI2ADQRl%20p4uHS1mrS+sLF9c4BO4fTj311Jzs+OAA4VTjHCwVuwIrLny1xXREuAWJiopcsZ1nx/R+DwwcCyrr%20ZEAQxqOPPlr9pCIQI6agW3n11Vc18COe8+w9wW7jb2URwLTRV155Rf1fImJt+/bt/Q4++uijuox3%20AAhcEcAVFT6OYrp5//79NZ3/SIAEqoMAAgJbo4agrqA6el/5vcRsvSg3f/jAicBx0OtAoW2DClY+%20EfawGAL1ZqFp/WJiqjlk2223zWk/vuBD4CQWig8EAwqLVTRas2RsR4AgKCYRUfmiiy7KKQLFKBzP%20DxkyRE3WYQF6zjnnaPCgYEYbdRt+HOw+gtu5TAIkUJgAlFGYOgorK1xzQb948G8L/7mwksbNDIKX%20FgisNqzVJtZhjWG/zO2yyy5IolQwgW+++cYgsi0U4vCtTGVmBR/smK5xLIgBU+bJeKaCtR0+GsO3%20shVY6eEjBgTPfJTKJgBDAVjjQLmNdwErcFEDax1YZ/bo0UOT4ZoAykzMpqIy05LiLwlUB4HJkyfr%20tY9ZO1BmwlKbUlkE+vTpo64H4X4w+AcDMwhmayF9hx12qKyOszepEqgTC034RsLX2KBgmhH8YkKg%20dYdiMSi77rqr+tCZNm2a+kwIRkK3+eyUFDgKhgYfZskbb7yx+tbZeuutDSJoQzkChQkcC7/55pta%20FPtq3Lix+uOBghMXy84776xfAH766Se9cJCxUAAi2w7+5icAnxhhS1lbAumwvoPfUkplEYAyE1bQ%208Itz1FFHaRAgXGdw+I+PC3ipwQ3LRjqH9eWBBx5o7rzzTn2ZwTWM6xSWO/DHCatq3tDK+xxxGQtw%20vPHwCl85iGAbJe3atctRiETlYVr5EuBYUL7HrlDLoZSCcgr3BIz1iFCN50P4PYeroKhnvUJ1cnt5%20Edhjjz3U4OCrr75S/9mw0oT1LnxtQ+DX3j4z2imm+B03blxkRxEtvVu3bpHbmEgCJFAeBMLPh3gO%20hELTCuJuIGgYhQRIgATCBOpEoQnfOPgLChQVsOCCZSaiHcNnQlDsyyx8WcJaw/rGDObBAzG+9iMK%20LiKX4w+CLziIYg5fnO+//7763UE6BkIoMxFNC3LCCSfo12FMYxk2bJim4R8cDuOBGw9VlNoTmDRp%20Ut5KEK0ySqGJc4RS3gRwrcHZP67xqVOn+paW9lrENRyUG2+8USPdYjqitdLEeQCrHURGp5Q3AZex%20wL60IjgULDSjZLXVVotKZloZELCKikJN5VhQiFB5bofvQ8ill15q3n77bf2D5Q0+dt199901ngWD%20veQzQZBG+S4jSCQUlHgGf+GFFzQoKHoD44aBAwf6Sm0oOTHbCvLRRx/pb9Q/fAillC8B13tCsIcc%20C4I0KmM56vkQbknwoQv3je23375GR4s5d2pUwoSSJGCvcfsb18hC2+PKMb2yCDQQKynPpUvhqdeO%20xVyqjs0DC0n4UcP01J122ik2X74NUJZhkISSEpZgUYMffPxZB/WtWrXSKY6MpBVPFUpkfg2P51MN%20W2A5DYVT0PdVoX4jAASmE8Oy2gb9iCuDCNfwnwLLTOyD12McqfpN51hQv/xLYe+4rvGXlX9bjgWl%20cJQLtyHpWIDjivsBphNjhg1fSgozLvUcUEDiwyUUEK4Cf/dQWuKZgNZXrtRKO9/o0aMNArk0adKk%20tBvK1mVGAK7iJkyY4LuUymxHrLikCYwZM0bv7zBsoVQfARgkQodnBbMz8fE6CylZEzg4AH7yyScN%20phbWZprpoosuWvDhCg/S8L2JPwoJkEA2BGBlHWVpHbU3fHhIoiyNqoNpJEAC5U+AY0H5H8OoHuC4%20rrTSSlGbmFZFBDA7J4kCtIrQsKskQAIkQAIkQAIOBEpOofnggw8aRDlE9HNYTmLqd5RVpUPfmIUE%20SIAESIAESIAESIAESIAESIAESIAESIAESKDCCJScQhNTvzHNHAK/OMccc0yFIWd3SIAESIAESIAE%20SIAESIAESIAESIAESIAESIAEiiVQcgpNRMDce++9TYsWLfI6hy+2wyxHAiRAAiRAAiRAAiRAAiRA%20AiRAAiRAAiRAAiRQvgRKTqHZsGFD9ZtZvkjZchIgARIgARIgARIgARIgARIgARIgARIgARIggawI%20NMyqYtZLAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAmkToEIzbaKsjwRIgARIgARIgARIgARI%20gARIgARIgARIgARIIDMCVGhmhpYVkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJpE2ACs20ibI+%20EiABEiABEiABEiABEiABEiABEiABEiABEiCBzAhQoZkZWlZMAiRAAiRAAiRAAiRAAiRAAiRAAiRA%20AiRAAiSQNgEqNNMmyvpIgARIgARIgARIgARIgARIgARIgARIgARIgAQyI9C42JpHjhxZbFGWK3MC%20M2bMMDz+ZX4Qa9n8P/74w/z9999m2rRptayJxcuZAMeCcj566bT9r7/+Mn/++aeZPn16OhWylrIk%20wLGgLA9bqo2eP3++mTdvnpk9e3aq9bKy8iIwc+ZMM2rUKNOwIW1myuvIpddavB/8+uuvfFdMD2lZ%201jRr1iy9HzRuXLS6qSz7zUb/lwCeC4MyZ86c4Gqqy0WfYd26dUu1IaysfAhAmcnjXz7HK4uWzp07%201yxYsMC0aNEii+pZZ5kQ4FhQJgcqw2ZCkYm/jh07ZrgXVl3qBL799luzwgorlHoz2b4MCeDDBl5Y%20llpqqQz3wqpLncDo0aNN586dTZMmTUq9qWxfRgTwcQPKjGWXXTajPbDaciAwZswY06FDB9O0adNy%20aC7bmDKB1q1b59TYrFmznPU0V4pWaKbZCNZFAiRQXgQWX3zx8mowW0sCJEACJJAZASozM0NbNhUv%20vPDCVGaWzdFiQ0kgOwILLbQQlZnZ4WXNJEACIQKcDxACwlUSIAESIAESIAESIAESIAESIAESIAES%20IAESIIHSJUCFZukeG7aMBEiABEiABEiABEiABEiABEiABEiABEiABEggRIAKzRAQrpIACZAACZAA%20CZAACZAACZAACZAACZAACZAACZQuASo0S/fYsGUkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIh%20AlRohoBwlQRIgARIgARIgARIgARIgARIgARIgARIgARIoHQJUKFZuseGLSMBEiABEiABEiABEiAB%20EiABEiABEiABEiABEggRoEIzBISrJEACJEACJEACJEACJEACJEACJEACJEACJEACpUuACs3SPTZs%20GQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQIgAFZohIFwlARIgARIgARIgARIgARIgARIgARIg%20ARIgARIoXQJUaJbusWHLSIAESIAESIAESIAESIAESIAESIAESIAESIAEQgQah9YzW/3444/NSy+9%20ZN577z2D5ZVXXtlstNFGZvPNNzfdunXLbL+suH4ILFiwwFxwwQXG87y8Ddhyyy3NdtttZ1588UXz%20+uuv583boEEDc+6552qe2tbduHFj065dO9O+fXvTsWNH06pVq7z75kYSIIHiCHAsKI5bpZWq6zE+%20zK/Q/aNFixZ6P8A9Yc011zTITyEBEiABEsiGAO8J2XBlrSRQrgRmzZplPvjgAzNlyhTTtm1bs956%2065mll146sjtJ8gYr+P77780TTzyhOqgNN9wwuClnedKkSeaVV14xvXr1oo4gh0yJrojCyUmk+dBM%20+X9Ohf7NNHjwYE8USH7ZYD1YPvTQQ7158+YlqTIn71dffeXtueee3jnnnJOTnvUK+oX9jh8/Putd%20lVT9r732WsH2zJ49O/Z4B49///79tS78BtPjllFv2nUvssginihKvd9++61gv5iBBEjgfwQ4FvyP%20RbUu/fTTT96ECRMKdr8+x3h7P3G9f8jHVm/06NEF+8QMJEACJEACuQTeeust788//8xNjFjjPSEC%20CpNIoIIIiBGbN3fuXKce3X777V6zZs1ydAELL7ywd8kll9QonyRvsPA///zjde/eXfcxcODA4KYa%20y6LI1HxvvPFGjW1McCOw88475xzP4cOHuxUsIlfmFpqHHXaYGTp0qFo7yM3L9OzZ02ywwQbms88+%20M/IybM4//3zd/tFHH5lRo0YZWM4lFXlJMY899piZPn160qK1yi8vPObxxx83xxxzTK3qqfTCt912%20m2nZsmVkN1dbbbWc9G222cYce+yxOWnBlcUWW8z8/vvvflKxdc+fP99MnjzZfPjhh3ruwOITx3Ls%202LGmSZMmfv1cIAESSI9AsddrVAs4FkRRKf20uhrjo0jkO2d+/vlnI4pZ89xzz+lMkq5du5p7773X%209O3bN6oqppEACZAACaRAgPeEFCCyChIoYwKiNDSHHHKIzuqEReRWW21lxo0bZ2699VZzxhln6IxK%20+yyWJG8YybXXXquzhcPpwfVff/3VXHHFFeahhx4KJnO5xAkk1x4m6NA777yjykooKe+++27Tp08f%20v3SXLl0M/nDS7rTTTubdd981t9xyizn66KP9PFyoDAK77rqrad26tVNnMP179913d8qLTGnUjanu%20e++9t7pCuPTSS/1p7c6NYEYSIAEnAmlcr3E7SqNujgVxdNNLr48xPq71UeeMzBbRj5R33HGHOeGE%20E8z222/vfP+K2w/TSYAESIAEognwnhDNhakkUC0ELr74YlVmwkDs+uuv97u96qqrmtNOO81cdNFF%20/sflJHn9imQBH6xPP/10s/jiixuxGg1u0uVnn31W9/X555+bP/74o8Z2JpQ2gUyDAuHEgfTr1y9H%20mRlEAqVm0C+itb4bNGiQOf74482cOXOC2XX5pJNOMieffLIu40SHEgoCizuUgWYd8umnn+o6rCzG%20jBljTjzxRPXXKSaw6t/x66+/1nz2n+s+R44cqfXCug9y9dVX6/onn3xiq+JvGRGAH097DuIc4EBW%20RgePTSWBFAlwLEgRZplWteiii5ohQ4aY5Zdf3sBq87rrrivTnrDZJEACJEACtSXAe0JtCbI8CcQT%20EPcUOmMXOU499dScjMcdd5zB9Tdx4kQj7gVNkrzBiv766y+z7777miWWWMLXGQW3Y1lmORvM3lxp%20pZXUj/pCCy0UzsL1EiaQmUITVg5Q/EGs8jGOA8yM4ZD/xx9/VGewyAclJF4krIIzWPaGG27QFw6k%20warz/vvv183Tpk3TMigLgcISdWD/CD50zTXXmDfffNOMGDHCnHfeeaZz584GpstWXPcJh7Wo94sv%20vtCiTz31lK5jGj2lPAngHGzatKkOlva4lmdP2GoSIIHaEOBYUBt6lVEWbkeOOOII7Qy+6lNIgARI%20gASqlwDvCdV77NnzbAlMnTpV373btGmjU8uDe4MyE4GBINCxJMkbrEdirKh+6eabbzZLLbVUcJO/%20vOOOO6riFMpT/O2www7+Ni6UPoHMppzDZBfabpj2rr322nlJwK/Vuuuuq1GuYVUJ31WugmntKIOp%20Y6gDPg/EiWxOcShKV1xxRXPPPfeYTTbZRBWd8OcpzknVhBmWneEyORWEVvbff3+dhgZrUETpw9Q0%201LvCCiuEcnIVBB588EE9D8I0YEoORXNQcCzvuuuuYJK/vMcee+jXFT9BFpLUHSwXXpbAQDqQYhDD%20oLnWWmuFs3CdBEiglgSSXK8cC2oJu0SLZ3lck9adD9Eaa6yhm/mhMh8lbiMBEiCB2hFIOm5n+RyR%20rye8J+Sjw20kUBwB6GggmBUTJcstt5wmI5/V1bjktXXBuA4zd2GhCZd2Dz/8sN3E3woikJlC88sv%20v1RMcSddmCEUjhAoF5PI6quvrpp9lIGV55prrhlZ/Omnn/YVq1CkDRs2zMBvC15WoOiUSOuR5aIS%20EeAGfzBdhqDtcfuNKl9taXFBfvbbb78aCs2XXnop1mHvFlts4TO3DJPUbcvE/eLrEBSa33//fVwW%20ppMACdSCQJLrlWNBLUCXcNEsj2vSuvNhwv0AwvtBPkrcRgIkQAK1I5B03M7yOSJfT3hPyEeH20ig%20OAJ///23Foyb4g0rTQimmyfJizIIGg0jNFy7dB8EIpUrmSk0rbIvyvFqFE7rKzMuGnZUGdc0WE+G%20rUQbNWqkEbXggxORrZMoNF33y3z/JYDp/ZjOHZYoK0hY5+62227hrLreqlWrGulJ6q5ROJTwyy+/%20aIr9GhTazFUSIIFaEkhyvXIsqCXsEi2e5XFNWnc+RLwf5KPDbSRAAiSQDoGk43aWzxH5esR7Qj46%203EYCxRH4559/8hZcsGCBbm/QoIFJkheF8PED7gcR8AdGb5TKJZCZQtNaLMKvJfxgYlp5PsEUdYg1%206c+XN+m2VVZZJbIIHL9CpkyZor/8lw0BOPV1jXLeqVMnc8oppzg3JEndhSqFw2GIPS8K5ed2EiCB%20ZASSXK8cC5KxLZfcWR7XpHXnYwZfTRDeDxQD/5EACZBAJgSSjttZPkfk6yDvCfnocBsJFEfATiP/%207bffIiuwsVTgGi5J3scee0zjsfTp08dsttlm5tdff9X6beBfBApCGuqNsw6NbBATS5JAZkGBYOUG%20izr40bRBeuIIwELSRggPW1KGy+AEtNr68La49VmzZkVustajzZs3j9xuE4vZpy3L3/Ig8Pzzz5uZ%20M2caWO7GKcDLoydsJQmQQG0IcCyoDb3KKQs/bZD27dtXTqfYExIgARIggaII8J5QFDYWIoG8BOys%20SLgchM4oLNaPOfIlyTtq1Cit6oEHHjDNmjXz/w444ABNHzRokKbdeuut4V1yvQwJZKbQBIsBAwYo%20ksGDBxurPAwzgvnwwIEDNRlBX6wyyWrLw8rIjz/+uKDJcXgfo0ePNlGa/1deeUWzrrbaavqb5j7D%20beB66RLAuYEIaBD42sDARyEBEqg+AhwLqu+YR/X4kUceMW+//bZ+tT/yyCOjsjCNBEiABEigSgjw%20nlAlB5rdrHMC7dq10/gYsMSEgVtQfvjhB42tgunmHTp00OC9cGnoknejjTbSIEAIBBT8s1HTUR/S%20rd4puF8ulx+BTBWaJ554omrToXXfcsstazjXh9nvPvvsYxCwp3HjxgbacivW+XIwGhXyn3HGGTaL%20/4sTHWLNiP0N/y7A8u7kk0/OUYS+9tpr5tFHHzUo27t3b82ZZJ8oUGi//+6ePyVKAF+C3nrrLdO9%20e3fz3nvvqSn7+eefX6KtZbNIgASyIsCxICuy5VUvHMhfeumlpl+/ftpw+NZGEEEKCZAACZBA9RHg%20PaH6jjl7XLcEoP/ZYYcddKdhXQ3WEQioS5cuZpllllFdkWteTDV//PHHa/ydeeaZuq9evXrpNltf%203faae0ubQGY+NNFQ+M0cPny42Wuvvcy4cePMyiuvbDbccEOz/vrrG/jMhAUEggHBIu6OO+7I8Z+5%206667Gkz9g/UmlI+IZv7yyy8baOutDwULAyc5BEqpTTfd1MAfyw033GA36++QIUMMzI8333xz8913%2035kXXnhBI2YdfPDBZt1119U8SfaJAssuu6yWO+SQQ/TLARSyG2+8sabxX+kRuP/++421yoUCA+cS%20lN0QRKrHOdi2bdvSazhbRAIkkCoBjgWp4izbyuBXCW5GIPggCh9p1un8UUcdZTC7hEICJEACJFAd%20BHhPqI7jzF6WFoELL7xQ9UUjR440K6ywgunWrZt59913NcYJjMcuu+wyv8FJ8vqFuFDxBDJVaIIe%20lIswIT7++ONViQilovVrALPhHj16mOuvv76GnyooCTG9/KabbjKvvvqq/kEhOmLECJ0WbBVR2MdS%20Sy1lTj31VM0LJem8efOQ7AumssP6cujQoWb8+PGavuSSSxpo6c8++2w/X5J9ohBeeHDxTZw4Ua1P%20v//+e78uLvyPgH1h/F9K/FKSvKglSX5EKLRRClEOljewHMY52r9/fzV5j28Zt5AACdSWQJLrNUle%20tCtJfo4FtT2SxZdPcpySHtekdU+aNMnvSMuWLfWDKKYhYdbGtttu62/jAgmQAAmQQDYEko7bSfIn%20yYve8Z6QzTFmrSSQjwACQr/00ksGLn6g+7H+amFsdO2116qC05ZPkteWCf7CIhRif4PbgsuFtgfz%20crn+CTQQS7WaHlgj2mWnV9tNjsVsdv/366+/NhMmTFBrTVhdNmyYf9Y7IlDhBgONvbWI9CsrsAAr%20zO23315fTuAUFj4X4Fy2RYsWZqV/I5xHVVGbfUbVV2lpUOLi6wmFBEiguglwLKju44/eT58+Xf86%20duxIGCRAAiRAAlVOAHELOnfubJo0aVLlJNh9EqhuAmPGjNEZrE2bNnUGgdgpX375pep9YLCWT5Lk%20zVcPt2VDoGfPnupW0taOWds777yzXU31N3MLzXBr4fwVf64CK05MU09DMAUe090LSZr7LLQvbicB%20EiABEiABEiABEiABEiABEiABEiCBaiUAo7MNNtjAqftJ8jpVyExlSyC/eWTZdosNJwESIAESIAES%20IAESIAESIAESIAESIAESIAESqEQCFa3QhIlz8+bNNThRJR489okESIAESIAESIAESIAESIAESIAE%20SIAESIAEqo1AnU85r0vAiFYH/woUEiABEiABEiABEiABEiABEiABEiABEiABEiCByiBQ0RaalXGI%202AsSIAESIAESIAESIAESIAESIAESIAESIAESIAFLgApNS4K/JEACJEACJEACJEACJEACJEACJEAC%20JEACJEACJU+ACs2SP0RsIAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgCVAhaYlwV8SIAESIAES%20IAESIAESIAESIAESIAESIAESIIGSJ0CFZskfIjaQBEiABEiABEiABEiABEiABEiABEiABEiABEjA%20EqBC05LgLwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQMkToEKz5A8RG0gCJEACJEACJEACJEAC%20JEACJEACJEACJEACJGAJNLYLSX9HjhyZtAjzVwiBGTNmGB7/CjmY7AYJ1IIAx4JawKuQon/99ZfB%203/Tp0yukR+wGCZAACZBAsQRmzpxpRo0aZRo2pM1MsQxZjgQqgcDs2bPNnDlzTKNGjSqhO+xDQgJ4%20RwwKzoWspGiFZrdu3bJqE+stcQJQZvL4l/hBYvNIoA4IcCyoA8glvgsoMvHXsWPHEm8pm0cCJEAC%20JJA1gdGjR5vOnTubJk2aZL0r1k8CJFDCBMaMGWM6dOhgmjZtWsKtZNOyItC6deucqps1a5aznuYK%20P5+lSZN1kQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZEqACs1M8bJyEiABEiABEiABEiABEiAB%20EiABEiABEiABEiCBNAlQoZkmTdZFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQKQEqNDPFy8pJ%20gARIgARIgARIgARIgARIgARIgARIgARIgATSJECFZpo0WRcJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ%20kAAJkECmBKjQzBQvKycBEiABEiABEiABEiABEiABEiABEiABEiABEkiTABWaadJkXSRAAiRAAiRA%20AiRAAiRAAiRAAiRAAiRAAiRAApkSoEIzU7ysnARIgARIgARIgARIgARIgARIgARIgARIgARIIE0C%20VGimSZN1kQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZEqACs1M8bJyEiABEiABEiABEiABEiAB%20EiABEiABEiABEiCBNAlQoZkmTdZFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQKQEqNDPFy8pJ%20oHQJ/PLLL2b69Oml20C2jARIoE4IcCyoE8wlvZN//vnHTJ061cyfP7+k28nGkQAJkAAJZE+AzwXZ%20M+YeSIAE0iFAhWaAY79+/cwmm2xiVl99dXPrrbcGtnCxGALvvfeeeeedd4opWnJlsujLJ598Yho0%20aGCOP/74TPob12bsd4sttjBLLbWUWWWVVXTfv/32m7n44ovNxhtvbFZYYQWz2WabmQsvvND88ccf%20mbSNlVYXgbhzsRwpZNGXUhoLsjomP/30k3n99dfNjz/+mNUu6qzerPqyzz776D0BL5JZSNy5O3Dg%20QLPccsuZlVde2Vx77bW667ffftvsscceZrXVVtNnor322sugPIUESIAE0iCQ1TiaRtuS1pFFX7J+%20Lohrc9Q7AnjwnpD0rGB+EiCBuiJAhea/pEeOHGnuv/9+c9hhh5kllljCnH766WbGjBl1dRwqcj99%20+/Y1eEGrBCnHvsS1+ZJLLjFvvvmmOfjgg1VpCYucHXfc0Zx99tnmhx9+MGuttZaZOHGiOffcc832%20229vYLlDIYHaEIg7F2tTZ32VLce+xLU5PBZkyfTFF1803bp1M88880yWu6mTusu1L1HnwXfffWcu%20uugife4ZNGiQ2Xzzzc2zzz6rv8OHDzdt27Y1iy++uHn88cf1g+8LL7xQJ4y5ExIggcomUK7jaNRR%20Kce+xLU56rmA94Soo840EiCBUiHQuFQaUt/tOOOMM8waa6xhDjzwQNOkSROz//7760P+//3f/9V3%2007h/EkiVwIcffmhatGjhWyHjQQWWUz179jTDhg0zjRo1Mn///bfZYIMNNP2VV14x3bt3T7UNrIwE%20SKD+CYTHgvpvEVtQ1wQwiwLj/THHHGNOPPFE3T0s9ZGGbV26dNG0hx9+2PTq1ctccMEFpkePHnXd%20TO6PBEiABEigDghEPRfAip/3hDqAz12QAAkURYAWmoINVgijR482hxxyiCpz8NDepk0bc9ttt5k5%20c+YUBbaaCz344INm0003Nd98841a/GHZTqvGVH6sf/vtt+ayyy7TKc7HHnusefTRRzUdxyEoeKFC%20/nvvvVeTH3roIV0fN26cvoBBCd20aVO1HIHVYVD++usvc+aZZ5oNN9xQLUxWXHFFc9BBB5mvv/7a%20zwbrw6uuusqss846pnnz5ppv7bXXNrfccovmydcXZMANHlYt2AfKYyo3pm6HrRpfeukls8MOO5il%20l17atGzZ0uy+++7m888/99vhuuDCKa7NOM/BcvLkyWbu3Lm63L9/f/Prr7/q7jt37qznP1ag1MQ6%20ZN68efrr+u+aa65RK08cl9atWysTKE2D4srt999/N2jjeuutZxZbbDGz5pprGtSPhyv0xV6fYIvr%20NyywuN56661zkj/++GOz2267meWXX960a9fO7Lvvvmbs2LF+nrTPMVTs2l+/ERWyEHcuonscC0pv%20LMjqtMMHEVyzEFgD4tr96KOPjOd5uoxtuC579+5tll12Wb1vuF7T2223nTnllFPUqhDL+Fiz6qqr%20qnIu7DID9xd8uIFbDeTDuH3XXXdpu+w/tAPTqzE+LLroouqaA+uwZITE9SVYPt/4gnxx4xp4JBUX%20TnHX4a677moGDBigu8S4iuMyYcIEvSc0btzYvwcgA9zxQJLeD1AmzXtC1L0UVqNoO+7lEJf7pGaU%20fy5jcxb3hEL3Ids+/pJAJRKIG0fL7bkAxyauL9jmMr4gX9S4Vsw7AupyuSdEtRnuRjCOht8RUCfe%20E9K6J0yaNEnvscsss4w+1+PdDO+I9l0E+4O4jJFx91I8U6AvWbwjoG1pP3e4nifYN4UESCCCgDxA%20O4kUxZO2/+dU6N9M8jDtyfRWTx6IPVE6eHfffbf3559/+lWMGjXKO+6447w33njDkymv3pVXXun9%205z//8d566y1PpsF6opTSvKIU8cSKQOuyhb/66itPBi5PHsy9rl27ekceeaQnD592s/+br55OnTp5%204svQEyWbn1/8B2pfr776aj+NC/8l8Nprr+VF8cADD3gybVn5LbTQQrqM4w6RacyafvTRR/vnkliF%20eFdccYWuy3TEnLqfe+45Tb/88ss13eYT34+euAbQ80R8fGkemRbniZsAzbdgwQJPps5putw0vZ12%202smTF2VdFz9hfj5xLaBpzZo182R6tScvu55Y6Grayy+/7OXrC3YkU7U1b/v27T1RUnryEqzrBxxw%20gLYD/1CHKAg9eRjwxDelt+2223qinPPABtcUzn1Xsf3PxymuzU888YQeC7QD7cExOuKII5QF2rLS%20Sit5EhRCmyIKPg9M5IXeE+Wna/O8wYMHa59EceuJcsKTm77uC/WL/zW/HhduoozwxEpU6xP/bt4u%20u+zigTOYWXb2eOPYiyWRX79dwJgD1lZeffVV7dPCCy/syUOft9VWW+m1L8oN7/3339dslnFa5xgq%20demvbWM5/XIs+O+45nqMS30sKObcEz9cnijB8haVDz0exgRcu7iWMfbgepMPP5qG+z3GZWzHtSl+%20Nj3Xaxr5MO6inHyM0uvajuEy88Jv11NPPaVjO8Y+sUD00CYsY58yE0PzyUc4T3wL65jQsWNHHcPE%20p7bmQX5IXF+wzWV8STKuoc5C4sIp7p6A8VmmlGv/5COuHhexzvFOOukkTcNzEI6RvBR6Rx11lKad%20c845hZqUsz3Ne4Lr9WPH8Hz3SdtIl7HZ1pfWPcHlPLHt4y8JlBsBvLsF3/Gi2h83jpbbOwL6FtcX%20bHMZX1zHNdTnIi73hKg2ywehyHcE7DOtewLuJfZdbMstt/TEDYonhgV6b8E7lBWXMTLJvdSFCfbt%20sl/kS/O5A/W5nCfIV26C974k75Dl1j+2Nz+BnXfeWa9tPGfjTwyr8heoxVZYSDiJbYz9dSkkX/K9%20Pffc0++MfXlAHVAwYTCCiDWc5hHLNm/99df38z///PP68gNlw3333eeny1cXLYcXFGyzbQrWL87s%20PQl0ovnwDy9RUfUgD5SZGFCDIs6PtV4onyi5BAopMWxuKBrDXO3DCo7Zqaee6knwA81uXxgKvYDY%20fFBSTpkyxe7K23vvvfV4iR9UTbvzzjt1HQorO5jKFzBVfGPf1113nb6oLbnkkqocg2LcytChQ7Xs%20eeedZ5O8qL5gX6hrv/3288QPpebFvsQiUNNlGrc+1Ik1kL44B/smTrf9m3raCk3b6Kg2Y5tYo+pL%20u82HX7Fw8RWPuFbQLygI0IckAgUiyn7xxRd+MbF01jSrXHDhhsI33nijlsM1iLEEgpdrKMCxD/wl%20UWjiGEFJAQWnVV6izqefflrHgG222QarvnI9jXMM9bn2F3nLTTgW/PeIuRxjvOCVw1iQ9Bx0UWii%20TrGy12v29ttv93dhFZq4ljFeiZW9h49RENcXEORD+dNOO82vVyw7NA3KSAjqRP14RsBzgxU8bOP+%20DyUm7g9ioaLl8KHHCp5TxOJT7xNi9a/JUX1xHV+SjGu2Dfl+XTmhjqh7wmOPPaZ9vuGGG/zdiNWL%20KobBFWzwYQvLYnlaUFHhV/LvQlr3hCTXj31OCN5z0ZzwB1KX6xblbH1p3BNczxPsl0IC5UjARaGJ%20fkWNo+X6jhDVF5fxJcm45nouuN4TotqMfUS9I6R1T7BjsMyM8ruD93CZfaX3WLxDuY6RSe6lLkxc%2094uGp/nc4XKe+LDKbIEKzTI7YCk3ty4VmplOOceUYnlYVh9M48ePN5gCLIoEI0pLM2LECHPWWWfJ%20M/L/BFGVMQ1NrPeMfLEyG220kW6cNWuWOfTQQ3W6qSiidFoRorNhqii2iTWcmTZtmk7jEis0nSIG%20B/aXXnrp/yqXpah6EPxEjp9G9wxmRrRPCKYxFzPFKlgXl2sSkK9ROuUc06+LEVEC5hwzG3zo+++/%201+rkRq2/8iKiU9Kx0rBhQz13MA0d0xrlJdeI0tJgOh6mHlvBeQKRG6tNivy95557NCIt/KxiKgYE%2006zFwliXxRLZyIOdTq8XBb4RKyRNx78OHTroNEk/oR4XZs+ebcQSWafGoBmiyDRiAWnkQUvdLoSn%20geRrqihDdTO422PRr18/5YDp/hAXbsiHaX4QsfAxiyyyiC4jKjyua0RoTyoYexC9EVPT4R/UCo4N%20pqHKl1k9VjY9jXMMdbn21+632n45FpTOWFCf55481BuxYPfdXiRpi7xcmPPPP98vgsBm+LNjEKKz%20YhodxmBc61Yw5RzuReCaAuMg3GxgerRYIdosOmUN08HkZUfHRH9DaMF1fEl7XAs1I5VV+cijEW1R%20GcZcBEqEgKN8xNBl139p3ROyuJcmHZvTuCe4nieufJmPBCqRAJ8LSuu5IK17gr0f4HlblJv63gF3%20UqgfwXnlo6PqCVye1dO+lyYdm9N67kh6H6rE6519IoHaEvivFqa2tUSUhxIECk1c8E8++aQqkJAN%20igSxkNAAPHfccYf6G7TFxRLCwPG8WNvZJP9XLKuMTElXn1ZIRBRy+MYQs3kj1nh+PviEgkIGLy5Q%20LMG3ln0YR6ZwPRhIIFaBqSvyD74OMcjCPwf8mKy77rp2E39TIGAVkMVWhZfVoNhjjBdPiFgI6vGz%20fiBtXpkylnPOwX8n/G/hPIEjbCjeEekbghe5fIIbLpTh8O8YFNuGzz77TNuBbYgcGxZE/C0Fga9Y%20sWRRX5P4kCBWKEamfGqEeviXEysn9UXq0lYElcCDyk033WSGDBmi15tYPurHB5kurlW4cENGewyD%20ykek4/pG0Ao8ACUR7BcCH0344BGUn3/+WY9l0GdRWueYa3+D7ammZY4FRqN/V9MxD/dV3F34HzDD%2021zW4TMT40JQcE+wYzHGEgieF8KCj6VWxG2N+t/Ecwj8N8OHFz564mMsJN89wXV8SXtcs21P6xfM%20Dj/8cPVnBiVznz59tGp8JMTHY5n9YmbOnKkfvVz2mdY9wR7DNO+lScfmNO4J9nm10H0Ifl4pJFCt%20BPhcUDrPBWneExCvAD6p4ecY7+mIPYAxHcsHSlBeGC/U173Udb92bE7ruSPpfahaxwT2mwTyEchM%20oYkLFJaNuOCjFA8y/VutJ/DSYAUDXZQyE9sRhRwO+q3gSwoEkTnDAofI2C8egD/99NOcF6VwPXCA%20D8ELVViQhn7AGpSSLgF7QyhUq0xJjMwSfnkNZ4K1TfB8CW/HOiw0xS+jBpNo1aqV3lRl+rgR35E5%20FjpRZZEGBTwsGXHeRgnOH/sijHxhsVaH4fRi1uM4udRlA/ZAsQllJgS/ePGCAvjFF190VmhCYYBr%20Clav+PoKqxpYVeMPHzjEzYATN7QB7KK4YZsruyAXHC8IPl7ACXmUiO89PzmNcwyVuZwn/k6rcIFj%20gfv57HJ6BM95l/ylkMf1HEBbo/rncq2iLD5S5hPxm6wWnLhm8SFF/Gsb3BOg2LPPHHHlXceXNMa1%20uDYE06M4BbfHLcMKE7MU9t9/f1+ZibyYEYN7gZ154PpBLq17Qhr30jCTpGOzy3lW6LnD9TyJOz5M%20J4FqIOB6Twhf05ZNGtdqJb0jgEscK8ss7jfte8IjjzxixKWcwYxKGEBgxib+YISEwH2uY2Qa99Ig%20E9f9Wk4u5xjyFnruSHofsvvnLwmQwP8IZKbQhHUaBEpFTOeKExs5FNvDlm7BMpimHpSpU6fqatiy%200uYRX1G6b+zfTl3Htrh6MAU5LIhyCoWm+HkMb+J6LQnEKaSsRY2tPhiR3Ka5/EIRN2bMGAPLO/GT%206ReBBZ74WjOwxEE0cyjzEAUbN1P7IoKbd3DKoV84tIAI61DY4aYcvLHhIQgvv4jwjWmOEKs4D1YB%20a9BiJS1O2D/cNUDstHldkX+YGgKLJFhruggeDD744AON4o7I5PjDtHVYomCqHqLBwxLWhRv2h2OI%20Y4ExAtdiUKLYhZkgf/D8wX4h+Dp8wQUX6LL9h/EEHy4wBmGfLuJyjp188snO/XXZZyXm4Vhg1DK8%202GMbPu+D53yxddZ1OddzAO0qpn+4ViGIrhoWRF3HeI2p5nCDgw+x+BgjQeL8rFDkFRLX8SXpuFZo%20v9gePgeQVgwnlLP3gyhrVKtkqI97QjH30jCXMBPXexG4uIjLPcHOGil0H3LZH/OQQKUScL0nhK9p%20Vx4u12olvSOAS7Gs0rwn4Hke9w98ELP3WLxnwyXVu+++qx8P7Xt6oTEy6b00fD8IM3G9hyc5x5C3%200HNH2vch1/YxHwlUEoHMfGhaH3cYmGCtFfcnDuN9nlFKRbsxvA1m6hBY4kWJVULC8i4ocfVYX1vB%20vBJwRFftQ3xwG5fdCAS/fuUrYZWOsJCxAsWgBOixq4l+JXCU5rf+LG1hrA8bNkyVd3Z6cY8ePXxl%20JvJZ/5vhtofXJViNWnnC/2RQrr/+ep0SLcEv9BcWn7DwsVPmkBdf5CSiYLCY03JSTuE2R+3EfkiA%204jEoEohLp2Hbh4vgtqhlvABL1Fx9UIEiEwJFL6b1SwRd7TP80LlwQ1kcFwh86wYFfnnDDwjgApcB%20UGBbgaLZug9AGl4kYRkOS1RMmbQiDsnVdx8esKwVkN2W79flHEN51/7m21clbHM5F9HPpOd4ITYu%20x4ljQSGK6W1Pch4UuqZdWwVLS4xFGNOCY4JENVffm/DdhY8mOA/wYcuOPagfHztGjRqluwq3Pbju%20Or7Yul3GNZf+uYx9wXqCbQ6m22V7P8CUQLj1sQJFL9Ig9XFPgJsR13up6xiS9tjsMta4nieWO39J%20oNIJFBqT0H/Xa9qVlcu1mvS5APsO9sVlfEkyrrn2rZTvCXh+xxgIl3NW4AoOvu0hcFfnOkYmuZe6%20MHHdr213oV/X5w6X86TQvridBKqegGtAIwGlUS7tb6Fy8hKg+cWC0o9aGiwjSiDv7LPP9hAh1UY5%20R9TrsIiVmNaDCGtB6du3r6aLL81gsi7L1x+NZIy2fvnll5oWV49Y4mk94htK8wX/ScAa3SbKj2By%201S+7RjaWgAsaQVa+vGnEaoCzEQwRzTYoYtHrSdAePW6IMCvKPq9Lly4aaRvH8fLLL9fsNtpooeil%208kXRj0InQWk0Sqnc/DTKrSjXvOnTp3uiPNXjiyiuqFcsdDzx46Jp2CfaP3bsWN1vVF9Eme6Jr1XN%20j/MRdchN2ZPAQJ74b/PEokTLigWQ5kFenPPoC+qz15JYLwZR5F125YRKotqM9HAEQ3H7oNEFwR8R%202kXp6x111FGeWGx6MgXbZ4CyhUR84Gi/5CFNI8kjYrz4XNM0+RqrxV25yUcJjbALThLIQ4+PKEe1%20TZadjXKOiIlIkwcIPQ5iHarnjigx9Jyy7ZaAQppPppx7YqXpDRw40D8WEoxMs6V5jqFC1/7aNpbT%20L8eCG/VwuR7jUh8Lijn3cA8XC/SCRcX1jF57YvXinXDCCd6UKVM8efnTtO7du9co73pNI9oo7hVh%20QXRtmerlJw8YMED3hWcSHAeMEaLE1LSLL75Y84kvL13fc889PYxdEkDOE0t7TcP4gjEDEtUXpLuM%20L0nGNdRZSFw5oZ6oe0JUlHNEM0d/5QOwh/sT7gniP1LTxGqmUJNytqd5T3C9flzvk67Xbdr3BJfz%20JAciV0igjAjIzCUP0bsLSdQ4Wq7vCFF9cR1fXMe1Qjztdtd7QlSbUUf4HQFpad0TxA2cPpvLh0MP%2092RRbHoye8sTN1f6vohzB+IyRia5l7oycdkv2pfmc4freYL9lpswynm5HbF021uXUc5hgeUkVoFg%20f10K2ZcDKA2CIkGB9MFYvph4YrFVlEJTArloHRgUZYqoX71Yvnl44EY7xeLKT49TaIrFhubdcsst%20/bxYEB9Smo5ylFwCrkoM8bXl4RjjWECZCJFItLouflJyK5U18bPoyTQT3Y4yuKmKRYiuF1JoypTA%20nHyoHC/ZUKxBUWfPW6yPGzfO3zdeasVPo79dAtd4r7/+uidTADTNnrtRfUElX331lSdf11T5h32I%205bAnzsw9sejx94EFvBBCcWrbgZv3JZdcousSNCEnb6EVF06oI67NYl2jL6rB/cjUe+Vt24dfKB7A%20NYmItaMnvtdylI5QjIqvUk+sJ/2qXLnhgwSuTdSBNuEXClKcT1i3Ck2xtPKgwLDtx8MGHowlSFiO%20UgMNEAvanGMBHjjOYp2p7Yt7eS32HEOlrv3VBpTRP44F/x3XkhzjUh8Lkp5+rgrNuXPn5lzLeHGB%20QhPjs/3YEdy36zUd92IhEdNzrn2x+PfEKlLHaDtOQOGJcUKmoumuxWWGJ0HQ/HEE96MjjzzSE6tu%20Pw0Zo/pi215ofEG+QuNako+orpyw36h7glVoShA3ZFHB8w8+HuGDkGWF5eOPP94Tq02bzek37XtC%201PUDhTTaGfw46HqfdBmbs7gnuJwnToCZiQRKjICrQjNqHC3Xd4SovuCwuIwvyBc1rhX7juB6T4hr%20c9Q7Qpr3hOHDh+fcZzF2t2vXzpMgpEDhi8sYWehemsU7AhqY5nMH6nM9T5C3nIQKzXI6Wum3tWIU%20mlBaWQWV+LH0YAElEY99ZQcs4iDFWGiinAQQ0odYKKRgUYH67csIrOTELxayqcQpNGHNKVNlvbZt%2029qs+osXGwyyUZYjORmrcMVViVEMGiiV8AUPFpRpCW7a4nPRw9e8KMELGrYHFW74uox24CXYRaBI%20Fz8wvlIsrgxuvt9++23cZuf0LDhh52AEFvYhwLlBoYx4iQU/iRCc9wXYlRvqg3zR8O4AABbRSURB%20VIIa+SH22g+3Ew9yOA4ux018+aRyLNCeQucY8kBc+/vf3KX/n2NBzWPkeoxLfSyo2bPoFFeFZnTp%20wqlJrunCtf03B2aQwII+apyAchPbw+O/+B9LNC66jC/hcc21/VH5suCED87iKsWDxSOWayNp3xOC%201w/uDWGFJtqa5D7pet26MnC9J7icJ677ZD4SKAUCrgrNYtqa5Jp2rb/QtVqO7wjoeynfE/AxEzPp%20xK2MthPrceIyRobvpaX2joC+5XvusH1P+z5k662vXyo064t8aey3LhWamQUFkodLA/+YiGJ+6KGH%20qtN9ObGRbGTqrQZdgW89SKNGjfRXrK/0N/gPafDNJ1YcwWRdhl9ORCKFD0P45YAgKrJYdGkgElFu%20ahr+xdWDtsg0LA0gA8fHovjUMggoA4F/E0rdEcDxs46Z09qrKLc1AFBcfTI9vMZ2RLtO0g74Z+vQ%20oUPcLvx0RD6PEpnaqH42o7bZNJk6b8QSRVez4ISKxc2C/tl92t+k7UNUPxd+rtxQH/zsFJIk/m7t%20tV6oTpfthc4xW4drf23+av7N4hwvdJw4FpTeGZfkmnZtvbiciM2KZ42o7fLRM7ZM1AaX8SVuXBMl%20sZFp9FHV5qThOQW+wSBZcMJzEwIvREl93xPi7qXBtiYZQ9IemwuNNbadLueJzctfEqh2AkmuaVdW%20ha7VUnguKPV7QtL24b0evvXxV0hcxsi4e2m47iT3SZf9huvPtx71XBHOn/Z9KFw/10mgUgnU1CCm%203NN1111XI5fBoTwCeUBhggHFKjGxu4MPPlj/onYtZthRyZqGF48zzjhD/xDUBwFBoESBMios+eqB%20YlV8aJoHHnjAiE8PLYogLmJSbsTXV7gqrpNA6gQOO+wws9NOO+WtNxzQKm/mlDeWevtS7i6rI4F6%20I8Brrd7Ql8yOEcwQzyDyjT1vmxAkp76E52l9ked+SYAEqo1Aqd8TSr191Xa+sL8kUG0EMldoWqCI%20HOoaGdOWSfLr+qUnqs7evXurUlScE5uTTjrJyFQmI1MpjQRwMTZae1Q5ppFAWgQkUIXBX6lKqbVP%20ggSpFRW+rFNIoJIIlNq1Vklsy6UvsIzs2rVrSTe3lM5TzLQ5+eSTdXZOSUNj40iABEigCAKlfk8o%20tfbxHaGIk4xFSKCMCdSZQrOUGcGiE1N5JRq3WmmOGDHC4GsTHpApJEACpUdgv/32K71GsUUkQAIk%20QAJ1TgDT7gcPHlzn++UOSYAESIAESo8A3xFK75iwRSSQJQEqNP+liynn99xzjxk0aJCBL83zzjvP%20wG8KhQRIgARIgARI4P/bu89Yq4q9D8ADCCKgFDWiEhCxN2wBEYwNu6AfkA8iMWL4YomaWNEYlCga%20e+wau2Kv2BUrgoAVW2xgASwIRuko+N7/3HevnIMgWy47WefwTMI5a++91uyZZxIu/u4UAgQIECBA%20gAABAgQIECiPgEDz/8ciNigeM2ZMeUZGSwgQIECAAAECBAgQIECAAAECBAgQ+JvA348O/9st3iBA%20gAABAgQIECBAgAABAgQIECBAgEA5BASa5RgHrSBAgAABAgQIECBAgAABAgQIECBAoAoBgWYVSG4h%20QIAAgVUXmDdvXj54rWfPnqlTp06pd+/eacSIEWnhwoWrXqknCRAgQIAAAQIECBAgQGCNFbCH5ho7%209DpOgACB2gv88ccf6dBDD01vvPFG6ty5c9p+++3TpEmT0rhx49LLL7+cXn311dS0qf9vrfYj4RsI%20ECBAgAABAgQIECDQeAT8V2TjGUs9IUCAQOkEIrSMMLNfv35pypQp6YUXXkgzZ85MO+64Y37/lVde%20KV2bNYgAAQIECBAgQIAAAQIEyi0g0Cz3+GgdAQIEGrTAnDlzcvt322231KxZs3wdv+N1lAULFuTf%201f645ppr8izP1q1bp/XXXz/ttdde6bnnnqv3+JIlS9LFF1+cdt9999S2bdt8z0UXXZSWLl1a7775%208+en0047LXXv3j21atUqbbPNNinqHz58eOrVq1f6/fff8/0HH3xwOv744+s9Gy+GDh2a9t1333rv%20f/zxx+nII49Mm266aZ6Reswxx6R33323uOfBBx/Mdb///vvpxBNPTFtvvXWKvuyxxx5p7NixxX1x%20sXjx4jRs2LDcjzZt2qQuXbqk4447Ln333Xf17qu2v/Ue8oIAAQIECBAgQIAAAQINWECg2YAHT9MJ%20ECBQdoG+ffum5s2bpzvvvDN9++23ubnvvfdeeuyxx9I666yT9ttvv6q7cPnll6dTTz01/fLLL6l/%20//45FB0/fnw64ogj0jvvvFPUE5+de+65OZDcf//909SpU9N5552XhgwZUtyzaNGi1KdPn3T11Vfn%20+g444IAceEb9EYa+/fbb6c8//8z3v/XWWymCymVLvDdx4sTi7ddeey316NEjPf/882mnnXZK3bp1%20S6NGjUphEAFmlGnTpuW6BwwYkO655558zyabbJImTJiQDjnkkDR79ux8X4SU0faRI0fmZ/bZZ58c%20cIZjXFfui5ur6W+u1A8CBAgQIECAAAECBAg0EoGmjaQfukGAAAECJRTo0KFDeuaZZ9L333+fttxy%20yzxzMWZnRqAYy89jdmK15dFHH823Roh5//33pxdffDHdcsstKfbpjIA0Srz/7LPPpsGDB6dPP/00%20v//555/nmZR33XVXevPNN/N9t99+ew4ZIzT8+uuv05NPPpnivgg0o75/WyL8jBmXTZo0SdG+mDUa%20+4OOHj06/fbbb+n000+vV2UclPThhx/mtn755ZfpqKOOSnPnzs0mceO9996bZ2xGeBnte/rpp9P0%206dNzeBsBbQSlUartb77ZDwIECBAgQIAAAQIECDQSAYFmIxlI3SBAgEAZBSLMi1mQMeMwytprr51n%20bEagedttt6XKkvRq2h4zGaPETM0ffvghXw8aNCgfMBRLsaPErMcIFa+66qq01lr/PfcuQtMrrrgi%20f3733Xfn37H0O8pll12WWrZsma/juUsuuSRtuOGG+fW/+RGzTiNAjaXpu+yyS/HoYYcdlvcPjXAz%20ZmdWysknn5y6du1aeZkGDhyYryv9ikAzSvS1EvrG4UlXXnllXobesWPH/Hm1/c03+0GAAAECBAgQ%20IECAAIFGIvDf/9prJJ3RDQIECBAol0CEljFjMvaajNmEG220Ufrpp59ygBczJrfaaqsc0FXT6pg9%20GcHgjTfemG666aa03Xbb5SXrsU9lzP6MEqHiX3/9lffFrFtnJVD94osv8tsx6zH2zawbPsYHEbj2%207Nkzz4is+/zKruN7o9x6663FbNHKM7FEPtoUMzErJU57r1vWXXfd/LLSzkr7KnuNVu7dfPPNU+wH%20WinV9rdyv98ECBAgQIAAAQIECBBoDAICzcYwivpAgACBkgpUDuyJYDPCzCjxO/aCjHDupZdeqjrQ%20jAOAPvnkk/TAAw/kfSrHjRuXrr322vzn0ksvTWeeeWZauHBhngEap6gvr2y22Wb57ThwJ/b2XF6p%20zNhc3md136t7yFB8b5SYdRmH9yyvtGjRong7gtN/KjGzNfYYXVmptr8rq8fnBAgQIECAAAECBAgQ%20aEgCAs2GNFraSoAAgQYmMGPGjNziyvLvSvNj+Xgs8Y7ZmtWUCA8/+OCD1L59+3wyeZxOHsvWY0Zk%20LN+Og3zOOOOMfGp4BJ1PPPFEnm1ZqTv2uIxl4XEyepQIU+Pgn9iXMk4kr1s++uijui/zdWXmZN0P%206p42HqeVR4nDfi688MK6t6Vvvvkm/fzzz3nWaHxnNSXaFwcdxezODTbYoHgkZnmeddZZac8998z7%20csb3VtPfogIXBAgQIECAAAECBAgQaAQC9tBsBIOoCwQIECirQPfu3XPTInisW+677768DHvnnXeu%20+/YKryP8jJPI99577xxkxo0xy/Gkk05KG2+8cZ6ZGYf5xCE/EV7Gvp11y3XXXZeXksdhQFEOPPDA%20/HvEiBH5d+VHHDwUhwPVLREoxgE+ES5WSgSmP/74Y+VlPnG9Xbt2eV/QX3/9tXg/Dv/p3bt3bnfM%20Cq229OrVK99a2fuz8ly8fvzxx4v9Qavtb+V5vwkQIECAAAECBAgQINAYBMzQbAyjqA8ECBAoqUDs%20e/nII4/kfR/Hjh2bDj/88PTVV1/lmZWxBHvZ079X1I0INPv375+XqkeoGftmxpLs2J8zDtI56KCD%20UtQX33f99dens88+O02ePDntuuuu6bPPPsvL1GOfyiFDhuSviPtiL86bb745xSzSvn375j0u49T0%20ZUufPn3yqePxHUcffXSe1XnDDTfUmwG63nrr5e+M7419OeNwoJhVGqeTR/0nnHBCquyTuWz9y3t9%20zjnnpDvuuCMfUhQnxEedcar7mDFjcoAb/Y9SbX+X9x3eI0CAAAECBAgQIECAQEMVEGg21JHTbgIE%20CDQAgR49eqSnnnoq728ZB/rEnyg77LBDPok8AsdqSwSVERLGHpoTJkzIj8VS9gg6KzMvI1icNGlS%20Di4feuihNGrUqNS2bdsUp42fcsopqVu3bvm5WLo+ceLEdOyxx6bY53P06NF51mPUNXfu3BweVto1%20cuTIHMLGcvFYtt6mTZu87DtmbcYeoJUSS8HjswsuuCCdf/75+e2YgTp8+PCV7hParFmzSjX5d8w6%20jT5GABuHKcWM1ihxYFEciFRZhl5tf/PDfhAgQIAAAQIECBAgQKCRCDT5z8mrf1XTl5gdU7dU+Vjd%20R1w3EoHXX389L59sJN3RDQIEVlHg3/5dEEuxY8/K2D+zQ4cOq/itKc2fPz/FrMX436HY/3JFMx9j%20j80pU6akLbbYYoUHAEUjor7Y5zLCzljGPnDgwPTwww+nWbNm1WvntGnT0pw5c/LJ7MsGkMt2JmZl%20Vtq37Gf/9nUsW586dWruawSxKyrV9ndFz6/K+zNnzkzxJ06cVwgQIEBgzRYYP3583oKl7iF4a7aI%203hNYMwViH/htt902tW7des0EWMN73a9fv7xKrcIQE0dilV4tihmatVBVJwECBAj8TSDCuOUFcsOG%20DcszKf/2QJ03Bg0alJetx1utWrXKh//U+Xi5lxFOxj+mVlaivmoCuU6dOq2squLzCG1XV4l/DMaM%201pWVavu7snp8ToAAAQIECBAgQIAAgbILCDTLPkLaR4AAgUYuMHTo0Lwk/J+62bFjx3/62GcECBAg%20QIAAAQIECBAgsAYJCDTXoMHWVQIECJRRoGvXrin+lKXEMokuXbpYJlOWAdEOAgQIECBAgAABAgQI%20LCMg0FwGxEsCBAgQWLMFBg8evGYD6D0BAgQIECBAgAABAgRKLtC05O3TPAIECBAgQIAAAQIECBAg%20QIAAAQIECBQCAs2CwgUBAgQIECBAgAABAgQIECBAgAABAmUXEGiWfYS0jwABAgQIECBAgAABAgQI%20ECBAgACBQkCgWVC4IECAAAECBAgQIECAAAECBAgQIECg7AICzbKPkPYRIECAAAECBAgQIECAAAEC%20BAgQIFAICDQLChcECBAgQIAAAQIECBAgQIAAAQIECJRdQKBZ9hHSPgIECBAgQIAAAQIECBAgQIAA%20AQIECgGBZkHhggABAgQIECBAgAABAgQIECBAgACBsgsINMs+QtpHgAABAgQIECBAgAABAgQIECBA%20gEAhINAsKFwQIECAAAECBAgQIECAAAECBAgQIFB2AYFm2UdI+wgQIECAAAECBAgQIECAAAECBAgQ%20KAQEmgWFCwIECBAgQIAAAQIECBAgQIAAAQIEyi4g0Cz7CGkfAQIECBAgQIAAAQIECBAgQIAAAQKF%20gECzoHBBgAABAgQIECBAgAABAgQIECBAgEDZBQSaZR8h7SNAgAABAgQIECBAgAABAgQIECBAoBAQ%20aBYULggQIECAAAECBAgQIECAAAECBAgQKLuAQLPsI6R9BAgQIECAAAECBAgQIECAAAECBAgUAgLN%20gsIFAQIECBAgQIAAAQIECBAgQIAAAQJlFxBoln2EtI8AAQIECBAgQIAAAQIECBAgQIAAgUJAoFlQ%20uCBAgAABAgQIECBAgAABAgQIECBAoOwCAs2yj5D2ESBAgAABAgQIECBAgAABAgQIECBQCAg0CwoX%20BAgQIECAAAECBAgQIECAAAECBAiUXUCgWfYR0j4CBAgQIECAAAECBAgQIECAAAECBAoBgWZB4YIA%20AQIECBAgQIAAAQIECBAgQIAAgbILCDTLPkLaR4AAAQIECBAgQIAAAQIECBAgQIBAISDQLChcECBA%20gAABAgQIECBAgAABAgQIECBQdgGBZtlHSPsIECBAgAABAgQIECBAgAABAgQIECgEBJoFhQsCBAgQ%20IECAAAECBAgQIECAAAECBMouINAs+whpHwECBAgQIECAAAECBAgQIECAAAEChYBAs6BwQYAAAQIE%20CBAgQIAAAQIECBAgQIBA2QUEmmUfIe0jQIAAAQIECBAgQIAAAQIECBAgQKAQEGgWFC4IECBAgAAB%20AgQIECBAgAABAgQIECi7gECz7COkfQQIECBAgAABAgQIECBAgAABAgQIFAICzYLCBQECBAgQIECA%20AAECBAgQIECAAAECZRcQaJZ9hLSPAAECBAgQIECAAAECBAgQIECAAIFCQKBZULggQIAAAQIECBAg%20QIAAAQIECBAgQKDsAgLNso+Q9hEgQIAAAQIECBAgQIAAAQIECBAgUAgINAsKFwQIECBAgAABAgQI%20ECBAgAABAgQIlF1AoFn2EdI+AgQIECBAgAABAgQIECBAgAABAgQKAYFmQeGCAAECBAgQIECAAAEC%20BAgQIECAAIGyC6y1qg2cMmXKqj7quQYuMGPGjGT8G/ggaj6B1SDg74LVgNjAq5g1a1aaPXt2atmy%20ZQPvieYTIECAwP8qMH369NS+ffvUokWL/7UqzxMg0IAFpk2blv9t2KpVqwbcC01fVYF58+bVe3Th%20woX1Xq/OF6scaHbr1m11tkNdBAgQIECAAAECBAgQIECAAAECBAg0EoHJkyenAQMG1KQ3lpzXhFWl%20BAgQIECAAAECBAgQIECAAAECBAjUQkCgWQtVdRIgQIAAAQIECBAgQIAAAQIECBAgUBOBqpecr7VW%20/Vs7d+5ckwaptPwCsQeC/dLKP05aSKDWAv4uqLVw+etfsmRJWrp0aWrevHn5G6uFBAgQIFBTgUWL%20FuX9M5s0aVLT71E5AQLlFli8eHGK/KhpU/Pnyj1StWndzJkz04IFC4rK27VrV1yv7osmf/2nrO5K%201UeAAAECBAgQIECAAAECBAgQIECAAIFaCIjMa6GqTgIECBAgQIAAAQIECBAgQIAAAQIEaiIg0KwJ%20q0oJECBAgAABAgQIECBAgAABAgQIEKiFgECzFqrqJECAAAECBAgQIECAAAECBAgQIECgJgICzZqw%20qpQAAQIECBAgQIAAAQIECBAgQIAAgVoICDRroapOAgQIECBAgAABAgQIECBAgAABAgRqIiDQrAmr%20SgkQIECAAAECBAgQIECAAAECBAgQqIWAQLMWquokQIAAAQIECBAgQIAAAQIECBAgQKAmAgLNmrCq%20lAABAgQIECBAgAABAgQIECBAgACBWggINGuhqk4CBAgQIECAAAECBAgQIECAAAECBGoiINCsCatK%20CRAgQIAAAQIECBAgQIAAAQIECBCohYBAsxaq6iRAgAABAgQIECBAgAABAgQIECBAoCYCAs2asKqU%20AAECBAgQIECAAAECBAgQIECAAIFaCAg0a6GqTgIECBAgQIAAAQIECBAgQIAAAQIEaiIg0KwJq0oJ%20ECBAgAABAgQIECBAgAABAgQIEKiFwP8BZSt/txxIMNkAAAAASUVORK5CYII=" width="750" /></p>
<p>Note that outside of the truncation case, the leading code unit is
associated with a more specific error enumerator, and then all the
continuation bytes in the invalid sequence are
<code class="sourceCode cpp">unexpected_utf8_continuation_byte</code>.
This is aligned with my interpretation of the underlying logic of
Substitution of Maximal Subparts; also, any other approach would require
additional lookahead, which would break some of the API’s
invariants.</p>
<h2 data-number="5.4" id="erroneous-behavior"><span class="header-section-number">5.4</span> Erroneous Behavior<a href="#erroneous-behavior" class="self-link"></a></h2>
<p>Iterators are constructed from more than one underlying iterator. In
order to perform iteration in many text-handling contexts, you need to
know the beginning and the end of the range you are iterating over, just
to be able to perform iteration correctly. Note that this is not a
safety issue, but a correctness one. For example, say we have a string
<code class="sourceCode cpp">s</code> of UTF-8 code units that we would
like to iterate over to produce UTF-32 code points. If the last code
unit in <code class="sourceCode cpp">s</code> is
<code class="sourceCode cpp"><span class="bn">0xe0</span></code>, we
should expect two more code units to follow. They are not present,
though, because
<code class="sourceCode cpp"><span class="bn">0xe0</span></code> is the
last code unit. Now consider how you would implement <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">++()</span></code>
for an iterator <code class="sourceCode cpp">iter</code> that transcodes
from UTF-8 to UTF-32. If you advance far enough to get the next UTF-32
code point in each call to <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">++()</span></code>,
you may run off the end of <code class="sourceCode cpp">s</code> when
you find
<code class="sourceCode cpp"><span class="bn">0xe0</span></code> and try
to read two more code units. Note that it does not matter that
<code class="sourceCode cpp">iter</code> probably comes from a range
with an end-iterator or sentinel as its mate; inside
<code class="sourceCode cpp">iter</code>’s <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">++()</span></code>
this is no help. <code class="sourceCode cpp">iter</code> must therefore
have the end-iterator or sentinel as a data member. The same logic
applies to the other end of the range if
<code class="sourceCode cpp">iter</code> is bidirectional — it must also
have the iterator to the start of the underlying range as a data member.
This unfortunate reality comes up over and over in the proposed
iterators, not just the ones that are UTF transcoding iterators. This is
why iterators in this proposal (and the ones to come) usually consist of
three underlying iterators.</p>
<p>Because of this fact, it’s almost free to specify these iterators so
that dereferencing a past-the-end iterator, incrementing a past-the-end
iterator, and decrementing an at-the-beginning iterator are all
erroneous behavior instead of undefined behavior. The only time an
additional branch is required to ensure safety is to check for a
before-the-beginning decrement in <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">--</span></code>
(although actually producing diagnostics for the EB requires further
branching).</p>
<p>As long as a transcoding view is constructed with proper arguments,
all subsequent operations on it and its iterators are memory safe.</p>
<h2 data-number="5.5" id="optimization-for-transcoding-views-wrapping-other-transcoding-views"><span class="header-section-number">5.5</span> Optimization for transcoding
views wrapping other transcoding views<a href="#optimization-for-transcoding-views-wrapping-other-transcoding-views" class="self-link"></a></h2>
<p>In generic contexts, users will create
<code class="sourceCode cpp">to_utfN_view</code>s wrapping iterators of
other <code class="sourceCode cpp">to_utfN_view</code>s. This presents a
problem for a naive implementation because when
<code class="sourceCode cpp">to_utfN_view</code> is wrapping a
bidirectional range, the number of iterators in each successive
<code class="sourceCode cpp">to_utfN_view</code> wrapper increases
geometrically unless we use workarounds.</p>
<p>The workaround makes it so that when a
<code class="sourceCode cpp">to_utfN_view</code> is constructed from
another <code class="sourceCode cpp">to_utfN_view</code>’s iterators,
instead of storing those iterators in the iterators of the outer
<code class="sourceCode cpp">to_utfN_view</code>, the outer
<code class="sourceCode cpp">to_utfN_view</code>’s iterators have
identical contents to the inner
<code class="sourceCode cpp">to_utfN_view</code>’s iterators, the only
difference being the output encoding. This also allows the outer
<code class="sourceCode cpp">to_utfN_view</code>’s iterators to
reconstruct the inner <code class="sourceCode cpp">to_utfN_view</code>
iterator when its
<code class="sourceCode cpp">base<span class="op">()</span></code>
member function is invoked, without actually storing it.</p>
<p>This optimization is only needed when the underlying range is
bidirectional (or “better”), because input ranges and forward ranges
increase in size linearly rather than geometrically with each successive
wrapper, due to the fact that the sentinel is not wrapped by the
transcoding iterator.</p>
<p>Although it’s not strictly necessary, we could also apply the
optimization when the underlying range is a forward range, preventing
the iterator size from growing at all (as opposed to linear growth), but
that isn’t done in this paper because we judge the tradeoffs as not
being justified. It is not possible to apply the optimization when the
underlying range is an input range, because of the fact that the
underlying iterator is past-the-end of the current code point.</p>
<p>The diagram below represents the outcome of the following
process:</p>
<ul>
<li>The user starts with a range of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>s
from <code class="sourceCode cpp"><span class="bn">0x100</span></code>
to
<code class="sourceCode cpp"><span class="bn">0x300</span></code>.</li>
<li>They create a <code class="sourceCode cpp">to_utf16_view</code> with
this underlying range.</li>
<li>They advance that view’s
<code class="sourceCode cpp">begin<span class="op">()</span></code>
iterator until the underlying pointer is at
<code class="sourceCode cpp"><span class="bn">0x150</span></code> and
reverse the view’s
<code class="sourceCode cpp">end<span class="op">()</span></code>
iterator until the underlying pointer is at
<code class="sourceCode cpp"><span class="bn">0x250</span></code>.</li>
<li>They create a subrange with these iterators and wrap it in a
<code class="sourceCode cpp">to_utf32_view</code>.</li>
<li>They advance the <code class="sourceCode cpp">to_utf32_view</code>’s
<code class="sourceCode cpp">begin<span class="op">()</span></code>
iterator until the underlying pointer (two levels down) is at
<code class="sourceCode cpp"><span class="bn">0x175</span></code> and
similarly reverse
<code class="sourceCode cpp">end<span class="op">()</span></code> to
<code class="sourceCode cpp"><span class="bn">0x225</span></code>.</li>
</ul>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAx8AAAOmCAIAAAAFA79PAAAAAXNSR0IArs4c6QAAAJBlWElmTU0A%20KgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEo%20AAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACg%20AgAEAAAAAQAAAx+gAwAEAAAAAQAAA6YAAAAAuhjAeAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAgtp%20VFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0%20YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw%20Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNj%20cmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFk%20b2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZm%20OlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVu%20dGF0aW9uPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj41PC90aWZmOkNvbXByZXNzaW9uPgog%20ICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRy%20aWNJbnRlcnByZXRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4K%20PC94OnhtcG1ldGE+CtQK6igAAEAASURBVHgB7J0HeFRF24ZJ7400Sui9lwBBkI8qCKJUC12KCiIW%20QEFRFKQIH0WRLh1U2kf7QUroXZHeIUASQkgoIZ30/M9mwuGwu9ks2d1ky3MurmXOnJl3Zu4zm332%20nffMWmVnZxfjQQIkQAIkQAIkQAIkoCcC1nqyQzMkQAIkQAIkQAIkQAIKAlRXnAckQAIkQAIkQAIk%20oE8CVFf6pElbJEACJEACJEACJEB1xTlAAiRAAiRAAiRAAvokQHWlT5q0RQIkQAIkQAIkQAJUV5wD%20JEACJEACJEACJKBPAlRX+qRJWyRAAiRAAiRAAiRAdcU5QAImT6B69eo2NjYHDhyQj+TixYvW1ta/%20/vqrPFM17eTkNGrUKNX8l82JjIxEcx9//PHLVtRQ3sHB4csvv9RQwNCXwPB///ufNq0EBwefPHlS%20lNy8eTNQSKfaVGcZEiABMyNAdWVmN5TDsUQCGRkZWVlZQ4cOTU1Nlcafnp6uzV7BZcuW9fb2lmoV%20OJGZmYnmtGlR+yYwLpjVvrzeS65evbpnz57aDOrDDz+cOXOm6ICbm1ulSpWcnZ313h8aJAESMBUC%20tqbSUfaTBEhAAwErK6sbN25MnTr1hx9+0FBM9dL169dVM5mjC4F27drdvHlTFwusSwIkYOoE6Lsy%209TvI/pOAgkCzZs3atGkDdXXt2jVVIvC+TJs2rUqVKvb29vCsdOjQ4c6dO6JYUFDQzz//HBUVFRgY%20OH78eKnu1atXkbN27VrkxMXFDRkypEyZMj4+Pm+//TYuScXUJjZt2oS6J06cQJdcXV3r1Kmza9cu%20nP7nP//BQiS8ZXPnzhUVsfDXtWvXOXPm1K5dG5eaNGmycuVKtTb//ffftm3buru7YxkUS5lpaWko%20Fh8fLzqJ7pUqVapkyZJjx45FZp8+fdBVLy+v3r17JyUlCYN5jeKTTz7BguayZcvq169vZ2eH3u7f%20vx9VWrRosWrVKiTQxHfffYeEWozHjx9HASyM7t27F4lDhw6hOhJYVRTt/v333+3bty9evDi6161b%20t1u3bol8Qemff/557bXXXFxccHXChAna+MlEdb6SAAkYNQG8mXmQAAmYNAGsQ7366qvwXTk6OrZs%202RKrhBjO6dOn8acHwgXpWbNmIQ3t8s033wwcOBCOLnzeiyEjQuiLL75AukGDBn5+ftIC36RJk1AF%20NrHaWLNmTVgeNmzYZ599Bn0DHRAeHi6qS6/IQXmsTiJn0aJFSEMtvfnmm2PGjIHKQS2ouoYNG371%201VdQaegAxAdKdunSBSVx+s4770AzYSA4XbBggTAr9Q0xTNCFlStXhnjq3r07ykCmoExMTAzSkEQ1%20atTApcaNG+M0ICDA398fmgnaDqeQjCipYRRCtKG3WN0DHAgddDghIWHQoEEwCwu9evVC+BqMqMV4%207tw5FECtEiVKIAG1JEK1oLpQBWILPff09AS6Dz74AGkPDw8ILFwSlEAG9wJjr1ChAtrasmULLvEg%20ARIwdQKKb2M8SIAETJqAUFcYwsSJE/EJvXTpUqTl6qp58+YIrkpMTBTD7Nixo6+vr0hLCmbGjBmo%20CzUg8hvlHEj/8ssvyN+zZ4/Ih5iAmoGUEafSq6q6GjFihLgqPFVCDyFn+/btMIiQJqSFukLToiTU%20EkQGtFFKSgpypL5BO0KTwfkkionVTwxQqCuoLjG06OhoWIZOgvsKJaGoIGXeeustpDWMAuoKtXbs%202CGMC4bHjh3DqYipF2oVpxowli9fXkRooZhcXTVt2hSx+XAoCuO7d+9GW/3798epUFfvv/++uCQ8%20gp9//rk45SsJkIBJE7DGW50HCZCAeRCAowjuFmiChw8fykcEj0hISAhU0aVLl6C9Tp06hYBxeQGk%204XeBmsFyFdIRERHQLlhWQxrrXPDlYCUO+gMHLsE5tG3bNqXqqqeDBw8WmRUrVkTi3XffFacQIkiI%20pT0kEP09fPhwcQkNwYEEkXTlyhWRg1coLfiBsGx35MgR0QesLSJf6gMsw3WEHPjekOjUqRP8ZDiF%20o6h06dKiIc2jgNsJtVAFB5QcXp88eZJz9sKLNhjlFZKTk7EsCNVVrVo1kQ83FRxs8qc74SETl7Di%20idVMoRflRpgmARIwRQKMajfFu8Y+k4B6AtATCxcubNWqFVaa4AWRCiGsCktyUBhw52ApCioKi3HS%20VZFA3FLr1q2xmwDCsCBcUEDoodu3b0NqdO7cWV4eMkh+qjYtFA8uibYgHUQxtC4vDwGEZUcpR0ix%20sLAwrFSKzNDQUHiP/i/nkIohgUGJU/nTeTAuNYSr0jA1jwLqSrIsuocvzVKOlNAGo1QYCShR2BHL%20nVI+ot8QQyY9C6natFSSCRIgAdMlQHVluveOPScBNQQQOQ53CBxUiBMXlyFNsBQID9CSJUugn6Bm%20UABuGNXKCAbHJXz24yokGvQWyuDjH0FIO3fulJdXUkjySy+bfvz4sbyKcN7IN4kQ+gMRXQhdkpfE%20qp/8VHNa91Foj1HqidB5SgOEWxER7tifTBST9B9O1Uo6yRoTJEACJkTghS+RJtRvdpUESCAvAtOn%20T0dY1bfffisK4PFAOFEQr923b19IK6iEs2fPqq3bo0cPuJHw9NzBgwfFsiCKwYd09+5dyCksXeHA%20ul6/fv1mz56t1kIBMiGn5NJtw4YNIkpdMoWQcARjYTUT62uiDxAoeOxRBJZJxTQndB9FvhhVtRFU%20FMLFsNiKJULRPfjkDh8+jFVOzb3lVRIgAVMnQHVl6neQ/ScBZQL4UMfTbdhNVFyA0oKDBAtr2BYB%20EeWILkdkOsLA8XSbUk0sGuIpPzyyh/JQWuIqPEZYcETAELYnQLw2/Ftnzpz56KOPlOrqcgolN3/+%20fHQPEhDLlwMGDJCv7sEyguihpbB3A/oPtxz2X8BGD3DIad9owUYh1hynTJly9OhRzRhREj1EoPq9%20e/fkvcITi/fv30fgPBZb161bh62wsDgr9neQF2OaBEjAzAhQXZnZDeVwSEBBAG4qfJAjAZ8TNBO8%20WYheghzBM3rwoyCyCtpLHpglUYN4Qhol4TESmVgfRBQ21AxEDwK0sZsAnr/Ly/siVgzVrhtKmVJC%202EeIOh7r+/TTT9EotteCclL99R7sZQC9iKh2iD+EwCM2CxoLi2vClLTKBoPIEZnCuPT6UqMQdvAK%20XHA+wQs4b948zRixogqPGpYvoVlFB8QrhgPhiEcKYOq9995DiD1WXbFrhtSE1EORUNt5pTI8JQES%20MH4CVqrebOPvNHtIAiTwsgSwqSbcKlgZFMHmSCMyXR4Pnq/B2NhYKDMRjJVvYS0LwB11+fJl7GyO%203RbwqCBkk62tpmBQ7PuAkCwpXl7LVuTFdBxFgTFicRZbM8ABJu8M0yRAAuZKgOrKXO8sx0UCJkBA%20Ulcm0Fd2kQRIgAS0JsCVQa1RsSAJkAAJkAAJkAAJaEGAvistILEICZCAYQjg5/mw8xNimwxjnlZJ%20gARIoGgIUF0VDXe2SgIkQAIkQAIkYK4EuDJorneW4yIBEiABEiABEigaAlRXRcOdrZIACZAACZAA%20CZgrAaorc72zHBcJkAAJkAAJkEDREKC6KhrubJUESIAESIAESMBcCVBdmeud5bhIgARIgARIgASK%20hgDVVdFwZ6skQAIkQAIkQALmSoDqylzvLMdFAiRAAiRAAiRQNASoroqGO1slARIgARIgARIwVwJU%20V+Z6ZzkuEiABEiABEiCBoiFAdVU03NkqCZAACZAACZCAuRKgujLXO8txkQAJkAAJkAAJFA0Bqqui%204c5WSYAESIAESIAEzJUA1ZW53lmOiwRIgARIgARIoGgIUF0VDXe2SgIkQAIkQAIkYK4EqK7M9c5y%20XCRAAiRAAiRAAkVDgOqqaLizVRIgARIgARIgAXMlQHVlrneW4yIBEiABEiABEigaAlRXRcOdrZKA%208RO4cOGCtbV1VFSU1NU5c+bUqFFDOtWQQMlOnTppKCAuffrppyNGjFBbrHTp0gcPHlR7SXNmaGgo%20ui0dVatWHTNmTHp6uuZavEoCJEACeiRgq0dbNEUCJGBmBLJzDmlQSqdSvmoiMzMThVXzlXJQJisr%20SylTnM6bN69mzZpqL2nOhEGYPXbsWIUKFZA4e/Zsnz59qlWrNmjQIM0VeZUESIAE9EWAvit9kaQd%20ErAgAnXr1v3555/hFnJ3dx85cqQY+e3bt9u0aePm5larVq2TJ0+KTLi+3nrrLU9Pz8aNG+/btw+Z%20n3/++eLFi7vmHKLM7Nmz3377bZFOSEiAqLp06dKMGTPCwsIOHDjQrVs3+Ld8fHzKlCmzc+dOFIN0%20Q6MBAQHQT19//XX79u1FXfmrr69vyZIlS5Uq9cYbbwQFBV28eBFXjxw5Uq9ePScnpxIlSsyfPx85%20Y8eO/f7771u2bOni4tKiRYvo6Ghk3r17t0OHDuhz8+bNhw4diu4hU3UgyORBAiRAAmoJUF2pxcJM%20EiABTQRu3ry5cOFCiKSpU6dCfFy+fBmlu3fvbmNjs2fPnuHDh2/YsEHUf/fdd+3s7Pbu3du5c+cu%20Xbo8fPjw3r17X331lZWV1bBhw0QZiJtNmzbdv38fp7t27Xr69Cn0WUhISFJSUmJi4pYtW5DYsWMH%20RNLo0aNRBsLrjz/+WLRo0a+//oo+3LlzR9iRv8IaRBIu/fnnn4cPH27Xrh2u9u3bt379+sePH4dm%20gq6CZysyMhJD6N+//7Zt28LDwxcsWIBiEH4YCHrSsWNHtPLo0SNkqg5E3hzTJEACJCAnwJVBOQ2m%20SYAEtCUwefLkVjkH1AlCnVDt/PnzSJQrV+6VV175559/4AeCCIOygfaCH+iDDz5Yt24dVBRKVqlS%20ZfPmzUhs374drw0bNkQ4F3I+/vhjaCks5EF7IV8czs7O8DM5OjrCXyVE0urVq+GyglMKBaC3li1b%209qzs8/+h2KQTeNRQGB4vBGC98847rq6up06dgpMsNTUVZSAKBw8eLBJQY1evXj1z5gwkIPxeTZs2%20FR1WO5CPPvpIaoIJEiABEpAToLqS02CaBEjgOQEhcVJSUqQsyBFEi4tTrMqJBNQPhEtERAQSkFYi%20E0uHwcHBwqsER5RkAf4hpOXSR1waMGDAxo0bocDgo5JWFcUlLPBBWiGNxTs0hASMII5KXMXqpEgo%20vZ44caJixYqIwcLaYu/evREgDymINUHosxs3bmBVUSovDQT24aaCccgvSCtRAEIQibwGIhlhggRI%20gATkBLgyKKfBNAmQwHMCQoJAJElZUCqIWBKnkswSp4hzwopebGysOMWKGxL+/v5YYouLi0vOOeAT%20wqIh8j08PEQx6RX+KsShr1+/vlKlStWrV5fykZD7sUQ+YrCw6ifSt27dkheW0t7e3n5+fuhtr169%204Bg7d+7ctWvXENg+bty4+Ph4aDiUFJaV7KMiFiKfPHkit5/XQKTmmCABEiABOQGqKzkNpkmABJ4T%208PLyQpQSVuUOHToE5YR1Pairtm3bPi8hS9WpUwdq7Ntvv83IyICOWblyJS4iPh2ZM2fOdHBwgAz6%20z3/+ExMTI6v0PAlfUevWrRHwjtCo57l5pLDXA2LqIbCuXLkiQs7zKJibDY8anFIQfLa2tsJthg0j%20cE3tNg3wumEziPHjx0OEYRSnT59GSe0HorknvEoCJGAhBKiuLORGc5gkUBACv//+O9RGjx498CQg%20nEA9e/YcNWoUDMHfo+TyQeg6CiM2HMtqjRo1qly5Moohc82aNatWrcKiIYKfEPZUu3ZteT/kDrB+%20/frBY4RW5AWUWhGXfvzxRyzYoQnINTwwiBblVVTT8GDhaUEExTdo0KBs2bIIAoNYhHaUwupFlZwx%20Wdnb20NHIgwfxWbNmoWVRNjPdyCqjTKHBEjAkglY4akZSx4/x04CJJAvAUQ74Qk+eHTy1TEwhWB2%20rNxhQVBuFo8KYsVNrqXkV0UaTwJiFXL37t2ql5RyoOFgrUmTJvBF/fDDD5BK06dPVyqT1yk2VoBs%20QiAXotqhmUREl7wwQrXgD8NThFi+RAH45JYvX47tJEQZbQYit8Y0CZCAZRJgVLtl3neOmgReggCk%20khRFnm81hCiplkFUlmqmlINg+Q8//HDr1q2Iu5IyNSQg4N5//31UQUQXqohNsDSUl1+S4sbgjZPn%20S2lIQCg8+OGwfwQeeMTY4YqTrmoeiFSMCRIgAQsnQN+VhU8ADp8Eip4AfGNYg8Ojhdr8eI7oLkLg%20sdiH9UFstaDqf9JxSHhMEhtDYHcJrGbCQ6ajNVYnARKwQAJUVxZ40zlkEiABEiABEiABAxJgVLsB%204dI0CZAACZAACZCABRKgurLAm84hkwAJkAAJkAAJGJAA1ZUB4dI0CZAACZAACZCABRKgurLAm84h%20kwAJkAAJkAAJGJAA1ZUB4dI0CZAACZAACZCABRLgflcWeNM5ZFMigO2XuOWvKd2wQukrtpXHrqeF%200hQbIQESKAgBqquCUGMdEig0ApBWVFeFRttUGlL7A0Gm0nn2kwQsgQBXBi3hLnOMJEACJEACJEAC%20hUeA6qrwWLMlEiABEiABEiABSyBAdWUJd5ljJAESIAESIAESKDwCVFeFx5otkQAJkAAJkAAJWAIB%20qitLuMscIwnkSWDfvn1lypTJ83J+F0qXLn3w4MH8SpnJ9RYtWixfvtxMBsNhkAAJGJIA1ZUh6dI2%20CRg9AR2fSZw3b17NmjWNfpT66WBGRoZ+DNEKCZCAuROgujL3O8zxkUB+BFJTUwcOHOjt7V2lSpVF%20ixaJ4sHBwXXr1vXy8uratevjx4+Reffu3Q4dOnh6ejZv3nzo0KGzZ89G5owZM8LCwg4cONCtW7cR%20I0b4+PjAE7Zz58782iz666oDxHh//vnnqlWruru7jxw5UnRx3bp1NWrUcHZ2xgATEhKKvt/sAQmQ%20gCkQoLoyhbvEPpKAIQk8evQoOjp6x44dw4YN+/jjjw8fPgzB1KVLlyFDhuzevRuSYsCAAWgfMsvG%20xmbXrl0dO3aECEMtZIaEhCQlJSUmJm7ZsgUJGAkKCho9erQh+6sH22oHePPmzYULFy5evHjq1KnQ%20jpcvX7569Wrv3r179eoF+ejq6oocPbRNEyRAAhZAgLuJWsBN5hBJQCMBaKYVK1b4+fk1bdr0yJEj%20q1evrlChQsOGDXv27Il6EydORLzR8ePHz5w5c+/evVKlSqHYpk2blEzCuzN//nxHR0d4fdq1a6d0%201dhOf//9d6UBCrE4efLkVjkHBFZoaOipU6cCAwPHjx+P/tevXx/a0dgGwv6QAAkYJwGqK+O8L+wV%20CRQeAX9/f0gr0V6dOnVOnjyJYKxjx44hYl3qxLlz5+C8gbQSOVhDlC6JRMmSJSGtkHZxccnMzFS6%20amynt2/fVhpgREQEOglZKboKsYhRYDFUiipzcHCoVq2asQ2E/SEBEjBOAlwZNM77wl6RQOERiImJ%20SUlJEe1FRUUhAKtEiRLdu3dPzjni4+MPHToETw8W/p48eSKK3bp1S6l/pvXbLKoDrFWrFkaEX3WU%20jwui8/79+1JOZGSklGaCBEiABDQQeOFPiYZyvEQCJGCuBCCtsPwHV82lS5c2bNjQvn17RFYhMv3C%20hQtw2CAUCeHqWBeDKwtrZBBbK1euPH36tEnTUB0glkdVR9SpUyfsWLFnzx4488AhPDxctQxzSIAE%20SECVAFcGVZkwhwQsiAC8NXhEDhpi1qxZWVlZ/fv379evn62t7bhx41q3bg1VgUXAuXPnYtUPT88N%20HjwYWzBg9RCRVVgolDCZluMK3cZjj0oDBAeMQmkgCDiDoEQ4PziULVs2ICBAGjITJEACJKCBgBX+%20ami4zEskQAJFSwCf94XzJsWaIHZbELFTYsjwZmEpEJss4BTCC4/RQXt5eHjY2dlBYGFfzcaNGxct%20HB1blw9Qgylsc4XFUyk0TUPJQrtUaLOi0EbEhkjAzAgU0h9uM6PG4ZBAoREwns9RrBjiwTrs1IAt%20G5BAnLuSp6fQmLAh45kVvBckQAJqCVBdqcXCTBIwFgLG8zmK8CxsaoV9Ctq0adOkSRNjAWSR/TCe%20WWGR+DloEsifANVV/oxYggSKkAA/R4sQvtE2zVlhtLeGHSMBQYDPDHImkAAJkAAJkAAJkIA+CfCZ%20QX3SpC0SMCEC++8FL7wyNyT+hoe9ZxO/pmPrf+flUFyb/t9Pjhx54hOU/O0/K13t3ESVe0kRU89O%20PPf4TGpmanXPGl/U/aqhTyNxqcANadOZvMpE/X3i0rLF8aG37d3c/QIb1//kC3u33K7mVSUjNeXK%20iqURhw4kP4hy9itRvkPHau/1tXFwQPmszMwrK5fe3bcnOTraNSCg4ptdq/R4V9hJfvjg7JyZjy9e%20yExL9axctd6wT4vXsJSftc6LJPNJgAS4Msg5QAJGTcBAa0B/hf/f6JOfykde2iVgx+t77W0UYkLD%20kZWd9fU/o/4vbAvKHO9y1tPBE4knqTGddraJS4uTKlpbWS9v9Udj36ACNySZKkDi3tHDx7554bcO%203cqW67DiT2tbTd8nj4wZef/EUXlzpV5t+eqU/yLn70nfh+154aepq/cdUPfD4elJiX/16pEam7vJ%20Kkpa2di0mbfEu6Zib1LDHQaaFYbrMC2TgKUR4Mqgpd1xjpcEikEhzb/8C0D4OvoteHXp4GofIQ3n%2006Y7GzXQiUq+/+OZ8VBRQlrJS66+sVxIq9F1v/6pySwXW1fRRMEaklsuWPryit9Q0a1c+dd+W9Xg%20s1FIJ4SHhe/bo8Hao4sXhLSq2Llr2wVLA1q1ReHIo4eSou4n3A0LC96F04pvdYNEg+RC+ubGdalx%20sSGbNkJaQVE1/X5SqzkLHb29s3O8XBoa4iUSIAFLIKDpm5wljJ9jJAELJHAz7vrtBMVP2Qyv9VnL%20Um3wb19kcGjC7V13t1+LvXIj7houfR84qZpnDYiwo1GHxemDpw/+DFmtFteuiL+Q/4pf80HVP0QC%20phZenfv3gxNnHp7Kq6H3KvdRa0r3zMR7EbE3rsNO7UEfelWrjn9hwbtjrly6u3+vo6fX5ZVLcKl8%20hzcqdekec/3q2V9mKE47ds54+hQJa3v7+p+NtHVwrNHv/YiD+5Dz9OHDh+fPFMvOxhJh/eGf2zo5%20NfxsNFRXZkrK/RPH7h7cizKlX21Ztm17JLCSeH7eL1BpWGSEEeTwIAESsEwC9F1Z5n3nqC2aAAKn%20xPgbPAuNaugTiBzkd6vQ80LMOYRPfXtqzJlH/867/AvS7nbuUFoBLgEDq32Af418lLdjuJ98D9Wf%20W/PNjbi6Enslr4ZEviFek6OjhNniNWuLhFinQ75/46DsrOzHly6emzsbHql/p01GOjkqqkyrdpBH%207Zf/0WH5H1bFrHAJrinUhaKCOEOsFdIeFStBWiHh7O/v6K3YYRUGxSVZQ7ktPn2gqMKDBEjAYglQ%20XVnsrefALZfA/eTcXyb2cvASFIo7eCMR9TSqbvH6A6t+gPTlJxf7H3g3u1g2pNWPjachp4J7pS/r%20fYN//ynZCqfSEZv6BJHsOJVZU4gPHHfiQ0RCdim3IcNtQJ/8TNkgnl207uChCA5DvpW1dZOvx8NB%20lZmauvfD92NDbiC/0VfjEPDu5O3jWamyW5myIVv/t7PP26E7t+NS0LgJNvb2wqC9u4ewhldhMPF+%20ZFq8ItTMwSP3koOnoiEcUh/EKV9JgAQsjQDVlaXdcY6XBJ4TQFyUOIHDBoms7EzIqRG1v6jkXjnn%20VHH124YTfZ38RDG1r6gi8jOzM5UKZBbLta+2IaXC+jrNzspttNizjgnLiIhCwr1ceawYIpGelITX%20Cp3eLNm0mSggXiGz3CtUhA7D6YVFc5Oio7JzKMnM5hbPzsgQKemS9Lti2RnKKHLr8D8SIAHLIEB1%20ZRn3maMkARkBX0dfcZaQniASsWmxSPg5+eNZPzw2+HbFXiIfjqv2AR1FOq9XbOhga6WI4Ex8Zi0u%20xxpyyrqUE7XUNpSXQR3znXxyR5eekChMpSUohunkl6sRK3XtYW1nJy5V6tJDJLCxQnx4WErsEywR%20vr5ybZv5ivAshHCF790tDAo1JgqnJcYj4VKqtK2zCxJ4clDkpyfm8pTaEvl8JQESsDQCVFeWdsc5%20XhIoVsK5pKBw7UluXBSC2ZFTwkmRH5sau+TaQlEgPj1+7uXZIp3XKwQZZBmuXn0WZXX1yWVRGNFa%20IqG2obwM6pjv7KfoDI6427nrkiIh5V9auigrPV2UwVZVwvP0z5QJu/q+ffZnxf4LOLyqVhc7XcXe%20vO7sq5BlCeGhWTnOqrSE+KcPHiAH+cJm3O1bijpAd+umSDj55vZBnPKVBEjA0ghQXVnaHed4SaBY%20ZfeqItBq2fVF2Ihha+imizHnwSXIX7FGNvXchEcpD5HwyXFxLbu++Pzjs5qpNc2peCBy7/GoI7fj%20b/0eshLlK7pVauTbRENDmm0W+KprQBnhOrq2dg28Sg/O/Bv97z+w5h/YGK+PLp4XEevYAQunjy9f%20vL72dyTcy1XAKzbKenL9GvYODdmyEbFZyPGoWBmbkSKRnph4Y/0fmWlpl1co3FpYOvRtEOjXsBHS%20d/cFQ2ClPIkRlqHM7F1dkc+DBEjAYglwN1GLvfUcuGkQMNC+kb9dXTD74nQ5Amdb571vHD396NSI%20Y4rtrzqW6YwArK67O6ZlpZVzrbC5/V+OtrlbDCy5umBWTl1pN9HQhDudd7WTgquE2WlBs98s1zWv%20hjyfBdTL+6Cv9M3/rTv7y0xYw/ahwuFk5+rWeeM2bEy1Z2DfxIhwJ1+/DivXHv9uzIPTp7BK2H7p%20GrzuHtAL+62jlq2Tc8bTZCTsPTzaL1mDhwT3f/Lhowvn5AaxgIg9rvDM4I73uoqILhgXiWaTpgX8%20pzUKG+4w0KwwXIdpmQQsjQB9V5Z2xzleElAQGFTtw6E1R4h4KZyWd6u4otWfEFgTTo/Dqae917gG%20PyBzRO2ROA1LvLPgyhwklA5baxuRU96twuIWK7A3qTh1tHFEdUgrnKptyKDSCo1W7vZ27SFDIZiE%20tEKUeutfF9o5u+CHbiCtUCBw1Fi4lxp9+Y2NoyNWCf+ZOsG1dECLGb+gJK4KaeVTt37LmXMhrZDT%207MefSgS9goTCoJVVufYdA7/8Gqe42nL2PLE+CGkFWYZ8Q0srtMuDBEjAyAnQd2XkN4jds3QCBvVS%20pGWmhSWGetp7an4qUPt7gHXGtMzUsq7lbZ4JL1FX7w1p0yUooYSIcAd3D8fi3tqUF2VS4+OePnzg%207F9SdXUP64xJUVHQYbaOyjuFwomVmZbiWrqMeNhQ++YKVtKgs6JgXWItEiABOQGqKzkNpknA6Ajw%20c9TobokRdIizwghuArtAApoIcGVQEx1eIwESIAESIAESIIGXJUB19bLEWJ4ESIAESIAESIAENBGg%20utJEh9dIgARIgARIgARI4GUJUF29LDGWJwESIAESIAESIAFNBKiuNNHhNRIgARIgARIgARJ4WQJU%20Vy9LjOVJgARIgARIgARIQBMBqitNdHiNBEiABEiABEiABF6WANXVyxJjeRIgARIgARIgARLQRIDq%20ShMdXiMBEiABEiABEiCBlyVAdfWyxFieBEiABEiABEiABDQRoLrSRIfXSIAESIAESIAESOBlCdi+%20bAWWJwESKEwC+EU5HIXZItsyfgKcEsZ/j9hDCyfAX3G28AnA4ZMACZAACZAACeiZAFcG9QyU5kiA%20BEiABEiABCycANWVhU8ADp8ETIPA+vXrTaOj7CUJkAAJFCtGdcVZQAIkYAIErl69agK9ZBdJgARI%20IIcA1RUnAgmQAAmQAAmQAAnokwDVlT5p0hYJkAAJkAAJkAAJUF1xDpAACZAACZAACZCAPglQXemT%20Jm2RAAmQAAmQAAmQANUV5wAJkAAJkAAJkAAJ6JMA1ZU+adIWCZAACZAACZAACVBdcQ6QAAmQAAmQ%20AAmQgD4JUF3pkyZtkQAJkAAJkAAJkADVFecACZAACZAACZAACeiTANWVPmnSFgmQAAmQAAmQAAlQ%20XXEOkAAJkAAJkAAJkIA+CVBd6ZMmbZEACZAACZAACZAA1RXnAAmQAAmQAAmQAAnokwDVlT5p0hYJ%20kAAJkAAJkAAJUF1xDpAACZAACZAACZCAPglQXemTJm2RAAmQAAmQAAmQANUV5wAJkAAJkAAJkAAJ%206JMA1ZU+adIWCZAACZAACZAACVBdcQ6QAAmQAAmQAAmQgD4JUF3pkyZtkQAJkAAJkAAJkADVFecA%20CZAACZAACZAACeiTANWVPmnSFgmQgCEIHDt2LDw8HK+GME6bJEACJKB3AlbZ2dl6N0qDJEACJKAv%20ApcuXWrTpk1sbKynp+f+/ftr166tL8u0QwIkQAIGIkDflYHA0iwJkIB+CFSrVq1x48bp6el4RVo/%20RmmFBEiABAxJgOrKkHRpmwRIQGcCdnZ27777rvSqsz0aIAESIAGDE6C6MjhiNkACJKAjgVatWrVt%202xavOtphdRIgARIoHAKMuyoczmyFBEhAJwJpaWn29vY6mWBlEiABEigsAlRXhUWa7ZAACZAACZAA%20CVgGAa4MWsZ95ihJgARIgARIgAQKiwDVVWGRZjskQAIkQAIkQAKWQYDqyjLuM0dJAvojEB8frz9j%20tEQCJEACZkiA6soMbyqHRAJ6JIBN0mfMmCEMXrhwoWzZsgEBAZL9Dh06bN26VTr9888/X3311cqV%20K48ePTo5OVnK15woXbr0wYMHNZfRcPXTTz/95JNPUGBXzqGhpOZLM2fODA0N1VyGV0mABEhAGwJU%20V9pQYhkSsFwCYWFh06ZNE+Nfv359w4YN4+LiMjMzp06d2r59+z179qSkpIiru3fvhtAZOXLkmjVr%20goOD58+fryW1efPm1axZU8vCqsUG5hzI/+uvv7Zt26ZaQMsciEiqKy1ZsRgJkIBmAlRXmvnwKglY%20EIEDBw5AMIkB37x5s06dOnApvffee0+ePMEm6Z9//jkEE3K6detmZWXl7u7epUuXUqVKSYAWLFiA%20Mt27d2/SpAlMYQtQ6ZKUWLp0aadOncTpgwcPqlevLnxj0HDIhCarW7eul5dX165dHz9+vGrVqo4d%20O4rCb7755tixY5HG1gz4MZyLFy+KfLxu374dumrcuHErVqz4/fff0StkKplCDvq2ePFiWMaB39VB%20MQzBxcUF/UxNTa1Xr97Dhw/79euHMUI7fvvtt+XKlfP19e3Tpw/UpFL1EydOoJ+Ojo4VKlTYsGED%20rvIgARIgATkBqis5DaZJwKIJJCYm3rlzRyDAut6NGzcgsCBKIEFmz57dt2/fli1bBgUFYdXP2tp6%20eM7h4+MjIbt8+TIESvny5SE7evXq5eDgIF2SEs2bN9+5c6dwEUES2draYqkxJCQkKSkJAguKZ8iQ%20IfCBJSQkDBgwoEGDBkg/evQIVyGhxBLk33//ff/+fbmvCyotKioKIgnbjbZo0eLLL79UNYUO3Lt3%2076uvvoIuHDZs2OTJk69evQpHF2zu2LEDP1+IZUEME2OCvpwzZ87cuXOnT58O5XTmzJkPPvhAqTpc%20dIGBgadPn+7duzc6nJWVJQ2QCRIgARIAAVtSIAESIIG8CHh7ezdt2hTbeAqHU6VKleD1QWSV2vLw%20NsF7hNCr4sWLQxtByuBUqSScVfASQdZAoEAwyf1bcDth2bFnz56oMnHiROgkVIf2grdMdAM/5wyl%20hdPXX3/dxsZGyTKcSRB2GRkZ6N6UKVOUTKEiylepUmXz5s1IQA/16NEDShGK0MnJCVfhtXJ2dsZg%20ETS2fPlySDTRN8is1157DbpTXn3ChAl3796FF+27776D4kSj3OlU6XbwlAQsnAB9VxY+ATh8EtAb%20AbisPv74Y6zlQbV88803e/fuVWsabi14jCBNELP1zjvvSGVu37597NgxRLjjgELKzs6OiIjo3Lkz%205BRW4lq3bg2zx48fxykypVpqE2pNoSSUkCiPBU0oJA8PD5h6+vSpkhEsVkKricz69eujJ8iRV//1%2011+ht+C+gvg7evQopZUSQJ6SAAlQXXEOkAAJ5BLAqhlCjsQJHFEvywWBSq6urqIWVtnS09PVWoBP%206MiRI1u2bKlYsSLCuaQyJUqUQMwWViRxYNOHQ4cO1apVC+oHIVwQVdBb8Gbt27fv1KlT8F1JtdQm%201JpCScgpUb5///4lS5aEZsIaJZxVSkaw3InFR5EZGRmJBAKw8CpVh+cM3cNyJELBfvzxR8R4KVng%20KQmQgIUToLqy8AnA4ZPAcwJQFVAb58+fR5Q3Aq3EBYRY4alABLbDhfO8qLoUlBDW1KA5II+woCY5%20ipTKYv0OXh88WihfFkQZOL0QkoVNHxCwtXDhwhEjRkDEwGUFDQR/VbNmzaCulixZAmcSwt6VbIpT%20dBX9hC9KrSl5FXjFEHrv6ekJ/xkWB4UQRHWEcCH9xhtvIAwLugqmEN6OkkJdSRYg79BDPz8/rCdC%20R2JlULrEBAmQAAmAANUVpwEJkEAuAcgIxBghlhwyC7FTIhfuJagZnF6/fh3OLRxyXvJTxCqhLjxS%20CJOCPoNAkZeUp/EcImLM5cuCuIqAdzz3BzkFvbJ69WqsvkHuQGm1bdsWNqGEEBSF9UTVZUEUE8bh%2038KaIxYQ1ZqSdwArmNgiC76or7/+Gi3iFFfREFYtsf3EDz/8gPgwqEAMHNpONXps1qxZWFjE1TJl%20ykBptWnTRm6caRIgARLgrzhzDpAACbxAIDo6GrIDQVQv5Gp9An8PNJBYRIMbDM4keVVoNSzJyXOU%200liaRBX5o4hKBbQ/1WwKi49wU0EIIsIdofqSmpTswwMHjZiXnwz+KoDCng5ubm5SFSZIgARIQBCg%20uuJMIAESMBQBPD9469YtuXU8e4in+eQ5TJMACZCA+RGgujK/e8oRkQAJkAAJkAAJFCUBxl0VJX22%20TQIkQAIkQAIkYH4EqK7M755yRCRAAiRAAiRAAkVJgOqqKOmzbRIgARIgARIgAfMjQHVlfveUIyIB%20EiABEiABEihKAlRXRUmfbZMACZAACZAACZgfAaor87unHBEJkAAJkAAJkEBRErAtysbZtnYEsBV1%20vj9Cop0lliIBEiABEjBtAviBBGyBa9pjsIDeU12ZwE2GtKK6MoH7xC6SAAmQgOEJyH9+yvCtsYUC%20EuDKYAHBsRoJkAAJkAAJkAAJqCVAdaUWCzNJgARIgARIgARIoIAEqK4KCI7VSIAESIAESIAESEAt%20AaortViYSQIkQAIkQAIkQAIFJEB1VUBwrEYCJEACJEACJEACaglQXanFwkwSIAESIAESIAESKCAB%20qqsCgmM1EiABEiABEiABElBLgOpKLRZmkgAJkAAJkAAJkEABCVBdFRAcq5EACZAACZAACZCAWgJU%20V2qxMJMESIAESIAESIAECkiA6qqA4FjNpAns27evTJkyBR5C6dKlDx48WODqrEgCZkCgRYsWy5cv%20N4OBcAgkYAgCVFeGoEqbxk5Ax59unDdvXs2aNY19kOwfCRiSQEZGhiHN0zYJmDYBqivTvn/sfYEJ%20pKamDhw40Nvbu0qVKosWLRJ2goOD69at6+Xl1bVr18ePHyPz7t27HTp08PT0bN68+dChQ2fPno3M%20GTNmhIWFHThwoFu3biNGjPDx8YEnbOfOnQXuDCuSQNESUJ35eCP8/PPPVatWdXd3HzlypOjeunXr%20atSo4ezsjJmfkJBQtH1m6yRgzASoroz57rBvBiTw6NGj6OjoHTt2DBs27OOPPz58+DAEU5cuXYYM%20GbJ79258cgwYMADNQ2bZ2Njs2rWrY8eOEGGohcyQkJCkpKTExMQtW7YgASNBQUGjR482YHdpmgQM%20RkDtzL958+bChQsXL148depUfKm4fPny1atXe/fu3atXL3yvcHV1RY7BekTDJGDyBGxNfgQcAAkU%20iAA004oVK/z8/Jo2bXrkyJHVq1dXqFChYcOGPXv2hL2JEycirOT48eNnzpy5d+9eqVKlUGzTpk1K%20TeFL/Pz58x0dHfHlvl27dkpXeUoCJkHg999/V5r54lvE5MmTW+UcEFihoaGnTp0KDAwcP348BlW/%20fn18qTCJ0bGTJFAkBKiuigQ7Gy16Av7+/pBWoh916tQ5efIkgrGOHTuGiHWpc+fOncN3dEgrkYM1%20ROmSSJQsWRLSCmkXF5fMzEylqzwlAZMgcPv2baWZHxERgZ7j+4boP75FYHpjlVwKN3RwcKhWrZpJ%20jI6dJIEiIcCVwSLBzkaLnkBMTExKSoroR1RUFAKwSpQo0b179+ScIz4+/tChQ/hCj4W/J0+eiGK3%20bt1S6reVlZVSDk9JwOQIqM78WrVqYRTW1i98QODbyP3796XRRUZGSmkmSIAElAi88OZRusZTEjBj%20ApBWWP7DN/JLly5t2LChffv2iKxCZPqFCxfwvRwRJwhXx/IHXFlYCoHYWrly5enTp80YCIdmsQRU%20Zz7WzVVpdOrUCVuZ7NmzB15evEHCw8NVyzCHBEhAEODKIGeCJRLAl3I8CYWPilmzZmVlZfXv379f%20v362trbjxo1r3bo1PjywCDh37lys+uEhqcGDB2MLBqweIrIKC4USLzquJBRMmDQBPA+rNPPxBsH0%20VprhiETENw0854E3SNmyZQMCAkx61Ow8CRiUgBXeJwZtgMZ1J4C/cbxNumNUawFrgthtQcROiQLw%20ZmEpEJss4BTCC09LQXt5eHjY2dlBYGH7xMaNG6s1xUwSMGkC8pmvYSDY5gqr6lLMooaSvGQgAvxE%20MBBY/Zrlx7Z+eRrEGt9LBsGqnVGsGOL5KezUgC0bkECcu9IXeu3MsBQJkAAJ6IcAPxH0w9HAVqiu%20DAxYH+b5XtIHxQLaQHgWNrXC4+ht2rRp0qRJAa2wGgmQAAnoiQA/EfQE0rBmqK4My1cv1vle0gtG%20GiEBEiABMyDATwSTuIl8ZtAkbhM7SQIkQAIkQAIkYDIEqK5M5laxoyRAAiRAAiRAAiZBgOrKJG4T%20O0kCJEACJEACJGAyBKiuTOZWsaMkQAIkQAIkQAImQYC7iZrEbVLTSWz3x02w1HBhlokTQMQuthnT%20PAhOfs18eNV0CWgz/013dBbVc6orU73dkFZUV6Z689jvvAng0yXvi7lXOPnzRcQCJkpAm/lvokOz%20tG5zZdDS7jjHSwIkQAIkQAIkYFgCVFeG5UvrJEACJEACJEAClkaA6srS7jjHSwIkQAIkQAIkYFgC%20VFeG5UvrJEACJEACJEAClkaA6srS7rjexpuWlobf4NObORoiAaMnwDlv9LeIHSQBYyFAdWUsd8K0%20+jFjxgxvb+9hw4Z179592rRp+XZ+5syZ+CHkfIuxgIEIHDlyxN/fX3vjvF+qrDjnVZmYRA4nv0nc%20JvPrJHdkML97WhgjWrBgwcKFC3v37n3s2DFfX998m8QnU2BgYPny5fMtyQIGIvBS+3fwfqneBc55%20VSamksPJbyp3ypz6Sd+VOd3NQhpLs2bN7ty5M2bMmMWLF69du/bQoUO7du3q06fP9OnTAwICwsPD%20u3Xr5urq6uXlNXz4cOwMWa9evYcPH/br12/+/PmF1MWCNrNt27Y6deq4uLg0adLkzJkzMFO3bt2r%20V68Ke506ddq/f798sBs3bpQGHhsbW9BmC68evsfjdjg5OZUoUULcjvj4eNO9X4UGzoznvJyhec9/%20Tn75vWba4ATEvnx8NWYCmASq3VObqVrMEDnBwcHwV/34448hISFdunSZOnXqunXr3N3dq1Sp8uuv%20v+K0UqVKp06d2r59OzTWX3/9hfK4ivybN28aoj/6sonh2NjYjB8//ujRo2+++SaGA8uOjo5nz54V%20TSBn69at8sH++eef0sAzMjL01RO92zl8+DBuGcyWLVu2f//+EI7ff/+9m5sbtC8Wdo3qfmkzsbUp%20o1+G5jrn5ZTMdf6b0OTH7dBmbmtTRn5nmS4SAlwZxETl8XIE2rVrB+dH48aN8aks1UxMTMRnNnJm%20z54dFxcXERHRoUMHeHoQ7oNPdGdn56ZNm1auXFkqb4QJSKUGDRpMmDABfVu0aNGyZcuePn2qtp/S%20YNevXy+l1ZY0qszMzEx4HN955x2oXsjfhISE1NRUOzs7E71fhcnWXOe8nKF5z39Ofvm9ZroQCFBd%20FQJki2gCa4JCbA0ePPj8+fNYL4Mvp2PHjohWMZXxI+4ey4KityVLlhw3blxePZcGiwLydF7ljSQf%20njnIYgiFGzduoNuiV6Z7v4qcqnTrzYOhec9/Tv4if79YWgcYd2Vpd9xQ4/Xw8BCmY2Jifvrpp8eP%20H2/evBlraliBMlST+raLQLEHDx4IqwgUg5snKSkJp/jWKzIxNJGQBotTeVpcNdrXa9euDRo0CKoR%20sVY7duxAP/GjZqZ7v4qcs3TrzYOhec9/Tv4if79YWgeoriztjht8vHiYv2/fvmjm9ddfRwA1PFhI%20W1tbQ7ikp6cbvHkdGmjbti3Ca44fP44FwUmTJv37778Ib0e4EmKtsGz/22+/QTLqYL7oq0ZGRtra%202rZs2RJdmTNnDl5xR0z3fhU90Gc9MA+G5j3/OfmfzVb+X0gEqK4KCbS5NgPnB5STfHSjRo2Kjo7G%2092B8s8fTdjjFVfzh7tWrlzY7Y8lNFXIacvCLL75o3bo1On/69OkpU6agA2PHjkUCcWOrV6+uWrVq%20IXdJX83hNuEICgpCYBnC4Dw9PaEgMUzsWGa690tfcF7WDkiazZyXj91c53/O3Ofkl99qpguDgBW+%20lBdGO2xDBwL466B6m9Rm6tCInqtiZQ3Po73UDpZ67kFBzcHZhoWz4sWLSwYQt45d6X18fKQck05E%20RUVBXeFZSES1I6QdCQzHeO6XNhNbmzKFf4+Mh6EuYzfv+W/kkx83Tpu5rU0ZXeYA6+qFgJqPbb3Y%20pRE9ElD7XlKbqcdGaYoEioSANhNbmzJF0nk2SgI6EtBmbmtTRsdusLruBF5Y09HdHC2QAAmQAAmQ%20AAmQgIUToLqy8AnA4ZMACZAACZAACeiZANWVnoHSHAmQAAmQAAmQgIUToLqy8AnA4ZMACZAACZAA%20CeiZAPdq1zNQMzCXnpU+99LsPRG7IpPvlXMt17V8z4HVPkAcpTZD23Jn47rbf9T2qjuu4Q9S+f33%20ghdemRsSf8PD3rOJX9Ox9b/zcsh9Ik/DJam6HhPHrz3+/VBE6INkNyfbeuU9Pu5YwcPFTkv70/53%20415Myruvlm5ew1tU2Xfh4da/7ytVH/9uNR93h+jYlHl/3blyNyEtI6tiCZch7crVLueuVFJfp1F/%20n7i0bHF86G17N3e/wMb1P/nC3s1Ns/GM1JQrK5ZGHDqQ/CDK2a9E+Q4dq73X18bBAbWyMjOvrFx6%20d9+e5Oho14CAim92rdLjXWEt+eGDs3NmPr54ITMt1bNy1XrDPi1eo6bmhkzlqi7zcOzfo8IS7wyu%20PrRd6fZivBreQfeSIqaenXju8ZnUzNTqnjW+qPtVQ59GhUapAPMfTyuvP3bv4KVHYQ+eerrYBlby%20er9tWW83e/SZ899s5n+hzUCLaojPDJrA7Vb7hIjaTL0M5rNjw4Lv7ZKb6ldl4NcNxstz1Kajk6P6%207O8JTRbk98ryVn+IMn+F/9/ok5/Ky5d2Cdjx+l57GwcNl+Tl9ZU+cPHh5A035NZKeDos+7ShvW3+%20HtyjVx7/sPYa6n7+ZqXOjUsIIzO23Nx1Jndvd8nsqs8DXRxs3p9zJuGpYhtVcVhbFZsxsHbd8rnb%202T/L1sP/944ePvbNaLkht7LlOqz409pW0xenI2NG3j9xVF6r1KstX53yX+T8Pen7sD075Zeq9x1Q%2098Ph6UmJf/XqkRr7RLpkZWPTZt4S75q1pBy9JLSZ2NqU0b4zuszDvRG7Pz0+FG19Hzjp3Up9RKN5%20vYOepMZ02tkmLi1O6pu1lTXeKY19g6QcwyUKNv9VJ3np4o4LhtVzdrBVvYTOc/7reAe1mdvalNGx%20G6yuO4H8P1d0b4MWTIjAtdgrQlq1KfXakparG3gHovNrb/3+4Gm0hlHsidg55u8v3tjVDtJKXiwr%20O2v+5V+Q4+vot+DVpYOrfYQ0vr5vurNRwyW5BX2ls7KyVx+4C2v42j2pT413Xi2NdFRs6u4zmsaF%20Mkv3hn254pKQVkqdgQ8MOS1qeo/sUkn65+Vqt+lkpJBWH7YvP7ZHFWcHm6zsYqtyWleyoPvp5RW/%20wYhbufKv/baqwWeKjVsTwsPC9+3RYPnRxQtCWlXs3LXtgqUBrdqicOTRQ0lR9xPuhoUFK4R1xbe6%20QaJBciF9c+O61LjYkE0bIa2gqJp+P6nVnIWO3t7ZOV4uDQ2ZxKUCz8OfL/530ME+QlrJR6rhHbT6%20xnIhrUbX/fqnJrNcbF2l1uUWDJEu2PwPe5C8+6zi+0OVUi5fdqvcoKLi6wE8uPvOP0SC8x9eXkPc%20LNo0DwKavuCaxwg5ipcisOeuwm9hY2UzsdHU4vgIdfDutqdTelbattAth+7vy8zO9HH0nfXK3Iys%20jM+OD01IT8Aa37xXfzt8/8D/hW2RGrIqlruMeDPu+u2EW8gfXuuzlqXa4N++yODQhNu77m5v4NMw%20r0vvVc71AUgGdU/gkyD80VPY6de6TNNqxfHv+NWYiMdPD15+7OZst+lEJC61rOXTo1mpi2Hxv+0J%20lU63nLz/NC33dwaRKR1YMRGfLm3q+jat6pWRme3kYCOuHrqk+MGchhU9hIa7++gpliPP3YmLS073%20cNZ2IVJqSEMi8V5E7I3rKFB70Ide1arjX1jw7pgrl+7u3+vo6XV55RJcKt/hjUpdusdcv3r2lxmK%20046dM54qOFjb29f/bKStg2ONfu9HHNyHnKfYDfP8mWLZ2VgirD/8c1snp4afjYbqykxJuX/i2N2D%20e1Gm9Ksty7ZVrH9hJfH8vF+g0rDICCPIMdFDwxT1sPdYfXM5xvV6mTf6Vx10+uGpmRd+kk7X3FyZ%20nKH4GUqlI6930P57e3dF/IXCr/g1H1T9QyTwRlh4de7fD07Epj7xdPBSsqPf04LNfwd7a7Hb9Nge%20Vcv5Ojes6Nlr5r/o2K3oZM5/85j/+p1mtCYnQHUlp8F0schkhc4o51oe0gqJap418A07KSMxIT2u%20nneDZdcXI3PptUXx6XFHog4hPbmxYjmpXekOiKlCYv2tP1EYCXHcz7GGdINnwSUNfQLxoYJ8DZee%201dbn/9FxqcJc7bK58U+1y7pBXT2ITW1WrfjK/eHQQDciE+uUd5+5JQT5Lo42LWsrCPRqUTohJSM+%20OUN8iZf6BL9XSloWTv84fPfH9deysopV8HfGumGtsu4PctpCQqlF5OtXXSVHR4kmitesLRJYp4O6%20Qr5/46BLy39DOvbmDb+Ggf9OmxwbcsPJx7dMq3aImvIPbGJjbw8RDGcVXFOoC0WlEGc5a4IeFStB%20WiHT2d/f0dsn5fEjGEQYFnJkDeW2+PRBtFuZcqJ1U3zVMA/blH5t7uXZdxJuX35yMdCn8Xf/jsXU%20dbNz6xDQCSP9oPowvAsgjDaHbpQPPK930P3ke/iHks/fC76Nil1VVEUVQ6urgs1/fE9wd7LF1wZI%20K/kYPZxtOf8FEFOf//LbyrR+CXBlUL88Td5aVI4eKu6gEBbiKJ4TgY4PoRG1R1Z0q4TMOZdmLr+u%20WJBqVbJttwo9FYlSbb+s9w3+lXMrj1PpuJ+cG/Tt9eyrubAc9TRK+lRTvaT6sz+SwQInHj5TV/hg%20EEY8XRVupEfxqXa2Vl91q4LQKPifPll0HtIK+Z90qojgdCR6tyzzUYcKfVqWEbWk19BoxbIgjpuR%20SZBWOO5EJ3+54vKd6CREsuNUElKiIeRIfVCU1seR/CB3WRPx7MKeg4dC4yIfv4TX5OvxcFBlpqbu%20/fB9SCvkN/pqHALenbx9PCtVditTNmTr/3b2eTt053ZcCho3AXpLGLR3fx4fJgwm3o+EVt83AABA%20AElEQVRMi1dECzl45F5y8FQ0hEPqgzg1uVcNU9Te2n5KkxkIjUKU+rv7ukJaYXTfNPjB31kRePdR%20zeGY8ENrjlAacl7voLCEUESyo7BswvuIuqKKkh39nkpz76XmP1y5m74O+n1kI3Qm8WnGlI25YYuB%20lTw5/8UNMvX5r99pRmtyAlRXchpM5xLIyH4ekS2ysCboYOMgPmyyiyl+mxLOqgmNpmqJDPEloqRY%20NMzKzlSYyDnUXZIuPiukv/8zEQOVc4jFy0xIuexiNcq4vd1cEYklLjarXvy1+n6a20xMyfDzcCjp%205Ti5b42/vntlUNuyKA9dtfNZIJfUkGQH6k1K6yWRLWSdwtYLlhERhSz3cuWxYohEepJiAatCpzdL%20Nm2GhHRAZrlXqAgdhpwLi+YmRUdl59wmmdncstkZufNBuiT9PGl2hpplU6kJE0qonYfw1w6spmAo%20rrYt9VqX8t21GZTad5CoiLeSkgXVwkoF9HgqTcuXmv9YLh+64Bxe0ZNuTUvi+QzOf3FTzGb+63GO%200ZQgQHXFmfACAR8nX5wnpidKuXFpsUj7Oym+r9f1rl+veANxqXWptr45haWSqglfR4U1HIjQEonY%20HGt+Tv5+jrnyRfUSvAWisB5fi7vaC2tJqbmfbfE5z/T5uNlbw21VrFj3V0pJzb3RyF9K55WA/Ppj%20VKPVXwQGVS1ub2fd6z8BiGdH4fsxKTY5BpNTcxVJQnJuAmosL2sFy8dKn6iYnpB7v9ISFJyd/HLZ%20Vuraw9ouN9KrUpceojA2VogPD0uJfYIIqtdXrm0zfwnyEcIVvne3MCjUmCiclqj4QHUpVdrW2QUJ%20PDko8tMTc2+o1JbIN7lXDVNUzMP+VQZKg+pZqZeUziuR1zsowKWMrZXCb5r47L0g3lnIKeFUMi9r%20+srXZf7/eThi1LKLWAq0s7Ea+nr54Z0qolec/+LWmPr819cEox1VAvr/GFNtgzkmRED8oQ9PDE1K%20Vzg8IpPuxacrPl9LOCs+ALAt0NnHp8VwtoVtvvD4nEjn9Spq4eq1J1dEGTxRhQRa0XApL2u65Pt6%205KqrW/cV48IRkpPwfaZ4Fu8OzclWvCzaHSpW96Qc1QTK/7ju2oKdd8Ql+HLwWBbS2N/Bx13RVkjU%20Cw0hR2pLVNH91dkvVwXG3Q4R1kRCyr+0dFFWerq4hK2qhOfpnykTdvV9++zPioA5HF5Vq4udrmJv%20Xnf2VciyhPDQrBxnVVpC/NMHikfGkC9sxt2+pahTrFjsrZsi4eSbvxIVJY3zNd95OOPCcwftjPNT%200nJW9zSMJa93UEmXUvhSgYpXc94CisSTy8JOSefnyl6DZV0uFXj+4wkPPDaLqV3Gx2ne0Ho9mylc%20vDg4/wUHU5//YhR8NQQBqitDUDVhm0F+isWjtKy0Xy/PepTycPbF6WIw2MIqNjX2h9Pf4BSBvVgl%20xFrJ1/+MEqEkeQ24sntVEWi17PoibMSwNXTTxZjzKBzk30zDpbys6ZJf3s/ZM2fj0PVH72Grz+Bz%20D67fU7hhGlRQBBJhl0VsjYhE8Rz/U/jDpyv2hWtuDgFbhy4//t+JyN1no1PSMlcdvBuX46OqHuAm%20bJ64FnM6JDb8YfKWvyNhqqyPkzCu2exLXXUNKCO+Ol9buwZepQdn/o3+9x9Y8A9sjNdHF8+LiHXs%20gIXTx5cvXl/7OxLu5SrgFRtlPbl+DXuHhmzZiNgs5HhUrIzNSJFIT0y8sf6PzLS0yysUbi0sHfo2%20CPRr2Ajpu/uCIbBSnsQIy1Bm9q6uyDfdQ/M8xNcJ8TAsHpXFGG/Fh8y5NEvzYDW8g5r6K95cByL3%20Ho86cjv+1u8hK3GKWEZhXLNZHa8WbP5jO9x1R++Jpj9oXy7pacbF0Dj8w04NnP/AYgbzX8d5xeoa%20CHA3UQ1wjOWS2r3j1Gbqpcc9g9+88uSS3FTrUu2w7cJXJz/fHr4V+T83mw+f1vTzk5EeUHXwmPrf%20SoVF3aZ+zZa1UnyQ4/jt6gJJookcZ1vnvW8cxUNSGi6Jkvp9xQIHvoXLbTraWyNi16pYscFzzz5J%20TIf8+m14/e//vIYPFWxNP3tQHWmD9ciYlP4/K5x20m6i5+/Efbny0vPApxy7CMNaPLz+44S0QXPO%20PIvvym0QG1+1q5e7YCfvg47pm/9bd/aXmTCC7UOFw8nO1a3zxm3YmGrPwL6JEeFOvn4dVq49/t2Y%20B6dPYZWw/dI1eN09oBeeHEQtWyfnjKfJSNh7eLRfsgYPCe7/5MNHFxQuSckgFhCxxxWeGdzxXlcR%200QXjItFs0rSA/7RGYT0e2kxsbcpo36W85iGE5Vu7X3uU8gjfELZ22DXi2EfYYx2Bg6vbrJc2WL+b%20GN7hr5ZoS76baF7voNCEO513tZMCvEQPpwXNfrNcV+17W+CSBZj/wecf7Pg398kJebuvVCves1kp%20zn/zmP/yO8u0HgnQd6VHmGZiav6rSyCPpMFgs5+pTWYejz4qpFX7gI74h+1/6havjzKrbiy7HHNR%20KiwiS6RTJAZV+xDPVUn55d0qrmj1p3j+XMMluQV9pbH7VN+WASIoCjYDvJ1mDqyNJ/uWBIdBWiHn%20kzcqernaj+5aGfElWOn77+ab0tOLNipvlHoVPL5/t3qA9/OtnhpX9vzv+7Wc7G1geWq/WuLXQmDW%20wc4aTyAaQlrBeOVub9ceMhSCSUgrRKm3/nWhnbMLfugG0goFAkeNhXup0Zff2Dg6YpXwn6kTXEsH%20tJjxC0riqpBWPnXrt5w5F9IKOc1+/KlE0CtIKAxaWZVr3zHwy69xiqstZ88T64OQVpBlyNe7tEJD%20hX/kNQ9nXZwGaYX+jGvwg7ejz6TG0+2s7fFIx7h/vpQmhtoYQbXvINgp71ZhcYsV2FlXjNHRxhGW%20C0daocUCzP/Ixymiq0qvtjZWnP9mM/+Vbi5P9UWAvit9kTSgHbXf1NVm6rET8Wnx2J6njGs5uJp0%20N5uWmRaWGOpp7+nrpOy/0XBJ93ZVLaRnZGGzafzOoKR+VMu8VE5MQlpMYhq8Vi6OyrvHYQkS8Vul%20ijtJku6lLGtfGEooISLcwd3Dsbi39rVS4+OePnzg7F9SdXUP64xJUVHQYbaOz+WjsAwnVmZaimvp%20MuJhQ+2b07KkNhNbmzJaNicV0/s81PAOwio54rfKupa3sc7dgVbqhqETnP8SYc5/CQUThiBAdWUI%20qnq2qfazRG2mnhumORIodALaTGxtyhR6x9kgCeiBgDZzW5syeugKTehGQGXBQzdzrE0CJEACJEAC%20JEACFk6A6srCJwCHTwIkQAIkQAIkoGcCVFd6BkpzJEACJEACJEACFk6A6srCJwCHTwIkQAIkQAIk%20oGcCVFd6BkpzJEACJEACJEACFk6A6srCJwCHTwIkQAIkQAIkoGcCVFd6BkpzJEACJEACJEACFk6A%206srCJwCHTwIkQAIkQAIkoGcCVFd6BkpzJEACJEACJEACFk6A6srCJwCHTwIkQAIkQAIkoGcCyr+M%20pmfzNGcwAvgxBBwGM0/DJFA0BLSZ1Tlzn5O/aG4QWzUoAW3mv0E7QOP6IkB1pS+ShW0nKyursJtk%20eyRgHAQ4+Y3jPrAXJEACeRLgymCeaHiBBEiABEiABEiABApAgOqqANBYhQRIgARIgARIgATyJEB1%20lScaXiABEiABEiABEiCBAhCguioANFYhARIgARIgARIggTwJUF3liYYXSIAESIAESIAESKAABKiu%20CgCNVUiABEiABEiABEggTwJUV3mi4QUSIAESIAESIAESKAABqqsCQGMVEiABEiABEiABEsiTANVV%20nmh4gQRIgARIgARIgAQKQIB7tRcAWmFX4e9+FDZxtkcCJEACxkqAv5ZjrHfmhX5ZZWdnv5DBExIg%20ARIgARIgARIgAR0IcGVQB3isSgIkQAIkQAIkQAIqBKiuVJAwgwRIgARIgARIgAR0IEB1pQM8ViUB%20EiABEiABEiABFQJUVypImEECJGCUBKKiooyyX+wUCZAACSgToLpSJsJzEiAB4ySwaNEi4+wYe0UC%20JEACSgSorpSA8JQESIAESIAESIAEdCJAdaUTPlYmARIgARIgARIgASUCVFdKQHhKAiRAAiRAAiRA%20AjoRoLrSCR8rkwAJkAAJkAAJkIASAaorJSA8JQESIAESIAESIAGdCFBd6YSPlUmABEiABEiABEhA%20iQDVlRIQnpIACZAACZAACZCATgSornTCx8okQAIkQAIkQAIkoESA6koJCE9JgARIgARIgARIQCcC%20VFc64WNlEiABEiABEiABElAiQHWlBISnJEACJEACJEACJKATAaornfCxMgmQAAmQAAmQAAkoEaC6%20UgLCUxIgARIgARIgARLQiQDVlU74WJkESIAESIAESIAElAhQXSkB4SkJkAAJkAAJkAAJ6ESA6kon%20fKxMAiRAAiRAAiRAAkoEqK6UgPCUBEiABEiABEiABHQiQHWlEz5WJgESIAESIAESIAElAlRXSkB4%20SgIkQAIkQAIkQAI6EaC60gkfK5MACZAACZAACZCAEgGqKyUgPCUBEiABEiABEiABnQhQXemEj5VJ%20gARIgARIgARIQIkA1ZUSEJ6SAAkYHYHQ0NCmTZuuW7cOr3fu3DG6/rFDJEACJPAiAaqrF3nwjARI%20wPgIuLi4ZGRkXL16Fa+urq7G10H2iARIgAReIEB19QIOnpAACRghAV9f35YtW6JjeEXaCHvILpEA%20CZCAnADVlZwG0yRAAkZK4N13361SpQpejbR/7BYJkAAJyAhQXclgMEkCJGCsBOrVq9e1a1e8GmsH%202S8SIAESeE7AKjs7+/kZUyRAAiRAAiRAAiRAAroRoO9KN36sTQIkQAIkQAIkQAIvEqC6epEHz0iA%20BEiABEiABEhANwJUV7rxY20SMAIC8fHxRtALrbqQmJiYlZWlVdFnhdLS0lJSUp6d8X8SIAESMAEC%20VFcmcJPYRRKQEwgPD58xY4bIuXDhQtmyZQMCAnD622+/1a5du1SpUm+//XZUVBRynj59+tlnn1Ws%20WLFy5crffvut9rKmdOnSBw8eFE3o6xWtt23btnjx4n/99Zdmm7tyDlEGI/X29h42bJg4jYiIwKk0%20EAivUaNGVa9evXnz5qtWrdJsVrp65MgRf39/6bQACYnPzJkzsdNpASygivw+FswCa5EACRgvAUS1%208yABEjAhAocPH/bx8REdHjduXJcuXaA2oBjc3d3/7//+7++//27UqBF2LkCBTz75pEGDBqdOndq3%20bx8EwS+//KLlMDdv3hwdHa1lYS2LnT592sHBAW429FZzlREjRkBOiTKQhmvWrEGVK1eufPPNNxUq%20VMAf08zMTHH1gw8+aN269YkTJ7CNu6OjY0hIiGbL4urDhw+3bNmiTcm8ykh8SpQoceDAgbyKac6X%2030fNJXmVBEjA5AgUM7kes8MkYDkE9u/f/9prr4nx3rhxA64pfJbDO2VjY1O1alX4pby8vDw8PCCw%20li1b9tVXX4mS33//fatWrZBG+T/++ENkDhw4sH///iItf12yZEnHjh1FDhRVtWrVwsLC4Ar6559/%20kLlnz546dep4enqiiUePHq1cufL1118XhTt37jxmzBikU1NTa9WqBS+ayMcrdlSH7INTDSqwd+/e%20sbGxEEA4tba2Rrfh7JFKwjhkkzhFN6ACIaHc3NygFN96661XXnnFysoKunDhwoXXr1+fO3fud999%20J6mruLg4KCrkQ3vhgFk0JFmWEj179pRkJfrfrVs3yE38og4KQKXBIOyXK1fuhx9+QE6vXr1E4Vu3%20bqGrcOAhc8eOHdBwkkEkBJ+6deviRsBxOG/ePFVTKAYL27Ztg8CFWxFaCuXRYbjNUF5+H/HbPvfu%203XvzzTfBGV7GWbNmibbk1adPn46KTk5OaFoOUN4rpkmABIyHQDHj6Qp7QgIkoEQAn834uBWZ586d%20s7e3h8TBBy3EBz7yoRKwBVT79u3huBJl8FsxU6ZMwdrZxo0bkQO1gbUzJJKSksqXL4+Kopj8FVWg%20V/ABj8zly5dDJyGBD3J8/ONTHB/nUBvwh7Vp0+aNN96AhILcge8H4VOohSU5FIZuwHofFBXS4oA+%20gOZbu3YtjKAMVipjYmKwiObs7IxuozPPCmZDbZw9e1acYrPQrVu3nj9/HjoDbWFQwcHB2Jn9xx9/%20lJxS0FKSukJF/CrO6NGj0RaAQM9JZuWJiRMnNm7cWOR06tQJKgodhlnk/Prrr9B8UJBwZUEIQntB%20bAkhJdYZcYpi8KUNGTJEblPwQffQ7tSpU2/evKlqCoIPXfXz8/v666+hjNEQ1O2ZM2egfSEfwVC6%20j4AJHYnj+PHjixcvxl1ev369vDpEJ0xBKKM61BWEsrwzTJMACRghAaorI7wp7BIJ5BJQVVe4IF9R%20QtTR4MGDJV4QVRAH0BzwSEmZ8IvgIxkqB84eKVOewBadwmHTo0cPaBFcEuph8uTJqIjqOI4ePSp0%20Fdw8GzZsgFMN7h80BJWAKnBQyQ3CIzVp0iSRs3fvXlRMSEg4efIktIi8GNKq6gqZ8pVBiBJEYUm1%205OoKlqE54KWD5oMYsrW13b59u1RSSkDZoAMYAlQdmoOalNQVBv7TTz/ljO8ePH8IC4OORBkE0WNp%20EqfQlLCD4SitJAo+uCStDKqaEvJo2rRpKAbpCX8VWCESbtGiReg2EtJ9vHbtGnIwNNHnjz76CCpQ%20Xv3u3bsoAFmGrsKzKNyKojBfSYAEjJMAo9rxV4sHCZgJAcgj6B5IKwgULNhhVPAVYUEKsgaf5XhV%20O04sh8FpBC8XvDjvvPOOVOb27dvHjh3DwhmOV199FX/CEFSOBUGsl2GlDzIuKCgI7hacIlOqhQTi%20tdGoyKlfvz4qIkdeQC9pyCDYgZ8M6qdfv35YshR6S8k4XGJYm4NOxVWstUFlSgXgsRs7dqwYIDxJ%20EC7wcsETBiGIceESdAyeD4Brql27dlIttQlVU6IYxB8SWECEFxBG4OSTnkiQ7AAOxoK+iRwQg9dQ%20pEV1LD5iVXTp0qXoKhx7T548keoyQQIkYJwEqK6M876wVySgIACnCwJ6BIvHjx9rgDJo0KAvvvhC%20FMBPHcM1Aq2AFSVEHcGNhMf0NPz4MULgsQwH9wxCyBF3JbUCx0z37t2Tcw5Eox86dAjrhhBSWO+D%20+IDeatGiBZrAAiWUjVQLCayy3b9/X+RERkYioaF1aYBYPZQbyTcNLxrKwH8mSmLZMT09XW2t9957%20D+oKni2lnynEAOH0EgOEoIHnD8DhN8LDAVA8kI9oAl498HRxcVFrWcpUNSUuQashAe8UbhDWLoER%20ehc5aEiqC1zwlkmaCQ4qrCfKq8PpCC8aPFgXL15EXD+GA8EqVWeCBEjACAlQXRnhTWGXSCCXAD53%208amPUCQ4ombPni1yERsuPozlH7FQRYjLwcIWVpRQEtHukErwvmDpEOE+QkDAO6WWLEKyAgMDR44c%20qSQ+EGa+c+dOrLvhWT/ElcMfBh8MNAeUB/xVzZo1g7qCnwy+FjQnt4yoKURZQVdB5GEniCZNmuSl%20rpAPtxkGgrhvST5igJAaqCu3qZqGRwfrcf/973+hzy5fvgwFCRmkWgw5GBcUIR70k3vmkI8Bzp8/%20HzAhy95//330BJlwDiETTiwMFgpyzpw5Sp45eRPo6oMHD1BdrSmpJFBg4VJ0DwaRjyrSfaxZsyZk%20HB4RwAIi1gcRegWAUl0kcAvQH7jQ8JgCovIxXvmtl5dkmgRIwFgI4F3KgwRIwDgJ4HMUQevwc8BD%20A5GEeGf0E+E7ZcqUwV8QhBAhplsEXEM/IcIdJbHGhKtY40OsND6/5X9osEFDXsP8+eefUVIKHpfi%20iuD3wpIWbGL1Db4rUR3PD+IUaUQyQTSI0CK5ZXih8MSfnZ0dZBm0l3gqEKtscOTIiyGNaCSIGNiH%20UMPSmFBaiOtCo6IJtXFXUJDCDizXqFFD9BDiT8gOpSbEKbRgw4YNRRqOOjiHkIaegypCP+GagvsN%20xJCJEDFwRig90tgMAliwQioqSq8SH6xIAjIKq5pCJ3E7RDQVLEMegQYaQpwcxGjfvn3l9xG+QDy+%20AA5oesCAAVCW8upQXYhkRz/xvAIi4iH+pJ4wQQIkYJwE+CvO8k8fpknAGAlgowToEnz05ts5aCyI%20A3z251USbjBpBUqUgdOrZMmSeZVHPiQLqsCLpqGM2kvoDFxuSm4t1ZJQHvAeFcC+ZArKBiFlEB/o%20KpSTlC8S0G0QcEqZ8lPxDKO0wii/9LJpzaYQwoU9F3AfcY/QW9UbCr2FgUCEqW0XxnEjcHNRV20B%20ZpIACRgPAVvj6Qp7QgIkoJaABrWkVB6xRziUMuWncPZgJyd5Dj7ONasrSJOCSZ98OyO6AVmjo7KB%20R0eYgo8HzzbKR4c0nm3UrK7yjalSMqjhVLMpxGaJuvA/qTWS1/qpKAzjmu2rtclMEiCBIiFA31WR%20YGejJEACJEACJEACZkvghbAMsx0lB0YCJEACJEACJEAChUWA6qqwSLMdEiABEiABEiAByyBAdWUZ%2095mjJAESIAESIAESKCwCVFeFRZrtkAAJkAAJkAAJWAYBqivLuM8cJQmQAAmQAAmQQGERoLoqLNJs%20hwRIgARIgARIwEIIyH/uykKGzGGSAAmQAAmQAAmQgIEIQFkpfkkUu8gbqAGaJQESIAESIAESIAGL%20IgBxxZVBi7rjHCwJkAAJkAAJkIDBCVBdGRwxGyABEiABEiABErAoAlRXFnW7OVgSIAESIAESIAGD%20E6C6MjhiNkACJEACJEACJGBRBKiuLOp2c7AkQAIkQAIkQAIGJ0B1ZXDEbIAESCAvAvv27StTpkxe%20V/PNL1269MGDB/MtxgIkQAIkUMgEqK4KGTibIwESeE4A28HosiPMvHnzatas+dwcUyRAAiRgHASo%20rozjPrAXJGCpBFJTUwcOHOjt7V2lSpVFixYJDMHBwXXr1vXy8uratevjx4+Reffu3Q4dOnh6ejZv%203nzo0KGzZ89G5owZM8LCwg4cONCtW7cRI0b4+PjAE7Zz505LZclxkwAJGAsBqitjuRPsBwlYJoFH%20jx5FR0fv2LFj2LBhH3/88eHDhyGYunTpMmTIkN27dyckJAwYMABkILNsbGx27drVsWNHiDDUQmZI%20SEhSUlJiYuKWLVuQgJGgoKDRo0dbJkmOmgRIwHgI2BpPV9gTEiABCyQAzbRixQo/P7+mTZseOXJk%209erVFSpUaNiwYc+ePUFj4sSJLVq0OH78+JkzZ+7du1eqVCkU27RpkxIoZ2fn+fPnOzo6jhw5sl27%20dkpXeUoCJEAChUyA6qqQgbM5EiCBFwj4+/tDWomsOnXqnDx5EpFYx44dQ8S6VO7cuXOurq6QViIH%20a4jSJZEoWbIkpBXSLi4umZmZSld5SgIkQAKFTIArg4UMnM2RAAm8QCAmJiYlJUVkRUVFIQCrRIkS%203bt3T8454uPjDx06BFcWFv6ePHkiit26desFE8WK8dfolYDwlARIoGgJUF0VLX+2TgKWTgDSCst/%20cDhdunRpw4YN7du3R2QVItMvXLjg4OCwcOFChKvXr18frqzx48dDbK1cufL06dOWTo3jJwESMG4C%20XBk07vvD3pGAWROwtrZ2d3fHrlezZs3Kysrq379/v379bG1tx40b17p1aywRYhFw7ty5WPVbt27d%204MGDsQUDVg8RWYWFQgkMHVcSCiZIgASMhIAV+qHLfjNGMgx2gwRIwKQJYE0Quy2I2CkxEHizsBSI%20TRZwCuGFLRigvTw8POzs7CCwli9f3rhxY5MeMjtPAiRgrgTwlY/qylxvLsdFAmZFACuG2IUBOzVg%20ywYkEOdOl5VZ3WAOhgTMiADVlRndTA6FBMyaAMKzsKlVaGhomzZtmjRpYtZj5eBIgARMmwDVlWnf%20P/aeBEiABEiABEjA2AhAXfGZQWO7KewPCZAACZAACZCAaROgujLt+8fekwAJkAAJkAAJGBsBqitj%20uyPsDwmQAAmQAAmQgGkToLoy7fvH3pMACZAACZAACRgbAW13E8Wmf9wWy9huHvtDAiRAAiRAAiRQ%20aAQQro7t97RpTlt1BWlFdaUNUJYhARIgARIgARIwSwJQV1qOiyuDWoJiMRIgARIgARIgARLQigDV%20lVaYWIgESIAESIAESIAEtCRAdaUlKBYjARIgARIgARIgAa0IUF1phYmFSIAESIAESIAESEBLAlRX%20WoIq7GJpaWn4YbXCbpXtkQAJkAAJkAAJ6EyA6kpnhAYwMGPGDG9v72HDhnXv3n3atGn5tjBz5kz8%20um2+xViABEiABEjASAgcOXLE399f+87w77z2rIyhpLY7MhhDXy2nDwsWLFi4cGHv3r2PHTvm6+ub%2078ChxgIDA8uXL59vSRYgARIgARIwEgIvtc8R/84byV3Tshv0XWkJqvCKNWvW7M6dO2PGjFm8ePHa%20tWsPHTq0a9euPn36TJ8+PSAgIDw8vFu3bq6url5eXsOHD8e2ZvXq1Xv48GG/fv3mz59feL1kSyRg%20AALbtm2rU6eOi4tLkyZNzpw5gxbq1q179epV0VSnTp32798vfzts3LhRemvExsYaoEc0SQIGJwAn%20Fv6MOzk5lShRQvwZj4+P5995g3M3cANUVwYG/PLmJ06c6OPjM3To0Hbt2kVERMTExOCdtn379iVL%20lowdO/aPP/64ePHiwYMH16xZs2rVqt27d8NdjE8jKK327du/fGusQQLGQuDWrVtYCsexZ88efMy8%2099576NnNmzdTU1NFF0NCQhITE+Vvh4yMDOmt4ebmZiwjYT9I4GUI9O3bt379+sePH8efffyRh0ML%20axf8O/8yCI2xLFcGje6uQFThS0zjxo0rVaokdQ4fKvgqj5zZs2fHxcVBdXXo0AHf47FsX7ZsWWdn%2056ZNm1auXFkqzwQJmByBP//8s0GDBhMmTEDPFy1atGzZsqdPn6odhfR2WL9+vZRWW5KZJGDkBDIz%20M7FS8c4772BF4tSpUwkJCfg6YWdnx7/zRn7j8u0e1VW+iIyiANYEhdgaPHjw+fPnsRqCb+0dO3ZE%20hJZR9I+dIAGdCeDJDCwLCjMlS5YcN25cXialtwMKyNN5lWc+CRgtARsbG3ydxpfqGzduYDKLfvLv%20vNHeL+07xpVB7VkVZUkPDw/RPBYKf/rpp8ePH2/evPns2bPff/99UXaLbZOA/ggglPDBgwfCHkIJ%208YU+KSkJp/hyLzIx+UVCejvgVJ4WV/lKAiZE4Nq1a4MGDcJ3CSx579ixAz3HL9nx77wJ3cG8ukp1%20lRcZI81HlBUW6dG5119/HYGQ8GAhbW1tjY+l9PR0I+00u0UCWhBo27ZtcHAwok+wIDhp0qR///0X%20AYV4Znbr1q2IRPntt9/wpUILMyxCAqZEIDIy0tbWtmXLluj0nDlz8Iq/5Pw7b0q3MI++Ul3lAcY4%20svElBspJ3pdRo0ZFR0fjWz6+suNZKpziKj6WevXqpc3OWHJTTJOAURHAF4YvvviidevWmN6nT5+e%20MmUKuocgXyQQWbh69eqqVasaVYfZGRLQhQD+vOMICgpCuCHCZz09PfG9ApMfOx3y77wuYI2krhX6%20oc2WG5gE2hQzklGZfTewboK9GF5qJzqzZ8IBmgcBuGOxRFK8eHFpOIhbx+8W4EFaKYcJEjAzAlFR%20UVBXjo6OiGpHSDsSGCD/zhvhXdZSCymEM3qvjWzS0qIRsmCXSIAESIAESIAESEB3AlpqIRR7YdVJ%2094ZpgQRIgARIgARIgAQsnADVlYVPAA6fBEiABEiABEhAzwSorvQMlOZIgARIgARIgAQsnADVlYVP%20AA6fBEiABEiABEhAzwSorvQMlOZIgARIgARIgAQsnADVlYVPAA6fBEiABEiABEhAzwSorvQMlOZI%20gARIgARIgAQsnIAefsUZm4lrs2OWhYPm8E2OADYswZat+Xab8z9fRCxgigRU5z+nuineR/Y5XwKq%20Uz3fKtoU0IO6grSiutKGNcuYFgG85bTpMOe/NpRYxuQIqM5/TnWTu4nssDYEVKe6NrXyLcOVwXwR%20sQAJkAAJkAAJkAAJvAQBqquXgMWiJEACJEACJEACJJAvAaqrfBGxAAmQAAmQAAmQAAm8BAETVldp%20aWkpKSkvMVYWJQFzIcDJby53kuPQlgDnvLakWM44CJiqupoxY4a3t/ewYcO6d+8+bdq0fGHOnDkz%20NDQ032IsYGgCR44c8ff3174V3jhVVpz8qkxMIoeTv8C3iXO+wOiKpCKnei528SSI5lcUzauAhkt5%20VdE9v2LFimvWrMED87iL165dy9dgiRIlDhw4kG8xFjA0gcOHD/v6+v4/e+cBH0XR/nEgvfeEEiAQ%20eu8gFqRIswCCIlIUsMAfG0UBeQULgiiIIh1pgjR5Kb700HvvNQmQhJAGCem9/H+XCeuZy20ul0uy%20d/ntJyzPzsxO+c4zu8+UndM9lTKsOB0VW8dguhe50JBU/kIRKTOAESk/AGoqtqZLqXGmzpcaaoMk%20ZOyqLgNBx1aAYEY5dtWxY8f79+9PnDhx6dKlGzZsOHLkyJ49ewYPHvzjjz96e3uHhIT069fP3t7e%20xcVlzJgxsMCaN2/+6NGjoUOHLly4EGU2luPvv/9u2rSpnZ1du3btLl68iGw3a9bs1q1bIv+9e/c+%20ePCgesE3b94sQYiNjVV4MWEWo15sbGxgP4l6iY+PN42KK1HyVH7gpfKXqI4pLXLT1nk+5430Ba1T%20M5Ex0yQvRCTJ+QQZr3whDXXp5+eH8Y/vvvsuMDCwT58+M2fO3Lhxo6OjY926dX/77Tdc+vr6njt3%20bseOHbCxdu3ahfDwhXtAQICh8lDS8aBoZmZmU6dOPX78+KuvvoqiIUVra+tLly6JpOGyfft29YKv%20X79egpCZmVnSOdQvfqlPU6NGjWHDhsFqnDZtmoODA4xgzPAqquJ0VGwdg+mHS/MuKj+YUPk1FcPg%20LpqKreli8EQLjNCEdZ7PeSW8oIuk2DoGRjAD7CaKWEr56NatG8Y82rZti5exlHRiYiJe1XCZO3du%20XFxcaGhojx49MLqDVT54kdva2nbo0KFOnTpSeIULMJVatmz5zTffIJ9LlixZsWJFSkpKgXmWCr5p%200yZJLjCkchyzsrIw9Pjmm2/C/IUdnJCQkJaWZmFhYQIVV9KQqfzqhCWFp/KrYzEx2YR1ns95I31B%2069LEjNK6KrBgmBMUxtbIkSOvXLmCOTKM3/Tq1WvRokUFhle4I9bgY1pQZLJKlSpTpkzRlmGp4Aig%20LmsLrwR3DMvBPsZD09/fH3kWWTKNiisTvFK9mwZDKr+RPrVKU/lNQ+ep6ias6ka57qrANuzk5CTc%20Y2Jifvjhh+jo6K1bt2IeDRNPBYZXuCMWjUVFRYlMYtEYRnqSkpJwiVEf4YhiCkEqOC7VZeGrzDM+%20RBgxYgRMRqy12rlzJzKJ3yIwjYorE+BSvZsGQyq/kT61SlP5TUPnqeomrOqmY11JDRvf8A8ZMgSX%20PXv2xHI5jGBBxu+PwljJyMiQgilc6Nq1K1YbnDx5EhOC06dPP3/+PJa3Y7UZ1lphacKyZctgPiq8%20CDLZCwsLMzc379SpE8LMmzcPZ1SNaVScTKlLwcs0GFL5jfSpVQoarpmEUes8Vd2EVd3orSuMecBy%20Um9y48ePj4yMRJ8AnRt8YYdL+EKJBw0apMvOWOpRlaEM03Ds2LGdO3dGQS5cuDBjxgxkZtKkSRCw%20hmzNmjX16tUrw+zpnTTqC0f79u2xqgzr4ZydnWE+oozYusw0Kk5vMnrcCJJUfj24ldUtubpP5S8W%20fhPTeT7njfQFrYsSV0QgjIUUGhQ6rS2YjFeh0ZZcAMym4TO0Im1cWXKZ0Ttm2PWYO3N1dZViwDJe%207FDv7u4uuRivEBERAesKH0JiVTuWtENAWZRTcToqto7BSrOalMOwOKWm8heHXvHv1VRsTZfip2Ko%20GIxa56nqhlID/eIpkmLrGBjBTNa60o8y7yIBiYDurUhbx0OKigIJGB0BTf3XdDG6QjHDJKBJoEiK%20rWNgBPvXnJpmqnQhARIgARIgARIgARIoEgFaV0XCxcAkQAIkQAIkQAIkUAgBWleFAKI3CZAACZAA%20CZAACRSJgKJ3Ez340G/xzfmB8f5Ols7tPDtMavGVi9U/67tlyhmeHDbu1EcIsOyF1fYWDiLkw6TQ%20mZe+vRx9MS0rrYFzw7HNvmjl3qZQL5lU6EUCJEACJEACJEACmgSUu6p9V8j/Jpz+RD3H1ey8d/bc%20b2lmpe6oKWfnZE8+O/5/wdvgdbLPJWcrZwhP0mJ67+4Slx4nha9UsdLKF9e19Wgv4yUFNrhw8nb0%20n0dCg6KSHWzMm/s4/V+vWk52FjqmMuu//g9jUgc+V+3Zhm7ilgNXH20/E57v9qkD67s7WkXGpi7Y%20df/mg4T0zOzale3e61azSU3HfCGLeZn8KOrSvDnR165mpac516nXfPQnrg0byceZmZZ6c9Xy0COH%20kqMibD0r+/ToVf+tIWZWqprNzsq6uXr5gwP7kiMj7b29a7/at27/gSI2GS/55PTz1X31osFXtWdk%20Z8y/Pndf6J6w5Ic17Wv29RkwvP77yI8uBdl2f/PGe+uauDSb0uprKbxMR0XGS7rd4IIB9X/n+Yi9%20l/L23VXPp2ggs7cFhDz6109IVXe3+bxfXfWQhpIjzpy6vmJpfNA9SwdHz9ZtW3w01tIhr2unLQn9%20GoIeLU5bBmTcNfVf00Xm9iJ5FUcJJ50ZH5x4f2SDUd2qdReJKqojrYeq43my6cTDw9cfB0elONuZ%20t/Z1ebdrDTcHS5SubB/1Up2avKpLJdUUdGwFCKZQ6woW0mt7ut9LuOth7fltm5nnH51dfmcJyjm1%201fS36gzWLLBwiUgOX3Z70YmIoyGJwcJFsq7mXZuz+NZ8OE5oNtnd2uO7i1OTMhPbez4DA0vGS1tC%20xXQ/dO3R93/5q0dS2dlqxSetLM0Ln6g9fjP66w23ce9nr/q+0rayiASvkD0X879g/vistZ2V2bvz%20LiakqPZTFUelihVmD2/SzCdvX/unzvr/n5GUuGtQ/7TYJ1IUFc3Muiz43a1RY8lFUzg2cVz4qePq%207lWf6/TcjJ/gcmb6tOB9u9W9Ggx5p9kHY+S91MMbSta9FRncuvr0xGi/h3vUCzK07vDJLaequxQo%20RyZHDD44ADaZ0G0RRqajIuNVYPwGcTSs/q86ELz2SKhmxkQD6fP96aS0vJ83EGHqVrVbNKqFZvhi%20ujw8fvTElxPUI3GoUbPHqvWVzOXmB/RoCPq1OPWM6Shr6r+mi45RyQcrjhLuD937yclRiH9a6+kD%20fVWvBpnesoyXfA719tVP1TWf59VcrReNbm5rZa7phbyVzqNeglAeVF0qrKagYytAsMJf55qxl4JL%20QNwdmFZIaEzjTztV7TK++SQfh9q43PNgx9fnp7x9oD/+7sTegsvCG79KlwFx/usD10imlXo+94Tu%20wuUzns+OaPDBaz79htZ9F5dnok7Fpj2R8VKPwVBydnbOmkMPEBv6ItMHN3zzuWqQI2LT9l6MlE9i%20+f7gz1ddF6ZVvpAYA4PL843cxvXxlf5c7C22nA4TptUH3X0m9a9ra2WWnVPhj9zU88Wg92Xgls0w%20rWBRdZg2/cV5i63d3HJyB59kInx87aowrWq/0rfrouXeL3ZF4LDjR5IiwhMeBAf7qayK2q/1w5sJ%20JhfkgM0b0+JiZbxk0jJGr9uxN4Vp1aXqS793WtPSrTVKseHun1EpchqyL3T3xDNjX97TDaaVeqnR%20UUEbgQs6KoueWz6y/oeQ0bnfcn+zjJd6DIaVDa7/GJHt0tRd+qvhYSMy7OVsFRWXJkyr916qKbWL%20dzrXMGyJRGw3Vi2D4FDT56Vlf7T8VLWDcUJIcMiBfTJp6dcQ9GhxMnkocy+9lfCXaz+NODxYmFbq%20pVjjv1LMUaAj/UO7n+3M7aUkZLzUYzCUrJ+qB0cli7FYdAM+71enZW1VTxiTFQeuPIJQho96CQtV%20XUIhL8j1q+TvLFFfLJwS8bd8ujSqlXvroIR7cMd6KfTO0WD+c24ievMLbvyaUyHnhcov1nduaFnJ%20EhMouPFa9JXzj8+q5zA895XzT2webSqobLMKYclhMl7OVi7qkRhERvMIeayaqhjauXqH+q74O3kr%20JjQ65fCNaAdbiy2nVAXv1Ni9f8eq14Ljl+0Lki63nQ5PSf9XLxxeODBwIppcl2YeHeq5ZGbl2FiZ%20Ca8j11W/ltOqtpOw4R48TsF05OX7cXHJGU62uk5Eiqi0nR8c3g+vas91qtG1OwRM8F1Z8CuMp5SY%206DPfTs1KT7XzqtL+q28xqXdq2mTYYbh0yZ03rGRp2eLTceZW1g2Hvht6+ADuTcGGgFcuojyYImwx%205jNzG5tWn06A1ZWVmhp+6kTK40favHx6vqwte8bovu+BaujOrKIZRm1dYa5aufXb1zsjO/3voG1H%20wg9k5WRh8PXnZ+ZnZmd+enJUQkYCFiMueG7Z0fBDYjZcFLlihbxpxHwdFfRVDoT5oSmho9LSvZV6%20H0bdS2aEuJhIDa7/LzR2x5/IVWZW9vsLLkPGsG7bui5n/FW/xWlhVvGNZ6ulpmdZW+DXw3WaXS1q%20GRMfhsb638FdTUZ84FK/Af6C/fbG3Lz+4OB+a2eXG6t/h5dPj5d9+7wec+fWpV9nqy57vZKZonoO%20FLUhaGtxmGREa0KExnXI6KeTpdOagJUoTs/qLw+rN+LCo3Nzrv4gXa4NWJ2cqfrp1XyHem8ZXlB1%20zFpodqTzeSnnUW9lWUls7z2pf72aHratajsPmnMeub0bmVy2j3rBmaouOOhyVqx1lbeKyOWpfeNq%20pVpjFJES0cy1xfB672Oi8MaTa8MODYRp5Wjh+F3bWfCt5ej7efMvIfx+a5G6dYUBKqxkh7tabHmP%2048A4f21eEclhjVwa4y7DHpFxqpzgaFIjb/1TkxoOsK6iYtM61nddfTAENpB/WGJTH8c52wLhbmdt%201qmJquyDnq+WkJoZn5yZb5UJxr1S07MRYN3RB99tup2dXaGWly2mRRrXcETfHe4QcMYhpQh3Q1lX%20WB2FmF0bNclNoYLbUyEzKbFy+2euLpoXff2aW5Om6QkJYcePIkzDIcPx7vFq3c7M0hIWAEakMDQF%20d1hUqndS7pygU21fmFZwtPXysnZzT41+nBwZkfL4MVwK9IK7KR2w+FGcmvY+MK0goNuA/jcmshMy%204pq7tVxxZykcl99eEp8RdyziCOTv2/6Ec7dqPfDxB4RNd9cjMARxyHRUZLye3m34/w2u/+pZ3Ho6%20HM3Hx9N2TK9acA+KVI3pYoj+gwWXgh+lYOa9fT2XcX3qYLGj+l3Fl6GfIhK1htAY1hXcvdq2v75y%20GeTYAH/PVq3Pz/o+NtDfxt2j+ovdsE5Rj4agrcWlREU6VK9Z/LKUcgwyStil2kvzb8y9n3APj/rW%207m2/Oj8JppKDhUMP797I5PsNRqMJ4Nm+NWizep5lessyXiVhXemn6ugSO9qYo4cM00q9XE625mX7%20qBeZoaqrV4q8rNCZQSnTGKMSsuiLZ+dkwZz6uMlYX8c6cBe+/2n1rYeNp3SLpoBbhCP6/fl8M3Py%201iTJeOW7pZiXj55aV2gtIipne9Uw0uP4NAvzil/0q4ulURh/+mjJFZhWcP+od20sTofwdqfqH/ao%20NbhTdXGXdBavEFwGhCXBtMJxPzL581U37kcmYSU7LiVDSiQEFykPqtDFONBdTo9XfShg5ZS3kMvK%20WfWCx5EcFVnvzUHiZXN10fxbf6yAI/rrVTs+Z+Pm7uxbx6F6jcDt/909+I2g3Tvg1X7KN7C3cBdk%20S8d/loVZOakihLuMFwKY0gGzHsUR3QlRLtfcT2XxHvq4ybjaDr5wnHd9zso7qqmoF6t07VdrgEqo%202hVdC/zVdPDBpXSEJ2vtqEgvNrVeR14fxuAryaT8SLpnKP2XYn6SmL72sGrO/a3nq1nkLmG8nztj%20jlYA0wruEI7djP52o2rZomEPoZyIE+vZRcyS3uKXINtNnooBqqy0tP0fvAvTCgHafDEFC971aAiJ%204WEyLc6whSqd2GT0E3MRM9rNxudH+Mhj4IG+MK2QpS9bfu1lq1pv+mGjMdD2UY0+Vs+n3h1p9UgM%20Jeun6pi12DK5/Z/j2iAbiSmZMzarFAZHa1/nMnzUizzgTFWXUBQqKNS68rD2EFnHxIcQYtNjIXja%20eKGx4bPBN2oPEu4YuOru3UvI2s7o05tXVJkyiU9ji8uNDS54V2nzqmxTRVuEBnHPwhqo3EPMVWTh%20hZZToWF1B8xiwFl4dmzg+lILOcMRIRNTMz2drKq4WH8/pOGur54Z0bUGHPEi2f10IZeUUG5qqhOs%20N0kulvC0CDnCrFNNU+bFl5OZVcnMTPVesbBAHz07M9PGw7PFx+PUk8PbxbFWbbx+4Hh1yfykyIic%20XGNaik0KjLVcMl5SMFMSJLtfKhQ6AFZmVuJ9IzoMUOxv2syUAsgLBXVU8u4oyOtpRcpHWgxfSS2L%20qf9SFlbsD8EqK08ny85N8p4e0HM0jeY+jn+Oa/3XF22b+ahMn0v34u5GFDCjJMWjh6Cmsf/iBr1F%20bI41fTBjCCEjSZVurd6vVunQUT2VIjSEzLzeoJSieotTj9Po5AKVEIO1w+ur0AnfrlVf6uPzukzR%20FNWRlvKpn6pjZcioRZdxRjz9OlTBp0hl+ah/WhhJ8fCwf+qm+p+qrk5DyAq1rirb5lk2t5/cFBnF%20Ul8IwuKJTYv9/fZi4R6fEY/RYyFrO8Mgg1kG31u5kaiEJzdEYOzyoM2rim1VbREWx93V3lLcLn3K%20FJ/7TZ+7g2UlDFtVqPD6M/+k+3IbVbblD5hf68a3WTO2dft6rpYWlQa94I317LglPCbVLDfC5LS8%20J3JCcp6AV458nDr6Yv7O3NYOgfEdk7glIzHPGrbxVBmFeK9UbtdBeNXo+pKlvT1kfE8eHxKcGvsE%20S7V6rt7QZeHvcMR0fsj+vZgxgSxeQuKu9ETVw8XG00vGS4Q0mbO7jQpCYkYeUsiiM+Blo+qyN3Nr%200dy1pShs56pdPXIDi8sCzzIdFU/rPMO9wD5MgbEV39Hg+i+yhBXER2+o5o6xBktaXPWfN+ujacwZ%200dTL2drF3nJ4F1XHA4dYpyhkg5yFciKqjIS8WsNUOC5FK4Dg27c/uhkiLd8+/YWgR0Owq1pNvsWJ%20mI3oLKOfeG6jIMPqDpeKM8A3r1MtueQTFNWRLo6qrz8aOn7FNUwFYtXgqJ4+Y3rXRknL8FEvcaaq%20SygKFRRqXdVxrCdmRlbcWYLvm7YHbbkWcwWFae+l6vPNvPzN49RHELC8F2esRLkSfQmCzNEh98ZD%20YftPRhy7F3/3z8DVCIyBK8Qg4yUTod5eHk551tXd8CQRSWCu4PHU4lm6N0iKfMneIDG7J7loCgj/%203cbbi3bfF17oy+JNAxmrTNwdVWkFPu2pi4TgIqUlbinO2dZTZf/F3bsrIom9GyAEGw+V+6Orl8NO%20HhcuAVv+glEF+eyMb/YMeePSL6rVQjhc6jUQO13FBtyx9VC97xNCgjDWBSE9IT4lSrXTBNxlvBDA%20lA7RhQhJDErKUGlIWNJDdCEgiC4Hdga6FH1BlPfv4K1Xoy/Ll12moyLjJR9ncXwNrv8iM/cik0R3%20BauAhUt0QjraBf6wb5BwyXw61Io3VnGKoHmvaAVwj7sXKHyFILlfX74kOyNDeGFzODEAoGdDkG1x%20mnlTuEuhSjj76j+js7OvzEjPXUGrrVCK6kjrrer4mAlfiENbsTfbglHNB3RUzWbgKNtHvciDpNJU%20dQFE5qxQ68ra3PqdeiORb4w2vbTzeewOCtnW3Bb9mAMP94lvo3pVf+WPzhswN49BY2wol5qZKlPO%209xqMRsNDyPeODntlTzex4uTDRh9hxauMl0yEenthya1z7sahm44/xFaffpej7jxU9Xdb1lItNsLW%20c9gvDoJr7vgTNkJcdSBEPi0s2DpyI/q/p8L2XorEh1F/HH4QlztG1cDbQcR56nbMhcDYkEfJ286E%20Iaoa7jYicvlodfT1bNUGIR8c8IOBlfokRixRh8GEYSqsyjr3w3eYLMR3b+hwZ6en43WCjwcda9bC%20Ldg05cmd27gM3LYZS1Lg4lS7DvZghJCRmOi/aV1WevqNVaphLUwderRsLeOFMKZ0tPdUdSHSs9N/%20u/EzehFzr/0oSoctrDBq+/WFL3GJtb2YJYQ+o2mIzzK0EZDpqMh4aYut+O4G13+RJTGBgv378DmI%20cHG2tTjt/wRNA+8kTAXGJmWsfNqU6lcrZJPPohbT3ru6GKa6vWEtxnGjLp6PPH8WkXjl6vPja1dE%20u8AOWHCMvnHtzoY/IejZELS3uKJmWwnh5ZUQfQnxtBcd6bvxgfOu/yyfbZnesoyXfJz6+eqn6tj5%20eePxhyLF97vXTErJvBYUhz/s1FC2j3qRJaq67sqg6sPpsoJVZgctGS/d86EZMis7a8HNX/H1n1iA%20gv2ufmw/t55T/W47n3uc+tjZ0mVHTz98VIWPp8RnuviEBJs1iHhw18+576Sz/a5Kv4SDUavJZyc8%20SlWNhVibWY9vNmlw3XdEeBkvzYwV3wWjvuiaqMdjbVkJyxhRGSPnX3qSmAHza9mYFtPW30ZLwwtj%207oim0gbrYTGpw35RDV1Iu4leuR/3+errTxc+5cWKZVhLx7RA933EvItPe+x5Xtj4qlvzvCkh9Tzo%20J+MLpp1v9RWT7tj1Sggdp8/yfqHz5fm/wEhCtC/89Cv2srowR/U1ddMPx1R/sevedwZhMRYuzW1s%20M1OSIVg6OXX/fS0+Ejz40QePr6rGY7ANoxjBwgQiNtOCi4wXfA1+6KjYOgYrUvYG+L1688l19Vs6%20V+2GbRe+OP3ZjpDtcP+l40KMaf145XvI6IdMbPEfKbC4t4NnxxUvql7hOJbdWiSZaMIFHZX9Lx/H%20d1IyXiJkSZwNq/8ihxijgiGFOfG/vmgn5XnBrnv4ilC6FELf9lU+elk1z2LYI+C/Gy/9OgdxSnpr%20Ye/wyua/0Sj2DR+SGBqCdYc9Vm84+dXEqAvnMEvYfflanPVoCDItzrAl0lRsTReDpKhNCdGxem3v%20S3jaYx5je489H5/4EL9jhs+b1nTZJP2I2YPEkB67OiEb0m6iQQn30X8W67Sk7M1qP/fVmlgXr9VL%20CmlYQQ9V97sStfO86uOefMcz9V0HdKxaho96KT/lQdWlwmoKOrYCBFPo2BWKZFbJ7JMm486/fmN7%20j71HXj2zq9eBJq7NsJ796Gvnbr55/2Tfi+J79ZENPsQl/iTTCve+13C0cJRMKzh2rPz8kdfO+L18%20DD+nc67fdcm0kveCr8EP7D41pJO3WBSFyL3dbOYMb4Iv+373C4ZpBRc8/bFMZELfOpjCwEzfT1sD%20JAvYTKPGmtdymjawgbfbP1vdtK3j/NO7jW0szRDzzKGNxU8oIFori0r4AtGAphXihD3Uae4CMVwM%200wrWUuvPJ8O0irl10/+v9QhQs0dvbM2A3UE9WrTC5Y0VSzEt8vzsX7GeHZfCtHJv1qLTnPmICi4d%20v/sB4SGoTKuKFWt274UIcYlDxksEMJnzwud+h3kkFQf7/cxsN+dk5HFhWuEzDvxhByDsToIwf/iv%20uBFzTQosvtKQLiGMqP8BPq2S3NFRWfXievEJuoyXegyGlQ2r/yJvt0JVA8AeuV/XSrkd1aMW9jFB%2010W44JvcwZ28P+zhIwUwoFCn3xtN3hsFg0l0CaDenX9bbGFrh198gmmFhFqPn4QB3Taff2lmbY1Z%20wrMzv7Gv5q1HQ9DW4gxYllKOSpsS/nxtFkwrZGZKy6/drN2nt/3RopIl1q1POfu59DwUa7PUM+zj%20UGvp86uwd65wREcat8O0wqWMl3oMBpT1UPWw6IIn+wwWfQAAQABJREFUYczNKpbto17CQlWXUMgL%20yh27ks+3CfhmZGZjB15svSNZP8UsVExCekxiOkat7Kzz9nqQIsQUJNZvVXW1kUw6yctQArrU2DvU%20vlp18Q2gLtGmxcelPIqy9aoiVrur34LplaSICLx+zK3/sRpFABkv9RiKL+veR5Ge9cVPVD2G+PR4%207NBT3b4mhprU3fWT07PSgxODnC2dNbcvkfHSLy1d7jK4/mtLFN+bRsSm4vvBam7W5pq9E2236eUO%200yohNMTK0cna1U33CPRrCHq0ON2zhJCa+q/pUqQI5QMbXAmxYBeLtGrY+6Cjni9pGa98IQ1yaXBV%20L9tHvWBi2qouU+86tgIEo3Ulg5Fe5ZqA7q2ohKyrck2fhS9rApr6r+lS1nlk+iRgAAJFUmwdAyOY%20xjyTAbLKKEiABEiABEiABEig/BKgdVV+654lJwESIAESIAESKAkCtK5KgirjJAESIAESIAESKL8E%20aF2V37pnyUmABEiABEiABEqCAK2rkqDKOEmABEiABEiABMovAVpX5bfuWXISIAESIAESIIGSIEDr%20qiSoMk4SIAESIAESIIHyS4DWVfmte5acBEiABEiABEigJAjQuioJqoyTBEiABEiABEig/BKgdVV+%20654lJwESIAESIAESKAkC+X+QTo80sOM7Dj1u5C0koGQCOmp1rvpT/5Vck8ybPgQ09Z+qrg9H3qN4%20ApqqbpAsG+B3Bg2SD0ZCAiRAAiRAAiRAAkomAFNMlx+WRTDODCq5Hpk3EiABEiABEiAB4yNA68r4%206ow5JgESIAESIAESUDIBWldKrh3mjQRIgARIgARIwPgI0LoyvjpjjkmABEiABEiABJRMgNaVkmuH%20eSMBEiABEiABEjA+ArSujK/OmGMSIAESIAESIAElE6B1peTaYd5IgARIgARIgASMjwCtK+OrM+aY%20BEiABEiABEhAyQR03audu/QquRaZNxIgARIgARIggZImoPvG7rru1V7SOWb8JEACJEACJEACJGAC%20BLhXuwlUIotAAiRAAiRAAiSgLAJcd6Ws+mBuSIAESIAESIAEjJ0ArStjr0HmnwRIgARIgARIQFkE%20aF0pqz6YGxIgARIgARIgAWMnQOvK2GuQ+ScBEiABEiABElAWAVpXyqoP5oYESIAESIAESMDYCdC6%20MvYaZP5JgARIgARIgASURYDWlbLqg7khARIgARIgARIwdgK0roy9Bpl/EiABEiABEiABZRGgdaWs%20+mBuSIAESIAESIAEjJ0ArStjr0HmnwRIgARIgARIQFkEaF0pqz6YGxIgARIgARIgAWMnQOvK2GuQ%20+ScBEiABEiABElAWAVpXyqoP5oYESKCoBJ5//vmVK1cW9S6GJwESIIGSI0DrquTYMmYSIIHSIJCZ%20mVkayTANEiABEtCZAK0rnVExIAmQQMkT8PPza9asmYuLS9++faOjo5EgLn/55Zd69eo5OjqOGzdO%20ZGHjxo0NGza0tbXt169fQkJCyeeLKZAACZBAEQjQuioCLAYlARIoUQLBwcF9+vR577339u7dC5vp%20nXfeQXIBAQGLFy9eunTpzJkz586de+PGjVu3br399tuDBg06dOiQvb09XEo0V4ycBEiABIpKoCJu%20yMnJKeptDE8CJEACBicwY8aMXbt2bdq0CTHfv38fC6qioqKqV6++du3a/v37w9Hb23vJkiXnzp1D%20sLNnz8IlLS2tSpUqc+bMGT58uMHzwwhJgARIQA8CFStWNNfjNt5CAiRAAiVB4N69eydOnKhWrZoU%20eWhoKORatWoJF0wFZmVlPXjwoFGjRsLFysqqfv36UngKJEACJKAEApwZVEItMA8kQAIqApUrV379%209deTc4/4+PgjR440btwY7pUq/etJ5enpGR4eLiELCwuTZAokQAIkoAQC/3pmKSFDzAMJkEC5JdCr%20V6/du3dfvXoVI1JYa/Xxxx+bmZlp0ujdu/eBAwf27duHVQ0IFhISohmGLiRAAiRQhgQ4M1iG8Jk0%20CZDAvwg8++yzU6ZM6dy5M8ymunXrzp8/H6NWWMGAQz0c1mNNnToVHxUiWI0aNbAYS92XMgmQAAmU%20OQGuai/zKmAGSIAE/kUAK6uePHni7u7+L1eNC2xzFRMTg1lCDR86kAAJkEBZEsjrEfKbwbKsBKZN%20AiRAAiRAAiRgQgRgXXHdlQnVJ4tCAiRAAiRAAiSgAAK0rhRQCcwCCZAACZAACZCACRGgdWVClcmi%20kAAJkAAJkAAJKIAArSsFVAKzQAIkQAIkQAIkYEIEaF2ZUGWyKCRAAiRAAiRAAgogQOtKAZXALJAA%20CZAACZAACZgQAVpXJlSZLAoJkAAJkAAJkIACCOi6Vzt2TOa2WAqoL2aBBEiABEiABEigbAhgI6vs%207Gxd0tbVuoJpRetKF6AMQwIkQAIkQAIkYJIE8v0ql0wZOTMoA4deJEACJEACJEACJFBkArSuioyM%20N5AACZAACZAACZCADAFaVzJw6EUCJEACJEACJEACRSZA66rIyHgDCZAACZAACZAACcgQoHUlA6cs%20vdLT01NTU8syB0ybBEiABEiABEhALwK0rvTCVsI3zZ49283NbfTo0a+//vqsWbMKTW3OnDlBQUGF%20BmMAEiABEiABhRA4duyYl5eX7pnhc153VkoIqeuODErIa/nJw6JFixYvXvz222+fOHHCw8Oj0ILD%20GmvdurWPj0+hIRmABEiABEhAIQSKtM8Rn/MKqTUds8GxKx1BlV6wjh073r9/f+LEiUuXLt2wYcOR%20I0f27NkzePDgH3/80dvbOyQkpF+/fvb29i4uLmPGjMG2Zs2bN3/06NHQoUMXLlxYerlkSiRQAgT+%20/vvvpk2b2tnZtWvX7uLFi0ihWbNmt27dEkn17t374MGD6s1h8+bNUtOIjY0tgRwxShIocQIYxMJj%203MbGpnLlyuIxHh8fz+d8iXMv4QRoXZUw4KJH/+2337q7u48aNapbt26hoaExMTFoaTt27Pj9998n%20TZq0bt26a9euHT58eO3atX/88cfevXsxXIy3ESyt7t27Fz013kECSiFw9+5dTIXj2LdvH14zb731%20FnIWEBCQlpYmshgYGJiYmKjeHDIzM6Wm4eDgoJSSMB8kUBQCQ4YMadGixcmTJ/HYx0MeA1qYu+Bz%20vigIlRiWM4OKqxUYVejEtG3b1tfXV8ocXiroysNl7ty5cXFxsLp69OiBfjym7WvUqGFra9uhQ4c6%20depI4SmQgNERWL9+fcuWLb/55hvkfMmSJStWrEhJSSmwFFJz2LRpkyQXGJKOJKBwAllZWZipePPN%20NzEjce7cuYSEBHQnLCws+JxXeMUVmj1aV4UiUkQAzAkKY2vkyJFXrlzBbAh67b169cIKLUXkj5kg%20gWITwJcZmBYU0VSpUmXKlCnaopSaAwKoy9rC050EFEvAzMwM3Wl0qv39/aHMIp98ziu2vnTPGGcG%20dWdVliGdnJxE8pgo/OGHH6Kjo7du3Xrp0qVp06aVZbaYNgkYjgCWEkZFRYn4sJQQHfqkpCRconMv%20HKH8QpCaAy7VZeHLMwkYEYHbt2+PGDECfQlMee/cuRM5xy/Z8TlvRDWoLau0rrSRUag7Vllhkh6Z%2069mzJxZCYgQLcqVKlfBaysjIUGimmS0S0IFA165d/fz8sPoEE4LTp08/f/48FhTim9nt27djJcqy%20ZcvQqdAhGgYhAWMiEBYWZm5u3qlTJ2R63rx5OONJzue8MVWhlrzSutICRhnO6MTAclLPy/jx4yMj%20I9HLR5cd31LhEr54LQ0aNEiXnbHUo6JMAooigA7D2LFjO3fuDPW+cOHCjBkzkD0s8oWAlYVr1qyp%20V6+eojLMzJBAcQjg8Y6jffv2WG6I5bPOzs7oV0D5sdMhn/PFAauQeysiH7psuQEl0CWYQkpl8tnA%20vAn2YijSTnQmz4QFNA0CGI7FFImrq6tUHKxbx+8W4ENayYUCCZgYgYiICFhX1tbWWNWOJe0QUEA+%205xVYyzraQirDGbnXxWzSMUYFsmCWSIAESIAESIAESKD4BHS0hRDsX7NOxU+YMZAACZAACZAACZBA%20OSdA66qcKwCLTwIkQAIkQAIkYGACtK4MDJTRkQAJkAAJkAAJlHMCtK7KuQKw+CRAAiRAAiRAAgYm%20QOvKwEAZHQmQAAmQAAmQQDknQOuqnCsAi08CJEACJEACJGBgAgb4nUFsd6nLng4GzjijI4ESJoBP%20arGpWKGJUP8LRcQAxkhAU/+p6sZYj8xzoQQ0Vb3QW3QJYADrCqYVrStdWDOMcRFAk9Mlw9R/XSgx%20jNER0NR/qrrRVSIzrAsBTVXX5a5Cw3BmsFBEDEACJEACJEACJEACRSBA66oIsBiUBEiABEiABEiA%20BAolQOuqUEQMQAIkQAIkQAIkQAJFIEDrqgiwGJQESIAESIAESIAECiVgxNZVenp6ampqoSVkABIw%20YQJsBSZcuSyaOgGqujoNysonYKzW1ezZs93c3EaPHv3666/PmjWrUNBz5swJCgoqNBgDlBCBY8eO%20eXl56R4560sXVmwFulBSThi2Ar3rgqquN7oyuZGqnoddfGcrf0ZQbQFkvLTdUnz32rVrr127FtsR%20oRZv375daISVK1c+dOhQocEYoIQIHD161MPDQ/fIlVBfOiq2jsF0L7vuIdkKdGelhJDG1Qo0FVvT%20pdSoUtVLDbVBEjJ2VZeBoGMrQDCjHLvq2LHj/fv3J06cuHTp0g0bNhw5cmTPnj2DBw/+8ccfvb29%20Q0JC+vXrZ29v7+LiMmbMGFhgzZs3f/To0dChQxcuXIgyG8vx999/N23a1M7Orl27dhcvXkS2mzVr%20duvWLZH/3r17Hzx4UL3gmzdvliDExsYqs5iwhlEdNjY2sJ9EdcTHx5tGfZUycNNuBSap/JKGsBVI%20KHQRqOpG95yXqrW8q7qMmSZ5AZYk5xNkvPKFNNSln58fBkK+++67wMDAPn36zJw5c+PGjY6OjnXr%201v3tt99w6evre+7cuR07dsDG2rVrF8LDF+4BAQGGykNJx4OimZmZTZ069fjx46+++iqKhhStra0v%20XbokkobL9u3b1Qu+fv16CUJmZmZJ57BI8UtdmRo1agwbNgzG4rRp0xwcHGD7YmJXmfWlo2LrGKxI%20uHQJbMKtwMSUX6pN42oFmoqt6SIVrUQFqrqxPOclNTB2VZcKoino2AoQzAB7tSOWUj66deuGwY+2%20bdvirSwlnZiYiHc2XObOnRsXFxcaGtqjRw+M7mC5D97otra2HTp0qFOnjhRe4QJMpZYtW37zzTfI%2055IlS1asWJGSklJgnqWCb9q0SZILDFnmjllZWRhxfPPNN2H1wvxNSEhIS0uzsLAwgfoqfbYm3ApM%20UvklDWErkFDoKFDVAUp6tiv/OS9VazlXdaO0rqTKUxcwJyiMrZEjR165cgVzZBi/6dWr16JFi9SD%20GYuMNfiYFhS5rVKlypQpU7TlXCo4AqjL2sKXoTtG42AW41np7++PrIqcmEZ9lSFV9aQlBTBqqiap%20/FI1sRVIKIojUNWLQ6907i3nqm6U664K1AwnJyfhHhMT88MPP0RHR2/duhXzaJiBKjC8wh2xaCwq%20KkpkEovGMOSTlJSES/QGhCOKKQSp4LhUl4Wvos74/mDEiBGwFLHWaufOncgbfuDJNOpLIZwlBTBq%20qiap/JKGsBVIKIojUNWLQ6907i3nqm461pWkLviYf8iQIbjs2bMnFlBjBAsyft0dxkpGRoYUTOFC%20165dsdrg5MmTmBCcPn36+fPnsbwdq82w1gozwcuWLYP5qPAiaGYvLCzM3Ny8U6dO8Jo3bx7OqBHT%20qC/Nwpati1FTNUnll/SBrUBCYRCBqm4QjCURSTlXdaO3rjD4ActJXTPGjx8fGRmJ7i86N/jCDpfw%20xfN60KBBuuyMpR5VGcowDceOHdu5c2cU5MKFCzNmzEBmJk2aBAFryNasWVOvXr0yzF5Rk0Y14Wjf%20vj0Wk2EZnLOzM6xGFA07lplGfRUViGHDg60ptQITU36prnMbAVuBxEMfgaquD7VSv4eqDuQV8Q9j%20IYXCByxtwWS8Co225AJgNg3foxVpB8uSy4zeMWPgDZNorq6uUgxY24gd6t3d3SUXoxMiIiJgXeH7%20R6xqx5J2CCiCAutLR8XWMViZVJMCqerOwSSVXyq+8luBpmJrukjFKXOBql7mVaAtA8ao6trKAncd%20WwGCmax1JUOHXiSgCwHdW5G2jocuqTAMCSiTgKb+a7ooM+fMFQkUiUCRFFvHwAj2rzm1ImWIgUmA%20BEiABEiABEiABDQJ0LrSZEIXEiABEiABEiABEtCfAK0r/dnxThIgARIgARIgARLQJEDrSpMJXUiA%20BEiABEiABEhAfwJK3Kv94EO/xTfnB8b7O1k6t/PsMKnFVy5W/3w0J1/WSWfGByfeH9lgVLdq3UXI%20jOyM+dfn7gvdE5b8sKZ9zb4+A4bXfx8rzuD7MCl05qVvL0dfTMtKa+DccGyzL1q5t5GP31C+J29H%20/3kkNCgq2cHGvLmP0//1quVkZ6Fj5LP+6/8wJnXgc9Webegmbjlw9dH2M+H5bp86sL67o1VkbOqC%20XfdvPkhIz8yuXdnuvW41m9R0zBeymJfZWVk3Vy9/cGBfcmSkvbd37Vf71u0/sNA4E0IfXFk4L+bm%209cyUFCffOg0Hv1P12efFXcmPoi7NmxN97WpWeppznXrNR3/i2rCR8Io4c+r6iqXxQfcsHRw9W7dt%208dFYSweHQtMyxgAyeltocbbd37zx3romLs2mtPpaCizTrGS8pNsNK+ih//h0YNOJh4evPw6OSnG2%20M2/t6/Ju1xpuDpbImIzX7G0BIY/+9RNS1d1tPu9X17DFEbHpoZyZaak3Vy0PPXIoOSrC1rOyT49e%209d8aYmZlhQhlmpVMAymJcpVCnMXRQM1nvsyDXcarhIppWFUv20e9hIiqLqGQERT3zeCukP9NOP2J%20eo6r2Xnv7Lnf0kz1xJE/9ofu/eTkKISZ1nr6QN/BIvCnJ0b7PdyjfuPQusMnt5z6JC2m9+4ucelx%20klelipVWvriurUd7yaWEhEPXHn3/l7965JWdrVZ80srSvPChxOM3o7/ecBv3fvaq7yttK4tI8ArZ%20czFvY3cp2j8+a21nZfbuvIsJKar9VMVRqWKF2cObNPPJ29f+qXOx/j8zfVrwvt3qUTQY8k6zD8ao%20u+STUx4/3jPszYzERHX39l99W/OlnhlJibsG9U+LfSJ5VTQz67Lgd7dGjR8eP3riywmSOwSHGjV7%20rFpfybxEOgm6fxtSEt8MatNb9eIXKEcmRww+OAB9ifaez0CfRRiZZiXjVWD8xXfUT/81lbyaq/Wi%200c1trcxlvPp8fzopLe/nDUTO61a1WzSqRfFLkS8G/ZTz2MRx4aeOq0dV9blOz834CS7ampVMA1GP%20p/iypv5ruhQ/FcRQHA3UfObLPNhlvAxSEM1ISkHVkWipPepFAcuDqmtWpeSiYytAsMJf51KkpSBk%2052QvvPErEvKw9lz03PKR9T+EjN7Glvub5VP/5dpPIw4PFqaVesjbsTeFadWl6ku/d1rT0q01fDfc%20/TMqJXKN/0phWk1oNvmHdj/bmdtLqavHYHA5OztnzaEHiBbd7umDG775XDXIEbFpey9Gyqe1fH/w%2056uuC9MqX0iMgcHl+UZu4/r4Sn8u9hZbTocJ0+qD7j6T+te1tTLLzqnwR27q+WLQ+zLhQXCwn8p4%20rf1aPxg6eDdADti8MS0uVibO2+tWw7Qyt7FpPWFyp7kLbL1UZmLA5g04B27ZDNMKFlWHadNfnLfY%202s0tJ3dsDF43Vi3D2aGmz0vL/mj5qWqT2ISQ4JAD+yCY2CGjtzIl3Re6e+KZsS/v6QbTSj2YpNia%20zUrGSz0GA8r66X9wVPLeS6r+A2yjz/vVaVlb1T3ACO6BK49kvKLi0oRp9d5LNaV28U7nGgYsjhSV%20Hsr5+NpVYVrVfqVv10XLvV/sitjCjh9JigiXaVYyDUTKjBEJemugtme+zINdxqskiBlc1ZHJMnzU%20S4io6hIKeaFEOv3yScr4BsTduZdwFwHGNP60U9Uu+DsQ5heUcG/Pgx1Olk5rAlbCq2f1l4fVG3Hh%200bk5V3+QLtcGrE7OVP0MX75j3wPVmIpZRbNv28x0xYvayq3fvt4Z2ekHH+7fE7oLXs94PjuiwQcQ%20kMriW/PPRJ2KTXvibOWSLx4DXqJ5hDxWTVUM7Vy9Q31X/J28FRManXL4RrSDrcWWU2Hw6tTYvX/H%20qteC45ftC5Iut50OT0n/Vy8cXjgwcCKaXJdmHh3quWRm5dhYmQmvI9dVv5bTqraTsOEePE7BdOTl%20+3FxyRlOtrpORIqotJ0xqYEcYC6jxZjPYC21+nQCXg9Zqanhp07EB91/dPUSdl9rN3mqQ/Uat9et%20eXj8MC7bT/k65tZNRFi53TO+r/WDUOOlHrfXrk7O/V3FB4f3w6Xac51qdO0OARMlVxb8ipdQ7P27%20sf534NJkxAcu9RvgL9hvLyYWHxzc79OjN9xN6dCmt38HbTsSfiArJ8vd2uPnZ+ZnZmd+enJUQkYC%20ps4XPLfsaPih/wVvkzhUzN0rGJcyzaqleyttLe6tOnmjv1KEBhH0038ry0piz+NJ/evV9LBtVdt5%200JzzyM/dyOSKlbDRsSprml6ezqoBbwuzim88Wy01PcvaAr8qqxqtN/iR+DBUm3JaO7vcWP07UvTp%208bJvn9dj7ty69Ots1WWvVzAnDqGSpWWLT8eZW1k3HPpu6OEDcEnBzphXLmprVtoaCCYZEQluN65D%20Rjn1e+bLPNhlvErimW9wVS/bR73QK6q67u1LWdZVeLLKtsDR8un6p1burWH3wL1LtZfm35h7P+He%20jSfXWru3/er8JLg7WDj08Fa9Wd9vMDo+Iw6G0dagf41yheVGWNPeB6YVgtV3bogxqqTMxPDkh/j7%20V0IebSrcgkMF3FISLU0Vde4RGZcmhCY18tY/NanhAOsqKjatY33X1QdDYAP5hyU29XGcsy0Q7nbW%20Zp2aqDI/6PlqCamZ8cmZohMvIsEZ416p6dkQ1h198N2m29nZFWp52WLesHENR/Td4Q5BBJZShLuh%20rCustULkTrV9YVpBsPXysnZzT41+nBwZ4dP7Vf/NG7LT08/9+H2rT8dfW7YQo1A+PV+2r+bddvLU%207IwMa1fX9IQELKJ6ePQw7vVo3hJnEaFroyaQcbg9FWLvqOZDcah5NYZ1hYSEuymdteltQkZcc7eW%20K+4sRWGX314CnT8WcQTy921Vc0ndqvXAUkUIm+6uh5JDEIdMs5Lxenq3gf/XT//RT3C0MUe3AaaV%20eoacbM3T0rO1eQVFqsZ0MUT/wYJLwY9SMPPevp7LuD51sNhRPZLiy5ISaiqnV9v211cug6LGBvh7%20tmp9ftb3sYH+Nu4e1V/shmWFXq3bmVlawg7GYBVGfJETdFRUPYfcqfYCm5W2BpISFelQvWbxy1LK%20MchooH7PfJkHu4xXSTzzDa7qZfuoF4pBVde9gRj4KaN7wgWGDE8OF+4uT0ePXK1UhkVESoRlJcsZ%207WZjQQlW+w480BfjyXD/suXXXraqSaUPG6lW+TxIDMlnXUXkWlciEgTA4WrlihdPcEIQVrLjUi0h%2091z/CrilkUtjIZfE+dFT6wovBhG/s71qGOlxfJqFecUv+tX99PerGH/6aMkVzOLh+Kh3bSxOh/B2%20p+o4h8Wk5rOuxCsEXgFheaN39yOTP191Y8GHzbCSHe6SISUSggvyULeKPYTiH8lRKuvK0vGfhVxW%20Ts4q6yoq0rFGzSYjPry6+LfHVy4d+vhDmFZ4qbT4RDWjBy+R9P5RI/DigYzJQaxeR/87PT4Ol1ZO%20eRFaOavMBRxxQfeEgPXsQkBCEEQGhIvJnLXpLV5F37WddTjsAAac5l2fk1NBpSIvVunar9YAlVC1%20K/4gYAj25hMVVXHINCvp3abWEPJaHDrKsEuexmGw//XTfwzl4k9kIjElc8bmvGWLrX2dsYhQm9eu%20CyrlRCuAaSWEYzejE1Mzf3o3z3Y3VKkkJdRUTvwAJMZu940ckpWWtv+DdzOSVI20zRdTcr/GcLBx%20Uz127mxad2X+LyIz7ad8A3tLW7NKDA/T1kBwi3FaV4Z85qODre3BHhjnr82rhJ75Blf1sn3UC/2k%20qgsOupyVte5KyrEwnnApZjeyc7LwIkGvfXh91Sye8O1a9aU+Pq9Lt8gImTn/LOsWwTC3kk+QbtcM%20LHkZVsgS1pOqjKojC2+znAoNqztgFgOXwrNjA9eXWnjm+ms94W3h6WRVxcX6+yENd331zIiuNRAU%20b5TdTxdySQlJUcB6k+RiCjm5Zm4ORsz+fcCWgkO9gW+7NlSZqnkvlYlTLO3/ZdWhd27jqSogukRX%20ly7IKzamO59GKP0GZk5mXpXBUz0pkZC6i8nImqoIvbUys0I3A19gCNMKg1XftJmpY5ELalZ5txbk%209S/OOiahezBJLYuk/5guH7XoMs5IqF+HKurfZ2h6Qc/RNJr7OP45rvVfX7Rt5qOyyy/di7sbUcAq%20At1zrhlSUtcCldOxpg+ms3GXaAW1er9apUNH9UhgYznWqg07DI5Xl8xPiozQ2qwy8x5lUooFNRD1%20uI1GLlADi/rMF40CZZae8FL5pdYk4yUFNqxgKFUv20e9YCIpHlW9UCVRlnXlYe0hcoylJEKITY+F%204GnjhdcJhGF1hwt3nAf4DpJkbYK7jSrCxIxEKUBcboTedtXNK6qGjhKfJiTc4VLZpooUuCQEV3tL%20Ea30KVN87jd97g6WlfBFX4UKrz+T10eH/HIbr0LzAPNr3fg2a8a2bl/P1dKi0qAXvLGeHXeFx6Sa%205UaYnJb3RE5IzhPwyik0Wh0DYDgKIcVrQ9ySnqh689l4qnJeycysbv83hbtdlaqV23aADCsyPiQY%20f+jNt/1iyqubd9QbqFriE+K3J/VJjLmtHWR8GCXuykjM0wR8HpjnkpDnhVlFuAjjTHiZzFmb3nrZ%20qEZqm7m1aO6qmkXF0blqV49cJReXBZ5lmpWndZ7trq3FFRhhcRyLo//rj4aOX3EN8yNYSjWqp8+Y%203rWlnBTo9Z8366NpzBnR1MvZ2sXecngXVccDh1inKGSDnEUrQFQZWpTTt2//ShZ5Kx19+/QXiWJj%20BbSC1NgnWGLYc/WGLgt/hzvWtYTs36utWdlVraatgRhpQ5BRTj2e+ehsaHuw13bw1eZVQs98g6t6%202T7qhdJS1QUHXc7Ksq4q2+ZZNref3BS5x8dTECTtn331n2767Csz0nNn92TKKW4MSQxKylD1VsOS%20HsZnqN79VeyqwmKDcCs3fpXw5AbOOKrY/mPcCBfDnj2c8qyru+GqLOEIzBU8nlo8S/cG5TqrTkv2%20BonZPclFU0D47zbeXrT7vvBCXxbfqkDGKhN3R1VagU976iIhuEhpiVuKc7b1UL2eE0KCsnN71ekJ%208Sm5i9OFO2b6bqxUfeiHIyk8zH/TOggwmPYMeQN/WPme61PBo1kLIWBpsG2uWRZ3726ey90AIWDj%20KyHE3QtUF0R44WIyZ216KxoINge6FH1BFPbv4K1Xoy/LF1ymWcl4ycept6/e+o8vPPDZLFQbG1Yt%20GNV8QEfVEK84CvSKTkhHu8AftsgSwTKfjhbDOHt6q2H+l5RQm3JeX74ECw1FYtjLTQwAnJ3xDVrB%20pV9+Eu4u9RqIna5iA+7INCttDcTGo/CemGFKa9BYCtXAIj3zYZBpe7BjZx9tXiX0zDe4qpfto15U%20O1Vdd/VXlnVVx7GeWCO14s4SbMSwPWjLtZgrKEx7L9VAOl4q4pMofDCFy7vxgfOu/yxf1PaeqhvT%20s9N/u/Hz49RHc6/9KMJjK6AOuXEeCtt/MuLYvfi7fwauhhf6NyJy+WiL4+vjaeucu3HopuMPsdWn%203+WoOw9VgzEta6lWGmHrOewXB8E1d/wJGyGuOhAinxwWbB25Ef3fU2F7L0Xiw6g/Dj+Iyx2jauDt%20IOI8dTvmQmBsyKPkbWfCEFUNdxsRuXy0OvpiS0+ExPYKsJyy0tNvrFL1vzHH4dGyNYTrSxehLw4B%203wzifO33xfHBQVibYuXiisvbG9ZmJCfBILv7v624xOHk6+vZqg2EBwf8YGBhKEss9cWLx6VefdE7%20V92VlBh18Xzk+bMI6ZWbAdXNJnTI6G1sWuzXF75EWfFJB2YJMZ8y+ex4saBEGwCZZiXjpS22Yrrr%20p//YDnfj8Yci6fe710xKybwWFIc/bMegzSsuKeO0/xM0DbyTMBUYm5Sx8mlTql/NwDvQ2ntXl1HO%20x9euCDUW46/RN67d2fAnyuJYsxbO2D3oyZ3b2Ds0cNtmjObCxal2HZlmpa2B5JtzF6yUf5bXQD2e%20+TIPdhmvkgBlcFUv20e9QERV111VVH041Xqfwg6ZHbRkvAqLtQD/ZbcWSTaQ8LY1t93/8nG8sl/b%20+9Lj1Mcwv7b32PPxiQ+xxzpWZa3psknaYB2r2nvs6oS71HcTHeD3qvoKX/h2rtoNn68HJdx/ZU83%20abJfpDWr/dxXa/YVcsmdMYuBXrh6/NaWlf4c1waVMXL+pSeJGTC/lo1pMW39bbw5sLB47oim0gbr%20WNU+7BfVuIW0m+iV+3Gfr77+dJ1SXqxYhrV0TAt030fMu/i0x57nhY2vujXPmw9Sz4Pe8sGPPnh8%20VTV8gl09xQgWZjqwWxW28zn40ftQr1ovv9bo3ff2DhuIT9Cx63qXhcsDt/x1+TeVZayaLsEak9xx%20ryrPPPf8rJ/xSdTOt/qK1VTY9UoIHafP8n6hc8B/N176dY56Qhb2Dq9s/tsidzJR7/xru1FHxdYx%20mLZUtLlr09svTn+2I2Q77vql40KMxf545XvI79QbObHFf6SoxL0dPDuueFH1FsehrVnhUykZL3Gv%20wc966L/flaid51VL1PMdz9R3dXWw0OZV2cVq6+m8RdPSjX3bV/no5X+mFCX3YgralBM6vG/4kMTQ%20EBsPzx6rN5z8amLUhXNQ++7L1+K8951B+HIQSZvb2GamJEOwdHLq/vtafHurrVnJNJBiFiHf7ZqK%20remS7xb9LrVpoH7PfJkHu4yXfjkv9C7DqvqAjlXL9lEvylseVF2mZnVsBQimrLErFGlE/Q9GNfpY%20TJDj0seh9qoX1+Md8PO1WTCt4DKl5ddu1u7T2/5oUckSaxinnP1csg7FPH0+Lguf+x2vGckR22XN%20bKd6Q/s41Fr6/Crsryi8rM2sEXMpmFZIDrtPDenkLRZF4dLbzWbO8Cb4su93v2CYVnDB0x/LRCb0%20rYMpDJi+P20NkMpoplFjzWs5TRvYwNvtn61u2tZx/undxjaWZoh55tDG4tdCEK2VRSV8gWhY0wrR%20dvzuh8rtn4GgMpIqVqzZvVfrzyejL3525rewnLDLWPP/+9TOq3LTDz9CGOx0FfDXeizGajb6Ews7%20O0yX4C6YZViY0mHqtwiA94pqf9Hc+UGYVnjrIDaYVvCq0++NJu+NwjtJWGNYCNz5t8UlZFohubI9%20CtTbk5HHhWnV3bsX/rDxWzNX1aTqH/4rbsRckzIsNR/JRVuzQgAZL+l2wwp66H9YdGqBeTA3q4j+%20hjavUT1qYR8TdF1EAHyTO7iT94c9fAoMX0xHbcqJH7qBaYXIW4+fhOGlNp9/aWZtDbU/O/MbbE3y%20/OxfocbwFaaVe7MWnebMRxOAS4HNCu4yDQS+xnho00D9nvkyD3YZrxLiZlhVL/NHvaBEVddRWxQ3%20diXynZ6VHpwY5Gzp7GFjmFGW+PR4bHZS3b4mRsLyocEUJNZv1bD3MauUtwlnvgAldJmRmY3NprH1%20jmT9FDOhmIT0mMR0jFrZWeft9SBFiClIrN+q6mojmXSSl6EEzNYlRUTghWFu/Y+dJx85TMbkiHDM%20J2KtrtnTNb/SLeijZ6Wn2lerLr6lktxhWiWEhlg5Olm7ukmOJSHo3keRbF+DZ0NGb/VIS6ZZyXjp%20kZAutxhc/7UlmpWVExGbiu8Hq7lZm2v2TrTdppe7fsqZFh+X8ijK1quK5uyeTLPS1kD0yngBN2nq%20v6ZLAbfp62RwDZR5sMt46Zt9ufsMrupl+6gXRTVtVZepTh1bAYIp1LqSKRu9SKB0COjeikrOuiqd%20kjIVEtAkoKn/mi6ad9GFBIyOQJEUW8fACJY3Zm50OJhhEiABEiABEiABElAmAVpXyqwX5ooESIAE%20SIAESMBYCdC6MtaaY75JgARIgARIgASUSYDWlTLrhbkiARIgARIgARIwVgK0roy15phvEiABEiAB%20EiABZRKgdaXMemGuSIAESIAESIAEjJUArStjrTnmmwRIgARIgARIQJkEaF0ps16YKxIgARIgARIg%20AWMlQOvKWGuO+SYBEiABEiABElAmAVpXyqwX5ooESIAESIAESMBYCeT/QTo9yoEd33HocSNvIQEl%20E9BRq3PVn/qv5Jpk3vQhoKn/VHV9OPIexRPQVHWDZNkAvzNokHwwEhIgARIgARIgARJQMgGYYrr8%20sCyCcWZQyfXIvJEACZAACZAACRgfAVpXxldnzDEJkAAJkAAJkICSCdC6UnLtMG8kQAIkQAIkQALG%20R4DWlfHVGXNMAiRAAiRAAiSgZAK0rpRcO8wbCZAACZAACZCA8RGgdWV8dcYckwAJkAAJkAAJKJkA%20rSsl1w7zRgIkQAIkQAIkYHwEaF0ZX50xxyRAAiRAAiRAAkomoOte7dylV8m1yLyRAAmQAAmQAAmU%20NAHdN3bXda/2ks4x4ycBEiABEiABEiABEyDAvdpNoBJZBBIgARIgARIgAWUR4LorZdUHc0MCJEAC%20JEACJGDsBGhdGXsNMv8kQAIkQAIkQALKIkDrSln1wdyQAAmQAAmQAAkYOwFaV8Zeg8w/CZAACZAA%20CZCAsgjQulJWfTA3JEACJEACJEACxk6A1pWx1yDzTwIkQAIkQAIkoCwCtK6UVR/MDQmQAAmQAAmQ%20gLEToHVl7DXI/JMACZAACZAACSiLAK0rZdUHc0MCJEACJEACJGDsBGhdGXsNMv8kQAIkQAIkQAIK%20I6D7TxIqLOPMDgmQAAmQAAmQAAkojgAsq4o5OTmKyxczRAIkQAIkQAIkQAJGS4Azg0Zbdcw4CZAA%20CZAACZCAIgnQulJktTBTJEACJEACJEACRkuA1pXRVh0zTgIkQAIkQAIkoEgCtK4UWS3MFAmQAAmQ%20AAmQgNESoHVltFXHjJMACZAACZAACSiSAK0rRVYLM0UCJEACJEACJGC0BGhdGW3VMeMkQAIkQAIk%20QAKKJEDrSpHVwkyRAAmQAAmQAAkYLQFaV0Zbdcw4CZAACZAACZCAIgnQulJktTBTJEACJEACJEAC%20RkuA1pXRVh0zTgIkQAIkQAIkoEgCtK4UWS3MFAmQAAmQAAmQgNESoHVltFXHjJMACZAACZAACSiS%20AK0rRVYLM0UCJEACJEACJGC0BGhdGW3VMeMkQAIkQAIkQAKKJEDrSpHVwkyRAAmQAAmQAAkYLQFa%20V0Zbdcw4CZAACZAACZCAIgnQulJktTBTJGASBHJycvz9/a9evZqZmWkSBWIhSIAESEAnArSudMLE%20QCRAAkUiEBcX9/bbbzs5OdWvX7958+YODg4vvfRSSEiILpEkJCT897//DQ0NFYG3bt1aqVKl06dP%2063Kv3rfIRP7HH38gA9evX5cJQy8SIAESUCdA60qdBmUSIAEDEHj48GGbNm3Wr1/fv3//devWwTwa%20PXr0kSNHWrVqdeHChUITuH379oABA06ePClCwjLz9fW1tbUt9EYpgB63SPcWKGAQrkB3OpIACZBA%20gQTMC3SlIwmQAAnoTeCbb74JDAxcuHAhjCoRSd++fXv27PnKK6989tlnx44dK1LM3bp1CwgIKOlb%20ihQ/A5MACZCAPAGOXcnzoS8JkEDRCISFha1cuRJjV5JpJe7v3r37wIEDjx8/fvToUSzDat269axZ%20s955551q1aq5urr27t371q1bCPntt98OHToUwqRJk9q1awfh4MGDCHzt2rX4+HgIGzZseO+996pW%20rVqlShWEgePgwYPd3d1dXFwwF5mUlKR+S0xMDG7JdyxevBhhcMyfPx+zlhgV69Sp059//ikcccbY%202xtvvFG5cmU7OzvYhcHBwZIXBRIgARLQhQDHrnShxDAkQAK6EhBr2IWFlO+eYcOGrV27FpODzzzz%20zMXcw8PDAyZXamoq3IUjbBofH587d+7Aq1GjRoghNjYWYRMTE7OysiAgkjp16sAsO3DgAOwzWEUZ%20GRmDBg26efMm5iLr1q2LkTPpFnNzcyz8krKBW6KiomxsbODy5Zdfzpw5s0ePHi+//PKOHTuQ4YoV%20K8I+w4oxWHUIhjhhtG3ZsmX79u1SDBRIgARIQCcCWE/AgwRIgAQMReC3337Do+d///ufZoR3796F%20F8a00tPTIVhbW8OKEsH27dsHl/fffx+XZ8+ehbxx40bhhRXuuMQyLAxEQYBpBUsLXpGRkbiEqYTh%20K1ympaVhEf1rr70GWbpFxCDOGAMzMzMbMmQILoOCgiwtLTEGJrxwb8uWLREzLr///ntEu2zZMuEF%20M8vb2xsusBqFC88kQAIkUCgBzgziscmDBEjAYAQwAoS48OjRjFE4igDw7dOnT7169UQwfFEI++bQ%20oUOad+VzwVgXJuzg6OnpCQFTiljDjktYS5hkFHZbvltw+eDBA9zYpEmTpUuX4hITlAiJga6duYef%20nx+8sFbsxo0bWBbm7Oz87rvvikgwhDZixAgh80wCJEACOhLgzKCOoBiMBEhAJwIYAUI4WCqaocXi%20dMmiwpeA6mFq1679999/q7sUKKt/PIiNEjB5JwWT7DbJRQgYmsLXi1jshWk+MS147949eE2cODFf%20yIiICOwEASsNU4qSlyiRdEmBBEiABAol8M8TpNCgDEACJEAChRLAOnELCwvsETV27Nh8gVevXg0X%20LHgX7o8fP1YP8OTJEzc3N3UXQ8ljxow5f/48RqlgwIk4sboLwrZt29RXZcEFk4AYEsOWEOpJ58un%20uhdlEiABEiiQAGcGC8RCRxIgAT0JwHAZOXLk5cuXf/31V/UoYNxs3rwZX+c9++yzwh3GTXJyspDD%20w8MxW9e0aVP1WwwiYypw+fLlX3/9da9evaQIsfMWZHyl2ODpsWrVqn79+mEwDBOU+OxRmqPEbCa+%20UpRupEACJEACuhDg2JUulBiGBEigCAS++uorfJ2Hra3weSC2ucJQ1okTJxYsWID1TD///LMUERaM%20Yy+r8ePH42NArCXHQqgJEybAVyyrgk2D1evFXPOEbww//vhjrHbHDg4rVqwQScP+w2otJD116lR8%20rtixY8czZ87MmTMH+ztg2vHTTz9FVrEjA74oxBQh7hKr7KVsUyABEiCBwgkUuu6dAUiABEigqASw%20rwG2oXJ0dBTPIHweiP2u8Es4Ih6x9hxbSWEaUQTAfNyaNWsk365du8ImwwEXbPWOMPglHOyzAOGH%20H36QMgOzCV8gSpeNGzeGMad+y6JFi0T86ufOnTsjTHR0NEworIWHl5eXF8w4/AKPiArfJ0ozhjCw%20hg8fjjDYcEtKiAIJkAAJyBOoCG/15w5lEiABEjAUATxe8CvOGB+C3aO+Thw7VMGsmTx58owZM7CK%20HMGqV69uqESLFA9yApsP67E0V8RjuRWWw8O6KlKEDEwCJEACIMCZQaoBCZBASRGAySINAmlLQ+wm%20pc23pN0xPJbv00UpRfWvESVHCiRAAiSgCwGuateFEsOQAAmQAAmQAAmQgK4EOHalKymGIwESMBQB%20jBhhl3b8vKChImQ8JEACJKAoAlx3pajqYGZIgARIgARIgASMngBnBo2+ClkAEiABEiABEiABRRGg%20daWo6mBmSIAESIAESIAEjJ4ArSujr0IWgARIgARIgARIQFEEaF0pqjqYGRIgARIgARIgAaMnQOvK%206KuQBSABEiABEiABElAUAVpXiqoOZoYESIAESIAESMDoCdC6MvoqZAFIgARIgARIgAQURYDWlaKq%20g5khARIgARIgARIwegK0roy+ClkAEiABEiABEiABRRGgdaWo6mBmSIAESIAESIAEjJ4ArSujr0IW%20gARIgARIgARIQFEEaF0pqjqYGRIgARIgARIgAaMnQOvK6KuQBSABEiABEiABElAUAVpXiqoOZoYE%20SIAESIAESMDoCdC6MvoqZAFIgARIgARIgAQURYDWlaKqg5khARIgARIgARIwegK0roy+ClkAEiAB%20EiABEiABRRGgdaWo6mBmSIAESIAESIAEjJ4ArSujr0IWgARKk8DVq1crVaoUEREhJTpv3ryGDRtK%20lzICQvbu3VsmgPD65JNPPv744wKDVatW7fDhwwV6yTsGBQUh29JRr169iRMnZmRkyN9FXxIgARLQ%20j4C5frfxLhIggXJLICf3kIqf71Jy1xSysrIQWNM9nwvCZGdn53MUlwsWLGjUqFGBXvKOiBDRnjhx%20olatWhAuXbo0ePDg+vXrjxgxQv5G+pIACZCAHgQ4dqUHNN5CAiRQAIFmzZr98ssvGBZydHQcN26c%20CHHv3r0uXbo4ODg0btz49OnTwhFDX6+99pqzs3Pbtm0PHDgAx88++2zp0qV9cw8RZu7cuW+88YaQ%20ExISYFRdv3599uzZwcHBhw4d6tevH8a33N3dq1evvnv3bgSD6YZEvb29YT9Nnjy5e/fu4l71s4eH%20R5UqVapWrfryyy+3b9/+2rVr8D127Fjz5s1tbGwqV668cOFCuEyaNGnatGmdOnWys7N7/vnnIyMj%204fjgwYMePXogz88+++yoUaOQPThqFgSOPEiABEiA1hV1gARIwDAEAgICFi9eDCNp5syZMD5u3LiB%20eF9//XUzM7N9+/aNGTPmr7/+EikNHDjQwsJi//79r7zySp8+fR49evTw4cMvvviiYsWKo0ePFmFg%203GzZsiU8PByXe/bsSUlJgX0WGBiYlJSUmJi4bds2CDt37oSRNGHCBISB4bVu3bolS5b89ttvyMP9%20+/dFPOpnxAYjCV7r168/evRot27d4DtkyJAWLVqcPHkSNhPsKoxshYWFoQjDhg37+++/Q0JCFi1a%20hGAw/FAQ5KRXr15I5fHjx3DULIh6cpRJgATKLQHODJbbqmfBScDwBL7//vsXcw9YJ1jqhASuXLkC%20oWbNms8888zZs2cxDgQjDJYNbC+MA73//vsbN26EFYWQdevW3bp1K4QdO3bg3KpVKyzngsv//d//%20wZbCRB5sL7iLw9bWFuNM1tbWGK8SRtKaNWswZIVBKQSAvbVixYqnYf/5HxabdIERNQTGiBcWYL35%205pv29vbnzp3DIFlaWhrCwCgcOXKkEGCN3bp16+LFizABMe7VoUMHkeECC/Lhhx9KSVAgARIotwRo%20XZXbqmfBSUAfAsLESU1NlW6GOYLV4uISs3JCgPUDwyU0NBQCTCvhiKlDPz8/MaqEgSgpBowPQVY3%20fYTXO++8s3nzZlhgGKOSZhWFFyb4YFpBxuQdEoKASLCOSvhidlII+c6nTp2qXbs21mBhbvHtt9/G%20AnmYgpgThH3m7++PWUUpvFQQxI9hKkQO8wumlQgAQxCCtoJIkVAgARIotwQ4M1huq54FJwF9CAgT%20BEaSdDMsFaxYEpeSmSUusc4JM3qxsbHiEjNuELy8vDDFFhcXl5x7YEwIk4Zwd3JyEsGkM8arsA59%2006ZNvr6+DRo0kNwhqI9jCXeswcKsn5Dv3r2rHliS3dzcPD09kdtBgwZhYOzy5cu3b9/GwvYpU6bE%20x8fDhkNIEXO++HEjJiKfPHmiHr+2gkjJUSABEii3BGhdlduqZ8FJQB8CLi4uWKWEWbkjR47AcsK8%20Hqyrrl27FhhX06ZNYY395z//yczMhB2zevVqBMP6dDjOmTPHysoKZtALL7wQExNT4O0YK+rcuTMW%20vGNpVIEB1B2x1wPW1MPAunnzplhyru6rKWNEDYNSMPjMzc3FsBk2jECwArdpwKgbNoOYOnUqjDCU%204sKFCwipe0E0U6cLCZCAaROgdWXa9cvSkYDhCfz555+wNvr3748vATEINGDAgPHjxyMZjPfkG/LB%200nUExtpwTKu1adOmTp06CAbHtWvX/vHHH5g0xOInLHtq0qSJei7VB8CGDh2KESOkoh4gXyrC67vv%20vsOEHZKAuYYPBpGi+i2aMkaw8LUgFsW3bNmyRo0aWAQGYxG2o7SsXtySW6aKlpaWsCOxDB/Bfv75%20Z8wkIv5CC6KZKF1IgATKCYGK+ECmnBSVxSQBEjAgAax2whd8GNEp1I5BoljMjpk7TAiqZwCfCmLG%20Td2WUvcVMr4ExCzk3r17Nb3yucCGQ2zt2rXDWNTXX38NU+nHH3/MF0bbJTZWgNmEhVxY1Q6bSazo%20Ug+MpVoYD8NXhJi+RACMya1cuRLbSYgwuhREPTbKJEACJk+Aq9pNvopZQBIoEQIwlaRV5IUmgCVK%20mmGwKkvTUXLBYvkPPvhg+/btWHclOcoIMODeffdd3IIVXbhFbIIlE17dS1o3htE4dXdJhgkICw/j%20cNg/Ah88ouwYipN85QsiBaNAAiRQfghw7Kr81DVLSgLGRABjY5iDw6eFuvx4jigYlsBjsg/zg9hq%20QXP8qZiFx2eS2BgCu0tgNhMjZMWMjbeTAAmYNgFaV6ZdvywdCZAACZAACZBAaRPgqvbSJs70SIAE%20SIAESIAETJsArSvTrl+WjgRIgARIgARIoLQJ0LoqbeJMjwRIgARIgARIwLQJ0Loy7fpl6UiABEiA%20BEiABEqbAK2r0ibO9EiABEiABEiABEybAPe7Mu36ZelMkwC2X+I+wKZZtcUrFXaWx8anxYuDd5MA%20CRiAAK0rA0BkFCRQygRgWtG6KmXmRpFcgb8RZBQ5ZyZJwMQIcGbQxCqUxSEBEiABEiABEihjArSu%20yrgCmDwJkAAJkAAJkICJEaB1ZWIVyuKQAAmQAAmQAAmUMQFaV2VcAUyeBEiABEiABEjAxAjQujKx%20CmVxSMCQBA4cOFC9enW9Y6xWrdrhw4f1vt1Ybnz++edXrlxpLLllPkmABEqBAK2rUoDMJEjAWAkU%208+PEBQsWNGrUyFgLr3O+MzMzdQ7LgCRAAuWCAK2rclHNLCQJ6E0gLS1t+PDhbm5udevWXbJkiYjH%20z8+vWbNmLi4uffv2jY6OhuODBw969Ojh7Oz87LPPjho1au7cuXCcPXt2cHDwoUOH+vXr9/HHH7u7%20u2MkbPfu3XpnphRu1CwaSvrLL7/Uq1fP0dFx3LhxIg8bN25s2LChra0tipaQkFAKGWMSJEACRkSA%201pURVRazSgJlQODx48eRkZE7d+4cPXr0//3f/x09ehQGU58+fd577729e/fCsHjnnXeQLZhZZmZm%20e/bs6dWrF4ww3AXHwMDApKSkxMTEbdu2QUAk7du3nzBhQhkUQ7ckCyxaQEDA4sWLly5dOnPmTFiN%20N27cuHXr1ttvvz1o0CAYjvb29nDRLXqGIgESKC8EuJtoealplpME9CMAm2nVqlWenp4dOnQ4duzY%20mjVratWq1apVqwEDBiDCb7/9FquOTp48efHixYcPH1atWhXBtmzZki8tjPEsXLjQ2toaYz/dunXL%2056ucyz///DNf0YSZ+P3337+Ye8DACgoKOnfuXOvWradOnYqct2jRAlajcorAnJAACSiBAK0rJdQC%2080ACyiXg5eUF00rkr2nTpqdPn8ZirBMnTmDFupTpy5cvYwgHppVwwRyi5CWEKlWqwLSCbGdnl5WV%20lc9XOZf37t3LV7TQ0FBkDwalyCTMROQf06DSejIrK6v69esrpwjMCQmQgBIIcGZQCbXAPJCAcgnE%20xMSkpqaK/EVERGABVuXKlV9//fXk3CM+Pv7IkSMY78HE35MnT0Swu3fv5iuPsfxCi2bRGjdujLLg%20hx3VSwRzMzw8XGG0ZO0AAEAASURBVHIJCwuTZAokQAIkAAL/emSQCAmQAAnkIwDTCtN/GLC5fv36%20X3/91b17d6yswsr0q1evYtgGC5KwXB2zYxjKwkwZjK3Vq1dfuHAhXyTGcqlZNEyMama+d+/e2Kti%203759GMYDgZCQEM0wdCEBEijPBDgzWJ5rn2UngUIIYMwGH8rBkvj555+zs7OHDRs2dOhQc3PzKVOm%20dO7cGbYFJgHnz5+PWT98Qzdy5EhswYDZQ6yswkShFLWxDFwhw/jgMV/RQAD5z1cELDWDKYmF/CBQ%20o0YNb29vqbAUSIAESAAEKuLpQBAkQALGRQAv+1JuuZgTxG4LYu2UYIXRLEwFYpMFXMLwwsd0sL2c%20nJwsLCxgYGF3zbZt2xoXVSm36kWTHDUFbHOFaVNpUZpmgNJ3KX3FKP0yMkUSMAoCpf2MNgoozCQJ%20KJyAAl+imDHE53XYqQFbNkDAOvd84z0KR2oa2VOgYpgGWJaCBIpKgNZVUYkxPAmUPQEFvkSxPAub%20WmG3gi5durRr167sGZXLHChQMcplPbDQJMCZQeoACRghAb5EjbDSSiPLVIzSoMw0SEAHAvxmUAdI%20DEICJEACJEACJEACOhOgdaUzKgYkARIgARIgARIgAR0IcEcGHSAxCAmUGwIHH/otvjk/MN7fydK5%20nWeHSS2+crFy1aX04clh4059hJDLXlhtb+EgbnmYFDrz0reXoy+mZaU1cG44ttkXrdzbCC+9E9Il%20M9rCRJw5dX3F0vige5YOjp6t27b4aKylQ15Wtd2SmZZ6c9Xy0COHkqMibD0r+/ToVf+tIWZWVgif%20nZV1c/XyBwf2JUdG2nt71361b93+A0U8yY+iLs2bE33talZ6mnOdes1Hf+LasJG2JOhOAiRgegS4%20qt306pQlMn0CJbS8ZlfI/yac/kQdXzU7750991uaqYwJmSM7J3vy2fH/C96GMCf7XHK2cobwJC2m%209+4ucelx0o2VKlZa+eK6th7t9U5IikoP4eHxoye+/NcPSDvUqNlj1fpK5nKdzGMTx4WfOq6eXNXn%20Oj034ye4nJk+LXjfbnWvBkPeafbBmIykxF2D+qfF5u1cjwAVzcy6LPjdrZFq2/cSPUpIMUo0z4yc%20BEySAGcGTbJaWSgSKDIBWEgLb/yK2zysPRc9t3xk/Q8hY/Bpy/3NMnFFJId/d3EqrChhWqmHXOO/%20UphWE5pN/qHdz3bm9iIJ/RJSj1k/+caqZbjRoabPS8v+aPnpeMgJIcEhB/bJxPb42lVhWtV+pW/X%20Rcu9X+yKwGHHjyRFhCc8CA7224PL2q/1g4kGkwtywOaNaXGxgVs2w7SCRdVh2vQX5y22dnPLyR3l%20kkmIXiRAAiZGQK7TZmJFZXFIgARkCATE3bmXoPp9wDGNP+1UtQv+DoT5BSXc2/Ngx+3Ym/5xt+E1%20rfX0+s4NYYQdjzgqLqNSotYHrikw2j2hu+D+jOezIxp8AAFRLb41/0zUqYuPzmlL6K06gwuMqviO%20iQ9DY/3vIJ4mIz5wqd8Af8F+e2NuXn9wcL+1s8uN1b/Dy6fHy759Xo+5c+vSr7NVl71eyUxJgVDJ%200rLFp+PMrawbDn039PABuKQ8evToysUKOTmYImwx5jNzG5tWn06A1ZWVmhp+6sSDw/sRptpznWp0%207Q4BM4lXFvwKKw2TjIgELjxIgARMngDHrky+illAEtCJABZOiXAtny6NauXeGi5w71drwNWYy1g+%209Z9zEy8+Pr/gxq+QHS0cYWl523kPr/8+/tq459/jKjz5IW7/JzaPvBVXN2NvaktIuJfEOTkyQkTr%202qiJEMQ8Hdy92rbPyc6Jvn7t8vy5GJE6P+t7yMkREdVf7AbzqPvKdT1WrqtYoSK8MDSFe2FRwTjD%20WivITrV9YVpBsPXysnZTbVuPCIWXWkJ5KaZEqW7hQQIkUB4I0LoqD7XMMpJA4QTCk8NFIBcrFyG4%20WrlBiEiJaObaYni99yHfeHJt2KGBORVyYFp913YWXGo5+n7e/Ev8vVDlRVxKR2zaE6xkx6VabCrj%20A8f9+EAhqHnlJVRyP++T/NSywXp2kbqVk2pxGNwrVqrUbvJUDFBlpaXt/+Dd2EB/uLf5YgoWvNu4%20uTv71nGoXiNw+393D34jaPcOeLWf8o2ZpaWI0NLRScSGs4gwMTwsPV611MzKKc/LylmVEA4pD+KS%20ZxIgARMmQOvKhCuXRSMBfQhgXZS4DQM2ELJzsmBOfdxkrK9jndxLle9/Wn3rYeMpghV4xi3CPSsn%20K1+ArAp58ReYUL7AhrrMyc5LtMLTjImYsSIKgmNNH8wYQshISsK5Vu9Xq3ToKAKIM8wsx1q1YYfh%208uqS+UmRETm5lNSizQuek5kpJMlL+inXnMz8KPLu4X8kQAImR4DWlclVKQtEAnoR8LD2EPclZCQI%20ITY9FoKnjRe+9cNng2/U/v/2zgM+qmJt46aRSnohEJLQey+hXqRIR+pFQIoUvaJyVazIFRREBCmK%20dJEqKMiniNJ7B5FegkBISEJIAum9f89mwnHdbJZNsrvZs/sc81vnzJnyzn9mOc+Zec/sSBGPiaue%20fn1EuKRPbOhgbaFw60x9UlpSYWmI8XcMELnUVlRSgeWMt/csal1OSqooKjtF0Ux77yKNWGvQUEsb%20G3Gp1sChIoCNFZLD72cmJmCJsPeGH7stV7hnwYUr/OA+UaBQYyJxdmoyAo5Vq1k7OCKANwdFfE5q%20EU+pLhHPTxIgARMmQHVlwp3LppFAKQhUcfAVqW8lFPlFwZkdMVXsFfGJWYlrbq0UCZJzkpfeWCzC%20JX1CkEGW4WrwEy+r4IQbIjG8tURAbUUlFVjOeAdvhTE4ku4VrUuKgBR//btV+Tk5Ig22qhIzT398%20/une0f++9JVi/wUcbnXri52uEu/85eClkGUp4WH5hZNV2SnJGbGxiEG8KDPpXogiD9CF3BEBe68i%20G8QpP0mABEyYANWVCXcum0YCpSBQ27mucLRa+9cqbMTwa9jP1+KvIH+Qj2KNbO7lTx9nPkLAs3CK%20a+1fq6/EXdJcervCjEeiDp6OPnEvOWTz3Q1IX7NyrdZebTVUpLnMMl918qsupo5u/fg9ZpViL/4Z%208+cfKM2nVRt8Pr52RXisYwcsnMbduPbXj5sRcA6ogU9slJXw1y3sHXp3x3b4ZiHGpWZtbEaKQE5q%206u1tW/Kys2+sV0xrYenQq0Ur75atEY44dAACKzMhXpQMZVbJyQnxPEiABMyBAHcTNYdeZhtNjYCe%20No38NnjF4mvzlWE5WDsc7HfywuPzU04ptr/qU70/HLAG7euTnZ8d4FTjl5677ayLthhYE7xiUWFe%20aTfRsJTQ/nt7SM5Voth5QYsHBAwqqSLXJw71yjboKnzn/7Ze+nohSsP2oWLCycapcv/tO7Ex1f7x%20o1Mjw+29vHtt+PH0xx/EXjiPVcKe332Pz33jRmK/deSytnfIzUhHoJKLS8813+MlwcNvvPL46mXl%20ArGAiD2u8M7grhGDhEcXCheBDp/N8/tXVyTW66GngaFXm1k4CZgkAc5dmWS3slEkUBYCE+q98mrD%20KcJfCvkDK9dc/+wPEFifXpiOU9dKbtNbfILIKY2n4vR+auiKm0uKV2NtaSUiAyvXWN15PfYmFad2%20VnbIDmmFU7UV6VVaodLag//deNKrEExCWsFLves3K20cHPFDN5BWSNDqnQ8xvdT6vY+s7OywSvjH%203E+dqvl1XvA1UuKqkFaeTZt3WbgU0goxHWZ/USWoPQKKAi0sAnr2afXeNJziapfFy8T6IKQVZBni%20DSCtUDUPEiABIyHAuSsj6QiaQQKlIKDXKYrsvOz7qWGulVw1vxWovblYZ8zOy/J3CrR6IrxEXp1X%20pI1JUEIpkeG2zi527h7apBdpspKTMh7FOvj4Fl/dwzpjWnQ0dJi1nepOoZjEysvOdKpWXbxsqH11%20ZU6p14FRZquYkQTMkADVlRl2OpssewK8icq+C/XTAA4M/XBlqSRQagJcGSw1MmYgARIgARIgARIg%20AQ0EqK40wOElEiABEiABEiABEig1AaqrUiNjBhIgARIgARIgARLQQIDqSgMcXiIBEiABEiABEiCB%20UhOguio1MmYgARIgARIgARIgAQ0EqK40wOElEiABEiABEiABEig1AaqrUiNjBhIgARIgARIgARLQ%20QIDqSgMcXiIBEiABEiABEiCBUhOguio1MmYgARIgARIgARIgAQ0EqK40wOElEiABEiABEiABEig1%20AetS52AGEiCBiiaAHzzBUdFWsH6jI8BRYXRdQoPMlQB/Z9Bce57tJgESIAESIAES0A8BrgzqhytL%20JQESIAESIAESMFcCVFfm2vNsNwmYBIG5c+eaRDvYCBIgAZMiQHVlUt3JxpCAuRHIzs42tyazvSRA%20AsZPgOrK+PuIFpIACZAACZAACciJANWVnHqLtpIACZAACZAACRg/Aaor4+8jWkgCJEACJEACJCAn%20AlRXcuot2koCJEACJEACJGD8BKiujL+PaCEJkAAJkAAJkICcCFBdyam3aCsJkAAJkAAJkIDxE6C6%20Mv4+ooUkQAIkQAIkQAJyIkB1Jafeoq0kQAIkQAIkQALGT4Dqyvj7iBaSAAmQAAmQAAnIiQDVlZx6%20i7aSAAmQAAmQAAkYPwGqK+PvI1pIAiRAAiRAAiQgJwJUV3LqLdpKAiRAAiRAAiRg/ASoroy/j2gh%20CZAACZAACZCAnAhQXcmpt2grCZAACZAACZCA8ROgujL+PqKFJEACJEACJEACciJAdSWn3qKtJEAC%20JEACJEACxk+A6sr4+4gWkgAJkAAJkAAJyIkA1ZWceou2kgAJkAAJkAAJGD8Bqivj7yNaSAIkQAIk%20QAIkICcCVFdy6i3aSgIkQAIkQAIkYPwEqK6Mv49oIQmQAAmQAAmQgJwIUF3JqbdoKwmQgEQgLi5u%206tSpBw8exCfCUjwDJEACJFDhBKiuKrwLaAAJkEBZCKSkpOzevfvkyZO//PJLcnJyWYpgHhIgARLQ%20DwGqK/1wZakkQAJ6JhAYGNi2bVtU0rlz5xo1aui5NhZPAiRAAqUgQHVVClhMSgIkYFQERo8e7enp%20+eKLLxqVVTSGBEiABKiuOAZIgATkSqB9+/YNGjTo0KGDXBtAu0mABEyUgEVBQYGJNo3NIgESIAES%20IAESIIEKIMC5qwqAzipJgARIgARIgARMmADVlQl3LptGAiRAAiRAAiRQAQSorioAOqskARIgARIg%20ARIwYQJUVybcuWwaCRiUADedMihuVkYCJGDEBKiujLhzaBoJGDGB8PDwBQsWCAOvXr3q7+/v5+cn%202durV69ff/1VOv3hhx86depUu3btd999Nz09XYrXHKhWrdrRo0c1p9Fw9b///e8bb7yBBHsLDw0p%20NV9auHBhWFiY5jS8SgIkQALKBKiulGkwTAIkoC2B+/fvz5s3T6Tetm1by5Ytk5KS8vLy5s6d27Nn%20z/3792dmZoqr+/btg9DB79V8//33Bw4cWL58uZZ1LFu2rGHDhlomLp5sfOGBeGzpvnPnzuIJtIyB%20iKS60pIVk5EACQgCVFccCSRAAk8hcOTIEQgmkejOnTtNmjTBlNKIESMSEhLq1av31ltvQTAhZvDg%20wRYWFs7OzgMHDqxatapU6IoVK5BmyJAh2FodRb3wwgvSJSnw3Xff9e3bV5zGxsbWr19fzI1BwyES%20mqxp06Zubm6DBg3CTwpu3LixT58+IvGAAQM+/PBDhLOzsxs3bnzt2jURj8/ff/8dumr69Onr16/f%20vHkzrEKkSlGIgW2rV69GyTgSExORDE1wdHSEnVlZWc2aNXv06NGYMWPQRmjH//3vfwEBAV5eXtjC%20FGpSJfuZM2dgp52dHfaO/+mnn3CVBwmQgHkSoLoyz35nq0mgFARSU1NDQ0NFBqzr3b59GwILogQS%20ZPHixdgwvUuXLkFBQVj1s7S0fL3wwBbqUgU3btyAQMEP10B2jBw50tbWVrokBTp27Lhnzx4xRQRJ%20ZG1tjaXGu3fvpqWlQWBB8UyaNAlzYPhtwXHjxrVo0QLhx48f4yoklFiCPHfu3MOHD5XnuqDSoqOj%20IZKeffZZ/FrOe++9V7woGPDgwYP3338funDy5Mlz5swJDg7GRBfK3LVr1+HDh7EsiGaiTdCXS5Ys%20Wbp06fz586GcLl68+PLLL6tkxxRdq1atLly4MGrUKBicn58vNZABEiABsyJgbVatZWNJgAR0QsDD%20w6Ndu3aVKlUSE061atXCrA88q9QWjtkmzB7B9crd3R3aCFIGpyopMVmFWSLIGggUCCbl+S1MO2HZ%20cdiwYcgya9Ys6CRkh/bCbJkw4/r161BaOO3du7eVlZVKyZhMgrDLzc2FeZ9//rlKUciI9HXq1MFP%20QSMAPTR06FAoRShCe3t7XMWslYODAxoLp7F169ZBognbILOee+456E7l7J9++mlERARm0T7++GMo%20TlQKRCr28JQESMAcCHDuyhx6mW0kgYokgCmr1157DWt5UC0fffTRwYMH1VqDaS3MGEGawGdr+PDh%20Upp79+6dOnUKHu44oJDw8xKRkZH9+/eHnMJKXNeuXVHs6dOncYpIKZfagNqikBJKSKTHgiYUkouL%20C4rKyMhQKQSLldBqIrJ58+awBDHK2b/55hvoLUxfQfydPHmS0koFIE9JwHwIUF2ZT1+zpSRQRgJY%20NYPLkciMiajSlgJHJScnJ5ELq2w5OTlqS8Cc0IkTJ3bs2FGzZk24c0lpqlSpAp8trEjiwKYPx44d%20a9SoEdQPXLggqqC3MJt16NCh8+fPY+5KyqU2oLYopIScEunHjh3r6+sLzYQ1SkxWqRSC5U4sPorI%20qKgoBOCAhU8pO2bOYB6WI+EKNnv2bPh4qZTAUxIgATMhQHVlJh3NZpJA2QlAVUBtXLlyBV7ecLQS%20BcHFCm8FwrH9qb9VCiWENTVoDsgjLKhJE0UqBmH9DrM+eLVQeVkQaTDpBZcsbPoAh62VK1dOmTIF%20IgZTVtBAmK/CTzhDXa1ZswaTSXB7VylTMhV2Yi5KbVHKWTArBtd7V1dXzJ9hcVAIQbQULlwI9+vX%20D25Y0FUoCu7tSCnUlVQC5B0s9Pb2xnoidCRWBqVLDJAACZgVAaors+puNpYEykIAMgI+RvAlh8yC%2075QoAtNLUDM4/euvvzC5hUO5aOVT+CohL2ak4CYFfQaBopxSOYz3EOFjrrwsiKtweMd7f5BT0Cub%20Nm3C6hvkDpRW9+7dUSaUEJyisJ5YfFkQyUThmN/CmiMWENUWpWwAVjCxRRbmoqZNm4YacYqrqAir%20lth+4pNPPoF/GFQgGg5tV9x7bNGiRVhYxNXq1atDaXXr1k25cIZJgATMh4DFU587zYcFW0oCJKCB%20QExMDGQHnKg0pNFwCfM90EBiEQ3TYJhMUk4MrYYlOeUYlTCWJpFF+VVElQTan2ouCouPmKaCEISH%20O1z1JTUplY8ZOGjEkubJMF8FUNjToXLlylIWBkiABMyNANWVufU420sCFU8A7w+GhIQo24F3D/E2%20n3IMwyRAAiQgXwJUV/LtO1pOAiRAAiRAAiRgjATod2WMvUKbSIAESIAESIAE5EuA6kq+fUfLSYAE%20SIAESIAEjJEA1ZUx9gptIgESIAESIAESkC8Bqiv59h0tJwESIAESIAESMEYCVFfG2Cu0iQRIgARI%20gARIQL4E+CvOcu077JTIvcrk2nm0mwRIgAR0TQBb+GKTNl2XyvLKSIDqqozgKjwbpBXVVYX3Ag0g%20ARIgASMhoPwDCUZikjmbwZVBc+59tp0ESIAESIAESED3BKiudM+UJZIACZAACZAACZgzAaorc+59%20tp0ESIAESIAESED3BKiudM+UJZIACZAACZAACZgzAaorc+59tp0ESIAESIAESED3BKiudM+UJZIA%20CZAACZAACZgzAaorc+59tp0ESIAESIAESED3BKiudM+UJZIACZAACZAACZgzAaorc+59tp0ESIAE%20SIAESED3BKiudM+UJZIACZAACZAACZgzAaorc+59tp0ESIAESIAESED3BKiudM+UJcqXwKFDh6pX%20r15m+6tVq3b06NEyZ2dGEpA7gc6dO69bt07uraD9JFB+AlRX5WfIEkyHQDl/G3vZsmUNGzY0HRxs%20CQmUkkBubm4pczA5CZgmAaor0+xXtqrMBLKyssaPH+/h4VGnTp1Vq1aJcg4cONC0aVM3N7dBgwbF%20xcUhMiIiolevXq6urh07dnz11VcXL16MyAULFty/f//IkSODBw+eMmWKp6cnZsL27NlTZmOYkQQq%20kEDxYY9vwVdffVW3bl1nZ+epU6cK27Zu3dqgQQMHBwcM+5SUlAo0mFWTgPEQoLoynr6gJUZB4PHj%20xzExMbt27Zo8efJrr712/PhxCKaBAwdOmjRp3759uHmMGzcOhkJmWVlZ7d27t0+fPhBhyIXIu3fv%20pqWlpaam7tixAwEUEhQU9O677xpFw2gECZSGgNphf+fOnZUrV65evXru3Ll4orhx40ZwcPCoUaNG%20jhyJhwonJyfElKYSpiUBkyVgbbItY8NIoEwEoJnWr1/v7e3drl27EydObNq0qUaNGi1bthw2bBjK%20mzVrFjxLTp8+ffHixQcPHlStWhXJfv75Z5Wq8By/fPlyOzs7PN/36NFD5SpPScD4CWzevFll2ItH%20iDlz5jxbeEBghYWFnT9/vlWrVjNmzECLmjdvjicK428aLSQBAxCgujIAZFYhJwI+Pj6QVsLiJk2a%20nD17Fs5Yp06dgse61IzLly/jMR3SSsRgDVG6JAK+vr6QVgg7Ojrm5eWpXOUpCRg/gXv37qkM+8jI%20SJiNhw1hPB4hMLaxRC75Gtra2tarV8/4m0YLScAABLgyaADIrEJOBOLj4zMzM4XF0dHRcMCqUqXK%20kCFD0guP5OTkY8eO4ZkeC38JCQkiWUhIiEoLLSwsVGJ4SgLyIlB82Ddq1AhNsLT8x10DjyIPHz6U%20mhYVFSWFGSABcybwj++JOYNg20lAEIC0wvIfHsqvX7/+008/9ezZE55V8Ey/evUqHs3hdAJ3dayA%20YCoLqyEQWxs2bLhw4QLpkYCJESg+7LFoXryNffv2xT4m+/fvxxQvvh3h4eHF0zCGBMyQAFcGzbDT%202eQSCeC5HC9D4W6xaNGi/Pz8sWPHjhkzxtraevr06V27dsX9A4uAS5cuxaof3pOaOHEitmDA6iE8%20q7BQKBXKiSsJBQPyJYCXYVWGPb4dGNsqwxtuiHjMwEse+Hb4+/v7+fnJt8m0nAR0SMACXwkdFsei%20DEYA/8ax7/RHG2uC2G1B+E6JWjCbhaVAbLKAUwgvvDAF7eXi4mJjYwOBhR0U27Rpoz97WDIJVAgB%205WGvwQBsc4UldclhUUNKXtIfAd4U9Me2DCXzDl0GaEaRhV+kiu0GrBjiFSrs1IAtGxCAn7vKM33F%20msfaSYAEzI0AbwpG1eNUV0bVHaUwhl+kUsDSQ1K4Z2FTK7yR3q1bt7Zt2+qhBhZJAiRAAqUgwJtC%20KWDpPynVlf4Z66cGfpH0w5WlkgAJkIAsCfCmYFTdxncGjao7aAwJkAAJkAAJkIDsCVBdyb4L2QAS%20IAESIAESIAGjIkB1ZVTdQWNIgARIgARIgARkT4DqSvZdyAaQAAmQAAmQAAkYFQHuJmpU3VFeY7Dd%20HzfBKi9E5jdKAvDYxTZjmk3j+NfMh1dlSkCbwS/Tppmw2VRXJtW5kFZUVybVo2zMEwK4wTwJlvh/%20jv8S0fCCnAloM/jl3D7TtJ0rg6bZr2wVCZAACZAACZBARRGguqoo8qyXBEiABEiABEjANAlQXZlm%20v7JVJEACJEACJEACFUWA6qqiyJtOvdnZ2fhZGNNpD1tCAiRAAiRAAuUjQHVVPn5mn3vBggUeHh6T%20J08eMmTIvHnznspj4cKF+G2+pyZjAhKQHQE+Zsiuy2gwCeiPANWV/tiaRckrVqxYuXLl2rVrp06d%20OmjQoKe2GWqM6uqplAyQ4MSJEz4+PtpXRFmsmRUfMzTzMbarHP/G1iOmZw/Vlen1qeFa1KFDh9DQ%200A8++GD16tU//vjjsWPH9u7d++KLL86fP9/Pzy88PHzw4MFOTk5ubm6vv/46Nitq1qzZo0ePxowZ%20s3z5csNZyZpKIFCqzTsoi0ugWBTNxwzNfIzwKse/EXaKKZlEdWVKvWnotsyaNcvT0/PVV1/t0aNH%20ZGRkfHx8cnLy77//vmbNmg8//HDLli3Xrl07evTo999/v3Hjxn379mH+w9HREUqrZ8+ehra1HPXt%203LmzSZMmsLxt27YXL15ESU2bNg0ODhZF9u3b9/Dhw8qycvv27ZLETExMLEfNhsiKh3ioXnt7+ypV%20qgjVi06kLC4VehN+zDDtwY9e5vgv1VBnYu0JUF1pz4opVQlAVOGu3KZNm1q1aknXUlNT9+zZ88Yb%20b9ja2iYlJUF1devWDfqjUaNGSO/g4NCuXbvatWtL6Y08EBISApcyHPv374f+GDFiBAy+c+dOVlaW%20sPzu3btosrKszM3NlSRm5cqVjbyBo0ePbt68+enTp6GSoYnxQI+lXtOQxQYjb6qPGSY/+DFCOP4N%209jUxt4q4V7u59bje24s1QSG2Jk6ceOXKFcziQG306dMHSyd6r1sPFfzwww8tWrT49NNPUfaqVavg%20YZaRkaG2HmgszGyh7du2bZPCalMaT2ReXh4WdocPH44F3PPnz6ekpEA12tjYCFncq1cvyGK4Z/n7%20+8tOFhsSckmPGWI8LF68WKY8TXvwY4Rw/Bvya2JudXHuytx6XO/tdXFxEXVgofCLL76Ii4v75Zdf%20Ll26NHPmTL3XrYcK4IOPZUFRsK+v7/Tp0zFdp7YeSVbiqnJYbWIjibSyskJzIA7c3d3hWSWsgizu%20168fZLGrq+ucOXMgtozEWnmZIY0B+fI07cGP4cTxL6/vlLyspbqSV3/JyVp4WWHWHRb37t0bnj2Y%20wUIYv7MbGxubk5Mjl5bAJR8GC2vhko+ZnrS0NJziqVdEQkSKgCQrcaocFleN8/PWrVsTJkyAZMTK%205q5du2AkftHMNGRxhQOXxoB8eZr24McI4fiv8K+JCRtAdWXCnWvQpuGuDOWkXOU777wTExODf6Bx%20m4EPOE5xtXv37iNHjtRmZyzloiowDIMPHDgAtyQsCH722Wd//vkn3Nu9vLx+/fVXuCh9++23mJyr%20QPPKWXVUVJS1tXWXLl1QzpIlS/AJ4WsasricZHSYXb48TXvwo4s5/nU4zlmUKgHcIXjIkQA6srjZ%20aiOLJzNkDCZ+oqOjDVmjzuvCfFWlSpXgpN+xY8ezZ8+i/GXLlmFNwc7OrnPnznXr1oXS2rp1KxYQ%20RdXKYZ0bo6sC8aqUt7c3/MPwUgKaBsmIBSxIYUw3YpeNxo0bo3VwxsL7B9evX0el2EcD6nn27Nm6%20MqC05WgztrVJU9p6tUwP1zS8N4rE2PUNDw/KY8A4eWrZLpMc/Gi7vMa/lgNby2Radj2TlZOABfKj%20S3jIjgDmior3ndpI2TXNCA3GsibWzuCcJNkGXYLf/8GGFFKMfAOQv3CxgpyCVzu8rBBAW7AMii3K%20SrXjqF4JaDO2tUmjVyM1FG5sPDWYqnLJtAc/Gmv841/Lga1lMpX+5ameCKi5Q+upJharWwJqv0hq%20I3VbL0sjgQohoM3Y1iZNhRjPSkmgPAS0HNhaJiuPJcyrPYF/OMpon40pSYAESIAESIAESIAE1BKg%20ulKLhZEkQAIkQAIkQAIkUEYC3E20jODMIduDtMi5l2ZdjruYlZdV37XB203fb+nZWsuG7wjdvvXe%20lsZuTae3/ERkycnPWXp98f7IvVHpDwKcAgYFDhtf72VMZeOqhktaVsdkJEACJEACJGA8BOh3ZTx9%20UTpL1C6xq40sXblPUidkxffd0y0pO+lJxDOWFpbrnt3SxitIiikpEJMe/eLhYVBRQd7tkUUke/PU%205AMP9ipnGVNn/LQWMxCj4ZJyej2FYxIzl+0OvRmRkp2bX7OK46QeAY0DnLWsa9+l2F1/Rtet6vRG%20v5oiy6Grj34991Al+4wX6nk62+bm5W84HH7iZlxMYlZVd7teLXz+3bGq0Jcq6ct/mv4o9tKShXHX%20ruZlZ7nWrtts8n/dGzR8arGRx47c2rIhKfSejaOjd4vWjSa8UtmvOnLl5+Xd3PBdxKH96TExTn5+%20NQcMqjP0BVGahktPra5UCbQZ29qkKVWlSGzazxhlG/xXw5I2HY0IeZiWX1BQ29dpbNfqTQMVewhz%208Evfi9IOM83ptRzYWibTXBev6ooA1ZWuSBq6HLVfJLWRZbNsybWFK4OXIu+7Tad52nnNvjgjLTdV%20WS2pLXZ/5J5DD/YfenAgPVex5aaU/lbizSH7+yGmW9XnRtUZu+z6V5fiLthYVjrQ73h8VlxJl7zt%20fdTWosPIpLScl5ZcTMlQ7HQqDkuLZxaMbyzuFk/i1P//cXLWm2uuQSo1r+GCLCLRgh139l4s2n1U%20yrbxrVaQU5/+eAvSSopEYHA739f7Fsky5fhyhnPSUnePHJqVmCCVY2Fl1W3ZGo+GjaSY4oGwvbv+%20+Fzxgz/SYefu0WPVegcfn3Ofzby/f48Uj0D90eOavvI6AhouKacvf1ibsa1NmlJZYtrPGGUb/Odu%20x3+8OThf6V1zfGXmv9RY8S3g4H/yvSjVMHtqYi0HtpbJnlodE+iEAP2udILRBAvZG7kbrWrv3XFC%20/VeeDxw8ps5LOD0Xe+Ze0t0xh4ePOjT0v6dezc3PzczN/M/xl3D6+smXkeD4wyO/3d8hpBVOLfBf%204bE/QnFvtrKwmtV6bgefTjNazcZpTn724QcHNVwSefX6+fPZKCGtXukZ+OHQOg62VrhtbDwSobnS%204zcez91+e/ySS5BWKinDYtMR07mhx9SBtaQ/NyebkOg0Ia061HefN65RI3/Frzv/fj4aEk2lhPKf%203v15O6QVFFW7mZ89u2SlnYdHQeHkk+aSr65ahgSudet1WbS05dvvI5wZHxd++EBKxP37BxSTjjWf%20H9xr/Q9VOym2Hr2zfWtWUqKGS0hjAsem2+vE9C2eMb5ou8jR2im/IH/5ja81Nw3PGB+ce7vf3h6Y%20vlVOiWcMMX2LZ4w1XTa18GiFqz+GbI7NiNFwSbkE3YbLNvjX7L+P74itjeWUfjUx+QqTcPr9UcVX%20hoNffC90200sTaYE6Hcl047Tu9kPC28MLZ44WrX0av1MsKLSzPysZh4t1v61GuHvbq1Kzkk6EX0M%204TltvsRnj2q9XCq5IrAt5AfMdSEgjqj0KAQCnALd7TwQqOfaADcqJEAtMRkxJV0SefX6eey6YjKp%20ZU2X4Z2qIRDxOGPzscjLoUn3H6Uv3hmSn1/g7mTz8fD6ufn5n/x4Ky0zz8XBZvaLDf64nYBFEMmw%20QucxxRl2IBM3mG5NvdrVdcvNK7C3tRLJIMgQwG72UwfWdnW0cXO0eWX55Zy8gjO34ge09RVpdPUZ%20cfQgiqrWqYt/954I1Bsx+sqyrx+eOZkRH3du1oy87ExHH9+gj2dhUe/MzGnQYTht+tp/M+MUFtYf%20NdandVv83d62JfVBZMajGCwXomFWtrbNX3/L2t6+5ZvvRp08lpeZ+fDMqYzHj0q6FNi7n66aU4Hl%20KD9jwIywlHuY0BXPGDMvfJRXkIdp3UXtl+Ix483Tr6bkpLjZui/r9K14xpDMVvuMgS+Ch63H4P19%20xTNGbEY00ovHD5VLI2q/KBWl20AZBv/7Q+qEFj4/jOhUbWCQYtxev58cHJmKhwcOful7YRqDX7eD%20zQxLo7oyw05/epMTsxLgyY50brZuIrW7bdG2mdHpUVMaTz0adeheSsiS6wsLnlGsEDzr231wjWGK%20QNXu+EMAd6CbCddFXnwiFz7dbRXSShzutu6F6ioKD+6IUXvpSVo9/j82SdHMRv5FjlaNnwTgg9XQ%20r/K2U4q5h60nI1Myc8/fSUT4vcG18dmxoUdlB8V3Z9efMelZRT84iNPoxKzM7HwEthyPmL3tVn7+%20MzV8HN4aUAvlxxbOcvm520NaIQEcvDBPhrzCAMTo8IB3FEpzb1i0WOnxJJCbllolqP3VFUvirl/z%20aNwkOyUl6uRxpGwwenwlZ+ee67YgXLm6PzTTw3Nn0qIV3mNezVrG/PkHAi41a0FaIYCFQjsPT0ix%209JjojMcKQab2EuJN4DDtZ4wyDP7UzFxne8XIb/LENxGrUTh1cbDm4Je+FyYw8tmE8hOguio/QxMs%20QWgmNAxP5yrNyy3ItbWy/bztglGHh2KVBFcxWfVp67kqydSeIq9KvFS+hksqWXR4mpSeAxWFAjEj%20JYp1dSoKPErKeqmb/9m/4sMfZ6w7HC5+0aBdPTe4oiNl+3ru+EMAs1x3ohQeZuIIi1EsC+KQIkNj%200t9bf2PjWy1jk7MR71IorQqTKCotVFeKeB0euRB4yYp3EWxdFI7GioCrYjYRR3psTN3hIyOPHY6/%20ef3qiqUF+YrODezTv2qHTgi41lIIR7jD/z60PwI4MPVVrXOX0N2/IVzJuag0hG1dXBXqKjZGqCu1%20lxT5ZX6Y9jNGmQf/z9OCpI7dfCwCr4PgtFVtVw5+6Xsh8WHAnAnQ78qce7/EtkMwWVsolHdqjuKf%20ThxJ2YqZGxxV7BXLAU09mjdzb1EY8UzXqt297L1EuKRPz8IEqTl/rxWKAn3sq2i4VFJpOot/4pmb%20p+yjW1g6FvUq2VhiHQQeu0Ja4ZF96vMK/aHhwJO9t4utr5vdnNENdn/cfkJ3fySGgNv5h2LdB0fx%20iorHiJRl/3zSlgJMnRUe0o9dFeTmWVpZtZ02w9LGBu8S5ufm2nt5N58yVbkuS2trt/oNrO0dEPng%20xLGIIwcLCjW0VJqUGL5cGi5JyeQb0OYZAy/SimTye8Yo3+CHR/yMLcHrDoWjf/297Md3C+DgF0Md%203wv5jnlarkMCVFc6hGk6ReGeId7XC068KVoVnHBDBHwdFH6shx8cwEt/Imbn/V+uxl0W4ZI+hSYL%20Tw1Ly1HM9ESlPUjOSUagioOvhksllaar+Mr21lZQT5iwySqaVEtJLwpAJCG+vl/lBtUV7uc42tVz%20d69cSYRL+nyuufeWd1pvertVUF13iLOR//KDPzsSwxkL/lsIKC8jpmTkIMbT+SllllRXSfFYv7N2%20cMRVvDko0uSkFklke29vxDgHBFZp205c8u/+XCUnJ5E4Ofw+HK3s3NyfW71hwM+/O9eoCQX21w/f%2023sqpHNOmqLjxJGdqug7e28fDZeepJXx/037GaM8g/9GeDK8Bk/fikfv4i2NJZOaOtlbc/BL3wsZ%20D3qarjsCVFe6Y2laJbXz6YAGHYk6eDr6xL3kkM13N+C0ZuVacONNzEr85MJHOK1sUxmrhFgfnPbH%20O8JPqyQGQd6K0rLzs7+5sehx5qPF1+aLlNiyQcOlkkrTVbylpYUQN3eji6TD3YdFAa9CdXX6VtyN%208CJpcvBK7K3IonBJBqzeFzZ7660Ve0JFAkwawS8eYRsrCy9nhVx7EJ+RUeinhZcNUzMVz7hCxon0%20uvp08FYsXybdCxEFJobcEQF7L0X8o6uXo06fFDF3fv4Jogrh8EMH9o7+995xIzChhVMbRyfskoUA%208goJlRIeJi5lpyRnxCq2nHDw8sYfAmovIV7uh2k/Y5R58GOzqw823IhLya5kbYm3YmeNagBphb7m%204Je+F3If+bRfJwSornSC0QQLmVR/Mu4uUE6Tjo/tv7fHw0K39P80fANOrJ9f+uRxpsKdeXabeW82%20fheB0JR7X11TvDNY0tHZt0tDt8a4uvH22n/tbLsrfCfCXav2wMuDGi6VVJoO41vUULgT4cW9C3cT%20wx+l7zgXhVN/T3tMNSWn5+C1QZw62lnhRgKZNO/nO9k5Rcttam3A9grHbsT935mofZdiMrPzNh6N%20SCqcDMMcWPOaiopycgvWHw5PSM3+7kCYKAG7BKktqjyR3i1bI3vEoQMQWJkJ8XhLHKdudetjmgpe%20Wee/mI3FTryyhimu/Oxs7HGFlwcxoYU0OA3etA6BpNCQqFMnEHAOrIn3BxHISU3FW4R52dk31q/B%20qYWlpVeLVt6t2pR0CfEmcJj2M0YZBn9Obv6CHXczC78FIztXq+5hfy0sSfxx8GPAi++FCYx8NqH8%20BLibaPkZVkwJajeOUxtZZvswazXtj3cfZSomKuys7N5p+uGLdcadjjk56dgYxPT06/NVh+WQX9js%206mr8Zbx2vq3Hr43cm4jqRhwcjMh23h3WPrtZxODdwA/PTT0be1qc9q7e75NWnztXUrysp+GSSKy/%20z8i4jAlLLj5xVSqqBxtf9WjmjR2txLYL2GkdU02r9oXh8rAOVV/tXUOyZ/LKy3Bgb1HT5cuXFNrx%20SmjSexuuP/F3KkoFN6zVrze3r2QlEkt5EYBrPPZ3UI7RSRjvDO4aMUj4f2DXKxHo8Nk8v391vbz0%20K4gk1PKvL7/GW4EXFn6BcJP/vI6NGI688crja1dwCtWVm140h9f2o5l4vfwwLl1VLP7CK0vMYMHh%20HZtpIUbDJVzV4aHN2NYmTalMCksJxaOFeHtDyjgvaPGAgEHvn33r9/BfEYlvAVa651+Zg/C4uhM/%20aP4/KeWwAwPw5qzyt0DESAkQwDMGNnFAQMMl5fQ6DJdh8AfVdcNbGmptmDe24bTvb3Lwi++FWkRl%20jtRyYGuZrMxmMGOpCFBdlQqXESVW+0VSG1lOo/FLINl5Wf5OgVaWRVs3lafA5OxkvOVe3SnAwVrh%20N618aLiknEznYcxazf/lDlY6UDL2SHz5ucBB7XwvhCRi+QMx2Bd05oj6WOD775qrtyJT8fr5sv80%20w0/fCDPeWH0FkZK6QuSp4Lhv94dFxmWKBG1qu745oFYVNzuc4uEes1+X7ile6MPRpZHH28/XFqsq%20IkaHn7GXL/7x2Uy81ocy4aLe7I03aw0YHB988+Cr4zFxFdCrb9D0T7BB0dE3Jz+6fBFO7tgm1NrB%204fI3i+HGLtz48Xp544n/qdl/IErABBimuKLPnVFYaGER8FzvllPftyn07tJwSZFYd4c2Y1ubNKW1%20yLSfMUo7+Ed29ttyPLI4Q3wv9sxof+52Age/+F4UR1SeGC0HtpbJymMJ82pPgOpKe1bGlVLtF0lt%20pHHZbazW4AfX8HJfVXd74edeTjPjU7LjU7Mxa+Vop3BJUT5SM3Kxz5Cvux1ms5Tj9RHGJBb2DnWq%20Vh0LFlqWn5eVlRoVCb8rvE6I4aScC27yadHRTtX8rO0UYlH50HBJOVl5wtqMbW3SlM0G037G4OAX%20o0LWgx9N0N/4L9u3xsxzUV3JdQCo/SKpjZRrC2k3CSgR0GZsa5NGqUgGSUAeBLQc2Fomk0eb5W+l%20tk+08m8pW0ACJEACJEACJEAChiBAdWUIyqyDBEiABEiABEjAfAhQXZlPX7OlJEACJEACJEAChiBA%20dWUIyqyDBEiABEiABEjAfAhQXZlPX7OlJEACJEACJEAChiBAdWUIyqyDBEiABEiABEjAfAhQXZlP%20X7OlJEACJEACJEAChiBAdWUIyqyDBEiABEiABEjAfAhQXZlPX7OlJEACJEACJEAChiBAdWUIyqyD%20BEiABEiABEjAfAio/gia+bTcJFuKX0LAYZJNY6PMnIA2A7tw+HP8m/lIMcHmazP4TbDZMm8S1ZXM%20O/Cf5ufn5/8zgmckYEYEOP7NqLPZVBIwbgJcGTTu/qF1JEACJEACJEACciNAdSW3HqO9JEACJEAC%20JEACxk2A6sq4+4fWkQAJkAAJkAAJyI0A1ZXceoz2kgAJkAAJkAAJGDcBqivj7h9aRwIkQAIkQAIk%20IDcCVFdy6zHaSwIkQAIkQAIkYNwEqK6Mu39oHQmQAAmQAAmQgNwIUF3JrcdoLwmQAAmQAAmQgHET%20oLoy7v6hdSRAAiRAAiRAAnIjwL3a5dZjT+zlj348IcH/kwAJkAAJPMMfzDGqQWBRUFBgVAbRGBIg%20ARIgARIgARKQNQGuDMq6+2g8CZAACZAACZCA0RGgujK6LqFBJEACJEACJEACsiZAdSXr7qPxJGDu%20BE6ePGnuCNh+EiAB4yNAdWV8fUKLSIAEtCZw6NAhrdMyIQmQAAkYiADVlYFAsxoSIAESIAESIAEz%20IUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADV%20lYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYd%20zWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoS%20IAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQ%20AAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAES%20IAEzIUB1ZSYdzWaSAAmQAAmQAAkYiADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSAAmQAAmQAAkY%20iADVlYFAsxoSIAESIAESIAEzIUB1ZSYdzWaSgAkSCA0NTUhIwKcJto1NIgESkDMBi4KCAjnbT9tJ%20gATMlEBwcHD//v2zs7MrVar022+/NWzY0ExBsNkkQALGR4BzV8bXJ7SIBEhACwIBAQHVq1ePjIzE%20Z2BgoBY5mIQESIAEDESA6spAoFkNCZCAbgk4ODgMHDgQZT7//PMI67ZwlkYCJEAC5SFAdVUeesxL%20AiRQkQT69u3bsWNHfFakEaybBEiABIoRoN9VMSSMIAESkAmB3Nzcs2fPtmvXztraWiYm00wSIAGz%20IEB1ZRbdzEaSAAmQAAmQAAkYjABXBg2GmhWRAAmQAAmQAAmYBQGqK7PoZjaSBEiABEiABEjAYASo%20rgyGmhWRAAmQAAmQAAmYBQGqK7PoZjaSBEiABEiABEjAYASorgyGmhWRAAmQAAmQAAmYBQGqK7Po%20ZjaSBEiABEiABEjAYASorgyGmhWRgEEJJCcnG7S+clSWmpqan59fqgLw84KZmZmlysLEJEACJGAw%20AlRXBkPNikhAjwTCw8MXLFggKrh69aq/v7+fnx9Ov/3228aNG1etWvXf//53dHQ0YjIyMt58882a%20NWvWrl37f//7n/ayplq1akePHhVV6OoTtXfv3t3d3X337t2ay9xbeIg0aKmHh8fkyZPFKX5qEKdS%20QyC83nnnnfr162Mb940bN2ouVrp64sQJHx8f6bQMAYnPwoULw8LCylACsij3Y9lKYC4SIAGjIFDA%20gwRIQP4Ejh8/7unpKdoxffp0/AAf1AYUg7Oz82+//Xbu3LnWrVu/8MILSPDGG2+0aNHi/Pnzhw4d%20giD4+uuvtWz9L7/8EhMTo2ViLZNduHDB1tYW02ywVnOWKVOmQE6JNJCG33//PbLcvHnzo48+qlGj%20Bv4xzcvLE1dffvnlrl27njlzZuvWrXZ2dnfv3tVcsrj66NGjHTt2aJOypDQSnypVqhw5cqSkZJrj%20lftRc0peJQESMGYCzxizcbSNBEigOIHDhw8/99xzIv727duYmsK9HLNTVlZWdevWxbyUm5ubi4sL%20BNbatWvff/99kXLmzJnPPvsswki/ZcsWETl+/PixY8eKsPLnmjVr+vTpI2KgqOrVq3f//n1MBf3x%20xx+I3L9/f5MmTVxdXVHF48ePN2zY0Lt3b5G4f//+H3zwAcJZWVmNGjXCLJqIxyd+tQayD5NqUIGj%20Ro1KTEyEAMKppaUlzMZkj5QShUM2iVOYARUICVW5cmUoRfxgc/v27S0sLKALV65c+ddffy1duvTj%20jz+W1FVSUhIUFeKhvXCgWFQklSwFhg0bJslK2D948GDITfyiDhJApaFAlB8QEPDJJ58gZuTIkSJx%20SEgITMUEHiJ37doFDScViIDg07RpU3QEJg6XLVtWvCgkQwk7d+6EwMW0IrQU0sNgTJshvXI/hoaG%20PnjwYMCAAeCMWcZFixaJupSzz58/Hxnt7e1RtTJAZasYJgESqBACz1RIrayUBEigzARwb8btVmS/%20fPlypUqVIHFwo4X4wC0fKmHQoEE9e/bExJVIExwc/Pnnn2PtbPv27YiB2sDaGQJpaWmBgYHIKJIp%20fyIL9Apu8Ihct24ddBICuJHj9o+7OG7nUBuYD+vWrVu/fv0goSB3MPcD9ynkwpIcEkM3YL0Pigph%20cUAfQPP9+OOPKARpsFIZHx+PRTQHBweYDWOeJCyA2rh06ZI4rVOnzq+//nrlyhXoDNSFRh04cMDL%20y2v27NnSpBS0lKSukNHJyendd99FXQACPScVqxyYNWtWmzZtRAx+BBoqCgajWMR888030HxQkJjK%20ghCE9oLYEkJKrDPiFMkwlzZp0iTlMgUfmId6586de+fOneJFQfDBVG9v72nTpkEZoyKo24sXL0L7%20Qj6CodSPgAkdieP06dOrV69GL2/btk05O0QnioJQRnaoKwhlZWMYJgESqFgCVFcVy5+1k0CpCRRX%20VyhCeUUJXkcTJ06UyoWogjiA5sCMlBSJeRHckqFyMNkjRSoHmjVrJiZshg4dCi2CS0I9zJkzBxmR%20HcfJkyeFrsI0z08//YRJNUz/oCKoBGTBBJVygZiR+uyzz0TMwYMHkTElJQW/wQwtopwM4eLqCpHK%20K4MQJfDCknIpqyuUDM2BWTpoPogh/Lrz77//LqWUAlA2MABNgKpDdVCTkrpCw7/44ovC9j3AzB/c%20wqAjkQZO9FiaxCk0JcpBc1RWEgUfXJJWBosXJeTRvHnzkAzSE/NVYAVPuFWrVsFsBKR+vHXrFmLQ%20NGHzf/7zH6hA5ewRERFIAFkGUzGzKKYVRWJ+kgAJVDgBerXjHygeJGDKBCCPoHsgrSBQsGCHpmKu%20CAtSkDW4l+NTbeOxHIZJI8xyYRZn+PDhUpp79+6dOnUKC2c4OnXqhH/C4FSOBUGsl2GlDzIuKCgI%200y04RaSUCwH4a6NSEdO8eXNkRIxyAp2EIYNQDubJoH7GjBmDJUuht1QKx5QY1uagU3EVa21QmVIC%20zNh9+OGHooGYSYJwwSwXZsIgBNEuXIKOwfsBmJrq0aOHlEttoHhRIhnEHwJYQMQsIArBJJ/0RoJU%20DuCgLbBNxIAYZg1FWGTH4iNWRb/77juYiom9hIQEKS8DJEACFU6A6qrCu4AGkEDpCGDSBQ49Ik9c%20XJyGzBMmTHj77bdFgi5dumBqBFoBK0rwOsI0El7Tw1pYSdnhAo9lOEzPwIUcfldSMkzMDBkyJL3w%20gDf6sWPHsG4IIYX1PogP6K3OnTujCixQQtlIuRDAKtvDhw9FTFRUFAIaapcaiNVD5UKeGsYsGtJg%20/kykxLJjTk6O2lwjRoyAusLMFlqqnAANxKSXaCAEDWb+ABzzRng5AIoH8hFVYFYPPB0dHZUzFg8X%20L0qkgVZDALNT6CCsXQIj9C5iUJFUCHBhtkzSTJigwnqicnZMOmIWDTNY165dg18/mgPBKmVngARI%20oGIJUF1VLH/WTgKlJoD7Lu76cEXCRNTixYtFfviGi5ux8i0Wqgh+OVjYwooSUsLbHVIJsy9YOoS7%20jxAQmJ1SawFcslq1ajV16lQV8QE38z179mDdDe/6wa8c82GYg4HmgPLAfFWHDh2grjBPhrkWVKdc%20Mrym4GUFXQWRh50g2rZtW5K6QjymzdAQ+H1L8hENhNRAXuUyi4cxo4P1uC+//BL67MaNG1CQkEHF%20kyEG7YIixIt+yjNziEcDly9fDpiQZS+99BIsQSQmhxCJSSw0FgpyyZIlKjNzylXA1NjYWGRXW5SU%20EiiwcCnMQ4GIRxapHxs2bAgZh1cEsICI9UG4XgGglBcBdAHswRQaXlOAVz7aq9zBQVa8AAAfZElE%20QVT1yikZJgESqAAC+ELyIAESkBEB3EfhtI55DszQQCTB3xnGw32nevXq+BcELkTw6RYO19BP8HBH%20Sqwx4SrW+OArjfu38j802KChpLZ/9dVXSCk5j0t+RZj3wpIWysTqG+auRHa8P4hThOHJBNEgXIuU%20S8YsFN74s7GxgSyD9hJvBWKVDRM5yskQhjcSRAzKh1DD0phQWvDrQqWiCrV+V1CQohyU3KBBA2Eh%20xJ+QHSpViFNowZYtW4owJuowOYQw9BxUEezE1BSm30AMkXARA2e40iOMzSCABSukIqP0KfHBiiQg%20I3HxomAkukN4U6FkyCPQQEXwk4MYHT16tHI/Yi4Qry+AA6oeN24clKVydqgueLLDTryvAI94iD/J%20EgZIgAQqnIAFLFD+p5ZhEiABWRDARgnQJbj1PtVaaCyIA9z7S0qJaTBpBUqkwaSXr69vSekRD8mC%20LJhF05BG7SUYgyk3lWmt4imhPDB7VIbypaKgbOBSBvEBU6GcpHgRgG6DgFOJVD4V7zBKK4zKl0ob%201lwUXLiw5wL6EX0Ea4t3KPQWGgIRprZeFI6OQOcir9oEjCQBEqgQAtYVUisrJQESKCcBDWpJpWT4%20HuFQiVQ+xWQPdnJSjsHtXLO6gjQpm/R5qjHCDMiaciobzOiIojDHg3cblVuHMN5t1KyunupTpVKg%20hlPNRcE3S+TF/JPaQkpaPxWJUbjm8tWWyUgSIAF9E+Dclb4Js3wSIAESIAESIAHzIvAPDwzzajpb%20SwIkQAIkQAIkQAJ6IEB1pQeoLJIESIAESIAESMCMCVBdmXHns+kkQAIkQAIkQAJ6IEB1pQeoLJIE%20SIAESIAESMCMCVBdmXHns+kkQAIkQAIkQAJ6IEB1pQeoLJIESIAESIAESMCMCXC/K7l2PjaD5k6w%20cu082k0CJEACOiWA3wDAVv46LZKFlYsA1VW58FVgZrHNfwUawKpJgARIgASMhADUlZFYQjMEAa4M%20ciSQAAmQAAmQAAmQgC4JUF3pkibLIgESIAESIAESIAGqK44BEiABEiABEiABEtAlAaorXdJkWSRA%20AiRAAiRAAiRAdcUxQAIkQAIkQAIkQAK6JEB1pUuaLIsESIAESIAESIAEqK44BkiABEiABEiABEhA%20lwSornRJk2WRAAmQAAmQAAmQANUVxwAJkAAJkAAJkAAJ6JIA1ZUuabIsEiABEiABEiABEqC64hgg%20gb8JHDp0qHr16n+flzJUrVq1o0ePljITk5OA6RDo3LnzunXrTKc9bAkJlJUA1VVZyTGfKRIo5683%20Llu2rGHDhqYIhm0iAa0I5ObmapWOiUjA1AlQXZl6D7N9pSSQlZU1fvx4Dw+POnXqrFq1SuQ+cOBA%2006ZN3dzcBg0aFBcXh8iIiIhevXq5urp27Njx1VdfXbx4MSIXLFhw//79I0eODB48eMqUKZ6enpgJ%2027NnTylNYHISMAoCxYc9vgVfffVV3bp1nZ2dp06dKqzcunVrgwYNHBwcMOxTUlKMwnQaQQIVTYDq%20qqJ7gPUbGYHHjx/HxMTs2rVr8uTJr7322vHjxyGYBg4cOGnSpH379uHmMW7cOJgMmWVlZbV3794+%20ffpAhCEXIu/evZuWlpaamrpjxw4EUEhQUNC7775rZE2kOSTwdAJqh/2dO3dWrly5evXquXPn4oni%20xo0bwcHBo0aNGjlyJB4qnJycEPP0opmCBMyAgLUZtJFNJIFSEIBmWr9+vbe3d7t27U6cOLFp06Ya%20NWq0bNly2LBhKGXWrFnwLDl9+vTFixcfPHhQtWpVJPv5559VKsBz/PLly+3s7PB836NHD5WrPCUB%204yewefNmlWEvHiHmzJnzbOEBgRUWFnb+/PlWrVrNmDEDLWrevDmeKIy/abSQBAxAgOrKAJBZhZwI%20+Pj4QFoJi5s0aXL27Fk4Y506dQoe61IzLl++jMd0SCsRgzVE6ZII+Pr6Qloh7OjomJeXp3KVpyRg%20/ATu3bunMuwjIyNhNh42hPF4hMDYxhK55Gtoa2tbr149428aLSQBAxDgyqABILMKORGIj4/PzMwU%20FkdHR8MBq0qVKkOGDEkvPJKTk48dO4Zneiz8JSQkiGQhISEqLbSwsFCJ4SkJyItA8WHfqFEjNMHS%208h93DTyKPHz4UGpaVFSUFGaABMyZwD++J+YMgm0nAUEA0grLf3gov379+k8//dSzZ094VsEz/erV%20q3g0h9MJ3NWxAoKpLKyGQGxt2LDhwoULpEcCJkag+LDHonnxNvbt2xf7mOzfvx9TvPh2hIeHF0/D%20GBIwQwJcGTTDTmeTSySA53K8DIW7xaJFi/Lz88eOHTtmzBhra+vp06d37doV9w8sAi5duhSrfnhP%20auLEidiCAauH8KzCQqFUKCeuJBQMyJcAXoZVGfb4dmBsqwxvuCHiMQMveeDb4e/v7+fnJ98m03IS%200CEBC3wldFgcizIYAfwbx77TH22sCWK3BeE7JWrBbBaWArHJAk4hvPDCFLSXi4uLjY0NBBZ2UGzT%20po3+7GHJJFAhBJSHvQYDsM0VltQlh0UNKXlJTwR4R9AT2DIXyzt0mdFVcEZ+lyq2A7BiiFeosFMD%20tmxAAH7uKs/0FWseaycBEjArArwjGFt3U10ZW49oaw+/S9qS0k86uGdhUyu8kd6tW7e2bdvqpxKW%20SgIkQAJaEeAdQStMBkxEdWVA2Dqtit8lneJkYSRAAiQgYwK8Ixhb5/GdQWPrEdpDAiRAAiRAAiQg%20bwJUV/LuP1pPAiRAAiRAAiRgbASoroytR2gPCZAACZAACZCAvAlQXcm7/2g9CZAACZAACZCAsRHg%20bqLG1iPlsgfb/XETrHIRZGajJACPXewx9lTTOP6fiogJ5EhAy/Evx6aZsM1UVybVuZBWVFcm1aNs%20TCEB3F20IcHxrw0lppEdAS3Hv+zaZdoGc2XQtPuXrSMBEiABEiABEjA0AaorQxNnfSRAAiRAAiRA%20AqZNgOrKtPuXrSMBEiABEiABEjA0AaorQxNnfSRAAiRAAiRAAqZNgOrKtPvXcK3Lzs7GT+8Zrj7W%20RALGRIDj35h6g7aQQMUToLqq+D4wAQsWLFjg4eExefLkIUOGzJs376ktWrhwIX7/+KnJmEB/BE6c%20OOHj46N9+ewyDaw4/jXAMc5LHP/G2S+mZBV3ZDCl3qywtqxYsWLlypWjRo06deqUl5fXU+3A3ahV%20q1aBgYFPTckE+iNQqs072GUaOoLjXwMco73E8W+0XWMahnHuyjT6sSJb0aFDh9DQ0A8++GD16tU/%20/vjjsWPH9u7d++KLL86fP9/Pzy88PHzw4MFOTk5ubm6vv/469oRs1qzZo0ePxowZs3z58oq0W+u6%20d+7c2aRJE0dHx7Zt2168eBH5mjZtGhwcLAro27fv4cOHlZu8fft2qfmJiYla11MxCfEQjx6xt7ev%20UqWK6JHk5GS5d5khUZr2+DftwY9xwvFvyC+LedUl9t/jp+wIYJgWt1ltZPFkuo05cOAA5qtmz559%209+7dgQMHzp07d+vWrc7OznXq1Pnmm29wWqtWrfPnz//+++/QWLt370Z6XEX8nTt3dGuJPkpDo6ys%20rGbMmHHy5MkBAwagUajFzs7u0qVLojrE/Prrr8pN/uGHH6Tm5+bm6sOq8pd5/Phx9BrK8ff3Hzt2%20LFTjzJkzK1euDPmLtV1j6zItB7aWycpPT7kEEx7/pjr40X2mN/4rZPArfxEYViHAlUGMSR7lItCj%20Rw/MfLRp0wa3ZKmg1NRU3LARs3jx4qSkpMjIyF69emGOB74+uJ07ODi0a9eudu3aUnqjDUAqtWjR%204tNPP4WFq1atWrt2bUZGhlprpSZv27ZNCqtNaTyReXl5mHQcPnw4hC8UcEpKSlZWlo2Njay7zMB4%20TXj8m/bgxzjh+Dfwl8WsqqO6MqvuNlxjsSYoxNbEiROvXLmClTLM4vTp0wceKoYzQhc1wfsey4Ki%20JF9f3+nTp5dUqtRkJFAOl5TeGOIxLQdlDH1w+/Zt2CxMknuXGQNYaQDIGqZpD36ME45/Y/iymKoN%209Lsy1Z6t4Ha5uLgIC+Lj47/44ou4uLhffvkFq2lYfqpgy0pZPdzFYmNjRSa4i2GmJy0tDad46hWR%20aKAISE3GqXJYXDXOz1u3bk2YMAGSEb5Wu3btgpH4RTO5d5kxoJYGgKxhmvbgxzjh+DeGL4up2kB1%20Zao9ayztwpv8o0ePhjW9e/eG9zRmsBC2tLSEZMnJyTEWK0u2o3v37nCsOX36NBYEP/vssz///BPu%207fBYgq8VVtm//fZbCMeScxv7laioKGtr6y5dusDQJUuW4BOdIvcuMyrosoZp2oMf44Tj36i+LCZm%20DNWViXVoBTcHMx9QTspGvPPOOzExMXgIxtM83rPDKa7iX+2RI0dqszOWclEVEoYofPvtt7t27Yom%20XLhw4fPPP4cZH374IQLwHtu0aVPdunUrxLByVoqewhEUFASvMnjCubq6Qj6ijdi0TO5dVk4y5ckO%20pKY0/k118KOLC4c/x395BjvzPoWABZ6/n5KEl42SAP51KN53aiONwXysqeFltFJtX2kMZks2YMoN%20a2fu7u5SDPzWsTe9p6enFCPfQHR0NNQVXoSEVztc2hFAW4yqy7Qc2FomM3xPGRXM0jbftAc/aJjG%20+DfawV/a8WYy6dXcoU2mbabdELXfJbWRps2BrTMHAloObC2TmQMxttGUCGgzsLVJY0pMjL8t/1jE%20MX5zaSEJkAAJkAAJkAAJGDkBqisj7yCaRwIkQAIkQAIkIDMCVFcy6zCaSwIkQAIkQAIkYOQEuJuo%20kXdQxZv3IC1y7qVZl+MuZuVl1Xdt8HbT91t6ttbSrB2h27fe29LYren0lp+ILDn5OUuvL94fuTcq%20/UGAU8CgwGHj670MjwFc1XBJy+rKkCwmMXPZ7tCbESnZufk1qzhO6hHQOMBZy3L2XYrd9Wd03apO%20b/SriSwII6Z43hc6VevYwOPQ1Ue/nnuocnXGC/U8nW1VInVymv4o9tKShXHXruZlZ7nWrtts8n/d%20GzR8asmRx47c2rIhKfSejaOjd4vWjSa8UtmvOnLl5+Xd3PBdxKH96TExTn5+NQcMqjP0BVGahktP%20rU4WCTj+i3fT1bCkTUcjQh6m5RcU1PZ1Gtu1etNAxf52eM9m26kHR68/vh+b4epo3aqW20vd/T0q%20V8IlQ45/Dv7iXcYYwxOgV7vhmeumRrU+jGojy1NfQlZ83z3dkrKTpEIsLSzXPbuljVeQFFNSICY9%20+sXDw6CigrzbI4tI9uapyQce7FXOMqbO+GktZiBGwyXl9DoMJ6XlvLTkYkqGYgsucVhaPLNgfGNx%20q3gSp/7/j5Oz3lxzLSYxq3kNF2RBovWH7n9/LLJ46rcG1OrfpsqCHXf2XlTVXhvfalXVXfGCnm6P%20nLTU3SOHZiUmSMVaWFl1W7bGo2EjKaZ4IGzvrj8+V/zgj3TYuXv0WLXewcfn3Gcz7+/fI8UjUH/0%20uKavvI6AhkvK6csZ1nJga5lMe2M4/ouzOnc7/uPNwflK75rjWzP/pcaKL0KxQV7N3W7F5GYOttbF%20L6FkfYx/0xv8AKXNwNYmTfHeZIz+CHBlUH9sTaHkTbfXCWn1btNpX7Rd5GjtlF+Qv/zG15rbtj9y%20zwfn3u63tweklXLKW4k3hbTqVvW5NV02tfBohas/hmyOzYjRcEm5BN2Gfz4bJaTVKz0DPxxax8HW%20CveMjUciNNdy/Mbjudtvj19yCdJKOSWmvro18ZT+/L3sxVUfV8XsVFhsOj47N/SYOrCW9OfmZKNc%20gq7Cd3/eDmkFRdVu5mfPLllp5+FRUDj5pLn8q6uWIYFr3XpdFi1t+fb7CGfGx4UfPpAScf/+AYUg%20rvn84F7rf6jaSbH16J3tW7OSEjVcQhoTODj+i3fimv338TWxtbGc0q/mvztWRQKcfn804n5supi7%20rVPV8b3BtVvUVMxmPYjPPHTlEQIGG/8c/MW7jDEVQoArgxWCXTaV7o3cDVvbe3ecUP8VBMJS7q0M%20Xnou9sy9pLszL3yUV5Dnaee1qP3S3PzcN0+/mpKT4mbrvqzTt8cfHvnt/g6pkRbPKBb+cOyPUMx/%20WFlYzWo91x33fFuPwfv75uRnH35wMDYjuqRLI2q/qMish+PYdcU26y1rugzvVA2BiMcZm49FXg5N%20uv8offHOkPz8Ancnm4+H18/Nz//kx1tpmXkuDjazX2zwx+0ELHNI5hSuairO/tXIE38iPjcv/+Vl%20lxHGrFWbOm5YMRF3l25NvdrVdcvNK7C3tRIp9fEZcfQgiq3WqYt/954I1Bsx+sqyrx+eOZkRH3du%201oy87ExHH9+gj2dhUe/MzGnQYTht+tp/M+MeI3H9UWN9WrfF3+1tW1IfRGY8isFyIZZ8rGxtm7/+%20lrW9fcs33406eSwvM/PhmVMZjx+VdCmwdz99NM3AZXL8q4z/94fUCS18ThjRqdrAIF90x/X7ycGR%20qSHRadfCk8XmiR8OrRvg5dCypuvIhX8iQUhMuiHHPwe/gb8jrK4kAlRXJZFhvILAw8LJpxZPHK1a%20erV+JlgRn5mf1cyjxdq/ViP83a1VyTlJJ6KPITynzZf47FGtl0slVwS2hfyQlpuKgDii0qMQCHAK%20hLRCoJ5rA0yGIQFqicmIKemSyKuPz9gkxeRTI/8iR6vGTwLwwWroVxkeJLi69WRkSmbu+TuJCOOJ%20HJ8dG3pUdlB8cXb9GZOeVfRrgzhVPn45+xBaLdDb4fU+NRAfnZiVmZ2PwJbjEbO33crPf6aGjwNW%20DKWqlfOWPwzvKBTi3lCxXonD40kgNy21SlD7qyuWxF2/5tG4SXZKStTJ40jQYPT4Ss7OPdcpVm8r%20V/eHZnp47kxatMJLzKtZy5g//0DApWYtSCsEsFBo5+EJKZYeE53xWCHI1F5CvAkcHP8q4z81M9fZ%20XjH4mzxxT8SCFE5dHKyzsvNxCY8NkFbKXY9Lhhz/HPzK8BmuQAJUVxUI39irTsxKgCc7rHSzdRO2%20utsWzc1Ep0dNaTz1aNSheykhS64vLHhG4YXxrG/3wTWGKQJVu+MPAcxy3Uy4LvLiE7nw6W6rkFbi%20cLd1L1RXUVgcRIzaS0/S6vj/Sek5UFEoFDNSomjXJ+t0j5KyXurmf/av+PDHGesOh4sn8nb13Hq1%208EHK9vXc8YcAZrnuRCl+0VnlSEjNxkIJIkd0rmZjrVh8D4tRLAvikNKHxqS/t/7Gxrda6tyrPRdC%20LlnhJ2f75Ie0bV0VShdHemxM3eEjI48djr95/eqKpQX5CmkY2Kd/1Q6dEHCtpdCO8Aj+fWh/BHBg%206qta5y6hu39DuJJz0c9yI2zr4qpQV7ExQl2pvaTIL/OD41/t+P95WpDUsZuPReCNEJy2qu06tENV%20/IlLqRm5n2+/LcKtarkabPxz8Etdw0CFE6DfVYV3gfEaIDQT7MMKoIqVuQW5tla2n7ddACd3kQyT%20VZ+2nquSTO0p8qrES+VruKSSRQenT9xy85QddAvLxcpdJRtLLILAXVdIKzyUT31eIT60OdYeDE/L%20yvN2qdS1sZdIjyd+bxdbXze7OaMb7P64/YTu/oiHttv5h2I9VMfHk+YUYIqs8JB+7KogN8/Syqrt%20tBmWNjZ4lzA/N9fey7v5lKnKBlhaW7vVb2Btr5h+eHDiWMSRgwUFinKk0qTE8OXScElKJt8Ax7+G%208Y83QmZsCV53KBz9CxfD8d0CpI6+dj/51RWX8YmYwe188Y6I4cY/B7/UDQxUNAHOXVV0Dxhx/RBM%201hbWUDypOYrHUxxJ2YoFMhxV7BUuF009mjdzb3Ep7gLCXat297IvEhOKFOoOz8IEqTl/rxWKAn3s%20q4j1BbWX1JWkg7jK9tZWlhaQVulZRWovJb0oACWECur7VW5QvfKNcEXb29Vzdy98sfypFcNbC27v%20SAYfLCurIoez55p740/KO/Jffr+ce5iQmiOcsaR4nQSwfmft4JibnoaXp0SBOalF3WfvrbDBOSCw%20Stt2UadOIOzf/blKTk4IIHFGXBy0l1M1v+dWb8DpodcmJYfe++uH7+HnXpjg71m67FTFjdPe2+eZ%20wl/szklTdwkpZH5w/Jc0/m+EJ8/a+ldcSjZ6uEN99/cH13EqXC7E6Q/HI9cdUri921hZTHwuYFgH%20hUejwcY/B7/Mv3MmZT7nrkyqO3XbGMxLedsr1sKCE2+KkoMTboiAr4NiCeDwgwNCWiG88/4vV+Mu%20i6slfQpNFp4ahjs/0kSlPUjOUdynqzj4arhUUmnljLe0tPB0roRC7kYXiYO7D4sCXoXq6vStOCGt%20kObgldhbkUUaRXO992LSMHGFNPDqlVKu3hc2e+utFXtCRQwmkyDCEMYdSEqjw4ADdA+k8L0QUWZi%20yB0RsPdSxD+6ejnq9EkRc+fnn5LD7yMcfujA3tH/3jtuBCa0cGrj6IRdshBAXntPLwRSwsPEpeyU%205IxYxdYSDl7e+CvpEuLlfnD8qx3/2Ozqgw03IK0qWVvi7ddZoxpI0urb/WHfHVRIq+qe9stebSak%20FYaBIcc/B7/cv3cmYz/Vlcl0pV4a0s6nA8o9EnXwdPSJe8khm+9uwGnNyrXwqmBiVuInFz7CaWWb%20ylglxE4N0/54R/hplWRKkLeitOz87G9uLHqc+WjxtfkiJTbE0nCppNLKH9+ihsKX6Myt+At3E8Mf%20pe84p3AL8/e0x6uCyek5eG0Qp452VriL4IYx7+c72TlFa20aqhYLIvD0bRL4966k2Bzr2I24/zsT%20te9STGZ23sajEUmF82SYHtNQVJkvebdsjbwRhw5AYGUmxGP3BJy61a2PaSo4ppz/YjbWO/HKJqa4%208rOzsccVXh7EhBbS4DR40zoEkkJDxOSWc2BNvD+ImJzUVLxFmJedfWP9GpxaWFp6tWjl3apNSZcQ%20bwIHx7/K+M/JzV+w425m4RdhZOdq1T3sr4UliT9MaG09WbQDy8s9A9IyckU8dmow5Pjn4DeB751p%20NIG7icq1H9XuHac2sjwtDEsJ7b+3B5STciHzghYPCBj0/tm3fg//FfFfdViOWaj5V+YgPK7uxA+a%20/09KPOzAAHi1t/PusPbZzSJSxEgJEOhatQc2cUBAwyXl9DoMR8ZlTFhysXAW6e9SsfFVj2be2NFK%20bLuA7dSxr9WqfWFIMaxD1Vd715CSTl55GV7q2Nfny5caS5GYo4KQwkZWP72vECXiuBKa9N6G60/8%20oIoi4Ya1+vXm9pV0vzUDXpvaNWIQ/KJQE3a9EoEOn83z+1fXy0u/gkhC/L++/BpvBV5Y+AXCTf7z%20OjZiOPLGK4+vXcGpWFhEAEfbj2Zib4XDuHRVMTEJrywxgwWHd2ymhRgNlxT5dXRoObC1TKa9URz/%20KuM/qK4b3sZQC7BPS589FxXvpqgceAUEXxyDjX/TG/zgqc3A1iaNStfwVK8EOHelV7yyLzywco3V%20ndd72SkWgHDYWdlNb/EJpNXpmJNCWvX064O/sXUnNHVvjgQbb6+9EX+tMK3iA25bUlgElndaA7El%20Rfau3m9u24VPvSSl123Az8N+7phG4pc6UDI2SHyjb01IqwshiUJaYfNPuE8NbV+1vp/COQmTT7ej%20/nYag9tWcXuw9w8ivf75+zbNarjMfKG+n8ff27K3qe365UuN9CGtUDs2TeiyeJlYIoG0got6q/em%20QVrFB9+8/dMPSBDQqy+2ZsDuoF7NW+L0xtrVqZER7WfNrd7tOfxDDp8tRGLbhdbvTxfbVnWY/QXS%20I1IhrSwsAnr2QYE4xaHhkkgg60+Of5Xxf+me4nXU4gcmax8mZBSPR4y1lYUhxz8Hv9peYKThCXDu%20yvDMdVOj2icVtZE6qQ+/tpadl+XvFGhlqYO5luTsZOwkVN0pwMH6H1vjwFQNl3TSELWF4NcG8QZf%20VXd7tYJJbZayRcanZMenZmPWytFOVXeWrUDNufAcj71DnapVx0Ke5pTS1bysrNSoSPhd4XVCDCcp%20HgG4uqdFR8Pt3drub5koEmi4pFxCmcNaDmwtk5XBDI7/MkArnsWQ499kBj8wajOwtUlTvEcYoz8C%20VFf6Y6vfktV+l9RG6tcOlk4C+ieg5cDWMpn+7WUNJKBLAtoMbG3S6NImlvU0Ato+0T6tHF4nARIg%20ARIgARIgARJQEKC64jggARIgARIgARIgAV0SoLrSJU2WRQIkQAIkQAIkQAJUVxwDJEACJEACJEAC%20JKBLAlRXuqTJskiABEiABEiABEiA6opjgARIgARIgARIgAR0SYDqSpc0WRYJkAAJkAAJkAAJUF1x%20DJAACZAACZAACZCALglQXemSJssiARIgARIgARIgAaorjgESIAESIAESIAES0CUBqitd0mRZJEAC%20JEACJEACJGCIn5IlZYMRwE9N4TBYdayIBAxDQMtRXTj8Of4N0yesxXAEtBz/hjOINWlBgOpKC0jy%20SZKfny8fY2kpCeiYAMe/joGyOBIggbIS4MpgWckxHwmQAAmQAAmQAAmoI0B1pY4K40iABEiABEiA%20BEigrASorspKjvlIgARIgARIgARIQB0Bqit1VBhHAiRAAiRAAiRAAmUlQHVVVnLMRwIkQAIkQAIk%20QALqCFBdqaPCOBIgARIgARIgARIoKwGqq7KSYz4SIAESIAESIAESUEeA6kodFcaRAAmQAAmQAAmQ%20QFkJUF2VlRzzkQAJkAAJkAAJkIA6AtyrXR0VOcTxRz/k0Eu0kQRIgAQMQYC/lmMIyqWp4/8BOBrW%20V60pXdIAAAAASUVORK5CYII=" width="750" /></p>
<p>The goal is for the optimized implementation to avoid having to store
all the iterators that the naive implementation does, while still
outwardly appearing to the user as though its API is the same as the
naive one.</p>
<p>The iterators of the optimized
<code class="sourceCode cpp">to_utf32_view</code> can simulate the naive
version’s
<code class="sourceCode cpp">base<span class="op">()</span></code> by
reconstructing a <code class="sourceCode cpp">to_utf16_view</code>
iterator containing its own <code class="sourceCode cpp">first</code>,
<code class="sourceCode cpp">curr</code>, and
<code class="sourceCode cpp">last</code> iterators. However, if we added
accessors for
<code class="sourceCode cpp">first<span class="op">()</span></code> and
<code class="sourceCode cpp">last<span class="op">()</span></code> to
the iterator, then we wouldn’t be able to return the same results as the
naive implementation because we’ve lost information about those
iterators– so this optimization can only work properly if we leave those
out.</p>
<p>Unlike with other range adaptor objects,
<code class="sourceCode cpp">base<span class="op">()</span></code>
cannot have any overloads that simply return a reference to the
underlying iterator as opposed to a new copy or move-constructed
instantiation of it, because of this optimization.</p>
<p>Input iterators cannot benefit from this optimization because they
are necessarily past-the-end of the current code point within the range
being adapted, whereas other iterator types are at the beginning of the
current code point.</p>
<p>There is an unavoidable inconsistency introduced by this optimization
that occurs when one of the iterators is in the middle of a code point
in a variable length encoding (UTF-8 or UTF-16). Consider what happens
when a user attempts to convert the UTF-32 code point <code class="sourceCode cpp">U<span class="op">+</span><span class="dv">1</span><span class="er">F574</span> 🕴 MAN IN BUSINESS SUIT LEVITATING</code>
to UTF-8 and then to UTF-16, but increments the iterator of the UTF-8
transcoding view by one code unit first.</p>
<p>In the naive implementation, the result is simply three replacement
characters as the UTF-16 transcoder encounters three unexpected UTF-8
continuation bytes:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>UTF-32: 0x1F574</span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a>UTF-8:  0xF0    0x9F   0x95   0xB4</span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a>                ^</span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a>UTF-16:         0xFFFD 0xFFFD 0xFFFD</span></code></pre></div>
<p>However, in the optimized implementation, when the UTF-16 transcoding
view wraps the iterator from the UTF-8 transcoding view, it looks
directly at the underlying UTF-32 iterator and forgets the UTF-8
iterator’s position within the code point:</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>UTF-32: 0x1F574</span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a>UTF-16: 0xD83D 0xDD74</span></code></pre></div>
<p>Furthermore, when you invoke
<code class="sourceCode cpp">base<span class="op">()</span></code> on an
iterator of the UTF-16 transcoding view, it’s lost the intra-code-point
position, moving it back to the starting code unit:</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>Original iterator:</span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a>UTF-8:  0xF0    0x9F   0x95   0xB4</span>
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a>                ^</span>
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a>Result of base():</span>
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a>UTF-8:  0xF0    0x9F   0x95   0xB4</span>
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a>        ^</span></code></pre></div>
<p>These inconsistencies are somewhat unfortunate, but they only apply
when the input to the transcoding view starts in the middle of a code
point, which is definitionally invalid UTF anyway; and it does not
affect the invariant that the output is always valid UTF. This is an
acceptable tradeoff for avoiding quadratic growth of the iterator
sizes.</p>
<p>There is one more quirk introduced by this optimization. For
ordinary, non-special-cased iterators of transcoding views,
dereferencing a past-the-end iterator, incrementing past the end, and
decrementing before the beginning are all erroneous behavior. However,
because of the information loss associated with this optimization, the
EB detection can’t kick in until the user has exceeded the bounds of the
deepest underlying range, rather than one of its intermediate
layers.</p>
<p>For example, in the scenario in the diagram from before, the naive
implementation would detect EB when the
<code class="sourceCode cpp">to_utf32_view</code>’s
<code class="sourceCode cpp">begin<span class="op">()</span></code>
iterator was decremented to the point where the underlying range
iterator was less than
<code class="sourceCode cpp"><span class="bn">0x150</span></code>, but
the special-cased implementation would simply continue reading through
the underlying range until
<code class="sourceCode cpp"><span class="bn">0x100</span></code>. This
is perhaps surprising, but still achieves memory safety.</p>
<p>It’s a useful property of this approach that the type system
remembers the correct type to use for
<code class="sourceCode cpp">base<span class="op">()</span></code> even
in the case of transcoding views wrapping other transcoding view. To
illustrate, consider this algorithm (not proposed) as an example.</p>
<div class="sourceCode" id="cb13"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span><span class="op">&lt;</span>input_iterator I, sentinel_for<span class="op">&lt;</span>I<span class="op">&gt;</span> S, output_iterator<span class="op">&lt;</span><span class="dt">char8_t</span><span class="op">&gt;</span> O<span class="op">&gt;</span></span>
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a>transcode_result<span class="op">&lt;</span>I, O<span class="op">&gt;</span> transcode_to_utf32<span class="op">(</span>I first, S last, O out<span class="op">)</span>;</span></code></pre></div>
<p>Such a transcoding algorithm is pretty similar to <code class="sourceCode cpp">std<span class="op">::</span>ranges<span class="op">::</span>copy</code>,
in that you should return both the output iterator <em>and</em> the
final position of the input iterator
(<code class="sourceCode cpp">transcode_result</code> is an alias for
<code class="sourceCode cpp">in_out_result</code>). Because we can
always provide
<code class="sourceCode cpp">base<span class="op">()</span></code>, we
have no trouble returning a
<code class="sourceCode cpp">transcode_result</code> here in every
case:</p>
<div class="sourceCode" id="cb14"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span><span class="op">&lt;</span>input_iterator I, sentinel_for<span class="op">&lt;</span>I<span class="op">&gt;</span> S, output_iterator<span class="op">&lt;</span><span class="dt">char8_t</span><span class="op">&gt;</span> O<span class="op">&gt;</span></span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>transcode_result<span class="op">&lt;</span>I, O<span class="op">&gt;</span> transcode_to_utf32<span class="op">(</span>I first, S last, O out<span class="op">)</span> <span class="op">{</span></span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a>    <span class="kw">auto</span> r <span class="op">=</span> ranges<span class="op">::</span>subrange<span class="op">(</span>first, last<span class="op">)</span> <span class="op">|</span> uc<span class="op">::</span>as_utf32;</span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a>    <span class="kw">auto</span> copy_result <span class="op">=</span> ranges<span class="op">::</span>copy<span class="op">(</span>r, out<span class="op">)</span>;</span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> transcode_result<span class="op">&lt;</span>I, O<span class="op">&gt;{</span>copy_result<span class="op">.</span>in<span class="op">.</span>base<span class="op">()</span>, copy_result<span class="op">.</span>out<span class="op">}</span>;</span>
<span id="cb14-8"><a href="#cb14-8" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="5.6" id="other-design-notes"><span class="header-section-number">5.6</span> Other design notes<a href="#other-design-notes" class="self-link"></a></h2>
<p>None of the proposed interfaces is subject to change in future
versions of Unicode; each relates to the guaranteed-stable subset. Just
sayin’.</p>
<p>None of the proposed interfaces allocates or throws.</p>
<p>All the transcoding iterators allow you access to the underlying
iterator via <code class="sourceCode cpp"><span class="op">.</span>base<span class="op">()</span></code>,
following the convention of the iterator adaptors already in the
standard.</p>
<p>The transcoding views are lazy, as you’d expect. They also compose
with the standard view adaptors, so just transcoding at most 10 UTF-16
code units out of some UTF can be done with <code class="sourceCode cpp">foo <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf16 <span class="op">|</span> std<span class="op">::</span>ranges<span class="op">::</span>views<span class="op">::</span>take<span class="op">(</span><span class="dv">10</span><span class="op">)</span></code>.</p>
<p>Error handling strategies of the user’s choosing can be implemented
by the user due to the suitable basis operation
<code class="sourceCode cpp">success<span class="op">()</span></code>
provided by the transcoding iterator. This gives control to those who
want to do something other than the default. The default, according to
Unicode, is to produce a replacement character
(<code class="sourceCode cpp"><span class="bn">0xfffd</span></code>) in
the output when broken UTF encoding is seen in the input. This is what
all these interfaces do, unless you make use of the basis operation.</p>
<p>The production of replacement characters as error-handling strategy
is good for memory compactness and safety. It allows us to store all our
text as UTF-8 (or, less compactly, as UTF-16), and then process code
points as transcoding views. If an error occurs, the transcoding views
will simply produce a replacement character; there is no danger of
UB.</p>
<h2 data-number="5.7" id="null-terminated-sequence-sentinel-null_sentinel-and-associated-cpo-null_term"><span class="header-section-number">5.7</span> Null-terminated sequence
sentinel <code class="sourceCode cpp">null_sentinel</code> and
associated CPO <code class="sourceCode cpp">null_term</code><a href="#null-terminated-sequence-sentinel-null_sentinel-and-associated-cpo-null_term" class="self-link"></a></h2>
<div class="sourceCode" id="cb15"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std <span class="op">{</span></span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>default-initializable-and-equality-comparable-iter-value</em> <span class="op">=</span></span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a>    default_initializable<span class="op">&lt;</span>iter_value_t<span class="op">&lt;</span>I<span class="op">&gt;&gt;</span> <span class="op">&amp;&amp;</span></span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a>    equality_comparable_with<span class="op">&lt;</span>iter_reference_t<span class="op">&lt;</span>I<span class="op">&gt;</span>, iter_value_t<span class="op">&lt;</span>I<span class="op">&gt;&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb15-7"><a href="#cb15-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-8"><a href="#cb15-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-9"><a href="#cb15-9" aria-hidden="true" tabindex="-1"></a>  <span class="kw">struct</span> null_sentinel_t <span class="op">{</span></span>
<span id="cb15-10"><a href="#cb15-10" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span>input_iterator I<span class="op">&gt;</span></span>
<span id="cb15-11"><a href="#cb15-11" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> <span class="op">(</span><span class="kw">not</span> forward_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">&amp;&amp;</span> <em>default-initializable-and-equality-comparable-iter-value</em><span class="op">&lt;</span>I<span class="op">&gt;</span></span>
<span id="cb15-12"><a href="#cb15-12" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span>I <span class="kw">const</span><span class="op">&amp;</span> it, null_sentinel_t<span class="op">)</span> <span class="op">{</span></span>
<span id="cb15-13"><a href="#cb15-13" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <span class="op">*</span>it <span class="op">==</span> iter_value_t<span class="op">&lt;</span>I<span class="op">&gt;{}</span>;</span>
<span id="cb15-14"><a href="#cb15-14" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb15-15"><a href="#cb15-15" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span>forward_iterator I<span class="op">&gt;</span></span>
<span id="cb15-16"><a href="#cb15-16" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> <em>default-initializable-and-equality-comparable-iter-value</em><span class="op">&lt;</span>I<span class="op">&gt;</span></span>
<span id="cb15-17"><a href="#cb15-17" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span>I it, null_sentinel_t<span class="op">)</span> <span class="op">{</span></span>
<span id="cb15-18"><a href="#cb15-18" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <span class="op">*</span>it <span class="op">==</span> iter_value_t<span class="op">&lt;</span>I<span class="op">&gt;{}</span>;</span>
<span id="cb15-19"><a href="#cb15-19" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb15-20"><a href="#cb15-20" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb15-21"><a href="#cb15-21" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-22"><a href="#cb15-22" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> null_sentinel_t null_sentinel;</span>
<span id="cb15-23"><a href="#cb15-23" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-24"><a href="#cb15-24" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> null_term;</span>
<span id="cb15-25"><a href="#cb15-25" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-26"><a href="#cb15-26" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>The sentinel type matches any iterator position
<code class="sourceCode cpp">it</code> at which
<code class="sourceCode cpp"><span class="op">*</span>it</code> is equal
to a default-constructed object of type <code class="sourceCode cpp">iter_value_t<span class="op">&lt;</span>I<span class="op">&gt;</span></code>.
This works for null-terminated strings, but can also serve as the
sentinel for any range terminated by a default-constructed value.</p>
<p>Because this type is potentially useful for lots of ranges unrelated
to Unicode or text, it is in the <code class="sourceCode cpp">std</code>
namespace, not
<code class="sourceCode cpp">std<span class="op">::</span>uc</code>.</p>
<p>The <code class="sourceCode cpp">null_sentinel_t</code>’s <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">==</span></code>
has a separate overload for input iterators that takes the iterator by
reference instead of by value. We want to take input iterators by
reference because they are not required to be copyable. However, for
forward iterators, we want to take by value because otherwise we incur a
double indirection (e.g. <code class="sourceCode cpp"><span class="dt">int</span><span class="op">*</span> <span class="kw">const</span><span class="op">&amp;</span> it</code>)
that compilers may not optimize.</p>
<p>The name <code class="sourceCode cpp">null_term</code> denotes a
customization point object ([customization.point.object]). Given a
subexpression <code class="sourceCode cpp">E</code>, the expression
<code class="sourceCode cpp">null_term<span class="op">(</span>E<span class="op">)</span></code>
is expression-equivalent to <code class="sourceCode cpp">ranges<span class="op">::</span>subrange<span class="op">(</span>move<span class="op">(</span>E<span class="op">)</span>, null_sentinel<span class="op">)</span></code>.</p>
<h2 data-number="5.8" id="exposition-only-concepts-and-traits"><span class="header-section-number">5.8</span> Exposition-only concepts and
traits<a href="#exposition-only-concepts-and-traits" class="self-link"></a></h2>
<div class="sourceCode" id="cb16"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std<span class="op">::</span>uc <span class="op">{</span></span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a>  <span class="kw">constexpr</span> <span class="dt">bool</span> <em>is-empty-view</em> <span class="op">=</span> <span class="kw">false</span>;</span>
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a>  <span class="kw">constexpr</span> <span class="dt">bool</span> <em>is-empty-view</em><span class="op">&lt;</span>ranges<span class="op">::</span>empty_view<span class="op">&lt;</span>T<span class="op">&gt;&gt;</span> <span class="op">=</span> <span class="kw">true</span>;</span>
<span id="cb16-7"><a href="#cb16-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-8"><a href="#cb16-8" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb16-9"><a href="#cb16-9" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>code-unit-to</em> <span class="op">=</span> same_as<span class="op">&lt;</span>remove_cv_t<span class="op">&lt;</span>T<span class="op">&gt;</span>, <span class="dt">char8_t</span><span class="op">&gt;</span> <span class="op">||</span></span>
<span id="cb16-10"><a href="#cb16-10" aria-hidden="true" tabindex="-1"></a>    same_as<span class="op">&lt;</span>remove_cv_t<span class="op">&lt;</span>T<span class="op">&gt;</span>, <span class="dt">char16_t</span><span class="op">&gt;</span> <span class="op">||</span> same_as<span class="op">&lt;</span>remove_cv_t<span class="op">&lt;</span>T<span class="op">&gt;</span>, <span class="dt">char32_t</span><span class="op">&gt;</span>;</span>
<span id="cb16-11"><a href="#cb16-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-12"><a href="#cb16-12" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb16-13"><a href="#cb16-13" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>code-unit-from</em> <span class="op">=</span></span>
<span id="cb16-14"><a href="#cb16-14" aria-hidden="true" tabindex="-1"></a>    same_as<span class="op">&lt;</span>remove_cv_t<span class="op">&lt;</span>T<span class="op">&gt;</span>, <span class="dt">char</span><span class="op">&gt;</span> <span class="op">||</span> same_as<span class="op">&lt;</span>remove_cv_t<span class="op">&lt;</span>T<span class="op">&gt;</span>, <span class="dt">wchar_t</span><span class="op">&gt;</span> <span class="op">||</span> <em>code-unit-to</em><span class="op">&lt;</span>T<span class="op">&gt;</span>;</span>
<span id="cb16-15"><a href="#cb16-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-16"><a href="#cb16-16" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb16-17"><a href="#cb16-17" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>utf-range</em> <span class="op">=</span></span>
<span id="cb16-18"><a href="#cb16-18" aria-hidden="true" tabindex="-1"></a>    ranges<span class="op">::</span>input_range<span class="op">&lt;</span>T<span class="op">&gt;</span> <span class="op">&amp;&amp;</span> <em>code-unit-from</em><span class="op">&lt;</span>ranges<span class="op">::</span>range_value_t<span class="op">&lt;</span>T<span class="op">&gt;&gt;</span>;</span>
<span id="cb16-19"><a href="#cb16-19" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-20"><a href="#cb16-20" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb16-21"><a href="#cb16-21" aria-hidden="true" tabindex="-1"></a>  <span class="kw">consteval</span> <span class="kw">auto</span> <em>bidirectional-at-most</em><span class="op">()</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb16-22"><a href="#cb16-22" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-23"><a href="#cb16-23" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> bidirectional_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-24"><a href="#cb16-24" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-25"><a href="#cb16-25" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> forward_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-26"><a href="#cb16-26" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>input_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-27"><a href="#cb16-27" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> input_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-28"><a href="#cb16-28" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb16-29"><a href="#cb16-29" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb16-30"><a href="#cb16-30" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-31"><a href="#cb16-31" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb16-32"><a href="#cb16-32" aria-hidden="true" tabindex="-1"></a>  <span class="kw">using</span> <em>bidirectional-at-most-t</em> <span class="op">=</span> <span class="kw">decltype</span><span class="op">(</span><em>bidirectional-at-most</em><span class="op">&lt;</span>I<span class="op">&gt;())</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb16-33"><a href="#cb16-33" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-34"><a href="#cb16-34" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb16-35"><a href="#cb16-35" aria-hidden="true" tabindex="-1"></a>  <span class="kw">consteval</span> <span class="kw">auto</span> <em>iterator-to-tag</em><span class="op">()</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb16-36"><a href="#cb16-36" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>random_access_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-37"><a href="#cb16-37" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> random_access_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-38"><a href="#cb16-38" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-39"><a href="#cb16-39" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> bidirectional_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-40"><a href="#cb16-40" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-41"><a href="#cb16-41" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> forward_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-42"><a href="#cb16-42" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>input_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb16-43"><a href="#cb16-43" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> input_iterator_tag<span class="op">{}</span>;</span>
<span id="cb16-44"><a href="#cb16-44" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb16-45"><a href="#cb16-45" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb16-46"><a href="#cb16-46" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-47"><a href="#cb16-47" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb16-48"><a href="#cb16-48" aria-hidden="true" tabindex="-1"></a>  <span class="kw">using</span> <em>iterator-to-tag-t</em> <span class="op">=</span> <span class="kw">decltype</span><span class="op">(</span><em>iterator-to-tag</em><span class="op">&lt;</span>I<span class="op">&gt;())</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb16-49"><a href="#cb16-49" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="5.9" id="transcoding-views"><span class="header-section-number">5.9</span> Transcoding views<a href="#transcoding-views" class="self-link"></a></h2>
<div class="sourceCode" id="cb17"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std<span class="op">::</span>uc <span class="op">{</span></span>
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a>  <span class="kw">enum</span> <span class="kw">class</span> transcoding_error <span class="op">{</span></span>
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a>    truncated_utf8_sequence,</span>
<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a>    unpaired_high_surrogate,</span>
<span id="cb17-6"><a href="#cb17-6" aria-hidden="true" tabindex="-1"></a>    unpaired_low_surrogate,</span>
<span id="cb17-7"><a href="#cb17-7" aria-hidden="true" tabindex="-1"></a>    unexpected_utf8_continuation_byte,</span>
<span id="cb17-8"><a href="#cb17-8" aria-hidden="true" tabindex="-1"></a>    overlong,</span>
<span id="cb17-9"><a href="#cb17-9" aria-hidden="true" tabindex="-1"></a>    encoded_surrogate,</span>
<span id="cb17-10"><a href="#cb17-10" aria-hidden="true" tabindex="-1"></a>    out_of_range,</span>
<span id="cb17-11"><a href="#cb17-11" aria-hidden="true" tabindex="-1"></a>    invalid_utf8_leading_byte</span>
<span id="cb17-12"><a href="#cb17-12" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb17-13"><a href="#cb17-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-14"><a href="#cb17-14" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb17-15"><a href="#cb17-15" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>to-utf-view-iterator-optimizable</em> <span class="op">=</span> <em>unspecified</em> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-16"><a href="#cb17-16" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-17"><a href="#cb17-17" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>code-unit-to</em> ToType, <em>from-utf-view</em> V<span class="op">&gt;</span></span>
<span id="cb17-18"><a href="#cb17-18" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> <em>to-utf-view-impl</em> <span class="op">:</span> <span class="kw">public</span> ranges<span class="op">::</span>view_interface<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span>ToType, V<span class="op">&gt;&gt;</span> <span class="op">{</span></span>
<span id="cb17-19"><a href="#cb17-19" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-20"><a href="#cb17-20" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb17-21"><a href="#cb17-21" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>utf-iterator</em> <span class="op">:</span> <span class="kw">public</span> iterator_interface<span class="op">&lt;</span><em>bidirectional-at-most-t</em><span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span>, ToType, ToType<span class="op">&gt;</span> <span class="op">{</span></span>
<span id="cb17-22"><a href="#cb17-22" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-23"><a href="#cb17-23" aria-hidden="true" tabindex="-1"></a>    <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-24"><a href="#cb17-24" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>iter</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-25"><a href="#cb17-25" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>sent</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-26"><a href="#cb17-26" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-27"><a href="#cb17-27" aria-hidden="true" tabindex="-1"></a>      <span class="kw">template</span><span class="op">&lt;</span><em>code-unit-to</em> ToType2,</span>
<span id="cb17-28"><a href="#cb17-28" aria-hidden="true" tabindex="-1"></a>               <em>from-utf-view</em> V2<span class="op">&gt;</span></span>
<span id="cb17-29"><a href="#cb17-29" aria-hidden="true" tabindex="-1"></a>      <span class="kw">friend</span> <span class="kw">class</span> <em>to-utf-view-impl</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-30"><a href="#cb17-30" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-31"><a href="#cb17-31" aria-hidden="true" tabindex="-1"></a>      <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb17-32"><a href="#cb17-32" aria-hidden="true" tabindex="-1"></a>      <span class="kw">struct</span> <em>first-and-curr</em> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-33"><a href="#cb17-33" aria-hidden="true" tabindex="-1"></a>        <em>first-and-curr</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-34"><a href="#cb17-34" aria-hidden="true" tabindex="-1"></a>        <span class="kw">constexpr</span> <em>first-and-curr</em><span class="op">(</span>I curr<span class="op">)</span> <span class="op">:</span> curr<span class="op">(</span>move<span class="op">(</span>curr<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb17-35"><a href="#cb17-35" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-36"><a href="#cb17-36" aria-hidden="true" tabindex="-1"></a>        I curr;</span>
<span id="cb17-37"><a href="#cb17-37" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span>;</span>
<span id="cb17-38"><a href="#cb17-38" aria-hidden="true" tabindex="-1"></a>      <span class="kw">template</span><span class="op">&lt;</span>bidirectional_iterator I<span class="op">&gt;</span></span>
<span id="cb17-39"><a href="#cb17-39" aria-hidden="true" tabindex="-1"></a>      <span class="kw">struct</span> <em>first-and-curr</em><span class="op">&lt;</span>I<span class="op">&gt;</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-40"><a href="#cb17-40" aria-hidden="true" tabindex="-1"></a>        <em>first-and-curr</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-41"><a href="#cb17-41" aria-hidden="true" tabindex="-1"></a>        <span class="kw">constexpr</span> <em>first-and-curr</em><span class="op">(</span>I first, I curr<span class="op">)</span> <span class="op">:</span> first<span class="op">(</span>first<span class="op">)</span>, curr<span class="op">(</span>curr<span class="op">)</span> <span class="op">{}</span></span>
<span id="cb17-42"><a href="#cb17-42" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-43"><a href="#cb17-43" aria-hidden="true" tabindex="-1"></a>        I first;</span>
<span id="cb17-44"><a href="#cb17-44" aria-hidden="true" tabindex="-1"></a>        I curr;</span>
<span id="cb17-45"><a href="#cb17-45" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span>;</span>
<span id="cb17-46"><a href="#cb17-46" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-47"><a href="#cb17-47" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>innermost-iter</em> <span class="op">=</span> <em>unspecified</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-48"><a href="#cb17-48" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-49"><a href="#cb17-49" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>from-type</em> <span class="op">=</span> <span class="kw">decltype</span><span class="op">([]</span> <span class="op">{</span></span>
<span id="cb17-50"><a href="#cb17-50" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>is_same_v<span class="op">&lt;</span><span class="dt">char</span>, iter_value_t<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-51"><a href="#cb17-51" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <span class="dt">char8_t</span><span class="op">{}</span>;</span>
<span id="cb17-52"><a href="#cb17-52" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>is_same_v<span class="op">&lt;</span><span class="dt">wchar_t</span>, iter_value_t<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-53"><a href="#cb17-53" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><span class="kw">sizeof</span><span class="op">(</span><span class="dt">wchar_t</span><span class="op">)</span> <span class="op">==</span> <span class="dv">2</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-54"><a href="#cb17-54" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="dt">char16_t</span><span class="op">{}</span>;</span>
<span id="cb17-55"><a href="#cb17-55" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><span class="kw">sizeof</span><span class="op">(</span><span class="dt">wchar_t</span><span class="op">)</span> <span class="op">==</span> <span class="dv">4</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-56"><a href="#cb17-56" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="dt">char32_t</span><span class="op">{}</span>;</span>
<span id="cb17-57"><a href="#cb17-57" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb17-58"><a href="#cb17-58" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-59"><a href="#cb17-59" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> iter_value_t<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;{}</span>;</span>
<span id="cb17-60"><a href="#cb17-60" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-61"><a href="#cb17-61" aria-hidden="true" tabindex="-1"></a>      <span class="op">}())</span>; <span class="co">// <em>exposition only </em></span></span>
<span id="cb17-62"><a href="#cb17-62" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-63"><a href="#cb17-63" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>innermost-iter</em> <span class="op">=</span> <em>unspecified</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-64"><a href="#cb17-64" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> <em>innermost-sent</em> <span class="op">=</span> <em>unspecified</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-65"><a href="#cb17-65" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-66"><a href="#cb17-66" aria-hidden="true" tabindex="-1"></a>    <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-67"><a href="#cb17-67" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> value_type <span class="op">=</span> ToType;</span>
<span id="cb17-68"><a href="#cb17-68" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> reference_type <span class="op">=</span> ToType<span class="op">&amp;</span>;</span>
<span id="cb17-69"><a href="#cb17-69" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> difference_type <span class="op">=</span> <span class="dt">ptrdiff_t</span>;</span>
<span id="cb17-70"><a href="#cb17-70" aria-hidden="true" tabindex="-1"></a>      <span class="kw">using</span> iterator_concept <span class="op">=</span> <em>bidirectional-at-most-t</em><span class="op">&lt;</span><em>iter</em><span class="op">&gt;</span>;</span>
<span id="cb17-71"><a href="#cb17-71" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-72"><a href="#cb17-72" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-73"><a href="#cb17-73" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-74"><a href="#cb17-74" aria-hidden="true" tabindex="-1"></a>    <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-75"><a href="#cb17-75" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">(</span><em>innermost-iter</em> first, <em>innermost-iter</em> it, <em>innermost-sent</em> last<span class="op">)</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-76"><a href="#cb17-76" aria-hidden="true" tabindex="-1"></a>        <span class="kw">requires</span> bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-77"><a href="#cb17-77" aria-hidden="true" tabindex="-1"></a>          <span class="op">:</span> first_and_curr_<span class="op">(</span>first, it<span class="op">)</span>, last_<span class="op">(</span>last<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-78"><a href="#cb17-78" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="op">(</span>curr<span class="op">()</span> <span class="op">!=</span> last_<span class="op">)</span></span>
<span id="cb17-79"><a href="#cb17-79" aria-hidden="true" tabindex="-1"></a>          read<span class="op">()</span>;</span>
<span id="cb17-80"><a href="#cb17-80" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-81"><a href="#cb17-81" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">(</span><em>innermost-iter</em> it, <em>innermost-sent</em> last<span class="op">)</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-82"><a href="#cb17-82" aria-hidden="true" tabindex="-1"></a>        <span class="kw">requires</span> <span class="op">(!</span>bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span></span>
<span id="cb17-83"><a href="#cb17-83" aria-hidden="true" tabindex="-1"></a>          <span class="op">:</span> first_and_curr_<span class="op">(</span>move<span class="op">(</span>it<span class="op">))</span>, last_<span class="op">(</span>last<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-84"><a href="#cb17-84" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="op">(</span>curr<span class="op">()</span> <span class="op">!=</span> last_<span class="op">)</span></span>
<span id="cb17-85"><a href="#cb17-85" aria-hidden="true" tabindex="-1"></a>          read<span class="op">()</span>;</span>
<span id="cb17-86"><a href="#cb17-86" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-87"><a href="#cb17-87" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-88"><a href="#cb17-88" aria-hidden="true" tabindex="-1"></a>    <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-89"><a href="#cb17-89" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-90"><a href="#cb17-90" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">(</span><em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;)</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-91"><a href="#cb17-91" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-92"><a href="#cb17-92" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">&amp;</span> <span class="kw">operator</span><span class="op">=(</span><em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;)</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-93"><a href="#cb17-93" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-94"><a href="#cb17-94" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">(</span><em>utf-iterator</em><span class="op">&amp;&amp;)</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-95"><a href="#cb17-95" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-96"><a href="#cb17-96" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">&amp;</span> <span class="kw">operator</span><span class="op">=(</span><em>utf-iterator</em><span class="op">&amp;&amp;)</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-97"><a href="#cb17-97" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-98"><a href="#cb17-98" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>iter</em> base<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-99"><a href="#cb17-99" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-100"><a href="#cb17-100" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><em>to-utf-view-iterator-optimizable</em><span class="op">&lt;</span><em>iter</em><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-101"><a href="#cb17-101" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-102"><a href="#cb17-102" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <em>iter</em><span class="op">(</span>begin<span class="op">()</span>, curr<span class="op">()</span>, last_<span class="op">)</span>;</span>
<span id="cb17-103"><a href="#cb17-103" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-104"><a href="#cb17-104" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <em>iter</em><span class="op">(</span>curr<span class="op">()</span>, last_<span class="op">)</span>;</span>
<span id="cb17-105"><a href="#cb17-105" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb17-106"><a href="#cb17-106" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-107"><a href="#cb17-107" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> curr<span class="op">()</span>;</span>
<span id="cb17-108"><a href="#cb17-108" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-109"><a href="#cb17-109" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-110"><a href="#cb17-110" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-111"><a href="#cb17-111" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>iter</em> base<span class="op">()</span> <span class="op">&amp;&amp;</span></span>
<span id="cb17-112"><a href="#cb17-112" aria-hidden="true" tabindex="-1"></a>        <span class="kw">requires</span> <span class="op">(!</span>forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(*</span><span class="kw">this</span><span class="op">).</span>curr<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-113"><a href="#cb17-113" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-114"><a href="#cb17-114" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;</span> success<span class="op">()</span> <span class="kw">const</span>;</span>
<span id="cb17-115"><a href="#cb17-115" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-116"><a href="#cb17-116" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> value_type <span class="kw">operator</span><span class="op">*()</span> <span class="kw">const</span>;</span>
<span id="cb17-117"><a href="#cb17-117" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-118"><a href="#cb17-118" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">&amp;</span> <span class="kw">operator</span><span class="op">++()</span> <span class="op">{</span></span>
<span id="cb17-119"><a href="#cb17-119" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-120"><a href="#cb17-120" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>buf_index_ <span class="op">+</span> <span class="dv">1</span> <span class="op">&lt;</span> buf_last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-121"><a href="#cb17-121" aria-hidden="true" tabindex="-1"></a>            <span class="op">++</span>buf_index_;</span>
<span id="cb17-122"><a href="#cb17-122" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="op">(</span>buf_index_ <span class="op">+</span> <span class="dv">1</span> <span class="op">==</span> buf_last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-123"><a href="#cb17-123" aria-hidden="true" tabindex="-1"></a>            advance<span class="op">(</span>curr<span class="op">()</span>, to_increment_<span class="op">)</span>;</span>
<span id="cb17-124"><a href="#cb17-124" aria-hidden="true" tabindex="-1"></a>            to_increment_ <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb17-125"><a href="#cb17-125" aria-hidden="true" tabindex="-1"></a>            <span class="cf">if</span> <span class="op">(</span>curr<span class="op">()</span> <span class="op">!=</span> last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-126"><a href="#cb17-126" aria-hidden="true" tabindex="-1"></a>              read<span class="op">()</span>;</span>
<span id="cb17-127"><a href="#cb17-127" aria-hidden="true" tabindex="-1"></a>            <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-128"><a href="#cb17-128" aria-hidden="true" tabindex="-1"></a>              buf_index_ <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb17-129"><a href="#cb17-129" aria-hidden="true" tabindex="-1"></a>            <span class="op">}</span></span>
<span id="cb17-130"><a href="#cb17-130" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb17-131"><a href="#cb17-131" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-132"><a href="#cb17-132" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>buf_index_ <span class="op">+</span> <span class="dv">1</span> <span class="op">==</span> buf_last_ <span class="op">&amp;&amp;</span> curr<span class="op">()</span> <span class="op">!=</span> last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-133"><a href="#cb17-133" aria-hidden="true" tabindex="-1"></a>            read<span class="op">()</span>;</span>
<span id="cb17-134"><a href="#cb17-134" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="op">(</span>buf_index_ <span class="op">+</span> <span class="dv">1</span> <span class="op">&lt;=</span> buf_last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-135"><a href="#cb17-135" aria-hidden="true" tabindex="-1"></a>            <span class="op">++</span>buf_index_;</span>
<span id="cb17-136"><a href="#cb17-136" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb17-137"><a href="#cb17-137" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-138"><a href="#cb17-138" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> <span class="op">*</span><span class="kw">this</span>;</span>
<span id="cb17-139"><a href="#cb17-139" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-140"><a href="#cb17-140" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-141"><a href="#cb17-141" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <span class="kw">auto</span> <span class="kw">operator</span><span class="op">++(</span><span class="dt">int</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-142"><a href="#cb17-142" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>is_same_v<span class="op">&lt;</span>iterator_concept, input_iterator_tag<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-143"><a href="#cb17-143" aria-hidden="true" tabindex="-1"></a>          <span class="op">++*</span><span class="kw">this</span>;</span>
<span id="cb17-144"><a href="#cb17-144" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-145"><a href="#cb17-145" aria-hidden="true" tabindex="-1"></a>          <span class="kw">auto</span> retval <span class="op">=</span> <span class="op">*</span><span class="kw">this</span>;</span>
<span id="cb17-146"><a href="#cb17-146" aria-hidden="true" tabindex="-1"></a>          <span class="op">++*</span><span class="kw">this</span>;</span>
<span id="cb17-147"><a href="#cb17-147" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> retval;</span>
<span id="cb17-148"><a href="#cb17-148" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-149"><a href="#cb17-149" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-150"><a href="#cb17-150" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-151"><a href="#cb17-151" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em><span class="op">&amp;</span> <span class="kw">operator</span><span class="op">--()</span> <span class="kw">requires</span> bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-152"><a href="#cb17-152" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-153"><a href="#cb17-153" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="op">(!</span>buf_index_<span class="op">)</span></span>
<span id="cb17-154"><a href="#cb17-154" aria-hidden="true" tabindex="-1"></a>          read_reverse<span class="op">()</span>;</span>
<span id="cb17-155"><a href="#cb17-155" aria-hidden="true" tabindex="-1"></a>        <span class="cf">else</span> <span class="cf">if</span> <span class="op">(</span>buf_index_<span class="op">)</span></span>
<span id="cb17-156"><a href="#cb17-156" aria-hidden="true" tabindex="-1"></a>          <span class="op">--</span>buf_index_;</span>
<span id="cb17-157"><a href="#cb17-157" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> <span class="op">*</span><span class="kw">this</span>;</span>
<span id="cb17-158"><a href="#cb17-158" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-159"><a href="#cb17-159" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-160"><a href="#cb17-160" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>utf-iterator</em> <span class="kw">operator</span><span class="op">--(</span><span class="dt">int</span><span class="op">)</span> <span class="kw">requires</span> bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-161"><a href="#cb17-161" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-162"><a href="#cb17-162" aria-hidden="true" tabindex="-1"></a>        <span class="kw">auto</span> retval <span class="op">=</span> <span class="op">*</span><span class="kw">this</span>;</span>
<span id="cb17-163"><a href="#cb17-163" aria-hidden="true" tabindex="-1"></a>        <span class="op">--*</span><span class="kw">this</span>;</span>
<span id="cb17-164"><a href="#cb17-164" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> retval;</span>
<span id="cb17-165"><a href="#cb17-165" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-166"><a href="#cb17-166" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-167"><a href="#cb17-167" aria-hidden="true" tabindex="-1"></a>      <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;</span> lhs, <em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;</span> rhs<span class="op">)</span></span>
<span id="cb17-168"><a href="#cb17-168" aria-hidden="true" tabindex="-1"></a>        <span class="kw">requires</span> forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span> <span class="op">||</span> <span class="kw">requires</span> <span class="op">(</span><em>innermost-iter</em> i<span class="op">)</span> <span class="op">{</span> i <span class="op">!=</span> i; <span class="op">}</span></span>
<span id="cb17-169"><a href="#cb17-169" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-170"><a href="#cb17-170" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-171"><a href="#cb17-171" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> lhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">==</span> rhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">&amp;&amp;</span> lhs<span class="op">.</span>buf_index_ <span class="op">==</span> rhs<span class="op">.</span>buf_index_;</span>
<span id="cb17-172"><a href="#cb17-172" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-173"><a href="#cb17-173" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>lhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">!=</span> rhs<span class="op">.</span>curr<span class="op">())</span></span>
<span id="cb17-174"><a href="#cb17-174" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="kw">false</span>;</span>
<span id="cb17-175"><a href="#cb17-175" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-176"><a href="#cb17-176" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>lhs<span class="op">.</span>buf_index_ <span class="op">==</span> rhs<span class="op">.</span>buf_index_ <span class="op">&amp;&amp;</span> lhs<span class="op">.</span>buf_last_ <span class="op">==</span> rhs<span class="op">.</span>buf_last_<span class="op">)</span> <span class="op">{</span></span>
<span id="cb17-177"><a href="#cb17-177" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="kw">true</span>;</span>
<span id="cb17-178"><a href="#cb17-178" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb17-179"><a href="#cb17-179" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-180"><a href="#cb17-180" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> lhs<span class="op">.</span>buf_index_ <span class="op">==</span> lhs<span class="op">.</span>buf_last_ <span class="op">&amp;&amp;</span> rhs<span class="op">.</span>buf_index_ <span class="op">==</span> rhs<span class="op">.</span>buf_last_;</span>
<span id="cb17-181"><a href="#cb17-181" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-182"><a href="#cb17-182" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-183"><a href="#cb17-183" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-184"><a href="#cb17-184" aria-hidden="true" tabindex="-1"></a>      <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;</span> lhs, <em>innermost-sent</em> rhs<span class="op">)</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-185"><a href="#cb17-185" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-186"><a href="#cb17-186" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb17-187"><a href="#cb17-187" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> lhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">==</span> rhs;</span>
<span id="cb17-188"><a href="#cb17-188" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-189"><a href="#cb17-189" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> lhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">==</span> rhs <span class="op">&amp;&amp;</span> lhs<span class="op">.</span>buf_index_ <span class="op">==</span> lhs<span class="op">.</span>buf_last_;</span>
<span id="cb17-190"><a href="#cb17-190" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-191"><a href="#cb17-191" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-192"><a href="#cb17-192" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-193"><a href="#cb17-193" aria-hidden="true" tabindex="-1"></a>      <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><em>utf-iterator</em> <span class="kw">const</span><span class="op">&amp;</span> lhs, <em>innermost-sent</em> rhs<span class="op">)</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;)</span></span>
<span id="cb17-194"><a href="#cb17-194" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-195"><a href="#cb17-195" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> lhs<span class="op">.</span>curr<span class="op">()</span> <span class="op">==</span> rhs <span class="op">&amp;&amp;</span> lhs<span class="op">.</span>buf_index_ <span class="op">==</span> lhs<span class="op">.</span>buf_last_;</span>
<span id="cb17-196"><a href="#cb17-196" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-197"><a href="#cb17-197" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-198"><a href="#cb17-198" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-199"><a href="#cb17-199" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>innermost-iter</em> begin<span class="op">()</span> <span class="kw">const</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-200"><a href="#cb17-200" aria-hidden="true" tabindex="-1"></a>        <span class="kw">requires</span> bidirectional_iterator<span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span></span>
<span id="cb17-201"><a href="#cb17-201" aria-hidden="true" tabindex="-1"></a>      <span class="op">{</span></span>
<span id="cb17-202"><a href="#cb17-202" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> first_and_curr_<span class="op">.</span>first;</span>
<span id="cb17-203"><a href="#cb17-203" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-204"><a href="#cb17-204" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>innermost-sent</em> end<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-205"><a href="#cb17-205" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> last_;</span>
<span id="cb17-206"><a href="#cb17-206" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-207"><a href="#cb17-207" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-208"><a href="#cb17-208" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <span class="dt">void</span> read<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-209"><a href="#cb17-209" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-210"><a href="#cb17-210" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <span class="dt">void</span> read_reverse<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-211"><a href="#cb17-211" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-212"><a href="#cb17-212" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>innermost-iter</em><span class="op">&amp;</span> curr<span class="op">()</span> <span class="op">&amp;</span> <span class="op">{</span> <span class="cf">return</span> first_and_curr_<span class="op">.</span>curr; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-213"><a href="#cb17-213" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-214"><a href="#cb17-214" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>innermost-iter</em> <span class="kw">const</span><span class="op">&amp;</span> curr<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="op">{</span> <span class="cf">return</span> first_and_curr_<span class="op">.</span>curr; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-215"><a href="#cb17-215" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-216"><a href="#cb17-216" aria-hidden="true" tabindex="-1"></a>      <span class="kw">constexpr</span> <em>innermost-iter</em> curr<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>first_and_curr_<span class="op">.</span>curr<span class="op">)</span>; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-217"><a href="#cb17-217" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-218"><a href="#cb17-218" aria-hidden="true" tabindex="-1"></a>      array<span class="op">&lt;</span>value_type, <span class="dv">4</span> <span class="op">/</span> <span class="kw">sizeof</span><span class="op">(</span>ToType<span class="op">)&gt;</span> buf_<span class="op">{}</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-219"><a href="#cb17-219" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-220"><a href="#cb17-220" aria-hidden="true" tabindex="-1"></a>      <em>first-and-curr</em><span class="op">&lt;</span><em>innermost-iter</em><span class="op">&gt;</span> first_and_curr_; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-221"><a href="#cb17-221" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-222"><a href="#cb17-222" aria-hidden="true" tabindex="-1"></a>      <span class="op">[[</span><span class="at">no_unique_address</span><span class="op">]]</span> <em>innermost-sent</em> last_; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-223"><a href="#cb17-223" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-224"><a href="#cb17-224" aria-hidden="true" tabindex="-1"></a>      <span class="dt">uint8_t</span> buf_index_ <span class="op">=</span> <span class="dv">0</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-225"><a href="#cb17-225" aria-hidden="true" tabindex="-1"></a>      <span class="dt">uint8_t</span> buf_last_ <span class="op">=</span> <span class="dv">0</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-226"><a href="#cb17-226" aria-hidden="true" tabindex="-1"></a>      <span class="dt">uint8_t</span> to_increment_ <span class="op">=</span> <span class="dv">0</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-227"><a href="#cb17-227" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span>;</span>
<span id="cb17-228"><a href="#cb17-228" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-229"><a href="#cb17-229" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-230"><a href="#cb17-230" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb17-231"><a href="#cb17-231" aria-hidden="true" tabindex="-1"></a>    <span class="kw">static</span> <span class="kw">constexpr</span> <span class="kw">auto</span> make_begin<span class="op">(</span><span class="kw">auto</span> first, <span class="kw">auto</span> last<span class="op">)</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-232"><a href="#cb17-232" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-233"><a href="#cb17-233" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><em>to-utf-view-iterator-optimizable</em><span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-234"><a href="#cb17-234" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <em>utf-iterator</em><span class="op">&lt;</span>Const<span class="op">&gt;(</span>first<span class="op">.</span>begin<span class="op">()</span>, first<span class="op">.</span>curr<span class="op">()</span>, first<span class="op">.</span>last_<span class="op">)</span>;</span>
<span id="cb17-235"><a href="#cb17-235" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-236"><a href="#cb17-236" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <em>utf-iterator</em><span class="op">&lt;</span>Const<span class="op">&gt;(</span>first, first, last<span class="op">)</span>;</span>
<span id="cb17-237"><a href="#cb17-237" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-238"><a href="#cb17-238" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-239"><a href="#cb17-239" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> <em>utf-iterator</em><span class="op">&lt;</span>Const<span class="op">&gt;(</span>move<span class="op">(</span>first<span class="op">)</span>, last<span class="op">)</span>;</span>
<span id="cb17-240"><a href="#cb17-240" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-241"><a href="#cb17-241" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-242"><a href="#cb17-242" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb17-243"><a href="#cb17-243" aria-hidden="true" tabindex="-1"></a>    <span class="kw">static</span> <span class="kw">constexpr</span> <span class="kw">auto</span> make_end<span class="op">(</span><span class="kw">auto</span> first, <span class="kw">auto</span> last<span class="op">)</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-244"><a href="#cb17-244" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span>ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-245"><a href="#cb17-245" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><em>to-utf-view-iterator-optimizable</em><span class="op">&lt;</span>ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span> <span class="op">{</span></span>
<span id="cb17-246"><a href="#cb17-246" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <em>utf-iterator</em><span class="op">&lt;</span>Const<span class="op">&gt;(</span>last<span class="op">.</span>begin<span class="op">()</span>, last<span class="op">.</span>curr<span class="op">()</span>, last<span class="op">.</span>last_<span class="op">)</span>;</span>
<span id="cb17-247"><a href="#cb17-247" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-248"><a href="#cb17-248" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <em>utf-iterator</em><span class="op">&lt;</span>Const<span class="op">&gt;(</span>first, last, last<span class="op">)</span>;</span>
<span id="cb17-249"><a href="#cb17-249" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb17-250"><a href="#cb17-250" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb17-251"><a href="#cb17-251" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> last;</span>
<span id="cb17-252"><a href="#cb17-252" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb17-253"><a href="#cb17-253" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-254"><a href="#cb17-254" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-255"><a href="#cb17-255" aria-hidden="true" tabindex="-1"></a>    V base_ <span class="op">=</span> V<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb17-256"><a href="#cb17-256" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-257"><a href="#cb17-257" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-258"><a href="#cb17-258" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>to-utf-view-impl</em><span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-259"><a href="#cb17-259" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>to-utf-view-impl</em><span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> base_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb17-260"><a href="#cb17-260" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-261"><a href="#cb17-261" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb17-262"><a href="#cb17-262" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-263"><a href="#cb17-263" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> base_;</span>
<span id="cb17-264"><a href="#cb17-264" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-265"><a href="#cb17-265" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>base_<span class="op">)</span>; <span class="op">}</span></span>
<span id="cb17-266"><a href="#cb17-266" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-267"><a href="#cb17-267" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span></span>
<span id="cb17-268"><a href="#cb17-268" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-269"><a href="#cb17-269" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> make_begin<span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;(</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)</span>, ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">))</span>;</span>
<span id="cb17-270"><a href="#cb17-270" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-271"><a href="#cb17-271" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span></span>
<span id="cb17-272"><a href="#cb17-272" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-273"><a href="#cb17-273" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> make_begin<span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;(</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)</span>, ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">))</span>;</span>
<span id="cb17-274"><a href="#cb17-274" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-275"><a href="#cb17-275" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-276"><a href="#cb17-276" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;)</span></span>
<span id="cb17-277"><a href="#cb17-277" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-278"><a href="#cb17-278" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> make_end<span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;(</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)</span>, ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">))</span>;</span>
<span id="cb17-279"><a href="#cb17-279" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-280"><a href="#cb17-280" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span></span>
<span id="cb17-281"><a href="#cb17-281" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-282"><a href="#cb17-282" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> make_end<span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;(</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)</span>, ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">))</span>;</span>
<span id="cb17-283"><a href="#cb17-283" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-284"><a href="#cb17-284" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-285"><a href="#cb17-285" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="dt">bool</span> empty<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> ranges<span class="op">::</span>empty<span class="op">(</span>base_<span class="op">)</span>; <span class="op">}</span></span>
<span id="cb17-286"><a href="#cb17-286" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb17-287"><a href="#cb17-287" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-288"><a href="#cb17-288" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>from-utf-view</em> V<span class="op">&gt;</span></span>
<span id="cb17-289"><a href="#cb17-289" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> to_utf8_view <span class="op">{</span></span>
<span id="cb17-290"><a href="#cb17-290" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-291"><a href="#cb17-291" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char8_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-292"><a href="#cb17-292" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char8_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-293"><a href="#cb17-293" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-294"><a href="#cb17-294" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-295"><a href="#cb17-295" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf8_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-296"><a href="#cb17-296" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf8_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> impl_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb17-297"><a href="#cb17-297" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-298"><a href="#cb17-298" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb17-299"><a href="#cb17-299" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-300"><a href="#cb17-300" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>base<span class="op">()</span>;</span>
<span id="cb17-301"><a href="#cb17-301" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-302"><a href="#cb17-302" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>impl_<span class="op">).</span>base<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-303"><a href="#cb17-303" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-304"><a href="#cb17-304" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-305"><a href="#cb17-305" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-306"><a href="#cb17-306" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-307"><a href="#cb17-307" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-308"><a href="#cb17-308" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-309"><a href="#cb17-309" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-310"><a href="#cb17-310" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-311"><a href="#cb17-311" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-312"><a href="#cb17-312" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-313"><a href="#cb17-313" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-314"><a href="#cb17-314" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-315"><a href="#cb17-315" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-316"><a href="#cb17-316" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-317"><a href="#cb17-317" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-318"><a href="#cb17-318" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-319"><a href="#cb17-319" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-320"><a href="#cb17-320" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-321"><a href="#cb17-321" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-322"><a href="#cb17-322" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="dt">bool</span> empty<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> impl_<span class="op">.</span>empty<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-323"><a href="#cb17-323" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-324"><a href="#cb17-324" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-325"><a href="#cb17-325" aria-hidden="true" tabindex="-1"></a>    <em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char8_t</span>, V<span class="op">&gt;</span> impl_;</span>
<span id="cb17-326"><a href="#cb17-326" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb17-327"><a href="#cb17-327" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-328"><a href="#cb17-328" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb17-329"><a href="#cb17-329" aria-hidden="true" tabindex="-1"></a>  to_utf8_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> to_utf8_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-330"><a href="#cb17-330" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-331"><a href="#cb17-331" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>from-utf-view</em> V<span class="op">&gt;</span></span>
<span id="cb17-332"><a href="#cb17-332" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> to_utf16_view <span class="op">{</span></span>
<span id="cb17-333"><a href="#cb17-333" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-334"><a href="#cb17-334" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char16_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-335"><a href="#cb17-335" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char16_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-336"><a href="#cb17-336" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-337"><a href="#cb17-337" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-338"><a href="#cb17-338" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf16_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-339"><a href="#cb17-339" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf16_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> impl_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb17-340"><a href="#cb17-340" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-341"><a href="#cb17-341" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb17-342"><a href="#cb17-342" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-343"><a href="#cb17-343" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>base<span class="op">()</span>;</span>
<span id="cb17-344"><a href="#cb17-344" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-345"><a href="#cb17-345" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>impl_<span class="op">).</span>base<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-346"><a href="#cb17-346" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-347"><a href="#cb17-347" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-348"><a href="#cb17-348" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-349"><a href="#cb17-349" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-350"><a href="#cb17-350" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-351"><a href="#cb17-351" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-352"><a href="#cb17-352" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-353"><a href="#cb17-353" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-354"><a href="#cb17-354" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-355"><a href="#cb17-355" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-356"><a href="#cb17-356" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-357"><a href="#cb17-357" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-358"><a href="#cb17-358" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-359"><a href="#cb17-359" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-360"><a href="#cb17-360" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-361"><a href="#cb17-361" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-362"><a href="#cb17-362" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-363"><a href="#cb17-363" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-364"><a href="#cb17-364" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-365"><a href="#cb17-365" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="dt">bool</span> empty<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> impl_<span class="op">.</span>empty<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-366"><a href="#cb17-366" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-367"><a href="#cb17-367" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-368"><a href="#cb17-368" aria-hidden="true" tabindex="-1"></a>    <em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char16_t</span>, V<span class="op">&gt;</span> impl_;</span>
<span id="cb17-369"><a href="#cb17-369" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb17-370"><a href="#cb17-370" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-371"><a href="#cb17-371" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb17-372"><a href="#cb17-372" aria-hidden="true" tabindex="-1"></a>  to_utf16_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> to_utf16_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-373"><a href="#cb17-373" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-374"><a href="#cb17-374" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>from-utf-view</em> V<span class="op">&gt;</span></span>
<span id="cb17-375"><a href="#cb17-375" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> to_utf32_view <span class="op">{</span></span>
<span id="cb17-376"><a href="#cb17-376" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-377"><a href="#cb17-377" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char32_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-378"><a href="#cb17-378" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char32_t</span>, V<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-379"><a href="#cb17-379" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-380"><a href="#cb17-380" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb17-381"><a href="#cb17-381" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf32_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb17-382"><a href="#cb17-382" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> to_utf32_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> impl_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb17-383"><a href="#cb17-383" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-384"><a href="#cb17-384" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb17-385"><a href="#cb17-385" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-386"><a href="#cb17-386" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>base<span class="op">()</span>;</span>
<span id="cb17-387"><a href="#cb17-387" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-388"><a href="#cb17-388" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>impl_<span class="op">).</span>base<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-389"><a href="#cb17-389" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-390"><a href="#cb17-390" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-391"><a href="#cb17-391" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-392"><a href="#cb17-392" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-393"><a href="#cb17-393" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-394"><a href="#cb17-394" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-395"><a href="#cb17-395" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-396"><a href="#cb17-396" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb17-397"><a href="#cb17-397" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-398"><a href="#cb17-398" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-399"><a href="#cb17-399" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">requires</span> <span class="op">(!</span>copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;)</span></span>
<span id="cb17-400"><a href="#cb17-400" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-401"><a href="#cb17-401" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-402"><a href="#cb17-402" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-403"><a href="#cb17-403" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> copyable<span class="op">&lt;</span><em>iterator</em><span class="op">&gt;</span></span>
<span id="cb17-404"><a href="#cb17-404" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb17-405"><a href="#cb17-405" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl_<span class="op">.</span>end<span class="op">()</span>;</span>
<span id="cb17-406"><a href="#cb17-406" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb17-407"><a href="#cb17-407" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-408"><a href="#cb17-408" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="dt">bool</span> empty<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> impl_<span class="op">.</span>empty<span class="op">()</span>; <span class="op">}</span></span>
<span id="cb17-409"><a href="#cb17-409" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-410"><a href="#cb17-410" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb17-411"><a href="#cb17-411" aria-hidden="true" tabindex="-1"></a>    <em>to-utf-view-impl</em><span class="op">&lt;</span><span class="dt">char32_t</span>, V<span class="op">&gt;</span> impl_;</span>
<span id="cb17-412"><a href="#cb17-412" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb17-413"><a href="#cb17-413" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-414"><a href="#cb17-414" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb17-415"><a href="#cb17-415" aria-hidden="true" tabindex="-1"></a>  to_utf32_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> to_utf32_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb17-416"><a href="#cb17-416" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-417"><a href="#cb17-417" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>code-unit-to</em> ToType<span class="op">&gt;</span></span>
<span id="cb17-418"><a href="#cb17-418" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> to_utf;</span>
<span id="cb17-419"><a href="#cb17-419" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-420"><a href="#cb17-420" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> to_utf8;</span>
<span id="cb17-421"><a href="#cb17-421" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-422"><a href="#cb17-422" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> to_utf16;</span>
<span id="cb17-423"><a href="#cb17-423" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-424"><a href="#cb17-424" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> to_utf32;</span>
<span id="cb17-425"><a href="#cb17-425" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="cb17-426"><a href="#cb17-426" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-427"><a href="#cb17-427" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std<span class="op">::</span>ranges <span class="op">{</span></span>
<span id="cb17-428"><a href="#cb17-428" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-429"><a href="#cb17-429" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> ToType, <span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb17-430"><a href="#cb17-430" aria-hidden="true" tabindex="-1"></a>    <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span></span>
<span id="cb17-431"><a href="#cb17-431" aria-hidden="true" tabindex="-1"></a>      std<span class="op">::</span>uc<span class="op">::</span><em>to-utf-view-impl</em><span class="op">&lt;</span>ToType, V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb17-432"><a href="#cb17-432" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-433"><a href="#cb17-433" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb17-434"><a href="#cb17-434" aria-hidden="true" tabindex="-1"></a>    <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>to_utf8_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb17-435"><a href="#cb17-435" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-436"><a href="#cb17-436" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb17-437"><a href="#cb17-437" aria-hidden="true" tabindex="-1"></a>    <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>to_utf16_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb17-438"><a href="#cb17-438" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-439"><a href="#cb17-439" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb17-440"><a href="#cb17-440" aria-hidden="true" tabindex="-1"></a>    <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>to_utf32_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb17-441"><a href="#cb17-441" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb17-442"><a href="#cb17-442" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>The exposition-only concept
<code class="sourceCode cpp"><em>to-utf-view-iterator-optimizable</em></code>
is true if its template parameter is a specialization of
<code class="sourceCode cpp"><em>utf-iterator</em></code> and it is a
<code class="sourceCode cpp"><em>std::ranges::bidirectional_iterator</em></code>.</p>
<p><code class="sourceCode cpp"><em>to-utf-view-impl</em></code> is an
exposition-only class that provides implementation details common to the
three transcoding views,
<code class="sourceCode cpp">to_utf8_view</code>,
<code class="sourceCode cpp">to_utf16_view</code>, and
<code class="sourceCode cpp">to_utf32_view</code>, which are themselves
described further down.</p>
<p>The iterator type of
<code class="sourceCode cpp"><em>to-utf-view-impl</em></code> is
<code class="sourceCode cpp"><em>utf-iterator</em></code>.
<code class="sourceCode cpp"><em>utf-iterator</em></code> is an iterator
that transcodes from UTF-N to UTF-M, where N and M are each one of 8,
16, or 32. N may equal M.</p>
<p><code class="sourceCode cpp"><em>utf-iterator</em></code> uses a
mapping between character types and UTF encodings, which is that that
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>
correspond to UTF-8,
<code class="sourceCode cpp"><span class="dt">char16_t</span></code>
corresponds to UTF-16,
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>
corresponds to UTF-32, and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code>
corresponds to UTF-16 if its size is two or UTF-32 if its size is 4.</p>
<p><code class="sourceCode cpp"><em>utf-iterator</em></code> does its
work by adapting an underlying range of code units. We use the term
“input subsequence” to refer to a potentially ill-formed code unit
subsequence which is to be transcoded into a code point
<code class="sourceCode cpp">c</code>. Each input subsequence is decoded
from the UTF encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code>. If the
underlying range contains ill-formed UTF, the code units are divided
into input subsequences according to Substitution of Maximal Subparts,
and each ill-formed input subsequence is transcoded into a
<code class="sourceCode cpp">U<span class="op">+</span>FFFD</code>.
<code class="sourceCode cpp">c</code> is then encoded to
<code class="sourceCode cpp">ToType</code>’s corresponding encoding,
into an internal code unit buffer.</p>
<p><code class="sourceCode cpp"><em>utf-iterator</em></code> maintains
certain invariants; the invariants differ based on whether
<code class="sourceCode cpp"><em>utf-iterator</em></code> is an input
iterator.</p>
<p>For input iterators the invariant is: if <code class="sourceCode cpp"><span class="op">*</span><span class="kw">this</span></code>
is at the end of the range being adapted, then
<code class="sourceCode cpp">curr<span class="op">()</span></code> ==
<code class="sourceCode cpp">last_</code>; otherwise, the position of
<code class="sourceCode cpp">curr<span class="op">()</span></code> is
always at the end of the input subsequence corresponding to the current
code point <code class="sourceCode cpp">c</code>, and
<code class="sourceCode cpp">buf_</code> contains the code units that
comprise <code class="sourceCode cpp">c</code>, in the UTF encoding
corresponding to <code class="sourceCode cpp">ToType</code>.</p>
<p>For forward and bidirectional iterators, the invariant is: if <code class="sourceCode cpp"><span class="op">*</span><span class="kw">this</span></code>
is at the end of the range being adapted, then
<code class="sourceCode cpp">curr<span class="op">()</span></code> ==
<code class="sourceCode cpp">last_</code>; otherwise, the position of
<code class="sourceCode cpp">curr<span class="op">()</span></code> is
always at the beginning of the input subsequence corresponding to the
current code point <code class="sourceCode cpp">c</code> within the
underlying range, and <code class="sourceCode cpp">buf_</code> contains
the code units in <code class="sourceCode cpp">ToFormat</code> that
comprise <code class="sourceCode cpp">c</code>.</p>
<p>The exposition-only member function
<code class="sourceCode cpp">read</code> decodes the input subsequence
starting at position
<code class="sourceCode cpp">curr<span class="op">()</span></code> into
a code point <code class="sourceCode cpp">c</code>, using the UTF
encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code>, and setting
<code class="sourceCode cpp">c</code> to U+FFFD if the input subsequence
is ill-formed. If <code class="sourceCode cpp">c</code> is set to U+FFFD
as the result of an ill-formed input subsequence, it sets the error as
described below. It sets
<code class="sourceCode cpp">to_increment_</code> to the number of code
units read while decoding <code class="sourceCode cpp">c</code>; encodes
<code class="sourceCode cpp">c</code> into
<code class="sourceCode cpp">buf_</code> in the UTF encoding
corresponding to <code class="sourceCode cpp">ToType</code>; sets
<code class="sourceCode cpp">buf_index_</code> to
<code class="sourceCode cpp"><span class="dv">0</span></code>; and sets
<code class="sourceCode cpp">buf_last_</code> to the number of code
units encoded into <code class="sourceCode cpp">buf_</code>. If <code class="sourceCode cpp">forward_iterator<span class="op">&lt;</span>I<span class="op">&gt;</span></code>
is <code class="sourceCode cpp"><span class="kw">true</span></code>,
<code class="sourceCode cpp">curr<span class="op">()</span></code> is
set to the position it had before
<code class="sourceCode cpp">read</code> was called.</p>
<p>The exposition-only member function
<code class="sourceCode cpp">read_reverse</code> decodes the input
subsequence ending at position
<code class="sourceCode cpp">curr<span class="op">()</span></code> into
a code point <code class="sourceCode cpp">c</code>, using the UTF
encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code>, and setting
<code class="sourceCode cpp">c</code> to U+FFFD if the input subsequence
is ill-formed. If <code class="sourceCode cpp">c</code> is set to U+FFFD
as the result of an ill-formed input subsequence, it sets the error as
described below. It sets
<code class="sourceCode cpp">to_increment_</code> to the number of code
units read while decoding <code class="sourceCode cpp">c</code>; encodes
<code class="sourceCode cpp">c</code> into
<code class="sourceCode cpp">buf_</code> in the UTF encoding
corresponding to <code class="sourceCode cpp">ToType</code>; sets
<code class="sourceCode cpp">buf_last_</code> to the number of code
units encoded into <code class="sourceCode cpp">buf_</code>; and sets
<code class="sourceCode cpp">buf_index_</code> to <code class="sourceCode cpp">buf_last_ <span class="op">-</span> <span class="dv">1</span></code>.</p>
<p>In the following paragraph,
<code class="sourceCode cpp"><em>utf-error(foo)</em></code> refers to
the result of the exposition-only function:</p>
<div class="sourceCode" id="cb18"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a>expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;</span> <em>utf-error-func</em><span class="op">(</span>transcoding_error err<span class="op">)</span> <span class="op">{</span></span>
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> unexpected<span class="op">{</span>err<span class="op">}</span>;</span>
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>When the <code class="sourceCode cpp"><em>utf-iterator</em></code> is
at the end of the underlying range,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns a default-constructed <code class="sourceCode cpp">expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;</span></code>.
When the <code class="sourceCode cpp"><em>utf-iterator</em></code> has a
code unit, derived from a code point
<code class="sourceCode cpp">c</code>, which is itself derived from a
particular input subsequence (the “current input subsequence”), the
result of the
<code class="sourceCode cpp">success<span class="op">()</span></code>
method corresponds to the underlying range’s input subsequences as
follows. (All ranges of numerical values of code units below are
inclusive.)</p>
<ul>
<li><p>If the encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code> is UTF-8:</p>
<ul>
<li>If the current input subsequence is valid UTF-8,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp">expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;{}</span></code>.</li>
<li>If the current input subsequence is a code unit between 0x80 and
0xBF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>unexpected_utf8_continuation_byte<span class="op">)</span></code>.</li>
<li>If the current input subsequence is a code unit between 0xC0 and
0xC2, or between 0xF5 and 0xFF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>invalid_utf8_leading_byte<span class="op">)</span></code>.</li>
<li>If the current input subsequence is 0xE0, and the subsequent input
subsequence is between 0x80 and 0x9F; or if the current input
subsequence is 0xF0, and the subsequent input subsequence is between
0x80 and 0x8F; then
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>overlong<span class="op">)</span></code>.</li>
<li>If the current input subsequence is 0xED, and the subsequent input
subsequence is between 0xA0 and 0xBF, then
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>encoded_surrogate<span class="op">)</span></code>.</li>
<li>If the the current input subsequence is 0xF4, and the subsequent
input subsequence is between 0x90 and 0xBF, then
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>out_of_range<span class="op">)</span></code></li>
<li>Otherwise, if the current input subsequence is invalid UTF-8, begins
with a code unit between 0xC2 and 0xF4, and there exists some
hypothetical sequence of code units which would make the current input
subsequence well-formed if concatenated to the end of it,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>truncated_utf8_sequence<span class="op">)</span></code>.</li>
</ul></li>
<li><p>If the encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code> is UTF-16:</p>
<ul>
<li>If the current input subsequence is valid UTF-16,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp">expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;{}</span></code>.</li>
<li>If the current input subsequence is between 0xD800 and 0xDBFF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>unpaired_high_surrogate<span class="op">)</span></code>.</li>
<li>If the current input subsequence is between 0xDC00 and 0xDFFF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>unpaired_low_surrogate<span class="op">)</span></code>.</li>
</ul></li>
<li><p>If the encoding corresponding to
<code class="sourceCode cpp"><em>from-type</em></code> is UTF-32:</p>
<ul>
<li>If the current input subsequence is valid UTF-32,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp">expected<span class="op">&lt;</span><span class="dt">void</span>, transcoding_error<span class="op">&gt;{}</span></code>.</li>
<li>If the current input subsequence is between 0xD800 and 0xDFFF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>encoded_surrogate<span class="op">)</span></code>.</li>
<li>If the current input subsequence is between 0x110000 and 0xFFFFFFFF,
<code class="sourceCode cpp">success<span class="op">()</span></code>
returns <code class="sourceCode cpp"><em>utf-error</em><span class="op">(</span>transcoding_error<span class="op">::</span>out_of_range<span class="op">)</span></code>.</li>
</ul></li>
</ul>
<p><code class="sourceCode cpp"><em>utf-iterator</em></code>’s
exposition-only type alias
<code class="sourceCode cpp"><em>innermost-iter</em></code> is <code class="sourceCode cpp"><em>iter</em><span class="op">::</span><em>innermost-iter</em></code>
if <code class="sourceCode cpp"><em>iter</em></code> is
<code class="sourceCode cpp"><em>to_utf_view_iterator_optimizable</em></code>,
or <code class="sourceCode cpp"><em>iter</em></code> otherwise. The
exposition-only type alias
<code class="sourceCode cpp"><em>innermost-sent</em></code> is <code class="sourceCode cpp"><em>sent</em><span class="op">::</span><em>innermost-sent</em></code>
if <code class="sourceCode cpp"><em>sent</em></code> is
<code class="sourceCode cpp"><em>to_utf_view_iterator_optimizable</em></code>,
or <code class="sourceCode cpp"><em>sent</em></code> otherwise.</p>
<p>If <code class="sourceCode cpp"><em>utf-iterator</em></code> is a
<code class="sourceCode cpp">bidirectional_iterator</code>, it is
defined to be at the beginning of its underlying range if
<code class="sourceCode cpp">buf_index_</code> is zero and <code class="sourceCode cpp">curr<span class="op">()</span> <span class="op">==</span> begin<span class="op">()</span></code>.
If it is a <code class="sourceCode cpp">forward_iterator</code>, it is
defined to be at the end of its underlying range if <code class="sourceCode cpp">buf_index_ <span class="op">+</span> <span class="dv">1</span> <span class="op">==</span> buf_last_</code>
and <code class="sourceCode cpp">curr<span class="op">()</span> <span class="op">==</span> last_</code>.
Otherwise, it is defined to be at the end of its underlying range if
<code class="sourceCode cpp">buf_index_ <span class="op">==</span> buf_last_</code>
and <code class="sourceCode cpp">curr<span class="op">()</span> <span class="op">==</span> last_</code>.</p>
<p>If <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">*</span></code>
is invoked while
<code class="sourceCode cpp"><em>utf-iterator</em></code> is at the end
of its underlying range, the behavior is erroneous and the result is
unspecified. Otherwise, <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">*</span></code>
returns <code class="sourceCode cpp">buf_<span class="op">[</span>buf_index_<span class="op">]</span></code>.</p>
<p>If <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">++</span></code>
is invoked while
<code class="sourceCode cpp"><em>utf-iterator</em></code> is at the end
of its underlying range, the behavior is erroneous and the iterator’s
state does not change. If <code class="sourceCode cpp"><span class="kw">operator</span><span class="op">--</span></code>
is invoked while
<code class="sourceCode cpp"><em>utf-iterator</em></code> is at the
beginning of its underlying range, the behavior is erroneous and the
iterator’s state does not change.</p>
<p><code class="sourceCode cpp">to_utf8_view</code> produces a UTF-8
view of the elements from a
<code class="sourceCode cpp"><em>utf-range</em></code>.
<code class="sourceCode cpp">to_utf16_view</code> produces a UTF-16 view
of the elements from a
<code class="sourceCode cpp"><em>utf-range</em></code>.
<code class="sourceCode cpp">to_utf32_view</code> produces a UTF-32 view
of the elements from a
<code class="sourceCode cpp"><em>utf-range</em></code>.</p>
<p>The names <code class="sourceCode cpp">to_utf8</code>,
<code class="sourceCode cpp">to_utf16</code>, and
<code class="sourceCode cpp">to_utf32</code> denote range adaptor
objects ([range.adaptor.object]).
<code class="sourceCode cpp">to_utf</code> denotes a range adaptor
object template. <code class="sourceCode cpp">to_utf8</code> produces
<code class="sourceCode cpp">to_utf8_view</code>s,
<code class="sourceCode cpp">to_utf16</code> produces
<code class="sourceCode cpp">to_utf16_view</code>s, and
<code class="sourceCode cpp">to_utf32</code> produces
<code class="sourceCode cpp">utf32_view</code>s. <code class="sourceCode cpp">to_utf<span class="op">&lt;</span>ToType<span class="op">&gt;</span></code>
is equivalent to <code class="sourceCode cpp">to_utf8</code> if
<code class="sourceCode cpp">ToType</code> is
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>,
<code class="sourceCode cpp">to_utf16</code> if
<code class="sourceCode cpp">ToType</code> is
<code class="sourceCode cpp"><span class="dt">char16_t</span></code>,
and <code class="sourceCode cpp">to_utf32</code> if
<code class="sourceCode cpp">ToType</code> is
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>.
Let <code class="sourceCode cpp">to_utfN</code> denote any one of
<code class="sourceCode cpp">to_utf8</code>,
<code class="sourceCode cpp">to_utf16</code>, and
<code class="sourceCode cpp">to_utf32</code>, and let
<code class="sourceCode cpp">V</code> denote the
<code class="sourceCode cpp">to_utfN_view</code> associated with that
object. Let <code class="sourceCode cpp">E</code> be an expression and
let <code class="sourceCode cpp">T</code> be <code class="sourceCode cpp">remove_cvref_t<span class="op">&lt;</span><span class="kw">decltype</span><span class="op">((</span>E<span class="op">))&gt;</span></code>.
If <code class="sourceCode cpp"><span class="kw">decltype</span><span class="op">((</span>E<span class="op">))</span></code>
does not model <code class="sourceCode cpp"><em>utf-range</em></code>,
<code class="sourceCode cpp">to_utfN<span class="op">(</span>E<span class="op">)</span></code>
is ill-formed. The expression <code class="sourceCode cpp">to_utfN<span class="op">(</span>E<span class="op">)</span></code>
is expression-equivalent to:</p>
<ul>
<li><p>If <code class="sourceCode cpp">T</code> is a specialization of
<code class="sourceCode cpp">empty_view</code> ([range.empty.view]),
then <code class="sourceCode cpp">empty_view<span class="op">&lt;</span>ToType<span class="op">&gt;{}</span></code>.</p></li>
<li><p>Otherwise, if <code class="sourceCode cpp">T</code> is an array
type of known bound, then:</p>
<ul>
<li>If the array extent is nonzero and the last element of the array is
zero, then <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>E<span class="op">)</span>, <span class="op">--</span>std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>E<span class="op">)))</span></code></li>
<li>Otherwise, <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>E<span class="op">)</span>, std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>E<span class="op">)))</span></code></li>
</ul></li>
<li><p>Otherwise, <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>views<span class="op">::</span>all<span class="op">(</span>E<span class="op">))</span></code></p></li>
</ul>
<p><code class="sourceCode cpp">utf_view</code>’s implementation of the
<code class="sourceCode cpp">empty<span class="op">()</span></code>
member function is more efficient than the one provided by
<code class="sourceCode cpp">view_interface</code>, since
<code class="sourceCode cpp">view_interface</code>’s implementation will
construct <code class="sourceCode cpp">utf_view<span class="op">::</span>begin<span class="op">()</span></code>
and <code class="sourceCode cpp">utf_view<span class="op">::</span>end<span class="op">()</span></code>
and compare them, whereas we can simply use the underlying range’s
<code class="sourceCode cpp">empty<span class="op">()</span></code>,
since a <code class="sourceCode cpp">utf_view</code> is empty if and
only if its underlying range is empty.</p>
<h2 data-number="5.10" id="add-code-unit-views-and-adaptors"><span class="header-section-number">5.10</span> Add code unit views and
adaptors<a href="#add-code-unit-views-and-adaptors" class="self-link"></a></h2>
<div class="sourceCode" id="cb19"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std<span class="op">::</span>uc <span class="op">{</span></span>
<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a>  <span class="kw">consteval</span> <span class="kw">auto</span> <em>iterator-to-tag</em><span class="op">()</span> <span class="op">{</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-5"><a href="#cb19-5" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>random_access_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb19-6"><a href="#cb19-6" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> random_access_iterator_tag<span class="op">{}</span>;</span>
<span id="cb19-7"><a href="#cb19-7" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>bidirectional_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb19-8"><a href="#cb19-8" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> bidirectional_iterator_tag<span class="op">{}</span>;</span>
<span id="cb19-9"><a href="#cb19-9" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>forward_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb19-10"><a href="#cb19-10" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> forward_iterator_tag<span class="op">{}</span>;</span>
<span id="cb19-11"><a href="#cb19-11" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>input_iterator<span class="op">&lt;</span>I<span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb19-12"><a href="#cb19-12" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> input_iterator_tag<span class="op">{}</span>;</span>
<span id="cb19-13"><a href="#cb19-13" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-14"><a href="#cb19-14" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb19-15"><a href="#cb19-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-16"><a href="#cb19-16" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> I<span class="op">&gt;</span></span>
<span id="cb19-17"><a href="#cb19-17" aria-hidden="true" tabindex="-1"></a>  <span class="kw">using</span> <em>iterator-to-tag-t</em> <span class="op">=</span> <span class="kw">decltype</span><span class="op">(</span><em>iterator-to-tag</em><span class="op">&lt;</span>I<span class="op">&gt;())</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-18"><a href="#cb19-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-19"><a href="#cb19-19" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">typename</span> V, <span class="kw">typename</span> ToType<span class="op">&gt;</span></span>
<span id="cb19-20"><a href="#cb19-20" aria-hidden="true" tabindex="-1"></a>  <span class="kw">concept</span> <em>convertible-to-charN-t-view</em> <span class="op">=</span> <em>code-unit-to</em><span class="op">&lt;</span>ToType<span class="op">&gt;</span> <span class="op">&amp;&amp;</span> ranges<span class="op">::</span>view<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">&amp;&amp;</span> convertible_to<span class="op">&lt;</span>ranges<span class="op">::</span>range_reference_t<span class="op">&lt;</span>V<span class="op">&gt;</span>, ToType<span class="op">&gt;</span>;</span>
<span id="cb19-21"><a href="#cb19-21" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-22"><a href="#cb19-22" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char8_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-23"><a href="#cb19-23" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char8_t_view <span class="op">:</span> <span class="kw">public</span> ranges<span class="op">::</span>view_interface<span class="op">&lt;</span>as_char8_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">{</span></span>
<span id="cb19-24"><a href="#cb19-24" aria-hidden="true" tabindex="-1"></a>    V base_ <span class="op">=</span> V<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-25"><a href="#cb19-25" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-26"><a href="#cb19-26" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-27"><a href="#cb19-27" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>iterator</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-28"><a href="#cb19-28" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-29"><a href="#cb19-29" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>sentinel</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-30"><a href="#cb19-30" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-31"><a href="#cb19-31" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-32"><a href="#cb19-32" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char8_t_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-33"><a href="#cb19-33" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char8_t_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> base_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-34"><a href="#cb19-34" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-35"><a href="#cb19-35" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="op">&amp;</span> <span class="op">{</span> <span class="cf">return</span> base_; <span class="op">}</span></span>
<span id="cb19-36"><a href="#cb19-36" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">const</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-37"><a href="#cb19-37" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-38"><a href="#cb19-38" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> base_;</span>
<span id="cb19-39"><a href="#cb19-39" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-40"><a href="#cb19-40" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>base_<span class="op">)</span>; <span class="op">}</span></span>
<span id="cb19-41"><a href="#cb19-41" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-42"><a href="#cb19-42" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-43"><a href="#cb19-43" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-44"><a href="#cb19-44" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-45"><a href="#cb19-45" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-46"><a href="#cb19-46" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-47"><a href="#cb19-47" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-48"><a href="#cb19-48" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-49"><a href="#cb19-49" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-50"><a href="#cb19-50" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-51"><a href="#cb19-51" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-52"><a href="#cb19-52" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-53"><a href="#cb19-53" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-54"><a href="#cb19-54" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-55"><a href="#cb19-55" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-56"><a href="#cb19-56" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-57"><a href="#cb19-57" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-58"><a href="#cb19-58" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-59"><a href="#cb19-59" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-60"><a href="#cb19-60" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-61"><a href="#cb19-61" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-62"><a href="#cb19-62" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-63"><a href="#cb19-63" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-64"><a href="#cb19-64" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-65"><a href="#cb19-65" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-66"><a href="#cb19-66" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-67"><a href="#cb19-67" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-68"><a href="#cb19-68" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-69"><a href="#cb19-69" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-70"><a href="#cb19-70" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-71"><a href="#cb19-71" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-72"><a href="#cb19-72" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char8_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-73"><a href="#cb19-73" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-74"><a href="#cb19-74" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char8_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>iterator</em></span>
<span id="cb19-75"><a href="#cb19-75" aria-hidden="true" tabindex="-1"></a>      <span class="op">:</span> <span class="kw">public</span> proxy_iterator_interface<span class="op">&lt;</span><em>iterator-to-tag-t</em><span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;&gt;</span>, <span class="dt">char8_t</span><span class="op">&gt;</span> <span class="op">{</span></span>
<span id="cb19-76"><a href="#cb19-76" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-77"><a href="#cb19-77" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> reference_type <span class="op">=</span> <span class="dt">char8_t</span>;</span>
<span id="cb19-78"><a href="#cb19-78" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-79"><a href="#cb19-79" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb19-80"><a href="#cb19-80" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator-type</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-81"><a href="#cb19-81" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-82"><a href="#cb19-82" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> access;</span>
<span id="cb19-83"><a href="#cb19-83" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-84"><a href="#cb19-84" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em><span class="op">&amp;</span> base_reference<span class="op">()</span> <span class="kw">noexcept</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-85"><a href="#cb19-85" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em> base_reference<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-86"><a href="#cb19-86" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-87"><a href="#cb19-87" aria-hidden="true" tabindex="-1"></a>    <em>iterator-type</em> it_ <span class="op">=</span> <em>iterator-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-88"><a href="#cb19-88" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-89"><a href="#cb19-89" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-90"><a href="#cb19-90" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-91"><a href="#cb19-91" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">(</span><em>iterator-type</em> it<span class="op">)</span> <span class="op">:</span> it_<span class="op">(</span>move<span class="op">(</span>it<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-92"><a href="#cb19-92" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-93"><a href="#cb19-93" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> reference_type <span class="kw">operator</span><span class="op">*()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> <span class="op">*</span>it_; <span class="op">}</span></span>
<span id="cb19-94"><a href="#cb19-94" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-95"><a href="#cb19-95" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-96"><a href="#cb19-96" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char8_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-97"><a href="#cb19-97" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-98"><a href="#cb19-98" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char8_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>sentinel</em> <span class="op">{</span></span>
<span id="cb19-99"><a href="#cb19-99" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>base</em> <span class="op">=</span> <em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-100"><a href="#cb19-100" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel-type</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-101"><a href="#cb19-101" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-102"><a href="#cb19-102" aria-hidden="true" tabindex="-1"></a>    <em>sentinel-type</em> end_ <span class="op">=</span> <em>sentinel-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-103"><a href="#cb19-103" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-104"><a href="#cb19-104" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-105"><a href="#cb19-105" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-106"><a href="#cb19-106" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">explicit</span> <em>sentinel</em><span class="op">(</span><em>sentinel-type</em> end<span class="op">)</span> <span class="op">:</span> end_<span class="op">(</span>move<span class="op">(</span>end<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-107"><a href="#cb19-107" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">(</span><em>sentinel</em><span class="op">&lt;!</span>Const<span class="op">&gt;</span> i<span class="op">)</span> <span class="kw">requires</span> Const <span class="op">&amp;&amp;</span> convertible_to<span class="op">&lt;</span>ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span>V<span class="op">&gt;</span>, ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;&gt;</span>;</span>
<span id="cb19-108"><a href="#cb19-108" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-109"><a href="#cb19-109" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel-type</em> base<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> end_; <span class="op">}</span></span>
<span id="cb19-110"><a href="#cb19-110" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-111"><a href="#cb19-111" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-112"><a href="#cb19-112" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-113"><a href="#cb19-113" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-114"><a href="#cb19-114" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">==</span> y<span class="op">.</span>end_;</span>
<span id="cb19-115"><a href="#cb19-115" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-116"><a href="#cb19-116" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-117"><a href="#cb19-117" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-118"><a href="#cb19-118" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-119"><a href="#cb19-119" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-120"><a href="#cb19-120" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">-</span> y<span class="op">.</span>end_;</span>
<span id="cb19-121"><a href="#cb19-121" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-122"><a href="#cb19-122" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-123"><a href="#cb19-123" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-124"><a href="#cb19-124" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-125"><a href="#cb19-125" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y, <span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-126"><a href="#cb19-126" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> y<span class="op">.</span>end_ <span class="op">-</span> x<span class="op">.</span>it_;</span>
<span id="cb19-127"><a href="#cb19-127" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-128"><a href="#cb19-128" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-129"><a href="#cb19-129" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-130"><a href="#cb19-130" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb19-131"><a href="#cb19-131" aria-hidden="true" tabindex="-1"></a>  as_char8_t_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> as_char8_t_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb19-132"><a href="#cb19-132" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-133"><a href="#cb19-133" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char16_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-134"><a href="#cb19-134" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char16_t_view <span class="op">:</span> <span class="kw">public</span> ranges<span class="op">::</span>view_interface<span class="op">&lt;</span>as_char16_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">{</span></span>
<span id="cb19-135"><a href="#cb19-135" aria-hidden="true" tabindex="-1"></a>    V base_ <span class="op">=</span> V<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-136"><a href="#cb19-136" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-137"><a href="#cb19-137" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-138"><a href="#cb19-138" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>iterator</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-139"><a href="#cb19-139" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-140"><a href="#cb19-140" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>sentinel</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-141"><a href="#cb19-141" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-142"><a href="#cb19-142" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-143"><a href="#cb19-143" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char16_t_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-144"><a href="#cb19-144" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char16_t_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> base_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-145"><a href="#cb19-145" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-146"><a href="#cb19-146" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="op">&amp;</span> <span class="op">{</span> <span class="cf">return</span> base_; <span class="op">}</span></span>
<span id="cb19-147"><a href="#cb19-147" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">const</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-148"><a href="#cb19-148" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-149"><a href="#cb19-149" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> base_;</span>
<span id="cb19-150"><a href="#cb19-150" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-151"><a href="#cb19-151" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>base_<span class="op">)</span>; <span class="op">}</span></span>
<span id="cb19-152"><a href="#cb19-152" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-153"><a href="#cb19-153" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-154"><a href="#cb19-154" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-155"><a href="#cb19-155" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-156"><a href="#cb19-156" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-157"><a href="#cb19-157" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-158"><a href="#cb19-158" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-159"><a href="#cb19-159" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-160"><a href="#cb19-160" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-161"><a href="#cb19-161" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-162"><a href="#cb19-162" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-163"><a href="#cb19-163" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-164"><a href="#cb19-164" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-165"><a href="#cb19-165" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-166"><a href="#cb19-166" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-167"><a href="#cb19-167" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-168"><a href="#cb19-168" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-169"><a href="#cb19-169" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-170"><a href="#cb19-170" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-171"><a href="#cb19-171" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-172"><a href="#cb19-172" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-173"><a href="#cb19-173" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-174"><a href="#cb19-174" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-175"><a href="#cb19-175" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-176"><a href="#cb19-176" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-177"><a href="#cb19-177" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-178"><a href="#cb19-178" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-179"><a href="#cb19-179" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-180"><a href="#cb19-180" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-181"><a href="#cb19-181" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-182"><a href="#cb19-182" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-183"><a href="#cb19-183" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char16_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-184"><a href="#cb19-184" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-185"><a href="#cb19-185" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char16_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>iterator</em></span>
<span id="cb19-186"><a href="#cb19-186" aria-hidden="true" tabindex="-1"></a>      <span class="op">:</span> <span class="kw">public</span> proxy_iterator_interface<span class="op">&lt;</span><em>iterator-to-tag-t</em><span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;&gt;</span>, <span class="dt">char16_t</span><span class="op">&gt;</span> <span class="op">{</span></span>
<span id="cb19-187"><a href="#cb19-187" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-188"><a href="#cb19-188" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> reference_type <span class="op">=</span> <span class="dt">char16_t</span>;</span>
<span id="cb19-189"><a href="#cb19-189" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-190"><a href="#cb19-190" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb19-191"><a href="#cb19-191" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator-type</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-192"><a href="#cb19-192" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-193"><a href="#cb19-193" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> access;</span>
<span id="cb19-194"><a href="#cb19-194" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-195"><a href="#cb19-195" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em><span class="op">&amp;</span> base_reference<span class="op">()</span> <span class="kw">noexcept</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-196"><a href="#cb19-196" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em> base_reference<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-197"><a href="#cb19-197" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-198"><a href="#cb19-198" aria-hidden="true" tabindex="-1"></a>    <em>iterator-type</em> it_ <span class="op">=</span> <em>iterator-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-199"><a href="#cb19-199" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-200"><a href="#cb19-200" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-201"><a href="#cb19-201" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-202"><a href="#cb19-202" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">(</span><em>iterator-type</em> it<span class="op">)</span> <span class="op">:</span> it_<span class="op">(</span>move<span class="op">(</span>it<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-203"><a href="#cb19-203" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-204"><a href="#cb19-204" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> reference_type <span class="kw">operator</span><span class="op">*()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> <span class="op">*</span>it_; <span class="op">}</span></span>
<span id="cb19-205"><a href="#cb19-205" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-206"><a href="#cb19-206" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-207"><a href="#cb19-207" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char16_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-208"><a href="#cb19-208" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-209"><a href="#cb19-209" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char16_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>sentinel</em> <span class="op">{</span></span>
<span id="cb19-210"><a href="#cb19-210" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>base</em> <span class="op">=</span> <em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-211"><a href="#cb19-211" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel-type</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-212"><a href="#cb19-212" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-213"><a href="#cb19-213" aria-hidden="true" tabindex="-1"></a>    <em>sentinel-type</em> end_ <span class="op">=</span> <em>sentinel-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-214"><a href="#cb19-214" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-215"><a href="#cb19-215" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-216"><a href="#cb19-216" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-217"><a href="#cb19-217" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">explicit</span> <em>sentinel</em><span class="op">(</span><em>sentinel-type</em> end<span class="op">)</span> <span class="op">:</span> end_<span class="op">(</span>move<span class="op">(</span>end<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-218"><a href="#cb19-218" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">(</span><em>sentinel</em><span class="op">&lt;!</span>Const<span class="op">&gt;</span> i<span class="op">)</span> <span class="kw">requires</span> Const <span class="op">&amp;&amp;</span> convertible_to<span class="op">&lt;</span>ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span>V<span class="op">&gt;</span>, ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;&gt;</span>;</span>
<span id="cb19-219"><a href="#cb19-219" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-220"><a href="#cb19-220" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel-type</em> base<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> end_; <span class="op">}</span></span>
<span id="cb19-221"><a href="#cb19-221" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-222"><a href="#cb19-222" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-223"><a href="#cb19-223" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-224"><a href="#cb19-224" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-225"><a href="#cb19-225" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">==</span> y<span class="op">.</span>end_;</span>
<span id="cb19-226"><a href="#cb19-226" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-227"><a href="#cb19-227" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-228"><a href="#cb19-228" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-229"><a href="#cb19-229" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-230"><a href="#cb19-230" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-231"><a href="#cb19-231" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">-</span> y<span class="op">.</span>end_;</span>
<span id="cb19-232"><a href="#cb19-232" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-233"><a href="#cb19-233" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-234"><a href="#cb19-234" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-235"><a href="#cb19-235" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-236"><a href="#cb19-236" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y, <span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-237"><a href="#cb19-237" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> y<span class="op">.</span>end_ <span class="op">-</span> x<span class="op">.</span>it_;</span>
<span id="cb19-238"><a href="#cb19-238" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-239"><a href="#cb19-239" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-240"><a href="#cb19-240" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-241"><a href="#cb19-241" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb19-242"><a href="#cb19-242" aria-hidden="true" tabindex="-1"></a>  as_char16_t_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> as_char16_t_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb19-243"><a href="#cb19-243" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-244"><a href="#cb19-244" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char32_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-245"><a href="#cb19-245" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char32_t_view <span class="op">:</span> <span class="kw">public</span> ranges<span class="op">::</span>view_interface<span class="op">&lt;</span>as_char32_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">{</span></span>
<span id="cb19-246"><a href="#cb19-246" aria-hidden="true" tabindex="-1"></a>    V base_ <span class="op">=</span> V<span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-247"><a href="#cb19-247" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-248"><a href="#cb19-248" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-249"><a href="#cb19-249" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>iterator</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-250"><a href="#cb19-250" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-251"><a href="#cb19-251" aria-hidden="true" tabindex="-1"></a>    <span class="kw">class</span> <em>sentinel</em>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-252"><a href="#cb19-252" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-253"><a href="#cb19-253" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-254"><a href="#cb19-254" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char32_t_view<span class="op">()</span> <span class="kw">requires</span> default_initializable<span class="op">&lt;</span>V<span class="op">&gt;</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-255"><a href="#cb19-255" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> as_char32_t_view<span class="op">(</span>V base<span class="op">)</span> <span class="op">:</span> base_<span class="op">(</span>move<span class="op">(</span>base<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-256"><a href="#cb19-256" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-257"><a href="#cb19-257" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="op">&amp;</span> <span class="op">{</span> <span class="cf">return</span> base_; <span class="op">}</span></span>
<span id="cb19-258"><a href="#cb19-258" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">const</span> V<span class="op">&amp;</span> base<span class="op">()</span> <span class="kw">const</span><span class="op">&amp;</span> <span class="kw">requires</span> copy_constructible<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-259"><a href="#cb19-259" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-260"><a href="#cb19-260" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> base_;</span>
<span id="cb19-261"><a href="#cb19-261" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-262"><a href="#cb19-262" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> V base<span class="op">()</span> <span class="op">&amp;&amp;</span> <span class="op">{</span> <span class="cf">return</span> move<span class="op">(</span>base_<span class="op">)</span>; <span class="op">}</span></span>
<span id="cb19-263"><a href="#cb19-263" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-264"><a href="#cb19-264" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-265"><a href="#cb19-265" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> begin<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-266"><a href="#cb19-266" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-267"><a href="#cb19-267" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>begin<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-268"><a href="#cb19-268" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-269"><a href="#cb19-269" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-270"><a href="#cb19-270" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="op">{</span> <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>; <span class="op">}</span></span>
<span id="cb19-271"><a href="#cb19-271" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-272"><a href="#cb19-272" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-273"><a href="#cb19-273" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">false</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-274"><a href="#cb19-274" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-275"><a href="#cb19-275" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-276"><a href="#cb19-276" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-277"><a href="#cb19-277" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>sentinel</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-278"><a href="#cb19-278" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-279"><a href="#cb19-279" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;</span> end<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>common_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-280"><a href="#cb19-280" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-281"><a href="#cb19-281" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <em>iterator</em><span class="op">&lt;</span><span class="kw">true</span><span class="op">&gt;{</span>ranges<span class="op">::</span>end<span class="op">(</span>base_<span class="op">)}</span>;</span>
<span id="cb19-282"><a href="#cb19-282" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-283"><a href="#cb19-283" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-284"><a href="#cb19-284" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span>V<span class="op">&gt;</span></span>
<span id="cb19-285"><a href="#cb19-285" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-286"><a href="#cb19-286" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-287"><a href="#cb19-287" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-288"><a href="#cb19-288" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">auto</span> size<span class="op">()</span> <span class="kw">const</span> <span class="kw">requires</span> ranges<span class="op">::</span>sized_range<span class="op">&lt;</span><span class="kw">const</span> V<span class="op">&gt;</span></span>
<span id="cb19-289"><a href="#cb19-289" aria-hidden="true" tabindex="-1"></a>    <span class="op">{</span></span>
<span id="cb19-290"><a href="#cb19-290" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> ranges<span class="op">::</span>size<span class="op">(</span>base_<span class="op">)</span>;</span>
<span id="cb19-291"><a href="#cb19-291" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-292"><a href="#cb19-292" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-293"><a href="#cb19-293" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-294"><a href="#cb19-294" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char32_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-295"><a href="#cb19-295" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-296"><a href="#cb19-296" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char32_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>iterator</em></span>
<span id="cb19-297"><a href="#cb19-297" aria-hidden="true" tabindex="-1"></a>      <span class="op">:</span> <span class="kw">public</span> proxy_iterator_interface<span class="op">&lt;</span><em>iterator-to-tag-t</em><span class="op">&lt;</span>ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;&gt;</span>, <span class="dt">char32_t</span><span class="op">&gt;</span> <span class="op">{</span></span>
<span id="cb19-298"><a href="#cb19-298" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-299"><a href="#cb19-299" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> reference_type <span class="op">=</span> <span class="dt">char32_t</span>;</span>
<span id="cb19-300"><a href="#cb19-300" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-301"><a href="#cb19-301" aria-hidden="true" tabindex="-1"></a>  <span class="kw">private</span><span class="op">:</span></span>
<span id="cb19-302"><a href="#cb19-302" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>iterator-type</em> <span class="op">=</span> ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-303"><a href="#cb19-303" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-304"><a href="#cb19-304" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> access;</span>
<span id="cb19-305"><a href="#cb19-305" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-306"><a href="#cb19-306" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em><span class="op">&amp;</span> base_reference<span class="op">()</span> <span class="kw">noexcept</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-307"><a href="#cb19-307" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator-type</em> base_reference<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> it_; <span class="op">}</span> <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-308"><a href="#cb19-308" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-309"><a href="#cb19-309" aria-hidden="true" tabindex="-1"></a>    <em>iterator-type</em> it_ <span class="op">=</span> <em>iterator-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-310"><a href="#cb19-310" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-311"><a href="#cb19-311" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-312"><a href="#cb19-312" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-313"><a href="#cb19-313" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>iterator</em><span class="op">(</span><em>iterator-type</em> it<span class="op">)</span> <span class="op">:</span> it_<span class="op">(</span>move<span class="op">(</span>it<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-314"><a href="#cb19-314" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-315"><a href="#cb19-315" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> reference_type <span class="kw">operator</span><span class="op">*()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> <span class="op">*</span>it_; <span class="op">}</span></span>
<span id="cb19-316"><a href="#cb19-316" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-317"><a href="#cb19-317" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-318"><a href="#cb19-318" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><em>convertible-to-charN-t-view</em><span class="op">&lt;</span><span class="dt">char32_t</span><span class="op">&gt;</span> V<span class="op">&gt;</span></span>
<span id="cb19-319"><a href="#cb19-319" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> Const<span class="op">&gt;</span></span>
<span id="cb19-320"><a href="#cb19-320" aria-hidden="true" tabindex="-1"></a>  <span class="kw">class</span> as_char32_t_view<span class="op">&lt;</span>V<span class="op">&gt;::</span><em>sentinel</em> <span class="op">{</span></span>
<span id="cb19-321"><a href="#cb19-321" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>base</em> <span class="op">=</span> <em>maybe-const</em><span class="op">&lt;</span>Const, V<span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-322"><a href="#cb19-322" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <em>sentinel-type</em> <span class="op">=</span> ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-323"><a href="#cb19-323" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-324"><a href="#cb19-324" aria-hidden="true" tabindex="-1"></a>    <em>sentinel-type</em> end_ <span class="op">=</span> <em>sentinel-type</em><span class="op">()</span>; <span class="co">// <em>exposition only</em></span></span>
<span id="cb19-325"><a href="#cb19-325" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-326"><a href="#cb19-326" aria-hidden="true" tabindex="-1"></a>  <span class="kw">public</span><span class="op">:</span></span>
<span id="cb19-327"><a href="#cb19-327" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb19-328"><a href="#cb19-328" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <span class="kw">explicit</span> <em>sentinel</em><span class="op">(</span><em>sentinel-type</em> end<span class="op">)</span> <span class="op">:</span> end_<span class="op">(</span>move<span class="op">(</span>end<span class="op">))</span> <span class="op">{}</span></span>
<span id="cb19-329"><a href="#cb19-329" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel</em><span class="op">(</span><em>sentinel</em><span class="op">&lt;!</span>Const<span class="op">&gt;</span> i<span class="op">)</span> <span class="kw">requires</span> Const <span class="op">&amp;&amp;</span> convertible_to<span class="op">&lt;</span>ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span>V<span class="op">&gt;</span>, ranges<span class="op">::</span>sentinel_t<span class="op">&lt;</span><em>base</em><span class="op">&gt;&gt;</span>;</span>
<span id="cb19-330"><a href="#cb19-330" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-331"><a href="#cb19-331" aria-hidden="true" tabindex="-1"></a>    <span class="kw">constexpr</span> <em>sentinel-type</em> base<span class="op">()</span> <span class="kw">const</span> <span class="op">{</span> <span class="cf">return</span> end_; <span class="op">}</span></span>
<span id="cb19-332"><a href="#cb19-332" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-333"><a href="#cb19-333" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-334"><a href="#cb19-334" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-335"><a href="#cb19-335" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-336"><a href="#cb19-336" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">==</span> y<span class="op">.</span>end_;</span>
<span id="cb19-337"><a href="#cb19-337" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-338"><a href="#cb19-338" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-339"><a href="#cb19-339" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-340"><a href="#cb19-340" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-341"><a href="#cb19-341" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x, <span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-342"><a href="#cb19-342" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> x<span class="op">.</span>it_ <span class="op">-</span> y<span class="op">.</span>end_;</span>
<span id="cb19-343"><a href="#cb19-343" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-344"><a href="#cb19-344" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-345"><a href="#cb19-345" aria-hidden="true" tabindex="-1"></a>    <span class="kw">template</span><span class="op">&lt;</span><span class="dt">bool</span> OtherConst<span class="op">&gt;</span></span>
<span id="cb19-346"><a href="#cb19-346" aria-hidden="true" tabindex="-1"></a>      <span class="kw">requires</span> sized_sentinel_for<span class="op">&lt;</span><em>sentinel-type</em>, ranges<span class="op">::</span>iterator_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;&gt;</span></span>
<span id="cb19-347"><a href="#cb19-347" aria-hidden="true" tabindex="-1"></a>    <span class="kw">friend</span> <span class="kw">constexpr</span> ranges<span class="op">::</span>range_difference_t<span class="op">&lt;</span><em>maybe-const</em><span class="op">&lt;</span>OtherConst, V<span class="op">&gt;&gt;</span> <span class="kw">operator</span><span class="op">-(</span><span class="kw">const</span> <em>sentinel</em><span class="op">&amp;</span> y, <span class="kw">const</span> <em>iterator</em><span class="op">&lt;</span>OtherConst<span class="op">&gt;&amp;</span> x<span class="op">)</span> <span class="op">{</span></span>
<span id="cb19-348"><a href="#cb19-348" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> y<span class="op">.</span>end_ <span class="op">-</span> x<span class="op">.</span>it_;</span>
<span id="cb19-349"><a href="#cb19-349" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb19-350"><a href="#cb19-350" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb19-351"><a href="#cb19-351" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-352"><a href="#cb19-352" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb19-353"><a href="#cb19-353" aria-hidden="true" tabindex="-1"></a>  as_char32_t_view<span class="op">(</span>R<span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> as_char32_t_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span>
<span id="cb19-354"><a href="#cb19-354" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-355"><a href="#cb19-355" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> as_char8_t;</span>
<span id="cb19-356"><a href="#cb19-356" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-357"><a href="#cb19-357" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> as_char16_t;</span>
<span id="cb19-358"><a href="#cb19-358" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-359"><a href="#cb19-359" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <em>unspecified</em> as_char32_t;</span>
<span id="cb19-360"><a href="#cb19-360" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-361"><a href="#cb19-361" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="cb19-362"><a href="#cb19-362" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-363"><a href="#cb19-363" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> std<span class="op">::</span>ranges <span class="op">{</span></span>
<span id="cb19-364"><a href="#cb19-364" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-365"><a href="#cb19-365" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb19-366"><a href="#cb19-366" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>as_char8_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb19-367"><a href="#cb19-367" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-368"><a href="#cb19-368" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb19-369"><a href="#cb19-369" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>as_char16_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb19-370"><a href="#cb19-370" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-371"><a href="#cb19-371" aria-hidden="true" tabindex="-1"></a>  <span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> V<span class="op">&gt;</span></span>
<span id="cb19-372"><a href="#cb19-372" aria-hidden="true" tabindex="-1"></a>  <span class="kw">inline</span> <span class="kw">constexpr</span> <span class="dt">bool</span> enable_borrowed_range<span class="op">&lt;</span>std<span class="op">::</span>uc<span class="op">::</span>as_char32_t_view<span class="op">&lt;</span>V<span class="op">&gt;&gt;</span> <span class="op">=</span> enable_borrowed_range<span class="op">&lt;</span>V<span class="op">&gt;</span>;</span>
<span id="cb19-373"><a href="#cb19-373" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-374"><a href="#cb19-374" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p><code class="sourceCode cpp">char8_view</code> produces a view of
<code class="sourceCode cpp"><span class="dt">char8_t</span></code>
elements from another view.
<code class="sourceCode cpp">char16_view</code> produces a view of
<code class="sourceCode cpp"><span class="dt">char16_t</span></code>
elements from another view.
<code class="sourceCode cpp">char32_view</code> produces a view of
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>
elements from another view. Let
<code class="sourceCode cpp">charN_view</code> denote any one of the
views <code class="sourceCode cpp">char8_view</code>,
<code class="sourceCode cpp">char16_view</code>, and
<code class="sourceCode cpp">char32_view</code>.</p>
<p>The names <code class="sourceCode cpp">as_char8_t</code>,
<code class="sourceCode cpp">as_char16_t</code>, and
<code class="sourceCode cpp">as_char32_t</code> denote range adaptor
objects ([range.adaptor.object]).
<code class="sourceCode cpp">as_char8_t</code> produces
<code class="sourceCode cpp">char8_view</code>s,
<code class="sourceCode cpp">as_char16_t</code> produces
<code class="sourceCode cpp">char16_view</code>s, and
<code class="sourceCode cpp">as_char32_t</code> produces
<code class="sourceCode cpp">char32_view</code>s. Let
<code class="sourceCode cpp">as_charN_t</code> denote any one of
<code class="sourceCode cpp">as_char8_t</code>,
<code class="sourceCode cpp">as_char16_t</code>, and
<code class="sourceCode cpp">as_char32_t</code>, and let
<code class="sourceCode cpp">V</code> denote the
<code class="sourceCode cpp">charN_view</code> associated with that
object. Let <code class="sourceCode cpp">E</code> be an expression and
let <code class="sourceCode cpp">T</code> be <code class="sourceCode cpp">remove_cvref_t<span class="op">&lt;</span><span class="kw">decltype</span><span class="op">((</span>E<span class="op">))&gt;</span></code>.
Let <code class="sourceCode cpp">F</code> be the
<code class="sourceCode cpp">format</code> enumerator associated with
<code class="sourceCode cpp">as_charN_t</code>. If <code class="sourceCode cpp"><span class="kw">decltype</span><span class="op">((</span>E<span class="op">))</span></code>
does not model <code class="sourceCode cpp">utf_pointer<span class="op">&lt;</span>T<span class="op">&gt;</span></code>
and if <code class="sourceCode cpp">charN_view<span class="op">(</span>E<span class="op">)</span></code>
is ill-formed, <code class="sourceCode cpp">as_charN_t<span class="op">(</span>E<span class="op">)</span></code>
is ill-formed. The expression <code class="sourceCode cpp">as_charN_t<span class="op">(</span>E<span class="op">)</span></code>
is expression-equivalent to:</p>
<ul>
<li><p>If <code class="sourceCode cpp">T</code> is a specialization of
<code class="sourceCode cpp">empty_view</code> ([range.empty.view]),
then <code class="sourceCode cpp">empty_view<span class="op">&lt;</span><em>format-to-type-t</em><span class="op">&lt;</span>F<span class="op">&gt;&gt;{}</span></code>.</p></li>
<li><p>Otherwise, if <code class="sourceCode cpp">T</code> is an array
type of known bound, then:</p>
<ul>
<li>If the array extent is nonzero and the last element of the array is
zero, then <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>E<span class="op">)</span>, <span class="op">--</span>std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>E<span class="op">)))</span></code></li>
<li>Otherwise, <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>E<span class="op">)</span>, std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>E<span class="op">)))</span></code></li>
</ul></li>
<li><p>Otherwise, <code class="sourceCode cpp">V<span class="op">(</span>std<span class="op">::</span>views<span class="op">::</span>all<span class="op">(</span>E<span class="op">))</span></code>.</p></li>
</ul>
<p>[Example 1:</p>
<div class="sourceCode" id="cb20"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>vector<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;</span> path_as_ints <span class="op">=</span> <span class="op">{</span><span class="ch">U&#39;C&#39;</span>, <span class="ch">U&#39;:&#39;</span>, <span class="ch">U&#39;</span><span class="sc">\x00010000</span><span class="ch">&#39;</span><span class="op">}</span>;</span>
<span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>filesystem<span class="op">::</span>path path <span class="op">=</span> path_as_ints <span class="op">|</span> as_char32_t <span class="op">|</span> std<span class="op">::</span>ranges<span class="op">::</span>to<span class="op">&lt;</span>std<span class="op">::</span>u32string<span class="op">&gt;()</span>;</span>
<span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a><span class="kw">auto</span> <span class="kw">const</span><span class="op">&amp;</span> native_path <span class="op">=</span> path<span class="op">.</span>native<span class="op">()</span>;</span>
<span id="cb20-4"><a href="#cb20-4" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>native_path <span class="op">!=</span> std<span class="op">::</span>wstring<span class="op">{</span><span class="ch">L&#39;C&#39;</span>, <span class="ch">L&#39;:&#39;</span>, <span class="ch">L&#39;</span><span class="sc">\xD800</span><span class="ch">&#39;</span>, <span class="ch">L&#39;</span><span class="sc">\xDC00</span><span class="ch">&#39;</span><span class="op">})</span> <span class="op">{</span></span>
<span id="cb20-5"><a href="#cb20-5" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> <span class="kw">false</span>;</span>
<span id="cb20-6"><a href="#cb20-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>— end example]</p>
<h2 data-number="5.11" id="why-there-are-three-to_utfn_views-views-plus-utf_view-and-three-as_charn_t_views"><span class="header-section-number">5.11</span> Why there are three
<code class="sourceCode cpp">to_utfN_view</code>s views plus
<code class="sourceCode cpp">utf_view</code>, and three
<code class="sourceCode cpp">as_charN_t_view</code>s<a href="#why-there-are-three-to_utfn_views-views-plus-utf_view-and-three-as_charn_t_views" class="self-link"></a></h2>
<p>The views in
<code class="sourceCode cpp">std<span class="op">::</span>ranges</code>
are constrained to accept only <code class="sourceCode cpp">std<span class="op">::</span>ranges<span class="op">::</span>view</code>
template parameters. However, they accept <code class="sourceCode cpp">std<span class="op">::</span>ranges<span class="op">::</span>viewable_range</code>s
in practice, because they each have a deduction guide that looks like
this:</p>
<div class="sourceCode" id="cb21"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span><span class="op">&lt;</span><span class="kw">class</span> R<span class="op">&gt;</span></span>
<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a>to_utf8_view<span class="op">(</span>R <span class="op">&amp;&amp;)</span> <span class="op">-&gt;</span> to_utf8_view<span class="op">&lt;</span>views<span class="op">::</span>all_t<span class="op">&lt;</span>R<span class="op">&gt;&gt;</span>;</span></code></pre></div>
<p>It’s not possible to make this work for any view that’s a template
class that accepts a template parameter other than the underlying view,
because of the all-or-nothing nature of deduction guides. So we need
separate <code class="sourceCode cpp">to_utfN_view</code>s and separate
<code class="sourceCode cpp">as_charN_t_view</code>s instead of having
them simply be alias templates for a hypothetical generic <code class="sourceCode cpp">to_utf_view<span class="op">&lt;</span>ToType<span class="op">&gt;</span></code>
or <code class="sourceCode cpp">as_charN_t_view<span class="op">&lt;</span>ToType<span class="op">&gt;</span></code>,
respectively.</p>
<h2 data-number="5.12" id="why-as_charn_t_view-is-not-implemented-in-terms-of-transform_view"><span class="header-section-number">5.12</span> Why
<code class="sourceCode cpp">as_charN_t_view</code> is not implemented
in terms of <code class="sourceCode cpp">transform_view</code><a href="#why-as_charn_t_view-is-not-implemented-in-terms-of-transform_view" class="self-link"></a></h2>
<p>Because <code class="sourceCode cpp">transform_view</code> <a href="https://stackoverflow.com/a/76789448">cannot</a> be a
<code class="sourceCode cpp">borrowed_range</code>, whereas
<code class="sourceCode cpp">as_charN_t_view</code> can.</p>
<p><span class="citation" data-cites="P3117R0">[<a href="https://wg21.link/p3117r0" role="doc-biblioref">P3117R0</a>]</span> attempted to extend
<code class="sourceCode cpp">transform_view</code> to be conditionally
borrowed, but its authors are not pursuing it further following <a href="https://github.com/cplusplus/papers/issues/1779#issuecomment-2014160066">concerns</a>
raised by SG9 in Tokyo 2024.</p>
<p>A previous revision of this paper proposed for standardization a
<code class="sourceCode cpp">project_view<span class="op">&lt;</span>V, F<span class="op">&gt;</span></code>
view that would be like
<code class="sourceCode cpp">transform_view</code> except that the
transformation function would be an NTTP, enabling
<code class="sourceCode cpp">project_view</code> to be a
<code class="sourceCode cpp">borrowed_range</code>. However, this was
removed because the NTTP template parameter prevents us from providing a
<code class="sourceCode cpp">views<span class="op">::</span>all_t</code>
deduction guide as described in the previous section.</p>
<h2 data-number="5.13" id="why-utf_view-always-transcodes-even-in-utf-n-to-utf-n-cases"><span class="header-section-number">5.13</span> Why
<code class="sourceCode cpp">utf_view</code> always transcodes, even in
UTF-N to UTF-N cases<a href="#why-utf_view-always-transcodes-even-in-utf-n-to-utf-n-cases" class="self-link"></a></h2>
<p>You might expect that if <code class="sourceCode cpp">r</code> in
<code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
is already in UTF-N,
<code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
might just be <code class="sourceCode cpp">r</code>. This is not what
the <code class="sourceCode cpp">to_utfN</code> adaptors do, though.</p>
<p>The adaptors each produce a view
<code class="sourceCode cpp">utfv</code> that stores a view of type
<code class="sourceCode cpp">V</code>. Further, <code class="sourceCode cpp">utfv<span class="op">.</span>begin<span class="op">()</span></code>
is always a specialization of
<code class="sourceCode cpp"><em>utf-iterator</em></code>. <code class="sourceCode cpp">utfv<span class="op">.</span>end<span class="op">()</span></code>
is also a specialization of
<code class="sourceCode cpp"><em>utf-iterator</em></code> (if <code class="sourceCode cpp">common_range<span class="op">&lt;</span>V<span class="op">&gt;</span></code>),
or otherwise the sentinel value for
<code class="sourceCode cpp">V</code>.</p>
<p>This gives
<code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
some nice, consistent properties. With the exception of <code class="sourceCode cpp">empty_view<span class="op">&lt;</span>T<span class="op">&gt;{}</span> <span class="op">|</span> to_utfN</code>,
the following are always true:</p>
<ul>
<li><p><code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
produces well-formed UTF. This is true even when the input was already
UTF-N. Remember, the input could have been UTF-N but had ill-formed UTF
in it.</p></li>
<li><p><code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
has a consistent API. If
<code class="sourceCode cpp">r <span class="op">|</span> to_utfN</code>
were sometimes <code class="sourceCode cpp">r</code>, and since
<code class="sourceCode cpp">r</code> may be a reference to an array,
you’d have to use <code class="sourceCode cpp">std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>r<span class="op">)</span></code>
and <code class="sourceCode cpp"><span class="op">::</span>end<span class="op">(</span>r<span class="op">)</span></code>
all the time. However, you’d probably write <code class="sourceCode cpp">r<span class="op">.</span>begin<span class="op">()</span></code>
and <code class="sourceCode cpp">r<span class="op">.</span>end<span class="op">()</span></code>,
only to one day get bitten by an array-reference
<code class="sourceCode cpp">r</code>.</p></li>
</ul>
<h2 data-number="5.14" id="add-a-feature-test-macro"><span class="header-section-number">5.14</span> Add a feature test macro<a href="#add-a-feature-test-macro" class="self-link"></a></h2>
<p>Add the feature test macro
<code class="sourceCode cpp">__cpp_lib_unicode_transcoding</code>.</p>
<h2 data-number="5.15" id="relevant-pollsminutes"><span class="header-section-number">5.15</span> Relevant Polls/Minutes<a href="#relevant-pollsminutes" class="self-link"></a></h2>
<h3 data-number="5.15.1" id="sg16-review-of-p2728r7-on-2023-09-13-telecon"><span class="header-section-number">5.15.1</span> SG16 review of P2728R7 on
2023-09-13 (Telecon)<a href="#sg16-review-of-p2728r7-on-2023-09-13-telecon" class="self-link"></a></h3>
<ul>
<li><a href="https://github.com/sg16-unicode/sg16-meetings/blob/master/README-2023.md#september-13th-2023">Minutes</a></li>
</ul>
<p>No polls were taken during this review.</p>
<h3 data-number="5.15.2" id="sg16-review-of-p2728r6-on-2023-08-23-telecon"><span class="header-section-number">5.15.2</span> SG16 review of P2728R6 on
2023-08-23 (Telecon)<a href="#sg16-review-of-p2728r6-on-2023-08-23-telecon" class="self-link"></a></h3>
<ul>
<li><a href="https://github.com/sg16-unicode/sg16-meetings/blob/master/README-2023.md#august-23rd-2023">Minutes</a></li>
</ul>
<p>No polls were taken during this review.</p>
<h3 data-number="5.15.3" id="sg9-review-of-d2728r4-on-2023-06-12-during-varna-2023"><span class="header-section-number">5.15.3</span> SG9 review of <a href="https://isocpp.org/files/papers/D2728R4.html">D2728R4</a> on
2023-06-12 during Varna 2023<a href="#sg9-review-of-d2728r4-on-2023-06-12-during-varna-2023" class="self-link"></a></h3>
<ul>
<li><a href="https://wiki.edg.com/bin/view/Wg21varna/P2728#SG9-2023-06-12">Minutes</a></li>
</ul>
<p><strong>POLL:</strong> Move null_sentinel_t to std:: namespace</p>
<table>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>3</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<p><strong># Of Authors:</strong> 1</p>
<p><strong>Author’s Position:</strong> F</p>
<p><strong>Attendance:</strong> 9 (4 abstentions)</p>
<p><strong>Outcome:</strong> Consensus in favor</p>
<p><br /></p>
<p><strong>POLL:</strong> Remove null_sentinel_t::base member function
from the proposal</p>
<table>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>0</td>
<td>4</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<p><strong># Of Authors:</strong> 1</p>
<p><strong>Author’s Position:</strong> F</p>
<p><strong>Attendance:</strong> 8 (3 abstentions)</p>
<p><strong>Outcome:</strong> Consensus in favor</p>
<p><br /></p>
<p><strong>POLL:</strong> utf_iterator should be a separate type and not
nested within utf_view</p>
<table>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>2</td>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
<p><strong>Attendance:</strong> 8 (3 abstentions)</p>
<p><strong># of Authors:</strong> 1</p>
<p><strong>Author Position:</strong> F</p>
<p><strong>Outcome:</strong> Weak consensus in favor</p>
<p>SA: Having a separate type complexifies the API</p>
<h3 data-number="5.15.4" id="sg16-review-of-p2728r3-on-2023-05-10-telecon"><span class="header-section-number">5.15.4</span> SG16 review of P2728R3 on
2023-05-10 (Telecon)<a href="#sg16-review-of-p2728r3-on-2023-05-10-telecon" class="self-link"></a></h3>
<ul>
<li><a href="https://github.com/sg16-unicode/sg16-meetings/blob/master/README-2023.md#may-10th-2023">Minutes</a></li>
</ul>
<p><strong>POLL:</strong> Separate <code class="sourceCode cpp">std<span class="op">::</span>null_sentinel_t</code>
from P2728 into a separate paper for SG9 and LEWG; SG16 does not need to
see it again.</p>
<table style="width:31%;">
<colgroup>
<col style="width: 6%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 6%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>1</td>
<td>4</td>
<td>2</td>
<td>1</td>
</tr>
</tbody>
</table>
<p><strong>Attendance:</strong> 12 (3 abstentions)</p>
<p><strong>Outcome:</strong> No consensus; author’s discretion for how
to continue.</p>
<h3 data-number="5.15.5" id="sg16-review-of-p2728r0-on-2023-04-12-telecon"><span class="header-section-number">5.15.5</span> SG16 review of P2728R0 on
2023-04-12 (Telecon)<a href="#sg16-review-of-p2728r0-on-2023-04-12-telecon" class="self-link"></a></h3>
<ul>
<li><a href="https://github.com/sg16-unicode/sg16-meetings/blob/master/README-2023.md#april-12th-2023">Minutes</a></li>
</ul>
<p><strong>POLL:</strong> SG16 would like to see a version of P2728
without eager algorithms.</p>
<table style="width:31%;">
<colgroup>
<col style="width: 6%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 6%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>4</td>
<td>2</td>
<td>0</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
<p><strong>Attendance:</strong> 10 (3 abstentions)</p>
<p><strong>Outcome:</strong> Consensus in favor</p>
<p><br /></p>
<p><strong>POLL:</strong> UTF transcoding interfaces provided by the C++
standard library should operate on charN_t types, with support for other
types provided by adapters, possibly with a special case for char and
wchar_t when their associated literal encodings are UTF.</p>
<table style="width:31%;">
<colgroup>
<col style="width: 6%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 6%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
<p><strong>Attendance:</strong> 9 (2 abstentions)</p>
<p><strong>Outcome:</strong> Strong consensus in favor</p>
<p>Author’s note: More commentary on this poll is provided in the
section “Discussion of whether transcoding views should accept ranges of
<code class="sourceCode cpp"><span class="dt">char</span></code> and
<code class="sourceCode cpp"><span class="dt">wchar_t</span></code>”.
But note here that the authors doubt the viability of “a special case
for char and wchar_t when their associated literal encodings are UTF”,
since making the evaluation of a concept change based on the literal
encoding seems like a flaky move; the literal encoding can change TU to
TU.</p>
<h3 data-number="5.15.6" id="sg16-review-of-p2728r0-on-2023-03-22-telecon"><span class="header-section-number">5.15.6</span> SG16 review of P2728R0 on
2023-03-22 (Telecon)<a href="#sg16-review-of-p2728r0-on-2023-03-22-telecon" class="self-link"></a></h3>
<ul>
<li><a href="https://github.com/sg16-unicode/sg16-meetings/blob/master/README-2023.md#march-22nd-2023">Minutes</a></li>
</ul>
<p>No polls were taken during this review.</p>
<p><br /></p>
<p><strong>POLL:</strong>
<code class="sourceCode cpp"><span class="dt">char32_t</span></code>
should be used as the Unicode code point type within the C++ standard
library implementations of Unicode algorithms.</p>
<table style="width:31%;">
<colgroup>
<col style="width: 6%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 5%" />
<col style="width: 6%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>SF</strong>
</div></th>
<th><div style="text-align:center">
<strong>F</strong>
</div></th>
<th><div style="text-align:center">
<strong>N</strong>
</div></th>
<th><div style="text-align:center">
<strong>A</strong>
</div></th>
<th><div style="text-align:center">
<strong>SA</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>6</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<p><strong>Attendance:</strong> 9 (2 abstentions)</p>
<p><strong>Outcome:</strong> Strong consensus in favor</p>
<h1 data-number="6" id="implementation-experience"><span class="header-section-number">6</span> Implementation experience<a href="#implementation-experience" class="self-link"></a></h1>
<p>The most recent revision of this paper has a reference implementation
called <a href="https://github.com/ednolan/utfview">UtfView</a>
available on GitHub, which is a fork of Jonathan Wakely’s implementation
of P2728R6 as an implementation detail for libstdc++.</p>
<p>Versions of the interfaces provided by previous revisions of this
paper have also been implemented, and re-implemented, several times over
the last 5 years or so, as part of a proposed (but not yet accepted!)
Boost library, <a href="https://github.com/tzlaine/text">Boost.Text</a>.
Boost.Text has hundreds of stars on GitHub.</p>
<p>Both libraries have comprehensive tests.</p>
<h1 data-number="7" id="appendix-implementing-existing-practice-for-error-handling"><span class="header-section-number">7</span> Appendix: Implementing Existing
Practice for Error Handling<a href="#appendix-implementing-existing-practice-for-error-handling" class="self-link"></a></h1>
<h2 data-number="7.1" id="iconv"><span class="header-section-number">7.1</span>
<code class="sourceCode cpp">iconv</code><a href="#iconv" class="self-link"></a></h2>
<p>This function transcodes until it finds an invalid or truncated
sequence, erroring out if so and distinguishing those two cases using
errno. It uses an out-parameter to point to the beginning of the invalid
sequence.</p>
<div class="sourceCode" id="cb22"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> iconv_t <span class="op">{}</span>;</span>
<span id="cb22-2"><a href="#cb22-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-3"><a href="#cb22-3" aria-hidden="true" tabindex="-1"></a><span class="co">// For the sake of simplicity, this iconv only converts between UTF-8 and UTF-32.</span></span>
<span id="cb22-4"><a href="#cb22-4" aria-hidden="true" tabindex="-1"></a><span class="dt">size_t</span> iconv<span class="op">(</span>iconv_t cd, <span class="kw">const</span> <span class="dt">char</span><span class="op">**</span> inbuf, <span class="dt">size_t</span><span class="op">*</span> inbytesleft, <span class="dt">char</span><span class="op">**</span> outbuf,</span>
<span id="cb22-5"><a href="#cb22-5" aria-hidden="true" tabindex="-1"></a>             <span class="dt">size_t</span><span class="op">*</span> outbytesleft<span class="op">)</span> <span class="op">{</span></span>
<span id="cb22-6"><a href="#cb22-6" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(!</span>inbuf<span class="op">)</span> <span class="op">{</span></span>
<span id="cb22-7"><a href="#cb22-7" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb22-8"><a href="#cb22-8" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb22-9"><a href="#cb22-9" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(</span>inbuf <span class="op">&amp;&amp;</span> <span class="op">!*</span>inbuf<span class="op">)</span> <span class="op">{</span></span>
<span id="cb22-10"><a href="#cb22-10" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb22-11"><a href="#cb22-11" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb22-12"><a href="#cb22-12" aria-hidden="true" tabindex="-1"></a>  <span class="ot">assert</span><span class="op">(</span>inbytesleft<span class="op">)</span>;</span>
<span id="cb22-13"><a href="#cb22-13" aria-hidden="true" tabindex="-1"></a>  <span class="ot">assert</span><span class="op">(</span>outbuf<span class="op">)</span>;</span>
<span id="cb22-14"><a href="#cb22-14" aria-hidden="true" tabindex="-1"></a>  <span class="ot">assert</span><span class="op">(*</span>outbuf<span class="op">)</span>;</span>
<span id="cb22-15"><a href="#cb22-15" aria-hidden="true" tabindex="-1"></a>  <span class="ot">assert</span><span class="op">(</span>outbytesleft<span class="op">)</span>;</span>
<span id="cb22-16"><a href="#cb22-16" aria-hidden="true" tabindex="-1"></a>  <span class="kw">auto</span> view <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(*</span>inbuf, <span class="op">*</span>inbuf <span class="op">+</span> <span class="op">*</span>inbytesleft<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf32;</span>
<span id="cb22-17"><a href="#cb22-17" aria-hidden="true" tabindex="-1"></a>  <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>, end <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end;<span class="op">)</span> <span class="op">{</span></span>
<span id="cb22-18"><a href="#cb22-18" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">())</span> <span class="op">{</span></span>
<span id="cb22-19"><a href="#cb22-19" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(*</span>outbytesleft <span class="op">&lt;</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">char32_t</span><span class="op">))</span> <span class="op">{</span></span>
<span id="cb22-20"><a href="#cb22-20" aria-hidden="true" tabindex="-1"></a>        errno <span class="op">=</span> E2BIG;</span>
<span id="cb22-21"><a href="#cb22-21" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> <span class="kw">static_cast</span><span class="op">&lt;</span>std<span class="op">::</span><span class="dt">size_t</span><span class="op">&gt;(-</span><span class="dv">1</span><span class="op">)</span>;</span>
<span id="cb22-22"><a href="#cb22-22" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb22-23"><a href="#cb22-23" aria-hidden="true" tabindex="-1"></a>      <span class="dt">char32_t</span> c <span class="op">=</span> <span class="op">*</span>it;</span>
<span id="cb22-24"><a href="#cb22-24" aria-hidden="true" tabindex="-1"></a>      <span class="op">(*</span>outbuf<span class="op">)[</span><span class="dv">0</span><span class="op">]</span> <span class="op">=</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">char</span><span class="op">&gt;((</span>c <span class="op">&gt;&gt;</span> <span class="dv">24</span><span class="op">)</span> <span class="op">&amp;</span> <span class="bn">0xFF</span><span class="op">)</span>;</span>
<span id="cb22-25"><a href="#cb22-25" aria-hidden="true" tabindex="-1"></a>      <span class="op">(*</span>outbuf<span class="op">)[</span><span class="dv">1</span><span class="op">]</span> <span class="op">=</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">char</span><span class="op">&gt;((</span>c <span class="op">&gt;&gt;</span> <span class="dv">16</span><span class="op">)</span> <span class="op">&amp;</span> <span class="bn">0xFF</span><span class="op">)</span>;</span>
<span id="cb22-26"><a href="#cb22-26" aria-hidden="true" tabindex="-1"></a>      <span class="op">(*</span>outbuf<span class="op">)[</span><span class="dv">2</span><span class="op">]</span> <span class="op">=</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">char</span><span class="op">&gt;((</span>c <span class="op">&gt;&gt;</span> <span class="dv">8</span><span class="op">)</span> <span class="op">&amp;</span> <span class="bn">0xFF</span><span class="op">)</span>;</span>
<span id="cb22-27"><a href="#cb22-27" aria-hidden="true" tabindex="-1"></a>      <span class="op">(*</span>outbuf<span class="op">)[</span><span class="dv">3</span><span class="op">]</span> <span class="op">=</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">char</span><span class="op">&gt;(</span>c <span class="op">&amp;</span> <span class="bn">0xFF</span><span class="op">)</span>;</span>
<span id="cb22-28"><a href="#cb22-28" aria-hidden="true" tabindex="-1"></a>      <span class="op">*</span>outbuf <span class="op">+=</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">char32_t</span><span class="op">)</span>;</span>
<span id="cb22-29"><a href="#cb22-29" aria-hidden="true" tabindex="-1"></a>      <span class="op">*</span>outbytesleft <span class="op">-=</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">char32_t</span><span class="op">)</span>;</span>
<span id="cb22-30"><a href="#cb22-30" aria-hidden="true" tabindex="-1"></a>      <span class="op">++</span>it;</span>
<span id="cb22-31"><a href="#cb22-31" aria-hidden="true" tabindex="-1"></a>      std<span class="op">::</span><span class="dt">size_t</span> bytes_converted <span class="op">=</span> it<span class="op">.</span>base<span class="op">()</span> <span class="op">-</span> <span class="op">*</span>inbuf;</span>
<span id="cb22-32"><a href="#cb22-32" aria-hidden="true" tabindex="-1"></a>      <span class="op">*</span>inbytesleft <span class="op">-=</span> bytes_converted;</span>
<span id="cb22-33"><a href="#cb22-33" aria-hidden="true" tabindex="-1"></a>      <span class="op">*</span>inbuf <span class="op">=</span> it<span class="op">.</span>base<span class="op">()</span>;</span>
<span id="cb22-34"><a href="#cb22-34" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb22-35"><a href="#cb22-35" aria-hidden="true" tabindex="-1"></a>      transcoding_error e <span class="op">=</span> it<span class="op">.</span>success<span class="op">().</span>error<span class="op">()</span>;</span>
<span id="cb22-36"><a href="#cb22-36" aria-hidden="true" tabindex="-1"></a>      <span class="cf">switch</span> <span class="op">(</span>e<span class="op">)</span> <span class="op">{</span></span>
<span id="cb22-37"><a href="#cb22-37" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>truncated_utf8_sequence<span class="op">:</span> <span class="op">{</span></span>
<span id="cb22-38"><a href="#cb22-38" aria-hidden="true" tabindex="-1"></a>        errno <span class="op">=</span> EINVAL;</span>
<span id="cb22-39"><a href="#cb22-39" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span> <span class="cf">break</span>;</span>
<span id="cb22-40"><a href="#cb22-40" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>unexpected_utf8_continuation_byte<span class="op">:</span></span>
<span id="cb22-41"><a href="#cb22-41" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>overlong<span class="op">:</span></span>
<span id="cb22-42"><a href="#cb22-42" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>encoded_surrogate<span class="op">:</span></span>
<span id="cb22-43"><a href="#cb22-43" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>out_of_range<span class="op">:</span></span>
<span id="cb22-44"><a href="#cb22-44" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>invalid_utf8_leading_byte<span class="op">:</span> <span class="op">{</span></span>
<span id="cb22-45"><a href="#cb22-45" aria-hidden="true" tabindex="-1"></a>        errno <span class="op">=</span> EILSEQ;</span>
<span id="cb22-46"><a href="#cb22-46" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span> <span class="cf">break</span>;</span>
<span id="cb22-47"><a href="#cb22-47" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>unpaired_high_surrogate<span class="op">:</span></span>
<span id="cb22-48"><a href="#cb22-48" aria-hidden="true" tabindex="-1"></a>      <span class="cf">case</span> transcoding_error<span class="op">::</span>unpaired_low_surrogate<span class="op">:</span> <span class="op">{</span></span>
<span id="cb22-49"><a href="#cb22-49" aria-hidden="true" tabindex="-1"></a>        std<span class="op">::</span>unreachable<span class="op">()</span>;</span>
<span id="cb22-50"><a href="#cb22-50" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb22-51"><a href="#cb22-51" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb22-52"><a href="#cb22-52" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <span class="kw">static_cast</span><span class="op">&lt;</span>std<span class="op">::</span><span class="dt">size_t</span><span class="op">&gt;(-</span><span class="dv">1</span><span class="op">)</span>;</span>
<span id="cb22-53"><a href="#cb22-53" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb22-54"><a href="#cb22-54" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb22-55"><a href="#cb22-55" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb22-56"><a href="#cb22-56" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="7.2" id="icu-u_strfromutf8withsub"><span class="header-section-number">7.2</span> ICU
<code class="sourceCode cpp">u_strFromUTF8WithSub</code><a href="#icu-u_strfromutf8withsub" class="self-link"></a></h2>
<p>This function transcodes until it finds an invalid sequence and if it
does, it supports either erroring out or producing a substitution
character of the user’s choice. It also supports pre-flighting to
determine the required output buffer size, and relying on null
termination if the user doesn’t supply the size of the input buffer.</p>
<div class="sourceCode" id="cb23"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="kw">constexpr</span> <span class="dt">char16_t</span><span class="op">*</span> u_strFromUTF8WithSub<span class="op">(</span></span>
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a>    <span class="dt">char16_t</span><span class="op">*</span> dest, <span class="dt">int32_t</span> destCapacity, <span class="dt">int32_t</span><span class="op">*</span> pDestLength,</span>
<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a>    <span class="kw">const</span> <span class="dt">char</span><span class="op">*</span> src, <span class="dt">int32_t</span> srcLength, <span class="dt">char32_t</span> subchar,</span>
<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int32_t</span><span class="op">*</span> pNumSubstitutions, UErrorCode<span class="op">*</span> pErrorCode<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-5"><a href="#cb23-5" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(*</span>pErrorCode <span class="op">!=</span> U_ZERO_ERROR<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-6"><a href="#cb23-6" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="kw">nullptr</span>;</span>
<span id="cb23-7"><a href="#cb23-7" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb23-8"><a href="#cb23-8" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">((</span>src <span class="op">==</span> <span class="kw">nullptr</span> <span class="op">&amp;&amp;</span> srcLength <span class="op">!=</span> <span class="dv">0</span><span class="op">)</span> <span class="op">||</span> srcLength <span class="op">&lt;</span> <span class="op">-</span><span class="dv">1</span> <span class="op">||</span> <span class="op">(</span>destCapacity <span class="op">&lt;</span> <span class="dv">0</span><span class="op">)</span> <span class="op">||</span></span>
<span id="cb23-9"><a href="#cb23-9" aria-hidden="true" tabindex="-1"></a>      <span class="op">(</span>dest <span class="op">==</span> <span class="kw">nullptr</span> <span class="op">&amp;&amp;</span> destCapacity <span class="op">&gt;</span> <span class="dv">0</span><span class="op">)</span> <span class="op">||</span> subchar <span class="op">&gt;</span> <span class="bn">0x10ffff</span> <span class="op">||</span></span>
<span id="cb23-10"><a href="#cb23-10" aria-hidden="true" tabindex="-1"></a>      <span class="op">(</span><span class="bn">0xD800</span> <span class="op">&lt;=</span> subchar <span class="op">&amp;&amp;</span> subchar <span class="op">&lt;=</span> <span class="bn">0xDFFF</span><span class="op">))</span> <span class="op">{</span></span>
<span id="cb23-11"><a href="#cb23-11" aria-hidden="true" tabindex="-1"></a>    <span class="op">*</span>pErrorCode <span class="op">=</span> U_ILLEGAL_ARGUMENT_ERROR;</span>
<span id="cb23-12"><a href="#cb23-12" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="kw">nullptr</span>;</span>
<span id="cb23-13"><a href="#cb23-13" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb23-14"><a href="#cb23-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-15"><a href="#cb23-15" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(</span>pNumSubstitutions <span class="op">!=</span> <span class="kw">nullptr</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-16"><a href="#cb23-16" aria-hidden="true" tabindex="-1"></a>    <span class="op">*</span>pNumSubstitutions <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb23-17"><a href="#cb23-17" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb23-18"><a href="#cb23-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-19"><a href="#cb23-19" aria-hidden="true" tabindex="-1"></a>  <span class="kw">auto</span> impl <span class="op">=</span></span>
<span id="cb23-20"><a href="#cb23-20" aria-hidden="true" tabindex="-1"></a>    <span class="op">[&amp;](</span><span class="kw">auto</span> view<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-21"><a href="#cb23-21" aria-hidden="true" tabindex="-1"></a>      <span class="kw">auto</span> end <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>view<span class="op">)</span>;</span>
<span id="cb23-22"><a href="#cb23-22" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(</span>pDestLength<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-23"><a href="#cb23-23" aria-hidden="true" tabindex="-1"></a>        <span class="op">*</span>pDestLength <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb23-24"><a href="#cb23-24" aria-hidden="true" tabindex="-1"></a>        <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end; <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-25"><a href="#cb23-25" aria-hidden="true" tabindex="-1"></a>          <span class="op">*</span>pDestLength <span class="op">+=</span> it<span class="op">.</span>success<span class="op">()</span> <span class="op">?</span> <span class="dv">1</span> <span class="op">:</span> <span class="op">(</span>subchar <span class="op">&gt;</span> <span class="bn">0xFFFF</span> <span class="op">?</span> <span class="dv">2</span> <span class="op">:</span> <span class="dv">1</span><span class="op">)</span>;</span>
<span id="cb23-26"><a href="#cb23-26" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb23-27"><a href="#cb23-27" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb23-28"><a href="#cb23-28" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(</span>destCapacity <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-29"><a href="#cb23-29" aria-hidden="true" tabindex="-1"></a>        <span class="cf">return</span> dest;</span>
<span id="cb23-30"><a href="#cb23-30" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb23-31"><a href="#cb23-31" aria-hidden="true" tabindex="-1"></a>      <span class="dt">char16_t</span><span class="op">*</span> out_ptr <span class="op">=</span> dest;</span>
<span id="cb23-32"><a href="#cb23-32" aria-hidden="true" tabindex="-1"></a>      <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end; <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-33"><a href="#cb23-33" aria-hidden="true" tabindex="-1"></a>        <span class="kw">auto</span> write <span class="op">=</span></span>
<span id="cb23-34"><a href="#cb23-34" aria-hidden="true" tabindex="-1"></a>          <span class="op">[&amp;](</span><span class="dt">char16_t</span> c<span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-35"><a href="#cb23-35" aria-hidden="true" tabindex="-1"></a>            <span class="op">*</span>out_ptr <span class="op">=</span> c;</span>
<span id="cb23-36"><a href="#cb23-36" aria-hidden="true" tabindex="-1"></a>            <span class="op">++</span>out_ptr;</span>
<span id="cb23-37"><a href="#cb23-37" aria-hidden="true" tabindex="-1"></a>            <span class="op">--</span>destCapacity;</span>
<span id="cb23-38"><a href="#cb23-38" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span>;</span>
<span id="cb23-39"><a href="#cb23-39" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">())</span> <span class="op">{</span></span>
<span id="cb23-40"><a href="#cb23-40" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>destCapacity <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-41"><a href="#cb23-41" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> dest;</span>
<span id="cb23-42"><a href="#cb23-42" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb23-43"><a href="#cb23-43" aria-hidden="true" tabindex="-1"></a>          write<span class="op">(*</span>it<span class="op">)</span>;</span>
<span id="cb23-44"><a href="#cb23-44" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb23-45"><a href="#cb23-45" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>subchar <span class="op">==</span> <span class="op">-</span><span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-46"><a href="#cb23-46" aria-hidden="true" tabindex="-1"></a>            <span class="op">*</span>pErrorCode <span class="op">=</span> U_INVALID_CHAR_FOUND;</span>
<span id="cb23-47"><a href="#cb23-47" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> dest;</span>
<span id="cb23-48"><a href="#cb23-48" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb23-49"><a href="#cb23-49" aria-hidden="true" tabindex="-1"></a>            <span class="op">++*</span>pNumSubstitutions;</span>
<span id="cb23-50"><a href="#cb23-50" aria-hidden="true" tabindex="-1"></a>            <span class="cf">if</span> <span class="op">(</span>subchar <span class="op">&gt;</span> <span class="bn">0xFFFF</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-51"><a href="#cb23-51" aria-hidden="true" tabindex="-1"></a>              std<span class="op">::</span>array<span class="op">&lt;</span><span class="dt">char16_t</span>, <span class="dv">2</span><span class="op">&gt;</span> subchar_utf16<span class="op">{}</span>;</span>
<span id="cb23-52"><a href="#cb23-52" aria-hidden="true" tabindex="-1"></a>              std<span class="op">::</span>ranges<span class="op">::</span>copy<span class="op">(</span>std<span class="op">::</span>array<span class="op">{</span>subchar<span class="op">}</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf16, subchar_utf16<span class="op">.</span>data<span class="op">())</span>;</span>
<span id="cb23-53"><a href="#cb23-53" aria-hidden="true" tabindex="-1"></a>              write<span class="op">(</span>subchar_utf16<span class="op">[</span><span class="dv">0</span><span class="op">])</span>;</span>
<span id="cb23-54"><a href="#cb23-54" aria-hidden="true" tabindex="-1"></a>              <span class="cf">if</span> <span class="op">(</span>destCapacity <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-55"><a href="#cb23-55" aria-hidden="true" tabindex="-1"></a>                <span class="cf">return</span> dest;</span>
<span id="cb23-56"><a href="#cb23-56" aria-hidden="true" tabindex="-1"></a>              <span class="op">}</span></span>
<span id="cb23-57"><a href="#cb23-57" aria-hidden="true" tabindex="-1"></a>              write<span class="op">(</span>subchar_utf16<span class="op">[</span><span class="dv">1</span><span class="op">])</span>;</span>
<span id="cb23-58"><a href="#cb23-58" aria-hidden="true" tabindex="-1"></a>            <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb23-59"><a href="#cb23-59" aria-hidden="true" tabindex="-1"></a>              write<span class="op">(</span><span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">char16_t</span><span class="op">&gt;(</span>subchar<span class="op">))</span>;</span>
<span id="cb23-60"><a href="#cb23-60" aria-hidden="true" tabindex="-1"></a>            <span class="op">}</span></span>
<span id="cb23-61"><a href="#cb23-61" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb23-62"><a href="#cb23-62" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb23-63"><a href="#cb23-63" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb23-64"><a href="#cb23-64" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(</span>destCapacity <span class="op">&gt;</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-65"><a href="#cb23-65" aria-hidden="true" tabindex="-1"></a>        <span class="op">*</span>out_ptr <span class="op">=</span> <span class="dt">char16_t</span><span class="op">{}</span>;</span>
<span id="cb23-66"><a href="#cb23-66" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb23-67"><a href="#cb23-67" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> dest;</span>
<span id="cb23-68"><a href="#cb23-68" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span>;</span>
<span id="cb23-69"><a href="#cb23-69" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-70"><a href="#cb23-70" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(</span>srcLength <span class="op">==</span> <span class="op">-</span><span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb23-71"><a href="#cb23-71" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>null_term<span class="op">(</span>src<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf16<span class="op">)</span>;</span>
<span id="cb23-72"><a href="#cb23-72" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb23-73"><a href="#cb23-73" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>src, src <span class="op">+</span> srcLength<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf16<span class="op">)</span>;</span>
<span id="cb23-74"><a href="#cb23-74" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb23-75"><a href="#cb23-75" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="7.3" id="windows-multibytetowidechar"><span class="header-section-number">7.3</span> Windows
<code class="sourceCode cpp">MultiByteToWideChar</code><a href="#windows-multibytetowidechar" class="self-link"></a></h2>
<p>This function transcodes until it finds an invalid sequence. If it
does, it will error out if the user provides a flag; if this flag is not
provided, the behavior depends on the OS. Before Windows Vista, it
simply drops the invalid sequences; afterwards, it substitutes with
U+FFFD. It also supports pre-flighting to determine the required output
buffer size, and relying on null termination if the user doesn’t supply
the size of the input buffer.</p>
<div class="sourceCode" id="cb24"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="kw">constexpr</span> <span class="dt">int</span> MultiByteToWideChar<span class="op">(</span><span class="dt">unsigned</span> <span class="dt">int</span> CodePage, <span class="dt">unsigned</span> <span class="dt">long</span> dwFlags,</span>
<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a>                                  <span class="kw">const</span> <span class="dt">char</span><span class="op">*</span> lpMultiByteStr, <span class="dt">int</span> cbMultiByte,</span>
<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a>                                  <span class="dt">wchar_t</span><span class="op">*</span> lpWideCharStr, <span class="dt">int</span> cchWideChar<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a>  <span class="op">(</span><span class="dt">void</span><span class="op">)</span>CodePage; <span class="co">// For simplicity we only implement CP_UTF8</span></span>
<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a>  <span class="kw">auto</span> impl <span class="op">=</span> <span class="op">[&amp;](</span><span class="kw">auto</span> view<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-6"><a href="#cb24-6" aria-hidden="true" tabindex="-1"></a>    <span class="kw">auto</span> end <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>view<span class="op">)</span>;</span>
<span id="cb24-7"><a href="#cb24-7" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="op">(</span>cchWideChar <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-8"><a href="#cb24-8" aria-hidden="true" tabindex="-1"></a><span class="pp">#ifdef WINDOWS_XP</span></span>
<span id="cb24-9"><a href="#cb24-9" aria-hidden="true" tabindex="-1"></a>      <span class="dt">int</span> chars <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb24-10"><a href="#cb24-10" aria-hidden="true" tabindex="-1"></a>      <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end; <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-11"><a href="#cb24-11" aria-hidden="true" tabindex="-1"></a>        chars <span class="op">+=</span> it<span class="op">.</span>success<span class="op">()</span> <span class="op">?</span> <span class="dv">1</span> <span class="op">:</span> <span class="dv">0</span>;</span>
<span id="cb24-12"><a href="#cb24-12" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb24-13"><a href="#cb24-13" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> chars;</span>
<span id="cb24-14"><a href="#cb24-14" aria-hidden="true" tabindex="-1"></a><span class="pp">#else</span></span>
<span id="cb24-15"><a href="#cb24-15" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;(</span>std<span class="op">::</span>ranges<span class="op">::</span>distance<span class="op">(</span>view<span class="op">))</span>;</span>
<span id="cb24-16"><a href="#cb24-16" aria-hidden="true" tabindex="-1"></a><span class="pp">#endif</span></span>
<span id="cb24-17"><a href="#cb24-17" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb24-18"><a href="#cb24-18" aria-hidden="true" tabindex="-1"></a>      <span class="dt">wchar_t</span><span class="op">*</span> out_ptr <span class="op">=</span> lpWideCharStr;</span>
<span id="cb24-19"><a href="#cb24-19" aria-hidden="true" tabindex="-1"></a>      <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end; <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-20"><a href="#cb24-20" aria-hidden="true" tabindex="-1"></a>        <span class="kw">auto</span> write <span class="op">=</span></span>
<span id="cb24-21"><a href="#cb24-21" aria-hidden="true" tabindex="-1"></a>          <span class="op">[&amp;](</span><span class="kw">auto</span> c<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-22"><a href="#cb24-22" aria-hidden="true" tabindex="-1"></a>            <span class="op">*</span>out_ptr <span class="op">=</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">wchar_t</span><span class="op">&gt;(</span>c<span class="op">)</span>;</span>
<span id="cb24-23"><a href="#cb24-23" aria-hidden="true" tabindex="-1"></a>            <span class="op">++</span>out_ptr;</span>
<span id="cb24-24"><a href="#cb24-24" aria-hidden="true" tabindex="-1"></a>            <span class="op">--</span>cchWideChar;</span>
<span id="cb24-25"><a href="#cb24-25" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span>;</span>
<span id="cb24-26"><a href="#cb24-26" aria-hidden="true" tabindex="-1"></a>        <span class="cf">if</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">())</span> <span class="op">{</span></span>
<span id="cb24-27"><a href="#cb24-27" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>cchWideChar <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-28"><a href="#cb24-28" aria-hidden="true" tabindex="-1"></a>            SetLastError<span class="op">(</span>ERROR_INSUFFICIENT_BUFFER<span class="op">)</span>;</span>
<span id="cb24-29"><a href="#cb24-29" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb24-30"><a href="#cb24-30" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb24-31"><a href="#cb24-31" aria-hidden="true" tabindex="-1"></a>          write<span class="op">(*</span>it<span class="op">)</span>;</span>
<span id="cb24-32"><a href="#cb24-32" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb24-33"><a href="#cb24-33" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>dwFlags <span class="op">==</span> MB_ERR_INVALID_CHARS<span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-34"><a href="#cb24-34" aria-hidden="true" tabindex="-1"></a>            SetLastError<span class="op">(</span>ERROR_NO_UNICODE_TRANSLATION<span class="op">)</span>;</span>
<span id="cb24-35"><a href="#cb24-35" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb24-36"><a href="#cb24-36" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb24-37"><a href="#cb24-37" aria-hidden="true" tabindex="-1"></a><span class="pp">#ifndef WINDOWS_XP</span></span>
<span id="cb24-38"><a href="#cb24-38" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="op">(</span>cchWideChar <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-39"><a href="#cb24-39" aria-hidden="true" tabindex="-1"></a>            SetLastError<span class="op">(</span>ERROR_INSUFFICIENT_BUFFER<span class="op">)</span>;</span>
<span id="cb24-40"><a href="#cb24-40" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="dv">0</span>;</span>
<span id="cb24-41"><a href="#cb24-41" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb24-42"><a href="#cb24-42" aria-hidden="true" tabindex="-1"></a>          write<span class="op">(*</span>it<span class="op">)</span>;</span>
<span id="cb24-43"><a href="#cb24-43" aria-hidden="true" tabindex="-1"></a><span class="pp">#endif</span></span>
<span id="cb24-44"><a href="#cb24-44" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb24-45"><a href="#cb24-45" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb24-46"><a href="#cb24-46" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;(</span>out_ptr <span class="op">-</span> lpWideCharStr<span class="op">)</span>;</span>
<span id="cb24-47"><a href="#cb24-47" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb24-48"><a href="#cb24-48" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span>;</span>
<span id="cb24-49"><a href="#cb24-49" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> <span class="op">(</span>cbMultiByte <span class="op">==</span> <span class="op">-</span><span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-50"><a href="#cb24-50" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><span class="kw">sizeof</span><span class="op">(</span><span class="dt">wchar_t</span><span class="op">)</span> <span class="op">==</span> <span class="dv">2</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-51"><a href="#cb24-51" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>null_term<span class="op">(</span>lpMultiByteStr<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf16<span class="op">)</span>;</span>
<span id="cb24-52"><a href="#cb24-52" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb24-53"><a href="#cb24-53" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>null_term<span class="op">(</span>lpMultiByteStr<span class="op">)</span> <span class="op">|</span> std<span class="op">::</span>uc<span class="op">::</span>to_utf32<span class="op">)</span>;</span>
<span id="cb24-54"><a href="#cb24-54" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb24-55"><a href="#cb24-55" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb24-56"><a href="#cb24-56" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span><span class="kw">sizeof</span><span class="op">(</span><span class="dt">wchar_t</span><span class="op">)</span> <span class="op">==</span> <span class="dv">2</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb24-57"><a href="#cb24-57" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>lpMultiByteStr, lpMultiByteStr <span class="op">+</span> cbMultiByte<span class="op">)</span> <span class="op">|</span></span>
<span id="cb24-58"><a href="#cb24-58" aria-hidden="true" tabindex="-1"></a>                  std<span class="op">::</span>uc<span class="op">::</span>to_utf16<span class="op">)</span>;</span>
<span id="cb24-59"><a href="#cb24-59" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb24-60"><a href="#cb24-60" aria-hidden="true" tabindex="-1"></a>      <span class="cf">return</span> impl<span class="op">(</span>std<span class="op">::</span>ranges<span class="op">::</span>subrange<span class="op">(</span>lpMultiByteStr, lpMultiByteStr <span class="op">+</span> cbMultiByte<span class="op">)</span> <span class="op">|</span></span>
<span id="cb24-61"><a href="#cb24-61" aria-hidden="true" tabindex="-1"></a>                  std<span class="op">::</span>uc<span class="op">::</span>to_utf32<span class="op">)</span>;</span>
<span id="cb24-62"><a href="#cb24-62" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb24-63"><a href="#cb24-63" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb24-64"><a href="#cb24-64" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h2 data-number="7.4" id="python-decode"><span class="header-section-number">7.4</span> Python
<code class="sourceCode cpp">decode<span class="op">()</span></code><a href="#python-decode" class="self-link"></a></h2>
<p>This is a C++ analog of Python’s
<code class="sourceCode cpp">decode</code> function. It accepts a <code class="sourceCode cpp">std<span class="op">::</span>basic_string_view</code>,
transcodes it from UTF-8, returns a new transcoded <code class="sourceCode cpp">std<span class="op">::</span>basic_string</code>,
and throws an exception if it encounters invalid UTF which explains the
problem and provides the position of the offending sequence.</p>
<div class="sourceCode" id="cb25"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">typename</span> FromChar, <span class="kw">typename</span> ToChar<span class="op">&gt;</span></span>
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a>std<span class="op">::</span>basic_string<span class="op">&lt;</span>ToChar<span class="op">&gt;</span> decode<span class="op">(</span>std<span class="op">::</span>basic_string_view<span class="op">&lt;</span>FromChar<span class="op">&gt;</span> input<span class="op">)</span> <span class="op">{</span></span>
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a>  std<span class="op">::</span>basic_string<span class="op">&lt;</span>ToChar<span class="op">&gt;</span> result;</span>
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a>  result<span class="op">.</span>reserve<span class="op">(</span>input<span class="op">.</span>size<span class="op">())</span>; <span class="co">// like what size_hint does</span></span>
<span id="cb25-5"><a href="#cb25-5" aria-hidden="true" tabindex="-1"></a>  <span class="kw">auto</span> view <span class="op">=</span> input <span class="op">|</span> to_utf<span class="op">&lt;</span>ToChar<span class="op">&gt;</span>;</span>
<span id="cb25-6"><a href="#cb25-6" aria-hidden="true" tabindex="-1"></a>  <span class="cf">for</span> <span class="op">(</span><span class="kw">auto</span> it <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>begin<span class="op">(</span>view<span class="op">)</span>, end <span class="op">=</span> std<span class="op">::</span>ranges<span class="op">::</span>end<span class="op">(</span>view<span class="op">)</span>; it <span class="op">!=</span> end;</span>
<span id="cb25-7"><a href="#cb25-7" aria-hidden="true" tabindex="-1"></a>       <span class="op">++</span>it<span class="op">)</span> <span class="op">{</span></span>
<span id="cb25-8"><a href="#cb25-8" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">())</span> <span class="op">{</span></span>
<span id="cb25-9"><a href="#cb25-9" aria-hidden="true" tabindex="-1"></a>      result<span class="op">.</span>push_back<span class="op">(*</span>it<span class="op">)</span>;</span>
<span id="cb25-10"><a href="#cb25-10" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb25-11"><a href="#cb25-11" aria-hidden="true" tabindex="-1"></a>      <span class="kw">auto</span> pos_curr <span class="op">=</span> it<span class="op">.</span>base<span class="op">()</span> <span class="op">-</span> input<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb25-12"><a href="#cb25-12" aria-hidden="true" tabindex="-1"></a>      <span class="kw">auto</span> it2 <span class="op">=</span> it;</span>
<span id="cb25-13"><a href="#cb25-13" aria-hidden="true" tabindex="-1"></a>      <span class="kw">auto</span> pos_next <span class="op">=</span> <span class="op">(++</span>it2<span class="op">).</span>base<span class="op">()</span> <span class="op">-</span> input<span class="op">.</span>begin<span class="op">()</span>;</span>
<span id="cb25-14"><a href="#cb25-14" aria-hidden="true" tabindex="-1"></a>      std<span class="op">::</span>ostringstream ss;</span>
<span id="cb25-15"><a href="#cb25-15" aria-hidden="true" tabindex="-1"></a>      ss <span class="op">&lt;&lt;</span> <span class="st">&quot;can&#39;t decode &quot;</span>;</span>
<span id="cb25-16"><a href="#cb25-16" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(</span>pos_next <span class="op">&gt;</span> pos_curr <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb25-17"><a href="#cb25-17" aria-hidden="true" tabindex="-1"></a>        ss <span class="op">&lt;&lt;</span> <span class="st">&quot;characters&quot;</span>;</span>
<span id="cb25-18"><a href="#cb25-18" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
<span id="cb25-19"><a href="#cb25-19" aria-hidden="true" tabindex="-1"></a>        ss <span class="op">&lt;&lt;</span> <span class="st">&quot;character 0x&quot;</span> <span class="op">&lt;&lt;</span> std<span class="op">::</span>hex</span>
<span id="cb25-20"><a href="#cb25-20" aria-hidden="true" tabindex="-1"></a>           <span class="op">&lt;&lt;</span> <span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">unsigned</span> <span class="dt">int</span><span class="op">&gt;(</span><span class="kw">static_cast</span><span class="op">&lt;</span><span class="dt">unsigned</span> <span class="dt">char</span><span class="op">&gt;(*</span>it<span class="op">.</span>base<span class="op">()))</span></span>
<span id="cb25-21"><a href="#cb25-21" aria-hidden="true" tabindex="-1"></a>           <span class="op">&lt;&lt;</span> std<span class="op">::</span>dec;</span>
<span id="cb25-22"><a href="#cb25-22" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb25-23"><a href="#cb25-23" aria-hidden="true" tabindex="-1"></a>      ss <span class="op">&lt;&lt;</span> <span class="st">&quot; in position &quot;</span> <span class="op">&lt;&lt;</span> pos_curr;</span>
<span id="cb25-24"><a href="#cb25-24" aria-hidden="true" tabindex="-1"></a>      <span class="cf">if</span> <span class="op">(</span>pos_next <span class="op">&gt;</span> pos_curr <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb25-25"><a href="#cb25-25" aria-hidden="true" tabindex="-1"></a>        ss <span class="op">&lt;&lt;</span> <span class="st">&quot;-&quot;</span> <span class="op">&lt;&lt;</span> pos_next <span class="op">-</span> <span class="dv">1</span>;</span>
<span id="cb25-26"><a href="#cb25-26" aria-hidden="true" tabindex="-1"></a>      <span class="op">}</span></span>
<span id="cb25-27"><a href="#cb25-27" aria-hidden="true" tabindex="-1"></a>      ss <span class="op">&lt;&lt;</span> <span class="st">&quot;: &quot;</span>;</span>
<span id="cb25-28"><a href="#cb25-28" aria-hidden="true" tabindex="-1"></a>      ss <span class="op">&lt;&lt;</span> <span class="op">[&amp;]</span> <span class="op">{</span></span>
<span id="cb25-29"><a href="#cb25-29" aria-hidden="true" tabindex="-1"></a>        <span class="cf">switch</span> <span class="op">(</span>it<span class="op">.</span>success<span class="op">().</span>error<span class="op">())</span> <span class="op">{</span></span>
<span id="cb25-30"><a href="#cb25-30" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>truncated_utf8_sequence<span class="op">:</span></span>
<span id="cb25-31"><a href="#cb25-31" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <span class="st">&quot;unexpected end of data&quot;</span>;</span>
<span id="cb25-32"><a href="#cb25-32" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>unpaired_high_surrogate<span class="op">:</span></span>
<span id="cb25-33"><a href="#cb25-33" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>unpaired_low_surrogate<span class="op">:</span></span>
<span id="cb25-34"><a href="#cb25-34" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <span class="st">&quot;illegal UTF-16 surrogate&quot;</span>;</span>
<span id="cb25-35"><a href="#cb25-35" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>unexpected_utf8_continuation_byte<span class="op">:</span></span>
<span id="cb25-36"><a href="#cb25-36" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>invalid_utf8_leading_byte<span class="op">:</span></span>
<span id="cb25-37"><a href="#cb25-37" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <span class="st">&quot;invalid start byte&quot;</span>;</span>
<span id="cb25-38"><a href="#cb25-38" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>encoded_surrogate<span class="op">:</span></span>
<span id="cb25-39"><a href="#cb25-39" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>std<span class="op">::</span>same_as<span class="op">&lt;</span>FromChar, <span class="dt">char32_t</span><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb25-40"><a href="#cb25-40" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="st">&quot;code point in surrogate code point range(0xd800, 0xe000)&quot;</span>;</span>
<span id="cb25-41"><a href="#cb25-41" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb25-42"><a href="#cb25-42" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>overlong<span class="op">:</span></span>
<span id="cb25-43"><a href="#cb25-43" aria-hidden="true" tabindex="-1"></a>          <span class="cf">if</span> <span class="kw">constexpr</span> <span class="op">(</span>std<span class="op">::</span>same_as<span class="op">&lt;</span>FromChar, <span class="dt">char32_t</span><span class="op">&gt;)</span> <span class="op">{</span></span>
<span id="cb25-44"><a href="#cb25-44" aria-hidden="true" tabindex="-1"></a>            <span class="cf">return</span> <span class="st">&quot;code point not in range(0x110000)&quot;</span>;</span>
<span id="cb25-45"><a href="#cb25-45" aria-hidden="true" tabindex="-1"></a>          <span class="op">}</span></span>
<span id="cb25-46"><a href="#cb25-46" aria-hidden="true" tabindex="-1"></a>        <span class="cf">case</span> transcoding_error<span class="op">::</span>out_of_range<span class="op">:</span></span>
<span id="cb25-47"><a href="#cb25-47" aria-hidden="true" tabindex="-1"></a>          <span class="cf">return</span> <span class="st">&quot;invalid continuation byte&quot;</span>;</span>
<span id="cb25-48"><a href="#cb25-48" aria-hidden="true" tabindex="-1"></a>        <span class="op">}</span></span>
<span id="cb25-49"><a href="#cb25-49" aria-hidden="true" tabindex="-1"></a>        std<span class="op">::</span>unreachable<span class="op">()</span>;</span>
<span id="cb25-50"><a href="#cb25-50" aria-hidden="true" tabindex="-1"></a>      <span class="op">}()</span>;</span>
<span id="cb25-51"><a href="#cb25-51" aria-hidden="true" tabindex="-1"></a>      <span class="cf">throw</span> std<span class="op">::</span>runtime_error<span class="op">(</span>std<span class="op">::</span>move<span class="op">(</span>ss<span class="op">).</span>str<span class="op">())</span>;</span>
<span id="cb25-52"><a href="#cb25-52" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
<span id="cb25-53"><a href="#cb25-53" aria-hidden="true" tabindex="-1"></a>  <span class="op">}</span></span>
<span id="cb25-54"><a href="#cb25-54" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> result;</span>
<span id="cb25-55"><a href="#cb25-55" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<h1 data-number="8" id="special-thanks"><span class="header-section-number">8</span> Special Thanks<a href="#special-thanks" class="self-link"></a></h1>
<p>Zach Laine, for writing revisions one through six of the paper and
implementing Boost.Text.</p>
<p>Jonathan Wakely, for implementing P2728R6, and design guidance.</p>
<p>Robert Leahy, for extensive design guidance including suggesting the
error handling approach introduced in R7.</p>
<p>Gašper Ažman, for suggesting the use of <code class="sourceCode cpp">std<span class="op">::</span>expected<span class="op">&lt;</span><span class="dt">void</span>, E<span class="op">&gt;</span></code>.</p>
<h1 data-number="9" id="bibliography"><span class="header-section-number">9</span> References<a href="#bibliography" class="self-link"></a></h1>
<div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="1" role="doc-bibliography">
<div id="ref-P1629R1" class="csl-entry" role="doc-biblioentry">
[P1629R1] JeanHeyd Meneide. 2020-03-02. Transcoding the world - Standard
Text Encoding. <a href="https://wg21.link/p1629r1"><div class="csl-block">https://wg21.link/p1629r1</div></a>
</div>
<div id="ref-P2727R4" class="csl-entry" role="doc-biblioentry">
[P2727R4] Zach Laine. 2024-02-05. std::iterator_interface. <a href="https://wg21.link/p2727r4"><div class="csl-block">https://wg21.link/p2727r4</div></a>
</div>
<div id="ref-P2871R3" class="csl-entry" role="doc-biblioentry">
[P2871R3] Alisdair Meredith. 2023-12-18. Remove Deprecated Unicode
Conversion Facets From C++26. <a href="https://wg21.link/p2871r3"><div class="csl-block">https://wg21.link/p2871r3</div></a>
</div>
<div id="ref-P2873R2" class="csl-entry" role="doc-biblioentry">
[P2873R2] Alisdair Meredith, Tom Honermann. 2024-07-06. Remove
Deprecated locale category facets for Unicode from C++26. <a href="https://wg21.link/p2873r2"><div class="csl-block">https://wg21.link/p2873r2</div></a>
</div>
<div id="ref-P2996R5" class="csl-entry" role="doc-biblioentry">
[P2996R5] Barry Revzin, Wyatt Childers, Peter Dimov, Andrew Sutton,
Faisal Vali, Daveed Vandevoorde, Dan Katz. 2024-08-14. Reflection for
C++26. <a href="https://wg21.link/p2996r5"><div class="csl-block">https://wg21.link/p2996r5</div></a>
</div>
<div id="ref-P3117R0" class="csl-entry" role="doc-biblioentry">
[P3117R0] Zach Laine, Barry Revzin. 2024-02-15. Extending Conditionally
Borrowed. <a href="https://wg21.link/p3117r0"><div class="csl-block">https://wg21.link/p3117r0</div></a>
</div>
</div>
</div>
</div>
</body>
</html>
