From b5dbaad9aaff849fa3a4e093c71c835031574e37 Mon Sep 17 00:00:00 2001 From: VincentMeilinger Date: Tue, 5 Mar 2024 08:39:06 +0100 Subject: [PATCH] Recipe edit UI polish --- .../project.pbxproj | 24 ++-- .../xcshareddata/WorkspaceSettings.xcsettings | 5 + .../xcshareddata/swiftpm/Package.resolved | 18 +-- .../UserInterfaceState.xcuserstate | Bin 152161 -> 151161 bytes .../WorkspaceSettings.xcsettings | 14 +++ .../Data/DataStore.swift | 21 ---- .../Data/ObservableRecipeDetail.swift | 18 +-- .../Extensions/ColorExtension.swift | 3 + .../Localizable.xcstrings | 32 +++-- .../Util/DurationComponents.swift | 6 + .../Views/MainView.swift | 1 - .../RecipeEditing/CategoryPickerViewOld.swift | 3 +- .../Views/RecipeEditing/RecipeEditView.swift | 4 +- .../Views/Recipes/RecipeView.swift | 100 +++++++++++---- .../RecipeDurationSection.swift | 78 +++++++----- .../RecipeGenericViews.swift | 94 +++++++++++--- .../RecipeIngredientSection.swift | 40 +++--- .../RecipeInstructionSection.swift | 22 ++-- .../RecipeMetadataSection.swift | 50 +------- .../RecipeToolSection.swift | 14 ++- .../ReusableViews/ReorderableForEach.swift | 116 ------------------ .../Views/Tabs/RecipeTabView.swift | 11 -- .../Views/Tabs/SearchTabView.swift | 4 +- 23 files changed, 337 insertions(+), 341 deletions(-) create mode 100644 Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 Nextcloud Cookbook iOS Client/Views/ReusableViews/ReorderableForEach.swift diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj index a3722a3..0d85e80 100644 --- a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj @@ -46,7 +46,6 @@ A7FB0D7A2B25C66600A3469E /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D792B25C66600A3469E /* OnboardingView.swift */; }; A7FB0D7C2B25C68500A3469E /* TokenLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D7B2B25C68500A3469E /* TokenLoginView.swift */; }; A7FB0D7E2B25C6A200A3469E /* V2LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D7D2B25C6A200A3469E /* V2LoginView.swift */; }; - A95364672B7E89F1001018B0 /* ReorderableForEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = A95364662B7E89F1001018B0 /* ReorderableForEach.swift */; }; A97506132B920D9F00E86029 /* RecipeDurationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506122B920D9F00E86029 /* RecipeDurationSection.swift */; }; A97506152B920DF200E86029 /* RecipeGenericViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506142B920DF200E86029 /* RecipeGenericViews.swift */; }; A97506192B920EC200E86029 /* RecipeIngredientSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506182B920EC200E86029 /* RecipeIngredientSection.swift */; }; @@ -59,7 +58,7 @@ A977D0E22B60034E009783A9 /* GroceryListTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977D0E12B60034E009783A9 /* GroceryListTabView.swift */; }; A97B4D322B80B3E900EC1A88 /* RecipeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97B4D312B80B3E900EC1A88 /* RecipeModels.swift */; }; A97B4D352B80B82A00EC1A88 /* ShareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97B4D342B80B82A00EC1A88 /* ShareView.swift */; }; - A99DC7BC2B6411A7000118AA /* SimilaritySearchKit in Frameworks */ = {isa = PBXBuildFile; productRef = A99DC7BB2B6411A7000118AA /* SimilaritySearchKit */; }; + A9A43AE12B963150003D95CA /* SwipeActions in Frameworks */ = {isa = PBXBuildFile; productRef = A9A43AE02B963150003D95CA /* SwipeActions */; }; A9BBB38C2B8D3B0C002DA7FF /* ParallaxHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BBB38B2B8D3B0C002DA7FF /* ParallaxHeaderView.swift */; }; A9BBB38E2B8E44B3002DA7FF /* BottomClipper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BBB38D2B8E44B3002DA7FF /* BottomClipper.swift */; }; A9BBB3902B91BE31002DA7FF /* ObservableRecipeDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BBB38F2B91BE31002DA7FF /* ObservableRecipeDetail.swift */; }; @@ -129,7 +128,6 @@ A7FB0D792B25C66600A3469E /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; A7FB0D7B2B25C68500A3469E /* TokenLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenLoginView.swift; sourceTree = ""; }; A7FB0D7D2B25C6A200A3469E /* V2LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = V2LoginView.swift; sourceTree = ""; }; - A95364662B7E89F1001018B0 /* ReorderableForEach.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReorderableForEach.swift; sourceTree = ""; }; A97506122B920D9F00E86029 /* RecipeDurationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeDurationSection.swift; sourceTree = ""; }; A97506142B920DF200E86029 /* RecipeGenericViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeGenericViews.swift; sourceTree = ""; }; A97506182B920EC200E86029 /* RecipeIngredientSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeIngredientSection.swift; sourceTree = ""; }; @@ -157,7 +155,7 @@ buildActionMask = 2147483647; files = ( A74D33BE2AF82AAE00D06555 /* SwiftSoup in Frameworks */, - A99DC7BC2B6411A7000118AA /* SimilaritySearchKit in Frameworks */, + A9A43AE12B963150003D95CA /* SwipeActions in Frameworks */, A9CA6CF62B4C63F200F78AB5 /* TPPDF in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -409,7 +407,6 @@ children = ( A9BBB38B2B8D3B0C002DA7FF /* ParallaxHeaderView.swift */, A7CD3FD12B2C546A00D764AD /* CollapsibleView.swift */, - A95364662B7E89F1001018B0 /* ReorderableForEach.swift */, A9BBB38D2B8E44B3002DA7FF /* BottomClipper.swift */, ); path = ReusableViews; @@ -450,7 +447,7 @@ packageProductDependencies = ( A74D33BD2AF82AAE00D06555 /* SwiftSoup */, A9CA6CF52B4C63F200F78AB5 /* TPPDF */, - A99DC7BB2B6411A7000118AA /* SimilaritySearchKit */, + A9A43AE02B963150003D95CA /* SwipeActions */, ); productName = "Nextcloud Cookbook iOS Client"; productReference = A701717E2AA8E71900064C43 /* Nextcloud Cookbook iOS Client.app */; @@ -530,7 +527,7 @@ packageReferences = ( A74D33BC2AF82AAE00D06555 /* XCRemoteSwiftPackageReference "SwiftSoup" */, A9CA6CF42B4C63F200F78AB5 /* XCRemoteSwiftPackageReference "TPPDF" */, - A99DC7BA2B6411A7000118AA /* XCRemoteSwiftPackageReference "similarity-search-kit" */, + A9A43ADF2B963150003D95CA /* XCRemoteSwiftPackageReference "SwipeActions" */, ); productRefGroup = A701717F2AA8E71900064C43 /* Products */; projectDirPath = ""; @@ -594,7 +591,6 @@ A70171C42AB4A31200064C43 /* DataStore.swift in Sources */, A7FB0D7E2B25C6A200A3469E /* V2LoginView.swift in Sources */, A975061D2B920FCC00E86029 /* RecipeInstructionSection.swift in Sources */, - A95364672B7E89F1001018B0 /* ReorderableForEach.swift in Sources */, A787B0782B2B1E6400C2DF1B /* DateExtension.swift in Sources */, A79AA8E92B062DD1007D25F2 /* CookbookApiV1.swift in Sources */, A7CD3FD22B2C546A00D764AD /* CollapsibleView.swift in Sources */, @@ -1009,12 +1005,12 @@ minimumVersion = 2.6.1; }; }; - A99DC7BA2B6411A7000118AA /* XCRemoteSwiftPackageReference "similarity-search-kit" */ = { + A9A43ADF2B963150003D95CA /* XCRemoteSwiftPackageReference "SwipeActions" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/ZachNagengast/similarity-search-kit"; + repositoryURL = "https://github.com/aheze/SwipeActions"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.0.13; + minimumVersion = 1.1.0; }; }; A9CA6CF42B4C63F200F78AB5 /* XCRemoteSwiftPackageReference "TPPDF" */ = { @@ -1033,10 +1029,10 @@ package = A74D33BC2AF82AAE00D06555 /* XCRemoteSwiftPackageReference "SwiftSoup" */; productName = SwiftSoup; }; - A99DC7BB2B6411A7000118AA /* SimilaritySearchKit */ = { + A9A43AE02B963150003D95CA /* SwipeActions */ = { isa = XCSwiftPackageProductDependency; - package = A99DC7BA2B6411A7000118AA /* XCRemoteSwiftPackageReference "similarity-search-kit" */; - productName = SimilaritySearchKit; + package = A9A43ADF2B963150003D95CA /* XCRemoteSwiftPackageReference "SwipeActions" */; + productName = SwipeActions; }; A9CA6CF52B4C63F200F78AB5 /* TPPDF */ = { isa = XCSwiftPackageProductDependency; diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7f6ada7..98ab635 100644 --- a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,14 +1,5 @@ { "pins" : [ - { - "identity" : "similarity-search-kit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ZachNagengast/similarity-search-kit", - "state" : { - "revision" : "ddc8e458d0e826b2fe5dbce6f6eac96a8935e8eb", - "version" : "0.0.13" - } - }, { "identity" : "swiftsoup", "kind" : "remoteSourceControl", @@ -18,6 +9,15 @@ "version" : "2.6.1" } }, + { + "identity" : "swipeactions", + "kind" : "remoteSourceControl", + "location" : "https://github.com/aheze/SwipeActions", + "state" : { + "revision" : "41e6f6dce02d8cfa164f8c5461a41340850ca3ab", + "version" : "1.1.0" + } + }, { "identity" : "tppdf", "kind" : "remoteSourceControl", diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate index 01af19e60547879f5e76a53af19d2da905cb5828..d9cc0c83e592a94930332e5f7a168aa793a81f21 100644 GIT binary patch literal 151161 zcmeEv2Y3_5*67ZxcBNHaS-ne^ObEpdFumHe&DIx4wXygQTbFisyo$# zDxi8&W2mvzII5T$Pfegos8VVoHHoUFqEsEVfQnIZs-9|~7E+6-#neh_6?Fl1A$1Y8 zhPr}UPi>^GrEa8dqP9}EPnsL!ddsc)#isecfK5WCIuqrfZfGDH zga)G_s1S`rXQ5GOG%7}u&}4KrnvSYb4XQ;^REHLz7>Xl;&POZIO0)`HfG$C6(4}Y{ zx)N#qYu!B=rH;SeSyA2 z-=go(FX&hF8&+Tjvsj5$n8RwEfo<4@eK?3ixFbFj=ipr24R^=Ai||k!#FXf8amyU$lj`(l**oJ7_2E zqTRHI_R>B&NOz(;(_QF%x*Oe>?nn2h2hfA*A#@=*U<~; z26`dAh+axBr&rJy(ihQd=u7E!^e%cgy@$S)-b>#`-%j5_-$~y^-%Z~`KR`cDKSA%K zpQE3r57LL|SLxU2PwCI-&*?AdFX^x7ujy~-pXi_IU+7=y-{`;Te-xC0RVWn(1+OqF zEDEc_rtm5Jih!b%B2UprF+ed;QK%TM7^N7eC{dIurYNQ=W+)mI3l)nLixo>0=O~sc z&Q&Z^oTpf>SfRLBafxD$;tIuj#dV776*nkuRNSPvMX_D6TXCD>e#K*o=M)DNuP9zq zyrpC7yqnyF!GnJ81ooXad@&SRD{0<(d+lDUexnz@GA$Xv@@$6U`e zGFzDK%pJ^~%w5dg%stG#%;U@x%s%Eh=6U8N<}K!J<{jo!<}>DV<_i|HG^=14mSvT! zise`}t6{aQjh0Q(|)kUhk{!M@49%f81RWu3V&C zs$8yIp}bIeiSlygdgay1>y$Ssw?o#em-l@D-`JnPqt14AK)a)s`pgyt3FVDs5-3rNcFMm6V<1xFI7iW zzo>py{ex>bibEX7skytj`?&kLhq*_%C%ApwGu*S>3)}(j749JSI`;3bPiu;=To;$+*#Qn@2<9_G<=KfLBYK2;*=F~d1UY(&fscmYz+O77e1L{n52lW~1 z&gw4eTy>thhq^%BN8MLFP(4Upq#mjssXj|RRy|H#qApcWQBPIRP|sA)R+pKgR|bxgfby-2-OeXd$i6ZI_p4t}zpQ>m{hIo9_1o%q)E}rnRDYuWRQ;v; zEA@Bk@6|`uKdFCHA5;IO{#%1Jv_`2>X|x)h#;D2AST#0{OXJq~H33bQrh}%Frn4qT zldI{j>7nVZ>7yB-8K^1L6ltbwW@u(=!kSr{GRS7rp4Pmm zc}erK<`vCbnzuDSYL04t()_IXMf0oXH_b84@0vd}e`+bMQmfPIwN|Z7Yu7ro0d1zX zkG8M2pSHhtfOepEkan(azGAX)Cl5ZH=~8dx7>s?M2$v z+KaW9XxC^j)n2B(T)S4gL3^Ecv$j#YQ@cyMTYH!GZtVf>i`tj8FKb`X9@HMvzN&pq z`?~fG?K|3!v>$7~)PAM?QF~PTllD*TUpkA4LgWy3V>h zUB0f5uCK12uD@=8ZkTSkF07lSE7Q%^mFp^W5#1bJrEadSN>`(+*PWwVs#~F3savJH zRCk%~X5B5i?YbShow{AR-MT%xTXlPNx9RTEJ*ay~_k?brZolpY-2vT;y4Q7Y=)Tt- z(fy$NQFm1LlkR8TFS=iKzv+(Y{?aS-j9#PH>dktK-m16h?RvjHpzp2kqwlNlr|+*H zpdY9oq#vvwqA%1B*N@eY(@)e-($Ca~^|SP4`q}z<`uX}5`jz@s`U~_I>Mzo-)?ci@ zM88IVseYaQ8vTv>oAkHnx9fN4Z`a?Ue_p>||APL2{zd&u`j_>u=nv`->0i~qssBL# zq5iP`bNv_kBl;ioKk9$i|6#BgtOlFGZg3c!2A9EY@EE)XpTTbk89E!f7`hs|8M+(# z8TuOr7zP@~8Hx?#4HFC{hEl^s!z9B@L)Z{8%rR6OY77mAC5CehOARXwD-G8hZZO{t12`|0Mq`{}TT)|2qE${{jCYf0+M>|Cs-p|Hh~=GDg;@G^&i8 zQEk*1wMLy$Z_F?{j6S2^*wJ{VG0&K9Jj*!BINCVIIMz7MSZo|`oM0?5mKvuR!^T<0 zImSw3)L3U+V2l~##-+w{jT?+t8m}^5ZM?>~(Ri)#I^*@m8;my^8;v`RdyTgl?=#+S ze8Bjiai8%?P1{U2n|7P_nC>>+W4hP$ zsOd4&o2Iu+Z=2pRy=!{U^uFl>(}$+RrjJaYnZ7lBXZp$Xv*|C>-==@eO0&xBHwVm_ z=Ab!b&N6o}pJDE3KGWREoNex5E-?2q_csqU4>J!pk1!XT$D6Cn^UU+j)#e&=tvPD0 zGcPd5%yIJ~^Lggw=2hkk%$J!jH?K8cW8P@K-F%1nPV-&nyUq8Q?=|0NzTfM##$y=rdq<5S(dq$D$6`e%o4X; zVp(Ik)N+~Sa?4uFI?EN7^_C5mD=ix>n=G3xw^+7YZnNBOxx?~+Z6%=)|a59^=SzpQ`Tu#K}BY`o2GbJ(1=Ok2>_*VfP0-!{ND z&^E|6*fzvgXe+V}wT-kD+a}p2+rqY4wlZ6lZJzCX+X~xC+bY`ywhL_+*;d;wwq0Ud zV_R#x+IEd?qwOZ!Cfjz~4%<%KF58{9yKFDm4%l9_y<~gY_KNMG?U3zN+iSMhZExES z+di^=Z2QvomF-8{QQJ?pKW%^6Eq1HjX1CiNcBkECciTO7uia-4+B?}h+w<)C_CEH$ z_I~yv`%wD~`%HV-KFeNapKUL_6I%+JCbD zZ2!gntNl0oG5cQ*g@bWu99oCjVR2X;9UNykIy%mDbaHfdbaCW6x;eT#`Z)SJ3LQm` z>5dtWnU1hymZQuu+fnYQa6}w)9P=Ct95KgY#}Wr|obOoSSm{{fxYV)DakJwV$9BgK z$4I39C6?s(4eyko!PkmFUyH;!)|-#NZ_9C7^M_|b9H@ss0c z$1jfGoye(ls+_#j=yW)p&U|M#XLn~0XMwY)vzN2CvyZc{v!8R2bGUPabF6cmbFy=a zbEhidPu8^yXtE;PrtH3qZHO^J+8tz?GE?2fwY+zZ?>cidg?Zg4MjFLEz- zFL5t(uXJDRzQn!Wy}^CG`v&*j?t9$#y6{v>ubk;c%ljZ5^$@UEM z4EK!ijP#u48RZ%68RHr28RseXlzPtglzC=*=6U9Osy+3d2G6CQ%RHBR)_T@?uJEk) zZ17y^xyp03=Q>ZLXS-*I=XTE>o;y7cdLHt;>Uqucy5|kgo1V8kZ+qVHyz6<-^SJx4shd5(FJ7kiyvm)Gs}c)ebq*Y6E@Grd7?$lKAI)!9Y-+PaEfAIe3J?j0*`?L2K@2}q9ynp&= zALmp1GJGbV+2{6od_8;xzMj5bzTUn*zP`SGzW%-ezJb0%-&ww5-+13t-!$LZzH(oM z?_A$9-+8{}KEX$P=lfRpR{B=?F7RFKTj#slca3k8Z?mt_x6`-Fx6k*a?c7l?xqq#HoqwbMTK^{hcK>ew9sWE05BeYSzv_R@|GNJT|C|1|{BQf; z@xSYT&;P#vBmbBF@BK&ozxj{(e-GdQ9dHHQ0Z+gi@CE#VKp-;^41@w%finZSfr3EK zz`($uz=*)eKv`gRpgd3!hy>;YDg$!^Re^bd`GII)Vc^`rvcRgq1%b-~mj`YMY!B=R z><;V++#1*$xGivd;O@XffrkV80#62B2pkB!7I;1IUEuq`k-!gu9|K1NKLvgc z{1W&z@LS-|OgfXxRA**nnljCq?o3Z+kIaJ1o|(NeduR5^?3>vyvw!A*%z>GOnP+7d zXO7RDnmH}=?9Azz6`7IDWtrz?F3%J)N#^;PD>7GRuFAY1^TNzaGOx(ICUaxv=FG;- zEty+0cW3U&d@A$l%x5y6&3rEN`ON*9FJvCbd@=K-%tM)PXMUJ@IP=TQuQI>RJev7a zP#e?*^+7|B4;q6RK~vBiv;?g|XD|>vBiJ#R8_Wyl2fGFP2Kxnv1cwEO2ge5|1WSUY z!70Hx!OGzLV0Ex2SR0H77X}vxmjsswR|HoE*90#OUKZRCyfU~gcysWU;P&8-;LhN# z;NIYE!TW;u2OkJN5!@GiGWd4zo#4B{_k!;SKL~ypJRJNe_;K*_;CI3AgGYkD1&;-P z5B?FNLy8a+a)sO>Pskhch5VsFC^Hlcg+d)eIicK8uTbw$pHRQhz))eRD0Eh6Y-n7l zJX8^igyw`QLvuq_p?RVCp=hWsR3B;xEexF#5<(=jDs(~U!q6q5b)hRmSB18QwuNpE z-4fa!+7a3r+7;Rxx-)cd=;6>Kp+`f{gq{sO7kWOlKlF0w_0SukH$&frz7HJ<{Sf*w zbTsr+=;zQcp7!?K2FjmR3Abyn7xtg%@WvZiEB&k9cr)izXDAEI=Wo-$B8WumN;$ChNzk1UB# zgTKjG@}y9Cby+;#NExXN0Sj~^Wu`2Gf}j_LPGLSYv}cdP!oq^yT?hB>J*;c@p+k$h z4#^+dyKC>k-FtN_98yr&V_5GnZys4RbaFH{KVDZ>9w~~JH`GLG>*bN1RFLYjopMob z%0qc6ALXY4RHncPte_NB0w<^ijiB95g{Um}IfLp5H-)HG;W4+G>%%43m8?aZduVX?BBNSN;m4I|3pW2!1+5DTxER94*(i4TiKYsQvL zh{Wrov9j6Kkwl!lsI0y$%nwKfzqD+2VYIeB7Ok$1#KMDz4IMhHXI}5F`9pHMb?x4> za9Gz~dEIim7IZHvC>)YIxO;xDqA=f~2?BU}NLg%hS$tAeyb4B{Tvb1}q^h>EIs#Y1 zybo?1TwV_${if+kACGr5cNL9R&n}CNl)DP^_U3DeVVW*+VcwPJ@0sV%>z z$V8BeJ@WGXy}Nh!%arIv4WYX1pn6k%sJ>J`sy{V=8b}SI1`E7k6fy*pU=}QbRj>*6 z9YBF1YA7{~8cvO%MgmPn0Sz3&?ZO?x-NHS>eL#-~MT+nMQpw!tqOoNQt18Q2YNe*8 zuY+R|m|!E^HL<>`x~je^5}#aEQ9oC@ZDeh{4mLERvF6*Fo=n^}eNt6qQBh=eLuDlp zgEx(d)I?)ThR4e4<~Fy=Ff@%Y1BM$~QI+gh#(pw2o9eQYnnF#brcq~8)2SKMOe##x zqRIrP;1b+|NALsd|`kvP#7sp6lM!` z!d1d1aTYpFDUVh}vc0n9n(dn3D)w=kdC)XS)<`jlZxfx)xK05q{$*dZDoi#F6rPs4r^bk+Gdj|~Aj&994A z)z-(QL4bF|e6Z>6vC;af@<==}R^np{DDI}a(m_d3D9rnhbGc~+0P`N_mSM2gW%4bd z&ZD|)rOu(2Qs+|3ge;+haE8!vE47>wC_*h4&J;QeUEnv6!#u32x;_$1tneXA#L0kt zGML8EW%2qZxW(o$Z=F~>r_Gz~QXi3ui6hhdk>OcQT})XwZ4x>iq%Nf{qb{e`PLo7w zEy$oL(#J@A`q+}9Dp>H*+OpV^M!0L;l(8k_65DvvdQO9PUG6PY@Mi$qXS4SHvx)w&G^Jl|P*Q#+Pu>L33mPc!9s_J1a_>&8Yr&LB)cK=bM zCr&xLqNZ-i`72jncFlEnJueN1ko1?bCjZKRUXaMPiP{X}d+6f2YDp`MYpAcTs*Q+Z zN7_~u=P}6wTc}2A3$^Z)?+^2{!=?4Z3n%3j6iq5^9s^cMenIoslp#x()J5Vwlf#84 zm4v(HHQ$#YP6^1_+RBj?K+mcRFIE}AR2dP8UtHK~*urNd@6lKvH)SC%e zR3r>N4YKG2;y?!VF!iyB`bWaB&D1Bt@RN#=FF=HRbutk$VjO?Re^`P%JMZWf4}5uQ z66CUH6RUVri-j*O?WPrPke7P$?+STJzNLPqy4*s2M}1Enp?;u#q>fTQ31F<73*F$<)wM#ke{2p?A?OE-xIM40c;DZ*4?+BRea zi?$;&Ba3i0Sh6#PurN!Od4-_p%IZMziMmaad1rtGY9?xv_LT(KxLU9zszhNdlIg^E z4y_fXb44prDT+AR#!C@#$b)>ac#&6_z8U$287Gj2D1@>kNv3L38urL-l7^@g>eAF} zSD~y)8lqg3C-osuVRzIU+51pLluOw{J!v(`uFM{0*vMXD<#yDy>3z#5H3%0Y`uOq5WtVcr{&7-UF8 zeSH+35v|x}T^|=zJOw_wLSPTV{;)H}i{B*B2i+d8uPqZ4oc_VFSlN3Z>zR(;*Csyvo9Y?OKowM%o6$@Z zMzc^EnvKeZ1wu@S3-v;Su<&LS0h&}&Ayfr1qD8`DVGTqkt^^qlYFV6r;Ft3Gh0z+B z1Cz_m2A2}*wlr2&8?SYTwbe@|G}P9Do*Pmf zEuSB6CBQx6z{xvDLJz?G^$D$*=#9rRx$Dt6qE2c+3(+F97%dT&2!{v+t5xMjC8{J!Uhp1G3J#3Jk5lbR869Na5ebu6-&h7YllT+V*kF;$W6DZNnjg?zNkJ8a8wwj@ z@I?LSvWD97xh2wapAeY?xYw484);MZ?uaf#7dN7d&}w11AP58ulqTQKFZ*_W@a_DC z)gn#&Sy_I-*>l315-tzA3|$V+b<*J}iPUd_mbKKniDOIPi!}BXXv1c-URWWle;r+g zu141YJR8xq=sI*g{M?9cLXbtv%kj$5(ei|gJhNHif`bE*Dod07F#%KnNI22)5hGYd z(VDWV+UDCqK#dd~*>Q8^KAW!zl&}hZt`JrV>wqXt=2hCvW)EE)DQ^&6?4h*_t76ew zF^(#YB4M-zZQqKvqHXAAbc=9-aItWyaG9|75ZZ}$0dBj|9(3!p<}oKGpb;(P1%(Z(WB#)(iGo;?hNy8Aa%1VEctqg zev8YhVvXo7(IGzJJu-Cnph|SBa0#r})l*96iahJj<0<*->cmw+yec<6mT0-^n94_2q>n}p&8%w=t(2m zFQR+O_e*0OKrgmbvFLyZ%hdexynKci!>~{{5iUUf#(X%ua8pW0%}+J^KwR8Zo+f(zKbg=hnm)o^w#C;`A*7 zQ(M&15X@igBg*j0us3xabHZzVWOW2Q#%5b&H7MmnJI;!fg9V)&0-S;wb>o z;@E11q{Wksc(Uu$#?{V_mc=SS2k`Vkm)mpdfZQGcFnqzSe#n|U*)S)&UJAP)aULJc z>Tt%X1F(Au0C1*bOQ%5RllCue^c?J(opb8F-_#F!&ogb#KUv=gyZ0zK^=?;hg>HNG z-P&8D?Q^o8Crk1=&MOY~A29IL$GFc0V+;;94k;N{pR9EVMQZ3zl}YPm8*h-TDm}+F9f(QGTprTVr`#G z)|?EqlV5LRqG0n(n!Tb12s(%!chahhFRGeTpKyy^Q2W)N8U@>!HBi-cF6@?VrXGig zxabJK3qjDop#qD82$>0WLnYvM%>ox|F&OS^p>pb4sFivfs-g~~&(JZbe==e#c0#4o zK&W$?43$k$T#pyxtMGOBR{Su28t=z1<0DX+^gI5C&Y%NOgOmdmNE7H7)D~S#Z=@UP zTcDY(z(? zy}}mQB>_Xrv7jLmTT)ymCLMs)9B)n=m@y|2x=HSj$Xy*ne~UKU@8}QoC;Cg+Dr^&O z7H-*!Dlvr-#$e}e7j_6c#jdT%Jv$IiCFKxLDx4dQ#>E|Qx41Pov@E`)G%7iC^^x%+ z6oq0E$Jq&h#QcINZ2o2>zLmfRI|L^s*GBRthm_Tq&lSVUrLfJGc)D~Be0vpZuomkm z1J6CIRBVl~smJN)jG-!d<8?n{j91&ds>1aFs3N%wCyG-k;ux17>xTydGvoevfN;O? zK%*E0PlUhWaZA(VqahO@QXvI8Aow?BLerIGa74_cX>y6>u7}|XRF_?NI39sV;QP2@ea82#*Sn36Bd;2>XO5g{Oq4ci|FX{fT%I2$CsyDxLmkTqxZgjKj3GfI|){ z1?yr}HL#N}UrvW1nHk+q8_D#GE-;8g;+ks3w@J_r7@5XyTjqb&_;oI>Y_)gF; z70Fz>wCIGm^$rpQbWB8aYeYGll&dZI%Mcff!JD%IKuXjm619?%yq5PH)2@o+oGn8z zal&YLTK?87sG2eng!hFb!jHn+1nCLV3Ev4nqy^pZ-S{4SFS-%mk1B;Pgm;CnAr|(I z07g-BK2#c(QrN3`@2_c-Q<~9-(e`cl5&S5A3_p&a5Z)6$5Izz<5k6~*hT+{{#@q@} zEfT{=e6xv}ov@6OK_>h>-Vb+uC>$16H@jQ%#g`KoKNc@auDg8UwM5^aN`0T$;FKSE zI}y$LT#9C$%re!sC!k5BV0u|usYJ-O5&r;kET!QPJ_;cH1m?~!_^_B9JG(3%0YR4?i&TR#y)Xg>&iBHX zQfJ5T?+{#ub4oD(;Va`g3V0Ph{iNcD`Ghn*mn9UkOz{lOQ+*K}8TJz(=)Y8#tRslpxBECo;GacA~rWMUaYPs%k-j)q$L8 z^Kv1~b72%trYNffS>$W;o{sgMnIK7TIQ4v|0>gujKg30XvkASzF1(H+De;U9u1>DOBREq+Xr!gN>iFPBUeBEa~*KMeGw=ClWV~ zenSFoAlkl3SQ{MFQSxp0r{tcC=;30|L+N1zX$aCb(!J?k&@FT>becE^W+UFB|I*pf z3fR_xbVqs|4Ov%W+P4IJiV|$3$BV0@&1&=cuN_%?b9Jr&LASz~1erx8VV6YS@JMYWR#l#mg3{{d*`yQ)KQ=BtVI{~WKGB9l4z`1|9h0hB zE2RDe_F z!Yk+-!Ed0~(;Mh3>8t3g>1!ZLa4mfueLZ~xK>>m?2?`PvA}EWX4g{S+P)CB!B&ZWX zop;eUB?aLYdMmw+z8ORz6cP~BMV5uI(s~dCYiEoo4#)n#Cl1BEC}|CXH@Og$wCL9i zZdeS-_D$|bLNxx5kev65lJh=-y2_&SK~Z!*L_aM45CqaONBS+S<*(qk$xQMj{j?}N zpCTx4GyM!f`KKs6_tP(mBCdcw0FslSZlZ{LIU(Y@w-TO4o(~SnmV~4{?(6h>;IYte z&~MUj(Qni5(C-q|lOT|iAcFf4)R&-sH`DI}*L_GIruNbw6G(~zJ{v$#p#ay1CH#bh zMUbRUJbPL+S_3L5y;1Z-M0qnL+E7~o8p_#pds1H)menqViWZa5bX##%ZEd6?`4zm1rVGi=$AKP?RaHdd!GWL5Ju-!!eYHFR-_l3K3H*+RB|DIy zL5=he^p6A$CTNJzX%eKW!-nzniYm~+;Ih`1)z(jh{D`vZ(rU1sw>qUgGPSIs9yZdUz99L80x4*CLV*byzF7fEZ-hv0+r;Yn7&tG{>PUSyBZpi`Y&}m_aJ2-*391*RPQ(9u+U>t@>?;IOLJ)%H zCsmeWC8#XLD#Zoj4?)!g)kwcVWsT-TGQBTVTrSG6%Ls~YR;(qc?$lJ4VuRvpQH)(F z+WQMcdtY&lXz$0`viFUq!r-9fP6ppk9(j{uizJ;I6VhoRNGHWL38fcnrSv2rxC26U zik$>47S1&lJgIm}@w5Uo|G5M$Bj`MWmJ=ipMB0{T?IW??mn7Et|E|Q63G}%F zwv=`%zEFIr_zE_-zEOOu_)hV?;)vo0f>sd(Om!ha7ZJ3YpoZ;E3e3jPp9!R4|jSVz#61YISHf~)^m6eQ|Dv*Z6kzn|ei6fj_3tWAmnMt59M zkfb$ZW~?9v81O%@*v!}nWFwxE+t0WdFDzolEsB8+ClLd|L44A;A1)8ufjKiF0~qj? zz(Tp^#4-RJdM1Z~Bs6i~EN!`i=TJVsk;xN1`nE5M^;yZldRTfiE$qv5XL>ZR@T~-0 zpSHr8zOcfXeoTL605gyo#DHN5Uf+!b-9*qPf;JP>cp6tYGeuhATmCOsI8(;Vft_Av zHdD@2FrdzFCg>J|wiC2tD^tnLMG10#9qKG6i16Oai*SWAZQmsy9wGu(5+jc$fc6*4Z*>g0tgYMBo$nf zU|&qkKZDA0$hd$N5}#1ED6s`3x*q9Qla-!{yb1|F-z?{#lU{*4#m*0Jp|pmT@rYZ z8J&oCCbuhR0v=-3j`$xoVmgbnBbPu`z$RrJd<3zge00_9nCJvcMHNXeSUen{&AUtG z*n0Z?osM^Z@yMc5xR%zrSo7Fs=W@<%`t73g-sbJ%jHTatT(CJZ zHZ(HZ7+4Jt67+b}#vrqU*+W^kFguxD3^49P1VJd^kuA)vR7VEb;!#ndJtlOT0lhZo zHcuD7H6M+@!&i|V$COnjrUBU@x&E9p)iRqz4nviKm^k>Nx#=aR3=$7wduL!nz6iU^D9_=tGgvC*A-($YxRo zHpqs=JvnjDGYGlQzQTzdn8$|`8xU*<_KZnzwgQl{k?qh_;Le`Ob`}TgM9{~Z*)9aK z&`&-XYym=k5}PONfzez$_$p50rI7Uug^EUd490B?DuD~P(PViA_&YB+9ZE^O39VqInE z`qVWyHiImWbaK3)P6S|qDL6S$5Q-Gx&Mkl+@k4$=-q7B;h247f5)r5=E04w(hpVD- z_$1AlMAl(!NF?WyedBKckL9q`I8thCC>*~lzo~Jw)VTcGjh8NHY8;nnd_4EAjZ48V zPChOwrqXdC8`O+v-v~OkgPp~ev9lq8u!4=SbJ$9DEsC+cM| z97$3S21!|U6n1KRO1CC{cLT#ld^9B4eUa85xbaO z!kz>$`hu!mqD!2yDU z1ZNR^2Ek_%+?n961m_T(M{qZSdl1}{;NArHCAdGq0|_21f_*J}9ptv&z}^V?t((}* zY$Lmc-O6rbZ)R_SeAgZ9PIec&o880S%I;-vgZ$S!AOrR;_HOnb_Fl+@y`O!6eUN>K zeVE`vf{O?qO7Jj(hZ8)4;E@EMMerzsM-x1T;IRacBer6y>cxHj{&{&F5?^4S zp?}W~k=hEm6+Vh>`2`)Mtb;^*Zt}~xM2bTHu6fzHsYpH}A^CThfBkeIDQ#klf&!4t zk&X9akT_xnWLwDQw~1`Nh<5_n9{&QeFC>t~kec+u=|fgdQW8meQWW#MHxsl8$8OzH zaqON>(BA3vd__VL|5s3K8@+;_%_Pk4){GytCyCgtS1N*eJ>;)Rp6!*6;_DKMiZK7& z>8E1bD5fxJe#(+;rr?Q|WL|DMe(y;5v0?tz(}$nDB*8Xb6pdB<->gWPLE92PEl~YX zLKTh$IV~bql0Nc+EP_(ws_M20dNL84wjxg=Vn3CTREPOz+LxY5;ksBfF_QT%rP1P| zVXZX?KrE^gQGgaSFUVYZJ?5pctBh-MHFi(uR!HfAoEfYQ^9R}&JCRWFoP?Hy(|yXJ zuH-~YvR4X;)FuC znbvttDg`Xt6k507<#fYNX_K(^{#Tak@jWe&F|yoEwbK){6^)^8X#{P7V$0>~mT-h~ z!`j)dJ5{aOD}`U1wF($!GQ||nPsmlt z(rFU0-DEN)+FMAVycVmlgM?M6-T88Cq#pdJ`8jeK)8M+Q9QaAr^0meikdQeuW$hiu zTy2SDx}@nW;RqGO`%eeuT8r6M*yW3=zBPJcv#dvCW|WBATNX7*MN*KCVXlN>$J3%H zPstwdm166pxEsy3P8yT;Y=K^03uC8;gdgma{TJd?Z5lcSqH32ZnBs7V?J^0|%(;S= zE>%Hxk3-EBZOT3pid{~p(RvDQWA79V(JVrtRTiQ0(o68ENcDvElVsDDbQ~xl3Fl89 zIvp#q`M9K<=8tWXGp}0;IaA~fG|SWkvD<9e<#m%)hm2`@7+F~)VG3zlr^R$V1(^eO zOB2JMLR3{=pGo{$>iUrqesJE>OQ(a9ryAwR1Mjg3%VvHRo7<#gZ<(q|G}B`_%CQob z-Tx=aosh-9!PI^S@}wO!>h{I(i`4XzLnnauJXO~h7Xm8(;GffewyC!h4Rbv zhHsSLrZ*f>{*d1Alk(^EhToLO(i{F%{*~6CqEsloL7`H@X+A1O#S%Q1;CYQIl?sw` zstK-3%S%z|rG-`%=Ewc3MTQe1@x)Oe@f71P!na_Xs^ zc_km<5}zSoDTc#6q$4j>;*l3{aL*d3#z=M_Qk~JN`!f^WFA(w)`QEB7tscr%yy`%|&Oxr2{>V&j?+)Y>MM4PT+KCX1yoD6 zg#<4mc<~mPqQR;m2`rWnyh5BOF^x7{JbGkFX?SSS$kK5W!X-mT4=pSmIc{ut)X=GI z-7s`Y@nASUOTNM1s)tD_ z1x>FOQO#4;h)gkG1xsob!522FYE@B!R}*|=I;HC+N?#D>7s(bFl##<3hLM`t)l1+& zBd`+6=ZEKrXDbe@ZgIqX|NQcTin88w$`V$6`TSwxUGT!kx&6EK$S=t4)vHI(Jjg-K z?cK9m0c;M5Jtb~|)9K;S+#Wsh=FCpb&{8dtpt&e)WGZBEYN8bliKCTD#Dg>^jvQEC z4JqDTrCN)wbK%r($hsBJF^czxs3RP}R-P!pk0+0_Dyyr5z+~e1|9DPOWMQOQd@V>0 zr0mwi(d9Mb=5zVDk}1HHQbWo;B}Jp;%X!_i^Rwd>^K+ym&Kx+VDVg7x(-4p4z-dp_ zQ0ve^gscG;Ykw&pQckt3h>T8N$W9>9A#w6m*TkfXky9D`w6mjDib^7``%vb&3mwQP1(hkAHfZTVctr-}D3kJe--?#ZsG&u(hZPDqhtDUYm# z&sALrmC&kXs`FIKRf3AB&R4BatyHa2T|n@~1Ybh%8iFq+_%eboCwMKv>j=Jr;PpFI z7fA(ysx_)h;bkx#RcoOV8gGzl0tvo~;OoFvfh6SX|F;nOKVJx~x)BUJ)lCFnnJk1> zHHydh#G%#{e#E1(px6|CH5-dNRJ))ITD6nlt2e856MW67l|id+Q{5@nF&C(yFq9#9 zqiDn4oiNX?ZFQCbzb^Rb5vdSb=C21;k0i>VRZvg}8TdDx=yCa(Csi+rJo%LBY1K2T zXI0Oso>%Qxy`VavdXZp2c@x2#32r2K3&C3n-bV1v1m8mN_MNJilRWvV>a_$?oHxeU(4nK=t*(33~ z26BVA!Q2q8kSpSba>Kac+z4(YcNRBF(UBX&jpfF1#oTyq0$0M7(o?xf_zrFgHl zoy|?>W^f>J?;`jfg6|{v0fHYQ_z{91Blrn|pCtHcf}bV$d4gXc7*^BE1Ro^$Rf1n9 z_)UV}Ciq=~-zWG(f4g_6WU5>JE5I~b`#o5Xg{Gd2^}JI2SRrwbSFZ0A#gAw zoXSW;?b%F1cPBtyI17>PL+E~l9zf_pga)tBN9ZEqI|2tL(jy3c7NJKIdMu%f2|Yn1 z&@8Tuo6VJT6bVAPA-9NI%q`*0;g)je za?7~$xaFL{5$=3$1-Fu0#a+N%$X&#(<}T(g;nr}Ma+h(Jb8ESE+!fq4aH8mOVJT8H7f0(ap z4-gWuZ~JTw#A^}|kB51o zJ%Er2m-5am2n)pERfc7YMa>1DeOs`IiLcEA6zhQlS*{z1tKxYAgY9D9q1qkEu#TUZqq5DPOV` z@2Hg$1h0kp`u2dJiEHCIqob9TkrQYpwN?VYqo!@eq&7-0ywy&I zO)6KkOzB8rPPJ76;aa6>9n#!tmgQs+njeH!NBJz@WO z8#0;O4Pot)#CsfC+WqS8()jQ?k%jFszBD1t$+|g{@g`cgd(^~@O%XShO&HR!m zT^LbTTLFyQ8jJxF7+;6^1?@2>2~~2u8qw6{Qz*glZ97SEkv1pgj}a0K--r2i?J*bW z3r5nfVp|IfWNZVRa?|Slim7uoMuPK)Fh9FJ;5_~Unjj5)w4E%*wkGIA>Ta?G&d==# zPLgLNV#x+sqOtW-nl6F!YncCUo)_L`9b_u^lu2M7Yo`^TPDJsj%apTVQsI~*!SP3! zU(+63oDN4DtL-?4W2AyOUjp&3cABaa=02vvQ76IiPdmYpK2;@i%VLQahPUSMh6Efm zYNrsQ1cz+jiQig-aE=55-A*=yq^}?+L|XW*$6qdu&xH9U?a#HRz@jT9c$EKTp%ab4 z>!9XDkLNb4rI+#0T$n$%y{AnslTMe}ttok#G;^AEio;0EoQMiZkQ^^OrCu)qq6_mY zPS@PX`vuJ>12xrV)?LAc|h!Ksft%O(U zR>5H>$L04%2~bnJiis3gqxoaoV)GUW9?R*1r!+c0QhNgLXSW28t(`VDl50Qx@Fejy z%&l4Kb_o(kJL%RIeps@2qjj`geUAi(E6g{v2Wux3+ql^fKUpXq$SzHgWL&qNlLsYO z;62&P+XEI!G&aj;@$|q`P<4+1>=DyjD+5IeV%=u0keNeCyrijuhzc%@paxZKAQ99`Q<^rgX(`lYRS*cTEkIqjq< zWp$9cDVFlN_1t_b!2{(Xry+bU9VI_F_wv(Qhmtd3k(Q+pxt-v;g>ogh(u>S3oej)>wA`ene96Byoyad+3b^@y{ zYfTmu&HiI+GFl|C2DkHu*l}iSQeJC_oDxKZ?HDgko@sjA6BJU}$tQs`^fX#)$Cap> zkOa)|Fh8q3gw%0%O*Lmq!;WmHJc6XzoK*VBe2TV>XHB*Q%BXhA5^557@tm_t#*GzU z*KmTY22D2!nlbIXs8dtjCPd(@=txX-58os8ks~Jb=iG-d+=*fhhLg=Z4o<``i2|b-<6pbk{xAKytHd9`LuqMk$pFA0T*YoMM)L*Q}fq*V{{ zGgoNf^opID^_mTuD>YYXuGU;?&uu867Uuo@PZ^NA^Y`TM&Ho^OU;c;rALW0Xzd!#IGMrC_6=b-83@gcSAsH?r z!^LE{gbbIG;j(Q0XE`9h$p4ZpxXb^B0jV8_YgkQ&tCaaeVZNtz0Qq$y=8FtsopXKHC`Wom6|V`^(^M~3Uj za6K7dEN>*kO=P&44C}~{Aww-0)@M!aRU}QFxnJ`ubS+KY7?K+_8+j``p&3;OY~)?d zOdfkCO@qOt3Cr^~=4_;CD3~-2GYw}V!zMD^qF!Mo12%2%DbqO91jgogGTfFip_!I# zoSigHHBDFSr0HbEPTpQ?nqflO-a!T|Cp~3WMae>TBIJlP_5qr!Y`Ja!^2tAnK?X{tIOt1=Q2FEX?WrwFm>6y0jHp{y>9}4?&X^3wUm3yN&ls!!*gVKo(wOL;YBjM zM245MrYCYNKAmIndB)-^8jDyNoMZ9rW)_>kQoh4je3uNbYAo(%wfCK-y-YP|ZtYSp zt88|ysP~&bWi+B$_Ik$j85!PaB#mE~zE-UyPCn(y@Fv6RTLr7P>R@HhE7hX=$@HsA zBTnW7jqfxRObhd;Szk{4^O$M;l$l0bn_O9&+nNi3qZv)I0~vFBG8}9ij^@thuHeetg&D`snQ=6C zW5yAO^VZX#6w=9l9n~hK&7;NK*E~QW)7)Pn^Ba(9?xq0!MIE5EFejPEgG}>K^Dy&p z^9b`u^Cb~v*rmoGN-6^(mb7! z`G-d4Va-l*dCg!p0hp&TFz1oskOpQs1M?yA5EDAwZ0ir@dZgAiFElS^U@juVpBeKK zGW^v@FwZhCXJDQUFgYBS4lru~Ca13#O#OU~tQF=9RT@_^8aV@_v4+ve>5od|<>u=c zjjPP7%~zP$n6ETnWxm>cjd`v4TH<)(1mX}}Bu*kuCJuKs5oadOk~LqSqw!|L26F~> zay@9|tT`Gv2kDO|&I>!q`I>QT0vzvQIAT){n}*~4z>!;F-pWM!`NZK+cy@)QvB1W(ZXA#nv&E(WX|XCmwgFcbm>k@vZCxPcr<48EnpymLJFA{?1T%m)}f(0XkikTb|BM|w4^KrmKK)dEG;dqEUhhVENzMFL|kX$x)2Am z2eaLcxbDQkX!jtlXVy}vl41^quYia4q$n2$&*_XIM#0_R-4rwOy*pq1)1Trmy ziR+ys({d8Xv<%hHVIr;%BNG>pS)rBn7|S?D=2+tTWh~=~>)%K+CtIeeWKLDc9Kg7m zu8=vfE}7wzll>C8M&%?e<`Tmvs`Pro0klLs~Ikhg7 z#%UT=S<9U&iFYU@p4?C{EzEtE?To}NmisLaShiXov^->a*s{&?h~-h@W)KGxS47;Y z#1#`aleiM%W)YVrZg$r4SdPRexe9$6Hu4!p;v9{{dGIRMEM_KhK{JU>K;oN>#J7l> ztC9FFGm-CE-e)4Nl(^H>D~zPW)?F*^k1YEckslLRma%+7-26rodC>BuN+f#QXi>5~ z=`CL?L{`)#(y~U2?gz`yDv>`aM4sMIFfGg>tEg*xyXCOuPs?9comFqmvl^_NmA493 zv=^#~t0rzCaj=w&iCaS4QsT}a?o8s&BJS+lt&)nR)ois`tyYW(Sse__Wg3|05O)D_ zD~Y?7!Fk>PJUClo*Lro(e@tb15oX-530nOZE-5W5Ev{Uuexi(>|G!~q-5LkSR`dv# z=Qy?&fMaV5{Typcbkn&SR@D>w>cIFG+oL%~tcBJNz}VWJxN|dB?0k4$<1n@!Z|$yN zY{jS#Fg_nn8!PsTyo0zEbusoGO!iBuwY?T^KkJFQwwtW|tpltBt%IzCtwV^rkhqJ8 zyO=nn^itw3+hjcn&<)dVwvMo({)StdxK%Z1S6)HfmCQNgPG& zmzeRmn9Y_Nz>bH2J0)=B>p6eUz~b^n#Z|0mi)_Jvh8MT{>P zinTSXifrMd+^(>!bk5vr+a~R{XIa^Rj$yEMnPRrCZwM1D%=y+;s7S3VtQS~US}(L- zWWCsWiS<(JWmYs7ZY1s|;%+8x9dQ}rYKdD<+y>${61OR9U7fR7SE=KK)@zx)x<#{B z*nU{`r*L=w&$Cta_!|Gi1Ngtgw`aYD0dgyGw`vCHc4mO?u-?f;+-<~V)hjHJ+orkP ztXr%PFkJ5^?v9LgD{+n7hS<8zs_bmt)ry_1VS(;KjcA3Z4>eoeorLY}j=Xm}tWq4-)qf zaSs!>jkrg$*7tHm?lm9GFNZPvh!OdyMkEHJFm_+U?Ap#|B#(XD&iXAw@;lkxSxspg}7g{w#_*Z@3U>O-LGqD+sZ)v zO#|@|@p|I(P)GBIW)ho##GQ=9r-}PrBk?(qXnS5ihl#j9Sicn)Oc~Tarxo@t%#!}y+J82@4xZVxkzysi$6_F?xW`?Xbjt#?+6USP*$3-d+D~L4CN&US z5Z{LQw#-PjYbLP?NSw$>oJ4#|BXKH7v`;f{Wg@$RV{;wxJvBDh zGb?$tW2fv{`yGtR+llX;vENC2pGH!7k9~`3BkxmeWM9VA0}509>M&)uthUY8z1dH-mKdo5%CiTDW_J6dHE8wuqf zc8nF(+7B^PiC!~I9(Sb!_pwoeYcQpQ(tJ(gSf;D{H z^_xnE%@G8h4!gtQa5`KLx5MM`I(!bl0~PoT;sI9?@uw1BOgxN#3Gp!gY2s&R9U+xY zN6cz*U?|9uVsvV*W**K07~672XGOEAJocv2(Ft@qP={&0W=B`h>FB1vlZp6JEI42n zu<6qH=;P=IG97)1pOH4#4jX%5%G(OUqbv+;?E%d z%&cQpj>fs>gO1ZcV;Q6IEX`IfXQSi%d5p&Mn`vwU8qZ)f!W^ERvz3lzjK<~qIZVVa zL(iLCSkGG)+OpTyfnvj+Y&;G9uA1yDH<@MZDtf{_lh2jyE0es6@W4 z5P1#b3d2H1;&C+ZzbamP_(j{T8eIDvAFDuqqyTw+Ljkog2OU2$AU}6};rP<=mE&v2 zH;!)|-#NZ_{6PGT#NR~x&BUV(ogu!K`1QnZAbun9o3f6dazOs3jsQ6hGaxmeHjm?k z)nRgebF+y&_9oJq4<4NukkfqHP7DccaN6{9n25iPnMhnvVdv+H+Ua%r!J`xBgx;QU zqCp1dUt^p$&WJM(tejC+Vc!WPYn=(!l*9?UbqC6A7izJ!bhc4obfR~T=HuOf(V0*v zzN-$!T9}T`UVzcr$=TW2#d*B5tFxQ4yYmER4`)x}?>^V_O~oU@%LZ`<0ByN6lM}1W1SmJC&rIYHPhGxG>&I9P9Xl#oON_g zW;9MQZ)GBWyD|#IuHbQzR@z0*V#Xu713NNKG|3)sB#*P5Y+1f@4&(6&g~!tvkML~Q z<wC_AHSyYh@qej&ULVk5b>`w>xc_zG;4U=;=GN~cq{R5W}I2#8|l(^-sQZ9(YTq> z$SUkw=e>-^cj~3Fc$XI4gU)R#jSnj{GMBdVUWLZGo^UP93rJx zjPqINbI#|Tz;8G4dx+ml{0GGEBmP6;KO+8P;`bB(N!IyNj>cVTUG036(Wtq!`GZI5 z>gEO1O+n+wj7AiM=F)azENFxCfZ4`G`~j?9SFhkv)(ZO@=XZ?9Z;Agr!cU2Tci7EZg`14u_VS4Soc^bmhoy#mNqT4{H4 zod6(R-HHDzf($&Y+Ujfq9j{zy@L6&PE15(JV3uN(b+jK3$p{@}slIUOM zlfX9=Pzy88HG?5J-ZjBB(KX36*)_#A)iup^vI_^^BSv5)ksy0IyKx8!|av=$hT!rmg!c3%1f2Y&tI*avWFgS7> z2~Gg%)ylfYbq)iPNN{Id=aS%QB#;-lE&^Asm8h`=FRQU#7o)}&eD&7YBNl7Xt#+~b zLWaSvH42UahU3Kw$G$ooYhkW)ZDcrJ@4CTtqw6Nu&8~H>jH}kQ-nD^*5D8%tA|ymf zh>;K{Awfct1YlQ?b#2Pwn04LG_Rn+O#c*t);n<3VLNs4sAe+}sH$jc%?st9S`qcHA z>wxQ^>vPu^t}k6*kuC#Y-L%lWZn_D`bn_t7Es&tCn|4be(=EI6nMmkELSOX?GLN?{$(6U;;dX&d zx08ha8Mm7REahoTM8c^g6q7KMgc1^Fk&q@~ zb{0oCU>H)@(tVy`L*5JcdnF@L^J5DbZ#ur_LuMVD-Plb*;?<1AYe>-C*zW5N+?X#^>&`MB6-T!FPR3(-y*#>K z(W1N0jb&wMN4oDwY%JD&tY}WDCpL#^3_;WDCun z?4|&6F9Y%e5;RY?`y*Cef1F>zM8Yy`Dym)qpEoF9g;1gMR>^lmx?4tUSJ|uu*w>n-JzDR>jTe)@$eoS zkn{*1qet{e9@&%cF?q}$iwE85l_Xq9!bK!pOu{83TuQ=aBwS9yDiT&_J$4mIk6Z0& zd;APZ&66!$d8DU(ZF5ii*!Q$O$AL&sOA<6kwg-bj4Q+Jm>E!7G8a?O|T$S;lOVCI+ zw&w&-F9uatPfw-k$lTbTK8l^I$BoVZsBtyWGelw0Ggx8qx`u*jVMcf+GZsgBMtMei z#(2hh#(BnjCU_=#CXsLh2{)2(6A3qyu#SWb3AH4^)^8wTW7abz$KrJRTON!6c}`_4 zZqmBhw<*1uyO?=w_F^}IdGuhz#*7Dc@RnRZ+fxY`JyoW?OeEZjt!~vT%wte1?K3=Q zF(A(*A)E1>O~UPs>&tk^bDj$1xeAbXFtS!CKw@S0zvopXbT(~ew&xPhy89=hxmE9CbZe>WKJTzCfXB$KE5&aw{ z61Ky2$SwfVsg?DUo}CQHr%2e5@t{T4NJqBkdCyDW%JTxNuN6nO=Vex3<1mnV>TAP1 zExI>6Z>u*%$6F+x=9 zbubtK7GLXiv)&9`+V%9V9fNW(dV}7G0;4yq!1yj~qt~q%)wk;yRV_@)+a54_3%o77 z$9Y?NTX|c1+j!f0+j$E~c%OvbB0Ov3)Gw}T3!w~Gp+w>yLJ z6U{b$b_B-erP)nj8ofgpj3<)tX|A^R4r4GLz^n=g9&9$N0++v89P1s=SR6;ffsA(o z360za+&jg4GGlQnWASr^#p#SitkSN_qU}ZvtC`-kisCE~d{4p;B>YIiPbBp!y@4TlJqdqiyyzG-aszO0#*0BB^k%&4S>w^DV{mO^a2fS=?3}&Lw|2dt z#dwEzvx+4qOy-l3t;;@YNG;6$-W?3f2fSOo4|*T+KJ4A*eZ>2ycf0p7G74lwtRfjD zGRkDcElp%JlhHy(Yu5XC4$GZ63;7(dG-~UzjYr(r#%4EmQ&9Ofqw*axYU{GS?=vcQ zd-pJr(LqM1dPVbbfGw;Q_kJ%sy~Fzn8QmH0XJl-oC)@jlS3SMM`;`JETWRf8PVX?* zbxGU(Cu!0Br`963vzEW2blc3iN3vGPbN)tXu$O-&|Sy+WOe(9lmyCY@PA7Cu1WW*}l%cu8NKH z9k1ZX9NE6^ijAztk!?(A(e?IWAsGh5eSH-i+cy+U3p2zw7C8D&^qu4z>Ko=8?i=A7 z=^N!6?HfbJj%4ga#?EByLdN6C*p-ak$k?5XCy=p6);CTykiJQ(f%HvdIQGmnA&tGY zCZw@>Np=$$NZ(vWV<{PX<(iPbGG-vx=;tt@&St%9T#hs$eO11NjKyj)_R07bk+E;% zx--5rd}pgHo~5wZk3j`*2Wrm#b?a-x*&0{p`7Tgd#J~`0R<!5$wDZo2~^>u{`vdDHhHwpaGO<$K%rj_+OHd%pL5yM23ndwn1H_K|TK8BZqT zbTT4#pjAZ1Q^{CN#+hU+A>*vueIMnh{FJNk9dI51mtQb0)0&OMX^2&1oX`4t2*31y z9-9B3+Fsem&iL^CLB`pdNo8kzSX=saOoW}4jo7S;T|se+93p{!#wXWIT(EXOnRm8JCl>hKyk495S9u#`DN{ ze%3!$H3$BQ_P6|#Q9@IhF<7A)gA199%y=0qtjquBS%Uxb3y=MC@Ot~_lJSDv>+PS1 z*V|vFpTk7Pm1r@s3tn#RkO+U3pS79%Xfs`u@uSUjaU);uGyJU0wMRwqP5(ZI z;#>Z={qOkS^}pwT-@n_x$G_MA0U0-u@fI@PO2*sBm?h)wWJJ^JPBPv_#?4v(hdJB$ zN&X}@+s}WHp@^DGMe$xToTkk7Gd|FaViTbF3q$c>x)1_yQ*9)Y|72N(ke zGTxU7@MPT5I2Z#`0A4i={|54vcF+C5>Zr%mCMZpA7FT#8lP+L$oGKntK42nE7{ zNFW-B1>%83AQ?yn3dr~n86PI&HZtN>dX$WKl^!GG4l+JY#wW4?46U(0fj0KH0`2g3 zdxqkZ8j4RV)$|L@K)%?_;<0Bj&>JiU`jGLd9E*YeidhT{bRGx{gheFdPW6h4T03Aq zFf=fn(TGujXEFhd3Ow6L8pj0SSE~(-Wfe6JedKEc6Ifpohj`aBaUj3UX4Q~9IdF=K zLAwjYD>hh`L;0L2#>iZ7Az zD-Fe0fg*-{@AR(mRIw3X%ov8h7Ms~Z0OOBAmmXE<9C5W494#RKLmaZ{1o^( z@Jry=z;A)y0~n0?nT)@X5p9#-$oM-M@tZ?rJWR$v$@o_`a9D*gs8@S1K^`!Qx*UvR zp4NjAg=QF!J&Zx@m7NK?NYv+G40;t9O?$m-+?e);lfyCT6f~Z9gvMYb7z2&LD2awl zFis-ZI2wZm!Ir=(*a9?)JfpFJ%|UV~1`C576%>OV7>c41DE_ydL4w_a1At<%d+>x{ zk6_PWuVC+BpJ3l$zhHk7B@$&4aVHarW)dwVT1m8#XeZH;4Gzqqc%s!3#KuX%;S5Em zhN6dgXGJ&aXffE#ViT~4-Lf;mX(YNd7H5D(zb-hGiH+QfZuN?0V>gYEbZ`!%aW;wG zOmHrVaP~K5F=wzWSi#8Z8Z2kEw8)PB4xY}8oEWHM*^ zB#uoBu3w#r9b636;pl6(Tz|6iN&8 zESwP_^10yi!54xr244!k9DF7CYH(NZH4?j!csz-)(cMVwPT~n9_8_q*iM>edoejQ` zBk~=!=@{J2i0q>g*-vXaii4YhYyu!ZXFz^IVqXo&uK{HKeEl3IGR(yIH@o~@SN|0J zg`xN}iTyLdUrB7_QupAYpt1N0K;-#L*;7b)j@m>b zMpJN|2C?XC}n<$`)yqU-*Ad+pB9XgXl ztY}wG0t&IMvaNUEaAgRmn!-G?%MtS!IzNONPMOdO66a+?D@lakzA=r*&?TYE!D8rA z)|HtL92;?5TIj0KTGcjQqu9m@*v9{MdQj-5&}|IFn?vhDnNV$LeP}~yV`x+8me8#v zo=##ViB%+4lemz?MIFMza;ToW*g6I zCb0=f#1=`J(BmYYrIGj)NDS>X+n7i^o9%L_TwxmrYG&uf(94X*mq=Wm3B5vMO(SW1 zJ@gi%@eM{JF&aZ}W0*(8s`q+a)t=q9bF~QfhS>O!VQ^@lg5>$Ex@K#f5Vnp<)xvxh z`koHK;w2Na8phs8nJ@-FuE-%7HUmj>Mn8v%4Sd5m z;&Q||hFxI~a16UiyfPE^l6Y0)a0~~-$||_7VXT5f&-!Xm6^7sv2ZT?HSc7AzyjskOC@1hoFQJ5Hvi^EI8OT%Y`&kUaxK0CZDygXb( z;@u=-MBrW$?;~*wiT9KE0Et^ke2~P4vf*>o=3{t;+Pe;4#9(|_Yd$`5q<8&zGmK3D z<5~vewIpuSV7vh^9`%T{@cQsZMk36}qnR-JIolgaVm5pyBk^`d;$sSlcQF!o)Jvjt znnu-@@K%*X9H*8~;uDNStfE6@y`zp<)xta)ewLBAJ^WaBNBHsZ6X7SrPlb1epAJ7m z;!`Br>91y$ z^&8D7HUWwsFckNZ_=<)iw$0waozJacB7GU#a8tSdZ5TffvyGC%Uy!&f6GrRuwMOFj zU6^f@6lNPGiLWypxwV)-p|7lO{)EQW@8QELi-!~z-$bXHTg&?5`pToR7%@aFU@^i) z_=pfOM#P8|kt6vLQ^ZW-+a$h2;=3fiN8fW&>-h*f1V;#8~Xh?lX5 zjpNuK5L*ln2qHps(i9e9|V>U7=N8>bg zQ^Uw9jK-fd8nKF0-PBP0qnXAgpb<;tGLiWt{;bis05sOWsiB6);s{)JnFxkPe$7PA zAn~_G(zq-_46Ck@8lXtx@4)K6?M)cDAi}oOHVlqjsGxYLF=19ku4gE&j$9F06S*>S zRpjc(HIcQEYa`c@_$P^fk)$I@Pf{L929h|Ec#;H?jM>NyYI8BNE@v1w07Xdzcg!$K zvSt`1Ycq;Xfa1Lj#rsH-G!!3ThOwSgr!){Bjo^seOk_Jr`I*QLl1z;R@u|o&%q;GN zS(MC*S$q~|QL@x$7H#)xvArDGrJ{(&T0TiOW)+`hR#CDX)hfOn`G}$TPUPLldy)4e zyCZuddm|r2_C-D<$w88nBo|3;k~}1NN%E28Cn-QuFdO+eXB9ugAr>8VEhB7|oD|Ag zMJYl!#DYJ}s7yAq*aR&8##sEFq_D=~VX$bu)3ld~xGbB-qg;=)7o%KM0F6-?lV~Oi zDq@YJF`6H>fUBs9(HLhmMy-s-M13^cEu}deqwc6r!7=Jpa7+QmDAvs(;>6K#j7FlZ zfMYZojYZ?pL^K&qMGK-WqQ^yBlGK8v<4D2}tw?H3QX7)mlGKi*LXz5NqpejOqlKzv zjCNu;Vy1*@89N=ZjNO`PJoYq3`+>%2f08=pXp9b0nv6KW;(+H7wju@xSR7zG$7wSh zqr;;k8H^)H>YRy=BB@IwVH_8o$Y31LU}PID)J7*U7`xUF;}i|X>Cqw;##0m+yE7Ok zDKK_DDvasq0tVyk=$z=>XleAc=)7oIbbhovT0v3|l6sQVi=^Hp^&zP*N&QGd1`Hr+ zU^aSs4#tH!7?&~_2Wc=4IRfMGW*D0Q#tRsXD@hux!FVxXRHxh4Kg1ZlB6=l*aScf) zW};V-bW$T>yf%vMlxm~bF&Kv`Fy6>u99A!k#;6A4`sgMV#*GS$BN&V~DliT^DvWnT zw=x*-jNTR99KAbwPxRjCebFt^`=bw#gx6;@Nn=PFOVT)!#*;LGq=_U=B586q`d|*m zN1~7F@6@%7?qD!Z(O^88q*HOSHR|c&W*D0Q#+Mn4uaGoVgYh-M7=7I>Gm$in9ao`T z;TP2AV@KbM?q)o`Ptx>EbPq{08p-2_(ftgpuF;PHBT1()u+XhWm0MH?EPLd;WWUz` zaKuEvjDDkn`LzP(%!a~iF#iW6)RMz ztgcI?yf+6{taD7+Pib%r)jYa0iy8{1h3OSL344FUddK?2`o{Xj`o{)X4Y5J7!LcE+ z6G>V^(o&MnAn8n!&LZh-;_%O9BrPYYh9tT@HZ(`%NW+HMXu~F5%h))^C4#7L#=aNNt76qR*6!noy;s>lc$WqS!eeK~&cR+Dv9n@l$CkyG$7*6k(uE{lMAF41 zT|&~OBwe;Cb}rC4U$;4SK@9DX%NZ=Iu#<;$1xZ&m$z~qGDJ2!N(qk&qi%Qdrs|v@I zmY1hz<^EY@YiO&F=#fCVDF}noRn?{C*qEcDd?fCf?7M&Nw^Ix=we7%TSH!MjnYPC8 zHA$;U-?!HAy#Y&&29O?GOHH3uT2)e6Iv+PEuhw45>ti>fc&u}YyDAgAiKI0(t+kIb zF}4bhlQ^05Xh03CjcsHv+?9Btf>8{$1R6#x}F!zKf)*8`>x&wk4+e z&ti)IOj-+{h2d4jXMxVfzosQ<33@cf{AaQ4vBzRNVvon3h&>s5Dz-EBbnF?Dt|RGs zl5QaBMw0LtHh3{nC65tv_OaBA8)t?66Xwu?_fRKPlB9W;E1~W1Ndyfn%JH3vpvy zj7xDjo*y^G&2bA!;D0kocawAvN%xY3amg(t-A@ua1Y5Iln~G!HWw09XbKJ*pd{Dy? z$1Y>Sw!{q6_GTQ9J&y4fz%hOtNe|_4jJIaBSb?DhQ_Wwb*Qpn6JS5&R-Wf2)JCU?4 z6YoOOBaMSG-aX!vQPnlxLup(+%8Xoh#mEUqrK*2ib)Ur*_nGuqW5NuJGxu41czi^B zWPDV7bbL&FYmcP$4PpEq$f#wilm(+Jxvm<<+CI`N7D1zc+Pzmhx^QaIY?yg zGYNY!us&nM|cjYQ@@JL(*l_~JP8oyE~qemN6IQ~8xf za=0w6`p)8t?@W3X*3FK3*GPQ7qjGpbT=kvB72lckT4TbjiZkC?e0BVa_?q~Y@vGuj z$FGU6jb9r_?feEwZ<6#DNpF+%4oUBl^d3p*MDHePPd0u-&LXa}5Ay54q2fE+t8s{Z zd)lyF;=ti2%^WrXhs=2vMRgK~^ic#DTu>RYbu<@7Us`o6ede1&>OqjRh%zGApC;o2y zz4-g_-SIu~z3~s?`{EyxbbzFTBz;a2+81Avg!Tm*%-@joElJ;H<2mnH{4;glUtIB? zeXqgzqc-nP`mLG8CSZ{{&*Hz6^n=DCbDka5CMLK9bDSl3l77l0j3oWsI1Cf{3FbI6 zbWJcHE=j)tsf0~w@%>uICff6M<)}}%6RP7Zp*qgkG=!rD)51g&%yE{8CSr+rB9TZY zQi*~@i^Oq>mLwe_=`cxulJpnJI+FDy=aFn6nIoCcCUTCmM4|a$qJyqwf;rA)AxEMt zvTbT)%r79>(v0GzXFSeH%uSRgPD{*7lqKdT$`cid1ti-^c985O*+sIOWDm(+l6@rmNe*Na zm1;GeSOgxIfX6c!k3o&cu)<@4@z^}Cpa~X@BvvvWFC;mn@puVLV|^QLY9+lUf$^YB z;!2VunZ(s3M;nRbbqS0L)h4b-FIvW85xzEY6ME4yCK%MShAH1=8>&UPF>$Mk<1Gq~ zY+ga)CT3OTcpZ+lFn1*$VmNM2+?}{5ac|T#r=L$wZR*%aTcwPs}6>NN(h;f@G^C^Oq%CGs~#VDoD0tma+a> z1#%x-C! zn)jpr`n;c$gKKm(-;g|}$W}VLv@G4Def#zktJ0NK?H84nmz1X4pIBPmepGr%bxB#p z!ddMGR#eQJ3AHO7J^t@s7j){NeSjbF5&K11X}Y|+{fLT^;B`FV ztbrBf)$9hPRn?PAXI0NtoDfN@QOhJJkvyqp)jP?lI%{%T^5o?7ynV?Tc^@QCNfzm^ z*I%EU3C&8TPp-^GIC0#Fsf&s$OW_F_I%vA`6CQI^@%;4k>dNBss)^;L)x*O)?ou-w4x_n%^9DBr%s)&^@ zM2WGCE-s6emd~!JoUdei;cL1}b(bY8k_(D##}6GeSSw}r&4I<$#bp(9a!nU}I0fjG z{JY@RCr?jS>Q?`+1~0NX2Thvr@0+S+S)E+Cj^tC6B+kmi*wXWnOS5Tzogv~=6h>bRWiR_$=u@dIq9l)bBfE#(v?f` zwiFdDuBe;`s!J*sEN$$oqb1_}wxrGwIC)y0LA)rbco;(=vUqm&z>4|vORGnwtE!6Uq_qeyPp)Q9 zy^7>HndB8D&t>u0{}IC^I2g6BU!A-WzR=_~$+gLAlh-A$Pu@UsDaogiJdflulIN3L zzA1TA@@CkfOcK_J$Rg~^vX5mhf7u2jOvMoai#M;G<7{i!m^J1`gG1cC| z#sQTDl@+J8XBQYC{DuKiwV=2p-F`{QLfF<>ctdjL6`yLqnWexp6xOM7HomK5MebvE zjKYy3yeGMZRUY>y?;{z8q^dS~fARs6t4Y3)HHLcsucdOq%q1+rMYaYiXhb13^_+k(w_@=?6ym^&Md?bsIzVuI#lp%G{9;x* z_kyWRBEew0?uWR+(DFs4Ri&s60BPMQ%8Hj(EUX@^Jv9Tl?p;bMfu%}8g@SK=cY-he z$hXQ$%aPbn-8&&Y{TEixt*Asqbw6gn4yh=c1rt`^qb{y2UN8c8u2SEK{p^kSgyeH_ zy~pGMw33o<>gO=Ati43J;8e=I^~oKDipkY!h522Q`Bl+;`9W#EtYFQTpOxmz1$A2C z_WN5F*?K9n9tvUchL=_ss+q4D{lYQnImJ~AtNwo8b~zJ~GnHDbhmvgLtK{M2pCn&I z^2N0&9pe!R{lCv+N=V^=nA=jul$erIawl%{L zX};>VlwIj!g2$9c*D}Q%wK5jk9^r8<u;^VCc~4+xm9ttSNNd zZd95SsotqRlSYjnwXm$LHq~3VT6r&0Y?LpBuH4NvtCBlP_x)#6BQ-d6A}Za~5Rx;Q z)JY_-|3_0JHBxPA)E3!Fv=-R0Y=QT$VpSh%l49itEfdD1rs~?>ni`uLml~g%keZm9 zl$xAEt8@d&8%f?o@+~CaO7d+aXGy;O*3`7r$*Jkd(Wz5XMX6I$#U$TB@?9jOPg+Fs zJtW^tGHRi%th)DVRrb*8^!&d~dezBQiXCOYg(b4hN>>+`ma+CYvtg{F_ASs_>FP^; zq>(y~VbwdeD?=+j_bY2zaaHvYbPrIE_s5rJF!RkOODUhLg;b`$ zD3h8`@|`t=R!?F3@{*Zl3)6+D|6v=`)#{f{XJ10ay1D)@71_c=2MisUYvqp4Me_Gk zX!*N1wM5r;-8vMt&aATlpfgivGYU{u-Iqx%BY6wUDr-8|TT!xVkZNR8=OhhF_V-RtPcYV{tuuczwydXf6Oq3GqP z-z~DWJo?wh6qn3HB$VBWsG4?x^QsfSbBQjbhM(pn+;Ig+0x`5BU5ZfXpY{dd0L+dSs;9oi%8 zNIi+ZPU`U#O8R+{U#LwzmD)-2izL5P({XaHP$y~m8E&wdU1X~_16BL{V(KNlr2i;7 zt<9hf8>~;goO*@zJ{$g8{k=@>fp+19S5GGO8p*F_Qg4vFtETk~v{YFCf4nlzf!jCu z6xxm6O?}MT6z`?pPwh_aN$pL2klL5}F!d41uak@$ze)02B)?7aJ0!nL@_Qt|f156q z`h+QUAayYHc?#a;8Z*hel?%yxNZw2G2PE%ft%_--RfEe)=dk7|GOk*A9R^_{X-Rqv zMow6#zR2eJ&tDI%nvB5{G+vpRRzDa&X!s;`sN-L^(6Y41=1{-czp`X*X*GI23oFx8 zj|48Vx&Jc;Ht`gue-;w-ub5#;ODfaV=_#cP=2n!aE0Bav=;{xws7$MAZr8c%psrmy z_3zeh(2yaW+I1N?uzS1yow{~wH*ip=j)OW4={8{Cz=0EsE9ZCZGF`hz$8Lq4rj?Fi zH|*HC?GclFxFAp0c0=mV)L#X<0zJvd@sCN~Px2=l3Je8Y0bd}H{3*$wk$iyUgUm2_ zP{RGuby-wey>wifbzUcwRFUSpEb*K{x-S!1#Y4-8>h4beZ zS1wgq8lRrS#=WX04p>-PHfwUn;|Ct!p~Fnu=gR9}VAEf@zQA7KC~%VeImzFU{6o!} z99{*U0_?`RzQ9}HEAW&21<7BM{MCB%!GchML2%2JG`Rine! zrr|FRfK?lxUQk?FjN!K;TdRh@t;R8_7&YLLCbp5EWTOLx}c3R5dJO6-_>+1 z(Zx`NvDXUP>#PMG3OY_6HNKGbu1DLs{Fw__>!3r2H}rW1ju(vbloTp!Rw7eV#f(w> zYeK5JV!@PD#Z1;yuR>dI#X8i=yBBO z&*N%D_GBH853cXjxl4^yBiH1w@7k?LRsZo7pZ1lBLnpG)ts@`3=CSnYm+4z$sd2Hm2Mi9@4jfctt+CY(IkCoG z<6yA{ad+*`Y*4wP^6w@p9{9+o6P7Ocj}cp&&L+GzYV??~)6^0zM~+TWe@rVme`GwP zcFZ^w$!G;BgqSe#lu_eHF05uF;QcEriqM?Tm5w=c#BNJN|>VSt^IMGZDO=-|Ix3T^E4ksgu%KDth-Hjx9&mRle(R{XLQf$UeLXydqel3?ttz)-Jg0% zZ`1qrA$>$2)yMToeJ}k${S5sX`m^+;KUaT|{xbb4{T2Ev^=tLl>2J{Aq+h3hK>x1( zNBwX5KlF$7f8_~zQeJ+ZInS2o$aCd+^19@W${Uk6E^l()%)EJdOY+XlJ1_6TytR2Z z%hRiW>q>He=l(LlGxNRDG$`m?&}GJv z(ij9ou^zuVUbh-q$o{2SpKb+xFzgA7c|t*t0)IiTg5HYV{E_6JU^+?undDzK*$0V- z3i=le5D&3w9I#58N&c1O-`EeB%>jFwXxQ*E!2au(kSu)ZxQ6eH?v?z~ z5UjG+pF(-qawJm^}s3X(^>I;p9CPCAo zQ*=7dsnBew3OW;70bL4R0bL1Q4P6i22(5!^q357|&{xo(I-M7{^5#JtBtVGYD?=v8 z0!5)X1V69006Gq81+{_NLG2-=(K{5H0_d8eNUsm+#o_BZ-*wOp&}Qf!=sxIvXe;y(v<-R`dJK9TdJ=jIItU#`_Tdfjry!)u ze;TKGo@h5`_EAk#z7OHNf7cB=X~gb=R!zV5NQcM1tH$x)6lcfE@(IO350ydj`_L}$`#wo>q1CR z2xS#QS%o@4ogl;?8V%vzA>>JDF|<^t3onOOLdf&*gV2XMU1SJ^??%#48HDde&VkN@ zRzUbZb_~)*)<9Q5*Fe`o;4X3_v;}$v+N;w=%}@XeLs1BfM^R4E7EpHxc@RZ>QIuJ9 zC^QTzffhi>%P7(sT>_l}odsP8A@1nK(4`Q{E4l+hSwvreUV;#J6!{Z<4?-SASvtUf z^do3L^oLFtvqH$H7|J1b3N#NYhY)WJ@nTh-E`~gcft47ZD~7y@Jq$gf)5TARmO+R= zemS%nLSDp?7jfi89C?8m-nw`ex&yikx*NI|Lf*t5fN;M!?iWXT5+a21N{ol_tOq9F9rRe z0ni|*NT)k)7xX3c8-(XM?hoiNrozjR8A7?XbU-f119gOYKzNRpQ=yY}x>ks%6?kmb z8fps_Ldb(w$b(kMgH~N3aM22EwgQ)}hC;)kkIu0eF0tnCB8fD!2TIgX2%(gxVeGPpJeGmPp)3w1p z+MEC(U)mr&Z6-m}A%tx+7dj0>`r4cipx>ww(zfj<$%SE#hcf4qXS`0BwX&zHOg_4nRLaDA%^X zK`5to$dh)+lXgzX4S69vOS=|OOQ7g?W$( zDu7Uag*_qUV_{zicD4}ZSU3V21&x8mK@%Y4S>b#LJQpJUh2XUCRcH@{d@uY6`ULt6 zLK(D2+S`M#_DExUq_KUWPS@=w=yvFC=w4_G^boWSdK5yQcY7Z~_-@GOZhz@?-Svae&|yO z<(L5o19gG=LxUjj(_<(!9K!q4V;-~wIvZLJ5wrqA`S!R7x&+z) zJq^7MeGYvIeGPpJA^skSzX$TO$FC5$?QsbDQ>W{xgTPczKNN(*5YpB&4&ixwwt$ev zo=9U)lwZ$|5T3v1B9XCeR03Ocu)J{9qKDU-J$-_2ng?G-!Twa?+XU|qAdDOfzr?%s1yP-eV0KO zLzhCALr72GYau*u-&-L(Z{IthyPz%5;}FWR?@kEsMqlK4UvSeG&)OHy+862T7l4j~ zIzxEYen@CPq^sXR=s^hg=!a+Pw;KX?{g6NXk^cT7BttWx*-$047&;fiJKBFO1cv)> zf{?cUNL&B=pogIC&>K440OZ90JJbR~nGR?Tp-cyW%K;srPEZ%9E7Tq80gZ;nLgS%{ z&}3*Dgmerz6`Bbl-v%Jx1|Z)CtbkBv1D=Dv(CG$Rq2r;c&=Tkx2zfQ|QD_JB1oRa2 z67&}I4)i{>2igaL-+}v~PoW_#XDofN-+KKSfn4?Cc^kW~r_Xvx zyo+7eTg)=n@hx)KJBA(AlPN4axyVC)3Q~k(=s8T!VKRi(ry-4Lf^Nff8>Y`N{e{UD zCR5lTh9XYVJlh9Msyh_Qgs8@LBbJR{du|5S|`?FWju*W(|K8_Y__Zw-jEPYSg4Q zdI@VyNZv6}`5xsHqt z{{KB@ZD7`hX~=>-HOxg`3Sj1jg?WkBs6ZvEQUmwXupPaymxlJz&|VtK)6h;Dj%Ols zna_KC#(FmJJ)79fR<`pS$FQS@?x*1y{=|(pw6lhfgP@Uojr7(invs~V(fh363)Z5G zM&I!RKj9gTc5sA~oaG;Ga)EM`Js0Z2rb}*VyhFzk=O0E=@Qs@%+Z^=|nf& zXk$BS+?U}@U^+9I!#vht7ma0VZ05#hZoG^A974Xv=5K7)#y5f>A~V^@L2mM4w-NRd zQIwZ?gSvzvTZDHgqA^WypAqgS!u>?Z7U6y(+(g6>WQ@>XL>$wYfvgcL_y+w&=r6*K zB6hPEIV0Rr#2@G|;v5&ag&rgB@gNAAq~v+hlAc$oLUr7F6PcTsx5*jox5;_T+{9-@ z>Oa!oiOh(*jC7Zgxv=+0cNtj-HyLU6NS_y3i`wWQvK~5!Y=rqEo6;Qniqu8qQ08O4 z$m2W-f~I!dv_9R@MbjmG&T8zd={mk=E8DTJrn+c)05dfGjiZ>MsTrDH<{CH9OEYsc zv$tk)HI(vPS7S zO0Q9Eh^8H~M)hR?@IS#DhyAw>k&@J;B|X`Zy|uip>kx_CY;C`-JJ1>VTI;Q~`)qBO zt%ouk{k2YF9Y?s1j@rCHCbE(P9ktO>8_#K@qc%Ef^E#E$PaFNT(NCK&r9+uq|}o(4g5z;nnIos&Fx2ciq|GUktV|IuZ5 zjas<<=#KQn+|lFkGbGwhqTgmV3wVcxyw3-G##%P9nXPO`*62OhQM4UJ>nqxgMZ2-+ z`#}(sf^=jcGug;X0pyHv^D(-MkugShG4+r!CXy&x(hiwp>@CLLV%$}XJ;h8UiKTqU z54fM0U-*?B>}DTsDdsnhaRM1*WQ=)$K4bJ5^Is6O(`UO>co*8q-A?Xya<{Yhb~d=5D#Lxl#bkI+S9`s^52_&)!U356g@0{Wc=eUUHcJSN|p4-85 zJ3K)j9o=U~&+XWkWOUo{Hga`J$@A!^Qy%hD47==9j%w(jlMXsHr7i7{t$HMZe91c2vw`n1Qzy6BX)D|CZgkEA?x)K}e&lDi zppPy)*~5MgafIWXQxCKCSd4jkEaBrI=sAdSOkfgmLC~umz34+f1_nXz+BBgl zQM3$#K05C6Dy1n)`5@@~9GS>MHgaOOeQzLZU$gZ!TR(aF?c)Ht>8G3iA0c=DFIkIj z2gEa<1=z^|I~mxU5xB8|qmh45Lt4|87&-*OV0S;b1+8dx(eapU2k%JXDL-YGeed5Yeryo~RkQUc#U zr854`6rVfA=T5PsDL#9O&z{njXkutjZ)BL#m;Q`q402DAd&*2^F`K!(&tg8ny-jg% zQ@+5>O>uKmHldd(Kl2OwaidcXau_?GqQfa}dddZEahp5b3xc@kNI^rl$A@9&cr(Y_aeQmc9B<}$ zJC5&(nd8kIZ^!YYFlYQkrZ64z#+x;M9_EZUXZ#XA=6(=Nm2IkQQ=catK6`3+bU4+` zOdZ5%T{)>2R%*wjbohP6c_oMD_r9dPxvngrs-*#9Mj~O zrk`p0nU~ES|oo1G4i7diQ(>`JupRkQfK``Ac({(-lMGB+m>BT8YY06TC zs#K>Q;WQ$GNOV2DJ)P)6H}o;xT}>a$1STQd^jRdZfOpW*^mXWB`tSU~pIqQF=AV88 z_cHxi5X=bB!3-VD@VPU5-VA%2Vb&RDo%1*d=BA+lg?I_?$=ni@!aQ@!<9_CvYp$8* zHlqctFw5L%%rn#Y(?Mm?0VjD zPI8*FoWrd1%s1~Y5BQg-{1*fX`H?-L4CSauRci1Cb&x-yIqi@!!96AnVkn~+!+0h# zm-kuA*L=%He&lDiAZx--_8@bDd4Wlab66M79M-u%`tl`2+X3KnDwSu;2>jUtscgB)6I5vy*&wlFv@cLUwYImjV>xC0?cko|{w_x0&=hRj5ua>^P|&-n*nmG@%(S zXpMVKYELJ+&>eS>)RzGaMvqA&8O=ECB}u1AI!)4Pl1`I!nlzsz-sL?$U;WfY@v2k*Os_w~Iv zgpL=dA`RwQ><$;px;T;KAo##MAISMZUh-3rMSRK%R$_(^Ytw|LL?PRUzjBD*a0ef{ zgOAMgk*|H!nzppV_k47QKRJ&XmiYP-b1gB~lAiS8G*`IBb#4X0(inVwsU0mf=h6YV zwWXK2%0Ju;f@RUzF@-I*LF9<%?&&M;E$!zA~YoDYgJsHT1@A*VO zpS+7cK3Nrud%K zcD?!lvaYt{)por4LJ)j0k~pR^9esb9j$Gs+AKvXR-QkxXv6PR|;~JUQ$h=18H8QV} zdCewvBhMOn*0`y)?qcmQMlgyocqi7SBsFe+ot>_m#schfoqes-%~yK+%JaV}L=lRi zx38A-8K1K{2)_2`UzevMm8i=1>|hu6^|d_f^{_q`H@)6XukVFU)?eWo?s@&KAo!*a zy7}fU>hd)VkkH@eY{$2buL-w$OXld;q9_4$LF z`@wU5(A^J3DUJ+3c+L;&_?mBn;72?Bu_29Vf@l5c^M5?cIWBN12sY_ulU_FIWs_bu z>1ETCAowXQcKA~UGBXo9{Am&I^I;JDoEv-kS%#lWP>Q+u`p+Nm5wdO0i|^U&dp5sH z8T7T;`>6 z4}xFy^lNG4{wgxmom)mr;O;6j}(UHy!WGwP-lXsiE+ZJKI zZFaZK?zVX^x2<3mU$T|$>|{54Ie^>Rc9i3s`wlzaA^Q&5cX&s3*z=AyL}P{>z39sT1~ZHiBqIBcPjF*9JZr}qzTz7; zApeeC?BRF*;7=}anQOSC9k&AiQU@~bbSpdE%Fb7Kl`@p0B9*B|O==_SPF?SGFFV_# z@117f*^M5^zEk#{{jr0cvygMAPIh|ct{muKS0~0}AGO6cekK5p1->vgBiw1+{^9> zOePL}@7DM3_2_o@_iSP_ThaAyUGLtDJK24hzq!gk=y|u9cgwq5-re%{)@X_S^}Ay;(8K-bmV@^SvFAeXpMP%Dz|jy|V8e%{b)WJBcaG!wh?q zS;+f*fI0T=K<>SA@0EM6+unPUKRAo*dmr+M$2<#yed)_uaXJY0>u$~i`S;7d|7j2$NKGbmdLTQw$b%UUyuz!v`vdwuP?1WsK=uRO(f5JA3}PrF z7=`=? z`6);dit;igko{n38lm5Vv++#7d^k90e}@WCgLcS#$bB4g--l#BG=urPhn^38g#3p- z!3>91@D1Pb13&Q#?*GuAT;~q=`Tw)zK5RFKQ=;?3-uJ`uA1+2os_yX(Uvao2~(F_9@uMdriq<$ip#dk0=IHR_9K&t z$Fq*u&5?N|l7#$6^n66-BkR!b5#1iy&Mx+Ih$9^1FYW}v(KMtdBUy0MM|0s$juxO0 z-jAa%qvNCIJzAT()FYfm=>4e7M`b=L^U+oeAp!jz^~|G>gW#ABj+ygVH|*hWH`Hvms5B}r=m(caGYe8^4EqXqlj~DTr<1!yFK`F}MK90+N zya~;b@pxN0(3!4u$ITp{L^2C`AMfMwrF_C?tmF&iJ^nRv9+&g@J`SMk0T;(SJ&vl=NL2&YUvZLRV`aLP@ z$@08T6=Xgs^T|4x@uWLB*`7|sqU)2oKG}=D3}6sLk^SUI7Vs5r=j5XxI8}f*>B&^= z;?ytfM)p&(pOXF5DP%t-`ziNv>K|@!3p1P!NI`1S@&Xxo71>YMMAxT1>vRJe6G=1V zKdtA}GN10xXeKb3cn5X;~ z1b;k7D$KguXS$>BGqRtN{mcktKO_5@IHoa!nV8{> zn>n+Xk66ZXKI2zpKVvUvPVoO{o#P^Zqw_QJpLr4lXJtO?R?fPWvw6r*L5fnGlDMC< z?&WL)I?$P}^q@EW7|0OZ#@SJfLC0s!dp3!8SjhW)h~Cf2d{*YOGN1jN?fex4f9mf~ z&-~Lq|J1>s=KS+J?BUOQJPU$zx;vMW)adzKZt^1kxfjvvxgwOMJg-v)bDXP53_X$k zob2ahKR1%mj6?6|=8(V#$a+rJb1QH!=hpHy-=Obv`aX9F-Jbi0o4Dn3ZsnY=&*}Qy ze?f5Got)SCd0EdFK-cFB^Aaypf>$ZcYsh}SB2f&&J9pkQ&z}f_3jy|Y;Z3?A^M&cS zj|;M2n1{|UEaemQd|@T>Us%IB%y3~dThaf8UF>B)*O2{!zAx(gqP{Pt53`X@>8))S9-$(ue-I zi%ag}(r|pnrMHm((sXouNynEGu#-zNUy}9G&&YMjvo7uC0EaosaV~L%JAr@29y$Nc zOg3_o2RHn;yZE~lWiiL!Zs6}qRHX*BXn}lx&t)~{|NAO;gW$4#UG{EVwy(?fbvX;! z$%SWJc59a_;4?4#%*#IW@*C74l6G`NAD8Xza!-0Q1$(-j#Jjx5N4T-eZtU`>tl=xZ z!QL*L`?7nzZ1&6gzkGw+Jm6oR@?Q{K$w)q4L$)ijU6JjIY*%EvQkO6q&=@(dbfpKq zu(vDy7>Hi33}XauVQ*Kw*H;$t9jEckt8VvdL+tzNELLK7R}bxS*{{ofeHw2g|MfY%#|JFo zV?JdC+c=CnxqgyAIL}{PM(@{UzpmpOI=+#KtmGgs1t>%j$|2v47PKas_H?2P-Ek{7 z`Z9pQOl1Z$nT@V*nEOT&@34^fk^P4LZ~TZpZtCNvXWp!j`ESnSOZFl2O*eAWjog&| z=93_}m5Pk$_?G;)vg1Z>xshANc!gIfgE?+_2W~Z^1G3+e{g&*v`ZI{3==_$hZ|VBh z0%W}<>#Yyb@hu(S`kYmKk9)awnzQKmmX2@f_|`RUaGQI$ms^j6;I^!{v!UzTxyVC) z+`;X_cz5}^#xrjp;C>L?v8Ov#X^YHv#^X-z$bM%kI=}NSi&%{Oca~y? zJ8SuxZ`p|c@BD-v+>!mxb#9^WJCD%yo&SR1ZV37B7QmkF>iDjlcis2h*U<0X*QrMo za^LNZUEUqY5M;eOiZRH1SLVAi-_`S7J>PW`ciqHYS?_+rXRKs3YgmWucMozi2<~O4 z5;07~eD}6+4w>(#AwBNozU=q)eP8zbvfnR`j_;SkjodFsE$U!~`?|m1hzQJae*|*h zm;1il_w{^#2D6xhp6|xUPD;86(KAGz;GInni_7b#3pUPk^$bG_eKAKCq*Uy=3E zF7|SOLmc54vOl^X1pnrsD(#qnd;8aX|Nb2WkDo{8$EA4d|9g&t)S?Ue`0q3JaXSbFS$K^mv?iMNbfhPP z7|ICVVl3mC$Yka+pCsPpJr=W(?d)Mchd9OwPIHFq+~QxJ1fft`G9ptbJ9)@YK?);h zs3y&6MO)e-Ybcg($Qak2f=F~E$mO1rI%$VA(q?R-F3gk?!>(shVy^i(Boq8kgCiPFqp85}-2BGH* z^CoWc`Pr=H0Cth)1#+PGH2IJ{&CAH1M)owar>R19)%Y`B%Qd2lCb-AURaxZ|{X zPFsUo=sK;r)7GZ}vZs|jZBz80b^vmw)kj*-O#2`Rr89rJI&{V^(z%s%pWr^y={?yq4cT9iaSZ47tcyBclu(yLP@Hk>-6%bmo>ef z)9X3Cj?=fp&7_wt{XpDH`UDp64mwW1n2%V-a&(?v=jp#h*7UNbmo>et>19pt4$_-F z{ZWo{64}$A;YkpBAs=rLi<^8w2QTdBdJxKx0hu#Ypc1lYkUc{^WX~Xb2H7*TCK~xO zbf6FY8N^UVFbcPlVJV;TIjeEs8P>CbjmVy155MESGyKT~E_00=+zR~oM!t;t&8Xju z`px(%Whh5Q+)Ku4)TB18&~wHZ+N0}?=FZrS9`vFwvS-wP##!hiqdqcvW~LmNKT{{h zV;7lZ&g8~3ZA11PdQGmZ(&;XT&y72oh3KkyU3@GCozIrBcw^A~?}1$}4McjnvN z40ZuS%wa>{1b$-zQC)Iv|)0v4G zvL>*AWXzHEXXMT*cUHNx9^f!XIgXyQ%AWNB?mO#$K`7gEJWo2@OtwtCh@K_8 z$-Wr7$o@O$a3k6Eo?Z6rcaS~1>^Wr5k%~0PpF^)X@{pf`6rmW!@m}W8b&l5PIY)ck zcMkWRqbI$QJ%^5SxRV^R=9tTTl30XXIX+@3YuSW;bLcmRtT|3`2AOlnoI~auS21Ib zTR|wNJI`|Gf2SfI0FGLGHYA=aoC}Wb~bPI&LPfp7Y9{_Y>CfEgSifU-*?B?BaL+ z;xW&HP(DBJ@}=Z?(vbnX&XU5Zl!>}3&>ue3bGfFwLk<-X-*qr=s+jjOaXf>Fpor%S%{ts*mZ%W z$XvjE6j+Ju1!OI-4P6(|bpf|hU_XcW4cQCGUf?9B`8No?DCdhc@yr*eptBeEaxDlI zbT;+{nD0{)rS&etH zpt~u!nXMc|)`GGY)N{c<(Q&~`T*iA@C>41rKp|d2$AwBzin5eP=Y@1$NY+Bl&~>4f zv?iMNbfhy~k-bn);#h{g7xK))8E}7v?Wynxl90LZ_jvCL%U*a3Ixl>Le*^A0vbRa{Jzo=e|PGKrDn8jQYaNk9BUG!)4 zTyz_|*~dW+BYROD7j-8^Wi9%MC;S(Lils!ZV(EB+e7u5wi|MzRti|fn5Sfd~Tuf%a zqc~K|jK$jFj*AUtIJz#T>tbV>z$9cZCVMgc7kisek+ay9AoQ|lzWf@k(bvlh*}xIp z$jffzWxc=r7dO!H%kJalr$NX+!U`3C4l@+bLUwZD{)-o&AT^M^cqCEix_C70>4cjp zE`M?Pi%%pTIg8I^9*HFLE^-(Dnw{)nKZlUD_;F4mb8(rA%UoRF#r0fV&##0?K`PRa zo{VHB8#$2um5Q`LkFV(Bl^;1Dgi6>^iI)kZ3x0-_7{Fj;FQM-evX_v(gzP2ekbwLp zl32fjn4we!Dp8dhyg?m0 zB73Pp=(?0=l^Vl%CNTy1OX<0ko=bg-oTdDXDYcIEY+xg9r_@oda-Cb;t~?q2JQ);+duY2ts9aQ05ivrc4iHE;9?= zmyx}U?#nD@IV)I+8!5AvulSiQY{Lv?+<%#Un4`=?z9IeE+d#4pHMZWntwz#;zRdJrnF-}3IF zyt^p>0-4B44szqR%e$BIGMAUNyjw0WYk67A%UWLF<@H^@0gY&a?B$~vfPTx{dHKUU z2tpMKP>0S;K;{ac;9aaBdj;7me1q&2WUnB5g&pih{tEI}kiWtibYI~je{+?8f>6bD zAs8k-kSCYMw z?3Lccom6rkmE1?Ac63DkN?qxW87d89B%>L}L?-hgvRAU3N?-FWKcM$Ydatw$X?|PvR9G4iu9QLRkyPX_fplpRMmG?nf;F9P}S?)Lf2LA@qmAM%6~zqT8Na$UM&s9&~LR~ zcxJUP(1G789I9?N)hi)$bvIsJ_tj;uuKVi!8NpkOVLWc6x*4j^Wj;x~%X@eSs&7R0 z>U-GFA&y};)lZ}I>hf2YzxuNvR71x#GS|>|4L#S;bBzg1VhU4n2Q_9fhXfLly~a8YqQ{!LsA;c$&v2-w9o77pEu7^t z*SLY~HT7Lf_FA&nlD(GusO3It$zLlQZm`x%yi5s7Q3iKXt1TVqOjqosmiw+XfI-M! zOUJczTx$XEu!s*?$|rovH^}FA5{GK(ww9c=&hr=Y){?iDytQs)zFPKO>v0fzBP%&D z?;Cl@$BPuED8-Ta4VmAN`Hk1m{Tuz5htA$Oig&HH@2zd7+I^V8a=yg()LzfG{LD`F zu%AO5;TZ0@w!F3Ftu1eDdHoLJP;KvE9bMLutBxM)=&_DWb>yj2j*3(wj0UvA4b*W1 zb@W+BpLO(EXE4KX3w7d{ikx+3G8^;MnU6l}Y(sx_{tH5N3-AUJG^IJ7QP=M3#?TX= zUv~`Ni@H9)uFtPK4WC~(nPq&&O1|JL?5ys0e2@3Lt`6#&yRNzGn!D~j?5VCj)%AY7 z86qXmla7KE!JgjK$(yh6DtdWSFK<>rFK?bxOdzkEDJFtVWOF^ihJ7^rh!w2jOV*;hhI($e4L8zo5AruW$RGU41$5u=3fF>A zqqO8CAG&VjIgMm)RDx2JLC=k3ZPb+J$k<4~jr7~7GhGyM#j#qZrLQe9Q_~@g-mLExL|y z-x0D$?Bf8k`aQy-h>QHqKm0$Jdx^Lggqoxz3;J!M-zKs)DNA`|ZX$CNnVZzYj7{nh zO?x_`>n6Hx(w$!Pr9Xp^y~!{VSi^7J4?>Z7ad(m3a5s^55$VPwcOZMD?2)oZdgmf# zkCZ)9_QL@j0QBO39>is%>V`?W7D@7%LFDd zkHxHGJsbF*O>AZ>-p8ii$EJIcx2c>>=Vr2>_!lZ%1CM4c$9ZAsx^9#YKPvUbR0DZ9Y+nveMGsBDEAljHnTB9l-rL= z!W>aLj*>e{?kKsV_H&3Mc&DTO;xe*E$r*iw^kGY$>f#&f{NA~8kSiuhT*upbgl&39r)Z#rhB6Ewg zoJaN+x^JQH7XPB-mhPja`)DbD%QWO5H~Dyx!n}kVY1xG4w8C>*%G|OuUFnV+X(?;V zsmwsemI*B29TxH#>(On?y|{^%hdIjcoZ<{_y5&XWZ7HY!OJ1nebEHJpR=RGb>sFb_ zLUwW@d#l&cZL3i%!acUS5QJKruXSO`Y+w`Ol zZn}+|ZZnh-xRW+>&~qDi+$ITKw=s8{#eBq4KH*bjZ?g^Ew$)+VS82*{?5FJp+)UfM z=sjBR(J7EU+Kola9xZ#c?9qjI3HhV-8eM`)m?63bZa=y%^)N^D0OXFAJ6i5&w;kg5YYmBThvc{C6Eaj+x>@iiSMjPae(WBq*8;Us_gxaOXj@mV(7xC!6o$lMYk#@;^ z$Y-o%HEURh8QN`TE8B7Z?c9I6{ai!#cF%%P`w%Hf%L`;83-Y&@zx`{t@Ah)GuTE{= z#LcvCfZXl7q2KmnnZRUZZ9kov$lPA$_Aj-KjB=G^07KkiAnhBS_*qJhRh(L8x;v z^wqf+(~!Bd8|myuI?LX9J^Jpv9rw|B5ALJ$LCnzkEa&-)%Ut7n5Q=X7Cf%8V+v{S!F1LeF*DT1~wKCqrt~HUptG>I+-c|Ol zvUhbKUEN1l`Mbt4fWZu7B%^WvT^F*Pm3+Zk+(=h@>G}iu?kaoN0~|uut{1q3JL!6Z z|L3~LgCNu`HQCT_H~n^#wOctVB6ByHyUEa5( zJ!I^$mF>vdL)IR$_OR<7X6x}gr?|yk?ql8_{~~Wsd3!!bN}fmNo-+58xo0?i@ywof z+VdEXgHW%$RHZdC_tJMSch;*XgLsRvjAs&YOhxCtl39oudVR$Vv{po4w`gU4lw9CXy&x(uNp1(3!5-b?@HD*;~%u zQ_ywqX}pcOd(S0-1<2mpJKK9bzoExIp4q1s-LRuRpRx^^`?!rhZo7}{eRSVP-+kRh z-!#bI_XRSNnF18zC0@oHeP5*kt&qL1?0seLtLwhKu$#X9(RJSm%tF?_vi5xk9rx97 z-=%!aSNzNoj-%tgI_|6Ez8AQ}75?EScY;tqS^K3&*Zne)h3w?Q?EUgnkiy8`uQr{~ zWxr3@i4OW_qdfM}e*hyH%{XN5KONco%idr1{)34>Q2E2!?13qFI<{sb<27Hd}1HNE4x*cfW13hzKOUys;1AgQbkAl!3_dO^T zdLNVyy$#awpn?>k81fG)NoA^06TJ_5lQ6n4kYS9(a|X#gXfp9k!z~Yzeb91NBIBU7 ze8YGAz$W%`0^JUB$Aj+S?g#lfFz8tj8XO`e&m-?(cQRPc!Ez2RjyoQ#>%qDnT#gF7 zP8DPyT!Uyv@jjk8_*@VgV*VkeXiOhu9x{(aWFPV_OZc4Ctl=xOW5E_;OJr48CVf``xux~kvT@24kK3=3S zFQK>LIv!pH9S?UO!`=9BGYpR;3img>4KcLmEo2`)lQ|@i%tGvC_y@>8{7d8=zL~Aa zIeZWMImBc~1m))BIf(Dw*^k7z^$O_6;> z3kIRz5npkHM?q+$cVy(7bYT)QkNgxjGE(-DvX9(=>?36#Df`G>>_z^Or#OTA8+nnx zxe|m%J&)X@@{k|T8C8_xltka7WFJ)v_d2Q>GLC9ZJ310eSB5Zw1-!!|7V{Cy@IH=O z!7Ah(QRWzBLW=zjY9M8J!84 zN4t^HdLJ$OXuXfFPg9!H68ACMeT;5TZ~8G1GmIY2NX#*M3388?d$io6*YY*r@*Up8 z(cZ(+vW}K>^jXfM-_cjO&i`}$7lg*VKwVB-g$DTsRV|6_C z0++bVeID@yGmP`IWn4_N_Pa*q28U5~rMKbU*mZSL{_*~dK&LgRB&89k2o z%<)UujvY-%M+sz};6^66kqNR-(ES8`Pw0(~{dXNg6WqrH`6rCzEv7O9GfbGvd=_Ai z37e36g4`42o?tH%-06hhaNiTWhZAIu`i`4U0*hG8N5~zw zoX=R#2END5#BF8^XK~YUx4FmvpYt^EuUe7zJN}q+S}CPn15<%%JVu^@QkVUIJG4{bE?mr>NBTyrVHMe zsXlwEKBkUl0+Vr1Q}r^{`!aPtNxZ|ye9GsnMxLqbu-mD7ILL1t!;Yug@l-pWdVxDZ zXqsN8$viDL`FIiCOe=~RrkP=y8K%8P1sc#8{Y-006lR%bmT6|0<}Rn{XId;>naGFO z%`|s4-FrH{EG-y<9Zz=?)4ydSKO+0|9mqai_UW=uKf!6_pMH%S+~yv3JpJDwG$R*s z&nQ7DJZDBlDpQRb$UY;IcIbSDj5B)BmjMiBC_0}p7yZuA?+pFU(C-ZW&iION_>Lct zcg8QsIYZ7FdY;LJ2W!_*=M#v z_L*JiPEY#KkGB}h1k5lqo@tn4=33;QDfdjdXKrRI+u6x+>}ci{{z1-}`kkrYnU8rI zgl4@!9^{@?4*ky3?=1b!l66*X-bChEGS8BEmRp$B4L#55g{-ssGYDPJ8qO$2Bm1m{ zY(S5*o&}-VMR0es%{O}{b}?J#*#|g`pJB6QpZzDY&%TD9XUjiZ&$I6ap*i}Tlal92 zM+WpirxaDGMIGuP_Z+$BG$jgM&yjb|5M-Sr>zr{+WC}W-vw$V&caDDN=y#60nDYz2 z;-2U1W*-OnjmyY7N7gyA&XIMFzUMqd-*famH{dyBpIaFH&ei4Ispw&@4(6I~UN*`j z^SrjW?|B`OeO_;5pC|jgk?47z{PWz%yh+R<0W-{dhef=PIp%Fc?s;<0lY5@7=lzb| z%=-g(GVfph3qlEUCZs~Y3HnXQOjhJhD1*C5a2E;sP0(+GtO?C&h0F;uC&-)-%Lv|L z46-K3nlKq%C%ET?8O%cVgn6uH4|<&Mne!{r9y^-(vUIPnbUxX9mJ4MGcKU62A@FL2Kb(((eCF#Ce+|M!lSg63WcQGqND{hEUWl%f-9hqFKIYT^wNU5LQkHcbz-P=Qms7ZfTN{Q83JPKr zYNF?YxifQT=DqK{v)xgd371OE1(z~3(n9gL z=D|pkP}GB;GS2yM|KUE*_xF8%FUUTi{{i3TfIbHGF*uP~n13*2Dc)l6KWxlo1K9)F z1KEQy$R5ZZ*pI+|1iLeyDIAFI12Y8QVg}|2<|20>cOZ8#pUcsAa1DA6^c?6p&~q?? zoI#7bS;B9)k7cZ2HEUSQI^O3)>~=1Tz0S#;+X_AB#-Z!n9_+|y>99>W~@r}ziD z&dZ*cJ(NA%oGsag&+$df5bn!lrXp*2Fo$wD-)1&;CX_w28{uVK!PUqcF5o8Q4&@Hz z4s{*M8p;~V8p;~pLl3(U-p_B5J$#r|Y|LaAd-ughGKX96PK*D{yP0exb2OG+kUf$; z(s?9%Bzq)#G@V0`KbpyRIf;|`0jF^(az_hUgnJ@;5)G2ajz_Xb_9W`?01xp89_MNP z#B!eJHU69LJ=U{}R1yLIZafyk%icCOfn> zJ1~}A*bOrdeTUh2o1qJ__e0lm12^JLhP=s;`G#)CE*0%TQJ$ha#qHRUub}thVH}HZ zr>L8vw<)f`+Z12HoW*xoi@hp+7THS9D{YI6r7z&Dl5e-PClipXBu7bxk_@GQh$3Yw zEJcSUyIPj9yeV6-6*?@-Sf0pq%wC?s5gdgc$}>5Y(>ar~_$lXe0T-f&vVO~tvO1F; zmVI~}`!ET6G<*Q}VD@4EZukkF;#rNY)>`>)Np24{l=T@9sd6AX;3msS1v7Qh32>VpkO;tD5&C!2#U(8=MW7T}sdy%jD zekNNR%T)AL(^pMjwIex!?{gaZs_Cot6VB#be#Wo3n(Od=*UV9Ke$5-!?qrx6uOn+s z&e{e(&Sc|F*bMn%?-%dJ6b|Ji^cMRT;~#Pc?vBqvkFg$OJ;qmYE!X4zcp);xGQ_tb zL+tyB?NV&!*vzq=9QiV49GSz7#5}^&_-03z^E@x{CU3KvHN4Be@&9J>8RSpwNMgT} z?Xla5cTaX@0{fxgWE%QSj%Ft2OU##;FZmHVO)lma{1V+JSEAqK*W8L;le;iO-Mw}9 z)b&<3PkkKY*$cZ`pTuMi$E@{ZI1cYxpT+m^zIE?gKOOhhufh5C4iEAyuVUu9cdL81 zG=sNG&6&D4b#Ln4bWaY#Jn8x9HuX;FJj|1tCpAy%j`VsKkfThM5mK7m&l4=;NxVz? zA}d*iOz9iE#X9U&`T-whvJJB|+}-#&molHru`3O`($Hn&Hta@YkUSAX{1N}RG|kgI z5qX;fBrKsvpQSv;>6eF(>LJhHZDa|(8-hbS-|f7|#!Pl}8+K$T zcI8Wal?hB_e-7a5e1locV*xrJ)y1gJN0+f2U5~CrH>0oeI%|<{)Gmy=vujtoTjK8S z=h==O&|mig2GMm_Pu(UR?#6p}AHbd6hj|otckM{`uefu`8r-+!!%Vj4j-F0>WBD4B znaVV#Vvuy2+|*X>?q=>`9%3G59%CM7o?xD1USeKm-eTTn-eKNl-ecZp zK4m^*zG4nCe=&a}1|ftIi*$%XJQ9$IB$R=i$c5Y}6M2vq`A`I9p^hjQbwdNtKr{#q zMnlj@bQ&6kMx#PB2~9@R(F|09Dp3`RqiS>pszEE!Dx@HSR-?1f+30+90lElXf-Xgu zq03PN+KjfKt!Nv%0o{UbMR%Y((F5o~^bmR$J%^r0FQ6CEOXy|vI(i$uk3L49qc70c z=o|DSI*finzoNe}gGDT1J&xck+zz+L9dJk733tX_a5m1tx%d>^5BJBX;sJOR9*xJ~ zv3MMwfQ#`oJRP5o=i>#q0$1WH9LG!WQoIabgxBK@_+oqsz7$`EFUMElEAd8rExrZc zig)7M@a^~xd?((8AH)yghw)SRHT)s|2!DmY!{6hd@Nf8c{0Gahh~-$G)w2fH!dh7e z>t-`qKO1H{vR&A0HisR?4rfQOBiYl~QS4}T3_F$`#}=~1>~wYpJCiMC%h(FGlC5In zY&ClZyM$fJE@PLo3VSZQp1qR2hP{@pXB*hf><#Qq>`wMJb{BgWdmp=p-OKJ{_p`6E zud%PQ2iP~*H`%w?_t;O_&)Cn|FW7I{L+mf?uk3H^@9ZBsosQG-Ib}-}qx)X>tL``5?;PSVr{@e@8fWB8oP*2Y0$h78hwI99@V z_uNn1pFGR!_%zNi0Dd4}z@NsC;tTm{{B(W>KZl>o z&*RJaO8yMKj=zXs&u`!_<}cwdkRdn) zm*5sM1&`nrf}Nk!X?6$!bag*;W}Znutm68xJ|fSxJ$TOcu9C!ctzMF>=pJ2 z`-NA9*M!%F1H#+FN5U7vm%{hL55kYaVc}2VFVP`ph)&TZy2VVf) zi(SRO;wfT3u|OOujuOX-h2k`Ex;R6eDVB(Fv0AJZ>%@iPB5}F6LR7@n;yL04;)UX6 z;^pEM;zdY9g<_v!umus)*ipzo;9*5~NE z>bvQC>3i$@>HF&k=?CkF>4)n_=|}4e_2cyu^^^3|^wafG{ptELeN11jpRcdd$Mp$) zt$wk7iGGECrGB-3js9%?IrF?J+tbauRxc&+KGx}%sFX~^?@73?qzpg)^e_Q{K{saAo`cL(r>A%t+)F0A+ zr$4O!N&lPvcm3b6_2>+oK{DtKCWF~vGuRDIgUjGG_zWRK*wEh4!O+E!ZOAutHS{#} zGMr-QXBcQ0WEg4~W;o3-$}rAQXec&JG)y&2Gt4qX4W))M!#qQ|q0&%gs4*lAiwuhm z%MB|Gml-ZMTw%D28dphl&64dH;iu@-!i^! ze8>2%@jc`F#t)327!Ml1HvVAz(fEh)Pvc+4zfFQkGzCmSQ^*uHMNCfvLh&X{s{CP1U9|Of{y2X_0BAX_e_r z(^;l-Rv;?%zksg+`-(@Jj7gJ9%>$D z9&R3C9%(+!Jjy)UJjOiMJi$EGJk5N%xx`#5%DvM$vmerOumbI2ME$3R+TQ*p(uv}@`WU03_STSZ=o5 zVtLZ?l;vs5GnQv9&sm(DI|@u+?ZaS$U^7cWv+4KC^vp`@;5}?R&f4Zm_4>jdqjWY?tj8yVY*9 z+wD%f-yX0B?d|Oy?0NQldslm3`ziJ!d$E0@eUg2$eTsdmeVTo`eTIFey~IAxUT%-u ztL=;JOYBSStL0-K+u1`0l+tTgnUDC7D zbJBCu^V0LvyQX(b@1EWxy=Qvg^g-#v(?_HirjJiAPM?uJGrcZ-Vfv!<#pz4Zm!>aE zU!J}qeP#Np^fl?{rLRxlkiIefs`RVVH>Yn&e=z-_^oP?QNq;nbclu-LkEcJ8{$%=7 z>CdI_N#C1(ApMQ>57IwO|0w;d^n(tagLCi>!67;%hu&duq&bWZlf&w8IsA@*ql2TP zBj3^0ahhY4W3*$8W2|GGqtG$lF~L#fD0WP7L>)2597mNS?x=Pwb}Vsha9r%T#Br(P zGRNhPD;!rkHaf0yT%D6k@o{W1l?#sA8tKA>+l2S2JGAcsJv{ zjGr@p$@n$nw~XI2{>b<<;^f}u(+dBt12Ra8i2Rny2 z3!Fop!<@sNBb+0hW1Pj#Y0l}+QfHYn=B#v9InQ#Q?L5bMuJb(S`OXWR7dqEDFLJJT zUh2Hsd5yEdx!HM>^JeEQ&byp&^qtx1Aq3KX!iU z{L1-*^GD}l=bz5MTuztE<#uJdJT9-x=kmJ(uAnRA3cK37a$LEtJXcRwFV_IqK-VDG zc-I71k*nA>(KX36*)`KO%N2FSTytDiuDI)L*Ez0pUFW&ZcU|DR(6!EWk!!tcgX=Qa zHLh!2n_XL6H@j|e-Rj!uy2o{|>lN1?*Iw5?*M8TluGd_zyAHVCaJ}hz*Y%0(E7w8S zkFLY6pIm>r{&r`$oo<)g?ap+2++MfO?RN*vg z;=a|r(|w!!cK2QG2i=dkA9p|Re!;!p{i^$G_c!iu-G|)YxxaV+;QrBl*!`3HXZP=! zI8)4&GA)_bOj~AVrYEy|W{=FCnY}W5XZFeLn|VrRzs&xbr)Cb$9GN*TvoLc?=G4rR z%-NYsGnZv9&s>qYGILd?l1VaGXRgUyn|V&=MVad}FVDOp^ZLw9nf005Gk0V@mic(* z6PZtDK9%`&<};bkW5K&%>Ul zJWqSx^Stl*!1JN!BhSa4PduM`KJ$F;`NH$H=SR#g%H^e*x) z_Ac=*^{(`u={?_jf%j7HW!}rZ*Lkn^-s8R3d!P4y?*rZky$^XG_CDf$)VtgJr1u5y zUhh8dTi&<5?|47)e(L?p`?rtrAs_a!KAn&A@jk&P`qF$hpUda=g?wROXI~dzfp4g9 zm~Xgmgm0wpG~X!SXx|v$Sl<4gF?_g&z-(6`Qak#D_kgYRPB zCB932m-#mOHu<*sZt(5&-R8U3cb{*MZ?A8kZ@=$V-)p|teFuDR_}=ur<$KTfsqdig zYu{ntPrjdhfBPA~)9>=T{h5A`-|P4J{r-SI=nwhZ`Lq4q{N4Ti{Qdo>`iJ?4`=kET z{U!d{{!)LLKjxp~pX;CJFZWmaYyC_8%lvEnYyD^XFZ8eTZ}Z>aztO+lzr%l%|7QO! z{#*S!{kQpd`5*A__CMx-&i}lBpMSsqp#N+CH~w$^hy369zxV&(|IvTg|C9f>01DuM z7?1*%fHhzX*aMz`H_#){Gtev0JJ2W4H*iXzU!Z^B)WCqikicnyQGxM+34v*W>46!6 zvOp}bBCs;BDxd^NV0Bm&U{Byc;N8G`fzJY;2fhe=7x+G?4;q4LL1WMqGzaCNC1?%Wg7%;@ z=nrNE+XZuixxrq+-oe7)_~3+KQLs2TF*qqWIXERaH8?FeD;Ntd2v!7ZgLT0b!Ii_b;0X{n}S<{HwAAF-V(esxGVTz@S)(7!KZ@n2Hy+5AN(Nr zVeq5i$H7m6p9Vh*ejYp+{2};j@V5{Su_0Y3Eo2O3h1!MMhdP8hhB}2hhq{EaLph<` zP`6Ou&?%vQp~0acp;4jHp)sMcp-G|1p?Ih|bVjHqlnB*^>Ou=ci$aS-OF}C`YeVOS z&JSG@x-@iI=-SYAp}Rx(gzgR97rH<6KC)gF3g4bun;zctzl=_6%K|&;cz$-?h?)pcMJCl_YRK^j|q3`i^9d>DdDN%nc-RCXt*?79-ber3dh6M;o9({;U~gRhMx^T7k(-Ha(G{O zfA~Q7jqp3+cf%isKMH>q{ycmz{B`)d@b}@L!as+95C0KiA}GQ|_=rAYh?paC#2!hH zxFYU|FXE4cBaujlNXJNaBq!1}(k;>}(mT>G(mygNGB`3UGCVRWGCEQi86TM#nG~58 znI4HoPLGsDVv+L5{76+K9!W%MBa0);BT8g#S%$2%tWZ`s zE0UF!)h?@jR)?&PS)H;vXLZTS&dSNk&C1Kl&+4CbYSw_PfmwsH24@Y)D#$u5t2k?7 z)}*Y-SyQrRXO(8n&03JPENgkzima7ctFl&St;sq&>%y!JS(j$jXKl^embD}6rmUS= zw`J{`7^$kOsMyCC853h>WX8rgCXX%3SrA*2m z6&*o8DxIQoWN5D*Lxv3L*(ZBYpFYE~yAK^&kUhBT&_3CH26gYmz2f|;-z(!v8vis&u%8nbh(kqWIT+Q@iBfTzyz6)!YRBWD54@Mdc~lm z-N;0kEcj{9bbvw;rh{TsOz>k?W9n8ns zN-ASfIU6pFC`pVdpIZYq^0G-K6?L)1u$p+~*rExsL~XpLWOhYNwVxN1)Rsi$Q=5}t zTrzt|ysEY)UQrRNi4Gbzbm*{N`F*mx4$kYA-M!b4VcEU&yX9r~>|W4w$l$y|-MjWK zh|296DS+C8OKK*UBqo(7%AuFZ<+byQ%B$v9#NbX;_CvuzrL|z{Zyc_c{mHJTrsDC6 z*(Eh2Q%yx>XVX2ko5ovGRL;x~^vVz9chAcU^zP9okO%+sd*pWw^y!foNXXSuPCoAk0mCT zm(|YGijAyFRD+`pv8GyV#-#GtqJr4$y18>Um99Q#3U8 zFcZ2PT2`KHH}&+Bnb}O29n2JFDl?6l&dgwDGP9T{b2?L^xRp%Bqj(jc;#UGnPzfpF z9ZV@x#>AL8%v@$3Q_jq17BCe`MCq!Wstiy@Dif92O0{yPauFScPE$(bWw9JO7V)~8 z(pZv#CXUQ$e4Lyi^Gd4b#u8CE_aq8Wh*ifE^Z{VJVEBq+6);S(vc}e;a;UMDQRTJG zx+w+*&lv;M)Kr1zXn0M$u3D=NekN$D^D(LohIv|09WSq{O=z6}??&ZtW9hN++Vav^ zLhVca*o+iUW2u&;s52Cm1IM`CxB`HAk5Ob8to79NEn!wNUA8bwnPtp!W`&Zav{TwE z9kwv57=GX8kk`N~-{arf45yi5X*y3d&)@$E!+e zmNY=A4O7MzjZ@uw+Int5Pf;9}2oy~9aVc{-5>ZiAk@;n3`-g24vS&>-okX%qQBU&vE4pXGDP z0TZ>y*vf2!(HUDbrmmI}+{AL5nXQ!RQVew?a|>NW+nF8AP0YJDML+QDNxs}<; z+{WCl^iujNrzri@MMOb#adipIOqn{*#jw|E{0B=THWs+NummQermCp6256$YaB|a| z0ALlByENz27A*~q&575%OCUQxZ$+2DvaY?lb_w+E+I7W>RI5)iPdB#ujM87}l)CXe^McmK z$zffp+AGYfbQt$AdzpRAer2FCNExgQp;+`fb3nzS0%hob0E>=dFe+yquNhc?b)~g+HLyI7 zAr@#&jZ7p!5I*LPtQDdHL{#q4*xxZF8m&0p#bFH(iC3$l$_ZqF<8AcEq${VHq;QPq z%V{R|B&Qkak<4`2iVP?X8IcK@l}XBEWr{LYnYI;KK%(t{>?mEC4wCE)Wu|hvlHUr! z+5_@5O=jb+s{z-zDv%(`DG1Z)Iey8ZRTPz>9L2JfFsI=uRh@>w-da)(doA5gwaZ5V zv>tgYR*0#G^P?avYZOps)uWISJq}KycBs9EajCkUP?yHK*-A+x8lpUu-?C(P)CX`5 z^*}vQFVtHpRmzl@GG`0wi%voPP=95vGGAGsRQ#u8E>wVqQObuZ^Xk!XrTn;HHqL^p zj>M>cJ>*K1ifiKWS_N%4q-A6VBkenP(e&$AjV3e5F*bX;BdJQyh*!rz?~K>b-5hk* z+W3N4)v)qdMVTh|se2hnqcyQo*u^zwQa9MB?2BoPGPtg`HV$>D6x+1dClpa;Ku6ap z{9dQgW9Lc6b>q7wVTx_H>l+{XZZqf zzeBjbBPi&crnDYOOH@+`hSt=?YoL+r93ValQjS&*c6*RHX=s}&w5U(KB{wfWaKchi z+11ocF&(+47Fyp^M^$YdLgFlp8?@Gr5ct*$G}h4&>{bLYUJ8M3b_=AZ=-UbX?k$X?R+ z5uB1JySCh45bT=A6wXsiZwwl%DGjL$<53ai=m|Qn4)KyhMdxIqAXRGZ9z-WQh1)_%5r5DJc~k~gj%{(N?Qod zAf>|fA$2u1K;Gz*x~kH7McO)>5Ss%}TUDxQy7^FQM9IR~$STm+N-8Rrq*@tLI8kkN zE*+J5zm!Nadxu5|jwUVM(?Pj=g900g(62ng1Vvj{J@+yrau zmjCOj{!ZD+n`|y`xP7ObZoN(!Fl6|sam7<+mdu%7y;l$=;}OdIX1yWpM0|3h`^D6% zC-ZyhCVMo?M2xDajXMpPBA(6vYH0rbG6MwJomOg2?&N8(4FnoGSnE5UsDr(oyJVkqvjv~- zfo5~NZq74MU_I_yFQ#U6ncdsHN6(XQ|Bpk^e(%ucK7Ac0YX3y{_x9_5>PdGzlph8i z4|FyR8hoO5Pjr88!O&qR-EYC+dgynAam&bn03ntbx~cpn0Krq0+rZNl^u^)`ua zxfKbS+dC_I`pNgu=|bpX_KYp1WeyOy|8EZrBTrW$bsxYUxp(fo@{^|{YzI0P#5Y$| zg6;kPM#i+Ei$MgTxR#Lhd(WszoIDl1-=!$nebZ}GD;pLrX;`$l$sjv$@jz8HYgoE0 zJn%?)t$qbiztXyGmEs7J)&JKAh{{J{9I*6j!&^`X8WL3xG>*ziEGnN zkpW2+ec5Sjl&xV2dmeicdnu$rJjOl^Ne^GJ-?Klnf9kxt{<;ae$-4QvCA!s+o^ZbI zCP+%yrMnMO5#EAigfDd8K%zko*N+>-6?3JKKyU_E2gw3=agTD3L3+TOkQnei_dE9& zk9a+AgCqby-+}K02>?C$N&G_oe074DMlEBF_C58R-=30fcAXb>tZK|n<(c@H1dIUX+cB99XOO#8M z%aqHvpt-k8l3{e zQAzc3q}0TJi@syJ)T2X6Lp}Ol*-R%mSO?QtSVPr`npoKoaQ@5%k82|ujVwrL z!un6Du-=FwsTO}jf6x|xSGLtN5m08J#Z0O_C8$c4bPv$2L^FjXlGQN6I$&muF{|9D zY;T~}IneDipMPWZ(cq$tm1)WsSS6-RXuOkD*rsh+JG~dE;r#cYy>1QV;Nhp z72B{Kr(=h5lXA0ii*l>7Q@KsKUAaTKQ`x25brW`?x!8>%ybgP@5BqTdAS9&R4GZCQ z{= z!O;BFnyP6|YM>MtYnN2SrZwH1HKt^7d1d)hV0N1K2OQJn;4T7gZB%5#)ivdn;6hB@ zR`UwWS~>y2_@rrp;3K7V>4bpwHQ5_HKzTL9N6b?U|0k?jjAf}E%Ax&*eP&K+`-;GnAhkF3%;C$Q_cf;M4dz5>X`;_~);GVb_nveS^ z4=9g;QvZ^YKV@`mPLf2rd>Sck9OY>md2|e?PAH!{Pc599{(*QX?Pd^w{}5cDJg7XR zJghvj1*`~j@d#ki88E4jCK+`SOc52jAmRdq9m=&6N*1XaJXi?aE$=2hpepphQ@6OO zR*%;JAAsMqyc$e_P~Xv_h}t>@B6T(4LOgzxvRhm47vrJ^s_CYlU?QFjOA1d?9!S-{fPI1WwfIi7*mHQHm zS$O>Cluk3Dxh6B?4En7p=tPFE^nu2d%mr&gU0JMgKEeZ6$<5&eSL51N9n~=ryhwQg zM)*agQ`7W>2cF%bMcw82Oo$S~EAUFZ3M;Tduf}WeTIFTs6=jdISJ|iRS6)?KyOAOT z{D=4;?Z1i=GoW>f7D>eDOt~cG5-9_0NW?2*bUBVLpIt+jhGt|t!$OE8 zn-Bx>AyErBO+(ibGMidFcj0^K&U81vNBKzkxB=gX<|>~6X22@6(x)AiNOqYt;mawA zgqtcXYJ>3z9={boig$y&`8a+;`II0pLBj}&6Lguf`v86#KZBpe&%v-gk6*wq;+OEt z_!Ybd@5TG@e*7xPbY;n~x)x?RI%}|JgH#uzIyhyMq$JZ4bwPpwR<3Op7y$cnl^U~^ zH1Hi+-qPYO?Pq$5f{7DGL+#YJCeffVC_(v3`I{i5zy|3dC{y{9Am%mvIzE8kfCqdN zzlGn%@8Eawd-#1c7mPZoh{4fuO&Xll1V-AXlHRzhPXH$j_!wyD0gWLmh*y@BS2Y!f zaZ(3;+?-UKP4|?alrNNDl|Piv70_;)qOe*FsMcVU$FXtoYSZ{JoyJe_r=T)?j=xa8 zRK8XYDc>tUD!cdLgZOKBx|d+{Iy9}R*NG}UFd}P}gFtYTGOg)6D&*rI@Q)xt!wPMR zIf0Hr##SpAmXy~t;KNkFJ8qd22|wds@FC?J zDkUXyA>O65JeE7Wyf(Md2-PAisOfT6*SwS^8a{$8nqE+?(YbU7OXO;!pZZI$HJb(2 z#@a!QgY7QGJ1Kr_VAJW~AMFsw6MA+ zK3`=O*28+I1Bt0M(7^hb4b3lTr2;INBk69^g1MWxtL18MU_=J#Y6G90P~#;b zWVbQifW{DNxSg7YoWj`Ll0;o16^T%miWXvX*}f3c$>y>7Y*)4$+nw#f_GEjpz1cnl zVS-qKbOdn(@dOD3i3CXm=?OCIU{BG+2X+8EkR8NyV23afg3>e@f*_e72SFLi41%1R zZ0K(4Tq7=O$&QXy&8?khDcBhvs7k2}Bc~$i!8TM!8%waY z1i1)uH*aj>92kNlo0--G`r49M!GimY27YKnHxnQl*j03m9Q9r+A%P|MWp)j_7Vl-x zV$a5}5)`ESZWn@l>c%^ipw36`ykONjKeh7`)R7>6YD?7SVFPS%?8WRQVEMX?y_}!` zK_P;&2x>=A`^H@k78W2s?N5b%yY_(eX__!KwMksZUQdgL35qBOTUu9T?kKxbs$R4G zD0S&(t=A6!WW%|gZa4&W()O0+ZN0b9F@PnI+-Z&&k!G-YJB3IfE5)Jrvrkeadw_kA zeTaRSeT03K-3^w<$Jr+c$|fj>pj?9T2+Aj@D?!}|>P}D(f_m;?pGqRxbL{i%3xH%V zQ6%e?Lb84Y4I*eTMY19PLoyX3auWYeBzv18**gTHqmoGWK1H$**bmu{D3ZZO)R&-B z0M7u)`oW<9qf;~fC3}!!*;fShuV=p|=+u+MvhUa*Dg1oT&LL<3z*z%(7>^)mAXqUv z9f@C^4~7TYH2{-)q&ogn$7uKkSONG|K=JD^1;c@@8YrF}FI&)cxrmR357a{_d}qzvCo zfKFX%CN`(gs5L<8dTRhx^bY_^*Ixsui5ftyZ)<>RF8rqac}cW7>IgQI^>qC;(3+U! zB;7FGcmOTkaNP*qNZo0=QM%E(F}kt3aXOf?DFjU=Xc|G&2?Fq$Nzg2Uq6D2zP{|J6 z1P!!wlfaWQh3TN1MnP+K3bcT;7Z6lIL96nAp!M$uE!{i-EnPW*$SMuAbQJ(vx=LLY z{UNA~pqTa>Kx>RFrRKX%w+J9hw-9#!dfj4z=A9g5>6YtO0pjRZP{@K_Z4EkwLKaA1 ztq{lJjD!caOG1`4)$uvH^Hs>wou@)p6+o6wp^!DdRRgWjY6GCvCAv#hw7P<#Rf3|` z3WBOrXtlf*T3w~Px(Th85_CpOw5q3Q)u7v~+oId5+orpLpc;Ze9IPV<24@jLi<{7D zgN6wS4HJ&%|2!&Gr2yz(#-vBI{+Ij{OnO4Yq-FnoOggHgxH%?0p<&Xp6sx?bJ3uk% zCEd%qS9E)Hdv*JC`*pACUemo!&`N?<5u^}A;OIbt))2Iopfd?Ni=eZ2=-x}^ZQB3-ipbP7Du&&pg942ur$5Tj|!*Qxgco9GfCsIgR-wIMJmOC)pg&hM@68G1YJc%AZKcA zQRig5ikiJOql}D_pu_dxdeR!#5Ol3_Fd2z=Z1IO1ph3;1e*iUHfd(}V8q}Q87UB<$ zAk011!#2Ybu0X?*hSU^~;idqVaAUb~Tp>4}o4^%8NXJBO5(lF0R)V$>1jv6QLE8!1 zLC{SE-AvFe1l_uWo2p?6H_U))zY`81I z&Bno+eh5ORxoa3RcP)1vEbdY*NW7JWiJ*rGdb<@OQHK-Pz-8;j29BwyNa_cREo+aoxf}SVn z1%h5A=p}+)Cg>G{_7Jpp2lq~L*?*u}mAOyovfr0l_5kyaq*eKi|1JAASoR<>)N?-) zv_G}%f2JbDQLW0Ux&Dg>V@N#*o9}D&JR<1zlUwvW$BXKs=LL1qAAmL6Xi+}G3X|-L zH}MvAne(!`%-=jtl_M?2ypwlnL1Hb|GZ^ek7c}s0YBHvwF|BXXjKieYJF4An;fLkD zysv2ue@f7ME!Hp}fi=u$@$LBb5Tn?Up!W&-fS?Zv`iP*9+hh&%{j@bqUF`qNsn}u- z^F#UJ5H!ONBk1#b9(2twjuSS+kA|=rehfdBpf3sfx-njXAJ0!bGM#6)lw0P)?>C42?ML5wX*I*4oMX&wvkFgLrVhAt8Gz3O$~tN1wh=o%|D z@YUcsY<3|>&ERME@!bhW-s>3QVEM5cN#l#HlT%DrQc`+Ij zVb{Jw8xVyBCi!HTsl6$mH=&k*pa{sz&7((yP&v2)0%psaV%N0R27`OEOf6kry98XP z5ZVPZmvT>P2NF@@v`;jN5>9%daU|-@j)Z_xaPUolIN93Tl9mLiL4fpJ95|lDoQfQ2 zY|yDaxAw59?&!0ors`_`dSEgB8va`TI)V|w5I4nc<~Q;6d;`Hcf<=N2l+9>hXshAW z9xkDV!}K^>0Xit)gfDAJ^WY^~MYSG1`KVRHEz8pmQUu?~@1VDfS&dVPftt=^xCl*J`;|cf_ zEvc#O***1$kMd7J+Bv_Qe~f>ee}aFK;534b1e*vp6D)7#pXQ(8pXHz9pC{Ntu$5pN z!FGbvDRmuam%a1zyV5QTy7%eXwOh};UfpSz<<;{*NsA}6-lB59vW2x}v4wCdPd3B@ zlo!&wg%xoA);w@Q#%i)t<@;7QU2JM3)l*(R?P+L!pRT?02MvOcN9m~}Ts|qHVA=h% zG1KODAAdW{>2ni4|FL2fol|wfUsEqW^VK77KmU8<#W&Q8&*rY|{PXz6i*KtJcjxWe zxU5g(#rL!}zuEE5mNjrOH8~&h2jK)P{v-Zl{uBOF{xkk_{tNy~{wsnr2zC;Z&Ph92wcrq6`gQDi}JxuDo=?XgKmlTlUEsM;R6IQ7{Q+K_)mta2CPs2yVYcunIQ8E~FFOf#8k= zcOno(4a}zn(xlih)>8%uwma{o2Y>$~HFuqaYzQ0`It$QyF2Q*XLXH4`^9k;%7ipnPoWnSY%zF8PQqrPx6p?w2*)pW^ys$Kvz#LIYatQ}1BAi! z;RXtW2<}O6?*?IrP(W~Bf=_L^Vn%8!2FM)uPgl%@SV9dBOXSi>NH`B8mfbBozgxHN zy?fc66pNUMQvyJ3%NS_!NTsf#N1i z0s{~3PZyl)nCw3@b*B(QytKe4VLC7_L=dkAERG8hW^)lM}03}~z_PMRWiZYw7Of5GmMg2lyDbr=Mut-=eEFlCAf(wTnv?lHIMPOMI))PERA>*|p3WQ5RQxw(< zm%~MZ$0%g_#9|tAJ+hQ$#nM1FfkwRxR}(xADkbOddaY8uT4}sOAQwcdR$MZ-MHW|T zP`3&N0ydFLB=giJ)PR%Zjnn_U$SC%5DGG11vZj?nd!*k-u0i_k79A#@6 z3fc2wB~(O-_slU1|TL0tr=U!}-z5w4s}HEBkV+9-Ulf%sT@sA5S|+;TJ( zwHyV?qRF*ZQc^arc2RAje97#kvFbSs%a>NpJ!9b+0s(JjN1|3~ltL*tv|;FhcJ z|G(^;Bo`KNe@*YE>p68%RbW~##{UMEB+(_cl$ussl2$m`6~yWOsCA$Tgm(+HkU@C<@y5SiSHW!E;W|Ss{ESe4{!mgs-Wy0?(xa>>(*hg&I)-$_>n`Z0UAz9 zQ%{Z;eiD9F{T2ckc)>oh;5fBYRsI(Bz>y*&A`y$Ms1rGn7X?uiC4wsn28lIJa5cea z5L`oWg5X+$>j+-BLo{d{DVjx@a-?XZ9JwgzLBk+ouFyDg<^MSH-_Ma^5I9l{5e(sL zsx&KR0Y}0y5bA#zc3au z3ixQQI!ZiXctA^T6#I(;xRJ{PUWVF7@^X?J#bM$I(3V6{MM%8}QvaG3 zLbRAv9w8?Xj-&Xu8+CH2HKd|^X$j<6f`KQYruC%^_~LkRBB)Q|1hGggCU`BuXA*qY zW^s}@Sp?)ho8XJ!q>|%nnV^9-9oL{8TsInwfyq<$LlcrIS%p-_9ycd-5L`id4Ok`P z^n7`3rf1QqhmGMJ$VL@sGiI?=EE8j_QJll3iF3tyaPr1}aRK~PidEB7d0ya)n7WWA z%~#cqESRBwg2$xEqBCmg340SEV_bC;$Q5)HVohn01fNInI#3uGf-j`ME+F{a|L6=f zC1Z$5efj)psrippO^CrkC7EO6fvP%~F?w!ENkyO>)Zdy))svK?dLG2ZA~~m!3^U?VaTztt{A<;ZZmWu_%tQSE~ zzlyG|WI}ne2b#l_Dt^7V4N}&{O=7*+AZ`}7h+7GUTGtSKEy3V(yPn`p+r%5h8}SHn zhjQYBKQ?RG-%#m-k2J#F2Q-_v&(A}BdcgfnlmvYrlPs(&>Xy^X_kAS_m^HQfXAYB+Y}Mf$#xVdXXS*#86s^?`N`xqM5;shNMr=-XbJI)1oW+ZzAe zMM2?if*X|GQF$ede;_;1Xdya&wrXy*=J){2Q#HL8ym!D#AgZKPVoJdz}AWQHi+la&iZPafE53| zBpzTK+r^i~SHwNyUU8qeUwl=3O?;hTFbIJI^=5)^A^28;VbR=1@a+WOu^q&wH$jYA zCB7rR3!mR-;FJ@B?*t*LBf&76chRr+fB*&593>YNvZGq&rnb)JY_zcdzm~Wveoa@z zHw5oWNl4#;ge1O;=F%TJw5!!$%5DqZ9DX#Xg(NNhCjP0(E)X68lJvbGyNG{NsJO3{ z>|(jA1GsoKLlnT>$s|Q*ClMlvVo45?IEh9oNxUQw3`^#r21%mq`0&5Nj*?k&0Xs^v zWRa|rO|nbrl0(Xnz;g;q5FP|H&c_IToZu%2ev)8V0Z(t2+^S3u>?rw}4pNXx^v|dg zy~d8uQFeS@W5?sN+R5oC=H-o_+l$Av@)oRa}Q&d3Lw>3l_I2J(r}2i7z;yZK!vz0K@UH~_PVk=u|4mp#SU5qDBdkDJiLeI38VPGAtc9=; zB0Pz(>4eRoLH?|Zu$hGQ64p=HAWhh2!-UNuY?wrpPuKy39Yok6gdIxQ;e;JY*ii&6C+rx)jw9@N!WI#BB7ul!b}C_~6LuzHqY%go zne%KZVPgc+;n{M+E+A|rouJLq7HO-rO}at4QQ9u;kZzK0mTr-5m3B(ENw-UPNOwxR zq`RcMrF*1%rTe7&r3a)3rH7=4rAMSkrQOnF(&N$-(v#9t($ms2(zDWY((}>_(u>kd z(#z5-(jIBAv`^YEy(+yXy)GS)-jLpu-jd#y-jUvw-jm*!K9D|?K9W9`K9N3^K9fF| zzL36@zLE|~UrXOe-%5w1@1*agAEY0p!-S0!_H4plOV~RI`!r$SBJ3feLT|4jrd5!w^s6e1K7Ax4CAh;SVd?jXXG zM0lGB-x84}qJxN?i8zRe6Ny+(#N|Z1n20wJ@c|;fOvDd~_!E(UTfIceC(=+NO(9Yh zk=79Daw6>@(nCagg-D+e=~tqci9SN~y<14<(r=n{zQ0Y6O94ejJ^il$4y!7!XqMXF zq&rD}YlOTOl`B%(QwvM-u~mR3|HpC8Z5bP@rQ##_hRTyiG-)|1&HPS!okqfes9fC^ zB&g{lNqHFOYJkHu?n(Yt-&WC@2&YEG z`%zhG3nEez*X%%NaLCnwo>8)Rgz5l2>dMl4HL^a8%FF&!WDSnPdq*n40a*=R*46_R z(kS})KQmi&-6b>9nlo>EjR-htwG9u7q9?oM7R5?xO6S4Hqt8zljgZg5`QCQ(qY?sd zS}Fxw3pMKunlIaESQ^(bxR+s9X#ComNqTC8K=A(JwiuSwl1{nIVPiP%=5UHe z&Nor{qP8F>wYb%j`;+G=&}&DaG8jQ&8!I~|A`jH4Jk&-jt2vd_LUwe99;y-XeNcNY?^b$aYQ`*RE-Qc({4^14#hFXV3yYTA8pB$RA7bo(a?jNjjz6@0^*DOr*pwghm@>$EZLDN?ZE;)BdF%yrnbtA9;iOF@#+Hbp4b<_rJNoj7 zzX&}Gw#~>%@{C4HN+44&wq8otYvjO7lG!qXZd?V|FUww^zVe^jnXS(}?y__&I))|~Z%Mj5zA+eH3s6n>8u zln;AYYl8M@1c5XC;6F!dY{Jus{UK^Rkle_(58u62~6lrJqv}UPKG)lU*(MEQJ6rXgg97Xm0Qlq1L zRIY0a)>e0sakD}DUP!|uwE@yZv({tstwu}FsJyBzXwjfCIY&uEI*EPdM~$l9QF--$ zjjE%<{BmHZ0lbU-d>ou;9- z-q{U#8nJ~@`P}~su_thd8G2~+O=u&QZ*=^CiMe1{Dm1_GYHOD7tI<>3M*Dnf2{vjU zN7~_!75ritpb<8yje-|agf+th2P2iODe(Xk<-kBeI%9#Ig0q*3+mRN5M{O zV|Plk5o$hKlk!_rG*%m^8Et57OysH>KfLO$x*8Pifrf4*t{vVVmkB#~>HDYE*<eV;G|bkzEo&oBc~Z1b3MR>jfujrf zhPfIkbJ{2lrV*4Axu+G48%t9Yj^npCRA|)9Yh&PP9?Uf%2B97B9xqT~;ViWWy?hVjzaqhBbz@hBFOk8O}DGL)dD_WmWBJ5(qF4uuuCCv0p2@H*j4nUCG1-I@y!1v zCj(@}!7u!8eAAL)6C@cJ>Iu6nnd@NK0=W)`t%hxe8{nlSEX2L9AS|5Q9fL!?PnAV^ zP%;C-aI4`qNK-cKB&E8191v3#fUF6lKG+hW(T&pEEpfc){?Z;U&Y%hF1)G z40{dx2n&39E@96j?D>SffUp-5b{%0aBJ6s?ZrEXXRZEyRyum(icng^F9m*$D|raG&oZzR&mmB3?t7?Ag=)=RW-$ zEyHS-Q3Do9cO$Se>KIlx)xpYU?q(gA_RnZA8f6@f&14)`AIF{Q#BK}$N29~&G`fs# zqsQnq`iy>Kz!)UmZKPX6y0xT3QCvqlY+>0zx{ajUM7rBk#;}5;F>Xw-^BauK8IE_T zIHpLqMLxelcW)DoC!R)QSI}t0CZRjiG#Yz?#s<%CFb*&d1c}C6(%qFb4kF#%nUQE5 zY8(NgjKi2=yoVV^<49&0H`iwvv$iJW?O=GQbd57kRDhfy1G$v}Ig)|AxemyxlWE3c z2IQ&6(~Q%NGmQDh(~SkjnZ`n65$WzD-TkC{fOHR%?jh1WOu9!%_bBNeBi-XEBQCmU ze~f47agpGc<4Se1&Ug=FalLVaaiejQ@pj`K#ygEE<6XwPN%s=zUMAfuq2{KC z7wKLn-R_iebDG6%%5h7^2N{cdR2JVE6ze#J7!mnR$GNna6iz^SFDC?y8VP( zNp%NE_W|iXB;7}(`u*k|y!@G>LyP5G;4d96Dqsg#9CurG z-MgS!v%l%~Yc^7m=D7Cl*QRD5(PSju!8C~`3nMXRvN4hNB+`AMJYg4Y>C85HOxSv# zGXbPKRvRyPqWxMz_xH2UeSKrj(%9f>Gt7d9xY9rHVYAw_F-Emy0 z0qkVLA;BqAXHyqbS5r4rcT*2jPg5^bZxc2v|3JDQNe3){CLOl${z|&vNQV~i@1#4D zGWAnvG!5hqG~1+UX&S<4{6nP?w@9o&-wu5kPS=Fvi8qX<2@J=Hr2A9FaSCv3c8zwn zX&S4fFJhJSUveegM$PMdQvrkVbkhBkG|ePVlOc?=OeG48a~O=AmSHs)FmhRSVbrTf zzL*x6Dij!T%O-YtbH{O|25_nAA_n7Grn61wn9enwXFA`6Yeq~Lm@XtvPnQWDU1^;2raY^wY11at9gM}>iE|`PcM|8!ki~mU7#3P*+Kg(NbFpgLv=!Af=dQP! zo~MHKkm*r{#Ybcoy^O`Jj9_;if>kF^nOkev`3?(|p(;;#v^b7FS}jAKNv- z*a$Fw%wYV4xEvM6&jF+9pl%Hlam`7K>|jsS)7ffne{1@l;rJbKEt94nh-;N0j=z`= zE2a@wDZwBFGMDX-<2)Twv%%~HmuAV_%xpB9 z%x1I2Y&F}=b~C*1NL(l4IuqB0xUR%?Bd$AfJ&5Z`T(6YbrEqEXDWg2*5aSXcDqQwg zM|rrsCM-`pmgY9V(%hD~K4~n?9e|~|qq!3kaeayFr#yjWj&*>V-962{0j9YZaRZX( zKE&l_2Bvv{d5{dId7upDK#*k~%)lH}7tCg(RNqFJPgZ!uku<2Y2Or0k>SVlmI^%JI zd7^oed9rzmd8+vo^EC6RW*E4k#0?`3=6M8hBZ)hSxRZ$+McioO#-z+M(mc-OXPApL zEzPqSk7HFHG0gN3aZ{O{Jf#W9MgX#s0lAR4aVn5Y7?4Y~vzdq+j|L=r0LL;ludB=# zFc^uriAgisWRo(4@lrEJht`>wu}XU~tF+C_S*1OtzDhfEs&%sJ-%9iK3XW(&0LN(z z$K?#-DRm%Lo!nx^(T^$fYV)n;+stdsYt2dXI`ew-2J=SZfYNm0W)PQ8-08#>5Qj!^ zA#p{-6{pO%r*XV1Z63EU9A~LG&Z#z!^O|UE1RA$98lNC;wo2pEps~S0aPv#%R~U&e z6IYTnze?O08IrimyhkyMxcU_pCOa0}{3au+v<^`=VVVlnUh{s1L);|`4(A`omFnbU z^EZscPt2d1KQn)BK4|{Je8~Kz`786+#4RB1OybIkt01nDIF!Lf#4RRn32{qP=5Ny+ z{-}GEjeVPcWgMQRa(FK02IaAD?t&%`PdtYf4jfu=E}1%CZ4tpCH`O9Bk+zgLoPEun zu!}v@nQgIJaI1XMVk7Rnqy<==pBar7kHs(3Xz|H3R)H%^kkN?A?qiO4x0$b1eT!ML zWg0CBnZ^r`<4SeX+R`1Dfm+&F+FIIK+FLqUI$AneI$OF}x?0dkyqLI4h`W@yWyD=Z z+~veAC+-U3t|aa%;;z2S(nCSg(#O)*($CUg)6$a5pu9$f@>=3Cr6l~F;9Tu5;PPyL}DReedD^dM=C927{gW+HAStJ(1Y!JAY- zPPI&D1S9vZOIlDvUY{YsGcCmm!9_B`s~C&38NrwzKbBzcp+s(5Wm-}7cAljY2Q^#f zTgog8EN5EEEwG3;6L$-7tBJdnxZ8+Zv&pg$z%8~c(QL7tMci73SdzF+RlSM3hmCXF zQ{m9_-C4n7^o?f-RO)j%Htk4_BnG zacnBNl`Hz25Nur*pm74arG>_s;_u4&ec8kYinF%%f34?;L|zZPu0!5K}~>* zESDnvEEii)0M`+>ew}5R1x0WJaT}{zPgd?8ISsc%6_%IG!*#gxD<{ckvQI3L`YajA8d zTUe343uU+U(YyFgDXADTpDmFql8+3vBpF!<=iTgR=}-e+v@b20J*QIjXp@Bv^jK~u zZgbKCpSD!Bt`(tE3Krrl9URYIXw6gIY_V)pEZkPv!fiVaRjQMREzhF9wLD^Z)bg0+ zam#kg6P70}Pg$O}JVV_5#63XVgT$dj@i1|Z5ceo?j}iAcaobat=hDXQC1vQ)@)}Er zCsfmhvvJcyhcEo!XV&UDoAbEFQSSy#B*`Hg! zU`!n(?wO?J5OL3DXsy1nV3Y@oaV+1-*6KON)sM_tJzv*awW}_pzgdnbG~%LcwEkW^ zj;nM4tr}}H&}h|Kv#dHRXXUMWtANFA1}jFcUnUMih-kCEM%)hKb`rOXxYvo>P28T8 z)u_;Dwd!)4p+{nMG8*4dX?zyv>fzwZk`;55Hi949GPE6xCRWXj%(-@9ls5pLEZ5+RAqOlQZ zJcH3Vm$*YJjq^ccgPmgQLhEA2Av%*^C9UX8ew`tQ=UC5IIK(*%xV!cc@i`Hc_hu*rK2J4MhG(vtP?kD1Y zChiyFekJZV;tmt{J8?&d`y*w&CC%ZQG>7XMhkvRZ{;hJzXEkxy2pn!@9Bw1-FO@@F zG19=&2Q{l7w?4sG+)ms-N$ZouXE@hveb)K{sIoqXp+a5@9M_o=Y#Gis^$ZoNUcF}B zrGU7TfynCsVnb^sR3~p)KV%@jZGFf3u63_O?#f|q08o#fwbYW008MbjziT+*wzX_+9I~7EoO_`61Hqxj;*<^g{>v= z0pf$ihlmdoA0a+Ue2n-w@d@IyQ?}L$khb=UWwdo>K<21Gwy3s@ZJKyI@jTjc!J};; z@y*jb+6ModWwf1S8^v%unfR7T+i2o5oNBg>w@p%ToG9ZcPc=8NBuu61RND*%#OX4K zZU5ae+KOyt48&sFEZc0`99xO)4BK2=scoKZKJo2|??714!FM9QGx1%B?@D|(;=2>y zBV}8V2C>q%(6&g^(zb+w*i!|u5AnIg4`h~cP!oxbK;k8gMBI+iOC|AgkZ4=3Tf;Uwwr8h0k-XCR!jG1wY2S4)Y3dIq^a9t zbiSC#6_sH>t9pf^ZKDmNLhE!Dw%cVg^O%XemD$z-b-q9i>t@>{jLa>zdu>~7+idsQ z?zcT)d(iff?P21F5I>aoVZnxS4Z*20QP=yVHLa42$9><;P(rxRa5{7m8tQ}!$cMZ4ZE*hNiCyTni|Qc;{k z{5<04GZf33P(1M{+Py&0j!Z62qi7ETMSG~(_x6xIN<5bSU&o$2W}&TftwYoKZO^f{ z0Fw6R#Fr%PXpv<&+iY)Z?*Jt2?Udmo zm~RAo0ob&&dvoy>$1<%t8E8KlY}yCe^X!A|L+nHC!|cQDBkUvXu!!ZvR}f!G{6gXv z5x$Xq~tRnm^^&2X2reUW`BBXcn$6FX?o z&7KP~v7ozd1)j*wPGf0SeI@%v3YHhjShBs+4J`;)om_6eo?*G%eue!?`&IU z*jL)GwWGi-BmOetFDHIE@mCOkCGl4ge>L&f5Wga2UzNu4W?im*HL$#mVX5ww=CN1W zO+4Ex%{T3pZVW8%W?0@syt-G~elNpvt9CXM@z=2)Hy*6VtqxJ!AGSZrsCf{ak z0S4ro_P6YB+uyOjYu{_%XMfMW-~K-Fw-Jvf^IGDQ#IGZMJ@Ffe-$?u>;%`scKS%@l ziEW|%GXQyz0jchm=I@p}I$If#+nVa|MySJoVL<*$yt-Z5{yPKmi2V;H;#0)mr95FL ztE?T<`R&MZaA4A*BmSPG17m#Hww%c%jlXZ=EXG7JAKk zhw7ix;gOMaxMd{oJB~ZmNyyO>NIJrfh$HHVIpU6lBioVVXzpl1`~$>4Nc=;@qql={ z^(gTuSC13Fo%knGj#dhij&{l*kfRer@=3MouAal@o93_^!9+R+fJjF!@lT~|Zbu%7 z)J@jTW+JT_CXzj>H@`SWI${+2J9f)`@+A)`Zriq zj34(k*~SxZ8y##A$bms1b^6-D27&lW-5Ms+VmVE=@;u7o3dgmK#g)Xrophiv_D+U& z@kYljjK!N6i|@)Tu4XLmt%pUM$!EDsGUi;(H9n)eOeHb*!oCI80h5Tj8Y2WB5dR_Z9})jC@t+X?De<2X|9Q&sP}(X!rmX08 zJjtx$LDedLsjleen$9?=cql z5&u=vv7h)1C$JqKI@m6J$489CZ)6rfWh{PMABzRMRo}jJe50`Vwag-$z;=AfSgbqk ztvdP1@i$}fXU8v&Umd?W4m*B#9C7^N_|x$h@jnv(6Y)P2{|oVGp8Q5U=Ba)s{s{4Z zq#XY!EIM^c4eb;di|PcnUZYOa==mnQc;fA%(*+it=qIWZ*iIi2Rny2hmu|-y@B)+>6?+> zNO}|L&7`-G-b#8~$~ipEF9?QG|H3Xa%v0vrR!aiu!B$ayux@nYvC&P$!koR>K-cP@8c;k?p$73o8y z50gGZ`Y7pRq>qyx#R|-!ST#>MaWW(OXjx5Bpe`#*-JTzCG(?>wgV z=Wgd7=Nry9oo_kcCVgkpcOiXO(sv_$chdJDeNWQ&B7JYt_enY5P1CsF`93=j&-o#v zv9C(w0MZXey9Ks!NE3~XK;yTJ#_veqPo?ok&}cen?r1vb#LB?t@;2$_r0)+JyQ-Oe z#Q7(q@ek7HCY^tgeqd%ay0k6~3!$oZ>15kD2wb`JjH|plT-mI<61g3evGBCFE~CpL zW9dQ}fsq_~9OtSNmn#Y^U2d1h<#qX7epkR1bcI}D7i=TS!3ffiB>hRGKbiESNI#nN zV@N-i^y5;ln1ZD%hnvDp)wFcAVpyU#&Hj)c%R(^6RLXvA+A!S+9U4~;aOr}Xn2_eu z)dyU1^SJp;q%FchWXiL;bL|@B8Vo93d8D6|bPXZ>sNv^31mQ!Rbryb9|%H<4K3F9)~b-Js-HPcn-DsmOO zX1Qj&=8zstO(*>f(xb_8I_V2YKa=!@q%R_Uams~Vs_c(zzS7Tjl`}5Yozwd2ozwcJ zozsnhB@Smyx`_1Z&S}?0z_P*R6|Uv3D;bhkkiI18Lc1)(xop=;7u$>Px|UVjurrQz zu2rnsu6Him-%f>UwQG$6;%zdBZ0EFV6*I35PGGw>y6$BhZgSo3y2Ev+E9JV&b+_vt z*Jjri(k~$WnWQf#eFf<&NxzWvi%7qi^h-#;H09cw=I{a2?ySS$@e#(Mx^r58F4p-} zeaFmW)6VI};P6Gp;Y*}fcTT%r1&8)It{qHrXXYH`iE4X{%Eue7w-}9YlK#A;3+=KD zcTT(Zxv)rRo$EbDW0g$f0Y)QsE!44(HrFoIw@+OM6&gR6X=FR6T?ZJAb@yAVPQGy+ zW;A~5`p)&e>j&45uAf{#yMA%~>iUiJ7nA-H(qBsYWu(81^p}%=)^Sa`wst#!BZk4JFv)}9 z7Ufx8Yr6gJAYgO{NWU`aMt}9%%xY_Q%#C3p)Yk5VTw7m<+Li|usI4EYLt~mNcWZY$ z8AUe^14F}cRVHq_xch@ecUN~ecXxLWcTaaOcW-wecVBlu(%(q>n@E2%>2D$ZYSQ0I z`rAmqhV*MmpG>(2C@i}3l6V9wD%=*<-VAac((f-_qp!#+~>Qi+~mH%eWCjz(%((`dq}^T^r)}zCH+>?ZzDZM z3GOHT11a|KB$t2nQe?~Ve>WVpKL<05l~#sP=s-KNJSC%b8NuD zcQz){;~4fYlqV|bfSTKPxKj+rJ4yd&(tQ`{AIlKOEpB-m|13A=9np(s{1h~KCKvFfCm#|;=gMvuv3 z_Edf2Is zaCdA4uR59FnZaP3=$Yi1?3v=3>N&+T&2y^fG|zO>e@*&tNdGPAG1~e)>3<+S3e``f zN1^&9;Vszs-6~?82(dpODX2N7OTRwqD zb??Pf5pVc;-wyTIHQLh&Zz%GCXpS^sE3WK!<6+_m8un<>l6^L zl|lTQfyho~gtLY~yxFsnfq08&wdYpPZJsrrwVtGBooBsg0|^=uv?OGapd*1JfhR#v zf>GCp&Dc!3&9Iouy3=jn=4I*l7+?J&sgeqFFHj&r}BtFha+)hF>mBgn& zqV6Nz$GT5gPr4U76Ghtx2lX6f@kP(ejK!BoFeN>&kYLV`#ho5p-m%WJ3oHugo;%j* zesPT=Z7w>~4RZC4XP<)NUWTGzLr)sF6|mlSZi8+<^nArw{K)gM=M>p3gj=dk%WO z@Er1dNrHm}CkZYR+$4BN@RERU^^*`FA(--foo4ZSWvtutGh;ENvKUp@lnFUaD4uu} zy;(rf3mXwmqv+KGMX#Wp%|t>3Mv*;GL0i(6%4_yofuh$!LM-XEkr2-eMX$@tHt~Di z3`I7sv(D>-SroGCF^e|;{i<&fZ(N4a8x9r;^Y; zLl#f-<}((jGZuTuES}C->{%a+LPTY8mRG*Eqr!`8J7B_kGZs&0EcR@W#WL?%jKu}s zGri^B3U8%%p?8sYv3H4gDG7Z^=tn|-5(bcvOTs`B29c0Q!eA1Hq`YURSv+5{i{1+v zi$hfwM^xLz(M>Ei0*fmciz`VOrm}cFvx}=>7a8lZL@c)Vi)g~SsZg5SE`eTyw5Ne zAND@teboDy_i^ub?-Sl9y-#_cCSe>2<4Kr6!bB1#k$?g#^67k>kN4?)f=~1rd=d$;%P3}ZNGKuU3=-y&P)fo)66TXoM#6%-eCcBy zeOBG8KD*PeY3Xw@D9==(T*x{x0`_75&H6Ey{ND%W|F2F^_GN=%Uk(Z7X@-3*!LYBD zuQd}16(m$DPcXdQ+B^-3uamC}DE6V@wkYZAO2XpIDE9UAVGs#6)rXE0Z0Zv5=Muz8P9*{NbJsdh zcydK0J55;q_~|}2m*y)V;o^GFA67p%+b7SRRroM>hSt)h$H@cL$pYWmsG)pk`pSJ3 zzDnOh-y+{)-xA+a-&rJFM#AMJEGOX#60RiSDiW?H;TjTFkgzi4J4dOZd{uVAcL6f! zB4!M(RgJ+aHt8VT!t!eM|9zI=|NNoDzLl(aUrWMuYVlshiuVoL*-Ru{&zehkpm3{K zK=^L+tz{UkA>oFkFG<3U85Zr0K6cQNZxd^}-^7~kzB^gd{pR|b?xvu1h|1QzzWd}V z%C}9%@m7YT+|0VUj!96RJmPzf;rOWUG2i39?Y<{`Px_wnJ?(qO_bdqrH`;gz_c{{R zldyq=jU;R$;dT=4Nco;uc5V7zRvJvc9Sldd7Jw}*74E8TFg4x(-3SY(eD5(D_mhxP zY5V{*I{jIPnOKVe(++r4cO!kD``Gc#ZghxqujD*Ki{&X|RZ{?=26?}en`n90m`z<_)70&Vs zKH=FWvv}fL?tXUowLd|EdhfTtIY6xc<~%j4+xc?C1V%0FJIp#78mQ%pGK)jy4a__|s_ze&PgY(!wj zv1uQBBbY@097ZDgQoGY8(O(J@{qy|unMl|}!W+sHRdjFbBo&c`es%!1e-R09CH+fC zcsoNH&+)SZu>I#U!}ty}jQ%QS80)?J+t??O8?Cho#DA%u&7kQj{FljOvQ6#&D%O0* zLGTTj$ZPz!Ffv#8SNgB@U+2Hxzsi4u|3?2!{+mg7pM(P>d_cm7Bz#1|$0U40!lxvB zM#ASQKaN0RfBb88xz1nl_Xb9$x~W|_L^uu!J7YlRH%&IO5p3i(MkXpTbyvIpL6C{5 zF!_%>6NWw<`@g!n_HXw;$*6pSgfEkRP?6ys;Qr_QFDf?j1=&WjJHY>CvfsbM|GGlr zE}6t{GjQ^@|071?JN|e5d;R!p-}fKzf8Ymw-;?kI2|tqX6A3?)@CymQlJFY| zhe`N7<;UH&GKrrnL%#km8HqJ&dC*cp(ME(g7y{ovGcazVF$*jP*uhC~*MLyk+9xMszl@c;Z+mzz#t2t}@xYtBk}b#Hv#E#3er}9U}wm2&BMCB-)aJQ6$j1UG42hyQk~otU?(62?hf1&*c{jrxHqshuq|+3 z;Qqh^B(^279f|Ep>_B2i5<8LDnZzz6b|tY}Dv&+_De#zmd|_UPH5us#Pb+*gU2B1uTg0pgML;|3(jAekn-p`D$nYAIv5Kkz+x~? z;+SL*nKd>u7K1H=ZDbaMtz{O+0jpp;W*o=YHI9atn5twX&ZWOaB1)yg~YRE66YMpl^Vbcf>$yUFAQE3yf}DC z@Y3M2;AO$fgUf?gkaz}(2y!WjXh6;q26vnapKKlDS*~ zE<+d(Vqej~;7-UE3WCd!J>&>EL#~iJ^0qXWAsmE+ zA#WUS4Y84K9B++BHIo`Euit4Sr)wQuW|>jV(!`OG3*Sl$VnDKr)273`cWha+Yi8%Fs2SDs&Yyl@H0L zas@M$57%cZrM4SS%`F2-Uqv@Wzhv>~)Hv?+9Z z=#J2xAt3lTiQ7qhg2X3D#Fsox;xi;ZOX71RKA#HRtu!A)_bOwKq5Bz&?5Kaa`S?=x znB$Hn78`-ZXBdmfix*WEUjT~@p1&2^5!%H##Hi5A$Ju8Lxt)<=p%*04`mK_G7d4V&D=FqPah2Z$T<8WbSU&?=&R7zp>IOphQ14Z zANqkrgm*WIXh>r8>P-^gBJph!-y!i`68EM;Kc#KrZ`=Xy1Ju)hFb?;rHgP{`ap=)X zR!@J}1mcMYF>C;cVTr`|(jbOSay`xcqWc)vX|qY`%jM_t>Y6(247&ki*hS*|$*_mS z1DU}X4ur!Dt6AZYTvLC*PA?MWJ(t%s#8o&u+(Je%++0TSqfFei3-<(z;r8JU;f~=> z;m+YM;jZCs;qKucBz{8TrzCzx;^!nDB=HLp50UsKiD*H8oeK9-SPb`5>gVu4#^N_B zi{Dk(&p$Vz*a#?&VJMCz@mm$e2|%&_^VZXrDm*QG8bc9dbl)e#7^C|kLlg_bMZhXN zli9@|nOzJQGrRaxeRfftqWU&BJYRuvo($tJu#4ehW*2{Ikl)Ji`HaPd;YH!a;U(dv z;j_YLhtCP08%B@%HxkkN`kllhB>q9-pCtZ8;@>3xLk3MMT$N_=BIR7d@G`Jy(56{5 z=+tuw4MG!(jld$-b|=F(kReND@n*1C|G9)J9m()|#^O3MaLMonGVmF)ct`jy#Vn?n zSv2TD)xVrC7~UGjDcYEv4&TQ>G>92Ec{Kby1M#u&bWE1|nM$!5WGNw`vp(fhG_e0mS_b z#P`YIQbGKX)z1xI6BRxfKEyEmf()Ky_)9W)GsN)Q@DI!+eg~6i@X03eN0>x|zaEol z-KH{sILuB*0*FUs5QEGj{s@Z*XAQIzBie`&AV#txx(FBHBl?IC5hI3(6aj)^GDOG_ zB}0r1aWW*x0Mv5G(3}h{QW2A45hFJ4fU`)`GQu{)8Ct3q5mQDhZ~+2ivgy44Mp#}O zNr1!%QXJ>`%jx2p7w7pNy8W!5E&%H7{SRdu!`)o|41(eV}qytM}|ixFc?QfMn+DG zoE#Yy866oD85 zRT%qMTgAL4t9atAV&n|Q;#@MQr~OCf%S}Zt=JdP2#Ksr4juB5B0;jGWi!6+=W!{lR zWEhZ)EFlBVdC6obCvr}NE%T1BW!?sW1s2&dZ^NK^?4r%A&PhiuiCm_zxJ+hoFk`Wb zu{fwf!+3S%X2#+*krk1Zk!vH@MXrymirf&nF>(_bhLT|z8Q|>*GK?g{Nn|*g45P>} znhax7kz3L%u1T}Fp0PMqWpR8pi<6sJYy=j!G8VUyVVr6g9{`KWn%V}26(f&Fo?t9) zC&PqfMvhQJM|R2}P63Gja-K)zt;mNA z#J3~wMBa_;jqHoO7ug?qKXM@Q0U1sq!!$CSN(NN3)5$P{4Eba@oeTwJn3;-vlm_v$ z$md)PHS{3{VxbBm0*y1^PhvH6X%mT!K;mzV#KUALQc3&+Bu4(!y~acaTr@FAd1B?5 zy5c&ji?a3IQH~6=lTkex=48fVREo0o-MU#(9HoYCO9{Y=T9}2ad)b67{6iwQb**`q zs4L1&O43zCJu;W`j^jLyax@%m1umnJXfzs&#-oX7b~Gp2JlZ1Kk_=^JSU`p|$xu#) z3NloZVIdh{>lc$@Nh;b};WFA@F_6*DjLW4em*-R)NNU3J#A6xF1(wl)WH>90WpprW zILa4AMX}?+%qnX<4Y&iqs;+pAo*W&`utXhqZZbNC4CiHt<%H;D1xsch$#6d7YAVCB zs!qjglMbk8O^=?g(3mgNc)@X8sZM4^&tx>tj?RgeM9+xMjh05|MdwG$qTui%GF(iC zOUQ638J3aZGBR9FhUH|qf(%!tqUC8C7o}-Di_v(MO5-)vG+x(4Vr^nR$m*%Ehfq6b!1qPjIJWX$_!b&IeM$Y;%b@2YeCh&j2A}NM>i=TZj?d1 zJ_9FrM;~G!-V@y%-4eYwx;45jdSCSZ=mXIQ$$$~88_9qM=^I+esdvR!lraDiTc zSwt+|k)PF_nCRZ3`zVj%I><2vb$~#>ZV*XVE2!_nWPN1}g3|BU`chP%jc zHyQ3B!)7vUA;Z07*h&U8obMyU{i*0b3XCzGE>|~D(=x{Hx-~qY!iY(9>W`uG#;^N498X`V;HM@I2prO-6NU7 z7;6!0Et|zyE7>eQ%FbRrL!Jk8HN;h{V+@BRp}83AETi~%CT@Dg27|>|?^vH$-&ns` z|JZ<7Zfsy|P%MuOPmlrqE};B08J;1-vt)RV49}C{1v0#tiVaD#IKs5s_7qqg#aMhv zW$_ivy%0Z{vADB|#YSN9RK_Aw_hpsEe6ZNy;)vL+*c`^;Y%;u>jFpf9s}wRB*@?}I zEl@ZtlR4Z0^JY5;^TtnV5W_{Wr3!{iWDIv@;N<++<&46r7{xA#T^PG4c5&>I*rl;$ zF|Qt%EcPCQ z@p~1k7`=RpT?cy}g}^dt$&6IOA!HKgWuzxV(E8ShV$AsNpl zNy-e!_~7_3pcNm2ev8x$OsfJxNM;3 z5}z6`WJsP8pB6tgep-Bbd`3J!etNthK9eLHNp_MPBsocPk>n=HLz0&ye6>Fn$6Pe~ z6Q9E!VCRp;OBs>@6-g|1TOpr6CdHeGYy=|DVnm)zQcxxGJP>J`rdz{AI#@ECpTM5g z9hdmU@k<$vmyi@r#+Q*4$&kh?;#bS&F^+K&zz}6rvGv(ftPWK+(>j&KRq>k?7H^bU zOdQ9R>SRqk#aLV$PsZ29*T*-+H^w)`Z;#&*zmudKlA4p$f~1xtwIZoCNo`1i(Q8Li z`&9g{G>co5vBmg(jKvNri=EW5MX7rei;ckI(~QMuNb0Dv`26vz>G*5$os7dBBy~>4 zcahX3Lk{1FzpZfimds&SMig70Ep@BIp_Npo-j9E%VEBQIVUOcDQk{Gr|AAq6F#bjS zQ2fjISMjgo-^9O-e;5Crq+TTTCaDieeM#y^5-j@wl3>{fk~An4|4~^p7XMYW#+gYx z!Z2h@A=sKRX$Z~~CTS%5@uVgWPdtYS5gaBABn?h;m@tCFX4eFkGqEcsaH5I)thR{> zN5Tab6R6;ZCKIUOhGoWL!k-8Mt3-g+(3s3|tV@Jh4Lzd18d~aa#Wquu#;ma-1zC+!m*HEolL4kV3ECeQ{MTh-|eUAD%e%hA56Ymw+)rK$Rx zq%rx{!dWGy#l1Up=rF0GxV)mnqLTTACB+?vl~i^ZUA&~Su(WJpQM68#ec z61fQ!f^j5`Cussn6G@sx(qxjRkTmsR6tP(`%)QYl&<%PxUZAHG-T2x$FP*R## zHovmGthBVaJm2bFP+mN%xV*f$XoCF7lS?Wpr<4>`&Y50OSXxq8GJkfvg7V@5xK+NX zT`4}0eq|{wsHhxTR=BXDxM(0gG`(z5arvT>;>Ggs<%M5~N!p8(3B+hx)p_|=SNjh0 z3yTWM=gur$Slqs_thB5g38j2+8v7t(cUr?A%(sR{3>uM_S5R3{S~i=V+s!;X8XGm8 zPfrwR+OA!TEKdVel$gb6C?@IjWMVc+1uV%d#Y+|x%r8nO+29H#7<0w*lZjH2a5}?^ zaqVX)k!Fd)BB*}fnThh+9xO~?J zl2(y)BS|-tw3?*bNLowMI+8Y!w27oUNJ^1(Hw*SHiPec)6SpPSB-SR9iFJwfi4BR3 ziA{;y6L%!;Or#QbCGJk#lh~ZtlDIdqHL)#mU*i761BnL{4<#N>Jd$`c@mS*V#P-A! zByA>X3rY8qw3Vc7B;7~S{Ukj=(t{*DMAE|~Jwno>Bt1sb<0Ne-2~M6Q2}Sv7l292w zOVV>BJx|gLB)v$|OC-Ha(kmprO44g2q4L{F5-PvfN!nezKtHP#=-K(!olDv+DJ&~0 zZpR*s^4=%3Xio-l6&)rP%&h1zVNThC1t=hl4!mH$X91ve#d2-48;(nbv zHJAU9S614uNAu$OMe1Ap$li7C-n^oag;IXsG5wD*vu2@O^lR6teaD(s>m?WXKVl`kDzQaHD`y#B~`t~ausS-j=QcKaVhc83z#x%t-D z{=3LlbWkGAvh-i0*tzS`46Tl1mo7Eq*tK?s_Ntwqdz2{7`#%!J`lHvq$I&e8+~sKe z@IIZ1U3%7xV5e^CKhwPJdc(Tw;{OsrB6)dD$KZn)H+q5o!L zYn8}eX()#Gi_X#EGR3lOdFkvWn%{qty_a2#H>1D2DJOp0@+b5kDY4a zs>U^48oSn}^(!TIi}S5J8aH+3;b-`V-rml`(@Csme|b{M>{9CzK6&Ce^Fx1el3x)l}2k6y3(qF2kv9Fu#Uy4B9U zBTDqn{a+Kk&Zywj^4IBT^zd4(5dSC9`$vi1`Tvm-&A6S~wMM;v)XLy(I+C5i@X;dJ zS#8Lri(rphd6>;9k);2~%+#(a@(Rj}{bz_N0sASeCdkr*KkBww)OVd_~w4iUaR$p3Zs&_ zy;M_^u1LDqj$tPyhS&Zl6=g>4@t!r>IyJf*N838JAnkEX^g12W*hx<%T>rmk5T`q< z+SMGa(cxh4)hw*loa=sUm#TaFZZ*aov->Dnc*B3$Xw9J8*sDejanyw3t!hHmq9=38 za$Royq%l19@EO+tC?7o$&s!j29B#&vx%}^q_G2i;^e^DSO6j!nttBU$f4YEhgz#5EplIJ@9 z$K8rTC1$thTVMY#Vx~6V)Va9hjf&SWsWmE%qm4MVl8`g-Uo7ezC7O3OdP|&TnOak* zf7hFhozcBGnvX{(;@JB%qP1t@I(JlwO*4ATz+?72C60GB`s8YTy^R_@kN>y5j_NVF zOfs}wiR?X%-UP_BJN!Q!WkqqV-I!w*M_KHVy)b)Gt;HGHOS8|a{o>s0^J>4K>h@%)YAjixt@`YrnWYdsXchH)UgyNX_rKHT$;OFOu2oYQNZ+ zy{Yz#JF~Icv*vf)lfAk2i>=w)YQK0O8<#uPbn-~{qqSdb&wirzi>I@nsr};l>=$ak zcscu(+Anrw@2ve|cQ&?<)b#eP?6+&b*qgnt_KWwk57d6~QTE5RUwoGRdF>a6vcIhT z;+yPmYrps*`^VZZe#!o|_KV-MkJNtgSN7kvUgT(VvTDEJa|En_%h8kcMlwev>CLLv z(?<**GP+=1@r259R6ba$RK0#Is+R637KufbC1PnA;>Qt_WlkU`m=nqg=R`EwRVI=?U`r%F zB7CPuq%TSOilnbe`i89&b0cF1Vk~-5N#)Y< z#caNIVo4=SPH&xGOvZ{kj9J(Bt1%1Y(d>L{$2zXq+*)Zd`}Kr{^X3(lFI5nlP&|7c zn{b;nXkkfd(UeZz^15~GIMe#2yiP4=i1w=WIYV=X9;C%{cg@lIb$?! z*XNv^Gb(2^N#Bw5JxM>T*X8Dn%jwBBM@v5jb8j-($;5%E}S#d~2KIe{fJi z;oJ$u3konpOSpT4kt`s+z6u-lJ!g5vIsh<;b@>l&@fssCJxhjgFp>H<1No zXmJ5E9clx<#z(yBM<$J!R8cVdsOvp$bN}4rfGTs9lleVpNMK#w;3`X%b=}ZmRkkWS z^EH5PSHGF9k}WGgxG}Y>i3KuGj`lGB}eBYMW-r17RxDLB2Q4E zysjHN9$7L*MhY$_PMR@#!l;Fn1u(h;%gYOvuAex0Jn~xp8L%mFWr;3F1ujmR24j0{ z>aII=d_8aR>FG1lY^<9;9{)TYi*xNYXe&}UTsITW>v^vcH8zbOYwlZVI%|4pMrcmf zjMGfelxY@f&e2?~xk7W3<`&JZnl+j`HTP;B);z0uUh|^nWzDOa9hx^aA8EeO{Gj<; zYtUM?K5bAN)<(23Z9>~uo2Q+wJxhCzmb4dYFV|kBy+*rId!6=1?akWN+S{~iwGV3d zYJb-LuKh#%m-e45eU>4sS(Yiwnq|*&X1TMvW{u7on>9XbO4iJ*xmioH&d$0h>$0pH zvsPzq$a*mAv8Xq=KP$poY6UF=3uog?B-#TeuwEK=?F=G zY_cunJLW9PSxU35e5l3ozlnWlLgi9c z4gJd}Czh}_2|l?;zXc|$|e=KFShiOe`xZSQ;&;jCShOyK7ISZn+3s z0yH)lt*6!GS(bA-7ErTy$(-fXOjFfK`Q%mFtCUZY^6!<}tJYSff4)9zTq^6$oEx|s za&Ai8gf-AroGItFoHbQ{Q8OKB&!J{KRv*g?na?8aWNIc*GXuOlx=cT3gWOGN#^qbj zX^dt1HG7-t?5onnX8$_c@2nZ5JCz{m^Q~t#Mv#u%U#c07%}O}LeCt__5svD{Yrfie z%}3)kUunFe0#T-oY6j>&B|uWXb!B4&sAgW(92q!fnZStov$2(dZNjLvPylv8gnUpO zY74O&r+PyJpmES-=rm}CM&n)rod+$4u7z%cHbN=rZfG-fAM^n9F!U(&5p-Ci@$irv z@%Q;G@8&2&{_y-9(o=6U84!lfbiMyxzI%r zJ{P_jS`FO>;qzgnDGq$sgztg2KwBYj7k&VG4LS(@s?kJppw3V?s0ReDBgm&ne`qX( zG>E{z2=Xja0L_HXhL%A{%Lu|6xdvJZT?Zv0_#IgfZG@0tk#`~FMdTCcGYEd;%uY?@ zM+j*YVc|Fo9fAJTXrd0N1%z~pA|IlQpbMc(Aov@Fzft%bMH)rHN)+*mB5k63pf@#| z*k#Zv2>!=zhwg-s7BQqn3~3QVTEyTc_6+nK^aAt}^a_NuiS2~&eK^EI6GM37Q78|Z z3n8v?xQ&0M(Ik+s*j}bdoCGa^kRJ(zFL60^1#}gJ&nJ*JiCdvH5Yi{H9zxg>2wMVS zOFRsHtkGoS`?7;j7YICLkAkK_$b)R8fA&nM2m+JYOQ4G(q)GOr5aNtMBTe>A5V*wf zkR}@(U{pwxjW}oD3nAXw2z&NZ(96)P&<Vz7?S~FPA3`ilpF)3VG&vRsam_(G z*vtKrSc_-3!bZJ!p6+*?(Y^Vgf3_?1$+77)79n@%A zXF-TZYcJ%7kk+lk5c0QmE2s_B4(b4Pg1SJ++tvtIYvfmJaMF4g1TI>Gv(|4zze4|L zG;NF!;@ZXsB_PDF4Zf=lzN<}7Xc&ZWx0wtf&D!8Q+aRuOsvv~5&2s2U=xS&MbThOX zLO!-x3$24TK#xHPLz^#973m;^zb(Su7HQeGBZM%wMcTDRS#FDTZHshjy97E5I!B}F zItD^sbw!$WMVfU*nsq$`Duw1l3!p0?_}}$*2;6kt2Hg)m2t5ov4Lu7z54{Mz48010 zm2L=AHw%;v^@RpP2uC;g*=;sd4pl;nAcU(M!qx3k2!3|E9)i8=28O#KzTNJIHbaj< z&p=4?Ztp?NpKmmp?mUDt(>)ILhVq~ys06wkx)ws(bzcu5|GM7+r67E7_t&Al&^~BC z^cnOc^b7PGbOibn`dg#v5rn`;52SGqq;ZeV5Yo3tFQ^aH51IrmhAx6`fo_FR-g_h= z_}>Hm_dt5~xD&byx(C_IvaHdi90+L%Glh z2z>Oy_w_U2pS_1b!=aJTCwP73HH7lf8+qINW@t5Z z8-#rB4Q6`Z3vGvxhP{!$y;(TEgMNh$Lr0)LHJUy;2;u7^KnAE8E9Q5 z)fb%feGvK#`X2fbLZ0^hTchcxfwCYA6oe3_eo-h6Wkby&q-Vcw5IF1y4*Maz{Se-M z1ED-<2s9Qdg3f}LLCCXy_e1cv-?Pw55V-628nhdF19}SrbN#-C{?Taqi;x3C+VuBA z0SMvgAA=GQ(xw0D5aQE+6@>5akMHgOCWJWk{~1Es_x~M2{Q4t)1GJD1(nArbGlXyt zI0Y(&5Y_>gLsvjxZooAVm>X~%^a8XC+6V224nQA5$mao{LZ3rFLGUM+gWyLl;*cvr zA*eZow8=#t<|3bR7ePxPq*3lU5aN-02?V}!uZM1cZi3c8cSD<@d!cR69_Rz;Bj^(d zc{z}W>=4puU`wbq)D~(Ft%vX(1D}Cjgx-e`-hn?r2=l;SG@3!fA(Vqb)1jFV%EBO& zfkEq_+adTl2!0Ma2*J%D=H@pD>6@1YA+C8Q2ziq?0Ycv7ErbxqytAS6Ac7Fjyh|aZ za~{f79@01uan8E~x(m7o+5&Bbkf(VML61U@Lr+3aL(f7;`@DZNn!)gIFw%7}(sc0E z(0vfXIv8;qVun1BA3`1si9kr3A)TPEP!Fg#)DIc}frTM?5cnN}I1HH#fsG-jK{Fu4 zW5_ZH;U0o;4?(zx+z8za-3qON5QiZM?~v`#3(!l@ThKn}eF)(mg8UkSbR6;}^fmOO zMl)0k86g*hd>e`|4jm35UPDVEE6{7uUT8mb07BS?{-)6k;~)W&AcSd{9|}USA;Vy!hP8t_Kz*V9 zP%bnG8Uu}oCPGNNVPJgNg%G$NhIAW-JRfd=+>jT-_u__R&G6O`(tkLt41IO0A0 zBxp1=4#M{hp8`#TrbFcr*cy&>7`_xjz6?JPA_#m9hkwH_gO)?ctKli=W#}7?W`qUm z0wG^VApJ%l-9{jNM!XAs1bqr2Z$=z~kS`#P? zjF6oX$zG>poP%>5`#6Yj9GkTC_-^cVWy^ykiDt5ns%Zy-RVVd`e2Vu zWNsyMtHv0-RcpeDpaW5uq1Btb#|&mMhk1O=XZStQ>MMRmwpQEN!7g;(YA;8zt5)u; z)m5%@i@&kAR(8-j1+ur+d+T(RMz^iyY+Z{wG(*|iPTTim2s&x6llG&T#B^pdn-7_f8QOn_8QR-rdmXi3#TwS(cSL)4 z)&4JTa2wxU`+s=Mzd;a@4%s7eA#;R|BJ4AwJTgU8r8=)ro90B)l^(=mml1<_7ki7a zw}_Sege(#3(QU*Q{GN!|!EW>#q1On#MqES22;D~9LB7b8q(R0=86&fhot)TbWN}JT z8aX57jC6OAwP->!TF{D4=sq$A*(3WikiiULHea%kMJ#3&d-#n5xQ)nToWN~Fx{XLP zM4BPe43W=*phJk{$lf6}?xRBnGGosja-i!Dy6zxzhqeskBXrc^Vi0tE0e9N55#8y> z0Ce0jp3zKVD(^5Ix6$zfzQ7C}zh((b`GLL2-SG_P`0t&+aL*le-cjc&3OdQ!NzP7k zcFIiw3Q>e&yi6Tr>(m+fI*r8cJ1ycHzTe86jMAC^K=%~wEjK=?r=#s=Frt&u5 zqN^@?>LO#8dpr+A z*J(+6+*-G8$k?qvLy@tYjNRU60gLzs_totOmSeBo*03J$b@NSh({Z=o(Nnk6oaF*$ z>h>2mu;=df)?J3~-s^7m?uUb*haP)0B_40~SjGx;(qkMr&ISGkV&V(;)Q z2zm#&jovAdxwrXx_av4+*h}y2n6bC6dLQ5@cGKH#dY|G^5X8wGmziwjAQ#0bO<7)| zGQO#}8t5sm0gY%vGa~4S+2V8^Crg|xaf65_0UgF2;T-0PGf$j(;(YIM|K)gsx%%j` zPjY1FBR`?jDJozOww7<^BCb=>za%-Z)R-WnK* zZU&BEG>IfJiK)E9bY^1Sf#w~!6tfL9+rX9l#9B6B&VidT=Rk7~bV~y-2EiaR3@U|u zgWhBot1S-K{@`uwW-t436N6nxG7HiB5WNps!76k; zM88AiAMz`|VTK_GIm0UDpbQ=k8l$sbU0!rGLCSkBj)odIvgS6h%M~H>?4lwJAa^u5ofu{9q#dfNBqmP zz(13R3?pk1iCIQ|f}cBbBb)K9j@%vuqZ-i$e{WPLI@6tA*!L)%jIxVSx*v6)$2<*! z(cT!Hk~E~lw=%jARj5x}BIrmoUGQ^9`?;h2+|m6Qz<4GwnW?;un;Pw=M!TuebI{M| zkNBCBJPU#`<{Q%(`Nr7Mm~YsDZ(+=?#HcT6WiE{*~aO1+$k<`mFu|4asLFt z_!NA{4=iUDYgmsRj^BcxHQvt}zlY!OGshpsJmXK`XOI7r^LS&tH^zHoyd93W!}0fd zh}p-xholhRO-fB#GLV^Uejz#nBJFCk zC}QYFPkPgr{tP6Zp^U)ZC)oRhBqlKxH#EV!6TCaYyA!-S!MhW@JHfjX{(JXpmavp% ztl%fsvH^E7VJq9&#jot+AV+W~6aL^dXSu*-{^AC=xyu6{@h{JVU}7>-l7@6-Bn#Qe zMP3Ts(68rk0cm~Z$Nckr$|c+X7l`Lp-RQ-PQ9ci#JnHLSx7)BX8$ zb4@qb^t#k%C0qD~?d%GI_bcJg-?yXp&G~*q+}it_*~&I{2EmMq*yRiz&G55kypBJg zv7dt+=2#HS)X&T=bfX8c__LX3InPC|1i>tSXO@0u4L~2W;`#4CzmJY)xye~>@&kYV z!6@|gK_W@q3xe4pl9Q4&_FgzZ#}7d;CkI8a|2ZYl>m2)^qsKYR(Z`(CK`>W` zbImo^Tyq=XPUq@z?oM{|D{kS#XzcaFe)LD~4=-^Sxj&Tq!^c4|uQx*&%5dbLcNO2- zyodbvcb*2pN5h!NWTx^?5X}D{2*EMFFJ{RF1p4IZU@2FQ<%+M=AqBUrSZ;U-7T(3 zZDd&Noy9xZ&E6pR#ty&fOc%Q0t#ADNZyxZF$2<*!C3;z+mnC{xqL(Fl`8F$su)}YQ zQi9L1!*6{9-~Na@|IVD>dFQ(}v?G#(oZ&3zxfBFTo8ZrvM$myM4&(1E^>>!q<5G9^ zeOLPP7K0eVqagSp6=_I|ef=<$2~0vqKiJm~&w^lCI{f*vOqgMrKVN2^Ws7lx%f3hU zWwI|@jlC_iw`H68g&o+#GWnOuwoJBVvMrNsnY}E#iM=eli*Iw;KSA(gcHG2|cKYKm z?C8g>Tn>WeaxX7VeVWmdFv96X4`S)Vo0xmKxtGV2fS6(MGIOZ_X>Ml zVb3e%Um@>`!PwIZJ6SQDQMjoUp`$GBb9IyD@XDXYdOZB=zirT zu5btUy3)O_d>#a=eAlZ|V1`v@Se1j^~U9{pfksQI2yGceCmo7m<6_wIKK@AUP>X%?qT*jsBE{ zY~)1#pYl?Tb_~axKW#z}tKI%;`&r$X9=Mm)`d_X8)$*?%!(`-Nt?SkAVusc3W%Z|g z!9u>q9IL-$H~L;J`)b)&%f8yZto{o-T746puQ9_Kx!1_KM#pP(yhg`sN>GY2l%p0+ zh^7nrUDJy=`Y`}~uaS3++g>x0_i@i_W-}LEulbnIka^7l7O@z)*X%^bwdwHY+AtDu zKWo=w7i%BzJP6h$L+|TSlbJl^NB(v4uX7{oic^xx=zd*IYV#`f=}cdAy-wHbytPj5 zb)!jSJUU+IR@TY8PS$nbpx<>rvVxyjgY4^$px<>jxXoSUUH6E8k$b(|>*Zdbh64PL zA{0aC>)pZnvXrL+FH;5i*SA5(>*wIj^{0YhgZtZH#tjYW!8oSjMmFew!%XJ0kgt({ zgZvx(zTB{kjcn!@cCedYxr*!?p71OPHik&W3)s)b4Cs4fA>`dy5j}5|b7L*)P>U^WFH_E#4TbA+z%UOl*bfbINxPhOMf8%MM z2EosT@#fFHcn357yq{Y^uqiz`@I7vF>zfLo^Gz>N2|aJB&MVZWF3o9$88)>gf)1Et zQxbA-l6#Zfn`SYa4{@`b^3&Ljm>UjvyL}s zBn#QeMP6jy>}EF0x>?rEHPQEGeQ(zH<_0vP39@f)No)Ec=Vm=_K8W3JvA->^VmDhx zBlDI8=zfdrTfSu_8`1HWt!&4wZ!yCbGi*7|NzQPNi(C$ZttpUwYfkdut*v&mwJ18@ zS_-$aRsOB=Zk2Vbp110GYkMN;L^QH*9gdE-&fo*)BJb8u_#C;n%Dq+YtvcVT>#e%p zx`SQp;WzZX^$UVbs-FV})#TUts|ftRU@{S^-q|MeHoMvOBP-DLHeGL%b(@^q{@^s{(ebt`{Ds`x zQ<0B?=y-cEWZnKE<&b&1%-dz&UIRC=Jq%g5w?*IEI}k+-U6FlzFM2Z(Ik)R^yDoNQ zq6&7jV<>ZwdB+AeA^VPP=zGU8biCsfe+~u;{|(?lZtd?ATwEU zH+y8aq3b=m-s7hCbVTQSx}fVl!_fC0eeW5A+4oFfGEA!^Z)F?jR0ZRla28`@_-`&tl(Ti>Vu zefr-g|Gp&NLH>QZ-se{KnPJ}?7O;qK_zrXI`;mR%eub^#VAQ>s`EN}-XBE_-ROy)_xGhg1BplP`{ms~of*txHg0>r&i8+U zo7n#)3z2{SFPsm81F7-m0bLx>!vQlMScRP&_?ss@3xb0olB4&7Ineb%T^}q+VTw|m zN>srN2VbEMuVRjax;`lPLAejcGn|pw&%s3GKd9@2vL2N4;MXic#|M98B|ov9L;S@J zZgZChJmO!T2f-nIA4-XvIpn?%>G_b1hxB~N%!kV04h~hMGS#R-E#y8V_aV6t$#_Vn zLtD5M1c!BS*xx{VzK3Ijh)1SlWkJ-^N z_jGI}yV;BV9CJs$yZ*ZHtJm3-k@;nGm$$Tm$vYwLlR3Y5*siL@pQ>7_GIVw;I`A>zR z-&3>j=BX1wa9Rha&3M{wPIqMt?&P%YPwW1)?oYe5(_bL}X+58IC#TJD`dikpo}bx* zIZp530(X%8wCty4KNBK3_H!l;`aWZZGbJg@OUQag&u3~-i#oKR1N|9DJVVj*89kp# zB#B8(ayB)Y z$wp3cqxZ8fqU*D|KKn9Nsm|*(rWq~K|JiWt;Or>IF#+$KmHDi$&(6Sp&VI=c$az-I zv+LM|j?e1&><*4{9=Xpx;aL!z)A6|!$a*d<8OV&x=VU%thVoQE*XP{DIenk2iMu{m zm-;lIA>EMkoV}mh$@L&OpA|EnZ_8lbXC5E(8DF69^DFoXH*#Lb=Qm=8^IO@^AS6K(D8+KM9>QvFHGTW ze2*7&eBlG;@)4i#ISW{XtQXw#h0Vx%LEjh5e!(4F*vmc+av1q9+zo<@I=QHmi{89A z5*=LJ&cz_OWFMCb<4!J>L-&^|@d|pr)QG0EpfzvMnXdF8mOk`jDs!06r+DX*%$MBw zCAWIXjbGZpZsfcq=cOZ@K*yKPaF*LV4T8&ZU(SJ!FXy8mvR*DmNo2k(^JSSYzfNOh zy{zlYZu+vmFSnsRk#r)O7)BxIWjnuoE(orqqAX^-;#UkAHX+1XpuXlv0$TJTGG}SF2MKcXCzst8VwI%vZb9o4&|& zbudF1#t8I%bq?S1JwLLN)vRM9oB4$u=>4jWubTJj1uk&~nXk%xRpzVi<>~_-@;C_o z%7u)7bzmgEp}*YDUw;L`wHGkYHQirpiN3G3p&f4IS}bwMf9*{MFpx2fV*-A` zP7vJE@hvxSD;*iggv_^Oz9sXmycD1ig{gy#w-WghyS;TI2ySPg0_M5xR&ML=_E6mT z?NLnRJ!bF$bCLhH{I@^lTfXNv_%}xPIP?|E7N2hnqaJLHe zc^xy{ZAMF4V~)GSk^8RPcjdl2mA841_mTguechG)?sDY3yAJnqcPrc2$!^@u-TyM` z_U^MFxaXel`5y22HtwY*1DVnJy`1Dh)_WCs8Cmb?`<~hF)#g=XzbE^>Ml_)(a^BP9 zy*=3L{T$fQ{Rk46h3@ameqZ+c3t7rfxQ+W8*o6G|<-f1n`@1-b8ScCN`)4?Z8+u@l z2N{w3f!q(|eo&DAQIz6TM)n7CJZOlXAL#i(810blK}VwK%P`(W#}DLvFo$`_{Xp&q zazD`d19LubFAp~J3)|861ARZ(%YF`Wm}AKQ;13=K!9Tfp1#kZ2yZdJmI{W9ZAb9u! zC3p#U@=*5=<$w4pO=yn%59NOtPFuRtgIN0TCIff}*&q5IAAW(pAAZAke9toU{csEW zkoBRg4^N=yhiB3A!%N%`f=9`a{ZU>Dpyx+=ekAXs(v(H+M{+-s`%zO`& zk0R+rG+pS1{Ex=*Ior4#1dr2E5i>p>%uIe@4eR-t&FK8`A>7GhJwJ9QkL7s>EpZdi zdJ;<eGm(wBQZe(4I(Q>BCS)F_!U6W-9OS9-pv;O>AX5 zyZDuT9OMYU^9QH7%L5+rn16X5ghI(kNor&dr6(h0kTdiq(^?t8921Z~nf%G#=0oQ5DPORVMf}16j&hunoaH>1xWYfko?O=CawgA&{}<26 zbCHMq6r>zAX@!oHwEr8!b| zM(&hyr<6Noe+Dv`A;_On*C}O9DQC)$`3xPWT*Nng%Q|*)ia*hDN*$-X%5`q>H~0B3 z^OGQyO4d}erpkf7Q|UXEzEc&VFhwarDdbPph@MQvo2mArgVbhBU4sbX8BHQdOyoW0 z@)4i#IScrTuUW}z%#eB`oAC{#Hb?3k$emj5)N-eO%JU$UCK)M^KaH-_$egAu6{$=$ zYEg%JyoSEh=sS&W(k| z*uoi}1)&#;(12Ln+zUVATX^Ai5K8M#(#o7x-)Z%owjd>`fZIr06@8|aKdt;}o6(Xm z+R&azh9Gy^$++#b-bp)?*?fq;)5@M!-n1)Ng9T)61WJB^%knF62+Ymwo6p{b|l}fy z^qj#A8JeTx3_8vrYlcol(}ivfWDK*IgYPke?=iz?e2II`uo$WHnNb%R^^nnw8E*%nOm>o~ELEt^E7V5snOdRi zOuEh#K}VwKOketAhD`Ac#r!ndHvoRxn%%#wA=JHgeGS#Sw%$Z+B*37bI?ts2C>pQc)Gk2#Ky^%fh zn+)I`Ml?b8tUZXMA2MduZ&v+g9lMaS9SVi0D?K8^`YW*YA@o$ru6`_F7)8@rJ^`#uiv zC+Cqj`+XiFXN~|J=g@Hu9p|vW97U9Idq&u$2pqPg4Tr7jy}kmV*u_s$6yi| zj@fg#gB-HwNMa&iB4-X==1fCbbdYlhA7CFjWzKnmQ^=n49J_6^$>qLt#n2zwa}6dDIde_nZQf@lvzf~xRng=UnbNcZlTZJGa?$rz0bo$wm(3&s`b)=GJ3wx0-tc z_Ls+w@|56px}y6$y3g|#gBZyK+(@3Oyu*8#A&(jIe1`t>e8pnEWhr}*J&(Tg=sVAU zZ(Tv>dE9xPTRaOwdF9V5Z(dpRx|O_nD9HaPN^xY*TMxI9SI>Dn(HVL3_8=Cy^U9r9 z?z}qBtLwbF&igLYnSoo#tM9z?n9rwtj{JEyaV7}mOO7}5HNg(^nK9pw9N;EyC7)Z# z=T`FRKfliNXCXWC=a)Z!e$0^H4Ef7ZftRUD4SWarBal6R9Q|BvjzPY-oa7M<1Pw6!Ce$_7e(}2BsFQtKxVQbZxK0*$XUca z6sd%)MXFH~a~G*YJ!CKPI$hCik%f4($h9C;)ci%O(1t;{r=lM+AH5g-9K99QanV)i zxad0ENKrEs-OO(s;4r!`dV-TY3PQzFk&cXbtC-xy+n z$Xrt9k}{VpkDDmj5Lrt$Mc*Y`@dj?8WIH11i2Nmoqu-Jn@Mfvx_|8k2u~c8C@iog> zf$mGKVGDcs4f#vSU+M_QIL;-ma-CcJ&AlL0Itv9UN(sDGTJF*nco{ca+O3p!E2ZTv zEoOUqk&2}_Z?wA`iTF1;2vQTiZC&u*(;ysEEl+n{ZzimZS-9wgndYqZ4{}$L+rQf&RAmZp^DgpMk++J@tIS2`Rm@-IQ{=Dm zCAz3`CJ0s4XH{=jZ9;!$@*@Y3yXrqY#=TUPzgik}T`fDg&~vo{6rwDCXH~026{=H{ z_PCE~z3Gd0s>xhU*VTqG0=H6a4suqLv)UKv*uT3VRP9@qvVq;mUCnJ&yT}#XMm1Th z-QgZGSChG#%+<4!16ixUfo`+yUXg2f=~@J)~H2C zhLT7UlbC|OYkb5f=(xrLcMZ8~$XzoTDM`%> zxapd**Oa+tMXFK*nQGSKH5$^G_H;+LHAgaraZF$`({Lv>-)9zc&~Z)k)?CJNRYP~`o zh z?xeQdwNs(j+Ud!JthL=qZ9UhPxwg!;Wv;E~+Ip@nYwg<9r9Q9I2(#C2PD|vkt%urg z^8?zor_!!LUmJ+ zg`DKUJ9TBQTZ|Hvq8c@kwXU3XTk!^Nq^^$Z>bS0s>&jhsIPWoo572R4S?hkn=g3@F z=DIT1{f;fThq|)X-G#pE{>A|gafIJFf&6tJ1)*2<`)Vz``Kp_I^=r)d>a`$LFD)gh zz{}{qUUllxlosf?o*SvxjtF`XOCR3kEe0_iw^8p47UG?HGS{=0dOxxPcT#UZa@Lcx z-XHvlj_c{T-ev5szI&-Jcl~@6M91}YTwm7uFH(*Q$Xs9M`ps|;^;@Is`fbp6{SN56 zzS-+{p&Rno*F$~%*58IVUrR?t+A^4#$o<+H*7Gx)+07x2avUAM=0;vS%Xw~d7c;!3 z``7;ESrBSqjs|X{f!qz`ZXkC9JvVSC4cvHxy2#%k3|Sk<*`O!A(Q$(T3?iN+-sdY8 zqO4OX(6b!9P%vNvo^Bwf*Q!&v$te?$2j4n(&N6EQ=>NlfJ(d;<;5 z(QplNH5IX*&3xJJB6uA4Qe58qx!s# z+>PXJBzGg7H!^1djjmg|m6rC?at!jel(pq7^z7fU5Ni1epQGoNKk_p=ZmHvzI&OK2KRJ(% zTVCZlxA;2&`6$T$C_-K2Y&DJr=%JMkTAQ(TMeL(> zKZY=jk&H&?t*4{s*0cE#`CH5H-(wJJy_99FK=-ZJa1^;)U*Q`6y>pibxRcg)6ZQhK zhq;lkT*fkMmF;cJJ`ihj&qVToZ~_eY8OJ!?XscccHU_xbGyP6r8xR+R}ER) z$=R+sx^35nc0|$t5uy8tD%7D7@<-@7LeCLqhzKK^E_A0C z=7?}N5mT6r>=Cj@$R6<(i&=vGM6AaQ5x;VP!^j$;=ZMps#Wx!9H_wAmWOj1l_9F}6 z_eP|iBTG=4vb;nkm6k7u!=Rv-eDs<&~=AH97WF^m0+fFU;W~Z5$zmwnno&F6%QTeD&JsP0*s3zzwO2<*rxQ{6J5hZ_A zZ-y|8k?1{Y97(v5sHH4t72b)GIchUo*@hd5awAc)M#&jH&{<5`?1Vj&>{2 zZX)_6+(finj+Qn073v^!w9L^mN9#LU&(V60mNmL3vGn0h1~8C#5|BT7Hu{Y|jyF3O z;&sf}c`}Rmg}u0u&bse>gwtH+FLd1bHg~xngkqAB689IAj*Mic9De`B)TKV&iIF+R zeaE!Iw;1D=WBMUyjGQq;8HJ8xbR3g}{l&PK7`bCsvko1{=r~5!m>uj!<`|h{WRAIl zdx()WM%OX!IY!?x|Df*}v&TFOLR|vn@1ln;`t8ycZ+7{b-}pNSbx zdhVv@ZW+i=X=Lx_Ho7&S5qj<>Z@1QjBX>8syUE?{Ee10LdArHmP3PUlGM))cW-9V` zTg*CZrP-%H=UCNc#b_i`h>+(@rke9i(E@eSYcJ-_0+?RA>7{P&K`z3ipeO>Xl%2*tW* z|89j)temmA$cy`q)p2YwN+5S^ecICj9mnc8R@T^_^hV}bnPX*+jmJI2zJsi>@1yV7 z*?fpQi2az)_yYN3H>2O)Dez|RrubHRo3ZzD4swf!xbfb)_m8oM;$9#tInZ&O8;L8( z|0qWVUZyHFc!dah5Jx|}6DM<=y~GX2t;V^NxVgv~CuiK3e2tFdbR73R_7~?~;^dAy z&n0vmr{g$Tps58KKkxcgyOh^J}*+1@-#!vK5n+p4;SaI5{?Nk7^96-B@Os!$!>_Is83yiOz9(T$;uU^Iy&F$r1wxs!g=k-6V& zmar7__WO|){KQ&h?x**D?xo*W~gNZ{7_;{WFt?{OG%X zVP52As#1em)TJJ;(VB3~&_9w+L}QNrdhRcGf4Te1-G46ga4-FJ-e3Oy%aFCdoc*`6 zi{IGKA&#K${`wxE+W~HQKzcIarU&G}oeaoFL1Z3K3|R-rI-m~v9-!|5`X11jrZlG& zVaPvV0PnFJZw`1Agx=D@TV{N#D~Wuw$aF_rL?VgMmjm&L5oOaS$3L=OEwFpw5hEF=iZeJqQg> zM=2^&nQGKP--Dac5*-h2gZzW#AKa7P^rb%o8O;00J@`w$!aIZA$lztz%ixvhd9dt* zWgRT%U>y(E@!$(w;wsmWJ3ck~jn}V#cSk7R?Z?X+UxxC?94~Xc%<=k;*K@p{<7JI^ z&+!p-MAz|M=!Wd^vBWV6Ipgg-UKc|$<2xDBfnnIi5SfQ;#ElG*eaLq9@jE&ma+4l65`c2SpLOcmfWF}v; z1pOxHH(>=ov6c;NVk`0{$eAE#g5Ti@ZaG2LgvtV7F>xqts$v@1E411Fij3$vJbU$ngU$LCktYaf`4|C(gcCs6H zGVH&%-Nmq*+(FJ^4|&4VAT&HZd2koQ-NkTsG2C4YcNfFm{&2rThU<8ELz>W>F33Av z-r@2Nmv?wS{4NWZxtU*(cjRvNBKJtSN6J0&IJzFG>ydYncci={AEWP)?s`;+6r@7_ zQN?LMEZ!Wol*2p>LZfq0m2f)Y&PR7e|D$z2dI<85*7ayzk2b^TvAn}{W-=RdjQ)t# zxRKGakCuJ3?4yrxj1$<=X!kPO45RfsCLlSoj?wd&3}hxNg(;8w7}F5<}nQ$wK1u;WnF-r0xWidx$JLFE3J5lb$p7f><{m^xy?1^$D zzKfm{^_-~Z#7~ed@kwdia<8?m%eP%I-d3?;Le9QOz z$V%MK__er|@fWztb^d!t=J7fo{|I-Jlonkl$(kf*QW1)y<0Ks?y+lRiPHI6{dJv0_ zlVnYLi^0g8By*C?Nn`ndxyYI{AAKi%&H}#TYnJdG@+bX@ekWwYn-kpS1ot<=j1x9; zipN1{VshO1MBPtJM|KJz|3p1c)bm6$Omr&~D^rb{)W#eW>(iOO$Uaf_iLy_0D-%bP zi2Y2Q!7OB+DDT9@e9JPHvkF~L^gCwaVe~xlI(nY?H}`pno+myFLX$$IAT{n{lDw1T zoh0uhc_)>k4CSf7%Tz)BNo^R!9M+(V$$FS<#>ow_lgZk7wj$Xo5=6MKn9~`ek9|V#AK#06&dpGC+~jpZa@D3(=q?NyU#B|&HNJV zA^#j|=U4C=t9Unxll?dl^GpuqFots^awc*nawc*nawexEXCh}JXX4vT#-PWs#@Hln6&qr+HQ@-FUHuD`n@H1wX{D!?H+t?n( zg&4P9=!O<1`57`!odu|{TGHYf}=T>6F7-eIE^#7gt5q4kagxz z{O-)-F{7DgRKF(&VV?EguJ?BRA5mP?Q?U>3x#*sYvK6-=Ptolae~RK+y{zU<*045; zpK7JTbG(3W@aY^4%x3|OQ9Rp>XWzkH+{67*JjV^rnZV^-!K5gjYqxVxM6YvYn=4y` zei{a`H)hjdHVs?Rcf((7!))iR;}br^PUhLk{BB;sUCm#K{-1f8W?EQEdlWAyvWO-Y z0!Mr*R(-Fr9~^ zxb$IXYKByeHeP~&~t~LJM`S4=Z?>D;~hVt z-;Q6Scv%mx^9FCB?`O^U*_1#TH`1x+PCa+(xl_-bdhWUvv+kOKe!Cuv;&d!mqTh59 zdQQzfy#>FY-j3f-AHx4hy_mavpIy3s@WJXKb*3Vo;gPCwv7K4K%A z*}}KDx759*f8yp+H<#^%xn%w5&tTkWwh#MZ=b0I1ZaN#mC{E@SPUS)_!hW(b*iR;N zCUZ8KX~>+(oZZHBWX@#H9-)ZLnatU279(>ebJj`)nKPL)-)8n2GG{Vpt9c)pGnumu ze1puH%$b|aen;j^=FA-gcMxO_G6%O11|f5hIqb_}$Q)!2M{p7{2bsfYEMLUKG=Kr0QTho^xr*%;i%bt z49B5%_h`;R&FYn?SG@r>s?&KK`>Wbt)vZ?BScZDlfE`v}W(D?FwZEzvR@d?l@8KqE zzOkA*HT~D_Mb9;F*XGcO`PaN(Gpm|6Yi^=erI(jbqvq|Jw`*^+jty+YOlx2B7u(n# z#XT`Q(wBbh!fx!rKn7tZJwvgJ9<%A`q=uS3%Tcp;B&T6Ny=Ngq?@DCrm96&!Hbnpa U*>Q*eehzv5zn}mA9lvpF diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/WorkspaceSettings.xcsettings b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..bbfef02 --- /dev/null +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,14 @@ + + + + + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default + ShowSharedSchemesAutomaticallyEnabled + + + diff --git a/Nextcloud Cookbook iOS Client/Data/DataStore.swift b/Nextcloud Cookbook iOS Client/Data/DataStore.swift index 26472cb..4ef9bd0 100644 --- a/Nextcloud Cookbook iOS Client/Data/DataStore.swift +++ b/Nextcloud Cookbook iOS Client/Data/DataStore.swift @@ -89,26 +89,5 @@ class DataStore { } } -// SimilarityIndex loading and saving -import SimilaritySearchKit -extension DataStore { - func loadIndex() async -> [IndexItem]? { - do { - let indexItems = try await SimilarityIndex().loadIndex(fromDirectory: Self.fileURL(appending: "similarity_index")) - return indexItems - } catch { - print("Unable to load SimilarityIndex") - return nil - } - } - - func saveIndex(_ index: SimilarityIndex) { - do { - try index.saveIndex(toDirectory: Self.fileURL(appending: "similarity_index")) - } catch { - print("Unable to save SimilarityIndex") - } - } -} diff --git a/Nextcloud Cookbook iOS Client/Data/ObservableRecipeDetail.swift b/Nextcloud Cookbook iOS Client/Data/ObservableRecipeDetail.swift index 64bae72..18cc166 100644 --- a/Nextcloud Cookbook iOS Client/Data/ObservableRecipeDetail.swift +++ b/Nextcloud Cookbook iOS Client/Data/ObservableRecipeDetail.swift @@ -20,9 +20,9 @@ class ObservableRecipeDetail: ObservableObject { @Published var url: String @Published var recipeYield: Int @Published var recipeCategory: String - @Published var tool: [ReorderableItem] - @Published var recipeIngredient: [ReorderableItem] - @Published var recipeInstructions: [ReorderableItem] + @Published var tool: [String] + @Published var recipeIngredient: [String] + @Published var recipeInstructions: [String] @Published var nutrition: [String:String] init() { @@ -55,9 +55,9 @@ class ObservableRecipeDetail: ObservableObject { url = recipeDetail.url recipeYield = recipeDetail.recipeYield recipeCategory = recipeDetail.recipeCategory - tool = ReorderableItem.list(items: recipeDetail.tool) - recipeIngredient = ReorderableItem.list(items: recipeDetail.recipeIngredient) - recipeInstructions = ReorderableItem.list(items: recipeDetail.recipeInstructions) + tool = recipeDetail.tool + recipeIngredient = recipeDetail.recipeIngredient + recipeInstructions = recipeDetail.recipeInstructions nutrition = recipeDetail.nutrition } @@ -76,9 +76,9 @@ class ObservableRecipeDetail: ObservableObject { url: self.url, recipeYield: self.recipeYield, recipeCategory: self.recipeCategory, - tool: ReorderableItem.items(self.tool), - recipeIngredient: ReorderableItem.items(self.recipeIngredient), - recipeInstructions: ReorderableItem.items(self.recipeInstructions), + tool: self.tool, + recipeIngredient: self.recipeIngredient, + recipeInstructions: self.recipeInstructions, nutrition: self.nutrition ) } diff --git a/Nextcloud Cookbook iOS Client/Extensions/ColorExtension.swift b/Nextcloud Cookbook iOS Client/Extensions/ColorExtension.swift index 7f55d8d..66136e6 100644 --- a/Nextcloud Cookbook iOS Client/Extensions/ColorExtension.swift +++ b/Nextcloud Cookbook iOS Client/Extensions/ColorExtension.swift @@ -12,6 +12,9 @@ extension Color { public static var nextcloudBlue: Color { return Color("ncblue") } + public static var nextcloudDarkBlue: Color { + return Color("ncdarkblue") + } public static var backgroundHighlight: Color { return Color("backgroundHighlight") } diff --git a/Nextcloud Cookbook iOS Client/Localizable.xcstrings b/Nextcloud Cookbook iOS Client/Localizable.xcstrings index b7e583f..dbcc04b 100644 --- a/Nextcloud Cookbook iOS Client/Localizable.xcstrings +++ b/Nextcloud Cookbook iOS Client/Localizable.xcstrings @@ -230,6 +230,7 @@ }, "%lld." : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -407,6 +408,7 @@ } }, "Add" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -427,6 +429,9 @@ } } } + }, + "Add cooking steps for fellow chefs to follow." : { + }, "Add groceries to this list by either using the button next to an ingredient list in a recipe, or by swiping right on individual ingredients of a recipe." : { "localizations" : { @@ -634,6 +639,7 @@ } }, "Category: %@" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -816,6 +822,7 @@ } }, "Cooking duration:" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1056,9 +1063,6 @@ } } } - }, - "Disable deletion" : { - }, "Done" : { "localizations" : { @@ -1180,9 +1184,6 @@ } } } - }, - "Enable deletion" : { - }, "Error" : { "localizations" : { @@ -1525,6 +1526,7 @@ } }, "Import recipe from a website" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1755,6 +1757,9 @@ } } } + }, + "List your tools here. 🍴" : { + }, "Log out" : { "localizations" : { @@ -1982,6 +1987,7 @@ } }, "New recipe" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -2359,6 +2365,7 @@ } }, "Preparation duration:" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -2564,9 +2571,6 @@ } } } - }, - "Select Item" : { - }, "Select Keywords" : { @@ -2600,6 +2604,7 @@ }, "Servings:" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -2733,6 +2738,9 @@ }, "Sodium content" : { "comment" : "Sodium content" + }, + "Start by adding your first ingredient! 🥬" : { + }, "Store recipe images locally" : { "localizations" : { @@ -3026,6 +3034,7 @@ } }, "Title" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -3071,11 +3080,9 @@ } } } - }, - "Total" : { - }, "Total duration:" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -3236,6 +3243,7 @@ "comment" : "Unsaturated fat content" }, "Upload" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { diff --git a/Nextcloud Cookbook iOS Client/Util/DurationComponents.swift b/Nextcloud Cookbook iOS Client/Util/DurationComponents.swift index 3eb2fc5..b4416ba 100644 --- a/Nextcloud Cookbook iOS Client/Util/DurationComponents.swift +++ b/Nextcloud Cookbook iOS Client/Util/DurationComponents.swift @@ -137,4 +137,10 @@ class DurationComponents: ObservableObject { } } + static func + (lhs: DurationComponents, rhs: DurationComponents) -> DurationComponents { + let totalSeconds = lhs.toSeconds() + rhs.toSeconds() + let result = DurationComponents() + result.fromSeconds(Int(totalSeconds)) + return result + } } diff --git a/Nextcloud Cookbook iOS Client/Views/MainView.swift b/Nextcloud Cookbook iOS Client/Views/MainView.swift index 2c35775..81ad244 100644 --- a/Nextcloud Cookbook iOS Client/Views/MainView.swift +++ b/Nextcloud Cookbook iOS Client/Views/MainView.swift @@ -6,7 +6,6 @@ // import SwiftUI -import SimilaritySearchKit struct MainView: View { @StateObject var appState = AppState() diff --git a/Nextcloud Cookbook iOS Client/Views/RecipeEditing/CategoryPickerViewOld.swift b/Nextcloud Cookbook iOS Client/Views/RecipeEditing/CategoryPickerViewOld.swift index 27bc070..2e2253d 100644 --- a/Nextcloud Cookbook iOS Client/Views/RecipeEditing/CategoryPickerViewOld.swift +++ b/Nextcloud Cookbook iOS Client/Views/RecipeEditing/CategoryPickerViewOld.swift @@ -9,7 +9,7 @@ import Foundation import SwiftUI - +/* struct CategoryPickerViewOld: View { @State var title: String @State var searchSuggestions: [String] @@ -61,3 +61,4 @@ struct CategoryPickerViewOld: View { } } +*/ diff --git a/Nextcloud Cookbook iOS Client/Views/RecipeEditing/RecipeEditView.swift b/Nextcloud Cookbook iOS Client/Views/RecipeEditing/RecipeEditView.swift index 8698e76..92a090a 100644 --- a/Nextcloud Cookbook iOS Client/Views/RecipeEditing/RecipeEditView.swift +++ b/Nextcloud Cookbook iOS Client/Views/RecipeEditing/RecipeEditView.swift @@ -10,7 +10,7 @@ import SwiftUI import PhotosUI - +/* struct RecipeEditView: View { @ObservedObject var viewModel: RecipeEditViewModel @Binding var isPresented: Bool @@ -279,4 +279,4 @@ fileprivate struct DurationPicker: View { - +*/ diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeView.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeView.swift index 532b550..6fd44e4 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeView.swift @@ -34,6 +34,16 @@ struct RecipeView: View { .scaledToFill() .frame(maxHeight: imageHeight + 200) .clipped() + } else { + Rectangle() + .frame(height: 400) + .foregroundStyle( + LinearGradient( + gradient: Gradient(colors: [.white, .nextcloudBlue]), + startPoint: .top, + endPoint: .bottom + ) + ) } } @@ -41,6 +51,11 @@ struct RecipeView: View { if viewModel.editMode { RecipeImportSection(viewModel: viewModel, importRecipe: importRecipe) } + + if viewModel.editMode { + RecipeMetadataSection(viewModel: viewModel) + } + HStack { EditableText(text: $viewModel.observableRecipeDetail.name, editMode: $viewModel.editMode, titleKey: "Recipe Name") .font(.title) @@ -66,10 +81,6 @@ struct RecipeView: View { Divider() - if viewModel.editMode { - RecipeMetadataSection(viewModel: viewModel) - } - LazyVGrid(columns: [GridItem(.adaptive(minimum: 400), alignment: .top)]) { if(!viewModel.observableRecipeDetail.recipeIngredient.isEmpty || viewModel.editMode) { RecipeIngredientSection(viewModel: viewModel) @@ -83,13 +94,12 @@ struct RecipeView: View { RecipeNutritionSection(viewModel: viewModel) } - Divider() - - LazyVGrid(columns: [GridItem(.adaptive(minimum: 400), alignment: .top)]) { - if !viewModel.editMode { + if !viewModel.editMode { + Divider() + LazyVGrid(columns: [GridItem(.adaptive(minimum: 400), alignment: .top)]) { RecipeKeywordSection(viewModel: viewModel) + MoreInformationSection(viewModel: viewModel) } - MoreInformationSection(viewModel: viewModel) } } .padding(.horizontal, 5) @@ -99,6 +109,7 @@ struct RecipeView: View { .coordinateSpace(name: CoordinateSpaces.scrollView) .ignoresSafeArea(.container, edges: .top) .navigationBarTitleDisplayMode(.inline) + //.toolbarTitleDisplayMode(.inline) .navigationTitle(viewModel.showTitle ? viewModel.recipe.name : "") .toolbar { if viewModel.editMode { @@ -112,7 +123,6 @@ struct RecipeView: View { // Upload Button ToolbarItem(placement: .topBarTrailing) { Button { - // TODO: POST edited recipe Task { if viewModel.newRecipe { if let res = await uploadNewRecipe() { @@ -191,6 +201,7 @@ struct RecipeView: View { } label: { Image(systemName: "ellipsis.circle") } + } } } @@ -199,6 +210,36 @@ struct RecipeView: View { recipeImage: viewModel.recipeImage, presentShareSheet: $viewModel.presentShareSheet) } + .sheet(isPresented: $viewModel.presentInstructionEditView) { + EditableListView( + isPresented: $viewModel.presentInstructionEditView, + items: $viewModel.observableRecipeDetail.recipeInstructions, + title: "Instructions", + emptyListText: "Add cooking steps for fellow chefs to follow.", + titleKey: "Instruction", + lineLimit: 0...10, + axis: .vertical) + } + .sheet(isPresented: $viewModel.presentIngredientEditView) { + EditableListView( + isPresented: $viewModel.presentIngredientEditView, + items: $viewModel.observableRecipeDetail.recipeIngredient, + title: "Ingredients", + emptyListText: "Start by adding your first ingredient! 🥬", + titleKey: "Ingredient", + lineLimit: 0...1, + axis: .horizontal) + } + .sheet(isPresented: $viewModel.presentToolEditView) { + EditableListView( + isPresented: $viewModel.presentToolEditView, + items: $viewModel.observableRecipeDetail.tool, + title: "Tools", + emptyListText: "List your tools here. 🍴", + titleKey: "Tool", + lineLimit: 0...1, + axis: .horizontal) + } .task { // Load recipe detail @@ -282,10 +323,15 @@ struct RecipeView: View { @Published var recipeDetail: RecipeDetail = RecipeDetail.error @Published var recipeImage: UIImage? = nil @Published var editMode: Bool = false - @Published var presentShareSheet: Bool = false @Published var showTitle: Bool = false @Published var isDownloaded: Bool? = nil @Published var importUrl: String = "" + + @Published var presentShareSheet: Bool = false + @Published var presentInstructionEditView: Bool = false + @Published var presentIngredientEditView: Bool = false + @Published var presentToolEditView: Bool = false + var recipe: Recipe var sharedURL: URL? = nil var newRecipe: Bool = false @@ -408,26 +454,28 @@ fileprivate struct RecipeImportSection: View { .font(.caption) .foregroundStyle(.secondary) - HStack { + TextField(LocalizedStringKey("URL (e.g. example.com/recipe)"), text: $viewModel.importUrl) .textFieldStyle(.roundedBorder) - Button { - Task { - if let res = await importRecipe(viewModel.importUrl) { - viewModel.alertType = RecipeAlert.CUSTOM( - title: res.localizedTitle, - description: res.localizedDescription - ) - viewModel.alertAction = { } - viewModel.presentAlert = true - } + .padding(.top, 5) + Button { + Task { + if let res = await importRecipe(viewModel.importUrl) { + viewModel.alertType = RecipeAlert.CUSTOM( + title: res.localizedTitle, + description: res.localizedDescription + ) + viewModel.alertAction = { } + viewModel.presentAlert = true } - } label: { - Text(LocalizedStringKey("Import")) } - }.padding(.top, 5) + } label: { + Text(LocalizedStringKey("Import")) + } + .buttonStyle(.bordered) } .padding() - .background(Rectangle().foregroundStyle(Color.white.opacity(0.1))) + .background(RoundedRectangle(cornerRadius: 20).foregroundStyle(Color.white.opacity(0.1))) + .padding() } } diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift index 48172d8..08c8c69 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift @@ -15,40 +15,28 @@ struct RecipeDurationSection: View { @State var presentPopover: Bool = false var body: some View { - if !viewModel.editMode { + VStack(alignment: .leading) { LazyVGrid(columns: [GridItem(.adaptive(minimum: 200, maximum: .infinity), alignment: .leading)]) { DurationView(time: viewModel.observableRecipeDetail.prepTime, title: LocalizedStringKey("Preparation")) DurationView(time: viewModel.observableRecipeDetail.cookTime, title: LocalizedStringKey("Cooking")) DurationView(time: viewModel.observableRecipeDetail.totalTime, title: LocalizedStringKey("Total time")) } - } else { - LazyVGrid(columns: [GridItem(.adaptive(minimum: 200, maximum: .infinity), alignment: .leading)]) { - Button { - presentPopover.toggle() - } label: { - DurationView(time: viewModel.observableRecipeDetail.prepTime, title: LocalizedStringKey("Preparation")) - } - Button { - presentPopover.toggle() - } label: { - DurationView(time: viewModel.observableRecipeDetail.cookTime, title: LocalizedStringKey("Cooking")) - } - Button { - presentPopover.toggle() - } label: { - DurationView(time: viewModel.observableRecipeDetail.totalTime, title: LocalizedStringKey("Total time")) - } - } - .popover(isPresented: $presentPopover) { - EditableDurationView( - prepTime: viewModel.observableRecipeDetail.prepTime, - cookTime: viewModel.observableRecipeDetail.cookTime, - totalTime: viewModel.observableRecipeDetail.totalTime - ) + Button { + presentPopover.toggle() + } label: { + Text("Edit") } + .buttonStyle(.borderedProminent) + .padding(.top, 5) + } + .padding() + .popover(isPresented: $presentPopover) { + EditableDurationView( + prepTime: viewModel.observableRecipeDetail.prepTime, + cookTime: viewModel.observableRecipeDetail.cookTime, + totalTime: viewModel.observableRecipeDetail.totalTime + ) } - - } } @@ -64,36 +52,64 @@ fileprivate struct DurationView: View { } HStack { Image(systemName: "clock") + .bold() .foregroundStyle(.secondary) Text(time.displayString) .lineLimit(1) } } - .padding() } } fileprivate struct EditableDurationView: View { + @Environment(\.presentationMode) var presentationMode @ObservedObject var prepTime: DurationComponents @ObservedObject var cookTime: DurationComponents @ObservedObject var totalTime: DurationComponents var body: some View { ScrollView { - VStack(alignment: .leading) { + VStack(alignment: .center) { HStack { SecondaryLabel(text: "Preparation") Spacer() + Button("Done") { + presentationMode.wrappedValue.dismiss() + } } TimePickerView(selectedHour: $prepTime.hourComponent, selectedMinute: $prepTime.minuteComponent) - SecondaryLabel(text: "Cooking") + + HStack { + SecondaryLabel(text: "Cooking") + Spacer() + } TimePickerView(selectedHour: $cookTime.hourComponent, selectedMinute: $cookTime.minuteComponent) - SecondaryLabel(text: "Total") + + HStack { + SecondaryLabel(text: "Total time") + Spacer() + } TimePickerView(selectedHour: $totalTime.hourComponent, selectedMinute: $totalTime.minuteComponent) } .padding() + .onChange(of: prepTime.hourComponent) { _ in updateTotalTime() } + .onChange(of: prepTime.minuteComponent) { _ in updateTotalTime() } + .onChange(of: cookTime.hourComponent) { _ in updateTotalTime() } + .onChange(of: cookTime.minuteComponent) { _ in updateTotalTime() } } } + + private func updateTotalTime() { + var hourComponent = prepTime.hourComponent + cookTime.hourComponent + var minuteComponent = prepTime.minuteComponent + cookTime.minuteComponent + // Handle potential overflow from minutes to hours + if minuteComponent >= 60 { + hourComponent += minuteComponent / 60 + minuteComponent %= 60 + } + totalTime.hourComponent = hourComponent + totalTime.minuteComponent = minuteComponent + } } diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift index e19793c..b556489 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift @@ -59,27 +59,93 @@ struct EditableText: View { } -struct EditableStringList: View { - @Binding var items: [ReorderableItem] - @Binding var editMode: Bool +struct EditableListView: View { + @Binding var isPresented: Bool + @Binding var items: [String] + @State var title: LocalizedStringKey + @State var emptyListText: LocalizedStringKey @State var titleKey: LocalizedStringKey = "" @State var lineLimit: ClosedRange = 0...50 @State var axis: Axis = .vertical - var content: () -> Content - var body: some View { - if editMode { - VStack { - ReorderableForEach(items: $items, defaultItem: ReorderableItem(item: "")) { ix, item in - TextField("", text: $items[ix].item, axis: axis) - .textFieldStyle(.roundedBorder) - .lineLimit(lineLimit) + NavigationView { + ZStack { + List { + if items.isEmpty { + Text(emptyListText) + } + + ForEach(items.indices, id: \.self) { ix in + TextField(titleKey, text: $items[ix], axis: axis) + .lineLimit(lineLimit) + } + .onDelete(perform: deleteItem) + .onMove(perform: moveItem) + } + VStack { + Spacer() + + Button { + addItem() + } label: { + Image(systemName: "plus") + .foregroundStyle(.white) + .bold() + .padding() + .background(Circle().fill(Color.nextcloudBlue)) + } + .padding() } } - .transition(.slide) - } else { - content() + .navigationBarTitle(title, displayMode: .inline) + .navigationBarItems( + trailing: Button(action: { isPresented = false }) { + Text("Done") + } + ) + .environment(\.editMode, .constant(.active)) // Bind edit mode to your state variable + } + } + + private func addItem() { + withAnimation { + items.append("") + } + } + + private func deleteItem(at offsets: IndexSet) { + withAnimation { + items.remove(atOffsets: offsets) + } + } + + private func moveItem(from source: IndexSet, to destination: Int) { + withAnimation { + items.move(fromOffsets: source, toOffset: destination) } } } + + + +// MARK: - Previews + +struct EditableListView_Previews: PreviewProvider { + // Sample keywords for preview + @State static var sampleList: [String] = [ + /*"3 Eggs", + "1 kg Potatos", + "3 g Sugar", + "1 ml Milk", + "Salt, Pepper"*/ + ] + + static var previews: some View { + Color.white + .sheet(isPresented: .constant(true), content: { + EditableListView(isPresented: .constant(true), items: $sampleList, title: "Ingredient", emptyListText: "Add cooking steps for fellow chefs to follow.") + }) + + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift index a68f3d9..81aa350 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift @@ -31,7 +31,7 @@ struct RecipeIngredientSection: View { groceryList.deleteGroceryRecipe(viewModel.observableRecipeDetail.id) } else { groceryList.addItems( - ReorderableItem.items(viewModel.observableRecipeDetail.recipeIngredient), + viewModel.observableRecipeDetail.recipeIngredient, toRecipe: viewModel.observableRecipeDetail.id, recipeName: viewModel.observableRecipeDetail.name ) @@ -46,17 +46,23 @@ struct RecipeIngredientSection: View { } } - EditableStringList(items: $viewModel.observableRecipeDetail.recipeIngredient, editMode: $viewModel.editMode, titleKey: "Ingredient", lineLimit: 0...1, axis: .horizontal) { - ForEach(0.. + @Binding var ingredient: String @State var recipeId: String let addToGroceryListAction: () -> Void @State var isSelected: Bool = false @@ -78,7 +84,7 @@ fileprivate struct IngredientListItem: View { var body: some View { HStack(alignment: .top) { - if groceryList.containsItem(at: recipeId, item: ingredient.item) { + if groceryList.containsItem(at: recipeId, item: ingredient) { if #available(iOS 17.0, *) { Image(systemName: "storefront") .foregroundStyle(Color.green) @@ -93,7 +99,7 @@ fileprivate struct IngredientListItem: View { Image(systemName: "circle") } - Text("\(ingredient.item)") + Text("\(ingredient)") .multilineTextAlignment(.leading) .lineLimit(5) Spacer() @@ -119,15 +125,13 @@ fileprivate struct IngredientListItem: View { .onEnded { gesture in withAnimation { if dragOffset > maxDragDistance * 0.3 { // Swipe threshold - if groceryList.containsItem(at: recipeId, item: ingredient.item) { - groceryList.deleteItem(ingredient.item, fromRecipe: recipeId) + if groceryList.containsItem(at: recipeId, item: ingredient) { + groceryList.deleteItem(ingredient, fromRecipe: recipeId) } else { addToGroceryListAction() } - } // Animate back to original position - self.dragOffset = 0 self.animationStartOffset = 0 } diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift index 72ba0fa..4409f4b 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift @@ -19,19 +19,27 @@ struct RecipeInstructionSection: View { SecondaryLabel(text: LocalizedStringKey("Instructions")) Spacer() } - EditableStringList(items: $viewModel.observableRecipeDetail.recipeInstructions, editMode: $viewModel.editMode, titleKey: "Instruction", lineLimit: 0...15, axis: .vertical) { - ForEach(0.. + @Binding var instruction: String @State var index: Int @State var isSelected: Bool = false @@ -39,7 +47,7 @@ fileprivate struct RecipeInstructionListItem: View { HStack(alignment: .top) { Text("\(index)") .monospaced() - Text(instruction.item) + Text(instruction) }.padding(4) .foregroundStyle(isSelected ? Color.secondary : Color.primary) .onTapGesture { diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift index a2bad4e..0130f34 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift @@ -19,7 +19,6 @@ struct RecipeMetadataSection: View { appState.categories.map({ category in category.name }) } - @State var presentKeywordSheet: Bool = false @State var presentServingsPopover: Bool = false @State var presentCategoryPopover: Bool = false @@ -27,7 +26,6 @@ struct RecipeMetadataSection: View { var body: some View { VStack(alignment: .leading) { // Category - //CategoryPickerView(items: $categories, input: $viewModel.observableRecipeDetail.recipeCategory, titleKey: "Category") SecondaryLabel(text: "Category") HStack { TextField("Category", text: $viewModel.observableRecipeDetail.recipeCategory) @@ -42,6 +40,7 @@ struct RecipeMetadataSection: View { } .pickerStyle(.menu) } + .padding(.bottom) // Keywords SecondaryLabel(text: "Keywords") @@ -51,6 +50,8 @@ struct RecipeMetadataSection: View { HStack { ForEach(viewModel.observableRecipeDetail.keywords, id: \.self) { keyword in Text(keyword) + .padding(5) + .background(RoundedRectangle(cornerRadius: 20).foregroundStyle(Color.primary.opacity(0.1))) } } } @@ -61,6 +62,7 @@ struct RecipeMetadataSection: View { Text("Select Keywords") Image(systemName: "chevron.right") } + .padding(.bottom) // Servings / Yield VStack(alignment: .leading) { @@ -77,7 +79,8 @@ struct RecipeMetadataSection: View { } } .padding() - .background(Rectangle().foregroundStyle(Color.white.opacity(0.1))) + .background(RoundedRectangle(cornerRadius: 20).foregroundStyle(Color.white.opacity(0.1))) + .padding() .sheet(isPresented: $presentKeywordSheet) { KeywordPickerView(title: "Keywords", searchSuggestions: appState.allKeywords, selection: $viewModel.observableRecipeDetail.keywords) } @@ -104,47 +107,6 @@ fileprivate struct PickerPopoverView: View { - @Binding var items: [ReorderableItem] - var defaultItem: ReorderableItem - var content: (Int, Item) -> Content - - @State var draggedItemId: UUID? = nil - @State var allowDeletion: Bool = false - - var body: some View { - VStack { - ForEach(Array(zip(items.indices, items)), id: \.1.id) { ix, item in - HStack { - if allowDeletion { - Button { - items.remove(at: ix) - } label: { - Image(systemName: "minus.circle.fill") - .foregroundColor(.red) - .padding(5) - .bold() - }.buttonStyle(.plain) - } - HStack { - content(ix, item.item) - Image(systemName: "line.3.horizontal") - .padding(5) - } - .padding(5) - .background( - RoundedRectangle(cornerRadius: 10) - .foregroundStyle(.background) - .ignoresSafeArea() - ) - } - .onDrag { - self.draggedItemId = item.id - return NSItemProvider(item: nil, typeIdentifier: item.id.uuidString) - } preview: { - EmptyView() - } - .onDrop(of: [.plainText], delegate: DropViewDelegate(targetId: item.id, sourceId: $draggedItemId, items: $items)) - } - HStack { - Button { - allowDeletion.toggle() - } label: { - Text(allowDeletion ? "Disable deletion" : "Enable deletion") - .bold() - } - .tint(Color.red) - Spacer() - Button { - items.append(defaultItem) - } label: { - Image(systemName: "plus") - .bold() - .padding(.vertical, 2) - .padding(.horizontal) - } - .buttonStyle(.borderedProminent) - }.padding(.top, 3) - }.animation(.default, value: allowDeletion) - } -} - - -struct ReorderableItem: Identifiable { - let id = UUID() - var item: Item - - static func list(items: [Item]) -> [ReorderableItem] { - items.map({ item in ReorderableItem(item: item) }) - } - - static func items(_ reorderableItems: [ReorderableItem]) -> [Item] { - reorderableItems.map { $0.item } - } -} - - -struct DropViewDelegate: DropDelegate { - let targetId: UUID - @Binding var sourceId : UUID? - @Binding var items: [ReorderableItem] - - func performDrop(info: DropInfo) -> Bool { - return true - } - - func dropEntered(info: DropInfo) { - guard let sourceId = self.sourceId else { - return - } - - if sourceId != targetId { - guard let sourceIndex = items.firstIndex(where: { $0.id == sourceId }), - let targetIndex = items.firstIndex(where: { $0.id == targetId }) - else { return } - withAnimation(.default) { - self.items.move(fromOffsets: IndexSet(integer: sourceIndex), toOffset: targetIndex > sourceIndex ? targetIndex + 1 : targetIndex) - } - } - } -} diff --git a/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift b/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift index 2784ced..3fc5837 100644 --- a/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift @@ -65,17 +65,6 @@ struct RecipeTabView: View { } } .tint(.nextcloudBlue) - - /*.sheet(isPresented: $viewModel.presentEditView) { - RecipeEditView( - viewModel: - RecipeEditViewModel( - mainViewModel: mainViewModel, - uploadNew: true - ), - isPresented: $viewModel.presentEditView - ) - }*/ .task { viewModel.serverConnection = await mainViewModel.checkServerConnection() } diff --git a/Nextcloud Cookbook iOS Client/Views/Tabs/SearchTabView.swift b/Nextcloud Cookbook iOS Client/Views/Tabs/SearchTabView.swift index 0da525b..7a4cfae 100644 --- a/Nextcloud Cookbook iOS Client/Views/Tabs/SearchTabView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Tabs/SearchTabView.swift @@ -7,7 +7,6 @@ import Foundation import SwiftUI -import SimilaritySearchKit struct SearchTabView: View { @EnvironmentObject var viewModel: SearchTabView.ViewModel @@ -56,8 +55,7 @@ struct SearchTabView: View { @Published var searchText: String = "" @Published var searchMode: SearchMode = .name - var similarityIndex: SimilarityIndex? = nil - var similaritySearchResults: [SearchResult] = [] + enum SearchMode: String, CaseIterable { case name = "Name & Keywords", ingredient = "Ingredients"