] [--json]` Lists connected devices, running emulators, and available simulators across all platforms in a single call. ### Two approaches analysis The spec analyzes two discovery approaches and recommends the project-free one: | | MSBuild (`dotnet run --list-devices`) | Native CLI (`maui device list`) | |---|---|---| | Project required | Yes | **No** | | Cross-platform | One TFM at a time | All platforms at once | | Speed | Slower (MSBuild eval) | Fast (<2s) | | ID compatibility | Source of truth | Same native IDs | ### Scenarios requiring project-free discovery 1. AI agent bootstrapping (no `.csproj` yet) 2. IDE startup (device picker before project loads) 3. Environment validation ("can I see my phone?") 4. CI pipeline setup (check emulator before build) 5. Multi-project solutions (unified view) 6. Cross-platform overview (all devices at once) ### Recommended approach `maui device list` uses direct native tool invocation (`adb devices`, `simctl list`, `devicectl list`). Device IDs are compatible with `dotnet run --device`, making them complementary: ``` maui device list β "What devices exist on this machine?" dotnet run --list-devices β "What devices can run this project?" ``` ### Other changes - Added references to `ComputeAvailableDevices` MSBuild targets in [dotnet/android](https://github.com/dotnet/android) and [dotnet/macios](https://github.com/dotnet/macios) - Updated AI agent workflow example to include device discovery step - Fixed AppleDev.Tools reference (xcdevice β devicectl) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/design/cli.md | 179 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 174 insertions(+), 5 deletions(-) diff --git a/docs/design/cli.md b/docs/design/cli.md index c61fbb07a61f..ec396c2dba94 100644 --- a/docs/design/cli.md +++ b/docs/design/cli.md @@ -1,7 +1,7 @@ --- description: "Design document for the maui CLI tool" date: 2026-01-07 -updated: 2026-02-26 +updated: 2026-02-27 --- # `maui` CLI Design Document @@ -197,6 +197,170 @@ All commands use consistent exit codes: | 4 | Network error (download failed) | | 5 | Resource not found | +## Device Discovery + +### `maui device list` + +Lists connected devices, running emulators, and available simulators +across all platforms from a single command. + +**Usage:** + +```bash +maui device list [--platform
] [--json]
+```
+
+**Options:**
+
+- `--platform True if should be treated as C# expression, false for markup extension.
public bool IsExpression { get; init; }
-
+
/// True if both markup extension and property exist (ambiguous).
public bool IsAmbiguous { get; init; }
-
+
/// The bare identifier name (for diagnostic reporting).
public string? Name { get; init; }
}
@@ -274,11 +274,11 @@ public static BareIdentifierResult ClassifyExpression(string? markupString, Func
if (isMarkup)
{
// Markup extension wins (backward compatible), but check for ambiguity
- return new BareIdentifierResult
- {
- IsExpression = false,
- IsAmbiguous = isProperty,
- Name = name
+ return new BareIdentifierResult
+ {
+ IsExpression = false,
+ IsAmbiguous = isProperty,
+ Name = name
};
}
@@ -315,7 +315,7 @@ public static (string? prefix, string name) ParseBareIdentifier(string value)
var match = BareIdentifierPattern.Match(value.Trim());
if (!match.Success)
return (null, value);
-
+
var prefix = match.Groups[1].Success ? match.Groups[1].Value : null;
var name = match.Groups[2].Value;
return (prefix, name);
@@ -350,7 +350,7 @@ public static (string? prefix, string name) ParseBareIdentifier(string value)
static bool IsKnownMarkupExtension(string name)
{
- return KnownMarkupExtensions.Contains(name)
+ return KnownMarkupExtensions.Contains(name)
|| KnownMarkupExtensions.Contains(name + "Extension");
}
@@ -363,7 +363,7 @@ static bool IsKnownMarkupExtension(string name)
public static string GetExpressionCode(string value)
{
var trimmed = value.Trim();
-
+
// Remove outer braces
string code;
if (IsExplicitExpression(value))
@@ -394,17 +394,17 @@ static string TransformOperatorAliases(string code)
{
// Replace word-based aliases with C# operators (case-insensitive, with spaces)
var result = code;
-
+
// Logical operators
result = ReplaceWordOperator(result, " AND ", " && ");
result = ReplaceWordOperator(result, " OR ", " || ");
-
+
// Comparison operators (must do multi-char first to avoid partial replacements)
result = ReplaceWordOperator(result, " LTE ", " <= ");
result = ReplaceWordOperator(result, " GTE ", " >= ");
result = ReplaceWordOperator(result, " LT ", " < ");
result = ReplaceWordOperator(result, " GT ", " > ");
-
+
return result;
}
@@ -415,7 +415,7 @@ static string ReplaceWordOperator(string code, string word, string replacement)
{
var result = new StringBuilder();
int i = 0;
-
+
while (i < code.Length)
{
// Skip string literals (single or double quoted)
@@ -445,7 +445,7 @@ static string ReplaceWordOperator(string code, string word, string replacement)
}
continue;
}
-
+
// Check for word match (case-insensitive)
if (i + word.Length <= code.Length)
{
@@ -457,11 +457,11 @@ static string ReplaceWordOperator(string code, string word, string replacement)
continue;
}
}
-
+
result.Append(code[i]);
i++;
}
-
+
return result.ToString();
}
@@ -523,7 +523,7 @@ static string TransformQuotes(string code)
if (i < code.Length && code[i] == '\'')
{
i++; // Skip closing quote
-
+
var contentStr = content.ToString();
// Always convert to string literal (double quotes)
@@ -542,7 +542,7 @@ static string TransformQuotes(string code)
{
backslashCount++;
}
-
+
if (backslashCount % 2 == 1)
{
// Odd backslashes: quote is already escaped
@@ -609,10 +609,10 @@ public static string TransformQuotesWithSemantics(string code, Compilation compi
foreach (var literal in stringLiterals)
{
var expectedType = DetermineExpectedType(literal, compilation, contextTypes);
-
+
// If expected type is char, convert back to char literal
bool shouldBeChar = expectedType?.SpecialType == SpecialType.System_Char;
-
+
if (shouldBeChar)
{
// Get the string content and create a char literal
@@ -648,7 +648,7 @@ static string EscapeForChar(string value)
{
if (value.Length != 1)
return value;
-
+
return value[0] switch
{
'\'' => "\\'",
@@ -668,7 +668,7 @@ static string EscapeForChar(string value)
{
// Walk up to find the context
var parent = literal.Parent;
-
+
while (parent != null)
{
switch (parent)
@@ -766,19 +766,31 @@ static string EscapeForChar(string value)
///
/// Escapes a string for use in a C# string literal.
///
- static string EscapeForString(string value)
+ internal static string EscapeForString(string value)
{
var sb = new StringBuilder();
foreach (var c in value)
{
switch (c)
{
- case '"': sb.Append("\\\""); break;
- case '\\': sb.Append("\\\\"); break;
- case '\n': sb.Append("\\n"); break;
- case '\r': sb.Append("\\r"); break;
- case '\t': sb.Append("\\t"); break;
- default: sb.Append(c); break;
+ case '"':
+ sb.Append("\\\"");
+ break;
+ case '\\':
+ sb.Append("\\\\");
+ break;
+ case '\n':
+ sb.Append("\\n");
+ break;
+ case '\r':
+ sb.Append("\\r");
+ break;
+ case '\t':
+ sb.Append("\\t");
+ break;
+ default:
+ sb.Append(c);
+ break;
}
}
return sb.ToString();
diff --git a/src/Controls/src/SourceGen/KnownMarkups.cs b/src/Controls/src/SourceGen/KnownMarkups.cs
index c9ade31c9a2a..5efec5a76147 100644
--- a/src/Controls/src/SourceGen/KnownMarkups.cs
+++ b/src/Controls/src/SourceGen/KnownMarkups.cs
@@ -271,7 +271,7 @@ public static bool ProvideValueForDynamicResourceExtension(ElementNode markupNod
if (key is null)
throw new Exception();
- value = $"new global::Microsoft.Maui.Controls.Internals.DynamicResource(\"{key}\")";
+ value = $"new global::Microsoft.Maui.Controls.Internals.DynamicResource(\"{CSharpExpressionHelpers.EscapeForString(key)}\")";
return true;
}
diff --git a/src/Controls/src/SourceGen/SetPropertyHelpers.cs b/src/Controls/src/SourceGen/SetPropertyHelpers.cs
index a1c2897ca310..9d098dbace03 100644
--- a/src/Controls/src/SourceGen/SetPropertyHelpers.cs
+++ b/src/Controls/src/SourceGen/SetPropertyHelpers.cs
@@ -19,7 +19,7 @@ public static void SetPropertyValue(IndentedTextWriter writer, ILocalValue paren
if (propertyName.Equals(XmlName._CreateContent))
return; //already handled
-
+
//TODO I believe ContentProperty should be resolved here
var localName = propertyName.LocalName;
bool attached = false;
@@ -144,7 +144,8 @@ public static void AddToResourceDictionary(IndentedTextWriter writer, ILocalValu
context.KeysInRD[parentVar] = [];
context.KeysInRD[parentVar].Add((((ValueNode)keyNode).Value as string)!);
var key = ((ValueNode)keyNode).Value as string;
- writer.WriteLine($"{parentVar.ValueAccessor}[\"{key}\"] = {(getNodeValue(node, context.Compilation.ObjectType)).ValueAccessor};");
+ var escapedKey = CSharpExpressionHelpers.EscapeForString(key!);
+ writer.WriteLine($"{parentVar.ValueAccessor}[\"{escapedKey}\"] = {(getNodeValue(node, context.Compilation.ObjectType)).ValueAccessor};");
return;
}
writer.WriteLine($"{parentVar.ValueAccessor}.Add({getNodeValue(node, context.Compilation.ObjectType).ValueAccessor});");
@@ -283,7 +284,7 @@ static void ConnectEvent(IndentedTextWriter writer, ILocalValue parentVar, strin
static bool CanSetValue(IFieldSymbol? bpFieldSymbol, INode node, ITypeSymbol parentType, string localName, SourceGenContext context, NodeSGExtensions.GetNodeValueDelegate getNodeValue, out string? explicitPropertyName)
{
explicitPropertyName = null;
-
+
if (bpFieldSymbol != null)
{
// Normal BP case - apply existing logic
@@ -311,13 +312,13 @@ static bool CanSetValue(IFieldSymbol? bpFieldSymbol, INode node, ITypeSymbol par
if (localVar.Type.InheritsFrom(bpTypeAndConverter?.type!, context))
return true;
-
+
if (bpFieldSymbol.Type.IsInterface() && localVar.Type.Implements(bpTypeAndConverter?.type!))
return true;
return false;
}
-
+
// Heuristic: If BP is null but the type has a property/field with a BindablePropertyAttribute,
// assume the BP will be generated by another source generator
// Only apply this for non-BindingBase nodes (CanSetBinding handles BindingBase)
@@ -325,25 +326,25 @@ static bool CanSetValue(IFieldSymbol? bpFieldSymbol, INode node, ITypeSymbol par
{
return parentType.HasBindablePropertyHeuristic(localName, context, out explicitPropertyName);
}
-
+
return false;
}
static void SetValue(IndentedTextWriter writer, ILocalValue parentVar, IFieldSymbol? bpFieldSymbol, string localName, string? explicitPropertyName, INode node, SourceGenContext context, NodeSGExtensions.GetNodeValueDelegate getNodeValue)
{
// Determine bindable property name: use BP field symbol if available, otherwise use heuristic
- var bpName = bpFieldSymbol != null
- ? bpFieldSymbol.ToFQDisplayString()
+ var bpName = bpFieldSymbol != null
+ ? bpFieldSymbol.ToFQDisplayString()
: $"{parentVar.Type.ToFQDisplayString()}.{explicitPropertyName ?? $"{localName}Property"}";
-
+
var pType = bpFieldSymbol?.GetBPTypeAndConverter(context)?.type;
var property = bpFieldSymbol == null ? parentVar.Type.GetAllProperties(localName, context).FirstOrDefault() : null;
-
+
if (node is ValueNode valueNode)
{
using (context.ProjectItem.EnableLineInfo ? PrePost.NewLineInfo(writer, (IXmlLineInfo)node, context.ProjectItem) : PrePost.NoBlock())
{
- var valueString = bpFieldSymbol != null
+ var valueString = bpFieldSymbol != null
? valueNode.ConvertTo(bpFieldSymbol, writer, context, parentVar)
: (property != null ? valueNode.ConvertTo(property, writer, context, parentVar) : getNodeValue(node, context.Compilation.ObjectType).ValueAccessor);
writer.WriteLine($"{parentVar.ValueAccessor}.SetValue({bpName}, {valueString});");
@@ -355,7 +356,7 @@ static void SetValue(IndentedTextWriter writer, ILocalValue parentVar, IFieldSym
{
var localVar = getNodeValue(elementNode, context.Compilation.ObjectType);
var cast = string.Empty;
-
+
if (bpFieldSymbol != null)
{
// BP case: check for double implicit conversion first
@@ -376,7 +377,7 @@ static void SetValue(IndentedTextWriter writer, ILocalValue parentVar, IFieldSym
{
cast = $"({property.Type.ToFQDisplayString()})";
}
-
+
writer.WriteLine($"{parentVar.ValueAccessor}.SetValue({bpName}, {cast}{localVar.ValueAccessor});");
}
}
@@ -456,7 +457,7 @@ .. toType.GetMembers().OfType
/// Result from the Travel Planner Agent - raw extraction of user intent.
-/// These values should be extracted exactly as the user stated them, with no interpretation or expansion.
+/// Short JSON names (place/days/language) reduce misspelling by small language models.
///
public record TravelPlanResult(
- [property: DisplayName("destinationName")]
- [property: Description("The exact place/location name as written in the user's request. Extract the raw text only - do NOT interpret, expand, or look up actual landmarks. Example: 'Maui' not 'Maui, Hawaii' or 'Haleakala National Park'.")]
+ [property: JsonPropertyName("place")]
+ [property: Description("The destination name mentioned by the user.")]
string DestinationName,
- [property: DisplayName("dayCount")]
- [property: Description("The exact number of days mentioned by the user. Use 3 as default only if no number is specified.")]
+ [property: JsonPropertyName("days")]
+ [property: Description("Number of days for the trip. Default is 3.")]
int DayCount,
- [property: DisplayName("language")]
- [property: Description("The exact output language mentioned by the user. Use 'English' as default only if no language is specified.")]
+ [property: JsonPropertyName("language")]
+ [property: Description("Output language for the itinerary. Default is English.")]
string Language);
///
/// Result from the Researcher Agent - the best matching destination (for JSON schema).
///
internal record DestinationMatchResult(
- [property: DisplayName("matchedDestinationName")]
+ [property: JsonPropertyName("dest")]
[property: Description("The exact name of the best matching destination from the available list.")]
string MatchedDestinationName,
- [property: DisplayName("matchedDestinationDescription")]
+ [property: JsonPropertyName("desc")]
[property: Description("A brief description of the matched destination, based on the information provided in the additional context.")]
string MatchedDestinationDescription);
diff --git a/src/AI/samples/Essentials.AI.Sample/App.xaml b/src/AI/samples/Essentials.AI.Sample/App.xaml
index bcb92097e3ff..56d7b8d896d3 100644
--- a/src/AI/samples/Essentials.AI.Sample/App.xaml
+++ b/src/AI/samples/Essentials.AI.Sample/App.xaml
@@ -15,6 +15,7 @@
Rk@B~ltkf(T>XLy$9c%Bz{kym+*_xXVTfX~k7%bG(Vo7z)$3-^3(X~{0x33KZ~Eu&*A6t-}2w_^Z5Dv z0)8RCh+oVv _U(2uK*Yg|rjr?YQ3%`}$#_!~J^LzNc{678w{{w%V zKh2-v&+`}fi~J@28h@R?!QbSQ{4M@A|APOG|DAuuzvlns-|%nwcl_V{djSZ900l~5 z1WphHQIG^hhzXit3AW$}uHXs25D1}=Mo1^57cvMLg-k+bA&ZbzC@K^aN(rTfkAyP9 z$3j`5f>2SYBvck^3w4ABLPMdI&_n1c^cMOE{e=F)Kw*$DMEFwpO88nBDhv}w3ZsP4 z!WdzKFj1H$Oc!PdGlf~g0%5VRL|7^;6P61rgw?_tVXd%ESTAf4HVT`B&B7L8tFTSj zE}RvT!Y$#pa96k|+!vk-&xD_a7s5;77vWdoH{o~T58;*Yr|?GjOL!~16aE$nkrbiG zi7_!QCPYm%L{qdxM|4F`^u<67#WZ4CF`bxR%phhIGl|*79AZu}mzZ1pP|PFd74wPt z#S&skv6NU^{75V#ek_(1%ZcU13SvdEvRF;5F4h!liS@(=VneZ!_=)(b*jQ{THWQnR zEyR{$E3viMMr yF${=NwGD%sa zoKjJ#xKu(aDV35cN|mI_QWdGHR86Wb)sSjRwWT^zU8$Z_UuqyVlp0B&NR6eYQgf+~ z)K?lL4VH#TUrJv|UrWQJk
40=lIwbud{U{xljz~wPW6}xfv~)%~C!LorNEf9`(q-w2 zbXB@0U6*c2cce$sW9f (HA+MBI$s6SL@+NtUyj9*M@0Rz<`{e`jLHP&y zuzXZLDW8%r%U9%U@*VlEd|!SjKbD`!&*h)x7xF9lwfv|2PJs%g& V5LM4roR!OI%S28FWl}t)zC5!TbQa~xF6jBN+MU^T_ZKaM 9Ws|Z^*{ QB$}{D;^0V?H z24hr=jxjMd#>M!U5EElkOpYaDT1<}_F+1kOvc$5*K8)p!6^Rv%6^nfws}!pos}`#s zs~4*uYZUt=_GzqftVyg{ta+?OtYxfKtZl4)tYfTmtZS@CtY_@=*cY)rv0cp$3dKk+i@rE#)EkJc$WAF z@vQNJ@j~&!@uKl!@k;T^@w)MP@%r%w@rLn6@lWC{ T3h$rK>; ;& #(# Gzv6G>@8a)OphA_x_pYj{rs`@MHLaRa&8lWobErAh z-0FvF9yPC;PtC6uPz$Ps)WT{JwWwNLEuofFOR1&R>S`^uwpv$htbV38QJbpG)fQ?? zwUydhZKJkVJE@)3E^1e`o7!FNq4rdJsh_J~sJ+!bYG1XV+Fu=@4paxJU#UaYVd`*o zggRE8rOsC8sB_it)OqTBb%DA_U8=57SE1jl)ivr`b)C9i-K_3a_o)ZegX$sm2lYqw zuzEy2svc91t0&Zx>QCw^^|X3MJ*%EmM>Ii|QryvU)|ms$NsCt2fk}YEr$W-d69Z zch!69ef5F*P<^C6R-dR()o1E+^=I{k`cnNx{Z;)<{X>1N{;9rE|5D#2K!Qy02_YdS z)I=g-Cai>=a1vf3NTf}qOQcU^NMuT6PJEEamdKgNmB^j=Fp)P=C{ZL)G*K*3JW(-G zDN#8wG%+kOJTW3MGBGMKIx#*mF)=AIIWaXcEipYYBQY~ED=|AUKd~UOFtIeTEU_Z7 zDzQ4TCb2fLF0nqbA+a%WIB_I#G;u6(A#o{jIdLU%HE}I*J#izEOgu aId+NRP&-E|#-ug&=ygosns87;o>htvZ`T~8izC>TCuhLiR>-6>d zMtzgMRo|}f)OYK9^?mw&{eXT@KcxSl|EM3 +cQD;0?);jhGQP5{71YhHr#M8Y8Wd z&d6$HH*y#SjY39Yqli(|C}tElN*E=LQbuXxBcqJ*u~F72XH+t38nuktMjfNBQO~Gv zG%y+(&5agDOQV(1+Gu06H98udjBZAEqnGiy@rBXH7-D>Bd}WL@Mj2y`iN*|LrZLNy zW6U+aHNG?E8S{+=#zJF}vCdd;Y%n$&n~crI7GtZi&Dd`2Fupf-8oP|$#vWs@al|-j zoHEWC=Zy=-RpYL4&$w?qFdiC@jK{_^ ShhIrdi9ZZPqdCn)S`bW>d47+1zYlwlrIrt<5%OTeF?n z-t1s@HoKTz&2DCQvxnK!{KD*Q_A&dK{mlO6U~`E1rTLZlwK>cjX^t`{m=n!u=5%w0 zIoq6TertYb&NmmB3(dvm5_74!%v@!zH#e9Y%}wTJbE~<{+-~kLzc+W9yUg9@9&@j` z&)jbwFb|r?%;V-s^C$DPdB!|zo-@yz7tD+1CG)a*#k^`>Gq0OB%$w#d^NxAfyl37w ze>HzIUz>lLZ_RfWZLt<-@s?`omSNeJW4V@R`Bq?sR(30gRm>`GmA1-T6|72DWviN1 z-Kt^Lv}#$ktwz=-)~8lu>oco~)xv6JwYJ(>?X50WZ}YCz$LeeKv-(>Dtbx`bYp^xM z`qKK!`q~<54YP(@Bdn3uC~LGe#u{slv%aw=Sd*=()+}qbHOHE3eQSMZ&9fF-i>%ew z8f&e!&RTD6ur^vdtnaOz)-G$ewa40P9k32rN33Jk3G1ZwlXc2EYn`*sTNkX0)=evE z-Lh_5cdWbCJ?p;pz !tOJ_11c4{cXLsflb(?4Q v+d1r u7 zNA|~dS-Y9t+-_^Pw>#OL?Oyg5c5l0n-Pi7KkF-bGW9+f^IQtuWygkvLWKXuI*i-Fk z_H=uOJ=30L@QUi|obr5__4w++Ja?w%6F}?Dh5rd!xO@-fC~Nx7$1H@9mxTE_=7V z$KGr2v-jHv?1T0p`v?0+`>=h)K58GckJ~5gllD*cDf_g2hN;9 ne?*NBz z7>9K@C+5T*)k!#-<2z}cj7}yevy;Qg>Ev>9J0CiEoP16Jr=U~FDeM$+iaN!d;!X+Y zW2dZB&MEIyaH=@foa#;ur>0ZO`OInJG 1wll|>>nw4WIV+r1&T419v%%TuY<0Fd+npWG_s%Y7 zzjMGj=$v)VIrp6V&I9M6^T>JXJae8qKRYj+U!32aKb%+2Yv)hrjq}d=+j;K-mvAYU zb~%@KC0BJ5uIB2l;hL`H+OFfeuIKu0;D&BmH=Uc_&FE%wGrL*b58SM7HaCZx)6M1P zc0Y9UxOv@tZhp6bThJ}!7IurcMcra )HnYr3`E zI&NL}Gq;J`)NSTAcU!nE-BxaEw~gD@ZSQt)JH{5do!l<&Fn72+!X4?3a!0#k+_COB z_ZxS-JHegkPI4!^Q{1WUG 9}KjyKo))?4Z=^Ok!nyp`T6 zZ@ss{+vsib_Iby= zCw vKNuOTO$YzUn9Zm>>5wU-u2)_5(lk)A;H9%>D;{Mn99E)z3y8K!1O6 z$p6sK C;Q*|^Zfb#0)L^u$Y1KO@K^h5 z{0;s_f0Mu2-{NoexA{B#o&IirufNaV?;rGk@PG6V`$znv{xScAf71WSKjokH&-iEk zbN(g&vVX--`nUY2{xkoD|I+`(|JDD^f91dS|McJZ@BF|0_W=lq00vY*2TZ^QT)+oH zAO=z(2TGs?dSC>85Cmb6CP*8k3(^M}f{a0?Aajr<_#ns{WDBwfIf9%)t{``iC&(KV z4vGZDg5p8Rpj7ZtP%)?+R0*mE)q?6lji6@GAowh39kdDB2JM3OL5HAQ&^_oG^a?%? zz6kmReS<;4;9yAbW$;z-bucs-9!v}-1(Sm*!PH<{Fg=(N%niN`z6<6B^MeJ!x?p{< zG1wGr4z>o{gB`*5!Omb;a4 ELW|E;t`t3@!zigDb(+;6{)P?gjUQ z$HDX9Mes6s6}%4q4BiIsg1>|JAqa_(3}HxxOvr^oD27rfhe{X=wa^SRhgrf8!UAEz zuuxbyEEbjsONOPw(&0y8nXq-(CTttF4?Bb%!%ku6uuIr8>=O l>wh|um)XnWW%M$E8DJ*)2l)!FfGeqbTyL(A zm`&^?b{4ycUB#{9c5#RJy|`0qA+?lRNv);!QU|$$Tv4tm*HUsSxs(!0Nu`wXaqMjD zO2XGY{S*CDy|Mn8-b8Pz|78|13z`k>Om=3ul3ZD?B3G3^lbgs* @ta47dpj=cgD_4|j%Jo?BSczE4SShu#S_S{a zpU8oJ)>&oTM$gY^_q_UEEw6@G)0^)t@D_VZ{_#8(J)hCOpxx2#YWK7!+EeYB_FVf} zd!c92GwWIO5A>{hHhru C=rW)--FnHNzfg4|4Ci57GUI|9EDNo?)YB zRrKr%mawPUGwfOR9DAO b^?5Y-Mq4u}-Ugvc|udUb7 zo9WF>$&}4;<~Qbe^QiUAdT#w}*R*Tdwe3320%xJK$XV>ZasLV`1+{{@LA{_+@JaA# zup#t9KMcY!OhYy!o0F?4mFh@!qx*5!xa-mkd9%Dj-l-4@sSH;}C?l0o%4lUw?0)P) z>|yL>?3dWDvEO39$No@js5SM$`Vixd@y-;@6Xq%BFSo1P&F${?aC^GF+(mu|zhihQ zyc}K$uY#7K6=)6GfUm$%VhiyjJPCh-=c!@TaB2iKk{U&grmj#|scY1A>J9Z5^_F@^ z{Y|~6o6t?^-t;1R7b~#o*z{~Z_9M0|+lyVsZe*{pSJ`Xqb@m2(lTEU>*xT$K_5u5l zeZ)RypK#rIi%-W_<(u)}3sr=gLM@@bFhH0j>=2#{uf@z_A+fMjOIGBBJW{EwoKemz zmz1lq?rJ@CiMmW(uC7$yYU{N1+6HZ-wn^KpSJSKOjr2i=3rO^DMJV(yN*FK}B!C8V zU;q<%zy|@y337qFARovNih<&w1o#+~1?50_Pzh88)j$nU6HEk?z;|FCSPYhfao`&; z9-IX$z$)+>{0ZKHzrk9t4r~A$!6vX7YzI5QE^r9^0Dc5Vh_pmHA{UXHC`c3`NCFZ? ziDE ey zCB$-K1+j`)O{^i-66=YL#8zS(ahNzl93zesXNhyfdEx?bk+?)$Caw@yi5tXCB1zmL z?h^Ni`@{p{Iq@^`f|yJEM*L3vLA)a7lQhYYELoH+MwTE;k)_Fx$+BcQvLacPtVUKR z`;!C6ugI^-p~M2>A@PVDOS~i}kkiQN }vdavn*M94V43$u;C!awoZqRLC#M zJ>-7!06B~tP97wGAb%telSjxCD*K;suTSo zU5~C$^`-hz{i(s!5b7)HYicO<4K bPB(x M|3&50$rJ|O4p)W&@Jh9bbGo3-I4A@ccur~_3Zj~1G^zTlpaP8 zr$^9Z>2dTo^muv#J&~S7Po`(lv*|hXTzUz;j9y8vqF2*v=(Y4ZdOf{?-bim^3Nj^` zkLca>9(o_WpFY5}Wkxe&>F4y%^b3Y&OePCcfGNe4{@2fqOm(IvQ;Vt1)Mpwn4Vh1v z=1dEwCDVrKz;t9LF_W1o%v5F?GlThtnZwLwzGc2+<}nMHh0G#mF|&kO$}DGAFe{l= z%xY#0vyR!!Y+<%CdzpRAY334hnYqGTWv(+fn43(Jxyw9Y9 <% z=04+^aILu3TpO+}*OBYQb>_NoJ-D7+FYa^h3$8EMkL%A3 b(tIVp3g3b6$amtqa7DQi{O9}^d_R65KZqa959delBl%JMF8&~YmOsZ| z=1Ot{xDnhu{tkbaf5boLpYTulXZ%b47yeiN4}lbDf#v3N3%G>>FUW!}7=p phwp_))#s3Ei#+6Zlhc0zlhgV0gvBy<+K2z`Uy!eC*zFe2C^OcACED}`0uV(z%G zQ`p5D!U^G|@RM*#I4ztJ&I#v*3&KU=l5knLB3u=&3D<=i!cCD9X|aG hb=TXB)NL|i7W5Lbzt#LeOsagVrH+$Y`;Z;DCrzW7jlB)%2jiSH#Ku@Wa~lFt9c zpOP|5A4plHZ2WVnSg<$P7wiuX1W&>q=(`F_`c(Q%YQq04d>|AM3JME_MN&VhzcfG^ zE=`gqOH-t&(sXIQv_M)Yt&}!JKdni-q&?CN>86yFZcBHid(wUBq4bw hy1tvUI7ZH@QSP$im6zNt@u(wrL^*qQbuW^v{BkB-IX3nZ>5jYPwB4=P!=c) zl|{;OWrea?*`jP!zE^fDH ;zE{#b!n!C2|oN3k-ovaxcp^05lBic&M_xSv^i8> !w6#6 #q&ahG=88aoRW9cx|$_R9mI3*7j=qwEfxv?X-4AJFA`3&TAL7>)K5% zsr{n;s{N+@uKl6C(*9Hl?Jw=E_D&~tMUU&IZs}$8@_GfmqTX6>qqo&N=pFS=`T%{P zK3X56l4@L^rO(#q=yTPCYUpe9wfY9tR6~86zC+)o@6nIxC-jr*$7)&qlzvXXpkLCj z>euw^`a}JZ{#bva|DykD2!?1VhH7LoG8 ^amF~yY%wkw*Np4N4da$^N3EugG@ckw)luq1 z FPEscue;BXSDe6>pni(_WrkYR^ZX#czaAJa4!YpZ)GE18k z%xY#mvjL2ojm%HXPtDKFCguQhpgG7KY7RF?n`6we<|K2bIV-U(vE7_!E;m=0E6vsB z8gs3=&fH?&HXoXg%-_vF%va_c^Dm1@?64A+X<1epE3K8z%4X$Ee4p5v*k$Fh@>=<< zkKh8h5FW6~SRY$ut#VdVtC`i@YGbvvI$E8qu8G}NH> pBaSCmV6)F$gs>y7o7ov;nMgq_~bU}v;Hu*>Kz^ilc@{jPpbzpp>A+t}^w4t7WT zb9=Ng%${J3F~%9+*t6|<_I!JRG2WP9OtM$ntL(M*X5*%jG~PR=V>!0tIIa^op_9fW zoGea$r=(NLDeZjZlyNFLm7K~>Ri} ^PMx#neQxhmOCq*HO^XRowLc=>}-J()soImXOFYj+2upYD4{VA3(^J=s&dm>2gnPxm~}k0-ozUQREUSI{fumGdfk zl^oF-<<;>Td!4+_UKg*c*UjthjCRI&1H6IGSZAEO)jjK;^O||h{hQukZ;1DmH`E*E z4fjTP6TL~^WN(T$)tlx`_hv+Y4iVH38Z#M~j7%mbJClRS$>d^kdz-y2-ZpQ$x6|9@ z?e`9N2fahy58jX7Veg1{)ceUh<(>A<1igc2!Oz}(?}7Kwd*QuiK4kv#9pCjm-}lq{ z>HQ3T_TZ0jv|q)q>R0z`__h4H;WCo S1>hZ(|*VWu!^m@Uj6<_L3!xx(Dxhhd&DZ =t$pdohsl!!N?#;ec>pI4B$(4hg>uzY4!*kA!2x3E|>!Nw_rJ7;Xx; zhC9OD;hu1Bcr-i}o(^w^cfxz&eI}r0fplOeI0&wTd&GxCaiToYo(Y*c#7JTkF`5`d zj3veq-w@-83B*KV5;2*WLQEy55z~nc#7W{OrV)FTJw|>*E+7|@i`nDkI&wX^f!s)L zBDawH$Tv`d7PO%QU6>VSgSh}87&Ha)KmC`4Hh}2e4R1r5iqVV=7ER40{|QaXfFy~b znHi9T7@D2|Ni<6niKcFnXgVi?CTc(u?QR6k)_`R6@d%o-0m 3=T+&7@EcbNwmTUn#%!68AB5~AgN$zRtF?w7@FDv$vB4QcR*6b&?FB?CNMP9 z1Cknsrh7nA$IzS)NE#TL_yI{1L$g01X<=vz2qbL`%>#j?gQ3YFkc_@&1kDJ6q=%tt zA&~SjG&cm20fr`sKr-4F1kDnGWEu=j6@g@049ypTWI7B@8i8bb49y&YWCjdPAAw{> z49y{dWVELUnn(i4XipI|n*@?sFf^qElF|MmXkG~ $NIzI%>Q-Nf3eh8YZ0?Fw75Hw>2lEpAI zZ3U9WF*J7tk|i)Sfd!J$86#*G3nZg6M$l9iNS4OXd=^MXXN;gpEs%`P7(p{zAo($d zrnf+{EQaQ|K(ZW$Cb~efJceewK(Ydcro2Eh>IZ`6y+E=Oh9 I#CU z!9cPqhUUURvKoda#6U9Y5Q1jKK(Ypgrp7?BCWhw6Kr-qUf+op8GU^tBX39V^>K1~g z%Rn;f7J}x?K(Zc&CeA>zK89w`Kr-qUf~L?wGU^tB=Fvbh>K1|~(?Bxn7J_EfKr-qU zf~M6#GU^tB=GH(m>K1|~*g&!ghGyA7GU^tBrrJQV8HVQDKr-qUf+pQSvIT}_-axV? zhNj;@vK5Br;6So9h9=@bvJHl2<3KX%B7&ymK(ZZ%=H);#>LP+B=RmRphGytMvLlA3 z=|D2-B7)}XKr-qgf+p-hvI~Z0?Lac>B7&ywKr-qgg68i)vO9(*@jx=_B7$b}Kr-qg zf~NC8vKNNt^guG|B7!FNKr-qgf@b$XGU_6Nruaaz4~FLXKr-qgf+qVwvLA+K{6Mll zhNk^MasY r(7V=*+B2$JJ4G@%HR-(cW9%JCS1J|sB-BhWj^i5NkloP-fH%E?&t9YAslMzAQS zVg!eB8b UB7!f^Q&tSw*lxHzw7|L@PF&yQ2j2MCP z0!Bn#zK9V~moH(&Qk0i5BI?u?jEK5(6(gc9T*HXyoUda ifsxrzk{FpCCB(=aC@GB0iIT?1TqqfgM0<6M#YnVQw>XSMdv%M) zNc4EWC17Melp;pvM~U_>LKZ-Y_AWveM5$mTdhFkdVI+F&--=^oNt7x^euOfCk!4V7 z7+D@AI)eyV0VO(v2w4dwI)eyV8Ks4hHBj0ZSra8Xn+RD8B|4i3SsSH?k#$h|7+Du3 zI A(0bY>CqQ oI%9;Kg)%y0gq)4C07lM58J#ggE VdPDeQMV8>iLwGl-a%OrBk!S%dWMkqQC7yt2Pmsx~iogsgqrM_A>TDAXMxAYn!OSR| zVKC}!a|}lPYJox2r&}#C7 r7sWuplI@K0~QK#Br5cTO+dkjXM>VUzh zQynoFb*d8vqfT|kVAQED7>s(<6@#TvcEe!Qi|!aKhq4C-Q73No#9-8gUKotJ@Hqyf zE_{K(s0+O@7@cz;3`XbN7lY`GZ}r1qbk6-Th|c)d01QUwJP?D?IS;~Mbk2h@7@hMF z3`XbtB?hB&{tAQ9Ie(48=$waQFgoX97>v$&I0mD09)ZE=oJV3XI_FUsjLvp62BWhb zgTd%*$6_!#+vs@*fzjE1gTd%*$73)$+X)zq&Tt|IqcfR=!D#O%V=&tLDHx3Qekul| zy`P4`Xz! xFQCI+MZo`u0^zh`4G+V43SjP`pj2BZD{7K71#e}} 7>xFB4F;qATZ_SH|JGqJ+Q0P}jP`E>2BZDkh{0(8HeoQ@zs(qo_HPRY zqy5{8!D#=sVKCai?HG*qYzGFT^?r}RXuUfz7_D~~2BY=v#$dGGJs6DEyBCAediP;4 zTJL@gM(aI*!Dzh)F&M4)5C)_5{(!+~y+2|wTJK>DM(aI-!DzilF&M4)7zU&D9>-v` z-V+#%)_W3z(RzQvV6@&-7>w3?8iUaq&tNcG<5>(wYdnX+XpQGF7_I992BURd#9(ya zmoOOJ_hk%5x4nYF==!S|jIO_i!RY$y7>usJfx+ndn;49)Phv2->=p*2%Wh*Zy6g@H zqs#7MFv@!vjPgDPqkMqDC?8_*5z2ppkI~!z1fQX|pJ4Dg%BL9o8D(@G0$-qvu0!B2 zD5L8T_$$ijIt2cP@+Ag;M;YA?fq$TkZim2ED5KjU@HNWlb_o0vWpq0PzC#(^4uOB8 zjBba(_b8*=ArwIQ2BQd+e_<4f@-0R|l+k@56#9T$(S0EljWW6~gkk_dTlx =@MuWe$w`1ZA`r2=yt-XfF_|G0JE!5b86O(Ow`_6O_?j zAXHP7(Ow`_GnDx-sx!)HUl6Jb%4lB@sw>K9Ul6K0%0d{`17%^1>VvWfMh!w)6r;XG z8SNuNjX@dhBSMWu8SNuNjYC-yqsF6*_7tHepe&71lTm(zQPWVC!KmpdKgOszD9d8h z5|rgIY6Z&j7_|~*1&msSvLZ%pKv@Z+HlwVJQCm<(=Za9 C>;t7FvX zC~IKU7bv5%N2uN?Yhl!Wl(jKxAj+r*2z3Bu)B}V%h_W6=9YR?jqfVfV`hid O9J*9|(03Wz-LZx`Z<72SQy&8TA99ZlH|%flxP5M*TpjB+BL( z^#o-LjCzW)B}P3%*$Shcqil^)Kcj4eQ7=%o#i*Ak+hNqNDBEMyZzwxpG=s7uMr$ZL zVYH62Ge+AeqrM_^T9i>=5gI){Z+FA!3@D@SB6LQSQFjp >gql=>) zjL{`g4#DWsD8Iz$sQX`G^v5W_#^~}WhhlWp>tPrj^?Eo)M_nF)(bZ6n#OUfMM`3i- z-_aNy^>++LN1Yvu(RERd!)VmS+uvYxLzLq&8g=pZ1dNXQI1!_xK2E~usE?B|I_l#T zjBbW `Wn}*R*zouh!)UO#B-3H}MjE?#>3!|empN-Mzyl>CJ=>La>yN fbhg zfU|S$?!9)Hs3>*|cDG`8f!!Ej19szMcP9p7p@4;nEsB^RAcDXF3k!X&o0~sA -@%e<$ZMKcUVMcey2rr=66{{XMVRubk6r!MCW|3MRbPuSwwqzzeTi{4_HKd z`JhF#mk(J)&-$=M^sJ9qM9=!DMf9wXSwzn|!XkRs$1S3DJz){8>q(1fT~Ap=YZ++~ z-T!He=$@l2qI*7Lk!R@=k>~ilMC5rsFA;fx&r3u`^LdHLi+o-p@)Dnyh>YR$5|QzI z9&3>|=s1hKNnf_eTl5u+yiH%V$UF2ki@Zx;x5xyl>mu?V)pZehpX$1Zd_Z+wL_Vat zE+QXMT^Es$sjiF2Csfx( bi)0MRi?7zNWe^BHvJ57m;tNu8W9%KI^)OOrg3iB2%fZi^%s>*F|I+)pZe>PIX;G zexSN8A~UJ3i^z{u*F|I&)pZe>O?6#FexkZAB6Fy&i^yC$!y*f)?t#e9RQEvSPpW$$ z@)y-T5bZ{F4@A3D-2>51s(T c;Thae4 zx^+hf+qzhE8_K>&bX&^4NOU{e!=gJ;_DG^T(}+cPrBRFSNn;k>i^eV5pC&9ifF><^ zG-a o>=()6I(er5AqUY14EP4T5+M+|~G8P?5m$m3H zx|~HXq|00MBHGiU7gOd>qL it1GcRf6(nM`X}ANqJPmHE&31DJBH{Yy0b<9rMp;^cX!&Z7VANG zvsfqH-C_~i&teI>hs6TAr^R^3rs@4eOz+m-7R%CoES97DT1+#$pT#tf`&ib%4b* zBL`Yc=YNpJbmj+JOlN+G#dPL}T8#6ac9_L<&WBq}=X`|4bk6-PrgI)(F`e^~7SlN& zWig$ze!d{4b3VpmI@@C{rn5cH7GLLhJ|m{HJ;7o++Y>Fu*-SghVmgzPEvCIc#bVm; zQ!S?b8)z}@-)R=p-kfeR?adh$)83qEG40JDi)n8LTTFX%mc_ImXIo7BagN2bALm+3 z`*EJdv>)eNO#5+x#k3zoET;V!YBBA{FpKHAFSMAR`yz|!`7XAYp6L>c>6tFIn4ak} zi|Lszx0s&k3XAEPuC$n*=_-rqnXa~&p6MEk>6xyzn4W34#q> n*1B z-e57U_eP6py*F7*>%G}xy521o)Aeq(n67u5#dN*fEvD<;VKH6rPK(`5@3PoERKG^- zUaDUsb|2NR5xbx2*N8np^=rf)qWU#rPtgZ0_B7R>A@&S?*kaGpM=bU{ebizv(8nzH zA{}9|m+0db8$+M4*jW0c#l}(H8?l$^NQ=EfwGPByrK2qN8r7N*d!1@ch>fSuS?mp} z^&$2q)%p;7i;lL~B&xL{HiK%di2XpdR>T%itrfA~sn&|vLaMbQ_6OBk5&N5Jt%&_Y zwN}IyQLPoRf2r1r*nd=OMZAM*t%&!aS}Wq6^lghr=sOmV(swP+m#0mzc!IuX@g#lU z;sO1@;#vBk#q;zdix=p}7BA9IEMB6YTD(jrTD(p_vv`AkZt*77{vzI@Us$|NCtG}J z`lZE}rC(WmIr_E5m#5!YyeIwE;w#YaEWRS0V)2#eREzhb-&=fTI?dv%(CHTMO=nnq zRr-U)SEDm6zB>KU;%m@Z7GIOjw)k4~CyTF5=U99lI@jXs(s>qNk9Jvn13KU08&b_2 z;(h4P7Vk@cvG@-3SBvjRf3x^bR5ObB&Qvps_%2j4iukVdPmAwH|FZb*RI`hCKdRY9 zd=IMGMSM@H*+qOWs@X++?~V?(bFuh7w425ErQI#QA7!Q`zCZ1>_yLremiQr*nU?sW zG-mOmDf2DyV`#$S=Tqie;up}s;zMZ4;zMcL;=^dh;uq1Z#V@8gi(g9f7Qc)ZEPgpH zTKo!HviOy>Z1JmT#o|}fs>QFPHH%+Q>lVL>h8DktHY`4ZHZA@*<^7TP6O{Ky;!o10 zEdC;0+Tt(KWh_31@?J@NEM3mx Xigi_fCGR}!C1*Rl9dl=n*F zbLe^&pG()b_&mCS#k=T+7N1WyvN-SC^gb5 E;&aeVe|8#s8#RTKsRimBo3-rf+TW|L8Wxh<8li))L+5c9!T)x3@$Ox`QS3KJ93U z2;IpNQM$7wVssZv#Obb<;AYczvqX~evp^C7?PrNR-NO<^x~C;Hr+ZmKbE=;ONN8U6 zv4rMAKMRo1EbM0qovnTrAffX-z!Eyc11+I*JIE3`w}UOAb34QmI)_6oq5VG0658X# zEunoq!V=oo{+7_b4zPsw@<>Z)&yKQ$_Uvd&Xm5_Og!blGOK1;{vxN5GcuQyxPOyab z;6zJk4^Fa#p8I4==($g^gr56UOX#@=T0+l#nkDqCr&~hLdWI$RtY=z6&pOBwde*^~ z(6gRp2|erCmeBK^V+pPCTuW$;=UGB)Jl_&p;{}$`8i!ayYaD6`t!0=cw3Z7kp|xCO z3Elr RL$L zN_8zHZll*(;&%E!OWZ-Px5S-P_e0_?s{0{vH`V=+xQFU~NZd x*rnvQ{4}V z2dM6c#KTngL*fyt`yuft)%}oojOup _$JZWDokGB|GUymW)#EDUxxjJw=iW zP5;!A0i9^c6xCiMnW5TiB(qd|jbxE(uaT_M$(F3qFD+T8Us*DwIu9fpROf+Ylj=N> zY*C#Dl5MK (m9sgjLx;>=5(GVx1e2?+>&Zmklczcu;jM%XG?BJf3f8DRP%)74pj4m zWIy`5CHJ73EhP7$nk^*vrJ5}y`%}#plBd$YEjf^C&X7ElYR-@xL^Wqfo<;w& a?mOY&Y?vg8A_Y{>^{#gY%v zswE$$HA_B1nRQ7%N<&NX^Kk~VF3Be-vo6UeDYGugrzo>7$&r* zGWU}Fl&)mSDYTa*r_z-z`8{35lGAB#OU|IH zTJi_Fnk9KZW~^?>xpWOncF{F0IiId&$pv(6Oa4sPvE(mwT}$#l%vjHoybm+hx8(11 z14}NX8(Q*Dx{)RSqJ1p+H|=Xl-hmk#TXGTI#FGC~-g61M(akLAPB*te^S*@z% ^!vf9Jo)&1P_Od`TwYLSDseLTaT muj wP~=@w{T*xIdZq>1*FhF&Uk6*D{X5G7?cdoJX#dW!K>K&D1=_#! zEYSX)Z-Msj0t>W%LoCq#4Yfe~H_QU<--Q-v|1PpXdvLJ@de%!U(6e4@fu8R&3-o-K zTcGE=!U8?tl@{okuChSSbhQO~rfV$FGhJ(eo@uxRdZz0v&@=td0zK397U-F7ut3jo zqXk;~O%`aqH(Q|f-eQ5)d#eRn<82mbjkjB%HQr%?)^(=^TGw3`XkB+(ptam%f$o2= z1-j>b7U(|rTcB${V1cgppar_#Ll)?I4_lz?Jz{~b_oxNB#$y)fdm}8+-+kNy{rM9X z==YwqK)?5t1^T^_7U=h$w%|27%7WMFGZu`e&sy*%ea?b+>GKv$pf6bP9vyAL`}9Q% zKA vF@IBQt zAectqvS2!W+kzSN9SdetJtu;nsGbwS9IEF;Fqi5%5zM1{P6YF*o)f_W`jG`c(~m9q zo9g+I>ZE#pq#{($k5rWE`H@OcJwH-Os^>>4pn86!QdG~6RGNNisSN$fQd#=7rE>He zOXcaemMYNiELEmcELEY}Q>3a?dx}(zYEO}BQtc^HEvh|5s!e~e)KYY&rIw~YT51_O z%TmiyodHtIQJn!&%Tt{JQa$NhORY$C21u<+yDYU4)p;P*m+Cx_+L-D*klKX)VyR8( zua?@5{${D|>F<`>fiASvj`R;p?L_~y)XwxTOYK5+-bn3A|FP6=bdja{(SI$q2mQ}d zdoKQ;hUj4HI#PS_xtpc-rrj;I5A9*8eJS%Ksr@MPB&q!=^CYPQY0OfG(72@zqs*D4 z22tirQiCaTCaLo%b0(?tY1&d3Q07chLnw15siBlPlhiQEoJr~;%A85+Qd+dswX|fZ z;gtE4)LoSMlhoam`IFTBl=+j?1GH|b2We=jhiJo6k5Fb*Qjbz*R8k`-Gb*Xa=~9+@ zf-<9$dXh4ul6s0Vqmmj)nNdkSO_@ 5i7_qB~h?KHb?; z3+OJE`kC%(sbA@CmimqEZmHjCKT9p7yz`R!gYIdmzvy0;T15A@bb{_<=_K9P(gEGi z(kZ&XrEBy6OSkBOme#x 0Y$IrB|i{ zEWHXn($boRqb#lSJlfJa&tojD^E}qlI?v-Qt@AwI(%SnIEUmpi(bC%2lPs-$J=xOQ z*HbL5eLdCE+Sh@W*1n!*X+7)dmezBeVQD?bnU>ab46?M=KG@P)`&pLO+RwJM)_#tq zwf1u@t+k(LX|4TyOKa^HSXyfzVri{?sHL^`VV2ffF0{1Pa*?IAmWwT|dtPE`-SbjQ z>z Bs1OmL5TMU8J9;4_JC6)jg1YhUy+jKSy;Bq@Sm{2hwAy?t%0; zs(T>)3e`Q3evLkE>DTEKmL5-^wDg j{)lRQNKdBETKY?> zwIcmB)mo9BMqjY>bUND7KhPH~{Ud$J(zEFpOaDamoJh~3dQPOf=*yO#PxZ`5FQl(p z`VXq-NBU2y=SO-G)$=3MgT7&zPO7~?CPLq`OpIz@kV(>aEE7=e5i%({!7>^8o@KK1 zeaqyi_7Ryp{m?Q6sy#)fNI$krgMMO}7X8#RZ9361OVQ6Pvo!tOGRx3OmRXj5VVUKq z&J3C5sm=_Up7blrtUz^s$gD`evCK;JTg$9Vzq8DGbc$uxr&BGn0sY=G8_{W&*^y4S zOg}oqGJ8 j$YCe!Tn9j1yAyl)1%%N1Xg3Mubj%ALZb1l=KYKD**Ks7_i z98EPt$Q(l#Sms#zvt^E>zgXsY`m1G5pubt>MEbjBPNJGcWKO1 _tr-7?qG9+nwSJ1z47jacSk z8nw)0l)0D82pYG{<1}HJCuq_#Ptw3LPtlZRM$)upo~9YgjG|e~JVSGqd4c9FGny7G z^CB%;hMx^HOO_c+%a(bWRxI;2ty< div~C$@aAs&3W^N|$n`C~ZP0KJ(Gh3FK zL)(^_OP8_?^E8upPcmI}8OzM4ynB+>-Y;ia?fvqW)!z5CtoD8d%WCgew5;}iCCh5> zds$X{zp`bu_p4Y|d*9o#+WS>4tG!&!vf9hlEvvm;!?N1TH7%<>Tg$TAv$ZX&b**Dr z-G5!n>KgnkkgUGP&jQJANH?%7KL=*&*U0vv`Zcm!QvDj)?P*`j?m#!T?9Ox(%kDxq zwd`JWGt2HxH@ED5bPLPwPjwGu51?CF_CUI|We=v?SoTo5tz{3R+gbK-s`Vjz1l9VG z?N4{K>`` @cTDp&AucP}~_J36Sg6v0B`-1GpRQrPLCsg}_>_mEyWj~|ZBV<3PhgkM&s{KOt z8>;<6_FJm`LiRhV{X%v&)qWv6pAN9>U-U@J{!O)y$o@l*w(KIRJw^6kdaPytquO8O zI_UA1>qfQL$Z4KWv|OEP-;oRH$(C!;Q!KYE)p;PdBGq{yr+4u*%k`o<8|2obXIM_N zf2QR$`#LA&Hll+q*N2{Ex$WuMmeWj~V>zAkxt8OMXP##{&UohemeV<3V7Yzi5X 5Wndbe9n*So`Vy560Z)AjDMoUV7b<#fG!ET`+;Yq^K$eU^KK-fy|b z=mVA;K_9f-(^TI sMd 4YVvgMbiUs`^7`jzE-(XTDP zGSyik-<#?zkzbX5XZh9X6w9wcb*{*-Np-HsuSIpP$gfRxuE?)Lb*{*-OLeZuuSa#R z$gfXzuE=jdXIXwjI@|Ia(Vr~em(H>L#&oXbH=*+^zbVyxAio)%Z~0y50?Y4CH6O_L zqrX^wPx`Cn52Tt8 (kMHPUYZl9&K)YG~MB3f*CsAfg@+Z?y%b!9cmOqt7EkBUPEPon}TmE#K zu>2V`Y56m0VEI8bW% zU#F{Cemq^>@^8>JEdM55)ADc8wJiTOUEA{S&~+^TE?w91{OtR2J mTqtP@8}MepF(%E{8YM=<-eypTYehd#q!hXu9lxc zceDHtba%_or2Q=aBi+ODv*@0dpH26&{7-am%g>?vSbi?u*Yfk|ewOc|`&)iKJ;3q{ z=z*61nI2^MU+BS>|CJtM`QPcGmj8nuX8Awq;g vX@AQvq64hZL65XTcY2f+ z67*;*B x- %h2ea@)(Y2A{ThY;QT-Z)8>oJb!j1HLE8Il&XDHlE z^=ByDLiJ}T+)DLlDBMQ%XDHl5^=ByDOZ8_c+(&P>!b9{9D?Ci^w8EqGE-Q?ncU$3c zs_UZg1l4s>c#`V6C_F{)x57yJfEAvm4_aXq)xA-8o9f;uyh9(c!n;)KKw$!X%nF}V ztqFxMsMdtSWU4ix@FmrnQ22^!O(=X#wI&q4p;{9P`njhyp)iF$V}+UYSu6ZVpR>X& z`n(lp(-*Ap6CG`ZIrK#<%%v|`VICc0#UdSR#S$H7#WH=_iWT~b6>IcWD~9wnD>mrs zR&3JoR$Pj{Va4U?n^x>e-?HKgRA+$VDpY5HVsEN5Kye+aGeB`Y`kocnr|(;_5B H`N@VxDVAFpm;FV9H4jz)f}LBDE-cghf&Q0iigvwRy=}!Z^iy}niU7o=~g_F z&amQ9^am>*O*LC69z!)-D4tAbS@9IA*+TJDs@XzuAk}Q4IEZStP#jD(TPU7OyR3LV zoo~gVbb%Fz(Vwk&DgDKYm(gFXcsc#eir3NKt$00MXvG`pA6C4X{%OTq=wDX6mHutT zJLo@Fypt}n;$8G#E8b22v*NuS9c;;B#rtSCE8b7LTk!$f!-@~mPAfi4BUXHbMy>cL zjal(A8n@yTG-1UjY0`?LX<)?{Y08Q((X xFDZWc9R-8bqR^(lrRkI@R;;gzAKcJx%KcWpQeomWK{DQWuIGMJs_$6J+ zio7$kmbN1A%&cXs_$^)5io6rEma`)BHEVe*G8eOY8jsX5YXvLm3|F+0&SWJk=}dZA zNoTUMm9+P(SV?=|+e+H|Rjs7`Ud>9{*VV10eO<#!+RHVqq&-;6N_y_Kt)ypN$4YwE zb*-dlUC&Co=lWLCJvXqD?zy3rbkB{fqQ+`#x3$}Mz^)n5p+8%oj|v@(us5jE1g7lw9?6RCo7#o zcec{0bQdcPq`DtUr%~MxrPJx|Ryu?Bv(lM#4=Y_t_q5VAbT2DiOZT?YaJr9`uA}=} z=@z=5mF}kdTj?HpfR*m02U lxyUTCFx^dc)Q zpch-|S9*z+exsT>lzyj|S!p4?+)97ZE3EVnz0yjH=v7wwmtJk9|EOjc CQSvgJrXXPxt-pV<8gOv;PMk^QTO;&Euo2}fWw^+GNZ?*DL^foImO>ejIGV~5B z_o8=Nc@=t>m3z~>t-Kz+$I9!|d#$XWfA?8=LwdiJH==sSQ0_zZj-lL_K4j&M>BCmu zgg#>BP3fan-i+# 6EHGRs;+tZO&-i DPn%7@c2Rz8A`wQ_$t&dLMm%T_*; zzG7wl%y`wx$I;iUd^~;K$|uwDRz8KkVdc~4n^r!Z>SqDUXVAB;Jczzy w^b;# W^ pA|ivYz8_D{H;~SXtj&WMzHtUn}eH{%2+WE?-})qIR=Nce+HSlg~Y@5~KPxDsdXI zN`gkMlBD{3s5Ghm9x5%WzlTbj>hGbl6b-DhG)-A$8Jf1rvNU6rb!gTqeQ3@qeQDmx z%+BnBRkol-t87P0R@sS`t+ESc1EjJmty*O_TC>XTv~HDtG_=Ydv|*J!sh$~?y{VoV zl>@1s8I?n*o*9)xsh$~?!>FDamBXo?8I>dGa#rb2m$%9Q+S4jW(iN<76kX9ON7I$8 zat!Tdm1F73Ryl#LVwDqVZ>yX{SGCH?bTzA-LRYuSsdNpi45VvX gPG(T%NgDc!^>m(fkF zaxLA=D#PjKR=JUGVU?TcmR7l$Ze^9*=+;)bgKlG$JL$Goxr=URm3!#+R=Jn%V3qsm zj#hbqYA#WEknU`ihp1*0m4~Tj6qONFGm6Scy1P}Lrv0okifTqtd4_66QF)f`WtHct z<`tC}=ss2%P4~6Ri*!G$yhQi6${2cpRmM`yIx6GnK~{O09&D9Y=pj~ll^$x9*XUtZ zd7U0^mGSflt4yGJ2T*yB4zS7xRPO*PA5y&osC-P1w#p~;7^{3r^$wsiksfE2&*<@1 z`JC$AKxGm=(JEiildLkCo@|vb=_ywEik@nfujxRmd_zyO%D41%t9(b#u*y_=rd6iV zK~|Yg2U}$ZJ f3GI@GE$I?SqZ zdZASl^dhU~>BUwp(Mzmark7f^MlZ8!onCI$kX~Wc2EEd%O?s78Tl8wHw&^uiU4>q2 z)!uZtRr}EEtlF3UIfz>#e#Cy}_#6(i^S1J-x}QdPi@zs@}z0thx)m)vCOQvv0F1 z@8Rs*t-3qC!>W20@3iWE^e(IJPw%$s0rVcL9!T{w0@Z`)eO5h~-fvaC9}ifS_hI&f zRvkbevZ`kPVXJEPAF=9*^iiv7)*iFPGd6 s^;iTt7 s^(EVQcD z@`qJ*pFgdt`}}29-REzs{zI3jF5>eN)qnZCMD;&DFH!60=-_sX)w lOCHTBVEy?F4Y5|{@sHOP4L@m$fwAG3 {^ zTCGBJR;yBd2Q?n-r-Ie$RNqG}r20N;O i|V?ltxR=Y)K;OoE^580u8Z2LRM$mq1FGwywjo{CY8%nztk#z _SFsk*Tb`)LBYRAykt#&+J!)hnc zHLZ3UUCU}`(6z00CSAvBgXp?e8%)=;+Szn{t6fU9FQ{EcwJ)e$LA5WaT}k^`?JBB0 zLhWj*Jwojosy#w&IMp7Zb{*9oq4qzjJwokzx`owlpxQ6gZlu~T)NZ0%TkU4Ljn!_U z+gj~bx}DW-r`ucYKDvX|?x#Ci?E$)z)gGifTkT=Gi`5>XyISp0x|`J=r@LG23EIzU zPtiTBHj?gXwWsM`RvSh4w%T)aAFDl2_qEy!bU&+&ru$p%MS6hMUZMwDZ45ogYGdia zRvSkTvD(X2Gl$wMR5OR#tMqWIy+)6)+UvBx)yC5SR(pdUX|*@0<`uQK=+Rbtn;v7e zcj&QJdzT((wFy)+joN!uGmYB&^hB$DKu@yThxBBteMC>O+Q;-%t9?QTT2$w+cLPzK z|LNA_T6%^>H4A52Z6Y0Hwa@5at9?$-vf3o7cLudD=s8xKOwYC2m-IZVeMQf=+Sl{~ zt9?U N$G5)${ZYs~6~ y*GWp>Z{TRt-cz4$m*-phpoN_eZ=Z((nqbnHhs+M>(UWcUynX+_4Vl!R^Na= zY4r{1Q&!)Ij ??%U2eRuk@)eoYtSp8tCpF5}@M)h+C_5SpAs~=0pTm4k}hSdks zH?4jKeaq@+(zmTXh`wX>v+285KbKCh`uX%dt6xChxB3wJfz|b1erWY!^dqZZNI$mv zMf4M^Urax>`Xy99Q&87?`I*(Pp`Tm*S~|(24?W^jttHFs03uDSc(>YAx(R@Y2Tx4LF(hSfDMKUiJ!GSljsmmjUJ zdC|`))HN@&tv;6iWObeS9INZh=UQE7KF{jf%Py;HFXvlbYgu4*t>tH{Yc0Q6U2FN( z>RQWhR@Xg$x4Q1R(CWJ9A6C~r|FpX9`IpsopTDiH>-}SOU2l=qb-jPBuIv40b*{&) z7prr Zkm?=?H=?=+!ah{@K-ib+9tbz4x(C9osP2JqYpQ!7+=l8N2)CuW2g2>B z?tyT7s(T>Zf$AOzcci)p!ky?Q7Vb Vm572yD?wIV!{?qcClRO?1~4Ar_3 z9!s@ugvZf-mc5_q84w;%^$ZA4q Rgtt=d7sA`9_6y;iRC|Q*E_#B6_fqW_!u#k+7Ct~vw(uc(iiMBT zQ!RXq4zzFtJ FE|eLC>)8NqVM*PtidZj--Pve43tR;V62xh0oA)EPR%pYvFVB zJPTi-=UX_MUSQ!%bclsx=uivC(qR^kqZeBEGS%E5e1&Rm5WY$^Hwa&&nj3_#Q_T&+ z@l i=6 z;dfMXgK!Gf+#sAvH8%*qr#D+TjcSGv&Y+qhgg;Qt5W<=Cb_-|GJ1m?{HCqUOqM9v) zbLia`{zmVya3R&qA^eAG<`6ET_gnZceZU$W^g(NMqYqi5JAK$1J?JCW=%kuaG$Qmd zYeeY?Ys9E#6pc95jG~dCno%^8R5OZ3ifTsD$WzTI8U?BuMWakLqi9s _8`4V@LX#HTu!dt+6MaWR1P(7uMK` zPPWF*^h;~(Lcg-8_Wx^(YX85n 2$6&&Y<(GaVG7u#vnT1 z8iVNqYn(-Yw#M1?7i*kHf3?OC`kOU|(ci6cDP3rd%jh50xRU;9jjQNi*0_fLZH;T` zKi0T~F0#h0^j~Y}EdH~`?HwIF;$n?EXg6!zNxNI)A=<+l57SO-JVGPZc$7x1@feL+ zV+4&`gL9vou*TCgX^l}du*NeqWewiLxoK-mpc!ktN3+&=pXRK=`!P3f4d#7r!5R~3 z(HhMA+>$kz_qk XZ=klINgV~w8j5Rptxyu@t>zKQoHFZAATT|!L)0#Sm6|AXqSkam~ zx0S4^bL(YIozKeF)cLGpO`T6~Yo_R`*3>zyW=);L>ekeLuVGE?_nOw!`K)D4ozL3V z)H$qUO`XHK*3>zyXHD(*`qtF`ZD399--g!I{%vGU?O7jdY7hEaQ_sDzHMM7(SW|np zsWr79n^{x)vAK17oo->>#?vjW+Z%K%YwEeTwx*tY8*A#hx3#98dpm3Dxwp5bo_hyt z>bZBcrk;BzYwEdowx*tY7i;RdceSRTdpB$9xp%jwp1Yql_1t?{Q|sN+np*E(*3^3U zwx-s*k2SU4eXXhW?q^M{YkzC%{s&l7_dL*=y5~XG)O`-NrtWiyHFcjut*QGQW=-Aa zaBJ#%M_5ze>u*hcZ-6!Ry(6uu?;T}L{oSLjc>+Dgny1iXt$7AL&YBm} 4OX*40ypEo1&Hqtd7tOoqsn)!k4z%Vy^fYVUOHa4veN^i}^L~1!H6NmbtobM% zY|Y2%S=M}lo^8#i={eRMMbEY7GxR)bK1 ZF=8v?BCLYenf(){4=Q){4`o zt(Bmotd*piMYIB{Swt&EHH&Dasb&$a4Am^6RivY>RiZCit4v?AR+DN*(c;18j *!>(*MHj<;4%`i8Yupqgp4R-|uPYbE-&wR%y_ zG+HaucdfMwonWor^gU~>O5eBEYV-qZtxh%HXst;#-)OBxHQ#7$KsDcJZAdlWX!W5J zt<{%)X01)==hoVkPO{eK^b2ckM<-ir2dZ}ftsUuC*4l}FZLOW@H`dyPerv5=>37!J zjZU%FK6I+J4x-;%YXF^Qtt07lYaK;rSnFu|gSC#KGp%(j{n1({(^=L!h0eCtK>Cxl zPNQ?Ibvm7EtuyF6YYn1Z)*4LbTkAZ!z*^_ipRIKP{l!{C=lqN`JG~F#5Z-E~E>s zbus n8f2wQla{;IS5K-9fuq>rUF; zT6fVN*1DT^TI(JfvDUpbYOSYe%vvL9+*+e(!dlPJq_v) }P7@D)zSemyM@94aOwce#gYw@1VD_M*8Y+l(~yl3+&*7|@}t@SajS?g0;x7I`& zTI(~~u+}8nwAL52Wv$7yZLKfqQr6 &!Q{w$64FYipl2wYK(YGiz&~Hn+CcwS~2{t}U&tb!}yBt!ry*>;BtV zTld`7+Pdd<*490@x3=!NgSB pA47Mu_OWz#Yad7Z zS^IdphqX_jds_QMx|g*F(!H%ci0)(U3+cYrzKHH;?ThLD*1m)uVC_rkf!4l^9%St+ z=)u;$iXLL^tLdTE`7}Mu+Sky-t$iIm!rK3%{jGgH)gGaJ1Jxd(eIwN#p?woQ+S)f$ z?HAg&Q0*7mw^HpF+P6{d7uvT|?HAg2Q0*7mchZxreHT61+IQ1atbHFn)!O${?JwGo z(9^8_6g}PABk38|);^qR?PsaZ1MTPNU~9iX&$9MtdbYJ+qUTt93_aJ{W9fO;ewChY z?bql9)_$E1vG#a6)Y@;*Vb*?=Y9`Qri)tp&ew%70(0+$%CeWThH4|vRM=!JX*Yt90 ze?v7NXn#wuwDxyYvx4>%s#!sMD%E_TJ)K@_J+y}5) nj3WL95pxSyoYLT(0MP_+#oueYHkqyiE3^TokKM@h()R92C*2`+#nXGx*uXq zs{0| QA%IZDnGgj}Uns3x2RP&Ac zKlFKPe?m3uXn#saTYDmX(b}KUm#qCc9b@fDbgXsg+T%?BZ#(l|HvPZn%zMSU&!ewe zhtB^s>)e~_JLr6ej<@&?RNqJZM*613)we9JzHM<;-$z`1*W#Mt36^Nk_bjn1)x099 zbNs;4W%{9|EA%5vGwbs{woEUoy+dYYs=Y&I6{@{MrZ?5zA)`I`+%nn&?Hw{&=NFdI zdM8_9Df*=qcc5QcaYy>Kl{7QoSm_V?t(E?y-&s9Hr&wbJI@KC0((kRYJe_8Zo>cpV zj+^NW>$rvfVBLSGGp+kV`lI!Dl+LmqkI~uIxflJ(;%Cx179T|CTCg(Jd>}ZUc3E%& zoo~U3bb$pY(Vs1Np8jINX!@%Kn&00n(EMuM2sFQ1H&TaF?Hy7_Q0*O3{pnwp8bJTH z)G<`=4^qd{MV8){{%h&&=zo^pt)qiSSuDLf?Pi%(X?M%4MtfLhW7=t%O=!e2o6@Ld zwxlu3GIL#V%Q7!r2`e;d(n`#HS74?6DKjCZ18CYx2hxm{4x(8r9ZYjpI)vt}#C~)Y ztg *+F9eU2_`RpzH_Ijg=vm$xdj)TMPJGn8uG$lgqOe )(=IOMzwX`3a1GKasngg`7AFEqS`>}?#v>$6)OZ%~wb^C~}ZQVYm z>sU8_Hg)N2(CrVZvq3lJyK8;x_7~m2y6H?ev~K^ 7f=a(ZekIE 8Y0ah7Po>X7e=5YBo=|tY-5J%W5{y zwEPZqkmWTagDs~sIm>c7le10#Tm4< ;@wsAdAipXd!%oI`K4 z;#_)@73a~Lt=L6xvEqDstCf1v+pM$#z1>PH(mSlQ61~$(z35$5TAAK$B|W$H3ne|b z_6sFF_kC8<+V8iL)~ ^lt;YMw$LCLDw^;e@oEytm)qXbUkPKHvnDF zoBqu}*9)e9Gtf2KI`phBTI^%`lEpruV=VS59c!_PbezRLqc2 ;} zHB0DBU$=zLbi5_@q;FVIqi 9X7n9PZBE~{)E0DtrM9H+S!yf#zNNON zA6RM|`k|$^r5~C8n|qh`0{U<6UD^xiztMMTFVHxGYA?_}lxi=~*4$|?&|Nb#$vStY zUs&fZbh35sO24$2&iX5h>8!uDm}cr5i)p65wU}n=JBw+irdVA2I@RLZ*Y7Q{2c2e# z8FacOexUj_5;LiOjfCb?zeb=n>emRg##t6 l-!N6|T!x{}Vd)KzqzrLLx3 zmb!+{xBT98ffb&iKU+aF{)-i!qrX}~Gya?D-%fP>ZUyblLMv!L{;-1f<4-GSKmM|U z_Tz6WXg~h3g7#yP75=456#nD$62*>=4wk=Iu}ZsHy&vsvEq(4`EzV+or?vK_5o;Yx zqt@1SV%Fxpm>;(`@5TItwRtb*C#@r(OLV08yhKNu&r9h4gVy|vbw8Xk>(ZThp3kgH z_x_Ywm+k{7dn(;I-~Y387vNTvTNlUY?(R-Iu@hSqTd}eGS|Fk*24Ht0iiv?D*n-_H zg58~n1u9Ypu;7j{htK!?p8o>Q*=w!$oonC2flp@RMk$E>on4mTF=$1C$D&mU4nTPi z5FCi|9w0av<#j;t1eEsx!4uJz1c#t)37&*@BzQ8~mEcfxDG8o}E-k@R(Pbof8oI0m zPe+%NFz;n~3G-f7kTCCMMTrbYSCYsGbY RB)g}Hu zx`xC*K-ZM`hv-_8*aTf$5}TsyNMbW|T}g89){`XnZhc8TiEbdN=g&+ zB>OJ9v1H#vd2Yz^I(cr$eTnkiQ0kzYONslig_IVfTS^Jf#Oyv&=A3RNWzOl=Qr-jY zE9E`WZKQlCx~-HCL${MEXL)<6a+Y_H>J{jYQoR!0Nvb2!ou&E)x{K6)NBc=_7P_m{ z{y=w=I=j2nSzasDSzasD*}bH32fDX3#-aVCaVNTuG{&R*O7kytKWYAr?k^qQ(*e@q zc@LBh&vTG;c%Fl$!`C=OI(!YT9d!5_Ts!DIjB-|>+d?@j&~2l9&Y{aa<#P^Q?kS%Q z=9leFJ); zWFA9@NaktuB*{FB^1T4E0d%NjgDBq%AbTOo_X5aXgq|kZi&4H8K=u-p*96&1(czN4 z3>_i4pU^WT_cMB? CL!Xsc66KE}wha2b#Fj;0 zkl4EDixTUDz9g}}=*tr0oV+42uH~x|<2_B57}w`DiE(|nPY~n!OqJNz=<5>u27N ^t-=iA_WK3_$FAl=}^_=_vObVn3sNHX!y3`o6?wpdUzVCi f%2Xq z$!C=J3`y=M?-`P_P~I~n7oogoNUezeAgK+}A0^cr{Ylb1FV_V!S(NJnnIg({fy~7y z*9EdWqFfiqa?O5|EZ63D$#M;NO_1fi{vkQ8;cO}Fjn0w61az(x?ndWH;U09p6z)TN zr0@^AKuVL)g;IJ5<^4nHVf0TaarXX_5}&8PrSure*Mjmc=)Y3#hc1@#e&`Y@pJ|3m zc9kX?5DTLJu@H{`V__Ws$09iXk416(AG;jKF)^(9oVZvCO^B7zq*w(_iB-|GSPRXF zwNdOP@h>dS$%(Cw=Ec@P3u5b_JU7_7D9;VH9?ElrZG!ULV4I>mH`r!qO>AqlF4h-q zh;4&%y}-6bd97eOpuAQvJUerEtzg)TIbE?`(WS)jyv$izY!r%TkL+r6S+U#D<;2FK z%ZrUiR}jNo%~?_G3Unp0E76t3Mxv{TeTc3qb}!mX?0$4LG0fZ?t}htoZVuNM>|b fBa_Lsn!=sprS3*A=&XQTT`;6`+R3EYGpAc0%a z10}$@JxBs$(Ss#04n0HyccO<%U_8oeg1`jya0%Rl9w7nF>i;BgKYFAD9zc(hz=P<~ z65vc8BY}s|V Zcpc@sL*Pwxums*hPmsWe=!p{e2puAU zkI|DP@Ckad1h^MNCGZ(~iUhb9r%K=p^fU>4iJmTjZ_r^9_!b>5f$z`}5}1abA%P!I z?kfa-M7ggJ_zC5{Lf~ig90|-q&y~O*=y?*Djh-)oThI$6Fdw~80zK$O5?Fv H%PD_%DIOi*PC+>L9X{033APDmLS)RYXm{A*{u?|1HDZG zzo26!FazbfK#*&|kAuJ*besfvuXjq2*E?Q 7?)K=3`3*8#!zQJxQiAE1*Z_#w)3L+~S%=Z4_ND9;VSPf(s4f}f&qNbocC zO$mOEz9qpgP+lJdzeIU`5c~?|^+E7!l-CErZ%|$zRQS2PKB(S_^7 W|De1+sQ!WS`k=Nx%IkyLW+<-@LTU6{ z31!glBveFseGn?6ygmq3(diQEpuAQHa_xVV;5_sv3C>4 EwP(p*zMG_i@{wbl`(7z;fJIeil5ciGy0U_SgzY^j-EtYT^T_WKX&2X76 zoI(Q<&Y(dFXVH*^pG3nF#{ABWNVtJUrM5X5lSnT#E|E3SgoJlTlM=={%;mWuvKET# zqsZPUuLC0eQC &en@cAg_jKWu< zH3^SG>k_^i<$XeUG}@H#wP;JiH=u0^--u#fDSQjsmGG_TQc@d UP~QvXo X^*;pc&o4K1vB!_M)5zfVC65(8ME+N9X*g_)Q&n+dw{p=$V?&nq#;eKu{ z5$ kqFPzPa=Hn zT_wWT*i9n*yxk?j?je!G(LE({1j;>w$T8^N5;+#_FOdQ0J`x#-?kkbw(ETJb2;E;I zXQBs4ov(MG)cJY`Nu95Eu+;f_he(9a-Jue>06k117oxmwh+Ks7x*>8o`ag+WfgULl zKC?$jWF&gDM6N=4pAZ>^@;)KLXPNg2k!w)iCq!;Sd7ls&gYrHhax;3oMEEQZmdFJ3 z1c}^@o+y#~&><4JA3aGT51=PY Q=;;!91RW-kN73OD z