From 218159140c7d79ae745e646da721d12331f536f5 Mon Sep 17 00:00:00 2001 From: vegorov-rbx <75688451+vegorov-rbx@users.noreply.github.com> Date: Fri, 14 Jul 2023 11:08:53 -0700 Subject: [PATCH 1/4] Sync to upstream/release/584 (#977) * Added support for async typechecking cancellation using a token passed through frontend options * Added luaC_enumheap for building debug tools that need a graph of Luau heap In our new typechecker: * Errors or now suppressed when checking property lookup of error-suppressing unions In our native code generation (jit): * Fixed unhandled value type in NOT_ANY lowering * Fast-call tag checks will exit to VM on failure, instead of relying on a native fallback * Added vector type to the type information * Eliminated redundant direct jumps across dead blocks * Debugger APIs are now disabled for call frames executing natively * Implemented support for unwind registration on macOS 14 --- Analysis/include/Luau/Cancellation.h | 24 + Analysis/include/Luau/Differ.h | 24 +- Analysis/include/Luau/Error.h | 14 +- Analysis/include/Luau/Frontend.h | 4 + Analysis/include/Luau/InsertionOrderedMap.h | 6 +- Analysis/include/Luau/Module.h | 1 + Analysis/include/Luau/ToString.h | 2 +- Analysis/include/Luau/TypeChecker2.h | 3 +- Analysis/include/Luau/TypeInfer.h | 13 + Analysis/include/Luau/Unifier.h | 3 +- Analysis/src/Clone.cpp | 1 - Analysis/src/Differ.cpp | 209 +++++- Analysis/src/Error.cpp | 8 +- Analysis/src/Frontend.cpp | 50 +- Analysis/src/Module.cpp | 26 +- Analysis/src/Substitution.cpp | 90 +-- Analysis/src/ToString.cpp | 14 +- Analysis/src/TypeChecker2.cpp | 16 +- Analysis/src/TypeInfer.cpp | 23 +- Analysis/src/Unifier.cpp | 1 - Ast/include/Luau/Location.h | 5 - Ast/src/Location.cpp | 8 - Ast/src/TimeTrace.cpp | 10 +- CLI/Reduce.cpp | 3 +- CodeGen/include/Luau/IrBuilder.h | 4 + CodeGen/include/Luau/IrData.h | 9 +- CodeGen/src/CodeBlockUnwind.cpp | 43 +- CodeGen/src/CodeGen.cpp | 12 +- CodeGen/src/CodeGenAssembly.cpp | 3 +- CodeGen/src/CodeGenLower.h | 18 +- CodeGen/src/EmitCommon.h | 4 +- CodeGen/src/EmitCommonX64.cpp | 1 - CodeGen/src/IrBuilder.cpp | 72 +- CodeGen/src/IrDump.cpp | 3 + CodeGen/src/IrLoweringA64.cpp | 101 +-- CodeGen/src/IrLoweringA64.h | 5 + CodeGen/src/IrLoweringX64.cpp | 61 +- CodeGen/src/IrLoweringX64.h | 2 + CodeGen/src/IrTranslateBuiltins.cpp | 232 +++---- CodeGen/src/IrTranslateBuiltins.h | 3 +- CodeGen/src/IrTranslation.cpp | 28 +- CodeGen/src/IrTranslation.h | 2 +- CodeGen/src/OptimizeConstProp.cpp | 11 +- Common/include/Luau/Bytecode.h | 2 +- Compiler/include/Luau/BytecodeBuilder.h | 4 +- Compiler/include/Luau/Compiler.h | 3 + Compiler/include/luacode.h | 3 + Compiler/src/BytecodeBuilder.cpp | 17 +- Compiler/src/Compiler.cpp | 2 +- Compiler/src/Types.cpp | 35 +- Compiler/src/Types.h | 2 +- Sources.cmake | 1 + VM/src/ldebug.cpp | 35 +- VM/src/lfunc.cpp | 6 +- VM/src/lgc.h | 2 + VM/src/lgcdebug.cpp | 226 +++++++ VM/src/lobject.h | 23 +- VM/src/lstate.cpp | 2 - VM/src/lstate.h | 1 - VM/src/lvmload.cpp | 3 +- fuzz/proto.cpp | 15 +- tests/Compiler.test.cpp | 30 +- tests/Conformance.test.cpp | 38 ++ tests/Differ.test.cpp | 686 ++++++++++++++++++++ tests/Module.test.cpp | 28 +- tests/Parser.test.cpp | 12 +- tests/TypeFamily.test.cpp | 3 +- tests/TypeInfer.functions.test.cpp | 2 - tests/TypeInfer.operators.test.cpp | 4 +- tests/TypeInfer.unionTypes.test.cpp | 15 + tests/conformance/native.lua | 9 + 71 files changed, 1854 insertions(+), 527 deletions(-) create mode 100644 Analysis/include/Luau/Cancellation.h diff --git a/Analysis/include/Luau/Cancellation.h b/Analysis/include/Luau/Cancellation.h new file mode 100644 index 00000000..44131863 --- /dev/null +++ b/Analysis/include/Luau/Cancellation.h @@ -0,0 +1,24 @@ +// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details +#pragma once + +#include + +namespace Luau +{ + +struct FrontendCancellationToken +{ + void cancel() + { + cancelled.store(true); + } + + bool requested() + { + return cancelled.load(); + } + + std::atomic cancelled; +}; + +} // namespace Luau diff --git a/Analysis/include/Luau/Differ.h b/Analysis/include/Luau/Differ.h index ad276b4f..da8b6468 100644 --- a/Analysis/include/Luau/Differ.h +++ b/Analysis/include/Luau/Differ.h @@ -21,8 +21,8 @@ struct DiffPathNode Kind kind; // non-null when TableProperty std::optional tableProperty; - // non-null when FunctionArgument, FunctionReturn, Union, or Intersection (i.e. anonymous fields) - std::optional index; + // non-null when FunctionArgument (unless variadic arg), FunctionReturn (unless variadic arg), Union, or Intersection (i.e. anonymous fields) + std::optional index; /** * Do not use for leaf nodes @@ -32,7 +32,7 @@ struct DiffPathNode { } - DiffPathNode(Kind kind, std::optional tableProperty, std::optional index) + DiffPathNode(Kind kind, std::optional tableProperty, std::optional index) : kind(kind) , tableProperty(tableProperty) , index(index) @@ -42,19 +42,35 @@ struct DiffPathNode std::string toString() const; static DiffPathNode constructWithTableProperty(Name tableProperty); + + static DiffPathNode constructWithKindAndIndex(Kind kind, size_t index); + + static DiffPathNode constructWithKind(Kind kind); }; + struct DiffPathNodeLeaf { std::optional ty; std::optional tableProperty; - DiffPathNodeLeaf(std::optional ty, std::optional tableProperty) + std::optional minLength; + bool isVariadic; + DiffPathNodeLeaf(std::optional ty, std::optional tableProperty, std::optional minLength, bool isVariadic) : ty(ty) , tableProperty(tableProperty) + , minLength(minLength) + , isVariadic(isVariadic) { } + static DiffPathNodeLeaf detailsNormal(TypeId ty); + + static DiffPathNodeLeaf detailsTableProperty(TypeId ty, Name tableProperty); + + static DiffPathNodeLeaf detailsLength(int minLength, bool isVariadic); + static DiffPathNodeLeaf nullopts(); }; + struct DiffPath { std::vector path; diff --git a/Analysis/include/Luau/Error.h b/Analysis/include/Luau/Error.h index 858d1b49..13758b37 100644 --- a/Analysis/include/Luau/Error.h +++ b/Analysis/include/Luau/Error.h @@ -357,13 +357,13 @@ struct PackWhereClauseNeeded bool operator==(const PackWhereClauseNeeded& rhs) const; }; -using TypeErrorData = - Variant; +using TypeErrorData = Variant; struct TypeErrorSummary { diff --git a/Analysis/include/Luau/Frontend.h b/Analysis/include/Luau/Frontend.h index 7b1eb207..5804b7a8 100644 --- a/Analysis/include/Luau/Frontend.h +++ b/Analysis/include/Luau/Frontend.h @@ -29,6 +29,7 @@ struct ModuleResolver; struct ParseResult; struct HotComment; struct BuildQueueItem; +struct FrontendCancellationToken; struct LoadDefinitionFileResult { @@ -96,6 +97,8 @@ struct FrontendOptions std::optional randomizeConstraintResolutionSeed; std::optional enabledLintWarnings; + + std::shared_ptr cancellationToken; }; struct CheckResult @@ -191,6 +194,7 @@ private: std::optional finishTime; std::optional instantiationChildLimit; std::optional unifierIterationLimit; + std::shared_ptr cancellationToken; }; ModulePtr check(const SourceModule& sourceModule, Mode mode, std::vector requireCycles, std::optional environmentScope, diff --git a/Analysis/include/Luau/InsertionOrderedMap.h b/Analysis/include/Luau/InsertionOrderedMap.h index 66d6b2ab..2937dcda 100644 --- a/Analysis/include/Luau/InsertionOrderedMap.h +++ b/Analysis/include/Luau/InsertionOrderedMap.h @@ -16,10 +16,10 @@ struct InsertionOrderedMap { static_assert(std::is_trivially_copyable_v, "key must be trivially copyable"); - private: +private: using vec = std::vector>; - public: +public: using iterator = typename vec::iterator; using const_iterator = typename vec::const_iterator; @@ -131,4 +131,4 @@ private: std::unordered_map indices; }; -} +} // namespace Luau diff --git a/Analysis/include/Luau/Module.h b/Analysis/include/Luau/Module.h index a3b9c417..cb761714 100644 --- a/Analysis/include/Luau/Module.h +++ b/Analysis/include/Luau/Module.h @@ -112,6 +112,7 @@ struct Module Mode mode; SourceCode::Type type; bool timeout = false; + bool cancelled = false; TypePackId returnType = nullptr; std::unordered_map exportedTypeBindings; diff --git a/Analysis/include/Luau/ToString.h b/Analysis/include/Luau/ToString.h index dec2c1fc..efe82b12 100644 --- a/Analysis/include/Luau/ToString.h +++ b/Analysis/include/Luau/ToString.h @@ -139,6 +139,6 @@ std::string dump(const std::shared_ptr& scope, const char* name); std::string generateName(size_t n); std::string toString(const Position& position); -std::string toString(const Location& location); +std::string toString(const Location& location, int offset = 0, bool useBegin = true); } // namespace Luau diff --git a/Analysis/include/Luau/TypeChecker2.h b/Analysis/include/Luau/TypeChecker2.h index def00a44..11d2aff9 100644 --- a/Analysis/include/Luau/TypeChecker2.h +++ b/Analysis/include/Luau/TypeChecker2.h @@ -12,6 +12,7 @@ namespace Luau struct DcrLogger; struct BuiltinTypes; -void check(NotNull builtinTypes, NotNull sharedState, DcrLogger* logger, const SourceModule& sourceModule, Module* module); +void check(NotNull builtinTypes, NotNull sharedState, DcrLogger* logger, const SourceModule& sourceModule, + Module* module); } // namespace Luau diff --git a/Analysis/include/Luau/TypeInfer.h b/Analysis/include/Luau/TypeInfer.h index 9902e5a1..79ee60c4 100644 --- a/Analysis/include/Luau/TypeInfer.h +++ b/Analysis/include/Luau/TypeInfer.h @@ -25,6 +25,7 @@ namespace Luau struct Scope; struct TypeChecker; struct ModuleResolver; +struct FrontendCancellationToken; using Name = std::string; using ScopePtr = std::shared_ptr; @@ -64,6 +65,15 @@ public: } }; +class UserCancelError : public InternalCompilerError +{ +public: + explicit UserCancelError(const std::string& moduleName) + : InternalCompilerError("Analysis has been cancelled by user", moduleName) + { + } +}; + struct GlobalTypes { GlobalTypes(NotNull builtinTypes); @@ -262,6 +272,7 @@ public: [[noreturn]] void ice(const std::string& message, const Location& location); [[noreturn]] void ice(const std::string& message); [[noreturn]] void throwTimeLimitError(); + [[noreturn]] void throwUserCancelError(); ScopePtr childFunctionScope(const ScopePtr& parent, const Location& location, int subLevel = 0); ScopePtr childScope(const ScopePtr& parent, const Location& location); @@ -387,6 +398,8 @@ public: std::optional instantiationChildLimit; std::optional unifierIterationLimit; + std::shared_ptr cancellationToken; + public: const TypeId nilType; const TypeId numberType; diff --git a/Analysis/include/Luau/Unifier.h b/Analysis/include/Luau/Unifier.h index 99da33f6..7a6a2f76 100644 --- a/Analysis/include/Luau/Unifier.h +++ b/Analysis/include/Luau/Unifier.h @@ -76,8 +76,7 @@ struct Unifier std::vector blockedTypes; std::vector blockedTypePacks; - Unifier( - NotNull normalizer, NotNull scope, const Location& location, Variance variance, TxnLog* parentLog = nullptr); + Unifier(NotNull normalizer, NotNull scope, const Location& location, Variance variance, TxnLog* parentLog = nullptr); // Configure the Unifier to test for scope subsumption via embedded Scope // pointers rather than TypeLevels. diff --git a/Analysis/src/Clone.cpp b/Analysis/src/Clone.cpp index bdb510a3..197aad7a 100644 --- a/Analysis/src/Clone.cpp +++ b/Analysis/src/Clone.cpp @@ -7,7 +7,6 @@ #include "Luau/Unifiable.h" LUAU_FASTFLAG(DebugLuauCopyBeforeNormalizing) -LUAU_FASTFLAG(LuauClonePublicInterfaceLess2) LUAU_FASTFLAG(DebugLuauReadWriteProperties) LUAU_FASTINTVARIABLE(LuauTypeCloneRecursionLimit, 300) diff --git a/Analysis/src/Differ.cpp b/Analysis/src/Differ.cpp index 91b6f4b6..50672cd9 100644 --- a/Analysis/src/Differ.cpp +++ b/Analysis/src/Differ.cpp @@ -3,7 +3,9 @@ #include "Luau/Error.h" #include "Luau/ToString.h" #include "Luau/Type.h" +#include "Luau/TypePack.h" #include +#include namespace Luau { @@ -18,6 +20,20 @@ std::string DiffPathNode::toString() const return *tableProperty; break; } + case DiffPathNode::Kind::FunctionArgument: + { + if (!index.has_value()) + return "Arg[Variadic]"; + // Add 1 because Lua is 1-indexed + return "Arg[" + std::to_string(*index + 1) + "]"; + } + case DiffPathNode::Kind::FunctionReturn: + { + if (!index.has_value()) + return "Ret[Variadic]"; + // Add 1 because Lua is 1-indexed + return "Ret[" + std::to_string(*index + 1) + "]"; + } default: { throw InternalCompilerError{"DiffPathNode::toString is not exhaustive"}; @@ -30,9 +46,34 @@ DiffPathNode DiffPathNode::constructWithTableProperty(Name tableProperty) return DiffPathNode{DiffPathNode::Kind::TableProperty, tableProperty, std::nullopt}; } +DiffPathNode DiffPathNode::constructWithKindAndIndex(Kind kind, size_t index) +{ + return DiffPathNode{kind, std::nullopt, index}; +} + +DiffPathNode DiffPathNode::constructWithKind(Kind kind) +{ + return DiffPathNode{kind, std::nullopt, std::nullopt}; +} + +DiffPathNodeLeaf DiffPathNodeLeaf::detailsNormal(TypeId ty) +{ + return DiffPathNodeLeaf{ty, std::nullopt, std::nullopt, false}; +} + +DiffPathNodeLeaf DiffPathNodeLeaf::detailsTableProperty(TypeId ty, Name tableProperty) +{ + return DiffPathNodeLeaf{ty, tableProperty, std::nullopt, false}; +} + +DiffPathNodeLeaf DiffPathNodeLeaf::detailsLength(int minLength, bool isVariadic) +{ + return DiffPathNodeLeaf{std::nullopt, std::nullopt, minLength, isVariadic}; +} + DiffPathNodeLeaf DiffPathNodeLeaf::nullopts() { - return DiffPathNodeLeaf{std::nullopt, std::nullopt}; + return DiffPathNodeLeaf{std::nullopt, std::nullopt, std::nullopt, false}; } std::string DiffPath::toString(bool prependDot) const @@ -79,9 +120,21 @@ std::string DiffError::toStringALeaf(std::string rootName, const DiffPathNodeLea } throw InternalCompilerError{"Both leaf.ty and otherLeaf.ty is nullopt"}; } + case DiffError::Kind::LengthMismatchInFnArgs: + { + if (!leaf.minLength.has_value()) + throw InternalCompilerError{"leaf.minLength is nullopt"}; + return pathStr + " takes " + std::to_string(*leaf.minLength) + (leaf.isVariadic ? " or more" : "") + " arguments"; + } + case DiffError::Kind::LengthMismatchInFnRets: + { + if (!leaf.minLength.has_value()) + throw InternalCompilerError{"leaf.minLength is nullopt"}; + return pathStr + " returns " + std::to_string(*leaf.minLength) + (leaf.isVariadic ? " or more" : "") + " values"; + } default: { - throw InternalCompilerError{"DiffPath::toStringWithLeaf is not exhaustive"}; + throw InternalCompilerError{"DiffPath::toStringALeaf is not exhaustive"}; } } } @@ -139,6 +192,14 @@ static DifferResult diffUsingEnv(DifferEnvironment& env, TypeId left, TypeId rig static DifferResult diffTable(DifferEnvironment& env, TypeId left, TypeId right); static DifferResult diffPrimitive(DifferEnvironment& env, TypeId left, TypeId right); static DifferResult diffSingleton(DifferEnvironment& env, TypeId left, TypeId right); +static DifferResult diffFunction(DifferEnvironment& env, TypeId left, TypeId right); +/** + * The last argument gives context info on which complex type contained the TypePack. + */ +static DifferResult diffTpi(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, TypePackId left, TypePackId right); +static DifferResult diffCanonicalTpShape(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, + const std::pair, std::optional>& left, const std::pair, std::optional>& right); +static DifferResult diffHandleFlattenedTail(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, TypePackId left, TypePackId right); static DifferResult diffTable(DifferEnvironment& env, TypeId left, TypeId right) { @@ -152,7 +213,7 @@ static DifferResult diffTable(DifferEnvironment& env, TypeId left, TypeId right) // left has a field the right doesn't return DifferResult{DiffError{ DiffError::Kind::MissingProperty, - DiffPathNodeLeaf{value.type(), field}, + DiffPathNodeLeaf::detailsTableProperty(value.type(), field), DiffPathNodeLeaf::nullopts(), getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight), @@ -164,8 +225,9 @@ static DifferResult diffTable(DifferEnvironment& env, TypeId left, TypeId right) if (leftTable->props.find(field) == leftTable->props.end()) { // right has a field the left doesn't - return DifferResult{DiffError{DiffError::Kind::MissingProperty, DiffPathNodeLeaf::nullopts(), DiffPathNodeLeaf{value.type(), field}, - getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight)}}; + return DifferResult{ + DiffError{DiffError::Kind::MissingProperty, DiffPathNodeLeaf::nullopts(), DiffPathNodeLeaf::detailsTableProperty(value.type(), field), + getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight)}}; } } // left and right have the same set of keys @@ -191,8 +253,8 @@ static DifferResult diffPrimitive(DifferEnvironment& env, TypeId left, TypeId ri { return DifferResult{DiffError{ DiffError::Kind::Normal, - DiffPathNodeLeaf{left, std::nullopt}, - DiffPathNodeLeaf{right, std::nullopt}, + DiffPathNodeLeaf::detailsNormal(left), + DiffPathNodeLeaf::detailsNormal(right), getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight), }}; @@ -209,8 +271,8 @@ static DifferResult diffSingleton(DifferEnvironment& env, TypeId left, TypeId ri { return DifferResult{DiffError{ DiffError::Kind::Normal, - DiffPathNodeLeaf{left, std::nullopt}, - DiffPathNodeLeaf{right, std::nullopt}, + DiffPathNodeLeaf::detailsNormal(left), + DiffPathNodeLeaf::detailsNormal(right), getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight), }}; @@ -218,6 +280,17 @@ static DifferResult diffSingleton(DifferEnvironment& env, TypeId left, TypeId ri return DifferResult{}; } +static DifferResult diffFunction(DifferEnvironment& env, TypeId left, TypeId right) +{ + const FunctionType* leftFunction = get(left); + const FunctionType* rightFunction = get(right); + + DifferResult differResult = diffTpi(env, DiffError::Kind::LengthMismatchInFnArgs, leftFunction->argTypes, rightFunction->argTypes); + if (differResult.diffError.has_value()) + return differResult; + return diffTpi(env, DiffError::Kind::LengthMismatchInFnRets, leftFunction->retTypes, rightFunction->retTypes); +} + static DifferResult diffUsingEnv(DifferEnvironment& env, TypeId left, TypeId right) { left = follow(left); @@ -227,8 +300,8 @@ static DifferResult diffUsingEnv(DifferEnvironment& env, TypeId left, TypeId rig { return DifferResult{DiffError{ DiffError::Kind::Normal, - DiffPathNodeLeaf{left, std::nullopt}, - DiffPathNodeLeaf{right, std::nullopt}, + DiffPathNodeLeaf::detailsNormal(left), + DiffPathNodeLeaf::detailsNormal(right), getDevFixFriendlyName(env.rootLeft), getDevFixFriendlyName(env.rootRight), }}; @@ -244,6 +317,11 @@ static DifferResult diffUsingEnv(DifferEnvironment& env, TypeId left, TypeId rig { return diffSingleton(env, left, right); } + else if (auto la = get(left)) + { + // Both left and right must be Any if either is Any for them to be equal! + return DifferResult{}; + } throw InternalCompilerError{"Unimplemented Simple TypeId variant for diffing"}; } @@ -254,9 +332,116 @@ static DifferResult diffUsingEnv(DifferEnvironment& env, TypeId left, TypeId rig { return diffTable(env, left, right); } + if (auto lf = get(left)) + { + return diffFunction(env, left, right); + } throw InternalCompilerError{"Unimplemented non-simple TypeId variant for diffing"}; } +static DifferResult diffTpi(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, TypePackId left, TypePackId right) +{ + left = follow(left); + right = follow(right); + + // Canonicalize + std::pair, std::optional> leftFlatTpi = flatten(left); + std::pair, std::optional> rightFlatTpi = flatten(right); + + // Check for shape equality + DifferResult diffResult = diffCanonicalTpShape(env, possibleNonNormalErrorKind, leftFlatTpi, rightFlatTpi); + if (diffResult.diffError.has_value()) + { + return diffResult; + } + + // Left and Right have the same shape + for (size_t i = 0; i < leftFlatTpi.first.size(); i++) + { + DifferResult differResult = diffUsingEnv(env, leftFlatTpi.first[i], rightFlatTpi.first[i]); + if (!differResult.diffError.has_value()) + continue; + + switch (possibleNonNormalErrorKind) + { + case DiffError::Kind::LengthMismatchInFnArgs: + { + differResult.wrapDiffPath(DiffPathNode::constructWithKindAndIndex(DiffPathNode::Kind::FunctionArgument, i)); + return differResult; + } + case DiffError::Kind::LengthMismatchInFnRets: + { + differResult.wrapDiffPath(DiffPathNode::constructWithKindAndIndex(DiffPathNode::Kind::FunctionReturn, i)); + return differResult; + } + default: + { + throw InternalCompilerError{"Unhandled Tpi diffing case with same shape"}; + } + } + } + if (!leftFlatTpi.second.has_value()) + return DifferResult{}; + + return diffHandleFlattenedTail(env, possibleNonNormalErrorKind, *leftFlatTpi.second, *rightFlatTpi.second); +} + +static DifferResult diffCanonicalTpShape(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, + const std::pair, std::optional>& left, const std::pair, std::optional>& right) +{ + if (left.first.size() == right.first.size() && left.second.has_value() == right.second.has_value()) + return DifferResult{}; + + return DifferResult{DiffError{ + possibleNonNormalErrorKind, + DiffPathNodeLeaf::detailsLength(int(left.first.size()), left.second.has_value()), + DiffPathNodeLeaf::detailsLength(int(right.first.size()), right.second.has_value()), + getDevFixFriendlyName(env.rootLeft), + getDevFixFriendlyName(env.rootRight), + }}; +} + +static DifferResult diffHandleFlattenedTail(DifferEnvironment& env, DiffError::Kind possibleNonNormalErrorKind, TypePackId left, TypePackId right) +{ + left = follow(left); + right = follow(right); + + if (left->ty.index() != right->ty.index()) + { + throw InternalCompilerError{"Unhandled case where the tail of 2 normalized typepacks have different variants"}; + } + + // Both left and right are the same variant + + if (auto lv = get(left)) + { + auto rv = get(right); + DifferResult differResult = diffUsingEnv(env, lv->ty, rv->ty); + if (!differResult.diffError.has_value()) + return DifferResult{}; + + switch (possibleNonNormalErrorKind) + { + case DiffError::Kind::LengthMismatchInFnArgs: + { + differResult.wrapDiffPath(DiffPathNode::constructWithKind(DiffPathNode::Kind::FunctionArgument)); + return differResult; + } + case DiffError::Kind::LengthMismatchInFnRets: + { + differResult.wrapDiffPath(DiffPathNode::constructWithKind(DiffPathNode::Kind::FunctionReturn)); + return differResult; + } + default: + { + throw InternalCompilerError{"Unhandled flattened tail case for VariadicTypePack"}; + } + } + } + + throw InternalCompilerError{"Unhandled tail type pack variant for flattened tails"}; +} + DifferResult diff(TypeId ty1, TypeId ty2) { DifferEnvironment differEnv{ty1, ty2}; @@ -267,7 +452,7 @@ bool isSimple(TypeId ty) { ty = follow(ty); // TODO: think about GenericType, etc. - return get(ty) || get(ty); + return get(ty) || get(ty) || get(ty); } } // namespace Luau diff --git a/Analysis/src/Error.cpp b/Analysis/src/Error.cpp index fba3c88a..1a690a50 100644 --- a/Analysis/src/Error.cpp +++ b/Analysis/src/Error.cpp @@ -495,12 +495,16 @@ struct ErrorConverter std::string operator()(const WhereClauseNeeded& e) const { - return "Type family instance " + Luau::toString(e.ty) + " depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this time"; + return "Type family instance " + Luau::toString(e.ty) + + " depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this " + "time"; } std::string operator()(const PackWhereClauseNeeded& e) const { - return "Type pack family instance " + Luau::toString(e.tp) + " depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this time"; + return "Type pack family instance " + Luau::toString(e.tp) + + " depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this " + "time"; } }; diff --git a/Analysis/src/Frontend.cpp b/Analysis/src/Frontend.cpp index 9f1fd726..2dea162b 100644 --- a/Analysis/src/Frontend.cpp +++ b/Analysis/src/Frontend.cpp @@ -35,7 +35,7 @@ LUAU_FASTINTVARIABLE(LuauAutocompleteCheckTimeoutMs, 100) LUAU_FASTFLAGVARIABLE(DebugLuauDeferredConstraintResolution, false) LUAU_FASTFLAGVARIABLE(DebugLuauLogSolverToJson, false) LUAU_FASTFLAGVARIABLE(DebugLuauReadWriteProperties, false) -LUAU_FASTFLAGVARIABLE(LuauFixBuildQueueExceptionUnwrap, false) +LUAU_FASTFLAGVARIABLE(LuauTypecheckCancellation, false) namespace Luau { @@ -461,6 +461,10 @@ CheckResult Frontend::check(const ModuleName& name, std::optionaltimeout) checkResult.timeoutHits.push_back(item.name); + // If check was manually cancelled, do not return partial results + if (FFlag::LuauTypecheckCancellation && item.module->cancelled) + return {}; + checkResult.errors.insert(checkResult.errors.end(), item.module->errors.begin(), item.module->errors.end()); if (item.name == name) @@ -610,6 +614,7 @@ std::vector Frontend::checkQueuedModules(std::optional nextItems; std::optional itemWithException; + bool cancelled = false; while (remaining != 0) { @@ -626,15 +631,15 @@ std::vector Frontend::checkQueuedModules(std::optionalcancelled) + cancelled = true; + + if (itemWithException || cancelled) + break; recordItemResult(item); @@ -671,8 +676,12 @@ std::vector Frontend::checkQueuedModules(std::optional& items) for (BuildQueueItem& item : items) { checkBuildQueueItem(item); + + if (FFlag::LuauTypecheckCancellation && item.module && item.module->cancelled) + break; + recordItemResult(item); } } @@ -1232,8 +1253,8 @@ ModulePtr Frontend::check(const SourceModule& sourceModule, Mode mode, std::vect catch (const InternalCompilerError& err) { InternalCompilerError augmented = err.location.has_value() - ? InternalCompilerError{err.message, sourceModule.humanReadableName, *err.location} - : InternalCompilerError{err.message, sourceModule.humanReadableName}; + ? InternalCompilerError{err.message, sourceModule.humanReadableName, *err.location} + : InternalCompilerError{err.message, sourceModule.humanReadableName}; throw augmented; } } @@ -1254,6 +1275,9 @@ ModulePtr Frontend::check(const SourceModule& sourceModule, Mode mode, std::vect typeChecker.instantiationChildLimit = typeCheckLimits.instantiationChildLimit; typeChecker.unifierIterationLimit = typeCheckLimits.unifierIterationLimit; + if (FFlag::LuauTypecheckCancellation) + typeChecker.cancellationToken = typeCheckLimits.cancellationToken; + return typeChecker.check(sourceModule, mode, environmentScope); } } diff --git a/Analysis/src/Module.cpp b/Analysis/src/Module.cpp index 473b8acc..cb2114ab 100644 --- a/Analysis/src/Module.cpp +++ b/Analysis/src/Module.cpp @@ -15,8 +15,6 @@ #include LUAU_FASTFLAG(DebugLuauDeferredConstraintResolution); -LUAU_FASTFLAGVARIABLE(LuauClonePublicInterfaceLess2, false); -LUAU_FASTFLAGVARIABLE(LuauCloneSkipNonInternalVisit, false); namespace Luau { @@ -98,7 +96,7 @@ struct ClonePublicInterface : Substitution bool ignoreChildrenVisit(TypeId ty) override { - if (FFlag::LuauCloneSkipNonInternalVisit && ty->owningArena != &module->internalTypes) + if (ty->owningArena != &module->internalTypes) return true; return false; @@ -106,7 +104,7 @@ struct ClonePublicInterface : Substitution bool ignoreChildrenVisit(TypePackId tp) override { - if (FFlag::LuauCloneSkipNonInternalVisit && tp->owningArena != &module->internalTypes) + if (tp->owningArena != &module->internalTypes) return true; return false; @@ -211,35 +209,23 @@ void Module::clonePublicInterface(NotNull builtinTypes, InternalEr TxnLog log; ClonePublicInterface clonePublicInterface{&log, builtinTypes, this}; - if (FFlag::LuauClonePublicInterfaceLess2) - returnType = clonePublicInterface.cloneTypePack(returnType); - else - returnType = clone(returnType, interfaceTypes, cloneState); + returnType = clonePublicInterface.cloneTypePack(returnType); moduleScope->returnType = returnType; if (varargPack) { - if (FFlag::LuauClonePublicInterfaceLess2) - varargPack = clonePublicInterface.cloneTypePack(*varargPack); - else - varargPack = clone(*varargPack, interfaceTypes, cloneState); + varargPack = clonePublicInterface.cloneTypePack(*varargPack); moduleScope->varargPack = varargPack; } for (auto& [name, tf] : moduleScope->exportedTypeBindings) { - if (FFlag::LuauClonePublicInterfaceLess2) - tf = clonePublicInterface.cloneTypeFun(tf); - else - tf = clone(tf, interfaceTypes, cloneState); + tf = clonePublicInterface.cloneTypeFun(tf); } for (auto& [name, ty] : declaredGlobals) { - if (FFlag::LuauClonePublicInterfaceLess2) - ty = clonePublicInterface.cloneType(ty); - else - ty = clone(ty, interfaceTypes, cloneState); + ty = clonePublicInterface.cloneType(ty); } // Copy external stuff over to Module itself diff --git a/Analysis/src/Substitution.cpp b/Analysis/src/Substitution.cpp index 9c34cd7c..4c6c35b0 100644 --- a/Analysis/src/Substitution.cpp +++ b/Analysis/src/Substitution.cpp @@ -8,93 +8,15 @@ #include #include -LUAU_FASTFLAG(LuauClonePublicInterfaceLess2) LUAU_FASTINTVARIABLE(LuauTarjanChildLimit, 10000) LUAU_FASTFLAG(DebugLuauReadWriteProperties) -LUAU_FASTFLAG(LuauCloneSkipNonInternalVisit) LUAU_FASTFLAGVARIABLE(LuauTarjanSingleArr, false) namespace Luau { -static TypeId DEPRECATED_shallowClone(TypeId ty, TypeArena& dest, const TxnLog* log, bool alwaysClone) -{ - ty = log->follow(ty); - - TypeId result = ty; - - if (auto pty = log->pending(ty)) - ty = &pty->pending; - - if (const FunctionType* ftv = get(ty)) - { - FunctionType clone = FunctionType{ftv->level, ftv->scope, ftv->argTypes, ftv->retTypes, ftv->definition, ftv->hasSelf}; - clone.generics = ftv->generics; - clone.genericPacks = ftv->genericPacks; - clone.magicFunction = ftv->magicFunction; - clone.dcrMagicFunction = ftv->dcrMagicFunction; - clone.dcrMagicRefinement = ftv->dcrMagicRefinement; - clone.tags = ftv->tags; - clone.argNames = ftv->argNames; - result = dest.addType(std::move(clone)); - } - else if (const TableType* ttv = get(ty)) - { - LUAU_ASSERT(!ttv->boundTo); - TableType clone = TableType{ttv->props, ttv->indexer, ttv->level, ttv->scope, ttv->state}; - clone.definitionModuleName = ttv->definitionModuleName; - clone.definitionLocation = ttv->definitionLocation; - clone.name = ttv->name; - clone.syntheticName = ttv->syntheticName; - clone.instantiatedTypeParams = ttv->instantiatedTypeParams; - clone.instantiatedTypePackParams = ttv->instantiatedTypePackParams; - clone.tags = ttv->tags; - result = dest.addType(std::move(clone)); - } - else if (const MetatableType* mtv = get(ty)) - { - MetatableType clone = MetatableType{mtv->table, mtv->metatable}; - clone.syntheticName = mtv->syntheticName; - result = dest.addType(std::move(clone)); - } - else if (const UnionType* utv = get(ty)) - { - UnionType clone; - clone.options = utv->options; - result = dest.addType(std::move(clone)); - } - else if (const IntersectionType* itv = get(ty)) - { - IntersectionType clone; - clone.parts = itv->parts; - result = dest.addType(std::move(clone)); - } - else if (const PendingExpansionType* petv = get(ty)) - { - PendingExpansionType clone{petv->prefix, petv->name, petv->typeArguments, petv->packArguments}; - result = dest.addType(std::move(clone)); - } - else if (const NegationType* ntv = get(ty)) - { - result = dest.addType(NegationType{ntv->ty}); - } - else if (const TypeFamilyInstanceType* tfit = get(ty)) - { - TypeFamilyInstanceType clone{tfit->family, tfit->typeArguments, tfit->packArguments}; - result = dest.addType(std::move(clone)); - } - else - return result; - - asMutable(result)->documentationSymbol = ty->documentationSymbol; - return result; -} - static TypeId shallowClone(TypeId ty, TypeArena& dest, const TxnLog* log, bool alwaysClone) { - if (!FFlag::LuauClonePublicInterfaceLess2) - return DEPRECATED_shallowClone(ty, dest, log, alwaysClone); - auto go = [ty, &dest, alwaysClone](auto&& a) { using T = std::decay_t; @@ -224,7 +146,7 @@ void Tarjan::visitChildren(TypeId ty, int index) { LUAU_ASSERT(ty == log->follow(ty)); - if (FFlag::LuauCloneSkipNonInternalVisit ? ignoreChildrenVisit(ty) : ignoreChildren(ty)) + if (ignoreChildrenVisit(ty)) return; if (auto pty = log->pending(ty)) @@ -324,7 +246,7 @@ void Tarjan::visitChildren(TypePackId tp, int index) { LUAU_ASSERT(tp == log->follow(tp)); - if (FFlag::LuauCloneSkipNonInternalVisit ? ignoreChildrenVisit(tp) : ignoreChildren(tp)) + if (ignoreChildrenVisit(tp)) return; if (auto ptp = log->pending(tp)) @@ -856,7 +778,7 @@ std::optional Substitution::substitute(TypePackId tp) TypeId Substitution::clone(TypeId ty) { - return shallowClone(ty, *arena, log, /* alwaysClone */ FFlag::LuauClonePublicInterfaceLess2); + return shallowClone(ty, *arena, log, /* alwaysClone */ true); } TypePackId Substitution::clone(TypePackId tp) @@ -888,12 +810,8 @@ TypePackId Substitution::clone(TypePackId tp) clone.packArguments.assign(tfitp->packArguments.begin(), tfitp->packArguments.end()); return addTypePack(std::move(clone)); } - else if (FFlag::LuauClonePublicInterfaceLess2) - { - return addTypePack(*tp); - } else - return tp; + return addTypePack(*tp); } void Substitution::foundDirty(TypeId ty) diff --git a/Analysis/src/ToString.cpp b/Analysis/src/ToString.cpp index f4375b5a..19776d0a 100644 --- a/Analysis/src/ToString.cpp +++ b/Analysis/src/ToString.cpp @@ -13,8 +13,10 @@ #include #include +#include LUAU_FASTFLAG(DebugLuauDeferredConstraintResolution) +LUAU_FASTFLAGVARIABLE(LuauToStringPrettifyLocation, false) /* * Enables increasing levels of verbosity for Luau type names when stringifying. @@ -1739,9 +1741,17 @@ std::string toString(const Position& position) return "{ line = " + std::to_string(position.line) + ", col = " + std::to_string(position.column) + " }"; } -std::string toString(const Location& location) +std::string toString(const Location& location, int offset, bool useBegin) { - return "Location { " + toString(location.begin) + ", " + toString(location.end) + " }"; + if (FFlag::LuauToStringPrettifyLocation) + { + return "(" + std::to_string(location.begin.line + offset) + ", " + std::to_string(location.begin.column + offset) + ") - (" + + std::to_string(location.end.line + offset) + ", " + std::to_string(location.end.column + offset) + ")"; + } + else + { + return "Location { " + toString(location.begin) + ", " + toString(location.end) + " }"; + } } } // namespace Luau diff --git a/Analysis/src/TypeChecker2.cpp b/Analysis/src/TypeChecker2.cpp index 103f0dca..b77f7f15 100644 --- a/Analysis/src/TypeChecker2.cpp +++ b/Analysis/src/TypeChecker2.cpp @@ -1239,7 +1239,8 @@ struct TypeChecker2 return std::move(u.errors); } - std::pair checkOverload(TypeId fnTy, const TypePack* args, Location fnLoc, const std::vector* argLocs, bool callMetamethodOk = true) + std::pair checkOverload( + TypeId fnTy, const TypePack* args, Location fnLoc, const std::vector* argLocs, bool callMetamethodOk = true) { fnTy = follow(fnTy); @@ -1257,17 +1258,18 @@ struct TypeChecker2 std::vector withSelfLocs = *argLocs; withSelfLocs.insert(withSelfLocs.begin(), fnLoc); - return checkOverload(*callMm, &withSelf, fnLoc, &withSelfLocs, /*callMetamethodOk=*/ false); + return checkOverload(*callMm, &withSelf, fnLoc, &withSelfLocs, /*callMetamethodOk=*/false); } else return {TypeIsNotAFunction, {}}; // Intentionally empty. We can just fabricate the type error later on. } LUAU_NOINLINE - std::pair checkOverload_(TypeId fnTy, const FunctionType* fn, const TypePack* args, Location fnLoc, const std::vector* argLocs) + std::pair checkOverload_( + TypeId fnTy, const FunctionType* fn, const TypePack* args, Location fnLoc, const std::vector* argLocs) { TxnLog fake; - FamilyGraphReductionResult result = reduceFamilies(fnTy, callLoc, arena, builtinTypes, scope, normalizer, &fake, /*force=*/ true); + FamilyGraphReductionResult result = reduceFamilies(fnTy, callLoc, arena, builtinTypes, scope, normalizer, &fake, /*force=*/true); if (!result.errors.empty()) return {OverloadIsNonviable, result.errors}; @@ -2374,6 +2376,9 @@ struct TypeChecker2 return; } + if (norm->shouldSuppressErrors()) + return; + bool foundOneProp = false; std::vector typesMissingTheProp; @@ -2539,7 +2544,8 @@ struct TypeChecker2 } }; -void check(NotNull builtinTypes, NotNull unifierState, DcrLogger* logger, const SourceModule& sourceModule, Module* module) +void check( + NotNull builtinTypes, NotNull unifierState, DcrLogger* logger, const SourceModule& sourceModule, Module* module) { TypeChecker2 typeChecker{builtinTypes, unifierState, logger, &sourceModule, module}; diff --git a/Analysis/src/TypeInfer.cpp b/Analysis/src/TypeInfer.cpp index b94cbf8d..cfb0f21c 100644 --- a/Analysis/src/TypeInfer.cpp +++ b/Analysis/src/TypeInfer.cpp @@ -2,6 +2,7 @@ #include "Luau/TypeInfer.h" #include "Luau/ApplyTypeFunction.h" +#include "Luau/Cancellation.h" #include "Luau/Clone.h" #include "Luau/Common.h" #include "Luau/Instantiation.h" @@ -302,6 +303,10 @@ ModulePtr TypeChecker::checkWithoutRecursionCheck(const SourceModule& module, Mo { currentModule->timeout = true; } + catch (const UserCancelError&) + { + currentModule->cancelled = true; + } if (FFlag::DebugLuauSharedSelf) { @@ -345,7 +350,9 @@ ModulePtr TypeChecker::checkWithoutRecursionCheck(const SourceModule& module, Mo ControlFlow TypeChecker::check(const ScopePtr& scope, const AstStat& program) { if (finishTime && TimeTrace::getClock() > *finishTime) - throw TimeLimitError(iceHandler->moduleName); + throwTimeLimitError(); + if (cancellationToken && cancellationToken->requested()) + throwUserCancelError(); if (auto block = program.as()) return check(scope, *block); @@ -4929,16 +4936,26 @@ void TypeChecker::reportErrors(const ErrorVec& errors) reportError(err); } -void TypeChecker::ice(const std::string& message, const Location& location) +LUAU_NOINLINE void TypeChecker::ice(const std::string& message, const Location& location) { iceHandler->ice(message, location); } -void TypeChecker::ice(const std::string& message) +LUAU_NOINLINE void TypeChecker::ice(const std::string& message) { iceHandler->ice(message); } +LUAU_NOINLINE void TypeChecker::throwTimeLimitError() +{ + throw TimeLimitError(iceHandler->moduleName); +} + +LUAU_NOINLINE void TypeChecker::throwUserCancelError() +{ + throw UserCancelError(iceHandler->moduleName); +} + void TypeChecker::prepareErrorsForDisplay(ErrorVec& errVec) { // Remove errors with names that were generated by recovery from a parse error diff --git a/Analysis/src/Unifier.cpp b/Analysis/src/Unifier.cpp index eae00788..e54156fe 100644 --- a/Analysis/src/Unifier.cpp +++ b/Analysis/src/Unifier.cpp @@ -19,7 +19,6 @@ LUAU_FASTINT(LuauTypeInferTypePackLoopLimit) LUAU_FASTFLAG(LuauErrorRecoveryType) LUAU_FASTFLAGVARIABLE(LuauInstantiateInSubtyping, false) -LUAU_FASTFLAGVARIABLE(LuauVariadicAnyCanBeGeneric, false) LUAU_FASTFLAGVARIABLE(LuauMaintainScopesInUnifier, false) LUAU_FASTFLAGVARIABLE(LuauTransitiveSubtyping, false) LUAU_FASTFLAGVARIABLE(LuauOccursIsntAlwaysFailure, false) diff --git a/Ast/include/Luau/Location.h b/Ast/include/Luau/Location.h index 41ca379d..041a2c63 100644 --- a/Ast/include/Luau/Location.h +++ b/Ast/include/Luau/Location.h @@ -39,11 +39,6 @@ struct Location bool containsClosed(const Position& p) const; void extend(const Location& other); void shift(const Position& start, const Position& oldEnd, const Position& newEnd); - - /** - * Use offset=1 when displaying for the user. - */ - std::string toString(int offset = 0, bool useBegin = true) const; }; } // namespace Luau diff --git a/Ast/src/Location.cpp b/Ast/src/Location.cpp index e0ae867f..40f8e23e 100644 --- a/Ast/src/Location.cpp +++ b/Ast/src/Location.cpp @@ -129,12 +129,4 @@ void Location::shift(const Position& start, const Position& oldEnd, const Positi end.shift(start, oldEnd, newEnd); } -std::string Location::toString(int offset, bool useBegin) const -{ - const Position& pos = useBegin ? this->begin : this->end; - std::string line{std::to_string(pos.line + offset)}; - std::string column{std::to_string(pos.column + offset)}; - return "(" + line + ", " + column + ")"; -} - } // namespace Luau diff --git a/Ast/src/TimeTrace.cpp b/Ast/src/TimeTrace.cpp index 8b95cf0b..9373fa95 100644 --- a/Ast/src/TimeTrace.cpp +++ b/Ast/src/TimeTrace.cpp @@ -92,14 +92,6 @@ struct GlobalContext { ~GlobalContext() { - // Ideally we would want all ThreadContext destructors to run - // But in VS, not all thread_local object instances are destroyed - for (ThreadContext* context : threads) - { - if (!context->events.empty()) - context->flushEvents(); - } - if (traceFile) fclose(traceFile); } @@ -109,7 +101,7 @@ struct GlobalContext uint32_t nextThreadId = 0; std::vector tokens; FILE* traceFile = nullptr; - + private: friend std::shared_ptr getGlobalContext(); GlobalContext() = default; diff --git a/CLI/Reduce.cpp b/CLI/Reduce.cpp index ffe670b8..38133e04 100644 --- a/CLI/Reduce.cpp +++ b/CLI/Reduce.cpp @@ -429,8 +429,7 @@ struct Reducer } } - void run(const std::string scriptName, const std::string command, std::string_view source, - std::string_view searchText) + void run(const std::string scriptName, const std::string command, std::string_view source, std::string_view searchText) { this->scriptName = scriptName; diff --git a/CodeGen/include/Luau/IrBuilder.h b/CodeGen/include/Luau/IrBuilder.h index 60106d1b..d854b400 100644 --- a/CodeGen/include/Luau/IrBuilder.h +++ b/CodeGen/include/Luau/IrBuilder.h @@ -26,6 +26,7 @@ struct IrBuilder void rebuildBytecodeBasicBlocks(Proto* proto); void translateInst(LuauOpcode op, const Instruction* pc, int i); + void handleFastcallFallback(IrOp fallbackOrUndef, const Instruction* pc, int i); bool isInternalBlock(IrOp block); void beginBlock(IrOp block); @@ -61,10 +62,13 @@ struct IrBuilder IrOp vmConst(uint32_t index); IrOp vmUpvalue(uint8_t index); + IrOp vmExit(uint32_t pcpos); + bool inTerminatedBlock = false; bool activeFastcallFallback = false; IrOp fastcallFallbackReturn; + int fastcallSkipTarget = -1; IrFunction function; diff --git a/CodeGen/include/Luau/IrData.h b/CodeGen/include/Luau/IrData.h index 16c8df62..0b38743a 100644 --- a/CodeGen/include/Luau/IrData.h +++ b/CodeGen/include/Luau/IrData.h @@ -165,7 +165,7 @@ enum class IrCmd : uint8_t NOT_ANY, // TODO: boolean specialization will be useful // Unconditional jump - // A: block + // A: block/vmexit JUMP, // Jump if TValue is truthy @@ -364,7 +364,7 @@ enum class IrCmd : uint8_t // Guard against tag mismatch // A, B: tag - // C: block/undef + // C: block/vmexit/undef // D: bool (finish execution in VM on failure) // In final x64 lowering, A can also be Rn // When undef is specified instead of a block, execution is aborted on check failure; if D is true, execution is continued in VM interpreter @@ -384,7 +384,7 @@ enum class IrCmd : uint8_t CHECK_NO_METATABLE, // Guard against executing in unsafe environment, exits to VM on check failure - // A: unsigned int (pcpos)/undef + // A: vmexit/undef // When undef is specified, execution is aborted on check failure CHECK_SAFE_ENV, @@ -670,6 +670,9 @@ enum class IrOpKind : uint32_t // To reference a VM upvalue VmUpvalue, + + // To reference an exit to VM at specific PC pos + VmExit, }; struct IrOp diff --git a/CodeGen/src/CodeBlockUnwind.cpp b/CodeGen/src/CodeBlockUnwind.cpp index 9a0f2c53..5c711b4a 100644 --- a/CodeGen/src/CodeBlockUnwind.cpp +++ b/CodeGen/src/CodeBlockUnwind.cpp @@ -24,11 +24,23 @@ extern "C" void __register_frame(const void*); extern "C" void __deregister_frame(const void*); extern "C" void __unw_add_dynamic_fde() __attribute__((weak)); - #endif #if defined(__APPLE__) && defined(__aarch64__) #include +#include +#include + +struct unw_dynamic_unwind_sections_t +{ + uintptr_t dso_base; + uintptr_t dwarf_section; + size_t dwarf_section_length; + uintptr_t compact_unwind_section; + size_t compact_unwind_section_length; +}; + +typedef int (*unw_add_find_dynamic_unwind_sections_t)(int (*)(uintptr_t addr, unw_dynamic_unwind_sections_t* info)); #endif namespace Luau @@ -36,6 +48,26 @@ namespace Luau namespace CodeGen { +#if defined(__APPLE__) && defined(__aarch64__) +static int findDynamicUnwindSections(uintptr_t addr, unw_dynamic_unwind_sections_t* info) +{ + // Define a minimal mach header for JIT'd code. + static const mach_header_64 kFakeMachHeader = { + MH_MAGIC_64, + CPU_TYPE_ARM64, + CPU_SUBTYPE_ARM64_ALL, + MH_DYLIB, + }; + + info->dso_base = (uintptr_t)&kFakeMachHeader; + info->dwarf_section = 0; + info->dwarf_section_length = 0; + info->compact_unwind_section = 0; + info->compact_unwind_section_length = 0; + return 1; +} +#endif + #if defined(__linux__) || defined(__APPLE__) static void visitFdeEntries(char* pos, void (*cb)(const void*)) { @@ -87,6 +119,15 @@ void* createBlockUnwindInfo(void* context, uint8_t* block, size_t blockSize, siz visitFdeEntries(unwindData, __register_frame); #endif +#if defined(__APPLE__) && defined(__aarch64__) + // Starting from macOS 14, we need to register unwind section callback to state that our ABI doesn't require pointer authentication + // This might conflict with other JITs that do the same; unfortunately this is the best we can do for now. + static unw_add_find_dynamic_unwind_sections_t unw_add_find_dynamic_unwind_sections = + unw_add_find_dynamic_unwind_sections_t(dlsym(RTLD_DEFAULT, "__unw_add_find_dynamic_unwind_sections")); + static int regonce = unw_add_find_dynamic_unwind_sections ? unw_add_find_dynamic_unwind_sections(findDynamicUnwindSections) : 0; + LUAU_ASSERT(regonce == 0); +#endif + beginOffset = unwindSize + unwind->getBeginOffset(); return block; } diff --git a/CodeGen/src/CodeGen.cpp b/CodeGen/src/CodeGen.cpp index 63dd9a4d..cdb761c6 100644 --- a/CodeGen/src/CodeGen.cpp +++ b/CodeGen/src/CodeGen.cpp @@ -141,14 +141,6 @@ static int onEnter(lua_State* L, Proto* proto) return GateFn(data->context.gateEntry)(L, proto, target, &data->context); } -static void onSetBreakpoint(lua_State* L, Proto* proto, int instruction) -{ - if (!proto->execdata) - return; - - LUAU_ASSERT(!"Native breakpoints are not implemented"); -} - #if defined(__aarch64__) unsigned int getCpuFeaturesA64() { @@ -245,7 +237,6 @@ void create(lua_State* L) ecb->close = onCloseState; ecb->destroy = onDestroyFunction; ecb->enter = onEnter; - ecb->setbreakpoint = onSetBreakpoint; } void compile(lua_State* L, int idx) @@ -259,7 +250,8 @@ void compile(lua_State* L, int idx) return; #if defined(__aarch64__) - A64::AssemblyBuilderA64 build(/* logText= */ false, getCpuFeaturesA64()); + static unsigned int cpuFeatures = getCpuFeaturesA64(); + A64::AssemblyBuilderA64 build(/* logText= */ false, cpuFeatures); #else X64::AssemblyBuilderX64 build(/* logText= */ false); #endif diff --git a/CodeGen/src/CodeGenAssembly.cpp b/CodeGen/src/CodeGenAssembly.cpp index 36d8b274..fed5ddd3 100644 --- a/CodeGen/src/CodeGenAssembly.cpp +++ b/CodeGen/src/CodeGenAssembly.cpp @@ -100,7 +100,8 @@ std::string getAssembly(lua_State* L, int idx, AssemblyOptions options) case AssemblyOptions::Host: { #if defined(__aarch64__) - A64::AssemblyBuilderA64 build(/* logText= */ options.includeAssembly, getCpuFeaturesA64()); + static unsigned int cpuFeatures = getCpuFeaturesA64(); + A64::AssemblyBuilderA64 build(/* logText= */ options.includeAssembly, cpuFeatures); #else X64::AssemblyBuilderX64 build(/* logText= */ options.includeAssembly); #endif diff --git a/CodeGen/src/CodeGenLower.h b/CodeGen/src/CodeGenLower.h index 4b74e9f2..a7352bce 100644 --- a/CodeGen/src/CodeGenLower.h +++ b/CodeGen/src/CodeGenLower.h @@ -44,6 +44,18 @@ inline void gatherFunctions(std::vector& results, Proto* proto) gatherFunctions(results, proto->p[i]); } +inline IrBlock& getNextBlock(IrFunction& function, std::vector& sortedBlocks, IrBlock& dummy, size_t i) +{ + for (size_t j = i + 1; j < sortedBlocks.size(); ++j) + { + IrBlock& block = function.blocks[sortedBlocks[j]]; + if (block.kind != IrBlockKind::Dead) + return block; + } + + return dummy; +} + template inline bool lowerImpl(AssemblyBuilder& build, IrLowering& lowering, IrFunction& function, int bytecodeid, AssemblyOptions options) { @@ -118,6 +130,8 @@ inline bool lowerImpl(AssemblyBuilder& build, IrLowering& lowering, IrFunction& build.setLabel(block.label); + IrBlock& nextBlock = getNextBlock(function, sortedBlocks, dummy, i); + for (uint32_t index = block.start; index <= block.finish; index++) { LUAU_ASSERT(index < function.instructions.size()); @@ -156,9 +170,7 @@ inline bool lowerImpl(AssemblyBuilder& build, IrLowering& lowering, IrFunction& toStringDetailed(ctx, block, blockIndex, inst, index, /* includeUseInfo */ true); } - IrBlock& next = i + 1 < sortedBlocks.size() ? function.blocks[sortedBlocks[i + 1]] : dummy; - - lowering.lowerInst(inst, index, next); + lowering.lowerInst(inst, index, nextBlock); if (lowering.hasError()) { diff --git a/CodeGen/src/EmitCommon.h b/CodeGen/src/EmitCommon.h index 08666064..214cfd6d 100644 --- a/CodeGen/src/EmitCommon.h +++ b/CodeGen/src/EmitCommon.h @@ -12,7 +12,7 @@ constexpr unsigned kTValueSizeLog2 = 4; constexpr unsigned kLuaNodeSizeLog2 = 5; // TKey.tt and TKey.next are packed together in a bitfield -constexpr unsigned kOffsetOfTKeyTagNext = 12; // offsetof cannot be used on a bit field +constexpr unsigned kOffsetOfTKeyTagNext = 12; // offsetof cannot be used on a bit field constexpr unsigned kTKeyTagBits = 4; constexpr unsigned kTKeyTagMask = (1 << kTKeyTagBits) - 1; @@ -33,7 +33,7 @@ struct ModuleHelpers Label continueCallInVm; // A64 - Label reentry; // x0: closure + Label reentry; // x0: closure }; } // namespace CodeGen diff --git a/CodeGen/src/EmitCommonX64.cpp b/CodeGen/src/EmitCommonX64.cpp index 1d707fad..2ad5b040 100644 --- a/CodeGen/src/EmitCommonX64.cpp +++ b/CodeGen/src/EmitCommonX64.cpp @@ -268,7 +268,6 @@ void callStepGc(IrRegAllocX64& regs, AssemblyBuilderX64& build) build.setLabel(skip); } - void emitClearNativeFlag(AssemblyBuilderX64& build) { build.mov(rax, qword[rState + offsetof(lua_State, ci)]); diff --git a/CodeGen/src/IrBuilder.cpp b/CodeGen/src/IrBuilder.cpp index 69ac295a..04318eff 100644 --- a/CodeGen/src/IrBuilder.cpp +++ b/CodeGen/src/IrBuilder.cpp @@ -128,8 +128,16 @@ void IrBuilder::buildFunctionIr(Proto* proto) // We skip dead bytecode instructions when they appear after block was already terminated if (!inTerminatedBlock) + { translateInst(op, pc, i); + if (fastcallSkipTarget != -1) + { + nexti = fastcallSkipTarget; + fastcallSkipTarget = -1; + } + } + i = nexti; LUAU_ASSERT(i <= proto->sizecode); @@ -357,49 +365,17 @@ void IrBuilder::translateInst(LuauOpcode op, const Instruction* pc, int i) translateInstCloseUpvals(*this, pc); break; case LOP_FASTCALL: - { - int skip = LUAU_INSN_C(*pc); - IrOp next = blockAtInst(i + skip + 2); - - translateFastCallN(*this, pc, i, false, 0, {}, next); - - activeFastcallFallback = true; - fastcallFallbackReturn = next; + handleFastcallFallback(translateFastCallN(*this, pc, i, false, 0, {}), pc, i); break; - } case LOP_FASTCALL1: - { - int skip = LUAU_INSN_C(*pc); - IrOp next = blockAtInst(i + skip + 2); - - translateFastCallN(*this, pc, i, true, 1, undef(), next); - - activeFastcallFallback = true; - fastcallFallbackReturn = next; + handleFastcallFallback(translateFastCallN(*this, pc, i, true, 1, undef()), pc, i); break; - } case LOP_FASTCALL2: - { - int skip = LUAU_INSN_C(*pc); - IrOp next = blockAtInst(i + skip + 2); - - translateFastCallN(*this, pc, i, true, 2, vmReg(pc[1]), next); - - activeFastcallFallback = true; - fastcallFallbackReturn = next; + handleFastcallFallback(translateFastCallN(*this, pc, i, true, 2, vmReg(pc[1])), pc, i); break; - } case LOP_FASTCALL2K: - { - int skip = LUAU_INSN_C(*pc); - IrOp next = blockAtInst(i + skip + 2); - - translateFastCallN(*this, pc, i, true, 2, vmConst(pc[1]), next); - - activeFastcallFallback = true; - fastcallFallbackReturn = next; + handleFastcallFallback(translateFastCallN(*this, pc, i, true, 2, vmConst(pc[1])), pc, i); break; - } case LOP_FORNPREP: translateInstForNPrep(*this, pc, i); break; @@ -493,6 +469,25 @@ void IrBuilder::translateInst(LuauOpcode op, const Instruction* pc, int i) } } +void IrBuilder::handleFastcallFallback(IrOp fallbackOrUndef, const Instruction* pc, int i) +{ + int skip = LUAU_INSN_C(*pc); + + if (fallbackOrUndef.kind != IrOpKind::Undef) + { + IrOp next = blockAtInst(i + skip + 2); + inst(IrCmd::JUMP, next); + beginBlock(fallbackOrUndef); + + activeFastcallFallback = true; + fastcallFallbackReturn = next; + } + else + { + fastcallSkipTarget = i + skip + 2; + } +} + bool IrBuilder::isInternalBlock(IrOp block) { IrBlock& target = function.blocks[block.index]; @@ -718,5 +713,10 @@ IrOp IrBuilder::vmUpvalue(uint8_t index) return {IrOpKind::VmUpvalue, index}; } +IrOp IrBuilder::vmExit(uint32_t pcpos) +{ + return {IrOpKind::VmExit, pcpos}; +} + } // namespace CodeGen } // namespace Luau diff --git a/CodeGen/src/IrDump.cpp b/CodeGen/src/IrDump.cpp index dfd7236a..c44cd8eb 100644 --- a/CodeGen/src/IrDump.cpp +++ b/CodeGen/src/IrDump.cpp @@ -389,6 +389,9 @@ void toString(IrToStringContext& ctx, IrOp op) case IrOpKind::VmUpvalue: append(ctx.result, "U%d", vmUpvalueOp(op)); break; + case IrOpKind::VmExit: + append(ctx.result, "exit(%d)", op.index); + break; } } diff --git a/CodeGen/src/IrLoweringA64.cpp b/CodeGen/src/IrLoweringA64.cpp index 38e840ab..92cb49ad 100644 --- a/CodeGen/src/IrLoweringA64.cpp +++ b/CodeGen/src/IrLoweringA64.cpp @@ -178,6 +178,7 @@ IrLoweringA64::IrLoweringA64(AssemblyBuilderA64& build, ModuleHelpers& helpers, , function(function) , regs(function, {{x0, x15}, {x16, x17}, {q0, q7}, {q16, q31}}) , valueTracker(function) + , exitHandlerMap(~0u) { // In order to allocate registers during lowering, we need to know where instruction results are last used updateLastUseLocations(function); @@ -514,8 +515,11 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) build.cmp(regOp(inst.a), LUA_TBOOLEAN); build.b(ConditionA64::NotEqual, notbool); - // boolean => invert value - build.eor(inst.regA64, regOp(inst.b), 1); + if (inst.b.kind == IrOpKind::Constant) + build.mov(inst.regA64, intOp(inst.b) == 0 ? 1 : 0); + else + build.eor(inst.regA64, regOp(inst.b), 1); // boolean => invert value + build.b(exit); // not boolean => result is true iff tag was nil @@ -527,7 +531,16 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) break; } case IrCmd::JUMP: - jumpOrFallthrough(blockOp(inst.a), next); + if (inst.a.kind == IrOpKind::VmExit) + { + Label fresh; + build.b(getTargetLabel(inst.a, fresh)); + finalizeTargetLabel(inst.a, fresh); + } + else + { + jumpOrFallthrough(blockOp(inst.a), next); + } break; case IrCmd::JUMP_IF_TRUTHY: { @@ -1029,8 +1042,8 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) case IrCmd::CHECK_TAG: { bool continueInVm = (inst.d.kind == IrOpKind::Constant && intOp(inst.d)); - Label abort; // used when guard aborts execution - Label& fail = inst.c.kind == IrOpKind::Undef ? (continueInVm ? helpers.exitContinueVmClearNativeFlag : abort) : labelOp(inst.c); + Label fresh; // used when guard aborts execution or jumps to a VM exit + Label& fail = continueInVm ? helpers.exitContinueVmClearNativeFlag : getTargetLabel(inst.c, fresh); if (tagOp(inst.b) == 0) { build.cbnz(regOp(inst.a), fail); @@ -1040,55 +1053,43 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) build.cmp(regOp(inst.a), tagOp(inst.b)); build.b(ConditionA64::NotEqual, fail); } - if (abort.id && !continueInVm) - emitAbort(build, abort); + if (!continueInVm) + finalizeTargetLabel(inst.c, fresh); break; } case IrCmd::CHECK_READONLY: { - Label abort; // used when guard aborts execution + Label fresh; // used when guard aborts execution or jumps to a VM exit RegisterA64 temp = regs.allocTemp(KindA64::w); build.ldrb(temp, mem(regOp(inst.a), offsetof(Table, readonly))); - build.cbnz(temp, inst.b.kind == IrOpKind::Undef ? abort : labelOp(inst.b)); - if (abort.id) - emitAbort(build, abort); + build.cbnz(temp, getTargetLabel(inst.b, fresh)); + finalizeTargetLabel(inst.b, fresh); break; } case IrCmd::CHECK_NO_METATABLE: { - Label abort; // used when guard aborts execution + Label fresh; // used when guard aborts execution or jumps to a VM exit RegisterA64 temp = regs.allocTemp(KindA64::x); build.ldr(temp, mem(regOp(inst.a), offsetof(Table, metatable))); - build.cbnz(temp, inst.b.kind == IrOpKind::Undef ? abort : labelOp(inst.b)); - if (abort.id) - emitAbort(build, abort); + build.cbnz(temp, getTargetLabel(inst.b, fresh)); + finalizeTargetLabel(inst.b, fresh); break; } case IrCmd::CHECK_SAFE_ENV: { - Label abort; // used when guard aborts execution + Label fresh; // used when guard aborts execution or jumps to a VM exit RegisterA64 temp = regs.allocTemp(KindA64::x); RegisterA64 tempw = castReg(KindA64::w, temp); build.ldr(temp, mem(rClosure, offsetof(Closure, env))); build.ldrb(tempw, mem(temp, offsetof(Table, safeenv))); - - if (inst.a.kind == IrOpKind::Undef) - { - build.cbz(tempw, abort); - emitAbort(build, abort); - } - else - { - Label self; - build.cbz(tempw, self); - exitHandlers.push_back({self, uintOp(inst.a)}); - } + build.cbz(tempw, getTargetLabel(inst.a, fresh)); + finalizeTargetLabel(inst.a, fresh); break; } case IrCmd::CHECK_ARRAY_SIZE: { - Label abort; // used when guard aborts execution - Label& fail = inst.c.kind == IrOpKind::Undef ? abort : labelOp(inst.c); + Label fresh; // used when guard aborts execution or jumps to a VM exit + Label& fail = getTargetLabel(inst.c, fresh); RegisterA64 temp = regs.allocTemp(KindA64::w); build.ldr(temp, mem(regOp(inst.a), offsetof(Table, sizearray))); @@ -1120,8 +1121,7 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) else LUAU_ASSERT(!"Unsupported instruction form"); - if (abort.id) - emitAbort(build, abort); + finalizeTargetLabel(inst.c, fresh); break; } case IrCmd::JUMP_SLOT_MATCH: @@ -1158,15 +1158,13 @@ void IrLoweringA64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) } case IrCmd::CHECK_NODE_NO_NEXT: { - Label abort; // used when guard aborts execution + Label fresh; // used when guard aborts execution or jumps to a VM exit RegisterA64 temp = regs.allocTemp(KindA64::w); build.ldr(temp, mem(regOp(inst.a), offsetof(LuaNode, key) + kOffsetOfTKeyTagNext)); build.lsr(temp, temp, kTKeyTagBits); - build.cbnz(temp, inst.b.kind == IrOpKind::Undef ? abort : labelOp(inst.b)); - - if (abort.id) - emitAbort(build, abort); + build.cbnz(temp, getTargetLabel(inst.b, fresh)); + finalizeTargetLabel(inst.b, fresh); break; } case IrCmd::INTERRUPT: @@ -1799,6 +1797,35 @@ void IrLoweringA64::jumpOrFallthrough(IrBlock& target, IrBlock& next) build.b(target.label); } +Label& IrLoweringA64::getTargetLabel(IrOp op, Label& fresh) +{ + if (op.kind == IrOpKind::Undef) + return fresh; + + if (op.kind == IrOpKind::VmExit) + { + if (uint32_t* index = exitHandlerMap.find(op.index)) + return exitHandlers[*index].self; + + return fresh; + } + + return labelOp(op); +} + +void IrLoweringA64::finalizeTargetLabel(IrOp op, Label& fresh) +{ + if (op.kind == IrOpKind::Undef) + { + emitAbort(build, fresh); + } + else if (op.kind == IrOpKind::VmExit && fresh.id != 0) + { + exitHandlerMap[op.index] = uint32_t(exitHandlers.size()); + exitHandlers.push_back({fresh, op.index}); + } +} + RegisterA64 IrLoweringA64::tempDouble(IrOp op) { if (op.kind == IrOpKind::Inst) diff --git a/CodeGen/src/IrLoweringA64.h b/CodeGen/src/IrLoweringA64.h index 5b196889..72b0da2f 100644 --- a/CodeGen/src/IrLoweringA64.h +++ b/CodeGen/src/IrLoweringA64.h @@ -2,6 +2,7 @@ #pragma once #include "Luau/AssemblyBuilderA64.h" +#include "Luau/DenseHash.h" #include "Luau/IrData.h" #include "IrRegAllocA64.h" @@ -33,6 +34,9 @@ struct IrLoweringA64 bool isFallthroughBlock(IrBlock target, IrBlock next); void jumpOrFallthrough(IrBlock& target, IrBlock& next); + Label& getTargetLabel(IrOp op, Label& fresh); + void finalizeTargetLabel(IrOp op, Label& fresh); + // Operand data build helpers // May emit data/address synthesis instructions RegisterA64 tempDouble(IrOp op); @@ -77,6 +81,7 @@ struct IrLoweringA64 std::vector interruptHandlers; std::vector exitHandlers; + DenseHashMap exitHandlerMap; bool error = false; }; diff --git a/CodeGen/src/IrLoweringX64.cpp b/CodeGen/src/IrLoweringX64.cpp index 813f5123..670d6066 100644 --- a/CodeGen/src/IrLoweringX64.cpp +++ b/CodeGen/src/IrLoweringX64.cpp @@ -28,6 +28,7 @@ IrLoweringX64::IrLoweringX64(AssemblyBuilderX64& build, ModuleHelpers& helpers, , function(function) , regs(build, function) , valueTracker(function) + , exitHandlerMap(~0u) { // In order to allocate registers during lowering, we need to know where instruction results are last used updateLastUseLocations(function); @@ -492,8 +493,17 @@ void IrLoweringX64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) build.jcc(ConditionX64::NotEqual, savezero); } - build.cmp(regOp(inst.b), 0); - build.jcc(ConditionX64::Equal, saveone); + if (inst.b.kind == IrOpKind::Constant) + { + // If value is 1, we fallthrough to storing 0 + if (intOp(inst.b) == 0) + build.jmp(saveone); + } + else + { + build.cmp(regOp(inst.b), 0); + build.jcc(ConditionX64::Equal, saveone); + } build.setLabel(savezero); build.mov(inst.regX64, 0); @@ -506,7 +516,24 @@ void IrLoweringX64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) break; } case IrCmd::JUMP: - jumpOrFallthrough(blockOp(inst.a), next); + if (inst.a.kind == IrOpKind::VmExit) + { + if (uint32_t* index = exitHandlerMap.find(inst.a.index)) + { + build.jmp(exitHandlers[*index].self); + } + else + { + Label self; + build.jmp(self); + exitHandlerMap[inst.a.index] = uint32_t(exitHandlers.size()); + exitHandlers.push_back({self, inst.a.index}); + } + } + else + { + jumpOrFallthrough(blockOp(inst.a), next); + } break; case IrCmd::JUMP_IF_TRUTHY: jumpIfTruthy(build, vmRegOp(inst.a), labelOp(inst.b), labelOp(inst.c)); @@ -907,19 +934,7 @@ void IrLoweringX64::lowerInst(IrInst& inst, uint32_t index, IrBlock& next) build.mov(tmp.reg, qword[tmp.reg + offsetof(Closure, env)]); build.cmp(byte[tmp.reg + offsetof(Table, safeenv)], 0); - if (inst.a.kind == IrOpKind::Undef) - { - Label skip; - build.jcc(ConditionX64::NotEqual, skip); - build.ud2(); - build.setLabel(skip); - } - else - { - Label self; - build.jcc(ConditionX64::Equal, self); - exitHandlers.push_back({self, uintOp(inst.a)}); - } + jumpOrAbortOnUndef(ConditionX64::Equal, ConditionX64::NotEqual, inst.a); break; } case IrCmd::CHECK_ARRAY_SIZE: @@ -1473,6 +1488,20 @@ void IrLoweringX64::jumpOrAbortOnUndef(ConditionX64 cond, ConditionX64 condInver build.ud2(); build.setLabel(skip); } + else if (targetOrUndef.kind == IrOpKind::VmExit) + { + if (uint32_t* index = exitHandlerMap.find(targetOrUndef.index)) + { + build.jcc(cond, exitHandlers[*index].self); + } + else + { + Label self; + build.jcc(cond, self); + exitHandlerMap[targetOrUndef.index] = uint32_t(exitHandlers.size()); + exitHandlers.push_back({self, targetOrUndef.index}); + } + } else { build.jcc(cond, labelOp(targetOrUndef)); diff --git a/CodeGen/src/IrLoweringX64.h b/CodeGen/src/IrLoweringX64.h index 8ea4b41e..a8dab3c9 100644 --- a/CodeGen/src/IrLoweringX64.h +++ b/CodeGen/src/IrLoweringX64.h @@ -2,6 +2,7 @@ #pragma once #include "Luau/AssemblyBuilderX64.h" +#include "Luau/DenseHash.h" #include "Luau/IrData.h" #include "Luau/IrRegAllocX64.h" @@ -77,6 +78,7 @@ struct IrLoweringX64 std::vector interruptHandlers; std::vector exitHandlers; + DenseHashMap exitHandlerMap; }; } // namespace X64 diff --git a/CodeGen/src/IrTranslateBuiltins.cpp b/CodeGen/src/IrTranslateBuiltins.cpp index 960be4ed..73055c39 100644 --- a/CodeGen/src/IrTranslateBuiltins.cpp +++ b/CodeGen/src/IrTranslateBuiltins.cpp @@ -18,12 +18,12 @@ namespace Luau namespace CodeGen { -static void builtinCheckDouble(IrBuilder& build, IrOp arg, IrOp fallback) +static void builtinCheckDouble(IrBuilder& build, IrOp arg, int pcpos) { if (arg.kind == IrOpKind::Constant) LUAU_ASSERT(build.function.constOp(arg).kind == IrConstKind::Double); else - build.loadAndCheckTag(arg, LUA_TNUMBER, fallback); + build.loadAndCheckTag(arg, LUA_TNUMBER, build.vmExit(pcpos)); } static IrOp builtinLoadDouble(IrBuilder& build, IrOp arg) @@ -38,27 +38,27 @@ static IrOp builtinLoadDouble(IrBuilder& build, IrOp arg) // (number, ...) -> number static BuiltinImplResult translateBuiltinNumberToNumber( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); build.inst(IrCmd::FASTCALL, build.constUint(bfid), build.vmReg(ra), build.vmReg(arg), args, build.constInt(1), build.constInt(1)); if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinNumberToNumberLibm( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp res = build.inst(IrCmd::INVOKE_LIBM, build.constUint(bfid), va); @@ -68,17 +68,17 @@ static BuiltinImplResult translateBuiltinNumberToNumberLibm( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltin2NumberToNumberLibm( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -90,17 +90,17 @@ static BuiltinImplResult translateBuiltin2NumberToNumberLibm( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinMathLdexp( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -114,17 +114,17 @@ static BuiltinImplResult translateBuiltinMathLdexp( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } // (number, ...) -> (number, number) static BuiltinImplResult translateBuiltinNumberTo2Number( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 2) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); build.inst( IrCmd::FASTCALL, build.constUint(bfid), build.vmReg(ra), build.vmReg(arg), args, build.constInt(1), build.constInt(nresults == 1 ? 1 : 2)); @@ -134,7 +134,7 @@ static BuiltinImplResult translateBuiltinNumberTo2Number( if (nresults != 1) build.inst(IrCmd::STORE_TAG, build.vmReg(ra + 1), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 2}; + return {BuiltinImplType::Full, 2}; } static BuiltinImplResult translateBuiltinAssert(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) @@ -151,12 +151,12 @@ static BuiltinImplResult translateBuiltinAssert(IrBuilder& build, int nparams, i return {BuiltinImplType::UsesFallback, 0}; } -static BuiltinImplResult translateBuiltinMathDeg(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathDeg(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); const double rpd = (3.14159265358979323846 / 180.0); @@ -167,15 +167,15 @@ static BuiltinImplResult translateBuiltinMathDeg(IrBuilder& build, int nparams, if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinMathRad(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathRad(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); const double rpd = (3.14159265358979323846 / 180.0); @@ -186,11 +186,11 @@ static BuiltinImplResult translateBuiltinMathRad(IrBuilder& build, int nparams, if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinMathLog( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; @@ -213,7 +213,7 @@ static BuiltinImplResult translateBuiltinMathLog( denom = log(*y); } - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); @@ -227,19 +227,19 @@ static BuiltinImplResult translateBuiltinMathLog( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinMathMin(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathMin(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nparams > kMinMaxUnrolledParams || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); for (int i = 3; i <= nparams; ++i) - builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), fallback); + builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), pcpos); IrOp varg1 = builtinLoadDouble(build, build.vmReg(arg)); IrOp varg2 = builtinLoadDouble(build, args); @@ -257,19 +257,19 @@ static BuiltinImplResult translateBuiltinMathMin(IrBuilder& build, int nparams, if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinMathMax(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathMax(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nparams > kMinMaxUnrolledParams || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); for (int i = 3; i <= nparams; ++i) - builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), fallback); + builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), pcpos); IrOp varg1 = builtinLoadDouble(build, build.vmReg(arg)); IrOp varg2 = builtinLoadDouble(build, args); @@ -287,10 +287,10 @@ static BuiltinImplResult translateBuiltinMathMax(IrBuilder& build, int nparams, if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinMathClamp(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathClamp(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback, int pcpos) { if (nparams < 3 || nresults > 1) return {BuiltinImplType::None, -1}; @@ -299,9 +299,9 @@ static BuiltinImplResult translateBuiltinMathClamp(IrBuilder& build, int nparams LUAU_ASSERT(args.kind == IrOpKind::VmReg); - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); - builtinCheckDouble(build, build.vmReg(vmRegOp(args) + 1), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); + builtinCheckDouble(build, build.vmReg(vmRegOp(args) + 1), pcpos); IrOp min = builtinLoadDouble(build, args); IrOp max = builtinLoadDouble(build, build.vmReg(vmRegOp(args) + 1)); @@ -321,12 +321,12 @@ static BuiltinImplResult translateBuiltinMathClamp(IrBuilder& build, int nparams return {BuiltinImplType::UsesFallback, 1}; } -static BuiltinImplResult translateBuiltinMathUnary(IrBuilder& build, IrCmd cmd, int nparams, int ra, int arg, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinMathUnary(IrBuilder& build, IrCmd cmd, int nparams, int ra, int arg, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp varg = builtinLoadDouble(build, build.vmReg(arg)); IrOp result = build.inst(cmd, varg); @@ -336,10 +336,10 @@ static BuiltinImplResult translateBuiltinMathUnary(IrBuilder& build, IrCmd cmd, if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinType(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinType(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; @@ -350,10 +350,10 @@ static BuiltinImplResult translateBuiltinType(IrBuilder& build, int nparams, int build.inst(IrCmd::STORE_POINTER, build.vmReg(ra), name); build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TSTRING)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinTypeof(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinTypeof(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; @@ -363,20 +363,20 @@ static BuiltinImplResult translateBuiltinTypeof(IrBuilder& build, int nparams, i build.inst(IrCmd::STORE_POINTER, build.vmReg(ra), name); build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TSTRING)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32BinaryOp( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nparams > kBit32BinaryOpUnrolledParams || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); for (int i = 3; i <= nparams; ++i) - builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), fallback); + builtinCheckDouble(build, build.vmReg(vmRegOp(args) + (i - 2)), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -433,16 +433,16 @@ static BuiltinImplResult translateBuiltinBit32BinaryOp( build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); } - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32Bnot( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vaui = build.inst(IrCmd::NUM_TO_UINT, va); @@ -454,19 +454,19 @@ static BuiltinImplResult translateBuiltinBit32Bnot( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32Shift( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; IrOp block = build.block(IrBlockKind::Internal); - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -499,13 +499,13 @@ static BuiltinImplResult translateBuiltinBit32Shift( } static BuiltinImplResult translateBuiltinBit32Rotate( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -522,17 +522,17 @@ static BuiltinImplResult translateBuiltinBit32Rotate( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32Extract( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -553,7 +553,7 @@ static BuiltinImplResult translateBuiltinBit32Extract( } else { - builtinCheckDouble(build, build.vmReg(args.index + 1), fallback); + builtinCheckDouble(build, build.vmReg(args.index + 1), pcpos); IrOp vc = builtinLoadDouble(build, build.vmReg(args.index + 1)); IrOp w = build.inst(IrCmd::NUM_TO_INT, vc); @@ -586,12 +586,12 @@ static BuiltinImplResult translateBuiltinBit32Extract( } static BuiltinImplResult translateBuiltinBit32ExtractK( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 2 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp n = build.inst(IrCmd::NUM_TO_UINT, va); @@ -613,16 +613,16 @@ static BuiltinImplResult translateBuiltinBit32ExtractK( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32Countz( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vaui = build.inst(IrCmd::NUM_TO_UINT, va); @@ -637,18 +637,18 @@ static BuiltinImplResult translateBuiltinBit32Countz( if (ra != arg) build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } static BuiltinImplResult translateBuiltinBit32Replace( - IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) + IrBuilder& build, LuauBuiltinFunction bfid, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback, int pcpos) { if (nparams < 3 || nresults > 1) return {BuiltinImplType::None, -1}; - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); - builtinCheckDouble(build, build.vmReg(args.index + 1), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); + builtinCheckDouble(build, build.vmReg(args.index + 1), pcpos); IrOp va = builtinLoadDouble(build, build.vmReg(arg)); IrOp vb = builtinLoadDouble(build, args); @@ -678,7 +678,7 @@ static BuiltinImplResult translateBuiltinBit32Replace( } else { - builtinCheckDouble(build, build.vmReg(args.index + 2), fallback); + builtinCheckDouble(build, build.vmReg(args.index + 2), pcpos); IrOp vd = builtinLoadDouble(build, build.vmReg(args.index + 2)); IrOp w = build.inst(IrCmd::NUM_TO_INT, vd); @@ -716,16 +716,16 @@ static BuiltinImplResult translateBuiltinBit32Replace( return {BuiltinImplType::UsesFallback, 1}; } -static BuiltinImplResult translateBuiltinVector(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinVector(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 3 || nresults > 1) return {BuiltinImplType::None, -1}; LUAU_ASSERT(LUA_VECTOR_SIZE == 3); - builtinCheckDouble(build, build.vmReg(arg), fallback); - builtinCheckDouble(build, args, fallback); - builtinCheckDouble(build, build.vmReg(vmRegOp(args) + 1), fallback); + builtinCheckDouble(build, build.vmReg(arg), pcpos); + builtinCheckDouble(build, args, pcpos); + builtinCheckDouble(build, build.vmReg(vmRegOp(args) + 1), pcpos); IrOp x = builtinLoadDouble(build, build.vmReg(arg)); IrOp y = builtinLoadDouble(build, args); @@ -734,15 +734,15 @@ static BuiltinImplResult translateBuiltinVector(IrBuilder& build, int nparams, i build.inst(IrCmd::STORE_VECTOR, build.vmReg(ra), x, y, z); build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TVECTOR)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -static BuiltinImplResult translateBuiltinStringLen(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback) +static BuiltinImplResult translateBuiltinStringLen(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, int pcpos) { if (nparams < 1 || nresults > 1) return {BuiltinImplType::None, -1}; - build.loadAndCheckTag(build.vmReg(arg), LUA_TSTRING, fallback); + build.loadAndCheckTag(build.vmReg(arg), LUA_TSTRING, build.vmExit(pcpos)); IrOp ts = build.inst(IrCmd::LOAD_POINTER, build.vmReg(arg)); @@ -751,10 +751,10 @@ static BuiltinImplResult translateBuiltinStringLen(IrBuilder& build, int nparams build.inst(IrCmd::STORE_DOUBLE, build.vmReg(ra), build.inst(IrCmd::INT_TO_NUM, len)); build.inst(IrCmd::STORE_TAG, build.vmReg(ra), build.constTag(LUA_TNUMBER)); - return {BuiltinImplType::UsesFallback, 1}; + return {BuiltinImplType::Full, 1}; } -BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, IrOp args, int nparams, int nresults, IrOp fallback) +BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, IrOp args, int nparams, int nresults, IrOp fallback, int pcpos) { // Builtins are not allowed to handle variadic arguments if (nparams == LUA_MULTRET) @@ -765,27 +765,27 @@ BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, case LBF_ASSERT: return translateBuiltinAssert(build, nparams, ra, arg, args, nresults, fallback); case LBF_MATH_DEG: - return translateBuiltinMathDeg(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathDeg(build, nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_RAD: - return translateBuiltinMathRad(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathRad(build, nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_LOG: - return translateBuiltinMathLog(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathLog(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_MIN: - return translateBuiltinMathMin(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathMin(build, nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_MAX: - return translateBuiltinMathMax(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathMax(build, nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_CLAMP: - return translateBuiltinMathClamp(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathClamp(build, nparams, ra, arg, args, nresults, fallback, pcpos); case LBF_MATH_FLOOR: - return translateBuiltinMathUnary(build, IrCmd::FLOOR_NUM, nparams, ra, arg, nresults, fallback); + return translateBuiltinMathUnary(build, IrCmd::FLOOR_NUM, nparams, ra, arg, nresults, pcpos); case LBF_MATH_CEIL: - return translateBuiltinMathUnary(build, IrCmd::CEIL_NUM, nparams, ra, arg, nresults, fallback); + return translateBuiltinMathUnary(build, IrCmd::CEIL_NUM, nparams, ra, arg, nresults, pcpos); case LBF_MATH_SQRT: - return translateBuiltinMathUnary(build, IrCmd::SQRT_NUM, nparams, ra, arg, nresults, fallback); + return translateBuiltinMathUnary(build, IrCmd::SQRT_NUM, nparams, ra, arg, nresults, pcpos); case LBF_MATH_ABS: - return translateBuiltinMathUnary(build, IrCmd::ABS_NUM, nparams, ra, arg, nresults, fallback); + return translateBuiltinMathUnary(build, IrCmd::ABS_NUM, nparams, ra, arg, nresults, pcpos); case LBF_MATH_ROUND: - return translateBuiltinMathUnary(build, IrCmd::ROUND_NUM, nparams, ra, arg, nresults, fallback); + return translateBuiltinMathUnary(build, IrCmd::ROUND_NUM, nparams, ra, arg, nresults, pcpos); case LBF_MATH_EXP: case LBF_MATH_ASIN: case LBF_MATH_SIN: @@ -797,49 +797,49 @@ BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, case LBF_MATH_TAN: case LBF_MATH_TANH: case LBF_MATH_LOG10: - return translateBuiltinNumberToNumberLibm(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinNumberToNumberLibm(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_SIGN: - return translateBuiltinNumberToNumber(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinNumberToNumber(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_POW: case LBF_MATH_FMOD: case LBF_MATH_ATAN2: - return translateBuiltin2NumberToNumberLibm(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltin2NumberToNumberLibm(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_LDEXP: - return translateBuiltinMathLdexp(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinMathLdexp(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_MATH_FREXP: case LBF_MATH_MODF: - return translateBuiltinNumberTo2Number(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinNumberTo2Number(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_BAND: case LBF_BIT32_BOR: case LBF_BIT32_BXOR: case LBF_BIT32_BTEST: - return translateBuiltinBit32BinaryOp(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32BinaryOp(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_BNOT: - return translateBuiltinBit32Bnot(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Bnot(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_LSHIFT: case LBF_BIT32_RSHIFT: case LBF_BIT32_ARSHIFT: - return translateBuiltinBit32Shift(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Shift(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback, pcpos); case LBF_BIT32_LROTATE: case LBF_BIT32_RROTATE: - return translateBuiltinBit32Rotate(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Rotate(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_EXTRACT: - return translateBuiltinBit32Extract(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Extract(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback, pcpos); case LBF_BIT32_EXTRACTK: - return translateBuiltinBit32ExtractK(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32ExtractK(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_COUNTLZ: case LBF_BIT32_COUNTRZ: - return translateBuiltinBit32Countz(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Countz(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, pcpos); case LBF_BIT32_REPLACE: - return translateBuiltinBit32Replace(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback); + return translateBuiltinBit32Replace(build, LuauBuiltinFunction(bfid), nparams, ra, arg, args, nresults, fallback, pcpos); case LBF_TYPE: - return translateBuiltinType(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinType(build, nparams, ra, arg, args, nresults); case LBF_TYPEOF: - return translateBuiltinTypeof(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinTypeof(build, nparams, ra, arg, args, nresults); case LBF_VECTOR: - return translateBuiltinVector(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinVector(build, nparams, ra, arg, args, nresults, pcpos); case LBF_STRING_LEN: - return translateBuiltinStringLen(build, nparams, ra, arg, args, nresults, fallback); + return translateBuiltinStringLen(build, nparams, ra, arg, args, nresults, pcpos); default: return {BuiltinImplType::None, -1}; } diff --git a/CodeGen/src/IrTranslateBuiltins.h b/CodeGen/src/IrTranslateBuiltins.h index 945b32f3..8ae64b94 100644 --- a/CodeGen/src/IrTranslateBuiltins.h +++ b/CodeGen/src/IrTranslateBuiltins.h @@ -13,6 +13,7 @@ enum class BuiltinImplType { None, UsesFallback, // Uses fallback for unsupported cases + Full, // Is either implemented in full, or exits to VM }; struct BuiltinImplResult @@ -21,7 +22,7 @@ struct BuiltinImplResult int actualResultCount; }; -BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, IrOp args, int nparams, int nresults, IrOp fallback); +BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, IrOp args, int nparams, int nresults, IrOp fallback, int pcpos); } // namespace CodeGen } // namespace Luau diff --git a/CodeGen/src/IrTranslation.cpp b/CodeGen/src/IrTranslation.cpp index 3cbcd3cb..5cde510f 100644 --- a/CodeGen/src/IrTranslation.cpp +++ b/CodeGen/src/IrTranslation.cpp @@ -514,7 +514,7 @@ void translateInstCloseUpvals(IrBuilder& build, const Instruction* pc) build.inst(IrCmd::CLOSE_UPVALS, build.vmReg(ra)); } -void translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool customParams, int customParamCount, IrOp customArgs, IrOp next) +IrOp translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool customParams, int customParamCount, IrOp customArgs) { LuauOpcode opcode = LuauOpcode(LUAU_INSN_OP(*pc)); int bfid = LUAU_INSN_A(*pc); @@ -542,16 +542,25 @@ void translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool IrOp fallback = build.block(IrBlockKind::Fallback); // In unsafe environment, instead of retrying fastcall at 'pcpos' we side-exit directly to fallback sequence - build.inst(IrCmd::CHECK_SAFE_ENV, build.constUint(pcpos + getOpLength(opcode))); + build.inst(IrCmd::CHECK_SAFE_ENV, build.vmExit(pcpos + getOpLength(opcode))); - BuiltinImplResult br = translateBuiltin(build, LuauBuiltinFunction(bfid), ra, arg, builtinArgs, nparams, nresults, fallback); + BuiltinImplResult br = + translateBuiltin(build, LuauBuiltinFunction(bfid), ra, arg, builtinArgs, nparams, nresults, fallback, pcpos + getOpLength(opcode)); - if (br.type == BuiltinImplType::UsesFallback) + if (br.type != BuiltinImplType::None) { LUAU_ASSERT(nparams != LUA_MULTRET && "builtins are not allowed to handle variadic arguments"); if (nresults == LUA_MULTRET) build.inst(IrCmd::ADJUST_STACK_TO_REG, build.vmReg(ra), build.constInt(br.actualResultCount)); + + if (br.type != BuiltinImplType::UsesFallback) + { + // We ended up not using the fallback block, kill it + build.function.blockOp(fallback).kind = IrBlockKind::Dead; + + return build.undef(); + } } else { @@ -568,10 +577,7 @@ void translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool build.inst(IrCmd::ADJUST_STACK_TO_TOP); } - build.inst(IrCmd::JUMP, next); - - // this will be filled with IR corresponding to instructions after FASTCALL until skip+1 - build.beginBlock(fallback); + return fallback; } void translateInstForNPrep(IrBuilder& build, const Instruction* pc, int pcpos) @@ -670,7 +676,7 @@ void translateInstForGPrepNext(IrBuilder& build, const Instruction* pc, int pcpo IrOp fallback = build.block(IrBlockKind::Fallback); // fast-path: pairs/next - build.inst(IrCmd::CHECK_SAFE_ENV, build.constUint(pcpos)); + build.inst(IrCmd::CHECK_SAFE_ENV, build.vmExit(pcpos)); IrOp tagB = build.inst(IrCmd::LOAD_TAG, build.vmReg(ra + 1)); build.inst(IrCmd::CHECK_TAG, tagB, build.constTag(LUA_TTABLE), fallback); IrOp tagC = build.inst(IrCmd::LOAD_TAG, build.vmReg(ra + 2)); @@ -697,7 +703,7 @@ void translateInstForGPrepInext(IrBuilder& build, const Instruction* pc, int pcp IrOp finish = build.block(IrBlockKind::Internal); // fast-path: ipairs/inext - build.inst(IrCmd::CHECK_SAFE_ENV, build.constUint(pcpos)); + build.inst(IrCmd::CHECK_SAFE_ENV, build.vmExit(pcpos)); IrOp tagB = build.inst(IrCmd::LOAD_TAG, build.vmReg(ra + 1)); build.inst(IrCmd::CHECK_TAG, tagB, build.constTag(LUA_TTABLE), fallback); IrOp tagC = build.inst(IrCmd::LOAD_TAG, build.vmReg(ra + 2)); @@ -923,7 +929,7 @@ void translateInstGetImport(IrBuilder& build, const Instruction* pc, int pcpos) IrOp fastPath = build.block(IrBlockKind::Internal); IrOp fallback = build.block(IrBlockKind::Fallback); - build.inst(IrCmd::CHECK_SAFE_ENV, build.constUint(pcpos)); + build.inst(IrCmd::CHECK_SAFE_ENV, build.vmExit(pcpos)); // note: if import failed, k[] is nil; we could check this during codegen, but we instead use runtime fallback // this allows us to handle ahead-of-time codegen smoothly when an import fails to resolve at runtime diff --git a/CodeGen/src/IrTranslation.h b/CodeGen/src/IrTranslation.h index 38dcdd40..0c24b27d 100644 --- a/CodeGen/src/IrTranslation.h +++ b/CodeGen/src/IrTranslation.h @@ -45,7 +45,7 @@ void translateInstDupTable(IrBuilder& build, const Instruction* pc, int pcpos); void translateInstGetUpval(IrBuilder& build, const Instruction* pc, int pcpos); void translateInstSetUpval(IrBuilder& build, const Instruction* pc, int pcpos); void translateInstCloseUpvals(IrBuilder& build, const Instruction* pc); -void translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool customParams, int customParamCount, IrOp customArgs, IrOp next); +IrOp translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool customParams, int customParamCount, IrOp customArgs); void translateInstForNPrep(IrBuilder& build, const Instruction* pc, int pcpos); void translateInstForNLoop(IrBuilder& build, const Instruction* pc, int pcpos); void translateInstForGPrepNext(IrBuilder& build, const Instruction* pc, int pcpos); diff --git a/CodeGen/src/OptimizeConstProp.cpp b/CodeGen/src/OptimizeConstProp.cpp index eeedd6cb..72869ad1 100644 --- a/CodeGen/src/OptimizeConstProp.cpp +++ b/CodeGen/src/OptimizeConstProp.cpp @@ -977,7 +977,7 @@ static void constPropInBlockChain(IrBuilder& build, std::vector& visite // Unconditional jump into a block with a single user (current block) allows us to continue optimization // with the information we have gathered so far (unless we have already visited that block earlier) - if (termInst.cmd == IrCmd::JUMP) + if (termInst.cmd == IrCmd::JUMP && termInst.a.kind != IrOpKind::VmExit) { IrBlock& target = function.blockOp(termInst.a); uint32_t targetIdx = function.getBlockIndex(target); @@ -1011,7 +1011,7 @@ static std::vector collectDirectBlockJumpPath(IrFunction& function, st IrBlock* nextBlock = nullptr; // A chain is made from internal blocks that were not a part of bytecode CFG - if (termInst.cmd == IrCmd::JUMP) + if (termInst.cmd == IrCmd::JUMP && termInst.a.kind != IrOpKind::VmExit) { IrBlock& target = function.blockOp(termInst.a); uint32_t targetIdx = function.getBlockIndex(target); @@ -1052,6 +1052,10 @@ static void tryCreateLinearBlock(IrBuilder& build, std::vector& visited if (termInst.cmd != IrCmd::JUMP) return; + // And it can't be jump to a VM exit + if (termInst.a.kind == IrOpKind::VmExit) + return; + // And it has to jump to a block with more than one user // If there's only one use, it should already be optimized by constPropInBlockChain if (function.blockOp(termInst.a).useCount == 1) @@ -1084,7 +1088,8 @@ static void tryCreateLinearBlock(IrBuilder& build, std::vector& visited build.beginBlock(newBlock); - // By default, blocks are ordered according to start instruction; we alter sort order to make sure linearized block is placed right after the starting block + // By default, blocks are ordered according to start instruction; we alter sort order to make sure linearized block is placed right after the + // starting block function.blocks[newBlock.index].sortkey = startingInsn + 1; replace(function, termInst.a, newBlock); diff --git a/Common/include/Luau/Bytecode.h b/Common/include/Luau/Bytecode.h index eab57b17..7b3a057b 100644 --- a/Common/include/Luau/Bytecode.h +++ b/Common/include/Luau/Bytecode.h @@ -428,7 +428,7 @@ enum LuauBytecodeTag }; // Type table tags -enum LuauBytecodeEncodedType +enum LuauBytecodeType { LBC_TYPE_NIL = 0, LBC_TYPE_BOOLEAN, diff --git a/Compiler/include/Luau/BytecodeBuilder.h b/Compiler/include/Luau/BytecodeBuilder.h index f3c2f47d..3044e448 100644 --- a/Compiler/include/Luau/BytecodeBuilder.h +++ b/Compiler/include/Luau/BytecodeBuilder.h @@ -47,7 +47,7 @@ public: BytecodeBuilder(BytecodeEncoder* encoder = 0); uint32_t beginFunction(uint8_t numparams, bool isvararg = false); - void endFunction(uint8_t maxstacksize, uint8_t numupvalues); + void endFunction(uint8_t maxstacksize, uint8_t numupvalues, uint8_t flags = 0); void setMainFunction(uint32_t fid); @@ -274,7 +274,7 @@ private: void dumpConstant(std::string& result, int k) const; void dumpInstruction(const uint32_t* opcode, std::string& output, int targetLabel) const; - void writeFunction(std::string& ss, uint32_t id) const; + void writeFunction(std::string& ss, uint32_t id, uint8_t flags) const; void writeLineInfo(std::string& ss) const; void writeStringTable(std::string& ss) const; diff --git a/Compiler/include/Luau/Compiler.h b/Compiler/include/Luau/Compiler.h index eec70d7a..36a21a72 100644 --- a/Compiler/include/Luau/Compiler.h +++ b/Compiler/include/Luau/Compiler.h @@ -35,6 +35,9 @@ struct CompileOptions const char* vectorLib = nullptr; const char* vectorCtor = nullptr; + // vector type name for type tables; disabled by default + const char* vectorType = nullptr; + // null-terminated array of globals that are mutable; disables the import optimization for fields accessed through these const char** mutableGlobals = nullptr; }; diff --git a/Compiler/include/luacode.h b/Compiler/include/luacode.h index 5f69f69e..7c59ce0b 100644 --- a/Compiler/include/luacode.h +++ b/Compiler/include/luacode.h @@ -31,6 +31,9 @@ struct lua_CompileOptions const char* vectorLib; const char* vectorCtor; + // vector type name for type tables; disabled by default + const char* vectorType; + // null-terminated array of globals that are mutable; disables the import optimization for fields accessed through these const char** mutableGlobals; }; diff --git a/Compiler/src/BytecodeBuilder.cpp b/Compiler/src/BytecodeBuilder.cpp index 8d360f87..eeb9c10e 100644 --- a/Compiler/src/BytecodeBuilder.cpp +++ b/Compiler/src/BytecodeBuilder.cpp @@ -249,7 +249,7 @@ uint32_t BytecodeBuilder::beginFunction(uint8_t numparams, bool isvararg) return id; } -void BytecodeBuilder::endFunction(uint8_t maxstacksize, uint8_t numupvalues) +void BytecodeBuilder::endFunction(uint8_t maxstacksize, uint8_t numupvalues, uint8_t flags) { LUAU_ASSERT(currentFunction != ~0u); @@ -265,7 +265,7 @@ void BytecodeBuilder::endFunction(uint8_t maxstacksize, uint8_t numupvalues) // very approximate: 4 bytes per instruction for code, 1 byte for debug line, and 1-2 bytes for aux data like constants plus overhead func.data.reserve(32 + insns.size() * 7); - writeFunction(func.data, currentFunction); + writeFunction(func.data, currentFunction, flags); currentFunction = ~0u; @@ -631,7 +631,7 @@ void BytecodeBuilder::finalize() writeVarInt(bytecode, mainFunction); } -void BytecodeBuilder::writeFunction(std::string& ss, uint32_t id) const +void BytecodeBuilder::writeFunction(std::string& ss, uint32_t id, uint8_t flags) const { LUAU_ASSERT(id < functions.size()); const Function& func = functions[id]; @@ -644,7 +644,7 @@ void BytecodeBuilder::writeFunction(std::string& ss, uint32_t id) const if (FFlag::BytecodeVersion4) { - writeByte(ss, 0); // Reserved for cgflags + writeByte(ss, flags); writeVarInt(ss, uint32_t(func.typeinfo.size())); ss.append(func.typeinfo); @@ -1213,10 +1213,15 @@ void BytecodeBuilder::validateInstructions() const break; case LOP_GETIMPORT: + { VREG(LUAU_INSN_A(insn)); VCONST(LUAU_INSN_D(insn), Import); - // TODO: check insn[i + 1] for conformance with 10-bit import encoding - break; + uint32_t id = insns[i + 1]; + LUAU_ASSERT((id >> 30) != 0); // import chain with length 1-3 + for (unsigned int j = 0; j < (id >> 30); ++j) + VCONST((id >> (20 - 10 * j)) & 1023, String); + } + break; case LOP_GETTABLE: case LOP_SETTABLE: diff --git a/Compiler/src/Compiler.cpp b/Compiler/src/Compiler.cpp index 83aad3d8..fe65f67a 100644 --- a/Compiler/src/Compiler.cpp +++ b/Compiler/src/Compiler.cpp @@ -3874,7 +3874,7 @@ void compileOrThrow(BytecodeBuilder& bytecode, const ParseResult& parseResult, c if (FFlag::LuauCompileFunctionType) { - buildTypeMap(compiler.typeMap, root); + buildTypeMap(compiler.typeMap, root, options.vectorType); } // gathers all functions with the invariant that all function references are to functions earlier in the list diff --git a/Compiler/src/Types.cpp b/Compiler/src/Types.cpp index b8db7fb2..e85cc92c 100644 --- a/Compiler/src/Types.cpp +++ b/Compiler/src/Types.cpp @@ -15,7 +15,7 @@ static bool isGeneric(AstName name, const AstArray& generics) return false; } -static LuauBytecodeEncodedType getPrimitiveType(AstName name) +static LuauBytecodeType getPrimitiveType(AstName name) { if (name == "nil") return LBC_TYPE_NIL; @@ -33,8 +33,8 @@ static LuauBytecodeEncodedType getPrimitiveType(AstName name) return LBC_TYPE_INVALID; } -static LuauBytecodeEncodedType getType( - AstType* ty, const AstArray& generics, const DenseHashMap& typeAliases, bool resolveAliases) +static LuauBytecodeType getType(AstType* ty, const AstArray& generics, const DenseHashMap& typeAliases, + bool resolveAliases, const char* vectorType) { if (AstTypeReference* ref = ty->as()) { @@ -45,7 +45,7 @@ static LuauBytecodeEncodedType getType( { // note: we only resolve aliases to the depth of 1 to avoid dealing with recursive aliases if (resolveAliases) - return getType((*alias)->type, (*alias)->generics, typeAliases, /* resolveAliases= */ false); + return getType((*alias)->type, (*alias)->generics, typeAliases, /* resolveAliases= */ false, vectorType); else return LBC_TYPE_ANY; } @@ -53,7 +53,10 @@ static LuauBytecodeEncodedType getType( if (isGeneric(ref->name, generics)) return LBC_TYPE_ANY; - if (LuauBytecodeEncodedType prim = getPrimitiveType(ref->name); prim != LBC_TYPE_INVALID) + if (vectorType && ref->name == vectorType) + return LBC_TYPE_VECTOR; + + if (LuauBytecodeType prim = getPrimitiveType(ref->name); prim != LBC_TYPE_INVALID) return prim; // not primitive or alias or generic => host-provided, we assume userdata for now @@ -70,11 +73,11 @@ static LuauBytecodeEncodedType getType( else if (AstTypeUnion* un = ty->as()) { bool optional = false; - LuauBytecodeEncodedType type = LBC_TYPE_INVALID; + LuauBytecodeType type = LBC_TYPE_INVALID; for (AstType* ty : un->types) { - LuauBytecodeEncodedType et = getType(ty, generics, typeAliases, resolveAliases); + LuauBytecodeType et = getType(ty, generics, typeAliases, resolveAliases, vectorType); if (et == LBC_TYPE_NIL) { @@ -95,7 +98,7 @@ static LuauBytecodeEncodedType getType( if (type == LBC_TYPE_INVALID) return LBC_TYPE_ANY; - return LuauBytecodeEncodedType(type | (optional && (type != LBC_TYPE_ANY) ? LBC_TYPE_OPTIONAL_BIT : 0)); + return LuauBytecodeType(type | (optional && (type != LBC_TYPE_ANY) ? LBC_TYPE_OPTIONAL_BIT : 0)); } else if (AstTypeIntersection* inter = ty->as()) { @@ -105,7 +108,7 @@ static LuauBytecodeEncodedType getType( return LBC_TYPE_ANY; } -static std::string getFunctionType(const AstExprFunction* func, const DenseHashMap& typeAliases) +static std::string getFunctionType(const AstExprFunction* func, const DenseHashMap& typeAliases, const char* vectorType) { bool self = func->self != 0; @@ -121,8 +124,8 @@ static std::string getFunctionType(const AstExprFunction* func, const DenseHashM bool haveNonAnyParam = false; for (AstLocal* arg : func->args) { - LuauBytecodeEncodedType ty = - arg->annotation ? getType(arg->annotation, func->generics, typeAliases, /* resolveAliases= */ true) : LBC_TYPE_ANY; + LuauBytecodeType ty = + arg->annotation ? getType(arg->annotation, func->generics, typeAliases, /* resolveAliases= */ true, vectorType) : LBC_TYPE_ANY; if (ty != LBC_TYPE_ANY) haveNonAnyParam = true; @@ -140,12 +143,14 @@ static std::string getFunctionType(const AstExprFunction* func, const DenseHashM struct TypeMapVisitor : AstVisitor { DenseHashMap& typeMap; + const char* vectorType; DenseHashMap typeAliases; std::vector> typeAliasStack; - TypeMapVisitor(DenseHashMap& typeMap) + TypeMapVisitor(DenseHashMap& typeMap, const char* vectorType) : typeMap(typeMap) + , vectorType(vectorType) , typeAliases(AstName()) { } @@ -206,7 +211,7 @@ struct TypeMapVisitor : AstVisitor bool visit(AstExprFunction* node) override { - std::string type = getFunctionType(node, typeAliases); + std::string type = getFunctionType(node, typeAliases, vectorType); if (!type.empty()) typeMap[node] = std::move(type); @@ -215,9 +220,9 @@ struct TypeMapVisitor : AstVisitor } }; -void buildTypeMap(DenseHashMap& typeMap, AstNode* root) +void buildTypeMap(DenseHashMap& typeMap, AstNode* root, const char* vectorType) { - TypeMapVisitor visitor(typeMap); + TypeMapVisitor visitor(typeMap, vectorType); root->visit(&visitor); } diff --git a/Compiler/src/Types.h b/Compiler/src/Types.h index c3dd1620..cad55ab5 100644 --- a/Compiler/src/Types.h +++ b/Compiler/src/Types.h @@ -8,6 +8,6 @@ namespace Luau { -void buildTypeMap(DenseHashMap& typeMap, AstNode* root); +void buildTypeMap(DenseHashMap& typeMap, AstNode* root, const char* vectorType); } // namespace Luau diff --git a/Sources.cmake b/Sources.cmake index ccf2e1df..2a58f061 100644 --- a/Sources.cmake +++ b/Sources.cmake @@ -143,6 +143,7 @@ target_sources(Luau.Analysis PRIVATE Analysis/include/Luau/Autocomplete.h Analysis/include/Luau/Breadcrumb.h Analysis/include/Luau/BuiltinDefinitions.h + Analysis/include/Luau/Cancellation.h Analysis/include/Luau/Clone.h Analysis/include/Luau/Config.h Analysis/include/Luau/Constraint.h diff --git a/VM/src/ldebug.cpp b/VM/src/ldebug.cpp index d3e21f5d..cb3c9d3b 100644 --- a/VM/src/ldebug.cpp +++ b/VM/src/ldebug.cpp @@ -35,6 +35,10 @@ int lua_getargument(lua_State* L, int level, int n) return 0; CallInfo* ci = L->ci - level; + // changing tables in native functions externally may invalidate safety contracts wrt table state (metatable/size/readonly) + if (ci->flags & LUA_CALLINFO_NATIVE) + return 0; + Proto* fp = getluaproto(ci); int res = 0; @@ -60,9 +64,13 @@ int lua_getargument(lua_State* L, int level, int n) const char* lua_getlocal(lua_State* L, int level, int n) { if (unsigned(level) >= unsigned(L->ci - L->base_ci)) - return 0; + return NULL; CallInfo* ci = L->ci - level; + // changing tables in native functions externally may invalidate safety contracts wrt table state (metatable/size/readonly) + if (ci->flags & LUA_CALLINFO_NATIVE) + return NULL; + Proto* fp = getluaproto(ci); const LocVar* var = fp ? luaF_getlocal(fp, n, currentpc(L, ci)) : NULL; if (var) @@ -77,9 +85,13 @@ const char* lua_getlocal(lua_State* L, int level, int n) const char* lua_setlocal(lua_State* L, int level, int n) { if (unsigned(level) >= unsigned(L->ci - L->base_ci)) - return 0; + return NULL; CallInfo* ci = L->ci - level; + // changing registers in native functions externally may invalidate safety contracts wrt register type tags + if (ci->flags & LUA_CALLINFO_NATIVE) + return NULL; + Proto* fp = getluaproto(ci); const LocVar* var = fp ? luaF_getlocal(fp, n, currentpc(L, ci)) : NULL; if (var) @@ -321,7 +333,8 @@ void luaG_pusherror(lua_State* L, const char* error) void luaG_breakpoint(lua_State* L, Proto* p, int line, bool enable) { - if (p->lineinfo) + // since native code doesn't support breakpoints, we would need to update all call frames with LUAU_CALLINFO_NATIVE that refer to p + if (p->lineinfo && !p->execdata) { for (int i = 0; i < p->sizecode; ++i) { @@ -347,11 +360,6 @@ void luaG_breakpoint(lua_State* L, Proto* p, int line, bool enable) p->code[i] |= op; LUAU_ASSERT(LUAU_INSN_OP(p->code[i]) == op); -#if LUA_CUSTOM_EXECUTION - if (L->global->ecb.setbreakpoint) - L->global->ecb.setbreakpoint(L, p, i); -#endif - // note: this is important! // we only patch the *first* instruction in each proto that's attributed to a given line // this can be changed, but if requires making patching a bit more nuanced so that we don't patch AUX words @@ -410,11 +418,11 @@ static int getmaxline(Proto* p) return result; } -// Find the line number with instructions. If the provided line doesn't have any instruction, it should return the next line number with -// instructions. +// Find the line number with instructions. If the provided line doesn't have any instruction, it should return the next valid line number. static int getnextline(Proto* p, int line) { int closest = -1; + if (p->lineinfo) { for (int i = 0; i < p->sizecode; ++i) @@ -435,7 +443,6 @@ static int getnextline(Proto* p, int line) for (int i = 0; i < p->sizep; ++i) { - // Find the closest line number to the intended one. int candidate = getnextline(p->p[i], line); if (candidate == line) @@ -454,14 +461,12 @@ int lua_breakpoint(lua_State* L, int funcindex, int line, int enabled) api_check(L, ttisfunction(func) && !clvalue(func)->isC); Proto* p = clvalue(func)->l.p; - // Find line number to add the breakpoint to. + + // set the breakpoint to the next closest line with valid instructions int target = getnextline(p, line); if (target != -1) - { - // Add breakpoint on the exact line luaG_breakpoint(L, p, target, bool(enabled)); - } return target; } diff --git a/VM/src/lfunc.cpp b/VM/src/lfunc.cpp index a47ad34f..88a3e40a 100644 --- a/VM/src/lfunc.cpp +++ b/VM/src/lfunc.cpp @@ -22,6 +22,7 @@ Proto* luaF_newproto(lua_State* L) f->numparams = 0; f->is_vararg = 0; f->maxstacksize = 0; + f->flags = 0; f->sizelineinfo = 0; f->linegaplog2 = 0; f->lineinfo = NULL; @@ -155,13 +156,8 @@ void luaF_freeproto(lua_State* L, Proto* f, lua_Page* page) if (f->debuginsn) luaM_freearray(L, f->debuginsn, f->sizecode, uint8_t, f->memcat); -#if LUA_CUSTOM_EXECUTION if (f->execdata) - { - LUAU_ASSERT(L->global->ecb.destroy); L->global->ecb.destroy(L, f); - } -#endif if (f->typeinfo) luaM_freearray(L, f->typeinfo, f->numparams + 2, uint8_t, f->memcat); diff --git a/VM/src/lgc.h b/VM/src/lgc.h index 51216bd8..ec7a6828 100644 --- a/VM/src/lgc.h +++ b/VM/src/lgc.h @@ -134,5 +134,7 @@ LUAI_FUNC void luaC_barriertable(lua_State* L, Table* t, GCObject* v); LUAI_FUNC void luaC_barrierback(lua_State* L, GCObject* o, GCObject** gclist); LUAI_FUNC void luaC_validate(lua_State* L); LUAI_FUNC void luaC_dump(lua_State* L, void* file, const char* (*categoryName)(lua_State* L, uint8_t memcat)); +LUAI_FUNC void luaC_enumheap(lua_State* L, void* context, void (*node)(void* context, void* ptr, uint8_t tt, uint8_t memcat, const char* name), + void (*edge)(void* context, void* from, void* to, const char* name)); LUAI_FUNC int64_t luaC_allocationrate(lua_State* L); LUAI_FUNC const char* luaC_statename(int state); diff --git a/VM/src/lgcdebug.cpp b/VM/src/lgcdebug.cpp index 2f9c1756..e68b84a9 100644 --- a/VM/src/lgcdebug.cpp +++ b/VM/src/lgcdebug.cpp @@ -602,3 +602,229 @@ void luaC_dump(lua_State* L, void* file, const char* (*categoryName)(lua_State* fprintf(f, "}\n"); fprintf(f, "}}\n"); } + +struct EnumContext +{ + lua_State* L; + void* context; + void (*node)(void* context, void* ptr, uint8_t tt, uint8_t memcat, const char* name); + void (*edge)(void* context, void* from, void* to, const char* name); +}; + +static void* enumtopointer(GCObject* gco) +{ + // To match lua_topointer, userdata pointer is represented as a pointer to internal data + return gco->gch.tt == LUA_TUSERDATA ? (void*)gco2u(gco)->data : (void*)gco; +} + +static void enumnode(EnumContext* ctx, GCObject* gco, const char* objname) +{ + ctx->node(ctx->context, enumtopointer(gco), gco->gch.tt, gco->gch.memcat, objname); +} + +static void enumedge(EnumContext* ctx, GCObject* from, GCObject* to, const char* edgename) +{ + ctx->edge(ctx->context, enumtopointer(from), enumtopointer(to), edgename); +} + +static void enumedges(EnumContext* ctx, GCObject* from, TValue* data, size_t size, const char* edgename) +{ + for (size_t i = 0; i < size; ++i) + { + if (iscollectable(&data[i])) + enumedge(ctx, from, gcvalue(&data[i]), edgename); + } +} + +static void enumstring(EnumContext* ctx, TString* ts) +{ + enumnode(ctx, obj2gco(ts), NULL); +} + +static void enumtable(EnumContext* ctx, Table* h) +{ + // Provide a name for a special registry table + enumnode(ctx, obj2gco(h), h == hvalue(registry(ctx->L)) ? "registry" : NULL); + + if (h->node != &luaH_dummynode) + { + for (int i = 0; i < sizenode(h); ++i) + { + const LuaNode& n = h->node[i]; + + if (!ttisnil(&n.val) && (iscollectable(&n.key) || iscollectable(&n.val))) + { + if (iscollectable(&n.key)) + enumedge(ctx, obj2gco(h), gcvalue(&n.key), "[key]"); + + if (iscollectable(&n.val)) + { + if (ttisstring(&n.key)) + { + enumedge(ctx, obj2gco(h), gcvalue(&n.val), svalue(&n.key)); + } + else if (ttisnumber(&n.key)) + { + char buf[32]; + snprintf(buf, sizeof(buf), "%.14g", nvalue(&n.key)); + enumedge(ctx, obj2gco(h), gcvalue(&n.val), buf); + } + else + { + enumedge(ctx, obj2gco(h), gcvalue(&n.val), NULL); + } + } + } + } + } + + if (h->sizearray) + enumedges(ctx, obj2gco(h), h->array, h->sizearray, "array"); + + if (h->metatable) + enumedge(ctx, obj2gco(h), obj2gco(h->metatable), "metatable"); +} + +static void enumclosure(EnumContext* ctx, Closure* cl) +{ + if (cl->isC) + { + enumnode(ctx, obj2gco(cl), cl->c.debugname); + } + else + { + Proto* p = cl->l.p; + + char buf[LUA_IDSIZE]; + + if (p->source) + snprintf(buf, sizeof(buf), "%s:%d %s", p->debugname ? getstr(p->debugname) : "", p->linedefined, getstr(p->source)); + else + snprintf(buf, sizeof(buf), "%s:%d", p->debugname ? getstr(p->debugname) : "", p->linedefined); + + enumnode(ctx, obj2gco(cl), buf); + } + + enumedge(ctx, obj2gco(cl), obj2gco(cl->env), "env"); + + if (cl->isC) + { + if (cl->nupvalues) + enumedges(ctx, obj2gco(cl), cl->c.upvals, cl->nupvalues, "upvalue"); + } + else + { + enumedge(ctx, obj2gco(cl), obj2gco(cl->l.p), "proto"); + + if (cl->nupvalues) + enumedges(ctx, obj2gco(cl), cl->l.uprefs, cl->nupvalues, "upvalue"); + } +} + +static void enumudata(EnumContext* ctx, Udata* u) +{ + enumnode(ctx, obj2gco(u), NULL); + + if (u->metatable) + enumedge(ctx, obj2gco(u), obj2gco(u->metatable), "metatable"); +} + +static void enumthread(EnumContext* ctx, lua_State* th) +{ + Closure* tcl = NULL; + for (CallInfo* ci = th->base_ci; ci <= th->ci; ++ci) + { + if (ttisfunction(ci->func)) + { + tcl = clvalue(ci->func); + break; + } + } + + if (tcl && !tcl->isC && tcl->l.p->source) + { + Proto* p = tcl->l.p; + + enumnode(ctx, obj2gco(th), getstr(p->source)); + } + else + { + enumnode(ctx, obj2gco(th), NULL); + } + + enumedge(ctx, obj2gco(th), obj2gco(th->gt), "globals"); + + if (th->top > th->stack) + enumedges(ctx, obj2gco(th), th->stack, th->top - th->stack, "stack"); +} + +static void enumproto(EnumContext* ctx, Proto* p) +{ + enumnode(ctx, obj2gco(p), p->source ? getstr(p->source) : NULL); + + if (p->sizek) + enumedges(ctx, obj2gco(p), p->k, p->sizek, "constants"); + + for (int i = 0; i < p->sizep; ++i) + enumedge(ctx, obj2gco(p), obj2gco(p->p[i]), "protos"); +} + +static void enumupval(EnumContext* ctx, UpVal* uv) +{ + enumnode(ctx, obj2gco(uv), NULL); + + if (iscollectable(uv->v)) + enumedge(ctx, obj2gco(uv), gcvalue(uv->v), "value"); +} + +static void enumobj(EnumContext* ctx, GCObject* o) +{ + switch (o->gch.tt) + { + case LUA_TSTRING: + return enumstring(ctx, gco2ts(o)); + + case LUA_TTABLE: + return enumtable(ctx, gco2h(o)); + + case LUA_TFUNCTION: + return enumclosure(ctx, gco2cl(o)); + + case LUA_TUSERDATA: + return enumudata(ctx, gco2u(o)); + + case LUA_TTHREAD: + return enumthread(ctx, gco2th(o)); + + case LUA_TPROTO: + return enumproto(ctx, gco2p(o)); + + case LUA_TUPVAL: + return enumupval(ctx, gco2uv(o)); + + default: + LUAU_ASSERT(!"Unknown object tag"); + } +} + +static bool enumgco(void* context, lua_Page* page, GCObject* gco) +{ + enumobj((EnumContext*)context, gco); + return false; +} + +void luaC_enumheap(lua_State* L, void* context, void (*node)(void* context, void* ptr, uint8_t tt, uint8_t memcat, const char* name), + void (*edge)(void* context, void* from, void* to, const char* name)) +{ + global_State* g = L->global; + + EnumContext ctx; + ctx.L = L; + ctx.context = context; + ctx.node = node; + ctx.edge = edge; + + enumgco(&ctx, NULL, obj2gco(g->mainthread)); + + luaM_visitgco(L, &ctx, enumgco); +} diff --git a/VM/src/lobject.h b/VM/src/lobject.h index 560969d6..74ea1623 100644 --- a/VM/src/lobject.h +++ b/VM/src/lobject.h @@ -263,9 +263,22 @@ typedef struct Proto CommonHeader; + uint8_t nups; // number of upvalues + uint8_t numparams; + uint8_t is_vararg; + uint8_t maxstacksize; + uint8_t flags; + + TValue* k; // constants used by the function Instruction* code; // function bytecode struct Proto** p; // functions defined inside the function + const Instruction* codeentry; + + void* execdata; + uintptr_t exectarget; + + uint8_t* lineinfo; // for each instruction, line number as a delta from baseline int* abslineinfo; // baseline line info, one entry for each 1<memcatbytes[i] == 0); -#if LUA_CUSTOM_EXECUTION if (L->global->ecb.close) L->global->ecb.close(L); -#endif (*g->frealloc)(g->ud, L, sizeof(LG), 0); } diff --git a/VM/src/lstate.h b/VM/src/lstate.h index ca8bc1b3..a7346ccb 100644 --- a/VM/src/lstate.h +++ b/VM/src/lstate.h @@ -154,7 +154,6 @@ struct lua_ExecutionCallbacks void (*close)(lua_State* L); // called when global VM state is closed void (*destroy)(lua_State* L, Proto* proto); // called when function is destroyed int (*enter)(lua_State* L, Proto* proto); // called when function is about to start/resume (when execdata is present), return 0 to exit VM - void (*setbreakpoint)(lua_State* L, Proto* proto, int line); // called when a breakpoint is set in a function }; /* diff --git a/VM/src/lvmload.cpp b/VM/src/lvmload.cpp index a26dd0b8..7a065383 100644 --- a/VM/src/lvmload.cpp +++ b/VM/src/lvmload.cpp @@ -230,8 +230,7 @@ int luau_load(lua_State* L, const char* chunkname, const char* data, size_t size if (version >= 4) { - uint8_t cgflags = read(data, size, offset); - LUAU_ASSERT(cgflags == 0); + p->flags = read(data, size, offset); uint32_t typesize = readVarInt(data, size, offset); diff --git a/fuzz/proto.cpp b/fuzz/proto.cpp index c30e9377..e1ecaf65 100644 --- a/fuzz/proto.cpp +++ b/fuzz/proto.cpp @@ -26,7 +26,7 @@ const bool kFuzzLinter = true; const bool kFuzzTypeck = true; const bool kFuzzVM = true; const bool kFuzzTranspile = true; -const bool kFuzzCodegen = true; +const bool kFuzzCodegenVM = true; const bool kFuzzCodegenAssembly = true; // Should we generate type annotations? @@ -35,7 +35,7 @@ const bool kFuzzTypes = true; const Luau::CodeGen::AssemblyOptions::Target kFuzzCodegenTarget = Luau::CodeGen::AssemblyOptions::A64; static_assert(!(kFuzzVM && !kFuzzCompiler), "VM requires the compiler!"); -static_assert(!(kFuzzCodegen && !kFuzzVM), "Codegen requires the VM!"); +static_assert(!(kFuzzCodegenVM && !kFuzzCompiler), "Codegen requires the compiler!"); static_assert(!(kFuzzCodegenAssembly && !kFuzzCompiler), "Codegen requires the compiler!"); std::vector protoprint(const luau::ModuleSet& stat, bool types); @@ -47,6 +47,7 @@ LUAU_FASTINT(LuauTableTypeMaximumStringifierLength) LUAU_FASTINT(LuauTypeInferIterationLimit) LUAU_FASTINT(LuauTarjanChildLimit) LUAU_FASTFLAG(DebugLuauFreezeArena) +LUAU_FASTFLAG(DebugLuauAbortingChecks) std::chrono::milliseconds kInterruptTimeout(10); std::chrono::time_point interruptDeadline; @@ -90,7 +91,7 @@ lua_State* createGlobalState() { lua_State* L = lua_newstate(allocate, NULL); - if (kFuzzCodegen && Luau::CodeGen::isSupported()) + if (kFuzzCodegenVM && Luau::CodeGen::isSupported()) Luau::CodeGen::create(L); lua_callbacks(L)->interrupt = interrupt; @@ -228,6 +229,7 @@ DEFINE_PROTO_FUZZER(const luau::ModuleSet& message) flag->value = true; FFlag::DebugLuauFreezeArena.value = true; + FFlag::DebugLuauAbortingChecks.value = true; std::vector sources = protoprint(message, kFuzzTypes); @@ -370,7 +372,7 @@ DEFINE_PROTO_FUZZER(const luau::ModuleSet& message) } // run resulting bytecode (from last successfully compiler module) - if (kFuzzVM && bytecode.size()) + if ((kFuzzVM || kFuzzCodegenVM) && bytecode.size()) { static lua_State* globalState = createGlobalState(); @@ -395,9 +397,10 @@ DEFINE_PROTO_FUZZER(const luau::ModuleSet& message) LUAU_ASSERT(heapSize < 256 * 1024); }; - runCode(bytecode, false); + if (kFuzzVM) + runCode(bytecode, false); - if (kFuzzCodegen && Luau::CodeGen::isSupported()) + if (kFuzzCodegenVM && Luau::CodeGen::isSupported()) runCode(bytecode, true); } } diff --git a/tests/Compiler.test.cpp b/tests/Compiler.test.cpp index fde6e90e..db779da2 100644 --- a/tests/Compiler.test.cpp +++ b/tests/Compiler.test.cpp @@ -53,7 +53,10 @@ static std::string compileTypeTable(const char* source) { Luau::BytecodeBuilder bcb; bcb.setDumpFlags(Luau::BytecodeBuilder::Dump_Code); - Luau::compileOrThrow(bcb, source); + + Luau::CompileOptions opts; + opts.vectorType = "Vector3"; + Luau::compileOrThrow(bcb, source, opts); return bcb.dumpTypeInfo(); } @@ -7159,6 +7162,31 @@ end )"); } +TEST_CASE("HostTypesVector") +{ + ScopedFastFlag sff("LuauCompileFunctionType", true); + + CHECK_EQ("\n" + compileTypeTable(R"( +function myfunc(test: Instance, pos: Vector3) +end + +function myfunc2(test: Instance, pos: Vector3) +end + +do + type Vector3 = number + + function myfunc3(test: Instance, pos: Vector3) + end +end +)"), + R"( +0: function(userdata, vector) +1: function(userdata, any) +2: function(userdata, number) +)"); +} + TEST_CASE("TypeAliasScoping") { ScopedFastFlag sff("LuauCompileFunctionType", true); diff --git a/tests/Conformance.test.cpp b/tests/Conformance.test.cpp index 9b47b6f5..c98dabb9 100644 --- a/tests/Conformance.test.cpp +++ b/tests/Conformance.test.cpp @@ -5,6 +5,7 @@ #include "luacodegen.h" #include "Luau/BuiltinDefinitions.h" +#include "Luau/DenseHash.h" #include "Luau/ModuleResolver.h" #include "Luau/TypeInfer.h" #include "Luau/StringUtils.h" @@ -15,6 +16,7 @@ #include "ScopedFlags.h" #include +#include #include #include @@ -1244,6 +1246,8 @@ TEST_CASE("GCDump") { // internal function, declared in lgc.h - not exposed via lua.h extern void luaC_dump(lua_State * L, void* file, const char* (*categoryName)(lua_State * L, uint8_t memcat)); + extern void luaC_enumheap(lua_State * L, void* context, void (*node)(void* context, void* ptr, uint8_t tt, uint8_t memcat, const char* name), + void (*edge)(void* context, void* from, void* to, const char* name)); StateRef globalState(luaL_newstate(), lua_close); lua_State* L = globalState.get(); @@ -1287,6 +1291,40 @@ TEST_CASE("GCDump") luaC_dump(L, f, nullptr); fclose(f); + + struct Node + { + void* ptr; + uint8_t tag; + uint8_t memcat; + std::string name; + }; + + struct EnumContext + { + EnumContext() + : nodes{nullptr} + , edges{nullptr} + { + } + + Luau::DenseHashMap nodes; + Luau::DenseHashMap edges; + } ctx; + + luaC_enumheap( + L, &ctx, + [](void* ctx, void* gco, uint8_t tt, uint8_t memcat, const char* name) { + EnumContext& context = *(EnumContext*)ctx; + context.nodes[gco] = {gco, tt, memcat, name ? name : ""}; + }, + [](void* ctx, void* s, void* t, const char*) { + EnumContext& context = *(EnumContext*)ctx; + context.edges[s] = t; + }); + + CHECK(!ctx.nodes.empty()); + CHECK(!ctx.edges.empty()); } TEST_CASE("Interrupt") diff --git a/tests/Differ.test.cpp b/tests/Differ.test.cpp index 5e8e6b1d..1e9dcac3 100644 --- a/tests/Differ.test.cpp +++ b/tests/Differ.test.cpp @@ -1,15 +1,20 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details #include "Luau/Differ.h" +#include "Luau/Common.h" #include "Luau/Error.h" #include "Luau/Frontend.h" #include "Fixture.h" +#include "Luau/Symbol.h" +#include "ScopedFlags.h" #include "doctest.h" #include using namespace Luau; +LUAU_FASTFLAG(DebugLuauDeferredConstraintResolution) + TEST_SUITE_BEGIN("Differ"); TEST_CASE_FIXTURE(Fixture, "equal_numbers") @@ -313,4 +318,685 @@ TEST_CASE_FIXTURE(Fixture, "singleton_string") diffMessage); } +TEST_CASE_FIXTURE(Fixture, "equal_function") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number) + return x + end + function almostFoo(y: number) + return y + 10 + end + )"); + LUAU_REQUIRE_NO_ERRORS(result); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + try + { + DifferResult diffRes = diff(foo, almostFoo); + INFO(diffRes.diffError->toString()); + CHECK(!diffRes.diffError.has_value()); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } +} + +TEST_CASE_FIXTURE(Fixture, "equal_function_inferred_ret_length") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function bar(x: number, y: string) + return x, y + end + function almostBar(a: number, b: string) + return a, b + end + function foo(x: number, y: string, z: boolean) + return z, bar(x, y) + end + function almostFoo(a: number, b: string, c: boolean) + return c, almostBar(a, b) + end + )"); + LUAU_REQUIRE_NO_ERRORS(result); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + try + { + DifferResult diffRes = diff(foo, almostFoo); + INFO(diffRes.diffError->toString()); + CHECK(!diffRes.diffError.has_value()); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } +} + +TEST_CASE_FIXTURE(Fixture, "equal_function_inferred_ret_length_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function bar(x: number, y: string) + return x, y + end + function foo(x: number, y: string, z: boolean) + return bar(x, y), z + end + function almostFoo(a: number, b: string, c: boolean) + return a, c + end + )"); + LUAU_REQUIRE_NO_ERRORS(result); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + try + { + DifferResult diffRes = diff(foo, almostFoo); + INFO(diffRes.diffError->toString()); + CHECK(!diffRes.diffError.has_value()); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_normal") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: number, z: number) + return x * y * z + end + function almostFoo(a: number, b: number, msg: string) + return a + almostFoo = foo + )"); + LUAU_REQUIRE_ERRORS(result); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + diffMessage = diff(foo, almostFoo).diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Arg[3] has type number, while the right type at .Arg[3] has type string)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_normal_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: number, z: string) + return x * y + end + function almostFoo(a: number, y: string, msg: string) + return a + almostFoo = foo + )"); + LUAU_REQUIRE_ERRORS(result); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + diffMessage = diff(foo, almostFoo).diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Arg[2] has type number, while the right type at .Arg[2] has type string)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_ret_normal") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: number, z: string) + return x + end + function almostFoo(a: number, b: number, msg: string) + return msg + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Ret[1] has type number, while the right type at .Ret[1] has type string)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_length") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: number) + return x + end + function almostFoo(x: number, y: number, c: number) + return x + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 2 or more arguments, while the right type at takes 3 or more arguments)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_length_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string, z: number) + return z + end + function almostFoo(x: number, y: string) + return x + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 3 or more arguments, while the right type at takes 2 or more arguments)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_length_none") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo() + return 5 + end + function almostFoo(x: number, y: string) + return x + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 0 or more arguments, while the right type at takes 2 or more arguments)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_arg_length_none_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number) + return x + end + function almostFoo() + return 5 + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 1 or more arguments, while the right type at takes 0 or more arguments)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_ret_length") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: number) + return x + end + function almostFoo(x: number, y: number) + return x, y + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at returns 1 values, while the right type at returns 2 values)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_ret_length_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string, z: number) + return y, x, z + end + function almostFoo(x: number, y: string, z: number) + return y, x + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at returns 3 values, while the right type at returns 2 values)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_ret_length_none") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string) + return + end + function almostFoo(x: number, y: string) + return x + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at returns 0 values, while the right type at returns 1 values)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_ret_length_none_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo() + return 5 + end + function almostFoo() + return + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at returns 1 values, while the right type at returns 0 values)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_variadic_arg_normal") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string, ...: number) + return x, y + end + function almostFoo(a: number, b: string, ...: string) + return a, b + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Arg[Variadic] has type number, while the right type at .Arg[Variadic] has type string)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_variadic_arg_missing") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string, ...: number) + return x, y + end + function almostFoo(a: number, b: string) + return a, b + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Arg[Variadic] has type number, while the right type at .Arg[Variadic] has type any)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_variadic_arg_missing_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + function foo(x: number, y: string) + return x, y + end + function almostFoo(a: number, b: string, ...: string) + return a, b + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at .Arg[Variadic] has type any, while the right type at .Arg[Variadic] has type string)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_variadic_oversaturation") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + -- allowed to be oversaturated + function foo(x: number, y: string) + return x, y + end + -- must not be oversaturated + local almostFoo: (number, string) -> (number, string) = foo + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 2 or more arguments, while the right type at takes 2 arguments)", + diffMessage); +} + +TEST_CASE_FIXTURE(Fixture, "function_variadic_oversaturation_2") +{ + // Old solver does not correctly infer function typepacks + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + CheckResult result = check(R"( + -- must not be oversaturated + local foo: (number, string) -> (number, string) + -- allowed to be oversaturated + function almostFoo(x: number, y: string) + return x, y + end + )"); + + TypeId foo = requireType("foo"); + TypeId almostFoo = requireType("almostFoo"); + std::string diffMessage; + try + { + DifferResult diffRes = diff(foo, almostFoo); + if (!diffRes.diffError.has_value()) + { + INFO("Differ did not report type error, even though types are unequal"); + CHECK(false); + } + diffMessage = diffRes.diffError->toString(); + } + catch (const InternalCompilerError& e) + { + INFO(("InternalCompilerError: " + e.message)); + CHECK(false); + } + CHECK_EQ( + R"(DiffError: these two types are not equal because the left type at takes 2 arguments, while the right type at takes 2 or more arguments)", + diffMessage); +} + TEST_SUITE_END(); diff --git a/tests/Module.test.cpp b/tests/Module.test.cpp index 74e8a959..0be3fa98 100644 --- a/tests/Module.test.cpp +++ b/tests/Module.test.cpp @@ -407,19 +407,15 @@ type B = A TEST_CASE_FIXTURE(BuiltinsFixture, "do_not_clone_reexports") { - ScopedFastFlag flags[] = { - {"LuauClonePublicInterfaceLess2", true}, - }; - fileResolver.source["Module/A"] = R"( -export type A = {p : number} -return {} + export type A = {p : number} + return {} )"; fileResolver.source["Module/B"] = R"( -local a = require(script.Parent.A) -export type B = {q : a.A} -return {} + local a = require(script.Parent.A) + export type B = {q : a.A} + return {} )"; CheckResult result = frontend.check("Module/B"); @@ -442,19 +438,15 @@ return {} TEST_CASE_FIXTURE(BuiltinsFixture, "do_not_clone_types_of_reexported_values") { - ScopedFastFlag flags[] = { - {"LuauClonePublicInterfaceLess2", true}, - }; - fileResolver.source["Module/A"] = R"( -local exports = {a={p=5}} -return exports + local exports = {a={p=5}} + return exports )"; fileResolver.source["Module/B"] = R"( -local a = require(script.Parent.A) -local exports = {b=a.a} -return exports + local a = require(script.Parent.A) + local exports = {b=a.a} + return exports )"; CheckResult result = frontend.check("Module/B"); diff --git a/tests/Parser.test.cpp b/tests/Parser.test.cpp index a8738ac8..234034d7 100644 --- a/tests/Parser.test.cpp +++ b/tests/Parser.test.cpp @@ -54,8 +54,7 @@ TEST_SUITE_BEGIN("AllocatorTests"); TEST_CASE("allocator_can_be_moved") { Counter* c = nullptr; - auto inner = [&]() - { + auto inner = [&]() { Luau::Allocator allocator; c = allocator.alloc(); Luau::Allocator moved{std::move(allocator)}; @@ -922,8 +921,7 @@ TEST_CASE_FIXTURE(Fixture, "parse_interpolated_string_double_brace_mid") TEST_CASE_FIXTURE(Fixture, "parse_interpolated_string_without_end_brace") { - auto columnOfEndBraceError = [this](const char* code) - { + auto columnOfEndBraceError = [this](const char* code) { try { parse(code); @@ -2387,8 +2385,7 @@ public: TEST_CASE_FIXTURE(Fixture, "recovery_of_parenthesized_expressions") { - auto checkAstEquivalence = [this](const char* codeWithErrors, const char* code) - { + auto checkAstEquivalence = [this](const char* codeWithErrors, const char* code) { try { parse(codeWithErrors); @@ -2408,8 +2405,7 @@ TEST_CASE_FIXTURE(Fixture, "recovery_of_parenthesized_expressions") CHECK_EQ(counterWithErrors.count, counter.count); }; - auto checkRecovery = [this, checkAstEquivalence](const char* codeWithErrors, const char* code, unsigned expectedErrorCount) - { + auto checkRecovery = [this, checkAstEquivalence](const char* codeWithErrors, const char* code, unsigned expectedErrorCount) { try { parse(codeWithErrors); diff --git a/tests/TypeFamily.test.cpp b/tests/TypeFamily.test.cpp index 613aec80..6e6dba09 100644 --- a/tests/TypeFamily.test.cpp +++ b/tests/TypeFamily.test.cpp @@ -225,7 +225,8 @@ TEST_CASE_FIXTURE(Fixture, "internal_families_raise_errors") )"); LUAU_REQUIRE_ERROR_COUNT(1, result); - CHECK(toString(result.errors[0]) == "Type family instance Add depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this time"); + CHECK(toString(result.errors[0]) == "Type family instance Add depends on generic function parameters but does not appear in the function " + "signature; this construct cannot be type-checked at this time"); } TEST_CASE_FIXTURE(BuiltinsFixture, "type_families_inhabited_with_normalization") diff --git a/tests/TypeInfer.functions.test.cpp b/tests/TypeInfer.functions.test.cpp index d456f378..268980fe 100644 --- a/tests/TypeInfer.functions.test.cpp +++ b/tests/TypeInfer.functions.test.cpp @@ -1913,8 +1913,6 @@ TEST_CASE_FIXTURE(BuiltinsFixture, "dont_assert_when_the_tarjan_limit_is_exceede ScopedFastInt sfi{"LuauTarjanChildLimit", 2}; ScopedFastFlag sff[] = { {"DebugLuauDeferredConstraintResolution", true}, - {"LuauClonePublicInterfaceLess2", true}, - {"LuauCloneSkipNonInternalVisit", true}, }; CheckResult result = check(R"( diff --git a/tests/TypeInfer.operators.test.cpp b/tests/TypeInfer.operators.test.cpp index d605d5bc..0b7a8311 100644 --- a/tests/TypeInfer.operators.test.cpp +++ b/tests/TypeInfer.operators.test.cpp @@ -670,7 +670,9 @@ TEST_CASE_FIXTURE(Fixture, "strict_binary_op_where_lhs_unknown") if (FFlag::DebugLuauDeferredConstraintResolution) { LUAU_REQUIRE_ERROR_COUNT(ops.size(), result); - CHECK_EQ("Type family instance Add depends on generic function parameters but does not appear in the function signature; this construct cannot be type-checked at this time", toString(result.errors[0])); + CHECK_EQ("Type family instance Add depends on generic function parameters but does not appear in the function signature; this " + "construct cannot be type-checked at this time", + toString(result.errors[0])); CHECK_EQ("Unknown type used in - operation; consider adding a type annotation to 'a'", toString(result.errors[1])); } else diff --git a/tests/TypeInfer.unionTypes.test.cpp b/tests/TypeInfer.unionTypes.test.cpp index d6ae5acc..12868d8b 100644 --- a/tests/TypeInfer.unionTypes.test.cpp +++ b/tests/TypeInfer.unionTypes.test.cpp @@ -789,4 +789,19 @@ TEST_CASE_FIXTURE(Fixture, "lookup_prop_of_intersection_containing_unions") CHECK("variables" == unknownProp->key); } +TEST_CASE_FIXTURE(Fixture, "suppress_errors_for_prop_lookup_of_a_union_that_includes_error") +{ + ScopedFastFlag sff{"DebugLuauDeferredConstraintResolution", true}; + + registerHiddenTypes(&frontend); + + CheckResult result = check(R"( + local a : err | Not + + local b = a.foo + )"); + + LUAU_REQUIRE_NO_ERRORS(result); +} + TEST_SUITE_END(); diff --git a/tests/conformance/native.lua b/tests/conformance/native.lua index bc70df3e..6c0e0e0e 100644 --- a/tests/conformance/native.lua +++ b/tests/conformance/native.lua @@ -92,4 +92,13 @@ end assert(pcall(fuzzfail9) == false) +local function fuzzfail10() + local _ + _ = false,if _ then _ else _ + _ = not _ + l0,_[l0] = not _ +end + +assert(pcall(fuzzfail10) == false) + return('OK') From 57368fbc58f4e3aa23814819f635891a0926b4d6 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey <403333+asajeffrey@users.noreply.github.com> Date: Fri, 21 Jul 2023 13:05:26 -0700 Subject: [PATCH 2/4] HATRA 23 paper (#979) A one-page "progress report" paper. --- papers/hatra23/bibliography.bib | 69 +++++++++++++++++++ papers/hatra23/cc-by.png | Bin 0 -> 12588 bytes papers/hatra23/hatra23.pdf | Bin 0 -> 399315 bytes papers/hatra23/hatra23.tex | 118 ++++++++++++++++++++++++++++++++ 4 files changed, 187 insertions(+) create mode 100644 papers/hatra23/bibliography.bib create mode 100644 papers/hatra23/cc-by.png create mode 100644 papers/hatra23/hatra23.pdf create mode 100644 papers/hatra23/hatra23.tex diff --git a/papers/hatra23/bibliography.bib b/papers/hatra23/bibliography.bib new file mode 100644 index 00000000..067bf967 --- /dev/null +++ b/papers/hatra23/bibliography.bib @@ -0,0 +1,69 @@ +@InProceedings{BFJ21:GoalsLuau, + author = {L. Brown and A. Friesen and A. S. A. Jeffrey}, + title = {Goals of the Luau Type System}, + booktitle = {Proc. Human Aspects of Types and Reasoning Assistants}, + year = {2021}, + url = {https://asaj.org/papers/hatra21.pdf}, +} + +@Misc{Roblox, + author = {Roblox}, + title = {Reimagining the way people come together}, + year = 2023, + url = {https://corp.roblox.com}, +} + +@Misc{Luau, + author = {Roblox}, + title = {The {Luau} Programming Language}, + year = 2023, + url = {https://luau-lang.org}, +} + +@Misc{Lua, + author = {Lua.org and {PUC}-Rio}, + title = {The {Lua} Programming Language}, + year = 2023, + url = {https://lua.org}, +} + +@Misc{Jef22:SemanticSubtyping, + author = {A. S. A. Jeffrey}, + title = {Semantic Subtyping in Luau}, + howpublished = {Roblox Technical Blog}, + year = {2022}, + url = {https://blog.roblox.com/2022/11/semantic-subtyping-luau/}, +} + +@InProceedings{GF05:GentleIntroduction, + author = {G. Castagna and A. Frisch}, + title = {A Gentle Introduction to Semantic Subtyping}, + booktitle = {Proc. Principles and Practice of Declarative Programming}, + year = {2005}, +} + +@InProceedings{ST07:GradualTyping, + author = {J. G. Siek and W. Taha}, + title = {Gradual Typing for Objects}, + booktitle = {Proc. European Conf Object-Oriented Programming}, + year = {2007}, + pages = {2-27}, +} + +@Misc{BJ23:agda-typeck, + author = {L. Brown and A. S. A. Jeffrey}, + title = {Luau Prototype Typechecker}, + year = {2023}, + OPTnote = {}, + url = {https://github.com/luau-lang/agda-typeck} +} + +@article{PT00:LocalTypeInference, +author = {Pierce, B. C. and Turner, D. N.}, +title = {Local Type Inference}, +year = {2000}, +volume = {22}, +number = {1}, +journal = {ACM Trans. Program. Lang. Syst.}, +pages = {1–44}, +} \ No newline at end of file diff --git a/papers/hatra23/cc-by.png b/papers/hatra23/cc-by.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff GIT binary patch literal 12588 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 z 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%0As};AyH!CD&s-@oVeoZ zBuV^rqvGFwSc!(}h5Yk+ufJ9V0E10y+I#&(=%s{5!wM)bqsvKU&QV#)jbqWYp^>M2 z_@QQg((i*BxXycX75nu;m#j&c`r1)KXKC*-^?`urETe*Lf03&lacm~I`Mi(1A9@t) z4~_k5M0#u(KO(e@9>#j)^-=nK^NMd$KNG!chm-b&+^cLe$_w@Lqy&yEFDqs{OegjF zwbo>et0KMT{l_<-$9a%&7z6X6bl6D*$82AG3w%x}@5oddmwX}<0$8sdPJL9*DS)u! z)aB6k?B92`KQr*#+0{y58b>I_3~yvripN931oY3}Jk@{-^csJUGbbzg5V85AL?_Z1 z-0rJK#xvdmH>U!xD#R63Z%!uauW^bsu-<(d9UCeYcpXZ8)BNg2S>_p;(mRbB(6_I_ zkk}UB8&EEInmtF08u1s>T1&(lO$i8NNxh^RE=a#rI7UA+OG+Mz0XiLbPk2{)CIIwB zdqp0A!J#9DHeIIfXtB=F-_hhYT5?Q)40ifIc*Dq={zJ;i6pi+M_7n{D1r{0EADd{zDzT5OA48bffj*e_vsxY7v!ND#R(q_Hu z$c=^#{#jVXAf(bJ^3hbfQqS>mWMOhD5jsjvRB$v+0x%3iq4fR}>%*6&bvX);Q(K$PTB#Uxi2R{F`W z*k*1^R0GrGN>0L}IXKA-zZVh`s#GAk(oVEJQ57k#43g9d)`U+g&_lELAizR@M%dBE zx5YL&ICzxqu|!KptNW5D140|99x=71{=~^;7iSHmPy$>O_*34xO!n|K;3N5w%ZpZa zCTxPlRqbnDFTKshG}&hv$FZI{wqT@JyjPbFSRnszl)!z#OXWE&NJx%g{Ycze{oqa! zsBzf8Q~iwi{MWG$k=ts|KwDh-5+0>+&$QkMW1(y921IQ*o2ugOwm5&1M~|T2uhe@x z_7N+jCwrN%MG>gS>#&(ZW4k-EDohn&kfded$@C_2|7!@O1bE_ z@nZfU^XU`djyw`OFK9_pnvX@2c*?Jw{!#YD(Mfy7qei(jmxrtG8}S&h(q>GpMgh zzvkkZbnHo%@P@$1rFauI7qs+j)jG{}M*pf+$*I$!=P#9But>h-+3v}r_Q6=EE#>st zzWLpL)vmh*irZRZ2tnjx{;(H}Zg9X*K_44eLDbgDL3RHi8kb zb!hE>lMczgw)U+}zyfMAnl{wk&y94^?+3RaqT++(`M|m22vve9J%teITRW2C*ZMO# zGU=8|)@q0U0N-<)*`y~jwox4)8!l6DsLI%Bb5()h3{K)hf{QMmBzP1sooCS49veoG zauyIw9w8OpTg~c|>8jP)7b@g$tpJ+1o9IX+FZ^)S3gNj{hhY0}A6Y_FB%95}MDC|n z06|%PWV(8-2y`t0olWEdT6YiAfV6)By;q!@1rIrud5$LXG*++gyU`ne8-YP`mMfwKe|TAd0)^qEIjo(E<4l-e)W5=*{V~+4V>Q zyYLrU7?NIg9XXc?dF&F?V=I``_c1?J$>_HtbtOEIw);nBjXRM>Kaf>of3S1S=!$bM z;|yfGCjt!-G2Ud~d6+tLc)Y%Z_O=1cxA}r4wCV8M(P`;!o!2C`+Vz4|f@I|q*^>F} zZ~a^;Tbo^?&=@3zjf&e+Uz-Dav@ohks0d8-t1;vPg>YO3j(nU$hr|MTtZ?S3zCjcc z>zi;}y&g@f--wux{CZ96J`oV3H)67b$iqsb;D=td%6X|ycX`<7c(bcQx{O_>86khE z-Vxj(54?Em%xY@7J|j5cHB7W%T+i1L>B=1H8`seXp#s_J)KeM0EQ^g!fAgVPUuj&v z?tMb>VnwN2A?c*kb}bpGcoDP={nJ(__Q*H0M5y5pf-(aklr%PRxME=>)uS`% zKIQGK;%Y*x$!)hE_!%dW*6&wDqnM^%QiAQQY6}_Zpxw4hAO#V{^Ut|{rYD2|fr5^1Q$joeY zFwT81+G>bG9JK8VZHE4f{yi+V_1Vo=DYURXq+sX*kN4f|&;h)~RnMgDncehG0~AA?rGjen&}0eU7^J2*(8hg)f>WMoO5QOihi| ztgm*Rw@m#LIB56fw(%S9ohmcACn3G;3#B=&N!s@}zjM0`gdmHG!vPeq^pohkBNdFj zIdFwD5TC87&8W`K23{t|ms#Yg(&w>8TS4I5z7gzuXF)H{BDH53E8Y>18emN2Ik#Qf zVK(Abw9v7`{_u@`VQhv`zw+TgvR;1(m+7y5}lc_}6y+bR`V;-(Q2xqJMRkQIJ{8L%v=q_ia>_@&uP-2Mb zf$w|Cju=A9^v#Jpev$^2BsX~7gd2;9AyytZkE@pVJ3wEQzQA{+HuhyDN40T8cSI5+ zL&8v$(g})jU=JFukrG;tdVmGi10Q8Zgx{U%A@pKqtqGhpt;@0$4RF?u7M*ml0@}1m z70Nnc>A#2DE0fZa^g!6dkfQ1zu6!@#Jd?m>X-Z7)#&`vqXEOtReZ>>u@O~4{I5ON+ z&^q0MaGptJSj{}7HpMPPhwF8AtC)!;3{s!l*U=CeUvd(n5B9-Q{N8rAR7G^NK`fSn zy4CqP!5uNrkA^O{{7!+eDmg!e$Bd)dWDYJ@0Yd=Nh(z-p&-Wd%XY^IYJB z^BMj~gDlz=(Bl+YEdncvuQRFJinc`LB*!SOKqfK9+{Kqkr~$%w$JZYci$Wrl=~zpOj8a@3`RBzvf31I#22MLhO;(WPv8E#FO54Sbg=vIcR+=#4aesz zObbF_7>BFO&QWpumoI9r0iCUNR@E}uXCT@8D=h!Pz4`?;)L=1zq44H(-y2#1b722Q z{)f<*{C2%X%EsoGFuD8yCjIIXP>&s|z!4DZItocpdH=tRbu4`{2t0JUQx}8?<58FEiZx# zbmxs}dBlG$g80D(b0BEhtMgQ_3;ngMj3MCCR`uYQ;oOPUc2!f7e=6Kz^r))r6_i3z zSSs@CX-fOEhlu1nQ)Sf={4Rf?Q3Y=X2ddJ}GImAA2B4nlnsPJdI2n#Xj?xJ6M){r_ zdet=)a6u6|P^f3}33)K%a`o&Ll!Y8VZoFVA(Z!COj$c+78xxuXWzCkzn41}I96oov z?hG+ASa&Y01e}}Oe1anMBi<&eZD8YaQd^ExGsidk6b3-9-Y`a zkJOF!aH7k8a4Y{UWkW2Yp@75y^T1nR!z&dSr_KV3G*}+!L463xVAhYKf8Z%89Aiep z7HOwVUUd)_)W6S_N-Tm=Dg#|YL-C~RAp3h_hP52jZ_t?EiX}v)pl#X{#D=QT7&-i^ zUzy?#IW;>_ccI6g0;i>1(}}ijAh5<0$V9%t3K$0Na`Z_p8xfj3v#=&E@z>TV)~AWjD)0$y1kz9o-GWc>o& zR^`vv>K2gNG%(q=4&JWo@g@q023%(KK0wL_I~UEAtsz6J3yW(W4WeEW9|k2DMB4#_ zR~ew+pTBR^-A*_-L;m)@1QFg5%B%m5wHw~+nMzH87ECKwe0vgyozS)|mLnQOXOIke z@1c=>Ko;jQXbNeGvO$@qbig+GOv?YGUeL@gWreUyEHNn0W^3?x%I6#|$xNA$n`!zd!QN7cP=Jx1?<^&(?_=_^d3lJ${F0Q z`$nwULGFC!g}=_qVg6Yn)FnI5N4IH(gisn1iS87kZjVeJ`Y!A(v$2a^nf4Qu!&&$g zSq@VRN^(1l#OcRQr;%f~psON6H|Hx!8i#(}Gm~-IH>*gJVoHruFyhBv+rl+(ybu-m zs0#~A%1CjmI>>0q%DoaIk-d*JUTJw^=VK+LM)7H%$ZEyA<})KFmILHQxI{9Qvv1X> z+AM+RWj6R3dcgbo%heVh{*>4E&#^KQbX3sSUXQLbG}<@h^~YWa6322%uv~Yiz&!6H zwW~)Fs4GvKGt3rEy^4Y^SKtgB#aP@#8t&k9at=^2yz0W+FvLLa#l6Nb;(XM6H7Dgw zdH3d6Kh~HcAl-k<;+`_z?npZa3u_HcGB!*8^pMn$oy{QQM{?n%uAOS4H%E6=R^Q4A zX&h;6n?9L&q^iwYW-HrPbCaR7q2vHghn79)s7_S7p0F<|m&tjx`sN-~5yfN3KR5GJ z>|)B{+F&tv^5u)$X4(;@M3>}gGZ=|27?79Sq`7Dnp)wJqP;l(y4ma6V%xhz-a*$4j zo9&QBjD0f<;XJob9n24%XH{Kjy!d zW0C&8iVYW`eC*=yd;eNs64uoxt?baLxP!*<@TT`A$6w|!R-o3KSxeE^g*qFgfxYJn9h^rZCx7c z!_?`Sn@AnbS_1`_3k0{kYTzl8Cwod-;9T`=3pD|YeC?~s;cJ0v(75{UNf4zs{8N|r z;Ic!@6-xGU7_Gz;h{YJMmZNjCTLua~=Hk9$iLV2)lD*+WJL!`!Us93&tu=^0djB54 zhT`q;`0$fgejp3p1eqRimYf-#|J22wOp>b@Y6y?5ruT615Jh5+u4gL2{^-&6H1aD)l zj87yhi|fwrQ0DtwMyC8Mk;B(rpycqV=W+xWoJ2 zyollXo<3dpZaib>RY@)XIh+a7q~J zRJ+u#;{az`c#2?R_dGE2A=F>-7=`)P8mJuM=x7b)ACQB`@6t)YTT!$R5W%3q2#X(I zVP-!{tqulan0Co@OglgLV^vd5Kc!7hn`!bsfo{>_3T7+9aSwy!fw*^t6UPB9Z>m*v z+vAb*G)pIrh-=tI%WEGSH#S;rR?f_V=Xy8*iCHD>xS#^2*HmVEdiqK_Ob7J@Yo?Hv z^RAb!H>M55`^WxX|JZ~9x7AY~GslaOCT$}&iC~XZsJIbep*6iPLy1(bUcrw_WJ14Y z&%pB3B52SDujw9@S+fO1hC_g&6)$OPIsku?H-rpr z@@>>e)6e7*k)yZIljw4@Vtkb9()=El+ghG!xr9j_j&%Z0%0Xd2BqSX4B9y))h7@(M zb_C@Y>OkvQN&cyOO)^4V91giO`3PZIF*VBl)0`lOfVr{^KVrDv}(=T7ImV%C8*C8I{FN*@B!|5pvB@MPy*@uw>X} zi05?yKV;CDYu#aDu;4uTx5FP@bE``G8RdY26dLr>F#~bB2y1xPtGg_HqBx0=F!)*wO#@xtbGy+I zy$|iI*QFZ*st@9;J`&jwo|pMseHfpXq5^GW=>aNww%WWKGCLO0NFv(*FE?mmlsY>z~`r z7REqWnEs^$t$iE_Oh~cvJ^pj!9R@P4*Sl$ZfkOYt7H8-cG^5 z_SS{kI3*j8_I_tW;<;Dq+I%*EyxDW9n3Sp5Ca@u?NMCZ_@4dKS=kyG7=$H)ufv>tg z)@2X^kKNn(Ys*#!ULXhA);$ra&N@P{k`YcX%GaDiwzdqY@{2quG41PSNUtZG?N&!e zL)@{;sRph5qk3H2hjs|s`MWb&3T{<}K}NG-hx+Txa(`UN><9BW--=K42WXm`i}6gC zWeufeMtAge0=1J;EH65`4S$UuhDLEeMY%ZrVUm>RBzbXER8UfvITI;a{l|EYBkJ2z zoNl#R6yX_!xI~BklZoY`p5?$t&8#EqlE0DLKuE4UdBoj zi{v2p*~B;I2iv;(`bzaLWu$7BF|OjPx3fAVtWEu{Wt(7oR)I#M0R82`E&*k|X)suy z#fPS6H-bJEJHd*U<}&4E|Gta{D!*Nkz5=N$^vxU%d+}|zTXLbGLXm98wLG64c|w&s zq1lwQm&VA7pp=0LO7T++E`Ws=_Stkx?>CJ&Y$l9>k43VC9`}Ro&JV1z9(!@ux}^8E zN1>1*1WnSiM1knV{qL9QjHM`M*R2eE+gHO<8)U_nirJs!=xT`BvGewDf85G>vmwPw3uV~s?|{SFEI)p0(+qP}nwr$(C zZQHhudrl^k-1+7wbW*F+)wR}BOZ0r1{8(BYuvHkVAX7psV0$kfJqlrj4`QJ-7UXY`Av~h?`n=xwBkKYB1{HX05)ycG969<3KL-d0Gp45dFYk?{?Yhdzp z+N~KN>&g)UyopUa1E{%pz~TwqSPHmBjSOxMcV{*Z@wu-kE^qjVm>_QHI? zsc)6StzL|K*2ABYH?A;3#~D+>v3XU<{K&G$a3T-o>vNOcp*;Ui;y=c3ZrCzF@R?Lu zK}GAxo1~W;)SR^wuMw&chR-N-9IwTw z!1eYBS+47szMQ!8U#;0&eE-;<2hH=zlN6ZR_vnO5)KB%@ajEqD^n3xQmAx zu?JkA>r}f<^txxAUIgDZIHT&izW2U=t|>HU5(|@SFKW0IC(PP0*4ZLz2|R_(JqR*Eih@yWnPz#3L=LuGk_J`gmb+gszn zoaRUS$4jDP$iZm>ollg=VI;WZbSpyHc-p`B--_hUM--oZB*1>2szb=&$vZQ&?l1pt zGMQFuBqsx9uvJFCWQ=O|&7#d*oZP#70(VjWIQ?X?$xtnoOJkXG^uhcwy48oF_X!p(Oom=-l}y$+)|Y8nxwOi=%X$rBMWvRjn!(cX^IRlA4Kt`GwuW zj8{%V-F|53FQ8-qWgjhMibn#B=zRm3a?AqUaNsC6?0G~$mAe%J*-kuU&VyfK zdm0X+y@z;8JOTjm>Dc zmq4my?@Jzs0<`cJm;LclUBmO2iX3x0i)8{1RWq^pJu-l$Yo{#nxw2VMrC;?yugKTU z@-9D#P+8#5^VF3ow<9g&wjLuyIWooZUh1JCY6>8_2rj}cAh)@mLh@CLU{HXsBS;Gt zuetRBe|qk8(-sD0@wHmQop3W|jromvhC$LP&t@KS^wXM<_y^;kz(Io9O9DwRlKYMpBWPpyrm&)QzhgT1i} zYllx%vj%9G8M%WO&ZP2JWn=Bj41>!Q{}b8gp;Rgr!xavM6@F?x14iFZ&HRkLL``2%Ap&Dq9zMQy4*k`4)x{b&(!-O+O#8_XISL05A1)b^8mCFUT7u6j?OVFND-&S z3)VZWo+*rgcu2nmHxplxs$2b)kZ`$(8{%K_niPgOHnkZpB{6hM5F7Dl1(fXNS=(X@ zh@n`UNjSC-(2S(a#U0fT5A;~{gt1m6M{76$*(~0qI92a6HVsn3?{oHPM-D}8KrbNq zn0dlfVp|BgK{^G&7Cmd2;zqU<9FKQW`(R)Q77DvE=?dRS=`o4eFAi(Z-Qj_5x zL=EUyaPFLus~tD#U8sM?xCC8 z4GG$=32lUs*lEfUD~9SzwVJ6;|MHCV)NH>oeIz3|H7~o^WP2&|`;9lGi=$A}?s%Dj z^;e%tpNzs|$rc!OfqAXV>T%RxGZF5v!_$_N^dw>jR(ENY27j$OhP*hxI`!{UF;uCy z0!`?XuIrDM%Zd5^X?cQI*_IhH0t(f0h2fem!$}&#ci$;cajm!MM{F;d%&b4hn;K%7 zoe46|su~(7m=3IQM&j-Hf!C?Pb4Qu=6VvK0ILqYr`h#Xu2GvJf$7H-YXZxqaq$^(# z!d&0Mn|i-%Hh%>Vp=WTTvjQ!)9*dPJ7*Z`)T8xciCyHVM zV~cNqj3B`Z=2Dt7{7R{=2|!s;t-?IAfJ@@M!2ghYxiFjQ#rUC6C1v@7qj%(^+{7!y z5auHtmRL5)O!XDfD^_qP@0MD`&_?&QoU4C3?Lsi|VO2-FN>EP1{?!?7?6K8$CBm-V z8iDX-1PjZJ$tO72^xzFj6O{BuZ|Edgb744rNGn}LpG}Q;!CSgvf zsU50JKm``L)D~0$3UgjBcFw4@9u75EyOY7vwQ#QHqh_cXznnY4)xKlbZPW56vJlqU z)6unY_2uj2bBjnJ75#I6DnY!t zeZz`oH$k@t(cur;w~z{TP_vR@^(={L&98&7Z1;FB`vdC@sx6PHb4;a83jODWsPEyM zjBtDPOqJg|zd}W?5u-#+E)C~>3WN_UHPyG+&eZ151wS4U-E7)aVOdl>=kq?}P~|Y` zQ2Gf6SF=qgA>g&6cmK^o$wdubOgF^S{oo_+pviO-S^hh8j^ON;`N+y-_Pw(!k-A4w z-VVrNbuf!NpkOjTIfp^mO(Lu0kfF;o8IIMpWV0+n$?)JGX8gP-fwi5Nr?4Mk#W zF;Ou=N|5mr$?e{sdJnjBm&!SrY$n)YZjn_ER}!gLAsvNkA?7W{u3srZK{7yLUn~*%>4$B zK#iX+-u++hM7#Qvj6g^N%*%92eA|+h;}&{c9w{k19k_(7;&7K|#CwLkw_qYHIGed> z0Fm1_L|wU>BQH=3X^oCxfx*HsT6M@kL^VkTWF-XA6K9I_ZN>G#$St zD^k-H+2Fbo1j(B$tu64Tlkz`~e4~+Nh!GRa0kyY5TD#7WK~-Q!n)io1461}m%+zq4 zl&OQ@#6C=5CJT&$cK%Tr(GTiGhu9O7kBM5C=AhsGxz|FQ-$mcB+mdZZ7^U-rr959j z0-D)`OL*>Oo96EhgHlzRh6GA1{%9s2aTG#9v;5pFQG)f@(kPRgk7}`Fc^o*-hVOyL zX06j9)&3a9r!wHAVBlFE4>GVVS~tdP3w5`8wt!c0k==s|TIZqG^M0^BS9>*j%9IZ{ z$_|YBBAZ_`1$0jzRS-`DC`r^A3 z02{};ZY;Nf?D$gkrfD-+{rcT-?vK43lKW0RNrmqRihh2H7~JDR%NA2OKamE{~t4_aB%_E$-kYAQqcSNlNIO28AG~O>^8XOrkOp zo}xJa)Io7G)HK)1vre1=5TONR*RGvf!+rUqtK}PlfbDtpZGfVOVcAbkEgj1{(t4-@Z)XWV^K9E zTO&#h(HROS*RIq&vC32)=3RH-yO9B|L3%h1+<;PrkF zjfZ;}MFk_D#&WbLyv<#>AK`d^1(olB^U5>f??rUid9V?gv8>R7D z5meWlR9HjTTaW&-rBLpf2Ahg-JL?rte@VGgSVktM(zp|P>*Y70;i3EUdQ1Ntq8$_P z2C9z(k88%Q?wNH?lKFd!eONkF{#jbFcm~eQ!YuG9-@pDTg`<7$7+GDe7`R*)ej8qH zwuuLE;I71NEpev*=3X`*jW@Jc#M+QZVXa&tkU)Wv4rm$lTN2|pqW`t%k2b=!3cxD{ zJ~1KW`eGVwcWftf>CJ=2g1Q1mJI12nJxkFLa${6f1N0B-Fn7I(ETX>P--2=dxC(pq z6SwqII0cS%JpaONvw(xwx~oRK?+RNDLH~ z0jQ>@TPmw7Os2|e537^VhCInecRYXFZvT0^!22MZf62bh{`5M;Lqr_?S4ub&YL-dy zwd=;~stn~>RA>~Yqp%va*m+dd^&VCUS7x6q)}0xZUt3J5&<7V+2lTO7OWQMRvyyBj zS1O(Vnd%1(TJI|YulA$877FcMWO%O!##;SYEOs_9L_e~WYQrrM{vB>?vx%mtyk`gj zms))u>M@PG56Wx`!$ycV7m_)+Jc?q?*;`OsNZMlAopcs2;^{wwv=_gr#IB^nm#GDw?s=?aH48GOO;KZ5kXbfN?Pc%_7BN>U8xB7C=Xv~)tmf>9`PG(QX294Ig=WPXXa;6 zu)mW@D7i@a2A^J@lZ0OBN{^H%I8uhl&akVA{!TS%N&A~dPj{b6UX_y{IZw6Y(lRbQ z^gMkAnnRN{x<`BnbJo?)d2H1|_Ze8S4Fo~O@xecBdG!MmHM{Vfh(cUF2>`aK58y5k zX{Mb4Xc8Fak=}4pi7o3k&y8njrT*GB=?qne0T%J2MQE7=jtq-i{0AXCaxYpcX|v%P ze5AT0c{PmyH88HM!qSa4tA*blS6ggr7!fBD4O>-QRfLjX7mb<|}=nP(P( zcarP?tk+go7-oWH)@zy`SvgK~6!+XE&nV(l)CB;`HrzSlntkJSsid8O7t5j#Rn%OY zH`>3e2aXQ$>X33T_4p|GqM#iYW7$j8$zdb0;AM9B7s4w&?zYNKBj|e5&rTYBj|Ln; zpKQAu2m4`h3EICKOre9yv)#|RF^6gRl!4dXrvd}w5}~Y*NARR{#qv69&7%Q$_MLH) z{Qc`j$kCRM4Sjy3#rs&h5ts<0mXG|eM#Q*yzO>Xf4vd^>0Vcnqg@d5DjwiEN+%-50 ze8M00|B9vtYb*e96%$%)-FWK|BMn>Cr8w>b%DK%Z^UIY$M%H0KaK5YVI zdwg<^*lj48jqbLA=IM{_xh7k;*$7Y$C_)h8lrm#5Gc@su!E3@%im&!GT2 zt?1vQ+Wh)%m@ZYsd#~O0Q>i#1gFI9@p=`xWyOqp=OnGMYSJ{|1J;frD(1SArUVYff z6A&S2X^2amZX>7uNBCgvd;STSP|y4rgF5xr1|FP$LbB_j|up;NKDJ9>GPWRDmrWguY#asPCfr$)gMvPC+ls zNt~kjbqa}tmPqzMWX>+&QjLNtlZWA5 zJH(&e`_s^{d%5g0hTArf2trX48;7n~?so?9r8$OtZdsw}G}YaH0Qxv`^uuoooF}0R z>9;NG?PDvTEsbSX*D8^JHt$mP?%b?qaPQdoKHwV{O^GQ)*-JuxPj$#3aLW+~Cc%CD zC4h+yEbW6G`CxgB#!#ho<$Yt>ddVy?htry;j3&nvUrOC@@ev;^gsU?=uDVl1eoNpU zi>=ftlf@N4SLofjfRbX{i&FoP$57R!ch`;v`$j~Pwa*A(Hd<~1@OIZXWdWsv9!9Fs z;&OpNEfI4+Fw`zmn& z7k;e4T0JeV?`t-AeWmV|V-1~}of(84KMAcQpA>2-4vCBU<;-o zGfnb_Z-V|f#L$nc^Qa?j@#cq%h9ahAUL|1)<}#IliQ>%vt+cJv)r{GJ_`SB#mn`>~ zOZ2dAw1ThJCeZ5EE6or&FrU4N)js%OS%^Njs-j&SRuF~cYqyWW>H1~djUs{5MqBTM zbT26aX(c?=vt&Dc=tBY7O!#J`^Ftzsrq!m!{cn6XR3zms6dskGmB~n5n=BbSP^}`* z!D}(BLi%I0LaSs%YN#)qzn|ScYOMsz%bzd|r6Sgk+kHblSL268H@|j{^Ip1YQ47|< zH@X~WX@TgoN#}5598riC6~!hH8h}wo*UknGvW7neypMeSLA7a*XsG|d1Xwa|oymrd z6wla~hLU8fI}_(MVQ&H;KuWR80TLaSwd!jZdWBf>lbq-YGEKX7eh)i9!=ie}C&ba!hotgy=Xk-V*Uc@V+?E zMVM8S6wV)SpxC3k?se4Qzs0YePpj|2-mPzv5~hM^QQBw^1T^j`CBtSc?5ii9GNPDbDMMawrKaN}n9l!n5eja>LRe!nh{@Ougi9Nd=6aBB`n0 zcj?V2|A$CgFt&RdZnX;>OGX+@hFK&<6sNqoCl;6qJwNcLOgqJ_J@T?Q8Tt2~A_U3= zY)hxfbuq289~9R#uW#7WxHT9)Q}t@e-}JG32VXMx&Vk_9Asj4 zcWcLfN@M1t>I;FMCZuGX08HvKX37A81HWn9XbQeP7iPy0#KcZpMJG*izW^YSE-lv4 zyF})Py8MELGzTX^=q7>=I{wEZ3eA>?^|FzPMpqT1!p2~vIy47Xfg?>&DE@6yqFp#* z-n}v`>f+#+O>}AVUML)3-LrmyVX`fAuyqE*c2}(Lh zck54!B&3AfyMF15x-!{y`de$S#};Fi``M`S;nciw3>2?0p>+-~SJxcXv$`&5*f2o+xs{WbkDejQ?>VCRi!NOjw z?4HUp#h?Jm+l1&OP#PWvtw!b?`mKv|qlh;s_X#^C(iLk*!1bN_c*s$VWC36W54f4X z^bkrLsm7MclXfy}g#zYso70^}%l=MmPW<{6Nm2u7J~^pdhgHfXhiSQAB#~w7(oJ*i#1@7fX6|IdG{Cm(F>z6C9QC) zr!QFp#9Sgpzud8O@$H3>rVh`FPGVMwPfD?oe?LOZdHP|3+GgvlDq_yv3cRW}MI*L6XL&vg? zSghFlN00$AFnM$Q*M1!cP@9~;&J-t-@Ql?96YhY&b}|XrVWmgIcI|GnCB)-Re#^63 z)(ds!kQpfcFM0?BxCAtc=pL&1c63mcNLLjjd0AEY7^K|Sm~(A|5U2_k z0~SRgJDxNz?X~N?OK`Lci#)#aG_rMgZ}m3Jfne`uVjBcn4o)#L~1+g^RqT+{*=C&Awgd9k@rD;m$h#lnz znE#l%Z3JmLVYvUY)hI__3x?iT6hd-MGg>1>R$p*^6oo$fysH-UvB{^<0639q{MH?p zo!wkkW{&@?3^8r-fRhFCg874D=2Eg#Q_RY{tHFctB#WdNv~QEB`17fYI7E-4i~vkP zv%i+ce=dQ%-@Q*L*4p0JU`|;A9IcsAq&TX=?3UQ(8>Q{{-Y|R zlbyu+Mnh|`qDf5c7w%;-wx*aMMnGMB;fzs#v}~%CG=meM;%Iq^d$;`P$g70T;OMn4 zyjCC!C-$K%6f-2J9B)Z@Yg%TeTVG-LQR~Q@~tZb|vEVQ`!p4dftN%T49_R2|W;@`0U>2jOD5P zR!#A5BzNr{u7mS|ZjRrtXTDHC(>k3(MsV~+wlqT2!{TSI-4uxGfMg}n>HvCxLLoXM zEFbshm1qS=vK`@O%qRH2-E?L&Fz1etry&DX4Lf#ZON6f_lXwv8gIc77U%^t5p_k$Bb= z+d?MWXku0$92GHo916MO^6pX4qK8I}O*051p`L95?*(#_ax83pmft>VM{3qrL;;xDoB&ev&yo2j)sW2^j9hroiMKyrOm$50SygRqMOtLEsL7t`n{+I zXGSJZ_yYEGhNu}w6^a4pf_L0(Tmg&>dLXGeL6`!@)9J%3WtmnBCLJ^T$7~cn?UXp) z#xY^9SA(I#Vwot;rN>w#_Y-;@WesHw5MblKp*POXk<^x)aIL6iM1|J?xO?DQ)%NmS zUr#SLD@ud@3(iMboy`hk9A=#&mAjY2EC{Qx(|uw!)b}<#x~jJJv%NiJ>BX4pKY5`f z3_wfx7>488wv#lJ@1C*e89jsXQww$hM5V;*^Bp9&6uY)I3=TCH&Tf=M#NS+Voha`=pQJ!CP2gP%rT!8=5 zA1tLvF_7bAw_>&yZaZt#>yxdmo4f+biVFIQStjFc)T^#xP(pfMHQupG=FZ=>M{h1# zoE03&kB${_u0ohAF#vU+Z1*<#B#*0`q;8xvtCJjC{XCqF0C`*9xVMEE%8!D=FlCY5 zoF69aUHd-dg<^(0wG2W%rxk?~)S_aLyaAp%ltu`l3#GKZPHO*2>mls>WV&2DS9B^A zjyVZbO;KJ5RCdnJr!xE=sT?*5kZM#rY_=Rw8+6>#EG)y4Sd+)59p(t4SC&;yYYZ8N zO6Pd`5lO@c_VllSrZN^y@TV%nq~9*M;>k5c zoG*0Y+3hJCuQEtkdA_=)l(n=7mF7~^ZLGmP?(osS@T&xdKH~|B8p8)}WA~jYf3FhN zhnBs}c>dD<0Il&})7t@Yu9$UTLTrz)bHqvhz z*XeyIx?JX!Dj$?jm{_tLI!I2~!r_p{n}aNSBU*UNoTZ>XrgJ$M}-m?aT)10%4v&SHidJR;~l-Nb2%eMzY(d)82SYvy~M_H)< zcZ*1t6&fseGzRykG|qT&*aUy&tHfOP65GQe^-F_x74C71;hwEN}B~7D#zb*e_%*T*Q!C02!+PV7a3A~J7b8MwMZkS1xAXS zUSz~VtxYD-XybP+$qYeuSR5jqM)Goiy^yjNo==;a$Ypp5*D+(+=<7R_Kb~A>lCEv+ zsyCo^hoIT6^$Xu^FZ&iK0zd+V99>jOto98WbV@dqd|%OMnB8(o8pt-pza+1M!%JH5ET^l#a@0TPJN;DnrS7BW1Z4!lZK7J3tz^Osa_-&mT!qq}qRK!@ zSVKkc_KMB-C_+A(yhB{>^{2NS^D0h4Zy%*x$V~(x1cCzAs5gvYpe%jNOCd#JqJEZv zdNP5i<)G%f$4(h^39wa!j~@zKMEusH2$<^OOVT&{q7v_4F#MY`zZnA$-i8&h$2w=FK1#9#`;Lj_VaaB z%&^{s(wr!|QDQ@E+Thls#)*nEMxLT}A1; zEEw23(>;$zn!4lO$?8FokG?sqZxSBy53i;)blKxBjQ@k^fuLL)1NA?BW#P%WP}aL$ zF}{}=MMOn{^`*K)@3y_QQvN2b3*Cmj6bRR;A<1UfCR@n;(xP=;q!oMR$<~bH7-y?1PkA2r1z@JY&j=zm>u4ses7|<)xEaSZ zBL8j`5(GNwGn1v8J0WBpy9Iz9;2DBArEDd7efBAbxPmRMLTTq878{a{qDoj*so6* zyR%IAYaFSmC=M=o7piFzXue)Ydi?TeZ9vV}=&%s%TnF2-bx?Ydb2q;g@Fh=O`|vrq zsyi*SeijJ2<#Y<0a{;Q2z9E{tVUT=BktRzbQrduW2DpfN1AtJy%)jS{#(gv@lXp4y z*o&5kgcNq<+R+a!WCeXjdj+_Ha*X*1!IotF5v*$~9}x^JUx8F8Yn&Iwm)quE$Mie7 z_IJ3TU+)34{F4!pt*AmOJded=5#y*6sTtZt)jpqQ-Y4oqB+%)8^Hio=Frd0^0Uu>tq$oXiM37$DP+njnX{px;P`*Jo+cpdb)-;YbyhC_8D2sn z;b>1Y0tQ8@UQ3|SLq8jc9jp(w)$W<9<0|JL@DdsRKkGoWViMHma{SZ(Ryv|3clRw2kMY}HOqb}8eZD($h0dB^1F@L! zw7qt4OMuRuLLQE}Qj~>{m)^o_yCaAHfPa<j4$9LM(`{I0_%yLqU>$Sm~j>O z#g04pLaS;%mEKHjr5Ky|@FXkT$v*22OL^)m39AJ=&sqzo$MN^lfk(}E)F>*b#G0OXQTR>=I)ou`AC@3NWtY)EFOKG>fVm4C_8}kCi z`QFqOCLd|AUL)!9ngB((e>j)qy&<8ZcfzN1Wn!B{YpEkE)aRo zMgrdv=yd^%?Z@QPKZRnNj7@jQLsdlg0he6oxzd|OQol!#)Jl{w_47I<2@taVwjj=C zan;L}_GrKh`v@}e}=D;G`*{;GGo(F?uF2fo^}DyiT+T7}8pL&uVpt*;-d zv2DM1Wa54klIYrh-L&(v{sS)E87P1bl^ks@Khne7bJa?~i&d+5HI|}>B&nLdrj`dD zBx>>X)@+)c9F70tq0WaK2D8<<%>}d3l%FSpe!#<_9sjl5X!&Y&3~jfnz$`@4b=D*N zCrT1=InbU_QEVI85TtFkedG)WkPV8PF8+zJy-Bl9blm{3xl`?zNX-5iDxZOWtjNn- zQN{imj;3Vhz_4r{v5sEySBJCzLS#=HP;MFr-(^7**{1K6?hVZK@ov)|H#+umD%-@;M^ zGIuD8D}7!dacn08s*`6Pg)dXhJYnJ*EuZ zwCz!+jp=E05)aiN`Trh>t0r&V5Z!TbM-K%efe-dHR1Z-G)@F8 zToRV4%5$|sr|hqU))X`itOjao0u{pI>!1v(^OTRg5JpAx7gWL2F39~`5s&l=qmOcKG zeiF8bWB;O^g6xOmzD=n=+*P>;7f;;u0pGF~&^-<;cQPFdW_xbmJps&*0IJ^>C;*~v zhR<6`w_KevJg>Ol47fFr(|tNec(rOH8#VUl(i+wefbbP&+RF#X?&lU^mvGLk zq##YuQ7_dm%CMF!Q6;Fa;T5AvTAKW-`aZWFojeF`TqW=G8OFG|2;FMP50wjAIti&+>5$ePUjxoH0;7Kq zjaHILwGnMYA*&K1VQA_6QpKaBK%c|rGqM-4h-AhB2GoEm{vwcZW2qT`9<@wb6?E#p z!hvF~$FqqX8g#iW%KWErPN}hRE3=S?PvurS)y-bjptD2RL94Q(YDgalmYfx6&Gs!A zEjsPPQ}i+)hdw5UyXhVGyy=*oe`<^In+w~bv%D_h1f7gY5&9a&%=_c? z0oya(gcVCUeGTA>gj|k=ZY~6)pFs_)Jp#oD7_UJRdraWz znI4n{vUaXEmEL39MI~+Au|faR*|@U+_y**4IvRKxE1lcu`*?;hyAwkU$%$ zy!?ILJla_rQ5nQuO_RQ>%)Xg^wi33Bu$Z5T^QVi8Dqn=WOy8v^DB13fLWD|m-4AhA zABRDA@AAxj=&xUnhmUY`hvWndK>dL95$6Y~Qpq)frAxmDJ-V_D1`ty?qP~ErUf4{aRx0T&e$xtUsmPL^F()Bw4BJx2gu_WTMgPZ26D``aghp<|%=itgkqsem( zyzo*CsGucLL($a5DO=bSeYR@EqkK^@7iDu9e7l&eHY&tPeRQCL zvZ|!qmZn*LDh;CY9R89;?VI8vLOzth*g){OQ4XVeVNDzmbUL-Os`D_mck%Fx;{II9hq{NbRu0#xQph+kG2JRgg)Ta9sn z5C1F5rc8u0??~?WvqhM{!gz}XUmHRe^S4gPu0uXr&$p74`Gz4BEmv=U$AQtn41;Co zL7)Hfa00Jg#QQ?n;Y7K~R$Ji1(DLyF9<8$G&Xyxehf|t*3ud>u$EhveLL4?xzOu2= zJ17$GA{bB;R7QF96fg+CpaBl`U1>UWbEJ~YXbS>4D0&0?Gq<`T1v0|kbx+vZy#pQ^{=GPUHq0=HC$|#4 zspQe@guifWnf~#Bfooq5nZHufxfdyP4)!~5eWw=yw6!-VDr^Ns?Vn1kcPQx}QvelW zJhTrW!T*g>;{)J&`7bd}qMlw0_u_QJox9O&wBND=_Q7GFWYnSiroStQj!0q+^e(X? z-NT-cMgHl;^R~52-45GfzAr2Xm0eAyHDdvTV9B>-(ytR;9DD6|`Zrr0nh46)su*zZZTWE8Q4ko%53{qsGXN54ZT(uZ-nnaGtgRshJ{!M9-98=4!OzXeIj zvznL$S5y;%w@0!4Wko3j!p9fpqwxW&T`^|ctIY$Jg8%aj7+Dvf!~!$ju?$F~$&tK> z9s-~AIA)55pUMsj_3fHcvdfs|<&MA; zvS67i#T;bKZ*B}E2J}9D{q%;rL1dlqmI~dy!lEQmJ4idJSFdbJ{bfCEcT0?oU26ZR5$;f$?borM}Z!QkBaiYlVF zgZ`qnceC4DdfA3ZAc!z!a@6UBm(?%qa$nd5*pih!;^Pkr1oJ8@YJFli{JHVD6J!N8 z%f_=U{6LmCmDEPU4->+OKYvD0yg_6CoAhLWi&tUd)h*{zos9oD51KZG`}XW~4uLJt zJEf8lP@t1_$)!p{KLQHViQDl`fm6ZKg}4e4y2NgPXI zb!Ip7VlmZ68fL&0xxGdw+{y>&F+p{4ob-y3D_Fe3Wk$6ZDhZfP4z6PFdFXmuOTj>9 zfPaK%EocT)RO+(%1=Fg1rq=nEZ!9_+Y*$)lN2(RPv%AKmnF&d%s5}@S%`S@&F8!Gu z5-xOL6Rk!gC7MlD6J&m}yvdT%-rzRs<=;vIb~W1N!RsmVHRogW6Z0yk%Si?b1L-|ggTi)D*-{TtK7EpnG( zTJkWIlAzY7i8XLhbC9O-?)h?`(gY_IFTL)`&hp*#qogs(@>n(XeQAW%;@o2qZ}|P_ z!wd(!P8Y_v80}~nV%2p2X9tIuoQgkaLnM0c<%FSfe~&L8Mhzsyo9=ljN=(UxEa;iJ z&6i((D(x%Rj+S!YNF++>O69@yM#P)!^(V1|Qs71?6VfHnN|4Rgt?(14%P2vq`N62h zN_n0MFAfGi$9JY}(|5~;l4c&Vtl{=}*BFU6F#E$d0gypBai!3RxQ!Kt!Y7Z5|gAvZ}7&#z7lOqxdy0v<>BWvY@bn@dEEyBojTV``p1T%0k+DAag zmv9oBk5vjSzh1DmsJ>;4MznYAlHz{B>2~^uHyR_>qbIlItvwfZ$1C^=fn`5CWsD_h zitvhD>2B{AIdI4-{Q>EJ25Nd-h7hLs)vevPi~sKE5mH7ka{nIRWt>B%I z^hF2K5asst%%cEq45&4e@`F)slQ`Ue7{HJeYR}D{ym0xKb@<}LIGMf6Zw7mw&x1mI z>6BL{L2g3?ZP|ueZt=~+U?vabHehAPdCdBrB>*eUDBl#D7FTic!|kXDKzwz!8K$Cc zrIs1v9$x{_vjs-aC??=&7XC#`DpKxan)uyEWcwRKaEyjq}eoQ3&wxf__Mnz2iyr|RR^mb75j}%<)5dV#q*T2&s z5ZS_=Gw2o{1P-&;ljmcROJ!ajOn{cUY}hd|+~YWfTQHsE2`j0MHy)VGmgtk8bmi1! zSm$J`W`VUjNJi~7w~oTikNN*6zRApUqFVZ!DVeoM>*U55S>YP-fNe|EnkTK$cz6LX z`%sek-!YQbqsi(!f*QR@dOzuf5i5G+Kwyn*UgM2g72ry3zpihr@B=^e@ArhGJy8v* z=N<1&K{5HdK!aUgMVM8i1|nx>(;dT|!#3oGnY&ymGMnD1mVQ)ZEBUu_j z=gka@*vmw`4t~OR7WT8(~{kyQvk{1XnVywB2tc0oM!gYn&T<`B8Z1R#^6buKlz zE4!B!0*Rk-I6e&l{}q4)+6o$r7H*A5jIpDE*!;Q=liWtEwq*Oaa`w04<@i@4lJ;L)JU?3Zn(D+WWz0WV0UuIRM@}$OazA%tU@klX?eP)l*fWi9I-O@mK zfXdlQ2z3|1D5-#qvDbBwZ+Gk#R=J<*vh=IrFtjUBpCp7xUcU7BKrCsguy4Z=c(Qzs z&G6-O>qb5foy1B#>VwbcifXm;fh{RSYcsUpQ&&3;KFW{JqV4wj0cP9kTS{l>$Xb1?Hn_lWVjI;NfY&i-5gP9DIhAk zKF(z4cQA$y>)%zQ1BliXbe0tm6YF@UGXTpB*&R5sN^DA56TkGv=*DNz{oB4V-mgz-^T$DK)%hTP|xMhQuA zSw+-D!}l!lE*ZD4iovWv;?0Uv4^EpC0uMI#k1!Ld)}m&%tV#^dg}~fqoR8*Ku#a9r ze_YQi84$7PJ{@`3ig9kjk9X585=f5$3~}GwtTtJt3?Lf@;by;F^G2ZM{5TjijE`>q5}P`V9R0SvuBN*c-Ymb$zb-> zLFnN8FnW=)N;Y^mgO(h)TJE+>gdQn{%o3}8;|T0XDX$p&qvG}vxg91xV|Gxm>S(`y zrZ3gNE`WxHN$=ruE&5Rj`|*4=7~a7ITW(YCE`m<}32YpuP)|g@JaQCD{a?8imI%#J zBxv%DPpWe#&5Z=xmAWCgI$x0-)yV2LVjEcCdHs}zsaABLCI-}5bPBiA9c{V!rez~+ zB@20^A`!=u!n+BcXL33Q32)=W0PM31t?^dX)K&~ihOcq#O^XvPdm6?BeY3vSLS7<^ z95r8?K1NS){(l%5&zG-_lFhW>Qstq+40nu* z16uBWO?zzEge0yCoN-hJFZeH3RE0#!I$wjUSCPBV?*$rNQ4jdjLDWD9@My;denR9- zSL670mST^_L}dC{#+nU>AafC`?Y{YlFSGn@JK}he0d|qBb(F$vI!esja`*{F`^-*L zeKN-$g43BA{}@<(&OqFph!OT4Ig*u>#^u6o+*Or{RG5j7W?-=nsK=RceU+8EbnM2Y^&9dh*dJkJMc-XH7?m)_Rw!^dHd)BSMa`Fhk9^EX zPQ2X*sqyS8bdXgDGVR>P$<1VxF)?`k4WTH^C|+uJ5QXoEKw%pLsYT6dk0C)+g!g zj*8?xA@O*s8e2Z3S(Cj;oDlbQ=VYKG;Y63dY$PNcL)T0R>~gV3DK_|d(5gBfQVSl2 zFFK-;!Ww&X0f`N;7R_d8AM|pDJkTB&FIncFKznhB- z5akzHGHpdX&W&nSxo9^nnI+d1RpvK_i zZ*|{t*@Hltk}qyxuuzXAI=cKG$(~-Aok!qMO#SAQ$h9FOP5aDe@Wuq*()jp*;Msg# z8HaVrI{@$ufdeSdneNfbetUOcRuv9t)`UUlpLYXFdCpD(B|kx*yS zB4FW3`>^;dZ@fi)Y~q-yc`*u=#mPofJ?E)q0pyK6T}FXueoSPX591Pb?p1GuKw@V)In$Zi;IS8*>hz9q$2D=y_okt`2mEb*zN_#>=;1X zf;Y5Bj)D?Er#K|Eq0HSsCJ*JBZ@CKh2Ati#--&IZQ4M?K?V6mpsdawEo|_Hg=n-VF zQDCNbA?uYK%%xZPh;7H$r?#Fgs#EZ$v1N>z4*f=Ci-`ku0!HVoC0mC>aP4Z3aY6#O zqiloPqrRiArf71g7VN$>6gGF+qVSG|MW{0W%#k47Av|>xrLHb*mj~ne@;Cc~_%d=2 zKU;eAZCRQ0m|X5M`;o{M2SKld_~L?t0~>J|$H0p5#kt*)1$y<)&L9Ru(y0fuwk_+} zpdHe5UQyhAUTBR9PeydE%6m0zx}NFR4wqL>ySz3LyzDetT7gWx|NZu-$3Q{6hftx5 zW({1MhLq5m&?eP6rF+-5J|u+yM_#et#gh0NQpTu(2OG&xVXCY2?;+T{pvoylCnXUC zVKq|!7OfH51%Y21kT-JM`d^x@ijyQ(zQZk%R2`m$^Jl1bqeNv!rM8bVx5e@paIKDq z4||CShi3h{S5klr>e%SOz0FV4PXc?&3{0h?^m~BNYf(7S&U2Jv&|lokJY3`o^EO;q z3+($e(Fxkf_>XX5Ai($r^UQokQNb-~TC16gvifBJhBvHZ(S zB#AfBZJ60=L8E*Ovk@`z;7y*q@j1DSZaQn%yJuGTvV^98mw?w)d=&}#h+ex*kg}## zW>6WsgRH;A#5t5$E(3LDT{VOJd|`FPd_X-|$Y^e_N7&j8KS}qwKavZA?xzO#k;WX{ zN45@=2f%>Bo?FNX%1eOIFdJMKg|2y>3=jSG%@vXV?+g^+k@*OT169lqujXD!{3JsZ zx?zWP#_gKAf+SP`3dDTp+R+Lwi)xnCYFv#l@rcH-w)~H~dM*Rzitf9t7ogisJ5lNf zea|QsN6=k-#Z%Q%b&=p{)oXnSc*VVl< z<|{@%hmAo#PxsO=736a3xbR@sM$9s7YjKQ8@s@$|3$c*CKFQ&cW;{6?*l>R=EoRwV zcEN$|E}NCJ@d2hcaL3;kuh-|Ki(Y^<*?**rF+jiY$}`BrgcvYlkdH*pFr&sZ*}Hk7 z`<*Psq7`rxx3-!}9%q}s6GEOwGMs$MfJ{DLI$2VVAzxHh(PAjK^}M%TKF1x{24ZBXremnGb2;p^fx?4V&zS+zZmZrWi4DS99lfesx zqIf%u$l5;7&gGBf8pBPrRUpS36oC3PNHu#BY!F!O(oG|5-XKE!^IKfPcUou{(GxWx zL%%OjXvG?)4eD=t8J%f4u4q6OaLcgpJ0LA)26>*tIgEwc@h0N`A0P7VpU0Qn_tMe@ zIzg%L2naS7@(+Do$zY^ZGXCgt9_XKn(F=F919I%?g~|CUZ7rmBwJiv1zM-qKD!IV; z`or0e)cS5?>4)K2I*KYU0s%+~ZBTGqui8WX`t&oA>JxK4`#P2SnMKSAA4^W_YZ08M zotsARBX|lbht9~7MiTc?PZ6^LY2W1vQhwQTK!2xvx}`v} z$u&mFHA=opVXiL1Oaj-4-Lu(4!DM(GE5*isNzGhjRY(aL#nS7Xh@x_}WxQ&|Py*4d zdwUG}CR!M(3=12gSBv`(>d^f~JiIxj%^Zn=v1O#$qn5)xxX(gd6;l+fCUErTQloM^ zz`Z73`F~Ix>YCjRFV0+7CaZdk=LqN?1Az>P&5iARxIt)k#ac>E-b8uOWfi4zM7>=D z{`ZU4je_tX&MV2<-=BjXvI(@-B(~BLq#&6T4XC9#2a|deGu$>JVoWQq6&e_HZ+KEM zp&`X_>H>qQ-M_V=lfe<{ySx<_KUq;n0oX0pL47vOGl=megA$o(F@_JqXfP%JP0C_x zksVsz{;^zuid3{5G_!B8j2$F@=$|Dx<=X-mC2aMrM?HoX2JP@m2H|>`g4msZlfW|* zU#3Ef--+esGC9D&x($!K7G2crax+XCf?HMNs3iVz|EsDTqRc@ihaU-BuK83+{<>6w zzlD4!+rIa8`;#_A8UiGtxZYHu;aFtfSf*)^W)mr(5Z^ihb=)L0B77J6f#>N3p2?V; zwsLWK^Wx?dpW~n6a!O%AmUEs^HkjqcJ^3+DJIGiYtFn`j=Y& z!1+g&2jhU^t|4CJ8FHCnF5ZQ%C@&oj6U<8}SNskPjHD5TgbxI(L<~TcBghkhl{E?z z#RU4O;E?c0mG{RVdK$UrE42JzVzY?<043*Kf!IU-3auV0_(fQ3Cu7qp^sI z@P>+p=i}Qwjh@DCLwsnJnfj@4cj7ZuF(S}(#y_s`AEE%tH17jm-Tx1($haIi-8<70 zgOlhb*XR@L9Kd0oo`gu8zTR9QyT|Wr-7p-UM&b-cl7A=5r^V+Rg>_)Iy`MH-qU+ZW zi4QpgwBe|ihJ(yvem>e}@3L#4dl%$m(G#bl?#7(Xs|ATJ9q1>|;rABUMIUDu`Wpsh zSYo(!l94~t3EtMw=M1JjkT?PE{eGmcwsKJh=7Pa8yjcQw&N2hP3;v<#F%&JJtu(w; zPraVL#pAm%-}^bEIlfs81kyitEER3wctBfVZat-q%cf@ZDj&3KEG(6?jURNQAY9=J zF|nP`x%A#BBYt*OF&3@Yj1@wmW`0+S&yu8)zN6 zz|URzcH_&LbAW|{8gYNceKBY;wLZ9t!r53uZgtx$FPE4SKY8U3?zi}0fEo}QkZzp9 z$_3Bp{!g3iBd^A(!fEIr)n>)9TzZ|}eqppTrL0+{Tmd8fxdD*=x!l%>z#V9|)o?M? zJ$wL1u|V<2-zxmRpSs+@#+X(^HdM2cx$sJ|GBt%Okpk^fw#-K>j-BwzWLf>MU-#gz zVj2r_(Uk5ooKAsw6{8H_Drs@MIX^hVu#%EjOAss}2V00ujrm5PmuW$gP`3KMI}FOq zMH6FGjjf_y5vNavdtTr?+rA7+8bDvi5vNiaEuuZT(CC+_YrkVQq7##S=)qu#3RdsMf(bA1mO;(CLE~p#x zoe6n^I<<+_BDibD{9eot`?Ibk$k0*kZW3c9w_f~9Bi_*S%ue8PIC-_Po0(8@G_{JB zu{H#tmH{Ms&t)EoHt&Ii-hmfNm&nEck3#u-8B=-buLmpcJM#zk_|nC7mMqt%6rqx^ z1y*I^%T}ZzVo>JdVj$c(A_KOF0MnlnQN6pAp+S|KvrG7A?aj3dNZO)s9#dY4uw)9h z(&_xPaPXddOm@9z2u-Q}V1kS0cs_)cF8w|&FA<%Oo;-Y18^13qeeDl6=<#%@B;Fx1 z%4>fRzVRz}ir@Y(uCdeU+z?`J34}5k`orkzHtxme5F7dHZX`HZwkVH>;HX zZr$SnU}MY=;>}ERun)d9H7yo^SK~s@@v1#lTsNamp58s z0raZpJKV(|#+|!w!c@x|SJ0{_0R*&dW(+r@7R--1>iVk)CrjD^0=n{bKSg>ZNi_d5 z&j^IWiZx7!hl)c!Bo?Q8*O=^YTfhDx>FBPxnLYj~DUU zfO6|~lMp0$9P?B&H_iknSA7~;?m^^TcMC4&cYX`U!;xD?OnF4Z-Wn2Rp3#0sjadLk zRV@*4A0iyP)N*KBx`2TX*EUP#aj_|tqYg(8dJu2qQ;0bbwa5IOO&X@KwKeQ$qW%GN z%XNBosh50x%*K_oe5NEtZuaLx%FFJ}QF2qobl+@acD!woBFvkbNUfa-=FgLQ5<|@V zl6y|t)15eHHl&|mipakgy$&37Cm5E{ELq0I)v)*P|Fx~>0#xIpY)_bE>>9$sqdROi z8<2IQQlj`{E@h=6!NUR&>J5p}KRX{RjQGVb(IzH4@#@N zKl^UIUCoE+y~uN^+U#JinTIg4U*k1 zl6`((#UM_9mY7SrYMfYc?0RxMO=R^{;BI#)>)QUDXJi1b*T%E~JP5U@e3pc#FT0gd zc3?MF(6Qg=M`{K3bb_)VV_wL`oT5)>UgdX$hVDJ~J;XRu84LJ|cSf-r=XOKH-6iUL zk{*Xqh1u=T-qYy{cE@q`4P73-*g|k?Vp9K*5d1p2-svWPf~#J3g0?R1TNXEct(*uu z#7{l%oC5eRC%0!%usUTED65p9e^O0QJCB_L!SoKpaJQh3AX zQC3>yS0-dhMQj;!J2`$`R03|JgcxGHjICFFl3TY+pnd9hr|n@t%@%Sw!L z$mJi5%Qxe0-Tu<`nx(J!b+<_Pbo|oF;44AH<*)vFsip}G@iShUs1l?_DEdBXxV}_1 zo|g@$Ncg`#&Hi*7CR_6(BL>*HIv2nxrIzL%9pO_k_R4>FV-wtz;IFS2`Go(vhv=u_ zq~BG2L`v7(vlJMs1usD!nV0%wS2`hs{od3>;KN}{n%0zW&;YoI1ipu{N{w6B*Ms`g zo1{Z-oZg4{ufbZ!eL(BWw{FVz)i(ih_KrRF$)9r&h5s`XlHk*nDy8bnR4Xu=KtIoT{r zedK&Ki4{SC${`%aM_1KkM?#J=U_If%Zub^-=(r+WGUo2b9qMWCdXC~tp>8v)#zoh21y>ymW$L=@FoKuWVZ25{{dtF9V;9=R8TU=za?@P0NZVqvNBlaIG zPLNQQcpA!F-!xY~R8&6>xgFKNdN92wX9%G*Dj}lH3exn|ZEYK$Pz57zKq`UQ_PuC> z+u>0WBM%$qaFVQ`n6QbaeW}rqO*|DKw)$?_&Tyz*zL9ol?<>j9|M4Qqn_tcdTOY_w zaF$|nVCbX8SXl)~$^(^4&XgsDDM`96_=YNP%SAlS*(G1eXpHo!uUq8aD~6EiOs~oO zTDp(c|NXC))F^)^Rgwd7h%$ruEr1UATgJ?bHY0vi@&cZK!Ve?Of}$wK6_Rf`$C zk^+|r2#0vOM>LA6EEmzG)FrWg0CSq|Z-jXt*OPFGej#~18`?6{(3{6A3(?=^k=Jdf zxpN9ZD%W}1N?tG!Tg+U>Ik+|~)sTn5*%EmnM0 zcXV64YQvMBfk@r|->fOVko-R<)Ys7J*IKqBV0|;49S7_ivVNM!xGT$GkxLq3<*|(Z zk`)%if5RH0%Qs=yZ6&_yQfx@hU&cCZ?Y&Qcy$Y19;mh&kY%ybr`?VOzhvUW<#qFQ@jK1n$PeA_4n;8Rlm!F8 z;={~#A51vp+L5X#!;fiT(M7| z^=!)`k7QzsQr-T!jU+nq02w~j0okssNTlJCZ)xS}BTXt(f1~s{UhN&)o${+%0NY{zXzRJa#!`VS@|8~ll6F#w=en8S)bt>QzpZR zqvg2^|B$GavObh;jtlag@9;c(Pm#E<;NCEHJ(N3dvZCP~64_xMDb=UW4%xuRn`G`A z`CQ}D2l8>*Tj6_3G-@AkwT|TYDHE7taPPpuX8FU=H{~bN8|L{z`y=_iE4=4ULw-wQ zj*s`xWU>-O)%kXUv9g3n&|Da4AAMR5nw@LCqYh`xaX{DQ#)_?O%FYbkNZJ||&Ml3n zg&9)n87=ub=Cad zL&1AJkegsXv+POIg>a;KZlzwBUPM4rL8C^Q(WB#vh0AK4YX<*_R8Y7xf469-@rBaV5*`#s{me&edz+1<`l+CG4VwVH)U zH#4W-3B>#~j%Ex=P9U;wT!S0GYoHmWfj7xq+I`x3lK2Xss76Zdv4q~2X}p)KNR`4?8aHnbEgPznTs6P@bvNgLtu4M%6)5>ks;2?}Br zu^NWb{HlgS#jGaB$<%!oB^ZX6ToF=9K@+ONA-Np|b*Kzi9+d+s8*&#m7G3*fc;F%<M6;xm_S_ghw% zPcuoq#u@1W1(SfXs7lHi(AqlSfV9I;u&&srWd7l+VeGXvqF@r8)u74HMSJG{=+v>I zOYU!gzIF5`ARuXa-11ySDHb33aTZ{lU z?AM}DV*nDSymM?5nigYwvWSc6D>a$#gqR`^+!| z>*d(sJ|fPRlox6b2%u*@QzXL%wfD+gb{tC2Nc3SFkvT>Jfg;dX7x(x4L?uI=KyI+`4LbfnLk1uS2g08!e_@O z>oq+#^A-@n2Wb2TG=iqwP8N(4h@k<=Y9tNfMeBviy=NI{>Kb?Nq9qhbjHumy@1Kc z+=(NQY}e3alv^qvNWo0OsrCWCz2p022^n}bp~LDr2GpO3V_`SpKkJKXr)F)< z32c1P$sNHmqW5%GXzcPQQPt|&4{T@mDJMSzGujxT*iKqYo}qmFBGhmr=Tj5559DG~ zIxyU6{oOy3x>o}&(M8pJbzYC!3RX6Y1+cC1pLcK>0mpYE=ReTFvov=*#!3eDmjz=S zdf6CB;mw#<^ai&Uq<`e-f6bK7p7@BMm~mUFp^RFMhhvDWa^sWZDHJUqWdrP9l+eZ7O+{(En=0w zna%Av;_PgjQ#)*_+TPV*ESL{kJ!JBbzd}E?ly~8_m3K*GcbPpU)GB^aZOwi5t49T+ zWA}6CE)pw~;~shEG1bUA{*)Sq9pQh(L3L=&=(e87pqqr5N2h9ytXeebf==5vCGZ=_him)gJ@U*uw65%lY zHI#%C3u5_L!0^*&J!H3*jsE=f$p0MD4tzZhUy++#?Pix+m?Snnh9y`rT&jpMeeaah z2Fwm-PTM1g`<4W{tJ`n2d=w~Q^I6`W6K5`*cd(G^YBqP)5=?uH#%&P~x-z=~=ug-a zGVN|ae`Va14h9xaLhyEskJ%8uS)A!+Hd+Kld3hP3{lhx5KrqC>mqWuNZPh3$JcVxZ zr^u|b!+}RflfowCzPcUzxR#m$*`DTX+Y)9gua_sit#xJu^?LrmZV*qV)jUPItpbRQ z!t3iuXW5hra2%Ko&5D9^qvIOozxen9Xd=Z)Dc7D{H?=nJo3xFd>VuX1X1yjSH9Py4 z@;4qYYYB}zenu*oPjQZKx~KU7pQTuj6rEboUG-srq*(Vcyj`N4b`tvmhk01tVJ6D} zf^o~T(q5Jmqz+l1pHBMo^CXkSnvPsZC`l8|YNs+4xH!>y2I^;?R;YV2HZNJjRNUOm z(bGXX?xoE==4@?Ya(@9eJsl~n;DJS#=RmOYlm8$+Cuww1f^%z&t;l)X(XBj#uo zBpB`)nSb8p;F*hVX41G(fod5BwQT?k&W|pn#lUwvUU+qi31+jpFM0#V3Rm(M#vUnz zqF)5msJ0{LjOykKtFa%BUe>Gk(FxsIz)d#~d?J3`Vb3qwvDi1kD za-YjI@gl!uDyBs{jA~_3$w^CVW&lG^ppDO`&NuOt&b+1vn{_WSiu41SLStotB ziV_jX8&$+T0Fz1$q~^xNU2ABy6W`9m4Ey`y#Kd%H7T1rBnC>;P(+rE~#vt~VD;a3T z(aHwjZICzEe$sK%qFm;i#DKwmWQII;DCs+--6rz^urno8)EI@E2)k?{>EDhPOmmYH zDir1%$*bYOqdjzz3E&T1!ej`GAd`O$D7YW^G;=_dtK_I{@1B0WVT}o?3rKF4D;N1$ zVi7nZ<3DqjiSOf-p>V2}cTNBbAQ0O)u`jBdey2xGZ>lr=Q3@(Zu8}Ozfo0&NiK% zC@nmd^e1+Ks)-OkJTXINH^1XtuTL5@MUF11?cMn{wzDM=K|C~=Qp05z<^aw*~v5a<0W{K_o;(DMVoM}i#B$}e@NUK^ft zk+w@c(Bns2wx2WxN$L8X@1#)2)2>+7eC*LD3VgY0CsmDlj_TAD4h~R8@&-3J){?%)7Bv|(#Jh59eef-THiJhsZ9VsRke3DZ(<@N@9 z4vj)ybJ=oK)k9Z8?s7>yN;gmP9M$J4k=C68y0F2CJeUQ4-Wo)+PVop8{)hJ-H~`cF zm>}dF3;@z)^X`psBjO{OnS^K8lp$2w9M}`(5QKUV>v;iL9BysPw`JOMmc~CNF}B4= zWc}Xf8oexfNrd7c^L5v>jFF0ePtF5xKN;Zx4Z~#$QaaeN4hxpWdFf-mY zm1O9mc$-$tw36b7Hdgw+Y$<$pzi;KSDw-xtvNDGv8d)}xl#O8`rE=ZEuR4I z7nG&2Hrm&h6Vju5y7KV@Xj^(+L%uI5F<=SCEC;Waa zNf&$2#Xr};o8i51JX9XZoXX77 z+44cO#UJ;&Tip&R4t<&kpLIF0rEjkX2s#+pbK8WlI#ggD!!-1)#`R?LRq0RF|EIB#?@c`HnFwvpj0@Q@(j1< zKnc=Mr;$xfrq|IR^yb0uDHJ@qVNfl4{;p>q%9YpP_OF7@RcKVIazH<;POf94X0w5_ zj+S&g(BICj{Y{?h7^xF?8l-A%{CF~}j;0=$1gOc3gy?4WL=pb$)4_#_)14>!Lf94} zTUf75k~b@2&rZob{C!LH=CrC90LjNDCBgo-1m6q)#CF`$@P!i`%SOdfB5UoU_FC(n zFdAR53#sw~zH-lRtPr`t!xeaRI+uKRT+K}Ii1 zyK=69^0P?^rDHx0^PmG}nvW9y7Ewet~MG>)`d*NM@@X!Kt~-2bKevvqm< zb6V%3?3k?1z&o_mmTylST929&qeqoj_J;n^b?LZ7vIZL|3u#Wu`}h;OQNn3L*G={V_Mqn z$E4^2|8*{#`xDtANB79&aYdj^~Z zuiA*pRRf@7#*1!c5df&CrFS;6`+{PLHAWI)a9bq2t?K|Z(KP2t8yyzSd}bG`;yW=f zzrCbVg;-1d{v~g{2Jr2(CNZ#VPU->WjlqdVZ)nS){y(BK3E*DHXW5&zr&iy&i^+21 z8B|z77x!ZN*M_ADPdf2|G$v>9Ng-V9}`M_FCkt9rpLF#AL#g1m=YlSx-WS11K@g@XxD z{LO@J$aMFvI`J87*`lX=*yM$Pc;inL9>-Zh;?6)V)zLRw!#LX4om7I@+j&yRXqmdV ztyx0c>CO9S{iK^3o`#LSWk#!X7uvsW2XOgNm_Fsnh1%cKOc%q@fgGN^$!LIH(TvhA z&qLl#4gIvvtZ*ZoVt_N5(--+B;cgo<>xbP*+(50e!oDVMndj-h$a8z&@PbZ*gulg-y@@SC6AD>z zX2L1&>5fXqDSBL<@ZLQ~-m-&?`d~qiXG}*_G5Ko2_@>&_T(PtQ3ifC^&uh!dM&n=F z9hhUg+oVHhmhizqxEMm=-8qWGe+;*JFTR$#XM1AJl48StbAa8TVw`Lo+6|SQ2O+>^ zhh1mEY|yDnWFdPTWT>a?km$rbH*s-lxxBo?XH99Be5zek2qHap)`s6dJk*6a1#J5N z{g@R!`msR~W$7yA3=oI)*q4`ul{uHr+1sjTal#d z&abEOaX)^*x0(OZ!L5t0#>_vILTk9RlD!jqf<&V(o2Fl>xctqtU+w=jPXW&PH6fq%j@^EX1pCC5*=j}E z^p`dY!3ClgL9M)YMhe#gJ2cC`-05^0g`+#BiobH>pxf~O_ULzkTW@r*hB70abzHxB z)v6T)z}NXprBXe!r)Ge}7F+vfXLIp~%-#;Azj!6d;L?zt2Q5DnP?)07pD!@L8uUjH zyT59%iHN4q7O1eKWSPzp)5ccK=j=NUd0fQT^c}JJaV8;p;qaI9vp#rFUPU8k>HoWV zB-Y<;8p+d0la{G}RE3iYAh!Fr*4wa&$29KA<8_GDg95fYyjZe%;zeNF&Qjnq#n9p1 z^{bA>1FKm*kY79 zZ6EMC9GB*225uhpd64ovie?2TcY_NiIOZ19mH|lzH9{Qj)2n(OrGDdnl0$`y*wfg9 zIqhBH8~#7VW{Bd*{+J7*qBPNOxL5as@|CIu-4k;uwZ4hrGaH$@`-)O^3)Z6CD5lECeIns2=V3j6^#Dqf10Rbo!06NjVW z!tknHxrZ7~r}HTfLp=t3V`Fc4myW&g%VCdGGJ_*EDjUSoa*I9s*8yV>~L0s2LdouKW1rz zdCWCQM>k&o4=aHX^B+68NZO!IrhuKmaHUqQX8(CRf$Jz#HAHy5xvp9`RIB2ciR}_^ z9;?LzK@xrwrU*KCF4@&iO~s~uVYDAI@1^H7K_Y0JPHexogmKu6NlY>r+1}?x+OQv5YZV8VIYtW-sZSIhum=EEQ&gAP* z>~eYQl15N*)cye`YQ-xN21PBUnPp@7xyq1)Zj1qG-BEc+x<~8<4cE{td3|U31&8^Z>2l4ulA^_&1co;82U4w zejbBj-H1>c7Zg1}AZ1L?gPOopdaGGLougoCvs!#$E%j`WyrMOZMa*HH*S|1}igll+ zjDH{EfngN&peSjY6H>zVi{EN*K5h2m#9csSGNYn`8fFU%7Zc0JBnb*<@}f8^WS&1u zK%?r`X*tAYdOIjwE$f+X=R`YIAx3DJ*cyXZnq2Ucen`0>IyboAh#hWTTM1_>uTz+# zZ;HCbI|4fCHUcw5wWFoRgOX4DjbZg$HBduSm<22{G}(?8qX@lfRNqbE4P<^wGP^l3 z9R8^HCU4EB9}4N@Utx}G9BPc6XVI*I)E&pny=HFVOSgh&yAy0Hq8FoxYv#_MBr=E8 zkg#iLqieSqpWQCLFzlMN`E}x$HhVk)jsAaQ_ohAjhu`TZ*AF< z{f}37;GI6|D_$%E`zVeV89W`Nm*)sjWbws;zUQ|{4CJ>pmbfPYl1b>8mC<{ANtAt7 zd*N6bp!hK&FzqQ}nA60qF*nkb=mXN8LAGnr-8F^tny{+HdX|C zAig$$JOEF;W7MK;5?RGYEc` z1N;-!G#W$yIa{JCzixy&qGn~9l# zy{3d9CW?DE5Z56A6zK_;1}(eYpGj5Gr!nR@E?_n*wqS@#zB|=KPTj~EEDjuw?}rp; zk1gg{LN{cSjCCi$7sP-})VY)Ju6wO8oKn)>WvTH-E0wMB;RtkA{lTQ0e>!3C9lKPd zVZ5FNm@Gv}csSA_&P%-j(jMBnWvXwoLA*gmru82r`n4g1^Iz4pc-J`%VnC>8(r-9X zb*ChLmv&lz<1*GKGLmjIu+M@9Z%!)S7NB@233PSTmFnzI&1jDbfRxj(l7+yXMn7>p z6xF{?a%+;MN%2GJxXyqNdAL{vKe?1Ma#>wUKj%6!|F4Xg`P1zeJ8QJs8n#Pg>cnSO z@KHBp?!l>vtp3dYMf@JPpk-&WO{7Qpc5sfAXEmcS$6&umyAj=F`(a&yxoha^!ub#& zINZJHDHoLHs~D7~l3N?+?cx1QQlv)^PQZOD~IuwWm^u*tJkqzgbI!k zO}$J|SXIqYkznf==X=2|An|jV2mHX*Rz2iMiZT4@VR~2x4MJ7CqM=66{*qY!3y5zs zd@J$zh=0t820u?RKG#P)GVm&!~KR`Unr*3A5-tR9qP@&_9!4U?Tnhy}pFlVky4X%==Rk}GmQsR^KN*azK?Oy@zO z2q3K;VYo@N6t!u+d^Am>fC;v&J;80FCqNC7OJD#T2qwiIJ`T88pH7Kj8h-k=V}$Rg!cS+|p5;2Q z!u}vJ4Q%~RYesd|;|ubc%&ARP+3s>zE(#>}7|1I70nh;6kW;hA9+|1O$kaj|z?=gC z#OK4d!jk#D>(E{-oc+MN)|1@$Pksx@=}m{a88v#}#x2JANx)u25*IB@pFP(XM11&VydsD0w0YQB*vNe&Uj6#^t-?yt!_V&Qw;4vUmzEPE z#;y?5(vAgBVnRhO6aIVd4#pCrvRg(Z5DdKUINi*}@cJBa(zX)e6E2_DK6a&SKIf!iW8&Z;ZHh!OhCB`5refO+ejm|+=$q!EVQvv3Ju zwgO@pM-)Ck2ZO^x^+h!eOWgS0puYTagb?F*Akp0hnM0Ph();%+ptqp(JsuJJ@=-x4 zO|oTLYRlOHowk~{x4O_f7_424N&MkN3bpZb#Id z{UIfa?W+%YIlAp1d^qW|$+iIPETQcCI9}7qGD?JqD5s-*KwHaVZLFfTdt1Mg0nz*i z4S;2?^OSAwoIj(bg&3Q#s0k8yG5RxS>us$P2G2J{fzlJ$eNXsKtg$ktKgeQrkPQ^! z-DxO)SpAU&-}P=IPWz~ymnSuEvj;?qh9T2vv(LS6h9bIOBm^kdOnhBSa~(@nY1H2EMaPci%yMa1K3~F>9TGN2j`#(&Xk)b-)Lcfv z6MRX)*?(Y#?I81Ml0*H^Vw#Zyf z7}sNWtD?w*jiw=-Is4<*w<57AIt0=sdOu(a*(}@D3}DVuq$VBmfR&CJEWz!E5y*y+ z_;B*>n}Ud&!zw;*+IqCMj(>DF7+)E(voW+Bc+uBVE;MQ0g~;T26s5b4B1VrB^CdpaC=i*C zaDNrV6}Pl={wPvq7c#G5k2;4rXt=n)%f|r#TT)v8hpcyM5{Bu5Y}>YN+qP}ncK6e^ zZQHhO+qP|UzBpHB-uVet5fz!SD|78WSLHoikEH#q8xY-_i@}qPgK^3CzDAZ)gLagQ zclF^5k1^zOI3VtDN&`4rVh6_M-DGMH#XbDv zA0MX&Y#>|0RKZBdI(zwP2;vpZS`Gc&^Sco^x=CnHAkTyod}{t`^!Zi4RT#(cl;jM& zQwVGjntt2*z(8d=^<{IG)wYkaGhDQQsIZlQTsI8XgPw%nM2hi~SX@5zIDauKsP?80 zW>67B_9}UeDb=6xkVp`aoHt>$;E(RH%+;-bSA=vPxVdO^VB`}0fhytc(Jo{=KYyvP(eUD?nOmR(&7a+(GZ02ls{OVpPHX^Udr zsQu5!2Be|Bx4kfYEOtKSrK2kCB2axWnpt?JnpvFC@LiZ1*@G?HP9$yX}gaM{r|CmD)F7Cv{yptU)j_uDHCAEh6b5NtQ3*T?iO`_;=%Rij%C66E?na~)z z@k3J)H0`_Fs3*-jsl+kCmc2<`X*_)fz%Q7colPVn)$wuOD%wDE6Ab*cPP2EBc?D9D z_j`)?r>A8Kn>`@RnmlCSMO@TF$R6Wg4jJ9KX$*!qwrh#?M%FktsRgdtV2*6b3qO)F zDT85sFN(~;_~LyJyo2V?5#gTOpKG>Vomm~JMTIsBw)Fc(;I@&_*#PWkalg5CthKOh zG<8d1Cl5qHfw|3(YM&ttK!=tsH8A>u0FHL|lw$M$*8B%{rOC(%`+YHr#Dv?eF=rWhd?*JgTt%SMP0qxg$sPbk3F+aNjcJGxbN&_kb|1Q7 zzIO1{vOA3v;`tjl&dd6};0g%>V93r6vm}7kLxi)oO11RR7W!6@&ng;Cv1`Q_e4t@y zYPBwW8#vZa6#vfFHDI9g+?@H|%&7_oREK>hzFP#cD;=G8XMNk}rfN&&JGFj@OoRUr zW)(SVWlw%Tm$v&kKwc|}OV;o!lkCd+ZB_GA^XrlC-QQFENjIHpmFzDvkm;PnB^P+0 zwvGZDjNd$y?Y%aNKU2hJso0TQMKBl`{z;5XprllvVdQchQf4`H1;aG{snY!`y##okum8yr>;CMM$3EZ~{hCWD{ zVoLZMzSEhC-m@Gj$$fWvF1Q_YFIa%c-|(An-C3^4-YVviNkwD_WoYWl6~3FdM99Nd zLQtP^Hd8#?_tNh6jo6`SzbR!lF69`;$-5fqPmzI^3S=JD`DOdN zYgh0J6LShhofd>@dMcRffHM*W_U~gU^EXGp##ey9npthTO>Rdzd~K#2Be>a!u={Pm ztR!u-f#i8OJ{IQXicR+x#qQ)}XfXLtg`xe+WIfB7z}JB2@T3&zE%RrARIGmf0h#LY zOMDrtoT|5Er`b81%qv=@sdUYgfjtVy35PFAo~2U)Fa_+kzYH5PMR#Sy7ksJ;vvplz z#Idb{JvEx*?{hqjphb~f@*d~_CF(a|4ukkP7Wp`6-Fu6=P@>3e<$&gbM_3Q(%K$oK z^^r-*f$ea3DDF&n2mz@vMz-#u0r$<+rDKXu@22d*t02H{k1lj;gcO&SLxPP~i|2eL z*~%ccLO(AkMJ%0@$QD_6J=|aAd^Nr{%X1lB^`fV&j}It0*oSvR}||DB2hd1dD!d>M96UHFJ^8SF~U?G;n9_04lFBKw(6> zNE^149mfKL0rG-_RSN#8xn&pBs#|PH!~6`I5^6lg`O&C3&d8exp5j<>W1b#c@o99= zhUth-l27+Wc~o774-TG^W)R^vXTeds;$q&?^RvR(XwnUjw__bo>YR8cClpfqrgI>4 zmk#G$LTH7bY%<}iYb2TCn;2Qirj~=XR{j`5L6S22#N|L;Z-hwnJ1KEdLPhl& zwCO4jqRJFBL@jC=>3c=%aqaO;;=vh+h|;3pqQ>QhQBaG0gBq_#LgtK~bQNm^R_V<% za>dh<&7U;HsEhk^zTimr)B6ObXW9P8f*l7df~UxpJQqQ1FF~tYc#hOUl?I~Pb*yCq z=}EaT6&<~TUUWIindjl=W^)zYg@5I|Al3^MOa3aYEA7~otC0FpE)GA*=Z#0C$ghS@pZg@FFJ>DPrH4?$gYK-<~R zfXSl>2oyHSOWhML#qEL^TZnG3{S@ttDy!?Lyp3DB^$7u@AIo3>;QO%^21(THq|jT2 z4iAhA%;IVMhZT8Cq?BH^s`0Znx%vjK{g_J2N;VcH-7J?KmbZnx5U_^V?h@KoML*A) zHw3M)51qd@fHeeNoiy4>x?W352}O^8VIhlaypr>LQ%N=`Br6BB|bU2Vrv?)L=qq(!@cQNoBu!b=NEX4q3Q#T8LIqF#vblkZZ@&SR?5myqLv0>Xy@+v5y zU8!qruna4raf~D0_!XRJxUVqh`O*n1(B>n@>VvK-uY>ho-d;hp+}i@eSwAdkJWuGn zVUsk{%C+Xf_b=Ki%1z|PH< zq5}-jQ;B!^8!^{@hqa2BrBcvstH9;}7ksmo4QBd4WH7LeeUfSd6$H(9g^^?H&gJmA z&Yc6_enRdu)zKX5wEZNcTfL9m#b|(y3cZ5bwb}ct2SJpoOP~Itf?9a>(@>u-WcT4S zBlRui;lb21WLOVAHz*R3SAr_2c_EX-0T}!eA8h+{7h|dhb{HnQW;T?GxfYax=McqM zces}R&L|TeDKsiYgpqR8)UcA0oRwkBufmRzqgKQtUosR{Au_EoUOWcN;?Ue^BhqkG ztH)MveP}U*h8y6dJ^+M>?*8#|Xt4af3VyYj|&f@9wPd&okpjdPEa#7Vy+;gROZ zo=XbG0Xn~*QiD>_a=?vAGR+`q7I-|eu#S2;N*ZH@YR`p~a_8f}l7L~*Olb{EKJ zM?wgpHdRX;&>GeWD$6!Ch%_U797b*5leYD6;3>S!{M5Waa5&0sq7i~_52lP64T5Jp45~4|0gl&koi6^I(sp!E0tbTg;~-ooi2nXpWFgPAgea;v-pxP|>*Ac!8}z}C9^*+;MdK{@s$NFx1V@-+Xm0?v zcad?SgN4KC9wnlb!l#fX&`~&3ZM5y2OKPxW?Vxk;uY-!iO?UIpo?|n7YAr4Q6i!o| z#j&r3^j}*e_j5h}Ic%f>9nw)XinFS@KSoTKDu&SV0aQXXC`Vd84&ki&Q0u}W(g$kb zvr%}^sn;IL<*Z@%>9uFx9UC}&#U8W>uI9klSCmdKFQq2nt>Yz{)H2UaHuX`P-I5vE z1fLeD+J};6X6%is5U*tQab&Aa8Z#$Q9yuRD*No(hTHPqMRd^3h;r&6AOut9$Y#S#7 zKSQURHLQij(7U?*q(j+J_q-tOWOYOzo-4x#zVvqeZH2}qpy#Vs!$b95{0W*@5?Wu@#SOcS~v{IB@k-w@e}Fy zg6=^%gLHcpvS2TDd4p5@ECm&?VvVpwqF@)VFWpkV!ndnj$ot9s+7gvhsb(5uP2(Ax zyZhcDay<1TbB`L~{3F;ahJ;~y&mo{NovLQ$sOo~sKG5+VKrdw31x>287DbOx-n|Yb z%aP94hvo3f8C?zA-LzEz0Ir)zx4OI}HN|-^d*J_|q|i|=3pLS#CY8ioW|Wx*&Ab>5 zLmn4jbyHv)!#mlGYXFAwlh7huh9)|Q*CJ%)w1=9QrXz&;kRc-p{kz}b1RC=O9Df3Z zz-HSNM>Dn%^Xr9ELIl~m5a)L|*c>WyX!G&ol8?z|B*fPJtv}`4y!Co^fkdiziP|KrEMR2PLq>D> zg+)K^#$&uSkR7JCHULpQH{RWZajM%CHlnhN^Y1u-e|iW?!evZIbKHC7&kC&zY57V* z9R$wX<$Dh`+_RRi>uZmy%IZMI#{_DG)%Uuk52^hCGD^CdALutSS0vB_RF$q?z`iVc z*Qs0Z5-?P>GINScbCgxm-p)-Qtn(l@v8QqwtAhb0zM~*>l1|*xJ~~HsP;(V08G?4) ziNCR(Fm%kF%9`3e?YYDr`ENsya>SvmX|3J@*U}VdwqS%Dn zN;dxLx=)v~rA)a6%i5~WZpySCRIcMboBYhVhzOs2cBcB#bF6MCPG zlP2ZcHLw`<=q|rwR9mKr;((oe2|@5$DH({>MZ+eYLI+@C34HQJ%}z6GsSx8_ch`f2 zDX!lb#44a+(nOz_{%e#-OZ#%;OD%zwGNr}xi&^i7g&O>Z!8GMGKYx2+(Tu!g^Yr;+ zP_n5=sVdefI^gkqgPuj?vT{q^ba0hXB6CzdG+gW~a_}SWhNk0N%g$v@bQPdu`+HBf zt1pJuw~x4{Uu0J?`-D{LQEu9>g@h~rHIkUT!q!;TD4`}sYIi2urgcBvFiVC1D>N{h z)9m_~;V8}cRV=h$ zEV8!N2!ZtrkyRIX1stWJ(x{{_&(69VZ8EKQ8xxuG>kQYov?CO3M`>S8Jl44-9-%7o zw@0qRVOtDg5Z(2w06b6iM0vf(3qBCn7w)&l49b9p94(U^GP7=FX8up52nZdDUs5#* zai?iBRSdvQOvb0zOq<%5m!ers

}BQ83R`6mbf!!5JTzGccJN8FK9PhB<%Ct^DkCx{d^525p#TX%4*=$!|Vo$B=FsNEz*KkH$; zj4(uYWNU~7QS$Zxf$|(uVOhUiV9DImuD16SxjxW+2xf{}+#qP}M7RE!A34!GMy7J# zQWt~U`12Ap_H1W(`U*3^R8XHxVd@*EqD80ur4`aoxe&d_6NEhm&aIr8kpTY?LobuL zF(CvuyVAxg^s~xCuB*+*5WBt(1I)2!MKW5-qK#RgP^n1w_5Szch6HDpyr>Lg!|em! zA*HXClfTtI9Yvz8i}x=hlyVI3V}@77o9A4A|m@RbR zDKmO=Fb^A|1e71$sBXH6`78*%dX2UMMB0$|O;!;|?};!o+z&8>>n<0@2gQ(Cd@sZm@RkB@>${h?@H_ zd{V=;%|o!x zO{q#+fc+x-UGsl)^#@++QkP|()m$g&7ShkD`~y*dLamqoQ^nccm@w+qc6EASDoI~Y z4?HSb5?vlg%^Dbmy1};~P1zHpAuNoePYk>?i70-P;@VSrKilG3pT#13leLw74pT1C zgbCuuscV%yxsMDGIc!G~pmz0=3~FzwAm&Ax1ol~xm8FUFY>@Ml2L*`Ayn@z1M@KDT zvs1GT;nb7}8`YK30-eia+6sfQ8Cy z0)@hSA0Yr`eZ?O5^y((Qzi6g*%Jxvkgm<^SPVwebhX)|NZJ4c@L90rQW$WudWm_JA z67XQ5kbeY~B32RGi%w(#?u%9AGnq@LP5I9NE7Ab4!eFeQP?YRyLFxeu(*8)C^1fG5 z9GK{^iMg03SOOY}5A!mLuA{$LA~xa8D}d2OYdVAXa>#FXGjz@M#-=zD`tnXzp+|IuIi~u9IfHyjSr^6B$~S&6KAe?gtH=cN zG&r;o4~2+aV_5=udW+3Pnm+0MGQwN0imc=Yhi46btUut=u9X&B&L}!hdiPx-dP|OR zjk_=#jHCiti0-^z`y-8kdOhjdf-QUp40e+Z1oxAql6OpglR(W<1s(2!Kq%A<+$18% zrsrAQG+K`c*Ah0j>qMarFk%CK&th@YXv9RHiuAhDmNx7m2lqty{b!{Clin~_=V7yH zz3U7to$YAmUEp4Ae`bqf7>d^2^_M+R0WdDjppj@@3v$0N+T50Jg!MB1*@m^y6n{N` zrtkgUWw+OJ*vtJ#)!1173E6j`-$`Y`Gtoyl6L(hdp4lJ6OWhyv>SqLy+DR5toQ%~w zSx45ScZECKLit@6$@6pXe`b6!v(#4$5CeMhu)#5BZ`*9^tzcRq%f%$$SB0n$smuA| z12U?aJQ6xY&)d?7wLWAz&a92`-R}b06H)b&e75&n}Dca&23drhEK|x~O zdLnyqdYq1GW>KWIs99w8DqxZupgQAo^~lbPK16J9-1G(Ok(>{+U`OT}uttR{D(>R$ zn^yy~njAZ6qt9g3V2+YSK_KQa&mrh>$ej3P$&hjUpumi4ksyv0+(Tx4PWp|MpCk2R zjJeO#5*>KhTvPqMXN|W$9R3qT@SqePR3WjDiIiq<72v_{-T9A^ExgP8c&pQt5!q*fz;YXck zDs>r+=Go>8GkGe*;M027n|h@pclSo)4e2>3O>5uDrT5`#gm3l_&Hq2?qPuRd($xA4 zU(}>=`7X|vFJdLzax)HrU!K)hWEKUBbXy=4l zf2iQKqH||m670~k*aSx&tNvp=Z=97C&4RxMX2)~~zd8%Zj#k6Jn%zSZ+3+y1+qJ8f zX1)dQK_#r=(hl#PlO?pV2MtT_z!+iU!IoKmjkZPd-xr8_H@%2g;~dR9uA%-EQ1U2t z?U`Zv#v244PHz7k6Pcq26&@8tjFikyqO$7n=&(TdUZ^c&G@#wsmAlmauDwyNr^7~` zUh_cEGvXf7IYtIU<46m8lhRemp=&|F_Wcvh!qIs`XAEvZG1yeST-VOfdsgVvf~W|w znx_>sx(AyZ)RaR+8&^XWBc7z-h zSCsqpAx7Hk1%1uskuwn( zvlKJ}8h}?OCZPmxKrCIyAqyu`F2K2XnaDa37F% zs_)pnvg2-X`<5h355fwPK$-uVv4%MHZL=bee;IrxdDaq!#SnUx;Xf|UyetC`Y==OB zCbO?%6a!x4M*>`!iU{}P3R&c45jI+cB_2mB`HNAF=&+wd3$4|1L`H|^1kV)Zv%V9fp-L$mHnsCCv=-rOGlPv=_I=m9}zIvL6BA1?Zz z;C@Zw@yfV3LiJZl@9GRaAX7os1AG++uAKlUBXw775Xujv0s%6j@e`TolSE=WUBDTb zeha8;aM1`)5qQGfcT#W6c{T z1y|rXeKF?@8S`{0Dkyo_os=lynCkjA*+Qsc?CIf=?h)PtL@A)>bD z?ei%OR zAZ_uVzS7oR_p%X@Jn-c6r9gl+ZBTOdIyqXMKS9!n?Z+cb;-UIwNEMM{u!iW6%y}$P zauZg;Y0|Fd(&y=;h_JKWM~;unVGB9=Th~^eKa^0(2=CJg+-VC1o7M?2*KBjEwBfm@ z^Sb@2Zh=kYcr+!=3f%Ie>-oU-q=f}?0#GpLb*y#(v1R|1ZJRQsj-DV7Z=^}n%A;v- z>wRfWxa3FlM}B)XYUQl?uICYe#VaJv{&>uiHiOS8Z5OY24tKrz#uh2zbC+L%b!x811*l492Sx&s!^N9dfvkLup;7 zD+G6D+!ix)YjPv+UclCnKxU|`>}jNzb!Ef(Hj4-TanfV#4x`vt@&s-y@M}zq%35Y3 z#mnzI2u}FC6__{lRs96^Q$I7RbOw^O@(xzblS>WKnCL?IW5S9l8`mvyC<>gzq|tU0 zDo@jU5^aTLe#;%r9}GmhXjS6WwRHx9(-$&pnfTHH|A z+ONWmrAA6vaTK_sFvx6tn?CRQ6Knn-#njV@&Wu0qs_S{u!HKL9JQ2Q>Leiyii!i|` zuMY)5)*rmV3on7LF50P9oBWv72SLs~ zqwJzFCK#FC{w{4e(~txkN# zf|pTZ$|hZy)@^YIQ@FOv$^b>qGs`shKg4KR1l0kU@-?Vit=7VIuaHN4&ii~@rApoY zKtSjIjl3E%l?vB;d(yMT@&`*0FaFEvG=mAePztG%y@ilM-U9Y)b^(Dk5&?{l=5|l6 zJlo%Hhx;{Ehnh!JL?e9V6?rW}#lqx>13=p++>(|Abg{%1r5kIfq&;fdhVCT@LR9TQ z0mXPIW^U~}g_f0u*13}zq3Q!PqLm&B!J(RbsFvn`0aWvm%(XV8I(!)+4C;EgNw0Io zsUmoD$z^n5WGT7&LxRRQg`|KrI|nLQ`A!pZ2OI=XLOy7%?J zu%$QBJJq^}dC#X0a$zT3HBApIItB3QN_@JRlGzC2{c_-ikE%rivZ)-K*zBqS0BbWn zv}NyB0s|AZR&z1_wK;>f0A0t<7Q&lfhbAf--)58-#`o~;F^CA}cAUX6=}DfB6k_64 zk5g!-D2bYv0}($BbY%-%^Ggw4SV6TJ0=g|Hx(0Loha)2D=@&yso0Hlpk=WwT)g&978L%Dy$Z#2LU~01i>AwTJXuQlubtJO^ENxo?#$Q$k8fCJ<78+Nb`#Ec_X zdTZloW)4I``*8e*Wtw9!R1wv7Rufb3CsA#qT^nX@Y}@TI`~z2T^G#@ z8O7;xx+cCB_wh?~z>qH~`d9GW*br6Bgl5#1jxpl-B@vVI1QU)7Ir4&-j?3;&5easOG`cJw9 ztOnotJEHKQ8}+Y71k>R5^bCPAA;qG znM=D8vwXtfIFDb~uJ9?yS^WX_CC73)xkFf(9kOO9mf!ob`e=i$yHQ;0ENKe&2%klYt z-cYKKk^G~M%OYV9aPu)LAOhAalPI~%3I-ceJ^pHSo^pD_mZB!_vs5XUCSb>&(PScg zRhEc8FL8Z-vDRS5RXA$C@R>-+S0J&G#2gcCGpk4pt^8t>U59P%)f=(OZEDH6OhnOldUtk0jeV)5n=QdugT>gjo| zCQvrDk>e}4gui0Wk+om0T93aHpxf?_Z_!RFf7zfqp=_tV>W>IL5RwS$LO{MD&tEzy z1KtDv)HH+!hR?E_$E+vu7^d-)1>C~Cj&l*bn9fL%$2kB!*4OWQ1Ox4iKAuE`O)O)>b%iPDG0?%qm@$R{nA}nb|GW@j5uny*| z=_Ot>+*rozx*%6J4}#M;Cc9GqC$q)#$#xJ=xsa&!N)Yotsg5% z(&ApEfUU}LfwmX=XFOT+$Is+h$H9rvD`3iaaESao(YCfNEp`ZKVt0VAgQUdMZ~h%P zyvcQ=3c4Ge+4CygIJ&Fq4v%`?*;%7T=-2V;8|SDUN2@4a8&Mw9JctFN4uS;PG(u-m zw)}rb)bwek0Bf;`wdEyZ&ACtTnl>Bo!vIR+Ljy_Uk?@a>7U1&S)oO{A>$h;>2Z@vf z$$pj_0`*&t?IEBYZ5SgiK4N}-WCP$aN#L+8)x3H@CPed>M%63LoL$@i^x z_f!gUYITSm^(Owf;?EdGnlfmF?)eZRhaEiEeHGX{h@K$%`c!>Vuky0o>@fmF6}cd* zN{)H-m1fp=vhyLK)B~OO`^19x|NM9k#L3L-Anri= zcC~NjNsJ%Bw>|7<{=k-L!^O02inaQ8!PkfFD}f3|#C(96?u?OWYJ>BbETG}xwqmTj zvECsb2c#+G>UIeD?ZUz`gd8M24Q7atgSqT1(LeWir@_gnm-IZiI6Znz+29+8Fik>c zILELo_Ho@h_PG0FO%qmX7^zRmOrV{hYKi>#Syzvy&`0j^80ew)ta|OAc9k-gqJLT8 z$WBm^w#%U=t&Ts&dh+usp{-Z4A{=+QHjU~YkHMgdjLa|cE5?A{=~=q+l2pFg z4P^bH7Nh2w$c%4MGIL`2R*%btz)U;Z8&Rbyk@}6Q|Lv)D>Q4!=rwbmqBGK{Up%OAx zJbURY`9KiCoLb7;03Fd~SnoEqJwZlzG`fbft!S4-j^EXQnv|YtHzT&`&ze5wlCI_qof1r zq=U{jTOZ)+C&Kgc#--K93gWIb0o)dSEGw?X~p- zO8Lhkf+Oq{eIXERb&nZ6_EC1vHRQzK*(5q_pGTwIOnH{VXgi^?!g927{sWP~lKi}F zOtyC3H8r|HfN0IeYa8TpJRkus7FO#!pURF<2mjFEGE#Prm?P3=_HSjbS%B{n8uO*rz;rO1rLh7a{1gdx4-t%{Yg&&_jI}~Ndw*Uzgi40Qq=D6Tu2!IRMA}U#kyYB8pH!c1Ys*6Oa`oeK0 z8K}{k>c^1|aVCVpVo;~!()@fu@Nx46&?Lx2O28$O^BUZtwox@4!tTkc(+@K9gp!Szyu za-^i~eUMK#WXV@Gi6(L;LDKG9B}h-8RPf>24P0#)5Hqu5MK${%Q(;j!sgBhGAH%-P zH#qq3<`cMA=i5P-0fa!4is=I84et4WzKM*Tk`r$bcY(;YU4zNhI3=KORG&*0O_yTx zpR)r}WrxGo50t9CxH)&tl(B*_ntnltCjzVT(Qxdtp`+sq-Bow5SG!)32QP#hsJ~3Z zX+?Hsl50i{Z4q(kX{AiZdVd@jBto}A20=wV=9ocaSFPPQlQh)pFA9_)2acMXE%}F5 zG2S~w9_bkOTZ>y9~1E~#mn|*Uw6gh@Ei{i^*~WVTL2R+=%^dlKeuM0 z!^lsTj7EQAFZp}gdz)y6zYTzwbka4fn-Jm9*liu@V9*b*zr_m^-yfA2g(bKU7Lf8tbrvIv0%l0J zB8%r3hp!|R%owl1(Ff2_qXd5Ga;$|Q2d^83=b4p$f46=7Fy)XdzB3nH`&{xyPrU%x zB8tdjMm#=lSE7^ZBZ&5r%Gx^?uTq|X$#NF_)@ZPPu_O3@=SlkWiOxfji>to2UHPc= zS##b}dcL)VY@ee*#sr^P19)b2hihbnPx_At?cvolIh5cn@#%tfbu1V<7F9ykv-4bTA?tDbgLv-gMDyijjU!Y|A(t8F0%nnU z%X(r%IaDWpY2T98!iPJ}4Js29`n%_`EZ4<^_uAAm!yG?U2;L*@mVT^MVJ@CPaN1Gu zGU*z;GD#dN(r{E;iQx%4A8$lT`G&O3<%;~#jw>RbAw%Y{ft`If?mBDlu+F;KBMCN^ z&TNbnd}azXS`0MwHEG0Mv##pBlQV1rvT1$`S3UB-Q1>MqR)Rvo(?h3UysdRn-j^2y z@P9(umdvxT2Jhx3qd#RSh05rT%H%w{+8}w5B~Gd0&_=jPV5sZtA#_M3tBhtfTRQcn zg3=IaGjS~^1QhLz4}TEjZ$r-}p#LFXa`phPl|(Pz&4XM{xK&MC+}LxGj&g{N##%?T z4s2deX~~iZUva_ub9D?PG=kyl3+Sd}TL6un^0`YB3_tUnzV}1Aq8LoqSIV5cL9joB zP=ad(veVt#<@4Z%@k4n|DZb%CQ7njG1w5tTE3YvJ<5-A6fgC}CBjyZjpuGaEIio}S zzPc-*RyfDkPJUYVTW_8hk4&{3bCfA`z2|T+Sbq%>HwiP})bAcudSlH{n#>xfAw--3 zqC{q*w!OLApUu|iL;P^XCATT$mes%#BA$MWWyk~h7&#l+6QcDWS-rl?%aG(8;TB2A zqg%L6El24#n^GS}J>i0%jM3#j?P@KnrvpYZ0-;&+@4_;L=j<}!)76DxX9hds3+1=q7bKuk> zI_fV6fibyUR?vvj+}-2#ihxnc>{93KZ=#R7PY{rC8c!|XqKWEU(w(~@(LM!_O1`Qy z)*uu@ZzTlbERZ(*S)N5xlKRL8V{#f~aq&{C&;)#7>KT99l6{T9p*tX;v~1I5>1n ztZ*R$n!<)P56110<{kvW>ql{uYVP`FL)(}vl7KD19Es%ZeEYx?H{>$7Wq*LDa`$qp z{5_H^QuMPyBHwD|=IL)0*STNgX^Vh$wbA?s850 zdAinL8gEk_WS||c7ksUvqhSt7C^=LHMph3iw*w^BE~C7EE5N&56_h{swHrMs%CTuu z0bC`yK31VUVN3cKmy95kko|+jqTK~^CwO?5=JV1IH^vrnCcU;iUtyB{|MT}fb0QRw4`z(Y#`;L`POe-2v#noYh&cfm>dhxqJ&UOJNMR*5_ z>V+Y5-sCU$+xOJR=c+q5Y$)=QjdwpaY3J> zdhNvqF$w#oiRi)`1GMyCX`ItDXiDkf!&# zEL>LD#v27efb!)w99%e=)0}-irKvxguLxu4z{1eD3{9->SqmV#TqQN~I-%M;))v%)*dhqM`)gx%Q3Xm7cS#Cnu+(8CKH3kq zT=|AyY$$E9)u^gHwjASA9kRn-%5+pPYdw_h%nDxN&$y#Y;5q;T#m@A!0>zO+KJ{js zBA#uC>dGCq?#6+;0c@9g@xEl~5J@lRCM%)lbJ-l<2`9GE6!5U6QE0qVr;)&}njY+GnWDSh9XQ|)F?_$*45wO9|_lC+>jEEX)B1$~$3 zYbX6Bypm_M&UXxRGs#f4A!0|ITY?uOy;#0hu|nmWzuU=Wj`Y}p=DvI9_7^79c0*4? zad)=21Hp^hW_h|ESl)Zx$^RK_aDQ6rE2*)?TU!e$UP1vdAh^2na)|2M9|~cM3}&;j zdF2?R1R=?!R;w^V39)KVs7tv8FWoEy0M<;PvwY7N%FNOjGP4eYe-7FpepS{*4Vz|r zKLI>^;vN}>{?BjZ?MN5;HSgi?(vteo39%pyN#O=O^rzRzCe=top10a65TF>u*~-|F zdnCcGK2`ZZTpThurO|=@NL|G=1LHg~mPFmfOj`IgGU3oXa031BK-&}{Ab8;~T$@&K zfS^{4TTEp+j^ulv33>ev+mqpo-QI+`E|pPzAC+dreN z0c)jDaA800ND(MH+LZHCH$jcx|0Xvz-Du74^>X%T)ep59{yKyd)eQs|AC{eG>K6=NM!Vj+196Z8ERfDS^`#D0`0oq#oRZVQXK%t| z;a}{tcpp;P+0kvwH)VEL&#w(bYFq$_;{Mhe9AHt=rYtJyw-QwO-N+|fF411l_j+OC z&?va6%N0PlG@n}8_LfXJ*Yg;u?l#g&H`G%ML>mklQMKXh;fiPxr8J(LfU^U^EcvFV ze};`s0xK8tM62jKsL%UP-=K@AOcX7 zEkrENVQmcHFzf{FfpA|Zt1rmWt!6#>JNrm$D1 zUvewFOkPGUKi#po0-SX_VCovnntI&73{C%I7E^9C@dTGr7ToJ2Y$1AF%Y znrZ;Q)y%NLad?()t=0v>PF@NV&tpauD^T~DR{XsBNGcFO&vwFtu@fPFf?BZ-xeE;^ zZbRd`^^zi)_uhDgGrfuf(F2DX<7vA8m8V$FGKP59Xa_c{M9p3PeaX&NG#0R{*6vuc zKkJ0%EYiWg9GSEyr-nCyyo}UfyQBB|oUajf#1A`UbtpDU_HDTV{6wF0 zVs*e%v+{7#__%q>?W!48~f=jJ_Wj{vgx`2ih3-ZiQ@%Vc*^BVrzl?@D6Hu-$HmCrc$?z6|A|bHW1?gh;(fQadC4YHPxj=Tb;Kv{Zd} z$`Q6UZHMMTF}aIY;=nHa_Y&L%Uvy=<@Cg-Zbo1H+QVfivCG6MOIc=*L>FUy>9s=3G z72n>@uRrN_-GolBdZjpqd2T%>%9;%pf|c;L&usH!9Umu%)BuyburHpMIltwwO6Cmk z)Z2#G?GAXB%k;EdF)4pWXW?+zm8N2mqTDR87QR+7Q7p}rD&4@6J|&yR4Q%=ju++Lw z5;=n5{Bcb}nFk9oJoAwt%XMRmrOM5cG0eG&sA5O*Wk%HG53BF9f~r*V?#hVubQI%C zjjj!mD-mG65Tzo|9{>mifp&6WvT65n1p=d5^pURFSonA3@eFYG0d>Iz8>!*E6RplZ z1RRyNG6oR$>SMPU(BS}3vH-^=@eE7WhDPl7CVEW&B04u1WoXDWPjHT0Dvt+rQH}q~ zCWrYSPE8uyOR1Me19ezL5i4=8Ce%wPHj%*5`+wT5WkAojo*Ip#BAZ@Yo)0M+`@)2cN`~t+kdhtmYAK{?z1Oy=yYIkYCx;lilN{`O>^v_ zov&dgmbU+507Rk?ooyhfjm9(p6iwZkKnX9Tua&D-G{AZ*k7s|f#-d&DpzPby)h zFySGEawW1WyHCgmTXjf8IJj%_xGzMQViSWzh|WMlR=*I%AGBoGm10sODd%aoAKvWJ zLcCcIg#$-I;p_iu(m$3R)FvyJdy5fW*pwH8(kQoW^%KvD=|l+iV~qzGD9Ju%9R+N; zNd24L&MJxcDOy_u^Sxy?=Vkf3C4b*s%iw}<_l_*A)I%)~`g!h`!uy$nzT~ZIA3g_H zbEji5$O1vPnsv}|lEsMk@-?fO4teM68a0J3D;wr$(CZQHhO+plfgwr$(C`_JEq-NWp)u7#+K zs?0QQBwIDpzy!&MbB=^+TCCkEsZB|+;to zFUYP%6657r2-Kwog2=YC7BU=Q&O^q=Xw*q~64EO!9D3n+^YQI4v=a6jOiw9R|A!7b z)LfwkZox%aMZ4O4i#gl|@;56C;@)ZLFQF$F^Y2p_bpnwBdq`Locf!#qiRL?5ZiSs-DcrkDPOZ;O&6o9a-#?ep!&{ zb{<+Xm#BSeF~;IHapxzJ-2>v`h1FI6)0(mSninH%t)z%3eX4K|DbgN^oLq^g??*r$ zby*A`h^`z_3XHhm7j`7#4>yMa>jN~rSnEva zvXYZtC^xY43mz2xdAZv3mvmz;FT5DBUlNX5q?L(4eqT_m3mGJ~$fYQ&Yd~(T?bL+~ z3zF%&o<>C-zL`zj7oW4byz$?vl%+f}Gh%{NKuio=ZlGdgvP%CYg{2f0Wf}*|hbdOp zZzZGb3GN9->02UI~e}+ym9SMoJ|0$L0Pxd8l;)=y6KkSPl8+CTD zW_59Q2H_@1aE0uLT`^><{nwg|!g?@TVZ9WzE0hqKnrNA9wnHF|Jcbg?f!0nE8 zCY=m(m$(Vjuhiyg>CP~I2K^G0^V<8A<>OyE>?@LJN8hiCrQDU_}r74zC+(vSU03DK{uIIo#`3>_z}4p>c?AA&S#I{_C6qH@pRAvnb zWo(+oNtVUD1D9U0m$xYLQxFJ!02{{Sm&qmE#hPB_TpSwTbQT$^6R&5QR6wRucbS@2 z%4jd;aY6xmDhTXokQmM$gaG+2aK&em(ChSlPxQ#6Vsa>ciLGw=gsU71mF&Hzd*H60OC{HKI0~ zb3i&+-rEUwO`RW#NsO5Ud|?Ae&Jk#{*n`v{;GMoQ;sgSF#@c#eO;mL5sleH}v4`YpQQXpUH z``xGeD6kLNPAck`bP0nO2ZWUJ^_1D;(BqMX84_6_AYL-H6%i9s?ejL{2t#%~;`T6Z z^VRu>nESCsab_2;JQ*mTf9mZ9Gu2tdV{N0E=l8D?qpo^PPWvWYX!vyste4C6-7DS_ z^cv)JVxz|7eYr!6fmPvfmO~(b4wiF;;p*pTE0fD?4IQ<9*rFnhy!0?VSF(nZ0*ge- z?@{B=V_B;hGM-CFfPdM*FxBcNWNmR@H72cEoRa^dP~nWY(AhNg9y}Xz&D#lkh=ZBx zK?-K{H9Y{Doio4qNF}O>HADCaLK%G~B3URQ??c*@_O)2!{CcIa zNRx@>n3%H7W^! zjUD1AajoV=;zw!mp|Y2utxi9sR9D#)h+?E5sa*tR7Kzmk#ouiOTo9oTvrxa;$XYoQ zTvVe0K)7C(`1zr6AB{3f*Dk2LnKlM~9^_9ojsk&V>}(lF7^Smb;O!CoRN{vO@CP`v zV6=@y4q?v@SI4J0a59gnX3$Vxi=V z|0(x`*9Pz4bPC<*f+b<>6vmy6-QKc1>Sm9Ol@KHDN2tJQ*11T`Aptagq5bsA?~s}_ zj_e%X=+UhL4R>I#0rD2&>m_|dlu1*xs-u<-vOWp`e8s#izQ>bIghz7M5R>v}FfOb~ zzR+(8!l@F?J#7^7*DDXfNXuo;1Z>RSD5q_ zc>v;cTT+bxBU$qP)R>QVAT|@ix^OGt#RdvmfoAIXbnevV($*#$pv6GxeD6y(%3IEJ zciXrkanul32pt(&g@^oe1A~J1#ld-qSJOM?(bE<6@SIj4(-^ zzr;9qvI~@{a}SqIj?xfb(Ii!Q>qUxXI0-?6IEZ4<;s``%~$hvXLSaoajT+*1C3pQHA zbDnHAg;bUAZBaR-eqrAwY^Rk4>C9M6UnnyDu#B5VS)N7m1XY_5baOFHxdCdXzA#brk8D|y?qQcg)oi7338ygk0 z-L0t8+knzEUhunj;7tEX@)?Fp-Fi5$$K{oL)`q~hCMAb^jgO4kThlLd%6vtY!WG}Nkhje6E4dmV+A7z?b+8~fSF&l?Vi%eS2@!zd%iw0j{xXTD)iHMH2 z(7d#qs2Q+D6VsyZ;?=wQ(@!w+s*M?$G05#!Ci6mNAhw)o)9{bdiWsaEW3X!kIyojlFoWhyGNG+NFgKm#|h=#opKM72$Q zw)F04&dY6RC;=g-_NS0!>B$=GwmIdqhDZZN6diOUyHo7l`_J$_yLs_vgi+!{Ikszh z4G?tc2jOo;l>%yW1UQw`7yomn2C{^BtR!k(jvyE#D@>|&U`|t)RdZV`Xq+2f!UJV1 z2!2Nx1Um3GqP_wV0(3ZRRWYNKjp)-7O1|#2^x|Ok2#;nZG6LomO_tY?)SM5_bPV&% zy`+0})`dRTOomGu#2LF#hY(pf?J5w}-l+?rl_!UhVRopj-4e-ND|EhyF8|H$Y!6tv z6jO&4>=Ord%E1jhq4K8-U!Qax05wY7YF?pPR5FCoJye>dkOeri|FV{{0YPhNsCOQ@ z(<{vPNTt+L?r_BW)*SpXbds@Gb26Ib{6i`o^kR3IjL?^*q{&nIxh`RsxC()YwZHd( z$>ye1&TD&e6Z6$VtO`->rPDDTde!Df$k^(!8FE7nVw|MA(^}KzXb~V&pq>AYnEcEP zPNUAxckbwn?@gwsYU;ZVZT}R2{m?hJz0l!&_$lCNQ#;tVrRT(o3;*Dw zy?e5be~g>~mbYL);@ANkGmI5hcZ>LgyNlRRPu}+mo2mI@m3iJckrxj*58-&R8P^O4W&W{@zs)Fb}EE1-SAQ>SX#y+EQe7;*;1J14xsOmFDXH~ zj;nU0D+%`QK7KTB^MLSk4syGDDD!e3*PZ$~TSBkPOE!3WVk_?cnRzE;0G$47CioLd9vG}v`exT@01FPv%0P0LgWjrIIQ^LUUpU+xTY5p6DZV*!o*-`!gJ&m zc>Z!tc|+C~1Hy1`e%w9P`IFr_4U*#E*UynwwDnV>w& zb8r+3BO$ba#dj#oV#`WlM65UaCg$4b;F@IW?Hy3)8(&&M7$2MmS~Q46$}ylsFMo-+ zY{}Z?vrhKYaY$n90&Z+`p2K$krkE;31l_=J zLh1vD-VKcDcUD&7L~o~QJ*{iFAmA!8%9~b26AMG~c2ONV0^VmoofqD*ub2B|lz4~y zSm*u&8Y4$KMJw@=|NY(WMN)!opy3ox#bZyS>TE0ie%lV3>*sp5SE(H+EmmE}@h(r_ zx3=!QF*2Dq_9_TC-+J(icvlxEEJTP)YsrsY__N<``mb^h<^B=eopCMQ3p*o;KTEEDWvUHd$vPM=i{EB08N~%$)f}N?3L8C>o|P=?4a#+Ek#oGO6?=*3j0-Jy#4hVbu=HtDYW=) zVs=g6XY8-K1OfNV7VQyhg=S{IZ-z4~h4u-#ujE@q)-Nugr8R5}6GZRk(e1u_OHD?O zswws54bmG19vx~-MzdHmgrx+uNW&MSmL>8 zlq$ggmG+-rcfRG;fL4aXDQ|44yvBdJJnG-8p?#-D8%=Ud$kGHMoE~pbsq|cJc$C3W zdO5ltBfiBerjg?MBSfHGfK$(`2iwA#UDZ1Ll>U0%eXVz~EDG_A?TSxL(JJ%TgQ{(!k6*xOA z2gD)sbk%G#K_ieLT?7QV`?y}R%^6wrYm zrQe^uyB7V*yb2ZT9J2ig#SonQa&utbVtaz*sdg!HzLz{USb}XQ+xKYEP0W7 zc9*COprI}3Z+SD+?Sj2RQ|U_Y%{Kx*VIn}n(bS|)3-~PP+aUW4L8amzd#ckQ87_Aa zNDwp{3VU(ho>CT{X(No zM8q+Q)%hIG{h@t4u`odQ&enb!t5pMsR3)S2Y#K?JVvWhC?YYR$d<>-c&r=wIT6>4W&{2lCJ*uLdtx*@wMM z>zs{mV`gYIZ97~zl+;Q@@xELbzwYsfEsu`aY^WMNt;jnV%UDj?@|l=x&h{f$>M~Y< zWe0Ya6*F#9wpVAyek3PNi)M~TqJI?+waT%LGEjcOP9}oDo*eL;p;N(h>C$mxD$Mjg zl6=Xz3#T~97&Zx)|!^bZ@gKh0d-W^uM(lM8i*Q-Ux zSZokN5N9q$71;MZp!#efqBHEZyN*nh#5;gTNX$mF++vNx9Cd_dKXOz59Y`qhZ`A9- z%m52t28g`-V2n0<9ZVxEkotD;h5)7NquSq0CJzBxO(0ET*3LGKdI0BjqA<>6Dg$qk zHwGJ5JzxOrr)2|`na2o7a6EXa0E5-KiD<-^X)*FyFfK4quiP1?wwQv2?Pk*l1WlZp zaNOZu7(GqtK4~a$P)sNoeg#@?yQEq`p&b}5y+Lx-+tw86mKX?)r{FIHHyF*#mJy-_ zMV~&9mbaUU*bohFYX9cOle$1cm?{vQFoi7bj9dC%X zzy>O%UY^JNsf}=ES!pPUIdQoWvRft@qt+c_DIwo(zpLkx+SN$5)}k;004KvtP_DR# zVR(4$(cY-QpgtV+QDO}Z#Be-`HBwyAINNyc>DuVuJ%^>^F1UMO#i=Vp0K)mcB?AbM zryt6kAkyr*@vBP66_=u1eBszEz5;t))3efSH?B5qG2O%LAERUSlYnUQlkn(tv0RcE z9}}Mb#OzA$RT=Fw=p`Au=(KE{6?m^IGRV?K{lQ{AEs7!^ijmXo#kYy3-SDTsw&V&iP@D}{h zmZ43LmFHvz>xJxfsD0vY%ZJaWCSfM2J}TBXGJaX>-_ezjfE1ftxCJmC#m?zSw3>U- zefFSD1ELEu!ppSCR_^On+Mw%4yHm`N-$wufuJ~_|&@f6G&kmGUXE%xyOZ!N(=7$^F zuTPIZXi(|8OS@4O*`T{5p~Z9@=H3zD{J@LY-{etXSQ3f4u+Ylc3E&IdC;D7!8x{`q zzS{V_HRDA@tH;6$bE5n9he{K$8`>R^GVzBopfvN88u-JATBw7>>O$$j84VaWm0b-Y z7Jd&w!Q|C3ncA_ye&2Stg3vBTKBZyz-TNvhk!^v@l{Q-XtyA~Y7ljW_5&Vwnb7DhF@o^;D?4?idP>ND^~iAdJ4uAKvF2(b!cG+v|(b zSdHzit_#|7YuID6kAEi+CVV(#mjlQb_Wb76-mCk)FP!M+vKZP5{_GAzMj$wMV>$WCj~G9C|tA$mJ7 zf_-y0IM^Iw{t;A@sx%g~c4D+IUldG48h~b=AO%_l)K#}PZ61~A)O2IWRoG<&3pu@X zusgYDDRGoXeS*Z5MDX+vP^2L`{9$&A);jCWqgmfJw=Jx_ve^uZkL1t2HDJdR0x*Zq zm^%qkS(9OR4&_nqA1B;fm<1Y5B;thT{~iFdebQNl@yGs2%Tq+ifzWWN_u#gxnJ+C0m~LVG-qU z54+h#=mk)Guoz1PT?cxOeHYtvB!P+|HW0e4vz))1$qcZCYR&v_C#SP8vlHGdu4MCN z-UP79dTQ?uFD<7sF8Y|U-Ee`q6Ns&lbMjWcvAZJCm|c4Uqjp-x(t$zz6abxDAc`Nt_N(8TM4AG;X zw!6!7-=FFk7gKqthP>S5@NiR7)Oa=s)_MDSDhx|@f_Y4k{TC1ED0?XHw-WsU6og&h zJ`d5)Nz8|4|2TWVIP)Tzz@MPBRc zi1z0AfY=a2M_gRNK4_|RiU`7<+nO;r7iKtL7?7IeZi*Gx2M7~eO~|tdNrl=l{T4DD zC|;dOR(#lvI_)l_2t}$uBmc(8$~(1nD07#7OCEiugkF!kjO2?iS4q`!Y2PJ}I_jym zY~nVfFlhN<{&WMd%I1M5IWS^%w;dv5UVCxB16bA3$OfAt$Xj zAt}&b%`*L5VR@KdMkKb(Y7T~Z7Lg*vJ|@U4L#IF7&K~-_GVOhOyQjE!Pijg8jo+|v zd;aNCnC=h(BY_Hu7O~!2LikmpG;6;VZWi7aVjn@#={zfFf_=cXjHhmSAJ6#1HLb%g z>HMV9LGw(F6?}W6_5_ZJA}O_4qA@Xl#xfClZDYTHVOJ^CY=eY`@sqz%S}U(235(DE zy}3_XiJ~UvaoJyMKLfMtoI2@G!%Fa~UjQtIa9s^N)&*RD!svlkEI{whJi{7nxZje^ zK0Y;?pl_omdAnchv=fd*PSPnDiXuv8N4%Oj`-PmOx<7Pbk_vYX?1YDT=omXPv9N}mW$YLAyvZYF2DPK~+8qjxc- zI=4%WOP?7Q+N02D=^tSer+F6Qya#- zpFutg=<2eu1fb|Lk2C3+E~NsLU9EzTqG)t|4evE!tPf^hOvAdOCmdAVu^t=@=tvb; z7YDgs(DCMgq!qYx5@W_9<$@W{O3RDwb>5`>g{xyc^buP&ilQ|yF)002k(Ca5spk5Z zrn*_fW#;&(SdAc416`pcR(9|PNLmAtidS5DD)uaXFoghCK&iitQ`O`GEDvm@leXOt zmX!`%nYuIAoTzCL%*#S{h+AXPW$_{XJiS@PJZ^a!>Cz*V(3hup<#|(9RU8lU{aO^h zSg*n&z+r01F`B+l9%2Z9D!wMmPQeYy%|eRKtaNKTFcMqV*D^!FUm}u0c%p7k^|ur5 zWGTU&I872mL4&NzEqQV2nQNZ9L>(vDrU8>XPd3MMPAA3ZGU9dY=Z;m{f<8HnY;$vQ z34)3%d9EP~WtA`A26QawgnV}qHrEXA05?&eMbS%i2BW(tBBX|kUyG4NTg$PPaPi)G z^EA7@|GJ7rPbty0&qT%sus~F~m#yG1Kbo!ECrmJFH96fQ9H8BfciK@4KNC!xPSbrk z^QDGp1_0kLke6(>8?RgG5ba)^_!uc7&XEE%Ln#ror65R#LxDMLBR4_B98o^jwk=d2 zUBskwwbtB;ofKjcW#=*F1uY=rbpA>QvJ%JGcfe*AtqEkBq}09$wUhc5#=JjFlDH9! zsIz37;C$uD0+HqS00sEm+ELA?tTF2qEA;5LeegcPR#?SQ#CA9tW|yK>lES13Mm_*T z!3q_`w|nxG+3ywfF%d=Bl+!#`SJ29oB2kv)2rXJ3g8 zZYVOWxKQpee~zSW_B5q;f}GM1C?>C%0qmqA5}QS2c@8okdipD^Qdz=tKPh>HM{`#3+w{l(waNt{>@5C}JE8AK-fue!1-?($Z$=kwmmFYD zc37bi@SpP~3U=4+t7v!3oQ|qR@gQ7An&@FT=yMTxa*m=@W%0e2Hgb+$w=Yra5Y%>m z0Fo}G_5uJQ#vRnx3gfswFB-KWncmVJvL`Ojf}DEcq-^&-krLrS&z0)?qZm&0qMq+! zM>hd11!bN-)@5WgiI&!N&pWUM5XH7hjV(5L9jp+J<&*t{TiJ$!5ZY_(nT&k!P46AW zI9SnG4W;Dl7TfdkhAc~&Y6s3$&R9Q1=wj=D(?$#Kav%16##-85t!Et1Ukicas&rE{ zQtA_J>A&y2Bmu}F>EDVN7tTIz{G;*;2QGt~DB_$;#-M19*_rsLK>MT|wP>#eZXa_4 zt~euLuxv<$XEq|*MYtR7{QcZ(3@z7u`Rg*gxW8y6R&LggR>Dz+^Qjyshd#k%6m8WC z(7pz&vAz9b5f^2*YK=ien(w@_!!E67SD5!jeR+Qf+mgj^pc!MCmUM>78Pj<#eKXT>7ggC?dBdRBc zVsmGs(a*2kiBQKODKi%OB*V7)+L*oq+8tE)cfs*&!k~SrhX8iZbw}*^Pi<$HC%F_J zfl1--XBH`Sjfzsw6++>DUfE`Oaa>W|Iso?0gb-0|_p>|5oDJYSKH0`O?jD$3GFjV? zzM(}@RSu=7bK~$)AkLi|qOkz$mkvtSRM^i~5+jlo2!T{snS31GOayefne)U-owD}R zV}+Ak{0%sJn<^LReu>>|?5pbQh$z*Kz-UaA{Hsy1vg!s_xM3fsLGEO)G3xj@P|LK5 zVKowyW!^EJMt9IFDP-So+lgYl#I?|TRGh6nu9I3$uh1$B$+8f zSR))O5@GYz3xe-eP5miu1q=6rA{?@JE|##%Vhy$grO%R?7;(_cY9wN zZoNt)T9&)!H7ECBa8r_ z-8fi`!3E>>UsFoF9iPEp!l^=A)WL4OedQfi{l`>l&P%WyX-9wjbl@uK<6DAX)9ehYE4a& zW2tFI=2ycSAo+;e_1<7h&dmH6B8RgKxu4e4=G)gLsySM%0dcU8sz9OL09%_4V30U5 zfR7XHgZpRYry9b8IH#AAAj{Woa{EEgFPBe`rnDy5`=e^*s!pjT4R&Is>OhP%pub`w znqZK0@Spwn>A~LbxPkgY)Zm-4)M1oj`Y_;U#EiHutGSEKFRe^`J+{|wIZ$B7+OGKH zoj#_t^Iz9H=(C;Pha$yTwfMu}FeLbheVWW7^QW|W^^XnX8j!+Awpx%944?cAgb+oh zb60Nd={jwbI|3TV-;}kQ3rXGKLkyCWkrfoocUaO;|BR{XCRRoMV#$M;3^FOGplMM` z>t3&EiXER}hjH|`@(~`!G1wh3Xrwt76G-d%V2FLx>p9pN2cQMnY)L`Ev5W@t!xtwV z3Im01+dyi|Vuqs~xV1rI+-2-|)u$g<_V*;!ii>i^HEFm}pdVoJ4#W;XV2Rv(v zdJ(dP{NN!$E$8)@!_BaO4S|mto>YEvvN#G1#Ro)M309jVRz;T2@+nIB@LRk5C%|<$ zKTUFRAW`m~E-op&iF|s|ts4}FQHw}8-w`i!i*<)|IE$^U8QzWo)G2CLjlKoOEZips zh9bBkHTqS9=S_6)N2D-I^1iD2&gu9TFryuIGjtm7R|S_7ZiZ>+889uF1a!Z>*Qzmf zA-LEyz2uKUK15B?n;sRw@%jjvA;*H$y|e|%gIFbLKaFb~=lg=*EBX9TBD0jhu>;Uj z(^TOx{j2wOZm5jHdEix$zjBZh_LzxudbVHCHHu-g)IHQWW|A#m_xqy z*^jexnq>l^@PvExby4l0Y@yN#9gZS9u3M4jX?auENHP&NN1w&N-+f8gNT0QK;x2q3}cHWXn)J8cI; zFsmkHLj%mr*6=6o5oY{Vw^qpB4Smpokkig*4acp|{~VHi2NQnDusNvFs6yOI55 zDHoMeD4fKZ_U*y>e>{yQs*Q00#fs{QG%EN=72?`11=gA)V4nIzJU@+idTZL9bh5h5T)wU!!(V2Yzp?xZl!ImL8*%Qz;@)UB><74=dntAe#f zpW;tSTnsI}rBTxZ!&-}MHwPylnm7$M&qJ#Oraern5#92(sji?H{xpCymV=aO=f|KV zsH9zQigyRQiLIk@{|tmLjKV`QIOy%R0=goyK?b7vxca%qrmA6)NeFa^5vC^hV7|e@cJuB4tvkeIL~~Rea`e0BV-PgyGfV5gNHKtyl%qsb**lr4`>N~zx*^) zdw1B`EKG_!LxEqw@d*qK`>JSC3&pK#d&jpN*a9)v)rv1FhVNXr;E9fKxApmcYNSXX zMlX(O#qMshpCwI{Z*k-XvB%SqM1DH{XVElcq4cE zz8LFcgmg65LKB7X%kFOA7&d06F*|ssN6p3pDy3H{-V>u3{Jl!Hwuf)Kq=Z zsEh7{rS5Q~jByHA&eW9E(w!rp`(RTaC{;sQ32K-Um3@5B4CRWJJpN|5oRz%Q+G^2~5-8Q?-HFj)tq{7h zc3RB3*4tF;pz?f^aE`_q{_~vGtx@hpF%l@ldLPL@?o9XEa#(irAlFqcIQg6W2rerse(ZP-4d=GR~X*%sm{n zZn9`3DvDXg?ipIgBz7IJVZBR#$9R!=D+s-SFM{^~d7kfhdC;CBBTM{ z&*N}y)C-|Q0W;gRYGA=qo3l?T3q-c5L!IzM|MH2#z@Ur+)ZleVg)JOxf|k#pCvD5^ z{8HR*EHG+r+!BDpE1taJQ{p2Y40EX52|6+ib~Ba@NSyfHtj(0(mCloRokGac#JZ@B z2j^E)IpmB0Hf_mCv&*>FB)f%S)YpL66>1Y!r{LD_@PP`%SWt*y*RcUMRGRr6To6l7 zZi!yJj@<~pqWvP(#NZLyZ?f%!KaJuN(m%@zCi^T1Y)v_F$BS(6s%$S5w`)`=`~itx zC%6}&f?URVEk=oDkdd%H%7KieB5Jv#v?xJ6fD+WwGHN}vZ7M6Ii-KG-&ks(?8wDc|1YXXFg=kd8BYcDr6u?TbwU2Np=QyNnpX%u@)iHafd)5| zs5O3{q}@{gAcYO3Y#}r$Z?M!9u7niOe|!NCHxK$Oj1YvJuZ9TtxTDd&E|NE=nYOX~ z?E=p7o(|72c_fX#6>P8ZQia;r$!6Ue8vd}Z3c1(`Dk{zXpQtY(@NtTOHSRdFEY5D! zM^A1!KVA%<@Qyk?9S=vz+;uJLj2WJ22FR%7y+370TcB`_LU>{i5XIvoF0IgeillI- z-`GQ3LR(>X-Cim@;lzo4xGq_qTb7PewiU4s)?RoG8pfHpljqOfE>%Rmx;y`uV~q5N zxpDtsvKOknD~Y(6yQCR38rpJ{NZTb^Z|mko8KuTCCcT_z|C%Ce;B6YPaI7|-a;QeC z#}4_lZ#w0qr`NiJ4Z1)CBlFhf5FPzSQ?5f}L&`w1`cR8;;N_>HI^pl47|C}(R^Xj7 zu?`~4j(c`sn2jerI?7c09U!{J3wU#~;|Bu>3q@Rd_uSE&-+I$QUnq{FU$$j=p~Vy5G2TX&AObSL20r(5Xj#unWGu z@Y+{Qp38>uhE7fLt&2&ecI0UFM+d*%MMPS*N3Pi6?uz|ljU>vx)UkKc`&0=(h5CsL zhU{JQm|mNc8!bk|W9xh5fSH<~2JdIW(7^en3S)VljVrj9QqzTM;o0P1%%8jICU z>Ph}T^DC4!cxZ_}J?>{bzAXVbWQ997B#Hrarrk_ScnO(D2rLM6&X52Q9@^v_v+cTr z%K!r-T6wd=q#&&^>wT?M?HG{C>x?H&P9?|(lx$z=jP*&>OGx7!`*(lfR0=3hIm@5kRS~p5EGCpHK7$F7-_78q8Zrg(A^*z$v zGd{K~g8QvQ4T>8=)e+wIun8A`TPOTxDUoUH7il^{3Dk#!H5KqLA!o~pJy7}PpvNjJ z{wZDFQ@`o%x6V0VO~>#-*{4|A?9UJOs3;UoKx93?KnVewPmR}_&-dkMefy55u=f(Pg zs9|VW=KFJ>O(nidwpLLCnmU4WlG`vtx=1tyP*cAApv`8cReqt(X-&x^&ZS!+8NbcquLTgj(3 zSL?}&@LQ>`DXxm>=&=~BT0`nkN2LUPDenW_pdqzS^JjM2T7+J+RhO)x7VpAK1b+N- zAVGY8e^5`>rEz(~a{}a$%@%3MTK`_CHfhmpfGHyJ`ToKN0<$M~S!oH=8^H9o6&gkm z(vR&wOsMM4k5?B`X&mXuGu0MMXcl!Wj3g$6XP{g7WjHfSO&SmDLo6TjAK20@5&Cg) z1b!8M3Oo+fd27A8asi0|U)<YA%l+9EZ@P&i#@=Uqih;qRQqdDhvcAcs)AjXys>x{nAzO2?R)sSoNg;Zh5BL5uC zoWS2$zYj9x8H^)z~X2xcH0T z!gZXP9^8|tyTQF6IIB5H_p#bODbh5YFDm_5gCrM{7$Kh{2%k4q)!}j=>C^K@eBBEd z8eGc$dL%k4qo4ZlDIh|(kTZh~FERFg#7;wDj*IoHgoS9qU&BBmzr&NDD8JH7kuOcX z&&O*5ozZc|;$<0M)Jo+!k7@}15M}agl%5PZTedsapm%aB$|WCk4rRUxjd*elI`sA4 zt7Ob6i(69GY_q=44M{V5(b&-+sSO_AXz1`H!v;^Q4hz=pa+%Gl7Ogq=9bc=V+zoSo zguIG)4iK?i3(14z<(3H^Vlxa*<84r-Aqh|oDuKt8eq_eJ7If)J=T@W%D16z zDHzryFvh=Anrc)suwt37<3B&HG0nf@R@XE*wYW>&ZE8CWSIl%BOMr{B8n&`#n&lc) zP!pBR&;1s<3)HbG-j(}2a)Nn7x??o-q?P zn+xvfVzFIai5)f~b`2j~_<9u{vFaYWOkdNiR4$1XvlEytNwF>Z3M9jYV1*`1*~({lOJR; zTjD-%B|bQ)oL4kmc%;S#QfOWLZ{Y^I4fw~Qo#BXrdN1(`_qlEUD%l#488#P4<&}gQ zELXks2U-U*rgq9Ih&)k~O&hITbVQb;zEc(E4)D;zm}P|8iUDj9B1xu2J-EhG(QbV$ zcxcs@VxyL&ZxEwuNkj2vjyZrPLnO*BHJ0cYR&D|=-nQ;m>uHwKhORRvK22nb2dF2K)x9)nW6faRMEtSa$^_T29P7M88BQH+^p5`1maA>1u|W8kPe9+OeHP z@5FW0SXsXLH{ZE{K={y5i;$U*J+6-rjOmlu+wk%ydehn!|6WMP)cwib2X%Z_YF1+- zx`EQzVOWQE>e_joVICMBffIiOEVuZM5N@FD&@%pT-Py4lolz}N#RT&)C8EsQnmNlFBNIdoFN;wFn&v3Zk%j|6c_Oe8&gXZ+{d`< zQm^BwZhxiH#j~>#uXO6OKX38=bS|}KHJX+4jC0o@UcaFbhqPHnvprxfC>*i*Ox^o$ zb6_N@dlOK4kAk}!LkC}4X3!q!G;>@>&Vx)DGbmrxPb1;5rBF7eDwmz#Os@MA>meFY>0^KEHW9}?j ztXG*3e~`Vc7!TN6|F@`tduB1(yJm}^BD>)Au}Ipbu1qYTS;Kr?@FvHmSn~XdyM94GpuO4Cbh&X%Szg*SDdG6jI-$bNSIETXXBy zvFNJh1%$gED3lK75~n62I%+Er%%ntLPOlCgTMQtv!L|Mi8^k1C z>VIM$1B9*Ukpi<`9|pTuHSJ?Xj>a1xbKFz*?IhzzqZ&~S{+lSZ(1xgN|8hPaM=(o& z`Sekc7zm4Tc})rRocvLlr>ggGk$c-|>}}yCxTsCYy?}<(LNWQF1_1i_CH|B=FeJ z+*!b1A7EKXob?I*$cW3(zaitZN$5I@=LyMjB(D)9=ChO)FoN_X&>eE-voHd&YT-#9 z82?UV76QzgcaIahz1)p+8B)+?Js<&Zgaz4dKkj@!Ak5e>Q}JYJv|g+>cEBM0jSoNZ z4zs7fv0|LIi6tY{D+r9FV=Yb>P~K`P_uLx*aRWME^^7B(*=HL`*uZIU4di`m@3Ju) zg0lI7;JukA1q&`}z0D^9VPycq5cplqYc=~P!PBZ$HV!a>sedtF-PKA7m((AJ0znFT&6r26bKm9nMSfe@#QNwGG8 zC`^ZnVjBbvz$B|@ZwopLtUZ)Tkyy3fNBB;St&1C@91>mO7Y}$Qz^;`}yMChp`FO=ll#6nC&uz%0Q_!5X zCd`ftU2h8v+at$V2&rE+cV*Jv+`of8ZKdPsmw+iA*FGSu(;oNmQgOxkr`u|X^hIeb zQ#KT!+lR*!bf9p2!UsDC4BF%j!Q%|PV#+W0JplPH7)=&e-do@+0~VGsQieyiKY7pJ z!0XoaiAn~px{NqXPL+!g79eQ2x6no(_n_c@)9=(@VYHa%kyF2 zK^#4HR~-G?&gpT+y0$jveLoUU5&VD`!4Fo_kkMpU<#nPL97irAahLQ2Y2Pnd=TA$# z_OQ3$e6Eg~@At)uzm%{wzc@@&U<#%S89H>fOpmdzs%*pm%&x*f<%rT>1zl;@yf3tW z{p+{|KvMdNdwU%sGQR8V(t+Pwwbz@QgL{(^aUB7PKQ%?-GX#2%-vz$t>R<>lUpl!! z^KtWj1D#dPTEE79j&)w0!4Ng9DQn%bQIA{EOAfo}IqT`35u-4V?tk_O_6x`->}-kd zc|6bD%Pe($K9QrY6^#WnuejAv`sbb;dM#V7<$44Yo{u+*z^x76AskS%TNbrk_JnbO zxbI`O(EG$c8UNEaFA-|6Oxs|w>VCTp&RK2)q46ZECVam&r}_51<*MwRVm_HvWKM9VMwM-;fnp0E$USz1C={_7^Z_rxTtI~GMD$T+ zGXqH04xQ*O_rpsQI7(4h7!gRU<~AAr?jvZr4T8~ zb~cKbU}?*wyNNk7+e2c0@8M_i3}t4*D&a{P#X37BkS-HhLld>b+^0I5*}nAgX#*>h zyQe*s`{C-(~cxqmxuMhf+;8Sm~vDK zBxEK?{WN(998j$eoN#=aXyXoZcOfh>)=r$ zh&gxCDkasMV31aCJZUHfuFB)HRp{;S-MjF;khx0=NVkPFrLha8p(g}8&e;h&xH5aR{Y|G05CiX%p}pEamW2kc#pMYC2T1OJBu@Nr6j0^)#Xj; zKXGh1{#Ai&vRTM;t0IN=iO*HrzMI8zzZpZ{5`q+~wH~TWR@r)X(9u1D_$ypenR@QamTjaL$T*+Xmc*gawd0YzCRT15m4JF!?hri2CI_-j zRv(Ya-e2M0Q7au(3(YHdfY`aLq@XV-p@;%8ASG`y~0+pcnc#H$7^fdX4XbNdhCw^ zR9;S>93Jw7B6d2{oRt+5IXh8Bi5YDLJ4tUPI^Bjzd&yTE0kdlWrmZ z4G4ie{McmkWq8EDT*xg=AiyJGVx&kvmQC8uUk8(m$q9X;ono6DY_R+yLibi3|5ouL zGQoHL1izd;jL!T3_%;rNFF3yRw8x)>W8uA<8eY zWZH@?)dbr$bkj)QgemV@>Gb@_F!PaVh?01EwL(*OK8zS~XP|a0w{?6k`l^)YcbOt5 z=cQ^5z}Uj<=z7)Ho35v$Nv;Fx(b0!uy{bLL=RHgPX+O4aUt_Bm5m>yv4GG0so8L#sj#SF8ozXQ)5abqb+4Ni>n@a^Z@Vi&t#u5vucl9!=v+fyok8i_gSiEI-{(#C0l5(7Pb1k>3`A1`IZo8`Y)z~m$pyG9=*Zpv)G1a z13nI5EPmEprJY|?lIAPd-OycIEmI)5O^~3M;#L8edAF@hn7FmAt3K0h8j7^@8w0vK z3Mmig}FKy3IrD{f7 z^Qz+I;c)(jDfcKAHs^ENyX6BE(;0ykYewqwehDnH4|F%ycI{P@U8!B_23(OnzUfcT zo$RGi2{2F2YzMFzi|o?l^4Oa*esQzWe$O+fg6Ry$l&hcMf&95XPoyUOuJNB0Z65n* zm9_2a!REz0+gV)hnCt0lB;B<6N9z_=VK`Hho&~hhD}z z#&&0Ob&3Y@9ll#v8os!7V!*Ln4OvBr(`m$13Vf$3>B@Mh&>pse zF^lhUi<65lZ}g0djwSkwDtPT1V_P<*O}XDg4|I?V4&lo00q`d(ibfr9-Acvx3n7D>@NOHk&SVN<>izWB zZp-k~X4zf+maNpTdIw2-QqH}(pF-nL>X%m@mzSzMx3V?%QehCEW^I3+hzoXzx<5vF zRI-_K0_J9qS(WIqi>Kv#aJA4GgcxJO>&KB|OA97j^J60h*!emaz-gt{mVO4vdD+*! zS*(+PAsvY5#hfoIpuOkn2&AImZ3fPn$KB4suffHqBrIuFYl#~AFzV6D!#F(R z3o8Ezl4+Fu&%q!xJ>IYGDtYP@Ix_&3Q!r^W@w_RLE=5qPyHu>jT|%c71fdsH;#b?w z-sM^k(}g9wqRkzUKxn}}uq2uuz9A`Ef8Lg~VN_v_R$Z$RI{0*4U%@qcsAMF;5@@0nmy@{|{QAY9<3Q3t3ZK&CuE;Tt!aWD{fjz#| z&GU93jZgY5dIBZ<`ask88|#u&0F&lJXAj;UOCpH*!j*C&(=gFClpy2fx-*{E&|V=g z7gkyI>~9qrmQL7yGuJAN9?4!4`lhs*Ylb`&O4rp z&>wE>1fUppUKWXGsiN_*3PbH#xMfWpdU|u}?84cX8Cz5)UKFm_HxI1-?iF*CyNB|% zPQv}CsDwHnoWoH$`@IP_%?Z~5d|}vPF9}$-9!X7qSvu_e5L|OGFiq6P+>@D% zq-nVvkCF~@Ete3U1|SQw@JcmD6F^vqjK)-Dm5N625j^$|_Jny8R{ zcNGbR#3&3bi5hVZLK2zMUiy%rXwHA_k0tYSlhH9pE9>nA=KD6^oJ?_reN`_l@l1lb z(O!G;0lK2P66C?n`v~j$EK+I-#=-mjt3?+gW~Jc&c9OHhMG9+Y1Cb^e()j3DJnQvx zphzqzwBN1_E!COCH#~j-cr4=D0DU-1oneC7s@Cct2>aZvkWg#aEP2}&kix=rX*MJH zafw~MB}H|vg-tFD>`-QwZh7gfH+HiXCjUpk@DF>eX@DZ^0eqlBzGC5}y!=2#_FC#I zQfFq%K}h(UgN$$hAuiXq+#wH8-U$R7*b~2JP#E{OjoB|&kZsV0unA32#&#>e1E@ib zWtVl}K~J_=5`TH;hYt(*L*iq?!rMLfC$1IqOO3`Ln1Eyj)oe$}ACJ z|BgJ#-g?-UkRkL(v+<_Yc!e0@*AY<*+DR{SN`j~bBeo^g*LJl1hOKipN=h)gfjbLc zRnwAsTKfP)`Tg-KO08E~aPn}3C5EvHlUEdquADr))#5bLiWo7+89S`Ab!5}D)=R3X z#<_Jy^AIx6ee~aMwvHoYH%^#qBYidiDg<@C2jNLS=~UF}`uB5cI0E%({NX=iHT9yMIv5ad_`BL{; zk-Y3*pHFz?2D4y|5h)p4Pu7}$Z6@c@qs8^YhcH`)KK|j3Y2e$7h%5W$Ub&>5FL>!; zNb~pDGSHN@I~~(8`$K?M-zZ79M7C8sOezSq9K$#bN8-s6HK&y4im7Ve`YEv3WLPx8 zi|b@xdass_u@ElcnXQ_tuQAobV9Y0!??0DSBi3eJ#rRWsj|?3nh~@Z%isQr z`!SXV=xrHtidWp_MfcBeXCTFo`T!<>;O0igQ0biAU9m@oc>h0NYe5Rl?cS>3I_j)L z`E~1bayW)-e!)31)%R`3$Nn^bOnl(Q$1&!zi2J^jKZT z8_^CRQp!ILtv8zTjpjRz3JcxS)?5x5? zQ##(Q(13tW#-IID@PhMVETY6-sKq9`Vw=bJj}31)KMG5j+|d(1B@m~!-L6!czjvC> z@VWcx!4n8OCm)_}?hYS^$A*VHaRn;g`tF-qXlk?VHVGs|hDmreZ9R8O#P{IwY1 zS>fHD?YtimC;Pb`pZtAhZsE&!g6DgaY^$P|W9YHQr`JzuDkAFE&d$O$2TZH3ZBc@y ztkH^Ml&6&yjV5W$l$mFRQXq{OB@eI?4!0sB zB#P-H+b+!xrAz^+1BljLp0|)LOlTLqFZ*=Cq2nDBl63RbYE%S(Sx~%vrp~69k5Z}j zSH^GU*`!^nVK4d^mE%<8;mKdi;UbjQL1!caD1kvc`mcQ-ifr>VxO*-3POI2t7~`X0EbVLxB|vB}^b9mlHCMAP0fo6T?=9_5 z3W?;bJ+J;QBW_Iuo`@&G=*u=axU>|rYvIW<}6{QtqrbDJITu)LpKhM#+H#X(RWDV_}>>A9}e)edLc<$8h?xPz-r{D+He2u%KlbfW4fm$xp!|A~6YE8WULvh6r+?pnckk(N1gUOFj zp8=^$62U+XYw+@G`mwt70~}3lj|?5=l)CnD8FZyiJ0f)Y z1ob`hv~+Ib!PWdS3Y%oqrqfC}Z(Y)Ef9C5rRAoF3gfCi+p%gJ87B6fOOg))+olm%i zdb+HxEFqwpMNLHoV6__v6$bHx)I9AJeRY~Nqih#Q|~(87mqn{ zZb6et@z)jYRZi#xk{ATY?5+%t9FcS{zUUi!c1gyUd&f+W^1&FVdsM8Rv8?RHaY1Q| z?$Gz@ywafUaZN4rT~LD^VN6opRq#~SYcsl3p6H)X4mP0)WP~3T>TWu*ugtL#5|b?q)2cCr}G3qHfg~X_4AU&@D`l4BWd#ncyX(f ztC>mdrJ}Pdmg@~%mh!~J4IFtLujyJig!xb*#R{>^q!owBcHy6Q`~&k2EN7%I%UL7MGc!^e9(0X|_OUx|4NzEbLf2^1Xm1O8*2GSfjQk+srq;1@bnhy&A=K?C(oU z2Ms{~*?%>}YzLaI6GRX1&kl!hvenen_0w8zqELhu5e$yPH)B6+SS{k!c&q?O-RWQV z_{g4GV9$<*m$x{mX>&_0#f?;SQr1KPj;XD=%`i2a3+V18N&$T`T0N-?FcY;{xJUp; z+4rcQ=~@E^6ZGeb3M$}2r0x-FDwdVgMgU_#oWJs2O||e%3wL?phDa#PI+S^hm#AV% zsXKv1=7Zk35?yBRgZ3&WXmoZnkz1u0sg;Jy%FH8pNC_5q>LpntGgIqs$)@&~1q^fS zMid)UXui_SQ7El6s^1zRm}ONg%TW@3vz7FZg&DOS z&5J4;lIry0OO$v!G|?Ud`|a#)@BMwk#lg`m^P)?z%qJh`c9=j_GECCf`7~@M3KC47 z>x`+Pa52XSuJupw@h-jLZ=>odMGai5mA8Rng(*)Zlwg|dl8PGvj9??6nONM?EY1;M zyVZf2{IW1Gpj;zrzVN2J{JcPr<5qKKZpHY#MtAv<1jy_w!q{XM#8@x&90S$6zIrQpb~u z5s>dqu->#=*45S4)-OWz{p&f?t=g7oEEp4&p6J1l$st%<{|WZfAvvn!)EK5vV}EAm zjJsJp;qfsJ9CV9}2~^A}Po95@hm=A|O!0h*2&EbZd(6nt0wlzsQNGkf2(jGv zR{*)kPyww*YrP`tsCQJxDoyRXmF9y>p(4T>E4S*aKnBF_EU?S^ao=X1T0qG7$f)zp zw_qvw-mLU4ok^@@PK$Ue!@zE{S+qQm=f{rgY7e3SAUaxdZnf&dtYh7!hb%OWD?~> zHIYh=Hg?r((KS4r9syd^nGXQl`!8EOZl|cgk}}0$_Wq?=<=e{^lr?t9p+rwdGBff1 ze7t4f(hk6+Gg9VotDuPUH8W|^^kwl+LIB$uuXCBI5Gb3ORy-tKIoZLTDuR9u*|cAK zMF}VVbmC-4+gp2p;gDpzABVP$4u*!Ho{Kn3#sTwEY{5=Ca~X;i(Qo+2qD0_Iu_G)) zVNqc-a18ivTZkcY*OI&IOvqZRZx)}&)VES38JG8K4c3R>IDA=|_D6wf6*PExM2nkG z@XIp$x;Mh_>^hdZP-b|6eN}SL$2{)i-MyYXL zcfn%q>J9y(V^e~X4l8)NLx(u23h04O|JdWFX6Q*R>VyUBr$R}^gSVdKWVJmx`m0cf z(FR%Il!M{9yefhNJ37I9ueT5l<3iwYw#QVxMIb=_L972O>G?lF#B|@0w+j-dupOqi z6B_q)Ev~9351;Rgyps^*uLtS|Cn#ZV#8FF8mMWo{nG{e&m~%rfG8zdj=(IwtZSl-B zoJ)8J8t-L?jotH!JC+zf8IGw#GDyOEp~93Q#=naz7NvS@_fNu?pa|DUSs^ae086uv zSU9f57{eyls36gOYzDMM+4wOx%{OHaU!nMhsyIUJ(d}>E?@}X)wjcDUA2HaRX7?t3 z!`aYSf}kZXDyrDa)e?4)*Y!aVa^a!|VhbO=JgH@PLJK?qi!??PY_^(!o5l9|&sil# zLL7%c_3q53eKSCrH8sPf31jm}GysZ8KD)W}h7EgDtWf6EIHb;L)UKzIwKo}{ECjDA z0Z+XPj$ZCSfSt!a`0tvES&y#Z6<&Kq7T81xBa9)o?QwHgJIF`2F!= znP!L&t|gZKr77LMA$VZ_WB=cbBV|t|Bc3lB7V*%zA1Y({cR;j>{ac8Z4u2gywfz{^ zoua^~*|(y++XPLIAN#zK1J<|rV;BP4<*ybs1s=STgH zIv~yJGK#%i9lWP6=Aqn<1sABOJrpB4!cbt^P7bo!{>6^_MNjTDMcEI?z4)KpQGg9D zk0#QU{g~>Ir>d?9@n}i*oBeZe012hsUP=#jS&s&z`T)GB%3lfSw~wMy8+?W^(VHzr z$=TorERK~c7W0GGi+D7(f?|xfY?jb!bjD@t3AYp)2C#ITG2WVJKNr7*TUY_LICNOz zTe4em4;~qO%)7YPn)&LOCAyyPtilR_#+y^`hzBT45TOnS+?`6+X$P4#26_e|4W)l* zwnoPsP0QQ7v7KK*VUqV;yU?b%IdSVEeP&adiRSk1%8oJ20xJ0?uGgNM+6Fc&v!iOg z6jOxdYtqb)!t8~!!J;gSoWD)qx+_haMqL*NOi$(yDdTt*RNnZ%jAG}dKZFSp9L!ym zzZCF&JvWz9LwcTvcddsZ;>a%s068%lAjqEO@DfNtuM)4y#Pgg>?G6_)&x9JZD};zq z0iY{%!1FlzW)M7DKR28AY04f&k*#w@EKu2chztIAB#R?IVWFy-*p@~#EI!N)FqP|0rcaym70rB zc(j~7|4!KR%u_m;s;`Vzw-Qqd6Xq~i39#=@Ok|K)jZ=>OiG^J->UIk)Zb4*2+7D&cCiIH4cbSa@j2%CUr$QqT$ zicfHF>Wm*h1Z13p0^nQC*<>{d-Ld~+*{4;5yjVCeU1(KtjGK5H>O7_I6eo1cT}#jJh&f=zqT97TwRa9qu(f&j}_2|A-k2Y|L z@_0dv0meD8F1(&JE8;Y-Z57E8M~Hj_=V>9O5;+CQK>jhpgLaM!+I4ewrp{HWP_QMg zQ*m|MV~XvXq+!0med^sNPwFTD3Snc4ftGPIjYUHfp;<1&^-V_)mn} z%P#Z1((ie(Uh32cWl}D5CP4Xw(+noQ14Riy4h#Di;$pY`>JzpXiysWE$6l(kFY69G zU^8C(i9e!B($F0vjZL#UK47%2&Ho`&+ zW|>}B?5;~o+Gx%15uWxL)=MZ#(+kOiW&*wQkcG3v8MNLD83SR-OvvzS@HXVn@6xzM zxf6Nmru(8{k%8Wn>>}&p_WuEbhl+R!!9F*_!Uv1q7N>(1Dk)FQCyEckW;E(IbP0w2 zjZ`5slEqiCMcFEH^KW;7ZRE)KwDIQO%81Cp-#Ri@9Bp&INcDDzn(kJ_zcV zly^tlsNhwpbAi|{^#l5tZo3cSZxN^+e$Nkcaf}f==_?vp)drawdWmvOrvG!qu_uvM zzZ;T&ivuWa$-7!gTsoDIl5Um`BQ-b?{m62U1sqe4RkK$n2de|*#ugF%Ql;sR?St0j zuWNx-p#B0C`K$aIRj+NMr^K$LctX2qV@1N&Y$?#_b%P+P^*HjQIq;D5k_Kx-#Z_zD zT$v&(YFRE^*AbmBqSlPnzp`tD#u>*(|2gQ$zO=%C6r4ML=X@n?{9R69mx0H{k<>tp zx1Z0iR3RWC$#k+oE6=W%H{=%l)fVdWCA(=(8+_(gJ0%|$h5)g{EQ#O#BXbG2XeVK< zdl5l2)3dmx)1+n}i&wA{*amP0`k>16l%l;&-ZK!DIJ=}GvjEUq$Vn8u`nEzF=e#B= zxTL4`aoa%z$~KRxLpQ492`kQc3DvXa;q~3qn#r&CXO3ePfT^YnDavh8@_igz3}=N? zr#PDX7*zvU=qlc6+Orc`jVJdMRr`v0fjlHjpl4U2rhwjMi4m*C29)Ui;LlOPS@YVz zjU76h;QZ`^sVW(>;6y5=#KWXW-Cxmx-A| zRpS9cA=3eN!C{yCug`l$ju|6T;-|0SR}Nh(Wl6v6YVOMl#4tPX9{`98SOqh9j2Xo# zL8Kthcq2B1AbVf$zvpF>T+Lm@d*!N-hDdLfHG}s;JPiq(YnrmlRCIETg7mc25hPHbsVD2rT(xT$LVXA+GIoox5>6FFTwOj7 zwZF50JRapcIGYk_PcM<`)t&{lJyFqFL^{uwzS_ZY3siH3;MXk)iIKc}jwY0l=uef& z5hoqMnJy(x)xo!{c*uf-DsqwassP12DcdnuAPy8!|MEMym3wb-zc`N`*)Cs*2Z*Ek zJKXhN{GBajfT{V=g=SC zt3FkDuEbiZQoW|)$$aeZ>1cz-r`lRVPFT5j=S<7~1Y|p&lDlxw?{V7D zu-&F(P|qJ4eLsBP5SGt$5fDkEWW;;}3UECunaO*9Ek-eKMOG(s1;mAxM~{zmb#9*l zqZ@|UycF&wIbp}!9~^%WPk~?SC;(IURkvx-BBnRIFAp2yPWsv#HZC8lGr^s=Lr2gi z^?l%bf=x2+AcZl|X>=mCBCaG47>^;_fT@C_$_5BH5{RgA7Ku7YFfkxuOFw=gE0~P~ zSKRkqHm=0H8u37|0{o#8j)bbp=Iv>}8|^M_5Cz(MzO?gTL^DftccK0uDL{ps=Bs~Q9^WfKSRFH6FhOL7E|G66jfI?qa;fE$CXc!sjt-Yqf zx}MUc7v+Qq}B~&oKR)ALiWbTX2#N_&7A3?QG>S2FM~G&$h$OjGaY+Yc@s>zK34pq(ja)jh zjRXq7l~_5u`RHVVD2b-vuvs?183!HaljVA~BfA;?Fi^$tBkf4*XdK%FzNn{QWI8vm zp6|dkfYUdI-TlH+C<19qsyeeKtfe&2P2r$zUYHDMhPNnJnR93`a$h8TlstHvVZAruu?>MyH2!v z{2NoIyFns@I-cMcU3@h6^e?K^o!y>OA=ok>b2E{#>{KO0K6ly@BQhd^mdNP9<*R>P zYX~#JL4f2v!R7g}Vn5FpNh1?tYhhsI;(}B6=35j#t1_g_RQr+gUwG)tK};marg*;N z5wV)jpG=Q(+$OOkZQ95xvpYE=z2S>^^ay{YC$2~8*LCGV7b5+E`EVXxe??qw*&M0j zoKsBy86b{ff(Gh0 zzqtUEM>!7YxJMf&GRXpnAm(yR*^WupYP1fuB_Bw(b7TiqTBs_BieyY%=p*m!YL;VU zx83idqC=i*W-l+6y?ON9xGVedJVk_E5fuJxSNi?Rg;IV zXp~y45gu#=J16L82T>}yqi$Z*UKZI+ro{w<(+E_Y=0f z9|+MT%_6?OI=fJb?~UuCj4QoE>db?{7jhOf zf|}(6^CWu~!jESKGE&_hsw>LcEmfJ0SVO}XPSK)XkY@Gr59zT&>X;To~(^5k> z2P>e@v@O5)$OvAKCuTADfkM*{Ss2D$u@<1KAkkcB6Ba*axt8;c4KP}NKFq>-Q~ptf zdHihlOgS2=F_o0}syQ71HqJbhISMuq1R<0R1!_J}l`;?oKc!VyD zUd4DZGMw`UQFd&vRWBSD@(r=;N-Iv4LN1Z2_kA0!Og1zT)9GLV$!phR8?U>TWBEkQ z5K9wvFoiUH;J|pHEmWoLiI3`gLWqvGP#;&GS$%zC}=SY;QK5$k{xO z2(F6{OZv8ri2sGuJw(Z(<-t#0n8MAa-=>q{WT@Cs_nW?|=cmQ$)c0_CN%?RgRO@5B zTLRDE`q#rl+AT~A9_-3_%^e~p+l_}KXMqahSw+Y>90n&e5C|5S{1Y|-?;#~~J|`F( z_St(lC7{AvIxhF1io<+m!Nh&R-R`Up$jgK_aovh^#QE;?;<9L``^$FT$DpfuQ5P1T zf_S@`+wg_G=N8ym1C7%{-W_ArNs0y;kA3?0i-EMmueAk zJ#-7P$ry+`ts}VB%;L5x-$nplD=I#86B_rrt@#X$=*Eaz-`Ibomz;t%2kw!})bqkG zt(g$ELIYczd?5zeladB2m*VS33(zwY1qQ3|>>j_^um*w(H44;<6Q3!Wp+?Tjz$n=5 zT5X#P%^(Q2Q2+8zbbpy?spKEpZ@<~p(ab#sM+w&Of0un9-?oLyBFQigv5G~4xXxZl zG2KL8Rq4t4SZ10ma}402rxC?)oB!j*SNUDVK)c9Nh5Q2DVyOOVp#8};1R+FbvqEAi zD{Td@H%&iLM%G**B7-lT`km2KCCSh4w;fr^+`a|r`i|@6uPXykBWMG&CKvvQACqlCoI-R@!9jkxFJuxQ|Qg&wJb~3&~`o-|-iR zcM7A~e(zAd%;;X9k$iqdgr!^CaBP@OXar8(>zyjRZxA%bUAY^PLT^awhcRQfu_`YZ zgt_iw#h1!Lp_Q`VU+NS5*GI5wQ^!bOHI>pg*KCx@Oa`>Jfs$kG+!+nwb6szO2~3p% zw$+P1OebsE2oK(w3jZL(#5rm;l~}vZdZLjr(U99m(DlCiCIS_mhM^!j05d~MyxtFw zO+IPLiVT`KvD3pwX}2J@glW*v>^2J#WTlY}sBOY7KdYN0r@lVHmAE!@jp;&2)*+Gm>flx8&QS;|cz{6L76um6YyGbY*fNFGg%(bY(gZ?f-=3Jv8^FM%+|({o|%D(n@GmoM#kI_VDD&d15gnn zVrO7xV1pqiS21_A0{rJL47nP>-of0~hWlSQVS9jq56k2a%JFF~I&0r@gfUk*x`l$see#i@A*{k(fOI zK%{JI;^<;v5BNiE1h8=cIB@?Pjktmg5tTT=24HVsMWoDS(K|%+b+~o00La z5GH@EFgTbn*Z>@<|IJzXPvk#kWMZZJ%d-7#+5fg2e_PJK?YF-z*I$;I>EBEBXN8&W zAAKPD$5H>vm|Fd7ddwZf%v}M-3g(VRe=28Sf?R zefy6s6*F@qOB;ZL0}8^G)`c7uGAmpdSHYg4eToak%_6ZeE$@CGMESlB=`ec34Y+C z!@)GIi~&h|QzA+te}ZE!iE2@ljuCJLZrj-RjrKQsY-~LyL z#KP9|(9j4=^b|8#<-w3uR;bBrjU-apLWAq7*rhIG^2_02J~kDy+ZU@PC$CE!XVS@4 zgXr}E@FoU7G|O8te6BR!$4l@+_nRJGQJY`OrmaqNny{mxuZ*dm5m$aQXp;<+nJoekG$^`wN>8Tt+;L<31EiE4B$@MY)jcuHvj$!iVK_-k=p&{H3jh=xXn zQ@JT6i*;J)O5JD;ZhmV-H0kO`LgFd~9{&Q4#jAA^u5$6KAw6gB5u7Vo2*OC3eMga} zuZigta4cc>C{0jG`)-as*Q+D7B9jBKStL5^HIl~!mZ#Mz^r&>K zmm8(<4qc6$Et16GlJhtzva%ho-057SL{4RoO*JnYq!Y&*%f|0VS{QqMu7QC10|&eR(I?fb3-T|Q5tbC$ z=>C9z-gA;hjO|!NCr;J(Hthd*;?`W?8f)6a2UiN^+LrO zd%b(MT{>jq_0&D(ERiY$+VHn8Ud{;_&jc!nrx3N5@&`hZyjSUi1YYrI#NUnsy|2YE zz&51hgMth`CuQAJJ`JTBPm?E`ng&S|pH^L8a0L8JX)t?Yb$?1ewm{JLr?dMXAI5L> zumAeqLP|BK!fPKLPv&UhJ4nO8j#=R+4ZpWWILiQ;e?)iPS!mL;_GoR+Ia!zh~( z_7Xy|OlZ0})YEZHE3&Y9ttfEa_BnzCYYN)gy|3#BQ_?E{O(Y;YPF8)e2T zNhYmnQXjE5&r(+F`YYYz>sx`W?DkUL(#8%6{9%#UtJ>D%CWF+8+0##FOxEgau`m>) zS`g7Z0kD(pZuWe(Ow#zA9R%g5iH~CK{nkOZwFc?zv}S5Isy?Bm`x}v85c9lh-0n(^ z-)D%F+PKAq>ib4@)8sd2sk6U#b&(W4C9Wro$S{n`AoF0lXe(bZeVc=xVlTNo%YgJRGra<{r6&Y8r4?<<_wo+p6C9~X*qxgI-fXBl=0}n_@v(_U!nh)U@`dZoTuy9Z5%B2vC zCer5C8p+d{o>x^V-!Xoq6){m9s^Xw8qU2!o%^hTMkpB#m<*44ikvrp2jJe&lbE^+s z%5##_#JeZJsGs6-UyPtI!g16OncJd)NwHl(9lv|EuykH@j(s9|SS01cZ*bbAa1t_( z4C>YroitOs(F2AV(;L*fT`&s9b|?H~@bar)Eg}Y!bzN%D3>~3I%C6v%(n_-l_gN*A zIZhxKl2uDvXQv=~$gm!bt6o;6l@QM*_-ocfeHF2@HwclPAoI~;K>{GEYCmF<2Jiu##as*{xZsulGIo4&) zd<6p0L?M*ZHItf@}R~1_QBjyoIN?{XX&JAU0ELh{sc(u#z;TSJ3L~(Z*Zml-1tPoQ9I-{yL z<;YCjf_LBi4WN!t5gqVd7zQCvqf&FMUAGJMs)JKV{XFoB+a7OI*4#sP4G5(ej=lxrXRmKCSOu8s*1lF=#32^zEj{W%KT z>1O81pBUw6AmrrTCDH}_mCnskd-&&+B+SM9RI9e+!E_G} z)cs^w2#K85QFwJ!eHQADqkZ~-1#+#%!fZfP<^1EeP0c6&HkC9RO)F-y&9Z~i($;Hh_7bF&SSITd+B=aE|)5`CIbGG1?6i)qv0v*Ngdd{-}^Yf5(Lw3 z|MZpUEh~Fs|9raF9b{jo%_#(m;aF~6Yk}*t_<`a%(40Fu+qIF=98PO>QjF2KMZhIS z6jWa_m_z?0SP9;zjZ;XB3CE5I(YWP&M+L`2@Ja&d^l#ftncp>W!RP~9eJW@WCd)j` zp^b)(X3d+tymY*6D#vs!!(Ky2E^cGe2^XLAqfc?0z4NZ6maC?R#G@UNMTOq5sJ$^y zQqr*LUDrJ_Cyr5cbN8PO3$^O$KQ*?yBvhfIH5%aZ&K_%vFEv|2IAB=%gjCv31@g<4 zRNofJmF_~>vRT$Q&b;bn(m|a7FrSO3Vhy?VI@m+YH9D}SSuG7-2xn3BCnzj~*xndA zqJ9&C_%E`+yRFju>{2b3S4Ylr^R>wwexWm( zO*J6VT|v&USL5`S3&J}yz8CI37!LMyCWlS!VA#=8C>~6o%UqUv#W;++iucfJkA==f zoZt%5vm9u$jZS~>57pZb9!k75APoZ#Qzsa8KHeZzp-H$Do4_%pNVnu61h$K;)DwQl z({?k->=M@x{OU0oP;7XSO3cr(ji5=eFY$2v4A-pvWRhfpz^i$0{3QtjMV!?K4@@8| zJBs|$omj1d6F^?XCFzQ@g1Bvp*(BljdImlt0U-p1*;h?JCWzI9mz4H1>r_w70p(2& z#Yt^(w-BSEFX0InljV%&%2>*2RLgY0X$~Oz+}HN$#Rn$zwzd16R`A(uZ{MkwzvsPd zKsOQ7H{FrwTYokePyf9Gkao`Q`Q8bZI$s&}4i!6bOo!X1Y1wSMJ*5Kvp%OmZB)yB?oQl-in1?05O(}pbT!-gz+#XYnmO< zA`5f6E)IC=wh64Z1NpB9wCM@6${jIIiA2afeRQlBgH_7Ppo4iI8bv=5_+nIirxTzp z8X%1V&Xmija&C{5tfIGUusQ9jM`WXsMg6|?wuS-gEiLX>V%VKMxP~YOAR)jA+wa49 z1$|lg)pMsJc^oHhZZ@)oQ$eKl>Y(_=pXp}&Qgk@d(3l7m4p~g$=%yF#j}YRu@!!|R zVHLl_P_RFd&Zi9V6Wx}%Pay=ZY-ZU=%>-dgeuhQ0hxUCVhf^v1%@~hGXg@L_rrkJ# zet222>r}7u6ye>}vz4}(>d6G2^g1H13MnXaxBpxEWfC#Wc$e1=#Dk~MO^g5$9N-$D zYj@j(+l*({d)X7-a{Dc^hKap;_V)3phX(Q%3+ykm@H^~zMb!0RF z`;R=cbJ|fJwkRT!&woD_!-854SyOB{?I?zqp(O|nm6BxE0 zPhjA-y@QJoA0Jp4IO`iqXEnS*!F_yB%q2~03x=9eR1E4?20!2Dab#(FJ*Oh7i=VT@ zziAOowBUW#q!n#~QmJXNyz5eI<+w<3E9d{7iR_b$r(9@M=m7LEh!}N_7A4)n%TRsd z!E$pX0lKj(V$m@mcrt}EQu5AJ6%aR6->$+!GF55T-27s2U!?Wy8NAqX_04=niZ*oZ z*>W?n#Eqr-?a`25#n-{pr=`AJnb=R=}ymFzy4)< z-?=439Fpcl8!Taom^-pXUO<0!nbL(~ssrU>{2k0;rB-yPr*NH1sRVd-!_(h!B^Yr` z%3Q=&SU6ygm>L{l>Pstz8}$}z(jtnv=XFjDCK$NYS4!GMNJCR4{AWN4cTCkYYQ<@a zMiKP~bYBt*2Hq`So@(b{D`%_AQ1lWyM;(>Li7KAS(od(9aXB@ue(XK@B63QMG;64; z7Yy(ph;=j{9~~MD^2Dr6t&?u-1OJXE1R=MM{IUb?sG zn+b1*M_?thL0uH%pGBB^E<+jNZAO+8w>U$;D-NnWS$Fq2_3E)`2U0r=Ss2O-9KE^u zQ*!)c?Uc8}Ko^YwKIhx>%+6lgYFwDVeo&qTbMP$s`yTV3tE5*iN{zZ*W1B`X&Taef z`-|pAkS%UT-#QvF51`Y|3ddg@^oE02RYXgZeeiR#TGHuXWP|mYAo?HbBy{rZWMJ2b zg@wV6l9fX0RSR^_9;FWNuNv>{qD%3*c;{*fP6{9q%7ceh|;c`DYeJ} zsf$a9&cM}XOGGK}k-)$c8<5-%v~OIdY$75{RwMX&+uGjGk+wswWsfV65b_ToKQM|6 zp^|JGt*8uZrkFs`*dw9~FG=)?%DbjZ@UQgDTvo7~Z`Z6uKG#Q5e}^kvt$%T7GAir9 z7O;K8KWQ1r7p$$JG|Q6e)%8+I^;;_ZLh|=TtYeHUWFId{29sagY{5*b6y4v_OVvGk zRx!1YvJAy@B^U7H#;tz*IS3`u*?fwMXU*YP(!&=6ikn~C-LT=bmLAn1(}+35TVh;F z7(14ZdQzvZrH67x(n3vs_t})Zc6~mknGOs7-F^*c!;HIT_loX3d6N>-dG$|JhOO?XY^# zur_b3GCm<_lj~7`azZO%$kvR+ihCZ%HN6hv{e`$&wZ^`ZZ<~D%3#<`mW^6-VI-X=N zE*LalRS1bs)!EMJI%i!%l~}bqPTjVaWimVT};`ks_NJL^k6C6;{RC zEBn*n+|D7{_InNbG)T`^fmP&YFdAzfQ}nc`$7+ldbilQa8zH8OM{%D zXb>DepsK>uu@P$tFfP*ob-Y4Ba54DKKIRbkL=qA?0j0Y$AE(~YAbSp&Nbc)PjLsV> zayCp`4Zc+sFyHxkX_?t!G+o>hddMvDZ$QO=lvT2l_WBYo8X;yUjSE_Zt%`JZK3S?L z=v)9roBd2@Sp4YmJY@HJI(`dillIM|w<2BVWo3O!PArd@g<5b&0}lUnsT&c&X^CJ_ zKfeOu{yC+PIp^?`+=++hnxoy5g2k_qZDH&tqYE6H6Pa>Ru${>?!8gAwO_urs7HQv;c^qbj?X!YXbW=(jZ?^TdMT6v{)B{S4DDD8 zkgg6nb0uOf*nY8AVhO!)*l^Bu8x53IS# zt;@adUR-Sj0Ybu-NzN>BLc?S+cNx2j_O~V0GmLvY5boK&4)s0mG!#ls-TC+MM3#|n8SpUHVIpaq4(`|Bw3p$!2y%66H<%e z_sK;|=dn{e`ii8+V~%qF@>(7TN(|Ad=QLP&0f(N$^fk=wXh-tRy0>B|{RtxsFJ#H< zc(*O!egYp?`*h%Y=5!8Gp@Jxq0l=3KO$+B)rS6PA+Y(3NG1b3;6!NpWYsjB+(+b!! z7BbWDbr%2Z*~rN>gA^v++VKyIg(aKGFV{m@Ydw+R8x)(JXg&}g_`x-g5E0<(6pHh# zR)T2f<;K!jdi zwt6GN$h$-NV)a(cJxN(OQEt5&G(J?*XHhk(_i`&XvGn)7F7#bYsQzCWHaQMRuLZhW z*7~u*yU2$0m?!#0EIJ3cusR_GdTNi{y*{|2mO2`zKW|)gc7isApwhslaA}YFZ1$x1 zIdwf%x`Qot4Bp@XMYAe6BghwKEot%nN05D2YW;*_N!n8?Z$x25nYU^$O}lCsSJzZ` z@=33k6mcu%$51G6<*w7PsD>FyI}VDzYS&wlbKQx%-a2xsNowF(NcGWAZ*gVfJ9+)x zp2G(_R$H0)N*FdU{LZV?VXBB2*1yV!1--L&f2STnA9cOT265r3)NQ+k!IZk>gV>DS zW*IM&2S)+u>I8N+=iH6_nxahtRTWI2@*h*i8%sn?m(LaE)io@tGfn%hjmCKqPv1H7 zognxdRu+=t=-AS2(&uqjRu$}p4p|s4Ru@vKyoJ*d{Cj^Vkdo)dO81g%+&Zaqwks!T zc%lkZ6}CZ?d^#*8n=}VyWBi~%G5Mvmd_`feW)E+5PzQ3=maZONs90I_0ddu;f>MC- z8Gy6u&YTIYDA$lTzwwaL>Pls-c_reFv_;QB^p<3FzRL7_>+#rSJ&2}pge1_?a;inN zA`j27_G)Td9$bAD2u?;oMzNwy7%EU}bGfmmU*q2I-gMMErIq(`efWKgw5w3!`vJ9Z!^^ye%3W(D zJWuA}nz(H)nlVUl$znfA{Z}ErHOI-aI>@RY04_9XAiwUd6j7XtK80T%;v>Gb*Dc@y zJE6CUl>dynIR);4S*NC-9s0nGM3p60k^{7U-{}jRgD=CIX|ja%l*jwYFu~e6$iVw| z4?NfxR6c+A1K$ipR20owa3X6+hux=QJ9Q^-8J7<(1depXgD8XjmYpeDaM5Sp?S#;{ zcW68}+uB4}5&?_R?RW|paBaB&+w3yCtqq5&KKxY+u-==tBUC-lDmg3lZ$0B*EP{=3 zMe`;E(q855%{a@g`rP7UKaM!AYnMHq`(GuyE)wOS&|r@b?v8wvEucf$cbOEklW80z zQe93DuuUBfxRK11869h7G7_67J?sjVCFHb zbv5;L{mXU0;^@49z6N?_cJd_W2|l-hLfJ1gfwy0>FR5(yZcmBP^!txlF?TOLX33I2 z(Id;b>zaogY;{n^+@h*MCn~EA?ZY~pZ5j^OAhsUCK-gVI&2N=F?QD>RG+z?{7u=a) ztV4qcK8V`4lX^fHN+%>RRYwiPZy+P@;+EqtRv8ZjzqDucI8uptX*p zCeaMkkfJF#Y!Gh33PyCcGG*EBh8b#l?d1^5p%IjT`L3}BPPEu88Awfs3J0EQfIwcQDD*6Vp(mOj#6pox`>GO}r@W zx|<6Y_e^F7!%PHK^h`(YVkjEY{9t^#l%9~^9SVe%!lsGV^rtP>W>0vi0<_JI=ePFn z)=U`_-@p6Aajvk2oQBAin1oQKF^I|a!?xP{Snzv#cgsD1dd2A)+?ZY)&gOR+mH$FC%#JUc;`4woTXH^gQ;VOkMj_e7%3=U|o z{NZ#K{>&yqQ<(kCIY1#2 zgV!cb>P=RoXENKbV9g6m?~j*>#aHwQVY@DRoPOH?Yju?B#Ori2To$IoZ)a3QU*9y{ z+vH>j_S!4dekFL7PnXJ^vrfW16{zL=`+jp_y%Z+kFt)rDg8pHQvj@u}nY;;YRHDuA zn!DA8BSz~;o`e0GZ()v@wzGz^qSBb^xiZVS9a|NZ|bW)7WSe!dVsrODJzCLObEYE;11l5xp=2lA3ba&8kyKx zvKEG)%k~n89`-1C_(NP7ks^IW3E2Elrid#>vW@U&u4VgvE~rx zd>Szc^C%>o)f}mBX+z)7hyxsDSqB*uSjwlpvemg&_SG<5Ht`y$6$d)A+pOAI4dC;o ztrir6FQgp^G{elUC7P}Qi6_tY07OP*Ymj8(*D{TmrVZ)O(2HCD)xdHe8Zd5mN^(*;s)^r3!52iRqk*3YWie~l6s2W-rPcv#OYFzy(t(6aKrx7 zM#&wEcitiOsArU$u9!uA2K8bSJRb;fZC;N0^&AndW__-8Z#W*VHp)O|Fgw%@A(SEJ z9X1U7qNzS!WOKBPCnl9YE@Gbga7E&qR;(ZDk1>jUb*xjFD-HltqwnJJT^Mv*s6dd+Z0aDV86@1-vL6q3{Fp>4yYUS^}4# z?-nM)aV@QKBtaKyTq;tiKgIYII5lkRiWDGUs40$urGI8d=!~xK2cS5x+cFfuCTVA1 z(NjJ#I=$CRh_En2#CK~e+{j?SRfMy>#8CRjWlkG*ZKN^vP`>DxCv-TfPH@Tyy##Gy zz)j4W^!A^UMY{h|FobDcprus)4xNX>Qu{8y)sk+m8`kWun-v=_Q_j~dF5FoRy!NxD z{21=N?c0a&xCmvhMWxbBR0F}TU^hAiH!Sj`{Q64a15c!Mm(lQEvBv53;NFfN#ZALK z8=Wmp(}{%&vU!iKlGbJkSBW;hX+Wv3Xj2~{_FmzkNXW37!W37&K%-<(vj}6%bwmM; zvK3H!#81cs5Y591aXxt@a1=V8_>MTjxvpagGXPXTtG~RL5C_6~q$*Zc%pdflL7`I} z%@vsC%?t9P#`B>S>bOdo8i|s_9sEC<#5S&X33635X|6O2j4fUxBc10JXxHs?BNg|Q z1Hhi~&K_gx_Avt--GZkk)^DY*f`ZR{k`qzqEc)0?7NM&dP(1|mLfz~P^ zj3?$0aonaHxm5DJD0(+>wzY?bYwJrjs00aZs!ZrD=SZNY0A^fgfROIV$bL@5J<|X< z`f|9ZrUwQtX!yO^5V75GJ5*+Gww9iD$&PB_eK-!visO#vp=K)>APQPp?Oz@UHx(WT z!P#MmAa2YCeOw^(KH>;f>7KlHKaQXt1ddl`9Hxg<(V44&&3mqC*o0gPQT9;Zxt*%A z)-lF+8UUR2B9xek0WGK*}p3YnDnqgtR~H} zHkZq`Mbwav8wN6s&l}-_o}tbvhk~bykokx4#&d+d8sjVJi5`-)302*F({B5P@A(*J zpV}q{M*%(INT*7PprkUtAF=K*#Zz;ig3S3P#dUjz_j^3LoiuR@4r*;Wbu+|W`JSXI zSGhh;NlvoRn4w8kkh6o1N;A7lmFtW$(4`X}^nr-NdbGQ^o$fZxbHgmS)bu=?+oW(7!| zQ#RExM2tbzldz84iI*s#p)@TVlHb0}BuBwZJ%b(q{|5PMzE&n=)r$Sqk=8R}DMe=}Axgp~0a85PqT7#o0a^;TJsbn8 zn3|jKnenJAJI|1kozLw@+~MZivufVvs|D{xznfSlJXM`dXAXs~-?l^s*aFW%sFIqN5vC)c-s#;y%f~4=b-Cm*CR!vSHY`R^ioL z)$f)gWmIE9wGS`bqey0Qul&{ohoDOAn!mwDbdlWJ!@_MO8TnKMMQh!Ri;(A3Gv4)N zgcUgpYX9qzbA=FT!`G0t z`Xi)S#3Y%DVMFmZntr1Yarc}eF#??Q)mzNgKmeOjGddb=`%ew~97`q90Y#Hao>Y_H z8gV_``9fnQoV?tk$)JTAA@L-Ejvntnihc5*&$Hnt1w=yRr4F^mWU~A!=htlEW84F( zCle=qjNUs>R>anhWRqj9j0!JNd@h$4XMH)lryPe`^ItPMJB!9=c~v~j3JC|q@+8#9 zKvNex%JiqK=M&B+^jzdOP|;NlP6f`nbf0@Q<2C zUHl;X)+fDiWi!F%B<5`bVMLp))XKlH*MX7mn)py4SlLWg)!5Wbe`t z%E)||Nk!OlKg!GBFq7u%=_wWqhxbW1?J=WfGT#l(OzNz_Vi%!{Jbi633-1M|z>%!Y zP_g0E^D3I8jWlfLg@S~4zwP7UWnPWoa_WhB!G0L-iTyhk7cO&|!N^I;Jwv_(Gf#Fe zy*S(w!soQJoQKk-X2na&(ul|`;CBKce>v_Q6D|bvdC$lA6aOqmE9gK(7^$DJ#fH03 zEGR-e#hA!!C(UpNTolGTUaF3D^Ggl6H1{=k2bQ@QiS9{ags%z|kS>Fp`X1F%QrpF5 zH{l0WIZ(QDRy_NRgVy~%4*3|7;8tgQk+kroMF{{pVRq6Em4b&+)0!4P5pqJA0~mTR z0KwE9gFh(;8)f9H9&4T(3fUWpUw>=yT*v~S@tzq1kcNu*H4FhrBI%)S=)Um>+%KEH z!^n=G<7zBv6w#8Rv^tP%(7PUOmJe|&|6J8gMDIuM+Dn|o|7^j*g@6JvoG?yYL9w|~ zrqH5VaHq85hai_+I_&F{T!ktb`VRFNDpq(=H)+3Pq9Q#Y5Vq)fMN0nyt2bf%Lvh1MgH&#+Jt%0c$iNm<0%J9!OD1eLMSTuQI%t zdk-e&)m`Xte0oJRU5~?@@8)~ulcN(YK)Y10>%_hwvcrnOmFAmn3v8o=Ed7f(qd?F& zqnt)kM}|9=k}r8wIyijJZ7=#$mMgAMreY4wL^?z?I3R=WX*z4v+1dc2_8)m>PmSrt2W z#p53>saRDEI{XItk=wW#G=MeD0JY0w;j04HnC=o6LNr%r%8oea`4dmw1+tqi5x6H> z*M-@&GAG0z`kw6Ngg)~?d~ybuhr?AU;f69(VW>gB0^+i$B5@Ag{S6Py=xCRBE}GWu ziBH7#PS7Pl@emKbCacUhf_yTDp2HzWkkBY}pGxnB&LxLPp+*XgfS10gz9gt9!kaZ% zu_Hkfcc5sb9&7x4J_vCA6*Cbm2xzImC11*%opYO7G8{4nPfru+s7j{eW;l1#i=Yjk zSO$L_{wT>f8+};3F-G$yQG?_fqlmZsx%@?4$e8FRHj|jZ3p5tgw+zN)<^?$qaAnt< zPHXfYXswb-5wb}Eg!=cheutqwe46v#WLm|5CQl+hWEr-+`?4887}-DP_DBhcMo?hW z^J?oHcfggt4cC^Q-@e@oqKIdyz4WnGezs*&vE1HV(wG}ggg-qH&E*BBmvXWM!IcLa z^#(I>y`2I=N7&DSnq2;mH>&_?@7lCqD%6r$K>Zkub;ui%4hG!5y`urrr^idB?27V+ zU2$C&&)PII{q(^-a%7cK$WO~=z@1?NR__*ZGiGMirYyBY9(Nb-?I8TkG5iC|md=Wa zrC}OG7)8nrtni?fQGI@3wCULpbL)lG!fY#)iHl{WEt!|EHQhHXeC3b_?FV>osD0}9 z58q2QrbdzqSl4`fUy}7FO!V-WpGb-a93=AYYZbwcZCK~{fy76On!!hNHWY65T{B1rs6^o_?M55vYzq9pYT=Buh25{LY8#Ox zPhppKTgAq#nF?CSqJVVrW2fqItuluL$rSgWMQ~+Uji@Qe7WYFqrar<*Tfv17M^K5j z)H*zf@DXmU?$&S}{mT30ySEnbZEik4+ugGfCg9pQCvkKsH@;<(kB_!qMxrOfin`q& z>3XN3uuJ`3Ij10U5kv~;zs{gpo2WS1Hfjtp`4tEd(0t=NVdo5=22mZIsldt7p!IcG zaM+DVLWFz%G@dZx7x!?;F28YC=&I6fOz-W71^sAsRwVji^}L|66cV@G4pXX{4hm+c zcc^X4F(mNv5sV&2xu`5yPo=E(`>Rb%7V!``@~YrOsg6?t#+GF}Uwc;g<#srwY6O;d zZXPUV=ey0~rRf-K9R@LF5+FhIhT&5uj1lgqN%X>L+5=qqkNpxR34jdPQY;TR-1KzX zo0u!9Sa*@yo{`#zU(bAoNvWN3G|g#2q-yjxdlr4q@t9lBMt;J3uK@YdBbxKMFp~bc zX!G`*HaIYGRDG;G5Ir+T)uM?Qu{**(MU*g)M()@v^4jN}tHPbaYjXnPlG_Ca6WoIP zK$)BDwfQ>f_S8g(s+OQUVz?E}tP`Pp^c>pEAZ51NsZ)|+?j=k&UF($@)i(cci_sPj z94!U5JCzw!K9r{#HHVt|RO5-LE6OqcU^G6l4)~eizcmg6N6>oeT0)F{C%z8~4}R7a zrQG>+(2njYQ0;rA?H%XV|KwYFAm+EG%rMsR`OcnoxSxL^9WAyP;k2CqSxOOq#?>s$ z=3htIk3V$O^;3!B%b!bipt@f^X(I@VqsQ#RndY}~%giT5^WODEPs|MBGH7-ymcyn| zUJr}9PIlA~Nxes0s{@@VpzDnZg1tOi?mH5+X)7&NEz{&V!h8Hk67{9pUH9l*`A<0j z%w1r-?W<+eDPht_off2jG)M=7741b!;Sl#YB4wb((D^;iLHqWLwHlw-dovNQic-Ao z`ARdGGw~Tx+bJ4qg(dBcP2bf!F5WRPGyPpEd@!hWJJAr;Gnkb3?Fa+e=ky zGX_}(sK(V!RUJ?aHZKl;JPnX`eI8_*xEFzNjqjb4Svw28?!d3Y$NuS3o5LF;Vv_sq zX|=XOOMcG@`8|K)o_#Pk;!I`f!#$Q~K1yP}jIB;@-u8*UiPqK)zZ=F(bOOn#hRO_` zIi8e)oZL2DmmG%JghQ&t_j6cYYbhzoJ2tz-`1vp_MbGROD!xZPwehBda3YI? zji~k463sQypCiy^^&cqkk5WOu_El*>&mz!@WqyxK?@&)^ksR6{1ELuY7&M26bA>AL zIHTR$+IV}C=eEV^3jucBlb(f0`*1Tj_3+iRKskm(LadId3p$C`Ijhm+Cs=2VvR**Mc)nx1C^j$GR0t~`^l!#vlMTZ z{^Lgq118cMxT;mOKt%xp~^+B14HDfjk*@Ii`$L@!^D`K?wC`~0n&+u;mDYLWLc zlXkzwX2FDF>{~evJ=KI=iJFSEG&F8gvtuo^sdhsDp=ANP@mkmoBVFW6rvuI8;mX`W zhYPz)uaXNd6}6KdlEG|n?(zZMIEmM#dHUv24m^Dr$+@v*@cmnYLLfR(2e=!y*zA=q z(Y8AicrF$%KMH%aiRkL8Y?QRGB2|Pa({cbr2MiL;cj(BIK)}}*yWe{!{s)*#3LmD;Ci7xaFLz6zi5|LGcDh4Y!9nQz+6jWQ5<7--GY}{S z=_+`WTI9ZzNMB!GNSKpbP&sS)?AV2ayJaY2R>X|XkaHwV z13%%GC8Adt6g_KEVxdg=gc|)5uTh>H?JlX%LP{p-aqhK@oa@yf`;kB_9L*#RCRAOS z**VKS63u>Spb0^gOokqfk?_F}sw#Bk%pU;?HJBICvj>SLTPGn$HppKcGN-9nTehB?K}`XU&t6*9zUoi=k?Kz3 z5oS>p%faC|Mf8<+)Z=tcR`h3%P?CCzyA7rKv1j1cs2T`X$c&gmV(TbYMkxsln@Fd| zs2aJ#g(x>ND!*b~T0;y4l*n&XO+$KQfetov0ytq9!QaW-w0D$bXTSK6-|VclPSt)dvuGaEc7x}(&~Q`Q`;^MzK3PEY#RoaUl&zUS#42dNo=lv&Qm*V*jt7ak z#tc8vy^crMRoUWQcdg#q8{PC`@c&xd^-T{}Kp_}UT$A?uQqH<;hR?HwTD8ZyJSorg z8{f1yeB-l{!xZQ%~MnS zYX!vLr_YR!+9GL-vfT|IK?=1kpWbV%>Unkw=P{F(OgE@gDVXRAGvQuSAS0E}lc9j> zytq7C{W_ACK@1Vf&`@s*wFUJ4(Z#>?W~r=LqZ7$vE%F{MPs|@~`dhlSX9rT0=@<-o zS{6dV4*@-a5d5Xfb;bh#%TK6QvOH@mwP}5ka%_zYL(Cfo_7&+L4h9IzY$VTChrq^! zwS}OgD}9WJm;V+=vW#iirO z)o9``kno==zw3rbsxZs?==xXa``E+r<>H>C=~`FpM1xL@)!GuiBqYeNFvgi3?BU%l zx7?8$=nkOzjaB`}==9IH9uyy&I6g5Q3Uk12v25A>5tl`BB=Ow{e*^|<^9q^rSnG5J zybYA@wz^oEf9_M1q8KeH(R+@9@9Bx<_RS5nlj|`14rBF&qad{;7bx>5vPMw-$G-#h zI>Q*0zt`06QWnHM)J%dBni2XQ+~AUOmcW7U4H1+(fqt z`>-Mma8tq-xo>^%=|9W43D%z*oBO-XF;?J!k$05uiEnS2W7vXecy~PX>QS_F`Q|T5 z=nl{P^txtmqN2@;UvEAfA<3oG-R8*jrHXPA=Iyj_yxV@C(hblnVI(0X!lWhga`R~M ztt*GeJDJ;)W2BDoF^B|8=m|1`RAMmq={r|Gs5?-j=wtvR$RtcKdT_9_Z11)iXe_v8 z&7rGKFHG+w;PWxI8e@MVqB4<>d(PDMoA{A8BSbk}(q9^sgH-DbGs+3hclF>rG;KlivJ(2Q`Ui50Sfe6r(_ z(uY{_9{ z*AA^(2hAuZf26EA)2QPqk(%Ws zBm1Ecj8R$`@mrlyS=6$3=?wm7$MWEENM?;{hCL;d{nIAX?d?1$BrE2Bd>vo86&+Xd zzzWg0#F6X)Rh^40Y7u^S!49?vD5`XBCJ(Smyz{Hqen4$?2L@?Sl2iu`q{eAl{_X5OOPU!$$!Cak*0g zukrbjgSOCyB@&m*D%RnZr`SveAj+)(xl{T4K`j=IGESya$i)19E@FG)pU$vkv^y`K zs`T?XyNidw!8~n!Q&$yD&F35<)Y^tvuobO!DgHp`igbvkAY`Hgv(bh`{b@&VyW#NE zFE|AfTrB2SWIRQfvZ1d&zA)4~>(1aBmI|=7g6xu=V67K-QtJgU+vvHJL}EvL9(}uT z@Q?Cg6@S_siVdz-`|Kui#iOUW2^-!@nyfKY#CL>@xRQOftCWOXuxhYyN8A_`TxoG?6`pW#QCWD+c<5K`^3*LuhkMC4{V9TjRTtN86xo7) zs{jtGjp912Y~X2cy+DC&;DYuBvg(@<5L~bxOZ98hVCnK;-l$zDs2;JJzLxEP^!|;8 zzl)%0S|xxYBGQy2XOh==N|d9l49gj?>NMB)*Yb?QnTH+h!S@@!5Fd;46r%@Nag}-V zZ-GG|NMAX3@E={Bmx5xR5R|`*{ewk1gqB+5_eTQ@&NxWmj3v0GVgu!C@qZAe6@3DX zO@E+sjFl1igwFZZ`K_cmnlm8W%-dQyGT+e(Q)KEzQ@dk# zP~aha>~kaW+~84`&&P-3D8M2HaaNV;(L{f#6;7*cb-9mXV5WE);lD9UvHxLlHb1T6 z7Pr0mc#R56;#=S(tX$vO(J=-GCTbh)@Pexa4Z8h}JD6U^Q$RELm<~g)ySNJwL z^gki<(e5SSyV}0xdLywB_Ja2^o5`6cjWmi*H7kQJ=wZoiT=?kXEz7lB9T_SkfQX4z z#WA@ywMta2p(x(lqQ|GCu#u*sCuW3%Rvu?V(Jkh?y9-<-#bw!y%kq zovUb$J5uizT39V^M7r@|a-Mi))-1PluZ?r_awv9CPJjHmkd+p^x-L2UsIMohOjeMC zjOd^>tgy`c5lh~=YXA67W6P7Z|{kfP^;EwUn^FFjEe^4{ds7db( zk2%{8gcx4zWb#PFcN?H^0#9R|c}Jh-WfGS{g0{c)?d?piZOTloUJ?7Z z%X0SX0NocmvJ;!z1)}up&Y(Is+7*H$c9Ja@FjT!h6TU7eR1&erfeNg-6d=(9gSPcw zdOsA|=4fztTkM@JTcQ$K|1L-Ts3kN%&5X@|1wKahee#u0va89Xuu}D<~ zz>c$nyjYA*>3qYh>(Cf*EYLs@NG^>w(=qlrUPslv`+Zjik}ayR2Z( zJ6rdqQHWU|Cu-LT^PhCG7B$X?7X3~LKw!0}7oA5^&Bry!gfjNdHKfTQ*{AdmvW7(E5_gHFf@`w;K&?*A~uK>9+xb{Wtl@^esNH zcWo9}CMXn(hWKg}Hf23#{jk0zLh9hOLAkvY)Yy$H1V)G9{e$IF-eI6!m@-cd;ZsSZy#zZxcQvWUfCR1 z=DzWojZCz;i7a_NTy56Ww~?=ONc_qeSDlE7oknXA8cavDPHq(F*;Ik*UeIYp5mN77SlRym z9l*Fmx-@O{b16ZJ5bV|IMOlq|G__Pr2>)w_6Z6w{z|p>TM9NUO$j0Iy4~>_W(7l_Q_@l zyBF91Aln=C&-Q&5{wn0(@1DtO`C60{xB9h^&!UQ^yLP^dMBDckwRz$oYfKY%?17E5Z97}PITn`+X3phg>v7DqZ#meM$+CV=0kbbM9+#flHVVuAu!_hq@vMV85Yf> zSdlS9Y(t9&0T$vuG4A$HH0ELP@W5k~dia^)%2nwe9j1oWOugo5fhE5yH=QAnebk_! zw7PO3{-q5GWd+i z=s_)(0O8pRk;^Y2Xdk5@s2r~2;$+?HCnSU za7{`d8)Dgz8uTLm73Avc^7C5(^i)w8I$J}&{yXUR=R{R=ZqbR@oT{>2Q5RbrD~;>V z%EV%>4%A}OZcdJM$9j&9ogM~lM()`<>_iy4JmE8cH(hLNu%Z>P{TlAOX1(AoAhwUn z%NrOYjkV-`24@Fr$|61@d9~O>10*HAz3`Z_i29xTf!| zO94XbwtUvgPlDrBeOeH=`IFeu-lAU(|BhUw=Jr=p(<~uw+DJRTO*B#u@hL1b(^m7t zkmu)2YP6?)Q8-*pu_TBKhw9^;8H#d#3!yz~7cHNgke^xgTbzG*9y3$TUmVl~)dE60 zd;@;G^;EZ2J5#+jMA}9(7N$-j&6Yjf*LHm%OUtLSXZ8x+5USee#HeG$rUziqx7aYG2Vt49?fX}^+>(mnWSCxSjv)+$ji}15&(Uv#=Wwt= zp%=J5yEeNtRJ+bngi9hHC>tUcj1DEgNp8Y7r9mKK^gd*EpkJCDXJ)2Jy)SC4-=@Ix zy)P7)HJ@L{Jv75UH{OUNFdRdpL_|+r+sNt*#5OWbpDyJ~#{4|=+fVR5MIvN8j=qG2lO50uaDoyX5n4z>l9 z!Z|=^fi_>Vk4p!-o)D9vC}%53G1l|?h2)*3S>h}l+J(vIE?wlm8!$7nO^FY8EaM2a z@Fj&nFJ?Fp`I-A`9x~9y(?;RhP;LvGZe!5nfbP015(iWQ@gNTX@D;{w!PSky&!OFA z&{cD$c)pW3M_XU-y_S<^(|2n+#Rq)#Jj}I}gUG3plj$|`4*}fPB1YI7$b{TT(8p*v z`=}nNI(&+Q!;j?#Y=bVDvIkSC&C&Zxdpjca?O=S+^ihLQ7&&&$f}p1Cb6PD6hXlQs}4*`Eb!^W-a5=&lDIdv z`*5IBxa?k^c}|V&?!<72VUHIOiK+`+Fy9URsMTX#plXfTh*acyDA2pU+00HG;O!jQrA zPp6|4oJhEdWNYJHzT%U(oD&QTn%DkzHp3^m)&1)}Fwo3*=`4mK?Ek$r2+ndEYDe@h zT~7=ap(@N|nbGtFv=>j;VC+TVxrPyY?)?Dz>>xaa^dc|^vy+JmMh}&MghXnw0~`$c zZ6=z@8{?y_M0ynSXGbftz}~0Q4C#TO>(_F3vqJyUHM&SFJp zAVN3&1y}UoTtQ%HORY{K6Rb7^KI_ek?}dc@tNSwu&GDI99s~6$KK1+&Ol&+xCs^wM z6SZ0gsq0fdnW#=?K4HnEK!4^Tf`c!;P z>O$>kS4}$OvGTWZy(BsuDB{xoY6|~V!n{&a#i2+c(!?t45eO|WA}9n2?jp)ACOOFp zMDX>(o|5+#4zE7Ad|)TZgicU1xBp60*)Hu2zf?xkF&wyc`2+2z>bRJ5L(QL(rMcXj zNN8^*4F0W8`zpmCv@%8UyB2 z2&T=KqB8;IE&3g=q}~2KE~fZ@RyxpWAD@8Mij|SInH&7&Rg#jHo5rC;97Wzq3Wb9K zZ=~CvmJK*5Ka=G#qm`|EypF7EVG$L_5T@Limvo=6K z*Ve|a9FpifF7+V8s{V6GVyVEJQ}mV@iZvvt$R^#5{a~uY+q#$X!pP z+So{y^>SkS*SgUZ!hcZ1ky1?)&LuQ?T6_{2HX`lAE-}x}RNQ0xyXY5wTe|H8qkIb4 zW55m!=sTzT^sy8;#Sw-2n$M{g8aNVWVn)x`bEIw(-QvQXtQ~F4N&`;KtC!1%@m%2K z!yh!9N&bSOHPo^y<=>hp5B>svvMowJ>CAMy`)h8(C(~_3lDN}Y*SKs;H&$e`&6vg5 za~wF+OL>mfqvF#h>Y-!IPlPi6{q?D*hpB!Y{UkVL!_A+}Ne&OMiy&g*fJku)pN`iX zAaLn1gQigqzKe?Ka>HURuzZmajM5-Siu{a$nH%QG8@M5Is`fxy4hAb~ zc)}c=3eNJOR%uu>WwY0hoET^I$E8*mESUSJ17fQdndM|i;IWsvJ&(dBQN4iUaFZG!-$Bg*6+P(D&9gLhiX^ zPGhRqM^zzb#h>-GX>G(piVl7+MYo2?o%c*9P^~?xJI}s9koj#da!@vghR(6oCpZf4 zA_Rh4i=YtVP^dtS6J>P47lDIWY2B|jEH*3G8O>^p`VCZjJ%Fs5m^q8r!dq-y<#97t zZl)U~;)UL?umjv6rPqq|5HMihOW}PfSaK)J1tdA8b#1Y!wg~u+eW0TDQ~Ax*PMWEi zA5W^%gZybuiT%!Fpi<|BvgKoDa=C0kb|`u%1*eRL&yrUzhBD5I0YpQ)Vs^w9!JacZ|ELbt=YI2& zWE`CK{ZHT+Wqv)dJp|6#W#kgV*ki;g#fmfS>E(LW%^#luB;CmHB~qnV%7Zbvu%9)V z+EnyY*-7^x)46WIGp9jou=_V?iE`6}4$Be;$LF<`j{0vWOYIQ02f{qJe8&-YlGiL7 zrYfMhinpk^NHIWc&b2{my9kP2N|MvlD3OAx!7xT4K+3Z1F^qX;tk_E0}^EHxS3an3Lrahb6k zelner^NHf@f`TZj^dWnM(N7e|&y(_BvlToK6Iiy>9n0}sOpE#{AZ^9lZONiXlOkJk zFyv((!#H?{<_9^v`>qCK)s9n}by$~2wk7}e`!l$HMG3S(BbdI#bgNF8$4g>E1Gkfo z61h$5Se;e}np9s2Z^lpOe|rVE681Oyq|1lZcWZY_K`2kakkiwBKJGWZxIo^!TI4vY6YlNPBoLB}mPqU4f^J!M443%14`5w>p)xt?cFS`J%aE zK4$w(2P#op=O8aBg5@(aZ} zMi*sFupj-63H9aOwZwZ+ksPRpZzA>SYXgfft73F-qPdgPwkhRsF|wPc@3@Uzpca)B z!#(NJZ>j5!9hZBYJGD^`c2wM}E001iH=z(0`p|tyHd2gO;KNY{h87A#xX6LeQ`}sd z-N?bzFI&+4!`!+;c;)PSn)rb`4CdUr3F>eIr!oCN2!)TgEKs;^B?+%by~MaPqP^Mj;jCkR@7h%CoGcUXRJ-5 z85N7rfl0AYnJAzzzc^H_GSX^g5KWs&iPz0=1Y< zxHcUyaXN!|I?@pacURIxrgV&148hwATOtv(fP0eaUh#5{pKhn9=kcqKkqgZuPwI6S zyl)A+&yENJqY%h~^;vjnykY=+i7gT0s-IjBX|nM9Io}eBWV?haY}9l?B6VSSAXRG& zZCzyXFUxp9VvaZql1y?@_gheWdfkCoE*6^^0x4Q`)x?IKw}UMCVQ%S8Tvs;mHbojP z;$A;bZt?NE+%3JXTNkxqjtz_a-am?)7dt+C1_AM-$VATZNjO((<8JNN+3VTwLp_%F zUNn)h@^M#LpYm&jHx_^oWGF5+eMr=Pzy)I-T1Y(%?d~7TO0&HN$a!pDet*IQ#^hyj zIK*DcFV=_(|H&|axY2e?znS~o(h35A|C$os)jqX;A=< z#-M^0cqzBg69LmaP@m@%0Q>lc8%JE-1})_-HcZlCQFz}37eD#0cAAmq4C<-Stvh=p zo;u{LU9!wSf&4iB;jH?maCWogR} zovSy(N1$;1|E)Ab2oeNo6K;8caeS<&mxbpz87*g^NS3I^>UP9ym6%JgCu- zqZRFr3*MHp0%UVVjcNa2MbJDG?fo#!mFA_(qz67tXRatfTxb`tL`Ufg;nmoZqrD~ za&__!V((7(6Zx?PP zvSD!nEv<25m>_yLm7&o#l^eVxvCEGFlFzI%*t->ADHaQWW&2l|m`OVD)jH(>du}w1 z3>S0BVp_wD*iL_RFr?2fnJ}6&B4}MqEEBc?wCyznSH|)@qagB)32cvfMU&+Zo7!yIUeZ_OHJeuP8oSa*!+c|(@J4y-+fNtdU%W<|<+L0Psv(vl+ zMG(j5xG5E^)G`>jRFuc@A6rDOrj)sg6^KJ*vad`O=LM(?}G>3`jdJCM*dATRY1_NV;o_ zGpakWm0Oa}27C{tV(PxhiX+H(kzxF5_OLr&Dh7>1u?UR-x^%ks_=ywM5V&<1ZNR+Hhc+x*>yK3-_ostsjs;%a{e13=gBY51=XmBm`BWQH=5Aw zJywBd7-hOb7Ebp?V^s@GvMNw-R&0&}_eClkV8>%RhVw&1{m}N4O zR(fR2dPiy`C!}g3eG2tu9jFWo@No++)Lw;Kp+dwWf5(Y`u(0#pozPuqv0y zk@%nEOy8`DV5!)29!jvw{`jGfHpsIk(=vjWhBWWB( zr_(L-e31{*50dXR6QG!8ae4Q7qn|93n7?!(=Y^R2P839>0>C?#?hLp5&5+NG%`$LL z-n>oCS?YU(m)~Gs!f*@yf#7mYKFA#MC+vT5gVe7%{yg3cn$?ePCZzCm1ko7=#2CA% zwDi%UJHWC>Y-$h2`>jAy1V40M8JbsOd@-Y2Er%1gi1FsF@|__ z8+M;tPUVH77;-`eM(QQ%!1o*`RwaCVN0NjvWHl~+w7q(v&s8`g9 z&Yr-#HUbNm*{7NnWQJiz_-$)n*Ayeo3BsyBBSrqn@-;zKxX3YdbZL>@=NFV+D1R5n zgslg1^2j_IYq(6c_J0m4sMgf>_h6p)slDl^Z@{4Z1RCcN8h28NextlWBrDKZW60fp zjOPwOP_cPdVdHf4jgxp2+v6w@a$A!Sl9C2+K*4D9n-k!2wzIg!I&MOu?<^VP;(_ij zaSi-_Y~dqsV$jyFkSRGsaZDX*fF2KE62TPWu0kIewjh6qeNAu{-&3>!9G)|CoAm*= zwve~JiZ4;#sG02Sy>Rv|N;NU*$ErMG*rt+&Fq4!743d9|rgnB@?##EBpgvms#_y*2 z3OhEU0(FHW^7PupC!)nj6FT-}^og1pRoqdh&@!hyDk?I>@~jN%TXab#GmH7ZlK()W!#dr8Nao6N-rusEc6Lr&k@r38@HkE#BvW9Qb zzR7s4P8cHu;!qQFQ^++CfXrbkt!TrlP2R1TEWSI9bF0IW zeqT3y&4QR>&Ym8;ndh$rz$-r#o}SIJ+?FDcK>HILtf$JEDRF_Zy!wVQu=Zw%G@`>^ zT5@gWFQ(9R1~o*(H%twT;Eq`C@vN6SC~w(wtJR-&o^!50+gIsjV0QCdi80F9Dj6_M zFAd_$a1Qz2vO&{pX}JFYw0*FhrakyfUiu1M0Y!%tGW>izd)fSCA@EFL#t;!nIlv)_ z*49F>e^yJ#TuX|%q;Qx>}4Far>jH7SVK$c!LF11UKENe!o|UK zn79?U6e;2nan`gOrzsa8)U7;7x~o{@^61ZQh=!AdzJ~tQINun}+h)xRmnGEpr~}!^ zDP(#9`E93i1TKUdx42wCOtlAkzIKqALLDNxss>}NGPx^yN!0cq^MYjV%mJ|z7oL|${A?zQGs z+?Z8c0`x#@8jn{1NYTNs-@e7#yp|$M*3e^dEiBBsW~vTqibN>KZk~oTsZ|@@4N8e% zk(!|e>Uipvrgr+MiFUOHg+BV_fdVzeP=Ki8Rhgh!pe%7k3G zd=fu#6B$~nQ~`B#DvASd2^gpk*n47j+=WI!F_-Ik!(qFo>>cSEx%rOIuup*nQOyoy zo;Sw&G%L7+CCRvAsssv?ke8%L(1vKpEWQ}}6wgGlyIKQ0Lm{yB2@vkb#{}LLV7-2>2ncC$%g@->={V2@l2odqHQ(&i$D-pY}sMuEl zEB+0%y=kxf?>I8n7!EgpGF!UrbX*5c-14EcUd%b^HhY})T-|F-b+NfsEV{198FofO znPy97@7N6UZ7SL6P^=C$^eUJQtmJd!$ClL9!iEpF6fZi3zxB#QFLD+s_Hc~8oEl*6 zJni=D1?W{7s3sCO3AU-6C6tbfP#OlL56<4N-tuCjM-G4~7BCZRJV@5A_uT>EH56IL zK=`M(q#7z-z<7!yd7nHG9bub<2tYr0I90%VEsy@rlqJOnoX}j|FHi5d>2*mzr zA1qdZfLK)Hz(|)DFU_bzVr==~wt8oj{l9-yUlx*io!^84DC}`WtiELYzh4 z``6W@!yW{@+~0)TP;u*_>UO-YTC_u?-L(21{_foabJ(BW1>APqKh+pdHAEvZZ=}? zb=hoPjV*2bsSZq}jX9br%&Y3Q93O$goI)lX%QlKxIZ>*Z z#PDPViwM&zoNK5Xua+M67D$=;c3}dS6I$^suc4yU`r5Yqz#-t~1sY+ZFY3xVbK+A~ z4-J*JaSo<%WE$M%Ur8@%-;_6m$vbxSU{(+uL6}^HAa<8BMI8J5qhV)rv8n+-AHWlA%UH(_OyGTaoUI3RzJo55f+wX{aVMtQXvDAeDGAaRbLf87 zJ17eoyKKIdLpN6y$&r1&rAPBu*}hC^L2<_WDxucS9PLQzYc6W6q3f;30J$jOLYtJtsuPYbnbdNATu9>lY(IU&pV}ilnwTGo+Wq_hoiP$sWm8HKK zYW@Cw1i4~p+@4GyAaq7FFc&F`(TNoJo(juiX?^`%r!}4&ID(zz+rN#gb)B9%VH`86E2uS_;Qz{0NEEM0>4yiDdCOE^Lw_?3&?O zFTR;}casx_UBm3*j5Wf4_rP5u`A9yELAM%$=-)xnT;QCBbjaa7+-grRqATAXb>RzT ztK=kw={ZVum&)FU#}G$mgB*1$HLG228RP!MbJ#29E8^B0r%{|@m@z(otH&89gU0$X^)a}z*) zM4}pQr>92GTa#|5n|2K?AR9)sU3pSSIe}yLlX6Cz?*mclK*KNQ*RZL<)}+0ebx;}x z5PQ4{vkF1Ql&CZSn|MYidS`lKa1y=b8hv7&131jnQ!7O>FfY`ka#__Vvy=j;Oqvef z^K?Yt-&tHFTI-R?FZueRRFy2tlwB#DDSRf&D9aOaR%$EwNh;Ut=7VJ19WVw@-mhO#Bj$-S^GM$op>}{ly_TkIU!eQ-Gn-`o!lNR_VB7VHbC2p?Jq3Hwu{p z_@r7U_4-n6l1%ZY`EPbdeAg7@cO1De>SR1MI{HWwUWCl@ziSPCva$|GSQc8bT}KLJ&!0$Vz@r@&=`y&`MXPe2;9}xdIS5~lHSoa*|V~buSW&iaF+G|>hR&m zmZljcAM>mvW5-~s(BMA{8AU{yGbOTr9+KEy1wZ8nY6tY4z6bpXZRu=%uueGn^ytzM zj@2u{3|i&ku1IkmFp^5Y{uYrLI5<8Ik3B~82W6wTU^0-Qzd!B7y^Wm#OHMcW9kB(V zg0res`B~g+&hYFZaDEkaWgWIfY{?%HTr)InAUn=(=ngFdUeO4r|8ew$`P{A18fF|% zHt>DF>u(bFCW6^}Xbk3)8-q3!k&j+;@+VoI%jtkHqhvPP>w(ryC{OY+kGt0br?OSY zGdooy)~A5NEF%hu_akpH>01C^pCh33RFW`AbadceOWIFD^|A3f4@41yL^3fBWVT2H zN?CN%oRIIjn~gNKF%l+Ol%1#L(Q!hy=DM>vE!&2WXbTq^u)My@;xqy-S^$xEFbRroxgkya7pPY zGSP+KdL9k2nc&WMDeEv-k4cziC`N1XJyN~(E(Rsc0JOV?Qa-ivP{dMuq$1;-gjvP4 zcYH@ew!2%o*`Upl4{}%>^U4#Lf>WdDvx(Krh}tMw7(l?#9uj;Q^jF!Khq`GCpHGQ> zi2sw(vUbXvOSZV@4ahPS{s}mN_u}hk^DCj7l(UP~=v$XY8GDO$D+;_V=pKX~#_iFN zwd@q&i~#|^jhgQQpIOt9*a3iX?2!P!OLod-Bc=HrdI8>u`36X51-Z^sz}MMGOGY1= zJa!Jmn&2T;5HSd)H6vAX$pd-|j$5i2_QkTon) zaOHm-=x7ohm(c)}i-i-kYaq(S-T^Tt^OZYLtG*p(0qlwbczuu5#i}a>-Qq=$Svc;O zviRL;Qw)~bk=vlc4p?+92j22V-3;%Zj=wMq>FdU!dX?KDaE{;@!Mn)o@TV%=l`B!~ zC$ucAIt#C{$yebRcYXiAQMQn9e4OTwEuYYmCs3t}uARPo0HE?rdcI)vM^|tQsb!dM zuto;R$24d4!uw7B*`%M1(K1%pH(u#FSncYUSg$>#X1n5v55S%RMs4f?Ik}Rmlw9BE zQB9%jUy1-$x<}+Ev5;+7^*0k%rBF7HP{s9{7fU%3>)-SLz}`!a_pvXFW4H{e>(utM z1^Z>cUB6}eevB1H(T7DF$hU&-=$DBl8#$M=(3+Gd;dN$|Lo1E+g4BcWFrKtMPA{vb zv=uvjt}|@EvEd@HFfcj01X924>J4j~6h5Clv+u{m*LA;%3A<@=(+Bg_rwimYU5_psppoaO~=3sM`%@4S88; z$xDaB1oINg6~6-mBWXk-;e*LDpV}v*B2_`bKwUArCvMUJLP5zZFG;U0+%|_BcYsc; zP=q}H+uxS@pd5pVOqIekgjF_)q+c_HdOsJ7qq?Z>SnH4PJ3XTmhRxa(dvB9aH5 ze7+P2w5APCC;bgNGulzn6RMh+g?9r3d1tli6>5H{+qFIjgBUuP4_t|@WNK0a)jnrc zW+S~Z6(oCPif$b@@@-2*G9S|LrI9FHhWc%i!>}4af%Enr!-RCf3fBujAX z4$ANEwzsC#5Gn~ggHWt^4CVzz7>UtzTpqe$PrF-2sgyr`R!zT!y_e9bPcZVG7-HFV=gCD??=ES#Qr{^!DnN(XlEtk&k*eYnk0=0_;=8XC&9eo@|_JK3bJ0^L9h1W%gtcJm-5< z*wIpWN{g_t6FtFC}@avvT7R9%qiQSqZkp~YOGCOz*ufy8OY8ab$H6J zz<7#sR4Itx0;10R&=@BLt5=Du7Xnv2niFp!aRkE)o3s^wj3Jn92KFibyyg1Rr~X<# z8wp|za7Lf~=566lxO2#4IAc_m*|vJmiNUoWKou4)Olqh(fE{QM?d0hM%p5uEnNs)JMFwz zW}K1^xW0nAC+)Xc&T&9BMJor(XJnyyEglLq&<7yUA<$-BXMMv%5uz)XG_68N9_^Ur z;P%n>ayG!yWLP40vir2a{GfgfA*x1f?LGyeqHUab>;g#d9IcgFT=UH@)Tc!2ZthiJ z0){s$fl+qc)h?LE8ng|Iu7|(!8_R=|uXA<4hJ}WAN9VxoZ0+?2!u@Cb%6nq+1ewrp z?CP>v#i5fY>NspxkDofVIiSv#2=C)ambXo-A0%wscRIX9PMKF?Ja|8OzKFBmJXVp% zYA*cWQ&X4fhXC}-5sJd(Jx~q!rtT2lgx^%b{eM3TCu;9CL3K%B`t+r%(-g#5(_5PD zKHdEBiKl4QVX@#W$rI5zXihI{G{(D0a%juw-keIqfyR+GSh-rFxv)BT7Mt>%0fU(Q z$_l{LfDMi4&QQ#$_}z5c0Ix5fyVwln2(LT=2`4|&5+0a1O+E0E z*=pvX`l-P6@y#jg&0?dngFt9p@vHh7=~KZ>zq$aaL+M!$ znA*Tn0y8aVu$~#@(`kQt|73KmmrzF`Hcx^_Fb6UgZv)3bAGBIgCvmK@WM8^+9u0N_~>J z?QxkdYVzj6J5MP4p_|bLJ6?Q!!wjUAP)O+zc66hJTl{H?X!Wy2b++Mvo-s7)??fh8 zg3s-$c9>8QYB_>&8j8e|C2CHCl-st{o==JxiqJ+-xG^(dT!yl*eV^6xT^bZ7F zTGdzkb{nef3*CjSA~bKWgRRnmzx04n(MemIEM%jDF5_k*2g?JC(OZodAXO?)$ud}Y~rW&@zvXZPZ>Mny&9&wPO z3m=*IN=G=UMID9nq$Chlje5L#2nh9}IP;s{ZiaoQyiLRIh$ed^1-+oVp$f@Jl2d5H zv@?jwbV`(&K;)j2D9Jj!9>iy{{ieRNB<>v2@#(jG8&A=p4mj|Q(5kAzoLKt+j5R#L z83z=((ycWnKVgDo7C87jAM>$f&S^T1W&~g*Zlvyn>TJ?6Q!Rv;go+LM_j=B(`yZR$V-|-gWDqoKOZDbYznqAJm_h3J5hNPXvBVuhB z3r+}YnK&=cP_}1E6$sC{{v2(983Y_~*?G|AJGj%hFZ;O&gK}t)QkCdcWyS|yd?Vr3 z!D7ip{lnS-XC38~i4}7c5$B^1(D@I9HWqQxrI6JfHH^Y!i#M)H@>37;9oCCCHx=&_ z)C;uH@v*80SSu!LZ_|TAQihI9Gf4x0x1SYN+qP}nwr$(C=N{X(ZF`@MjW>4V>>ub)-C0%9nRTsd zj8^-l{OTZHd)99#F$S@U^$AmU`n{jC*3qCi_B>yq?2|XbLYGVAf3!@AV12>UfyLEi zHpL;w(YA(8mg&ZUm_q8RFgJWw)7EZ)>{>VKx7nQvwMOu8TE#Mq%DF)(jp^QwbZ>eY(AF|N4>g3L}DLsD?r5iPNf#3?p z{BntO1L^c2db8m>EM|}rqs0Iogo00E_G{oQg z54+$p0sBb!80G(C+cN@Ae8E~pB@14DDMXauXlA}ctRF^E-Ia+)+^Boc+?Buvdauhr}>~($w>hH z12I?Q*sD{E4bm@$)-kpyie}Vsf#wRkVCjj`JSRwZCFwWSaA$eKb%bQL7wYH42zewD zK(KuNV;@i(%w~Fx9|L+9pl{K${2*k?TZetcA#qtO?kty|xbYT9uH{>Kg}atu7T$hH z%~eVJ8AjR7B$GfL3=MGbh3~>s1X^q-9h?`kbVIsWC42c3zTW{6MtJC2{&yf?PX5@Z zYs@Ekx&X5V6|mXuj24k)tx#7Rgz#2_p>grASa^IMQ6^fb`8v6o6?9KLLfXvqc8_Uq z$Ik&hZ^rI}8Y&5RjvS*q!a$sdI8ERb!vbb6t5gd=^g1H_bXOTnfoM|Ft9G=509|n_LQ>&#N<-0t^A&GDsM@9IHV2&ahK|BPdvMh@^KePJp zS+{6>Ebd5Q*W(wVT&s|NmmxHmAENT<+)!E}u%~q5V^lxo2%*ytiydz=bpU#VDbeS4 zTRIv?^CrTMf5%gB&(SzfG17lMF%6A>lmEf>Z@2*q6b{M>-R$uo$KfMlAQ}(}LEo`}^DMiAp>p;H=&DSQ7ly$IZoRKQ z_vfnc;!}KJh9O6PZsrzLao0P7C#pQlnol-4H5WPEbyHMU1}*_twSuQ59O|9Z&$ zN8pUzO=OG3N7%wB{ji(A&GyrVfsMPH43t_a82BAI&gi!3xOpu^h#7)hzn|+NFLHh4 zd~`l?(0_=$0taNhqLoy+HE_{TsmefuF3!i5zlim|P*&M${RL^H(L^41%l$lR{RUeZ ziBzy*02o$2a6dd{1=L&)^rSC0w123u#k)y^ac2oKJsjT46b~lar7KdvM;Aw|5fo-hVrs!lC1PpKgN7!s<$E3&*UaE(B+U>fL?BWJG zy8GQ7$>XUJVEn0rNR}K{zZ4;Lf1(tU&i?^ zB;UK7`+Jc%6IOJ+-X6LuXPNsd;~YIpt|Ml7D5Li`Br*) z>a3QbpGjEpV#$X*&}HH`i^7balwH79WiQ_bDG7ixhgbtyS z;Dh_AB*MbPnb>FezEt#bV3av8Fmr<0cZ`Vb4Y}}l7!9aDo8-{b!0P62L}z@r)?B+* zK%w1F(aN%sAFhmB$%{%!r-!y2s7DtiZ9z8QYkSo*A_dwcJofj~AuKMT`5Kcy#B-+p z1OANOKaLOEUL5Wh;CNDG5^Yd04InZXQN5lO;o!S3|F$J{$^G1oc&&YS%gw2Yh^@M~ zNcE7WqY{9*=-}&fCF(t!Cg>b8DCPOO7J8nQ=L0l~N_;?N@eHz!>FwdhSGs2sb zoX6)HBpO45dNj!=BhK|O1D6g)%|snOHJ1O0UQiFJ{N7A!`_q={rnfXziXg|RATACi zr2lV<#3JL}GeJGPV1Cu19VF(6?O&gsmpvz->N+^KYlI7h8QxWS*2o$7eO?_qDYZ|2 zKxsSJ)I+U+k&=wD8eo*vKDaV>bk!Za7eQ($FH~7HjwK?BMo2aFVZFEVE#{lR6(*EG z`3@{RC`Hv&1-(d}lE=P5U{M?-=ChT31?XzH1&G#W?3%S+?FL({7k#EZ-cxwxYVOS( z*Q#gq@{`il5=h}daIp@X(?`$I;U~dJiysab-JlRzh+ULB_r#Za^Z8^tV{c;x? zi|3N|E`aX#x(?SmonDns*Hq#75;6ZQhv?Ay*35DNDpJvU(89jKGIprWpaHSnXqw~R zB{EWgCGJNJBId6>BNS?G^Y_!yjA95FY|bLmB`ylvm};obRXk9p9q$|jpE)REz!n8x z=mlDUFkQb3LjrM>%lbHY^t4+$u)5bsyo9Ywy#V7RH@yikE8}u(Qrn?|Ot8KiW(XWm zT`8+099it@ij!v5Hcr^ssyzDWqOj;m5Se#A!G7pT4bt@3IRUaQ&=B3-qXbpHR@;RU z1poKo%j|cr@g1=0kJgcBMCIjKHBdOT!-@)WXv;aeA>O&u6Fu;UvR7GU`;E$*0mYFP zB92hXw0JZi9swc|I!&{Xe#SW|pbIFMNFC6UFug+HlRKAKr2i!k6E!`??;Fi2;Ns^1 z-s;}#=3xd!S`nu=nCjXGyI8M7FHZc3FNCu1+{BRa58!{&pJFK%d2WojXDgfFB!=%| z@eI>wdMCw~Wh$8fUP^NO)Yp-=eP304kZtMPv7QjY)A_L3%FUJAheM`n>NViR9(9?0 z?nzg{p7|}4!Cot(L;m$G&W5nW^QN2t)}&HiD?b@MP>FnxJkru1Gl{-D5xf_M3vFcV z%zrg9Ye`(&PMkF5z2rJ@XPP*lLR>|$b(pH%WuO3KbErAIO}u@hR1^Zr2yt7H*7-1O zSa0oK@?0MzcRZ;aJbD#>pYp(Gqp-}-D=htuZ!n~48OJ_a_%XlK?6n&{B@(C@71FeR zchH>Q55W)?SVdy}Hrgz)v?NQC=7M&q~`>Rm|k)Ig7?7Cve z9gO-L3nbv^UcCyC4G+Ltx#l~?A>Ky@Iq-L+U5hZvHWRgS+(;(eJnN+4ekuPS1q#U6&Q9E55SxGYClIMqBSuoQWn$ z8}T^R%}ni7v~U0&n=}WjRLQXRgZbv&G%a1({6~6xQ;m6tE9iVP9)=GfglXDee<25Y zW?}o~Uyw%k%Dtnl(zV02lV~04l-TZjiaF?R)WT|Aa9~tyoAN+o=@7x5b_vjfV;3=6x@=Z%<>h7ZF&zy$uP)T2n`Gy^e8XwewI{ zIZr2-WhIS|$h0+4zSHU;A(2cDh?5sl(Ixq?#qmn;W_n2^u=)))?WpQHDFq__p3hCM zVvHIHX9`B;!5B7bC&yHQuUUqQ+7 z^er_vHMVH8sYo4YWi@Ny**b4Z)tMpRrHu?-A1bLTktGED1Nqj?zp%@Zr zG{IlcX6K#6_9;uC;9H`B=Txi&R%XtymuH45vzVOBQ^Za?EGX*|iZUlLh%~>`Y8zi7 zeU?1^fRNwX2sE;@>m1OQtR$#j*!ffcmectg0h3lT6}L_b`fxp-oVyR>o+*tlidbgO zIBeCGL7&u2SHDsHJ|Pc`Y2vL~^e~*(iusFLzofYV1(wy~>@JX#u5X9Fij+98s&9qa zGoa=biJHyF3)Opa_a>o=y6*Bv#|Uh9%Nc6WdSjQavxQ}yPD9>P9lk~#3W-IP*6ITP zcXs)qLL4p0f{={-W7`b=v@FULR3T&AcUnFyC z(oxxJ=-dcyP7v6{N*Hzw;NkY863_M;n<_flja29e>bwE*XUj)y6Uj2=i~2g$F%(nq zy(bqR2q1bEfYzFyiluM+$-f!g`R$D;pPU!^e`*Jijsi_xq?YjA|9eC8MS60A1oSQ( z$h}g1c{b3prIyHs%O<0-1YbZOS!QUTNImB}0r7vA$lg`no=*X~T9p{x2x?;DSL2IX z^bfS;;+!vrh{(v3V_Y0jPT-&*BZ{rMtP!MF0;;`;P54=LD?S!O` z!hnrE!-dMAY8+V3Oj@ktt7&|%4Pyl|BE%_AO=y&5Z?e9ovKk=io?6vl8u8DYeqA5L zol8V7M6J=aR&h&dI(znI8OFpZCekrN))Y~hatRj#E#IlMl72BV7Rem^1gV}K-8uEm zo0+_d+J7L0FEv&!no)wT96;G56!|*V@y_^*9V-KIGZ7o2!A%|5+<3UpVxiK@oogs* zZN)QGGT-^0nG0 zUBDrqcC4`p;&9?C5t{X3{oXHtyQUi^`7H|5-{xS9#ydCShs$?wam}Lm29+ zb}L9PdhEyVV|SG9cB0PjHj8R979icAzPqmy;VEwf+4vlX5S6J`R387=!;fH$<)yoJ8`W0xDuDfBqM7!D*n zUV4DV2B7I%)*5p9A^dUJU)Q&fkWbty@8gsx-Io_heI}YXm~C)%f*!3AC$%()3!Ai< zoW~LX=j{KT;9NM&)f)bYf0a7ej7t2dHu;e8xw&#bLD+UL!e)5nvX5aT8cN*b+iu6r z2f@2!bs+dXKmV1$W+g5t&+_!HoJ+K`lhF`4cLO&CEgj8kM083QzMv?{qzC!GMpCe^ zrz-8$qvp~9fOQuf_f(1hO{&wZ?0F(3Ush}Rspd$PNaLQ?*+W)CmRm2PcHw685IfFR zHCFLWjV!@&QC^gq5K5Yh(I}{ov}4nyzxE0XLZodQK~)bzlQBty=a}R;&NG^ zHzex4x`3pjv+RtmJadVE*^LNia>|iNIc)1pSMrjjC*=MUpwMPO8>6W=XG=Q_EtPiV z_4k7L6CXvV2B_RAV#`2$MhY%TVI(JF-b#*;s%G=BP?zZ1r?~j;rD0CJ9$A3=BvjWM7pPomxb26tW{%^O5;Y9dA6UfpPgAyl!XcI8r#N{^BcqDa# zn$s`kxP4-PQmnKR)j&z%vRM#;X~p|jb|^WM?#Lqs4jfC{G~=#~g;ZFjVW(O(O3NDH zx?(M{m*^08Z-~1jldU{Pa^?(R1hVi4dOe0MydJVS>gKA>1(N5IrcLYHCIF7`i2M$f z@%1Qp8zh>uSWic>Zq(@75P1@T=1T_KnSDTV{r@< zBR*5_qYAckA-$d=;=km!DVZ<)>InHG3%m-*qtZ+Mwz&4J_l;zHLPqoG+0#P$2xcnx z_h_}O78nmamWosOWUAVx&z_c-{c%q3L+SVvs;JG$fS*~6*p!BJ7vKDmfFM|3@ z3X|~+l|;&ir!!LIA@F?-%gRb;s_{l>^Xs8A4{XB6`~M$*ut#2ByGv+Nj;zi6>PSAHEuDy1zMYNn6tqIu}fxr zJrfwS=BL?&MHWsIH*quk`#aC>28&HN-Zm{G!ri=!__iz+8~)Ndw2iRvdxv^N+Frg^ z>EWu`7pk{QJ{n=CquRyeb_*W|V?+FlC@y}*^C*cPVyuDll|re>U+6(OUa_+y;id#; zPs-CPU&=KV7)sCV`7j3lh<-*b$^Vo3L>}B%T~_LDiv5v$7(JB-jyciUf8;{$?4y)~ zKJ#VsT0L2P_0wxngcB+dU$U;P`D4rFX zfdB{zCFQ$!4unY8L`Uw8NKrjt9-*ysZ5q<0zUZ0ckjxu!xw4xM*+(5VMH~cV;J~+h zNn{e3nd=jC27zNdvs8pp-xso0+FZ+-#OClP@K=h(Aps5xI$727+)<^`;(S&&lk4 zhwkrd;)!UMHqTT&MeBi(a0?#e+H+}(;!E2$a1$(+=C^|4U${COPK*_@-ePonhx@Mk{x>ck(v1EKPdrsNse{!K4g%TPMi zW*YQS`a@nG^v>Gp3mw_0S?}M?`(Zwbx=)zLS>ib{eJ@FgnKl-Yn!GU|E|zwKHLk@Y8c90kadqh=>Tj=yJL#72YXRF>_9@a+2kJq!%9~Bf@iospO)0&dM^KS z7?Q)Gpg$R8QMQjI5-DqbT|OWrr=&9cZ&1epIPK-`izR}3Q4&GE)BKKIZ!Enao>P^O zKnkq@^%)6u#NAr~6__fGb!8+t}?N*}CxKA*hQE zXb1ZlFnKfq@tYz^y{w2vqb%IN?U`@jC?EAdL-*z7)G+2zTUk!Yyvc)|}SMULE^xel`!7DxSD6NDh*!=P~5!=6-;GzN~d0 zdVb*dNRZ=M`K9jEYr~VS&YR;~(s4pU9UH~7(% zDGQpY#tDtOCSc!x-gIrxF2QESzrc?%gj0_?0dmV&xXh*`4_E0PPT>`7X#;E z%e{K!v?uA(<;?_^GF&^fWXzfW@@uUy}DoCSzaK+<7&PP!ZV_qEZJ)QXUr0esJOx z@V~GLcg+Mfm|rX+;s7fEjJ;YmY_h(TW5`7fpGIG^=hJRXqxk>Jnqk#q)xpCG@{byK z#MPhEuN{j2UTSFQZ>@F>U1*I19{r{88H2aKHj`_WZ+!9+W~J4^-a!@@q(}1CC~D{p zvcUx5taiZkRF|yz4s6hT(Vt6=%IyUAnt0{^L2;;SakodK+P=9W^8cNI0z5JwA#tFJ zx$o@GKF~U3#Faa%5v@F5}NT<_-~-)QIMahzJ-WM;+sw2`D4uJ}?;b~)cTl0k3L za#p#Es}JR6aZGW-l=1bv`}=h34M`PAz2p@*GzXJUX6O-26Z*I;`Sa+1pQzK~$*2vK zOyqRxsV?}0Plw4SuQg)aEF9CRaj0+cSBkKPD5u7CbLn93UN!zuGoIRV6vqn`Kh&)YZBvxh!IQ43Z3Q~q`PL!6OvfHqWHPL=h z6s@DvMC;t)UzDadCG~av7zJ@XHVx5@;h@EA=m3AC8ua;J{&{}J?7Yqk^%I_a%5qX>(?wl;w>=8>GL+Q|IFwcXeC&^ zQ?8S!^|RE;%h=!+#*+0i5jx7^Z2!ixEilJ8Tp!*1DfIexJ3ZXpJbz#AhoZ~7u$xLs zsFoq$i{(xWlYxpe4rWBQw=XmzJh)~{Siz~mpFcA?u{E}!R8%_DGFhp(ql8$q8gf~- zv-UuQEgB@g9`Jv%NIhV27QKOn!uti|dUw~78*(=LsEWD6-k*v2Ul0rG5;$fG?xdyb zoe)H3>Miwp7FW0stv7dYP**cqZ;dtHS%Jm$yQCA_y$~R32NcLPIFXJ{Psd(oBM)&B z>gtvv?vwI4cSHT6?|ibBZJw+I!ugch^`Y|@Ng&bzSLU?}?KLx-QJ;cfSZ_3=m1JT$ zGZs%re)=q37ALx!<;F~v0g!_n+_kX6pz$jEmA9EJslFAVJGqW}dwiwEY@Xi>gU1yi zFah}C9<=`QB;kbV@`DD|5F(DG07Rf|VR2N|hQ)*Pm$4liByY*0-ibm+=6On?P?S`_ zVOb{sfi(H-vkRTMl!>< zm^83S1;w|gH5w(e;#ra>Dmxk?+X6#uxS|d$w*XMhM1ei#>`e)ScZ;hEnFJ=#B8-Sd zEq1RpU*8XvM3FTBMFY6?5-YNIy6ad@HZC%B1_F%#S={~-%uuV|jY~L`_VVW+K*7;C zwj`6@o%<@pXBsY~Kw>c!`DK-T@F=18l8U>}Ww@DVegP-cL;D>4264&p=P|MCQ~=Iu z>_WF!s@nL6@;=#Cu6Mxvi9a+GE~tVB<*$j3OD9m)+@u`U6JF02qm3p>lMEsfqyv(% z#D%#$tNN^qd%qcDFky(0Q8o2<8OQF{oeIoQ!A(C$(>#a|n)Sqq9&n3Y~co zT18hlxHXd91FFET_x^}=1b6k?GTpZ!_1T5(Ed~{4bVp`J@QR3VxX|Q2%DrJ;6db09 z_(OhfYEb}QUP3rxEw*ABV69v_+$G*+6Sj~|^3n9f_=0pC7!)}240N~dMd5|k11=|? zo8e&Vl&QzpFqBLR_+>H9U_Q+Ixo!%xq!fLO$5J#TAup27w9l=!ke#QV3cE-s+wI@1 z_t%m2)N#+g*B!?3zlt(YaHy(%`gTOZ`0&FIBvkS2v|ZuQq-RS`3IVzvRwR0ve?B;z zw#VhebzD>5MP+K_Dyf4xRNB`QLVoFw=fpzvJfT&;9xaqD=i*Q?a|4=-sxNXBROxz=xUB+0WLxN2<-e4NoM!8 zP9;&K5%2Yopiht@7)8&D&yXn;r**PK7vBa>hUZNvtGb|TYfxY< z+0&@S3{aIS;J{)?b}(?;L47cLIArq^yVqP25uXYRy)D$Z5KS`a);zy~5fyP3RY9FI z4fMPFu`R>9NUy|z+4IRcfQd@f&s*=0M(`)vtS~Szru*xxmtjk3774RS6PVJD(_}`5Gz%^$Lr4A}~ruQ6xn_ zWDS^OBx_(fNk-yDw)R3l)a0R#f6WD>@5r_tNN~#i(T2lmRskf0=F&?C5cAZg?ifEa zliZI%59>-73xsl>l8p zqQ6I9)zl@AxaSrn)o@_c+d+-vW?fpP<$9qOIt0|hY6clQP?T?zo^RQgQd@oXY5w0x zZhuHisq)#uZ4mTgIkh%w#-=35wYFP{Z^0zW916YnT<>kwjOZF+aV+S;H;EF=Ent)_ zgQw~GB#cUWOb{;fz8Z9s&bNau0|o?g04>HEoZSnOn0r%4Z+!Ptc?^2Yf+tmmPXtVIwxe;>!^ns7RgO=2qO_4#Yz ziL{)4yzMUz(w_iXpS~p2<)!tqGf9g(+Na%2clOyTXP)|35Us|32{pFI3M#=S>=wq zcLMR1o!C-syg0V@#x@hhGW8hlhX5AdqP(`{WNe76fr5E=3K9h*7@jp@k33;5c}eC^ z?tQ*f9G}g5n4AnTjCJUCM(;X=Y(;5s*A&t7g_FwOr3RUn1G4L45c^PWrZSfwv3tTt^)@{{++45{&ixUZElf6}%5|!M9c-q(E zHskJ@8rdgX6Ubx;;|w8)CB>*G(m+yom&gTQ{`qC_?_XPVvcOz;XiKU|yuhsfSakoK zi%a548qZ9(^8Tcq4)L&3wO3Za0~_Ei`6N&pARjcuZ}2kLMg&haIt<#c4tqZ`(b2v78m?4VO}fV&A+>t@yM@!Kg#MmrD%RUa8F9tr}cpK zStl$(ru}e$3ZOjpa@I&#VOzLBotaJrdC$WJSHDRMLPFY{Jb|q}xyz08X_eK@|2_WkTBp0P94#n( zpm-`mK~|#s^71tGcx1EA$C>@YKn`2=W1q9YJFXy9=%QHz*QOyQbS1P)b&b#1HeNdW z5V7ptD9%jYYqb*>Hcc)>Cs3SfMeM3Aa}KL@t9}JGQyKEFI;3NUG8rBcy8bZl`a1>8 zIIWBE6L9{NN8+G!II(}HMyF$;^Qe~m_)f!%h9(O>BSfO55Nj!ACSI66h_8Mi4_)$V z@M4v}_rAgGf!|u$>+W(DQn(*l4sYn;vK1&QhDH)ao58Y98I>MZgB3q7PKY;0;{8sq zt)thWkrax%RLEvybPeGhFrh(+VzB)cK@n}&h*N*ywiWIu6tQNSR~u%^Bf#gsB7NY3 zl71dVRykUwaZ9CS93Xw)4FttPA88YQvQU2Hhl5+Hjuw)}ss4q>rb}%-H!IBAhmh<< z1x1H}PfagxtRJ)&gBc_Ac_HeXO%}EVa8fP+C)XvbquXi?ih_Y-M4kmebu8oB+WYar zrXSlm90Si*dw&S92--l%d7QH?z(&G7Cg&VX9~#J|gT=loKI;q_%x+NOONR#Kym|>X zkY$h?-xW)tV+rnUFw9a<+Y8Hb3L%R4ia40Ltg_FZQo=6|Q)O%eG0DrQq+u5g$gock z;stq1SMQlo032(-oYL8;n#vs*um{q&Qi!7G+$H&%IpyP6<7mUnvs~JQ-(mt4!~TPZ#II&-}%zi7L*rH9f1_kiP8QRMA?Kuw5U*7HF(*>y!Vd+V@np%^oteZUUR z1%)vl)9yco(Hh2_v`XmSERtdTro(0eRerhe2+xqFV&+H3d~BP$O@HmyEhm^ueE3z(VPsPdF%}E458xuRf|%r`2WL4> z&5G$O;d@fov9@wu?ORAsMU; zna;v{&mgop()M}Nij52X57!RBn*2*Qd6i)Ad&ABM(g#W)OtFzIinNdb$FL>>vrbZr zigcv{dA`_%(rTq9)5CoKZ;EBpZFfbj@XXj!y}T8xox?2763DRh$bWP8ww+TqPA5`4 zRrp{&!I(^KuWv#2fdX4pm6eAL95D=8qQA5+u?M!Kq>E|^ldHk`>NHc4o@U6#GZQ&Y zskP>lLpPlo890wkxukp8v4L;=?4}A-PKji_V}ct6!$Z{pI0#;diLJFOg7sO(T9B%5 zjM*Y{ck$Q$6)pLJrsSNS^UROgML8EX8e; zh0ILLdF3TiY+H;^AFbpg0k6h<(1`GQ2FQP=k#^a>E)n@%zQ>#vDbaF)e8GD09PoCF zt@`Jg_Eo;o-mRLH*ISwjdfduA{Fv$~jIYBIg5h>(;J#y2OMJ}X27_-#8q)9B2jnDc z`aiG?6(=n#!urM)K+H~rx#qk>g8@|9m1tev3Qj=bmV5A~36pS_7NAa*7nKmM zy6ml30({(p&Y2aT z0XZL1pOl3UuIF`q;V*yg_LJ#e>dC2mWS4JA&i<^^5Pc}I4yT+lGQGWiHL7)Otd3eZAKI`D9oBq2=A>jn=lZBIWjY8PdPs!Mb4ZE;ylh2o$HF z>3apAkfHw&a07DM$&ZWF!r-k?Nn4D^z&|LML$d96<&>HC)_iQUaDC;ZF{uJ*3 z+RqgZ&?Nc;Xl^`0-yuE#7xVIV)in9q61oQm^r70IQL*&xh0m#3-H_)rx`%xBVUGM1TeG;P*v-FERhup!iYHwns{T+ zi>1ejskISO7;9{IBY`_kBUjNnBo>?qAk$;?W&v8jSq|(#2NqZvmM9J)bSD8l&)4>Z zNNsuauPzpF3gZ%fEn-3fF|MO?nTb#UU#1e@^l2$5-@{OrY53AA!&qWH2dzZX;?8zx zOWRcUArvJ}zSxgvliPq46y9DoCAV++(p}l-Q=!GP9cuC$YcDG@{P4`Iksxr!{ErWY zO+YGI5SgiC2t7%x$g2Q+MV<;HBcUoe$PLQ}9Q5^^{Qee9*)>zQI0z+6)fP`2Zw+L*u<-=GNgUOZm|Tci_3f8uUk%hzf~X{NXkOdm2Zt( z@=J6l?$sAJA|2S~W1^vW5ICjf!L=yADdZ_o;LEK<#T2dOyL|Hra-hH?i~zl<1TfYk zcT?*UyzH#{62>=jR@b($vxS_Q|FZ_g~#IBMaf(@*2VRXW%@-|;vY0ml6eMWK{`rjXUs$f|5Ss4 zzT*7M^Bw<~e0{GSl!@>P<2f&tkRC^`b0E3}-&DaLa&e9n|*x zq?rZ3z<*5Ta|$TbFd^;K6m1_R_kh~=vkY{0r@g~-xR8}8C%eunwW4z)CdhXV{w+AKuAc&@Ymk8j!be1 z9|`eicLAo9TU&rWGyUu2C~z#tJoB6u$&mDnmz<;cBsRqMW|cakx%|sljQFiVbO|x7 zGB6q6DM**~j-^`N#1Qc6Or;Nrz@Z_Xdwd4xR04$4WI%-lyg1GBHQr@sGMe{FXybYo z$+4rwW^m!wLU~XR;g`{XkG|||CU3Yr;vo47eu1}-n0P!9y$&-*Q{WnB(c`6YXDG=$i@=lA*3mt$3g`7g9El&rhv9Cw);)chQpdjD%`RWzNN?nzd8@1IdNDLIdC;68Ij* zDm89fUk@5cp+1R_(gf1$f09a(CdypXSKSvBkB91MLc4o;{a31g@xEfLj9_8)Z^;}q z@lWVZlO=Nu^?FS++)yImE5u=e+Feju#%|?uQ56&bz~%wc^o^g&eiFjw(QS2%Ao5Hf z!m=f3FTtA%6K{_z(j+FqgtHC+aGSxT$4b8r#p%0h&#xSqpJ^t1@~-reee3KnYv#yJ z_&is8|6FjV<=+8KNJg4@j5^MA{$J0S{f}x*itGF6FplV0F7Gnju7|dB7@`K zo=iz%ei7YhJCrLEc3s<6J1_7tP4jFWBQo!L& zul=NWRJ@;jgWpKYX5f9+FS#y?MpvDf`xOv88o~cHiANp1EnFzA1?$Io`c|^?W2YJCI0tiPLHI&#=DL{l>F1GV#*~@Yn z*!vw7O(PIwFz3~NG~Tl{ZDnZs*d?&JyTwSJ#TItfax-j?%eF5r6X=@%4lJkN^4ROr zhP?!kpx*pcAWi)M>4Uz(RHlIKfYIA0*06D9)9uz>!5FTTy4jM~sWERZ0ccX+LZbZt zyTKvM6{)G;Qy}|+eH(T#*K{2v`t)TC0qQh5fYwl2z40ovb*}u#% zO!J5}?WY+3S&LA{?(ex$q%V9=_KTs1`UH+5C0Y}iXmQE{9D|#+&Btqv2Rf8{Yc21uTp|ZdApdMp?~ot>o^kk zfNz``yB{C&t8|Ox=iq>{gT<_!DRm{>$mcjI&$HuBmS;C?jE(L3cH>O3naKz;%sV8% z$y52SZSi+BpKJI(;I-~UsK;Iew&#`Emr~UccndODIC^qNgtvIbG*VoDgb1_?aO#=$ zpw5lDhfxfocM)4cOhy#$0$g9n%z%jhf$K!_Z6@?7^< zV(%b&!DZDZsNPQ6m6S{8d|0Nt1y)3W&FM8thRYoU5(JHg0$|F&&0HQbvya&%yyQRQ z3)r~KqEemz;IY_vNCfBGwh@J=VPmr!+^QdDAulogXLTSSjbrbuQypQE6d;Cm)YOhB z`$P~fM@X8z$9e9miSaSQem{LKqkxcen8^`(Pg9X?hGiWX>w`qZdlBGuNOdCZ@D064 zAEJqIv~4Ou^;-G_@>oi)i>*g&miv!23yxzqN}hPktb(|>$${)LIN8V+ha%OKDr?qV z4)A-b_Wm%UM>MEZor?#Sjo1?UH*E%L~F*r+!w*V3-p*$@>a*OB&(3JGh#cZ-3r;3M;Nwk&Ydlg!NN`s;EpL@9MbNn%C{IC4271eG@1H{;hwz-L2gRySK3#W&<(! zRr^SmjA&fq*`*0yag4L#uh3S-^c zcAY22DT`KFz*y>eB8R)MG}1~`;)=E7&R^<_J#xHc+X9I<&scNgFZzSB?9l7Z4KINeyR%Y@b@l#R^9?24?CQ$9Q?Eq z0U|?czzVaJ5_bY87#Lf(N^ig4eZY|{X0Uy=zT8h!D->o4n$~p1w|e8w^EZqRB*S|# zj#1W!(HW3KOJ*3YIoi%5Zn6InUi}ghT5F6f0n)ylG0X^@S*6KYQ!iGZtla;TA9BY* zO+aX#+_E=O^Yx^BnP7AaC^{IwpnLs=u=s!TR?99*O9uipH#>5r{_bShHz?hvF2@c1 z(Rk2J`d1@@>2P~`hQPQn=)+g(mupkaA0Ke!zlQ2LG@2A@Jo4sK<`dhT-BgGwz?EB9 z)tS2QssrKH9>H>=B_VU(ZYHk=;FvNGTV)I%jmY#&eSn@T$D}dV+acBC&(4%DAFWX= znn@+*icS)OI~=<54u`r8ywKEb`yQ;P{+6}oDZ+f!F!bse-{^my%CN-c$Z1_r@C*qw z&B@tt??};{yq{)TVzr2>mWzX8RquE}c_u_7tA1zv+L5eRMp(J+r=rPWiH&NtX2*q&053>CrhhM{M(1!Xhj|=&&7f@Z4^(Vzi}olq_o=Yzc=T= z?RhdV3*yE_%Kp)J7=4g=a~v55atzMZPkFCPJ9ramyDcFVO;qh^Bgyu72m+}4A314# z=E3DJDOG=6KdIt-ZP%)+zUs9%Y}UI}aw`NxBkL!~%hS@_$>m#e*1cx?tFDq?_rd(g z?&a~-J_e&ROtv*cps^>xCeF}_ykoJg6~mEgItcar{714M(ykLUjHu z>2~ZbHc@1eIW_j~IxpqBD0U-e5ui5<{BC>E*G*$w|5$$zZ#Q<=XxHBs7zBi*>4+?Ua>_UrRI3P z8w2-91YWnOZ61woW`EFDrJ%I+An&-07gH8UHwwUEX%7duh-|&Ria(mguCLWIC|uw~ z90-$-C1Ee%x_0^G>@un@#1-!SOQ9#yhJf1paSqE{ZxHOf_)bVN)K`IX&UXC^&2}P> zMCvnxS2=(%Q&z%D%~e+{wQ->CbT&>MYvROQN}Z)m2TMFz7s2rb7!W1Ayro8*#OUT& z)RH_^l!H*{IiwbXmKwk1G62N>Mu7}zYSx{3CLoipV7>JU4`;o^fNw8C8lX7Wr>WSQ zKCj`XGo=lP*U+4DGelOkU5h$!NPY(&1GmN$Z*d{FDD1ZQyQ#5n$d8}Kv*%5GLCIBq zIh?%3RB5l=mpPjZ&)@GOapx?U%$3^?il#1Lz`AQ*oV5V#a#OZm^dYVmykI59=4yp~ zvO3xxAeDP*{{dd%XCHgz3o2Z1uP4@Zuo=_K3h5A!64OCUq-~7q^35JgdvVB5BB z+uf&a+qP}nwr$(CZQC~It!8omA}gyZg80kP;}fWuCh4V6HwJ(mnH__cG(JK_W`!r` zPn*4fIkT1*(a|}L@EEV;VH2z^ApUK%7un2)H%ww{Ht3^GE4*cFH`2EwQ7V@e%pmAY&4^NhBKUt%s%L1J@bPSIg6K&X|bm1-P6)qSa^mgfODBXGHE(}0-GsoKxvy4ZjfZS#(ZZ;8qvv6{Y9`&$$!GNc2?49Q zZ|r%gzCib_P1_3`d8pbOCIqvG`IX9DXG7VZOKO5_$6GE$zsb0PWJnB7QjUiXt*_jG zT?-RWiQo3e=o&3>9;d-&JVpH*1(^V<=Ty_hV;xeyvP2D{*CiRz-Jw{yMRlohLI&aW+rmDmo8d$C~VU%#|+=AB}yd z1<5o6yX~V$eGj%uB0EIO-TOxms>eg?WH;N-ER=Vi8oDfDS1EMgB z%w)<65_*RRR0w4ojyi6rozH+7K?X&kKw%7MI|%d@-T55(oLKog7IsmVGFl8+jammq zAP<6bDC4nCR=aXekT_Vy!Y^CnqdP-xD0yVP9X2-F#O#64buyJRt-^s#{)LvK7(AfiPog1fn{bgU(()S;W zS1xd}!R-86UQ(u%1FGd&%{Ia*N-l>=pDE_&viJy{i1GizvHaqo7~L2|PWEUd{JmV) z2@IwV;JV!;+mM(mCw-}0zZTZ#0IE)d8ZS7*lZ!e0Yk@LlcF2K80!tW$B^LS7h0W#$ zoY)`(mLqC@kKEL6P1_&+s!&-|HUGjuYpb(SW3P}2=ClPrJm}qfXwKMl$y^jH@Q$-+ z{i0H8s=GuQ0km~u4M>$^WBK0d`Zo}_wc56nD==`3 zjX47~W23Ng`On3k3Q_V?ZJl+V4EMt1#QH^lG1b1jfuMa(MH;^L&ADk*!L+XNd5_=y zuW!-R^aoi=2K$7k3@CtAyjtR1aL^Lwq zy3n*Ielqn7NRnY9J{G2BYdG4GMxBLtMCCWYr(b!9J>;F35S&yZ0but$yGpW8WLV0V zeZN5v4_Q^5|Ke&3lL_D%+=54Dp8~LOk(>cKWkbR8fNebnYy4(x_uK$h8$b zfy_dd94iMiZAl@~I#pmgrw%tK3{{d-HNpvzQRFZ$28_E3AL9{P(3Tr4v7YtOY2+B&P}r za;vze(y)umX`gu?zQ=?bpP*g7N)J6UX}`ZRXa<+YLHTJ2on+Na2AN#lmZ14N#d?}` z$N>~jEbj4=FxFjy@Pa4v!`%~nKxl`)uH-^lcI*uA53+!*$9nz`meM-$o(FSMOax~L zY{!X)`qZ@2L?VJ?dLF7GBD?3P4zTizwnPXV2NJKMgpg4K)dfdq)$o;yZy{{F&lj$4yJEdoc94LME%Gs%G$bY8N zh-HUN=w_n|hmte6P<}t2AUOXq`Wa_5C^ME)!2{oO}~hOG_R zF_h|(Z!-%lSsaYt;z*$$w)xI>4@w82{gW8Z9HUZ@Vm`B-}h`5GJ=F z;K9c|?!=~zuuZvkes_snCNp#zr8-mOd+R7wPLw`wlahToh03)P(^^nq&r||lALDzc zfkgmWrNff~>jJ>xis}r}nM>XUr{U6MZ0%T9D*v6IgDXu-fOy~@exGsgul74O&Tzj` z8KE~$P*K5h}0E^R356nM9p+CzFZo!LhVGU<~gaIqKE+Q>UB3@7^lKO+TG)S4< zMv&kXCz7uAQ)Rthy(k`cUT_Q*a!kd^BILPm?+UzC5V0c6fIm%XSCp^(!P>qu(0}k$ z22r;6p#|8@0M~m7ps@}&CIH;?!>jrcZ9|kJ3-P&tK~ito57^__|!+v1C}RBnL)0jM9Jm{{B$Gg%b|2X;bs>DzSyoh z3eyxTUo=T2O29Ts1%1DHIj=I%njqlP?$nbe!3Q^%a$xI?KZIq zOW>P@G9Go~aicQu-fg%6COudN6CQzj7{DPxTd7%SBwE`_C^s>zkUIfAL{qCG-&*dptqx@?m`#I`~D8kVzOdK+07vT88J+Aft|e=Z{rH<`~e+_czxTXuNX z>EXy)9ho?iR~n_)e-uTlo@eBe2RO zye(>J_WO9RFZaconYr>rUsEECo(bS4E{1WxICYf+BsP}8N<^>}Z5!l+8_P&5{_CG5 z-hl|?uRTnF!Z-H50eI79guc25>MPoc9WdB_p^$O{h$%*IFA`ZE!lg$En|t8O&q9R{ zK4ppB@Kz2`*fR{&B04El=LyUCYnA2~Cmo_d7sb=y1!^|J!qq{P?9q^@b>fhc%vbgo zF+Dc|W^aadRZwm6r-?v}mBR%i#n}>YA(w=~0u~ab`oU1zNqcbZ~rsj4;dqve> z2J@T(#glQ*+kM)D-}aL;(>+s|yx2JU=OC%f?kB#tM~CaNY+glWxH0KIrK8a-o+Xg> z3d<6|7s;0tZMc?f|ER%)OFVsGEwR#4lQY{$PTjy6BnBLY?~4>`hb`(_iwTWi509_GR~7>SA@}oWMU^C@Y$V~pF!N;_L^-d z?u8?$i!wRTGI^58Z>$6PAx}}|R=TY{=iNTgHSBY%f|ZcNa31{%k+n7I@thu@lX3iAD_lW$o<352F% zmI7VK{;2Rb?eNfq72YBY;AIRNM=UD7m>&w{_$;vs3itMLVR}_9mJoSH?|Nt<`_3{L z2PulKspCmrq|9ofE=|yql+BmzUo_U_HHfl8I?NK=oK>1(V6=1KI47ToVn7RKjmfo_?J94m+4rwsH$h9s}+Doxs=893x*g@ft{mdxq^eP{}qg>(J zwXbOF#b$6vyAeJLQRIZ3edf35i9eG`k_889wJf#K1RTs1J-->%|GEn443(Yv|i!c&*rC1`q9dNd5TRF(KTo z<;clzbf3B+Wpy~%V=%zx^VaWhw$v(#uZ@&{dMjQ#`w7GZrHo2|!A?g)$pPDWTk^?- zs1!_l%jJ$?Ql)>Is)HYl1S{pf5*G}?U zQ&dPx!zjZy3*#qp6Z6W5tsf;a?$LPl33K`~#`qdpFQY_1H;qHVuNsb235v1<{Z;^| zT^77WgUmR(`~XrU8n?CO{zfGG`$j-Y^VS2sSz&{Dr3%=tC26va{VL<-Z4g~SzE_hQ zgBDk%GC=xSSUwWWMUjy~`J()P zut8#TP$}N|oT+seN>Snebl>mFi-&>af!eabXYt4KEWeIey~yKP!nB7oyK}sV=dd*f zyN@2g_~d)Dku&)p70z}QDWW)#8mIM@XK=KOW>RDfN?&aIeR0}0n0`x;hF+a8_O5<= zXvE`LuUsP${1$Mnfjfy5XAt>g(e}qt$zj%~a5W~$XpQi=V!i0U1m;M{{C>>7`w}ys z;-+Mtb)LxrKncQ)>8pPd=J%v25GvMmNqaF9hD;Idb?$dvJ$T(T!SS4XU&j5UkdrhA z(k%3$TrTEQb=O-gVB}lZj4`qz#7NV2=e|tFP~}#{L09HnQSA`2o$Kez9MdLez#=;t z9>EZ~c^G`Ql*6VwrEl8I;!^9TzK}+(qpUlwkh#G4=RGR21}FRE0<&e#Z>yZ464P19 zhkpA6TUpLqoKMRRc0?O(xOf}`jq&_|y!vX+B{oBlWRM8`+-(!x*Cl@ahb(JY5#KXv zxvvdAk*Hj8ClIn}7E2#3XoK(RDz;0gx?r~vWE|2uN>Cb(B@fVF$^CwkwQH{;FKsfS;0?Dt3lIbt;S1-!rtv=iX>G2c z({Mr^$?zFt7Ex5J4dRGWUmbW}M0=GS>K-WmI=6+v zLJZRb)<~1U>BjF0{B{Zv)&|;hrn&;5ECdQ8ml0wvic6ArS%QFQYen_U&(~O25Hkwr zD}HVn^1fwl^EZvSz!%J6Wyof<3bnY*Tl@5nEawDUy-!VpRfez+xy$^AHX;~DE&>$# zCm}WX?iu=uJMy*nPiM{}_l`D0w$tmOZF@!SD^VcJx}s9l%}nl&x>R&Rg3fVn!vYB) zFj7cnN2(RPv%AKmnHfo{s64FTm7Gic9T5WhCt=;OVT;@M7(JOOvJKdfboTZXB<|)~ zvM0;KJmMZA!3Lxaz;Kdbsdxvb23DsROiePzQpSuH88#S2iqiCrev|mvS(JhaTX-Z`qkfFDZOH%`fAu z=%JOpN=5uGq}JbzXar&PQ1Ae{4Lr?KYwoQ>J%xsiUM12y%?V0{NK{+N)urWjl2PC%phwk#-kcPyeQ{|=oaWaF57wcU3jTE1mF}{%eYsMw;3x^HEpEylWHx%Aq7b@f$Orl=SO;Y4NFG*3vOBSypEqEqh_|sW|g=^?PH0Z7$ z8V6U=xtn<770rS+X+H@Pp6jcrfgVe^BoFDLKKZJ^sy>Ztu^bWbd=m6#N_-wfJsL_j$@E z&7sG<@o?SJS?LUP$`KDbl&TnV>0FzW2{HVp_;KDNi{a>;O?8EcQhBs~cek@L9z!te z7lINxXQBd7Y3*O1t*b{5FcaFIJyt0Wzk#osOhS2T(q+U5)R31>wU|q zjVj*hblW4+&obfBhs;#Iyez1}7uM4A9t;a4+3_=4n(|)ypUBZgOz zNUM!cK~i_{okpYGF%pokaRGNlzRH7~b^XROf%Jy9(6EsRM4URKWY9$;D%<|nt_&E4 zyq$-&y~94yLPH zwJiFp%7Qo~s%9*L*Vxiky#i2g2CC~nJa^jDRD{8uk!;khbfG2Qrrs3)^cuWx+u!RZ z4-r$&ovt7aU~vEG^Y{JUw<3$;3z0mK^;uA2(=TH|puC~6KoNbbi;7ZK{;9(8dVf^- zYdUV(X~De3jgY1X;qO%^1snj_rmYf`0Uxh!0C@c?i@9@qChHbZa;z4LGs2=OfQ#bc zH9?uy9A-V*Tc|qE+Pzhai`TU{KQ69Ek*rmE*L3;C%=GMd0<-G?={bQwAZB8Su>NZP zPkHm&@T}km-9Ow?7%hz6yA}KkeBD2@zmnJ9VdV>TaVaj-xMi|lX%pzx`GwlArqn?p ztuK$55bPE0pg74MR!Ofx`*bye#_!RAXnNF|%!W-D016Gk|AxTXr{zMb$;*(x?XrB& zLcp;ztk%kh7){f8*3)V)9B?Y4k2Rs!pfO-$WJ@DNJuH5f+D(C|4oEh-l!%Vz?~u=a z=-y+|pG#kecr{&pRI@*K&@!dvnjmEZe(r35iol4bSULhF9cxXVO{rb8NCY7+Z47UA z0ELF!sffmXaDXF*h`niKZ^g41oRHjIlw?`$LHK_U$^EkjZp297zb?u=Bv=BW4~_(2 zmR4=c^=Bg$%N(qgk4hh|cr~SzL!$9>$i<5EG1l!A;f;BtR&paQAE6C}lfT@8B8MGT z)!VtX_CIrOc49iWEBvXxOjj<5F{1H>k+@dFn`z+5HIlRi$i^UN76_RJ)$oGH$- zqZbJkNwJT-^O&k+9e;}TV<9N>mYCaH1NE@136Y86ZR76~dJZecj1X8d5(3AhK2Xc4c&)&7`Vv0I+%paa}5<~yW&l@kQn z=0jwltU=m!>MtxZf;StifT5TgCVIqL^Qx;FT$%yWmE=d(FKbuWaNTV})ujMN?iqKZ zNZ@qQ);l5HONu~RS%>1yM=NQOxO}5t({2p;h(ybx*C!MI@jouI7L%lHSwqK+(oLoK zD(Wv^>V2+!BM%%7x+(Jt{QN_O*zU?>6mn~0;<8;MrU(B#1#8+)MMRajoOP%N`)fR1 z)`{l8JlpO}mM`qZGCV#zBHfakkBR^A1w7=OQt2Zb-Wc8{@~sUk7sqbTqq$^2b}&; z894gI50_iSnthPyT1yIp8FDF=A$Ct7Jgf~YHenMKat5_M6L_#fGPxt|WpYO?rL$YS zG-M`uFP0wh*~jsCR=D{_h)+p4Q(J~S4D>*^T+g;6M5#NE_8?&%T0S?oAxe>jHa3VY`qs=Y|b1VRoEHi}GhZlP$U*6Q!1V zeV;5=KP7DLX|#C;50+uNGHY@eMm^i(CW2wqj>+PE!o#6)ch$@;Iv3ipao5%dmsd1_ z1gIX(ZpiJN@=EWe)6P5_d*`8AseXrb0}FTAgaaTw67<}ee|u$w-_BT9LgA<^y?7-K z5Wh9wc`Pb}=cTod>@4TrtfrNZu;U75l73+>H1ra)aKofX+8LbF^c_MPRD5c+<4>0AmwGJM!!M{H_7)8^Q3CF{8`7sXjMquA_DP9<6r zzjKA6rdf!4){LwW$Eab}*0uAoFP5wVfoc(SS{5Bc4o(y3e4<1SBf%x7TO}tfsIsM5 zrVAW`azE39ju}&0*z~Y;;w`EV3`TZjp5!SBa;Mh8J-G4^xo`t#x*p=)hp|u1(4q8! z#NHs7@qnBwt2b|BS8bXVUBiLW!Fl*&Seu`fBx!LklHW%8xc17$zUvbCz!@lxP~!W! z|4pc>KeZ`M@pyJfMyd2f$ep(8=r0t~Fy&fm{MAimAD=1gR$C^OAUxwaxI3Ni6*M9| zS791EGPFoOfRaGJ-dN>OL&tGG?)TCMg?HL77egBxX6Hv;uu4*J0fCqH;HjQ_VYQqO zD2J)09ts{Z~Q(j{A>S4Bs$?#`27(s-xz1Ju%Oy z31+Pma-{i*EMVnq*z|;Ax{h@h+~tA`@t+?o^lYdLN-`6O1Q-x}x1w(C=EmB{(J@=S zB}fzGMZzTQnaFx;pqrKb5@Ymwy5<+QJOY{#NIq;9aT`eUK2SyCp@KqZw~3j)KV)v8 zkIg))MVptN_-wXH>z^%yssQAdNlg znvFMd&_?zjA$$XC4E(k2-;?P$JeK=Z8+Lzq5w&6X9NUDm^B!uBeTd1{-6qmXYDzqw z#qj}lCKF!65$=Lg-TuuJ+pvyQt7;>)_| zBc+Q(o!39|f2?(tG(8ahHpgtewu?6asz~z)I|>%jiR=~O7Fj)mXCL9Mw1NBPw;^|5 z|50Dhn(NgK%u+}B#g-M|g`eVs?B})P@Fg(!w#rZF*-uM~7_hb0&{~kM>?Kia;|7P( z#>4(mDCl4u_@Wc|=J>)Q+oj<97`-qtx>znn^kLg0RST zmsEj=%t&|L^PUbOeQo+6g!{G2p!)iGDEFy+{r0CBFBm9tfY7H>GAwO*(lJ9{;%^S5 z0L7A$It)IKif=sad}2S*#!10H6r#N*PB;kbxJUl&gaVvkXScP3u)E<5(5}1-E?a9f z^FZdiGVyusPXK4ZxOt9p@XEhel%uHUKE0wnV7ovw9hQKI+d~*c+mKcxD{O4B5QejG z>x^&7SL5` zjV5`b%54?j%8au;;q6{HS**PyQuGMRY&tNGh*6nKn>I zvO#0$7^qjuNt;d?V&`rDoF;U~dRM{e?|N;|Gx=~pe7kf#0v0CmkhH*JU!48)9laqV zPwrlqNyLMK92wlG11%}ERpXCtXxv4jiP+GvUSFHG3`O0~;zAltWEJTDcZ26T z&4%&0Erz!$1RFYd%H7a?*C2PaR0B@T%ib4dp18znp|NFf+PuU^Q=5%aq!@)#^TzP8 z31ru}=yf=j7u6OQ@R9}hR!VzOYRzOko(Ryplsr~836pUjiBcW9Q;=lPv2B$GNH4cd zxphj!I}lx2J8Z2nun8v&i7fg`|7L!-o)9FLYj%m&+>QOgjq(Z#fw4y3{KYNVaujZk zB@$FbK_i)MeCO9axpQwYS-^EEUOl7a_b?%5!^+PhC&_3p?46#{vo`@iWTDXi;x2YI>)11u;rIZJEO_`kqcOf&1O(DQb}SjC z?{Gj{6x@pnPL5+Z^2C$XP|C$Gc1f^vsm#(X#D8CDa2ZJWZ`r8Z#q(XDC*)8vi}Zn5 zDK&|^YNjS#ppDpZO_b|McV<}chm3aYZ65Wx!@}oOK|H7SG{?)PU`@9lIM{vT;1)PC zp+xyqvYEz6!)V6(?!I?+>`1OciZ285!?@gUooejIox(goC7Ce4+!`ntjiXteCl;Oe zP_Z5!722{LNY%<24U88KN+(XD+CM;k^3j-HVlEMlYU==Kx(%QqZ1www)kzVn9{;lo z@#S7A?t2itQ3Ua$a%+=1J2Y+HQc-jd>N@y>kxbYULsse>$P*!q2Sl9u5i|t7G|WFW zh%2ag5*gdJK}(1t0%!MWQ(x7(EE-8DpZ9}SPJ@>x?n=|thWEBZKr!hy_>QSx8(T)M z7NE{p`1N^DJ%~zmj^0NAIzYw0 z%F6+%ZwL2ApvBEl@2`##w zBK_$v*)EBAWDP5zUuYUy^{+7D^oH8a@Z)Zu#&CGnu}JH~DZS?)hwgxYzV;Wu(0iRB zK7H7i(xnzPivJf5&v{s5;lY$de1nQTxlU^?H_iW^;y9t_GN`lmIQ@TF#>2+N zW~5^dC#)+ykQ|;T{#IEUCx<3DQVda@gN)7|)f#iklq}vjq3#&m=8vy7&R@+SWniiZ zf%5(CfLRPNEj#a0iDx$Jk8cg`fUXFQfmDSIxDYx58F498CW~ZOUSl2^n@OCOpO;7( zDeif0&|(9Y%F>DL3??~<8b`Z!W*RbjrON~-{EbIDW|s*YD>!lv2h+c@o9I2%TzyLWS4f0Xb+O?$@b;2 zWlKk3?X&=>O7Ay;fJ;_4`BdT3vmiau8Z=rrA=p=4KBZX9t&|IO0c(_kDCJ2-d4usS z*Vdc35RVZ$PWNHTj9)BD>!Uyl-Z$Qb$Kj{emyud zod3JHdMYONh0BSPet@1VjcmZyiGz!n1v(&oAE;3kMD&F@VjQ!Eo;X?>yF@ywXbrhl zMmxM95M;$#8Qm07${bnQgLm_Ke`IqX0L}{MkW{gaCZ0eU9HX?UX>+bJ7@(CuM%SEp zDmW4Kn#62lnk#*84g&WeD2AFK&rUh{n+g(UU0*(OA|)%>P=dYYd}!Z&{eGL-;;2~$ z#(|etThFX73NyxG@VMJ zkn5KAP;m10I@5F#zC)o!qG*9?14b%WeA6(;T|=|6C=f59J;h*;pVKx64W0)#4=99PK>SVwd3d!w&FYl`rvax`S|Er>ID&l$eC|{n zoqM==w^UCUPU6y0^1S&&7mt;y4!Q0V1<{=0S$^*&b7vwhAApjxy{rpmy$jHr1cH>; zUy7({ymf;-{z;5o)wFQQfDgH2+{yDC03=CQW?gC;aKoUCB1t8A-zqQx`zg|ojk8)S-y?~cakRbZ&4}|Ej*qt5%s}@LwJlEz ze-OalM<VPN&wqN z<}N7Nb+sUWZNZ2fy;jkQND%leS++l>94?A_;6bDtJ9v z!R(7`!K-Ff4lPVZ^Mr>TH|o@pgU{NmAwUVk;R&nX03%kjQWXE2>H+MuG2t?#rM3-7sb(dD@MkzL7^S2r*r>8@42V1J_mLR?+I2*Xg zM|@YsrfBfp&9tX^No=1gg6yz2VX@P;a5%$YaZU)R1b{Ulh+~2n8ok_gVbC#Uk6Mrs ze4FC}_0D~+p~mcNj~Hv?5UXfT-w!IL)kM~Iosl={M5qo3HkyN``wQ#8I?x`R%REp; zVLd}W;MPKxU*uEt*9c;+l3slA{?gOprm9ARtjpkcV1rnT1kurr!BVRJfHhO1r z2%z{&W5qI#x%yzE)IH|OW|K)(_}&(kg6rpbG%i48TDDPZr@VVArMj$lWU}dD?ZL%^ zDIlhP)u+&WlmiMTYXCLgC;M&e1qJ{Rj&ONK&h*;}Q|S!oZCXO0jRV4QVD6TzP;!GfOxrm%xL$pw0MT8ifij8(dAO#LFRZ);_l6h%EzAq>I-PCN zh;WNyOst2_C02Q>VIKNZ=`mrbq@2MPakB%jw8j&;jaeth>mpwAJ~iB4D`nIFLjm( zGKflCNY>LyccnA=2@W3hR3!&}ePOEKLnH4M0o{E)EZ?s&le45 zbCp34j$>&<W#ILXbo5jXssh`I9RUsYO;KT&Abq2Ti6)afQ2NR`- z?9xAcR34b;BVq1DNI>mcfTERt=<%o8O*l*06@~10(!R9UuJbLy(Jd^pWrpx%5FsrP zp@yAAdX?xf`yn;2j5?*wgj{?Q$QI}2JzIOpI1(Vc#`W-f82Vs&sd8Rmr-`$K4!Mq! zRzTGz6L3GlHbRYw%gWv{yC#rrW}dxrj(3Q&6;?VlWqCf3Up^p!fT^vMh?%adUO!Bs z3)qx5k-D|-4}2gG9IFHVK~W~_*g{Mdp#$0b@XJGiC~J~kj5MC*Wyp1nJ*4TkL=Hj<<$2pMlAPxmPS zJWvA)+-f0k*O)S^hB&>@G@T$rE`Ag{(@w$st*SuyC2O)J=3#HbY99KWa|&!pC#?!S zxA0Qq1LmTIEWZ=EIX?dhX3TRZz+_KlW0ry1l%d(f>Qy485b7b$eaYYMqO&OW8v_|*L@|M+4qi2;)CGZj1rcT6)Py+q zDkz6XJG`OUpNPq9`T8J4Vi@MZ8h1LcORD&qNgX8F=SzMZD!8qrO;o@;(z@@Su(qSRZzhw)B?bS zCNWUZdoMw5aSJuw#7$BtE3f$@3oQ9}w{(&QTO@iEAPMz>=;yTtAXLtp?Rp*osBcSM znW90(6@G-Ts*#g~K0v^oncK?7TxEV~KXh-83#s+lqeF4dFQ=G`>MLWs;CX@(?#y;4 zNA+z@9PFH-4Hxn7L>er48J!5pfjyFRWe0P#h4c?r!GcBtt8_-+ClKVbEAgG zyv?P9sf{^aL+qlEEDAzD=?8c9N`f?C6yL*&+usNelc?tDtmJ|Va(p?voRtDhx9m!& zzLGqTzF-yK-VKdTQC9*|WazfdbyYk3RV!#qN_af+(ULJwM|220<3FF7;~pzvMnML~ zoZ=MgsQ3Y#I99mFvX>K1ybhqkUOj6p2*E_?;NI`7#cYO`oc^>1y0Vu8$#gt!d3P%J zW`(q`=d|s-)FTOH+|VE`?Iq^@1exNn$-%Y=P^xBs*kfb*qj%=MD02Wsl_^-BArMoU zU8vFe6iHNZ(0xJkFty&eal5>-ZE1!Vz!w04L>Vlg0q8`pyXG7-~)EQBXzsM=r8v6#V3| z0?6t~U0z4xAxKS-2`bMOdOgdUSkr(jw11Zjo4#%XNJRQpstd(#JW^IPVZVA2(N_Y~Pt1xG!vy z6^dyQLC|Ut^6Y~5zUo`TpjsA=9QL#_)fJVg06a^;(19v%BRMw0PmnjTGprgGcC&O} z1*0$hSHnadxk9X}hQLTVy7`IQ!^>GH0@J8QZ3$$j=*iN_7J5mUI2MJOIn*Rg<$Za$ zDc$Wu2qx1aY=Ji(kKZWxzAMLPraWbXYIKPk(rXkcK<~0Spwzl_TdcWUN$hvy<{_N2 zy;S-A#v9VbQK)Hmd@Nuwv%vpxTn-)7V*#kz7oIY$e+etFRQT)hxBA*0cqHU}uL00P zIF0}njMvYsh2D~X?Z>H5iaQ85EiNIB1=g>*%ya6MQ1!fwvVU0|R!)ykwE?DR786ND z%bm$Xr#vpP)h}##ySkm zUQU}TqagJj>o#q6ondwi{730ESH`d90vl=Z2?bXLDmG6j~KW zA;Us~g1762ITZhyPp7}#mRzB;=GQ5_Ze6Y)|#t3mcYhU8n z(AXWlz7e=>By=_ayII_Ct{uxta&{#ZCh(0hGPtA`7JFGyDj6|ygY_kY(Yo{wD$wJl z12EN953kA73i_7~O=Njv$t?tSLpZ0(KR)(`jOF&I(LW2Z?&9U+A?nBW>$an|O8XFj zxin^OXCBXIjQ&}2#J|;jRno|cJ0=KEVAv$Cl#!zlwl@1xOaLaIJedtnL3z{5BDZWm z03EUtvQtFe2r(p{VB=n1oR3Z!`fE!hGP4%Lw_MiZz>pfJng1ZvR0u;sh4&00AW&nI zund4p06|AgPrvUuTW@O=F?hZq@)e)J?t4NJ<0Y})RZ(~Sat)m>U^m0LG@iPO0rJQu zRcwj(6k@rL{z1DKNi$X>687Ri{=lrn^Q1oPfsa(xdO)FC<+c~T<0cH;l(xCoWoQr8 zGVfoSrh!S8Ol&%Ipha6&9FxjL`$Xg;xFp@wE4(6eGU!LpD$otungx`64`~L0ikMD2 zp}QR%Pori+gwes0VK%AmS-I!V&SC_-Xez*pTmky`N&5nOJY#^h4XttOcA@ET5BER3 zT$i8hE&GFk34U!4N|;}t(RyT1AS`nh&&GW?PytI-6>Nq|!$dofpfLZIm_Ttt1`$13 z1rTK)etljbhtlK!;4SeDM>z`|yi|iYY>n&(73`DX)XXLl_=xuV3>LGXwcf2oG!i2= zx0ZWg4%#@G#jTXT;+`jDcOGCfgjJT{YI~2^-&8#a8^3#Hg zPlCkf1mD9mHriKnIQ{{^vsklw2iC8iDI@ia(Z}2^YDJ_WZ*d5aV14y<<50cI?hrVI zbCnbm6#|ODu|dlZr%T(&H8VmoIIQ7KKFT`HDG{wbP&YR)h^E%ZSJm%OGKN{=yg4>` z9M*rlC1vDeM>W`wpwlQiHg4L-K~;q#DjmDju{`4q@4B+TCY zSRo^9(#-VQQv%Ii`_abfTI?Xc`gmKqq^sS&(bK;G8Re5~>`V~<*){436zD|tj(b>APw!oz z0El?|qR8(-_oOE~8EB4aehSQ@eh%53M~fzg6|f#zjcgQJ^Y}KGk;BkU!~XeT zGKz#Ol());ggjZt=!i=}*^{CSs33TI3XhNA?c=>144ns8J8h&5heWZdjgsFh{}#<+ zJo`)Fb#NCM2Pug+qlSSzPpoQe(Br3;>64Dl-1(dq!x1h1GU*he9J%x`RFUzT8r9j zgAy}o$a&93+PQrTP+6#~v&3Gra%D$D5x4=`4fFOL9=EYu^8D^Nq2hJDBc}J^UhWZa zK2N%ayk^8OZH|-@Q(*Nio7N;9OL|8hdT7NMetH;8s+UB1A8z#4=IGoNdVzAoj)L$8 z@9a8UyRu4wO7DUa0@>zE>dVaBK(6@9rc+Mg#VS3An)YwFRQY!s4+gF*kB;Qov3Oj- zUgre*7%YR|;XP^>R`Pl0+AXWr32A##djzTEtV@z;oetlwW}s!b5OS~C{FTLKg^)qG zKa+%@q~(Nc{^Sk_-w5_CScA>=x)JrCiuzdEQ9^l&cz?qq3Wl_@o&+HhPci75lR$^A z{H{;ME^rT*b|#ZCpz^9$UwcyiLlQ0~eSq$wg+t@3DD+U|jEVrx0 zZOO3R0mIrNB0Xk5*$_u$VI%Q{GGL2B1Ou#5@AY$r>YE*3sYX@Wa+;$wSeDjF<#Ras~hK*r@sNFp3c4v$8rI@;+AEm?TTzGfN8U^QG3xY;B)m3eS-`zgS zVe@zURB)bk56g&&%;110gAujdk$o6-icDYvx?68$c5gFey@s_fcf43JFbVD`(Wd(Vlv>cRi}^KdYOpnlY{4Ba z6K%cOy)zQVdHX?BXZg1(%5E^3W&+;&!fJ9k2FF%~(R5nq7QVVRijzx)l{%}ykmF|a zjsGj_9e6Zhpe^09ZQHi_mTj}kw#_cv=(26wwr$(4ImykrlYH|dc2=?%9#B0sNo|N^ z5T;fCYE3~K%ZmP}XD^f7-@O_Pbs*tQZ!vx8BySLgOxf|cO99c=uo0WDk?SCC;j9Kb zvbqw<9Q!y!xw$G>San10YEM+2+_3qQvchkOeCMPv4PWyORg2FQk3(A1X}sYPB!L{) zYvXJd1r=&QG;)~@ay0)RNGyw@8LqK+*aYjTPg&g?9{D;9gR4F+l?E3_8B5y|+>p%% z(YCidLGU{qsJgO+tj>N^8mfNdB8YzYn>S7^2onE)0ojh@a_i09RFkmnY_^1Ba@P=e zO;#=8qKq+US1W709OicNp@mqpIuXM$#?4wqU|XlARqLaW>N`}Qar=7T$>cY$Dcdl5 ztOS{bb%|KZl(cKu-pKoP6^m!ch{vYna8M{(=pJ7TjoInhHejtR_ph#2qR;=PEpKR_ z#Zw)~>TrksZsx)BElXo-g8?JH#Nq^J&~?$(%^1#|aE9);A}hi1K@?N-D<6grW&ZJG z8Pi9JxnG1AQ1*-T2URjsMQRMdwLmD0naOd=_`|(^JOD`IOzG&pG>jv-k)Wx-q+c4l zt`^MltAlmi0{_~~*8ILppFH)w=+8SX)(2@)x-B?jb5a+jZw4OG`b(pabfVXVDkDsb zR9E8LjYo`qa)Er(tA@isPPjizrgq4UUD&c72A+Z7*`}#JN@sloHP%>XW5J$h%Zdfg ze#S{>hve$CrYJEFAoKw2vz%vGmk)C@* z8t_qA6Ko*4Vyx%t+OF6N6GL>T$X~nwx!)EnUunK_heiKH+FPvgD;qMR1jI30T2 zVaO3?uN{yUp$7#}2*{aRt9l379OD?&u)=8)Ftu`sOGt#m;2F%zA^wN5G}ES~$4%&< z@Dkvz{B1?hLP@Gidk%^#(y~gg@TpA~Y;j8+woH{&ocWx2DlP>4<&fZ6*9z*|lo5#v z4Rc>QpJEwg?xfMR;EKC+hHM)S6Ri*G4=0G}+UXv7X%vmj>TtK1tPo!F2e63nlh4<8 zn`1~XHArxrgd2Dw5&oi?RGe|s-u%!qm_LIuutmhyZL4X$zy*fmAElSm!O#$MBu&KU zyEU0krB*VDcfm(8Yl%hK_!hm4RCG+Fk;RHoOeJ3h?7NwOT7-C92?|TGbx1d$IzcHW zC<#Ok_`fAwV}?t#bpqEubA|SMo_=+Zff;}~stDW}NZKJ_U0_O`mRUqH((xy3d{2pO zo@5ge!u0mpIRP{Q)B-JylV06@eE;y)??@7Dz2BpQ>w4>dO zbZsY0TI%c4h$v@9NCIE0k(gc|8v!?g!JS&e85#40GH#?S6|Dlpb99A^-Pt{R|9l{J zXb^9pr|>Zu$OErt+Kih%_6AF*;i;t zjg+9=ql&;P%w9`=X5o`WKqU}T6Mv!$mow810A@?>N~yVCTz{{c(@KZriT%v5fE=^n zLGMw#0pufJ$Ph1GuIcK`%Eh-p1V#;HHof2VwBNV;e9(d5<`%%cFUP#s;g{okC^A2( zJ#`4`VEKmsl`NGDo@Z#%&oqJjTZG$n5K(>`w!XkT7WxG)&nj*}w((BkDB-(pSlv%g z3xh5MfIJj7{9+tHZQ#?-o4(UE`g9m);uSw2nUDnAuSu5j7!JSJx}+S(8GV3tPY@(mErY$+78^-= zbs4s zjGiaKt%BKrkY@0(gpC*A{^v|4eIOsCUK6$=JZ@)#@GB>Ozs^K8rf8CjwJ$@*ja!;k ziN_vGU>5F*hS|ND^Rw|{7mOec?31%FJ8E`Ab^Gg5E{$LBlp9NAr8ZYbx_u4$1+Jr` zx53ae96{kDc2c$Ro^h*TzA>UfLJ4P-UMs)&T0Lm-=Htd5KYG@mLpYMSceJJdwqK9sF#3?MywSt0TaA34jJn2iCj&p+6+Sb+wudvB^ zOxbu4@K*rQPJCoJWZ=jMI}Z&1VS#Wbe@^e%E8kMvr$gb>`=@d;s9dDLQf`vFal3GW zBUr#kK!b`!cg90ngx-FXc0{m>ZYAOD88OdXd}S@bEjpS%p_(OATQtGTh2eYan3FU@ z=KBQXAbY0v6a%0#P{R<_Py&3%F#D?R?n?bV7)+6useD7=ktfV5q86n1)z zYoFN1td?XDV_>pt5K8J=lx|{sZ+v`y>YyVWXu(NAgRVQtYAp~dlA4E(XlgslW>l_L zpxQxgcfu2KnV`jMV1{1?tdd^hL9|QWwoYXBXHZ8QSJAIr)(DW5=>d@eP*ExwpZGOi z;o=0Fy>!Rq2!2_OhiGLz!`&nzsYucIU6@vsF}qJA(;cj^j0lH+XiRBFC-%xb-}FCK z@8^MSi3FXk>xRNo$(+H&7dY5k_ybAB>FX(TFXQ@!jGpUebSv9#WgcP{?2=7f7@MKf zF~m4)XcAT^B*|FchUzLC>p2qG4j1k{E=oL6?o)0Ky_Jmv3G_h!uwI%bjgv}OT&ddP z0sIHp__c+A2OkHws6xRA!k>9ItPp^~tynvC4pf4{Uh&WfUZ)i+jI}@`KzhQ~b$^=V z0wutFAWtnKj(I0A=9zLix4SXXHIoo9eH`Ktr4}(QeCN?x@q<*Zr$)6_VzWc%To*-_ z-9^`{S*55;uA~rELBiJbyrmOZyI8n2AY@|oINy!)b?~4w%RhLMo>_}G0yw7KS^pjy zUHM_y9j$H@E8yc&t3)1*>~|wy%dxv^<-|#ip*X}~Q^JUK#sDxtY3%EAd>21&c6 zDdJiQ71m@eUfT6G$p}GXR8kMvEW6_zw`~xFn)SUU(^24i5cnIiV45rTMSbd2fyL{F zSfoywUW?l~DKfqgGrrK$lj-p}YE{E2)(*S|YsnooJ0;rpI7Rw3hN3zCe_=vaEI%z` zU#`3&78;XAM!}OQUyUCGdh3kq*kPRw*@x3QeoH*4gW{)Syw8Al%5+ulKzxw+r?QN-(3N>SrJfjhq z!h89opS>bf9oZXaek#c-0nJ7C{ueD!u?$jK!MYN7J9ONHhLuPy?{9oseXqT!RNXBY za!Fy_^d!H>+EP@m?%`vCZ}a=ggQJJWP_D~RBYHb0!q@@fr5-*TD_oQZahS_K*T?lT z7tkjEBc4WOh>GN-T_DtS1%72%zON25)O@-J*pBAtkj$>d^Tz0TDO<9K809X`Xrdm9AhuNo#0M!E zKh7jcfNOhA7m*v;tNXX!((T_enMXtA{Jw9Hfv;z1mG}t#}Dcv8BDYg#IFLKjF zD1RJd8yhI#9L-`E&oiFjD)bIZnIui6PL#IEUGWL;xC_trOQ!79IE8nb%KdaU*HeK0 zf3i^8MIeTeX1R(O@+OBz$%jO7#%;%m+jVl+OaX7PDw|hDsX|$Cmuq+EzTh|h*j_S#fVJ}v`d&_3x8zOEhpzHTu$$vNxoH%@Mav67tF6n>DxT?8SJYYXlpx zc3)QE_t@H_V0iM&M5u1&`A-Ol-ss=)1#MP1%)Dx{TL?@oqf*Xy%+w(_p}0}dYiH%N zaAb!W8ujNG(rYSmSngL(8-2yTwbdizA75WQP!^I|KR)v#!HA5SJ$NOepv}TpFgj=l zGdo(qq*xgq7K^%^n+MbwI)yDtUnwx<(_0k~>HmiPAPlg9$)XQE>F2R$$}Js6pPnDp z3DY7ujo6J%mF1qWr~67DpbNO+x@VdFbJEM*Y&GI0%JJVut?rEP0sv=OTi+aAO`i8< zzXM{ujPXQY>rRJXkYNCu5JT@GQ*o$(H=&&$M=bRV5b;d3aW`bzeCZ zl2z&A&hDY*!DWz9LlABOYwJ2Z??9$+OZB7Pa~vuiQ9v?ZIm;}#?u~r;nTEG^`-s7( zUqKv~v;2Osr9%6sS9DDBc?yub)^tnbok+E!{!F+vVJ~y#?@P%S*cJbSG9WM6B;Lzf zXtCUjCV_VH-Y*P#9XoT_KBJt!cd4>F!teQRm-nVHz)&Dt4Ngn=jVmso+A(f#d@~8e zTsxV+!GWd%c!qZ(ImZ%y6ht+Q5^8_kHf--{cam+hzh+Y6r zkSG=2%^{54pc}#U73e;9ydXe@{GDx~8uq{b(DB225;>kBZ?F)uSM8<%oqr{9@EeT3 zvVCab-_=?=0Tgp-mBvywqKPK&<66c@QQIDK5_OC(HQh~?`e)l$#zKRk^TjQDp8TAU z5oq!D_=xM00qtOwHO{_tHWI@jhCjJ}uaFR9uu>6))m%+f1utFDrbP7t(pn*S?)z;R zKZA>!dWPgG3nrkP=r&;0SVJ z0AUd6YqtLao20yamXo=El0^DNs{+?(*uihDebLzR&i*2s-V&hZkEG3mHXx>E@Z%F@ z0qukWLaO1%F-TrE{`bX0ThR*r?Rf`Q8<_$55DvAK$k^qp=p=_X z=@V0=elZEna@~lrsJJ>0@=801c)wLV5O6yHxLW2lr*lQ;FtNS{Kb)Lkm9I0L6+<(34Ezc_m#XcN-*Pej+S$R+cyfOfjw=t6v8 zBJ{I6Fmfg=?jv~`KvlAFd#ezSQEV_m!Ii4l1#0&m;b#D$R`mgT4J->xEl!)JnJM3# zEILHVv$*}96Ba`EK_Aro<~93nq3GGJ!&hvt{_j`Xfx#})C%*jY{Z#1Z)gW+Tt$nn?Ghw=* z#LbQ_g1kEQ-P*zuxSx?Af044R4Ym;Jo_YEsCYTLXM4k3NPp)^%SX9JAKR#m_i&4ks z)IexEa%Ls?>*_k!2LgHDH}cTza#SChRiko@rc~7xEQdU~IEp9J*rfx|PFi8xW_Ux3abpjzB7c;h*10|HNON7fwx{ zxc?N=A75s?(8P6vQN@?5ylrg>FOppbMNOGq3))+gF>St<@o9UaQ z&#ym0LwbVp-;qAa8TAm?QsNZ2DQM)6(_DO-Y45cUF~?OT!-lA2CMY>c)MHP^Enp!>dEj(EF7pJpjebq$qXTrI`nZY8k@+1BwSA`sFMBYw5{8eJNrl)Xh7u5#g z45E>r^7|tDwjiNt#A){Mpb|)d>VByt$Bt1bv@+rU<{@8#*0+=$Oy!i)|LGbPB<8>|mTACBs;0(a;-13NsK452O!W)SJ^{mjDyZcn-&OV z9eky?X%GR8d5x9YVrb!Ta3hlwHk$f*Q=@M$Fk(4(AI-x_61<7QK(+S}a{wOkd`jVp zgb8!(2u%Dl{C*uLrycDi=%`|Mr90%5N`f_D`OCDmS%x4^NTa#)3KhE+DWZe=YWK|e z0g2F^YPPE=(E7=O9E7Jc`;#jBbo-K!zU5PEqpW}Y&-^}fdjcNxT#>E2O9%{i5=xzx zXHC;~8!CsJY`!ZOk+tyIw@3;@AM=u3(LzSVinAee4 zGGFlVEFk@ETYLHN2&RzSAn?)=#3D$dEkv~%!L2yX{kStd?AdQmLq_5tr#gADxt!NH zuebgdQHs*V?sQ|03R-PlitWk)IkGR&Ppg|P^nf#yx+$_aMCl{X-1M-WN~L+)C-hc? zj6eD5hvAu9Lcq-*3DJV3_(wpPd`Mj8*_g*qb;9X7H{ET8lFA$9;IEO!xxQTiv zgR>m=uf6@7(7^&}rLhxx(g@}~3}8C@@&qNfETVr8BZHBW$ZURi=BJ0@hq-IX%P=U= zzsr~sQXm^~m!hVKgPyz8icG;DE-fLNq&TnUa}qb)6`?^ax1!tZjjd_$Fc^wRdEFRoS^a`-31?|411^>mE;FVH@B(#TEPdNh<7Vpy-Sk zO=2##MoRiUBHh55`OmI+QouJ@?waOsF&pq)tcy4owhe7_pp*x+)RFJ1TVsCw2ieDJ z2yVRuW)A||RkpK>%v#_q=5JM0H!(zV{e(-j_BdTpB>rpZtL>df1Z>P7TlH(S5zMIe zi0nZqv)Fk7UV-59BE^z2l_y1*qU>VyHc0L@Q^CgdG4k2u0a6Rvq|fK-(y$W_L2LT~u$bCn)0xg?082b6 z1!FXH>n8?I#9R3D59N@OuUD#7k4YmJ^#Y>MGJ8B6 zn5LenIY$MD*qnuK{hA^th%q*PfZQ%$ZU^NY6g^chopewKR2lA@iyTu24OClW=K6K* zx39JD@14ckng3A6lQA#i280N)mTtvpXH6F_s(DfZeKiWjkD@ry7w>Y1hG#i}5VS6H zxivqe`XGVp;PjWu$SL0rQxxk2)G(gSZ(J?-P{)gy3s_A*V!bTnim5=K0}st$&Qs#V zP8=Ld)^D3TyGv~%Co7JE_J*$ncaoyCyCY?mo8WFwTDMdmoKc+d6fG8iLXEwyfU-?SR8AP8%`CddB8cU-AFb`SE*ndeH5Jee4+Q z{T}{|^svSO>-rPvyW$^Q`>>=}h{nFHF~A>RF1l==vbWusXrZtBOQTRM7J?_~0|_<% zZ3EHbWp#B|y)NJ68vLiP{ z!0AAJ)X*U;81iSi+k=M0F-HC>vyAza+QBuaPqj2Uewa?!C@LxrD6v{<1yLF$`&V>- zbhuTW7M?}f74&Y!JL%HC)Vx!~A#vNM*C&5f!FjB8KnD7+p%iC4i>mLbs(4j=s2}Of zL&0jLsRAF_c~@dlNK3Q_$8GPwnTV)e3?!GsCj97Rz2+s**}G4M;0 zyF?+O!0IWrld@U**0`2OhtK;GMvLL9C^9${3V9qz18!1b#qxBnGo`DkHQvJfo) z*bpxHvxcsNf4Lxb)GrcY;{sS7JptfEkokn~s` zrqbt%q6eX6XZ*k7-x!V(o=enRTl*CMDg^s7mZYVkxTB%5+zlpJD*b# zUZY!*e^SNkg*`+)GpL$2+(VnwN$7ml<$8Z}cnLI;+AmGPl0B2gw5?QT@1E1*byC;kX`uiudOm{ z(=kDt61C3dTun;H#<4Fwm3}v)KXzzKOVI95JpX~g@Envf7Igj0Vn^2G_9*LM$@X^3 z&s$lQzAAVYU@BC z5i7vh^h6u1R>)d(szZuQsN^M9^8d538$o!6;~;jz;^2jz`)A#=@wrri;x z{OKyzm~JuiR}>+BCy%IO6il1G^wl+A1*z$UjiskF1;P@~8dsI93BY`O5I=^NiU0tR z=)Al6x>2Fb(_R(A45>=7LLkNyjgVfEuZXmTjw2;G&Dy*@#BK)kogK`m@6B50L(*$1 z0}P?wR0W_yN3>RT-2n3m>}nS%B$Yv;)JR{da~fQZcgfSW_+DiS_d4U`R;Hc*cYdJd zC57m}vC4Pym;V&Cz7-l9PEIc=8dbS!({6w;Be9*(_X?Z}cFm39$~87#GS{TX_Fmzg zhSG*c>dR}(2ePG4apT1&RwQxnge$00et3s<7pI{~JwC-Xif)vh6ld zo%S9Rygq*Hv7&0j7!s{pz|%esTc@$MD(cLlB*yJ)+z_KWQ8;^ZT4ch++3;jQ*As)o zcKMmdl+e{L*SrPB-8+y;zGs&2u#;OH)$XB5--;vcBK=cN0~7v|<8wc5&IdS~18yB# z#Ku5*yNRaTv;wU{rx$-fsE3xM=ycJjpi;SFcAJ4Z@~kQnTNDAYrsFhkhvVtP<98_N z@m6cTV|mkg3__(m-n6jIm*+v^wNTAIl-_>OCki3UN|rDfA|*DB5@1dDK6qviJpJ>P zK}TPgcjje_hBoNaO)2o|@=mCI=sWzRS$9l=F8&8c(}IGmw2D2I7y%Az=s`1LYC7bQ zIoaz_oRtUhZz&m7hd6~U1!lvXIchnLk8yLC0WnbYLn#~(VjoVSGe|S$_dz+De8cGQ z=B+-{cgQ~2J!mPP_!XsaiDXd$YicjVio1ulL{je^Ve?=|suCrAYya>a8jmSMKRUlt z6Nw%8QeYHwRdz3jXf;nFe^~bB4EUWh&$|VfwWa3FjG&ef(<#$i#NJ6s zZ}5UgGooUKm1(|p;#l)Qw<;~a5Z&qW%O)wfx4;Zn6zs~fCyVbzbpl{fU)->`BPW4J z2LbR-F^K8 zX0kA|1^r!#GLJ>rk?IxmhCD`|Y!Q7Q zxqQJ8lS08G+;K}mI!?+-vaMnPNapEI+6?@Mg-wHz*0AwcEHaZ|n84;rowZx|D+81; zkEFgmm=)bu4HDWycd7+t|6eJW;i^JyR|uaeHRvIbH-I~^v^QbqU6Fvk$K5Qen?ak(+2y78fC>4^g4BRq=mCWhGQqNUz7L>2cHAMCg zG79LgBomW2v?z$ADDgn7M0IV16Z@VT87|@#Ee2`~Nr1GcUCsq8a@?Heat%zk`t`1C zRnh8g;yTZt1wa0hs}XZO$^=jT+!K+Y0O2m~G?B$FHe9*JI5amlVtL@H)=lwSqp27L zv$U~rv?nK&xrP3 z%0rxX;(rxPj9vjVbNU7!$v>lVfWcLXhE* zz9A+ZY>H(!+lYk?*ygSi10a>>je0ZiDE`@vIgStXi(C5yE@a&v8jJwpZGUE-i#j@_aLg zZoR)!b<>30re)XNUfnL7-r#=QfPf{4R&wXBKP^ChSgseelb%s1!jzlCG@o-;R4ou= z(-T&TDcS7y-8E)?wOJq8z9``akvO%yl{TX~0;fBKg`AbxNVAtHFnk;;@@?oi*+V)` z^+7n;4L-5uPK?iR&YlT0qkEWP-d8hsB;~)P<7PIDv<%;$)K?G zPo}ku+m~ep0N5=+=n5(9Q-{6!G>!njIRh!G6T?x zQ~TrQ)ZMrA9K)@XzafPgvm~&{!tjbA1)YJc<||lK8z8pLyX1_fQ_``9%XpK6NB)Sw zyA!jtGZ3}JYlaW71ZoU91bxn9?#(_tZLx(WYY>tAs&8$JYMqNWGELgO#gB@Pon6!G zMVcsC{}c>(E=a`TgiV})_=X&}N<`_J7HS+OHxaIs=usWLCi}Cu4W2p6J%wn0?eGd1 z7n40S>7T_TfS;q6z0??n-?;>(Wjzydq?jKWk@>p%Bfpwcqm*u&AlIAn{|F6!v~r$g z>b$6QsImmyEekI@h#{f&j;o$SCBa9dwA@vplTS*YJ%t!wIBl9k#{#>U(_XOaI8Cpf_kUEO z^|@C5;_^!1^#)yEUtSuAdLu(fwVVRxh4p(H$5ly`~Pa`sO{(LV>!_#oTfH3}kl zpXGj%d!IK0B_rv#-?X8jrz3+&IPl%iC~pp6T=dMuTJ?$2pvJmQWCAz5dH|iM*s1CI z%ELqe&X98COY#=Hmu{51wSe z2H8ed_t}rE&|@E5UCjH9_Yk!klDgSBJqWa+vw@>K+1BPj8thveX>FjxG*f>xPyR;wI)KWF43H2e;_2K4nmfOKoJT0*}>k~ ztT7g>H!mj);%r=$6wLCSi>gV7$)~*wFLn-8P?yxQpA?dI-Db|3GmbsJXL1;7>Ea88 z5Tx?mVS485y@I8slK5Bl{3)}oAe|GpP>HYOhV0>DY*4m)&4Vc{-Wd-ZwcM>aIyZit zYzCN4;=xPFPU~BAM~FJXsftHhaCGM?VwVrPq}vpr#%KYK-25X@BReYoW&f|pM(Lxz zYbJaxb4U3=22w-gC3KSjW7mZ7^ecpX4>Wuci8CnwNg(?9&uvy{n=|K6mY(GAJ`r-7@{VIOZ|OOiGL5>s3P$hI~{vl7ca(kpd}8+mF@$rU=(Zk zmVXvF0R1Vs`F5S77_xtSFps@ow2fzpCsWgPHjMAhyw!+!PTw~Aa0~P(RCv{8X!O=A z+kY3ETpV8{mbdB`|22fJ-r&fZv|ylv0*N0m5DKUZRg@cR6Fh#<>Nk-G^))A&ppn}{ z!_=N=O4ax=u~7#Rn!(`M(`OEAJ5PA~1(n^cl$U6BVU83c5YWyu+P^D&jZsErN>c=c z1l2H9xUd(p#94kYUd?%|N||rDN|F*wvfk*rUfbi--;7ht1Z4FP{&iQfV-`kzF z4)AdjA2P&+(C26AGCB_^vl?2!%~_1p!yyJ;gM(x2NFwHXu2RY3umQ){x55%~96+so zo#o?NsK|i_Qn~wQQ+N}=ErA{JuIjm)h9}C%AJvYbp`IuDco}4DvuFB(9<1l-RX}_f6`H)b(^OJvAC8l67Ub)1{L znG8*f#sJ!2;qLZnw&vg^v|mpkEgSdzqquF_n*$_Kuz*5h(;1V8xyK?kFPS#Y99xlqf^c5 zMlYO_H}X=`D6Sh??N@$WO4t#=95P%R+=A9^!_gwrDD&6PSAhi2ze7v4F#83tg()p+ z`;eqq@8<94o_TDJASRRZh&Z0pF5Ig5z7&1iSU%=zaz%P0SAArcup9?Zo(gY^qe-7e z(TDy4?-A za|xl|!}F07HslNdgzS5KWmyuw+CJr7qLkd9XomH(X&#byF_N}>z`v|k&iIqa@>9dfgwX#MUf2$mZ~*JG1|%*F7V;LN>vz-UGnY82oh$PCOq|(MjG!@9DL$Y`hzF_u*W^ua^2AQ zPw9kk(R(P>OMbx7{=uenhPZNx>u z^VQ1Q4`Wph!Ky~rPpV?rxI1gLe#CvtWO=i;Jt04+m$N(lIuVnm?UC}%+OwiXGGq^F%X9A_oGPcCB7p(k{v@VhP zQ9KXW=RS4qIz1#~w{qwY!@Vez!fp4uXwEjq43NJ8x*7&oR4bS2M5I0 zzY`WEu6-BE<83F{{66OJfgL8SSe>@X7zH{sX&0i54PX#6F$#E z=bfM`!R2SVRB2rOrSd1U(l+CY%nyVA5jjt|?yHzQj44_oM@AGDBSUD>C3x0ZJ{^91 zF4(~ zo$XhHEeDW#J%?FPuti^csVcA12V7f5Hx?R>XsoqxJS~H+h<#H& zg|-t|c@Nip%OZ?&+w(P@#3w~#6`WsL#T;ayqWN%_> z3NbJ>ATS_rVrmLJJPI#NWo~D5XfYr;FgXe@Ol59obZ9alH8?OeISMaKWo~D5Xfq%% z3NK7$ZfA68AT>BMH#Z<4ARr(LFGgu>bY*fNFGg%(bY(pzH!jzDWua{%=}qHdmm|I!7Rcmb5HtnI9woB+~{0A)uzJ9;=J zCvykDzd8Zj9L&sJ0P5y0_O1X&3xLHxX-5xh2TOpYi@7;K&CvqrVeDf5kDRHwgR8kK zFPxOJJV1|H%G|-+#n=v@>}FzTZTg>SJsN5_;HC6(#_89-+TFgyi*6r0FD0{ z@c&^L+gsat{r_8!_FsX2rHn{GYCso9TXQXIvwybx|4|ebb@T-IFmST50~px;nUIr(iv_^V!{+xt>85Tj zF6Iuve}4-9jPjpn3+sQ3F*o-#H-%eWax~=&waLiN1lD5b4^N0|w~|0guz3u1j@m>x zpIXyuhnN^FQIX2R-CHpvz>DTR;Qpa>_kNS}-DuAg-#3v<_(=jsQ?q9Z$5rOV0jMNF z%@b1YgnPAeJ}gZnZt<}C625^RdOCyFWHw@`j|Hoz$9z`l#F{3Q>gBgGl7#EIy$!$J z4&*2S2q&b=C2RkI0qeXR+!DCxVb;zY`Qu+?7X%K!GW%C~J z=(34h{Gq8{gx3Pva*r}B1`Q{K(Ai|qfzf<4Ua&%B6K-uDRpS{-E|^|JB~d z8g-QsyLb0yRn(6_%$dKCaBwXfHilo1>U`Vcy!d1mAt17EiBHzBcc|RxxOej-<-6*s zfQVnx^bJ3bmq+|q!z`ZNcL6W!9vVBZiifod>9-YKII+~CnSF2; zYOcYiyFiA4HmcfnCKxq6L3wVDa2UIn>qF{fCto=62x2eu!X#8p+@CO!v>ZFl<69wJ z4hym@D1M1qSKz(%>xJWGb5=8J8xV=}ngM={gqgsOQ2m*L&)DZ1=w;D8lV7g^K??rQ z=D4+gh)hO#_*R@YS0E!7te5M#I-# zLjy;_;qc`|e)%Gx6;-9jIgKDHVEe#Ey&g}M`@m{C!a2AN)dK_qV9~FAM5ED-3q2&j zy6B%PKX!SebtvwNwbj~VmXg=JY($L?4K}+z*;P1|Jcoeklw8t*VEZUW%ukFH9$@M* zTrI<;sx)8%jqv*11EP(AC8L&pmZdHvXgzPw)A&S3*Ag$-3j#>tdQgY5tk}`s{GAx@ zV+>wO-i3@s631XY?gFN=7>w`nk%-JhF~|C3%qADPUVY{Ch9@mYj;62pveOpZU_21& zS4Gd_X;jUwM61*DLH7}3;m3Q0iGwkv?p3vCGu(9kH%qq(7gr?l>QZ`DaWCZ4({qO^tbEi{!mvyeOwt>J&9^N9@|#f6KGwwfGwSQh7tmvZjZO@7`?EX7}@ zUd}!6=bNcBWFp+AMVp2evC{Yka`m=MH09L_A1hspaZrVplYZK0>mXd+6{qM*qfdMK z_C|-aXCjY3OyVQt$zjz}-(Iq@C9vS+LR|K^UGKW>UR-17NzjR>_R*Ys`X0UCQX6o2 z9!1O%?t8%6{kZ;mbfFU4VQ@rM!o9m}P~;ISKu6F*={l=5_<38~(cG#iqh+MBc=?PC zN3_!{2h>M<0g>ZaYswI>)|^08QKEOlgROZlIoKgzDpV2wM(C>xHbvJg{)6daKF+PF z^_W!F_($|qWyzTQ!wZY8j4pyVypJ! zPG_K(a@ivMCatCge8gM5(Gm%X?n+IyiStRoaB{Cro2=F$)HnvT;;sh7g7jTO0+3c<&IF5O z^k%MwM2Q>Z_Cm=qlL|uGW~gA_c3$!d);wU}+N;T&R@vYP@Gdc2vKXenO%>)dqLFne zFwZ~~$^$LD{YsonEc0Sdl#V2a-fx*S@hDGsC8ot!e+ytp>@0G_AB-tamfgq5PvIz1 z3X3-~ghcrhFc0d%1B~`;NbL>z_2wMq!46cDqfA!Ag)C1FD zo0Ua?v_csHi@-Ler>(JbqZ_|h6v_3dtfA}_qQTwz?OhAV%NZJFYx^mt9KwOkeB4Oz z$ViF8FWgbM3EDEyhJ9+D)~t$z`eEJ4dENDs^UgakdLcB^q;6LFg=)09KdqO;a-nsx zTi7pJYC}IQ9Vlya%ij4Cub3n*;h*ZmqPjlv62=c@`io!ju4#?IN4W?&AH-{j7ZiNx=(hIh{{d*MoDme15YZ!rB3K`D}wIgZf3*B(dxb$ zN5r-1;mqKn5N6aEO?AyTqE$+3F=EZuM^=%q2($Qh7<4&*@{V+u!Hdrtj7WU4I4d|Z zb8&V_qrCG%r_3ARa%ft1OPtzaywoSSCeST}&h?|=s7&v!peK^)+R=6$Iq5xA5%+Ig zgN%;Mq*(YBZ=~d`!~wBMlH6Y#4LqWzM@syq;~PL%{LgePiJoJMDUUR9SUCO#Pzwh& z`p57e9uq}R1j`V_ic*V6V3P3dd{HzMVe=Ljn@^cTJ7_ZqeNv8f6`SnzQ_bYSQuk0m z@}Egku|<$SSr!Y+xyr4WzM^^B*e$yteTv@^C+fcP4L%^bVF7{xsP*DR>QXLXlLU&B z9w*&UL3hR2nk1!9-Hk1tCm9ap$&!4617;n-3>ucTF4j^vr*)uJiSNkRT$pWTyD|msjg6fvc)3Xrvm`->V@1q5-XkUE<_%Du&*%(TK>p@ zAYN0P-`WI9R>yf;iQM0|4;aIR)!JfAM)C4}6(v**7lC{S;ybuoA7=}=8Jolmtu4@@ z5fArgIib~WRh?ms&1Gw>f)`suX-Mb-qukq&f62o6nC>dzqXQ%b);wk3Y|BK%J><;tw^G$ zFwWAi`lqm6Qq_p4c@QvP&zu&zUNTb5%iorF*z%dzbT+mX?PXt*)#X z7iwiSh!M=Vq`%YOqQa)BS;h-pGs1x*>4x26$E68eHXi=rz8VT{@G zWwUZ$cV_b}^MdvlD2?IDb>WhaFq$TOwAwBdzW`6ntsBuwZY6TrOs?7Gc-6<>qy;^q zNhC`G=8Ctcrt0MbPWsCqMvPfma>j)?2d;O@vvSjY}0!} zoB3exDtD?8&bPUkdK`x5>wgB#Fee*hMU}h8Ulm@~RU;``LW)=qy4C|$8X7UlYNh($ z`|LD67NK4HwkjqRM~5tAc#-n!*~j9^q)2><#=%1YL#rrRpXN_^H1pcBl7{1=`WI}w zEWBNimhG;*(g6_}@$R3w;3p9mafSGKqhXnmT~cb&mm@8Qx07TFiEp zse6tIX!``t_~nr)lKUIh-JZwz+$kz+B0IXCgXS6)csX{SsX6eH?3YW&KEhwBPG!iQ z%=8Pc%{*xESv0|uX7N}wzf{JdRLzZ&upHby4c?ziKc_EPm#&j}KYepW@cfbTv{tfP zbjSDMPfO+Mv>D1>{+^E_g;@T=yk9=1ZRBm5JJM19ax_spXQ$3-zEhiyRPKF}f~#CD zOGsn*i4@=&LZUR{X=#}G6G={Gu-X$OFN}|?pPsUwUvqOb!q$_5YzpgVxmU2leBSi3 zFRz^G9`~#8?SdecfHb*@Tk*1tk_qKs@aYx>T9jzmugofSl03BS3C`#sj89z)254eg z5=x7;QXd!$L?~G@T~9cHblQV+W5%*5Uu6@JYPUzVF&POi?om17mGxQ`$YIUD_nqGu zCy|{cq(fTnAdFx|RTrS~a@xXvZnO%i$2_ z;%b$UCFc#&yzo_9yxZF!w5&>RWo`n;kMOY_OCnYjaVsgVS;UGX*;k9I`}G8?Qflgq zMWxqI^kH9~FW|)Je10|~su*VX_;F6M!sw3YiDvUE5;1=k9Fu86&9Ncq-N{9nO>uxe z{T!6!4eJs`@7}jSshR`%_RYywAp-x{Ffo8m4ZgDl8dbT1illMBRzfEH5gP)GiXu%z z)Do+TL1R*odTP3x1(p6`6K}b&26hw{I?uTfXrAn)h1Z!6wyw6N`xcWpW@QVm9)~AfI zUNKF#HnnOw9G8DVV&A4^n5geCP+(wi_tLlgA)|)J2k^szQIJ4a>2K0@rN(9c2qm}f zZ;htc6$y*fVd83*xUlq0s^4jj>Ex!=1LSEIi>OrILaa;l2%N0>v)F;o$!}X+ zot>|%-UVftq_7p|8gObi2+3u2aLrKIqH3)W==r>*(K|-tEC+NS9|lYif1mrH+Xm+! ze%z#a3+n00uPS|uKDzxG2(m3nhsKa*GHux3AP3|fZs&j$>qook8DtY)oeBsI4FbDN zzIdTu#dW6QD2VT)tZ6!~)>x}+62P-ZC0w--yl%dJeU>-`3*&rd*(e~LcDM8IZOWQu zRZmw+v_uA99#tQFsKYx|(?U4Y(971!o*P!Oy{UjdP$!y))H}bcT^`fI$W&&H>(2I= z&s^nrp8Zwv-)xZU8fWC2^v&dqLjZc)tv)#;?IfAF=(Iy8Iw!>#Nz^_XQ4)1WO@Tg_XlBoh29`arPXGM4)Oy^<= z_^Yxjddmrhm#4iN&xO(YDyyBM6s*^5y@38BsKpK+>4okPqBr^?5d)Xw3o6brKBv@= zX01wd$R71P(ps8z>ml4X8;E5PAA~>N5<7p$7+`y-+Lu>&vU=K;2>IH9>X^M{{$diTN*umVV8h8; zZ90AYan%)xGAB^{`&LLf(Fr?mEfsf;;ohwvHIDQ>6xDH!q=YIU9QNK|VLX7jIH!mx z+(`*sD7l*n9R!^puA!Mpv-yTwk*UP3!&zX$=O#lpq`%lF+k4uF^9i;3taqYiKKM4rjnr3}E zIbLf76X=kqt6RP|vvkqDyO~dF#1pi6*9D>n@om=EyNIaQ%(|iGjoO4DaloFoq36t{ z(C)*#L96(c=?dn)T^Fv_W%@L5%sPiSN-HiT`0UNOGQ zOTvq>}RAI`$fzn!(9#+LewJaig%W z1tx|9 z&r?)3t!emLkA;ah4OSb8Fo%X79}6P$x%*n`M@XgPa?is$tM>ff%Y}D*bBqD@AdD|3H8UX6_0UZ9oF%LOo-7+eyfKv5^yo zgVb2y{-TP?9kW}Q_+(|F77dTYmoi;5u{0gGYlQmLPI+{0y%katlXtBd6YJqmg0Ets zWh1N;?E(U@YcxI4hG~6r?~*kf>>%|A3f!jWr5_u{J3XoP_z2I8W#o)sIz%_|nLp&tBPX+vj_Omu%Rg^^ z3G(jl_rD=7D|<}&3SWXU62_Cz=<+IHk^Vsz9MlfL^~K}G1CPIBS2w6^%xpsN@XjrA z4EcnW>i}pk_5hGT!~XvC2J9Gsc?u&AxF96pDO=6;41a&9nd90|aRIx+9N&}Mb*PJu z$F0J}a=4ccR`ugkeAdBh8lSaK2~hiXEOp}W}Ut)I^X=UDm)C5VkvaSlHGv)v9ukLe{!BnUBvo_OUB9=t1a#IRTvLPxGQ-MH&niZ`*w~{?aL#e^a+il+Sq{BKyW zKZJWNx|u+CEV=Zk_~*Qd|Is;0$LXLTQ=%7&E-Q9OK=#aEyB!2>Kk};a4bq?gQ%Yo4 zei#r&LQNKb*YPKAgDlq5#4DbU(sa>G!su$7wV;;6bgvIPMPLS{Rwl(DoRn6rmPMy% z`gIjxo)iForj%#hpJ}L8VIzgsf``(Jyd)^%YQ5rj4kNW8qtfL5YbvYPUq%Jau6huG~>uc|4*3G3(ww#*oV|Z?^ zNQzScbRObIet2=~37?vgNdzLNLm(tpcx~#H3q&y| zxvXfjVu$4H64|}j8E8opw!mP0INgb)R?gDr;{iiyeT39)YdNvo(`u5ML&C3M-h!Du zk^;9|=G)sja8Ojfi?Ym>mU1J^c83UgAF+eQdkbb^^mg<_5#jvJ4PO|nToeN-?uE4% zJ&8McXDYJo3JbH+qnLV|pr541D*@O-`+SHQ`ncr$nsf#J@ssl5s|g3isZ-JnQOSYbMUOD-BRzc%872)8v~F}Bp_>J0%KVHgqV!X@ZetwA>Irlof?N)EWliqMD%TBA(u1&GCW+a>r&4YEl84ERdU;Odc z7jx3++l!+hteV2rgCZ{IZ>f+vldG1AeaTsd5LTI|KF^c>-tgLmnvpuMvbrtW68j2` z7H~!wdAU%pRNJ+fV@Zo2!HQZ?SIY;vAz}QR9v~l$a%;UeCi7#Kn<#~kCaL~DO)m3D z+rzUIC>fUA5?4Z!j7tojyok+)ge%P7HEqplI?!iaYZyPq)7^0o>Pgq`sp6SD;Y2t} zfT9IA^9Zj(0W*wKB9!)h#way+9FX+=wevWo$Yg{(l0uvSCRd-$MLVS|# zTL=tmgG z3D^{Ln8{=M3bF4=wyTnxDMDD&2_aNnN!&*Q@$0{42ORW-$_kjNY&RwD5+3{6IP+#P zhke4Ye)3n=m*pEdzS@7p--!`5*OJL--*&bCHk(ijmT+Rq;@FH|^g~?*IZEx7slDqI z2fXIvX1g_fpl7!*Sg?fG$j-HlO;`A+3$*xBF9_fnnYJT^$-2Jb{xp>+8)}pN>!C(G zjQD!E4>$M@_VUdzB~)hKD7(sxP`5s?Uu}&2qJ6|3RY!CP-Yyrkx*wCq=jCb|59y}^ z4sGT)nWl+@u*K2Wzu5A8elS*wHwxo-k=-PZb+O4a%gNs6S;qt{f^jK9DoAr`cT8wK zt;i0zn!%z-j)C-uh5AF)9wp`+4iVKABicZ7)@KTf%=gr(n!7c4);@&sjh@BHURxO@ zv2aTc^$UNi%kA!#C3k;OCoF;pxuv+)-bM3#X8}RJT*N_{ z0kmUpj5@_Iu?57vpk2~xcK^lQpr=T$g=rqdcvdASJ(P32Kt7roao5loJlc>chF?Md z2sQlbt^H2a>_TXl|Kd&{3$CD6tiSnU_gC{#i>15NpWBfYtrVWTO~XQlQQa=~T&tV2 zqg8cL$q#oZUBC<>N&c9NpT5#JP+{SnYw6gX@L3QCb}r#ZNZzsBbC(juFW3QvRhHYP zd~BP-L*C(3iZOawgEY&mHdXSEH3NeYv&=1NU5t8N%^&R0&A&X4cnt0xF1LO%+RkLJ z9i1Yj5xnb${9o5XzQaVMIr5yZrpQ9%3D-X(dORtqWI!7~&nxh59C?4`g$^c=a}y(2 zmU+xPw(k1tDQcuaLA+7JRDbS#iS-kZtHI63_G5DQ95+x-tN8fu!8>LcUZw9r%K2wv zWB(n_&s2|>qPiF^a$?(eK`rX52q3Q1_M6+=>b4X->GlPe#{!&gxe0q;Ic0GHHTB(# zej_nGFVGhn!-@#Z_pVt-gQYfQ6ZNxyE!W#qA-$aQVo+3V2^NX1_+#(}zZc=Xi;JxznOq|yAAZT5!?x!VHpjpSHouW9of`iFNigx{Sa`y2)P4Z2)fBuSAy1oP+!5?#L zB1!s$!_-2WY%yM25@nab;|x?pGfZS^7(rIEghFZrOfM4Y2`R!ErZRUL%;-z=CBbbqu8WNB|2tthc!Es=6KjW`i3g0fh>QHp%7mdMdSLQ5xjwb z(-TO7<@D=nnZsj>NBh#fNTtXii?i_e?*}!KF50!)NQEq<~325GgB&oJG z8wy4ZHwToPX_*eDwO|g)MJ|SZCuJ^|NQ0@!(Iz#ZR2HnaxlYEKRR+jZ2^lv+#~P(? z9+D}Ul-@q|ouT5MnUzNj4D#3|q|NUQcRVtTy;fkPC6-iR1G`Bz%To9IZz}lc{K$CM z7dUpO+}}T{+6|H_oyaD}r`$ZsL?5V5_VFUNkr9|WUKw_&4=%dGxJ~A$_f+Mu@w=xK zPQQf=I2F>6os|agqp48!6gEug(-Da;;q^N-a~PUBK>rvivl;BSnDC&*d0MB!Qv^P8 z>-xK~aZUdn#1aW%AYLn{dm0|efyvJwt__6P!_Rmz3%bDfT!<~38qRsuB#A9_jyxF5 z)i7|;U++ClGXuA&CSi13vc4^FxO6R^pGw9zLe<7Yl2;$l-qY>q*dIMWRzDKrm1KEb*&ts&U|M&Uhcz9f2cB%zQvr z>F`?0usRIoC8G}6+qKQi5RAu(k7J1~Tq7k#7Z00)U03?lYsnjb^?gutivhE5Uo4*% zkaxS$uJfYi8*#W9d~*#WBgpEXNW_BdM@u)vyZH2YrkzVxhd}{)$K~Jq9a|aQWq=4l zIgSbj6=H4c588%qVRxQO$b9z@;^A%L zcQ~%0cc>>*0Z~oGAbaiu<_E{;&rC|llk3g`6&?)FX0i1`_=ZKRusZ&GgA?bdAT->p zMQ3wJ9ie8R$4smX_;5c3AoKMc|JyVUa@!5h%lw>9DRM*q4X! zCt@XcHQLY*n92$p5Om;IW+BLq$bv{Qebvx8D5ndsDS!B`B=ZV2(P&R#ii0S6iLMDx z3tXqs0eAIc6(kV5^vgrnm&f7|Qovla{7nP8yQiBd)e4}%z7#O(TAOLIL08s5bSwu4 zx-9`QlQnZOS@%FVPu{n2@@KS5qPm+5;^=}yDzKT*$h?E9sw-3Hf+8e8OY@y|+0Ysaf`OJxRM3_)uD8$k+}R^%*{pKPjWa@{j- zjW#S^%6uct%LqyKgpz2mW|Rsbw2F0~%Z>Sk)>1*%8e%e4M>mxxd$$RGnk;NUbhKsG*0it@n7dXUMKe*TSTA&jgvPq`ck{p)S+Ko{9 zM{>AHxAbRM!_3H)HOWHBa}O&;3YbZjt+f)df>j^=2KOV=1nOveXW6cA4JP`E^CqP30)p(0WH`t{W=JQ-JXBe;0RY`zqX$LU95H zPpMLR-O{}ozhOB@AQKlLpwWYO(B#ktu|=CRhseBf3wC+2dVE#b;d8V+gx;NFeUE>J zk2eX{L{Gkbc_7an3R}4R&pWpEwmjCk;W1Ss{BneBuQuLV#%e2hF0RSl-o^Nr428}L zK+$%*KV7o)AcBNVxn4o{?t5@uMmZ}P+{bEJ&@l-*P<@UfHAtuM_SI4K*6NGdSER%T z4ezUP&RVm4!Ewi%U!r>mKWRDHks)*`##XH0W^~O|%KgLxYkercCgEx!%h@Co|6G7U z*DFS~S_nPw_EVgZCkjO+X+{}1;e^O{oNo~Z$D;nrcJZ!_xk+{roUT-vvknvWL*4l2 zZej;6<^9j6$>?9(+r4U4f)-_&jTJ3RAf~Me%YRkE{cNcdT=AGy}oxA#Y(N-@}l@?)4P@a4U*P2nCR4T zg@R|>g3m9s^T4pM`l?O8XU5DInUl&Dw)+_bY65R3$|+K{uaSxv`>(}>i({6PjWxc{ z@OgYcRr`$autn!|e`~#E1d7^Oc~Tak($+hwA}3vUzLnX9m*=el-gV~K4 z5<0!|d>`SWPtEnS9kN~F1JL+Em3w7|frZsLa^ zD>(4k$wZaLYTWF32Pnb1j(8Y->H_DHE6|J?7L_ssn%~>n2pTD3dZ!8NAEoZGL&L+V zEhn_t6>&6wkQ;yT7x>iCHh(gc23Z0Q5w7V&11^LiUZGCb^TZjQbK$y-i65_-z1o4J zWk7NNvsgkXw+nGE@HPzm9;t}eEOv5*@32I82dzEI^|pVkf}0W@hf!mwswv4slvpa^ zbcy(LstB0@d2bB#LVqbGRe;$vN&WC$RRBytv%lv~SamySsODearS~trawT_IqHvp> zN)&Y|eMF?ANVJ&4{e5W_j?(=4!mo{b*=HV>CzY z`{lJaz|4h`%Bd_`CHz*Eg&_jfD9%AeB`HG;ca1ssy8RYRR?FUU?YTJid%w$L03im< z9!N#K%e>L})lc^l?#e(i*ps8?05W^($u|-3O3u%K!MVB!6Ja%oAIG8)t{gyo2v)MH zy0U*R4_F)8vm+r}Z%oG6HBO=;eh}HEj2H3<$un}}ec$bcut4TFHOt?K=@GcmUbQ}dy3c?b@_Wy*H`@ImmK8!gTLM!GB4UgNa>7#||+;0^*i0*<-t7j9m1 z>pk6kg(X=aZm8Mf*}c!d3&$A}+j>BqG@|?#L;UN`eW36veIc1^OoVjf{mXU3o^Z6@ zK5VQ;*RFCALH{*kLBG>hO+Jr4E}z%??``2(Y0zQN&aQL>!7ij$*{;(^?ra zxBq&W=(-Pi7PK+GWOVe|&+b#dq|AI-eE`CJI(tr+9o=Q6BEfeL_sL**gfzE;QMIW> z%PL_eSde4h2;nR3@4+$j#PpkGU4@=v550DJ?%UcyT!o*hD!pP~eooUxqOFrURM+OI zO)68ucHqbLfq*UP2dI4~zZ~+`fNbCI`_DUsJ12WD3~4`X&LU}frfSbNtA#-+^>V=_ z?4DO;K!q8!L)&?$(Eq#+j+|VwN>~?-?*tXLZsT_-=5mD8!6--BojsidI5eKCDP~Kf zuS7=kz>wUr%rPpB;OF0&bzM!RoiW3uEtc)&GZMUIUhi!lEVvcqVt|o)2pu<%p1UX_ z86Bkq+ezV#gJ`8r{1YRU)OnPuxU&s(JA0*G2d&QYj?$eP$ds;3VSI(N)WAc+I>qHF~k?5Iw4UyEjE9y$&M^0y*HZ;RprGJ@~zBD)+U9WiKS7AA%2-MWr+tTzlP=bIC_I+sr1)vB3JU2gKobN`v`nI9q6l> z!@fcb24~qKB(CR#6vq-mzCe?;9`B<`vc{S5c#?n;QCWG?$n9;I#xtJkBsk)xGitFq z0d|orF{xU*3psf>W+p43EwELUzMm^1FOn1^y7opEGkXFI7)FVLh)hadtG1NdOk87# zaoy`@WS2+wa@;AEuBxf-a_(CK*#SAEzoUNK1v~q<1H!nUnO*1&`l+=*dl^69J#clq z?dQ#Y&HM(v-s`?vzz+24)%L68l@%J<t#C=DC6X=^1Zt^%ke3uq^iW$e&nej^a z%DQ>!v$fzd;o?1un5Kb_vjP!K{`CkFd^CU-t$HKRvO9!8z#rTO-Lt1f%7cY_c-AqB zIk28Saun^=!ie7VQv1F`Wm2r!uS#g)7bm=}AZ~&Tal30lrw7y%eBT1p zl>8zFO|cLE90gM5;xf}Fs1|?V&!qPjB8v*B1{cD3Qmgdpijj5U#2kybshVMqqec-c z#*vYl5~lghv^K@Xk;xM_SGG#>Ll_5?Yv6%7I0&CBz=9 z$Z05=21sQ-;)h8Y@(%~$tm}OQ%fSF(slQ=<3w7VaK@`!B)jik3dO5KZBpe~uzUBPM zqt(kbm9O>O67Q-)V zt5`VpJovtl-AJ3_F&h4Htz@MqJhTo5H5_@i`jt)F6p;^&ImXwAZdf#BWoR96K)EcAi@Kwi+MK#JrR2GIE>We3On9Rzykq%lqkkz(+<* zpVM0Gf|cJ7>&}EJ-ECwsBiuN;q&aw)<;*AeYC^FvWHYHTO&CLl5PgKBh5ENk%AQE8 zX?XxOA}Of}UoW5q6r;lMm@v9f;x}toyKp%B;!CpeA=4L8Y_@+)g68c|U=O0oJI@-O z@CCDWi&dRsHrKqQEblbs4#EFHOy6YwKpP#-Sg1hdi0(Jl+*!)8R|6Lik+HbQC z{WNlhd)pv=6pdfbrbq>|YtA=Ypch6O41X`L#Vl?Qk7*5nGP47lLzP$Cb!5Bw`m!ln z28PON$F5`q$LUYV?%RTggX;>%+|PMn+Zvm=P`Eo?sJw54?c8>|%_m%xRRFa^XM*4= zw$mCB1Iy#TyAyA6(0?cmJl^c~BB5@_<29lvxT)aai)ycTP7wiW8-MHJ$q(&2+-P;a zQ!VTsZuAT?vyqfxEffXfItug)_<801gVF~+JTKvt;SUGJ=%gdzY*%?>7!#R(W*x)D z2}cxdLm#n7We^uc2}e)|@ZL{G2gcCssd-^U*m+wbw5CHR#yv$lr@@32ug}0Hk{y@a z5VL^dZO6=%PL^=AfU5iGsra&2t9KOq9x@>`#q5C=|HCrfz2J;35$MJDk~~Dkj4|Ap z_#>^?Rq5<=_K$ItmQ+J<0-a$z8ZG63eSk3U<`4SxK7Q!pdej+fy;eWA62sNs!C^;B zayWmhANqPKycvr83GVOc7_=ZpbSUG?Gmw3l4294@wafXUhQ=-76qpNTcigvbrPyUxzi z3K%%8y|&(^xarmF#lXM=xvVx50Tz4bGMqbb#=dTk%c@A*w9^|)9Gl`S6Zpd+%h6Wp z2F6z`JHEs26B*sSi1qhWrP>isH8FN)aX%39pMUYCv$c>mO3YgCf%GPS!nhVSU`WJX zJy%(pO0mlnyISGpmcHB;k7DqbsZ2zfy*e|9N+Hju!roWMdx8UGG~`Nkx43t)z^y!@ zH2i0B7?^j-rf2=6O5QHYUefwvB7x`E-_bREK;nWT>{DEwp{)#PIe5E$^ii5{-&4fI zWCr5QCAco4Wl1Od9=C6{l<<t@JIE|yTExk@Ws%q9OLt2!d4ccD;xlkAkCeF5oc;1DFlA< zcs3}CNEO)A-G6??ER%ze7wOHtAzJBVF_FI#GZRdb#d@1nii#Qx;`3wBSl^y(l62IG z*+mU$Jw|A4(%cGX$)`&07L-YSK5#7Qke_4UL zdi(qM=IC%@jl1`#>SyK)x4YnrYr>mL^8R8a%$ZAl&Sl!R%Y6C1yo?X z54zbNsPD;$#1knLjd~tw3cW^$f2yCofFXb65phAhvGCemnBMpa^R(kOcyaG)#dLDp z2?#+9d*;puPxZUNQ@-VUDha7&vgHrU+NZhe+osA`?PE&8FB@kq>KM&pWP*$EV7Wy0 zfJ)UptdY-CviM!$|IO#iyk6-7VWVSz%;X_cf+ZApp-GZV_z^(bOQ%64iV@%`3&;i zrK^-09aQ2jtp*reUjLCo@eW{JjlL{LvQ(8LZ%LOQJ3&1$yA#!8GV#09Yse!-p1Lmc zbhGsVDOB}t4u6MQ_$dSTePmGow(d=FBZ(~>U(`|Lro2Y_+#V!-7H~AYQ5qka)^H+F z=MrH^EE>m06b7>WIt1Vy`|<{(vOabPs;ss*D&~FOVgIyc+i%tSbDiXdZg&z&wtWwk zA7;5rTAZ;_*&6meM@?%-1heAV^RW2!BfXgOhlAT38?BRH2y48^wMUEQpjX5&cS6 zap$?6`=-%)ojWFM{Oh@?d!kkRdZZ@KI7yZHfELb1S$Ig3&lJN}l8@LtS@JC~N1D4$ z0qoKI!mKs~yg(OA*`y8)#o35sX%hY^mq%?uFaL*sif@ffNep`1FK0R{lL~jY9_)AR zHAvFB0&W{ZiKLHYHL30{qn@$4FMr4s?7}n)Fp4BF1C;}DDv3$*FW=RY0P;}x48jJV zF63nR_G~Dkr=JwYK1w+%6)S=9I^B|XT{Y_sS-l3!koUyq`SSLe&#k6P701*u5Etmg zHLtvNnF}K+7^1xTdW~k~SWst+M`;@pD$t1Wj3ZHQtr(*0aNN%nu&50d4c6{pUs*C*_m>+dm+QB0)H>Sd@wKjoLo-s& zi6*)I2^d>yt@BuQ%aO1k;KN>p)`Uvb;;%kHg#T%vwrfvO*Hr|C(Vm6Ob1e#DnY5gy zbQ&@6_=l=x4JVAcZ_yOAYOVaHgMH+t3C7df*nx98IQWqOYBs1HmarGXk+A79f(r$2 zDo3{O!y}qKoHx(VYv!ewePfh!w(y-oGh!~-^Jkh{rW5TU0tQ>f zm)DO5P)s1{^h?U`FyhPZ8e@3-YnG}^8501jv8W{jT6{>Opb=!ehNXHcrbd7Xqde?P z5`#27GUAaL*HQql%bg~>`r#}Cw`ox9-3NUtPd22o5%YhzI0xoT7@*6>wl%SB+qP}n zw(VqM+xEnKV%xTz?6fmeFRe270Gs^I(vc@tkIdf$ zYq`nG!uzep7fU)A(&Uey5t^E(0abtbpsY5RaX)i|9VOIk2GSZ`WVH|V6(L6)X(2Gg zSS&a@rE49CIsSC7{NV^O(BT6+Ub1XghpVY+9&WjzK zgx_cJWW`@ww2)!dn-k!8YASiW2Vwe;dxB-^3Gj%2vrj^%N+hRc+}@w%G=lkLD~KKX z&_GmjZ|7bNRH64LqP66;8!6f@`(a?i%|K6};Og<8(KY(U&IKs?@kX0iiS{^t`;;&m z=k=!bHwN#N9SSt;^@qLc{(aZ>NpQ;=aS#CY#DS?|2OrZQk&SMXp+Dgneh6j{1Hsw1 ziA`(XoiZXNU z3|-eKwh*(|#s&?CHy?FuePH!#IMhlD7jU5(tJo-p2cmkHn_GAWvFe(LUuj+l;Td$a z_U~V}X|`OMUasq;mjBBp>hi!+<1{<_Usj*ilXeck>AQ<@lA7v^ zQWeuy%ix3hGPve6^Y+7Kfb909p>nF9zVx$i1PbGsn#%y@TqSyod(qQRwKXdl(iEBj zN_6ab$U53MxiK!{osw+B8`D;%^sp^^&3OM4zjz1)bZduUnQP-@$E*k@s%!=`@gkzE z94&0uC}FLUWHMGWZvAj`2LU5*STi@=tWGihMU}n{N&4SK??zws6%RNPQQ>0xmN)L; ze~E8bkZl6bPivGq3#N_;o_^o2=Kd?(&X)K!4U5^$P|BA{ku(9lTZY3gH=N@e`;+4G z`QX6$VM`7hk&LXb!HOMaLLul{rQ|U4sHEIJr)X7wAdNl1Sd!pvBR7&deO6&*t38lB zw(1Kb{hms}+{{Ex@A%}%^E2s6eV(-k%c(#gm!CB~Zh?Yk|8xte?cJavw?(Z_ant=aWI z&SXj1hCA8>K|b@8uB`U}j}EkF`q0(~n=34J(#7ssjC|0MX=zzqG7~!rTxd0_>iUx|p!`Q)P>FE4X=2fNw%3Pu4{RCouvsbj?S()sI1foI@mDa zUr)#H_qAPRRP1t93d}02@N}0KQwq9oYzLI0PhY#7KnYS@Wk6x}2&%<(cRhX#ZaOyE z{Klfsr?wX)tK$P(y?Nx z?<^PE7j$ROVo9h^gGf9JhIqYj!7(&A9|_`Ugv(!L`T8Wy2*CK{>VkT#{AM<)2IV!* z0m|l7xo0CI*M~uh7Tw02D*&xe+Z|Ss>n_Qx zYn2xod;l|2G^It>Nbu$XmV>GZEo0BPWTqH)YLyYO32e|!qeM|2kBY9U*b#>!Gk?Cg zw;j@lX3tR6n+X_7cDZkPKRX$da@Y5SGoXVNPp z3+6e4dsKfxG7c~XnSUtb+|P41caf%mf+2wyM|+LWIUGsptoVAD7W=By7kqe0i8bdE z%B|6^(H#7V0Kf;@!rD1Rr6K-p@y0ew6yFN^E8a>3a`A7( zGW~lk^ol=w_z%Zv_o~bu*tVh$?trd|Jre&)BWt}LXWOp!Vk>ITXysnR6oWR}Gus~! zhikG~zfD4pW<*eJQf&`16eBNI^7$nLFH&<48s$l?YmWW9oO^;5mI2aZ8j3s7-qz!B zkZ)#ZH5ipRnZ7Wn3blk`a=?Z1++OO-Dr7KZ0=ZTUW@8al8WNS2mnM63y^bc4s{IY6 zJC`g+n$}nxXNn&hYcLr_XtBW!sr^z-SZkaeyUFdolU=m$j_C3nMttS4$kk;CvVx}o zs$3rw81%R$DZ=vQLreI)SUYmVM)y^ zNMYPN$X#dz7JA4f2cWE-WPk~{Pb(h$hG0`fOg3HkaAVY{obw5Un!4L3eVV*}acOhV z-=lXlhE-*FEkwf}Csd&WYke^%J7kBfdrmqSXA)w48gM%iwJ% zFE@JC$pNSV)jcT>03iX$Mk{5O&`=zv#IC_TlxI3$I1bAQ0 zLLZxiiXkXOK&u4&-420vU9`W0MC>ga&s7qC|< zIz)E&seMPSLGwp7SX}T8#Av>1R_T`Wh8Jh8pdonC4i+RJQx^LpBFUlzeVxSS#PL8@ z%C$mD1K4S$kP<^q%>ZQeRubCO_^pyhDZ&?*%O)>A_XSWEyZAb;uWk%l@Fc_eqV~G^ z%)8eMvV}}g)+phO#j0U*ueC~&uunCvqV2{nkfo%(f4z3LI_Be13=Hr#N7BBk&Cr*QlHwF!dR@kR1SJ$pSC%S9cfg4(LPsc*U0YE2ZWmlFd$o z%)KqOj34VgUR)vk;o2$~q`+8WfuA7-NY6psvRx-5+rl+7=6a#9JnQ174w_KX-ftgC zJ#*k_EZhnUX|Mwx<@s6^Re#L`YgkBYDY{b;^M?HMR0=O;%BM@)&ft@XEc_{p9^Tm~ zN9P7Ubks<7pK7*-XHoX}{P+oo99ZV4G$o`fwXI&_t;~Oy!!c-+h%?g@x@f*&=QZ>y zx`}|JWZ=O3+Hbu&&azEK1BsU}z11j+P$pnr=$fZaObkMJwgtnAW^6C>+K|~~)Cu}1 zWK$UYR5qc&GN6#5Ezk?nitVq|ho6-H%%s1v2DTXYE(E<|mp!!bVxOmxJ`p`Bz}Gs( zz~G05>^f(u=!2OrSDv@Df*7pB#2|@9-Esyxs58n{>Ey+tQ3bV(kB^%Kiyw|iPFdnA z!2Q4lM%#F=W_&1s*1b!q&hko}s|+id$`7 z7pAr+3A75HTOPjV{sASuc7;Qm$-=AZPG|WHZo?b|&ShO&26q5Rwck=nHhCUJp%gU8 zYC0?8Y;N21>C7|T=geTYb`*>`UntZ8(RBAjDJ6D(a9W%N8wwDJ3hRdPNn4EL0- z597t!iY>QLAAY`t7UYTQ9Q@Z&k%iD&fw!(Gbo(7;WE?IRoxIeRC*XnHb~_73Ed@|N zmHICc!?UAYRE^|oLJxd)Xv9oi$J4KJh#>G*Y_Yg~a}dZdj22g_AgfdGoBuzmIj z+MTke9B*OH_;npf5X6N(GA+4$puvexc5e5CPH77k*$=(+{Xvr{Wa($G;R*?%%Sh#R z+kCjBRt+qKAiYUt%R=bwlcqKTGurV2644InX!Ww&Op}+U6 zty%#BAb(5^XB&oHttORENP%om;^k8bCn?~SH!9c$pKGNpt>=P5o{S^E6k2%+5tl{P zqaT{7z2$mcT~I0UgXWyqsr!8}x|TTDDgiYh%)V%pOP)>Bg+Tqg-z#riFp!m^XqkSk zKQ={1>9C5wN~abQE5$=^!O-xH>b(FdYSPLclnLeD6@rH_RQYd-au|A4Og4oMn9ybi z$2x*Z71#N})r1qd4p>ie9EO}|U`|jf@#|Hi=i6J6;S^p4V;s_k)}}Qi@eXRC@WeUz z$CxmG@0lp=0D!A6AJipU=j@~1LwzRCT4wU~&qkQfE*jhV!8W2wh$2F>*cGoPGfNDs zClFoX^`9$G^1(5I;I)gK8eQ=Q6`)ER)X-i3L>Aau;HMG znB8bBc&SVzU|A+f450n^O*B)-Zd&c3mLvPr`R7qIN*#z(6$~Mv-1Ryf@ z%=YID?P3z1akvhkqQ3;QbNyTD+FuFz;$7YY3T)m~@5^xuDKm*4fBGIvHo(f*tZ-Dp zk7G>EW%m!Q!>X7Dnz;Dpb>IvH1)plE8#-v- zKl>QV-wEBuB?Zq+k|xTih{Z>yIiHs1%!f*b<&>p2?GvV0KeRdS1oRxu;hGM=$(Xlc zA_~jQ>_9(4i>HV= zTEQ_7V#7L&p!{($rNq5J6=aP+4oAD@HWS&;=GP=guK*78xrqM98h;xpwg@07hM#1{ zvvH_!0=$EMUKoOI4EyT43q+mc+hIPPApJ-fjNF!Ua%(73>S#t8PCL6|1)5sRfan4R(#?nuA5CK=Y^UUjdS^U^stC zfNOg`imSY#^EsA%U@a;{;9rLWy&UjF|H~NB0X7i#R1<4o58LWOeI)`>UP*2K%d+h5 zi-H~&-B^P}NmJUWIRe#PNlRvMx-fqS7NK$Xen`7Gk{N_NCny6^hHDU(#wvHEu4$V| zgD5xCN??}$+YG6X(&9n&v40+yJ2SFuqg6h-X%ZrB!-q=E8M;10WRz#;QVfTkW)f${Q&00JK=O&HBw3t6_-^QHy3+6L6Or|6;$^slWV=?>@}cO z!kRVvpELt@1B>Q5gwnqt>m-k<`1Z}UjctIw1{yTD78e{6ft@TmE>V_%lNUOCmFZq3 zHq{q>y1$){;ozlsV#J71X8(o?i8>Os+&m@>PS;NzdznK^LGn}zdo59{$wC6{<9H?>A7cI@jg zw|O!LExn?zMuqIHF?d%VF~}1(1K36KnuP2ouQNdH8UtiaGy47_h=*b&6>Tk7L)@Hg zONK2ON_Vh`pj$}e4_AJ~eS%Ac?+-&HX5Vs)i#<&}G~M%AoYJW4I10@zx!);1_OF5i zBn!X3V9uR89{BFFs-PElweb)6LTUX6CQ3EKld#1;>w-jR>pKqHBbF{EBxy^%E~MwHI|)&4kC+ute?JB&V|vx472}Y`|1x5YOU{iDqvPKF}-^ zq^f@S?f^*Fl;jWzFP_;%2N7Py{+E7936yssZk0!s#o&)qlcC(g9z7)%lsBlP_H&(? z%*v5K?1EFXGbl9-GnE&tCsWZ4!@s|}O{k2w7Nv2pmiVPxm|)OYWRvNaDN^YWd>A;`Ie>>T! ziJ~a&4eB?hD+>V}iUbPr9>KpXw-(qo;bV?<)(-tDgu2MM&(6qaQ_{KU+Xm{p3ZM7+ z>#Ttm5*}gJye|?urxSV8I&YQI(J^iX(jJ7kkQerKG(?suOK12)nL}nl2|OZ)df$&1 z<_tAmWa633Y`8VKuZaSdk|EKFJ=at|UlO^|D za(;|3cgP&feglbBHB=m8`J@;6R*oL=BoLa#EvAth&evo&@_kU;lE}P>Z|1mo>=b-BFUUH>cHo!o z476;UDD-gQ%%Ijg4qlF-p8Hc2Q-Q8WJ2FA=uD{Dr2-ojBzDxc!KtXZmX*thao$8LoXpCBzkm-&0@v^Z76zz^{cAs|Lca)e5ftTdIOx zu-|s8X8cceto9UOFgy-Qmce*n@KrM+t$ieO#o?VYDYsT!|H}Gs*yB1BU)QeM?5oYS zC=Zgr7E14-(TBw(!Sv|S3AT!t!~L#d29SUFXt%Do#p^ov&=;}u!|Ol228x;G+fSdAW@w1K`u*OOlO9Pp#{Q(c z&ALWUvKs24n(a~YQGx~tM~~sSujyhy0pkm2#7NrX@h{n4vbqJEX&R&Vwh@zTLVBHY z)XVg-!H_TzUb-G)u*v8A1kGhO#E+O@a_C~)X2QHY1QB0N^)rpM*B>CV%3ozC#ga|p z=fKhCY$?NQWkgmuB&HWU=1@73cY@;b+Q?OJ?PEBzV|CAMvrQElE~Q19S`{#ek!?mUO&^v6;->ah<+@$ewPw(%&%V)LakWu8-%OyWxKY#QV4>}1 zPM*6O2q%FU2OFa?Cz0A@BzU)e1hnW!jA+1Wi!D!e0geu1&p0JX3sUDLLDz=GgS4kG zDhe-z481_gGoRqv_GCI)>-Gb41~U|DqP2G2&DK4}IqDXYN^6Co!!Rz5UUU^zs-))m zr)DIuLF#h49)jbnAGkhsSq zC8gb80)(Tb9W;tap43yiKXHQR1MdBTzBoiGGDpqVlA}KOmoh^bD>n|% zdfVQ7@bI1w&EG@vddV}Gk3EL(qD(@H!$1SeEzKDOEqPwx4ajC|AN=npmg!|XDM z1?B$cf#FQPYCzRyZM?XoPu3vZC!_Zy81+{yA#mlqOQj`x7cIw7vbo3?f_4@_>2?AL zthoPy4g)P?A#szun9|q|5)x9u;CKapjjzy)36b{m#YgvQ*x0jxjiXTVH(Oy^0}nc31;#zpPT)cWqA(&_Qv?6_2x2kRlN7?6%zzelWK>KRj`-FKuM&OS8qrk;hJkR_@-cy z7y8^rlky|Y7P23RdsXw1ThOhwSG}L+sr1uB@}h>C+1BsJoYd}=Qjgc#Vwu1cB~Di& zw6^+w)=gH{S9cAbCkxs5WFIVtG8y?0zVfQ|`au7ofQP383JI3x-mhBK@s&7au@dtO zO{MexhgE}xL{^{T0i-v9N6n5yncFc_)7ejfRL8#HoEumGYFIrGr z-LHeCA0lHyn!*GPzE5}CZyb+AqD(@%&Fe5{>0=IZ&=0%Ug1wF_RTHZ0N`21ix(fp4JB7%a8G-0aBueEZ zR^RE!a!yV;$O)T%aLk|QMplanta*54Gs6my<+xg zIrkncbjuS})(h}r=44j|>iJ8RFy`B3qtd{F++0V=oMA=q zo>EhuCT-p6BYIruyutqR!~nH<_a+umAik9(&O{i}`%BUH1p_$+;1<<(=k>|_iFw^= zXkn1BvnFmCyGyL(ibMnM9#dEX;4e}22mPW}+wO`W@!8F#y@C|mQ);ye7tXydQv$stCXA*1b~xf;af{WaNo2hVrTixtp9 z=^=ONJ9yVmp7>f2#D0q^NAl0z>3!l(aym6_k#EpSZRmF!`|4tjfO+-P<~WI*g5yPL$&Q@NG=g3F(;LBC^HtjeFWZXE};6>-Q` z*>yH_0t14{db2NyYnObDeWSSWoY<<9Ht3#~9&jFW44*R!^s_mRem~~fzD3^p7e}!C z(ws}h`CsOy=dM*t1;YDBNK2*?sIIuz1uCcbHA;)jdjkM5aj~I^%S7e&5M)_w{FLSp zD*J@gkR#pa?jmC6hlrZqH4R5hd;FMiy_LTNlOojeoxUeWWdp^)UO<-;*sSnWbmgk~ zh&Kl&-oX-pBCM!8Cbbo^Zsj}@mF%_(+6`mUB2B3+Kez~oEz^O;!D`R;qE<4B#oCb} z3AAI2fGB?Y;!+qkLMqMAZn0-3p<>1otGM}3p_3u1?)(!@!wbE+tz(C`og9}-Zc3BQ zhmFXfWa(M5O_(50oJAFZZR0F)47r$f@HII$sc9@_088#$_2W?`9wXs(as(FdFfIG{Th6*cN zH*Q4$f@_8^ASm8IV}}P`EF+v}(*XqI$|_~`h~OZtjj;1n?5RMf*2RaK4kx2wYnopD zYn3nLm<0AAqz$EhWu5sdSRVA)Wm%d@0eVTGkjeBHi>uJe(?5+uqX#R=T5FvRta z+(rk}&tRnK`hwk7ei}^rQHog>+{b$r^^h+%WkIMuXH;6sWS)Rt-7(EJiTF z?`b+WbAjE0ecM30G&EjaO&tC;vI!`)_9>+BZ2BLIe~CEaV5|IQV9_f=0tCJ(KHTjuGhQ9`P*nkaR=-l*fk>thsF<4~i@ zPi$TZnkZri1ZMKWi}p~pLhs0C2@)PuO|KEd=bz<&>&G!Ny%3iTIo&e7Y%Jtq0YOsm zZVlbSniu?C?H-{Jgyy6Meq;NVSw-F$Q9ePsUJFO?gt8s}iwAwq$tDeFd+0>0;ve1( zJ#@V?=qZ;-XG8pXuV|r3kF*?X;;ZDKIxhNpG6KBrs?>7fhqZ zYhXudL-RUuA|(fUn_N6KrP~Vq(CW9jfrXxLT0lev766Hndteay;q@blh3PJPufWt^;I3pmps5>Zwo&~+M1`HRH@DfhwR*jY;HuspNe z_mw`p@BB@UoyZg#&eQ_})63ur606eV45{ggh+&3N*>C8qo)qRfW8`E%6P4YF197y9*Sk}1OBypq zgzvLZPwS4jy02(dLQR@V;6m3=eDSS35=oN{t*`XAAx+ z@T0>B6K}^IZlTOR+vJ$0K->#4YRW4_K~+)=-2ib@N+)()v3HR|Cp22u42s)~^yv5f zvFs?^fZhh3M@uKd&l@m@8=|v6(VC@1pFt4hdW&S7^B^GPjAU<5e!^DwapQICYy%Vd zU|$6f9__nBkJs&;5n_K(um>}$bwC&?vwA{EQI@ekbezJ@Fl~d?x8;Ear3Q*To$iO> z{}Im2th_M{L;V7O!zUSvNJ)* zFvAYbZ(x@WGiy_0VtuHg$o|KbFAo}eE-Wm0P(Xg4S@iAfYY|W5M9};5wyU~ZT?G}7 zl!n#PGN{#sZ+)Js!TEP23#gPjM)FbM>zF^K5pQ8wZSpY%J1dQ18G%YFpiyk9TNaB| z;DRA8nOlKy;j2pQQmjj7XOo;~5`kQMlflHjR;vwv;%A2eN~rwa4enR~h0Zr)6v;-= z%9IKcbN{%Q=q+jwb0U3bio;2==BS5`&&*xNR~hw0Ss?P>fw+N@mnnmoH+xokvKgrQ z!b4a-O!hA=yzU4LW4KM9-qgsX&y+2lhnOXD(@OTnpe?%{(6(WzZOn*mR2rnEBE8;L z8bw5XnjTv$oq()Wx`J;scqES6jv)4&5^)P>Y2mEATqO9T3!8b8;pAo_{4l>!LUj@pw_Aco;)m@ju=3*O zUqf1oM+y}><<^>AGj>J0GciAca=DkI1kR+K#=fCk)x@YT_wt+YsQ*&c2;DI!k{#Rx z^Jmtb2NxUHo|6t5U7G^90xivgh<{N@a~$x8P@!WJ&u@*oqeOiDm;64LVEAy6sp&BW zI?rU=+d!a|q0x+KKx1(j0;Un4jwfs>XK#l$fG#aI@_4qIyh;vA6>4W2gvzo>MSu;N zu-nN*76MlUt*+8mT64+P;_)0oKSUS{C$>7Y`$7~(z;YtUI0(bs4Te@H=l=JRSk-rZ*g<^~3^JOW1Qe zR0Vh0=XOGtp;B)6i}$i0y?GR1-G&ol`uby`F;pSJOFi;ONM(EuFZSvZb#Rc%g$~n& zBz`p8zRwuq<1ndK5mSRSZXZ+6T;B?%vqL5@TCKhzy<&~7mmcF7=kR=RX&*gnTD#ZV2O*&MjZ_3^JJ-$ckJKCwh`4*;yW; zLO<{kbFP6; z!3iq(yoWfHs`t}#-FD4e%NTOP-YAX=$Lw;rpHWD$ZU)!T@fj@C)=brPohpl8{znJn zsA`F!jHEdFmW@lCm#XhIZ-i8>>_FNEm5O5K%*})a0wnv77}Z?w$8xxyX?~glAfop1 z%LxVRA%lAAzzE%VfYWybnx?8DMDmxrcu}GeVUiQw%Xy-ZJo`sLCR$#TV-Pn@GSc~p zLFe;3Y==Nr&eb9>$4*Q(2+`Cf^Tx%0F&wSdY<;dZm0IBcbT@$`?T7DkcX@{Q7e-Div+#-m4oeGFa06qxd30!4K+@Yg&c zv5RRxBzsNG+?rLX3{S%K*FVgG^bSnp^6A^a453^tfuCP1E z#1SkLj{ns05SwqJVk%Gdx7T};9+aAsQ>|DUdrpY$8lk4^JLEETAaly?$w|D|Tt@VG z@R3QatjblZ#8Se9=2pJKzD?lw#NV^lyePiyEF$)+NX9Ea{ASciZT&5xRJ-+f3Mx37 zwBl!FR<(}w$Tav$9}jh6ldRRMw&!=~nkp~3_P9ZtH)OEzFl_byx8BbK*}$d@qZP6E z4=b6rKJWlOK*7ISte7CbR>OVjO?eZRo0?m4AVzy|BgnbvL-zI?C-dKclw)5)Ll)Bf z0$9QxZF9j!1ZrLEzcAoDc&LwVHZxHr1eeaeaT%Rn+w+JtE|GGyf8;?eg1MQ z2S(tOq7|KaW>lX%#K-%Y@S;7ebrF2{X|g*jQ-5Q>jcE(EQc1tCmMAmKH#KzW5fYvr z@%BHTX+F(9K%RI%N3e3YRkQgD6@0J*C~GS$uRzs~sjtFFjZOjb@1h*gErAWDw*ftq zJ0e--h})!=mwvUPinqr`r; zih=(y9wPmEjrx+_OJ&IiB8+acY*aqF#H=P?}7Tz1=12s-=K{4B$Knpxw*(Potd?VjI5F-1$o^ULjmIP(+ja(sq zvr1fF$;shqKrz1VT>M(Fuwy#3g-WsSBhbb3!~~XZXPod7P^GBRHo$rfMFK+$*t1yKuWa(EIfD!H21o=EeausvoYV0HLXI-z+cKjrW7tL2j z#h0%1r1+>&PQk$!tng&e&!cgHfS4_JillpAN}39_Y#ZeKXS0NOFJVcQ5GNg~n$_u` zuelWMy;5mM6C51tkc(-Vf^SU6^T@Ppy%P>e)h%K=Dxyq#{8 z;8@@jVXlVih}lNl)yv2kaMM-`Lqr3EN>i<-Gw#fULv<#<#8`BvS8&bJz~PXvFeDwK zKY&u7a>2XV944BrksB=kuL|MraRN^j=(%g%qlkyZeJWJH#g3MF{WDflS&(9I*m1(q zl(mugi-d2~P~V1utR3{al_avTy+a1-ZtKBwFa~5e^$Qgy5t94s?e_4#ZC}w)Kd_OlxHxOQnbRpSchP2W%Ede z5zQt}+8fAZt=AL1?R>``tkaY>M(YXmeiBm+eP3%VeyB3d?=CeNq;AYRXn(qN4Pr9^ zNXStJ3bmXt9K`okvd&lm?Gr%m)GchH4`qN%ib(890KsRGs8LHS5XKAN0xk`h+Dc6RD~v+03g?X+XKBb4KU#ZmJy zZqV`TH&*{;xH4Z^VU9P_TV}e-yhdIuouvO?AZJWk*_293%HDf(=Whi^B{om3Ey@g| zNOdmTv9O{!Om*cA6oe9Q{E!K!A30$8@5-&$S-56V&=yq28=*R^@3e&@XzX))tg>_} zAtwNpWCiUWMfXcbCzwJww@5czR}s+Cc<*5#((Wv7)g-*T)I$TY@TVLC-XroRVN;*u zT6yT^>wn8%t5-$$2q3wt_bJI-ROqc|E&l8kY$Gm)8Bzh(srR2aJ?%9+bGExb%2&`q z#gTu@bD0?|4JoGUHfC2d;h*zsrJ5u~oU-g#8fsPLax^T|TuLI`$PJ9xRImO$7HG~g zdwa{!-NvJ<$j$hyizGAI+56`gTUmb;jD-GMnT@^bN8p;xPQL8X{N=DFxj!Phs>1-S7^(^L3L9X{k6q zP~6&$bJQoPkB+W6T2R9F2NG13l#0_4AvRuH_8Vmq%Onfc!GHk0dq9j?fgkz!|F(C_;wlG`lb0!io zJA%MtSA@Qc87ozC7r4qX4P#=E-u11XOF3qJP4yvTJ&v;a^MeVv?kijqOZM7i)g-8Pg~*ah~s*^w>s)#ftAuoc=uu98S3vHpqPf~Ib37xd=UkM>_F8|TvG zEf+~hZn@@bX47{O^gcHzc0IWTSQV;>)I?!0$roI0 zBJ8F;P9PQukBBg=hX^3<1pnf<5>34G*iPoW^NWG@+>~)*K@juI#cqaWh)_~+4UAWcDf$*hG$54OW($! z+}aI`-=3KRm0- zn_xbM$2F+6!`GmT%P0S(YV{PVUnUC4Apf&AR)nX7so6S5t$WiLhO^B=d zHyj%E7r;s(+aoE#Ng}r>b)8Eu+KOyU&r~L|?F2>P*(tfyz8nICJ!J0-O0?<;TECm& zXgl>!Y;VRZ5F4jhE3FkyMnHUO+Bne+D#*nAl!;$A(i*tmJZeEn?}u8_+s)KYdMVDX zQM0T777*BN`Y0i-D(O_4qW+j(!dOz6h;wF9|eIQjW8?HnB zmIHT!@*=!d?G*Zum%Azbw|0k@ma#5Q%2%Ql6KS0lz#)+<25q%a$6Ga7^9Eg)UtZgf zlLKa|&NyUEjuz5R;-2}^MJcxXFfiRq+25s*%r7JFOM-)y6%|Mvb1Mpb+bTNdf?F-meICC*4x#RFZDnVvsv@s>+l! zfTf-jp+^(7Q4;V(1wMV?I#yGMOPZ+n#!%si>S+Bl{!LXeCN0Oj&gE2QdwTksc6cDR z%2kj*oth5^sX5neI>@V1Jn85RD?~=6JF%GA+b7C$nYCcAbP`oE8Z;vr4B#g!G(BOW z=<-FY%7Z)-4r)ap-P&NNiNWez!D?{eK`iMy|K4jq%Ry^f&_&BDY(hleQ^gJ$KE}>y z`$TNCPl+^W{C?G$JD>Q4SBZ8#yM{}m+;GpWJAU|G#PHJHdW;KXFIk$k)WUSNCg-^m zMR9v7hUSCl<(a(}sR7wdJeFa1?*Z_%D!Dset1S&+I?2UkOog9!cJ5R2W?Q8_?HsOa`vdW+FF1q_kMCnH(>=Oxi$XIkXh+v7dTrd!P6Rj5$J$s>WwNhv#EpR=CX zPRjbj4ZyMY485(p>d09^VCPQ|?{)36%Ui=N#Ej2c%O9Io(zBR$c|7Jx+{a8JzToFI zC@F1AUJ?x_{`qv4Yq`B~4&dR0bXy;&k$}a>G44!mTAtG&h_F$xmG=YFFH-5m!7H}a*Ni4w(TJ61G!l~ppTU2Da`>sJCt zdy!1G*H9a0$ClWXQ~rrB&@;>uqO8r>Ginz%grKIIu+C%9)I3GgEpEDLrsk|+TC^z62)PptE~vqX1Q@`CCL{2Pa#E0#RKTOg zyr<{vy?2_X|Rf6Zi(7=JKH?S zQ#G5}SqW}qFyf5%E2H3iERZCzr(Nd>X9uh@=feiWK}(_uJ+ePfEFXArnpv(_9&%Lx zbz6lr)o-T(TM;3lPssCPah}d&=)w5K+^@>Y)@d-&f}K?pTAG$8MrnE=LL8~^N_$Tc zj+k&^x_T7kLT+=cVzV(`B>-6tz!e}tkvNXCJ6GDyoEo9{*?D;QvKN*QH!vW zL4o#L;b;gU&m9J(Pr2m!gX}@h8=IbBO(7F;4=Ha*L)9vMR2j5;3FaXQLlb)&Dm*7H z8zep3m1EoUzfean7G0^M30a^um-=SCM=lq~?0_`uM2EEq8ol9_FDXnhb2Dp@Fx4c5 z2qN`qVGuuCIEj3uN8?Yhhxd921Z6}Wy#shTLs}O{@6cy?`hg+Z=Ta>v_(Ao-qRF;km!U0VAu1 z?}%gil>lh;b;L?V1&FFlValVmk2<>-!#oscb9reUKZH};KK_<1BJ4!J^-CH5q7h74L*EW?vqP4yN!RnR9ETSOgwk#8It|&Tl{;ReKJwlHc-7zVRz4RZf&)!Nqhe%_xQTy#B2!+Z<5615!vCh{qwM+Vo1YN*F%Xd* z%P49IYZ5|op6t6b<%sVV(o;dGWSCBpoiesuFrw?sh;B5wPPU0V147gz7tE)29YX>Qxbvu)e9 zZQHhO+qP}nwr$($cV@1h?sNV^J|t@;Rdt*4oHyPCeaS8;g+x=jtK_DG!pU=Cb_x$X zITumOtPZk2*EGD%8rbA<9m4!o6c>t=T>q_}K^dmLgR8_2YtXx8xeHU4qJ!5So1x}0 zY0qy8I*wnjAPHUi+?H`+mXlvFGC@O$76VCO~@c++!(84g0PUZbgGDUgPC$8kNN zRPNb;U%;(mss_u7eD=exqRPB2N2}iyjbMa0Cl@4@jueH3qO`egBI#tD8(D8loWZ+1 zbPWqLK-<6F?-&ZqB>n8di-1dc$vl6fa9q3?QTiqRWsU*8f}PG5fJ^p7lEtv zZubTuz`yOZ@8~rG*T0oV6YTj(w^9#ApTZArnc;|Wg=INOS=A5t6c?I5Teut7Y^*!2 zC%qq?swc+E#2F)>{o{h!ueX$9C+A{LB0Ew>VAHQur0ftFbh_#Wr-sYDE-F6}I1I^* z{c@uH2}3wPBgAelA{!J;zanftV`ckKz>hi;%dfYobpZI4>FGN>1BH6cqA0_V(suv3 zc3yo12nlgGlZ!FGVJs}?i*ZBbAWEwHpu8VFxt_WI#2|8%PwQ4Ncbc-0L|O?}Lj+#Y zGI*M=yVFdXNXFngiqhjL*I5wilCM~;uyv0=p}Aw{^4TBIRMl2QKLZn2c`O>|+}w`U z8?Hr9kSJwodPRRx+@v<2gl(=AT?0(E6Nv^C{DELVY;ppYC za@CK8xM1|xtsm_mA!hE)j;5L~0MNuKIx!yLy?<0g6dQ~}+H`w(fhx$%FWgkPvXZGv zHu$qDsz&Zzl^ zP*Uh(uo_dGx->wcu|Sw1uQOg)>tvtcOWxOvoESa|2ZkY2)Y4S1t7N7{(f~Ak?E2b| zv9zo-mQChDQUXX#)zR=hs;vn=jI@C5-M{(&_9b>P{Mba)j3j$0jLc4Xr07tioG6Qf ze;B$GKDijdPZY*X>2Qx4lbxM$iSqsWnYDF@n#Nl5v&9TU)w^@ z9w@TjXRyFZRVOzdC-Ao8>9l5w9M*%|OkpMNpP`@Z@(TKs8b4S!3Kww!<&~b8vo zeZ`S=P=x?9!YI0!a@woMAb)aHc~nU?6<6uEpUN2nujl@<5dKc=4aFa-(73OFRCrkQ^iI@HQt6h?v3{Q!-tvg@)w56q79Tn ziYrNq;B8mVxO%a|xw(GeaJv{;W*ELsEiCaJxS}7!=LHLs$}K4AWSsJ|>Ev~RxI2k5 zi6ny;=QAcs#n$s@RuCAz>Ec0KM4mhrV+h=IeVrO_-Y-VZ1lqoH<+`bMvS=~tWea^c ziz-3!*_~(McN#LvnB61@K*AUB4lvj#Y2=NBjrRE&6}Lw3Q#TmqsKh80)_jh<)5YDy zDDkc*YBV7`_iH1=;dM2O>Nxc|A5V4dT|VQ{+g(}w>8ad&IU5*N4Gdm5OET{xlx}M% zR2veuO`TkM?q}1~`yI8HJf!)T;W>+v5s{l64U29ZPe5d%FXX6$^jTNLecDp`v>%V^8RIpaJQ&1?9><%mnyH;l&Y&wjOyUL@2oX(odam zFV5WFql^kbEp!-<0F2L~hvm2KT6Z~saBcm!dIzECiHDL7WGh@{Xh)dY?8&>cMIC>g{^@iDCs@#C3RH9>(f8 z?6sBes&g8(N^QKR9C!v9vglAul0hrVppF6u(i)|1TIVqX>XE38YX2L-Hw3Wlgy)Y@ zN!Q!a^v5L^zWaPM$_4DbS5ni-r1E2oLy@Jn)1kyml=BqvX4C8J>M95Iw%a^ipU>M} zT3l8>%m?tFEFmlMqn@199=2LhTqbXR<8Tag+V;Z*Z+F`a>&<=U{y`+LF8^kol1dCu zKBMki#NrVfTQqgPsvFy+MV6P^vA%{TeRR-xdKHVg&00RiX0fcK)eKL)=#yYS*N3u4 z`e8W(Y5^HgT0Rk1=beFT)@{pU^hRQ-3c)+uln(H}T*+C6&AK661k$PUDc!|$#coVe zwtpxu`nujSc0xRM_Yj`q?wJ@(FE(%T?+bt79xH5%dTn_t)`cXmLlfP5h%N2xuI<~H z53M_itF%CSBptC&-=;_|tyb;IVP#V@$=0@n!FnM7AA`_#T-@NLn*u`^EA(>-ec9q! zh#dJfVP5v-Iof}ZiUXu{!+fQk?6RoG7vGbU-zO*N<~;`>Yi8DM`O{?iq)&rz=Eds< z0;3GkOz7Mnsvc@e+r{Qx$j~OIs}^&aSFxq4HHhc8epN~)TOW0;i$+901W&d*9gn() z4oYKbSa%L3#^r0ak-n>NR&oXh%I}xb(-}*XiP4;aFXpmP^;@s;v{xkB7BE;klvKhH ztVPqlSFyu)w+*{U0<~%W3+teq;@;Imp;Bc4Q6-FL>NBzkE+NU+A_&%9QAED4BBTBc z-7E!kVud{Txtr8h6HE=~Y&c}=w7zQXV9L959%7e*J{dKR8j?z|2t~pNhm2fDLriS7 zR)B@52Q`-9(4%w7_BCaK^Y z(KDc29>IUcjns-)0RPw2Q#2Vz82f3$Fh-Z#BdPbVxu4>%fuGNP1tkJcKi-DwclUK4ID9@D1K@};R*I!!dz>k)q4#Q#ChRvMcVAq)RM|Sx`r*@fQgP9d z=6tBBVKe<8xGpez3~R59!hv#dghX)#-k&~{_ZLepnt~zcRX_?|A6f_w7(Qam`5D@M zjz-|x`=7U!58S_7Hmf{&@OBpZzFv^%1HtP6yB2+ z5j^OY?jzwhQyuM~9Qh8HLYu$O%s8PYTqfufKG9^u)vR`#Qm^zUO)X_+L=({ip;N21 zBNt@q&4Fn$d4+R;H8mg5E{eG)c~^7JGK^cuI>`CzwXPHLhu_8&g`Nl%zvc_hZmwfV z<7cs3fS=FR*lGUr?aD*2g?+_q-Gi?wzB{L`eJvkI#66CLkGp#^oTT+V3!w~2BYb!E0 zDNPzDx+@-Sgkps>Dz%?hmGvuQp?&S{4b(d5m3XX?{kYHbx3csKQllo+tb>{*L0h(N z96tw&sBwoY4@dCs*hSCr1JpTt2tN(Ig7Gc1Nf^?ccs1=}q8X-NEn>(tG5K7yNmLe8 zY7q!QCshnTa5}iKpIU$kP#|)w30Q+;2MRPd5*U|+W>j4X8{;&IKZnF7{t3fWJ zxh-4@tb3?XPhG?<-peYpY{1AE@A&P0e~l16JP4|-!M!Fx;|pUM4j5Ui|I+uVrSlwx zyVHO{LQASu{z}zw9f@`<<*w|8Ih_GnQZmRaAH~DU&Sseuzd5+Qnot>0umK3w3~uPM zJ&E5>Jbx`f!dQ0YW4*}mu}TZh>D!!u_89X@vUgq}E90Hbdm-1Kx_hkAY^f4qncxvn ziD8Ai%4Me;Qm`j}TG*-K1i+{g`-Cm=`tb59*@4VnxXVQu)h{x(UQON&arKVLEm$IG z+n$OmC=DZKX=V3n&nEv&^Bw4k4&IaDXzH=7UcDFGez>=& znGcBTm&%Qa@2Dcx_`POePOISQfdfw<{p5Ql2LA5gRzf z>C7r^OS^PUZHN~Dz37Wxfx7O#z=IWH6HX_`TMlo#C)CZ9$@?;lGfThdFx_VD(ySz+ z@WTb>PlsZscgrv_qC~=$!HiY90xQm#@T-yHey=O)INcBc{0;ggs14GR=YXUJ|I(cW zxq2TEnE>%;8-m^?U27NeX^}Batrh153iP$sJq9W;*C*N0*9lna30ccR9YRt(xQ$W=)LQRUbETZQ+>F8`DNuG^PlQSk5-vxbXDuO{v}Ud z*usWA?~W>qh}P;K$_kK}EUZkuu&g&+xz1ks?AFnS2thvgTXxtes;3FG1RFf{CSiq| zKp7f7bkJ5=JA-Irf^?adg&qu5)qUX=HDA2c{KW;mmzidO%DoH^X!GXRsGyoszK60j zZhD-TG@wbWEIFZbfCnxc)7?h(W4$x(H^-nM<27*)7s@5J7Ku^iF}@qQN|uq z`2hkl0*T_;QC?zykH>3BZzT_zmVcqtS^jK@PA8cx1}orqgz!j+E@JT)j1FxC7`314 z3JcLRgNMOHl<`i7M4-j5+*Alj_y|R?L$B#&w4M6`^xion`!D!QZ4!3qJe;Yx;`WNS zVVzv|3{=Eei>Gr1vO@xWegne0JlSKLWOE_8f>$*~6UKTRy*NN?>=n7WUEDT7uFSN1 zXKTEzbs_Zj^N$(tANi8;0-!KfmfJWN&=gR?A+Q0+_!o6+RjUil1m$Gm6htp7gI`Gp zivaRY=lmjek$QtUUk_wXy`MCnW43h1qWfxO0*m!Gr0Ke}9}jzQ8s&X=P48nPn|?bQ z@r|;hR^>DDxU!kM*(PsFR4Zu?4$3W~wn%nqoMA@Gn>UEJzQPD&@!vAFiTOl{uNRpl zQipUO{EM~4fXx^8_zna>7CG`dSsFCZvTVKNcKr62*+Z*EM%iSeMv3M3go|lXru04W zz=}FdP)a`@eaw7p>kQ|fC&uqNcJH=pS*P zHYe=UG*5+|#uAZY_>R=t6ZcHlavCOJt)+S6`T)nkusHRoj&C3=N*C#e^M8`Bw)DtS zXw}pTb*CTLt1qHWEoCH~P_#x#?FiHk5>lBf&s(qTXB!_%j`Gp#2$7Tt;!Nz|gI(3m zCN_{^?DPt(!mTg#t?HkMAi1Q5t73o$?B$EUAzA70p97i|HIK`cC(_5Z3&0*F*zf)o zWAa^f6241vuxnSyT=eS}mg3v`-;6{YvHXOjUr7^c7Z%XUFClI11+4*x@X~KKCQCHa zu&_t#M3b^?h=D)}4Kez{Je3dKN{NN98I>=`W0;^cDzNH(NM^|9l>PuCq0$-H5sJQ2=l^qPm(2|AF_*bRCb9I!= zGe|pk3#pvAD1l`nx&iG>SO3mTgR~<%!8@h7_d%OQo3cI5?HX$QzFQ?2{kBxuD4Zx6 zVlIxI13*ZiyGN-Fu|h0`&RI|G$1ic*;eGbp97jtf=T8oFrd3juC9{Zooft}L4+%=s3I#Ih*1Fo0ZGbcfT7C`gc* z?*dS%bGowcv;a3Yomh}+p0VB3a)fUT(g=T2mi-aV%w>0b`HoEsDQW*RLMjbK_&CJd;Z3uJ@| z=2%~<{V@RQ*TaWG6Owr3G{o?8=7H>U0#!8PZeFE^se?}m<7ECWhq$=d%Bm!ge3j{5 z7o3RvuB9ZEF68Gq1aWxA+`*}tk*97<%@+RS%x>pWwB{=K7!t^ORd{fBX=5M*Tda5b z^{QCH%b*x+Y%`eNbs?DH7|Wah4qoAq9^|zCyE~&2u@*1+sm)z-rlw@3F`thFR=$c7 z+KDYw1GJaAAF*?{mQhB8cevX)mydoMPQp;%VgolYn%G)A@@85X9YBh%Yhq=hVW=~s z@U~B%V0gL!D7q9-)`u`#-D8H2-8p{DcLV3ILCp$d(5S87vnsMFl3tV@>U{asDY$oU zu=9@2J!7dm8a1Wb=?5I(T^j2r@rAUxi%b6*{(dE&6Hq(URLi7cMS@{*%j!Mw9v!jd zq&{4vo*<#i(R)}cW`9R3Q)yRdpk%+8vt(i=bhy*p2n@S29Pt$({svTf%HmWz!Ir`* zD`JjX_ae|Hl&$vE0i$8;3vi2tC}y+FxmnhJ)|)OEqZ9Nx z+;pJ*DM3^G3D_+t-n;`90w|&qenTMKntOrC2(%@eFj;SYi|&Hf|0J2CUNI>W%SE;B zA?<`c3R%uDIC!`0rpIt-d77+4W0ar5wBlBy2Xq^kc7tlFk;PX^2xIQZ zwI%jCe~GDn;P6XfD6I1C16YTFPM=)V{9MtR)Gd(1zUxQEfsj=rvv9X)LKUrgPRgH9 z6;ENx0b84F<=)#SywM4_cphnD)JfzuCCR-^w^x~^de!Xa))naEyky;r{7OF63$;`} zNWpQn@2U2whUWE=rW}XGkBmkkuDBCO&FJsw)DsX56B9hUP`TE(ti>J3sfGQ7%So*( zUdBM#=22I1rLQ?@LzsSfhQ*!hRw|+%7*X#k{O3Wdc~jiGBGmbBp#I7POL_W{R^A2^kNcCyB#R5{NnDs9&zAa`pEBO$E6 z+((KtQaIKf*=(B<+(kiBhUA70u%^2%hWxTXN`lsS4wD=uxdX{apSE0oLpy0+;i21T z?KyQ$bfAA*b+9A%#^PU@=q?S)tXV$Yd>|2fr7{hFuaby^U0j(DXLb%kmDufP1f}Du zre^8P&M#7vjox;MkvBpWxB!lu`=E7dnb=RAvsHL7xqNF59(SuR$J}26;Qx%3AYfMXxfbqlAkwGw z*L7O$mgF)7ZRVHWXxNrgM;gctL&r`hIDa~y40bCFAwH{pON_xlurh?-px+GzpSt)%OE&T^z3{;I< zvt?V=?aE@+^fP3iLo)(0UZ38k2FsFZ&=3x4=N0kR^=Y@0-w?!bnFd@sxUaQyG%sri zqwQ5LtexRqm!xi+x19F~%en+x_~@S*yN%v%J9RWJYu$ojI}&{)6lhR4kU%bt;wIN2 zBF7rzE|O6|tu+eP-%gXu#`X}t5^kzmi#-M8Zgs@?H7-i9=+_|2CiN9Bh^j;TnJXdo z$FS8t1U5t~BQ2$cYWB-}kP;vdSk)CxM9ZDVhiAmCOHtmvFhgt%9%=3uw}0sQio*V8 zyJ~h6T9jlfjB%H6u%!rAN2H~*HXz`WMHrTjh;dM?A+vw>M`5Xoox?0WtMW;q!Opt% zT;N|_x@p`q&qnfz9R_}^`L3?5f*EP*p1^2XlEdt_kMF3;hyG{=W0pZ*!0&_!W6$}I zr^;clBrln;KehGos`F5hy@|81>R(4$&KcOQKKBM9*L_gyjD;T-5s0?TQ-f<1Q!3i-ZKE{c{$%|Av4HE ziJOGZ#zqCS?)=N-v(`X13zucFf>069v$nC4!#e;F#3gS?&5rY=OK^d-LrI=jy}zBl zyfK9+MM0wl>}>znLw{fdx0t&m0D;KWv__v$af@FgLtGUP9Z4+tO(_Ms3AussOOG85 zCM&g$W>pc8Uu5o3-05Z5VwJXq*Q*8F+Ipv(@KT>&pYV5IT};NM+PBR% zX(c3ASBZfl3j&?|2brLAMij>ES)TnqcjZ2*h9=9}e@TVT1ZCnfqzH5fFEvg2;k-F? z*%$usju2K&7z@0JwIC)W(Mx<=q-JK%LHHa`(R<%4vys1Q9tQLy&&WBQ?k;)#CApK0 zFmv;+5G#h7m*7qKp*|vY2oBZb-ZF-l0SPAEk0n?Q6zLY-QDMaJJ zEtplcHaq{AUoO%G;NJ|3NCCa?+=oDo2~L8`1T&|0BxCl?Qr38SvRuy56EWds9kOS; ziE`qz;ZDk)?SMmjMgSCL-B%>1wLw*A;2o{_3KT4b+W^zw99+^ywY!fW8@=X>7b+#sdCl3k0DTaTMEtmqJJ<~To z6OyfjI)z<{cdUA{_}RcB{lB}i=c7<~kR<1e{&(MrFDrLGd;=k$5 z%%C6*{ql2RRdBfj-{SA{SdHasvl5c{y1X`=k8C}bK-L0uL%kw*Sy2KDg_7{iU_;l} zyQ?iNf47LN)nHMHW0p%gtn_R=$XTns*$;dx2xt7mE&ZRR)XC1=>mc^9`J)6+4W

nn*P*T{*9uuI@wl4 zyF^^~m1RmaaG@G5hXevnwhVLl<3^LShb_hLt~bpTe3ni^>yF+v2Vi6jNImny**bsW z3BwNgw#PvsjuxNXzQr;orWDa=y1)29lLNvsFcyL7XGouFA`hSZ0M=hhwKjj3MI9CK zRkr8hH)Txr-8aMJ2G1QpO+mQsYNo%@pK@q+A?khSHF4RMN*YT$);Xjck3!>&;ncw&eUYN0wG!}JVp78> zlA#*zD5rbV+P!LyUZ7v)`pmwKoWuX9gTa0RNf} ztg#8|U-U2X>~)8)eEdIK(BOL#d(jHMxL<}DN#Nk;yY~iR`>=OZKn)+0z1y8d_Px+# zKaGpU)dI~$d8#eP{2C8G_!zUnCn|AYq`I%#$J#VeKzKsf zzLd%$mD#jf)>v_qMBVSW5A(6_iI-t}_f)8ZoVNI0T=X?yn1+rtJX+44;i+R=x1{*+ zb_doHkn+a6JctdGISz!dQGKdN9*T-u#O(4K-n^vt3TA_uK!;}Xp9!R5)dQ2 zRf$p*>uTM2%4JMIRbINex?HH(iL810%rf|Bls8Ze=?%$_it3^0_8U+AvEZW%sO}F( z1%@lbg20Y9G~!Z_0W#b_)DhEYFI z@4SF>XiVl_U9-+FSIC$zFEEl6oi!lW$D&uOXe<~LY}+L#Fv~!p;vqyGgCK&aIcnd7 zp{ORLs;%lBHZC+t>|Yt6fn{R*fqw|0ALbTd*yvTCWfy7)E{2aUxL@u9$kyyIK{Q`| zqZ2Z``{9I9cpwKfnp3DL{k2?hoAQO{Qpf5-* zbDvX}Ux`R+`JWD7Ufpa|eLV^)xXa5STSwA@9MF&|*E1BpQ`K z#rZE0zagHHE3@O$a~I8$|Dra-63)Lt10)oKLH?4wt}kvYK02D5ch_2H?@3`{NntUAtnsA2S|D(L(i1&Hqp8ZnLs(XP-41zWpMP1 zCdrkR*8)E%Ti7$NRn3ci*$Sn4IO;Ch;^hLn>Crtns!YS-jgd=jZ1|@$I^AX6dSUd-RJn zoe8!@y!#||vZPk;z2DvCA{^9sExr*%e(dJ$!yt zWGk8y+=hVoM;)-*G3%YchWSsYR#)dQvj+AR;!wQQU6U|;EFwp^&vM*~GVRKWb%fx< z-{PE)!=xknW~RXPk7ha)gV`M=lRp2;;SZV2)p;DF!hPnl{lpG-iHN?(i4*&)EYonFHf?n!%ADdWaCB zaqjx-@d^EZx%1ge><1R_1kiK26Ips(@Zcc=vwR}yjYDND>=sdA{~pxTFgx1BX+1fu z`yuA%kyN|q9SgP>OS+Y>fSU6f_h6!R|{(+l=mfgRehXnNOr?sH1c@i9Qz8qwg9wqB{S z1}!VCo?`IH+z7wvNY`JhRKW9X92`=F`Y~RSxjP+L4v5H0NeQNicCV28?|}kSIXY%pwUsBTN1M0@RFx2DDes+g{g3LQy7_f#EsFtA1cG-c;kGd0*wy=lGU2 zf}p5p3?il0+|qtIxuEblq;0|;i0gwHyFT8xvwpa!Gum1PNaf7#!7Ow(6cKXh$Gyfy<_~ z4s_2ta!L?lsvzg6s=z?_uDpw+4V++q-toLo+sT*8O?ycKSj!dFmT*bCgt%;nsyzVl zdZ8Cc(ctz1lJ1lo)~s2&YCY`gWRvgTViGo5F|W!p3UNxDj|>mMEONPQgU9C405n0Z zPg3^+@wl^`iwz*?*%5Vz!Si~#Sd~!EYWjxj6}~w~J%+nuo3fLeGLE1#$!t(qTO`_M zj9;zcLb-H~m4ZFw+h}PcO;zH+=$EwLf+%ZU9EredG$m7!%8DSv0`w^kP^pESNy_%}wt}&3z&&e^Al7-y zoec7yV@|iw!(E4_e82p;vI2Eyzm*s>$-7XpB?NObOk!>H-d>?mGxG(T8NpdH^$lP+ z8v4WpACdyE<{?)j?>0~#{00l3n%WkJl_n~dq6+~vCRm@OHW5G|iF{j{e^qXIe*L<- z?AXeVBy@T8P>|@hIDvrs#v-lAJ$4!%r}p1|PrwaYtbElQ+8(aJ;?uqnaVRIva)nT* zS6<^InrIZH!&V%|oBY+M| z@S&$?KFfh8HXgak&^+a#lP7qtb{r zzHjPHEy{}*Ct=q3j*u~js4_P4BR1Igkgd?cnYvEY!hG`E z3CbANe|>f&PO=y7lMVHkay(3Gf66)*<#R;6e!i>6trXs$W3+yOg#!Qte2~>%H{Q1n zTNwera>ujBxzvtB)v9kA-P)wm!q2RB#6Z+*_mr7w*Beng3caF_N}dH8=B!vFA`jY= z3H6=NHh!r#HD1x06aG-h7z6LLhewW^hN>-9BRs{WbA^M*%vJaVeF)*N;-{Yhz?LB6 zlNd(`Ce#${gNnrsc7}UxFW>N(ly(2bI{CsV`Li>?;D69E39Q;C!U2E0E5%j~N<=W;dU)%d+vaZ=Omg#L9)HAxI+~_WF;?%#M=L+}x%fRqwq&5r@I>{tfYA zZtGP)kVL)AB$rtO#m!wkMvulV2gu+jgSr=gdFQQoF?a0T3ztDXmhOdl#f>5XmOmiI z%b#--n~FBVx&q#R`7-|$IrN*x#>2QBtJT~X?y_ux>>S%^Lxmcp_7>FcBv;~ZUMx12 zI^QSh*E-XlQyM_a@(j%(X;x5W=2@Tw7ehO(poLQQ#Ig^hfbaMX5P8ceu}9TOb-=U_ z+n>!M(@_rlolde%A>Khd_#ArBpMv_B-6baTqA;5soZ~C#^@+hdu!mqZr#_IL`z<=h_-Kv$Fak3UGcZaV zOOpa|5ws`JRj2&|?ZMc{#EcWzOyicTc0Uj-tK=8cc$S3^;$%^c2FX4I56QRQG@c1L zMp!^yn6;d0AalLg>%;^BVR-)$tkPazT;;Yu8((bM~ zU{ko#fW^h!wPZ^Pee`4N>9kS>Jo3P-}^dfFuhn2#%ocxkI;U^oI zDv3w(H$Vx8iiMYpb-Vlp@PHm zCs~miJtoi4bc6?H623y*4CZN#S?JjyX3Ek47XFb6aHuJm%t^ubX))(Uvwc2=mZ$vV zJeqW;(C2xPZpSNy1wy0eu1YD54-t9_@^qp5`EvSO5D=fiS6IL{c_s16w4<&)YZO6w zMA`XfE;(nFDbe3aU(gtvjR!g;rF+9$_#}vhzEp6n`VOv(7QHTlEb(qjjhlrUE&=t% z=)c={)WXCjhZ*)rN3>yZFcZq-qjc&dSCjcHUA55pk2_aA*O#H3#YV(30zCN7b$RU8 zYX_9GwvaBeGPNq`G*`6rTp)~6lyLpoHu6hzKL}|UtY|z3pMSH910vGxEa6A@R8teI z-I|c*pGm9!HhVS+Yd=e8Xv=xYb#HUOG9|yUNFP6pFEAb4hbUif<-O3a1rn_haFTwk zEyy?(xq@Zynvc4$;~`<(6WRq~nsjXDC0!cDyzDZkoVzOJQ({?-dO69AjUwd+!?gFl zfXD#z;($)ziwal&+ZRclwW^n6TOs~l<|naY8Ivqo`+n{(`{nop*rd*PWc2$`LrEI} z%9KOrUSig46l;Rg3J7%GIw0|e9^W~0&sCMP6*!3zzWxknt)phNDctIP*4$1^X=cCs zd9hfk)ZzM%F48cUe^9(&vU>OoT9oUT?0_4Fq_QBkJyC;o8Bc&9-m6*eJ??++U3CAu zz>-5Bk>T%oy?U{#*~Iwy@gkb~Ub?Yf5ulCco=Ng8;_9e&FLSF(^KbC5flN-Won30y z!tKBtq>M>79N&zx&KrDU2W#7aHE$b3_H=X82YR!i9^*!)( zh>Kk1+fanOe?@NGf1?vV^`XH${@ex`XmL%G!iUYe3XgATR)!xL;UGteBViQ`yRpfPnq>YwGn%qkWHzkOL=Hm<;vW7Y9*u|szx&tF z!@ddjanOKSxF87STXzVEz|Y7rR&}Yf5K}5d7_{FmX@3C;94F^YR+55Yj2>;nP)uSf zug+#d8t~A%mnZ&dXI4+I_9|CT>F7oC9%d#PQt;*eN33Ys@sgD02q@b6AB|+6927l` zF-Sn9y^BfikIPHj`9J86)RZ8X*FnCWPWXHBv{^52i~T=2ABP|Z5o;TzhkZU7hdB)9 zQL7w=Z>2W@;p%Fi&_vj)E@^8|lb9Z$ON*t$Q}075vi3%NqULNbP^23=#OWQGmVN`8 z!?G?WZ_Mds1?mwGfQZbnye`w3w1v6@;#@^R{e|q~LU13GK6Zxg&wymJ6z{O2ypvda zmQf%k(Cdu-wcOl1JYdJUe z3DnN62KQZ4jd$s`JuTg*9yN!CDBASg>24M`%-LjX2ANt7C=4?rR#iUFpWR`l#P7Zv zeHibxkt_kdK$OoM!4+4)WKhZD8JiSCN$|FwM{P^9TkEK6Q8ruR98=YQAC2L|2cNvM~UTwt7pdHKwAgg z=KczTBT;4ETH94~lVUa}N4DIiQ!}Tdo$~d-ea`dP89UNZ_d%=g;cDI4?2A`Q4YPcm za$V@0DAqyHB#ozpAl_NOV=B79qH(H?w5?$FQ%6p=@fmI8E*nl9=r_TrNcxAz9K(z-tIg8Wv-gq%-S0mAsUxll9~>}kz9F~eAN zC-CC|it|cXUojf9teuS#Ut>qt4g*RVvX-U-J=JyJNmWB#lb6C2G9sAGK{j zKxI7j6k^#`RU@pfXC3MvTwM3ZB%>&!O(Xc0@#?Y;ZaZDy)3?xlp3;hJD;ByDuHX;A z1nhu}u9Zo>vA12z6b+S0I?rWk{EPl7Gg2vkZMdl;U)DQ?ng374RLlv{69^i#MZm{B z(x>~`Wpq@HI(*^qQ%dpmDv&yos}rY6_X%o!Q7*=BXRCsF2TzhX)=-j(2FxZ}!V3?scf8J`B{IDC^Y7$Sc=z9~z*5X*(#e=2D(BwPig? z|4xm4=|Y6(l!k5Rf(93mKJsTuchHT#bQnVi)ANDrnNmt4f!rMjgeMVq^g~yp`%IGs zUG^b)DtX?OwPuLJw3CDzz-5x`ZRP>@yhM9nLtv&-4$qw&KyGLaciu}P?=IpCmmg1Z z{qJJn)B){JR{=>)U9v{|Cvdm5kPDSSiU6Qa4Mq3`PWK1`DS&CEe3qh9F9U}E- zSB;xIZdiq#rsjAP;Ru2u7g&`?s1}M~|;ylzvLz)Di4^rgdHs@Pz;IiZg+*RRv5BFc!OIQ1ln8S9r=8 zj2SS1USR8`27ifFTFZY-2mS^9wYa-lS@Czhvj0_8b5?s^gjslXQR|q;6)OoT zSXPBm*hZoHn%lf>3}H>EglV;Pp8L3}b48~xTfga4A3GZ$18sudsR;O4YcEIH_hHN4 zE)%K%s`LkqEFSDS6E^39I)R4demg;$x3m72{c#;tcHq}kyT(|T7?HKh!sEFefy=ld zl;5{&2+%)tvcf zb}U?XFUL&1_&^7^ol-|!`>TceeXZdxOEmsKT(M|b zq*g_Itn2V87|V%v7MjW}j{;SRKs|1m#6J(jsLHM)K?wr7DRw-|&!oF$&Dpjb57k?K z79Z@LEd{(SyH-c(A~av=VdQr>l}4C%Ui)R1OgV@2=m1$Q?M9VXwg^`?IH~TLFG6l% z@oU;rn>R7Pp@2!pK;oKD_W;KV2Wy)D4uqeC2HyWB7*J9iK9=8HQ7osN#KkUf{Hr&Zx%tp=0XQP{sluY?cesa69m@R{U2*b|ly(n-RWk%vGu)X`OtKh?!G=>mXyMas3aYP{N zPug*t>T)8aaoqT*c6Re+bZ$A@U3F}wUayV8lq)}la?MtCrehG2oDSsMWp%2WH|~Ra zx2dwy7WRG~T-8;2h7hhhE@?}{6&`f!Ix3g^^mBTh=!%VrquqOL@Z0Vd=1!1kc@Nf5@=o_R<2JT4&%En@ouLhet^6S01F6R z`vo@iQ7|&{iix(W=1RLZJ{#H+sV^K%f%tsR(kwl4t~->e?13*?p9qew6Mzfn`WnUEGb<&pE`0a#y}z_PT;9cBQNUC^`_2;+bagvODSKK-gqsY* z+K;E)8eS4B^PS6At+uiXikEtcw0asLKQ{=CvOLBVLaB{|+jRH*rcTK!Jrcd4n>C)m9Manjm_ zvi*{u!*mbE0)2)>Qgw|ozdyTK+#w?(@g~I6`UJ(TE`;3Y60Z;Ppb&I}r`>$aVtV4A z{hwG(s3AAK6{5o9^t2T)ZfinN0@HQMjSIYMLBjud2h68x70DI9BH~K3#`}tlMMI%^j#;K{8xS$ z!7DM^O_3WZ&9|b{K30>i{K_oEx)H&Yklu5pJF#te=Nu@7H9R)=ODzG(nsB97`{!#~ z-m=NDi`~_^qxYb{PM5ZfbjOBE9sy~(X(*|5OrDZL~E=vDip^1VYdC|P9Q{m6b_ z7s3|#-;*lCf1T)3>|Ky3ahoV9xw>3h@+XvHS=__c-`UuRose1zDJfD*D9uyO z{Te>T?1_l8MKb>_gUhm81ningSf`S4>yW3U|E*KN&eDULZW)cUNqrxxDJ=9%`XyaX z2!bZlPVRallmOqQop9S1?8e6(O%r_l8w?c}sVioOl+O|8+# zCT+KB1e}V5(>*sAaeWwP5>x)CcP2khrTl4d=wYdzHaO*z*-XHgt8#*p61E}d(_yMl zK#jQJBWpTg2r^^7dhs{b*K1qgu>?5XE9I@d^VZ-t)|YK7Z*x3;LAg|LfZy3bHt3z{ zN{WS!+Nq+xI<{6}-20rGDUSb(9sW=_f4p6H$++*};}nB`gPM8fgUl@%dv56I2*}jp z#t57Wq~h!2a=pW>XimY}y;7oXvd=Xk%Vaq`WEFbSbjxK+OsMuZS6*1-+}SyyKlOeq zSsXRM>$Twz^gB%}5DHmlA!jveMoX@iv-r%CRRN?rm^bRyz4B@HZ2(oWP*PRStZnyQ-ePETfT=y z08E+dn)0t5nd=s$N`j?^SDX6&TZC(5tNJj;K}&c~0+~aR@M-R07ukh6EtfED`(ag6 zP7{qOSh-$M{Dx+(<201)Qdm463O+f%j)8B~Lai7u7luveuTya?DAOMq(~XBRLMp%? z@gIeIG_l*_5sjS#qQ|WSt?%sXMiKRAjqZ1kB$9b?HIOUf^<37jL=CrklH*u^AU8UW zpPgh{8MM|3UcC8m+sxp8m&j@Wl#n>|`yML4L1oaXvGSUAs{)$RAtXN&m` zHmpn9c3+&04omS=cz_$h;uXBe_Y^Y*D1pFeydz;8e$DV9H^sS3YGzmClGgSB{m(bp z*naVbN)Mx)xQM*JtTMN9&|H>F1u8*0-e8gmz{IkBuDPp$#dTJyM>B6=dOCPedLuey zh9Q=jlMZ~Glia}-&6j(FF@6H#K?Xf%_**|VVjzU6m6lEQkXK_SSDgz{zSrq#w0l%j zISQMB3*Vsddaw5IT~R!w5Px#FJ>3fpEK6$7vSv~T^?!BV3dIz~P;RIfIFCKUk6K{J zmTD>rF_0RZuDZGJn=MVj_1qc}4U{`k6Vc$qeu*4f`f+PIAG0S=-CjUtX~qgHnVr}I zm{=sV6Biq_AfUsnd%de$Lp7`beKpYew+xhAU>f>MNwk-Y1gWb)WDPDPHrBw zXzpV=TIl~?TdmVYE@lw(6y~S6PMZ9J>kEbduwMlsv~fO<-+#ZT3q=(d#fch>Avhje zclPIN7rG|c(%_!fxxCCe9d47eO4yN|DM_CB9_83{`t z4`PhgK+R&_eP`VxA0s8&>?f@(NFsGT7nzI-Pq-LCKun#FtKFgA|d zK}f&*hU3i~Rzp`tRFW<(IvPaNE@@?w?)Ff^b|@$&n^3ogh%k|X_&+O~rTF);pNZ_X35ahb;lKT@1Z3s-^CCKWH>VbtL;#5t%7N~yoh%>cAeW_) z@t&CsN(o>_3mQcc)^q-AIiit*>%=9arqtyi!1ngwqh~a{DzZ#RcLhz& z3fPm){-<)V|ALXeX;%Mi7j^f?%KzP((A<|-x727`xUokq9W>sxmyJwU+b1}Hc2s&_ zXnp*rc%c}Z0!H+Vt`*CaV-w@q56@%1*LY!W>478`)N|EG8VX((Go(qeYH0?)!IzIX+&!aWREof%j z{>#WoVMU$)lR24Zb)tM{Nu+T!dd`47onGJfnJy>Pz}{(Nr+RFc^>|s1Fx_o8;6()T zVllGByqt|TJa}gGDP*p#n_srHA9RAoK%oCMa zMAr5v)INI7>@J4~|8(N-=9A6Mte5g=({7X_rRVxzGLkFZp+mKY%HqxnG{uPGU0}CG z10_XiNpq~luy6aKhVgT^$&WW*8WwUQ^#yVz$5&}Q_#?rg2znAjo2ZH&Qy2uekeuI| zrsG@QwEdi6KR9fKk4w9;I%tspiVd+JC10vyeIk zotu*iy$yXqyQ2*&)hD%%Y&d)S9r^j5;wun=hjEhO_6$pNYh;y?1soa=yQlp2rQi^C z1g|BXeN?j}nz(D13oj+-xkjD(=6f3sk}Dl}N>8mRV(e%S%GE3tMS~KZ?}yt9gzS@r zGQn+v3iAgw92*D&9=Sji8#ew*A&4w8}Twll<<}Kh2Dz!;<5U1a8N=Ywn-%nMbeB zbn9#}(omryU2|4sQz*_pA{gv@)kj#d#a8_nGb{#}J`$TjZ)t~mo|?QYK+C4_t_abX z#k4or$$@g~Iqd69nv=$F5#3Myd*Ka`lbR;6IUj%357r+RKff@1oC(aLQpyMuKLfcX zs%V>dvAOevq;+z!p!oAUlJ}^Qmp~+p-XQ~{J|;4{&UNiFIsqa(g97RtHY-)<|3Jzs z&RWgeg_OPpNW9)UrOw%NlCRa61wvhceDMZx+&|HfFbGUvqTC8{Fy%Rx6|3W%a3qQF_mx zC*QDhF@67ti=zBqz1NN`#zMI*mKW}O^*D9($+R>NrJTJGiX(o3x2`X6kQ&wEkH%+~ zsrlexgl;<7+;oVX%`}umRK(x;RXGyYYNOQld1#SIv~p|iCqyc2axLSe(`Q1H4bXgQ zwAy=+B{8!TuzJ_h4fB4QXSIOnLe3Ku%HQS2VQwWr&ytbmUo97~P7}C&%3bx-YQ8rq z99Q@|6;J!dm|dBJO~NHp^^*R8zf)p&V|$!zfvvviSUz z9Y+_uWoJ~Qag+}ELV6=E9%DWGe^oB@;2jsA7)fUy04V<(Gklr%4dgjlrDXTh0xytRlw^^K= z99;W=QlEZ~b?&bE6v9l|c!&u3{vFz>8^2v_GY|sZ)WFj$b(sQp1B?f4UUz^PK?yf2 zu_-`!B3)JJLSz>7OQTv$8Gpd1$}b2pYJJ*C2oYrKPzTe7eJnNbz#w+#GAM0UmR;Lw z?fM+J@lOng1oope-{~tmxvlVf*53)mxA$L36{OvcNzR1 z>P8yeQPy4YGi-k22O*ST~_nq`plWp?e`N+ zmb6^6vS1D24=!^4THnrb%xHvgMLgO~a6oyzLw^(c=b7_wln*S)VH~j6usMY!2Isp6 ztvn>LYdNXPx>EH?5YqtH37{xhK?$6W-)`vGS*XpVz6rB>0fwfyxs^ml;VF2}ONE1k zV#)(7O@maa_&DiZXCCD>+r}-}3m?6WH>CvuvnDqd*)2dAMd!%WQX z3B^8Ppaa>G>ls*DK(DRqelQ*$3qg)E_QgnC4+HfBUg+3f7ZJZB0_l0cpu*Md}o4imZg zQrZIjgtYaJ%|DW;6*%XHpn(?jaP6;Tew29kyoS!+_R^&lhwwjY?5)25p*e^ z!+-kH%L~Q`aH5k#bNC$Z|9L?9K9!0`KK7J=*DW7qwYyEUdyHeGR!+PNIlY@_;Ssdx zM!YRFkEKN}yLZ7h^F~1;1$#TOMeE`a#Oc{Gs>nyl%{03vbht(T5ouPOh$F`^ar9l2 zld%29UZaUpbU@3enw<`^EiYwPO)+k2qB2_qM;AbKu* zIjj+5cB2B8!cWz~j4Xmy9%7dhG-KT=8xJ^{4Mgt{A5DuXg=g|0OS_(cT6oHM6h$e7v`z@ zSz#WS1Lc>K7PiCx-0{EyVwx?pj^ie5#s9j;7~(_KcB6&T8fzU#es!QdcCWmH1;l=3^rL!R~5KJM6C)v@}F^9XIi^p@R}T&i0dK{^!~Yz6OaxW>XJE6NSU zp<0wBsM_sg41buw2tnV?)ThS;3r|Mwi50KhF(+gS_Y7!~^}eqLJBJj*IKg$j@5-oP z@CHYUqlmxok+d$WSwYj`j^LQ(em70<`K58>%(jS7U${9bJEMj;8a++O%u?}cIaKjN zDv5qfjvyJ`Bf1Yfp1Ewg|DkVEPKP@*SuR0pHIKFapUFh>4D-Zx2(FzNVpNXSwMl%X=xU?faPYB^kT)Lo zhlNU~09TG`wE&+m%Jo7fNkw79W0xU5g}bg!Y>_{jNLlm+JQA}|c1{flwTDKKlr85M80x8RsGy@hf|vYj-#37na}HkY>2om{`Emzu6oAPzB6WK=ZjPG zuKv%cA#9ATNwARN=?Axc(a0c8HH$gzt%Dyl=|MQy!00g|juXE8r~Zyw&ij+{T4i;( zf_qDRwChTknsqvs8xXLBv*?fTL{~BgaUrs2Dw#d_GeFeO0JyeuX7>9AA1c2$Ll#`EiC&P@nMG1vnK8#l8ce`BMOcgU@^S#JJr{6Fxna}k;_v0 zTMISsOj$Y3?<|iOP{2KiE$JLag!9n&6795a6Q-tUHlDl$Rek4Z4&Bw1zEQ6g*>ErN z0n?im-?ZSG@tyyQw@OeeM}EmJvT|U0+%THrOP}WB(E~&`Iql(=bu)l{iR2&ih5MSm z*m3dla@URSS=A<7L&)fOv~;5)9Cn>wqeIw5vZC zJ-keL<5>7gTgnT(unIPx7Z4@zm2ZjHN~wA*R&)|=@xukh^JED4rYB7T(Hz>$I^qiY^G89q<2Hm{_tJ*<%>$#_!eWvd(&kGwd{N zwjg=qWIe^ob zfIcDmFqu@*$$&nsgb@rD|I$OI!QBf3TU9QROoN9y8o@zTG_I33w|$fKUBf)+?igq*her840SfeLzU2q}VVc~hSehNl z^Z3FDb!9=Y&Z!##S)S`B^nI6pxfAf?nhok*J^YXAR(XfBKo`7RFpGqyh*mpSUpOwd z+h`%E)_Maq;i)8&K(LdLt=Y7Oe&hh`=H)HT25HZ)vkjFn%$543dsZfn7{@SvRjSrp zTPUBY5c(G#Oq~|1`t4YQcT~MHrQ~h#TP~CuwDBhf-IgkyhsHQlrT^K@JLZ(op8ZJ}2} zce1)KQ0x>(ga{rfoSZZz|`pgxmH{~)!m{T3ULR9=Byrb@Sj9CWEs;(iZvQu zu@}UmyXmB5hXb1*sw%P?Zn}1@`H1Rlv|{+ciaV}qt1WE#qK<){ELu-@Ed8&0uB@me zFbd5`#e`^o6cUte4$csswUO^~=nuOCO?xkZv7YNz9Vq=e8p`=_`locj3p}39L*zy%ahP|JYr?SH^`YY>0pzA!l|qttew33v!2-M{)-q$l<+0ihV877mDvlq; z?Q*;!I<$24Bk*QKXnoN8xpD9SHsS{dXp~ku`heW+J@0oS00~ljw1e2xi8QEq^)79WuKS5#Cnyn#R>3HibQgDw8!6zH!w(~>}`MxMhW=of@X}w$R%K>w` z_m)A-=d5GKXE2K~HAmkQOAc=C`V3*19+!43f!d}Kxp| zFoL4&kuK!*bwqwE44;D;mOHAr+6|K$sVA6Q&gc6A$`&vjcqnLCB<{cY_4=b2`LI$i zj1Qa=@j8Y?Ow$S_j>DFWeS#0OfDY+bWYG>w_1t#2Y|SVr`cnTrnZS!pu}Yx~^1~ZP zEd%yq3@$O3apL`aBQ>o8T_`vq39>=%nVvI)u zEe^i5O8x+odnfTq6AUD~kAbO869Jxq{eHX6P@_O&5@Gbq5{ker{G}o6RiO6U9fK(a zP%dt?1j_>bkuA+8s;L6EM9SVWDiatj z@Re%_T5g#e8mi9pw>yYL8NL~XGAWDl0D_~;vtE~!teEb{Ug6_@0hu0?X`xJP|7kZJ zO$==QQ`s3>LNPM16EG0`r{dv(qL(qTHT!GMNWjj@`rn3$fP;bQzYQ}1!+%QxMrIa9 zg8zM>=*29o|C%@w(2H3c{526VF|so@f#TzX`af5>ZFnnLs35ChI1eLfVpXbAsp_d1 z$I~E7_?;;RV&v15m{5Za6EaJdgruj*5KxNb5!BEW5Y*^Xs|ZY(!s{4{ASxm{SfHZR zhXGQffeMy`Hv>z^4?B6B%yz!|+5(5;;6^8mlM+!GK zYUPU=AQ9Wsr-^_995fKBv84{~1Edwj`EiAPmp35zR)eL$tJ=5K_)R*y9?rMn_~|Pl zi4-`(l-7sty!M-b_`MPH6sSg9&X;KlvjW1YD2od;i$G|XgF{di-dH400B}Ho!VNlg z6Avn;DgE+;=2MWV#r5^$i!#_OsV|2HC8w!`O(s+9MJc3-1)VF1M8zwC#`R0Vat(kV zLR9=QLTnB(;4?(P!Ppv3rE8F~4memZf)AMp>uvGEe1qHwE0gF{eB%}+`i%P&e{F(l<^0^FL^Bs>pB!C>%$F#W~FlQC-F zI8OK3E<*Sb#>gB5Ji*cs7%PIX=%APMhoOArFA`kjpg%>BJJJ zXmRu~Akf*fC~GYyRkyVzRs(SiBSCC;Mw+agmw3&DLf8jLTQ5$+b(mXOjr z(9~C5bZ90f4M~}n4}t38pR<@L8=E`*XSh+}`RVGWD*!_i^^)_pz}R28Lo%ln5Z|OZ zol4u7wjSnF9C!Yo{#veGEXb6ly{R|KUrDT{fwNqt6(v|%8v49h7(zMCGLLH6Pcvhk zIeO}{l48>by6^k8!E_x-nq-Y%v`3wa#O4DI|QpTNXVZ>*kFgcT8eMRXNukAM*A$eS@h5+K`-u)kPL%@4+~| zg~D5=V7a4MW;RY|e2R1)+UlAu&+hrkwToJ><@TQixHxudYn_o8FEU_ z%({6wG+oMCC>ISnPHemmJ16T_iT#Kur`v5MEZk%V%2h717eVcm(DeJ^74&^K4P`e) zo%JWrXx>U4=o325@r&;t%k6ia8noiL;~?mHlorNM!zTZ;GF574BTm7R!aptsB$hp^;5s=5D#M3L34LXSLVUj~%Yw z{+5H22u}^Pv6_qfheGGmf2;-m-5)HROc7IIJAy{j_lyvs)2Ffi44B9J7OIn!_DBpo zeytXnORZyCIEV~%GmbfC1)3%p50eg2^yA9~qE6)N&K+i+im=Qjvl~k*ZH0Fm375;; z;fJYy5BKwOVd&Z}bE?_)L#raas#uBl6LZNO+sTLzD@LEg^n6S;$EIYw7y7EA99Hhr zWSVqGehxlDn;liafAT>4Em_3I>>I_7=ktXWS+)@5>*L!+EUXg_xu3muR%xGorHj$0 zwX|BB9~vr;=K0RkG}es|c=Gp%hW`n&IsXU9=3x21(9A@@%*M+8U!eYfF`I>njs5={ zvsGLoEt}!X$?NI{6W$1u;LnOb7&k#Xt(- zJ9PoM^7hyJSW-0SxPn)zW5EEr<1}KxYbYp?JB?eUml#@<1c4k3d&qrN5$4(vYVRD3 z!;p7`z_1tL&UjSt{bF0f1q;L4WnETcNB&x@>t#emMM1kmPiX^$n3RwJFkCoD@M~&gLAaC0@}@Xw zg}L*+u_Vk^=+kq=?dJJOxcc72?Q!ya^Y=yC7BfJAWAMA(h5PB0+n$`hhTrz`h4`Vz zxQMZT{Pu;CG3X@&y*uy6LDaqZb>6=7?G=Rvb{6KKAl|q2Ek($=fS{RD#P@fw2g}N{ z&8g#m9FY*m*nss9Ixplw>|KFG2=VLx9f-<8gsYKAD|LGOH2a!A_O?df`sm?JM9(~jiZ=)N9`MgMh3{DhkK_lBuwxt`)(Iz zn5yM@=WoO9nmcLhPr%p9)cea%sQ8l84@x^s?1C^RI5 zwfVu796BR-(jjzVS&C8_v(2p!)3j7R@4w2h^8t1U!_PSP;%$^#q$Eld2 zSiXKV&)t2eX7X)ko!=e-2*(5Q(haa(9ecr)8bkk*g{ywdHG6QH6^N-*;vqqTl4LD}WqMKGqqF0_)7 zKta9&E3cjTlv&gJxj7!}T-|k_G&v7-Csl-vkR=uu*p${lFKS^z$nm7ZE$vt~upV4n z83le7BYJ2~{{kepkgb=Dy?3RCX&*y$VXol8OUq&84SF)SSb){FYM}R7glChlniutW z`IvRw=EO42I8YD!f7SNZ(RK7l9%yXG5HoWOF*7qWGcz+YGsVmhW6W&F%*^bV9WygC zziZEYJG(pIJ3H@>ch2oPtx{D9TE8o))M~l-ElRG$!)-B#tTrQm7HKDb+I>3KYLNAo zv|_$W$?s`-*~f~eoJh*E34(yR+6da*{@wU>yC&nvVJD^hw>v6VAuf>6mEhfxnvisZ z6{DnwS0A;<8jN=g&oB^T5mB}Z#3xAQ5yTlo(5Y*1Sa#~6)0*PYy`VJR{FIJE6Q2eQ z?HBs(g6KBUpZ5$~lccI5)Hi=nPpP-U*zOGeM3!1XrlYA;@2Cpo)wq-7b$4Y;2yQb? zihl$08Vdo*Ni;Efil&AOisbUI#Ac_YJHZ3#P~Ep~Z%;S{PADq8EDZdrFyUVCGaASe zyR>LcSD6$I`0f7tQzBf=xu{=cYRVLT1vNBXSkA5aVR2T>euzFYaz%>?^zv?d_I7UF zu0D;U<J1$9bq&akR22_W{DiJFZl%v)Ifv5+LM+(>+%=Hwz0* z22NOo?wQF{?m8B=9zK;tN@%!5_b0{Qq=+2c^g4(%o-$a6l03k%#L1z;=QPy$oX@m6 z>dMVjD3zI#G|_zf@m%-|kKaFGcjMsV{wZ&pl_R7Z48?0kBHpjV{j zvkW2=Gh&DpVV0q|;ps}N_EDCa%8_eFy5y3s!`Z`#sel`ZO&T`#%f#xh!oroxFr>Kn zrL6Ro)G-6ki7qua-M#283S2A^>3o*$uT_O6Ly5~scr0CPjekOT`N93eq=S-6k?erb zh?YFIG>j`CJ&C|jtV7mi5X=%Cz>HB&5a=d*L@bf{cYOkdbWha5-aGTAeT4Y|_cEShtB zSTB|ZW|t%i70y9@*$N1{#vzUW$3Ng!gNi{c3!b^-+V#` zkx9~ooq_M@RCWN~hGb^SNNx(=#gl`X-FPH0!?nx#)P%tKT3>#VV85gwEi>QJ8O>)O z<5ULtTw++8%uP$nf#p}HEb3ng^lyXg-r9NIg~#-8BJhoCIvZtuXCsFdMq!F;sOgTW z(Okgty7gQy1%e91v_Uc?k8-A{wE=1Oo3*S)H80Ppmn!-`LO?l(&i)CoSpEHzd(o>d zQkJDU5C=fG$Xez65x+xK$`sbiq}Y);Cqwz#XVmd+ZzUpwlrFHf^3qPgg?ggdFQfys z*i}+I3aGRFEf}tpoLnBxYLipPlVKv1jIWU99Z?wU*t2|dLx#{vP)WTVVcR@=q)mRX z@b+n(tlu5bZGBU0U`Y|{*Q;}V!Wor}x=|?j<~0pvjgHruB!n(5be{oZsck!_xZbSx ziBp=S^+&sL9@BYuiP2b=Fqp}Rk?kvk5y$tdZp?(Df)tEoW4rIut5UhmGHOawG%*_>Aky{dFHuJ==u1VmAOpQU>_rt7 zGPaSpOV_!Y(|pv`c^6JR0v7VQ=5Wtm#^etu4(wbOHJKtiE9_Jb4#ac>>|~WU=2U4C zS9zq|qQJJbr0KCVUQdj9zevJ~V@*=4Qi3b)-xg%{7EIZvX)(vTWjxGkE*5N)Pw8=$ zeV`bpGin}!ZETc&C&(CgXgF=EikEiq6c*t)Z8o8rG9Dar5zKlD-{DAY=3}Oeqe@F* zG54V&jMeN$8PY41HHu85C8h>x5~S#`42@97aVxyrA8l~BUc z!)EEQVBBLnQV*p(28)B?J?O@bRKbXkYg|ab05Q4Wo!qsM)J|wgz*FB_DC46@I%s&o zW@b|+Lf|niz0SDO=2~sB93vdCC3EfV(v_hW*F*Rwa}SM`#r0@jQ(cT_ohWXBSDj!K z`D{4hdh1Oa?c_`;FwUwf$hH>X#We6MKKR8iXV9fh1?cLgDg`j!5e~4Hi`A{|?%FF~ z&geb!$509QJ#FDd(id`s%A)DNWxkEo0YAchu&ndv7O$VDQnEb#?pw^LZ1x&6Q$Y`^iM*bD`y$>>bq;1&zb_BaB9PvU8*)&b4ik8GDAd(BFGNuaev5b zluB-Qt31#|kS=G{pw>#&SP_KvQ$|xYOJI?AT)FK-&_!gM3#utYv|T9i+~b(P--)%0 zrYg1|NW0dBp)L;fsA$Kiv30e!X7?9!IpnZc+66-0ng&7!=l@D>t=UJx8hioy?5Ha+7#(k&7L} zk0T(ZXhg5bh+L_w@;CRu^KWf?@kVms-&%-Ok;}px-1wF3e&Y+#`?Rwk0F+D6`6VTMk&sDa<;eZp4gMr3qmc)R9Vw zzb2ZwY@bFhqxG&au_ZxMG`bN_xO!+LsN!xV>5Mr8xn(dg$I74gT|BRUhB-37%jhfB z==!QKH2jE*66i0^2eRQly3(VL;hUZ5`c`LAG;fwGJ3f1-W@QU{`?Ol%hnQbFVB8*&hIfr=3{O0N?oP3DPUz_~=MY8ESW#N4Ac|7hlKpifBza^*u>PH_ zo3f`{Bst|oIahE*Rh(cRYCSR!&qCE~-XJv{;gWn?2OTwph1A=+>}o^I{0_L@KG*Q1 z1<=(T^y!Ut{1K98yx#Jc0@O*JUG#|f5PcDW7r4QU*GOgPk!%!E zd6=?bJLr+*mhcu?3i16D*CdpZ4wT(76zJ<9R#ZE_(n7`AlQ-FdXB~3;kVy+jr3p@6 z5-A0-=2=`gWk|rRQI#?d(Dh2|S(0i34%XynEJ#iXyqD_rKHrX~d2npIZ?Vvi3G4xT zFu&15$bb`9sc2#+XVl4`8`mmK9$bKLwhf};$OCH{D>X9C;?L1qXyP^qSZ1IwiU$ld z%{%C>ZVGoLS0XGz9m^T%);r)aCQSyG(ge?2^9QpvC?UDm6`(4T-{_weItB+xjA_=W zb(96VR`en|XLLx*&pT7QS^d%?o}{B6C{1`5uJoF~zEN`~afKcR7149|zbsW1_a+oZ zGKU9p_i;r1sEa|fDKTzu6@UpHlxDt?Egx;L*JevwS@)Wp3%VN=$r0oaY&@uLg#^|> zWtZv34iQ~}DqO&@JzD$_z^&wXe{NE_(|8TqHYedC~LJVMu+YV7jUZ`sy2xk7bnC6uIKaf!4zxET~hch{8Y<{ySiS zN=r>yXD=OW5%aUl!+dhh@I+gD$)IS9(`=X~H}0x<%4s~Qc;Tn$d*D%$aDL0q*(fBx z*QCwKT}3EsjUpU@K-C2Sa0&e zw?0uA!-;P5rd)t5A@Fz8d@&Qt@m2O=i$x)+l9RKp$FC)-hP^kw~BX;QFWi*ImJ|bG5;=Et1u6j>or) zg3)m=YLVGDAwN!({G^|-X{S4Di)Wj7X%(b9%qQFpX^Yu3=%)DLZvzmVi{Z7D<%+MXsyeXDU(H-Q#swG zXyV3vaNej_bu5M?QNpvQ%Z80K3V&EmT@pqT?NQWA#wFs9JdgbN6_U_nH=~}nLyd#F zgRlWq39b+H4NQ7p?~)XcA5UljFYrr{Dtx_{yI|&yV73v`!Ot%u5r*l!2Pt@8r5^EO zPa9JscsHAa*y2JDt^9^7^2KVm_zx=14lER1Kw>u9h=vIf1zgR!QzIeZ)Y_d$1}lG~ zPk)UZ=APc&CEN3>hETBE$Yp0ifyG|ewY7r5hGqR6g{%wu^j_%*|-%dH=ZlnZ`a+4IPK<0ewciIP>ln5kV zX25ly(ed3SB78oN=}G=w1Ev4>2Fl9%&-Il5pn)bTN!jFzBDY>qxWmTMgZHoKwtpLu z2N4ddjmMD6nOzoUuB{Peb_K${JZm^=+bgU6)3dEx`Y3niqy#j!Qg}9zebOHQwMC=; zVteJ9p^m1kbC3?&MfP^97`I|C*_Q2VPha4M9#6};qiV2@Ty^c$T6TX#vNzkq zYIH5xgi=SJQf*(Bb?TFytL$$0+#fV&0hLG-LppGZi(F-vkOA*~V!C|TU+5{KPF^j8 zVXsRya42IFHdmYD(LHw1%vg1g8#Lo1*TPZU;H5SSdj;OEN_QRk3oe{GG|BM+?D+vF z%1)>IESHPiClk`;+=w$CM*Q_eV_8C{N(q80WXJrBvB$p+8vK;|vu>b0#v`3kbI=PPlpuGA9W?h- zE~zXn20Ds!v0Ly!R{>b=ZW3n1*B_IL3x2Dw~nHXCMw%{{lfYx_}H0L;thqm@ByC56sK- z!U#H^33Mb9lZnZgaGyWP&uL86gA)Cd=_(Pi650#}58I1`jdyN6=phpwmCmt0xYsR5dq2_*UXrq=f6ll+3D9{`+UIW{WqiUCJ zLq{vy_qWx=G1w8B92*gtaQXnk?aKDTnacLWQQOdG%J#wD6l?;8iRl|F;^Tv3;^T}u z|6rMru^Ft%+k_Kdp@5Zq8#|GC-f)~IL>j`!0e_L4XI zJ?l%+EQ?QuwZq=lWAqD=yQ^uzsq^jD<>J%o-CgOt%;6EI(}cHN^o_z5BkV{BuQz7P zborgj+*^FQ&)5EU2y?aHp8-BOv>$xH7}0PQ9-cf+r!9$%d#i$*1v_$2FqCxq=u$?v zZKNul{gC{qh*z3LK=Ef=hDRsF>^W~#q}+-0xW7Gf{QDMWd2gKhiWE*rRaRdzd#8~h z;w;?CH;TuzaeNg*#V&KKm_b$YlfGfziGYY%Qb?T@CpH_BFjoUtCN z-X@sh?MF6T_fCOT8a8Nto7F`!gN+eq`xna%$__Tg1oP|r%1yGb%aVeOt5YXr#{|et z8fFB@`N=7frT|A^wlH!MteZ~z{>5q~$B|q*orK{aZLKV=ctz|-+oMI+DkMPxd zJFO8vZExwgtr0}-)%(R9xPpn^?-@Mb-jC|Z*r-@tnq6pk%ijWf4GoL<_g*C!ZjspsyP z3KM_)8vm6<0+fklm{5k)ya#IGf2zq4e9C{yUQJ4-fbRmB=GFSpIpseS57eR_Flm1r{|1VQQnEl-+of_>I+MDuewpRi9ul zin%O5ohom4W%9W!KAFBpheM+mwpNw04m|FoiO>mlDANj66F(2Ns&N3iO~l*ErYE6# z*)&|M;utv9hcNEO#m9SN)2osb(=VRYhA^H0JU8{BAFOc!)(d-}Fy8$f|$=*N8=!-WJlV0GjN2#xe*2pY-57Mo)n z&)D`|&y=J$3-&vN&0H&?*=hk0{xMzqPYC0t+$nUlj5*xnO{#oAxMzQjM=|-}9l~g* zuV(#+5?C)Fq87j)e+Oa4zkx8zKNraUvragAnijroPbH;Cd<1_+I+aFI$v#e4{R?Vu z1w6|P@hM`lR0$*3amRp-aWm9+5NvfWnbpx&H@o9BmMmQUrAQ96{uuu zkrnP{n~f0f`^mFq#=8Iy=)E59bSd=HdJ{Ap=c{uri7e?Q!Wq)bg$eMiXC1fU_}PwF z6sCv60tX)0vqZPTx?8`oNu@0W=k$P}h&)$J54*g+INW`)u}U$u>(5c0R|+8VQZfqYfcrG zSDGoiDp+N(A>th0Vt7$_Q8xG|UPE7m$v+0TgIv;>u-n`*{;_gK8UAvx)V&=HVY z<`o-uze>7_*z&;)1O!YWEjvwRYc~?Wgs}1$QNUxSW*}@~qUm0p#=kX>ue>fu>&K#n zbpL^;PVPk46j6f2Myk;B*G3%3iIis51}Ti7vh8oeupPJCL`z@#q!HC)rezQ4gs}mg z@GT~j)M(T9_fFWD#^7GJ(Kw<#*rK5L?e|id_B>71V>0?&+B{R+`R*Nd@3(stDgyU6 zj3a?^MTUOpAIG2W?Ce8O%&1N3e8mS7tw4CD0x2VHj*~bMi25 zZ-U+s(TpOtZxb1qj#KoXlU8CVc%`loE`a~D3;t=-^@wy1H7D~_p!@RW8o7)oUvn-? z|JMJ;q}Swy>_W{1Yz*{h^jsSX(EU;$MUW*sVLqlTn1rj9-A7=Q-=}{HpXf!%`aKdh zu@J88DXc@m-6KQ6jU?jPf2`~Y=z+Nf3Q@A?T2Qh!(onLB+wY-Y0PJyjPvJFrPp}T; ztS*{9Ko8t!G7OONAmc{T@g(*hF9gzK^P!a>do@Use;(kb?DHuZS_{ojeU3~}6nO?O z+|~Z#Y5JL9mA24&8#zY-e1MKREg9=)n`C?k_P%gV&DX-_4hU`P@@ZFo)R+DG7VT+O zFLVDazd?}lze6w6zoVC#mF+*C<0UF~S?2=Kdxf$pkblc-AjzK{_HE;ne4e!i({FPd z3Sen8GCG79fmiPrW6>q8lWeX)&giu?HwIlDFAwb}vlZ(|+*R=l{m0uGrG6c6n&{P8 zr8(uofU2Hcy1HVTmX|iy(?8}`V0LYqMifiXEK#l1v#*M2P)BcsR@zuk(tKa-+UR&* zLi)KGHKt)AnXr5o&YrX3Jbg57``2v1pGK0bJSsdxDbtJ>IBwjB zZ?!)+$cv*5TD4iirHGzM^;h(6PwiDyIkD6e*PG5jB^0HZqpMt(!CKeCS5Ca>!cw$Y zv^{7_YA+k}IGP+D_NQ?=)g53ykyr2>ESk*~ZrRza%ZS=k!PhM|$y@hF?{s}1n(x0M zUQLe{CRGPt7MqXqSuIi=@=5#c4Vw+TF{CeBjakbqhT46{KQHH zehk&fd7W%qlN-Er<9-I~czz*xdJ&h9V6%#Tl?4fFfOQ2s!;2?)3?w^6E=Z%vR3G#d>w94KcPizQ02HHXAiLEq??0Ds$=9- zvhJz`sMFn%W=9S&+@+mM%HK;Cl#Tfw)a?Rsk{~$HE*V}6tB>P$YvhpObUM)A`m+&k zJ0uZgUY5y^lJBVHukT}Yh}_R}nnbeg)A1Z02J#@xOg;0NT~{zo#M4fsUz#A;(QlKX zqXimt%Q3!oQpI%`xZ(;u;s@7x>%<3p=%u%v#U^>OE zHtX!CZw59iyf}k?T_RAt&TToeKhwWaboKe9EcV0x?-0QJ?+9RJVf@b#0GLEBvBQ51 zK|dYvF_{VJ1nK!EP~!1+Onw%!fvXoRbpJ)9k_7i~w{u((zq#@CPe9~`xwDHiX)KFP zJ7;e_mJ7G^s@ctK*1*WjW8-5Zmk+&P0gpz<*WpK>xGR~Lb8$Xgr>Fgn0o=z8fsU)`Ww_VheOG$86U0$2OEuAOEpGQF z_py6#uMtcooVQo_hHqLqkd`+gmO@tT4+qQ9Jsw7@X5|99434v|fdqS|_zJ~+PUBuY zj`0x%&ghKv60t%oH7%PvrDEIZimk^a59It za7-cTAtMKl=aYqwwc4fQX9A_`7lkLkOZ(OqZ{nWsJul700LRS&=8+SHR!4;==i9l7 za~5^xsZQG=r#usq-DE86%HCVWd0SxyD_q zqxW!4U)4r?zIJ2m2op1j?TF9107JlmngbRW@^bp~6EJhchDnuS1h-H(I#(D+KbG$0 z^kl10Kl)90I-MP4CK@K>kBrBu<6T&8VO}(t{gZ0dugG2! zb6Ng6)!yzh;&WO2GDD9H!$vO{#x!a^(w=i!2w6_MlbY4z*iWj}Uz?Hqp@LapeVApFhY7OX?8a5dm)h{q=G%hgO z)h>Plu2pm&)izs@@m5Te`9CKXgEP0nVugVg5Vl{`*_Ec&seU|6iaRz9b6YcBFER14azq zw=%a+fi56nAAp}0I0}DTzaa0STtO- z#qMltyG>c=#i&)fJo;$OWpDqq0%PfD2=0pHjAL!ZyUkNpr=ZH~x~93ZVa$1d&&99x z>z}Q9!k>@I0?pqI@v6uC%`U_9a-kQ*@m($IyEpMFH(X7Iw zwYOeOh0MnX^k$!OIneq?vHBdQwP(kJfsFwAv%0zLUl`5qocOU4weTwDc2{ouA=Zc% z=5V>OY9$pmCQUhKx5zm{S6d@Sw}mIR=()4vRPDjIG*{RB6{|ww6AF8U-mc1bJjHC+ zoZ1t6xgp&7xi{)gukgx25j-c-+Em_D74y4=$u%kx&4AZ1zH<1movHJj1e@TN12CTG za5M^B);`WR6KI^M(rPTeT|9Ov=%*A9E! z9LgDy^w~;c2s)EnfY4?*L`4Rb)xa{IL8MFZVNQ}@4(CY zH~lW_f8Os}DUDbIzzcBRHiCnU^Zg#R#nHzDd^I1~bAj-Cq)-Jtn=^!J0EU7K?)h%z8C-Y?4`-jyh1w3!=7H^x=0?-k)vq;aX}6PFw|1O9kyX(z zHwOn2uU_nqa2M%o%y%a*tm!=Y>rYi4ZPyo=H+HgLb%HNkAP%=1qA&I~pU)1g8eE&9 zEBEv?Nqf0r_vVqWes6KwJ>Y6mlfCsGFk<)9G`*H3i1)56u!L~Avl@*oinO<~d*JkY zr;csQ{7N#5zY}oD^ci}y&Ibi>=XfPO!e4cZh{rc$2e%j1>(x04C zp7>|`=)^g`uj*}$p-q2y`iiMus_KyXg`t3)Wl(l8Njc~4DY z@D%Wy}w_cM?~ytPc#-&qCoOzc@lS2o1XH)>bOq`45s?0>Et_*Xe zKNuFNOo3gx36ztBYNOt2c2S^_p1X_RFgc%;8h7-aj`pMpBMxg&;yH}-@Gy>()8eu0 z^Rx-k1&qODu65`}*QCi3Fd)28O>=G0D}(v@7fEpY7foE#R1_BQ*T@+rSO%8#Xrzp! zrv1M2K#{_>{D;awt6`n!8~GLFgvm=s>*Xn2yd6Kmcc%j2I$dT0 zv;0laIyKk`RG@ZW8Tb39G$PfLR?SBz?TP6%By4bAPr}&!CG0Yz_A=YEdPqLWgey?GaRx8fcR*@Py(9 zCGgRleeti#sfmW5W!T2>ixt<7ot6>Cd^lfE&29aGMDB=-mnR2K>{ue7%Z+Al;)|mt z<|jB@-KC?y1M$DVM2*MBO8X!8z*frdD=>iRBgKM1-e}j>tFJY>S`sF$JS+!8s$gjw z`{dBKK3$+B<~Q#rrHys99r&Y*qG**_CCAg(`-eumlk;Pi$I|aU4`z)Kk!uM)I1|5D zw3rx^T8j!#xyP9LR=innvAYxMou*(4mX5ntxR{0Wn2i7DWb>r*+&*={MgE@X z&nvnHkMoO#=UZC!`R;{1cZXZiccI#~fpVWOKmsRg(ImJwJQU|W+XpYl20{~YN=yPr zg;!MwU!=vZ9m=moFy0~?lTL&LVy1(C>|)r ziw=((=)eR4o}-Hf3VdPMM-AHxBq$XK*j5AdjpBy|d_pI!9-k~HA~A)kY40R<51+_4 z5b0Qr@4mTOkl_hb$olAv-J;HZv;mvYJ9EJ7(1a-oq0pZn_3YtqKXvoR*Dd22R=JwR zDt{pYj>VVghk+~s0ZNY0Vw^IDNR^WXoF?wHWA8MCPdQ&I0juZM+>C5X)2I%rN93Or zE-w(`#WlOEDbw_@$4U*7ogk=-PbTR13L(_^ZFGoeBk(?z7EL*4tNRztAG}8H&|Cz^ znVb?|I|%ZioQ$F-2}Yzce80%;VVKRqh;V8@hk8CY@pHvAj*!k!^DpkROV5D1e z_)qC{iyZxiI#o2a#UNYQDJH`FX$7tRuzWS+v~55N+Cl<3O)8GmsllvNrh*Fn$RY0e zOpEc-2QexRZNThI^Av;0(R0~wsV-u=xJ;G4gqb%IGjX;)jF$5CDk=L3E^65o2`aP! z-aRHJ*^8?ElV+@yLY_6fe3CtG2Wh&jHbVEjw`7YBYlt)Y$ru4(5?&6NxZo|=(=%iQSrNnRJiv3lUGex1bYPkH%urbcPCa#IK#`e=NsR>ZdMFc?E=>*uFe1mw8&- z-0x_9-*d?3-eWO|O=fA_R3h{^{jxJ=F&EK{?fy+M^gilVT4_IRt1UOWaC+20I$bXU zhkc}dKVXY1hl{EgrhRdTe?_M4^xxT%?*XTG@?q)Y?k^*X?`*esV*5`1hn~WJ#eJmvVf{nE z>OF$;o%|0oF7KR=9RI~ud*^(pe57pu9{e9=ka_1=lhG(R>6;rFIFgdl2mm$^I@;L( zkE-}6z=ws8?0y(jeb@XeosX2w-Z}rOg1_QE^bFqPKC=C z;a^t&UlJ2|xB4OdQRlYr!H;J5FI)d!P^ovRj}$*L@R8Sl)yYReKT7mbm49X6L;k~- z;k)`@><{JtRp%edALPT<|3D7?yYk0l{kUUz4^sV4-oJt$@cb*KkH`PPq5d!V4?`aj ze@ThH$NgP?J}TrRKd$d0AHlzrJ|6JDYQW-M;6HiPe+w5f8d-ZALni|xds16NV?`rX zN<3vFdj~TcYdi*OIz~Fc8%)eh3{>>g%v5yLjI`ABOn9UKDLhFtXCpj%T6zW=Q5!2G zeS0GpGCT`gJx5aqBRxFle_CLsW}s#wgZu}00VV|jJ9Y6$1=-*AXj$m#=;#?)7}%(2 zSx9JUNdR(EHirL~h@!oot*wzEVB4>rrGpV9jjW=ODz&harKP@}wKZTnFsY)cnFAi+ z_y1dI0DFx8xsUn3F9s;O*&5-|$mp9ZI9fr{NaL}wy}$8g@8I~~w=&}~(lavsW3=~w zzYjL1p=N`{*6cN3xo*G-gVvxQ3+)fI$tulJs>gBQSQy|(sbc9g5+@>&^l)>BEgvV5 zrXjuu3uYTyXUn$sYG+550MTuZAVkZ*6`hRIJk=N&McPU`{v|i?3u*1IRS1PJ`Nbr= zoHB7ea=CuUHK83j4#;R6DtBR;V~(WmYKwNEH83elGRNYaU(%*3i%EUDI09-kjzyE@ z{ogy~^(likez%12nf~PEs1?E}`z41Cg8T)s{}+&Mt{FlCjf7vOq+o6daOTfI7hZX{ z_0Pa2LZF*k5jnt!XSJQ8%;dV=PpV)WevHB^^ugCj-9icNh>4*5kh?&S)D&I$+m7RXOr0pp&+J3N=E(!=`87RN)Y)J9?5mF z#lJ#Bt=^;h+17sFLqA9PdT5HTf{-B)tt|*Q1zhsE);WQx5xC!gcWTfsf+!YS_91DD zHR{;!XCjTAfTNs35G(zo@Pw>DHL@$d)i1ag(*fe(HO;`J3#A=e#56Z6jXxK}=V(4a zjj}o-J<6U)KnhsqO@0OD&bs1b9PK2;&%`I&9NbDumR#bMp<`el|C47k?7VoxwQOgvAXr{%^GT*=nXq^JL@r?rE!2hxXJQJ zb89!A;i&LbKjvP!**h+oN4f^`SKd?{%sss);PAOFBAVz}nd8r_tvpQfq~DJ|dUgE_ z@PQ_AmWu=o{ZfeD_nb;oxiM<+qP-{Q{w4ke=2qCtGCKfYUEWQh&ZMVnJ4u?Ji|h0b zeE$Yyg$PJB5h?>J9x5%I9*r6egN~CZJi7cdyIv+N{>1jfuNB-C`{!{M{H*k$o=1lU zg)D9k_)FD@ka%~$na>486U1m+*U!~UZ#6`4U_B%5Dc|LBcP1`XxgUN`gEUQIgu~U( z1O>o32&32%)L#b`)|CK{qu1d8z8tjbU#u|uEdAN`6U=9Al%y`w6#lL$FD1eISo)Ig z&uyrDg&Y;($?><_1Ae@NWb2f>q>?*fpXQ&FX{Eu@+Pda(!3CE}bZNm=)6Dc+XDzok|2e7ibTVMB>1UTDV8}tSEs!kSTfwu`p zkfStiQ)LQloC#bXi#CN!==QWdHuB)WQj-k9z3>_iqoMkV3&?TWqm)`9V1yZv=7grj za#iwRT%DJ-o81kpNaHjtbv*i!Yx%1{$I50TXg=`MQG=nU(6E4TaHza))aX6gPn~AG z=}K-Z_ZbQg_z$Jb8g()9Vd?l9+?mcf7~s}dQZGGW|GF|kk|+4w`gX&TM=hj_qp{eH z_w_`^y)8Peq*)W?&^lJwQf^jA1rO*?0kLT0u(iT0=KiSs7{TZA-Y|j;`U$h|(~>G9 z4*^E%%pT{Gy#;W!+B_b-=4!!dtCQwnpWWaF!YE@XS52WM(Pi}(3-Cbf-RxWO~ zbM~RF4dL`mI_6Jxh6-x#t@D(PNaRyx(ep%zs)=Awx+UT522Np7hPsvLB-sSIEfVPD zE!a}~{a$`k!XL*YKfFwKX}Bt$qYkpAO&1hRVJAzzW(kikkC1~sbS_f_DT?40bUB{6 zgursnY;^cRgu()x0HysH*fNEn->RWHf2AP8XDnmuTB|aj88UJ zo*Fb{CPp_af>RPaeCwj?_vTd}^2qOfy9$yUhM@U;6hP9sQ;QHq5v_S#D{h-HmMm^- zHbP+PS|p#JV~aPhK>&;<*5n!bJV1cqyc!N~V7~RceaeWuZI>TYg;&aakFH%=w3de|y8q|uLq+yhlM2HaTsG)q@d~~iNhrHmc_H~ix=*K(eg-?$B+J2e{t^W!;Dq>o z7I8^((HH!xXrk0A>P>>as6>uEcB!M8wi9vT`9y|oV~K|jKj`jf;6@N3{6o*lT*0OA zQynLsgC+(~$;TfWyGxqH#lvzT4CVTo881`B_h>ahpT45SOy^XB2i*&w0Xy6G1%x*z zg>O7_Z)qlu#H|TPY6dLYW_DwfN1AZ5VHe)uuj)EHP3=9dgO~)O%KtPRyg&?A0Ch*r zn+S znk-Z?lCN!md>E{W$zgM)lFawkx-f7|j$p{&>lzESJ1M+Ss=_{04(*DoDX%AR5?DZ_ z=6Ba+pN&&eAsRAnG-yRiU`(ob2SHWF%YZgRF~|bCvaZmCN0F>N9beF#kd+;knM!V! zaRHY)&IN_5R1KMmVkD+!%h0>omVc{3{oostKy>6kk)Q3M2i*O`BERu@bVA((A*C3i zb@#{ClM=>rIQOEH8g@ zG`9qWk&sR`^iztG#)9E=Y2<~qny#U9k=7l`ycL_$r=|$YV-%y|Y>00(Ez})sEpFri zt<0()+GoZ9#cbVDj+8hB1DRx_NVRZYP_nPvjufZ=73LvKJQC&1*M-06UV2m+# zaa1VdC>`;kL6q$)l$dcA7lNbVgV%1vBjx1YW=S1PRg@f;&W}rPa44 z)IDEU%3O*&8^Oil3~D@_4e4saEjC~e$6}9M-2AH8xgX(`-bQ zWI=mOTxB^~*;QZHs;;ZBEY`OA?0mgTx5(I#@pLmXwvZ>)gI`1(k2%h3b@}-M=N8+S zFT?@W=)}D)Neb;!f8q35E!yLz@Zy;J2wABzi77$`Q~sTD>mfYvD9iTN39*;wZdrg~L}x`gW#@k1>zi3^CgJGkTLPr%PO?}S7!6q{3<3An5%ly$-o&MJ zT20Ay+N5i*NC}@X%G2tlj&9o(nQ5+|*n9Xk%PZHY<15C<=Ucl{<^Jg}-#BbY;TtoQ z;6g3sQ@5{*#Ka0?1k0RezncygS2qZ2Gde7MbA5oK6n`a$pew%15O;AaI*?9tOEoR& zKsx<4Ow$6NTk64C$;-2N5iaP6Hl1PiX`c_#g6lCIiD5boQ^R?#v~1{tKqzi|I^Jc1 zjzlQ>$8=Wn8%%oOR%5sa7He_Z1svHGKZNGUzA&ML*h0jZi<~hBaivP45ZD+pc<|~Z z7TWgL#S~tnW&}mi`vlW%a41C^JfoVq!3i~kdLj{(3u=*tiXrl^zr5WDTfx17Wq!s+ z4Z&`a*iFYV{E0}UmZydjsj)ehz9ed0hx^wT|%Me+-`><|>i|O_yB$s6yp}jB#h%6Qj_3L-SwM7 zTeO9^Vfia|3#5tE)LYuGmw{1vI_n{!iFZ=AWTKE&Z=#j#Xr6nlZ`;*+*rDJiJ)( zP)~chtj-4YFDRsz^p{40mwDFA9Ya)JMJ69f^C>I979vf$N55@U3(kD4Rm(@YuGyNV zKJ%h^X5p{99zOkIfVx_hq#Ry3`GXowCtL59P0F?=7OQS|zq;wjGUmXC(%$S0X(`ov zJy%vLjcKSG>9gk|#%rN#ah6^-DfZceAnD zU9QMrmq}bvhRk2@h;Yr_3=|Xv;oVl*V>)Yai|Y3kvTp> zP`3`Ac!prE+yhjSEa@OJ;2gud)!iWv2Zsr>itmG2VZGnOuDbhIs9+H!W=`1Y6M-py zuKOxN_#$b>fQ{(-VTI{_;m1Q3*G1^Y!~Uiimo-{1`rY63yPxX!09R38!E;{Xywbpo zR3Nb!=q*|>Bw82+T5twhs9f4FSL9N$#^U(*KOxC~A`f>#&B}tQ#lWz|fIrCooWiEP zGRG6x!848Oi-Ag{g|3qYznO%CnFO3Q9)fS`&u1D8Wa_7!7%xzhE45?4q}Vc?IH4GF zI37|g?c{nS=~R66+^^WstlcbmQ{?1gQKC}*q^00x&XpdjKH;4A^#uWi-=_a literal 0 HcmV?d00001 diff --git a/papers/hatra23/hatra23.tex b/papers/hatra23/hatra23.tex new file mode 100644 index 00000000..a5cf4359 --- /dev/null +++ b/papers/hatra23/hatra23.tex @@ -0,0 +1,118 @@ +\documentclass[acmsmall]{acmart} + +\setcopyright{rightsretained} +\copyrightyear{2023} +\acmYear{2023} +\acmConference[HATRA '23]{Human Aspects of Types and Reasoning Assistants}{October 2023}{Portugal, Spain} +\acmBooktitle{HATRA '23: Human Aspects of Types and Reasoning Assistants} +\acmDOI{} +\acmISBN{} +\expandafter\def\csname @copyrightpermission\endcsname{\raisebox{-1ex}{\includegraphics[height=3.5ex]{cc-by}} This work is licensed under a Creative Commons Attribution 4.0 International License.} +\expandafter\def\csname @copyrightowner\endcsname{Roblox.} + +\newcommand{\ANY}{\mathtt{any}} +\newcommand{\ERROR}{\mathtt{error}} + +\begin{document} + +\title{Goals of the Luau Type System, Two Years On} + +\author{Lily Brown} +\author{Andy Friesen} +\author{Alan Jeffrey} +\affiliation{ + \institution{Roblox} + \city{San Mateo} + \state{CA} + \country{USA} +} + +\begin{abstract} +In HATRA 2021, we presented \emph{The Goals Of The Luau Type System}, +describing the human factors of a type system for a +language with a heterogeneous developer community. In this extended +abstract we provide a progress report, focusing on +the unexpected aspects: semantic subtyping and type error +suppression. +\end{abstract} + +\maketitle + +\section{Recap} + +Luau~\cite{Luau} is the scripting language used by the +Roblox~\cite{Roblox} platform for shared immersive experiences. Luau extends +the Lua~\cite{Lua} language, notably by providing type-driven tooling +such as autocomplete and API documentation (as well as traditional type +error reporting). Roblox has hundreds of millions of users, and +millions of creators, ranging from children learning to program for +the first time to professional development studios. + +In HATRA 2021, we presented \emph{The Goals Of The Luau Type +System}~\cite{BFJ21:GoalsLuau}, describing the human factors issues +with designing a type system for a language with a heterogeneous +developer community. The design flows from the needs of the different +communities: beginners are focused on immediate goals (``the stairs +should light up when a player walks on them'') and less on the code +quality concerns of more experienced developers; for all users +type-driven tooling is important for productivity. These needs result in a design with two modes: +\begin{itemize} +\item \emph{non-strict mode}, aimed at non-professionals, focused on + minimizing false positives, and +\item \emph{strict mode}, aimed at professionals, focused on + minimizing false negatives (i.e.~type soundness). +\end{itemize} +%% For both communities, type-driven tooling is important, so we +%% provide \emph{infallible type inference}, which infers types +%% even for ill-typed or syntactically invalid programs. + +\section{Progress} + +In the two years since the position paper, we have been making changes +to the Luau type system to achieve the goals we set out. Most of the +changes were straightforward, but two were large changes in how we +thought about the design of the type system: replacing the existing +syntactic subtyping algorithm by \emph{semantic subtyping}, and +treating gradual typing as \emph{type error suppression}. + +Semantic subtyping +interprets types as sets of values, and subtyping as set +inclusion~\cite{GF05:GentleIntroduction}. This is aligned with the +\emph{minimize false positives} goal of Luau non-strict mode, since +semantic subtyping only reports a failure of subtyping when there is a +value which inhabits the candidate subtype, but not the candidate +supertype. This has the added benefit of improving error reporting in +the prototype implementation: since the prototype is constructive, the +witness for the failure of subtyping can help drive error reports. +See our technical blog for more details~\cite{Jef22:SemanticSubtyping}. + +Rather than the gradual typing approach +of~\cite{ST07:GradualTyping}, which uses \emph{consistent +subtyping} where $\ANY \lesssim T \lesssim \ANY$ for any type $T$, we +adopt an approach based on \emph{error suppression}, where $\ANY$ is +an error-suppressing type, and any failures of subtyping involving +error-suppressing types are not reported. Users can explicitly +suppress type errors by declaring variables with type $\ANY$, and +since an expression with a type error has an error-suppressing type we +avoid cascading errors. Error suppression is in production Luau, and is +mechanically verified~\cite{BJ23:agda-typeck}. + +\section{Further work} + +Currently the type inference system uses greedy inference, which is +very sensitive to order of declarations, and can easily result in +false positives. We plan to replace this by some form of local type +inference~\cite{PT00:LocalTypeInference}. + +Currently, non-strict mode operates in the style of gradual type +systems by inferring $\ANY$ as the type for local variables. This does +not play well with type-directed tooling, for example $\ANY$ cannot +provide autocomplete suggestions. Local type inference will infer more +precise union types, and hence better type-driven tooling. + +At some point, we hope that error suppression will be the only difference +between strict mode and non-strict mode. + +\bibliographystyle{ACM-Reference-Format} \bibliography{bibliography} + +\end{document} From 743afe6ec9c512c38c827ff3d9c18ccbcfb14cba Mon Sep 17 00:00:00 2001 From: MagelessMayhem <107271276+MagelessMayhem@users.noreply.github.com> Date: Mon, 24 Jul 2023 10:21:44 -0400 Subject: [PATCH 3/4] README.md: Add Gentoo Linux to listed distributions (#976) Gentoo recently added Luau to their official overlay (the term they use to describe their package repository) and it would only be appropriate to include that detail here. It may as well also be the first distribution to *officially* package it, given the maintainer is one of Gentoo's own. Signed-off-by: Sebastian France --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 06b23253..17676303 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Alternatively, you can use one of the packaged distributions (note that these ar - macOS: [Install Homebrew](https://docs.brew.sh/Installation) and run `brew install luau` - Arch Linux: From the AUR (Arch Linux User Repository), install one of these packages via a AUR helper or manually (by cloning their repo and using ``makepkg``): [luau](https://aur.archlinux.org/packages/luau) (manual build), [luau-git](https://aur.archlinux.org/packages/luau-git) (manual build by cloning this repo), or [luau-bin](https://aur.archlinux.org/packages/luau-bin) (pre-built binaries from releases) - Alpine Linux: [Enable community repositories](https://wiki.alpinelinux.org/w/index.php?title=Enable_Community_Repository) and run `apk add luau` +- Gentoo Linux: Luau is [officially packaged by Gentoo](https://packages.gentoo.org/packages/dev-lang/luau) and can be installed using `emerge dev-lang/luau`. You may have to unmask the package first before installing it (which can be done by including the `--autounmask=y` option in the `emerge` command). After installing, you will want to validate the installation was successful by running the test case [here](https://luau-lang.org/getting-started). From f80229c517fe7377a8f0ab9bc7a538c7c619107b Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Wed, 26 Jul 2023 06:42:23 -0700 Subject: [PATCH 4/4] docs: Document return value for table.remove (#987) Fixes #984. --- docs/_pages/library.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_pages/library.md b/docs/_pages/library.md index 5e9ee088..d6d1bc7f 100644 --- a/docs/_pages/library.md +++ b/docs/_pages/library.md @@ -403,11 +403,12 @@ When using a two-argument version, appends the value to the array portion of the When using a three-argument version, inserts the value at index `i` and shifts values at indices after that by 1. `i` should be in `[1..#t]` range. ``` -function table.remove(t: {V}, i: number?) +function table.remove(t: {V}, i: number?): V? ``` Removes element `i` from the table and shifts values at indices after that by 1. If `i` is not specified, removes the last element of the table. `i` should be in `[1..#t]` range. +Returns the value of the removed element, or `nil` if no element was removed (e.g. table was empty). ``` function table.sort(t: {V}, f: ((V, V) -> boolean)?)