From 70ecb5ce8b60739480ed4ecb06143998ee4e6251 Mon Sep 17 00:00:00 2001 From: Anand Kumar Sankaran Date: Thu, 10 Jul 2025 23:05:34 -0700 Subject: [PATCH 1/2] Migrate to latest versions --- CHANGELOG.md | 103 +++++++++++++++++++++++++++++++++++++ README.md | 33 +++++++++--- Rakefile | 54 ++++++++++++++++++- dist/robotagger.zip | Bin 44721 -> 36069 bytes src/GoogleVisionAPI.lua | 42 +++++++++++---- src/Info.lua | 11 ++-- src/RoboTaggerInit.lua | 12 +++-- src/RoboTaggerMenuItem.lua | 7 +-- src/RoboTaggerShutdown.lua | 5 +- 9 files changed, 232 insertions(+), 35 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7d03e59 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,103 @@ +# RoboTagger Changelog + +## Version 2.0.0 - 2024-07-11 + +### šŸš€ Major Updates for Lightroom Classic 2024 + +#### **Compatibility** +- **Updated Lightroom SDK**: Upgraded from 5.0 to 13.0 (minimum 10.0) +- **Lightroom Classic 2024**: Full compatibility with latest Lightroom Classic +- **Backward Compatibility**: Still works with Lightroom Classic versions supporting SDK 10.0+ + +#### **Google Vision API Updates** +- **OAuth2 Endpoint**: Updated from deprecated `/oauth2/v4/token` to current `/oauth2/token` +- **Enhanced Authentication**: Improved error handling and user feedback +- **API Stability**: Better handling of authentication failures and retries + +#### **Performance Improvements** +- **Thumbnail Quality**: Increased default thumbnail size from 1024x1024 to 1600x1600 for better AI analysis +- **Concurrent Processing**: Improved task management with better default limits (max 4 concurrent requests) +- **Error Handling**: More robust network error handling and user-friendly error messages + +#### **Developer Experience** +- **Build System**: Enhanced Rakefile with source-only build option +- **Documentation**: Updated README with current Google Cloud setup instructions +- **Version Management**: Clear version tracking and compatibility information + +#### **User Experience** +- **Better Error Messages**: More informative authentication and network error messages +- **Progress Feedback**: Enhanced progress reporting during photo analysis +- **Configuration**: Improved default settings for modern usage + +### šŸ”§ Technical Changes + +#### **Files Updated** +- `src/Info.lua`: SDK version bump and metadata updates +- `src/GoogleVisionAPI.lua`: OAuth2 endpoint update and error handling improvements +- `src/RoboTaggerInit.lua`: Enhanced defaults and version logging +- `src/RoboTaggerMenuItem.lua`: Improved error messages and user feedback +- `src/RoboTaggerShutdown.lua`: Version update +- `README.md`: Updated documentation and setup instructions +- `Rakefile`: Enhanced build system with source-only option + +#### **New Features** +- Source-only build option for systems without Lua compiler +- Enhanced version checking and compatibility validation +- Improved authentication flow with better error reporting + +### šŸ“‹ Migration Notes + +#### **For Users** +- No action required - plugin will work with existing Google Cloud credentials +- May see improved authentication reliability +- Better error messages if setup issues occur + +#### **For Developers** +- Use `rake build_source` for development without Lua compiler +- Use `rake package_source` to create distribution packages +- Updated SDK version requires Lightroom Classic 2020 or newer + +### šŸ› Bug Fixes +- Fixed potential authentication token refresh issues +- Improved handling of network timeouts +- Better error recovery for failed API requests + +### šŸ“š Documentation Updates +- Updated Google Cloud setup instructions with current URLs +- Added troubleshooting section for common authentication issues +- Enhanced developer setup instructions + +--- + +## Version 1.1.0 - 2017 + +### Initial Features +- Google Vision API integration for photo analysis +- Label and landmark detection +- Keyword application to Lightroom photos +- GPS coordinate extraction from landmarks +- Configurable confidence thresholds +- Parallel processing support + +--- + +## Installation + +1. Download `dist/robotagger.zip` +2. Extract to get `robotagger.lrplugin` folder +3. Install in Lightroom via File > Plug-in Manager > Add +4. Configure Google Cloud credentials in plugin settings + +## Requirements + +- Adobe Lightroom Classic 2020 or newer (SDK 10.0+) +- Google Cloud Platform account with Vision API enabled +- OpenSSL (for JWT token signing) +- Internet connection for API requests + +## Support + +For issues or questions: +- Check the updated README.md for setup instructions +- Verify Google Cloud credentials and API permissions +- Ensure OpenSSL is available in system PATH diff --git a/README.md b/README.md index 9f91a47..c76a94c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,15 @@ -# RoboTagger +# RoboTagger v2.0 -## Adobe Lightroom Plug-In +## Adobe Lightroom Classic Plug-In (Updated for 2024) -This plug-in will take all the selected photos and upload their thumbnails to Google Vision for analysis. It will then allow you to attach the selected labels and landmarks as keywords to the photo in your Lightroom catalog. +This plug-in will take all the selected photos and upload their thumbnails to Google Vision API for analysis. It will then allow you to attach the selected labels and landmarks as keywords to the photo in your Lightroom catalog. + +**Version 2.0 Updates:** +- Compatible with Lightroom Classic 2024 (SDK 13.0+) +- Updated Google OAuth2 authentication endpoints +- Improved error handling and user experience +- Enhanced thumbnail quality for better AI analysis +- Better concurrent request management ## Installation @@ -33,7 +40,9 @@ Note that it may take several seconds for each photo to be analyzed, so the plug ### Google Cloud Platform account -You will need a Google Cloud Platform service account configured to support Google Vision API requests in order to use this plug-in. Instructions can be found [here](https://cloud.google.com/vision/docs/quickstart) and [here](https://cloud.google.com/vision/docs/common/auth#set_up_a_service_account). You **do not** need to create a storage bucket because this plug-in will not store your photos in the cloud. +You will need a Google Cloud Platform service account configured to support Google Vision API requests in order to use this plug-in. Instructions can be found [here](https://cloud.google.com/vision/docs/setup) and [here](https://cloud.google.com/docs/authentication/getting-started). You **do not** need to create a storage bucket because this plug-in will not store your photos in the cloud. + +**Important:** Make sure to enable the Cloud Vision API in your Google Cloud Console and ensure your service account has the necessary permissions. Once you have set up your service account, you need to download the private key (JSON), and import it into the plug-in: @@ -55,13 +64,15 @@ This plug-in will store your private key and show it obscured in the UI, but as ### OpenSSL -Google Vision API requires its [JSON Web Token](https://developers.google.com/identity/protocols/OAuth2ServiceAccount) requests to be signed with the [`RSASSA-PKCS1-V1_5-SIGN`](https://www.ietf.org/rfc/rfc3447.txt) algorithm. There were no implementations of that readily available in Lua, and I did not feel like writing one. I simply launch OpenSSL to sign the token request with the private key extracted from the JSON file mentioned above. +Google Vision API requires its [JSON Web Token](https://developers.google.com/identity/protocols/oauth2/service-account) requests to be signed with the [`RSASSA-PKCS1-V1_5-SIGN`](https://www.ietf.org/rfc/rfc3447.txt) algorithm. There were no implementations of that readily available in Lua, and I did not feel like writing one. I simply launch OpenSSL to sign the token request with the private key extracted from the JSON file mentioned above. + +You will need [OpenSSL](https://www.openssl.org/) installed on your system and available along the PATH. To test that everything is working, check the `Versions` section in the Plug-In Manager. It should show the OpenSSL version number, such as `OpenSSL 3.0.x` or newer. -You will need [OpenSSL](https://www.openssl.org/) installed on your system and available along the PATH. To test that everything is working, check the `Versions` section in the Plug-In Manager. It should show the OpenSSL version number, such as `OpenSSL 0.9.8zh 14 Jan 2016`. +**Note:** The plugin now uses the updated OAuth2 token endpoint (`oauth2.googleapis.com/token`) for better compatibility and security. ## Developers -Adobe Lightroom plug-ins are written in a subset of the [Lua](https://www.lua.org/) language, version 5.1. More information is available [here](http://www.adobe.com/devnet/photoshoplightroom.html). +Adobe Lightroom plug-ins are written in a subset of the [Lua](https://www.lua.org/) language, version 5.1. More information is available [here](https://developer.adobe.com/lightroom/). Lightroom will run Lua code either directly as source code, or as a compiled bytecode. The repo contains a compiled distribution package. You can re-build that distribution image with [`rake`](http://rake.rubyforge.org/), even though that is not necessary. Make sure you're running Lua version 5.1, because Lightroom will reject code compiled with newer versions. On Mac OS X, you can install it with [`brew`](https://brew.sh/): @@ -72,3 +83,11 @@ If you have other versions of Lua installed, you may need to switch to the corre $ brew switch lua@5.1 The `Rakefile` assumes Lua v5.1 is available as `luac5.1`. + +### Version 2.0 Changes + +- **SDK Version**: Updated to 13.0 (compatible with Lightroom Classic 2024) +- **OAuth2 Endpoint**: Updated from deprecated `/oauth2/v4/token` to `/oauth2/token` +- **Error Handling**: Improved authentication and network error handling +- **Performance**: Better concurrent request management and larger thumbnails +- **Compatibility**: Maintains backward compatibility with older Lightroom versions (minimum SDK 10.0) diff --git a/Rakefile b/Rakefile index fa71efa..56d223a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,7 @@ require 'rake/clean' -LUAC = "luac" +# Updated for RoboTagger v2.0 - Lightroom Classic 2024 +LUAC = "luac5.1" # Explicitly use Lua 5.1 ZIP = "zip" BUILD_DIR = "build" @@ -15,6 +16,42 @@ PACKAGE_FILE = File.join(DIST_DIR, "robotagger.zip") task :default => [ :compile, :package ] +desc "Show version information" +task :version do + puts "RoboTagger v2.0 - Updated for Lightroom Classic 2024" + puts "SDK Version: 13.0 (minimum 10.0)" + puts "Google Vision API: v1 with updated OAuth2 endpoints" +end + +desc "Build plugin using source files (no compilation)" +task :build_source => [ PLUGIN_DIR ] do + puts "Building plugin with source files (no compilation)..." + + # Copy source files directly + SOURCE_FILES.each do |src| + tgt = src.pathmap(File.join(PLUGIN_DIR, "%f")) + cp src, tgt + puts "Copied: #{src} -> #{tgt}" + end + + # Copy resource and readme files + (RESOURCE_FILES + README_FILES).each do |src| + tgt = src.pathmap(File.join(PLUGIN_DIR, "%f")) + cp src, tgt + puts "Copied: #{src} -> #{tgt}" + end + + puts "Plugin built successfully in #{PLUGIN_DIR}" + puts "You can now install this folder as a Lightroom plugin." +end + +desc "Package plugin using source files" +task :package_source => [ :build_source, DIST_DIR ] do + puts "Creating distribution package..." + sh "cd #{BUILD_DIR} && #{ZIP} --recurse-paths #{File.absolute_path(PACKAGE_FILE)} #{PLUGIN_DIR.pathmap("%f")}" + puts "Package created: #{PACKAGE_FILE}" +end + directory BUILD_DIR CLEAN << BUILD_DIR @@ -28,7 +65,20 @@ desc "Compile source files" task :compile => [ :test, PLUGIN_DIR ] task :test do - sh "#{LUAC} -v | grep 5.1" + puts "Testing Lua compiler version..." + begin + sh "#{LUAC} -v | grep 5.1" + puts "Lua 5.1 confirmed - compatible with Lightroom Classic" + rescue + puts "ERROR: Lua 5.1 compiler not found!" + puts "Please install Lua 5.1:" + puts " brew install lua@5.1" + puts " brew link lua@5.1 --force" + puts "" + puts "Or if you prefer to work with source files directly," + puts "you can skip compilation and use the .lua files as-is." + exit 1 + end end SOURCE_FILES.each do |src| diff --git a/dist/robotagger.zip b/dist/robotagger.zip index e59e3a722d42d8721bd4d272bbffc76433c1850b..06b97e6835d0a2f904365655e2dba27152408b8d 100644 GIT binary patch delta 34597 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 delta 43348 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ðLNKCUBZ8bkf{&y>U8{r99D+L&+=co zXBr=+IWYD$gS5=bymRnw0^VhTwK9_i6`GjMDCF*`mc47VEjR2fMlNOp08K&ot4p|` zcNW}pZ%$>QK}nUgrm!=TN8-F#6_!uk2WFh#;-f>Bd0I%*vUT;9vX^+fhr7w)V(CDj z4S0g@>t8|oH;^Vs)PDl$O$F7p@kkI*SNbS?gH`&TE7oy(_&$I*ET8#EB$4haoMLG# zi@G<7I2HPc`NeX*GXDb~*h471nC3sL#pD@MsQuR5;h0=6tYS-gcO|2RttrfIm5d{e zU*AYLe1J=mzm^pU@y~u**ku-{E;L{@>WgP036hHSa@+6^clj>FcSNvLycv|!8d;Z! zZ6%qOE~WJ=nwf7CI0gL_Q{+01M25@Aa+TnHFg*a}lzmnU*;aQS5I<&G5RY%fr{**2 zvKi+F3!yYqcv}Ul@0Ybhf9^!-iNt4W_XWKtah_pGx!U!J=+z^%T=x2 zCHr}2r_YN)b<&s*@Y1tpoG9)=uon%B&;9ET#$$K*g1tbVAfuWQ(k5&XWqG)O-os^% z;tEzV%h4F^P7Il96V&fvEEqKSPgxKrWE3(34m{pkogJCC$TeRq^O0_$MidVnIf+In zDJMvW&QlN3VWDWxJe4P{rEDS9pAUM2l-bgRQ}Qqs`VgKKAQ`4Yo5$rqQE}6YW5G>Pg(vYC^#do_y`4!m)<39Z80;ja)=bwz6fncl)W+hXL9FK4~ ztXE88Fwe`dF}4X^8%~(|W3(MJaYoe;dIsDlr8>eoRQc2gBL@i6r@`{AVmB}wT9OH~ z33IGw_m$2E2x;8=otiDr*;?36FxJ;bPv4PFW)hSOk6BhOuv!ov5)FCqzX?XTp818n zIvT!JcDSR!FrcOSo`=1RvZQ@xYJ^Be?i#-nSJ#4Kz_IEe8~yp9u%XNQX43B3lW&(W z`rOz=*>oA>E?She#~D8Z^M6*${nzx<9rD|hjx4sq*H7M* z2=x47#4>N`thHRPgXZJ8+f*lJQ>h@$?D16&M379BkN#r0topfM;#qgZ=e{yhXb(ZS z*))s3q#VRAyKD9F{tkCh*bn|qR3S#ZFxROQHq1O>ANPG%2D37VnXWjY=riI@Nr!cjSDqO!oSl_H z7M$FDaj8j!JqNryG2*;-r4J&|8QO@ zYLI1|<9(@e^qHfeeU`yk(H(ypw5x*r2uC^ebXuuNRK zs5Bf*crfG;ECGM_Bu>#aXVln99eefrysUdEZoSW`gbVFY`Isnq*u5KX^t2496y$BP zu=U)&UZ|}Sg&c*dD9rBq$ubCSxPihDEAUz9TYoTCsN0;EfIEa2NoXUS!NzE)X((Qx z>fSiwc`z%xX>pkATTYTzL2i-6+o()?QA)S7G<`>J(U8=Z(vqb559jtSXzl}b1V>Nu zHKlGt@NOyZR3#!xeN!VCE`0)ME2&=86>s!z4TwK;H;MUqNGu62JWilHR)n|ceyzG7 zE$nWbxt2`{_2hJ0*JCAT9*kvUv4t$aeIohWruUKduhFJcVW*Y}#?&jmd}_Vq1DCwV zpZC7Rw;oHFan&PxqVI3u3kqU0T?ka^7qu8hFyY*w=Wzy;!K_kdTY_P=`lu0QCAqep zLK&>iVvrVAH+p{^L;p!#)W|Rv_Dsnz%L$BR_}PB5v|ThjMF?G&L4CrFH26Fa1V#iY zi%1A*KhVizM&?6qMyB(HXRPE=Q>95kjPPH^yXgt$LwuoOP@`=FUAqW*OFvei$=J4o z$AqA!T(Iv@Dn`tC+K4v*~fYd zy9(z&N(%9H%6~Ts{s9kC4!koIX}UCFW2*sL?do34=*!AmoYG)TVR_aljOE%W@h<=OPh z53Ig{d4#vu7CF&^jzE&A;Iy;gx6@+*DCVhYuZX*_?DTFlURFS-H(P7f&gT;vv>ApQ zLk6HPeNjjZvOBNE-j=5>28zxJddUAvZA(~xwR9-T=~KVef&gkjn}rt4SsKqv!je5- zFt-NXzs<3G5t{CC6_eeAC=+=4`O7772JCtEBW8z?zz-&^K_FS3fQJq-nJlGv<@r3d z2Q-~76%jIr|G9@p*;2b?ATa1eI> z-5d&UL0RVH!Ly80`(v6ou2=k+upo(N5JRT&ZQoiJ&<*pE90F+GvLXnRIb7ab7S?Jf z6-Lx_06!pTtsNO?IWD|E8I2KB&gW$8^{tVS(&9s7#N+O)GITEP@J%(AF!J_H);iIV zT*oD*cZP0X)GVV69J(yXe^85qT+Y3(VPOoy6^X4iE-WwBOt(XhN)xu?ZCHqinVf7W zi0dPm8-;~kc-UHlbgZ-tsnkiDlTTFAjc*oB0LiT|a{AM*lj-32Ft9C-(^aBIi%o+|y4;%WA-XiF!{sisuTB+UU1lPmH{~ zU4Pc0d;QswlOfAOj?&Ansoo~Fyzm!R{Xn2zGt+1B=qU)ZL| z0leto(7)|@4zx4fx`Pm5X2DzhC&=vZzOFd+Kkwh*g0g-_H;7-$Bnm`cD0$3X+Gf-h zIJ+l*6eH@hZCji2Nxh;|#-gyoYIdT>!4)5fehK>OzXUXrn4mo^&mjz$j-lCG5Y&eY zLlm6|X{DY>iH9mCdM0X8%IHC+@eKsJ0~mb(bmj(nAphLnc+OA$vI_j)^}%8>pjl+j z5S*c#nqD}XSwWJt8XGwsMu^J!!T@z6j2n5*<{?yNu_^pLQYN(R8_37h{PyfQ%M8Vj z4#S^*VnQUBJN|}{9=LoIAH>RDVL+^@{jOtJ&ROK|$5Cw*bLGX`)=oKAU$m|s0QAh@ z+KZRZ`*C(#Z{?UkM$F0;lTY_@hTZSL2vx6jLdsNrY8`3~RwXt^Z(faJtVmd`QO^=Y z2+__C#S8!X;#U>2xly1u@CL>M6|{)Do$8J!I6A6jq0jRt#LeBy3)+X`TYC2|kbdI_ zh^Pqs!?t}}6SWWK8nsu({x20P;9o`C@zsHPJi}bbQj!!BL4Q?u8G8q!v`J@pb$u{p zLS8#21)2r6?;pDE-77#?Tg4cGMEq3ACf)Qmp|1=GF-O$sE1n_o9}>O2HH1~4H9d) zR*vd?geADO!?sCOepPGY2B>W0jtui9rm=m#s}IEDaN`k5$@+Av!yZH z97bl?G_;5wWIOag4UX9&CeYpGv5!U9#`EtT z4E3=iJ=fHld^Lu<#Kzl}xY=8=<-nx3H5%tx4QD69$L0ag;2kheL&$dgU%zxhjIeo} zPJb0%?oc4ezP&HlcWMVV@26Z9oV9H43c(?-vD)8>F8Eq^z@-5`QggRmsgjlpF=!9% zKX=3SR)4BiiFViU47r8I!R#5a2BSxZx*!WQ;od?RS4?=pBtqAB$p;-Vm`pCaJs5}> zl(s-WYw2Ol#!Mn>8k8<)y)Z!8C#!(IBOWM<;skWflZx__L>dw_wKJXQwQ4i^t#VYKY1^G9L2Vj>S$ntJoOq4EHK_jiQnAPs({@_{-F04GTkOkfZTQR$n? z0RcWJiYn%f1U4znwe3b2?uzcD7Y(JeK43Xc7GYR zAYQ-K1{iR3`6DQpEpHeV@(G%)5F`sebwz?01m8^+Bz~cx>!|jA@3r(Fp*nu+bvgx?jWKW$IB;0+-e>$H@;V)ZtEPYA>k!HL z9}-oVrdPIjZm7r5JOo2jz;q6^I?gk{hIBJ1qOR6WYB9P)VHUa)!U=O7lG)aoJGH0a z{1(?$*jhBW(Xtdw1_K-S_)jbOUypjS7BTYwjZ9DJ1^gl!_5ijyyE;+f;laHya7-aFlE7r)Fzsbb zEuY+B7l@P0pdggICU>rKn(N#AF0X^l_pLo|#EFtbMEWD(6iTqVOw%VlbBgV?)?2#X zoJA;HG=wKr=_cj@77VR**^&v_F+V_Po3n@1%?nS1+U@UVuFq%ZyNB}gP0#ht`%u66 zy;pFigC(Ip_>KkkeUYA*aJ}DZ+LSp)NQ}`te;`Mg1GwM`#1weSF;knmq>VIoL616f zThoTR-*WDb4P=hk5ivDS(;&;V;Lq7~G&c<%PA!IMeFoJ`mi(&vb$JcdV0J)@e%jDf z8;6$++iH&FgtLNU`INvLpwgh!d6kKFqxR#$)_Oj&QnN4;POp5u@4!lIAY1^??G?jlO9-cmPT{`>HMgz0z)Nha&@mPz0fnhwj+jpri$_@3?khUQtCJ zwJrgg3W!CAm-#T(oh|^SRJmH93F`8Uhc4G9v~nG#x{dfU(~~aO;iqjeq_z>Pp!G~^ zN2#4=nE>dJs~%yesfpMb{bp5iV~pjEtob0oud)rflw!`uHbP=f6!;8weY@^<*Bs+t zmE25a&UHfz@G!{tg}ENLG&11bj6a~^=RE1;yqNJhd-)iiSr7Cyz*^I_AJ%m?VbrKs zN9oyg+VnhWb!gjeIeKz1rYUxQFjk0LSd(ylj5-XY<#DBJUBoAx6!>Wx@Y4oAb3s{Z1>Pd5SeCn~Uu8bmfT$Zk>DfRxEu`tu6ZumWI+&b<{a{jpm zDd2g7P~AYf<+gi0OYM2Jvxrzq9^QbLA%FNOu|to83T|dumO{mO_PIWUIrAIhDWWcY zrZmSM-M>bnFoO~6;q3CO;7KB+86{+$1zP9CMj&6A1fq%Z7jQ}9vxPsLR2W!0e(C*- zHW6>yLOR(4VO(7fU{Z)bO*lx#|71@MtYqQVO8268=E^|-$F8=NpF?}GkkemjZnAp# z5}AzZ>&cW(>Ot~LNQG8CE4tWq{c6UV<>>MFfe)+haoF#E+#Tj&H+w1p6bbfF89~%F z>RH0cvAL{h13X`K03tLn8hSw{=PTA&%!b=wQmz`8Io?H z1gBq}M^iiMci&xjHX3egEeX*cwsR`dj|77glDDV1p?bqh6-Ra8^jY`L_k2gQF&s`Z zO_{f__DOfM?$mTf{e8r;JUQ)Srh#3}QD?1sE0^0c z^`B_Gi^&=EXgG0m_S@AIaFQv%ot_qA)b8&UWQ|2e8i`mcY^k(W2{Xr=`{O5vFQl@p z1p@QS;nX#q)umn!&ed-o3R(|r25ZFK7@f6)g|#PQlVnL}lI@WJ)|PD=!7PYdqKFcD zZ~BN4z)@G}>e=ky{onAk8O%C-z_R=fwQ$94i@(V)cJqcT*$()-5`uzS!gkmt?1Oq# zh)s!ql^djJ`4MSHFxT(&E?4OJapLz<*WhMYp&K0ro>OSi5d(gS=h4=0{JPD9DXbD6 zD}iN^pGWDKRy+fw6H# zd(2%2kH*b_%)sp-AvT+KWTnGy)`ISng_?Oag>jmKE9;a{xe)5fE^f8 zPX&baY1EvKNXC{*9x~q8vgBBb?ZH##x1^fVZ7rB_YO?0m3*mDgcuhE;>s2tHSPJ1Q ztB3bFxJ?lMXOrkiV5;lH3|rX#xzbkJvJ-pMREeMcn?0vkYQ`ic+&k&uW>rnrv)Q7p zHH_BimKse9N%*&&wyE+5ss)Z4V8x(txO~vaGU;rSf55~oA*(|;aJO{)OMRBYCpbaK)x2OI#`#DeEk8vj z%j2sz$8moKB0uvQ^P=j==&x5A)rGxXh)(gp02@Zk$C8tGN-IJ`xIcRcNNoB+qvv%d zQ*S?0az$xtNHs&DC8T-)92UbZx$TWY#99|EEjD7LHeAj}^57oOhNT5Oi zTN-oAc119T0wc$HW39WEp3BGe-2I5g4t^r;kxaC`&$y+8y_UL(Exwt3zpE9Cy0I_4 z+2VF;miC7bQrVq>OWP*@m5>$)u4nT)+CPGG-@sGPYR>Suwz3}}>apsw{liAN;OOS( zU~dMGC`vJ0-EIyk9G0IEZy^CG;POg;D+WJe_QYf8T5-&^BR z%xLm3pTxVjTRk+(Lf zJHPou);XaP2xpeUKXXGZB6p@*K=#((heyW0%Knu)##=z9YTsWxv=|v0DIPh9>`bU) zE7AeJNMOlLBr3>wbLNL~CkCk`)4djyPG#uWPb$-0xfcUOvXUDn&(@7+D$XZwl$8i| zM(OikI5dO0pNMCJAHN_m$Ng1v28`K`St~g^%EJA_Q+O@fQAqc7iG8dDWeG=o+6_y~ z3r7~|6AwmUIx0bP1vqKP@EG1N^4Kd1k+uQ}t}s-A`Zs5NpjZVSL1pqLXS z$x_PgWLgA1qfQ~OpZ1Hdni#v)At+D|jnYkI`kzwuq^5z^})T>|=a2bEIwX=DWFz8eyxw}`Gro>T@ucJaOcEl21 za4HOh4RS=3V3IG_KfoWo#N4}6v>K5p2ib4u-#h!$R@;p^b2FYXG44GNCe;TPK((m! z<7+$rh$>6UlpR&Jzoc5`JAY##5SOl+3Tk!q-$69gmL5PD-1*I|^1ahTA7eh&oC}iF zUH+124K!_hydWeklogE2?8K9(w`##~`Th+!$iI9idA|LGzJ)~oZXYZMS&pj9BI5qG zGHRz4Gef;DNO_C29GuFAsj0G;TOATB84HQEe`|M__og%^kL*fR`l&(GfQM6oExi}?XVt+ep)X9qtJjg>mY-|6p(VH7}j;@0UyC zz#6GxpGCkqPQ%YVgFxcJP^FtW(6L^`H9Erfk4s`x->RJu=GkC`ns{rc>d6LxQqTQK zz~`o%M=0$H&$55~dQ^Mu)~;?gtVSV$ma~SFn|1MHaV)WT7uJ1V;YHpsp-tS`a9<2= zXZh9)8Q?|z5*-}&xy_4sCcITc{)Z8Q%Jp$Uaf^uDrw{cdK3K=~(Khri3?z>1K2<8B zAh}Z>g-&d}S0P(os_;8w3ibyenb!eNKmu)4yQR57=m(E3;yEU91h-IMDJpan$FKb9 zn|Vr_Lz**Yk!wFMzfGl<+D4N7Uj?u;_Mm^^@I#bu+gy~Ui16{pvB?A7lXCv(@uU$< z!gN$Pw%tt&lM>RBPNPVI-n(~djpz!`oTzSj7mki!g#)FVR&Yj_xk^eo zAMYW_gxI}Vi8th{9nX%|_Nr@M-J`-ehM0_$x#K;2Op`X+Rc%Ck9lKf(HWa5YnmGL0 zvh}c5Y*#di*;x&1cKPqo{XoiYyAl0V^J{ytCj8Wub1vLy%ys&gE4RVLN#hop0m=O3 zr$`!M#i~boyS#i)cN-3Xo>wqYB(h`Oq9H707r%VXm)t$0IyI>zJh?GN4}+h6eA@WX+*w1K1H04Idw3sDD-M%A*Q*Z zo5=gG4dzp>f@$-4aqz^2X|09&&}Q5bhr9BUB0hW(DF9QrZ&VOK#iDH0U=jUDkyeZ( z6#GL}=IwOD-Y%J3g*IU-2xEvRoQCffxiT%7=7p=gj`#64J=R>+*?!)4d6gFm7|osP5%mvyd{LKCwakLTnEU z14XA?cDV(%$`>aXu_3h&mXuYK&>ZQ zVc2#$&=B1Pt`|vn@4m-z`cbpH-4s_3u{ILca(?$_aM=pA_FIL5ZcF7o%aD!7Wop~@ zW&-es!(bx~)b4BXZp*S89Gnp=AffL%znG9S`c~l|O~FPo@U%=pp)}O;CW1N=mC?6Y zK8KK@g=SYeCv_SXEu8;H_+~&GWpXHe^j+cdf#lK+vQVAos6>%aSCn+Hkq+e#eUQ)h z+x^VO24le{qCfkYR$>SE+|ZximV=yxe?kD<7JgbUUfnG>>p%3(A3`mae-V)p9jW^W zr;g&5k@0k)Fvz_X z1|x^cB^aR0n4QU>&d>yFO}e37$-Ob|)Dem7`%kFz=5OE0zY#%b4XVRgiaSd{vXcOD zQ#7ovNX^Cu7(7iZvU)zUNw9|Zl@T9#ocfd{ioI^33My_O_>*5RuyM346wWJD3%$*X z$-=2qk-Ps7U+)wgNZ7S&$Hru$iH(VE+nCrkCdLFE+qUgYY}>YziEZz^@4>%o|Fyq; z($xoD)xG-ZUR}M`eP8R9&5GJ$+lwISds-P42Q5!*mIRL%p^g(A>WCur{QgGv6mM({ zs8t(X9~p1SDJRYG8jQBFuH+}@&F4(~^v`+sJMwyi6uzRZ-Se#8SWb%MVy*yC0?L-{V%iLV7BPL zS0pvS%eJ`D{lCw2#YCjQn3uN*-ubv%Xx_mh6qkAPNFySSsvQwQQ3%#=q0|=1_Q)&_g>g{Y&su4u5!Ax& z*Hbl3ANVMYx&99e=uIttm^wXv{fT!psUc|+#9HG5;YINiw^VWy!o@+ddJjkH1yo~)c+kAwW|PL zJnfw>^w}FJ$QIc5&{Fm@&^k3Ds|!-dn93DHbB?kaSu+LVUf2o6FPkuL@r#cx3qB1@ z4n@8S@>WFst(svJb$lZ`mNZE?N*)6DhqCwKQX?%4p29W3EIiGe%b{Tw`&{iGSnmc5 z%UHN{|0wW2hopMwtAmE(QvI^+8X5tc#LRJHzrDK|V;5mY^2yqPPrt=#8w>T%z?q0k zwrvlhr_LaPfbC%TobP@oU>taU%<$XVFy8ebn@By}h|S;pTyd_Jh@R}hKgc0~a$j?) zE!V5icS&=>vp)$~-`eowPx`CEo+xWgGi7X#7f1F14wsX^#v1_iN4_A=rXc|Ah4E9M z@;spPYono*LfS&3@-Gj;Onmp?`Q2taG6&u>x=|1;gJRP7v@oE{1^zdtD#oir&p`QD z?Z^6d6=%40ZswaK*Yl+d^)7-xk;g+F$9VA?B#PQ9Oje}5+#zvAe=R=FBr!==`62>> z+`#i(M1-6?v66u@yupFXYB2y=9y^3GZstBN{;Ek_SypVoW-8Rxp|dR2WqAZk-Skzr zNmCI0R{m9Rxmej4J5C16EUe4JE6;UGm~`iPhdB{HxoeZuo5w*v*Dl#C@rwGm6=?4& z*?|5ne5_tyFd{{2G?cF*tBU?-h{PJUlYPe*a;z>*(nHc3(dct+wE-AvRLQ({)N_fi zuMu1;u=#dDs6Z$HjiyT37rktAtYp(V8)uj?FN-LLJ0M5k!LnqZ@r&yk8z#~@z9{mY zxyYAgx#%4E%X+p5D~oDv4rjiwOuEd%rjJ8yefB!p_xSXp&7E3v7ruAN{kVC_bHTag zI_cVJRIx8t%OU?4Eeq&!D;ryfUueik(f`>EGx9GZ!sV`DIz%H8%69SlCM69l_@SHO z9K###;FTm5|pZj zMdwwQNCsB!O>Rz5j|Z((ctL%A(scMca&WIuCv35bd3}AtRBj-H^T)SIXZ(B}ZVKe0 zSq5EWMYAaru-VKdZ55!rd9C!)lIYL+e%aH_ma?`HoyI{bf3w2HX?8`2!?rh#GOxR1iH^eJf$W7-RFUSwjr$ex7de}qsr;t4($eiH85ezZ}SlVm` z4DckkZ7^7AGMYW}#OcA>U%gaO3(j^};?Uc0n2VHlk?=q!qFo34DG0lCv#9Sq-8voU z0`eJ+Rec!&N}y_>NJ|q2OQKxhU6?TZ49mMs}kmYfmG8uT$oWxs_W{A{2* zSLW7KfK!I*F3b9xFfmVN&t>t7;u>M?_amEW^+~9x#cFMz?E57|ikE$(^%EQ5B?FLl)Q_7s>%EJI}B;M1&Wmard13MncLLZrTjV3X< zaB={pxJ<8Dlm-Muq# z2ShD0n1llFBV_MZ^g}}svCVp9K)^-%O7l3kGa;QDrH!h#pKw&P5wL=^Ooh|LbP@mA zC#M0bb#v9(lPKYkY^pdb({>KXbji{Uc73Zj>s?D@&T=r04HvBCGZZ_W?u3;f7;uf5 zCv*_}VHO1r$0H`66rugxE(ZYO%vr>@3SA+GpP#b~cS;aBb z(wz#mE5aG%wud(^gZYxYi_NFgW!eR9)`99il6T1|Nol-6%8t%3n%; zq-c6S2%M6g&)NK9vHS;6}KRn1i6A-6K!}?gStis@nztY;^Ng30Sn` zQyN&bv|HRB4xK0J6)o&m;#EET)}h;AAc4fzRO?kcJiWwIZ9q2Vl@cs}Ie7c!6et;{ zolh@g_26IkkY;dCqJe!hgGEAFT}k{iOkbRGcTXdbgX4@P-Lde!1azcbZ6Npkdl7n_ zEO@9R(@4yi|hM*_95bPXBnUFm}<{%mD>O1bw&cU7` z$*mo0;fYQ4lU=IbxBuIHUkL^13-9J7k?(dX**9$szrFwk9NB3FitjA+u+v!{)52gq zO45YQQI5n^rskWWd|G92>|+)v`!HrB*-M1*u3Ap0c0O{WsB9yET+?jNkvN5e0ZRtt z>4_`$8eH&aQ_{_RN-tuOG9#r;!Gh!~b-SMbZmrO8{&5CDt$iFp_I0b+vg5hky`xQI zZ2>tRtZLz!R$3kqwxU5RBxK-^HuPi&O6eVM1hvA<8WaXbCHQi)4W*D1G1_p1F()-R zKUKT5*Uwrz2%}^@c%@+wPgkUGlJ6(t&UOenGt-A;k<%h$u`1PBnlBnXjYw&NZ9K@P zK(vrk2MDp#IGuTt`TdF_-*m!L3=gwnXQV+W7bdgis#n~DR2F*X+%wHlt4*n zfF*&F!n(H5;d3YgVN>Z5Pm<03)d)5FR5mBzUtmG(okZ>yDBC2viuX_!Vq@UVP@Q;~ zuxfn=If)6p74RT-1X-jzLQ#eBtwCV<6FM@Mp~f^F%b*;HVan(DpXIQhD)A`@h4)8j zq~E<`SRKxkh#AgcrW0jD?yyk)THN|P)3_$9W_=5+?7;jQtRt}^1?|K+X{jX z4es#ij8{?_rxkc*m{()(dB=YpIMT7m=0p{!Yn135pH4ZugxF*>KM5ZCpV?l z8-ael@B7Waza)>*Aipf;gs~ryh`Gi$tDFUC;{8xa7GtV7{riN zf1Lvub@4{)qt}W7veB)Am~2Lq({tCYX^k7cQ6hUWt%BXFSZm^2=iVy@v{L4dVOGL- z=~(cK#!PN_58C9nR!MBM#+~MBLp_htH<+W+Ld>!Xw-#}RAMq**b;_Rp^PhQhg0Dx+ z9LKIxNACPqU(0E3q=`9PkFFK22H%zzkHb5@ z){R&#_6;eHRafTDi)mg=7|)LM>qn;U7!ZY6z?u@-p=S25?NAwc}ChQaqD$xkUtruRC<=i$jotJKYxFn zmhNJBGYnID@?Rn`kAQmQ4B_v8y;ng2Thw-w;DExmY*Z6z`+0BM_f4g3aM(kgr*BsT zkRRm&WHf;gHdzcj`c%^p=8F1^Ly&NQHcYcb@4#(8lK_r>Ay_#F9VCRddWXO^YqIoF z3UrmV535f(XH|TSYA>P>4k&v|jV)-iMlUVCdUdz#+iN4#@)fZA0M!is&539pWCxOP zxT_7rN7iS8ZhZwr3&W@Kw%_!lqXX0h>;dEg?5r-OVNMcl(M3dQB8)^OqFERSHTVJj z7rk}ud-B{U^O1yWB-zD2gV2A{8D8BdNO6dwJ4Y&>x(GcHQ8z07kqn->iNq9D(upGMt1s4Y>5M0-SF|Te{sS{W7kS_y<6g; zsJ88G={(?iuI6$!HlY`5vRObNKnIqmU_oe>g6E_lwiSBFu{QR7C~!ir<=`NxdApR> zzQ>uy{;u9FRe1^tCapw^4aXx!tjE$C- zd)puSC$-)%Kp&5xe*<>W2az1&e)-Y-xLd<%d}w1ujmV;9ZPg-aWz`9DhNZ8ZvLprG zxp)2yoZ&C$EV)xbv-d0nPTKOY&RG<+@q)b7_Q7x8W=>lgTiGFpCm(LZUp4nwjtnYQ zp1$oT^-u+SIHxy)r2)lb z2!h1`X=>Chh}Etmgz-=HdHeFx_jqdrg-7N9v5klI%Iguf030hEFn)G3-E&Z8VBRvq z2rffGAB{m38nU{vMrs8^_2+6YRdl0|Qy_obUXDAZZx{-7MsxFD1ErsSB^0U6Cw)Gu zlC0fos?~>^9l*Lr!r$vv*zlbKQA@sJ--iHE|2}qu>S*SdSJ=ri3l}U@0i`q&YpgeA zN#@BFYb;zNQdH3z7f;&tv6-yH>uvBZIAkDX&j1rYwv#{&1X8b{Y!RN!(6E_bizrNU zfH{*z?iPE25wkf}hqVko>yI*~wmZVm15q{@kr>M3PvBeoyMD8(HR;hwphpD56{PC3 zA>}q1o%T_0v9|iC@1a10{dSL(8~(KA24{;npPqQeS0@dVgkYFB+l`puCvo-)5kVMH zHXRYc9AUO=jj9>SF^ZcxsF>o=^7RiqT%$ZA(rp3_azSqcCuPYeNoJ zkqGeo-@qBuGPyn0l;l$+^z@Pvlr6ttS9Kf6E6A(;f|O8nKy!cx83Lsbb#)hOsw^eA z+CZH4)QIHKA#X+m$(z@Z_dXh+^6jaU|5ymezLm{hhJbCPS~^mXuTuVyM=idALqn#$ zwUy77`N^#e3eT8X{vY2DYuMtYjMjULWQDhH5db>taZ6a6FEh4yLTGE4&}L1&*1(?9 zt_R1|80tMd-3(P#xrYk-fj6D2W0v8UZJ}p%fYwoWDHtv|pZiocMTElK;|7 z|6`A@>r{;b`>$5aC32Ip>dR%%_XRD*|F2doEDYg4PWu0WX=)QKi{!`fEl{t4N=(+S zlJOeMEwGh=&Ui0NmMkR2P&Ux3BXxb8h-G(6y0h`pge!Bh_t!;F^APWoIjJqVZXlN| zDr(8EJeA;Ri*pn!&~e%yHqHD#A(LOI)DS!>Wj~_tNwoULGsW0^cC>%r%49+LocLHK zq-_EnypKIAZgV(Jg{ZJfXn4`Zlnn2D^QO{AMDdluUPjC381r*fd7t(XKf{j+eq1w~ zC65mW%Kx7?#DEEBOBWgh1p6BZ2;P5#y$FNI`^J(` zRK6BgR20b=D}J@|dD9~7AfozJg1PrE1cE+JUtO;K3HRjYu%t13`Zg}s9yjSG`}4J0 z1GTFY`FS~cIk{2e*J%@*=T3?L97&w5 zL=oHe>TpQ&(V`0RW=rMycNB{%VO$RoOswYpx~gA->>av`cS$A255!9+cl*x7eCj-y zTn=}{jxPBXs%&t3OniIvcQJE_kl!n*!@Le;s@iM*iufIGGwhXutritiY?1HEEn?W+ zwPa*zQy5NmhumGRmN?D(r0~@{dmtwO7TKgdNWZ_^8#z4?e`79Y8@W{`3=P3)D1`aZ z{Gj8H+g2!6xqCd~8rqzU(~+d;OzCP7YLnZ(+qwWDSa`Ez`gH~ZypJxWf8WhExX~)i z=cGy%0B{P+DPOk*4ES_E-qk9>V@MLbHjwKvc%f>ib9_1Pt%|$j} zyUUWszzC7KUl-Uj&<%?CPoOG**)5c^=%}?w5MYObac7noEn){PGD|d1b(ik;l^9S` z$d9+96vv7dKEA6RC6Lqoy zdr^-SdJy+9MwUb69{KGMcn>Wb=Z&cD;J(g z$_nF&L()|0Asjxdj5eAGpfs16BRBeRyyx>!M?3jRYq6FCo{Dd2q0ZB`&fB(*PaY!I z**=!rK&QRgoIzL&YaW1~ltjt9jUh((>7j^XVSK}}hGB#0UTay=fu3*cSs0p7#$2ai zBoVm&Es!LYw#!~Q7Nz=RcO>{iPml=>FD=~de$Ued;4^e{8WHsutB-`X241-<_FdiX zHyMMZG~HPk8aKAwZtrVbwiJ=r^|4x!Y4U257tgdRX2E-r7J;Hnz+vtOgwVI{>WoW>`<)DuMX*oq(6DTx@Ke8WV)&v1~2u63YO}+#_<`(7?X; zwQ75M=DNcW0 zI2bBFWKX_5Mt(fz^Er1(H%C_sy*;hfGr7AxzrTN!d`pZNslWrFm9oVIagy$u4j>ZG zmlFAjgR@T;fiLFoD>m^O)gx1GLbChwkJ+T{-(RBwN=Hsw*ys%WIct5Iv0yHn2Ghoj zO)$)nu>cMQI&2T!tyh(BE2ZTnPus)G#%V~N*!VnulI>i5eP8FzJibTB_s3WLACzf) zZeatKOGxbon0Zv3Q(g}#XfZgDR}30&;FP_sl-5w;tG7tD;po$#0grzC;>6Tw>LZ#T zFoxecJ9wQ6e)Hq}fzOY{2P>8BBoODiVw)iE-34w1+!5eeV*)j2ZF|^9vg7%^==v8L zo>0!u?%CD03MIFSxcz1$_o|as+a?kO5+lNdMShni&x5QUpTVMWh|JCZ75%=2c8V<- z@glHAT66no46*u4`1d~@f%+lmY1%bJvcSO;-=d1Jy&`G!Dkhy~Nfc?v$<%YD?Z2;S z8gPK#aH2vE+8+Sv-ZZuu!AQ`Tc_3PxC4Lu!mX2B$LH!~xPkch=K;^)E-(2Q*&6#vI zgKT^eQE&N}Nu}(j!k&I5U8ywlT=uW%Yld^?;`08bF+96o+lZr(5K$KU`&M)DvF@@u zs=gHRcciPE1Pyl6SJn@3h@=z=1_U_9lOe#*Xn4M>RGiV!D-1VZ#V*tq+0$k+q$o9I zVxUXx{b}u__?d05KS|dHdQc=;l5+5Hee3f|T#)@`Ng%t6nClOV&bb-VP~vG6`GX=? zhidws#qfn`v`^o$M^h>#(_!hq4Jc@eCTeJCrP?|1?dDy2guBVsfGuVpbq5LcSsdcc zi7TJ_`~M$drJ$femgzmqeYN}wk_$?#!|4GNbu4QGXwPe2uuI&RssnKXM zWH#hUp+J{fAXclP0@5i5?x}?qp=wGHRXP?ndPe z5%jx#o@BfT)N`vOORy)-^Cs5}_6_)c;J12zPl+5rXxbR>J+^uYa)M|}taAyqKIjd^ z9R+3@=_VHhc%cAi`Emp7pGJaA5CJAe!fhza^FpPBWNCtF)_Hi(FQzg7eo+z38-F;J z$veu%pU6i3Nyk>j%@g4gxmOMO^ZqR);AbqXQU_kqCZP;5k67rOk#ZN4SO<;~>EPhc z+hLA{>ZrMOm2vdv&Fsjz|6JFATYyUpawb-Be<}kW4oTMbYNISx0)UUuN;vhG6< zhf5@U9bq!Vk5f2;^g^O{DPn>2e2Nm@Bl1s2A{yjE?BjyH?k^t#N5sv}o{mP+bD+&+ zns~K1q}heQ2a+i_$g)fXBbF7~PapCau%mCkg7SY)+NoVoyq0%5APK+B@eWmwe6+tC zNg)7k>nXuVQ?GIbAiZ4UISu%s@>S5siat<32!#BXSSPK(85r@WZhL;*;_L2>%jTUm zTpZT1=j#p2X}|U=p^|P2lV=(i7)i;%Qztqs5S}Bc@TtivQw<35nW2r6%?@Us+^Trh z{;O<`Dd*L3M9D1AVvGpGoT*TxO-SOiL<<9sT!uvxn3GgY=1XNT9R_Y@tICXX>wT_u z<4PTBweRCR|K{kC(-w?kGWylmP%R`ms%+rtEb!NAUa6uH`7s6* zbVxh@{6}{p%+0gyL`hq*UnY-y>X>~JUws1qX9Q%-rD?0h13&s-mZFDKzw~>rgGx1R za=89NN13bBsjK&ChSb;3CtW~8(kAA~N8H=IloP0<1o3J@&<@L=ite!wA zaBnEuW|XFxjU`*tub-;}$7wVJS&c1Mb-z*8 z0{s-{i}9(G?~b+4-ytg~?6rQVN5fCa=+XTcW26S!QcTq_@nlr9>i5qlVAC`KrXn?I z4lyHD-}*Z(5$Dd7u~RcbzoP<-X9dwB)AEQ@zc7|{s93e zKX+?rp}C%6gYk4-K9XqaM@AtX9-P~;{w7!{PrG_0o<|V4>4DK0q;R!Lw?R>9r5vmjb3(O2X1Dxl= z_ZB)J+HE@&yte|H4i|*4$OjV97J7wEozXXv6+n(Vh`n}|#CB^-l0V;>?0qk5?EOB``1p&_DEtD9oIBhKdZtAH+dh$&Q2FEFEk+6i@ zKCg#s2GK7(itAxt*3AT{aGLz#cF%3EH0*6Ef0lCO%hxs7ENk$f2>1A%Sjc%MxF%Ti z*S}~%trptvTQT<;e~D{C?e-f>v@zSPm1}!NXUQ{N+#?2fvV^Tss{9i!Vm~I^c=DAl zhUb2`wJHR3cDVB2ahzL)`G?i_m2GlO9Xg*1G({Q$g__L}foahA<$kVv zm}oo=(BsiQ8OU@m`hva}zM=#))RdGlabFA~wX%aSUDm9Qm^StL{&x<^M?LTG?RBFT z^roIgBvajqQj-90`GrkN@|c?^esP}rx+-{MfZB(OkdQ_`^gU&c;Z-Ld=DR5SVkpo z5sV)HKJG)K^egcv<(Pe&wWi6O#Ztw!T$@T!!Uq1|!8MaPs&qMzaN3PNfEL+INGUak~ojHmbQp>5N8&6ut-;~s!$d?vT6hYCz=}FA| z2w`;$@<%A(ru~7z7V2gAELr#3V%y?pwJg0UUrew*BH56=<9~Mes*Gh8*)tSZn7}Aa zZKN=k;_(x=v^iLtRGzB?7_Oqh@h~`uR{JvmttQ@G>^ZGyyj+j4^xl`HY4)dLIs2}M z{^yfPcQxgc%HIlg9YOGE(ql8}BR8M1spoA-0?$JMw9Mn>c{@4#wq?(x40*NaX=>9hv->J@nOrxACIo$pS&{8mpBVO zziN%z6kgHY9FDd(xZW;!U({JH2!xE1$uC|1)_lGoc0)vsA$X$Tr>QGlDY`bal@Eu5msLbmbI$zs)VV*b&tq~17GQ$nU(bd zE}LmM?i{oh=G@BOTHI|OcDH5dld$6B<8kk^($SYcDUSYio0`vU1zPXEX9)?WYsdeT z&+Xpl%9-G;2wMH+kxkrl%Z$La>0o(mupJL5XL|ef4)iQWw97AVS^0R_Qw@SSeF9K4 zOS_spbP!RstUuD}5C$K(W>nWJg6($X<|~U?T=XbJejS`ngo?zq!ooTI8F`S6%}Yhx zmV!GW^RHj@F))X~rro}TmTB{3#W~X3C`~scPA#$}6ac@&OvgUY>8L|Fx&tT8``HXI z2`Y*Fny4zfbYWv!f*N5U`drr+E}BA)Gs@_kUUA!>%iK@Jq`)cSz>%0?i`rFi%;-%w z>kZWpSS@9cWs|K%|MCM107&muWOZn=uwmBZYsZA4bmk9&b#*IeldQ1y{u>B`L|$}t zKj*$&dW>>2?;Zk|#wJ zHF||Rslg)iwuO$!LA)_3(U&+tiCXV>7NmSr&m8TQ6BtYDcImz%mE~;-D1IzPfe)45 zxxTE!`SvlJ8+LE&_lXkEs{S_*}Y06jizu=KKTJXIl|iFAuo8jIi-&<1<8bB zyz2jtNN9D#_9jhY4bC!B;qx2OxtP6B5vx*oL4z1nvP;1R)_emCoQalZekPxcL>s0O znvV=Hva1qzAa2Y~@b19&r2eW&B|B5E&yzb>$v())#sTutg0ToB+g28`!h!#WEIwSg>p{c)qCTL+HC4m4ymoC87=zKjSh!b#JWA&sA<*B8}#fH z6K2y%A2fcIw0KbkiaEs$udT6d*ePF-Tigx#Cl{xZomex(FLm5t6_jpTPxxKExO#`+ z4ntQOyO}uE#T6Q8R#-U)QG;$KXI0XFCw=6EY>Q>;kzYnUdq(&-4Hc>T0#nM#LTZC} zGkw?q#vU;*6CwhC_nKqR=^U;L=LZ?cy&%YK zP{)at-rjS&-*XL52Rm#VG@cjzzGV^g%k&JJQ~gq#QV<+qe41yE$YptODl2_alkD9B zzj=_{HcaaPjTZ?8o*?-7=Y;Op&EoZPPKX*3NqVXk)=@;g@HEyK(#T!l@IR95sDjCM zj(L1RapCt8tLU73jLW+1j+pk~@o;m^QCkS6#SKu|B>P31f+<7+-{$Cubl=z65T1+6>=upd4{CdwZT$acASP3u7Hzy<-FEDrx_cQYae3nUkE?U1Dg=nb3k0{5e zjs0x)lW{o{dED>D@Q#kYb%X^$1-Jh}e>hgTqdigqSWs_H(4X(AxRk4>KWXf2z%h>k zd(VgREVeC$#VOX7Q7b!wUTSG+=Rpw}!L@0>7JhAGgw0q9-nq%g3cmTDb>_C$;A&HD zzE%usX|Vc~Pj)<%Yiy-n9NTK+vuSs8ZoW=|*Yr}a=^gr!c_ZGR=RbopGn7sV7F`wQ z?2S1}^`KWZ~yr|t9Q;+;9l{}D(KiEnp8I z?&X1*R9lRIy+62C|OrrV|}8rcewS-f6aTxRdaJxthYKn!+)_rUS{Opw5j-_g+` zo}OlKeNfQ?y_IO3IWnznTAG3WIBu%oi&Udv%Tj*Fnb2vM`>6|k>F9QTuR}^e3v9#O z+UJtF*={+w$6IfWO2_X%CG48K@C5_Oy6N!l7^6{mz8%N9!7;s6o?{0le|ZmgKwl-R z`zL(fPsZfAUUhqmmEHHJn)~!7GuN1cktc8to^J;966^&ZY$mpUKu;9`Mt>d$Zng_s?w7+W}r^-5wYU@<%&$o;5 zzN>Uo<+1xmp1CYt3hGopSlfm&uf4$0t+gpIcmxqelU!W~1LJb(eeG>?v=#OGm!Tg` zo8IgNM2}>~{HVKMA?R0x&$p0^%x;^fhca$Ty#i;Wdr*a#-(w7x_|5=67A|LpL)*#& z#I`;?tMizNL{xYRIb0`0TkB|q?sPd7=V9gXD!v0apio<*a$J~4RR@&z#|vDu`6tMJ zIF97}-+UvvGngb-a#B&t+}B0L&H}aY7O6l{S;@sN&t{>>l8*j#V*mAl>^UpZ{Y!IFA3o7G(&v`R>__4IRVWRh{Pc<_xQN zw0r@q+^+-6`rF~HD%$bX89T`-G?f~7#ouxWWV|0e_C2jT7a#w6A~n}gyNoe{H-&y%H_toNM6@2W2DeFhD?UsOa4i*@@;RRO7kJM=opEk4tmWN2dJEpg`{>8?YEJ=-BDf^q2MYr)SH6n#FKns1 z*$SWd&(qdk>yM;^vOk|-At_X-?7ws7R-8qjs-)uGDobBh{Zn4k-gB$luxE@I<1@5B z16?}1a_d?1%xdVuWW1c(Am``vx6f9&iu0Q)xpU;#_iks7=6QHLOnJu<3Q~l8cKYYK zI9D%s-~0+RQVADZpC7oTMyrOe{QB;vwx{GF)BL4YiGy&b8 zxj|uasYpRrkgv&-rmMOL=hm*(;dYd2;_&AArVQ?Cf8;H28POrnIFLzF6=zZD3&ti%h3`V#r7FpUa~=){?aKZGO3E zJ_r_&u@K(+cczgCO$xHe92r>DQS)x;4o;*UlWt|S5`c1CfXssY{3Ko?(x$6EvOPAg zY&_FVey0DurU#GtF$fL7KXG?&fq(3PbaS|%d9FdzQ27%58kBODc01xN^X1-p`78)} zcP&$l#m?U=Xdvb4G`&-_OZV#TH!p&E_18-XXGyW{2mR#)4_wSf?o}Za%>i|4v=O>bk zEf@?E^h4@8ZBJ;vsVn6+m{G^Z$~E=-?-|=C8^|v3Cmn*fENE}N9s-aLg&u2<>S9c-3H)DnopMNc5TJ0 z?YFConG2L-qI(c~zh`@BQw`yPE){TpK-=FIB)U%@gyY)Ue+A0dFK#zRJHXWEaKmp( z;N>SjU^aT_OMg}P1gA&6MY;9835+`N5|KZI;2Krcpy4U?W>LS=0Pp$qy8LOP1{9|j z*0yD0*>G9vgY99)7bt;J$j$c{x#~bd$gew= zgxqxnqCbj*Rm&68I9>>C;Z&nX;g-UPmWc2DUwB;hEq8)D%vVGHfx`1>(2{WT5W8Cc zetpLN?NJ+J?jZ6HR~DMDqHdT7w0yf1CQS?S3z!JSLF_2BJv+20v2c!{o54Nx zKKuP_AJhSeK1mKN)SV=5$anyuI1a#mHD{8;G}8}rC}K)%w%{1EW19@+U^o2J?>_o$ zciI7h85S-=O~2Vt26F=dzyuv^C?^tjFU6owyPd90C9-O!z(dyNn0+ z<2|Tvp9OAIS1egQb)$}>xBVSHn2E^<^r)Y3ryl6lJI*FmOwrBH>N)K;ZsIh?siGCP zyflNaqjCNGwM~wU(zP-gSx<*mKQO_UyXspSTBmo!QRuDvN3yIJD$Nyuc%0!{++$ic;EGCQ0FN z$~O_)%~SP_U0QQ3y5TM@4W*e==-z`-CxqS=ocUsd83Zkx1xQ*Anh`7PT(^zRua34_ zM$*gvYA7Q)k90|*Q#wvRx2%$RS*138XWca!xcLpa)I9RCnt(#`<&+1uFRt^GUVEr* zBwi)l+}>Qxk3MM?RKvqGr}4qWBOeNOpIk}>TuRsks6SAnU`N zC`UL)(Cqkgh<6wC+7w~w<%M$d@Jn8d3M>V0G+8%S zxTbMAco=3FbN~y)@$QY!*$kkB>3!>zq-^$LLe#zJHlKZUzPJ~Qu-Cm<`!p6OE5A6K zYFO$K^I2$iK~h!3!Ba%$XG<+=bw>NyTs;$Y@w??Zx7FU8b2XLK-fB^0898S@c{ved zom7PiS(7|WO>)@7UKmu&YHe73)KS!Y{C&U6m6SKg4uIEejxS+emF7vv$Z2^BC3Lg6 z>JKxnB#1;#k^_bA`c1bZZ_VRmWdC+(B1&zL8cB&%(5w>8o;6n)x)5f2P z?k*;igG^!Cw;v@Mc$33kvnjYl>$wqQDq&sX7Bk$lty@kV>*zJfSK}$H!JCW6PM8Qj0^bU(T$1*AIXHpV|)s z6j#fsFELCE6bK0U|JP8O{{26Kk(?8>3lat_9-;MHHtg_++el7mw7og`ZG()-pHnFqZe5>J9-qW^Oa4 zJ;>w^kiffGz90VExs58V&$HUB;Xs9^N@aU4Cv)oKaZ+HhR7xSUZefoy^};!z}I=EXCE zv3nA8J1pjYf^F}-KMtqF6ceSC|TR}mo-KG5)^l;@NrXuuQx$pnU{ zMI%Nhv6k$|+F?5MGa-}@yTwP_mpYIUdMT81O?GwVL0>Uy?YhMHmY-YKiZONwU^(uc zlH9ffe+;<`qn$rNoOAF&fN9gOv|f(VoWemzt-;D|wJt^H#-O?HDA%ymF4lkH4YT1j z;KraXMJE*Qje31yC^sywPI=bqfd`9 zCs{RcIl1~iA#L!6OZ_=>J!KZdv^c4#6Qa|@HOh8yv!sW2Y`Iyb8?1_Sy`z9MxafNn z+eZA>t=SUueO>!`v7=9RX}JJz)9Mv(69-jFm!_r_?7F(SgR}J;fV#9WNDDc@|CocB z^C$JjNL~(?7X1rVzal02a#`8hPF#`sow!c6VihyIQeF}_Yg4BsgDjArn5mi4C^~X% z+|8^~zF5$g_lk<%=LN$Yo`68{GOH77F4s-~-Cmt~u^Y;VnuxTBr4}6)RK;0WtH>Zd zJ|hE;78rp?h0`wz+>*;n|M(_z&i@g(NY6;fNXnR@uWYAlC&)mT@=XSg4(_j?wBOhe z0~sT2^A}mm4zVTbDR~^hL3)?XL43Dr8{a{17xYGAmywBD5R!8rHtzfD+y?*i#|@se z#0~Zs3@^#uMIyMr(0%sj|9&OJzhOQG3N*tfg1D*lzSY?5q~eMq!+#rZ7}W~hq%)kYO(S5V6xrVeEt7$f`1 z|Es<;L1HzIU9L@bRX^9QPPfSdxC;am4F`k&mA5Pb*J@MSh4E60_*M;sfzeK5n7;y< zEv^?G1#~7vvM{(CEoP>Z8Jv!~%&tzK{X!?4gALx5*@#T9n6&6~(fq&V(&-CK%_4Vy zl5{a>vi&0%qb*2zRKo9w>f$2AFtMIC^n^GF8(1bCWlcy&98^`@6i9WPbWvF3Tpi-T zsmS3SO@uRxr(9C7W#iNmbq6=8qO=B}O>_ibn|q-!XYdb3^Loh@t8&-1m6oYSaVQ;C zOt>k7gO=|1XIpi()HIY9mQTK)DE@tqmViT{=hW{aNs!6YgR}aO(QJ&18eOA1-<^#X+j?x{)#!M;VzMM1fu8#q3Rnw%=z0NQq zf72Sjhgf$iGt8P0aK_Wj?_FTcWlUhvn@H>Px|k+dxN@RH#%a&eWR1{{o8IE{C8x1D z(2pDNIhxY#NfIWHn*CE6aO|YwG&Pu{N#`>t#0(Q9(c=?7n(-WL9|ll~^-H(Vp-dg{COZ9Xw*M{7vfj9Ph zyu^za{*@?|ormszYurqbogQKWfJlBT%Oj~W0?U~UoHPGnJ>M-q1 zvS;*|?9r|EFmO=~BInI?#`SNm5LW))C;rv&(aPtDV#KzIiDv^m@70hU>cUIHOVGa8T@FE9?>Jof6c>eCd!AYFxYu1bTn1QyEGHjrDRc$srhCdg`Z`Mf)gLu% zc@Z{Ri1=1aji?QPTl&D0ybpI6VTY(!Y_w?00Ca2tp2@ltCB|Pc=|Udr&~<8DwIuv9 zh1buP3i|@#;e#X%6UiYkaVo{a-q`E`8vL+<=VBwa4bU1su-0Lo1j%4qm0CAp1MCB9 z=Y9M9@X=qRx#d=m~0Kp5@yG>cL(m zumGjWqsx*T_DgA0nOrip@r=$&>H1wdm^NV&nu{HfAD>{P@VJp0Yv5wkk zqFO)4+hZf@CR5tY`_%r%uA%kyjDv>O(e3zaM9#c7{{bZXV? zs65sxXbvsnDN}nzQe;0EPR|8BT8vBO;R68#VmzLM(D9f#wFaw?`{SGh9Zm5;%EIs! zzm8kSN701j;SZW_o7>GO?(Uz`8|V8ol}PKnZcZ8BHc@m&QPJKXT^uUYgTu4S4~&<-S@ilT>?u*@U;R%J$2+uJ@@wlO9hvIfV=nwMhPQejzS3w zcImhdyHjw7toNlKxCTBJa|?m34+(*t$L;T%dtG8z)CwU&&z(c(=?nmBms)*pqh|Pq z-wV<;Sc^Lrgl%0x&0Y+kTK+h!!1(nTA~jx_P_a%o)dZZxvZplkcUSCgxN_#>>aHc@ z=2^9CK|k_dK~U?2Y{#pnUKFpqd}t!q+aQ2n*U)8b_Vc_ruv}`eYyp*pYucpnB$O$% zD3rn0;b)~7T@gIL?B%U-pF(&5-LkNq#VBXd8=d4(^V)*DsXmXZwV6lreUANlRvlJ{ zVhOLiyrap`(mZN$r#CNQMQADHSk};)^<lg184YBUiRbb{{FX2@HEj{sf2Lea|pB zK9VZ|0)?xWlbnmj7v@|XwdZ1m#1aEl!Yr*2G;lR6N)vm6<`0|ec(7d`qTil(wW(Cj zdCm0bZ>X?7O$LkyTva5q;KKb0z7_3vgaoiCLhum+7zL>c^{eLC?XPa4NbBT?h@ zK*_3YMaiOcr&x5iuk-{}URtN@A-mOyLuQCG0ND~}67>xhX|)`9k9^`8anK~i9v^3e z6veoLzA)^j^;mUNI693aV=)KkIQYzqJtn=c_~J=p+wPPbL1ngSK_ir_N^MKW=bTmEJr@8e|J-m z;Bu&spB7&_LQVC0-81oZ{x#X?I94QK*g2$8abg1sbnc(Q_s~sfH|oa^=X(#~Yxd5x zA=k1Y=Y3)7*_Fe6fdzh%0)C;&yHVwR!SM{Xb!nSMP&`ZE(ZQF|4j_K z|JIye|8q@vYB;F^fv-8f-T{yC>y0lxw$qu+7Zv&zLoNS;ZeC8$p-rAp7Imz#w2E7H zN|fz$Y=p(!p>Uf$zLhn>;Nn!pyxKL3)q0|n)ioy@5?9;VAtYUBT1XYIi(W#3Q`|B3 zMcL&sfCd&fTDzy2`V248*+w%E4#5@S_sbY5~y8ts~>Je zU1eSSA>`o&_E^HMX6U6@PDf&>Fc`}l9ZkswtLkizM_<{HhFvMALg({wN^1fZ^#DCL zX?6jIb}C&Yl%9M6z9@Wtc?x z!2}n;R_Xm9iS@$8aw`r^FIt<+KWAb&Jbif&J|0f0Dlc8dtT* ztY^$==)e@z+o}F?f;dT#J}P#4yBl{PiQtG=!jcT9Zo!FDX1rYZJy}hWGSQzIh2mIs zDx^Tp8q$#7_F#d-!dqnfDR^COk^{yPyR%`UksTXa-x-m$JeNxYWe#W)B;wL9etb(4 z;5?*VrOLr{w>R{xO5yzBU-;N$>3bV?6uBUvJCd^VL}JABsabXqXGQP_|ED#a0vb^_ z(&0g|4ez9av$aLQC?8QhK0yuZPYt0E)}%v)MA#H;xe_(~L<)sU!Nwzt3Y5oAGzr#6 zc%xRNHQWF`C6dk-!WbZ{)6XjZoIe`YrSNIiev>i>0RiPLO#tOBivqIVTY@nfh~|oe zb&ak-C-H14JiOP%_Q14joup#`a%sJEJWI|=r(^4$NhwK%4BYWWYvrn-Eaq};5T^hARl;d<&}mGA)vMQ+J>eZNaXd)x^;%J7rtd%5~@u?j6h1Eb@*+_ z8*-!?E#ew>$eYbv8`oDM>2d)eMPBDdmf!t?M2J@lW{tDV&<4YWTsMrVcb>ZhF}~|k;=)a}1*>bbP$lh;JYR?_E2i2rd|y>5 zWP@V3rrQ0^z9;t9-?KWzS7>wc@X{l5a6sJFO?`8x;i!~(YlI0s>8&>7vw?wUduu!o z)j{M|hOpus8`tBmrf(a~U}Jxkw)wD?prvmjoldqG-KEuBZ++DB} zN!h7b-qxD1LHKlkEEf`3M^!~yY}=~pf7M(x?@hV0w(vM@s${Mh#VB4oZbYMg4Db=J z^zLeJ4{(lB;`inMp(Yhz)5r&>_@3$$8@JxeKvyr|3ibx$Q_sMYzrf6<{Dj%IP|5jr z+&Vg^cnjQ}FSQ(9ei*4~c%83tvA|&M&Fz&xr?EVT(@j|nCba+A>tlcyqQ$%1=f%!M zw0X>Q20stsvH;6_*vchzoCj*E&y#e&*Y~#J^w#CCwESV)rvY|<_htT!{6_8I2F(cz zj}yresh<1^J$+8~4>I$Xsp2ns{e{wK!C;yLNFU&HmoRp9!MO0 zmEMc@O(-Yyr#q4xYqUFeI^<_X085HbUt_YK&s2cgG5ubY_n!9VGuoGJ77!?yE}EqN z(h3M+&vX+5TlTw?{KO7pQsPQ+_-XokYmRdKJ!7YJthRJ7X5hykFJwNA`QVzVCnv)F zEfhu1his$x2Q-o^vgtYjEI(u-rEXx^grbhv~GyG7(j zv>Gn`^040QU;bxwl*$Y(J>*nk2FTnOOelkgxqz0TrEZtqoLN6kQ!>j9=Tk<<7cn3k zKL2ybrs!LC7mfIrxAu#znD@}io#|#UZF0L9>9HToNn#p4=I0Dv%u=)w2^#0vvu`#;Ac)=T#vt*B_8MrVoCAI%Qy)cLZ;9|utP@91UfE{{&KN}fGP zGN>jcCTbN@=ugRO4ym5+iZf-KQ%8U)2YP}o*ikLcrCKiR{0z||Urr5NTqayKS*-Uk z_paCL%hRmrIoM1wYpe8K<3}E&nc++8-iM4PPy;iW&hG|jaTWz*y-q zI||5fnB-6;2FqA=)VQBqN>X$_ZZY_5j$TrtVmj=`dsD4E8@U00w2*PlMjrC_ zd6hYpDt#DD;^UJ#VAT5Q1z&)aduU7=?zPArySEe1~(GSxPh4(#^xXr|OCi z=6sxoI>z{nKqf>ExSl|2U;CP>Ftr|U@PM=9{nE7OIpM_tDKYzW^TGS>!P<;YUrC@SMI9M~yL6J;1Z1*e-uP3!gm~MVI=Xigj5el~q*RznTc8!R*E*JOt z_#LidV0-eJMjYboDBuvWJlE!})Q^{PN~O$ufTS;pag6O=`V zhs3Vu23GZkA4xD80>Qf5AK6kSyoE`xu;Sl!@+Z-3Z3nq$$t`@e(+m z0jK{QK8@@NK^ritB+upYX2hxU^q zZ^(vs;ty}i*X!?==UTbj)Dw_Aj`t*=hHW+3^#Zz57rTM%i+kpb>q$Get_u*>z;pTf>ZYPzsxB@HAYB_$-jf6s&+FOZNzb9s$rBHsgqaF!Am<;fsOEXUSK zAmqKirvcBhxVc?#!Gt_y?=t07T}{qbo3CF?_i}Iup>hb!=Wnb;=e2}`V1ZbEx5ht$ z+R(IbYoLHe15goy6OmZxvhj}TT27CwT%V|f!b$L_5f7(|*V)Ijt0i7Svb7M;o1vQO z5V37|mtL?-;iKZH_f$zytpMEMEU3izdoe5Jpxq5SCa~8B$uWp1X$#guEwE{TB07e# z2SVgMIU0VF#nT$ZVAvd|+&785{j-rU)zCq|z)0ZWL+rLfm~1T0O4ZqNOCEe%RwYa8#mn_dI(Mz3rf4r$V^P8BOFsvl#vJL$v>Gi0$sgjZ(91{V{EVJm&th4;QiR z+xN*$PtvcsWc!PQ8F<03E`|O+Ey2Kg5|0?VA+S;ugP~WST|JM$vWVGvFEVQ79rj|9 zBo?mNu2&2;ACrMj?12?`PEW)$#-;?6pPWF>;72x$Xl$z5X*Y32>A0(9zxD6&54pMQ z8#%&eXZ@(6YKR$dY*Ze|#c+x4{=#mY^x<9DVl=w#pB6^QYq^&-?U0-V)DH{n9Am8b zw+jw3aI1MGLmQ&D*^q0%>K$LOhoB@%Qem`G7#JR$!W?txiWXF|dn#R$~V{$o+3&js4jEh%BL`UIHrpYr@cfzss_YjuQP|MjE>G4V4 z2hn|YL!YDaqjykK&Zn~nB_A%P|3Zi~9**ft0fxaoI^Ym)cJq~@*_Bb(~PJB zj_w;TYQ&j(2)ND|p%odr*L)9#3m?L$nx)tYNaOJbgkW!!Qaii9f)F>)!^DBY=&y-W zBI1f(CPPI(UZcB5qZJX9dP|UL^<;fp!uOY`57PP)R?{-Sb3TzWDJ8S=Y5lDEo=nla z(<;2tRPmK}6K&9cMq8(X$`F8{KDkJUREHG&VB7~BDfGgmL>H73zK|W-BBOR_H_Wes zQd6e=-2vrD+^Dx7I2Za1_?!p4ySdAx-~LurGpF za+~{h<#IqTEw08!UAWnW9pW_$XHx3b9TzU{p63TjbZyp>j|+wSb#6e2g)jC1 z&St*%VIg&>-j-3fblj?rGPKpcwnjU*Mj(26=f#VK{xsR!s-vf&%g6{^vInfC&VXUR zSbk&IZvFnE+UP?_U!lei)L(moc4k@7h1*gXrPcMZ04+C=tkqWv+ZbN0OWRy4TS!ut z&%v+P#jMKq)=DsvW8A_t?L4CDeApX?0r5#8oxJ1H6{QX{1}chBqE3r!aS_5{x}&s% zwIM=gciu9rZ0t{84~l>n=X~VHj1`?CQZQGaqhr{%(%nl287BpOwoAR%0r4*RBcgt$ z@J_cD>Z@y6iSFm6ZO8ZwEr4pQAAo11%*~!zC2uBpZy_D09Vj1^)Z2LqLuj)rcM;hi z1^!w9lKdF`_;gK5$n{;_vuY1_iYOfcphllRK6Q3(`&LiwaCD&K1?XRODk z%*|}Ip@KxtB+2TARx%n-n!fV3(r1kuFUy1KD~k$#IZEL^f1Vok?FkHmgP-~6Qf8)A zp(MDBE*!}XH7DS$9nnt;j^t;E7kybT9D`SkfE@D|t!=EnPRp0+p7Opb+Lz@XpoW|B z^E*eMEgj|cJB$vQPU8hPf~}fcRHd3mwFVW2?T=9nMkXO3=HM? zB5ThAi<)a!pauG#8rCK)p@)?%;h@FO9GXxy2el|t^hlmU>6asE0+UW>`UhSRfCx9E>&2)1gv9p(LFi%@>ghb6E9F(a zF2rT=_Ng%%cRzX`eQGq8X5Z>n-O;>N`w>Ujp~G@&CB>AO9nsq3)P_c(layI}UtL%q_Y@ zyND&9o-)21(XpZ~qG*-*nT-1GYSHU;@2dj;G#c_${A_wrjAHBa^sVnxc4|+5U}@12 z){T}X>WtVz-L6e(QiMF`7h1LSHMs}eLwe(ufu6xGB{r)3V8i49IqX0; zxCg`w^(}n^em@i44F|hrsMlxs%Q@5zF|RDQS+LU%XfM16zep3A|^|J*Hl>jJiK7}e+d3uPddaF^-Zr-x4$Xzkm&p*d*p zl0#qbT&4(I`+WH#IIkX4$*zT0G=Z*onfpUJ zQe0D=A9-zsnr1hc#U($|n7${=FWR?b&tpgtyu?o4R@)?-$jSkqe!c@BV}>Knh{^8# z5$;{3Lc=3ofhmV?dVhq(&d~j(oTIsH1N8_)~ za73<_vs2S#B*eE0=*etH5m*a&7bR;8#8M%_k`vai*n{A?pJ{5yGmB;H=8wtUiC#du zxlt+T04xg97(dRS*1Ma%V};>C0Q$xmI3dlqsZXJy!puMPQsl(!OqGh0$L))*4h5?t z@CZv3w0S63*&I>|(t$Gy95LuJ6ACVHm6f$9?JpFmHWE9408^1r2 zhY}&Y-=FXh2~J3ffr!|VVtKOWnhsRD`N5?=ILGv(wAw=MXrQt)(CM}zHxd^W55}uoY(HDj*z7+j_X5tZ1rDTkkFk#+&H@iVF zFNP1Jj0;g!6QrEbc@A)&y7(}*VC;H^85y!>z6W$&P6fEm(bF>u&#vwDx;FG)Qn(PeS?Zsy83gW{!L}i5iUxinu zkt~4iQ@~y}C7RVXwniMC5ZGj>#H|cR&3dGf*$!2#srH8Rq&uE zf5b@%g}Z?Q=tGb}fV?4sqayypXPtVl{3>zr6CObF5P1{4oF0vFPo$#UFUio%QXt&A?r; z%c>~}SFs5~iV~uQWNQpnZFGVo#YyRf(HMlUx(cE7z5NM&)v_c8U|?`XCE3g#WS~AtYL72>-Ql}!>SG) zJm?TI2>gV-^!W6UDfzko>~~?vZXfVkf&^w;5S%!A8)mqzF&1^}L7P&t7Sdq-ljvA) zZ0pt|q?N#l(Q%XgzMhejH{{WysNIbB?0IXl^GBj~PI349Gc4^@oV(kstH%J6Nnr%u zq3e=^(Fj1bx+6m%B!}}E?7KWHppW$BC!Ck!XXnv;;|Br*{r-_x96j^J$bN}e&wf@$Gs%?zG!bREK&nj3DdS$f z$@-+==TiaGnBGe1%#=^XT;;qyrEO31w4_fcHK4{!)VrTm>V9+nTg{d+?KS`#yI)3$ zrrdobEnTFV(cfGb5b{|&J``B(MH=mRlIqh2+v>K}{CNkk=WnFh9Df^OqdFE<>qZjv zjaWGr)}WB)2U|E@ko1vC*h^x`1@-q?&&cf3@HEvhPZ`+Rm8BLWZimB@3k>>SSF$C< z>Ns$Hj1#N~80<-f`bUU~HthIXglBZ9wOJWiH#pKovvETK>kWYfry0!J*1^(VIBVEfF`okyX6KI`sw08RGhVMe5o4#;mZVS| znAVi{@N#;8)&c;zhlYOhx6wt5(*f{9YRDVL)Lwswj4C48+0S+cF0ZnluvwRd}L zLE?`0!9-yq;DxbP59iJi3$NAGP3H0ivCHhKeoqc0ZyVS#H! zy2CypAa_-NfU|2H5DyW!q!WAe9O?-<@CbBU?NLA&1o~2hZ3}OhZ{Z+JLV!5Bs9LHu z=oW+^TOPQFB^w#5$Q{|lf(y3t>k9JPNrlb9mGzV518i);BJb!cZsDwLM(Uiqf7W=7V!5ohEd{0!NM z!rdHyF;2Q1o2)Kx8N+GdCx1HU{c|aujvJ+bTfjD87CDDq%%o%JKOhn%fm@H8z$T9` zs_&jYfP-slAx-f+oENJr;A0aE28(;kr+S~s9e6=^w`oTqe{!ww3O`vsxJh)P@->wQ z44-D}C#nr0IWHzW6!p<7AJ-!$b1qXtbu2`2aV&z!nQ+3 zjzC9MjU9_uOP13m+0`(&N) zk@2GkG%|^RxvQe&;@hVO<{Fe=DOeh9x~Ea4x;E}!^?YqU&|GkTfLfnT=x$M}jJgrk z%TSsZkAxO%q!aB)K=E~7gu{dky>Y~|B}I)O5lkF(LAK5M+c`GwY)gwyxFFNE*)qCC zk?0DUWf#n`f;X^M&gd(8<~RQT%4z?xTU@l}vkCdIQoIKHP}8#g|9pxP?xg+ zKUBr|e=)rn|1j}kNKoe=665~_NeSFfXT}5rJLLrfBl-(a#r_9KI6y)AE6P7L`zyim zU(go)2SoOFJN~l4{NK_aZkHeJXi@q%1XVcV-^5?0n16jgQ1xFTJRIe3;xA{(zhZ=| z{Y#vMBmYhOWpMRZ41T?TiU0AtLi>Lj|JOl=zrY}m|A14r@PC2-m3#lA_67r^{tK-0 p{tsyFfcy{mj|BWbee~af{eOdtCI1Uz|0h~kBoRz+=|AJ-{{a2ptPTJG diff --git a/src/GoogleVisionAPI.lua b/src/GoogleVisionAPI.lua index 9209827..875722c 100644 --- a/src/GoogleVisionAPI.lua +++ b/src/GoogleVisionAPI.lua @@ -1,7 +1,8 @@ --[[---------------------------------------------------------------------------- RoboTagger - Copyright 2017 Tapani Otala + Copyright 2017-2024 Tapani Otala + Updated for Lightroom Classic 2024 and latest Google Vision API -------------------------------------------------------------------------------- @@ -46,7 +47,7 @@ local keyToken = "GoogleCloudPlatform.Token" local serviceScope = "https://www.googleapis.com/auth/cloud-platform" local serviceGrantType = "urn:ietf:params:oauth:grant-type:jwt-bearer" -local serviceTokenUri = "https://www.googleapis.com/oauth2/v4/token" +local serviceTokenUri = "https://oauth2.googleapis.com/token" local serviceAnalyzeUri = "https://vision.googleapis.com/v1/images:annotate" local serviceTokenTTL = 60 * 60 -- 1hr is the max TTL @@ -142,20 +143,25 @@ end function GoogleVisionAPI.getVersions() versions = { } + -- Use a simpler approach since the discovery endpoint may not be reliable local response = LrHttp.get( "https://vision.googleapis.com/$discovery/rest?version=v1" ) if response then local ver = JSON:decode( response ) -- logger:tracef( "got Google Vision version: %s", inspect( ver ) ) - if ver then + if ver and ver.title and ver.version then versions.vision = { version = string.format( "%s %s", ver.title, ver.version ), - icon = ver.icons.x32, + icon = ver.icons and ver.icons.x32 or nil, } else versions.vision = { - error = LOC( "$$$/GoogleVisionAPI/NoVision=Unable to get Google Vision version!" ) + version = "Google Cloud Vision API v1 (2024)", } end + else + versions.vision = { + version = "Google Cloud Vision API v1 (2024)", + } end local pipe = io.popen( "openssl version", "r" ) @@ -229,7 +235,7 @@ end function GoogleVisionAPI.authenticate() local credentials = GoogleVisionAPI.getCredentials() if credentials then - logger:tracef( "GoogleVisionAPI: authenticating" ) + logger:tracef( "GoogleVisionAPI: authenticating with updated OAuth2 endpoint" ) local jwt = createJWT( credentials ) if jwt then local reqHeaders = { @@ -242,17 +248,31 @@ function GoogleVisionAPI.authenticate() if resBody then local resJson = JSON:decode( resBody ) - if resHeaders.status == 200 then + if resHeaders.status == 200 and resJson then GoogleVisionAPI.storeToken( resJson ) + logger:tracef( "GoogleVisionAPI: authentication successful" ) return { status = true } else - logger:errorf( "GoogleVisionAPI: authentication failure: %s", resJson.error_description ) - return { status = false, message = resJson.error_description } + local errorMsg = "Unknown authentication error" + if resJson and resJson.error_description then + errorMsg = resJson.error_description + elseif resJson and resJson.error then + errorMsg = resJson.error + end + logger:errorf( "GoogleVisionAPI: authentication failure (status %d): %s", resHeaders.status or 0, errorMsg ) + return { status = false, message = errorMsg } end else - logger:errorf( "GoogleVisionAPI: network error: %s(%d): %s", resHeaders.error.errorCode, resHeaders.error.nativeCode, resHeaders.error.name ) - return { status = false, message = resHeaders.error.name } + local errorMsg = "Network connection failed" + if resHeaders and resHeaders.error then + errorMsg = string.format( "%s (%d): %s", resHeaders.error.name or "Network Error", resHeaders.error.nativeCode or 0, resHeaders.error.errorCode or "Unknown" ) + end + logger:errorf( "GoogleVisionAPI: network error: %s", errorMsg ) + return { status = false, message = errorMsg } end + else + logger:errorf( "GoogleVisionAPI: failed to create JWT token" ) + return { status = false, message = LOC( "$$$/GoogleVisionAPI/JWTFailed=Failed to create authentication token" ) } end end logger:errorf( "GoogleVisionAPI: authentication failure, missing credentials" ) diff --git a/src/Info.lua b/src/Info.lua index f552399..3bce85a 100644 --- a/src/Info.lua +++ b/src/Info.lua @@ -1,7 +1,8 @@ --[[---------------------------------------------------------------------------- Automatically Tag Photos using Google Vision API - Copyright 2017 Tapani Otala + Copyright 2017-2024 Tapani Otala + Updated for Lightroom Classic 2024 -------------------------------------------------------------------------------- @@ -14,13 +15,13 @@ Adds menu items to Lightroom. return { - LrSdkVersion = 5.0, - LrSdkMinimumVersion = 5.0, -- minimum SDK version required by this plug-in + LrSdkVersion = 13.0, + LrSdkMinimumVersion = 10.0, -- minimum SDK version required by this plug-in LrToolkitIdentifier = "com.tjotala.lightroom.robotagger", LrPluginName = LOC( "$$$/RoboTagger/PluginName=RoboTagger" ), - LrPluginInfoUrl = "https://github.com/tjotala/lr-robotagger", + LrPluginInfoUrl = "https://github.com/obelix74/lr-robotagger", LrPluginInfoProvider = "RoboTaggerInfoProvider.lua", LrInitPlugin = "RoboTaggerInit.lua", @@ -46,6 +47,6 @@ return { }, }, - VERSION = { major = 1, minor = 1, revision = 0, build = 1, }, + VERSION = { major = 2, minor = 0, revision = 0, build = 1, }, } diff --git a/src/RoboTaggerInit.lua b/src/RoboTaggerInit.lua index e59e96f..e9ff65f 100644 --- a/src/RoboTaggerInit.lua +++ b/src/RoboTaggerInit.lua @@ -1,7 +1,8 @@ --[[---------------------------------------------------------------------------- RoboTagger - Copyright 2017 Tapani Otala + Copyright 2017-2024 Tapani Otala + Updated for Lightroom Classic 2024 -------------------------------------------------------------------------------- @@ -18,7 +19,7 @@ require "Logger" -------------------------------------------------------------------------------- -logger:tracef( "RoboTagger: init" ) +logger:tracef( "RoboTagger v2.0: init for Lightroom Classic 2024" ) local prefs = LrPrefs.prefsForPlugin() @@ -37,13 +38,14 @@ tasksMax = LrSystemInfo.numCPUs() tasksStep = 1 if prefs.maxTasks == nil then - prefs.maxTasks = tasksMax + prefs.maxTasks = math.min(tasksMax, 4) -- Limit to 4 concurrent requests for better stability end prefs.maxLabels = 10 prefs.maxLandmarks = 10 -prefs.thumbnailWidth = 1024 -prefs.thumbnailHeight = 1024 +-- Increase thumbnail size for better accuracy with modern Vision API +prefs.thumbnailWidth = 1600 +prefs.thumbnailHeight = 1600 if prefs.labelThreshold == nil then prefs.labelThreshold = 80 diff --git a/src/RoboTaggerMenuItem.lua b/src/RoboTaggerMenuItem.lua index a0dfc84..7e2290e 100644 --- a/src/RoboTaggerMenuItem.lua +++ b/src/RoboTaggerMenuItem.lua @@ -592,15 +592,16 @@ end local function RoboTagger() LrFunctionContext.postAsyncTaskWithContext( "analyzing photos", function( context ) - logger:tracef( "RoboTaggerMenuItem: enter" ) + logger:tracef( "RoboTaggerMenuItem v2.0: enter" ) LrDialogs.attachErrorDialogToFunctionContext( context ) local catalog = LrApplication.activeCatalog() - -- Authenticate with Google Vision + -- Authenticate with Google Vision using updated OAuth2 endpoint local auth = GoogleVisionAPI.authenticate() if not auth.status then logger:errorf( "failed to authenticate to Google Vision API: %s", auth.message ) - LrDialogs.message( LOC( "$$$/RoboTagger/AuthFailed=Failed to authenticate to Google Vision API" ), auth.message, "critical" ) + local errorMsg = string.format( "Authentication failed: %s\n\nPlease check:\n• Google Cloud credentials are properly configured\n• Vision API is enabled in Google Cloud Console\n• Service account has necessary permissions", auth.message ) + LrDialogs.message( LOC( "$$$/RoboTagger/AuthFailed=Failed to authenticate to Google Vision API" ), errorMsg, "critical" ) else local propertyTable = LrBinding.makePropertyTable( context ) local photos = catalog:getTargetPhotos() diff --git a/src/RoboTaggerShutdown.lua b/src/RoboTaggerShutdown.lua index c67f623..186516e 100644 --- a/src/RoboTaggerShutdown.lua +++ b/src/RoboTaggerShutdown.lua @@ -1,7 +1,8 @@ --[[---------------------------------------------------------------------------- RoboTagger - Copyright 2017 Tapani Otala + Copyright 2017-2024 Tapani Otala + Updated for Lightroom Classic 2024 -------------------------------------------------------------------------------- @@ -14,4 +15,4 @@ require "Logger" -------------------------------------------------------------------------------- -logger:tracef( "RoboTagger: shutdown" ) +logger:tracef( "RoboTagger v2.0: shutdown" ) From 829f5b4dbc18f463a8b7cb114747633ff806ad28 Mon Sep 17 00:00:00 2001 From: Anand Kumar Sankaran Date: Thu, 10 Jul 2025 23:06:31 -0700 Subject: [PATCH 2/2] Upgrade to latest versions --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6257b59..1c799e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build/* config.lua +.idea/