From a6d3c6a5056ba62f633c5e2214352c3266a14cd1 Mon Sep 17 00:00:00 2001 From: kriastans Date: Sat, 15 Jun 2024 12:00:40 +0800 Subject: [PATCH] =?UTF-8?q?[update]=20PPT=E6=8C=89=E9=92=AE=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E4=B8=8A=E5=8F=AF=E7=94=A8=EF=BC=8C=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E5=B0=8F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/InkCanvasForClass.csproj | 14 +- Ink Canvas/MainWindow.xaml | 87 ++++++++--- Ink Canvas/MainWindow.xaml.cs | 6 +- Ink Canvas/MainWindow_cs/MW_Hotkeys.cs | 2 +- Ink Canvas/MainWindow_cs/MW_PPT.cs | 19 ++- Ink Canvas/MainWindow_cs/MW_Settings.cs | 141 ++++++++++++++++-- Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 3 + Ink Canvas/MainWindow_cs/MW_Timer.cs | 2 +- .../PresentationExample/bottombar-dark.png | Bin 0 -> 763 bytes .../PresentationExample/bottombar-white.png | Bin 0 -> 780 bytes .../PresentationExample/sidebar-dark.png | Bin 0 -> 816 bytes .../PresentationExample/sidebar-white.png | Bin 0 -> 820 bytes 12 files changed, 233 insertions(+), 41 deletions(-) create mode 100644 Ink Canvas/Resources/PresentationExample/bottombar-dark.png create mode 100644 Ink Canvas/Resources/PresentationExample/bottombar-white.png create mode 100644 Ink Canvas/Resources/PresentationExample/sidebar-dark.png create mode 100644 Ink Canvas/Resources/PresentationExample/sidebar-white.png diff --git a/Ink Canvas/InkCanvasForClass.csproj b/Ink Canvas/InkCanvasForClass.csproj index a501238..4654cf3 100644 --- a/Ink Canvas/InkCanvasForClass.csproj +++ b/Ink Canvas/InkCanvasForClass.csproj @@ -29,17 +29,17 @@ embedded bin\$(Configuration)\ - True + False embedded bin\$(Configuration)\ - True + False embedded bin\$(Configuration)\ - True + False Resources\icc.ico @@ -525,7 +525,11 @@ + + + + @@ -533,7 +537,11 @@ + + + + diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index cc1c5d3..0ab968c 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -58,7 +58,7 @@ - + @@ -697,14 +697,33 @@ StrokeThickness="1" Margin="0,4,0,4" /> - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -740,9 +759,9 @@ + FontSize="14" Margin="0,0,12,0" /> + + FontSize="14" Margin="0,0,12,0" /> + - + Background="#f4f4f5" Opacity="1" CornerRadius="6" Margin="6,0,0,0"> - + Background="#f4f4f5" Opacity="1" CornerRadius="6" Margin="0,0,6,0"> { + await Application.Current.Dispatcher.InvokeAsync(() => { isPresentationHaveBlackSpace = false; if (BtnSwitchTheme.Content.ToString() == "深色") { @@ -616,7 +622,11 @@ namespace Ink_Canvas { }); await Task.Delay(150); - ViewboxFloatingBarMarginAnimation(100, true); + + Application.Current.Dispatcher.InvokeAsync(() => { + ViewboxFloatingBarMarginAnimation(100, true); + }); + } private int previousSlideID = 0; @@ -746,6 +756,7 @@ namespace Ink_Canvas { private async void PPTNavigationBtn_MouseDown(object sender, MouseButtonEventArgs e) { lastBorderMouseDownObject = sender; + if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return; if (sender == PPTLSPageButton) { PPTLSPageButtonFeedbackBorder.Opacity = 0.15; @@ -805,6 +816,8 @@ namespace Ink_Canvas { PPTRBPageButtonFeedbackBorder.Opacity = 0; } + if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return; + GridTransparencyFakeBackground.Opacity = 1; GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF")); CursorIcon_Click(null, null); diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index e9c2fbb..5f4bbf5 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -338,6 +338,7 @@ namespace Ink_Canvas { if (!isLoaded) return; Settings.PowerPointSettings.ShowPPTButton = ToggleSwitchShowPPTButton.IsOn; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void ToggleSwitchEnablePPTButtonPageClickable_OnToggled(object sender, RoutedEventArgs e) { @@ -353,7 +354,8 @@ namespace Ink_Canvas { c[0] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnDisplaySettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxEnableRBPPTButton_IsCheckChanged(object sender, RoutedEventArgs e) @@ -364,7 +366,8 @@ namespace Ink_Canvas { c[1] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnDisplaySettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxEnableLSPPTButton_IsCheckChanged(object sender, RoutedEventArgs e) @@ -375,7 +378,8 @@ namespace Ink_Canvas { c[2] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnDisplaySettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxEnableRSPPTButton_IsCheckChanged(object sender, RoutedEventArgs e) @@ -386,7 +390,8 @@ namespace Ink_Canvas { c[3] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnDisplaySettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxSPPTDisplayPage_IsCheckChange(object sender, RoutedEventArgs e) @@ -397,7 +402,8 @@ namespace Ink_Canvas { c[0] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTSButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxSPPTHalfOpacity_IsCheckChange(object sender, RoutedEventArgs e) @@ -408,7 +414,8 @@ namespace Ink_Canvas { c[1] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTSButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxSPPTBlackBackground_IsCheckChange(object sender, RoutedEventArgs e) @@ -419,7 +426,8 @@ namespace Ink_Canvas { c[2] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTSButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxBPPTDisplayPage_IsCheckChange(object sender, RoutedEventArgs e) @@ -430,7 +438,8 @@ namespace Ink_Canvas { c[0] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTBButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxBPPTHalfOpacity_IsCheckChange(object sender, RoutedEventArgs e) @@ -441,7 +450,8 @@ namespace Ink_Canvas { c[1] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTBButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void CheckboxBPPTBlackBackground_IsCheckChange(object sender, RoutedEventArgs e) @@ -452,14 +462,17 @@ namespace Ink_Canvas { c[2] = (bool)((CheckBox)sender).IsChecked ? '2' : '1'; Settings.PowerPointSettings.PPTBButtonsOption = int.Parse(new string(c)); SaveSettingsToFile(); - UpdatePPTBtnStyleSettingsStatus(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnStyleSettingsStatus(); + UpdatePPTBtnPreview(); } private void PPTButtonLeftPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.PPTLSButtonPosition = (int)PPTButtonLeftPositionValueSlider.Value; UpdatePPTBtnSlidersStatus(); - SaveSettingsToFile(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + SliderDelayAction.DebounceAction(2000, null, SaveSettingsToFile); + UpdatePPTBtnPreview(); } private void UpdatePPTBtnSlidersStatus() { @@ -512,6 +525,7 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTLSButtonPosition = (int)PPTButtonLeftPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void PPTBtnLSMinusBtn_Clicked(object sender, RoutedEventArgs e) @@ -521,6 +535,7 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTLSButtonPosition = (int)PPTButtonLeftPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void PPTBtnLSSyncBtn_Clicked(object sender, RoutedEventArgs e) @@ -530,6 +545,16 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTRSButtonPosition = (int)PPTButtonLeftPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); + } + + private void PPTBtnLSResetBtn_Clicked(object sender, RoutedEventArgs e) { + if (!isLoaded) return; + PPTButtonLeftPositionValueSlider.Value = 0; + UpdatePPTBtnSlidersStatus(); + Settings.PowerPointSettings.PPTLSButtonPosition = 0; + SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void PPTBtnRSPlusBtn_Clicked(object sender, RoutedEventArgs e) @@ -539,6 +564,7 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTRSButtonPosition = (int)PPTButtonRightPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void PPTBtnRSMinusBtn_Clicked(object sender, RoutedEventArgs e) @@ -548,6 +574,7 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTRSButtonPosition = (int)PPTButtonRightPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } private void PPTBtnRSSyncBtn_Clicked(object sender, RoutedEventArgs e) @@ -557,14 +584,104 @@ namespace Ink_Canvas { UpdatePPTBtnSlidersStatus(); Settings.PowerPointSettings.PPTLSButtonPosition = (int)PPTButtonRightPositionValueSlider.Value; SaveSettingsToFile(); + UpdatePPTBtnPreview(); } + private void PPTBtnRSResetBtn_Clicked(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + PPTButtonRightPositionValueSlider.Value = 0; + UpdatePPTBtnSlidersStatus(); + Settings.PowerPointSettings.PPTRSButtonPosition = 0; + SaveSettingsToFile(); + UpdatePPTBtnPreview(); + } + + private DelayAction SliderDelayAction = new DelayAction(); + private void PPTButtonRightPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.PPTRSButtonPosition = (int)PPTButtonRightPositionValueSlider.Value; UpdatePPTBtnSlidersStatus(); - SaveSettingsToFile(); + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) UpdatePPTBtnDisplaySettingsStatus(); + SliderDelayAction.DebounceAction(2000,null, SaveSettingsToFile); + UpdatePPTBtnPreview(); + } + + private void UpdatePPTBtnPreview() { + //new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png")); + var bopt = Settings.PowerPointSettings.PPTBButtonsOption.ToString(); + char[] boptc = bopt.ToCharArray(); + if (boptc[1] == '2') { + PPTBtnPreviewLB.Opacity = 0.5; + PPTBtnPreviewRB.Opacity = 0.5; + } else { + PPTBtnPreviewLB.Opacity = 1; + PPTBtnPreviewRB.Opacity = 1; + } + + if (boptc[2] == '2') { + PPTBtnPreviewLB.Source = + new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/bottombar-dark.png")); + PPTBtnPreviewRB.Source = new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/bottombar-dark.png")); + } else { + PPTBtnPreviewLB.Source = + new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/bottombar-white.png")); + PPTBtnPreviewRB.Source = new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/bottombar-white.png")); + } + + var sopt = Settings.PowerPointSettings.PPTSButtonsOption.ToString(); + char[] soptc = sopt.ToCharArray(); + if (soptc[1] == '2') + { + PPTBtnPreviewLS.Opacity = 0.5; + PPTBtnPreviewRS.Opacity = 0.5; + } + else + { + PPTBtnPreviewLS.Opacity = 1; + PPTBtnPreviewRS.Opacity = 1; + } + + if (soptc[2] == '2') + { + PPTBtnPreviewLS.Source = + new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/sidebar-dark.png")); + PPTBtnPreviewRS.Source = new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/sidebar-dark.png")); + } + else + { + PPTBtnPreviewLS.Source = + new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/sidebar-white.png")); + PPTBtnPreviewRS.Source = new BitmapImage( + new Uri("pack://application:,,,/Resources/PresentationExample/sidebar-white.png")); + } + + var dopt = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString(); + char[] doptc = dopt.ToCharArray(); + + if (Settings.PowerPointSettings.ShowPPTButton) { + PPTBtnPreviewLB.Visibility = doptc[0] == '2' ? Visibility.Visible : Visibility.Collapsed; + PPTBtnPreviewRB.Visibility = doptc[1] == '2' ? Visibility.Visible : Visibility.Collapsed; + PPTBtnPreviewLS.Visibility = doptc[2] == '2' ? Visibility.Visible : Visibility.Collapsed; + PPTBtnPreviewRS.Visibility = doptc[3] == '2' ? Visibility.Visible : Visibility.Collapsed; + } else { + PPTBtnPreviewLB.Visibility = Visibility.Collapsed; + PPTBtnPreviewRB.Visibility = Visibility.Collapsed; + PPTBtnPreviewLS.Visibility = Visibility.Collapsed; + PPTBtnPreviewRS.Visibility = Visibility.Collapsed; + } + + PPTBtnPreviewRSTransform.Y = -(Settings.PowerPointSettings.PPTRSButtonPosition * 0.5); + PPTBtnPreviewLSTransform.Y = -(Settings.PowerPointSettings.PPTLSButtonPosition * 0.5); } private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e) { diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 1dc6f80..42c3ecc 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -346,6 +346,9 @@ namespace Ink_Canvas { PPTButtonRightPositionValueSlider.Value = Settings.PowerPointSettings.PPTRSButtonPosition; UpdatePPTBtnSlidersStatus(); + + UpdatePPTBtnPreview(); + // -- new -- ToggleSwitchNotifyHiddenPage.IsOn = Settings.PowerPointSettings.IsNotifyHiddenPage; diff --git a/Ink Canvas/MainWindow_cs/MW_Timer.cs b/Ink Canvas/MainWindow_cs/MW_Timer.cs index f93c3d4..aa6f64b 100644 --- a/Ink Canvas/MainWindow_cs/MW_Timer.cs +++ b/Ink Canvas/MainWindow_cs/MW_Timer.cs @@ -106,7 +106,7 @@ namespace Ink_Canvas { if (Settings.Automation.IsAutoKillVComYouJiao) { var processes = Process.GetProcessesByName("VcomTeach"); - if (processes.Length > 0) arg += " /IM VcomTeach.exe"; + if (processes.Length > 0) arg += " /IM VcomTeach.exe" + " /IM VcomDaemon.exe" + " /IM VcomRender.exe"; } if (Settings.Automation.IsAutoKillICA) { diff --git a/Ink Canvas/Resources/PresentationExample/bottombar-dark.png b/Ink Canvas/Resources/PresentationExample/bottombar-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9a19578075f52be47ab8e7951f8e9333fe2e91a6 GIT binary patch literal 763 zcmVh;=}Y__s0SSs3k;fPt8^ix6 zCYemK{Zx6k+rz|Y89ZH(PN!KCJkLWEix>AKNrDm%4nAFsmzI{9&1Oe`m2$a^V)4?S z)oNw?ve|6Y^+L1Bot<|?Jqfe3Go<+5Ad|^J4K#5YFipN%t+K~Z3G}4sMd|73!S?oB ztgpYu?(X{r)hX8&Y&aZd#Ydf|QYolma`GwS@i?ZYo{^%}VPfJ5Q!khMt=L9i-vgYT z{lwm$w|U^CU|UM!^L>C?EEWs<{d?Rwba!{LL}>RpJxwUK6N!9dS1XjArwSYn2ab-u zvhm4Dgq>c0za6ny4DF`v!3Tqvt(A5Q3T*)Gre5b{UXlvGNP%_Q$Bk?>8jb}~tb0u+ t<0H}rr^%!icO3G|GV{s9og3{V4GNnHQ{002ovPDHLkV1mmRSNi|} literal 0 HcmV?d00001 diff --git a/Ink Canvas/Resources/PresentationExample/bottombar-white.png b/Ink Canvas/Resources/PresentationExample/bottombar-white.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcf239a8497c032cd61f264855ecdd5edd94eb2 GIT binary patch literal 780 zcmV+n1M~ceP)0Qz@e#F0|XNa2NFaMax*cI;6aE7{{h-WUK&jCY9hfzP~wG3y-*WV zO$hY>C8oDx@L&xMt=Bdw)TWJXk!~OEOsSVXS9>U*2w;&WRi}_Z+={B*m4iE*(^0Fgu`LX&p*b-h86L6946Bf zOimi$_4*|Fsb=kx;!~*<*4Hg?xm=KfTrS7JzyK9~c<7}e9vd5j!{LzR$L;=(wKa3u z4HOlh$z)(Qzro(#7ihIwNI|JoqOGm<%uiYre}NjuaZ=o%z5OzrPA67YUW#d$DLSXX zBiX6N@|N1@=m=~!+u0KaLqj(pwp3Jt2vw`q=ZN;e?Kk4r+v0EQYzchhp?c zF*7q&v?CVHd9s+%Xry7=-~S4!h&Lb-i3IHSPY8uV*xIrq7z|4C;q(0vFC!hMryrE8 zmy%UPHefJJN^X^cARroz(!wPX^ZWhi>gqxu5I{>yOVxh*`g+mZt1o*8v8aI53yg@> zXf$-J(_Nv$$*FgCc0wwZ*5*h%t0hEuKF3>Ib1idl@H%P@!(_AU?(XNz$;ofjifW7V ze@G?;(vjTU($eeqO-&cOwOY+R@k0mo50g4R{<*!p{QL#ZGk*ZPSnGlQ0vZ?q0000< KMNUMnLSTaEi)F|F literal 0 HcmV?d00001 diff --git a/Ink Canvas/Resources/PresentationExample/sidebar-dark.png b/Ink Canvas/Resources/PresentationExample/sidebar-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..21ad66067bdb987ebca3f4bba909eb4f4322e18e GIT binary patch literal 816 zcmV-01JC@4P)w#0K~#7F?Uv6= z8$lGuzq=a=#;UP~gi;|i2^6ZP76orT)q_;8MT!(D9*URVdMrYvB`9c%R>e~fvBlP& z>?xR(nCc%;3Q3{n7Sl8sLK2dg-J~-ErY5_aY?52?3!5K1^FBN8&3kVaXi=QgIXqe{ zN-xN7yLPh@{rF)p=%4CDvG7ik#G7bbwrrM{ctH?MXi|~{JC7E`6YH7)qtOV1!GM|& zwE>62ft{TX*xK4aPmi%NKyU9=EG@Yp2t3SY3)a?F(cRsx2oNlmYtJM}DzB3#j=5Z~ z;PH5nPN(7XeMK&p$I#Gi93CE38VkA@H#m4Fes-4cy*OYpnGlc1F+cwt!C;WM@(Jzj z?Z{*@6@a!j{dYwds4*4C@hFu_C>Dz{C`z@aKv!#UV`G!7popdci9`bR z)KVs10_p%rpZGV4=d}Ykj>Fj4J*=+2A*rgv`1m+BH`g&e{ZKogqoV^>tCbcDW@jH` zW#u&{CnptqgA73PesAv!ve_*A-`UxTlanY(=|Y8Ds(_24g>-!U3v+W%aC(|xgr5FRJ z)5#2Du^8-j8@cT4TS+nijdWk%bws04?K;8?? z>{z1*tj%_VxuXd{MamS5i!Sz3;c(cozP?uOP}P#v0!>-B+YO7wjG387EVUOFUc&43 zX#-HvzPP-+f^ayDWHO2UeXnXQsGiQG&0%-CXrnd$*IMEBwHn-L2;ar uC0+R~O?F{;c=T?m#912w==I#sBci{39R)LR^AZIB0000b!fS!(v*7Oj=9TMvxh_s7( zS|gmW9fTb`%-lf`Y0Ml5`uTs~`-b40pWmxq`+@k1&-3$re(&@Ad_NfktgNhPCMTyK z8Vq+#G8trG0M8dH(P-rB!GR?}6P(VIorQ&k=NzY2q6MTnTkd88JT6>29|~ zK+xA`P?^p5=H%pqR;xw3=<4c%Tq>wisYr!1C*gS>hllUs^?I9cIgR`^G zkO@bYOeV3qx=Po~Bvz|UAj)HL@i7Jl25@@%QPA!dmY0{nT+aOb9CmlNp;oIYiPicJ zqoYQ&RL;!I41F(^${-c=_xICRBS@akwFJ$ZShB&EmYzVb*LOx@GMS`8q|0H!4M~e6 zwL{lz07XdxfiKwDctI!G=ksH2?U^vmzSc;1K8r}?2MUD(+-^74*Vp0kcu*{s*hyw* zXTfnAl*?ryu_(;VUC8Bfp{z1HNfio(0!pP4$Hymvr}oixJ?LbGLf^lQjg3y%enEtc z#bOv58lt*fTtqQEJdEyc-9H59=K;Iu><|YdNdy{=1``wa#X`jgFr7{#o6RDh&(jhT zi3ECjdSEpEZ%m?^M58~2t#`v(R6v zk~ls-PS+}xifU8Uhj}LiL`+uP_(>Zi9p4HF?Dh``27{fEkZ#RnGVPHNGpd4ARP_~R z5~9QYzJ*$(LLsMwM@J4g9L|O$qHRy^C3|~&bb`a-Fm<)9t=C}Q3BlCV18i=-qLx62 zES5JI92{idNfl