From b065852d62d99032328aba20707e2df18bd5a1b3 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 18:50:25 -0500 Subject: [PATCH 01/25] Bugfix: Fixed a bad memoization definition that resulted in warning messages --- Source/Chatbook/FrontEnd.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Chatbook/FrontEnd.wl b/Source/Chatbook/FrontEnd.wl index cceaec6d..4f207075 100644 --- a/Source/Chatbook/FrontEnd.wl +++ b/Source/Chatbook/FrontEnd.wl @@ -1328,7 +1328,7 @@ rasterize // endDefinition; (*replaceCellContext*) replaceCellContext // beginDefinition; -replaceCellContext[ expr_ ] := replaceCellContext[ expr ] = ReplaceAll[ +replaceCellContext[ expr_ ] := replaceCellContext[ Verbatim[ expr ] ] = ReplaceAll[ expr, s_Symbol /; AtomQ @ Unevaluated @ s && Context @ Unevaluated @ s === "$CellContext`" :> With[ { new = ToExpression[ $Context <> SymbolName @ Unevaluated @ s, InputForm, $ConditionHold ] }, From 7dc83007e7194e2be2105f9192705cc18997851f Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 18:50:45 -0500 Subject: [PATCH 02/25] Bugfix: Fixed an evaluation leak in serialization --- Source/Chatbook/Tools/ExpressionURIs.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Chatbook/Tools/ExpressionURIs.wl b/Source/Chatbook/Tools/ExpressionURIs.wl index 47805529..6580e085 100644 --- a/Source/Chatbook/Tools/ExpressionURIs.wl +++ b/Source/Chatbook/Tools/ExpressionURIs.wl @@ -57,7 +57,7 @@ makeToolResponseString // endDefinition; (* ::Section::Closed:: *) (*MakeExpressionURI*) MakeExpressionURI // ClearAll; -MakeExpressionURI[ args: Repeated[ _, { 1, 3 } ] ] := makeExpressionURI @ args; +MakeExpressionURI[ args___, expr_ ] := makeExpressionURI[ args, Unevaluated @ expr ]; (* ::**************************************************************************************************************:: *) (* ::Subsection::Closed:: *) From 58a8488d18b5f8f36674a83181f430339c44ba16 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 18:51:43 -0500 Subject: [PATCH 03/25] Handle some more control boxes --- Source/Chatbook/Serialization.wl | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index d732f81d..07421d44 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -270,6 +270,21 @@ $$cellEvaluationLanguage = Alternatives[ ]) ]; +$$controlBox = HoldPattern @ Alternatives[ + AnimatorBox, + CheckboxBox, + ColorSetterBox, + InputFieldBox, + ListPickerBox, + LocatorPaneBox, + PopupMenuBox, + RadioButtonBox, + SetterBox, + Slider2DBox, + SliderBox, + TogglerBox +]; + (* ::**************************************************************************************************************:: *) (* ::Subsection::Closed:: *) (*Templates*) @@ -2196,6 +2211,20 @@ fasterCellToString0[ ProgressIndicatorBox[ args___ ] ] := fasterCellToString0[ PaneSelectorBox[ { ___, False -> b_, ___ }, Dynamic[ CurrentValue[ "MouseOver" ], ___ ], ___ ] ] := fasterCellToString0 @ b; +fasterCellToString0[ (h: $$controlBox)[ args___ ] ] := + With[ { head = Symbol @ StringDelete[ ToString @ h, "Box"~~EndOfString ] }, + inputFormString @ Unevaluated @ head @ args + ]; + +fasterCellToString0[ RotationBox[ box_, ___, BoxRotation -> r_, ___ ] ] := + StringJoin[ "Rotate[", fasterCellToString0 @ box, ", ", inputFormString @ Unevaluated @ r, "]" ]; + +fasterCellToString0[ DynamicBox[ ToBoxes[ expr_, StandardForm ], ___ ] ] := + inputFormString @ Dynamic @ expr; + +fasterCellToString0[ DynamicWrapperBox[ box_, ___ ] ] := + fasterCellToString0 @ box; + fasterCellToString0[ TagBox[ _, "MarkdownImage", ___, TaggingRules -> KeyValuePattern[ "CellToStringData" -> string_String ], ___ ] ] := string; @@ -2444,7 +2473,8 @@ inputFormString[ expr_, opts: OptionsPattern[ ] ] := StringReplace[ $inputFormReplacements = { "CompressedData[\"" ~~ s: Except[ "\"" ].. ~~ "\"]" :> - "CompressedData[\"\[LeftSkeleton]" <> ToString @ StringLength @ s <> "\[RightSkeleton]\"]" + "CompressedData[\"\[LeftSkeleton]" <> ToString @ StringLength @ s <> "\[RightSkeleton]\"]", + "$CellContext`" -> "" }; (* ::**************************************************************************************************************:: *) From ae8b7209592dabf57bc1784d935346346cb26f14 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:48:07 -0500 Subject: [PATCH 04/25] More template boxes and controls --- Source/Chatbook/Serialization.wl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 07421d44..b3a3420d 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -215,7 +215,10 @@ $templateBoxRules = <| "LCHColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], "LUVColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], "RGBColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], - "XYZColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ] + "XYZColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], + "Tabular" -> makeExpressionString, + "PlatformDynamic" -> First, + "URLArgument" -> First |>; (* ::**************************************************************************************************************:: *) @@ -277,11 +280,13 @@ $$controlBox = HoldPattern @ Alternatives[ InputFieldBox, ListPickerBox, LocatorPaneBox, + OpenerBox, PopupMenuBox, RadioButtonBox, SetterBox, Slider2DBox, SliderBox, + TableViewBox, TogglerBox ]; From 0fc5cab8286bd4b87329302b7780c3062da62945 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:48:34 -0500 Subject: [PATCH 05/25] Handle file listing cells in workflow notebooks --- Source/Chatbook/Serialization.wl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index b3a3420d..060e0578 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -495,6 +495,10 @@ cellToString[ Cell[ a__, $$docSearchStyle, b___ ] ] := |> ]; +(* Workflow cells: *) +cellToString[ Cell[ BoxData[ TemplateBox[ { name_String, content_ }, "FileListing", ___ ], ___ ], ___ ] ] := + name <> "\n```\n" <> fasterCellToString @ content <> "\n```"; + (* Delimit code blocks with triple backticks *) cellToString[ cell: Cell[ _BoxData, ___ ] ] /; ! TrueQ @ $delimitedCodeBlock && codeBlockQ @ cell := Block[ { $delimitedCodeBlock = True }, From fbee2db96c640c5f1849dc914cb768d230555783 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:49:39 -0500 Subject: [PATCH 06/25] More documentation related fixes --- Source/Chatbook/Serialization.wl | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 060e0578..930f9514 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -585,6 +585,14 @@ cellToString[ Cell[ RawData[ str_String ], ___ ] ] := ] ]; +(* Raw output form: *) +cellToString[ Cell[ OutputFormData[ output_String, ___ ], ___ ] ] := + output; + +(* StyleData cells: *) +cellToString[ cell: Cell[ _StyleData, ___ ] ] := + inputFormString @ cell; + (* Include a stack trace for message cells when available *) cellToString[ Cell[ a__, "Message", "MSG", b___ ] ] := Module[ { string, stacks, stack, stackString }, @@ -1367,6 +1375,9 @@ fasterCellToString0[ "NotebookObject["<>label<>"]" ); +fasterCellToString0[ TemplateBox[ { _, _, _, _, label_String, _ }, "NotebookObject", ___ ] ] := + "NotebookObject[(* " <> StringTrim[ label, "\"" ] <> " *)]"; + (* Entity *) $$entityBoxType = "Entity"|"EntityClass"|"EntityProperty"|"EntityType"; fasterCellToString0[ TemplateBox[ { _, box_, ___ }, $$entityBoxType, ___ ] ] := fasterCellToString0 @ box; @@ -1512,6 +1523,10 @@ fasterCellToString0[ TemplateBox[ KeyValuePattern[ "input" -> input_ ], "Chatboo } ]; +(* Keyboard keys *) +fasterCellToString0[ TemplateBox[ keys: { __String }, "Key0"|"Key1"|"Key2", ___ ] ] := + StringRiffle[ keys, "+" ]; + (* Other *) fasterCellToString0[ box: TemplateBox[ args_, name_String, ___ ] ] /; $templateBoxRules @ name === makeExpressionString := @@ -2246,6 +2261,9 @@ fasterCellToString0[ BoxData[ boxes_List, ___ ] ] := fasterCellToString0[ BoxData[ boxes_, ___ ] ] := fasterCellToString0 @ boxes; +fasterCellToString0[ GraphicsData[ "CompressedBitmap"|"PostScript", ___ ] ] := + "Image[...]"; + fasterCellToString0[ list_List ] := With[ { strings = fasterCellToString0 /@ list }, StringJoin @ strings /; AllTrue[ strings, StringQ ] @@ -2348,6 +2366,12 @@ fasterCellToString0[ DynamicModuleBox[ a___ ] ] /; ! TrueQ @ $CellToStringDebug "DynamicModule[\[LeftSkeleton]" <> ToString @ Length @ HoldComplete @ a <> "\[RightSkeleton]]" ); +fasterCellToString0[ CounterBox[ args__String ] ] := + "\\!\\(\\*CounterBox[\"" <> StringRiffle[ { args }, "\", \"" ] <> "\"]\\)"; + +fasterCellToString0[ ValueBox[ args__String ] ] := + "\\!\\(\\*ValueBox[\"" <> StringRiffle[ { args }, "\", \"" ] <> "\"]\\)"; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Unhandled TemplateBoxes*) @@ -2413,6 +2437,25 @@ fasterCellToString0[ FormBox[ box_, ___ ] ] := fasterCellToString0 @ box; fasterCellToString0[ $ignoredBoxPatterns ] := ""; fasterCellToString0[ $stringStripHeads[ a_, ___ ] ] := fasterCellToString0 @ a; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsection::Closed:: *) +(*Hacks*) +(* :!CodeAnalysis::BeginBlock:: *) +(* :!CodeAnalysis::Disable::PrivateContextSymbol:: *) +fasterCellToString0[ HoldPattern @ DocuTools`Private`StylizeTemplatePart[ box_ ] ] := fasterCellToString0 @ box; +(* :!CodeAnalysis::EndBlock:: *) + +(* Some system model related boxes have raw values: *) +$$rawSymbol = Alternatives[ None, Automatic, StateSpaceModel, True, False, $Failed ]; +fasterCellToString0[ sym: $$rawSymbol ] := ToString @ sym; +fasterCellToString0[ n_? NumberQ ] := ToString @ n; + +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsection::Closed:: *) +(*FE Failure Modes*) +e: fasterCellToString0[ DefaultStyleDefinitions -> "Default.nb" ] := + throwInternalFailure[ e, "BadFrontEndState" ]; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Missing Definition*) From ca7ea0ea25de73c838d24837591bf386b9e3605e Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:49:59 -0500 Subject: [PATCH 07/25] Handle TextForm --- Source/Chatbook/Serialization.wl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 930f9514..32dc3258 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -1557,9 +1557,15 @@ fasterCellToString0[ FormBox[ ___ ] ] := "TeX"; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsection::Closed:: *) +(*FormBox*) fasterCellToString0[ box: FormBox[ _, TraditionalForm, ___ ] ] := serializeTraditionalForm @ box; +fasterCellToString0[ FormBox[ box_, TextForm, ___ ] ] := + Block[ { $showStringCharacters = False, $escapeMarkdown = True }, fasterCellToString0 @ box ]; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsubsection::Closed:: *) (*serializeTraditionalForm*) From b1e17164eff486aae546217ee30144533d275120 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:50:26 -0500 Subject: [PATCH 08/25] Bugfix: Some box patterns didn't handle options --- Source/Chatbook/Serialization.wl | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 32dc3258..5d23e655 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -1615,13 +1615,17 @@ fasterCellToString0[ SuperscriptBox[ f_, TagBox[ RowBox @ { "(", n_String, ")" } "Derivative[" <> n <> "][" <> fasterCellToString0 @ f <> "]"; (* Sqrt *) -fasterCellToString0[ SqrtBox[ a_ ] ] := +fasterCellToString0[ SqrtBox[ a_, OptionsPattern[ ] ] ] := (needsBasePrompt[ "WolframLanguage" ]; "Sqrt["<>fasterCellToString0 @ a<>"]"); (* Fraction *) -fasterCellToString0[ FractionBox[ a_, b_ ] ] := +fasterCellToString0[ FractionBox[ a_, b_, OptionsPattern[ ] ] ] := (needsBasePrompt[ "Math" ]; "(" <> fasterCellToString0 @ a <> "/" <> fasterCellToString0 @ b <> ")"); +(* RadicalBox *) +fasterCellToString0[ RadicalBox[ a_, b_, OptionsPattern[ ] ] ] := + (needsBasePrompt[ "Math" ]; fasterCellToString0 @ a <> "^(1/(" <> fasterCellToString0 @ b <> "))"); + (* Piecewise *) fasterCellToString0[ box: TagBox[ _, "Piecewise", ___ ] ] := With[ { expr = Quiet @ ToExpression[ box, StandardForm, HoldComplete ] }, @@ -1643,19 +1647,33 @@ fasterCellToString0[ TemplateBox[ { }, "Complexes", ___ ] ] := "\:2102"; fasterCellToString0[ TemplateBox[ { n_ }, "C", ___ ] ] := "C[" <> fasterCellToString0 @ n <> "]"; (* Typesetting *) -fasterCellToString0[ SubscriptBox[ a_, b_ ] ] := +fasterCellToString0[ SubscriptBox[ a_, b_, OptionsPattern[ ] ] ] := If[ TrueQ @ $inlineCode, StringJoin[ fasterCellToString0 @ a, fasterCellToString0 @ b ], "Subscript[" <> fasterCellToString0 @ a <> ", " <> fasterCellToString0 @ b <> "]" ]; -fasterCellToString0[ OverscriptBox[ a_, b_ ] ] := +fasterCellToString0[ SubsuperscriptBox[ a_, b_, c_, OptionsPattern[ ] ] ] := + If[ TrueQ @ $inlineCode, + fasterCellToString0 @ a <> fasterCellToString0 @ b <> fasterCellToString0 @ c, + StringJoin[ + "Subsuperscript[", + fasterCellToString0 @ a, + ", ", + fasterCellToString0 @ b, + ", ", + fasterCellToString0 @ c, + "]" + ] + ]; + +fasterCellToString0[ OverscriptBox[ a_, b_, OptionsPattern[ ] ] ] := "Overscript[" <> fasterCellToString0 @ a <> ", " <> fasterCellToString0 @ b <> "]"; -fasterCellToString0[ UnderscriptBox[ a_, b_ ] ] := +fasterCellToString0[ UnderscriptBox[ a_, b_, OptionsPattern[ ] ] ] := "Underscript[" <> fasterCellToString0 @ a <> ", " <> fasterCellToString0 @ b <> "]"; -fasterCellToString0[ UnderoverscriptBox[ a_, b_, c_ ] ] := StringJoin[ +fasterCellToString0[ UnderoverscriptBox[ a_, b_, c_, OptionsPattern[ ] ] ] := StringJoin[ "Underoverscript[", fasterCellToString0 @ a, ", ", From 76d9af19d9b129f07e81d03622a6c81d3ab46f3e Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:50:49 -0500 Subject: [PATCH 09/25] More DynamicBox patterns --- Source/Chatbook/Serialization.wl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 5d23e655..6f1c4e74 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2270,6 +2270,12 @@ fasterCellToString0[ RotationBox[ box_, ___, BoxRotation -> r_, ___ ] ] := fasterCellToString0[ DynamicBox[ ToBoxes[ expr_, StandardForm ], ___ ] ] := inputFormString @ Dynamic @ expr; +fasterCellToString0[ DynamicBox[ ToBoxes[ expr_ ], ___ ] ] := + inputFormString @ Dynamic @ expr; + +fasterCellToString0[ DynamicBox[ If[ CurrentValue[ "MouseOver" ], a_, b_ ], ___ ] ] := + fasterCellToString0 @ b; + fasterCellToString0[ DynamicWrapperBox[ box_, ___ ] ] := fasterCellToString0 @ box; From b0b38844d6d7b3b63f5c46051ba286d7ed995418 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:51:12 -0500 Subject: [PATCH 10/25] Fallback for Tabular that's no longer in kernel session --- Source/Chatbook/Serialization.wl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 6f1c4e74..eb77bea5 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2575,6 +2575,9 @@ makeExpressionString[ box_, $Failed ] := makeExpressionString[ box, expr ] /; ! FailureQ @ expr ]; +makeExpressionString[ TemplateBox[ _, "Tabular", ___ ], _ ] := + "Tabular[...]"; + makeExpressionString[ box_, _ ] := makeExpressionString[ box ] = $Failed; From bc2e74e6b45067a433f42828ab4c74302fea555b Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:51:30 -0500 Subject: [PATCH 11/25] Bugfix: OS-specific dynamics --- Source/Chatbook/Serialization.wl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index eb77bea5..12ac34e3 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2166,6 +2166,9 @@ fasterCellToString0[ TemplateBox[ { _, info_ }, "MoreInfoOpenerButtonTemplate", (* OS-specific displays: *) fasterCellToString0 @ DynamicBox[ ToBoxes[ If[ $OperatingSystem === os_String, a_, b_ ], StandardForm ], ___ ] := + If[ $OperatingSystem === os, inputFormString @ a, inputFormString @ b ]; + +fasterCellToString0 @ DynamicBox[ If[ $OperatingSystem === os_String, a_, b_ ], ___ ] := If[ $OperatingSystem === os, fasterCellToString0 @ a, fasterCellToString0 @ b ]; (* Checkboxes: *) From 20ed8318d0ef65b95323f536fb75b3c73c11c08c Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:51:43 -0500 Subject: [PATCH 12/25] Handle some more FE resources --- Source/Chatbook/Serialization.wl | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 12ac34e3..6b3bf8b5 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2251,6 +2251,25 @@ fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResource[ "ChatbookExpression fasterCellToString0[ DynamicBox[ ToBoxes[ FEPrivate`FrontEndResource[ "ChatbookStrings", name_String ], _ ], ___ ] ] := With[ { str = trRaw @ name }, str /; StringQ @ str ]; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsection::Closed:: *) +(*Other FE Resources*) +fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResource[ type: "FEBitmaps"|"WABitmaps", name_String ], ___ ] ] := + fasterCellToString0 @ feResource[ type, name ]; + +fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResourceString[ "okButtonText" ], ___ ] ] := + "OK"; + +fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResourceString[ "cancelButtonText" ], ___ ] ] := + "Cancel"; + +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*feResource*) +feResource // beginDefinition; +feResource[ type_String, name_String ] := feResource[ type, name ] = FrontEndResource[ type, name ]; +feResource // endDefinition; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Other*) From 3b4a1c19c9b55bcb5894fc2dd2a1840a4de806fd Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:52:15 -0500 Subject: [PATCH 13/25] Fix handling of DisplayFunction and InterpretationFunction specs that include TemplateSlotSequence --- Source/Chatbook/Serialization.wl | 35 ++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 6b3bf8b5..1237ce55 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2476,10 +2476,37 @@ $templateBoxCache = <| |>; (* ::Subsubsubsubsection::Closed:: *) (*applyTemplateBoxDisplayFunction*) applyTemplateBoxDisplayFunction // beginDefinition; -applyTemplateBoxDisplayFunction[ f_, TemplateBox[ args_, ___ ] ] := applyTemplateBoxDisplayFunction[ f, args ]; -applyTemplateBoxDisplayFunction[ f_String, a_List ] := f <> "[" <> StringRiffle[ fasterCellToString0 /@ a, ", " ] <> "]"; -applyTemplateBoxDisplayFunction[ f_, { args___ } ] := f @ args; -applyTemplateBoxDisplayFunction[ f_, args___ ] := f @ args; + +applyTemplateBoxDisplayFunction[ f_, TemplateBox[ args_, ___ ] ] := + applyTemplateBoxDisplayFunction[ f, args ]; + +applyTemplateBoxDisplayFunction[ f_String, a_List ] := + f <> "[" <> StringRiffle[ fasterCellToString0 /@ a, ", " ] <> "]"; + +applyTemplateBoxDisplayFunction[ f0_, { args___ } ] := + Module[ { n, f }, + n = Length @ HoldComplete @ args; + f = ReplaceRepeated[ + ReplaceAll[ + f0, + { + TemplateSlotSequence[ { a_Integer, b_Integer }, riffle_ ] :> + RuleCondition[ sequence @@ Riffle[ Slot /@ Range[ a, b ], riffle ] ], + TemplateSlotSequence[ a_Integer, riffle_ ] :> + RuleCondition[ sequence @@ Riffle[ Slot /@ Range[ a, n ], riffle ] ] + } + ], + { + h_[ c___, sequence[ d___ ], e___ ] :> h[ c, d, e ], + sequence[ d___ ] :> d + } + ]; + f @ args + ]; + +applyTemplateBoxDisplayFunction[ f_, args___ ] := + f @ args; + applyTemplateBoxDisplayFunction // endDefinition; (* ::**************************************************************************************************************:: *) From d9ae4c334386f2bfbea2e901c3945f391393c4c5 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Wed, 15 Jan 2025 22:52:27 -0500 Subject: [PATCH 14/25] Spelling --- .vscode/settings.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index d5f859e6..6a9fac93 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,6 +20,7 @@ "Deinitialization", "Demi", "Dirtiable", + "Docu", "dpkg", "EFAIL", "ENDARGUMENTS", @@ -79,6 +80,7 @@ "Subsubsubsection", "Subsubsubsubsection", "Subsubtitle", + "Subsuperscript", "tabletags", "tavily", "textbf", From ef885554dce0924f9f0541375b3c0f8949bbf9dd Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Thu, 16 Jan 2025 10:58:06 -0500 Subject: [PATCH 15/25] Additional minor fixes --- Source/Chatbook/Serialization.wl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 1237ce55..85e881d6 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -2254,8 +2254,9 @@ fasterCellToString0[ DynamicBox[ ToBoxes[ FEPrivate`FrontEndResource[ "ChatbookS (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Other FE Resources*) -fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResource[ type: "FEBitmaps"|"WABitmaps", name_String ], ___ ] ] := - fasterCellToString0 @ feResource[ type, name ]; +fasterCellToString0[ + DynamicBox[ (FEPrivate`FrontEndResource|FrontEndResource)[ type: "FEBitmaps"|"WABitmaps", name_String ], ___ ] +] := fasterCellToString0 @ feResource[ type, name ]; fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResourceString[ "okButtonText" ], ___ ] ] := "OK"; @@ -2532,7 +2533,7 @@ fasterCellToString0[ n_? NumberQ ] := ToString @ n; (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*FE Failure Modes*) -e: fasterCellToString0[ DefaultStyleDefinitions -> "Default.nb" ] := +e: fasterCellToString0[ (DefaultStyleDefinitions -> "Default.nb") | Function[ _ ] ] := throwInternalFailure[ e, "BadFrontEndState" ]; (* ::**************************************************************************************************************:: *) From 4f2b9175dee7fca6e52cf694c48ad81d8403bdf3 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Fri, 17 Jan 2025 22:04:58 -0500 Subject: [PATCH 16/25] More serialization fixes --- Assets/TemplateBoxOptions.wxf | Bin 0 -> 134258 bytes PacletInfo.wl | 11 +- Source/Chatbook/CommonSymbols.wl | 1 + Source/Chatbook/Serialization.wl | 210 ++++++++++++++++++++++++------- 4 files changed, 174 insertions(+), 48 deletions(-) create mode 100644 Assets/TemplateBoxOptions.wxf diff --git a/Assets/TemplateBoxOptions.wxf b/Assets/TemplateBoxOptions.wxf new file mode 100644 index 0000000000000000000000000000000000000000..01b4c7e7e3fc765c21c1728d49ca2fdaea2f48c4 GIT binary patch literal 134258 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

!gjF_o@S+$pW;ZE|4B#6GT}L2cZ2= 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

?NNg^M!* zgh^|K1OhWLDMzjlH;K+$Cb9|CvJ4a_VMS+?iI-@lqV+>?22}{42#aXoL7~t)0dNDP z!@cckpB~*{3nB8ONE)qPHbhcBFO-xk!K~Kr#1m`f^A$L;R)r!8NrrA03m7#;_7eVs z-5!F`#oqg2&Sem7 ze-VC%aHPl5(rh+0JyzlJ(aqd8NV#~^vHEsb^Lh`U3OWIR$Z@&RRhRbEPl$sal(Mc2 zDGEx9kNV0o8I%E6Io8AEpDic1x1+=BX>4_S*~7`uzFBC~9RYv%FOwoB$z253UYfuC z+h0Cg>O1=LjQXEF2mWAFK+dTgPl158n@oy_#l#82DU2=*^SL6)B?TG|Z5WM38gDG6 zQKs$D3a%`b2PwH`r<-o!cAWV`C>}JM2bBlOd?jI*A3U(MijFx8zeG(~Nk(kIr;rdx;9vO&D)D-3P1`mI_@FGX zy95)+&r1_%rjj&f^yeXOP}pP%fJUXjis8EV5-JNaEZmWjtz8##!VVG@{BW!Ko`zzl z9QFx1<}#N^wuz$!My&{4gPfs!1)Hnj3aR=M*LS(-fDWg^tjDRyfTzk~AO&Vp?lez- z(VmOMR-vJ$x-zRO$yu&qs;d)~5L3Vf>Z_s3fIc`;JI{)`kD3oZfKnX^8Ho{(`Y}do zW2A67lcDlhSs_g_X_84JWl{xw97{%xc&x905NW@{8i+AGp960UM#`IjBXM{<%Xg1pM4$bq`SclgfR3`4ec&<(_ zUNq(OtL^J7AHr!KdWnW`Dx)rWPZDM8fLM+K*=-0EjR~R2mABU-^ttk;p`yFD9DU*A zS+|^3-%3;^xXg;ZNpaDY25n+cGlG!;CmlgzsHpT6uC{hJTp)w?RtmGjd3qgSBfwuP z;7)m1tO%Pv=$;AoJ#5!^(OopLQM8iB0<;yDe~R6pOv6x2ztY0LVYHEvoj4?VlT=D0 zODU;Dlzg8pKj{8X-|0}XBCATgQaV%%6ZcUgw@inL^Z*yJV2@{p{HZ}q2v!$Kj4hPJ z*d!8TlIE)_-sawhJ=*AMK@-V-l%T8TM$3F-B3d0vGiBq^8XI%+Q0JD&KuBwDx2vPbpXd&_?8TtfC~JKOcE(Vprhp zQr~t%-50J}{BEi52IfEWK6Bd{7@f1%Lc#~S$;2PYS*s@vW>bpjkX6xtD)&!LGn-OP zN4hpl$TSo>9%`(wn`yYrAuiA1%0;qr!^v-beYIh%W8$f|t{88as8TNA-Y=GwmD{__ z@w@xHPP1ctskDs0U;O8vc3f^qaVVF^IyQXw;Op%GOVTp#Kl{GHpib1%e$^vCdaINSv1%it(XLEHKq+I2Y4SJ!yW%n?n}-ya1I70-$Aa08CDX3k zx_fT06qg@1!(&JD9WVXH{%7O27MA|}k|lTlsO9)HZSyvY6^%D@Cj-mkcBn}Eob`H#8a_xYo_(_y*C^4Mr}c(dcq!{g!a zi}mwSdE1e<$C2fX8Pr&%^6NM36_qdj_p_+{@cR#pfxj1jbPAR4|H;YGWO?3quFWOO z=einm$a3RdH)WIc;WBOymvMg_-&&MGmY;v-Uuk5y=lhSRlJGVL%Toz_7@jZtofY+C zNlpo3lk;V${EYoeb5Q-J&)eW{{mNOW+_?6R6r$X7-%n0XAfMmU_Q*uC{F3)GlgRr1 z{PVGs$o53^;jOV~dO74tlkg;EmTeICf`1EzYKWQQXV(s2KQU6QqFUT z-`a#Ib^82e-cL` z({$m5mWLYeDdJq8ISyR@&b8}q{vmUTk$1&FViKza@CK zR9eRGAK%`$r1Q5{hqR2_V_mG-&q>Q)`Q5rcUiQ6wQGHw)w};EPKZUQ3&m+r?|JaaAmL2O}&mrNR$9y%1 zzz4KhneeysPyd;XR4ErY#P18`r=K`%J2%?SjWriIO2KE(y+4M3ev|@Z zn$jYNv^^q1A}9)rCIz9e>_#cEQZt_P=xes=BFEYS zSAC%&PpSOc`R6W$zw`vkIl?(Kh0B-?v<&&e``e+DnEQ<7b-uPe-3$QJp=C` z3)_16o2Z-viA0pY0*OGBGx~mo@K^uCH&FQ(KkY!HCij8MSb-twlOPNpz4Kqh$!-ew zYfvfU-y)TAilkg1c~4r-k-RT07f8wzCErWSVzQ5XuW# z$o1p0FkZ-;tgh}^;1HD!I-DRKUP>~DoD{Q?lfriSVI5A&I8DY^`Bf>I>tlW z{P3lfGstq`PdF97vC#y73-gUr$>-0%{nasK+0nNJm7jllG+Te+P9!gmzLl&Twi|lk zd+onG&&mPYFK{LO{)XOQKue5(SL8`m#kO~J9}5q^3moJQs1 z{F5yH7VJU&yI}&t?>{a-#`YiMUqlZ@dDJ*IjE%=<7MKpQjD-`yv5sJQ@99$p7L~9( zu=k_a|6;`PlUa_`2@l+MN%~ZW^!>0ZhW+4NX^1}}S26Rs{)8LoU==gZAui94i;BtT zRSa5DgytAEoOKaCa<{eM`^*2iYFDir>3M8RA zjB119rk1PUs69N-G57Dqww?Ey9b(d@NXnP-b{{(z#rs|6=a9$872iYImscKWO zK9G!d(>uQ}di~<$MH2K}!IyX5TYk{}^M#IY{cPox`;Ent=LHV&_XUpkuYY3lUF#P( zQocL!rk1{G4r%?G!Nve7C=jh++w^;)Av{zY_E4psV6jRW{}!l}@%wnr0na7ORw>U4 z^NZh~C@HJ`&XT+@E#vnJB;~Ox4C|zjGw-OUwAZ0!g`0r94OSzO+0$ zvM?NPc9wAUU}hJ}+RW8r?)^8}Xi3lIjuI+UY+Q!KtQfd|zU%IH^{rd`?+7GOyIH}x z5o~qy_*@BW2HGEa&;J-YFCw#Ne^g#M&;8$K`1&F6K88!i&^|zd}^& zA1$d5{!JI7RO8U6d!_(fdt4n(ZciU!t*ly=CxI0*rV)DpK5Bx+|aAIO(_CC=ZPhdrZ|i{Q-1};R`wDxeg1%Foxunyb|RK27|`l-d?NH z)!*N5hR@+O)cuV01!3#!>(eZc@cp6gbFAo1md~6yop)g0zV2N+ckbxv>DjTPXGhPj zUAyi8<({8B{dCp&^XIe3ZwCejOhXMrG&IM5KlS93%eQUadRJCn?kQmX8MP}dGxKcq ziWN`5_lGkt;69%|eLBCkcJ(6|zKL0xOki1A--EZ_()&|SNAItEoxLaB?%oG(x~aEu z(IRF-W+smdh=-@2da4rE1NFmD!=&}XeSPe)$5!U$<(-DG%ql1de&g2L`aasbC&=7; zf?+;;55t@|#xQq->%?)ke9zs%^Ly?Leres>{`nIo48ZS<3){o>h)bNrQ z?$2Y7KDyFmHupmqAiY06u#aKxzn5W-A7Plo2ifb$A>qR1<3}0hzRxnu(ZkGf>iWJE zt7X6p>Vdc%YS^^U{o=)ownrX$q{e2o_GPA~4%}N`H_(6VF!SNQyO=Y(cQPN`wVS>6 z+zEcU3;cb4&z;=8-ORZ??DGMDi*MX=^FT&Q%7E2s=>zqy`rv~Pvd*48n*)F01@vWR zBJcp_`CYqqZfE({*av=tqtenCFvMoEQd8I~#SVVuSEk*@WPmFZJhy=N;V@d!E3>40A(NS%!I;cO$Q#@R z-~zukyM<}rbR)QKVzP2GnC1=jOxeoCOxwnrm>XJan90*7fbUG`0^bGU1%}rH8JQU$ z?%cU^`-KY^>_f%(*v_q~UHu~ndv|$R|KZiE5M8nXEbSX_WKz>pm_48KGgD_wLifQ4 zmqD~Nv-C4t&CJ%r?M(N68q=CN{MBw|`s_lcy5U;p`dcdb`|vvmKc+oNhoOKSw)^NK zkF17$xw3Fd--Sa5m<#*>W;v5Us1~u4NjW)y%caFK2FUuVsp7PhnxUAX)<2j$>|H zzlPa^XztJ&cd0@_QSV>{+gNXM?08`RaY}svl;Nb z6~R+kyM#ITz(!^hfPMSX^~?@{hm7nr^vt)jiMf37rOY+U<}+(79{s~9J!s@a~>r1+$~7lG(Aml9`Z|h4|dJs|nEkb_Dms6Qno<-+sNJy%BdWw0*nbDlkOCNC`w@V(VK@Jhfx0Dag2 zKzrV|!`J=5m;2m(!Y}vt(y4_=mjx8y-vQ)c`lW@8(P(7e-POY|4}1am$G~TP@GH!Z z=$2k28yhwpg|H9yxB$1ed)KZW$dB%&*Yq;?vV1Rt9bCQOelPHS@pa+AUZ(fx5vF18 zTtwei-&$tJ@%1eKA7XKE2hbN&rcY$d;Q2p+4D|xOf;zPi)c5Yr9l;EnmB|}b@Lyi8mm=E{dh4d+uDb&W@$C>L(=JXp(rd}{MTt1jGAkcni4;t5$IeOt(PL1}V;Qwqr zh5X_bYp!PQx~~)1{#FDx)c>~wKM2-eHDd+~`{4tkZ;xHS2FbwYO&br8{Td9~zxUpI zqaf{Vz!%d?dw3yS-E%kdcq{Ac%v&^z*?D&d;(v&P-S>K#)$5ia+-wKB62jZZ;TL@i z@ck%FBlr&;Iv5x%_;DM@j~&|p+rFZ3N^g*ZDX0;4{#`I0JPpQzd8w&PYE~+GHp0!1TU!vWFn=LD1AM=}rMuq@bYn$T)e~U6X&(&!hi$;IZS{)f zPr<&mTyu z9?svjJD3S?t-d&M5<9LlZM^+<0W`gGZFV z`IXOy^xu}PTX*C6lz7TL9Opdq^wU)qoAu)2!YTb3U|cg}Q~}HTz|YmA|73Ci#tdIt zTaRdN0pmgV`-O&j29G6VwiDd{`mMLH@NenfOX}u$Tu|r1U%%gX1h)Cz#@l)u7qRi2 zC+HR?sMG#SZ9zYzDe#@w&SU+-!n|DO+?~65pGStTdrt&g7hg4CvROZQ=BcOS>i^)l z)=MwFv@|}W7KP{c{J4%tw zm*N!F4|ommKyX@aE*MuDFZTEK+2SSpkmn)oK^qoFX(@_pePLY#7~|dxeE5CL!inP% z4!+nxq5k$B)NcoP9B}sFNx)C9Z3-|!AmdWnW7+@HrY@*|ndQ|h9{=Q%Pf}q&V+}u! zZNR_Rtf@tFH|5id`!5_4`tj=xolLsTj^ep5dplS^4d5ksC^8%bIeUO&Cki?h`@Ubi zVckX8A29yfLCR;Wc^=Bt&YqrKXwE7pXW;D}+fe@?{8(?@Pf>^mMx|#kPqwzA{sp8aZzF4U$=IPd~gv>AY6bC9=h#TCO0(&;bGCFiOdh18o_vd zA3LW9FBlWVb6gSH3HW_4(0#@Ed5kSB^@9)2oy&<9esXU8>8GEnTCrmJlQ`Dae)W?6 zb9?uozK61J*q4QPx?%o&K2|q1FOTUeb1>fqxOp|;<6~kG!w>Yr|Mu?R7+^07x(=I7_5`RT&kJm%}S+}zI`JBr{4rHj;b7arHa z>zy6jVSOm(xo+-U=DVM{H7b9Z@O}EhxbMQV&pcBZiT=a>?4yr9y2@g)AewthukHQs z?p;ABt3j;aBa~HM-vOTn$v&_Nh&SLBh5qZ~Vjquiv5yTt{qavM@4#d?CLI z=$2=1Z%1-lT6*nCoHrN_ek>;k5A5G;GMoCpuy$=PKh8ioChmC<=m|sH5=Ww`C%mLWZZB@&AO(s+SiM#LilJpJ5 z`!G+WU{nFhzneEu;%&v(OnJcGEVP=gPgJhtxs`4qA{}4(BF#IrI2cbI~p-f85nKNhd z0Ej&~xp^TolvC2u&w`QS6L|Jjs|S*37w$8R@a+P$&dSa~qyC&s8`D(3DEOtlH}pRD z;O)J?`Q8Tb>+1agj6ie0#*tflZ@+OdGovt{$HfYmq5SmIm1^22Q7;TT%*LT9eD%OheHm$XG$Xis_pUo&y)Y^(TG`Tr{ya%pN9$^0Y{I=j_Gbi+CWMq8w_~VJ2rHx^K;l&r0 zTCLW8qscUIN%5G0eO)V=t*&zBj@v7k9qvkI$9nurTyEk5&+h>5!{6>!2eWt6DrTi) zHj)La&C<7JOZOgVGvMkLc@hQnmQYpc~{M5Jlh+Yag#=iGn5JbXy1Gjvwq7hjMZ*I*@^z$%}nWvD;cVB z1#|6+D-<)7VP@<*@4Pd9C|9arxi2j(Jqi2t=>1K7FMp?l$<0au^t3X!-M)sISU8sP z?P_EeEWQ+F=EBTmn7In^U;(s+*@!(S+$cjiEi)Ctx@li4GylrjOx5*QGj+FA!jTA( z+0JIDPnbC2?TlUbXF*6bWnDf8h&3yQqJDCrDwF~@xCv*O{cQXHZ z@eU?GCzZ)A$YwV0Z{_KZFK90&Oc~3hrdXJ_p4-Zt2Y%r>@co&WdzkaD?qj;?WrzpX zTwnV`*cUx3e`9fBd4n0kc?F~X3+eL?^lx83glLc9hZo`le7(l<#Q*-V2f?2O=)Z;F zdw8*#ifuq&WHWi$Da-}%F8l_43-}ARaRJnO<=n{#2ai4WXbs7agUS0(KmF7SgVEGm zS5-2Ae0vG(@EZ8jesmvR7&rZZh6`p-Ksq6CXA`?Zfq)-os@gMBm`P)@(U>6kmjmD% zwk|Y2c;g83>LY<*ZgzT~&1UU;>7^H!LKztBOyzCcwxDS5J=>|?Amsf&?vcSS#|O|2 ze?QCsoUs||0da;p%+}w~^BIJjD=wRa^a=A9R8{2zVvVV2pJ^14V_82!BKu-o?uD_VptEk#fXQtA&Azknz-UWR9<$dcApU<8*4Z#onp6lwCqI;X^W#FCT=v}pXpnn15 zC3}1;(X4%U_ole7*x=#+@WU*7TKd`9(?)?l?h7)1*{_NJS>6Tq5YY8wVB2Q{I>Wv< zG*yE!kcY|6%VO+cjP%#XH?ncC5IU9Br6-u~)(QxJ@X(?o-P;+`G@j# z;lf3GWo0E=t?|+~*7pbBgyWv@_D?Pc$C)iOyIRY{jc;Fku$>9Mc~oZi#C`mgN`(7ZEgAxb9{B`2Q-JLMb*WFs)3vGJeE9(7Kh5`750EUa;@2i0>gg9_4Dq;ry z7T%U3+5^A%?@x92n@k3#qN?%`f31J0Z|lRIU~ zq_<%E8L9Rlq#>kbD4P{Z7NEX|_Fl{T2!4R?FW$MX7y1xD_iv2%Y88CpcsrcegRmDD zjz%DhtzmNa;@s+7* zX&;Tr&+LEosm;Oqs>|5%T*H;fc0u{nV-F*`0Ioj)vQsi^Tt7JmidQ@Y(;d!3S*@1- zv=l3_-?s;$5BBcQdYIY8Y<&Az_i8kM)%PcsPVs^t`;p%|atj&*IUJ=gz&V&$+W;~T z0n#01wi=BC-#K>c0Brxl@9sjp_`8RFOb!>n-s`VMIt|Y6LRo8$-ar5{9?minBpL}`W4FhOw&gnX+_n|#{{%bB~Tmiew*mc*= zVt)OD4Xj>+bDBUmLO(H+iFyUS0Dj zglWpS+<}u{13a%VHetu)$C*Fg2z4RA?aXOx<{n&e5ve`EIZIHNtX{ne!G6ucX}#~gyc5ZDZx|m3k6R#~g22Ch z`P&`Lv8}aCOZ}D1(akkXFvjo;y6`yj)%`aCJzyMwD=H)1!9&<>tOw2KmM@-p;p}hk zLUN|nw;8~Ff_Ql22%FCU^Im{$ggA*M>_JWs!Wj8SzqvCwIzNrc$;*#u2M=LB_r;}| znHe8WoiwWVofqy1Lb^xf*Kz#7>i@l(Vx$rC0P=~BF}JN*2xP$2`|Pv&S8)jQx!0ok z+=uUR_M!2}E8%0?Lw)sfGVtBI8`)iK{2Pwwv4z5%-qUDKuj=X<{fOry@MVYMLNWlx z&ZmCX6UkK_74cN~TO)b~#`_67ky;k*XxYb5s7k9F#w_6O(98q1ih z_77p4S_}MSTt7EI|K03NJM%uw)dTp1b;4N7aJW!h=pRRdwdJ!JquKVs#~*#D6aMos zuKVGF+2decLC8~3uk;U-3)$v3js|a8HIFeEt-9fdJAPzjW`2;7W@D}>nH;>lWD+y1 zt~nE#tL9A!=I5j_={j~WAy+ZL9pDVaDu7{l@jKZ;ctXLST)~ilD;Uf}y@CN}RVnSG zpNRWH#}aO>(IfcYNWp{BDwWe`P8aMuxUaisXHU=0T|0Nc$jZJ0`?^n`dA|TYA1Qbs z`wn2v+qrvZPkw&>DXYQyp^|pB8Eqft<>sA&@0~e&CJ%o*99QaKj~~(yz_TMaCzsuW z%3@%qS50TG+q<&ww(owXx9QQQ-kZLDb1y6xIi@m}G!w!_c1HGT$QN+GRI#41tn0m-TM>+m_%7<{st*e;!1wli zv^ThX$8t2@Ru_uH7Hq$s8Ow#8CIv4cJnw0~Xux*hl~9@uQvWjJpYDj}4^cr=pB> zdzPI^$xcDP_H2bKOSs_v;&w1fgx{s)r|_BC*z-)Zee|)7gI8r$<0D;QC1GkU9#cpA4YG2LV;#$pQ=B5w3ee@yTU*J|MOkFayw{&AEqDv;+ zM}L#Hee~}*dONfAU>m<0WjO4kPtqQ*RA_pnsqbL_A!gaOWoRG$<=2PXM}IupM<2ou z_mkDMkG_G$!BFm_FQWZREbT8@ISW932-pA-Kyr;v0 zpt%sWei6M-s*qCIA3tII*TaVQejM+U|Cr2RJX4{mfJ${0&J8$%RK=nI$Te}lQ1P>D#dT-zKvAw z1^jWhI__4T?Ku@h#MWhgwi}*?p8&?ocrRXOE}hA($dkN67|T%Nu3N#?G7@VG>mM;j zDZW$8V*FZ3c(0Ftg{Bh9)fGA@Yb}QZ>Vx3Ag{#EclC~U*j-}|%k;iI{f}_bWdFFWf z{jN{aVZXWt%3Ha6(YEG&yN|VSw9uHCm^6~OI6_|@hf?-0T)Gf0G7zafc6ewphw04w zt^nzAjPNnEB!uF(baODjOFv$(QYVSTJ)=mjD1v?8=TUoFspaU3@4$C$J++lqE-Oup zoACsQq0EJZvpb9V^Yl0TYGd0`lF=b zR?-|W;mt(K|Cz3nsQl;9Gt{|rXNk{G^n$MB3S|LpZQ-pV*2K<)HB*_@-MM?m zQeQU*Tlec5>djF0O`J@jysd)m%%g6Bw2^OUy6V5F48?(*%Be<+dSkGddKX|8^L z4V9IyNKp<8a>XQ>c;Lb_s~d6(EZLbu%E4g{2TeK%v1*EX6AK+eWrQ`{F@t9GLfu) zO4L-0_1M11zCQ0z2a?|5&(U`tMeJS@6dg^09hs|W1*?OrBUCfJ$Q1bw=ZwbsI)ltm z*3j6;6}g9ozk#fN#+q3Kmm_RfJn9MX_Xo(Glfx!c8U!u%rg89WFD@=v^~}mHb-%+i zm@4w-qpW+Z8%PbL^-ax9Lx(@1wOlN(A0IfL@_>u``iK8P_8?^bZ8x3kkSS!aGA5im zslmY%N*YR`t9YU_{zQ-1xtr%u{E;U^g?~e1gGw%uH`>m!#j&u0JoZNhkhf^xmOiEvm#|4-BsRJ;l=!2qv9`9pAyG&m=ihlO`lJ5p0FEDdh`Hj7 zWn9&&!dwA+zRBslgld zzC8cGg&j@{+7j{uLubVxzO4+G*v3PD(x$mgQZfb+IF%nQ;PaZ z{87JUfcJ-p^M>DUg7~)*;4pibJf~;bN8Lal8h<&S`hPsFN8rt1;;t`W8ns4ZYiD~C z-|xD~l|>w?nCb!10PP&c`PAk?AL2+p297zsomOce{z9*x!Ny;pGrli3H@5=cPiUYH zE)Ax96mtK8(4enz1Q$achPc<`xhjqDu=AbubFlHpYoTy5kyt|I&^^W-${WgQe1kL? zh%EHgb|Rh2n=8O_Ja?i;QE5>z=7Pc)2Xp;cz`v@xYA?P!v?x^VywI7BW3-18WPFrC zWdZHDjt>3wkGAa|gxkX(`S#hC09rShfVcI~PcSpO6_BZEWIZQ=E zCAHteT;2S{1(5w^4)yVe$bVFBNiKsv@8Qv)iqatKue)LXb}x-c%Dvmn)Qr%fq_DQG z*1EIZeozp4mo&FDn~-;DY-iZAm93R5+AsWX#nUUmY65rKBE|=P8GexVej3f?Ia(Zk z=yHH^hW=pB7kk;DykHH^N#Xl3MvGb+bqe<%2y*bCvLNh7h+al}s4^>_TEU>KqyI{0d9a&q2LZVOko-;xbhiflAaYQ_(*fU)a|6qcFVomewgz4=YK6J7 z2ayHgzSC#89;&0=M{BFv$QZQMI{ij{NBof2g>^-+;wLL%>f)(%{Ys$4>Sr;(>D!!9 zzv)2UkA4*2UwN;RU0ku4F_dxdrm|31XEhKS==!W+4^?AjvrHk;rhbsB6>NQnaj+f7 zagh9%_uW2N{nM4;8RrQp@2AkXcd+~eeZQui59uFfuoD6%u(~}J=guzHx8r@a`Lw@I zDV_IYgK`7Aob&E#97249zsI6Tb7hHR4e9AJCNQ@Wr9^@shKFL@YHfny{(dX(fT8(!F;l}g20o(6rA1HJX0P(uU5 zw%KcDGbs0i7T*ktEL2k)jdo}2AGT;^N|{z)4tlZ&0)6)8?A?#@v+ntIYMk@NH4WX| z$72FW1JuKq(=n6=5}AbVFY4)}D_sxW($am1f9ktC)dK&kAH)Ap4{<$hJcB`2Pun83Uo_eYoyCf7sBM>{#e9{;0?L zu<_RC?cKX~&6}E=O)p-)99B|RR&=+a-majG zY%RcTz|k|j&%c`UY* zCo$VkpJMR9&jSR?83xMQ+MuMRg+l4Qdr+oULnX`7@2j<1NV1a&u`G6%i3}X1MZS7}wRS zR|9f#aw=qUIqght=3vh(Dk_4|vN8zRw+{k~3L%I`93xurj1F2k2s}yiW5N8&LQ$HC5y=omFm6-}>G8hTT{O8V}-g7@0Lt&P{ zfbLdDATk3}=ej&L{bU6E@#^F2L(d>`i`m8)j~WFMnFKZ`FY8l389Ylnt8^PEP5RbP z24~hB938%Yl>KBn@c#NWTCFqA*M~VwzR3IWM~Vmb6l(7$lL-M4cxJMwV?UXvGw3dD zq(NF2{bYipydi4cBJ3@PG)3G2XUu;1;RkzR)%a2KUZ~XCap@9snE3E=;>-Q>_JQ5# zQQ*C34z0TI4w?sJ#&PFoi^YaGJ4~zdijQ^dC*u?1N`H_2Wb7O*!D);QxJ+>p>>YPj zh`Cuk+Pz1KfBWjq6y16Cy8?jOeVk0Gp6bkwbg-Qh~TN~;NiTf+W_dlvWgSu*+tV~+1 zv*9o{b>6!I0;P`YV^#mgYYy zEX<*>u9iiy|d!Vqg0t-tMUhehqC;Z<-Y@bvj0_!PL=(G0g-H*@2 z_%ZhUc^V5Co0>E?x3mm-U!nGDolD^&0|T{3%vLSsJ&EfD+$#lI2tf1#uNCAs4)Zu2 z&nVr&^^@VN^ziR=;`H9g$p>#(u6+ zr|je|SQPEe<-Ny`)8BSQQ7CFz<3D1Oa1eoX)avRiU0aEz-PH_*~~~pqSotw z{G*S)ZVop7&G+t^7>Nz*K=_HW z>$+(p<#Xi5P^$On_t(Tl($D5?T;HYccebraA7W2g^9kc|4zZQU40%$Z?=TfCoS3tc4~Aq$V8(0p~Szl z{#W!7cby#|P;%!ESh{sxV>hA>q4*VosZ zW9(z*>`ZJ`YoF|YS9%cp#v5QL<*Jm-$Bc#|661D`BYV>SvgRgMX>A4OW~y65RjnxO z)D8{_p*?jHu3u*kVf@n%9pG#@=MRGlizxoVr6u&=eR&S*5c2w?0Au8y?7oh642^@gzWRz< zBr=5j!h#ZEY=eEuovx?O&6~D37lHFKiGRG#9vlD-1UW8kX{NbBpJ|8wpIqbKcmwAI zw5DdNhBN2RMe2`pu;`#yv1ejtVP21OI!>;xY-MXJ*FxlK1&!Wa{Rc zLqkF?R908#-l}b{Qh3;FsokAF>%A+D$|U9E0BF#!-}8WULwmXP)z@HJWQ1;B++3xq zD=8~2tgWki=ycFOf7n=QRIjuf1=cRyPVn%mD&Xcp)C0n2Ab@g!@dVn#^bbE|e0J^9 z$j!Ja2_u=bJ}f-^{KZQh*OVWG4(%1oO)BDd>n8*SLdM@dV@+|si@bB$PoANxW4HeK&5f%bz%|v76OiJrurp@p)lQS-@i;_MyFEy;&tQFsProb}gJB zaY*9ZZ-GK(O6Pc&KlKzHM>X)V@et7geFxG4=Z(;pVt%mYl~~|@0FYchqYQ3@r^ls3go8TNt52GsZetJHXTPLPlpO-Xk?;7Z$9QQ|JkOOUuMR5 zdFkj7y>zLras{EUI-$>hk^|Jw-mrn@066D~?;M=>DRwv>}Sm6tNYAqi%Uz3aQ;ZZtn(NCa=tOO8tyNF5pnqb4m6hc!LzxtEzyAUEuylxJ@LdOa zI_&xPe<1S2NpRb?4Xh_l1kd<5YNLjZ|Lq`*ubj^zaE#l}pJPT%pT<{nS=8dms6EMo zu6iLShxQfUaqgV@Aiws7JQV= zd8)RKlZDQEZG;@CvZ^u%b0C`uE^22_FFJoQ+TFb)xVd9|3=VVVg5x|_7~|nden&p* z{JTd5WGs$z=Yq4B7mV}u1(}I4o{ZXF*>{$!=+a+f5Oe@_<$tn*!I0Z;!L8SdnVma# z9>aBykqU-kSivA2sbCm^5g2^vT)80Z0D7EuCl3VraxN}@|ESK69W3a)!>GQYLDksU zqh&W9nZ%&p!a{W` zH#euEs;W9?AQ|;=0_2+z>0w3~78Z6|-nvK%Y z1G9(Xl9D2Z;WFySi3a)|gb5CXA_D^&0lLic*KW!Cji&geI`;4-V4rvs*b~u{*x5O9C()NAzY zC0x-TjBL8Q>J5ZPRly;|t$6m5LLqCGn^>NSp-_WAXIM*mkJIczQNgV zoVoFhPE|kiffl?YlPO=>CWZdWifrO;J`CZ9i1G%dsG!1x~}OQ z?;$GofcgZn^Odi*!Lh3V1;6}(+nMDv6Ut6@uHZ1xRdC?((tB{%jIo(`|`>jRew(1 z?ww=D(s4{dYqHfC+f|>^5WHC~o+B~L;fnyq7Pz7<1%s& z(>#`tXW+eeDOA2v4;d#uVvSW+T7^QO zP!0q*a1LlJoO<{@ir*~v$xwVOwY|>_xfT*#*q*VP+r=BOf&L!vqj|$wE{@!==S3P1 z`TF_2jb}p*#re{mVSmkmY(qmsCWPd$7_VY3(-S-)nIK9D9SM&&K;{-b8c^^CZuZZCn)-$&(*}9*A=IRlDs)r_{)! z>eJoe--#BO=V6XxY~cVVDml^hcDqM=ZJbPl;HAFY>RIeT=uBI*uZJ$OP)vNSsl_O* zxw)$D_MM^WGa|sfmKGyRON(2EBzDXH#dqu>V&^D-dc*%L`OP_?e~+0mpZbJd#WA$M z3|GN}`kw+5XN;rxrylte9JvBCNA6%(2tAN4OB0TA=Yy4$4oRO80q{&Zg+kh-RM{Xe zSTK5Py3EP>Pu|tdCta@Shol(IEfFW zy+$(D(9dTqSPn-ncQ04?Igt%^s#g?9#0HIZb+@gD5`URY)G&62FX}U^lkGm>kH0%` zj)ltCTEWU`GVM8-n7xtueXL;c5BCBtp1fc8JL*6i`JRQ)jfHBF$bcpGcrOf*9Yp+< zMzXthx4P z?9I;EKUDZPH@6t0?>8kjyz14~e(67zU6g_ITB6_eU^jLKrNNr*5wLvAVlFNWjRBlH zLVwxqGfvZSQP{cwSwMH5m8ggDFmJvRE!*G1+JN{G#2yW=d zF&2`_6vP*rfTgWDiE|~e^YHt09<;g#{1Faa0Cvn&Z(KiUU>L1*sPrG9q=d`+R;NAF z)?@tB2VW4jsZ2MQGihE3mHQs$iF}81q{T1QvNEL#tgJ0=-oAZjNc+v5zi=U3A`z<{ zCd}2=oa6Gn{r#{3f(@@Zt0D0W11@udfQzTjQvV?2QeEH2P#O^%L3KYfD|5fV`=MGl z!}r*Z;`)q4Cmd(do>dJ*28fKKtY@6~3rv{3h{O}EoX_utZWwbFzW4(xmdUj$mFeBH z=gvnoHZ_^(k8iMSfv|3!ot;yKl_N?MbM@}0KZm1NdgfbCfH@B4h<%qG298`}Vdc)J zb@L%sRu;E#-K2?rS!DQ?bU>dW_DVhJ}Y;c#xgy-9deQy%~wS)VOY2_~L(A=cx<1Ip0NF z2rutZIt;`f3Xtd!lc8#@zmWeb1x z9XL(mVpo@0iy-&8e^B2>ZJdz54>lc$O+fo|kY8&(aGr(OlGBXSL^nzYGc!|eU7g>l z{vd10h`(GWt{**hKH`RJ*u;L-!Bh{f0$XWn1#2^(C;6_H#&S4+!;Mc^^JNB&Cj03; z36Z@sEbmKOVOi1>jFG7gzpfr~>GI_(!GbOi6n`TlY5geYnTQL!pN~n9=8LygfT1Bb zzwPAW3ahhz0j0maLv;dUCDhf!mxVd4!IcY?2lOqd7sbE&j`a%LPGbgiBWy#kh{oP@ZtOR$Id zOPte0KR)O-f|mz;7uw3zX+L2|jz!lKh0`JXYZGwizNMAq%zo&_Xi>mEFV8>2NgIwN%JPic;f%Se%x&8w<4pW&eYX$ zy@>ik1Hp&v%imXq_a|0frE`FYKgt?{Fz1Om4t|Gw8B2oS}V3 zdfHQ+(~g%X=G+@c9+-Z$GdVt#O<-bN))VCNKH*W+S1Zu z)D;~@Dj0@g1%qs)f?)(kU<5{B1cm}SSMun?<6gPZ8{U0gWy9Us|4X#!JWJ5n(5Sj{ z<@J!#lG38`vhw`WlCq-x)ipVFwe4rdAp9>>^XSg4yLHRDs;W9SI3)O@%t%__RWvP; z8#a>fFJLuKt=>68!*vIHPayP-z`sd$7-?l?RV&~*#eNQKT(}eRmmgD?t^KJwXX!z8 zd{DM#hLf9)7AkYox{~6OqW;V<3>Of_ir47q=+gpDtLDe3U&;J{`TU@k{q6~1|NA7s z_a^{;cXxf%An^S1<;z5rLoOo@Qyu4NUrc_3 z{r53|e;x(+>;S-D_iNy<)oKcV;jf<^VBzZ{0N*|V@Tbxr*{%L*d^L|DBhWy<@^iRV zfC@5CK}7=@t;$i)f} z8A!=h38qRjFjkm?i9*#5M%)#@6F@3bfXvVcjAX{d1{i{csSVeEfdHO)foH!VSXx=u znVXy6sjjZxgX4IVXVN1L3JVL1g_T{r&Tw}DrwOBA?t-Z>dV;NP#;CVhrHM1fz_`f{ zU}CNWzs2o7L8$x?K&bA?%F3#FRQT)UzPUwdW?@!mZfwcK24=HTu^d8|`M~|v*CwY@9~PeD9Ko~4(4Ook1CtlFAulDizyeuZM-jxo#+T#l2;J?y&!V!B8XTM zsKc4|)*-z232}q0vKYFXaa-C7aCUJZ;0Vh$g;JUD3v-7htNdwy66z26^I?2^eBOTj z_16~(eUOG4e_^)_#_>dsnVsRqYK&t(tZaeC=Kyk-9sxrG31pWifyctxFxz7Wl%3oS z3L_&B^VP~qV+G-F5AWYPj{V6Wxz;j1iK2hV*eG8iltb|qDH&- zD62UH-fI{}Vs2$#D;7!M+}^*l-w?n3w;C;cQgsjhbF2ln_@(t|>s;qg=PP-*YL@IO zZbz?gs2kOJk@UWMDDMLT0^YcJ^QH~@zDE%Q2{G>LS6&Y`6pPvdrbjXVk3(L~qdSYdsoBKB+Wdx!g zWCNy_N+SDwHBU_fm4h;Z|H2?H4mhykm+;*Q=%iO#`0_9d@0QlGqs$z&X6B}KckbLB zvT7aye-iJO;22NDyrRaO_0vA$k2xU90nT@b#3X(#+0OUliRb$fC4tkpQD7(%Q#nC- z`CCm#y+T@}Jt$cD1eJl3A*|*R-a%roB7FBtyWUg(>loVn-sNBC8wkBnw?zgbSR1p1 z@5d5HtD1HdZ3B@+1e5G%QC@#RbK;KpBmKTS#KJqpw^)_J98?ynTC_()Ap^R;i$w(# z|JQc^Mg5JQ@9PavPEcN++Roo>d1vvf}cV6fCU(@wC?+2F7b9`Lc3}dY)(s(#w&w3~%yvM$D*uxQ@ zTeIOsIxp6pT|qj2e}aYBpuJpGV_|WL{`dwP|D5bx+IO^U?X%SWeOleS{_ETD@5w!d zE1sgbPA0iw>4{yibKho=$i(1iISxLoXyWFBI_bXtGtd{VUzoy>yr}ik#miwhuECB4 zbUpYkT@EGhW#){X&!9d2>_Fe-Uy$7|4r&4C#%4QnJ7AY@41tg+ZbxuxSPA9*r`^cD zU<3Yj9N4f~YrsHmaF@|&WkVtV!n`BS`HXQM^KTsQa|u_q|32RHc<;A^TEIEcS2I2W zBbk!qMGAV7gHmn+SM&bE+x_loiZuM1=)eDzNHA0w+|{TV`B34H`6l*ZShOhc4MUM3 z%p13WL3_-}K-coxr3_ayl+W3b2X#5lGWTsXzUj@LBK?TnVI$_PXAC8x*4M9G4HiyQ z8f^UWigONfh5Q~rZnk30&wI32-Ngf+5xe;f;q}5PVHE$D(?6v1p558~4)zb{h}Zv| z+P|#KEIj7eK-hsb*!q9v%9UUuvn?~mxHG0k=B$;84O}byp3dQa+DBhV`B+2w2&Z>{ zMtHwfHwWGq8-lUq|CQfm?afCsDl^sH^XD$mIr71j1Ht}h@VVd56ECaxMjfHNn?Era zzBr(Ue;mSGuVb3 z0JaJzp@B>zoCNrwH0YfBoWk7a z2&=RAGzUD$Qhxs-{e1|SwnXRG&6Ji9<+>3HR-A;>S$_i|58(8I<$U1-0)0*m+Fmu) zhs2P44L48Z`%vbIbh&>~A;tf9=^s%3V=OAH?+ScCyMTOtIsF6J>X!kQrnVjCa;G}Z zg^wzmsD6CT-}|tDK99s=IREHBEsUQhDlU3ZThLklf0l5G;Lp;zIjRGCfN>D&B+>wV z)ca+3;TK77LdKFR@N!uMK2yT!nlI)7=*K$W{~+)gKkxYU5iPuy`3Xy6YOT4Yc^y`K z>-(_>#eahR6!mOp512mM6=sZf>jGS1n$ujEN?^9LCwRE{kvJ~|W{>rPxnt)8-b;Ts zrmK4&5XdueT=-s7rI}h-FME)AqR#R!5)aPFjSn3Rxk?KQON-kBJ^65?f?*g|Fvv$L z7)D?OMqmU+U<5|sQA2mtE&uD4F2Xrd{ki9H+ST7zyqlVuOfFx#99mjZT3Aw2l3!3* zP=r7-ro!T);-Z>Pl`i^yPaZeWmt#E79xFC1tSoQ!mW@e`r1fE8VHYmzbw_?2svGn{ zkX__G!Mo7R!i-k9$V5_znjXbIwdzUr)uh+eU*&$K{zuL~)E{Pkq<&@lE9%{gc57xk z%+b*zER@jU^5x)1jn6=E$LgHO$jGyZhmphxazk=8-|YLErEREB5I7E8`^}>~Ji!5T zfMG8tUSyWdi01k;hzywG;^IPFQG68VGWQ1rImKCJJpTj7zhruZ`itBzSc)IPS6ib6 zb+sBa`!&GqXLNx7RuiD@PmghMYR4JI)^wDHpP?%h-Z31jTm-%&?s)D8j=3bfgrPh} zUL#&Y>)GDm01r&gvm+igo;~4y?bY)x%JjOX+l8iCY621a5dFvBVqg(;{MsxE7!xn6bCRi zSAy>_u5uCV@%3xheN0SD8VR3>Py3p!il_paSO($C{9t`t6g`7lsB)2Xs&c_zG+5~{ z({&V@XHOq)S%76Hr^%*lfG5Ch`EXn|8NgD z@!JBJA2^q*a#=IHt6T)$UwiwSA07Y10BY;ekKH?X4=(Mz1it;Oaw$BT3^BX-Dwm1F zyUIn!dw;(-aV!_&E;8unm>LGuRce6eh`V2U1SAF$$SqF-&xNyLj>ilrKe-!>`cvgn zod8Ou5u_Jv1r=ZAqL3>dX_br4-|@U(FwUFN9?}APfYtf#dsX+K|C?Cl@+fj^tas&lvS39Y?&|Mc<&wB(9kq{>tS3QXSRv$-XXFRx zL*bG_@OAN}F(Jt#3x=Bi0bGijuA3t_{ z7gn|vhnJ`^pP~HL$DIcu-WQ;?suk3S)$nfWyPS^Cn@Htdzh@0rxok;V&Q*ELPXP5% zHPt7)|6b)inkN;6=Bs%bC>%-|Xzx`Ndk9wQz}B$TKi(+10dhkb z*gM<6z5|IJs$6i#|H{o=l}m154&}R`TS!m#FiT?NTGqzc229OO>xBNcL$SLRueG;o zZHVvEOt5spadj>G-QkbFBfnQyx4~HRaUeC8&kzNhkneAmaHJD;JE*u{e@bX)94TW)K(C`@Nve+)W_M6v87c`g6^-`x`bA_WcX!3SMsH^A%*{C z}r z!Qo_>GIKor?0oDw8bfr(U*P{2*`HJS&)b(*I@t0r;IC!0Qn8V^VaBMLgpb;O*}e`k zz{f{d;<##8TRTfy?HHf6j>`Tl`&po=QFC)fUFi?eyK`~ph23j~gN?rs^Wwa;NFr+W zpWv@0V`FtTy`T8&_(=3%o5wc3;@J&6eYyPasg+N6Df>Fw5&Sa)veamY_gC%D8EpK8 z94j{`w~CwR@KJa0X#>C?^%#Bmo$}i-(b|RLjdKHz=8kZu><;x2RM)%kpPCvCJDJ4B z=!elC>&xh1;g8pXf`U@CP4?yv>e}L3U=OjJE)M{IDg*nqR1e-rd;@bkN(0Ojy5&9E zP7-f@l<^VGgMxyCE(!fZ1`Bs#ZUN^vRVq~jpM$YKS@ATD%`h$NmCiw0N*hBIE zcHe)1J;HYBSE%lv#N7H2&a<({j~?GOn6fX>6)U>@eEsPB<_@n|Mk!N*lbI9zSo9<1 z$Ai#->H(3XyJhw8)bc00w0VN;Q~5svY|w-tzzTCB`?iB6`#PI<`EpQbNGLtAYrE%m z26M6OfNZXsVVo~~U;I7gAL4=hq4*5MCLrENySFFwb7B*2m)>SgiT^dXG`}@imA!g% z`U@oz37uz+^@?LO2Q|PPVxXnE8CK2W`VmaEnG6@=E^zBvxVCkuT~-C?ON@m0_4GSx zD~PPUm-a68dpWr|<%3b#E$makUGaj<=LYAtp`F5bl#YYo$Q)!K$vdfiy>d!8ys-Wk zfOe760BP|ge?2xZ-MG(AkTG0{zo6T(41=Kix;Ve6n4Ve{?;WqEIqm^Q#~+%9qC66L zy_9en=8yB%(Lo`RgYS4BNcT;L{gDUYr>mcZ_fy}ev=ek=AV77CWdFTJ5bvN+}iCSoYQ#=k{71H6uYVS&GX@j1viUt z(zu;H03DyxM-b@!RnC{x_XURrUwGKQPdC4F^f>KBT@qG8b3Aob8^Kje`Q8~c#P;KN z!n&<`e;fQW_n&Zf`&sz;+UKAwtPGx7@g(&T+&xT}&*>c)8f&yxwXx$Y#?#mb=ivmt zJq-MjmY7T8{0_!BlSfTrJe}Ra-N_Z)N4xa^uHfo87v>T09ODiP$1Q+BmjDQv6a zgpq470H#1$zj*M!_2}_Ay@4xvz6XplA4Ox|3+>8h&d;)RRhSm_ZO9(vBm#He1WQrJ)NATo_uZPAmNRs;AapoiSy7oQtga2`N-tq|HPKs1WJKf{9KVrR z0p$xyG~aLiHw!oimqq~hqb90(XydNQEI=wy&?MetudjHES>du=H>(yI8F_}#RQ#y= z6!ZgkaYRG}#eLDZfYy)J{h7l%;U2Wc-i3RycgVFK+Tt4Ypq_q)-yvw?8VNnL1Q>W{ z)pcgRqdT2tT(V@z8KFlE%7d;VRP$&n--HT8Eu$4jMMlwTu03uUYDg#F?&f*EYXFeO z-%tMD>z+whGmy5!iT{FqW(Wv;cd>F&7rW;}u}2}~&D{%yZh4SDFBgj3_faTx0a62~yXV!XOO;WixgIS8gwQvja?+IF|0<&n(;q4o-HkGiM8gFZBaC z`5voaXf=dH%t&QYHCA_Eb&K;@=YI|KOri(n`}OPBv6@X|p|sF^xaK_;ZC1<9dyqCW zneNbX_nr+gyH>#*uW684uodh_b7z=|#3HV`MW|LHfA22e4tpzOL8_3_Gp#dAw}W4p zC#={S2EJk3xrnqXgsVcz`dAd^e!4kpAM=^!C|oj83g6dXy0J%k2$hA%#IZ&e)3 z^_&JF%e-Ov#$b>ub`| zGvL4fyY-(G4_DurPEPJTFEP5HdH*7L3g#|4(HVTO$?~}+Rl=oQWhrA!`9j#sJ{HZfhIEJ~lb2LqHcR@?y7>YOI zpU?tYa%B=*i2cu|GCx0X4j70HU_r<{aB{J0*8y^kS{p#CJF@k5crOf|$M5!=2ct$? zfx}oE7(dNPSkb;P|Vx>OnolGp(ez5Y7TI97hp5wg$NCQaH5YU3XViZUW zq@a?iKx`lZg@FQ8a+Pi;+t!q&P_cKBC3l@2ab$8d6BCTEG1U)RUNR z#rUNZzu1hmP;@j|SKX0Q9ZRcS0v68)LqkJ&G2}UDNNj*R+kb>R+x`pn3H9u@DH|D) zRMdL)%GF?fxg2b{$K8F{HwMo|{p0ehEW48hCcb<8DI{umS>PeDmBw~kr);M9Z%e7o`EQt5v^GG~+D&qGv7RpG^I5ZS}D-eH_H9ud!w`q)L zF`mJ=9dj2d>pkF)-|GX)1iOocB9DC(zm*%qXf=m^byM-NRG8(#?T~qA#hbvUaCFuZ z8^b0saAVuQS%sktEN!iB;5^D;>VSR^S|f!~8~UB7aS<$#arB0JSD=Y+r2Kq7@Fx_% zMN1Yyxn6Y_?O}2-3GAG0Kt^!6s#KFaGm-lFUS+=v(DMHA^=Ph#5yk}A!w4%|a*6%J>JIEzhW^6MdLFP;?pr&` zRAL*uz}5@I#^U;>hNeNoUx=$v_ARX~Yxy&Y+0 zY%JkD;@&nO8^FYIHsF~>PjWhdeY|LeYdo#=vvIJXe*e48?YiHNKSO-se_5qiNn%R# zn}cEh^iNefcjg?;@1|N!VOo=#Al#WdpZvY$Z&5uShzJP>Fko1@3S$e2P~1B zlL5!*&i zpSFO@69^=?L6|dF;Wcya6cEeBFw<%VsHwl}WcN`PQdl;`DF_VYqQ={`w;xJXi+;cL zvuDmmnp>LFdF#jtOVt0^^f}K59!Fxg{2#eBCE3+6Hqgi&|V)c~JcIdtEGz;`*&iL=rgSQ^Vl<(9SdQ zjrYmzdn?`s3%MB`@0y7#;9r}+=H@NYUZI@uwCGJY1Y7u<;OFVHoJ{QDZp?patgL^p z@ZLRcbS{)7y7|C8+w`h8bp6)n+048S7Xg}9Hz&aAV^7%(z5x_jpV z&tmUTy&>kRH?~aMsA-71&DnK5+3Q+%IU1`=C<)~J>5q7u!P^W+rEQuH+@C^R&%tcRjjfmgFoxKlI&8lC$;p^*5 z=diNecC}Hy5js;l+bM6kA9&eCJji`tZ}xyHH+OLc^~%{*^H_FodY3QLkW3I?%jVs8kfH zH&#qqrUsJBY7>R=wDto8JI2X8<~J83&(b;l@G+raspz=ADZsmY{J{D5&M|(+cX06{ zz&|&CLGTwrR5Za~Juv)*m>&CXTUc4#GLxy;FE{*+)e^dEh^z{}tiOOZQjIw=j$hD! z^33{}AK{bLe}c<|Ccg`L5snf5Kka)Q8cFP<<@KodXOrKMJg8yEE!IM6PEY)+udg4_ zoWI`O^+K^!+@_M7GV|>`z}wA+E)001r=(Kk@UB%wVn83q_L7)D?OMqmU+U<4jd=)9x*|A(F3eVu(7?6X&f8oI&-cX2m2HklGo@n9;f zO!Ri|;{^ILee1?e+x^wmIl-YJ7jYN2)I@Q|Kq0O-FcQ~GOyqZD#)|sT@UU~G#U+Io z&tC}Ff5vdy#n@M#3uC@?@nUFrc=!dxPsq$1l~yp{b~3CQ?+ww;Ua-hv7EDsvcgWsC zv1h}@OQHJDeAIaL6?fsfl;8D)FvENd?DvV$e7N=r=3de%7It1>A^j=~yIyA@^%AR2 zKFj`N^Rvuzp}RFp#(L;>Glvs8T)K3L?%WveeJh0V;rTwn!NGKfc$$SH^UIJuOlu;+ zIqMn_e1YH&+LZI4Nj?h<0d4X*fRqaWX;%O;$!}6G!`rJ4Gg0HcwA?JIAtQ7b7FJn@ zo8Qpy)nI7I?L1AH9jR$ZcoksxI}|6D;EcG#&Wk);;^CqWxZhml=#cpq9QI4l$iz~u zL?Y3gIdf*oqsFs0++|WJ?N?CavqPgvy9AAiufd)8-^1OwKlBLo@jQ^f8xmiE+p)ic zI|+XPX4e(i?;S(wY0U57r2Pu&@0#HiceOoA8PM(WJ9}n{h{&k{c0ra%w3c#H5F3cV z$WThJW(s3a$(7xLsniHeWgOt|@iPgz%0*JJF*d_ z?#N3q$3L-D40#6==()wz-b)PO;PW{!aoSi2U*!wSHU@XOqZ>gO(@^f{7GysE|d=IY@sUETzUUW8P#as7V5eSPTV+QXy!`LXa4W>5gvHfsm!% zQ1i1rv{wP1Rg32~o0usnt{EjU;5L5-EDV?jOV=&}DY;J}ms8%4vK#f|Q1ia?dCei? z+*+HH&H$TwiNr8xsqaQWIZzY$&(;_2>#?E_w)R%El0n$Xh&!5bS6^zuCQuq1Q90=1 zKDwJHD=X`OP}wyUxbwDNboR{I2xAkIrtuaI>Ki*=Vj=By8p8>=BTyM2F$~6c74x@3 zzT0{z^w>zQ>*#f_>nh^g48dWnt!@{4`)0lriH`U&}HE3sbcIG`^qobo=!#KoJ zsbX$!{}q*cl=YtQR}=kcllNTI-HUn#yRO0~>z`z>sv$5q=u&H2t9&qX z{i^0+X0r!g+FNWZFjHC*>`hC(rWx)93J*dmY zUK>F~p0#vcAm6Vgp5M`&2JSwyDgLiT6af%<7v96k&jpkp*2CHbq^647T1G1wEc}JJ z$h2K)hYbkt-R&k*-*dt*`GNU=ZN&kKaRMh&$>#qmt^Xg%N-u!~0%G&%#XJc#FM|=;C`6r9g28_R!*MD{58EW4p zBo0c+-9%%b{KHAGGjB7Ei`{J}lHVe)@xFHa(SAb4+mP+Cn)d5TPuqp3gg*3sU4l(L zclK-~iDA?!GnZ&zTT;mB<-FB&44MJpPkD$skoh)LFW5?-=jl6#%02cg2wKAJmPP%* zcXXyPk3YL}R-~5XjD-JJA3Fa9+<*M>M>}KQ-~VmH)7o3xe?$9hO}84OlS%CW@W&hh zedo;`FM*xXg7&c6mbQxatS}{cv#~@D|J?i>bQxRWT-mPI+2v#BgQ2nXHv16uUw_{A z+}U$WY;0_BXRjt>_A(az4$f8iI&ddW{B8Zy)E8+wjjvxaK=}JoXbyeen6dT{63Lx; zyme{_(ebysh$~4v#r@6BvK))CwfgRzyAQ?w3p_^};AtENh9cS%D|L1>3#nIV{DQvd z3ExD17q2hHALVf%GN7|%8E?Y&seFEGXh?D#L-=6T5o#kl<1hICzY_m175sl|oBTog z*y^t@;LhIAkPzC3$=1kB`$EVb7V}yyu~#Uwcx_5N4X(sC;ctE&yqCnI??PK*&oOYf zwh*65^x$^v?_r9CBYoy#XE&NZYP*Ol)x6y(^xB{n;aR;$kEQAJZXoiGSFU=Yq)<2m zcljhA^_N?JLElB^r}?pHlBn;2KN0?5E^4Jv!IhF)P}vu7zg<^n8O6_I*chp_&jx2PbdH|zpey^%@c#RV zPXgtaLM(xw1!mGQ3-&;xN3*`l0lx2Nff-P@<9Ed8U+R)hETPkxs1nK}?2$RpwNl|8 zv~faTc4OP8RaF)dQZIM^!6=yA$T{)_`Zu9CNF{y*F8l)r+{+;I1fN*h@e~R z=!P!Twh_AbT`Zh>FZ6;u^1OxSX3@iT(TOqI8&K=Afg4sZ0S8<2(R! zC5#s_c6yK4je8`YWeE-X<1^H}?|CkSJK1Jm-oEnQPKfJ_JK~KX==wx+d*;KnCv~=~ zKl*x~9N?N3c}`>eAK<019Eh794x>$MyPWgdFv*{{6McVQn~*at*s8{ysjQzp3I&;u zii)CqpI~XP{tDwOB9m=NrztNU2$DHHr|WiT2Z@hpNjL@X6Mp|Pcn=&{7zcaiu7s^q z0^wJ|S-=umX85?FFM#;7guW*hrBePM*k9AbQR%inVT_~Wf>&J5i+lOoCblx>I=-Hu)TH>jwkQa&uqAHlTgLtKbU;@+`~+ao)pTVM%?zMy=`fGzcOeClj7(u-TyJD*Qg2~xc`G+BudKAVxbVuQ zOQHJocwFfqjJd9^&XV9&WMyrA%Rnw~)Q`-qnuAz zZ@7d08QNz~pN_P&vZQCd;4I7{M+Z3S>#KQx^=kEx+qN++aj|Su><+dzCWifV{W{H) zfs51|Cr@ToVs3`i)WV{+gvf-TKf|2{`l|y=A|rG=`8Q9WrY1PE+TSOWMrB;%QHAqZA(Tg>ya9q0~i z@|oMh8F29Dd%@jjCOyk}HKAQn_6C^kIThmfuBSU5=)H#AeTYB)d+*-8Rk)jdC~+57 z#kd{a5ws`4ib<2ynxrJqBqf5Hz*3j-ASIs%hI`U;mKQDYgxJhAU~Xxu!$H7bNqE0@ z$6}~?ZVv=T&8MrnzG3c=n!kmf@4R#0MsRW-MP)#^7rVn685y+S!#!Yrpes~7y_=rBE$A-pVAz?zk?!Qdot?O= z$HR}?&9)%O4N8uufvvqI>@JI;XP09fA@DveE$s;M{$cNA>IsBcB${6taem?=H$<3Mj1Gk0_%4~P<_vsHwPNX@9*r0 zfxFvdpq|9c{`U4@AeFS-{P9P7K_>@W=Y=W`KVKhup4(xcg&K_6H1Tm=;;sW?6KK3E z0DhK{4k!G4x!4x**E^pXbpUO^^7TRV`*IRLp)FyB=aG9!4xz?);P}xagT9+v|M?`1 zE5b3k5V>#Ou>-UOH?}9-d0_QGgE2pmnNv$RUpSxGhB7_=;}y?mU$Vl7et*Qr2Urpl zs|lS^&RAk+zSyvyL4Cm8Tzy&9d>C^7_SEXR-4*mXjVWEIAh5ow;9oadS78qx?F&g!tp3yIy&F<^# z`!;Wnm=nIf!1hJd!r>o|P*Htt)jU0;B5frxx43bGQO19I<$FM(N_FKDy-kWgvL2LXU(L))0chvPGUdKMMYBl zOG``g2Lpdy)uM)x7+aXv+7f@A>*mVhxDG5>Ky1>$&v(v6;4Ffk?&kJM;dtf z&!wOLGMJ;Y=05yW;N4X#DgJ~vg@b{=pii$~xg2637PqaRG?Dr1nl*G>D<+JmF^_hD z{MY$}%be=8_SzGqHiq#w6#p|*m(k9H~W&LHD2JTEgN{V=t| zi^J5AvJ;$4O~91osJF=2STeSO(tye|k%7yR5meSKtW|V3d&DY#N{_TTvxw}c-sfXD z`$zm|#F9aif8qSvJGXCJTG&|Mu#(Hzy6rJ6+MPUC?(FYRc5_*uk>Ni5%^TJ$llIi_PX*TambY2i1dt(m>FIca|-q^Fa9A%aM`5cHv(r zJxE^pcM|_$9u*i8d~q;v$5T1vQYk~^3(iJHv1o4?lGn3>{t@29PMb!@x^lt<5|gG- zo;(l@cz-yB#C2>Zo7et3&Tm$FFHnn!KgRg~Ve}^u^qumZ;4YO&=&2ml3+8J(`*|D} z%4{pS2Jp6fwaWykBY7S25oM$=Il+CtfIPE-$kLxzt)}rF+liL+nMn!I8XwP2FvUtn z@dNGV7eHTj&Yn3FX($$BjH4~{^3)1C*cl%#hEIYYh!0q3&-ELdL-hBPwQIO}{G`MI z(ShcQ1b65{j`+A2&P7J>yZLjKVCRC#$3o3Nc*$3QtI-)s2X4WTE0$qKaX)>ov!s);TP;l28g*RJ(@H@`m5 z+xsz`(XG)fu(M-7T)VcUJYNaCD#mM?>EF`pCWLHY<<-sXO?ZmqDBvtPUUJKOgwmoEo}^8FZQ zT3Tq|T!z(pX_S`(j^}uNKssP_m(e*3NKGcpFJBkPo6~l=2Q|x zZPM9>p}=2|dGzaIZb!3r|3YsK@=D)UKP+H)n+Lo;>DG4fZ+`t-z`d`}W68ZAtzAR$ z&nEKUSHCaVI_xco^R`lnSo`dv04@$Xm{moDzh6bGcFw0|Cuk{F-5 zGd4A=E8-aGP|uV^rKPr$#%g88w$#i-Bx+D%Ml8ooWmsB9Vs2V$*0%QNTk8FAcLwDG zkLSPq+6mqMqu{tW^0ba)F~%PS#ine_iQSQD#bX?qwu5}SdRxlw*vvQso|d9a%gD6d znXv)8cExTZ&)iPsND+~knjE$*bqD$0EO-yW75|YEn?b%Lf+w&+|1~R2=yL*761OME z?jT=^SHxyz+I1pw#_rTqB6EbyqD*mA8opnO;(sry+F3pII-MK3( zaZfvSRZF*JX3~LX2Bq!oQfy7yf3j+qPU!ngshKNG7bRxwNZppPBQ1P;T55o3<_fc* z#LQjfRzW)nHVWO}l8z-ZDjmU%R+7(>Q)4qTGm4d=M;5>Kf}c*b@c~3#QLA;IiQAPv zZW{xSa6FNgj+H_O%EHYu|4Q06#)GP>_S zE^+n0_uaPVKYL=l|5K@!rEey=`d`U9ZYMeEa^JsKe*5Ax*MIKne_>4dtz{P``B&Qh z{lk05UHyws1lFWXp5lKg+{AEtrK|s9yquh>`?tMhwQ6R@H2=H5erJj2jd}h*y*~EU zj43nj`!|y7`&Z}s`zSwuVORbvfAaSCpAVkvKkn6xgrk3+e)NLerNg|e{Ur0Z8v{HUCUB~ss1>+F%#YW^Znd6UwUbr|3~*$eEZ@CcmMA{ z9{*+ARVV-7*8e3k=Ht2kWK^e~eZ@id{D0>X3O#S{r*&6d5~TI{9|#uo>P(p5gNB%}_*`1X{xm7s?1XHS#X#EM(y+}cEo7;i903!V(=LSC%)=pHfc`u`zXMq zIbXeUwN2oj@?Wu8U_NVfCU)Y1(tJHE$dupfu(A91wKVno{YPiOX)<9twx_5k&=q$| z%<0W8k7)Px3${2%Eer_!*CL4!e-;v0qLw3j46YLWqWs?en*slLOZR;S96afhD?eYl zH0Jy{J-cONZuz%+asKQU?H93iOaGAjs6Yj~fS)~bm$VIS3NXSz&AkHi+5Vc7ZIU*R zg4=zNzR|&ss>+<00Dwz_JSxc|$) z|G8+62X_B+gSZ>{VfRi8GG%)^Y&LfG`ks0{^~&g)k`8VNC;lUT*p^NXd^!1nbCR!( zJq{%;zUs`uwapRwqLrmOCrD!}kEBZVUH|l{IT;o>wVhgpBVYqsa!7Db=YapQmUi1v zI$+pzlW6G?3&(xA<|oVl!InZozi25xxgHSwKiE=EMy7g2OE>>1ZE-*P+tO0;=J2LT zkulB3$%3<_0y-hqi;5llGWty-cARff(GV=33xwn#ro_H#tt_`XqOM`gS=Eu|W?8N} zI8r~QO_CyoGnJ$}0G#I^4@+GrcIuD}YyrNHeT7ke5Uihi$rCV|YKJcq|CiY6p66Fx4a^kUGV9sQJ zs8y7wQGAcECIzN)t>S%r{WXgA(fbfE$scG1=7;#dbP4^?<^$VaPJ@I|r9$VYsf_YE zjUCW-|4;fz&*(=IC(%AWX*JoNABwK9s7xxEAidtp1JaF58w}J1Zg%2_Rd3H8Vqx+D zWBnQ@3)DZ<<@H$>IH8>4U|)8hV6M}c*^Ih1J0G9zV1Grnt*W`m2q&YRHs*f3_|qeA zuVk{Urc`TVxi>w2@o<-keKqozz-w#F0uL^^=9r%{%p(0EZya~4X^2sjS6uVf7oJ&0 z@x8`B^4Gl*Fo^mrTb^^%<0_q~@9)=DH(PJhiuU}FBY#K_(xf#}4E1t~^iXf7D342* zo_CAyfwadh>cgc=YdxaA&~HA`9{B(l?(G-tMu%9{Ym9ff5SL<@Vib? z9~v*JFO4U)2fpJH?Ile8p&Wl{Qk<-UW3ZQ1%1=+TgNW~D4+vwviDD4ZIpBDEoR>9l z*%}^yfAxZhtE-b8DYweyLk7>u9-bs^j4Qott8>)#3#Pc({pGT7%*$k=G4L7>9H-}b z;5gmO%Ld3Yv~C_IZKj82-{ytyk8s2Bx50}dFc;)wUi@|8b1#!m%f?AA%;yuLL@p}q z?q>xur`g8^RB4_cj{P&7Sg!yK&J;V7PvIx83a}}113$4rdFmkBE{(-q88#-L)~Buu zuw9RD{Cx0(R%9mvu>ISu*l&Ke$P>}7_}U`yNwT!-G>b?-_3j5PukJE4m()F5)&|(u z7d7?2xsRDWc$D-7>3dvgcC`unF~B^UTNZU+YY_F7mPTgL%@v|Op*!4C3O!I|sl6-v zl+QcGSOMip{UNP@-7_z!5dAemeo#;$`tz>i?|bs;6Lq4$Wl3-KW-Ux6X*}MZ?XQ36 zA`OgZZ!a5akcGizVm#0P^o5hQ99SyG+gvyG+*wbRKtD_K;gaD4?`g4@iuodMLi0{3 z6Z7dJ`-00KU91uFjWEqeN>B53g8TtnDdXJKA2#tlSY$R)AHGXoZN>JKLBBPdnbeyy zwP6o@)oXp<)h2A8md$xKea$sjnwYPjv`@ZVE^s-QwMH?tN5{^c;jWBz;UlSVOqYbqXHJK(oUF}^!L`t5_a zE;fkqzr3%s{co;d63KDoOW(cYwOeQAAEal;a_Om=og^oCTE{XabjY7(6zS{5{4@W# zb;|Nl6=HtQVHdA>?`wmYzl3RiQ+gmuR;-U6*wfKA_T*tFoHBd2j+JqlUlhYUwhPSH z_tADX@0WWI@v8M=y;1%7yuHfFhJUM@UbCqJ=b4MWJF!>GD=h}Go~eImy~{G59< zJ)r(2dO`iquN)G82cuAm??8{BLcMM)?RAqw)zu zI-9`oYZv(mQ~8AH`;?#Rr>s9=xPNi8Tc6LJ{M1J#fhRvTW66XxBW_MEf$4jMIr00i zRph_s)w8<)k!BI)6NYl^0>gJ4B0pg&pD=x&@>Bhk^=~srSs<%?)Ja_Jum;e`kmg9& z>M=Fad}urvBv|33?5E%>d$Ux(ZR1CKF(vj@m&*L;k&U%yN9u<(G)K;8XgKTds4b)? zV@7KmLtVd`{8Zc37Siyq@d?j;tEWwp7FNFu{Smj^`O{vAjoZvyPUg~s08qD)K1LY& z#t#F0p`WEn$Eos!G=ceP=c;YtxN@XwQh9`_9Kt&fl7;1Jfv=ZO%oi4k^7zH#y#?ZX zg!zf|o`M7nr_D3711mZ(KO!kiG?=t;nb4EgMaQGe}**(8xMdQbHyOzk5~?WgY(j;~*|zy6kh zOi-GhEY)w@C{z_wVqbNcOregdm-Pt8?hA=ZDlhx{Bx?Un<{%CZk&GZ5fU*NDn~!#Y zrAh~rBTZn=Pd&3OOqi-k?sy9FQy;CG`Pnm$TBR*f`cB(?w@G_2G0;+T+Db@C2p=>c4TeChRd$1KmnMGefs6dUjpZ8A%D=p zE^g|7^Hz!8y*5Yguu5jWZpvic#|6k+m9U(b9+~!DZLz@V-LI}3^Gu1rm)`sF6AN!C zV>jfV+vmv(jO^5j@BH=r!8#^)kLE}RJ8bPYPwlwd0QI}q$zGAN9eR=xG&!z!v%>fO zGw0ezjL>flJ|?}LcH)(0(Vu;{FBtoTbSR+rQ&e|m>E5(3St$9<5R_sbW@R7$SN?N? zK<;ci(C>OXo497@;~PJB!3v&kVLRmRFZQxhS>n*o%qsXjgcru&U}opY19Fd-J$rNH z$}ttD1kA_pMGyP!=XnQOKCEPsCq|DruA7-%ziLzE=j)B^I(ga!O{~6G%PUM}V%ny~ zMVo4j;{DS*MooO@O#@qgcj2rz<{Mex@zMxASIMp%bLw~f)6Gnt#r?iDvY;&1&akwK zAD#A|>!8mofd{UgP&tz#}=I$O_vZhEO?=L{43aK!w_9`2!Mo9jlN z|4g6C1pLA3@WaatCU%Q79H;7yOn2{Tu8$^Jn6zq|7T;LOj&t09)pHkFfR}EmWG@{c zO`xlznAR8JGx&tD!aAE+3H0P*hnU~cFK&Ukz~u=$(3kfO3G_)KVtFbqojleK3T%Hk zP^x2NT#xe-r}!ury;r$f#a!xjvlSFQo7||PZF;!(X$RR+Th=P18uWc? z1kF?s+1uH=0sh^lKP^mI|9>AlP{P@Pvuo<6)X3N8)st%L>m!Y=G6SlnY_!^dja@Zx zT-2zfz}l~_Vaix4RZ5=T2JwctYmdG1ZUh?pi+r5u-mkWCOdXsLWgP;39j_;j&qgqNRWlV1>h_gD8Yt;p6)l{IciK&%RXAeC)(kOLCZ0%J|-GF^6qYrK}=6Fh*5=*w6sUp$_q!EY(BSfV6&U@ zH1bfqK#rx0_s;;UdtNYZ`5|@zQ zp4Cn7$m(*dk*^EevAP)@SzRy#XwT|qc6fDn6|`e@yLM!CWlh9gC$?vGyLDuB;aW1k z9jlwwk<~rw>kXTaIVrCltJ}RJs|&}+oOY~kc1Kp1-_dvJj*2ktQQe%5tZw>L*}kqT zdvku7z525DsBUgYR+lrXZ>O{GU%GVqr#;)Fx_KR0-QP|=;;^;fq_H*E$T#{$?NHqw z9a-IBoD13+e(*(!&$YHkb@My2x+_kU^+mRXxzue!VLMc}pd+hm*}m+Uv+I5d%c7a7 zGYZTY_4nU1wdvG}bGc5?irjXnZgEFe_ucPg z3ikb6uKHA;-44}NcVu<>mHGN#=gvL9qVM>(yR}1gOFFW;PuDJ;eD!r(=MIqTyC$O@ zs$1HT)dd!L*W4F!WkF(>cBpRI{-`duyg%m8@V-}9vp=f)-C|jNb!$6RSGzx|yK%GZ zC}Dj&RJVM8RM)od&JPY)vb-IttJ@#d%^CgSye_`k?ND9){;2L{cf5RIWY#xx_r1Cm z`=h!8{u;gf)onkwLv;=NqqYF3=&BJQOj+G7C6hh(L{<6oc z!8MKJYwMf(r6u{`|DNNlzuEA%``Z%rsFn(@i$rfGKw$2xF5=f9Q^(Xz85ZRXFhd>HHghCbgE6Bq;Aq~^XS6E%L zQs5A3CHNGW^k1qJ>8sFOBwg`74UOy$EO`}gY*6-T`&wei2W(JNPRze3|fXv7l&LDG#OxCxyRLcc~K&>7K$;5xS# zzW*qy#RPthq8RkS$u!chz}^&Ct-uAK)6&zyRY&gbSq9&I(yquK#oY4jQLO@(D9X1h zu%7{UpC)kp`;frgNa5O$;(ZnBRFnuDU%x6*4q;Fm#@RYQ1V%s7uW~&0UaN{+di*Wl z9-!N#FrAcVN)c{fq}`{+i~2%=!EB=dFaFi&`KbVZQKj~-e8#OkPAd@@%$-U_dVZ0A zW*K^sAWu~xFuOV-$hh@LF81JKQA{4KC_Ow6VY(=WazY|Kd?$q8Ef)2KyZB>_V;rqwu+=F8#fg4id~OvOh`LQ+uJuucwuDwMsFqbaus$A8ebczuG+Eu_7a!P8 zKJGx37C%h3T{al3)qe3k!raBc>m`c!1){#KVX*Wl0&?>Lsai$*?_V{zFhjj)+v5Rk z6N?A*(uTT)DFD|GTj)gX6~Aa~YnZF>WO-2!%OpCRFxP&$)FLn!*W_DJFAQy(?lpt2 zybn!C(~Rtx^DYStvR8t>@p&fHdoqAN;S**itIs{w+aSJ2m@Czoe2Vu$QQy`u=s^YW z#NcAe{@bsE8>2sps>eAht}^wq4J|X>U=AH3XJKw2nfF@J;Z4-oiEy8f4<7Q_XC{FU zllv*p2)a^!m%!8^gt_$c3_F`E>!bEEf@0z)(kgo-yT5IU5o}!s+L*F_|9FS}5&H2N z+bYx$EU++HQFGL;O~C4QK*h6vbR2SMOlT`U%G2Z|Q4wgn=2?*OKiu`ZbJ=9NyF%5ABJ>G-6 ztA}JpIE%A{F-lR%hd2ibULuPTRmF~4UbNsureE5NB@7zWMT+-@u=jgS0>iIafqM(g zx1ZYH@#W2<_i6?1EimPad!OogOg^w$GzrYNL8-oR`9yo7m^6fy{lY0+Nm0UcF$}Q_ zHzQ`juHIDndBf?;!i}GOgLAUNki)g)=!$!Ok8%G#++!y{4`a< z&?jM3(o_XeBaTEZ{iN)v_=H8JRxG1F@xv%#U=0fu?+b9l=q+%3IfTsu!|B7QC{Hm> z1y1!#<+>HmdkY+2FM8hxb!4MBZd!?UMf-uui7ziPoz#iC_)cu;4cf!~qj-kKbC0+L<{p7ZyFh36 zJ)?LIRuyVRIYtFe^*ovnCPR_peG#@Zis9F+z`X^g{){WHML~;_^mD6gePjP0ZwPDN z4>ykV6kqW8ebS;=^Ap>u_Fd~yYn@hXX*%AXC&pSQPsKeD@ARM|xf|V~puf%;Zs7ke zccW7$H?SBR*!Ha0-lgP=o#53 zz7K9fyvVO&{a*Hhwa6ehQ`Vn1isyaG%lN+Vu^*4VUff6mkoX%n6j~N+74yY*ryD55 z$3ZY{ne4`L(c{%s9>x!jw}p^@@<1h@BJqY74_s9sCi=&aAEo!ts4FI@}rAQ($g~IlL##nD0E`VC3>Dpg50tfD((=Ay1=D+Ipzipx&^Vpk=YbewEwvcHtO zLuQn;`f|%js3f|2ai}@|E?xQ@khpFfOB<6BH|tm-l)A zDE)FT@W=T+nB3tvWJ|oGVN910I7!~0rUBAX9&jQX&V}o zJJ6&BeQ;c47xs1FSj8sZ^TjmGiaV4Y=NURuDs+OwAFUm|R=HZmKw(HYLKMmhc5NAM z^sZ$^nXMb@*TshQ@W4Fq*ucTlrAVn3TLop~_GIUq1!dy)XNQ^5f2<4S05ukLfaOAV zHfrbA8h-!w*KVD;9)0Lv?O>Bm@Aipywi()ak}U!AexGPZlOh{f%N*!}b#Sc>#%YKP zt$b`SPfm{T2=a9^72jL@Vt(^^b$3u;uwV3nL{n!=piiyt#BjUwK{&}j+O`uX zx3wrKiRR)j@J6g(7rdw<{_liF+0kbkjCDGK`OApAWs>>4OjW_USDsCG&;eQtHpoj+ znm(^56Q8aC43J!7K*!6i*LFr6OY++1}D~Cqre3zo)eDd=R0a0 z9SeKHBA-cJRgRlQk-#8H)r$1W{Qs6?WrjFbW~KCODZMO>d#RA9CS@TL6SVe?q9pgE ziQ?PDtfCDTRd*FP1yqN?L@;P(ggGtx%?#Hhrm6%?!c9uA#N>9KZzi*=60q`ngr!P3 zKpwcwElyTod5tF>l@o3U&FH$2d0?lm@d`|q;vi{tf%t!{4?cc_3!UBgFrN$LXLqAB zpP&m*EWW{~7owW@MSFOsH3vj{IUW%d7>>_=7_1-ApXK5fGTy=SDxu8SPlUAMcp$ z=(-R+pEugkC7d5llG4e6pM=W%=xM`_CjlQ!njUzv{n7^~vBMqEzW1V-*YDA2dOm(v z`(RwYv!jbRAD&q0%gAXhwZoHwT@4;2d;&@qP@!b#a9Bj0JDpkNSJ0W$GPqV zOf#QTtX~`nm{ty@S7PP&Vpc+>il1=zNz|T&1eN^z?K_;l=umF<-$oPIR;S7?NziiU| zmRVqahR?PLeBxuhKR$Sf1)Y9MXYc~qnF0EPJ0J1K7IZ2YKxd>@yuA&ePj4%tE5DE{dd*@2u1xo@Aq)L(?D zKe@lT8I}Z0<3Z__SUH}A|G6_8IwP0QX5?3??eckrE>X8+M>MG3b9?Jt>F+yiiM`WI zr9}j}Gw>KfcXv^rNg$&1Dc<|>c|c%ny>oD6P1v}-u_v}|XJgy8osI2evaz+Xt&MHl z+}O6wFVFk_{`gciRekEznX2hNGt+(UzV7ROR@=QW>T`H{^5*Q~b%9DL9>4|-lx&XN z^-ZUWb$EY*mcY+e^4%LRcobdh7N}k>oR`awCF89vBw#~FSpBl299}Bvq|j1rr2q6L zR>fXJh7^)TilxQv+s>steWva5>09eh%(h>`tOTfdI>hqG&gR@7p<*?;3l!Wtz{4`p zFm`RMp>y_7@%>8~D|n<@+d7oWbiLcw!0dQ*ZgCtL;)+eenA%*MQ7vSn#vfu$!f||0 z3xL_KJL23dCnX5e)>75#12cYKzP!*a5+E<;!csF-0WwOFC&Ed-7n2Xabr}{(o6^t- zWzv06GgF%@dyz93O2Lw|r+y}Kp8jU$S|p=QtnxZm2!DtWPFzl{P=sX>@{_hvN6Q~r zG!5oP52mWsQwl@jNkEt8u)HrBCl*(`_tCCm+92aHW;8)u! zdVfi&RmkI5a1352rF$I0g8-LX^in;EfJ>36UB0A(fqPmt5=>fu5#&3#G`0xgpI9s; z5ybGQu=ZE<{nAN!&P|~Hd$f8Kx5FF}(6V-*@@muU3jPaG;p4cIoA?`oD3Ni1`>i zvRiomgRl5IKOi4pd6x4>(<&|HXGZFO@rG)yeXF!IF?F~1Y6u@J0Go-fKCO=HH@YI= z$oFz+jX%!J7{fIm^oIyH0c^C3WgXld-F_wak6-FFpdWArH|a3!mYsEhN6zz;Z7-`B zjN7OR`zqBYKmI+rEhn1#Y?{$Kyet!l4K$XY?8*IMVcx({%sO`5xn*>j({NKttX< z#d{@s>UDb9>mYS@BSU0@>{Qgj<=23YB^0M{;x8D^754zrQ4~`BoAw@q0XTFjb{7_= z?nVD=)3Pi*icUUDX)e(yO*=D8CyPC^sPSK~Iz(ajkz$IMH(nG_1DtMx#CNxxeMRR> zyeoc6wLJw?)m2({WwcmYd zfMNeF?e*?zugCJtK~laz-dFT4UrqyDG*8nleDUBO+CE~hQY!;1F*RyQ0>~EiOevpCEzrZ@N9*T{t+UDhbHa(%h7w} zH-j}TQNRQ<=!!94);`5n9rQp^y`RY3_CC!>TiwZlkhCgXpZoVaB%d zQ4vhA5#OzEjjR#@!f@~l?BoVEz8XA^<++vAU4AMp+MbnS#J)XN>)2`G+u>1p!)?5p zv>>~TFP`%y%#_8f{qKwTwB@T5MzSuoxwU~Be`^8qAg75_eEIC7lnut8%R=`Rk zPwfb}&`RifDS_Wc*r;d07Hf}H2M}o=%=fnLz0_UnIa=#7@p+%{%+B9U+8MHDVEuWy zOniYgeu((5{`wWL${dBOaclkKRnFUEWz~VM>#vg*-Y4~*3bu8O7b6EoHJ@k-VI-vw z`wD&}6y5o0IKBOEuxjjU?;vVIqcKW{h@&x|W~j!O+SF5-mr}mO*z4OF(l$-HRlei+ z1EYgG_Sn;jIJ_~DRjN&arwMukAayMZW+A@2#unI;>q1OCVaZL+(i()fH;WRWCHc6` z+?EsLi)FiE>TeIWLkp{|PJmK}7vjRv#S=E6|Tff^C+H&CPQ#J7H?#I{> zJ@AzO8CGdw+=)b}74tCVMMH_vysnW=7+LliROXw{YvZTuCzVyIYTtl8Wy!mMXR?Ek9wd01JG&D||q* zy=RO4Qsh^VD64Z?@8H*4O;Cvu#95*kmM9 zP7gz*BxEh^?D`93Vj;~(ZB7AchV>`h`R2S6{pZLC2(FWj3A;JXW^Gm_ydOg|dj?i- zvla$Pg=kZ3iVrM^?XmL7TDkDuLX=E$s7yI3aPZxb{;fI#7Z_r|IX-F>tcfBNS2Zd> z?e!cX!&jgW@UKC`=bKvf&t}&R7+(3qGLN3u;W5$S8^JRLoS9Z7>hcU4KB=YrWIy7) z6i(%S!MI%io@*YKL2s^(^)7V-+n2@zOo|)d z?=7x^_p#TjHEznbKhJATuJRQ)m;NZp;+4M~`V)&K*(l;02+Hdr|1IYH%q<4mxN6jQ zyiO_spfJBH)&8BrMowF$`%*D>M{^;1yMBEQIm9VMIu5Dl7GbDt!^OyVAzJ~17LR(+ z9fE0`L^YO8pDQPwlpBPF$~GZ!b={jw_Y(D$d5m=6$Q1j)p^&#qRTg+GEla>52L*K< z#p5qxCsBBqAVxkZSZFxyTQ)Yszn$%4wlMEbKV(K7DjOR0pDK~#Ey$~CVxA1VaK7o2{ z-s;jqntLrjTbdP8Z0INH9=DHlp`&)Y7!@S*K)-Ftrmp)=3;NE0UqjZii=42H>D=6R zB!K>n>2lt?1cJ@W?|3vOR5s zA#stuvpJxx5l%QrP6Dv(X$xOR%a|}}TxUe9M<`00XydT(po2uh%WhUc4n!j1AV^2} zwzGk+xTBi#Pm(F|dPts`}R|E`M;)?QFh zP4vc0_xA4`kUU1H_*Osj?M8AvBBrSq#63ayYmae`#0ZgALG3zdriJCm4gFWG#LOS! zy@H6Q!PMVvPDCh-%FE;1m(7PI8f({LvO#DH<=9w2r&^wMGX;c-LHx6oDan>B- z>8@Re6`EIRwCSUPL6<A*gh4%24 zK8z1GXFax{W8P0g8h+TUsVPD8x`A+^j`6`KVq^T*wA3R(jv4KHft~Mgqf9jH-yRdi zrcyMcnV913`PN@J@?9;kNGdhQBm?^Q%gO-+i9Xw-ZoX+fxn_C{Oqs8=qQIV{e4ot` zj;P(Y_d}N&sfAdke>qIuHXU0Gx6ac%604#wzbiceY`Fmy5S9JN-RAx#9~bDy{v!bw zv-uhHxR+FF@C1A&)74A@;DR?VD1R$D*T=1i)W;A6t9${=)e@kUZ26p~SsH zr=3Dt2{BU+?i%`GsRMK@G7^2d*!R9%+>`2`oR+-CbGLWa!J#*;wzMLCRRs6fY7vX) z`V|V)Ui!C2o>uEiv(c-2gPMehZLuR%Zx*7!m#I(PP!9 z5nu^MU|xI8d;^nYy>82&pNc12+QUqiY%|C88?st{WlFwc1uY*RGUl}`F!N)U5Qa= zuAsYZy6X9)6_?)YNz#lu!Q(88bX4Z4?c(GYT8)Vqd<4IO8+-))&Jgp_(QVJZwrHUn4|q{6?j7{G8%x;%#$z6j^-rc$a_#njgf}n zmWt_GQ?Re)0GxBP7KbfCKa*6OJcrnkUHj zf!;}^@0zB3tFy}o2K~=+DlunO;XvhU=Bey!_sqh4>~o6)gy-aYWv`9aEN5{qC>smv z28>@6NiI}Zu(pbkedozvn2=XG-NGz7{eQuhH=z!D0r)$#pUVv#lT%W=Cn9+_C;LY4S7KNBq5w2ArtCcphIywm-? zy|A5ohiHvJg5Hc`CCfb>V;2BI*sJ;zu=Xkd8)K z&S}804hI!Fe=Zrx=RosD5#dP;KnuW=DDi}PhI;=8S8`fKh31$yeHoj%{b5st`R#tw z#S$5dg#3F<=}7PjbABLJZAEZzc>c{j3SyM?!mW>TG2B~;1JU)K*CRJqbW;)ei zyOg-Ee=9h5Q0E*;*xSojXb3)E?3G-off)Yd{~z2j(~H$+WH=w{9BP*J=K4qG=Y{$? zhk(w0_%96~TVyQRXL^zk)sa z2W-_fWXg;&{uK*g6ERQC?V>zhZk#f>+sw2?`QTA*g8F{|i=nuM0+wid&BeR3jbOlX zw7qe@KL$2Pdw!kP=el%l{Wsgkr${WMd^bTCc{uo2F|g zB2*(jJi>FkiFoQ_4||bGJ>)2Y$~PT+J?=I1Ylt3IZ>V=a19z9eI;_<*yw0_=xC6F6 zAysQLF5>XEE*(QWPL!abhnHBDpZ;QJ2lA1T=?p- zZ6AF84F=wfC2%cziLp0MFG>(&+%=UdVaVz0Iq>f9c@gZGc!+r)iW%Ik-jd_=jU@)v zIO;R|CEa`Y{k5ZJ@Imu({L70jwz8X_$59cr6+XoZH^IoU#YBv0fr`cOh6j4rL~w}q z(rXg^jsU|UbA`c^%(=tu5bd&-REQ3|)Z z@GKkS|DQv@tA&M8iqEep3OCVnGrLzBo{f_R@s(+fQp@M1=b)pmfAbVlvQGbpF;p48 z85+P9_Y1cGS0LYq$@UQL?z!opzZp7-c(R1u|I*V#vS%twNS&j=nt!rGi;`Gt!`S5gVmejvs}>!!Q{7x11VdP$IWNozI8@Q z`mH2YT;IcT(!{&?Lm5z(YZ*xL4N`K?4dVovyBf~R?3jLO)b?z9HVYa81G;!H|1CD0 zPrjHvo=)f%B6FL^0UACxlst)yfWIdyjEAAjdSPB=Ez69T#^<6o20>N$`+A7g2fI^% zWgV(7Kh7XRQ2n%gJS~fEUcdolhKe&&-&@F5Z$y`Ri8)v|230JA5yFNcI;l32q>y}W z&N8nCEIZoR4A5d%Qdo(EN~AAxrkL&D zXf+A9tUx%9>nCK>axh^j=ItmVn>IbNJN&rCDD0?RnpDuFd)tW@N|LDW?u3c$%5XJ9 zY;d_xhdE1svPZ>Tf(YG0v8(=m%*QW}{_hGSqdev*I!YYY_{V0rz!0yv-z`SfS=;>v z94d#gwR!dZr*BNZ-9V^*rb_VppJUzjL}FYo20bO_V2({DE@3GFF3ic%2`c~=sbX@i z0>BbvdXr4L&bNO_ChzE_2AAez?;VQJOnbj$?AT0ZVBy^iIbbGyHMSOgf+@~_%v9zkvOH=Xjv z{Px%H0W3-Hsf9@6UJIn5luZwmplURuh{VO{h zd!H3nsNKGZha#O_o6+v0XTmh?x(fPLYN6fpV+RjY=`UaZaT09rRg6~^ZNiNpj)QZ>Pd zuARS|ja|jOo0OI`nSwFmi9wp6C;ISKg~A*7Zezp?I&4e9tZ*PmX>oXR6VVT&qTq$N z)50s;g^CJHb)QW@?&FaaAqAPWQ(Nm$eee-aObYhgO@>No9(^eI~nS|h2&vXnEpXSZlIb?Df-L{ znE68hYEjWT^m4Wh>aVfHd#zS2m^Y&EA#|YPC)DYhFL1)wz5TU7bn6V^zmk;y4!1v| z2Nn%FE-e*PZ}*{l~gg+`hjarAr8637E@hmf10wG&Z=eLn&+ZTpfb5?P?zFppbej@17hqFaxSFpSO)!5eEJ? zMA%;_x>E9{3k#hrpM&JOOVaQ<`cJr3vDf{SDqRP=KZykM$V#y~)u~C?aK4_ESbM?K z!9v$FkS2UsnQM+nZJ@mZHP{!oI)x z7%8$b{s_J!$L%NjH4e3L z*vtV3e_*R&*k-N_10UGMhxY{(Nqr4;@bM$Y_^2b6{lG9FcwqHqbi~_zTWdc$Vk-3{ zy7K#h-;8HCEE7~J4%->}dxBfmLTHChuLnm^5J(I8n59Ls*>4{|f(X!a$@lS6*eZE1 zgqAxH>7?6zyVuwH@{Mppt`1*#{S<9}S2{1BB0wt3Scr)LdfOr-hxkRe)pBfJ_c@RE zlR(-){qp;LO0Jid%uI0U?cUX+TkYr7wChVT2VL27tzX?Ei>Iz$h;w*QdJG;$vxc^FjviHL32u_eL2={YLwU!+DZgvUqx&hetZ-S1V1x zE3G{DEKv(F@XP7fo`z^-ehE1pp=hIpi$;e6)X6iZkpG^6lh+qEPv~ z^$!}SjQ{+$dRYmEdn|m1YJJ4}4QXgH)?R+ijMhp0;fCovfZ`se$Upn4naX`kR~X0D#o$y++iwA`A5HFVxT5$&&T5{ zpxO7S;ONv@*2596=M9V0s}AwIq&3LlVg|6q0l50xLWl7Ah9~J#p`#`az>%B7k9fHc zshW3d7=;G5F7#Ber%1le<#%a1_INA*JKQwzpJzMVeajfW$LN0FI3bU|YWohTgFk-O zjVE&!e%5|or@lQ@+tX9O*&G#5HZhn(2z{N%5q;mCU?h4hm(V?2=oGC5MDE=tYk{+n z0Jm1d?~f@+j&oMOJU!h!TvyJDnKV?rU!f*qlp!9>g!B5qVzAgSyN2KQyArj-1h>$G zNOro9RI4fP2LnISm3ZK&h5@X_*#DTuY?$(&JQb5>8KQ_s9T}S^Z0?2k?io5HANmH5 z1MO7ru8j@l7@yZW2f)Z4y%_&PzhL42j;#P%8UEQd6wYsd)Zn^`j2UtxIOlblVOzE4 z9(B!2?M?fWRl{H9+4jxS5gPGD*8u3rXZ4PA4*Igl?OoylG&z?8@7$UcYcu!<5ZoQ` z!>@x2ISLxruxEx#Bl1s2xV0ttHj7B=y7Sebo#W~?&Rjb z3mQk9(_U;p)L_oaAB`C05UxfpyMOR~WYj@@KT_#JXW*T|Ux_;VV7Y(toNE$zqBre! zw&7o@tBsJKJ27#&^`gPhuC*(axUw{y{2Q~(`lRwjd;5Fm(JF$I{x~RnM8U=stIjf(EE}5$yR1!8P!h_ZNcU)~De*?Mi5OA4-}A85u~B zi6+8>M$v2yOKFH%m8?=mw+!QllMlVHA*!60z4?54-0#Km(zn={t^g-j=dz_zX7Th6h2`p0@P^Jo+D3QP+_a$hj9$!|TxTWuN-8 z;OQCfyi9y&F0Sr315*3l)^HoOGbJ0|4Bs|tw4#o|lGA1QK>KU^2xA2RxtqR(sRBz7 zdHju?jwJ{}=MP_xeV%B-(U;kvcQ*$5jS52+{+VyGzZToPTh1|7b(M?&qxoSKOG1^$8?Abu2<; zH;5#pKk1yAD)HIf2iZFg>=EkcD-}FJy#yF`=llEuf63Qqi9Ni#Vy)Jk9($Nf1Q6LWinu$lM1}O zlfu6bzZG(v9tLES;Yw#H)lLsX8l-dFujnhu{+DJ}@V)?~$$1U!>h}81&_Nid5&bCj zOZs4Z4Aumak%l0yxV(uG+HEyaWbP9(PeAEgsB&;D%HwEH@3|)M%h$R>9@k~gEv!$geh;$P5v@tbs48 z5xSpkB=^hee3GsetD{Doj)mGCTcg-<-pr9}7%uNLg}lHNFGKQJJ-;!XkBE0DXmY3I z5CLXt>Z^41yW7pwu_jEM1UK#0A)b(5^^7>f_nDSn`zQ21y*OoG06<=c^Il~xRR-VC zu5pbNd+XFwh?D$>Lbo3lyFK{Bbik9=y3Wk3{LoBHA5T90ViyV9y$7QM=RU&%)Jdqd zjBq7x2YA$IPTABsWci28TOn0Q9=tW+aZJQG#lo%uq57hM)q-NHQjT3YbkpyNr+ zah-M?H&mjcA!%q=>FXtz3`6EcriQ=c{mZWW(Bpng3lA~%25ucM>zU?@e&jjgi{Wb@ z@AGZBkmJXi$ota=BH{1*t#6Ktr|cM|hX!$&^=t_2(n|^PrTMBZ53e~j#UZe!vHuMe z@N~#&T?;WM;DniD$$A#K?dyviBxz8OI$&)ee_-64-1hTDlR)x7q5_-_Kh)zjFa-p- zHe%L3L@S-wp@_l3^yYGnechSCraR&O^(p}p%hy7C6${qZADw*!3#28Q1dGuDOddYB z7Wn<}8OF!Htv<{kc9?(MR{G7DHtaZ#4S}bi_O`S7^O`S3j3=i%bT9b~)8Tz%hPMUK zX-Y7R3eX>N951+X;??_rk1Ap48BYLM`*i4BYE9qNSdR<7zr6Ex0O#I8cne~hLqi{u z<}ouz*4`REb$S#|@&uaHoOxc7A#^yCe<3eV#_CVL+4mQG5R3XUMLvB^7?gn7bx{*M z@khs|h^~&+^2Sg`;X>WHE;ssg!1<_M11IHU$Rj|uy0>Nd4dnT+#d>%MkDk-pZXBPJ zw!VU1yFCeq%gr|+5)TK!%+^Vmy?;ySF{TJ8HRJ-2W@f%5yX4MWl6!g{Q8 z#uTygY$psmby&~3@psYt>Gsr8?9u9WPdm$=X{9qVec5}KlQr=Nm35t3Yz96>67D{C zuXX)?3N^p`1XelP!aQ;e2Lg@(_j{jCn>llU9}jEKT*Hp{awJ~th5MNvob6K_{ zHpb)#z1hhJ_)H$d0e?lim;5x%4^N@AkuLphe*xz-FCfK}DY4tke%oSqdSBL)xcy9R z9vrP5IP57ju#i|cfC^lS-AiUQI7%IjZ`pUNY;fG&$Ondu9eLcJWpHhN9(|{cYz>{g zeTGt0We_t@ixNbq4x?9H{DwXJn0ezPg>v4} zLY}U$Ak%|_0Y5=4za!|4PoX{tyZX4=?XdJ>$*ch^1nXaa2Sr@|CzrYvv)a@E;q9*s zujuzE>ar2|VoY>H@B?WjegC`c7lE)gBe z=h~B&Qn}X3KXH)6hwo9_Kso`jGrczRmWBhKdDSL_c}+@M@T7Z~6!LdN85jnyOEabc zjAeqhJ>PxH1j{f)+kyfy3x4K5qHxz7csk+xPGg^cD)Tvb;x_e2c5iW}G^_ciYGfj{ zrH}<`L7kmIkjn)jukszCl~(8;yG_zeQwXm|K7+{LoW%?X-)|+=5a57U8R2Q)C`TRG$N>^e_DharJxNcVvtyr z{Yq^;e{3kB2$Z&aNy>dU z+kGy}$nz2GwisB|d2(n>o(VDKcyuNH!17niT0kk`Y4(_sQkORLm5P739$rLWS0 zV(FKRbkm(*uDx+1sr9F1u+A+Fa-((gK)oVR*wF95Xv#c%1)&a)I1mp#TAaSWyq?PW zPgZJ5AmV{-a-^%2sm{j3$Vg#Zh^5>MDUS8fZDn(D%zO)j9G4<^w^Q7|h#n6q?x&mX z>b^G@nq#CKWzQRLpQFpo)^@PV^^JLM_ou0iPG@)fNf5X5^yxOw>vA~#H!eEe{PUvW zzw)um_^-M1q;4e==ikR!1hwB|;_fwYc^|fMg8b&UN$U1EBNhMJ4+XHo+M0p1Uxp?9 zds{$?fJ!1JD6Z)}$a4V28{rtpUnkyiVY25w^F9Lr;GN9A1Ue+)vvv90qW|GRo^Ow#<;qx}# z^Q{hDaav|&%7lUrXkq*fH82^zYgk`fNso`(?vQl zU0`y)ty<=!gLVFhr@2LMbPcl?8F^Y zs!KX9K1{Houg#;NFCs!7L^ooW0b!8s{ZC_eP=|e`Jg|bL_a1^Is992f!c74zQAAk& z21EpyW_BOnP2_;5Y44g(;(O>F@oDr0z&*UPJ^KALH;=S*c@Qf4wsv`sh66?Ro2uF` zQF~+Q*ZwSL<&xgbkU+NY#6*L_J2|FfUlGM;GjSqzMo1$?J9c48eoRviX&I;Cd2uoZ zA*@1R7jHGg43ya&KQ;1_$t2qC_!%nu7pN-xjb{BB7~6jnwi3q&r*nfz43 zpY{1zr^tLpB0N;djZopBZmXb(djnP>5F2D3agwp{Ccv_M z+|l|?ZzJxRR(u56ZuvN2KsCGI!hIDRa_(Z2krtO2h9tOvK8jrA-fVDi51?kLiQ!!& zyt%hnQ$1wr7k2z6QZ64sMI1FF4^H%N55tPsVn3e$3jPqL!XAZ!9(ze>6vOZg8UOCFwJ$&1#gye z8UIYWRixl{TCD`T(|gzryV$KO(Kr@C#oeA74o@M10<31bL6oF_Dlh&}a`OR= z8h7BGC0Tsmr-Zq`Bmp7%o*J|!Rf$XKh}K^iVceA;8*R+VFFGFRb(AZD!E=8^i(LbX z*tGMQ7V=@+Ycf;C6cq^*E40?1Dg3}pvWXnhyTp3%EEQ;_3c__q+{(5W(O_)mA_>G> zmNJv%$6LlWD@BX;{wic4qJ%3*P5DX!v(Uz_sIf1&>LnLy;9c$q)6{ZOMHvv{*wx1u zCAUF^-@OuArbcONZ(s3frC^Mv#>+%v2>7is1a-h0o0@Zd8THA_)KhKtaYc z&lp*>Y=3CBQ3!(+HDf)oaU)@nYDF6(jfykJ`;H+(DTY!J&SA$@s6oSfo0s)4&CAs4 zL7opNljT5Wx)e!nBDCboI2L_l*hP|3@Nt)k%Ij|z9*Wbw@~(!h8%j=>1GLw6Ew-(- z`dTd|UU4M5t{c3J@~@Yi*uG)Tj%(MXY16~3qCZwMRKRaB__Bl3|9Na92>Yfa_O1Lv z8O3jq<=UJhD+RyhFTvwyABxB-8ww1Qd1^E-{9%>q zsUgOU7nGkmB4C6CzFyuz-okOP;}1Pa*|$+!KjwftB3L0-l@C|t!&m$T*V2iJz$xkX z1M|KGxfPzQK!?2Q_&+zA)eBgw5L|LMSWCL4dL~^v@>*P^qS1$~q}2S)8~Zzu8E0Tved)DHZ*3OprOR@kERq-P%Fjb1b$m^L0U0aN#4V(EMHhw?{;Co*&_anYa(w#l z?gy^S_apk|-W^+c&;3V>i}JVPXiMj5tM0(kr<>|kvgo)VnWjbGkQ`KmFt=sLC8y`c zx8b|8Hbjw+#Mwsk1x(no)k6Ic7zTnZS_mkv1)Q$^tr zG9D}lpPMWEN?y`aEV2o#iyq^b{3k)Q%fcLf`(}=#=5c3Z7|Dx#5mC(=uS8?nbFI&w@7q%#s1OyfWf*f zI1SBWc~--nl0N%SBX0Bt-CRR^M$6>4ngzehp3qN>j^3Mk7{>R7`#Bj5Q@9a>Ty#76 z!+ezyV)hnLc!(fEy{@za$l!US?5k{|kZGsf;e8?+R1z>>dBx24o_ZGMzF(x@k>={b zYpl-_ba`QSaBSPn4g&)C0F`O)=s2JqlBmfMP99-4yzt8h5+UxuEkfT5jX~8Hw zEQf@)sk_f{rYhK8-B=)h*H0>xyWD^T3{ig$;}5^N{4JA2lIRJHJ<#S%F=Ktye+=DPb;IAo+C9^2MO6D8V*xS$n7byNF=k4h`(au4&~RI7FRZ~B z!QEGt?#;xI69PwX*1EDSk?mSAM^+m@=r{xMjLmM7RCazponYJ(*jxN>3Ty#(P($nr z@dpd5$8AMQmj-d|Ku+o`WgGs2rvV4t@R_dO6F=+mDzAmeOCI*slI^)>TH-{X&IM+L z?B9!!NjtcTif+2NFP94Yfj;x;ByNW|i1m&`ZOxbexFJM|tkBfYWXQa3*pZy1N%*Wi zR(e_smYWWXytK&+NB3zcj+DK+XydNTY?k^-SJG)eb89Z$%5Ogq%L6a30o1s@8cZ9i z!Kq;Qc7ZZeQCB%$C8^BH%dP7R{sGf5#0ZbBCSZJ78@3IN9bfucCQXLl!j^+5ZJy~W zpU1DlV;VYPpePtOHP1stu^Pm^Vv+){fn`Xo)FLA;Gl^-+s)D4%pF9p&594#gEv=a} z5p~a2@K+t??8)U~Zq!0s@kI!VKQ>2vu!M~dkd6L&wF0XcabYZC(BZW}CLElA&fRoZ zu*L6T9SqU=btYJ%gTu>k(b9$2_0^6ortB5Q!Z{q}qyU!S9*B~K?WzEO9{V=jeXYW5 z<@1YHYn=9c7u~w%;|VME<}PHuozDamB5e)6Mvu=DRLsBreufYcw|A*gez>aRe4kO@ z4_btAUBmx!nKnL3J>SxYT(*xR+VJDG9YjRrIcOyM=}89|pW~xD-o7W=h-^RhUV|^a z2433tVx%<5o^Nl0$fNQI>r4jeoo*Kjq;Kda>mCaDh_?GZ-E1h(5=Y#e8@7P(UB3_8 zH?n~7<_ANU6#tM&H68QL?p^<*XEcm2Ih5e6(GLQ!m;v1E6q*|>+Sdo#<$Io>?aYc~lAc?*&BYJJMhea(W0q&8-c+{E5*q*t4uMRHX#diH@^jAyga zX90KfgQk-ih!{nzT<#c@V zG&|h_w}!9lZ_DZD4HC3fA_m?HlljJ?@x;iUxB?p8e!ftoO=2tWB03Ks8M`R;f^7vU41neS(a1JU7mYL>2&&V6`dq4ggR zLuSg3_h+Ok6hZ>RA5jkSPMO66marXsc!cGa?fE=Sq5dO~yIbFaoKM!7<2IHN#-tD+Ir?NJ@HI~-zLmj* zqtQxTF`Ae6sc_GRFnyU@q(3v$C#>sPd`S);O`oNd@436`q!{|R;4}26SLY@PFzo@A zSYlPwWw=51sV&m__IJEh_V03X1@mVFP@{gu&7~)`=NgAMjg24m|kl0U599>8WNpv<1mOcyZIJtkvM$w?Ub$}<1`i*n~icc|js?1LP2jBQdSLbZli3lDveUD=u=x>s?e->jCE>^acc;7O$fB0WA0D7G7xtwosjdj2SKSH9GTMp&sZi<@cFtuV>d{v zNjg?xGgAr|RoZ1L64QoKom}ZL!p;PYz2&MR`e}5}h=KZu0DYLmy3}-1)Zn`g~{jL`Ro>q?HRxZ^QapJ!^ zHE1&!UbicRY(uvoXSHX5+w0k^yc0$vl*Nu zyNN__Rw;Ja`R4{<5AT!^jH$Uq(Ho&cv1;nTY-B>?hcj<6TG~&rJ?rN>!^l1Cp(^{2a9}Ef*?%Sc;bvK(>sTdRj`|D4AhnzRf_C5P>b0{VXU;YdDqj z_dFv|S(6tvNMjSx1GyH#o{3df-;A&V$|G*olqdHGrdrj;@YsclrUhsfYI{`(tC?Ix z0Pm|AvQ_{E7Mlo?W+@~yvC2Z1gT{BmeWM=5k){=N`y&yeQ{)wcfz5maq*F=%s8n_B zwRi8eR-%^y6OXD#oFB=pXN;%x#V@K_hpIPHQz$d}I8_=n`q4t))|lwpZtY2%6m%#@ zM(Su@(=x6;mxFqeY%M2FvuDMPz!IFF`3A%iVJC7sX3XEnuLr^{qJm{9Ywwq3Xxv*Q%6PpaBv~zC? zqM8z19EJA2sZd8Wm@+hS{~65J+M>pAL59LeAjVo9vl8Yy&_fk0TLMYcSu;B9&UBBx zfS4feiP2_ZzM@CpE#0CP!YcAS-`1~(*MDIZLSy}laJWdhrf&YrF)TD$Eb~1&-cQ0a zu^wpXvd7cGZ&_hw)rUcz**cMrhn_qoLTZsC${f%@BMO8XUhV)1CO@W69pI@btk%ML z&k>p5-c?;p>4Kk0fgy~s-cKfE-#Ve&F#oczBh9dO8d~{Q(n$C%4w{pY#<;V;I$-^t zI?|bPj7<6}7s*=9?$=ZjJ2Gy1v)CDQder_yXWM={sHN&eTVio!mn2yV(A1u|daeI#&>5nqC{zuwYc|PX7o6_|# zLtPqoCdNm|;Bra?@wfSH{TqBrIEL84!fDxQQ*q?OFEEO6)ZK>e*SU;E%Q{w&d`4B| z!r{J}4)VU72;aRFoRkaAm#bUF&ZG_1uX824b|=WjwC6}(^JV$Q{{m}Mo~P-f>$@y7 zx^apHE%S{{Rrgu{#%|uMRkPnsYZg_A;GRSM#tt4pPmb*RD5QEK8gaOzok$O*nS;vHK;`+>f_)b!vSeKbmyq{|7v^Kw)K%#Ow% zc`ZufEUk|IRZQfE0vj`O2HOP}p&Wrd$@$;*FoB!zdS4<%rrB9^6DQs!zcgU-J+^Oj zrhjMcuYw^I$1eKTjKDGZ^-qWKu#mre#g46H*{3ih3@J1ZF#<`z=p?rGV(5!MKK{@f zo?8K2wef9!&v3?S$$;gHSbQsA#654X)slYiY+u1DOWt;45Ps~~Dve@OP}524j}#$Y zTx_Y#2A4p+K5G$At~&0_&-g~rWN7m1h*u>y5At4U0D7*O{WgfuZ(#C>r96Zay3BYV zdNJ5YQpPyI=I{^9siiP+EKrJ5ZrnfL*F_g@idlGH?+7+!&;J@yaE#J%!Rz zgt+~szLV{bQy^9KRa?(SW#0?X+Q6Gv<@@E+v#6$J7uISQi5!2T(I%#a({$Ryi=vrv zXX#M)&g~6WJuv6v^gFeK4<@1-74*;U4eKxMfnq2tT{T)OwXaa372GhI>bD`S3A(0% zJ}$(ME3-J<-!9IX40{T5j=q%jJz?>A;$lcVZc;w#-g-javy)U+ zwYr~kXq4-mOC^gV2~+m=A2_6$$)(D^Sj_h#I~SJDP$eM z=tAtX#c?76hJT@!@*8M_xs2J1Kb*0)9xVL01vyc1c0m+TfT+;nwtl}p&ik~%1sNjP zh$(*o?H5%@Quqzt=7*}rAW=tOJZ6Vfk(9Y8I_KjGr;bW}3{FSkEx&bb^HZ0b)h|}o zz?Y9akf4u{|8Z`^lTb&eW!L%8Q&*>qAXR~7Hjol`>myWYLCjH6j9PfWFex890~|n$ z6uIIdsr3?d?gL!HwshB|6R(x1&#ciLEN~0NkejOs&3YF>$`y>6;EOrcyJ%?qF5j^6 zM~Hqba)5?~P`qa!?r~k7lP?_LMUm}cEqSbtarG!GC2ivgHE)$*>2k!ZS8J&sf?o z&wisD9T!s@8B?>c0n`ZyzoE)x72Bm-@N}w$f9SV$@rxUq;7c^giwQR!pshyYCA@kg zqjM<|DuQ+|4})VVd1Y_vQaB;7veP-CR`8^cjy4osgT2i#TTHpw*8W;_fN?^1+x{nQ*HF<`mnmUUUFFF^x4`pY$IJCsp!n+_;CF#{jS9mr zeW`e4E8XLX@_h%adHZZs!b?`X{)6-i6^GFSeGAztuHkFb0~TYq&m2uvG>s_;6nSO{ z7c*_Sc%?f=5j&!?jFN^ju&9GWUt*r0}`~rYDfvrS1eO#a_w3 z4E&2cSjwh#lB|oJrbF4nE{;j3r^F;jNFjcx$7w8e%|M_|;;Ceh!S&RPJ+QzU7*s{7 z2@~}t7n8}5tYRfkAhwc$z!vL>*Ho#SdtM3AG7LM!wWttPqVK2|{X~B$y)sk-v5vG4nmps5T==H#4`t@s z0&VfTpSKnC=qE3l`nsrl-@==mpO%TB0I6yLEM~MYBFP$r2-SsV4%Rben`po3#0YIO z9I?17C|(2?X0wM?|Ej0S8iuFM+B7}^|H6}UA6+(PYf(Wq>lS)t#=5wL&ohTGfBY)2 zZ5Cmb`90jhw$Y)cQNZ>?I@;zkiJ>Kb1d-AF=#R&rK|v$5!?40z=rcpvK;ARMZMM!v zQ6+J&FPWOV$gWX_GSWAS;YbO+$Vq)hY|I1KF?%_mdmhiaywoc5E{puf9NB|-?yTJ{ z0}_)-$-M=OIrILOb50+P%g?qc+TE)>3eRMGDf5&L(_m?Rs16qgIsT&j*kT_IFPlz= zG+9_~_+(?c!Oe7blOLh%OyYIw8UWRoCm^nyy&ArHEGucV3oDE#F6%4h3Z{XDzgq_RDDtFCk*TA43p0rc>Rz&4=&Z|nw zX=CKohOjFvoBVazN3IF_j1vhNg9`kb0S8b|!@qbu&*L1(8EYPxPF3NDLpy|TM+Z5S zA^QN{8TP`AX-k{>0zkbXqRhDiG?A3j){reu%o&h!5GO9D+M1<3Yz_>|;$ zI!T8U8GqF72l@qt9`hG9$JD7(LuxDdB&<-@msXt)xbL)Mo>Bz~NcMi{=Rrr?)^#nmtsI7mDroce9>jHoM;X5GH&$WAuWq&DyxNYw}HoCi@W zdmot%aoO9KfL5G3>B%-O)7ihoZ$lBtj3LE7tGe9SEN{POOiQ!mPz{Ev6YY#1Hqm<4 zTaU8WGS>KTDS1}maF;+SWr56BhLmMz>SFA9usAxQ2m{>9v?y`YmG+)Mi!iwsHHva8 zcWm?iNDhUt>isuPTkbznjM)@nH8YS7FbK&=`TEtJGYkp$h>|3j{$Y`JX^$?9GV^87 zC!$Q!Qoq!Tw~k2Xay^^*kmgYN{hhU&A{9L<<}wR(y+(6fpDN;uV5opyKTVyipCz2( zznY9GPfB7J1B!{p+J9V6)>pG0p<_u*y$qxq#J`grte;XUt%n~qEOM{dNE!GUzWXQd zm&7LzRnQzvZx4F6uP)u=fSAd7(2ubO8>9(ZjAU9t)TKQJ`}BpQYPT&X^P;}Lm#FmB z>|q;%gw9D+YBWcq+%nh(*M^*HdyWgf7i~bwa5+;h?qZYgU70>YyUB(<*lApxC=B5j zJ)@1AkD|TmXVh;)8BR_(>Io}pvo-1}#q??Z{f^k!@HnpYlbRtow_6r)o5DD|&PXJp_9EiwZVmPpHdZ*(p{Q+CDhcinmC1-l+ZlSOEAa!}>unK9D_inX>M4 z#ja^bE~dd8*$==rBZLB^T*CE>__L7x0r?reeji_BUbL%X6i&zCMEQ82?#unG?y3YcI1j_z4GYKI$J*g^Nqd^flqHN4cLM7fTlB!3R z+M7R_RPjJt@yBjH&Zrl@Bv$?^%<>=CXf|0kB8;ndIqJB324?ob{i%qKpAw|D>ZAX* z*n|Jzv4t6zuq6@L`@+n>Tyas+TFTTFtXMLTS}z-s9$i?q9q~I83Fl%0@{Y4b6}mgN z_tNc#q%#r=sJmrb*Qra%-@cy7L&-SgitTw-$QDKQip`0kv-UZQ@DJF??#2!TQmd7> z3Pnlv3?)5kdo@gS+ z#jeA?4VwY&X!<>{Aqqwzjg^?}TZh{y>EvH=>MiDx(^)AQ<@gRwdc-7#k~_}H*fu?a z6sq089*w)Yu##OIz@T!rMs(aYyUH)LsrD^fZ;|A;(bHewSX7eceiGY=$@YgrE^zMm zXZBMsa*GNvQE_>$IXkmYPx6@jI&MB0G{tSz72#fQ3iUoWwHBg1mOy&~tWGcr44sGc zZxXk`?0`AK(5paHd!-&`E-i4sT-jnyHt9v}(0Bvitpsl)u{dYN6UE)H!$|skbl-{c zr3cJ7#*h&YUSb1#I8>EsnnyN;d|Lk{`cO>q9t>o^X)BD=9g5`^gFx<)vP31^FFRAK ztkI_pp*h_gbR~SOy|Wa4k%Kse4rGLC1f+eaf23cfgLCfP5dVByL!I8pxbVHS>KB(C z(H@X;hV)12zkr~rN_FD`1n*2e z)w8^g9@i&vHb1=!8g$9?WwZs{NOackm*d{HL9f9|a3;n`wlApEV|`2%5L%mrul0m`)N~=Ory~wN_ zT|}q{HR9Y#RVt&)*Y{teqat$~zuBO?AL}>e;bw%I=+HD&RE22a6=i&T)~`NcYTjKE z`4su}7ZL{{)#zs5pT2qd9i}JR+iX(M@l8}6Iwqq{wQ961s_!bgDA8*;<3(JSG8A#} zR}cJ=ag||L(65!JA{i@CTF+xE`Y7kS@RY829rjRZMV3wcTAh}vtR~ag-kt`fAxp)$ z0Ph95REi50d{W8IL~p*H)Nx5nei8OiNv??^Z6q~9=Ko<3I|_zjc!S*&={DXDI_Fj* zOFkq^;L=>c`{F7zM&36tz(sm+4y;DMdPKmnc;0P_5#|90O9}>jmoONR2$Ag1M<%H?hOEU3wAX?0xj9Nw?8MU@w0aItw61P|E&(%_?;ESK{uJ z(3x+SG+n>=D~b2>5}Uq1x&_gQ1^%3K=NNe&6tAV%p-#c0Xlf<={E({#IKmkbaTM zNVm_ZPJ%EWh2#ussfx7sY1Zw$OlNe#TtXHW{(lo#>ExHmhYUZ6`kyJC+D%K*f}g7(+7xSt@%)|!sYi_|Zq4(HnX z-d)6UV_emBu3HbY?RH^TP5`eqAtt8*zOFxspI^DwMkJmCz!qr;Bxx8%4cBOXjg zt{zS@qgCsf`=aB8`fxFws^k1=A)BD~00-FNfhF@lu;vE*Z&Tc$o6Q<~YrnU9Mh}Q7 zuN>lie+}6*O)UWCESuc5#4gSK`u_ei$Z8~$0N=#bgAxc?eHZEE8o(d$BzLU*OL zNiuGG6yMFjpV~A9Z*r<7FZT?7d&z3`#^c1YG~$d7lL%=i+OdD!r3Z18SM>i5M)h`o zwfVNh!IeLT*?svgKaz=1E`y4u7oKZnhikMgupE*n8cWtazw#^GYb@X*mj(O|z55)P z*CBNyxDGmt^k7=KDx>+)B@VxL0KAMxibvH@!>HY|Vve+iTVE~t)_URL5-b!QN=l0+ z-5>2~l30%mFO*i;lEqSNN&DHNip8mjMQ4n4f~ewr^z|r}S;@;R_ovx=H|k5;Bu453 zL*v059{100seK3fOa9LpJTW6~e0wEZuro^GTj#;u#;9wgZ<#P^w${*ha<(h!_eKH^ zEWB;`1&~3?M?OY+gIRS7y=l7f@=EE#B9hexPH)m~@%zc-Rkcva>XsN9jNhT|;eKXh znJe&*yG+<}5j+^=V=?6B`S`*p_8;HIN|fMw(V@I14*PhR{G3)~udL0F!Zn@3`UcB= z5YR${Nv4`jsab;x0FP%>beN58dQm6y)-fJyBEs z@&v#`hbN*Bj$z!J^^K^=FqPPJ>ycbA6sOXxNFtmmmiU_`(MCa+;82x8VceILT6p>W zk%TAfqR@MHPGh|ct#MSl9OSQVm12_ZeV?P5Me*4k95u>PM%W~MRB-v5;UL@V#n5wb z9h&x2ie_wwMBc7K36oUPnQ1yS3S)DWS51SC>2J1ki?Js>x&7>_wap2%)Eb5F!p@_q z3%>aSVj`toG9`Js#VG}a`m=<3U z9LN>3Z5?)E-I$Srx>u8IswS497bNS@BOa21+GD$X>DFSbM4cfp8H$sk;&9B#+U~&i zT0`bRr8xyb56n;@E#coK{`{53A$^H28ZibmzpD`6THG_90m4dBVCV` zcpyP#J5H4I@km-y^@-1j+&_1y; z2TR&9W(bgud_rF4z%3_v6YKcf8c@|3M=sSA_ zgpTC}77=_W+TbG36v-~?&-1!6tvIf=Npk#Ju{jdoxWU-pDW${dJ4bSu>e}t3FIDeT z!M`M`)9-eNFX=~8%l}elIlPv&HUUr1qnSZ(qQgItu4Xz)B+`CN^VyEz+DH%*2HefD zv|c5kH*5qY_%ev1JWEw*@Gv^iCPiYX_F98sYF0vE-_D~s!FCOG; zfe+KhIVHsr)wCZ|$L)wK|Hv7&jJ=%gp{NPf*VPd+5qUn-ptmI_MNyBK{qO{vIlCHe zvQ;G7PNv@%3U>JpV||Qe;3WkMS`JR|lMfZ`$J*7o&D+E&urK8xy1Gdmhhy&xHonwW zsN5PV{Gcjxi6yd@wpYVEV}l4MT$bwK`rdQQO1OrU_S#1dznM0I;8;9mz+iF-KqDh) zgAjghaX{cboL#+p=~i~VUN+qNb7{-VGYu2k0d}S8wfOXftrS(J<{1)b&q#~)lJ?(V zN6U7USbL+2qWRd%hxz%B`E{L&?#Px#Qi?r?(3bB@R#ZIuip>$j8ei?jfob(Z8@o!9 z5jnxh2|{{AUh5b__9ZFtqO4}#zsd(RAG^&}8T5p4=B2XTd9^XVT-3SW94Sq93C;=A zfJQv{AfD#@=f-9gN_wq1!R%9ShnSdRjsi;@)wFJ7-dNnY+_z*(R`&)P$`9hiW!@~I4zx=|_o zx9Up$qoSu{{R5yt{0Def#cg`@r(C^6an0^^g7yFbPbjb!?$JH#C&?VUVB1ae0p6PH zl2EeMn?^~&Pge?L_bcQYBik;g2!S%_oe+6Ub4NW;>W+f^X`$DstYUq7+oc3+Q(xtz$nJz!v%Bi;~{8|nCgnzz-t z7+Br3$u0Ax7OYp^%w&au(RptXb1%7uk$KoK~~5>Lc3?~z2rK{G|Z zZ+{*^{;?97vaiqR2H~=Le`y&9GRvZ0DLeqEAtelKuU@SYi~+)BrmlM7jg9%+!1r$9 zOykZ$NZtv=0v*olqS&eWZuq4nN+G&8%FSz?Ea&lPe)TaET$!jIA$vu;wyLPzk|ytJ zy93$XakzzUO2%x&y*K{1H9Y>6a@JNra$uknZ>c2?9&~`PXG3scH@tb-6S+87%iN=U z4i@dR&kuV5!ud*6(&689CiuL8RTq7U@g#`*zOpn*(u*V3qbm%Q^S_rSJkYm#;nG5- zmfo%nuYr`6$Mm{g#y%^WpZhO8M=jUw0fn+MJ?M$58vke4^b8xzcuAUS4QUZjyTP|R zNt1kcpUtBPVvwr|0YX-9yyA0PdVxN2+**VSg&3B8Ik)N~SD4vmJ@s7jT9v4eGfcRY z4ddcmQuGYa@R9M`ig3(PomeQLb=B^t1Y*vy2?ZLA|4UPOB2VY9&O^?Z*Xtp6Z2we- zaclX&=CAavAAhG&tIE!*YRX(F5E~7vj>W-MkVX7FxCW)rzGgLD3RnzkP@bRDmg0i$ z=LyKf%fbGXh(F4GySF5~`;NxqkAT|!mO=R}G87r%goy!_-uW-85IN#(Sd`=Zd#$ScoNtBj)S z40U>-v;Y$0BI8ocRa>Q3!1>${WE^bgYw!RU6P}I15BA-bEaf~N+cV|rKDIwSIT!V` z`a%uE#LPgKrHg0X2&GhcN0!tuntA(?s+sc3O}y!>9+&vD#X2j2vpvvDr@?w1R^Kbr z0B=8ufIj`Qnsv|DXz)SkO~^{cg0dmPwdC!o;ZdHq6Ii}kvu)WyUdwb!$$Ye-+F&Pa zx!Kcj9Ou#H#K1;EQRbjx8~m7Nem`c>#89M~mDvR_wwVbsfx8lgKbWhsTrA&e@C}q0 zZ$PUf(rCGGG=8d}e*SVS$Y0)g7nd9O4mqu}2nBTdSi-;4Gqe17e-7_{7J8Y!;0)6@ zTJ%vPE822g3!E?cc%)9B#e2Q`v0J2dhC^3gWm?*jIF=``eQ<${KR?xT*HHt(xjMU! zJJsVyuu64$iOgf4tIGuRU6!dd*fIxJ9t7--RZ_A)`$wErDPZ|2oYAEVGG9?9$nPhO z9NfoU_=jb4aWDI)F{KZYR*$*zHr(*d-hxuAa%(Lf-bIfE@tB?Rk~BXDUR#{U+UsxM zzf)tWa0xXA5bi8m!H+f!`^Vuy6rJ?VA`G4=)|jH$$EvdWpLVfD%{#O)Z%(&HvN8yQXa4E9ykOB znaH4IJsyX97sC1|p7`(NeMpI-J5?ilkMBqMkEhtpMjx{r;oJu|8#znLuGa-YTiv19 zt7XKFhVg$I<))f!@GVx@;@Lj!sM1e~U%cx>+qW1i&n*v4j+49UOWrUVu^q`O`DuJy z&Juog0K&GXamj>d`)6RD14QNiCGK;j-V%8^#BP6dccowl)+?i``#RB1JHZ%vzQe#4 z`3?e^`X2D}f{zVd(^H1>YKB3+xyK-)!8;~Bn3tF*XK!;Jq1as+9{^ecDhzzgm zzLc5~&Z^wMn2-9>6l>+2*z&fkA8&!ziE3Ca27~9yBjDw2#={qR=E1w~wR&CpH?NA`TV1;~u09F#OXrNr0tEYYSN;OPVdxe3aN^H5#)*a>n*H{`IVZ>ch{J_o zeL&oH2jGM*{n+?kgW2a-*zpwc6KT!%K97H1%g0X_hup~Hcd%#Y$B~0`z`5-+c%b?w zTasV&Qx?Ixje)O{6^Y(+#6uf-ga;Zp2y|+a<88Q8i9IL6-+7%}7Vq)Q*&4eUX{~Z& z90rrc&c7jcAG8XEf$SG~mc|XaXSAg@0e8sx}}u{Nex^Dd`UD z?k2kn#c1nYY80>%ynFOQFv8hNG(FUsjdOT6)yrcbNN_t=y7Q#UT=+WfMZL#Q1aM?t z?E=X7q_z(i_O|#nH8GxL{#2-0_Ol`xy1LAhd|-ZY-1vBZ()dtaSIFbDeJfzMR$TkA zRs{iE5r3c8b^{cu*^@TOE4F=r#(z;CdRqiX0C%TZ!lZUO^ObZzdb)#LkCnH-mPPhq zJ@n9bApI?r9+#P^oNegGFFU>;CT>0SWR#~qFJi1Y=Iq!iJvd4oJ!^vl`vD)hJ6^T> zMIo-%3N1}S)?Z@>n2(K_X&DnW`CZ-zK317=H!C5sKfT2x0J?{k!tWz&&2)OjkwPf1 z@=3I$kV{pJqhZfAr0__I+o>*Qu=9H_iJ-v}u4LQi1X~MuBEs2?XfzQaW`!9Kv>APN zc$L8pR>pCgt(lB&qu`dmktfGvo`$%yz~rAbVlpkTZ%z*FT_U3`C+{S`NAw~X4^>3Sl$AGX%au18)9U+( zDK$e+c7gF2fCUcP`FX6-m0bdzdYPekx zbiBA2y8xu>z+Qm$@lPIq+8WEujb?oVV`g#F?RuRZKWMc>R58;YWtdQ6!zUW$Mvi4#&Lpd|;y(iEs2Oec z;?3mXWI)KLFO?RYJ&O-3DQG{G`AHRJ{{U-k_I;VhqTi**WbBn# z93&0KTbar&-?HYO=ye5+ z$IifKfr~<3pW)9W|CsMWAwjY^)>%0;BDvi1L5MOWLZASce*GZo@(J7ad1)E<1#JU* zk{0h$tF~&dwEu$wKRVfLo6S)jx!oXSc7ICTHVg99wF%qI#Qu%4&UHDTjPbJysy-h0 zkmN`4zK3B1aQZ*_WTmeDgs-j1oyVWPN?UKPy6D}Sw)gC+%}g$_rF3onUi-dX5BZ@? zZF~7li%uQ4ZrxuM_w@VyZjk=twKsb0V7LWg!{uf$E<)dETVIe}iI<6Qf89y=B=hDK ztp7JA*HYNF|D9qXS`1!;_XEpI&_SlHa}f_vL6^SR^SHYvALuZy?zegDa;B3$_T4%z z;S;!BcmtnA{{rRH#~%Z_EXE*o9t9}Vw_w{Ah(;^AijPk{ACq7Y9c|Ak-TbW*0OyOj zY`X74JGB*regNSg+swIu_sd*dX{5EI;KgMe8|dv1EGA2p@~62jc0X+J18JVu){g7y zi!iAZzpxRLc6#^U6znvskd#X|`?_pcl?LcK`3jj-_)U zE&Y+Et#h7IS8#hjN&B(3BjDzz@@{Sa@uIQ&jlCfIqhG<{LrKXe`0(euJrrMG3;ZX0 z7LBpyH^Z`A^P|p`V;eMjX8ZtfTz#HKLe=~yD9p0`OtMr%pX|23{x?S`pu#PvN;sf4 zQTzZmdDU7M zC)n-&+ASe}I7q9-LKsK@S$AAxD6N-hXBE20 zI^anW8I@N>DLyYVdxXNDZ8VM%o%lnU5e!KlHt_1aeAXA@~L z3)qQ3b!j7ljLALSeoTVxWMZ^l2_Jo{TNnRsC~XyogR2jpDo6vgWwj_9Q)2B3X&;@S z#sG4Ok1wk;GLH9rETncr_EOoIdhr*G;&>>*ZE5bdX4@x^K(M` z!&~zEV)3SLVBwo_OK#6j`PtGPe(Lk*IIO5>ixIJNxYzkZ2wl&nZ$QD4d5aN1PU~F# zQrZqo*Y@?4$nPU6esbrcj99yK>X~pQ707OK4debl3xhR;S+AY7ASEuzN z1`#xgoUFLDhdWB_W$8&X#xZR?DBUR<;TUSDP`^%C0pg13t+y%I_gmBHSjP8<=!BCh%*{%b7r*jFYmQI7eyk%ziNIGT)ut<;nFM5E-}VyV+VjZL_HLP!8<;#A0 zf45h1kYvsrNH&VGS;cc#UlbUy{q)69*5lIeFE95i2*M}tR&N-J*+zFbc^G?0NzqF{ z@T8gKF(h88enXZAXh%xuUg{iJ&6nuY&~w!fYzcLKH(HUb)sh%@6{v}})jbV63*;nT zygT$45G>wCKKj+<_GjmKA8vvoDoxUoMwb||8vMr8?f+fL}-8*f@ zgy!kNQv4!@IHS*=(e)g?F1Y~OMRjW<1CRzgXH+cD?wuqvkziw{lA}BiI&ejWT^ULK zq9M17+FIZJWqC6j*{`+Yj~>RVEThxabA)F$4J`JMhq7P~Seo0zWKftkn%m301PLy< z_F@n`KHytCMl#5U3hubrFII5$FQTDvdP@4nv0fCj^W8R*wWp5c(JgJS(IstXYJZR* z=?}W_h`NhBcji&dEdIeD=J&Zxop1=(KfL14&b+IdBe|t z59Dky^f(zHlfB$xkqRwcD#({SJFLT36!?MwF=vaOrRgLJJxK_J4^1Ntz!E;EIo{n~$M|{#46zdC*fkO*z}`3Up6GQaO8V z0#Y*_q1)X!p&5g5qV-EQ&G%C*m8hf9GA82!PelzpW*e|XwQu={0NN}hjdoxExBCL? zTd^fsJlrs&W*TM!w`=fa;Vby+5!qV=J8rA#tnE1M{xgo|4HT8{$()dO|gOE#6}=eWJXd^oJ|xLodRt2C3B&^B=1g*~q&# z-=C%ES29U$aei&Gj@pmB7cs*c7&_gXh&ZFDi|%(oiMXydWNKB3Mj&Ma==HH7C?TV>mFYb_Y-2pcEO18Yje6Sq`@lxHvKSw`S?3xJ*b6Vf{JPc*Q)WADK$u*a!2j| z=kddpa_9CVIY=I`${GTr{nA-Xyp+RddCNhKR^;pS@geIs{hQZf{S>x!fL8qe`JS+& zk6n5#ov3~FPYAUlA@|CQZAet|p)z}fBWu9#0Xt4JFfIF&Tet-ENtql;+RnFd37sC=28}sjq_reFL-X%PR)C0YalS~8Aa!2`{Wcv44FqpE~h(o zh$LfOSQT#+pX_lbpXmmiekl0m_gHa$#Z zb87~_W|rkK`^V`j`E@DkWRp55D=kB%8eV;0I=Q93kFc`X)gTw7m9RP!ZXPT)xH~v4 zmep!srecA`i{C{?7#@}diF(Q^TZIWxEUuKevvf=Qly$0%v+ze)@Olvn-sGYJjBUmM7cYh`h zFLGKy?WfAew)I*IjF7k)G5f{aMSh-6ZN#d#}w zH3a(qO&by|Cf`d`l(eHXFs*i7xlVsG1cy*N^e(oBuKmhCcL6Jf`zN;swkWj4w{mmNCbXI*O&b8Cj~4j_#>W@VJ-3ZC3KJGRj%Y-gt}A4APFH0P zEN2PXFWrOP_PgNU>j(Y_a%Xec2W2Fro{)fNf;q-t^QP}7cxrqfcr&k#L3ujh+*jeu ztR`?RVk^&cLoBE3)B`QSTbl1)%ja62 zx;-D8wa?^EBLMoPtJ}!^GPRS2ZIPmYv44+qqM8Gs7s=G}xmtpwZW+Ob?euc#G%s0b zPEfoLkUK?MRC}&T2z5EtfV(qK6`@g6OkZ;5L*jG+MA zQL047#sZt_1fkhpIax_^q;*a&Aq1y=u)z1psEKQRWWuK$jVB{E!fP&8SQ|ueSl8Vo zF%Y*@Lb>s}CxB&dIE{Zv^)vD$32Q9)V-hy?R*y7B)^injq9&T~^~2loWFh9kJ|4yK8|jv=sNahZv43n~te zN`;@RF~}~-P<3ED$TNRkOehNiRJZz!c9i0PM&M9zXt(gz+nv*gP`@_V4INt7@Ot0z z5+b}Ue;+$pTUhWB)B@KmMki9UEvAdfXs)e*4qq z#-bP*c8E_&_qAA60>{w?O9}OrzofEGgB=IT%lg7Y6eTuXkQAcz2uh_DJngWM4!QST z-yi^l6{t=8g{vCs2WMgUbHSx==X9ofzfs5Kzq%a{M6o?nB_z_SW?9I*ZBhGn)WwSg z8*-Cz`ZLQ}w<$Mr5{ucFmMmwMW5|A5PvPe%lBI#IFAz3Ya3-C32$Ae~Nceu6U4b<* z5EYwFmm}T>!DgRb@6_9`KauyjDQSeh3$q72?FU>qq1Qg4KCe;`*)%lQwB|`VX7yfs zXXN!JQ?ZB$9aG=gqQoW`eu)RDTsR<)&?7_Zm5^ z#jzrOux7mF7N}^ql-a_u}8|=t|TBunz;0kk7ADs7P-Vpot-L zkU0v5-<&$@V1#TbA^r`#pnT1*`};E}sx0l$KT9XcQs=guCK@WCa=`l%6J6(Hj$V@dY6?1`nVJs$^&GES zG3SscPXp%@-O5ELbjIEy@g{95}^cep)8*K4rRL zzfB)_0;dxP6=u2Z8G+nlg_(L^QkR1`CL#nLlM57MagM_Nd^1=G1)ECbPTTLjr(r*y zbpwlHvUor4Ao3kH3I`rb8DBWwCfFo}4F~-N!a$9s~E>c|s01k1-; zz;~B(CF2d;ktgB&Nbq42&*KAOG}Hy9vr!yl1Ciy|CvFU%cuJO@27!ob3|y%gh^Z-M zb72C5Ka19TosH}Cpyrez5p8-`V@_`+3=aoqk108m8)1d3JPWeiY*KaGpCa=Jl{FYT z3=4by(~yw!zZSP4k8!8xr(GG0at?j6_j$7@ogq(c6k%Y2R`+l4>Xs)2rg1wvrPj{%mm1xrScJTt)Wk7k&9WG_a%FI zy1Ckz-LkQCe%I^jE%GOyzIscwV_SLn%>drtSw?o*V?gddAN*~>#2OTkj_{XRh7{yp zXqOq<7OMLc-M~Z1GgdgpeShY$x>xj*1jYfsM3R}z*HtCB1={Xk|6#68EO2)4ohmXPoy!`!rE?(Ob6nU!$cU#JPNg;3M` zU-H^l_5YIBNVqv!vF+#4z1;CVTOr|3CSWc@Q84mNInln|i+!P9O+u;?@EbB83M(KD zi+SS?#x<$+_CTYX)a(9eONvcEG4+d{36+xOZT$~_jckQf3UjrFg>(I@*BMGBE7rF| zr&8gljkD6frXwIa=8b*(Piil`_dC?0f+M!|P`TEzb0>3*X}AU^3nZ6Gb1(q2j&aQ{ z_d=mervC`4#9TXZnX;L|t6D^E+!>}M|7x8rnBgDpi0G>#-pI-mG!X#i&IsQ5Y%v38 z5a{ZT_FLe{?KchKI#VUQfvKIDP1z=u%PU1v4Jr2Zu`W?wc-rBJ@n^O36!4;+q%>A_ z!k&9WXPml#>h$B-sA7iKVNEJAN3cjUM4t6qwE|N9$ih-UUtsQW=BlU)DMAQiBuY7tE0=io-6(F$z{8-tY}oQhO^6c`_w2rP@J~CBmnNa=a%*sW99nU z;?JA>Un-kO9r13jB{-F!RPLcKvKR+PLCu4uDLT42r+{3bZ&?3TX28ACeJYVd5y69l zzRD#{k`#flXx0k2?ST1}7e`l#9zAD;ZF~<47v?Klb|9|*O9VpFk$y%XKvDH!%o!-B z8uqV_kk)KPp6yqCcp9tQoJOKrzo5}0371AezxYpI?IdHS+VQlV`!Q2;Ub0UcfFaIY zGL@}4I0o0a4>?IVwiWp!%R1BQP)uDq~$xB7~e#9dl#5^?|x z`y<;G;xev+1w(#7UP)*Nz_S!m({;cm)|Fe~+9n32Bx7!hhQ{2MXwh9tk*iICuT?eU zO^x)bJNt_{dA1Ag+ZNuUF~%XT4p*V9g90l)u!8VI|KtQ(z823nyC0{F!yM&Jq$| z@{Q3Oxcq`?N>@p#3nQs7&qkAgSf8VSU~U@UaPvRJ-D8j}ZM!G>wr$(?YTLHW)wXTh zwr$(yYTK)AWBPgb-gC~L+55vx#EJ8zqVCG5tgNWYs?0mD-~Wn#MK4Q9_=mWG=nW3H zR5$L7*&g>|7l2v*q@gwL)f=pm2>tiSEtv+ygl1HU_UF7~HddtgGz=)|KOwh$j9=nf z%+3xoR}m2Z)Fb*G`~n15OlW&A+#i4(J-J5&TQVZL4Mi=*Z_i>Irh9^MKW-joogFcd zkBzc7lH6@-=Nn1jgv4^OXZgy7v~Zg$Vmy_vHk2r!l=$%JUGGa|z_~13$Vp8o}FSvKHAP@Ek|N3?k%F%g-?gXZ68H0#Z zn)=Zvk!j~dD>*{<_34`p5cFpIrP^o{VXwx+WlRh*T|7)2t(?FgVm$8$(lOTT5k1hM z46|q)(T%*51I9RfUzlpnIV4_PJi-@S^8XqW&xBdlMpoS$4r!c}{JU*KjqhO(V79jr zpz$2CKM(%-vOBy@vi1;BWwGrX+Rm2-KCo18h0t%V6Bd;|Ho}2jX$5Dohf)ev>A*a{ zdE#|2Oz;qp^t9dQl6(6WOA1AVb%w5?Pnl#Vsuh-{xfr478M;TcXBv$7AUmM|DzIvFl64}A?bg=l)9VcPAkbkjdhfee zGJ0lO6Py1UxP`{ccPLP&tbi)KTnkP!_JstFYPTI4wcPhgEb)LoXT5d8rlsUC*X%zK4d1n&kV|s8OS?#W@KZgv>De{1EW_nQTE2l;|PSAlXKdC$XnHs zapkD`J?>DU@$k+GhnYP11ntv($&-WUx;46HzYs|D7lg#wYT$3H#&0v zB!{mN(iMC!L7B2)Iihr7J!21>S7Kmx91fkBrr>AM&O- z#^~9kat=5n49T}hvU%Cc#o7SHy9Kj6^$fU-SXT$iwnc5K|Cz_f=M9`X{K|{!VQq^ zrV6!4h^U`OQVh&D7nDGu@?`JVVXDop^iuRjHa0puG$M-)XLH<+iS7V1W9fh8>4@W> z3F_1+BNf()=W?9rAWLHZojScapwz`nvH2Nq39v1POqxmLqe+hDnhCJnXWJ0A-HlX4 z7JqPJyG$JWTLGB|g+mxz4?l@bt>5zWbxCF8-!QmV2T~$ z2=z)!{EjfkRE3Bfy1ZT_By&&OJ`ChC8>J|jL~?msC`&sV0uW;!i)7sSL8|{n?i$Lt6hBYmZ2+*o#hv z8L96>aEyCL4QiHIx#mYKYN)>udv|D)?N{k)GGY!{_nI$tW=FjD`==UcH^txH!yG6^ zJ0WCfifXSLYd0%k1KfGnX@3hDxeHMUc^;aNKZ(S%h*t^E+lmvop zE{SP~j_I??fA&{gx35w6k48|{6EG&MAg)uS&A=iZ7AA&UnN|nBWvI=`xvSDzj2yh1 z#9)g+qX*j?Z%a9vTK$!8A`Fta5C60{q8Y`nn~$PPk4ORen}!SVRsTF_b%1AJOZU~} z5KHqHWrlHqZZ%yL1v2@@S@}%~dnpeLaf$t^&xD0=<07Xtl$}L}!MX?5u=&j@w^r$; zT)NDsGA^`S$q;Joj+XDF za~99*ztOn(#q(g2SP*#l4Uh!lf7!SX;kdm#0p<~HCxy%FS+7Pju$Z}4a44n+i@1C{ z;(<4ykGFz#ZT@~ANPe&ZwmafqPm$P8-I_wvA&)?1d$yHegUJRXU)AT6{pNgtUC*|9 zzY5UhuTMM@bD(c4q?ARK0yex6IWU9{G`C$;_u;9z8QtdKD4|9d?bMkhhYKihau;Fg z5to~66js?ft>Z=Y--jdW_DADg4>|)dEHW#lewA+OqLduOt%rA!===wdqXx3J2rPKo zp$J6JG{rdQ)A;Xvockc??NjND`WoB{aLN87nfYNU*m|0oC!Dc^X)GvvEW;;qAgj zhX)6idFX^fwsj!p`}?do&#!hF7SH4Ybo~$dNWqqYS#hV7_43@hK^g-p-8&r(L5o9P zcp;+_c1JaG#?F{7O7r^FwHf;V8zg5&c!AQ3$XMUu#gD6P#U(ZbQ6Ax@FN`<;la!2@%5L_lg1c+*UITckyG|(YR0|mT7;134 z-2ep(|I zflbxQP~Z>_7CYg*q*O&5`fsS|s$)wrtxkF(q*>;?FuXthQ||AQh27zu(k8o}cYVE) z%)fJYf%NClpv*A*GTx+lTNrJ8{JPbqr?9O5m60>?|4qLra(ida@=Mp6Ml~t{(RqaK1nc5wFsELfGqs_f;N) zw@>JS+n-9^Xv4kw=Rb(&+I3qB3S`)*L*qLexVSjPWknRa-P5`Vvq&wCGV!1j2O!=k zkV1w)cUC`2PF^DSKO;GF^E%Occu)^ul&p3?_oK+g>@>5yv|ih!LMb8<6CP;N@6DzW z83I8QhEPVa93>@kp7O9v4}5+uOpjXVH=p*}wM&r~X4s;I8K~prg*y5=sQ6Q3Qvo4x zfZVD3uBNbG<9pm|Oq2HG^IQqR2rdFar*A%YIYVFEM=E-4F= zC>KOvk7P=`jN#MPE`SpQfsj;ypxu8d*S7G?`Y7+qOZ^ z6&&Audcn-{07Pt!#A9LiUe^{Kk0EFrzAnv(lwO<|*Os2>=H6m&)A0(4Q>NZSSo^oF zm!lmS`OxOJ(DLprLFxBE_Vx(cJsWt#PT8i9O^DlivM@PoA>bw}OmDl&)G^URBB!zw z{j@Gr!d*IQv~1&CaW&y^iUucg1j+H;JnPuM(eF{jskQEXiHCQdizq5FA+AYK3F%=M z&LZsw8E@Ws8q7aHtU<|)18znM6H?1GOtpL@$=IYCV91t%VRJ-hJCAL7#5~@htSEa| zLuyq1h{cQG|C-FTEKkam#VuyIftZ|v+2n^V4g7Cr&H&6^<3G?G^OkTi_{)ER<_!CL z3=wB`hVDr#ADyQ55`^>s7dNj{7Xf+Knr8g{7Na>-z)Q=f;#izzfaedM_qnBIh>Y9m zZF3C#evRAdhJ2H;9z%|$HsMiHRFc)pk-@LPoY-ZQ@m-0E6^Hfz67P^5iTSBF{|IQb zlD!$J1AvS1w|_4B-_cwk%&0M3ruF|sb1d~@|Am?xXP*%c+gP;gLN7D-$tZ$P4>v0Z z3DlCXVvrjOKbC?RWl(o>%hGZc9P@D<9?nVaVK7}Iw6{;X4}CTqKveUMJFv5s{)r`- z0Rd?bfSCSfroy4V8PnurkcDOJ;J~U!osEVJT^PEz3w)U_`RVDWnq}GxZb_A6EI%dX z%sYL-(Cd;%+=Zc^(cC|#7iZc^XbfZBX}W1 zK*HvrsObBD$me9l;cq?#Or2T?)1H6F)r_g$);Ko!YzFkNwS%r?&-Z^d?;dO;8N}6z zu%~>O{SrN0r;HBu^g47HkgnTRdq-WYaIHV>g|xsa99^5w&`je^1!TBrV_R?5c;Sit zJLgij1dpe1+QMyWN9}xU2x$48h_E*X`qJNPZ8Sz1JCif}?41zUdv!-R6K(`y(acuJ{{{nu)P$JBASV031n%Z^j9^@68ht` zh@b3A4w`8-Rl$0GT0d*N`5XZ#{airqkR9iHdln!S%kb#!kZqpb`qI6|UJB>GHlNlM z^%O%`w>EEg^%V^}x2=U!@_gN6qqyx23`w z{^fBLG-6eG<)Q*D^c6bdHj*-mLSM$6JSPZ|%jk$#eP1Q%{X8mq)K} zApUo!w;l&qSpfj;&ar2r$J5&5>^bE(QU;gPQRE4q=N9W{w~hGD%AfbF@13>sU$q_* zf}AGnht_1$Sq^j3?|;2pS*HWp9JT^YWp;cAswh3HlM4(P8s2e-KEXmY@o0|vLH4UsUKc}E9E&pRwUDu+ju0>r{jk>)2|Kr1F z3)fWtr`z!H?x(J$HehmEX@?0{VTY;O21BhKf=V|Cm1+EoTV8#HzkWV#(gi-!MR#3$V3JDJ!WWIMH`OJNg|I=iF-s)Rnj~<#^o5K8d_Plq?`5Tsd6JUXX^NBQlu7Tx) zZT8RN91B8}hN9d~1tA&d7N!9AHD}4o*UKz=H+x$=1)*lEDtT@vsK7p#Y&vz&nq2dyW0dy%`Aib_4Z)D?r@dtXy2U?tP1( z9ny%-qUT^VF1i;ncgx8_AD!B~xu6gA3mK7eOlo-)#G)8J8_Bl7p46}{%gK*l~QyJ9!oG!|D6uNcvj_uOoyLQ2kGd( zBM9VDcNk)Oh%PV9Mo}YECvB&4v`*oAkyI1s{PGK<5cNs)V%Pjvv?bz3 zl@7P&qA-`!Ed^_uxZtZ+V0f~Qun@ysT|wgc2uZp!`I~zu-?l zFp(z~g@MiIVP>C%sC$RR?>F_}AH*$>f8SkKlHT&zHi#c5AM%bdypThJIXl8^lQpf# z`iz<(;gsS$6>=dvMWDC&lD%jbM8JhH_lY)$+eYok#fyoC$r5>9wUa!#ampbHBV}&N z-T_u>gxZt28BGG5R1?wOFpI4iPGrR%s-QjV;je)9uF&AmB1TeP z@q(ezMybt9F;PeIBf$HUqKzY*IVmIW6=+_1`R^;s5TPYl>u@L|mlC`%q}^wpmL2$> z3d{}cyT9qcKiNY^?3PS=7M0vNh)!DMsxc*)NXNWC^ZfSB*l|XfuQpH6sXhg)pq5#W z#rN?0k}$_S(U$+o-=dsa!2PUa3WkE zMSqSoyE?HmCL_2CHhYCs+vWB!1>0(JSF%PL!tu89%qy6~nGfeZh0{37C6ZZKOZy~% z>t2O?Hqpo%GR7rhI?asFbq0dZtj`s^^wrTV4OQTk89Hh~o(P7OhB61~d==vvah~6!&iyD+;_4QSv@-Ilm8A!DAFzsR9q1IR>n2z z0lfVX_Z;!k2?cmP1LWsit`rM6G4r|Io^0`sy9e-j2vj@FhV)97V`1++#eLkz^6Ypk zFdzx^W>aLJ?)1%NSXxIH-T%TK*v05JBbiE;8!${TTA{_DRD61H-w$N?C@obR9DJ0; z$SO{(46e?+=Dkj0NWgu0g#BIM?Bvca@Y_n1=>}U*00Wxwv{F(`ZesHcz)4TLi(+#!uN~kReI*U2S7xr!mCg#BUoI~mi@X4u^=p@h3g#qUx}J5os0b@Bxg zGa6Ce4HOe!1$c-@4mc7XwF}%VXma!onTJz)G37A=$-b(k|2;e5o;ndRz4}r8c3fAI?;ie7mRAP>e&~9^{XyzL< zT0$w-fFVSE#}^3P%63RGeP$A1?g<0$ZMta^GG_?kY|=XTgjh3nUn7~Mzs8iJ)ea?w zwCI10KP%<={vm10<8K@^cJcK;iI7OL^@qtLn^}=X8+=(kbk|t&(M&VTR(@s{#&lJT zE*@-EU|F9aC9%jKm{vLYYybF{Pxoe+h!O~9|BeMI&r+1R! zepV`=7X}LSBhviqSBi0SIh6)wDHB@zT%ol~a(l5C57WWzg@w&oN?gf)x=Mx>Oy~{N z3SoBvc#Exs>O?UN6dy-ern=_E345!zP})UK$aRe=#69Bzfuye^!>?qNydrE^G|9j6 zOs76lOm3oyQ=8aRFli+3N~9#;Z>08&&xob|)E-5%_BDzTJ+728JA-Dv%EFTiX5Xn{ zaq~?fgbWS5u>{1ds<64o5n-!a0zEYv)HcnX&UbeZVS92FsGc0kz%@fBH|{H9F0@BtEg0l7q&9w!+>c?8nLK3SF=bP-DmMyWpuq-K}lN?VA z`6y`(V``e+B~nE93!^nd=2yh=wKc~KyvBu&M)*Uv!(lhoU|-UD3ATn!$qW%J<8Y6V z6Gijo$oVg>f3NBA;O+U~^(~T3bX|%)S8i;b6Z)k6rc|SOtn`$U zXX-yc71?E3F`F4P$PMsjlM?CNRP(;AGeH=&QV^k;485K@s)^>tZmMHq1+x@b(h^3Z zzI%~eDv1`wGDapuNz+TQFCN7=dJ7|%HYOB8~-^Ld7)WiU8T>|B1T*o$!yOIsUCO|kH6Z6X66F0xW$Xkee`aC3NJGS8%lAH%9kIv#S#t*! z>>()33~}s^(tcs#jsZ1hj_N61CWm`z9ei+3igO}q#&V&|B9*B)9#P!Jl%Gr-KfX*S zkFFP+*(jM~8I7L7r|YCIqut!<65j{^cj}RfrM;-(^$K`fgq7fjJvw-ucRN@7FPo#j zYHk9d`XX(Bd=c1{?GFS72}>+x66g{qKhgPyawq)su%p<-IW}t9hLr`5+=MQN7E%(z zX&#xw*cm^vlPUmKN954`7QpPl!>rqFI(kMD%3JhMQnPo_hj)5=HzKU@w+97~(3eKM z1lyL#ciiQyUXL`n)hZL?Cy-_scm?@Yu|pkSpMgOkZiv`IZ}omb2>u*#_&D!03DQH% zX3Sp^vA6-*iRvPgyfDe+kdh-1V6x0pt`86Kh+{K13`E7Lp=Hyxp94JjVBD7YI@a^l z_jF%vrNZ@vUk9a0N!MJKdw{NFmU&QDSczQal$#BjcNkq&GZLcZ(Ot)rqUJa$oE%$+ z5~>ZthXiXW5CsolQx}LjQ|n43`8sxT)6n$~lBpPfU)tGVnRXfyv2ut^u8qraM4$0# z?_5QqRk+s8n)J5yTCr| z={J4XO|`CGwtXM$L!W_-?0GGPl1V_{*(a8+aTN9;bvQux(oh2ZILLy_piDS4k4VWJ zve=7lI!vnC7wW`8&+``Q+D)=vcpaY7_mgCB*wrQW;&kVV1+w%H8g3GFWzI5m90s;} z0pZ_wa@qCAYCTdOr`kR~W6ALBo_0J;`&>G{$+JKPH#fy*(pJ;}`!JUvGys^TB;hE4 zRCxSkkBeCi$GsFuZht0#IJCkO@LC(nqjsc}Fe$Z)%VD4dP$BEx_$p0tjr!GTu#L>6 zJw8D?Zg4P=^;?oiH$O3NFs|)pu3a!X_W3qil?lbsRGPruj8O&U8AFI1>|Qr@7v2s5 zU4*hU-O;NxI}nhAHj~{|Q22oOVw{RU?F~as5CUh4IM3h zP$tNgPf;l`DJIbx!>p^~pb#dH>NMQ(cbpcsQVH>vBqWCwG3CM?Nu2i#hRz*sNozp8 zmX%Q!DC5V&Vv_8OdUtGsAX%esnT1px@^-i|A3~Ceof%La=q9sHF@P_XzTTr|mkGl7 zJEZ1s$)q>L-QOaN5xCP`7h=ZGn*b&!!^NoNvf&$R9;@fp+!6}WSiX*x{^VC~%Oq;= zPgJmtt6wfg&F?1ODXcI^)LaY_y4Onhkg?{F-S2wSR2mS?+5qRWS(40OhD=Zkf}QKV zkDZt{SmnqqW>d|m1`SEu_1Ii3I>#+10PiD1F#_>&w9C*WYXGjM< z)&DfvMOc92O<`dYVCycFBcACSJz5+l=`%Z7WYv*RSu7n#BqY>3`5|d^U zeqkX7rbzV;62sy>#JP@QTR zYd?P3R!`WwWG$0&^wCpG*b`x7A!k^2l^F4285>noT-aoK0m?jOWBBq0-8*5h@?pUQ zAgk$b3z3M*HH>32H#Ea2q8x_r^VEsJ2T=OC={x%w?mn}HGamGcVHsOUA_JTM{=(HS zf_Za1sA4dM2o1fyA60qs4I%J11uKTB4+JjXN*GrtZ+aQM-|$sdp8={umim$p=17V= z<2g%`p3Cdi@OJa~bX=|$BZ9xu)$Z;d;rLIEiJ zV7Y9G^X(&p4XNK#0X7Ab$l-$G#{4_h^W!@^DC!I8TsaP9lsK^P z9(fZFxhepsREZPN`6wEL_!6?DSPW8ITAvFCnG`_HUX?nfh~%#}aRwfIQ-lKDHi|i( zk#wRQvn$_>j346ur#jSSP?BBi_X!p{g1^=jfg}_0(mq>l+5!`d4asBI;Bowi?f;pL0B~IZkqZW+YB>EcFoicw-_P6Wva?+td$1W+Az^ZwZ?~x!L>$VS-O3 zxYe#8M7Po=_C+JLhAx26l5GW=4T-L+e3{)a?;!X#o#M=fF0@f-Jiu?foVgw6?_g>^ z!FTm5QZGgHqB037CJB7LQ84j(B(m3^@`$_~b1r|sKH=3L1%f)h-r*reLU_$Q#4^SC+4p#gD!ImPY@quG!*qI)Zl?KV}HcN58T4*g^?^Z4Qf^l>+! zPvVQ=k9MC1GJ*MXi9PujG;o5MiQ;aCMjT>f^?IG~KD=TCez;x;#W39mPClxC&HlE> zeHVTq0K0PZREWm`-pS)zrS^b<{`El1J#->vxS264)P}Hv=R20{fUbs)@Vm4_#7NB7z55D7i|vF%q!(^*}iA0R81a zJjkHtc&B`W?6D_hKbmVe|1`^0k@3Yq_zlS&yp8|N{a1@r)_q^k^=35V_4rVb=pglh zKkF7aLEMp=>w&KPcJH&k+Xyhi@!34jfK0%iB~~mJ(HYWtuj4WE;EuN^4f>3hw(n=CNwoG}m(^L$Q_bI`O;0 z8dp$%*V942Oen$fOyRpdPFleB_x5L5sdPWs!-9{!6(@{r>o9xsHz%$G4rwhx@3 z?KzGJ*Rk@KPEjM@(-ETbOle+Es%YE>yg(F=wXl_)AzsHB#M6kD|Hck;z>O`cf5NU` z^x)ja4j#a_2#o@kJ5I%z8UbW zR{(KO+6|hti|=JWHg9$jyei;{twp6j4U{xvA*R3+ay{4N!p!(@+T6fuCmG{&`5a$9 zFh$pc#^4<@!u)1)-CsY_S7J|Gmwl(-h6dQ`sl)JX{7W{b(P`Zne|sW6=pmT-vLFUi ztenc;?7@Id4fKKkvhDwi06(%qIx`sj_bH`|nGYB$CL5!eV<#Ms_Mk1Y73M(P>x40AFo#8UXw<$Sa|ANxbt^p=@F?`#Pfl79#}`I) zGYMiDE>yf|Xpg_{n>^n2*o?n_#~!G(CA%$xH^$ShKGPTInc(_-2upT%d&Oz{pJ$7O z`s)z-=PbAhKg}NOV;V~d3eSYNyE0u**#dc=fUNT;VkltEu5G8z++XYC{2eMLe|F8u z1q?P#V+C$yYBaX9%;{q&ALo{vwY-{|^$WPO+J|5>G{$A0g2EXzo*Byj=M922ROOMu zzs{7yaw?&ju~D*En}IfGzhcVw8K~}t(av^rQNJLe-8Tl%zhWL`(f_jqBJwBF7OYFL zp+KzPr@QKu5y6a}+9T;_Z4;MSUG#$!@~RKczg1PofNspDB6|My+Svq=TmT)z_B#A& zbTB!YBE%->A+@8hwOXEcGaoP%JE|a8pFHf3dsADqvUi{d*g3b42{d%UPlwsB)?QGu zv^oLTeTr#_^>6yRU7+urSF~;;(zEv)9w>E^^fn0TeT%Rj!m)r(PLY8zD z@VGv31_JAWckW6S-+czhJ#$_i>%b6Xl~7FKicKs#W%dC|i7VMm_UrVquf4WBJR0)| zsPn7DN!A+y^a!Xc`+Z~MS$`5o40Yp{Av0oH)eTM09wZBc6)JlWq&NLt=_~HVlSX{5 zt?A(npm*YL{xhV^@VsJ7m?YltY)aBQ;184$-tm1DTCxf77f1y@b^%tZv)SJJr`wON zPaIySV@3sDc~kABSl^RJ*L}I6&o!p%+A)y>r+#_mZpRLbvdP1iQ&dlRkS|Y#obQbB z<4Gz&MGcbig8AQ}m$9Y4a!ZSFPn0hUWShj@Rdp$pCr31Nmc4?}9D-P*R=zuQDkzPstYzRItC@6)rMu0!=cD=KS!*-9@z*D`lr9$bC08mZp+Z|TP8l9H8@ z+b1Od%ps3Lo9H}++DLWzaZ(G-0H4rg9=eKZh-XSt&HDB`x&Sop?~SxnCv>u`PS3uDd^u~t8F=X}ax8PO z_gS5rsnCckywPfv?ySr1N(OpUyU{-p!h}^2i z_;@aDQrv^~+s*9f9)Y|1-3zP_<=834bz%?BiI_6Ko7;cY2irQ z3Snv&`_O^QDraMCA8W#O$$NtEU}pQQ(&uD9v<{703-H|QZs8rP8VS1zDXpbrW+k{x)1XEvsRSM-!#E%P{=={|!BJpVHI@)i~O#1;(~XOiGwKBRuX}>jWBABVkhbk0Prjk*+{lEea-@?Y>zPRrO^G^BoiA zn!aKIaDzmk?w?}iY@KS9l<+UK`OYwa`NIf%-+b-l;+aGXl~i+D9=n3kl1UTf_|fKp z2Cs%ZS}IiUl0Z@Y7-6#lUO|zCx<#c0pW2RT%d-N}7n5lP$sntUk|2atZ%0(2WmT57 zJSbaG5L>YLksR@-{DaYB)*~c=*Vls#O~x1%$x;)YY6}sKGhUyI)nwFlqy(K*kL%<} z^vNLSQfjC@QWaujC8|mgaeUib?cySozvK$_Q!D}k0@TV7T`b_cB4}{Xd^ofSaQO$I z_%ua_Rb7gzYUg#YQ(>j5^x_bJgTHteVWp8HPDS$#=Ol*G2ZEs;#z&Qj+)L`jGt=gj zTrDNXvB-H0v4&p>Xhp=tM54ipNgtV#Ig&*J(5vN1qKdhWVoK#B+S<~4B~H7;CKD~n zEtFs$tXV#&1Qy&SgFRz&=qHZuR?}Ru3u4&VA+S(~oq-VdNWl+#ZHpn8D7Og0t#wT` zUQyzAht>JHwz@QRb%F|vOsk&ZMBiej-1#9-Z=wl%1i`O=Hj^(9v1n)*vglPl3D7K%;0p2l-82V!?!57afL$wmFKR z0as`F(*n}!dXjkamFc#X2>y^B=D(Vn5OEwPYy)=>5&e2ITRK8rXL4j9;75K|K}}a= zw6B$JxZN-2wOr}Wt3aQHJ|r`R616uclw=|;{&NIvp|O4g$ z#FQlyqEv{3#5O?#MJrwB3TLv&IkHA(Ls@bIg^V%cslhC<0f~uhW$HZLWihxSNIZ&* z^*m=}*jYImg}4?1gf}B{zP6-WVP5ho z4v&N7#^kjzC^8*$RSV)AY|AiP)SFtiSM0-9l$Ld@O6~APMnKRIn}4ZQVxH=0!mQm5Kw;Q;9EOr zS+-kCo)t$rlS2w2q}vtP3DEt@GAEZNj^a44Hd;LuJ1x?csu-ClGdk1@O0L z8(*8oDv3``33lEK_s9aA(Q`r`31{}G?6u+DP49WJID6cb(@(tyFP}P$Ps5G%+6P{9 zaz;SV&6@qRz+xTO`^6=9RfEMhW^Q}R{@Ihd`8t^OMBVH5c2lYMXoTFLbi@+c`u231 zf%Dg(JO;luWfCnwt6B%J%uKdo;XKqWOL?8zr^w~&^I)YL=ACXIah;VcCl7Os-XZa2 zlib(xWR6*P5wTZ?hM=AJZP_RlBEFnRFNHP0XRlTtf2D}7WE`*XAWGW#>xE-jy#YqS z3IP8GW1l;8MO6keU<%|(8e7!=bVqi^coB80^Xd@>2E z7DS6kIJ4Bxjsk+}m@GISB9-rq$!2cSVJ=vr)l-VF6_3HD5Utv?6=5)*OC}&AO@v6j>ykf(X`-P= zrtjf9DrT8xCcK%lI*VvhB`r;||9!}B4SzM)mRsCtct#nOTn@_7FF0)MuD{$k=!Liu zE1?ufXzZ<2t94PYfzVaxGCYj%)Mk{z$`R|k^|KC^x+fb;CQ*yfHlIu$c!re1WP5>I zRZX*>lG-yK`y*0gGx;a@dNGaeieeBdGj)8ggn>SIQK|;e!Maf!_@xJXv6$utlLq{v z4A=&KU{#=I>u_DH#^7Ts`Wl=e8`WnCF!O-O+@DLlM&}TVbcLiHF5w*EOLqTVCoN`B z&S8^XpB%w=OC3MM7G`ftpe8lpobIC=cqi7N18^!;lwEaone*AuQ;hLD`!J*3<#L_= zMI`t3lTf-9_&&Vj{!72#5q;U|bYujc+K2Y{#W{oE~4wl8w+;cHMonEOrBUBTq^nxwvyc2h{Oqzh3y=_fCc_JAl<1 zkHmBC0iGS&$QSpAmrk_&Q*_5BGHTSpe@~N~61TKkLS~Mh z%9DTFW2TkJi#bpxoJgi6$(Q*z7Yy0IZad}O>Z_y}Cs?EahbOo28ra(?D7viag=*mT#!KxEY zOQX^%>@)EUKyC#s>uTq#XtT`Wo{8Of$rr5#-E|D=yj=R@DPi)4wXae z95kp@Z#P}4JHU;JJw}blnI}V&Vtm{i-+!-7pNJ%sF5_{C9xLp-Eq&IT{X0OEcMy&}<-@M(%M|jciiux69ZQL;R7B03)cj-+RcV_l(D;hJV0Ck;=Jr;}8=eeTav&Rd;R46TS@BpvL#17|_eJF~U4dixSf zYz&lp)m@=w>kN%mCtFs82v|#8(+>tV1EAa4G7v%gCO9`QXSp%|erbVi-zZc@8qn5q znENTF=H&(H4l1{zwtrX?HPf1Eu{AH?;e9Ph6ZRa!06FW3mDN!Om9%^It3kGOU}C3<0)d7 zv4`7Xd0+8}Y{sLrAc+PcgcJU8BJV~x4k)p$F~g4W5h>TyxDJp;((>??t* zD+jjv*WLAVfG+T*9bYBO)?j$N7G}*7)Tm=4DXB*3_Hv|VbyB8alWG5v?tsmCgSA+t z9mdvUyylF`b?a5Cvm`tvXJ+IR)?fVl=yVv`$gYNsaPhAF~!m_4rZTNIG=U}Y?f$afZos}G& zTJ{!X_n*qpO7zi`pYzOaj8Wwi8}@@C>5+UGq}qOhXo#+S$R#;chQ&iU@P!a3360dw zGY@z!phR_)zA_oWi>^>{oM?i>0wqa~R3{=~Bnzg!VvT0?Vf%{fGDXVYm5sut=2j~4 zm%Vu=(-R`iBxuC69{HC1P2%GOk(lG}6%HzNG7^{$h1GbAEPq-{!}_!jP~mesU<8IC zJB}H&=IA6-Q48BhHc+zC!$u0qdmqI(><^0j*~gCeRb#_rJfB-$$F)Vxl?9@MpL*Xl zVvSTvifCbm8z)GMQS?!LCha**apwiKra0Z1<8qpAPJV zSoy6OW1Ln**Bq6hcN;~?-f!MPBtlwqZwseLLZ?fD#hg0hC?<`J%4H6Polr}r$3@}~ zG+IW=9}!E1#N`4YLXts5hmF1C`FQ)th>Xzm`;wmv=qQ~%L0QBAmQhF?1)IbNf=Y{j#$;8;b$-WQ)+R(EC14e|IEV#It) z+Qb4h+0|pTRy*Ju^F8n(<~yHOI?qo46YcFw++!<5>7Gpe$c~_JY)qOw2-%-;VadOF z@Y}JDlqh$)7_pJV*qcn})L2Yi<&9cYCLRws;j%MxH4PFyPKI=_xJ5>MEdcX@mgHet zpsCveEQ{CTWiqVUGrE5#nqmi-G6dz)U}QKPJyG`*8ws(9ZC>#zl!~`XIc~J3wMDif zFjgNHIjEnsOY9dm0PTXs_6NZ^&mg zFk21UQxgc7TwK23Mvv1Scwn2F1QuE!@A~DfSZW6a0#Y=rx zKsM=*29+2`{sJ|XPD(@ugqp0c5ug=%y5N>y08T|6oE}iyA|7%5LXB5Rixl0qFz{zE zttLqGC-{82%s@3x{A#(STpTdOdNExPgEM}!+B#9;H()kNJ4VR!p<$$ZED+4Jr$-uF z{3h)&PdBRd-Szw7T5go;GdZzzrv63Razwtc9uh#4o6Ob`w%}ntY5uSyxr3IJ9fG7X z86bbBJ^!JZmOX-G)4va_{~4f=1M+XY2WVT_>Ol~9Bm(4JdJEVx!wrOa#DUW$KW*Rj z{RW5QZ0GG-;s)Di@stwlY?~nnu|`8&G{_KXY;DmH0b{gk3_FBfq{--Ro@Roo&O<{i z$xn+jwq-KIhyU}lWLUbawMe4^vBnmY_F7A{%+y(fj$t|X#C(|A*vfL+ihiD@vqVjCpJ zn)PqfY;F)=@Zzyc#ly#Hks|O>1)Bd6WCNT0-d+>CwRe_AAzKqDhy8x@1&v0)-l!ZI zd-CmX^1vE>-2$%cx1s2yaz*yNEwnM7TuY@6Jed!%utA?-dhP8r!o>)8S7hso>U;3qj(9e8`Z$x5-%kAa%SC`W9wdIw5JFn1Flh;gy)*Z;4BBCx= zg&y2udLMOdvJXzdDDLG}wl?y5z)i!oli7iYn6T0^LZG>SG# zkO;}0Yd0bVVy3i}e>$xXndZ3jh05-B-}C2ZuL?Y{`{-2-5~PE4J1}+5Yig-l4B;G* zLI@jgK<__WDajg**;hq8@Zn<%s(T!n>2u%&ycXT^9U!*yR)`o`r z=SRb=H3HicPAU{<<+9=XsBm{hGA57~H}J2+H*j8&i}Gbf4`nSCKs*QXT892W>j6$n zou65V6NZPf7EoXFIPS>Qc;EF$WH#5T7$ky{y%4>|JW+s`thEy3 z3rKKIDH%(;S2XOt=`tBS<Z|9k6eyOCKvKUhkW23&f6o zB0yV$^M9DReGvXntSkNx48v&}Xloy8V?2({{?+dO1@BK32vZd0GaB74O4Nw~zW>eQwfPy+GsmZnRTUgMr*SbZ@T#aUEgZ%Tne "Assets", "Assets" -> { - { "AIAssistant" , "AIAssistant" }, - { "DisplayFunctions", "DisplayFunctions.wxf" }, - { "Icons" , "Icons.wxf" }, - { "SandboxMessages" , "SandboxMessages.wl" }, - { "Tokenizers" , "Tokenizers" } + { "AIAssistant" , "AIAssistant" }, + { "DisplayFunctions" , "DisplayFunctions.wxf" }, + { "Icons" , "Icons.wxf" }, + { "SandboxMessages" , "SandboxMessages.wl" }, + { "TemplateBoxOptions", "TemplateBoxOptions.wxf" }, + { "Tokenizers" , "Tokenizers" } } }, { "LLMConfiguration", diff --git a/Source/Chatbook/CommonSymbols.wl b/Source/Chatbook/CommonSymbols.wl index 51bfcdd6..dce95a9d 100644 --- a/Source/Chatbook/CommonSymbols.wl +++ b/Source/Chatbook/CommonSymbols.wl @@ -81,6 +81,7 @@ BeginPackage[ "Wolfram`Chatbook`Common`" ]; `$simpleToolMethod; `$statelessProgressIndicator; `$suppressButtonAppearance; +`$templateBoxOptionsCache; `$timingLog; `$tinyHashLength; `$tokenBudget; diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 85e881d6..d0861d6a 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -216,7 +216,6 @@ $templateBoxRules = <| "LUVColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], "RGBColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], "XYZColorSwatchTemplate" -> inputFormString @* Lookup[ "color" ], - "Tabular" -> makeExpressionString, "PlatformDynamic" -> First, "URLArgument" -> First |>; @@ -237,7 +236,8 @@ $graphicsHeads = Alternatives[ $$graphicsBox = Alternatives[ $graphicsHeads[ ___ ], TemplateBox[ _, "Legended", ___ ], - DynamicBox[ _FEPrivate`ImportImage, ___ ] + DynamicBox[ _FEPrivate`ImportImage, ___ ], + DynamicBox[ _Charting`iInteractiveTradingChart, ___ ] ]; (* Serialize the first argument of these and ignore the rest *) @@ -258,9 +258,19 @@ $stringStripHeads = Alternatives[ ]; (* Boxes that should be ignored during serialization *) -$ignoredBoxPatterns = Alternatives[ - _PaneSelectorBox, - StyleBox[ _GraphicsBox, ___, "NewInGraphic", ___ ] +$$squarePlusIcon = (FEPrivate`FrontEndResource|FrontEndResource)[ + "FEBitmaps", + "SquarePlusIconSmall"|"SquarePlusIconMedium" +]; + +$$ifWhich = (If | Which | FEPrivate`If | FEPrivate`Which); + +$ignoredBoxPatterns = With[ { icon = $$squarePlusIcon, iw = $$ifWhich }, + Alternatives[ + _PaneSelectorBox, + StyleBox[ _GraphicsBox, ___, "NewInGraphic", ___ ], + DynamicBox[ iw[ ___, icon | StyleBox[ icon, ___ ], ___ ], ___ ] + ] ]; (* CellEvaluationLanguage appears to not be System` at startup, so use this for matching as a precaution *) @@ -643,6 +653,9 @@ cellToString[ cell: Cell[ _BoxData, Except[ $$chatInputStyle|$$chatOutputStyle ] $multimodalImages && Count[ cell, $$graphicsBox, Infinity ] > $maxMarkdownBoxes := toMarkdownImageBox @ cell; +cellToString[ cell: Cell[ _, "Picture", ___ ] ] /; $multimodalImages := + toMarkdownImageBox @ cell; + cellToString[ other_ ] := cellToString0 @ other; @@ -803,6 +816,7 @@ $globalStringReplacements = { "```\n```" -> "```\n\n```", "\n\n\t\n" -> "\n", "``$$" ~~ math__ ~~ "$$``" :> "$$"<>math<>"$$", + Shortest[ "$$" ~~ a__ ~~ "$$$$" ~~ b__ ~~ "$$" ] :> "$$"<>a<>" "<>b<>"$$", link: ("``[" ~~ Except[ "]" ].. ~~ "](" ~~ Except[ ")" ].. ~~ ")``") :> StringTrim[ link, "``" ] }; @@ -925,19 +939,9 @@ fasterCellToString0[ string_String ] /; StringContainsQ[ string, $$longNameChara fasterCellToString0 @ StringDelete[ StringReplace[ string, $longNameCharacters ], $$invisibleCharacter ]; (* StandardForm strings *) -fasterCellToString0[ s_String ] /; StringContainsQ[ - s, - a: ("\!\(" ~~ Except[ "\)" ] .. ~~ "\)") /; StringLength @ a < $maxStandardFormStringLength -] := - Module[ { split }, - split = StringSplit[ - s, - "\!\(" ~~ b: Except[ "\)" ].. ~~ "\)" :> - usingFrontEnd @ MathLink`CallFrontEnd @ FrontEnd`ReparseBoxStructurePacket[ "\!\("<>b<>"\)" ] - ]; - - StringJoin[ fasterCellToString0 /@ split ] /; ! MatchQ[ split, { s } ] - ]; +fasterCellToString0[ s_String ] /; + StringLength @ s < $maxStandardFormStringLength && StringContainsQ[ s, "\!\(" ~~ __ ~~ "\)" ] := + serializeStandardFormString @ s; fasterCellToString0[ a_String ] /; StringLength @ a < $maxStandardFormStringLength && StringMatchQ[ a, "\""~~___~~("\\!"|"\!")~~___~~"\"" ] := @@ -948,10 +952,6 @@ fasterCellToString0[ a_String ] /; ] /; FreeQ[ res, s_String /; StringContainsQ[ s, ("\\!"|"\!") ] ] ]; -fasterCellToString0[ a_String ] /; - StringLength @ a < $maxStandardFormStringLength && StringContainsQ[ a, ("\\!"|"\!") ] := - With[ { res = stringToBoxes @ a }, res /; FreeQ[ res, s_String /; StringContainsQ[ s, ("\\!"|"\!") ] ] ]; - (* Other strings *) fasterCellToString0[ a_String ] := ToString[ @@ -965,6 +965,39 @@ fasterCellToString0[ a_String ] := fasterCellToString0[ a: { ___String } ] := StringJoin[ fasterCellToString0 /@ a ]; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*serializeStandardFormString*) +serializeStandardFormString // beginDefinition; + +serializeStandardFormString[ str_String ] := Enclose[ + Catch @ Module[ { split, strings, result }, + split = StringSplit[ + str, + { + Shortest[ "\!\(\*" ~~ boxes__ ~~ "\)" ] :> fromBoxString @ boxes, + Shortest[ "\!\(" ~~ raw__ ~~ "\)" ] :> StringReplace[ raw, { "\/" -> "/", "\^" -> "^" } ] + } + ]; + If[ MatchQ[ split, { str } ], serializeStandardFormString[ str ] = Throw @ str ]; + strings = ConfirmMatch[ fasterCellToString0 /@ split, { ___String }, "Strings" ]; + result = StringJoin @ strings; + serializeStandardFormString[ str ] = result + ], + throwInternalFailure +]; + +serializeStandardFormString // endDefinition; + +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*fromBoxString*) +fromBoxString // beginDefinition; +fromBoxString[ str_String ] := fromBoxString[ str, Quiet @ ToExpression[ str, InputForm, HoldComplete ] ]; +fromBoxString[ _, HoldComplete[ expr_ ] ] := expr; +fromBoxString[ str_String, _ ] := Verbatim @ ToString[ "\!\(\*" <> str <> "\)" ]; +fromBoxString // endDefinition; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Current Selection*) @@ -1111,7 +1144,8 @@ fasterCellToString0[ box: $$graphicsBox ] := ) ]; - +fasterCellToString0[ System`LabeledGraphicsBox[ gfx_, label_, ___ ] ] := + "Labeled[" <> fasterCellToString0 @ gfx <> ", " <> fasterCellToString0 @ label <> "]"; $graphicsBoxStringReplacements = { a: DigitCharacter ~~ "." ~~ b: Repeated[ DigitCharacter, { 4, Infinity } ] :> a <> "." <> StringTake[ b, 3 ], @@ -1329,17 +1363,29 @@ fasterCellToString0[ TemplateBox[ { code_, language_ }, "ChatCodeBlockTemplate", (*Template Boxes*) (* Messages *) -fasterCellToString0[ TemplateBox[ args: { sym_String, tag_String, str_String, ___ }, "MessageTemplate", ___ ] ] := ( - needsBasePrompt[ "WolframLanguage" ]; - sowMessageData @ args; (* Look for stack trace data *) - sym <> "::" <> tag <> ": "<> fasterCellToString0 @ str -); +fasterCellToString0[ TemplateBox[ args: { sym_String, tag_String, str0_String, ___ }, "MessageTemplate", ___ ] ] := + Module[ { str }, + str = If[ StringMatchQ[ str0, "\""~~__~~"\"" ], + Replace[ Quiet @ ToExpression[ str0, InputForm, HoldComplete ], HoldComplete[ s_String ] :> s ], + str0 + ]; + If[ ! StringQ @ str, str = str0 ]; + needsBasePrompt[ "WolframLanguage" ]; + sowMessageData @ args; (* Look for stack trace data *) + sym <> "::" <> tag <> ": "<> Block[ { $escapeMarkdown = False }, fasterCellToString0 @ str ] + ]; -fasterCellToString0[ TemplateBox[ args: { _, _, str_String, ___ }, "MessageTemplate", ___ ] ] := ( - needsBasePrompt[ "WolframLanguage" ]; - sowMessageData @ args; (* Look for stack trace data *) - fasterCellToString0 @ str -); +fasterCellToString0[ TemplateBox[ args: { _, _, str0_String, ___ }, "MessageTemplate", ___ ] ] := + Module[ { str }, + str = If[ StringMatchQ[ str0, "\""~~__~~"\"" ], + Replace[ Quiet @ ToExpression[ str0, InputForm, HoldComplete ], HoldComplete[ s_String ] :> s ], + str0 + ]; + If[ ! StringQ @ str, str = str0 ]; + needsBasePrompt[ "WolframLanguage" ]; + sowMessageData @ args; (* Look for stack trace data *) + Block[ { $escapeMarkdown = False }, fasterCellToString0 @ str ] + ]; (* Percent References *) fasterCellToString0[ TemplateBox[ KeyValuePattern[ "OutNumber" -> n_Integer ], "PercentRef", ___ ] ] := @@ -1381,7 +1427,7 @@ fasterCellToString0[ TemplateBox[ { _, _, _, _, label_String, _ }, "NotebookObje (* Entity *) $$entityBoxType = "Entity"|"EntityClass"|"EntityProperty"|"EntityType"; fasterCellToString0[ TemplateBox[ { _, box_, ___ }, $$entityBoxType, ___ ] ] := fasterCellToString0 @ box; -fasterCellToString0[ TemplateBox[ _, "InertEntity", ___ ] ] := "\[LeftSkeleton]formatted entity\[RightSkeleton]"; +fasterCellToString0[ TemplateBox[ _, "InertEntity", ___ ] ] := "Entity[...]"; (* Quantities *) $$quantityBoxType = "QuantityPrefixUnit"|"QuantityPrefix"|"Quantity"|"QuantityPostfix"; @@ -1527,6 +1573,24 @@ fasterCellToString0[ TemplateBox[ KeyValuePattern[ "input" -> input_ ], "Chatboo fasterCellToString0[ TemplateBox[ keys: { __String }, "Key0"|"Key1"|"Key2", ___ ] ] := StringRiffle[ keys, "+" ]; +(* Tabular *) +fasterCellToString0[ box: TemplateBox[ _, "Tabular", ___ ] ] := + With[ { str = makeExpressionString @ box }, + str /; StringQ @ str + ]; + +fasterCellToString0[ TemplateBox[ KeyValuePattern[ "Main" -> main_ ], "Tabular"|"TabularRef", ___ ] ] := + fasterCellToString0 @ main; + +fasterCellToString0[ TemplateBox[ + KeyValuePattern[ "Snapshot" -> tabular_System`Tabular ], + "TabularReferenceWrapper", + ___ +] ] := inputFormString @ Unevaluated @ tabular; + +fasterCellToString0[ TableViewBox[ tabular_System`Tabular, ___ ] ] := + inputFormString @ Unevaluated @ tabular; + (* Other *) fasterCellToString0[ box: TemplateBox[ args_, name_String, ___ ] ] /; $templateBoxRules @ name === makeExpressionString := @@ -1623,6 +1687,9 @@ fasterCellToString0[ FractionBox[ a_, b_, OptionsPattern[ ] ] ] := (needsBasePrompt[ "Math" ]; "(" <> fasterCellToString0 @ a <> "/" <> fasterCellToString0 @ b <> ")"); (* RadicalBox *) +fasterCellToString0[ RadicalBox[ a_, b_, ___, SurdForm -> True, ___ ] ] := + (needsBasePrompt[ "Math" ]; "Surd[" <> fasterCellToString0 @ a <> ", " <> fasterCellToString0 @ b <> "]"); +s fasterCellToString0[ RadicalBox[ a_, b_, OptionsPattern[ ] ] ] := (needsBasePrompt[ "Math" ]; fasterCellToString0 @ a <> "^(1/(" <> fasterCellToString0 @ b <> "))"); @@ -1734,11 +1801,36 @@ outputSizeLimitString // endDefinition; (* ::Subsubsubsection::Closed:: *) (*Iconized Expressions*) fasterCellToString0[ - InterpretationBox[ DynamicModuleBox[ { ___ }, iconized: TemplateBox[ _, "IconizedObject", ___ ] ], ___ ] -] := fasterCellToString0 @ iconized; + InterpretationBox[ DynamicModuleBox[ { ___ }, iconized: TemplateBox[ _, "IconizedObject", ___ ] ], expr_, ___ ] +] := serializeIconizedObject[ iconized, HoldComplete @ expr ]; -fasterCellToString0[ TemplateBox[ { _, label_, ___ }, "IconizedObject", ___ ] ] := - "IconizedObject[\[LeftSkeleton]" <> StringTrim[ fasterCellToString0 @ label, "\"" ] <> "\[RightSkeleton]]"; +fasterCellToString0[ box: TemplateBox[ _, "IconizedObject", ___ ] ] := + serializeIconizedObject[ box, None ]; + +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*serializeIconizedObject*) +serializeIconizedObject // beginDefinition; + +serializeIconizedObject[ + TemplateBox[ { _, (StyleBox|TagBox)[ n_, "IconizedCustomName"|"IconizedName", ___ ], ___ }, "IconizedObject" ], + _ +] := + Block[ { $showStringCharacters = False }, + "IconizedObject[\[LeftSkeleton]" <> fasterCellToString0 @ n <> "\[RightSkeleton]]" + ]; + +serializeIconizedObject[ TemplateBox[ { _, "ListIcon", ___ }, "IconizedObject", ___ ], _ ] := "{...}"; +serializeIconizedObject[ TemplateBox[ { _, "AssociationIcon", ___ }, "IconizedObject", ___ ], _ ] := "<|...|>"; +serializeIconizedObject[ TemplateBox[ { _, "StringIcon", ___ }, "IconizedObject", ___ ], _ ] := "\"...\""; +serializeIconizedObject[ TemplateBox[ { _, "SequenceIcon", ___ }, "IconizedObject", ___ ], _ ] := "..."; + +serializeIconizedObject[ TemplateBox[ _, "IconizedObject", ___ ], HoldComplete[ (s_Symbol)[ ___ ] ] ] := + ToString @ Unevaluated @ s <> "[...]"; + +serializeIconizedObject[ TemplateBox[ _, "IconizedObject", ___ ], _ ] := "..."; + +serializeIconizedObject // endDefinition; (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) @@ -2254,10 +2346,17 @@ fasterCellToString0[ DynamicBox[ ToBoxes[ FEPrivate`FrontEndResource[ "ChatbookS (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*Other FE Resources*) +fasterCellToString0[ DynamicBox[ (FEPrivate`FrontEndResource|FrontEndResource)[ "FEBitmaps", "IconizeEllipsis" ] ] ] := + "..."; + fasterCellToString0[ DynamicBox[ (FEPrivate`FrontEndResource|FrontEndResource)[ type: "FEBitmaps"|"WABitmaps", name_String ], ___ ] ] := fasterCellToString0 @ feResource[ type, name ]; +fasterCellToString0[ + DynamicBox[ FEPrivate`FrontEndResource[ "FEExpressions", "ChoiceButtonsOrder" ][ buttons: { ___ } ], ___ ] +] := fasterCellToString0 @ RowBox @ Riffle[ buttons, " " ]; + fasterCellToString0[ DynamicBox[ FEPrivate`FrontEndResourceString[ "okButtonText" ], ___ ] ] := "OK"; @@ -2448,7 +2547,7 @@ getTemplateBoxFunction // endDefinition; getTemplateBoxFunction0 // beginDefinition; getTemplateBoxFunction0[ name_String ] := - getTemplateBoxFunction0[ name, usingFrontEnd @ CurrentValue @ { StyleDefinitions, name, TemplateBoxOptions } ]; + getTemplateBoxFunction0[ name, getTemplateBoxOptions @ name ]; getTemplateBoxFunction0[ name_, @@ -2473,6 +2572,33 @@ getTemplateBoxFunction0 // endDefinition; $templateBoxCache = <| |>; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*getTemplateBoxOptions*) +getTemplateBoxOptions // beginDefinition; + +getTemplateBoxOptions[ id_String ] /; KeyExistsQ[ $templateBoxOptionsCache, id ] := + $templateBoxOptionsCache[ id ]; + +getTemplateBoxOptions[ id_String ] := ( + $templateBoxOptionsCache; + $templateBoxOptionsCache[ id ] = usingFrontEnd @ CurrentValue @ { StyleDefinitions, id, TemplateBoxOptions } +); + +getTemplateBoxOptions // endDefinition; + + +$templateBoxOptionsCache := + Module[ { file, data }, + file = $thisPaclet[ "AssetLocation", "TemplateBoxOptions" ]; + data = If[ FileExistsQ @ file, Developer`ReadWXFFile @ file, <| |> ]; + If[ ! AssociationQ @ data, data = <| |> ]; + If[ TrueQ @ Wolfram`ChatbookInternal`$BuildingMX, + data, + $templateBoxOptionsCache = data + ] + ]; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsubsection::Closed:: *) (*applyTemplateBoxDisplayFunction*) @@ -2529,11 +2655,12 @@ fasterCellToString0[ HoldPattern @ DocuTools`Private`StylizeTemplatePart[ box_ ] $$rawSymbol = Alternatives[ None, Automatic, StateSpaceModel, True, False, $Failed ]; fasterCellToString0[ sym: $$rawSymbol ] := ToString @ sym; fasterCellToString0[ n_? NumberQ ] := ToString @ n; +fasterCellToString0[ HoldPattern @ BoxData[ ] ] := ""; (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*FE Failure Modes*) -e: fasterCellToString0[ (DefaultStyleDefinitions -> "Default.nb") | Function[ _ ] ] := +e: fasterCellToString0[ (DefaultStyleDefinitions -> "Default.nb") | Function[ _ ] | (ScreenRectangle -> _) ] := throwInternalFailure[ e, "BadFrontEndState" ]; (* ::**************************************************************************************************************:: *) @@ -2625,9 +2752,6 @@ makeExpressionString[ box_, $Failed ] := makeExpressionString[ box, expr ] /; ! FailureQ @ expr ]; -makeExpressionString[ TemplateBox[ _, "Tabular", ___ ], _ ] := - "Tabular[...]"; - makeExpressionString[ box_, _ ] := makeExpressionString[ box ] = $Failed; From f7d1460a91dd1dca8145cf86b95caa06f5579d33 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 13:07:57 -0500 Subject: [PATCH 17/25] Combine adjacent hyperlinks if they point to the same URI --- Source/Chatbook/Serialization.wl | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index d0861d6a..ac2a1d05 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -1552,6 +1552,17 @@ fasterCellToString0[ TemplateBox[ { label_, { url_String | URL[ url_String ], _ "[" <> fasterCellToString0 @ label <> "](" <> url <> ")" ]; +fasterCellToString0[ { a___, StyleBox[ ButtonBox[ label_, opts___ ], styles___ ], b___ } ] := + fasterCellToString0 @ { a, ButtonBox[ StyleBox[ label, styles ], opts ], b }; + +fasterCellToString0[ { + a___, + btn1: ButtonBox[ label1_, opts1___ ], + btn2: ButtonBox[ label2_, opts2___ ], + b___ +} /; sameURLQ[ btn1, btn2 ] ] := + fasterCellToString0 @ { a, ButtonBox[ RowBox @ { label1, label2 }, opts1 ], b }; + (* TeXAssistantTemplate *) fasterCellToString0[ TemplateBox[ KeyValuePattern[ "input" -> string_ ], "TeXAssistantTemplate", ___ ] ] := ( needsBasePrompt[ "Math" ]; @@ -1606,6 +1617,38 @@ fasterCellToString0[ box: TemplateBox[ args_, name_String, ___ ] ] := fasterCellToString0[ OverlayBox[ { a_, ___ }, ___ ] ] := fasterCellToString0 @ a; +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*sameURLQ*) +sameURLQ // beginDefinition; + +sameURLQ[ btn1_, btn2_ ] := + Catch @ Module[ { url1, url2 }, + url1 = getHyperlinkURL @ btn1; + If[ ! StringQ @ url1, Throw @ False ]; + url2 = getHyperlinkURL @ btn2; + If[ ! StringQ @ url2, Throw @ False ]; + url1 === url2 + ]; + +sameURLQ // endDefinition; + +(* ::**************************************************************************************************************:: *) +(* ::Subsubsubsubsection::Closed:: *) +(*getHyperlinkURL*) +getHyperlinkURL // beginDefinition; + +getHyperlinkURL[ URL[ uri_String ] ] := uri; +getHyperlinkURL[ uri_String ] := uri; +getHyperlinkURL[ { uri_, _ } ] := getHyperlinkURL @ uri; + +getHyperlinkURL[ ButtonBox[ + _, + OrderlessPatternSequence[ BaseStyle -> "Link"|"Hyperlink", ButtonData -> uri_, ___ ] +] ] := getHyperlinkURL @ uri; + +getHyperlinkURL // endDefinition; + (* ::**************************************************************************************************************:: *) (* ::Subsubsubsection::Closed:: *) (*TeX*) From 2c6e0379e8bddc140efc66f6fe8dd8da6d44837b Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 13:08:42 -0500 Subject: [PATCH 18/25] More improvements for documentation markdown --- Source/Chatbook/Serialization.wl | 43 +++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index ac2a1d05..c949f01e 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -233,11 +233,17 @@ $graphicsHeads = Alternatives[ Graphics3DBox ]; -$$graphicsBox = Alternatives[ +$$ignoredImportImage = Alternatives[ + FrontEnd`FileName[ { "Documentation", "FooterIcons" }, _ ] +]; + +$$graphicsBox = With[ { ignored = $$ignoredImportImage }, + Alternatives[ $graphicsHeads[ ___ ], TemplateBox[ _, "Legended", ___ ], - DynamicBox[ _FEPrivate`ImportImage, ___ ], + DynamicBox[ FEPrivate`ImportImage @ Except @ ignored, ___ ], DynamicBox[ _Charting`iInteractiveTradingChart, ___ ] + ] ]; (* Serialize the first argument of these and ignore the rest *) @@ -265,11 +271,12 @@ $$squarePlusIcon = (FEPrivate`FrontEndResource|FrontEndResource)[ $$ifWhich = (If | Which | FEPrivate`If | FEPrivate`Which); -$ignoredBoxPatterns = With[ { icon = $$squarePlusIcon, iw = $$ifWhich }, +$ignoredBoxPatterns = With[ { icon = $$squarePlusIcon, iw = $$ifWhich, ignored = $$ignoredImportImage }, Alternatives[ _PaneSelectorBox, StyleBox[ _GraphicsBox, ___, "NewInGraphic", ___ ], - DynamicBox[ iw[ ___, icon | StyleBox[ icon, ___ ], ___ ], ___ ] + DynamicBox[ iw[ ___, icon | StyleBox[ icon, ___ ], ___ ], ___ ], + DynamicBox[ FEPrivate`ImportImage @ ignored, ___ ] ] ]; @@ -2212,7 +2219,7 @@ seeAlsoSection // endDefinition; relatedLinksSection // beginDefinition; relatedLinksSection[ grid_, style_, header0_String ] := Enclose[ - Module[ { header, items }, + Catch @ Module[ { header, items, string }, header = ConfirmBy[ FirstCase[ @@ -2232,7 +2239,31 @@ relatedLinksSection[ grid_, style_, header0_String ] := Enclose[ Infinity ]; - If[ items === { }, "", StringRiffle[ Flatten @ { header<>"\n", items }, "\n" ] ] + If[ items === { }, Throw[ "" ] ]; + + string = StringRiffle[ Flatten @ { header<>"\n", items }, "\n" ]; + + StringReplace[ + string, + { + Shortest[ + StringExpression[ + "[", + label1: Except[ "\n" ]..., + "](", + url1: Except[ ")" ].., + ")\n* [", + label2: Except[ "\n" ]..., + "](", + url2: Except[ ")" ].., + ")" + ] /; url1 === url2 + ] :> "["<>label1<>label2<>"]("<>url1<>")", + + "[``" ~~ name: Repeated[ "$"|LetterCharacter|DigitCharacter, { 1, 80 } ] ~~ "``](paclet:" :> + "["<>name<>"](paclet:" + } + ] ], throwInternalFailure ]; From f28f188756c279d73351bdb0818c49ceb760de63 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 13:09:12 -0500 Subject: [PATCH 19/25] Never serialize entire input cells as a single markdown image box --- Source/Chatbook/Serialization.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index c949f01e..303ec564 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -656,7 +656,7 @@ cellToString[ cell: Cell[ _TextData|_String, ___ ] ] := Block[ { $escapeMarkdown cellToString[ cell_ ] := Block[ { $escapeMarkdown = False }, cellToString0 @ cell ]; (* Rasterize entire cell if it contains enough graphics boxes *) -cellToString[ cell: Cell[ _BoxData, Except[ $$chatInputStyle|$$chatOutputStyle ], ___ ] ] /; +cellToString[ cell: Cell[ _BoxData, Except[ "Input"|"Code"|$$chatInputStyle|$$chatOutputStyle ], ___ ] ] /; $multimodalImages && Count[ cell, $$graphicsBox, Infinity ] > $maxMarkdownBoxes := toMarkdownImageBox @ cell; From b6c78b63cd1ef320c4cac12515349c42fec1ec7e Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 13:09:33 -0500 Subject: [PATCH 20/25] More markdown post processing rules --- Source/Chatbook/Serialization.wl | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 303ec564..f2cde733 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -239,10 +239,10 @@ $$ignoredImportImage = Alternatives[ $$graphicsBox = With[ { ignored = $$ignoredImportImage }, Alternatives[ - $graphicsHeads[ ___ ], - TemplateBox[ _, "Legended", ___ ], + $graphicsHeads[ ___ ], + TemplateBox[ _, "Legended", ___ ], DynamicBox[ FEPrivate`ImportImage @ Except @ ignored, ___ ], - DynamicBox[ _Charting`iInteractiveTradingChart, ___ ] + DynamicBox[ _Charting`iInteractiveTradingChart, ___ ] ] ]; @@ -700,13 +700,15 @@ cellsToString[ { a___, b: Cell[ _, "UsageInputs", ___ ], c: Cell[ _, "UsageDescr cellsToString[ cells_List ] := With[ { strings = cellToString /@ cells }, StringReplace[ - StringRiffle[ Select[ strings, StringQ ], "\n\n" ], - { - "```wl"~~WhitespaceCharacter...~~"```" -> "", - "```\n\n```wl" -> "", - "```\n\n```" -> "", - "\n\n\n\n" -> "\n\n" - } + StringReplace[ + StringRiffle[ Select[ strings, StringQ ], "\n\n" ], + { + "```wl"~~WhitespaceCharacter...~~"```" -> "", + "```\n\n```wl" -> "", + "```\n\n```" -> "" + } + ], + "\n\n" ~~ Longest[ "\n".. ] -> "\n\n" ] ]; @@ -819,6 +821,8 @@ $globalStringReplacements = { "\[RightAssociation]" -> "|>", "\[RightSkeleton]" -> "\:00BB", "\[Rule]" -> "->", + "\[LeftDoubleBracket]" -> "[[", + "\[RightDoubleBracket]" -> "]]", "\n\n" ~~ Longest[ "\n".. ] -> "\n\n", "```\n```" -> "```\n\n```", "\n\n\t\n" -> "\n", From 8f3667f60116c79fad0651daeef8565fecb4dbad Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 13:21:37 -0500 Subject: [PATCH 21/25] Bugfix: Fixed an internal error during serialization of some button boxes --- Source/Chatbook/Serialization.wl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index f2cde733..189c6412 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -1658,6 +1658,9 @@ getHyperlinkURL[ ButtonBox[ OrderlessPatternSequence[ BaseStyle -> "Link"|"Hyperlink", ButtonData -> uri_, ___ ] ] ] := getHyperlinkURL @ uri; +getHyperlinkURL[ _ ] := + Missing[ "NotAvailable" ]; + getHyperlinkURL // endDefinition; (* ::**************************************************************************************************************:: *) From c0bdbc287b4db8f5466099d8b2995524b35cae4a Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Sun, 19 Jan 2025 21:40:01 -0500 Subject: [PATCH 22/25] WL versioned vector databases for documentation --- Source/Chatbook/Handlers.wl | 2 ++ .../PromptGenerators/RelatedDocumentation.wl | 15 ++++++++++----- .../Chatbook/PromptGenerators/VectorDatabases.wl | 16 +++++++++------- Source/Chatbook/Serialization.wl | 9 +++------ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Source/Chatbook/Handlers.wl b/Source/Chatbook/Handlers.wl index 17e6bc70..7f6cb3bc 100644 --- a/Source/Chatbook/Handlers.wl +++ b/Source/Chatbook/Handlers.wl @@ -67,6 +67,7 @@ applyHandlerFunction[ settings_Association, name_String, args0_ ] := Enclose[ args = ConfirmBy[ <| "EventName" -> name, + (* FIXME: Add settings at start of evaluation instead of each function call *) "ChatNotebookSettings" -> KeyDrop[ settings, $settingsDroppedKeys ], args0 |>, @@ -178,6 +179,7 @@ applyProcessingFunction[ settings_Association, name_String, args_HoldComplete, p addProcessingArguments[ name, <| + (* FIXME: Add settings at start of evaluation instead of each function call *) "ChatNotebookSettings" -> KeyDrop[ settings, $settingsDroppedKeys ], "DefaultProcessingFunction" -> default, params diff --git a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl index b81fe085..99b36f26 100644 --- a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl +++ b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl @@ -10,11 +10,11 @@ Needs[ "Wolfram`Chatbook`PromptGenerators`Common`" ]; (* ::**************************************************************************************************************:: *) (* ::Section::Closed:: *) (*Configuration*) -$snippetType = "Text"; -$documentationSnippetVersion = "14-1-0-10549042"; -$baseURL = "https://www.wolframcloud.com/obj/wolframai-content/DocumentationSnippets"; -$documentationSnippetBaseURL = URLBuild @ { $baseURL, $documentationSnippetVersion, $snippetType }; -$resourceSnippetBaseURL = URLBuild @ { $baseURL, "Resources", $snippetType }; +$snippetType = "Text"; +$documentationSnippetVersion := $snippetVersion; +$baseURL = "https://www.wolframcloud.com/obj/wolframai-content/DocumentationSnippets"; +$documentationSnippetBaseURL = URLBuild @ { $baseURL, $documentationSnippetVersion, $snippetType }; +$resourceSnippetBaseURL = URLBuild @ { $baseURL, "Resources", $snippetType }; $documentationSnippetsCacheDirectory := $documentationSnippetsCacheDirectory = ChatbookFilesDirectory @ { "DocumentationSnippets", "Documentation", $documentationSnippetVersion }; @@ -46,6 +46,11 @@ $unfilteredItemsPerSource = 10; $filteringLLMConfig = <| "StopTokens" -> { "CasualChat" } |>; +(* ::**************************************************************************************************************:: *) +(* ::Subsection::Closed:: *) +(*$snippetVersion*) +$snippetVersion := $snippetVersion = If[ $VersionNumber >= 14.2, "14.2.0-11168610", "14-1-0-10549042" ]; + (* ::**************************************************************************************************************:: *) (* ::Section::Closed:: *) (*Messages*) diff --git a/Source/Chatbook/PromptGenerators/VectorDatabases.wl b/Source/Chatbook/PromptGenerators/VectorDatabases.wl index 7468e988..e0cccbe7 100644 --- a/Source/Chatbook/PromptGenerators/VectorDatabases.wl +++ b/Source/Chatbook/PromptGenerators/VectorDatabases.wl @@ -15,14 +15,16 @@ HoldComplete[ (* ::**************************************************************************************************************:: *) (* ::Section::Closed:: *) (*Configuration*) -$vectorDatabases = <| - "DataRepositoryURIs" -> <| "Version" -> "1.0.0", "Bias" -> 1.0, "SnippetFunction" -> getSnippets |>, - "DocumentationURIs" -> <| "Version" -> "1.3.0", "Bias" -> 0.0, "SnippetFunction" -> getSnippets |>, - "FunctionRepositoryURIs" -> <| "Version" -> "1.0.0", "Bias" -> 1.0, "SnippetFunction" -> getSnippets |>, - "WolframAlphaQueries" -> <| "Version" -> "1.3.0", "Bias" -> 0.0, "SnippetFunction" -> Identity |> +$vectorDatabases := $vectorDatabases = <| + "DataRepositoryURIs" -> <| "Version" -> "1.0.0" , "Bias" -> 1.0, "SnippetFunction" -> getSnippets |>, + "DocumentationURIs" -> <| "Version" -> $docVersion, "Bias" -> 0.0, "SnippetFunction" -> getSnippets |>, + "FunctionRepositoryURIs" -> <| "Version" -> "1.0.0" , "Bias" -> 1.0, "SnippetFunction" -> getSnippets |>, + "WolframAlphaQueries" -> <| "Version" -> "1.3.0" , "Bias" -> 0.0, "SnippetFunction" -> Identity |> |>; -$vectorDBNames = Keys @ $vectorDatabases; +$docVersion := If[ $VersionNumber >= 14.2, "1.4.0", "1.3.0" ]; + +$vectorDBNames := $vectorDBNames = Keys @ $vectorDatabases; $allowDownload = True; $cacheEmbeddings = True; @@ -48,7 +50,7 @@ $maxExtraFiles = 20; (*Remote Content Locations*) $baseVectorDatabasesURL = "https://www.wolframcloud.com/obj/wolframai-content/VectorDatabases"; -$vectorDBDownloadURLs = AssociationMap[ +$vectorDBDownloadURLs := $vectorDBDownloadURLs = AssociationMap[ URLBuild @ { $baseVectorDatabasesURL, #, $vectorDatabases[ #, "Version" ], # <> ".zip" } &, $vectorDBNames ]; diff --git a/Source/Chatbook/Serialization.wl b/Source/Chatbook/Serialization.wl index 189c6412..3ad7273a 100644 --- a/Source/Chatbook/Serialization.wl +++ b/Source/Chatbook/Serialization.wl @@ -13,12 +13,6 @@ Needs[ "Wolfram`Chatbook`" ]; Needs[ "Wolfram`Chatbook`Common`" ]; Needs[ "Wolfram`Chatbook`ErrorUtils`" ]; - -(* FIXME: - Serialize strike-through: - StyleBox[..., FontVariations -> {"StrikeThrough" -> True}] -*) - (* ::**************************************************************************************************************:: *) (* ::Section::Closed:: *) (*Initialization*) @@ -909,6 +903,9 @@ fasterCellToString0[ (h: Cell|StyleBox)[ a__, FontWeight -> Bold|"Bold", b___ ] fasterCellToString0[ (h: Cell|StyleBox)[ a__, FontSlant -> Italic|"Italic", b___ ] ] := "*" <> fasterCellToString0 @ h[ a, b ] <> "*"; +fasterCellToString0[ (h: Cell|StyleBox)[ a__, FontVariations -> { b___, "StrikeThrough" -> True, c___ }, d___ ] ] := + "~~" <> fasterCellToString0 @ h[ a, FontVariations -> { b, c }, d ] <> "~~"; + fasterCellToString0[ (h: Cell|StyleBox)[ a__, ShowStringCharacters -> b: True|False, c___ ] ] := Block[ { $showStringCharacters = b }, fasterCellToString0 @ h[ a, c ] ]; From c4f796524bffc0312bccff0cd334db2bca2ff205 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Tue, 21 Jan 2025 13:12:51 -0500 Subject: [PATCH 23/25] Bugfix: Need to delay evaluation of doc snippet URL so it doesn't get hard-coded into MX file --- Source/Chatbook/PromptGenerators/RelatedDocumentation.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl index 99b36f26..00f1eb8a 100644 --- a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl +++ b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl @@ -13,7 +13,7 @@ Needs[ "Wolfram`Chatbook`PromptGenerators`Common`" ]; $snippetType = "Text"; $documentationSnippetVersion := $snippetVersion; $baseURL = "https://www.wolframcloud.com/obj/wolframai-content/DocumentationSnippets"; -$documentationSnippetBaseURL = URLBuild @ { $baseURL, $documentationSnippetVersion, $snippetType }; +$documentationSnippetBaseURL := URLBuild @ { $baseURL, $documentationSnippetVersion, $snippetType }; $resourceSnippetBaseURL = URLBuild @ { $baseURL, "Resources", $snippetType }; $documentationSnippetsCacheDirectory := $documentationSnippetsCacheDirectory = From 8ca6d19556a0b06698f9e3d1667b1e6b59e34cc8 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Tue, 21 Jan 2025 13:13:23 -0500 Subject: [PATCH 24/25] Bugfix: Fixed format of 14.2 doc version specifier --- Source/Chatbook/PromptGenerators/RelatedDocumentation.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl index 00f1eb8a..9fd31a2b 100644 --- a/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl +++ b/Source/Chatbook/PromptGenerators/RelatedDocumentation.wl @@ -49,7 +49,7 @@ $filteringLLMConfig = <| "StopTokens" -> { "CasualChat" } |>; (* ::**************************************************************************************************************:: *) (* ::Subsection::Closed:: *) (*$snippetVersion*) -$snippetVersion := $snippetVersion = If[ $VersionNumber >= 14.2, "14.2.0-11168610", "14-1-0-10549042" ]; +$snippetVersion := $snippetVersion = If[ $VersionNumber >= 14.2, "14-2-0-11168610", "14-1-0-10549042" ]; (* ::**************************************************************************************************************:: *) (* ::Section::Closed:: *) From ec8e8b525e3da2c0f1c6a4e9c5c2b3d7101b5c60 Mon Sep 17 00:00:00 2001 From: Rick Hennigan Date: Tue, 21 Jan 2025 13:14:24 -0500 Subject: [PATCH 25/25] Increment paclet version --- PacletInfo.wl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PacletInfo.wl b/PacletInfo.wl index e0ceda69..3b6afaa4 100644 --- a/PacletInfo.wl +++ b/PacletInfo.wl @@ -1,7 +1,7 @@ PacletObject[ <| "Name" -> "Wolfram/Chatbook", "PublisherID" -> "Wolfram", - "Version" -> "2.0.20", + "Version" -> "2.1.0", "WolframVersion" -> "14.1+", "Description" -> "Wolfram Notebooks + LLMs", "License" -> "MIT",