From 61bb769a618d9d62df73f33b9b916705f4257f3d Mon Sep 17 00:00:00 2001 From: massimopaganigh Date: Sat, 5 Jul 2025 17:38:52 +0200 Subject: [PATCH 1/3] feat: add support for Cursor tool in platform finder - Updated README to include Cursor in the list of supported tools. - Implemented Cursor detection in Linux, MacOS, and Windows platform finders. - Added method to find Cursor executable in Windows. --- README.md | 1 + src/Models/ExternalTool.cs | 5 +++++ src/Native/Linux.cs | 1 + src/Native/MacOS.cs | 1 + src/Native/Windows.cs | 11 +++++++++++ .../Images/ExternalToolIcons/cursor.png | Bin 0 -> 1900 bytes 6 files changed, 19 insertions(+) create mode 100644 src/Resources/Images/ExternalToolIcons/cursor.png diff --git a/README.md b/README.md index f9ba30727..ac3104a17 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,7 @@ This app supports open repository in external tools listed in the table below. | Visual Studio Code | YES | YES | YES | | Visual Studio Code - Insiders | YES | YES | YES | | VSCodium | YES | YES | YES | +| Cursor | YES | YES | YES | | Fleet | YES | YES | YES | | Sublime Text | YES | YES | YES | | Zed | NO | YES | YES | diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs index 697c171a4..f884fb4af 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -154,6 +154,11 @@ public void Zed(Func platformFinder) TryAdd("Zed", "zed", platformFinder); } + public void Cursor(Func platformFinder) + { + TryAdd("Cursor", "cursor", platformFinder); + } + public void FindJetBrainsFromToolbox(Func platformFinder) { var exclude = new List { "fleet", "dotmemory", "dottrace", "resharper-u", "androidstudio" }; diff --git a/src/Native/Linux.cs b/src/Native/Linux.cs index 3f6de903c..036086491 100644 --- a/src/Native/Linux.cs +++ b/src/Native/Linux.cs @@ -52,6 +52,7 @@ public string FindTerminal(Models.ShellOrTerminal shell) finder.VSCode(() => FindExecutable("code")); finder.VSCodeInsiders(() => FindExecutable("code-insiders")); finder.VSCodium(() => FindExecutable("codium")); + finder.Cursor(() => FindExecutable("cursor")); finder.Fleet(FindJetBrainsFleet); finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox"); finder.SublimeText(() => FindExecutable("subl")); diff --git a/src/Native/MacOS.cs b/src/Native/MacOS.cs index 8ee84cb59..1e7ac59e0 100644 --- a/src/Native/MacOS.cs +++ b/src/Native/MacOS.cs @@ -74,6 +74,7 @@ public string FindTerminal(Models.ShellOrTerminal shell) finder.VSCode(() => "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"); finder.VSCodeInsiders(() => "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code"); finder.VSCodium(() => "/Applications/VSCodium.app/Contents/Resources/app/bin/codium"); + finder.Cursor(() => "/Applications/Cursor.app/Contents/Resources/app/bin/cursor"); finder.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/Applications/Fleet.app/Contents/MacOS/Fleet"); finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/Library/Application Support/JetBrains/Toolbox"); finder.SublimeText(() => "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"); diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index 22eaeb59f..15360466b 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -184,6 +184,7 @@ public string FindTerminal(Models.ShellOrTerminal shell) finder.VSCode(FindVSCode); finder.VSCodeInsiders(FindVSCodeInsiders); finder.VSCodium(FindVSCodium); + finder.Cursor(FindCursor); finder.Fleet(() => $@"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\Programs\Fleet\Fleet.exe"); finder.FindJetBrainsFromToolbox(() => $@"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\JetBrains\Toolbox"); finder.SublimeText(FindSublimeText); @@ -387,6 +388,16 @@ private string FindVisualStudio() return string.Empty; } + + private string FindCursor() + { + var cursorPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", "Cursor", "Cursor.exe"); + + if (File.Exists(cursorPath)) + return cursorPath; + + return string.Empty; + } #endregion private void OpenFolderAndSelectFile(string folderPath) diff --git a/src/Resources/Images/ExternalToolIcons/cursor.png b/src/Resources/Images/ExternalToolIcons/cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..9c15c8d7264d1bb50118e4039ec4f8bbc24cc52f GIT binary patch literal 1900 zcmV-y2b1`TP)Px#32;bRa{vGf6951U69E94oEQKA2N6j`K~#9!?VD?ClVuo&?@kA(GmuD(@rN2u zBx+)a{t$x+9)1{2jGCY(8dNsAb!>F)=(e`Q%8*TT20=W`4Z0rJ(@rQTP94IIZHH(S z4T{7=)PbQB)gvO%;?~(m*hg2}{pD~rk&p`R+CYDA5 zl(`88uM{ArH}WSu1I6(4XJJb5dfQAGTeeH%M>I5Y09Q1E@90>)M-IXhDTjGr))YAT zkFSHV_3Ja^jjWynlu7|u-;r||3Bet%g!Qj$F)1-_y#|8+z( zx&~G-fTU}{mEz-@o<>>oap;>Vt|eZ=@&?u^BS82kq%68-B}$u5aR7?%XngcW$j{N84&aamiP?~90ZgV0=zQx@(nJZX^ANO-5qXf1$p;`(U`^k{ zs0u!Xb$h2LH{LUi$2SO!XB!E{Zi2?a+AnYb(|6NQ)#t>TuSt@B{Vmq`=g1tN#pAa@ z*GR%j0gCMM0yyOc*zjEz58j5?chOl^_C>JT{~ScnZk`RT&yVGeBulM}ptea7Ht`@5 z(k>@Jb#OM1_oHeT#kDfKxC5Le?p3XNwGV#EU2!z7^0 z04B=7s=&K^6G%jk(1~Ss4f4%{D6kS=U4q(0JVrqG9uzt61T)bA#Hk3Huu2*x;L6_U zXw^nSzJ*X==MW8qBKP>?)owfTJy~Gl1>iv>q?H3C#j1b`tAax!5%~E8-A9DnS`K06 z2sT3D=xr$SjFE>Q=ReCueB=kPaDb$FEx3?JonT2wV>=;l6MOb;;IXVb>N3|)DD=(+ zlTZL_m;{`l01OX$2rB~-R0K&#Q@3>bvD>iJ#vvTh5QT0ZNQo4J&%*$qm4RNWcjWptRhJT=M}wMdDK==-Uae2E;Y_2RVcm zM2g81puq76^6e4iS&1XiNQCSU2qkSiC?L-jz0EMS&k_n?4wIM@5g^z33{>`$$afM{ z4jPG|G)Hg2;`a&5wtKv1&?3JN`uEL{k}350WWccLZ389zUAFc=sK>R*Z>1E0xa}g zhFshG$hFhBDlO3ni#fug4IL=`QjPN7L9FnT9Qp750KNaNxB)hXNXR-l0hG2i(zwL5 z5pwE>k-g~+C~Gpo@JT)fWA9NOL$WmV9D||brHdC}iFGeWphV>79>x;e6Zk)69rIx5 zJ_KVo$yVRB5vI*o;xsif0@TV0kYn>CG(N}bM{dJSh=;!C4j8(APbz|;^Bd^Cm~$pT zU5Esf8DOd98su1dc_78t_6`cyO~-hY?!19dau44Il5NTM2()d_js&O;k&qv909i1D z-}95jUl%@=1_@cl>ZAZ|grY4ZKY)A`$Tly);`%4}$|wKPSXrk-8YSfNuc86eAM>D) zpaUuR;b=+M+bHd#gp~pmeMVTu0ct{GelU=#ACGq!P|`X6c(am;tfT;@5$O`=Q7vPyGNA)er7Q2Id39KaV+nI{k>mAUek5*J5z+ zZsg61`!(Qlq#D)p_d(x1AA_ep0Tgp%t64hzi1a?^#?Hy8AwH{=Jg{h za{-9jWBX}T#DNZCc*uxM+=zl}%16dedR}aw0qss7G&=}|pA%GD*^dbC4#eDW_z$c< zpuwAeU4 Date: Sat, 5 Jul 2025 17:45:07 +0200 Subject: [PATCH 2/3] feat: integrate Cursor tool into ExternalMerger options - Added support for the Cursor merge tool across Windows, MacOS, and Linux platforms. - Updated ExternalMerger configurations to include Cursor with appropriate executable paths and arguments. --- src/Models/ExternalMerger.cs | 39 +++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/Models/ExternalMerger.cs b/src/Models/ExternalMerger.cs index ddd0aa011..5ad894a05 100644 --- a/src/Models/ExternalMerger.cs +++ b/src/Models/ExternalMerger.cs @@ -35,15 +35,16 @@ static ExternalMerger() new ExternalMerger(0, "git", "Use Git Settings", "", "", ""), new ExternalMerger(1, "vscode", "Visual Studio Code", "Code.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), new ExternalMerger(2, "vscode_insiders", "Visual Studio Code - Insiders", "Code - Insiders.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(3, "vs", "Visual Studio", "vsDiffMerge.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" /m", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(4, "tortoise_merge", "Tortoise Merge", "TortoiseMerge.exe;TortoiseGitMerge.exe", "-base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\"", "-base:\"$LOCAL\" -theirs:\"$REMOTE\""), - new ExternalMerger(5, "kdiff3", "KDiff3", "kdiff3.exe", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(6, "beyond_compare", "Beyond Compare", "BComp.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(7, "win_merge", "WinMerge", "WinMergeU.exe", "\"$MERGED\"", "-u -e -sw \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(8, "codium", "VSCodium", "VSCodium.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(9, "p4merge", "P4Merge", "p4merge.exe", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(10, "plastic_merge", "Plastic SCM", "mergetool.exe", "-s=\"$REMOTE\" -b=\"$BASE\" -d=\"$LOCAL\" -r=\"$MERGED\" --automatic", "-s=\"$LOCAL\" -d=\"$REMOTE\""), - new ExternalMerger(11, "meld", "Meld", "Meld.exe", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(3, "cursor", "Cursor", "Cursor.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(4, "vs", "Visual Studio", "vsDiffMerge.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" /m", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(5, "tortoise_merge", "Tortoise Merge", "TortoiseMerge.exe;TortoiseGitMerge.exe", "-base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\"", "-base:\"$LOCAL\" -theirs:\"$REMOTE\""), + new ExternalMerger(6, "kdiff3", "KDiff3", "kdiff3.exe", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(7, "beyond_compare", "Beyond Compare", "BComp.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(8, "win_merge", "WinMerge", "WinMergeU.exe", "\"$MERGED\"", "-u -e -sw \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(9, "codium", "VSCodium", "VSCodium.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(10, "p4merge", "P4Merge", "p4merge.exe", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(11, "plastic_merge", "Plastic SCM", "mergetool.exe", "-s=\"$REMOTE\" -b=\"$BASE\" -d=\"$LOCAL\" -r=\"$MERGED\" --automatic", "-s=\"$LOCAL\" -d=\"$REMOTE\""), + new ExternalMerger(12, "meld", "Meld", "Meld.exe", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), }; } else if (OperatingSystem.IsMacOS()) @@ -53,10 +54,11 @@ static ExternalMerger() new ExternalMerger(1, "xcode", "FileMerge", "/usr/bin/opendiff", "\"$BASE\" \"$LOCAL\" \"$REMOTE\" -ancestor \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(2, "vscode", "Visual Studio Code", "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), new ExternalMerger(3, "vscode_insiders", "Visual Studio Code - Insiders", "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(4, "kdiff3", "KDiff3", "/Applications/kdiff3.app/Contents/MacOS/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(5, "beyond_compare", "Beyond Compare", "/Applications/Beyond Compare.app/Contents/MacOS/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(6, "codium", "VSCodium", "/Applications/VSCodium.app/Contents/Resources/app/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(7, "p4merge", "P4Merge", "/Applications/p4merge.app/Contents/Resources/launchp4merge", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(4, "cursor", "Cursor", "/Applications/Cursor.app/Contents/Resources/app/bin/cursor", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(5, "kdiff3", "KDiff3", "/Applications/kdiff3.app/Contents/MacOS/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(6, "beyond_compare", "Beyond Compare", "/Applications/Beyond Compare.app/Contents/MacOS/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(7, "codium", "VSCodium", "/Applications/VSCodium.app/Contents/Resources/app/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(8, "p4merge", "P4Merge", "/Applications/p4merge.app/Contents/Resources/launchp4merge", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), }; } else if (OperatingSystem.IsLinux()) @@ -65,11 +67,12 @@ static ExternalMerger() new ExternalMerger(0, "git", "Use Git Settings", "", "", ""), new ExternalMerger(1, "vscode", "Visual Studio Code", "/usr/share/code/code", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), new ExternalMerger(2, "vscode_insiders", "Visual Studio Code - Insiders", "/usr/share/code-insiders/code-insiders", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(3, "kdiff3", "KDiff3", "/usr/bin/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(4, "beyond_compare", "Beyond Compare", "/usr/bin/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(5, "meld", "Meld", "/usr/bin/meld", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(6, "codium", "VSCodium", "/usr/share/codium/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger(7, "p4merge", "P4Merge", "/usr/local/bin/p4merge", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(3, "cursor", "Cursor", "cursor", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(4, "kdiff3", "KDiff3", "/usr/bin/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(5, "beyond_compare", "Beyond Compare", "/usr/bin/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(6, "meld", "Meld", "/usr/bin/meld", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(7, "codium", "VSCodium", "/usr/share/codium/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(8, "p4merge", "P4Merge", "/usr/local/bin/p4merge", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""), }; } else From fbfd139eefd4cda2995ad583521a3cf2b9bddce2 Mon Sep 17 00:00:00 2001 From: massimopaganigh Date: Sat, 5 Jul 2025 17:49:51 +0200 Subject: [PATCH 3/3] fix: update cursor icon for ExternalToolIcons - Replaced the existing cursor.png with an updated version to enhance visual representation in the toolset. --- .../Images/ExternalToolIcons/cursor.png | Bin 1900 -> 1333 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/Resources/Images/ExternalToolIcons/cursor.png b/src/Resources/Images/ExternalToolIcons/cursor.png index 9c15c8d7264d1bb50118e4039ec4f8bbc24cc52f..1e0092bb3d15afb3092b452406629fe369f39a42 100644 GIT binary patch literal 1333 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!js^IHxVjhk0GU9*$jAs`07)h$ zCS(z2W{@sq1#p$P7(m4k^$??wl?4X}v$L~9L;?c?Wn^T4Y)wr~cXxLyD=TGXWuTz8 zwzjXYuY`nzr>7@SL{d`H+uIvx6e}w$P%#e=kAs5)#N^P>(6F#Dfu76;poD!%kY6x^ z#aVA#7efv9iXunl>~#{dE80A^CM*ott=l-|P;crip%c7TwXc3fzGeP<`*H8jughQm zz4Wj0;F)#*{(k%Ca+4)9ScQRs`M#%%V@Sl|xznE~EpiZPRSnT>Qs@&E3~0(rib!5G zTld31{jI?a?Seg3|12x)&)FWB;`e-((7CNs&OP3Ar!su|pC<>4?$7jD9veIT>jS}- zLn}Z3tXcJHnx6BKy-z#e-P*>>xhmC>|MADUfin~~<@y-tcr-A08s)!N7P!JGq$IJd zQ`bYre4n9j>YFlU4W|YM;iU|m3k~+Ea&fPST_N;vW?iD=BNpEY`@0Wa=LtQ^(zL<$ z{(2pUCXI;ezXDXQ8wf0P^0BdR5cBBUzBPVNU*S6(aBKaZ@4Vrs&G^<#B;^30#VfuFJ%&i85nvyl`j6YIL30#b&g6e%e>Dk zi!9ekANOzA!_n3^pP{hd>tgK%Uz>1~)gO9qzN&2fdM4}Z;$@;sb7L4?%6I%KUw*H= zdL>haO+L@QcbfnI7EdlaZqmSh_v!lR)AfIA&VE+5U}ibq*irHC`?61$e`iliU+K>5 z;`1QC>rpNH>CJyymoqHX5bMZa+;H~rC!O2J8<+}aMJPFZDcN<;M(g~w3k2TSi(G~~?Q9pW9B2CUCBSb(%niNm;3~tf{0 z&(yuP-ZEo!(VumpE8~FGR&_RUjis&L4G$*m6a^hrek1Y3^Lkglf6US*}H|{cg(I7#?c) z^VMcU49E4d(^ciy7;faOzQ6a!Y~A`pzSBc&^Azt-wRdl;Jlxp)-k8se*|@sqapy_t z3qU6K+i%U&<<4rcyEff7JMSVmNn--@l>;7I-`QHSE%29dU_QO`%ZZEEP1ra#)Jk>r u%N=-nGH3Veo&O#mFL!-&_Ur5VpZs>GT{Q}==4=O+8VsJUelF{r5}E*v-5a(5 delta 1896 zcmV-u2bcJ@3hWM$8Gi-<0063Kaozv`00DDSM?wIu&K&6g000SaNLh0L01FcU01FcV z0GgZ_000LONkl4go2dFcUNR07^8c!r@Vu=0_g9#pf7)^|tpe7nr zHoA3ebnWQ2w!_MhO>_o9Jj@Nc9@o=OC@4-H!j5f+XcP^K#D7E7fv~nffXVjweCwdW zrL6DQ0o~}8Tq%K)a9{7+k+d7qq)C$|O`24P6sT%{0X5%mhBwj*Pk0e(f|6k-mPP`Uxd{fZ6dI5Y09Q1E@90>)M-IXhDTjGr))YATkFSHV_3Ja^jjWynlu7|u z-;r||3Bet%g!Qj$F)1-_y#|8G2)YJVFo2|Mz?I_To1R8l z^Ks~#DXt}6!tw^zDI-AmC!{R8W+h6SPjLW>?`VKxXH<7YOjl%IioWKX%30z79^Ag>`$UCpX?RjmI|# zjAt7O#eZ&s#=+VzZ~)VH(@@pt#G0>3l7Iaz*7)bh9G}JGw?WrP!b$;(?D7IQjAQI9pCqQ*@HjnqCY8S<| zGVoqPFNtE`jVSj1$d4pjjVp`->q2-A&x9jF0)NU3P#N?|Bgb`hUl1n$&4@>d_f8)0 z2TStx?8Y+3ZD1}~03Nm%mAfb*R|f}B(evckYwx|EPySGHsJAf@L=LYmu zv6QGBVHmFks?WSrQ($`>YUeTj#}kJTSK~bjjb{;J!~)pEB%sUyCd$C7z`J}CNJNg% ziGO8w4f4%{D6kS=U4q(0JVrqG9uzt61T)bA#Hk3Huu2*x;L6_UXw^nSzJ*X==MW8q zBKP>?)owfTJy~Gl1>iv>q?H3C#j1b`tAax!5%~E8-A9DnS`K062sT3D=xr$SjFE>Q z=ReCueB=kPaDb$FEx3?JonT2wV>=;l6MuX5ZQ!x2JL)pmPbl=x1(Q$!YnTL_pa2XH zdI&265mW?8NK?0T`mx)v)W#tk(GZ1hA4)wl!K8iwiHe?kP!Z@CjKBs6+7`l+n&^#C z)emwAH9!h5A^~_130WT}fcyx%Zo|spFDwbG|C}S#{)(Ir@53mQFTmouIZ)Q^hktPg zj|zxu>irEXdgsXvz=KG@2@asN+>2cE0X{|IQzYoy39kmkHTefQgcd}K$rGT!@d)zm z5#(8kBhW~M><yTviJ&w`Z^7dC z3Cp)86Ja09cHVQ|0&Ge)K%RXm@_!sdP&sMTScD}UA)6z-{2rmGmGFvRmK@;(jNPh4 z0`MRbQ+@yik6+13gU2fUzA_d8FL8uIpEO9m<=sx`ItniZ@`S1P!z5lMb0XBw6$T~Rzl(sd}xWu#(a)0WFk-g~+ zC~Gpo@JT)fWA9NOL$WmV9D||brHdC}iFGeWphV>79>x;e6Zk)69rIx5J_KVo$yVRB z5vI*o;xsif0@TV0kYn>CG(N}bM{dJSh=;!C4j8(APbz|;^Bd^Cm~$pTU5Esf8DOd9 z8su1dc_78t_6`cyO~-hY?ti?2PjV0629j;b_6W3X&yEDB4Uv!^asXLKZ%ky@e>!%! zCCuZWfe706*&Lw<`fd`piv#Q+Xg*`N)F&4}{C|UK$hO##ZKbG|-5lU{ncwr1#a|ab zl?Dk}#_FU1ZG@sNBtL+B6v#F&z~cHR_{t~$(O6lhLmDOI@~@%+)PEoIppc*gDfr=N zN!Qyb?V^O00u+5lSjGWrLSlX}kg6Y#cNkF8IsSO*ImH}6y^T;fl>$iUI&#=k&~?%| z)owp80Wxs0d2@aph!%oy0_TE~k%m(@fJF5J%@|TVieU=J9U(z9D#QeWsU1LK?fqXt z@$UkT@b{PjvC-n!fq#bkp~xst{Qwfx5AH?=<^#h&k2!ui{fNXMI>zJIVsP+o