From 774a0c480bb99073dc52fbdaf9abb42a5c2925f9 Mon Sep 17 00:00:00 2001 From: sai80082 Date: Wed, 18 Feb 2026 09:52:08 +0530 Subject: [PATCH] feat: integrate OpenAI-compatible API for query parsing and remove Gemini references --- .env.sample | 4 +- README.md | 10 ++-- bun.lockb | Bin 500490 -> 508595 bytes package.json | 7 ++- src/config/environment.ts | 4 +- src/contexts/ConfigContext.tsx | 4 +- src/helpers/ai.helper.ts | 102 +++++++++++++++++++++++++++++++ src/helpers/gemini.helper.ts | 106 --------------------------------- src/pages/_app.tsx | 2 +- src/pages/api/find/search.ts | 2 +- src/pages/find/index.tsx | 14 ++--- 11 files changed, 130 insertions(+), 125 deletions(-) create mode 100644 src/helpers/ai.helper.ts delete mode 100644 src/helpers/gemini.helper.ts diff --git a/.env.sample b/.env.sample index 1b86051..071d49f 100644 --- a/.env.sample +++ b/.env.sample @@ -10,7 +10,9 @@ DB_DATABASE_NAME="" # Name of the database SECURE_COOKIE=false # Set to true to enable secure cookies # Optional -GEMINI_API_KEY="" # Gemini API Key for parsing search query in "Find" +AI_API_KEY="" # API key for your OpenAI-compatible provider used by "Find" +AI_BASE_URL="https://api.openai.com/v1" # Base URL for OpenAI-compatible API +AI_MODEL="gpt-4o-mini" # Model used for parsing search queries in "Find" # Immich Share Link IMMICH_SHARE_LINK_KEY="" # Share link key for Immich diff --git a/README.md b/README.md index b61b334..5b5e7c3 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,9 @@ DB_PORT = "5432" DB_HOST = "immich_postgres" # Optional -GEMINI_API_KEY= # Gemini API Key +AI_API_KEY= # API key for your OpenAI-compatible provider +AI_BASE_URL=https://api.openai.com/v1 # Base URL for OpenAI-compatible API +AI_MODEL=gpt-4o-mini # Model used to parse search queries in Find ``` Refer here for obtaining Immich API Key: https://immich.app/docs/features/command-line-interface#obtain-the-api-key @@ -145,10 +147,10 @@ Google Maps Javascript API Key is used to render the maps layer for heatmap. Whe > Code where heatmap data is plotted: [src/pages/assets/geo-heatmap.tsx:32](./src/pages/assets/geo-heatmap.tsx#L32-L35) -- [Gemini](https://gemini.google.com/) for rewind video generation -Google Gemini 1.5 Flash model is used for parsing your search query in "Find" page. We do not send any personal data to Gemini, only data that is sent to Gemini is your search query and rest of the querying happes using [Immich's Smart Search API](https://immich.app/docs/api/search-smart) +- OpenAI-compatible AI provider for smart query parsing in Find +Any OpenAI-compatible model can be used for parsing your search query in the "Find" page. We do not send any personal library data to the AI provider; only your search text is sent for parsing, and the actual asset querying uses [Immich's Smart Search API](https://immich.app/docs/api/search-smart) - > Code where Gemini is used: [src/helpers/gemini.helper.ts](./src/helpers/gemini.helper.ts) + > Code where AI parsing is used: [src/helpers/ai.helper.ts](./src/helpers/ai.helper.ts) ## Contributing diff --git a/bun.lockb b/bun.lockb index 7944ab42cc3a18798e49da6bbfd12bbe47cd664d..ca9ac68b145e59c27c4dbbbb8627c953d549d06c 100755 GIT binary patch delta 103788 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 Il?yBW54!Or0{{R3 delta 99392 zcmeFadwkFJ|NsAdzP1;8I%R|*F{P$V$YGA#jJ@V;jw9q{d$F;T9oUpMB8O7uNsm#~ zltL*gH5I+rJLQmSl^P-xjZ)^F8b!a`?eTa#XYam!-kqj|PU3KPN3g8m-)h(G2!WNMJ!TeBSsh#MG)`7mq$a*tw=*)P_z9FpMV9{m^>Q_{>aSX1rkxg3Wa4X_;B^d6}8Uag7uZs3hA%TMd6v%@hgP*j{4glXiG;G^L~mx=>{P?B zQ3>n0h}JPaJ!xug9t%DJa3esVF0claJ@^d`peAL8PD@UkVywJDWvtK*ZH(5iz@yqO zg3Sg`$?(SeG7TdrP^F&)Wka??8ULA1j}G1}K?wjOQhXWHe4Px#srXep(AA`A7Q97= zbwL}^rTlqNv?Tu-JJQuMct|5v_zjH>1Lfy?Q*%?iS@DUP+3^|POrO!wp66 zzs0SFfzIapL(%5^Ls0UcZm}=>-Q4yMe^pE-`U?LTPu!-mXZTXmvXatLGko!h-i)lw zm3E|mOS6sb^>3MX_Z=$F%n+pscZbHOC8uQsfwOAZJ`Uv+#M9ZMbh`f9Zr4ub>#FTw zC}u^z8LHAZ)am_o{6n{^^f^jLT*qCPdLpvxZ zV@YS_ru&Qt*c`;#9o0+?wPW2)^8Nu=u#^dy(HxRfj%%`~AX~Dp#oelVf6iTobZkYk z&pS2Qmt{=rtV-Pr&hAf3OPk`$FpM`~bHiE(#mdW1@Mif!r>15ugN?bIm;YKx>g3WZfP&RCa zT~g!ry!q%SbEW!nvRLZSNVQ>i*4iA(8S2t{HbOP;Q>|}7IdeBa8$%1AY~?~I$1PcF zR%UY26vHqs_EX#oj(Qv9k41oM@l1c!kfHXxnoY)Ch*rsFp?NH3y4C^EVA#F2eJ(~- zcNEIeIiPhHl%w>r)~B_uvMXvf={|Xos%!deFPdZ+6|fs3^_S3Q&=ftEolpxJneS(+ zR%F_d0Zo#+4pWxn=-sgCP{-kac68d5?5V6}hIag0NY5VMu1k+kOPi5|eXtp94p62q zWfrIAAiE@>WnSt?H2^oD4ea3wm+JAXQHFtiF~2ozI=;ae!@xF?zaH8OS}|IADu1kD zU{}f?2Ah362xY!Eq1=MjLpk3f#;NoV!{&fyLs4#C{uBh5@x*xLj63d8-7SU92E7e! z1igELn$R0yvw+^n$CcFyN+-I|JysN-oS8#+{OYH8f;V?M{q4<3N~0D`Qspm(T1K9c z-|k-Juau+|UuePePT4eV-x#m#IM_|{5aGkzO~vZ)VUXIu_CRsv$ZxCljRaL;J=k>VM66J{ z_|KQAL5Zp(7m=Q8>KK%s+6QF=o`Mp8;fV=v~8b3vUoT_uH$E)`S@I0;^jRE9;QlU=DH4eUxh$w?c={QOC;1 zbL|FoZ_CTQUzMMblp#-rmtnJAnaSQvOcLWIWNQU`0hDVf2TDgdGwsg~8-%IKDg6hg zD`(VCP|l=%P)_k8D9hs4lb_ynwVN@vL^?}h#R64j73P*(6Ll%AQd)j4ZA<>Z1}h)+xPWnup?u!$ta z=iv(fH5x$|rJ-h4g!B3A%w)qzene%M0A>8M`Km!FzLcr#{OVk}tv746pd9MFi_a+6oX~ne>kh3Ov=(Tc zt2IgM7$_SarL}|B7FugVx!y0WSNfgSgG%%ATc8JW!+b%t_|j%&_l37KtoM z!fu56^FKs@8BT9kvpec_<*H6lu3P8$@?V{!TA~B=l($&T>e{e5+uQ9>ldU1NDeQ|b zRZrNPinD`xOz0fo_Ui}S1$a~RFk6&%DM11lpgr=By@W0 zc*?2Z&kc0W)J{hnPdI1qXHY)pM31PC)mT0Xz%iVtE1v#|8tYsf*)p+g&Xuakcno?2 z(tTQLzuBn$z%M^jll<<_)#~FzD5N&p!seM--yk3(?7gI3i>HO_f*p>CyfZp0mbLTLJoX^$ROn}gH5JC3McHC39I zzZU^sVVZxXHs~B=;CTEBo8yspRJrLQl<7`G>5fb&_v^m8;(L&<1?e} z`u^XjiWb6V1{j5B)6v}kYD$2%qw}n0U7sXdWrAKgSgk!5txE;aS;FLUH+H7#6u?Ckes#*MY zrJ8j0FR6-Wr)4C}&hVx?*V2~}&mlR2^fyD(E~|=gjSandkZrWm+a*W}|c-#U` z8-awJ-TedXIn8g*dlAWaX|AZHl9fa0;nkWi(#2$J{T;=z_{ut}-n!tlo#)wS!MTWL zYW1b!ZaFD++Ln5zbgUm9{>Ui=8|l=8@HyC*jv@o6K!^IOz|6Gx8N6~{<>jf+Fr563CsJl$zM+8lM10$VBu}AydL~gfD3%^|0~9r} zo3*$(uX~Uhi3sh{yR?3tJ(n z;?@l(R>KHwp&XhEWq&i1re$WOW#sw#+^hv9XSLIgfYO5_pj>R+ET*7f z=NXIh%;nc}Y9FqT{LPTA^bVDO@Lg&odP14MsJ(Jr*A8m4X#>v9s1Xz+o|oUcqe|#j zApZg~umLYa>9OBXFn6P4P@YmStVS?&;wP%3+1dQU5>FuRRuyNbCM3mUwRG>SMldTo zHPx4l=fbACQ?a_5GJn%9Opirb*iE&tQP?#PbwPm-gVU48!8sK^hO$R_-PO>})%oi5 zQ1;`!RQv@f(@*6g68pfAo+^F`(y`}(eU!%*F&$4aWdQ79Qn;FvOOb&?Hx4!zMGTY` zhwJzQNYA;IjRH8yZKUVioCKST!K1Z{j&Ba-5cxs5xPC->*7r3uk1fR|PtKu_09cW8 z+$o057MJ!@yj_3g;upZ_nIb5MC`+eHfU?1HP%ef(P?p~j%JjEGnLZH8axeEV^JI&^ zhijN{U5x6!Sow2wwyZ&zA4$$FoZv1jF~P$ zKe!x)bo9{UgH^hSZh5Llw;+O(tC1elVid$4gbq~|9z;P+VcS}r2b4R9sdUaW>uV1z z)ivCCA~_!U*w82_8xRVm2bScGPzB!)rHdwwR0-3xJpsxdO&+CsxC_dRA)}T3cPKs5 zW{h%ebFCOs9BbwCIeBS$3F+ub0c8Uog38G}Kv&Qc%1N{`P8D3bya)@?~ zQw4Z)eE6m`!xyUa-2&y<*65-d{QNyC-J?)?&iSQ4CT!L-2nvtn<=?FW`4L#3oYi+u zQW+oC`oDcz^zS_^!utOYJuS*_f)4PSR1?Y}`pb@R{r`8*z5czP{O>xF$I12IJon1) zGF44B?5J`s^h(j|8pl^0Ol6&b9oLS3BMIK#f<6+tv4bHK4=sS^)!-KIqcy z)0D7RV|rHBw|d|#bQjY5+4IhXn@RSP!5;H{yA+>|?WRLK<^bC}#N%FH!!UZ-b2mqs zU)dF)P3-PNJ?4CS9zL_}z4$z22M+UCw_}}jR;6tYH}A2FhI!0Q_L*TG_c_G$wL|ZT zGVii;hkMLiyJWb>+Jbe`L#8hs8g6|Ds{<^T?VTQOHGw}PVY%&&_k^2q_K8@J^(0t- zup8_X6T;0}_RJ9;D+g;5=Yo9Go`*V*+2%-(*~}h*&wK5Hksj-5Y$knWJnJ|Kt5;R( zo9(1g9&@O@ZIs7ahw{|__Kxvb zw_sMY4wpS|c)01aE5J5`v2QLrcu2VQEiC1k6RF`=Yiu}dMNJXg+KjLR<2=?5ASSOV ztN({iVA>^zBK)zT_ppynh{E`E9Op6rZs(5kSigd@O>P_gGP~H;c#pZrj>YGj_UiE- z>pbQ&edV%auZEkEcH4VA=5l)`KEJSc;Iol!PViui2H?|{;r;d@gj?Cc6Ft^+Y^`C) z?Ps4@5@Bzf=rQ}-m+<+x9XZKkerPYjXLGxBlE?C4`gN5l(NFUU+k3CaIs`_4_}er8 zh_EZ}9!T`F*n$;@gD2wP0F2?U4q$jn|%Uo4i*+i*py}O zvS%jH3p?;R);4_}t9i?6Ltsv}3&5TO<4CzVverph5wQI2q8Gxgeyt2+3@kZg%r*A5 zsUE8gO!WypG;gsZr+LgYdkH>YuuG?TtW&{y;^k_l0B{;ZnN)5iH3V-rg+SE>>c>bv&~eG^+t#@ zs90#$Iau1+>%z_U_MuddnP>;6VR5ysmJSnZ8(8EW%FSw67uu2O9&0a{DuD~vv`fKy z-s$A!qM2!XXL_uyV7+BexJ=H$3a2H!IcB)kqg_=b3Yl%s%kWsQgAI}yipGbV_3gk+ zk2NgRNypXth+PD>A54vXEb`u9cg*sb@pdjgU$9HEJl47P&d9Pc*>-F;eY85;WBq{b zaTIFsw+nK^t#R0()T%SrM%XiFdCUX$4t(Bho3lMuN=GM_rMzGl%=WlXfOW82jEOP> z?cf}bYfUHnj#<%WnY}H?W8H@RntrkDc{t-vvLkanW}&?Vp9k&IT#wZTdxly_9cP7` zb8PP%k9#XvIJX1$PY6ZZbF-qb{JY=B1uzev@7R0sSVB7%Umo?h{T33odq%$6Urw_euC_B;(=u6R;OY8Ahy3e+Z#rG8BU92gx**WSyU4=!z)fDrhuq-=af?@R_ z1IHM@3VY1s-b7~49T$ap5WC#t9*F^;zyYvcMhI&b1B0HsjtsW%D2O(@+cOJ1<^p?1 zfhTY;<_k*?Fx0EIUGi-huF(TmM4Nr>f)yU?!C`9AsFD8+RzFT1tI2R@8|1|D+S_c8 z^$Zy2fx4=H2MY@re&bo7Nvspcec~Rwbfw1QzRJRI(}MsSXC7EQ7% zR(aejU=QU&w2mXB=3>FxaI3*cr;GG{A3IQZtVLj`oFfL0{|JlAtpS&c)nSzKxVkQ_ zusardta3288R>cb3bRWJJ??jLv6&?6Z)L}>_E_u38paf-OgQ?)YL7c64%Z}^W}Q8A zjmLcf_E2eiZSx6_yJQ>|pS0`R1y6XavE$VO#VKJ)xb*`p_FnmC^gYTyoMqwWYJ1z0 z9_s`cI*Z}shSbZBTdVn7aM4Lz+a+q=G-^#iC{haBMB z;mrZ|l?_p@1yk(H8=~F&C0O=cl&e#`z4W$EN+2*c3^zCtIjlg{zjC8d-7QOXlj(T4Lx0SiMBaQon}w^5Gq<0+?8;ScN4C;qJq*hH)o!wN0|;Y>u{alhmTFA(!!f zSlmt2M6Nkq^&X8#4tMpOZm)SE+WinoHi|zg%{~G^_?#%0t-rtbr*i zr8++3+cRHmB70v9&OClxGw#4tSiB=~$08(GrS&92%9WU}t}jyU&0C`bYo)2q)Yao2 zWJgZv<{Fe{_t+L~J%mX1#4I>pOj|X%ty*_xIu{4-82oORJ;nJNRuL?Y9(E~s^J|?_UI|>yv+RMdM_UWB zoNGP@@k3Y~Hr4RoVfC`-7DZWM*{Twgi`&YA#Y(V@7KU3d!QueQN?hM&bM{+JXE{mO zn~|{CQ@Pi=ABNRcPVo|kz;TA&9PX|=8?EKYS%Vk?$ArbKTLO!@Wh$!#7W3dLgafE6 z$LS#~cLc1i_OgegtXT+kLMnI+`}ymz=*^nkyWN*zg~=JxDVHNN_w6Xxgo9#ZE#d6~9W!%|yC?CgjD7=2}r3MPeHwHK+;m3Pm9_rl_|a~bM| zqwDByuGNd|J3feZomgaNd=PE5UhK>}^W_MC7#-x1@DYSqzkFn1?IDMy_B{6z`|zG< z%dii z7W@D#HSaMy-LJt4W9jZ65R#+iYWIlU+V8u91blthk z9)BR(nzqcDR=B2E>tQj2JX-{Q1&g~+P3=E7{b$vGRHcz?%{>qn&coO}^AVC4H1`pN z@Pr2AJM=Mo&BxK!)63OX@tWK7vT%oIt6~Fe@8yX4Fu2y-x+AyBo%@t+ zU;Z@O>b+9=9oy0Ta4Q!U$3&i60^fkei@Gy|Zj>|V!b-c@=h0T1Rmz{ph@)BxEDn)8 z&REaDQhnqGd=yq+#HmfT<>TtGrMB^Tu;^sj7i&ALXjrDa@cjmB04%p%@m{#QpWuOO z?f59ya$%qSBHC(HsO~3CxwbQ4amp&|C0J@3!9;MKF0^ZvMZ4OrwnsqbthU#bMY~H@ zbHK0{xgT4@X|(o%DEG$*^<&6t@r3G+KQ9{Yk+7m=isumO#WmtSiO^)p`aWqGaWb?9 zp+2(AiwKR9Z01^S6)4knWUYPqNVNOKb-YDm#lIsIBSZb3azc+FG(xgt2u)(h>h-i5 z2YGS`oDGXd8$UgqHSN;jVF5acyZ~D@iqs5I3vEi3#bd}8SZdkvV(~pJ`X4h67sr@!p0(#3k9Hq4RiWTb4x3gL+JaC& znXaNL)MYbS=*fQmGQe)_+-z??9qoSL1$i;U#pY9lIG3>Eam}pvqB@1*0Elg5GORI( zQ;!#4hm{CRp0TW(x2Pwm@>(0X09F^o>0vUO*ydB+te-%;${ak+wRy=oHpi|AcV)k1 z&p8uqZ3AQym(3lb0u~!1Z(yv@mz@o(Xmy17vc2YPv?aheh8EAH)_z!nWqMx9=WN9x zOIqy87qGaasCjYQHfOalE*Ta(CT~)#cVSJhvf90ZsaRz#g*CLwDuXq-$_jhcx!uAA z*FB$>yrOh@t!isUU1_kcm9X=ltlHb1_On%EVZ}J5yPtyP;Ul2HUl5XB(cZ0L7YyxY zjecEif`+~Aba>!OSiPCIDoyF|ZdNHMcO%u$hHq4FeI~3aRdEMl^{cX)7CSBBG`J7e zh^n{)u%fH1m>tzUxegY6ZVGQ5Ga>-iz^as^-mI3=y%|=td@6Llit~aO{gzxuW1_65 z5xO=;zrY&hl;s-uwmtA-v{m@FvxCb4hgFrtx?`u~S`N-ESTXV{y^A4P5KqA^b~#<+ z1WJP?he}jTMe|{)<}YlAtatCYZyUrA3T`$5?6B!RbtlwcN_w#9T-@iNU zpz|Ju<*|F;7iAqp$gAA-Y`E3+J!hy{ULhb#1x)G7LnGxn5`|=;rfhB;<;L-)+m^iqb)qk%u^6bNdu+*61IjyxH7N@J+ z*aKVaQ|)!~<4`@K8@_P}{-cR~d}s&v8N_4b{;8k;ek7ESgq9$rT+B9pOkUOfHXk~J z!83a{tbsDmI|#{U%GAwg^6#!@+Wq%HXuUHQ5Jm(*0rLCedNqA_UUC< zYLuArAF$-YlKb+ckE@sR3amkBpkZIT39+sKPL{3a(kS>uoi2j7$-AB^70qgy(eA6I zvg>1_+%cbWHSWX%(nk@BM7~Dypz$#*b+nL6;4`%!2grkJcUT>e5??^z`AQP3uChMd z)VZI6rH-wq5W-~%7n)w5tI<^t)n>tBZgr3I94y>TBGqMt;$%78-$xu&_2c>O)^KYT ztUidtP3o+0_h+zhtB8ZQ^@ZYUr}t<})w2*5d!XWW!s;qZ=i>hdtWMJ6>7dP*&XtJP zJ+PF+@hHuD0TxrLtJG0g92&R$$}zai@e%WlgT*%b*?81%mWj)OX0&w(P;TISeCcj< z2uWmTM!-^HFa==#}R5J ztPzNVJBNq6+{eV6#^}+|V|t&HE?5bR{ZNmMKG$*hG66%_>}&O0&1Ik16K-Y0qU+>i zIBN$i4vriuF}b1X?`C(@$lZNhRiW++--p!&adl*&zro^aQ#bkpPN%r6F?9FC$;5(plAJfgj zoSfXv3i?j@P95W>!m1hqYaOh9C{;eo32aoZ;&gTcO&-zBJ%p5dMc_(=SiY;Oe8gJ; zXPh#)aSevWb%fEtgnbg0T7PWyr?A)uv^o_Jz|T6HIP=BB;%FEma10y+tFuhWe5J5B zCDoYT^1V|ZwhkT|+LcY*@NSsBbqc4vWPv?A@JyiENROS=snlq-KCgO*9T;^dz~cN>n?W(GVX)-gwX0@@e7rlhqS~V; z>j_wLLdZpQ0v4ODw)2J;oF&Dgy|Cy;?HpLFD8Me+6%hb~?Nh6?=|3FbAe(y_EY*ue z2+{Ls+vad_z73`;OHdD4YW=K=P&d&1V6j!IuJy34)%-0i7NhdDzNlQUQf9zPLR>vL zwZ{IUQmT8EB3K+i*+};ZSe@*YQBhXIUsX?Pis1H`RhJ8 z_GLUt164zMA1t<8ZC>xeVo7dMasyfmt8-Ochu@SB)gqVK>5I={b%Ld~$A-Tv zk4j&-l75#HV+UXlBtdrUg#UoWrlH!m!>#sLRJF=^Q(+CY>n2B8?;^y(P){?uUsYA& zgf}TXZ~?6LEKhe1d9hc#0@_QS@_$5Vu&fX3%df{DhG^c+>~H1%;Vfk?j{UIO$z!6+ zF!gbYi(ojcKFEy6FW8zl!@3JrEzz;R8E$pfpDC5&XThQ$0&1IjN%BWk(XiM@c|36C*A|;2FwH*(RU^u?RP#EfF$8G> zxyy;+J+a<-Cao(SSf{RXwfrX7JpmR@-1tGja|m&M`^m>@$6)n?rEdOP*He}sw_tY` ztnT)eiBYaM>WMi~sQ!i7gj8;>s#c9K4dmpTf)Lk{dSv`GEH$mU97pz%M9`dgYPkK_5|kZ@}vERKyjmu`ba zPs^TJMi9moRxP>bj)g_v;=7nx;npHp*J^kRmYSdJtJM^q78ASU?vx?qQ8lmC7B1EB z&v&rYPRvE!vY9F!-r64#0E4bjtGE!BT8He+53txo9N2b-yDv63@l^-!GZJocoX=fh zJ*+V@Rq&XI02n-;HjrCOcl>b-77!q>vkPFcsv7bz@h&ViH|d+9H#^N>j~{`>nX2a2 z`#R1gZ+`GsF3JAmanIK9z!9)yDTaEfquo+a(OnH|GKcS0LVW~BN z(%etOlHdQke?e%t{AM~j81>0p+m#5ZZIj(T4vRU}wWV2WXEfnM~+(bhx-I9wZdB7rfO27bq}nn=2?&F zICYZW539E<0ju2=aJ!g40d@AjUAI(zuR2d#cw~ofS$D$X{8rojIaqX84cVUCL!8Z@ z7p`frxSrH+XP$w@(N<@XBd~Z0QB${WTh()QiW>%tWvaL(u(-Nv%hmM}EY3=`QtIK) zgRo3_sC7rfQn%?#5#pt#)+!Sh*RFR~uQ^p)>M;5oEVe`4=bePbzRBUX8sLw=u&$c+ zHY^Sp930$P;fuT7u(*)b*RKsj)$+x)3sZI?EH0yZa^b9i#R}AU{XJOhn%ao2!Wu4* zbVJ*l@_Qtl!0(Olhtb_WFf_`Ve3!cBsMc+T#a%)j5-!7{ck9Z#*TMLsHJsm#rI!j} z@yew}>>F5|C6?U#@9wBNQcFG@$%e(a0BOAjt3NDx@8-JHQOuc!+0eC~7`90J-XS!s2MCXIcK8m3!QJ72L!dI(H0c zZ+X+P5TVZMG2-xL9o#!$4&m>>te#y>`Ggx6+WFzG_qvM1(^1tY_|qC}vLAlc;(UAU z4i1BxWf>xWhS|Zo2ez7R*hAgRV98%(TR$PB?j^X`yL4CnRX+k)3QKLSJmleL66!(p=)Mb&i zNAy>V0pB&^q49E9YCYmd-qxqExERz^kb2QorKEABBTx% z+}AsJI3eiL41{{gqrpoEsg|H_mn%k$&%p@C#W*9(mHr|uH7R&hIuDEP#er>EM8E)N z^tdxWN=sgmjw7TFwjl#e=PR1j2!9xHvSr5*(xu!N?z&@;xZ^(5n=?pFU_X9O;@Uh& zyb0MU^6 zNHrZyVUEX&oHbIMorivXtg)Z&m!DlRzMCs>l$bLg1!jzLW;c)DpTklkj^*L*F&c4l zzJ7)f&sAz^+%<+Xgts0u7y_3+*mpk1L`r$jTDWFwL%_@ea zkAB#KTyf6GafJjSk7qgfed@R4#pcEE(P{kAtf~TBy(WkrOF+d0 zb!@<0*`Oxk=_O`}^*NAS3}WV7GyL&|ra%7Z3V)oMKGE4H_-m>?uz1126P`2SuD+AR z*`+9N{UmjX!TjDD?)rX`nDa2^_bvCD#xSv^!0hLb&=4{AVLbAE=UTANY?jdpu8gGC}^e;0M=&^%ANQ zj7G4(O1tJ-@at>ATYXLfD+xh9mNi6CBF-%@!sNum1rI;byaFps99UsSxja+Fz7_D# z<5SsxBKJ4ff*qz+(Ye=x`w$$Y(l$zDPi3}A*MiSq3!az3i8fr3RF!o8wc!41!5gPn zC76hyM-}_53|=Wj0oP!s8CCJQ2=-S=cU=qmC0EgyYr$nz!N8LUa?h`&SF^t;ec0?~ z4N6fn-jH|71+aL{^SAfnS^vi=qS+cuu==Ua;>O9;m5?enlWqs)IZ6Fq(MUrBVHtMt zy6`{`EP3tJmC2vYy6iNu?+N7mT&J~o?sYX!7vrDAfGkW$OT@V+F-C{d#aW_mGkMM7 zkDq2EG)hKV`w>*fNB&-~X@--_eJ_GzRGRGwswd~TV{!iiOKtV-Go4MLVo=XKY?s_J z<%{aVdo14E@UU4M+JzHc^Vhm3W22jKl24ZNsK{JhqU zP`;=vY%|_9@!p0vU)7afc@1yo->&s_C|`e}BMi3sExcLqPQ3Y|vY@}=&4Nns=8H=E zT^e{*SLT0@P#h>So8&Rs`!w;QGI|dUyr?zs{s?bYQ;Ij!e~LF>RPuu~@T#s%_XXb6 zFY)G!%JhfvCO;zoCLz`CCTW_|Mli(W_Yy3}?^_|xFsO(=k-rQL(;9U=I z*%+;Cmx&LmiyunIOW>ygmE#crC9<^EqJh`HqfALpZFUj<{Q8v(~eY}Z=~Y*B0GTNgyylv zs`F9l8C*N~2bhh8nmd~31pY6|3Kr>t|4JFZM8{WG3~8S62qGA_Oedf+_^7t4D_2mV z=KmLEgVxA$F#Zg1a;=4ut&PqyX=2TAJPoSLrUqBi4rRGPVEaw=sA+!RT#|#&BL?x6icA=Z( z{F?`XjG9nptOX5#Hh{8+O*OwsYfC6AZlmMdL0L`*C|^{Tb2pTe9Dn6uUvdUy!d_Y< zpsYAjYhNf|RPrcoQ~kumkIW|A5sZNvQ)v&<_FpOE2Q!^m_7V1aHY-*qr!qKF+f)Ym zH#y!0y-)M%N;Fq8C<7rswwJj))(=oHKwwi&oCPLtmagX|3+>9 zl`{P%9sjSCNnX(Dpm)fMUeutv(m}6iPIZZtPtaaaW4p$GrEJIRI-bg4v9_s<-=XzQ zt#9dgD&yaV67ACVJ2dcu=BX_KfD7jUlyM*H1XKn~wOw7=pD#71vZ69=S68CLno}A4 zO50z#(0_)HX+W(D`+F!0`~k|Da1qLptc2bGtx4nms3^*?xWHIZEhx*Zs|%)**V8tY zQ>KCD4WTTck&dS_ePeA?X*Yo~T~lp0gR(=nK>5mZ0#s(WRY&|QWx6&x9hJclt#?8h z-;VIVP{xO<_&gaPXs2`|Ku7#L%APLJ>8b4T zLTyt`vGygirTFkAGeGX)59>H8FI6^_jada{=lPEe@Y1sm$`_SRT{J)9AZk>FjO@c%zm_5YtL=KMQ=hSLKdL+R~LwEd~p&!O~KnT|gMrALoR z|1+Q?zJ~HeWq~KO{jan>(p4ZG3;advZ%}5viVv2<+G+biX}h7ECV90rsH;IkDDSm` zp?p!9@m8(;hdx+9TPQ1RuX#t!?}qY4r6)S;_-;_{EfLy|g5s5DFu)#+gmUuT1FZv{ z2IX#>1!aZ&*Hh@~dD?yu%7#6p?Zwchu#2?)43w9R&04oX`J%GiT~Pjgxkf1h?8z5U zw)jh(;9DqNbXMzmD0^@T$_D)gWrJ!UGbis&&<4=uWrfK)J`Ktjl|8s0N{=movVw=8tYC?@ABNHcE1>L1q1JU!4)Kdn zIsaZpfEizb@tUU~ zx-#8YTr3P6(+R)U3I9r2@o^nb7_&Vm`liTt8X9sxwoW_75mW$&DV<=D)_t*T198S4XF(^0M4mm(xV^ zYN~daraFSkwzSe2g0;5R@zwPfr0Wk(FL`vj7%06u1R4nCKg7Zg+^cmmlntB;rPq@J z^yN57CzuZ9i^_tNb;2}l&(!f$7BpMi|4P|_9G$MZa{At%rz7tFHh=yX)}bP1HG z03WPq1(Xe6sr7NKg<97@`J%D`dFyn<(@+*r1m&2$0LA~ttNhT)g15tFy4SV7q2vFR z($#P3bX1n}wzBhNfMaz)C!n%|kF;G~+2hYN|10H?9MbWBrEJJoi02&pMyA8~tAJ8g z{H-p4O8XR)t~vu{%fE-RpdX=pRad6Fpws;fB;F(c|Dtf05c{-`J&QJ z(KeM8&xA7LEFC{vYmU}jD0_CFw(p1XMdi@U*Ze_kFX7+8&H^6=U<(VhuGA`^toR9S zuYnl3`6$|6fh*tqv@OCI0QmpMawY?L{f=aag z9+dfZYkQB@{aQcLS_v{|(9)mF4}e<6T(GY(On2d2OwAplncHJp}lo64ciT0yU>{dA8Q^x9a#dI-bgg zwuSPn(hbTX?FHpBi-PicISk5lBcZHkG!(BqC-6_omX1LJ>R7FDDuY2K9|z^Cm;q&h zDO%H@bVd%8>2jfbRaf#k;PQ5S83HWeF(_O51e8OuPHPdAJ$epG*S`p5Pqspt?-i}D zL3tOw56aiSrM&+9TM7R|>E!jVdIQ*_577fY-26uO2dXQF?niJA zaYZdvKLTp9T+sRttv^HgqH@w)gwjL5LOB<%KsniJV83R3O(^3n?%#h>^4j1`f1{4S zF;54Wc(i^yVP+VMH(UCj`XNsqe!(MO{}W}y=s3FaLA=?(hw$dBy3!+y@TM-tn=dNu zB{XpG|8BQg_xewI{^_SZ*MHK3iSdn`9{)4tJUp%QQ8`b`@x~&({*#^>a6((GJUXe} z^`G>}gD+fh{U<%wf6`O^r#-wjUH?hX^`G>}ee(KGdelYq`cHarl;F-#{ii%IrOi{u z^`G=y|4GmFpY(7=T>nYW|K_(udp$ta{*#{TKk2#tlb-88 z>AC)sp6fs9x&D)$>p$uFkNu=al%6%S#HmkQgWg#Fy_peR)8EL)3G8Fx?c^G3ej;{I zN=4w^kWWPt>4YAI=kwMxt(2u%rC@V0P{-`+yzo5av>t83!;y9LG)qK zwktqLSAb<*0lpH42+9b0;~#o7kBKGS02X%xI7e_?bPodv3jNIqDhVd`1UM@;^#s`16QFJ{fFH!TUI1~u0Cp1m zD6HN90lfiIdIOvnI|zyiTJ!<9Ad>n3B=!L~K=89@8V(Q?4lp+y;1{u%U=KlP1VE+8 zjR44r060o;S+tD=2#Ew(776gXI7CoJ(7P|dRk5Tmz~a6D=LihZJqjQ!3Sey%fJ>Yq zC?^=w55Qln?gvoV58w(x4KbiUKumvtE&Txk#3h1Cf{D=pwZx`qfQ``rbv*!e#5fN? zoCjbhK|Nu`00hJUq{IN!7dr@w30e#QXdsdX03;3oI6!ctXgUxeXduAcfdGxgUV=RY zp@RT|MD8GfoIwCb37Uzvg8@PY11uX1aFaMhP)5*u2*Ax^$q<0WLjcYZv=ZHi0)!0( zSUVJ;wKzjiPB3H`z^!8SFo42g09OcZ69a|=#0&@6G8`a8Tq39>m>3Iihu9PgurU^( z?g)T(V%!LTxDfz53EB&5BtXDOfRvE{9mEcTVuGV%06K}bV*wIJ0W2E}&{-TJ2pSF0 zI}V_$SP}=Yhu|DRnCLzZAZHA~+Hn9q#2JE+u>eEH1N0KB#{-lRTp{Qq2HXR%I1XUT zJpd8n5<%EFfQb_T`ie~x0LlsKP6X&D#!Un$91pOQAX-?H0AlU|NSOo>BX$r}612D% zV4z647hvNAfCB`BMbpUuaT5XNP6ik%_7Vh40tod23>UdxfMSB91S3S-DFBK00xX*X zFiIRE2$~GgJ04(+SP~Dghu|DRoamkakmChdn*cCgoFNFA0x-k}FhQ*L0hAG3A($iv zOa)jR53pq_z+`cWAS?l3;xvFMV$(E$a)P>v010ATB0!-JU?;&;VI={?Oa(|u0!S1) z2r3C$Ob3`QlBNS}oCa`!AXzk>0T7o6Fn0z(s@O{qkOUB#43I8zlL3kejuK>uwkZIK z(*c&H0Az_n1VJ+ZdZz-+5=&A6_7I#S$PwMs0CJK6)}{f>5oZWOQUHde1KclGrvsD` zTp@Ts444V9I2B;aOn`iGi6ATuU}6Tqe6cA5pq!v?CcpwQE)$?I9bhNHL&C}eh?xnH zk_E6>>>#KlXps%DR3v2sY|H>SK=6oYItw5!6JYKvfJen%f`BZ5(AfaXMeb~XVuGUt zD@5BIfW&NoWjO#V#UX;ASpdCr0Uj4iasl=boFga{-RA)0%m!FH2VjjjLlBY!Fyuaf zC&lXfa3NYNDk$s3fcqg&i6Y9=;u57u#Lk7R7n>;02=f8Rvtk@X6yAq|c0PcDo)cCc z`18U`*(i2UHi^J|$Yzm5c|nv=UKCB|A#2Mj9zPmEgvQ1}qQ zPJ;J^wG<#`5kSgPfIVUdK_x+phXMA9q=x}EE(SP2@S$k>2teEtfVqzVd?fY~1S|yz zT?X)p$Xy0dOmLLoQ_=QOfW(IZmOTpaxi~}+^aw!j#{j+%OCAH*LvW6uOmtrkkh2V6 z?Q(#_;tWB^qX0t+0KO8d3joRpt`Hm(16BYmehgsC3V`F{5<%E5VHaxWfefV*g;T9(Bg4`vm)tnfQ>f50fHYyQvndS5@4o!&;x!;!)}mlTTw05Q z!=3<`xDLQ2Hmw6FC#d@rfWH{`6hPsV06Ph42JgzsVinu>WRIS8$|FkkoqE*5-3V34Mf{#Aq~Ym%8lX>rIF~k0n%73p)?UEC_$q8 zbC9N@fYMByp)?nf&qHn!t0^r+1?6TjU?ZfZD5A6ymngv^b`zwv*hINSn42NDigA=S zVjJZ)VZDG3$81E0Q(i!aL&Oe(N`e+I0^A{zUIf^<3E%)hJJECtK-^}4xmy6*i@gK^ zF93wT1kgd`z64NAaFn2vX!|li;)?*wUIyqa4iN-x0qDIIpsQH26<`m+If5|JeH%c| zO8{%P0rU`O2tr;481f20FR}U+fHHzB1bxJSR{<7p1=#W`K!mtN5Vj3q;%fkX#irK) z$_eUj2k0lpZ3ifP1z;yZw6IcyWdxD31Zye019^k>?D{ftP+5jT>vR10EuD;K_x+pcLAo0q;~-} zz5{T8AXzm1J3!pu0OtN3AXV%o2q*yveGedAoFNF=4KQR6!2M$N9)L1}D+CXS0eb-! zzYnlwFF?MyL=g4?z{Gt3^Tnop0ObUA_X8{tAq{(U$;E3h$QyWuLg}iTA&B4a7Mlunb^vDNDhW;z zY!)5A0@!#EVAWRuFNzZcabE!RKML@YC^!lb@Fl=Sf~_L*7(g+>hGPJ)hzf$lGJw%v z1H2}Rz6J<71mHdn@VbaS4zPz{J3+B9PXOc`2JoE#cvEa62sr}K=p?|~!g~^+j9@px zE)n<*z~Zj}vcCcNnQ)%MaK&O8@~rwbpcoZA6(+(1zi2(egNtJ50D>SV#Pl| z0?vV4BsuRAeSZciCfV>a$OV_UK$7?)$mok8KfA>Giy%Qifw+GG`Nbth`~tFvWIIWv zOSpao$vF?=`xWG}OT0o7QUTJa66AN6m{JK+MzWjas!KGu1hV)7NcJUk!Vo2w(21~r z0JOOb;1V-01C$dSB=8r(zX25f46yJwfEuEdAm$=Km)`*b#Jt}DDhW;z;2$`<0WC8ralZoezY0)K6kG)es06r3P+vs;0Z>e^;SYcYqJkjtlB@2j(SCRuvZ}}r z^W-w(-6rhDBGv@hL$IA7NSH2woZkR^E`VlY8$rnL0FC?rZW3NUfHH#J1UHL7e}KhT z0J8l7T8R>Zu&V%V+yJe`OgBI|!9jvsMQ{y(!ao2O)&RIolme`Z@q;sJ!VVGhYQnCB zeTw!SqGJFuY%~E@1pu@YCkWzP0R1h1_M*T72=D{ANYFt<)&eLd*iZ|glc*p_^amJS z8=$i&stpk225{E_=qh6C0PG>yP7o%{x&S#f0DN@;dWdZVAvFOS)dT1yy!8Oe2zC?n z5rH=VEDiw3z5yTt|9T%lm<7yP7o)|Ab^}e0ACQmc(IKjqya#qrT`O! zw<$mw!ES;{BCr|2;)Vd(%>X8g5`wTB0opVNm?CC22Ph{vNRS|cZvrT61hDWXfT^OC zAf_=umlgntVqOb?N`g}a(?!Rd0X8-PSamZ%vN%By7X;A1B|xeuXbBL|6yPF3x`=EA zP)x9)6+nilAV_QmFgh3@OB4kI1T_b6w+5IcVp{|3A=plkBg|U>a&7|f-2yO2Y$FJ1 z0nq4Hfcu5_R)8{s-2@Maz%~GjZwAP21CTFD2*O$dw7CsnzLI zR)C8H%SGg!0L26w?gUsNDhLwW0E})2uu>GY0|>eez#R(kxQGn}*h8?Lpir3Y0dj5! z@U;h6BeoHQga9U^l@!5!eA>aa(}w4ggP!5`wTh0NQi}STAOF1Slss zNbsx(?gUVHC&0o^0MCh1f|zyyUG4_hDCXS_P)Tr#V6*7h8DL{5z^cvwFNzZcaqR*6 zcL8`w6m$UyxC`JS!B!F36`+`4Lsx)TL1p7qCaDa_r0IR|Q zJ`^Vi;<^L$j{x{c6hr_7^Z>X>@QH|w1Slrh5DD<9s31t}2{5`Zz~`cyQHKfqVQ+aI8eU^l@r5f}}yI2<558sNAn zAqa~AXyXAmDQ0>A$_Wk2Y-g8ecJ2Si4F_{`6nNl0c&_-k; z!0c>9CQ8*okiRhkpBdN~!9@vr!6A3DqjNK7T>40EpcLbHpP6xJNk1m8H6G7Jj2wIs95)|l#Aj?1mZA{03LCpi(nh#~PGZ_bA zv^PCvbTB(*bTr|EF*=!nGCG^xGP;;NLom9UkutiOgEG3Cr-owmFymzOG~dYRWuk{+ z^fpsv^fBjT^fjf2WArm~Wb`*b${1iOkH8pcUX(G&T#+%@)EbE~#4M9B)ZCOY%rqK> zG2FZ^V}uDDjWN=+lrhR|kTKe%8iO&$bd>R|`B27Klkr)Mc+*oxg4ro!oCzO`G2RT6 z@toN$V}i*Ok1^4VlrhO1lrh;nm4GqDjFU0dd?RC;i5`bB-AtA7yg4UhhABNBW2TuS zW0v_*#%xphIgB~xMHzF=6&dqPtqB%QnC)Sr@b|{6~)b;rl%ao%{4G+H0`;7X1H?KM$p>;(#=^gkjH{3e^6qC<0IkKVM z`}FKKve)47n-rMRw%@5@Q*Lk2cW!%Woz813byEboI!Tib>E(SyDIFj3vIl6Ea>+@e?svGcBt8i`|T^S3?JF1sxq^ulUJvUnSrx{s+yYTgR1%FE#Elvydu5dZrox_$7!Wb z&JOhn3?(=_*#@>eiuOR-fAd(pv z`=|bGlm5((4@&MeIrayajlX-({Ykc&?@H-U6*cM5PuH>wtj=#M7THCZD+<`bg}$z+ zkae1ZexD#ySd!~ZFa18Xdiso2q$A-IbbArk+ zSw+>`P85{`ofV=4s@^`fp8v3VsZF4I_jeWd|_pEktvvp&=Hw>Q2k)ym*+}QQCa8L7=f&n;R!3#IWw|Wf!tWs)tXva zRqWxmu{J}dNUA|y%3NKoxs_GNUe8ujOY66W^54J;TUp`L$QoMDI@m^G*Mz24uaniQ zg{+m8b+$5A`~jV;tP3(FrVi-us@0vlS-rYe7O%dmQ*)F%4IV$>S$(&MmDR^S*ygUM zl{G*%!OD7BSwmz^tgN?{H9}U?%KBJYV`OcutZy*&uZWvKD}=c)`&q@N*oRxi{#Mou z+0#}w0GV?442-g}K~}FhvKzW7@EdGpEwJCRGVgexmTG_c2C#lQD@ciH1x6wB8*XK- zv2TaRVT6_G{AGP<`3cOC$mFFh=u?$XVvI(n?$-|P+OcA+_1hj<2FZxuIT=zBcYr6X zVuDrdi0nXHgp2m#zRyF{8wDqeao0Q{$5QR+R z$lF$?k#-k;%c=a|vBJR!KX!y1J%LQ|4FR1kr~&7Ft2Y$;4mtAMXl28&pCL94LLXS! zaO{_?>_Z#g2xJ$nY_s%K|0Ch76>hPfMC2&&F?U*-)AlkT)bArJOu(+eq8jEdD;tOX9u2NK=Eqhx9=pzPse$Gy?|O~k(1mBj~qX@!#z_Cr`3b3Zaw<7DV>WrwWZ6l4Qj z&jE+6Y$~$uR(8b7rXefDL`4JGQ7fB{eHtm%0CvogQ3lU*@w<}G?<=b~1N%HH``XH8 zBAbIuquMuCHVb<$BGK=-mCeS!7MVu66IM0{`z9OSNh_O+ELdkpXjD68h4ZkNvx=v! zY(BE`R(8h979is&8RvJ_$`*2!It@1*%yU*|u-|1s(&%^I%3i?kLr=2!Z>{h}F7y@j zmYClmQ&(IB?;z9fmeqR+`y|`?|FW{h$UXp#h_|imW$b?ZYDBzaWlON9u(G?ZEI!~B zggO;LKTR;y9+!gmt#{2#BwGe?HZg%#wj7xv?g&0BTY)_VZJ`rpkd>{(J{)@w%wQ{9 zg?(3$`T#$_6~2mHs}%ioM4KXB4WC(A3M+dJS#4w*tWqMA^XpLG%Fvh~>C zN2XsUE8Bp5BeDsYk0DbU;@{?<1cZ|?vslGE&rTW@k4}%Y^%;?Wt))c3>f`#TiIsp^K8U< ztZWOi*0z1*wX&_qMiHB;D<3lDcpJ1+3i##MQF{qDj(fJCb_3R}I8vF`@`idfkv%Ksiv5f!z%JMV<{dy{`u6-xzi_xM^U#4okTT*Wfy6-FXvk!C#;?r#_ya z7Se;3o1u^ibd=0i*aq7{OUzH;Q}_&a!yecRPtigOL1EBxQme;eI#w$ROEhTdm<}>P zM$i}kbsB)q58nzpPka;ToN@gT^>^?+T!0_oBCLgVppzorf)TWxVW1^w7Z?sBVIT~J zW;*y+Yf-H|JHim?4TGU2w1zg&4+cS7=m}bvc7j&W3)(|p=m4YO8R!F@p+9tmZqOY< z7&rZ(C2J}jLy{V_E)52)MN@*N5}GFHoI_29+Cf+70qvn1bb#)liI&DRO|E*wAkd^r z<5y?s0)+{u2xu8v45A(CN#f~Im34!~hJ0&2_Z)#}CSwd#@TSn5c+QEJBa z0(1l|7r%q=fn}nzD%2|QBIrovGjJ9fL4ByIrDQcM)u9UPrfz4!Tvz}LVICNm4|6~V z-j9IcFb2lLNEikBw)nF!8V12o7yv_HFm#44&;i;*HBIGOQ9R|jr~q0{R)Wf)J8~Rm zQQ-Mkz~i8$WiI#`x1Zn=T!vrZSNINe_?!-?)ABMqd_u|2K(48XmXcaIHiE{`G@gH& z!86bjv@~o3?V%%RS=bqF6VM&_ic-qMm=OWFAUEhR=bVribjZ>vI1OjuES!V$@Ehpx zrmx^@&=F?wI^}6U90HvH^*xbYgiG)N*B`=U6t$e}3vEEl$Z;?p`oU=E1r4DtXi3== zx`57&>k3*@)_|eV45mO2^?$7^+d+Hi04<>-^oE|$3Hrb=cm}k*Y!0?LL*3k7BC2E!*fsv`oq&HsQ~7LCe<-urHo}j>2g;2B+X4oPn?43-}ri!C5#D z-@rLI4qw7yI05_NBpiVQp!IM(ygM~dfnxSi=odDBe7-&T}6ehq#SOags zTf`rr*_mczntkbJSvHt4fSl<#VXbA~g0=7%WQObz38m?7WuZKj1Fe7W;_n^=U=M;o z@If%#L9X@iUvL?Iga0ATjAA=*~^U;(ahdhuIa>FcKb#~_!I0HJR^aSWM z)X!iy?18k|jH}>PSPfe8b%k!w6M8{+=mI_9adONlZ}HAia5{xlCze*DQY%9x zC=SKoDJTb}AwN`vQcwYk!V(g!?~L_^Ke20R_y^2`*)SjGLIm!)K!@pVfHz@@&LW(F zgOE|0yu+#;Ryb#Q&J;fB)mpgT2)=gTnGz5hbrp? z#}3dDIz!iZ{yBx?VK@Zu!h6sTxmHXSuz!hp01m=o7)Y*{kXtR;kHH-5AHp$+rmBiV zNhk%Sp)8bx@=yh;LUpJI@%8zq0W^fh&=i_M8)ysdpgnYej?f7@Ll+nhTEex3_Rtx6 zKu;(GYjD?zi|0tBR$F>r5d&+;z#GtA^}ig;B$y1(!%Ub3vtcf1m>dV=;W^M+umfoM zmlZO@V~`rsKw6kXWcsA9PElS5I!bgmvb~@M(pgIN2$&G+|9OgSDolYHunBY;<1Uy6 z{a`S;83My$AlHK=gGO981})*H5%Cn52%VuXgh3V@T`tueKxi~&6g(hB`?(BfFzIohew zhL<+8cED$_8{)N_s@>DspnYR)P;1A$4YY?EPz$~#7Z>3t(4(BnpvO0QT(buTf*#Z4 zhP_aeOw@&j&;;5-B!2y5Bm|C;IqdPy#aSG`h40`3`~W|~Pf!o#R!|?RKvgIKaj=L) zY=!Lx9Sb5CQpNEV3yu6_%nhpZEiYW6^d_Q*!wX=;`MTitQ%c zg4=Khw1wXQvjwz*rtl1C8^1NQ1a04IyI#BV+Kq1x+JSEbZJ{Alh0>s{pUm1%%1Weq zEK`PvZ;=b_l4}Qi7v@LsF>Hr36ze(o5xxg)R{sRrpgs%V!3FphwC{W#wAZY?3ib~m+|`7*iOfueR-wBe);$rO+Z(!v?)@G0=zQxI8d=uRn4f>&TQ zEQb}a1YU%Bp#8*+@BwUs%}`VONfofXOL1?7_h1XGhi&jaya^j&18j$#@B!?A58*9% z8#cjO&|4Vqz&fY}wL$xgjUfXR0llLj^BYal_klJYPr-3emE49qkdEu}kQsjGT5exk zQ~Qr9@*wz=Qn(3!fc6`Ihih;PR3+L+TmuO(9<*(w1!(+0{y9uhtA50O0@K!RplpFdRm}C{U@&?|x9}X^T)L z@)vxh@&7|CTR^*J&w=&^hrm$Kp5W(1vIn%=_6o9Ns}h zMBKHFHwKhYmGW`;3UuvMMSdJr7j+2eSxhex@?7(5FltQ2(wbgZgY(8~p|BLu$C&vb z6tw?hKu_c5!%g%xxz|Krvz~d#G_30Zc3G}3;3qw9Gbs%UFkm_|-Snn|+TvJv7TQBQ z&<>b($=KE6*jOx0LF2zRaq5DmURteaAEyXt#Zm@JfwoX$L2u{smT*7}L_-010<^87 zNw216e$ce+4X%SQwOY9VtKfV1E`XGOyYb~~!P|o~o6rSKv3$!buA#*?%(`ZwKc~r=s;j zzh)}m4(3JY+rgpkKT)@XgG~be#9v44FHmiK1h-%}_{f;%p!cxfg*$K?0+1==DKRxK z4FSzlwTw#xUPfL(N6R{|c0IYS<))<{_ISsG1agp4J{)wN7gOuR2v9)TAsjSGRzw<7 z6i61x1flR?WC|yvl`HI|@yMPzu&EoE0+Qlmj~K{<0VzRV7}o;Km$!qn#)my5EH9(U zh4Ekp@(_l0^3)`}5yA7H!^*vD=_IkoJM)`mNrYZNo{|#aB~qoM0P+*)lMn?3K{wuF zPy`A=VJHd;!=ohEUiFr?_DNcCkdFYHV`_s`8>LlX z1Plai8EAvF4rX5HkG&7{2F(z5Ku`E0_5?IKng16vG6RYR1#nuD3A{1 zb^_)^SP1iB9!!O~Fd4j3nt@$g$f~Mo*rhWClvvrHhv_f}+N%DeP@Kg@G0d5mv%&MU z0J{QKZVVJ=KrRFYU=P=eVK=-4+h7=BEW&&dyv8Qkr(AywyI?y=CjG_AsgxCfgr28& zxqbs)g;myVCFTlP4$ELEyaG$$W$^rZO?6Br1n4iJt@Fb;qSssS5TZAe{rCM@34|LC{@Ijj}Twwx&u~rF9h4cu#^7bsWBeZ&d$Z zLvIun*hx_2m*6M(5iY<*_yLp~RP;h65J*)W!c@rwV-Er!L_!2)hj0k<1(?mj{ygy+ zxJVD0oTr5}kQ!1!N=N~@KmlvAl@Bv7_Hi&=sq}C zu3AGYP_eay79dZ_m4@__OR)5llY1GFyE2>D(3A9kuc$m_)thqK79N%m=_c(FDpplv z19(_TsWGd4C?WZD6H2bQk|yH80F!n(1*8&sSh4rQtvhssF3=e|fL9gq-XPHlVMptb zv~?#Z>zX70&;P@EMn80wh!G%vgJBRTK?5}j>5D}v>jMKo0riL8pw#vNFSTA|3Q&He zE1jP3ppN8Tm3oO#q)Fqer~dz7k$90PaIe^s%dr=DawR0cUU5H|Fu8et(yIQw2<73v zLlXHgUH8azf}jxse8t&tuH9QC7ApyJ`dErRMON3|s zQ;+&j8sJnsO@YZ!879F*@FMZL+5}_|MyL|>hF_In(&1N$NiH+vz5D-zfysj+)gbYp zo0l6e;htXAWOP;h&qEFHszHO4GN)3GPi}ZkT4z#BT5rka;wo#TZ?I6HY|h%Fdy3D zHV<~-#cmrOy_BEJq z!dsw(?ZkW=Hoy+}5Z<-d?_j~)2uSgGK zPp(LhApZtbwp)6+z$w)Eadq& z_!)kM%kT^Q4);JSVl|{Ya2x)DTW|xeL2cZxV*Ux&;U?S#>F8aSKuDo?utTu;K>^B> z7L5ud7+Dac1U-yxiM%=J;p}uw)ur0YS?o{aFFo>fpywibk4?`@vw@zOs)Y1#R}EY* z0vyLwgPx`O*Aw4NprTRE^&~h4goEsA4+=<+9JNZ;N+|++cE|;JAvfd!bw71Eb+a9q zibxN7^Z+OpVn7YFAg02Ne;kYYu1Z0#Bj~k+{O|-k356gUia}v03VPb3hk7NfT?s1= ze-fac4(XAFUMCs{dWt*@^h8RHRgXccfF6O*(lc|Vq7N5qK#!f8aGiju$4z=9#RjbN zTwQMpYy>^V(xWXs=F+1nJ<1wDiRdxc0MIgi9p+ki3kZpZT0YOX57U1=F6;)MGKq@JfN_9}`6`2B4kxS2W*Vs^p>)N19D1maTiK$E| z5xN%f3Q&P5)%Bn*G=hfUrL;YE={*Z7zE+^XR8qr0)u$Xur#JM14xmIxwraWK0#i0xJcZs5ZGx1%;v9(WL@j1%;(* zQMfBWxlP)WmLXdT@v2X^D{z5b4JK)8e}(HM;I;Obv8$!4MK1=m>X}dy;^29h0p%=8 zP}0OmN10S&NnpHFyh`OhRR0eKA_pZ%3E)X)z$(m@FaeY+bvG5aa-~5_x++d3P9-C`WXg<6QaM&` zlj@J*N3p5hEs45c0pQDvCe`ou=j)>up4v}`W*99 z_ylyn`3!TP>VGd5J*oT&_Fz8%dLGc0fc9hm5;S!>ig^+g`3X1Kt9M13QYbY(DnRO z!A~A!zv1s^2;uriOoep`GZGe&@Sm*xL;QC9g^SDZ0T!-^!k;ZZ3s${#d=)jlft(3aK}PrsSs|1gA1M_`M;*1Zt&V}-H&kAp1-i14G z880aZl_`6A?3*L8coE2hSHqG8n#+;YkkX-2^Wsw2o)@J<;i&fX-na@% zX^@UgwL;IIYWHDwHKe3rDt!urmJ#nX1v#pjBvn!YsM-ICn@lzLY%rQ;omB5h+`NQ% zEmyLnI*L%?Jt)7dfj}uyGboHFuY(rHuGc(EKrt)#Wa_|r_Cs*A+jj1+K1FD1C zsCu&6q&it8Om&iKm{p+)R0f5u@N8R-cPzDW@ES=y>{6(UsWzcVydgt@*MX!%#XIOG zjnGTHOdE+4o-(K~y#%Ss)97Oy^%1H_ln51T3s5~Z2aUO^n!XgjS3Rm4y=0jORP^%* zxEXehyG=2hK+@{+5~SYbHAH1lz3zSDcOuuIr=nMG)Y8Kt3_Q=?aNxB81@vHR_5zoD zC=7wY&(JaiFpgodYkRBwTi%idD=U{4g zLhkZ&4RZnJLb!?jMNAca1$YJf5?Ewq>Yln@3`(SKz4?IYPy?qAzl4L7JjIu}_B<@d zKA8HGM@@C!g_rQGNx?GQG%@&Ge{Ie0Kw&dBum6dSujTbu@^TgVb(b%e{iR>4x2#JH4bZ%V*ND8NMP5U1t{ao?LalsOfv`)N{R+Do3be6= zGc`VY`KMEN?j$Po$3+RA6TJ9|$PEQsIWEN&>jabI3BrC61qR`S4S$??Zrz28{Sv*d zH;qsT+-rJcL~1`HGkT++J+Z%g=FiqRdND;yXm7?WeZn6Wn}*Vq#s_BTA1hA3GR%fV zRJm|bB92Zz^2LBE1x{JNq`!o@tVGm7Asq_S+HOtv%91p7e1Rp3Qm(~g0$OlV0Ey^t z%3?%l=B|M9Pg|XSZIkc5AfQqz{^9{In*J!nYQ@AGgbCs6CgnQVWJ+5U;)<3o8XfEG zB&d)lubTDCADb)PRvMy;Mi-5a{>*H}Yq(~8kD(A;u|d15+v;6&5?QKfsQ{CzfIlKa zQv`Om5_WyEVp*#!mj*b_C5o12_F^g)@YmzJxHDutX-*U%rMlHfeby7p#!Ow(XcOvD zMT@K8%bN^O`HM%?LLmDs+d-d&@-4-w$ZZjGq@@w=| z)XUd|m7RI&iACs@aNFtkd?>h}Kg{<>u-Q}4-!0-EnsnEMwOvj6J2MXDK{KXktdf|{ z)G0)WxlPwX{=y-}i^h~F8qF8#{g0X4RsAVBcp!Qt&Vl9&X{9y|3j4zs7WQYi)`%C` zBUMr_zBVnxv11_=yq5BFZy)A%&;RG8BA2q%f5Z`okixSjC9fpfJsVHI< zTE3C*r*spCZ9yRp1p+T?2BHvH$4r;e&W!VgWHVce`XlL72PgZ(&F@7il|3e1F@JZP z)-1vJJ8NbY^E_lWTZ{Q~1)ejf5c#gAF*l0&>jqXfa~=!H78DiGz_gD-wWVoWCM4WU zC>fHSuT;MkMMIo#{*p^plO>v~WhPGve`e~6;KR(b(WJXwMmJ-@En=E}5whkJ(jDuj zd%f9!0%vya#fW?-lUq643%_){Y%`7>c1yXq3U6VIKPJ#A?5w6%j6Vn8{_Y;*uNSex z`kCHk{)R2bcc1YE#t?KY?J?Huk0I=F=11xMMa8JtmrUAR^|d?cU-bo!jdi<0J=3T- z%|D}=SUfTL&Ul)^TrN)XA6_p`Uc)&&Amdnn)?ivgHq)#GVdXYcOZe->Ml;-LocgIz z=g|$P7Z^)^)b;4eH*isER$Uv>rAhiv(>XbHsyfJ|i6zycCV#BIQ0kTpB)kffa3h;( z73(jUYBdADhTolLhP3u9$QY7U^~h=7x;|}AU_`{BqR<Ix3 zH&J)`1g;;Dx7u-nw?+9bF6v!3ZjJ8oQH%Mje1R_`(V+h^r+HAr-*TxY-lgTPkCtRu z>h}eHi9`eKm7HdMNxDaR?%f(SqElbFRIo=_?}&viB@Ab z-D8e9w~r?0+~PhqJN=Xi(#0ma6nSt2+}U!wzJKo0s@bV>JF4Nkl=ERi zq^J-A^O^=2u`lO!%cA9{agBefee-7`>6K-bg+WT&aFJ5#M7#gDjzA* ztbiNG6F;;lTB6+eX9>xUiFwR+6k_90$UsP|)^|TV$#+`A z-I@*eb+}5RnA)h76=71T=G|t-$8QGZ-ZTUkJ4lu?&*GJ{Ao7$7i7=1X^oN#jfpYTY z=eg+bf;4jYz8aWdD#sKeIGU_lSCF|^fia+x$y1q56RWYZzNuG{)IZ!$eKW2iew_Pl z)?jWru5a^gMSrf?G^AehnY3#T94HgKxCc?u_!U76qB6C)mg9LmBiyv8;;-+9n#F9X;*a92qRUnM zWh17=xw(60!@IF5_YN#ZzBR#NF60zf7Jo@XTwvN(CCZiPhLVFTujja2E@WISbTzt= zuXoLys?5@Y80pnF8&5s9HfM|4sZp>Ey#fbiF`^N`G_x~TNI19MD>*~5o9OC<`#Q0y zWU7y>vS{

h6ssT3v0P=~#`DaqiLK9B9%ghkL7d+H8p62L5?9%7dV5I66sH88-=; zlSb;u*kDHIapL@^irH74Fg`KySqParw4qu5j*;1%i4F1pJsvZ@hQ9|Vy<8&dh|=ZU zY_EC$c7t^l3f&1-Gvz-v2TZP~iNBR8{WLAFx9Q7O#K`h)c55AoOx0%eG47}g#ZEC! zHp`?w-)w%`KQi)8MYl=*b9}i|(KM{-FGFvdUXuWuS905<@73S-bnEc}-9)!Cq7Ue3 zu3YzLEfpOd&<7oLrM=HA{Nm7&@$EH%cDhZ#MC(#~Zs$=uUtY@SGy;jLagIq>i{Mvr zsrA&77G;k4c6H7f97w-lZp)^Msf+>#LA93NPw3GA62AHC`lqQce>*Wz&u3<#5F1h1 zS=T3YpE30C^K*J6Br24^MN@*BlLBfNUfp6|qDy^qsuo4p!(^;YOe0L8+D;dyX=e%1 zedcO4Gpe>f#`j}&v$nRspzqJ>=6G#??)!7uf8H*r8*Wi-&eSkbb^HZ6E2VWEe>2V} z*-(cVmYTg7k?U%@Bl4*53l)o}ifmM|qws*YJqP!U(^xb@sGTd{ICKe!s_3sefJ zvjA7o>Kk7@|4*!&F4rTO`AmxX6hu)|wmv0aww~Lf@;1!&=bdf7cA4*w*tJZ56k?lO zg)3JJubC9Q>}KY`3gt@%=+_k&-Fmj}d#^^y7i+Xm^g6_BRoEk_noKCPUZ1i>*Pavl zWOm13Qa8a|L4h+|(lnsN-XfqZ=!Mp6Z>}_6QZ_N5kLsC94VV>ug@)RPzkBW8XVMfp zr$kVo{C>4AwK4?EZTQ57fpT%C9sw!L3<75^y1D_`9c)fCU>aPM{-zOmR_w1?e;@q& z^NBa8I8(JDjr@67nsjW$keb)5YeXRZOy8yq%I~)HXEI+_ zc2;sU%W!T=1DoOZoX^BG_P5LRRTFpi_|Iy9UyWWaO|&hbB% z#|>e5Gq;B3=3n^!(OQ+8+m?u$o7adE;p4TNHaNikVF1X)Jwx&HQ!qd6{}h(cs@LOOE#moR6m^&HORhBjHTIm;tIoADp-UKYTbO#SnSOfHyn?2GYkzfLsn(``YgTA2 z%>LGNc2~*0$`e@JRBS_O+lkOe&-gQ0h16asZW^jt@%_MUg(Q|>jPI)^W^%ZbsM(C#q|&npME@y)qNbR+ht*y`D0A%{C`Pd}M^U>=!MF-mq1iX* z3T4VwXOyGhEW94FaAx$gyEnd?UCiRE?DI4s49y8%dhzjX_2#YC9xJmw-5c9?F>N}d z(HjlT%rZ|ue!khhPgbF!2_4B8*~QF8BX$ZJx_@K|-LQGotbXn?&&iR&Ma`h=*dK=v zYI%-9nAxJU;(W)P>g*4XTWu9$`n>bUp8Y+#qhNP}HsbOaUVm6Sa!&K}1Ft*LmQb{N zx|qUUNZ4sKv?PB!JXf8akL62&hE|ufv8!E72Q=c+cXfxV^7RLd%rWt!a%kwL%AEcw zTv(1L4Bpc0jkUfES8&mM2ER{tHER`mS2XgY@l5ub2XkF{XSWl&GemCeV$OGAnz5pr zN#E621W722y9UY}lTa>i?36#&x58^zLOAcVpLaSTFN_H-9%@ zXdjcayMK{ye;>1{J5A6wqZ55h${x&$ZuB+fdXOQ1KewiTzR~Ga`^Qq2aI)-7Ip_5= z1JLkQ>2IdV$EN;fo36>|wn8Cc=C>aHOujq)O>j>pRc@tc@pJPZKfqM#iQd8ird3b; zg$*_{xsJ;-*v(1r^7E$*JbY4}pG{B|?!#T04>2bdM#mv0v=?Fa8e$6e;(Evs(@xi} zdst+zA#T{E78aSGXICbwWi0b5g^k9W@^O8bIV&H&;pSE^f8E&Y!`+!evDFoJT$tEN zD{qSRp{a3PnwinPDe2cnn1#LlF>%Rs5<9ydG14v6GcW!g^J@I7l?dFfb|#E8cYCXF zMw*6wDgL!+=BEDp<@{s&(XSsb?M%>1D;ZyoG;) zN11;82qD=X;Z&d-M>Sui(Pm*^f4|6Nw}E4{UpI1$$*r(%jd2H|wI?_KoM&+1?1_!R zrq_#AjbKW@#LD&M8ElUAqt(rhH)n@a*~{YHx#5ziEsei!Z^N=fBWvzU)heQTAe2v_u|dn5#HDu zZYmA%*Y~YVFtZ2v>v};%K0Fz&?=T;c79Pk(u)Ei8<_`2{_mvxG)(-TCWnP)!wyN)b z-jsbu?mGv4flrS!#|Qe$L^d7g4nt48HT#z~#p@nTOjY-BCTb7`Fa?cVq&rLb%w2n| zy8dbK{dBL!<#AkEbuY2K_4Xg$PjuNk&Wx4c%V@AimhknBzTdC!aIRdUM(B8V__;eR zGX7OMOv({wuldhXgHaUm*V${(MoU4PHMME#l8Wmxl=95cq$-(y=Q`B^m8Y$GJ!>Z#`Iq5cG0k&$hl zciYXV?U~PJ&Y0z9Vo*8_aTwX?gNC-aMqFGmKiAzq*!%Jl_u>q5au|v0Xs!<9w*KWz zQ*b!B@*0sm*-Ub z=2lBI*fZ1A;y)xlv)Mn|pUby#j`>aDbSE4&;&F#RjSLAYs%#LCvhmRzcdNh6sh)i% z6)*lCE_PZIY|4*eb^63y_oj4YX~mx^pS#@#1-t6(ppAjd=9MvizmI#!t7GVo>*ku{ zW9VfM?={@1syvJ4)_G;CExzj-^lBGv@QLq@IV5x4Djdu!V*O_I$z353M{Z z9v>MNnfeK67G2~HpetG}_-pB^Z2 zFBzJs`PfTlADWRb@-l7afw!vn=J~SIw#oO`ix>WTWHyNV$*T1-Zzd5`>M!F? zG;5b(dtzi>2J$a4OUM0d1}ZNx2Z+_zd5PJk42)Xh-cC!d{Gq_=wRc~4!gM+o9XqGO znuCT`=3}NWnbG)muFZ)WUaVd^y=$8aFAkp#$!FdFe<|Jv;`)~`y_{}a>Q=t1mUwgM`qMmm@*Y#vSY|3olTo47b4=D7FEf*# z<9@z;ncMMBt)XTQmryaNf#QMFzg?E-^2G{MbRtPPx5DJE;3nm&RsQ^1Las3@o3Z!mqQL>3X&vP3=ic5rf`vr&_U3z1_a*v=Qvpd6k#<4U;g5A-M_~ z8vH+d@$39=2i}cJ)M$>2cCcR_`^jsUR;1UAL-Qn}IA?NAVX{w4xj4yREp=ZMGopBN zjrn;plhgW>{Uvx4;kn7|`nfM5_^eZezV4|R?#F9~SIHDuZ8Txp=hIG@^?V<`W%^Cw zrufexl~qfe?i7>E<|(|a^21uU0G3}GRcJ_?KPD5B-7IThqUSN@4m0PbV>nxN;l3-) z%x~+sODvu04|X>I!+qJ-n;lb`%Q#zm;p}&PA%C1f{t205BeKJE9G#uFa9@%2rr~^l zyL@%m^Nuzd_~+)E=i>S|*QWVvJnqRJuI)ziDB(K!sqS}z)b{6NCbWq^GL;vFv)LDJ zD!j~M=xlR;riUupa;ao0uk^Ri<#~Td3X_S*%^#a<@?YUU_@|`yz2i2c@QE#|=J2;W zLPgn$?)i62pP3Z#-)hR1zq|XWjY9VD!XvK}h~{WpuCKZ|@_5U)oPpZ8!De{Z+F*sXxgO-zpxc3LMgAB4D7jW)d*!2a7h5#8`#<)f$xZk7Gk66!+y4)C_rf2V z3JdRdcQat2zs4gJog2wRN+_8)|6W6G$vAQS5B>1(b?@fW>pX7Ak)<}dduzp}RsXVN zvl$Z}>^1HFhiHeH4KMm1J`A}}T70uNoBE3=PFvPCt)0w_HHky(gX3>9RppkKSH8YY z&CIsf@3%xfHd*=-_rix~(;cgRs7xsBn$YX7&}ZlHZ| z=QNy08Oz)(IXB<`*tYfVQ>u_{?u6tYy=f~A)txlxu&IE*%@wkk1Izuv5y?IHa~88a z_|qIBY1?{)0=4z<$Q58Cd1U>+XVLop+s)!X7TG_i9e)qhjzVrlN2J-|PR6$s`J-~& z%e&av(2AWY-2YZSZdBf2@Ib?}?K(sQeA2nz|I`TW&EWnV&=%5v+ZdB8n@8y(k1`?s zuX{!VGjKf*xF1p{EUuio%d&7C^W%Odm{xpp#^OChJGitx}NcZSRxnX7I ztr*5#r`@P(QhnjQTHc}|0qLu1?Cioz567aY5KD=n>1s#(LK`8>G=Ie z6IKtt-&X#I(d}QF@qC!USZj`ehcD3*OEfn5C74F@4DY&&v)docdHq=a-Y>ZUyW_l*)MTpm zk#n1*3hs{pHbn@5PWkj%d?7zHpl)&~!iP+Q?S^|1^ zV-uLk=+QRw<;a7k!XAHu@5zH^#~wnm&!2rI4w^sr@QkU-L6h(c%j`xrglm_AzO6Pm zj)x5FxH``uI~+9Y&oUz$vX?gmdLA^h_cB9q|6C|>Y{NvpqCtkT~t#GRSSUTt4@?p`!X6fLQI+P`S@?LJ{z9c1(JMKj|d zwc&{)PMVJpd+ow^{iF#!#N&*?r`+e6qbe0TU%W`uGz4hh?1{%kGmkRs>bCu%UgaT) zE*DOjcKG#OJ!RfJ#I5h4imrmHk-t<6_l-Pj&K^>eI_p08`eb*_%nRermM3IqjTs#< z_pB*;m~1XaL+=Epn0&tdiCUL=is@)DR=#@HbUI8m@+5e@G$)>OUyJBorb7KAgKyVF zvxNH;cfmRH-C=)B>?>$EkJ8@@>#%h|lk`qlP9HjtiykB%d*}G{fI%5D%I)H}X3-Ji{qtLM@d$5aIE_7PE;J6&LG*aMeD?!g#!T+@xWZT4iwXEI zdw}y-aBjFJ;+Q{&ugnEg<`{ANe=z-yk=OG-xNUXHl(=PgziM64c~8a3$!|ZH<&Ne> zbL<$YoOsbZ{uMrtUoHaM4}V?=4%StQozEx0lA+?fedA`&Ya*e+vb@&anB= zg-)*xewPO`W9_i3Ba!8@y!f&DudKRB|Hs97@y7A$6hW(>+#(({w%DTmXDj7K2Mu)* z64K^tnu=@2_+GzcW^*0)-X*uczV_*k@9reL*(kB-@8S|le7*cXggjQL^9Jie3s3*E zIW519es)u|yJPqFZV%tj9l{$FJ6?9PIq=m}0mGgQ@1d%2hs*1iP2q3o_3rCArrkIG z>~XawyN#^CmD9ft&i30zwCUDL^`fb616{Rn$UOXfu&`#MrG zFZS5C0(1UiZsRwya&|ZG+Zy-W<-2=$Hlg!;Tk-PBPt&ahC?c=-%vGg~0jvlzC zR%$#Z#pCBvA z6qLO`k(C1{=S;Wmv$4G;d_>dS@tJ1M$`qUSx%oF~Zw<9cJ6;U~-_%(#cVHAC^_ z&gKq}qfX=s-PgIuNWxMhWg;j^Pj@Q}_ZMEQi&&y#8X5CQD=V7glOo)Z>$ZrUM$uydBTj%c#c(i}0I< zc)z}L^YhIyGuz_Vz6ww-(5%HT`Pbjf<>K$Jp0>KNIbIE$uwctobomH|2E)dI=C)GO z4h`MrvQ}tNWbErc%>$JZilkSdiTZ(*3`avR7PTw=cH90FkN$v$##3I$onT$2oM<|F z;r4avASzC7=W_zhSowVg4c%oXu3VBMw09ftg>q^wnF(5H_f2Sbipw9s>%bM0@E3p5 zUp!z-;KGZP{oX+HW(YH?6NDQ|xTB&9&o~g&peixjet#*@)JHS&HX0exc>k%gwH~`w zPA_8eW|aoWbUss`za8-9^qIxdr0^Zhxks{B%^SC94w|~Vkj6?rb3m~+@|m+CA>k1y zW+KRKve6glU>4OuhC~_-{U2EwN&o0j@I7sGfqACdd9+v*qwR4h|6R6FI%Jg zkTRblQz)i9wueG z{xZX}*WjY~w!FD34Vym`^$V|Udr{o=nMJ?&>&9J7?G6@IqDOTOYcL@XiBSh2F;{TW zOPXa$^~zZ>=p79Xwi?}Jb&Kr5c@3JsCUn|Zr*?`p{0*(sPG|zJ1ezrzJaQl!>O2cJ zZLRx$WUBgT*daABnYRPY&%d%>+>_SyBV%!g@uNX$kiYkZii+lp-Y~^Mcvp} zp+(*@^};IPVkc3yQ2r&ppVFG&RBT??xsld9eucl;=$78>xWbnz-b(Mrx_e!PO zgN$arOuT(=O+{!j|LI@sC4!-S-=CCtIR*_iu1lBA{NC65@W+8(iQ5v0tMr&#uWj4a zPE+KwXZ4n)t&;}0Xh^z{ujJ_!TlTNO#SSBGsl`NIMnj=DeRb5@oMQ^CM8kGm_s^N? z#wD{aU_+nA3`l-cPOX~a%!=ji+RABZ3;r}Yule8gG58<3=1+)Rmd#B^##L7;tp4Q9 zjEO1S?lS|fQ-E$`4|~`gj@Db6KWeznAmH3c!hJNdv^R*t{?%2W^ZAl+^XCn^L}F94 z!9Q$_Ay~UOHEV9N#BY$@e0tOWWklf!w;yD^a58K{hVt8NsW58X{}4)yy*(rQ&$s8; z2(vx~4XHBWs=e^dvCNc*&o8CkXRVm`j6r zyOB~GjB;j_2fe-j!nD%mZ#l|N%oll}qA_@3uoY<6{qf*)gTnBn&%R zM=n7_OXI)pRlDBp^-KCp2fGZ)#ox#OFyDs}CLtx$=9ZDBpY99ZIPZ;zo9_5~+#h1g z-Ssbyd-%xw@NQKkhe@yT*Bh4;Taz7`Bk9r3?ex;&dt38A{uKj=w`OyT^?p%lRc~9i z5`UUtBSv!mg?df*0qcHjyVe*(d=RzMwSk46rA;YMlX^SI zXf~s4dNt?^3K{RSy~Vb-FrRHwW_}7jZSiwZNcM-_aM=cT8@@Yb2o70fhk`I)VtZ%W zk=9R?i4wPh?@P=8e@LX~92D(t(AbX!75C&OZ3s%9Pdf#)ld>=~EF>hmr%4y{oITS` zq<3czGlf%x)VCcb#^%18J5f!RBw7B2 zqz>uk-C*M$a)TvH1qn+_fq`|m)$4jCn=)%-@%EIDq^9ufn$VO>6Ouiyabb5@EVkkC zU5|BNGY~)eix&oz&bVldi-_NqruED^;~f`gcIbXYBFyK0hr&0ku-TC&BrM`OyF413 zhUNL<+2_B{br}!ZJ|tl~P48+n$8>2!!hN^Km;z~O_I7X8x2)*G3?V$KPZtvGTUXS~ zX1_J=!2%7vU!cDibrZGh?aE)ADYQEWaoBZ(znD2Kzgdd8x6eTtE54lV?Y8fsVGA@r zE}F9TU!JP?_6BcgbX7Hx)g)<%EQ^*}Os_2Qvj@GOQ-8puTR2mpy2VU~bc`=?QEoVM z1B=z|_1ll!SlY1{tUE=LaC~{A&01;yr&yiOZ4q=-dfHmj0Icl)tL)n2qO8&|4Dyke zRTPHna1&JIrrd_h3>OtaT?0fQ3VwJ+fpna7LR0h7+6}0sH96{*5f@{B8I@~!*)r1h z*9CRea#J&+b+a%c*KO_Q=05K^=VL%-*j@e^zB%uCzjNO6p7(vuIo~{=&VGk(lcvV? z*I@6~7!YY_-C#qfrof@`$8~!RA@EMq5KSmy7lEYl^$36OT= z)5=Z$2kzTJ7RDH$;YvJfaK$Kl$BUe*d~w~az{#EV8ZiV|zB@#sghu)MSDwytDz555 ziC*l)&xmKes9SjtBxsMKaM$0rjM43B#Yq;qJRs+Gl+fyG*@d+I1(AtgXdGALn;?91 zPL>o}dLOv^miD;DaUZ^!jFMh_lGm5jx*2}g@yEruA9_h)VYr@|$0`}lVS0EJ|6y$+ zB9u#=*hek@_Q1D!ahA!D$B%i*ds-kz6K>>z96#S(EAHog0zngBj*Y|e^$-MTerre1 zzGq4K$H@=?dlQ+3vkPij{x~I3;~meQ90yO(Cb0AfAP@xl-~>nhgSQdJl&vp2*5S81 zfGhkLXXy#-5((!gup8r)xjH+&!Cpa&o|U>GI`Uh^s=xBSH-UAz!OI`S9Vq7-C$>hr zPOp2O-+|Aqngr&KCxSFP6WAHg%f1_`DRjD$9=R8kQzr*nxT1$2v_3lKymQv4 z)(S79go68NeUD>yhjxy&LPDTrw? zE3IA!W8Dn_@@l7owbfVZbvL8{Voo&-O;z1Ls-1CkZwF;_njnah6=^IRb%mpO&^Djw zoR{n*O&MyYdTFn@eUp=0NKmVJt8S&UZvYrmDwYjss=ZFO3*XG6e%C2T_sfub)O83JY3RbLtK zZNI@)#eMDPmO<9{wb$EN(FS^!7W0JrhKDm^gN)lU8uNH!RVoW*dsXvmWX@9)4|AQQ zWQ#oR$*LwP`u}SX>gTdep-4XNp;k}+pGHqsw9`1%xN_!bART4s%f9xyq7I{)lOnU( z>B&l%^JjRWTQY}Sv?v6pNJAKcUG94E`%TTIM>g(!Jk~_?mjt}<#4&o&_5~g6q$%4YMNPIJg6@~-72%_IUDM?+^ca2)tA*Kt?6T6+WT1;){ z0~8k=$P<$b##Nv-FI_%>6lI`qrWF^(=eQ?v&*hsJk$KD#ft?5gbP&|i{Q#u+*1oOK zA%FHi8zpWi=~hmC?di7htn_+hK0%eMDam6uNX04$($-r3C+kDQb%{hhPCVV1nj2+F zP52p~=J=c#sRHR$()tL%rwxEo`$_uoJhm@V2^-M}ZDdyXM^_{Uz^1cDC*a1V^93A> zcG~~;R|_5?bVVo{v;ZoM#jH$+ZQP-*vOMdDwOxiIym9=QDd32&5eLmwtdXQ zNlq$n6?(zxz`X6PdXdCc{h}qO`&1#-5NK*)K05_Ors5aXUHe5xnV65}v)rk`diDc2 zpUr)tQ_fuvY_0T*nkoX+gch(sU@x70=qPaqW$8!oAUuRMB1mfKu#^=DZ;RR)H2LbZ z@lkTPA>0NQy=eHoKzA`JqR<>KV5u=sBGC>r#VC56Z=rDOh7Xpzesg5l0;r+&8q`cE zWbF`_1ELyQ;srJCsPN(GB32R$IQhiXOfJS zxOsO`Jpok_75O%?>^hqir}(KMlojJb|1anxxUC;zi2P&}`MdCjR@gB3q^%2)Bw9fz$6YJIr(`TX2i_P(?=q+rXb@qI?>bDlvk zfu~{KJ;?_vor?E!t_0>Wx}$fCK`q?-T3wQ|gEr0yxxswV2KEeDL>gKy5xw-W#bWlc z;IxQ~rW9{pgRh9~hofH?GyepHv=SL~w1p=xM+Co9s&*?0Y+GyvBzy-)nop^E@5^ zlLKQC%nU~fWvS6GoM@THKBY|$dea1EOHC=8YlQU=>De-)5~Cl?_W~U_NsV?mCy6d9 z4jWtJl$BQ`EdxUSmyPTc=@5h$+5miIhw}m@eoai5f)F?r91@iL8vn4VviFV&XRYc4 z=Y^Nv4&eoKRH*zDF1al8tCh#BbsubEd!St-2rqb3>~LN{&EY22Lrpm;)h+h8Iebij z`wgo)!Fl1Ow?lXV9m7FZp+z_L_)b0YVfT`ItabgHnJE=b5rh}KDRww7pk`q+dxM0* zaPikvB_rg!G7;Y5mx(2CXXjhbz8Ldn5?7Dct;AqBSZW#u-6sDCm-tZ**xO$`)#~P% z^}V(3$R<{cx;mTuBfKv7N7_mI3^_`V4ck|~U~Dor(cw;9!sh7k63~&1PDfpvbR=Bj zDQWOy4!v0uyEW-ntu0Ng1a);b=}358(2>-U_Rpn`?S`J<$|rU|X4PSHuy|dtlXOyD zo9rZ9B2IFT{K_+4pnpwm&w9FTL=j|gjqy-I+*k*1aHZrC>gzy zwUKrsu4%jC!I-FkV{T64#T2H@EFM7SZ!h_r{X9*HwLzhzYO_b7gq6RQLTS@mDHEWX<6Ng`f&)G9G;Lbqd{u%fLDnE^y z8jG3T#P=gQpn)=oS`NHzo{2?DE{+`>`RN08Ea@d5?6nMJexUY`GElw4Tt5>TL#+kW zZbYrVYpF%|)oJmwW}k8SkxpMP-47$mQ++&|*F00%qP|eYkg52ER6^PnZQ0>;-$&*H zzuD*t-a8QZAOQzP;$;H(YmZ_ZGnEWPE6bva6>BR@OS6j4PV5bTb<#R^CQ}Ij$M`?+ z5!47!K`Y@;3N|#~^senqi?y#bslEXSxVaG_cw^IwoZvj`)&G< zDYCq`#mRE3z2~7!S-!9H%6l(ND1WPLjd{`PHDwMbrl%hHIjeYc`>~fqkKe1_fAe_m zyuD{}P0w^(wmekfx^(s@mvBv?x#iyCnq^tjbSCpkZii8K-ugUledC2E@gN?JUW1|c zT2AuL8z%EQUOw!xZtwkJJ3^n4<>?)P8?=ifs;)%|J1%Z?f!smUEag>4_vNcrEniVK zWqFyYZ1o~bMO9hkqKbogbCfrnnAy)|!oiqqWxSDf)hfde?ygp*1hDk`6&GfH(?vOW p*FNR4Db$vNDUkyeMgr8b=q1W{HZ#D*m38^Mj5>JI-{nfve*oePk&plY diff --git a/package.json b/package.json index 38d51c4..d83ebed 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "url": "https://saicharang.com" }, "dependencies": { - "@google/generative-ai": "^0.21.0", + "@ai-sdk/openai": "1.3.24", + "@ai-sdk/openai-compatible": "^2.0.30", + "@ai-sdk/react": "^3.0.88", "@radix-ui/react-accordion": "^1.2.1", "@radix-ui/react-alert-dialog": "^1.1.4", "@radix-ui/react-avatar": "^1.1.0", @@ -42,6 +44,7 @@ "@types/react-autosuggest": "^10.1.11", "@types/react-calendar-heatmap": "^1.6.7", "@types/react-window": "^1.8.8", + "ai": "^6.0.86", "axios": "^1.7.4", "chrono-node": "^1.4.9", "class-variance-authority": "^0.7.0", @@ -76,7 +79,7 @@ "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", "yet-another-react-lightbox": "^3.21.4", - "zod": "^3.24.1" + "zod": "^4.3.6" }, "devDependencies": { "@semantic-release/commit-analyzer": "^13.0.0", diff --git a/src/config/environment.ts b/src/config/environment.ts index 7f66aca..f3daf06 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -12,7 +12,9 @@ export const ENV = { JWT_SECRET: process.env.JWT_SECRET as string, SECURE_COOKIE: process.env.SECURE_COOKIE === 'true', VERSION: process.env.VERSION, - GEMINI_API_KEY: process.env.GEMINI_API_KEY as string, + AI_API_KEY: process.env.AI_API_KEY as string, + AI_BASE_URL: (process.env.AI_BASE_URL || 'https://api.openai.com/v1') as string, + AI_MODEL: process.env.AI_MODEL as string, IMMICH_SHARE_LINK_KEY: process.env.IMMICH_SHARE_LINK_KEY as string, POWER_TOOLS_ENDPOINT_URL: process.env.POWER_TOOLS_ENDPOINT_URL as string, // OAuth configuration diff --git a/src/contexts/ConfigContext.tsx b/src/contexts/ConfigContext.tsx index c4c8c0f..c6d8246 100644 --- a/src/contexts/ConfigContext.tsx +++ b/src/contexts/ConfigContext.tsx @@ -4,7 +4,7 @@ export interface ConfigContextType { immichURL: string; exImmichUrl: string; version?: string; - geminiEnabled: boolean; + aiEnabled: boolean; oauthEnabled: boolean; oauthButtonText: string; } @@ -13,7 +13,7 @@ const ConfigContext = createContext({ immichURL: "", exImmichUrl: "", version: "", - geminiEnabled: false, + aiEnabled: false, oauthEnabled: false, oauthButtonText: "", }); diff --git a/src/helpers/ai.helper.ts b/src/helpers/ai.helper.ts new file mode 100644 index 0000000..c4ecf92 --- /dev/null +++ b/src/helpers/ai.helper.ts @@ -0,0 +1,102 @@ +import { ENV } from "@/config/environment"; +import { generateText, Output } from "ai"; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { z } from "zod"; +import { removeNullOrUndefinedProperties } from "./data.helper"; + +interface FindQuery { + query: string; + personIds?: string[]; + city?: string; + country?: string; + size?: number; + model?: string; + state?: string; + takenAfter?: string; + takenBefore?: string; + type?: string; +} + +const allowedTypes = ["IMAGE", "VIDEO", "AUDIO"]; + + +const responseSchema = z.object({ + query: z.string().describe("Gist of the query. Remove the details of tags"), + personIds: z + .array(z.string()) + .nullish() + .describe("List of person ids that match the query which starts with @"), + city: z.string().nullish().describe("City of the query"), + country: z + .string() + .nullish() + .describe("Any reference to a country in the query, return full country name"), + state: z + .string() + .nullish() + .describe("Any reference to a state (California, New York, etc) in the query"), + size: z.number().int().nullish().describe("Size of the file in bytes"), + takenAfter: z + .string() + .nullish() + .describe("Extract a valid date from query in YYYY-MM-DD format"), + takenBefore: z + .string() + .nullish() + .describe("Extract a valid date from query in YYYY-MM-DD format"), + model: z.string().nullish().describe("Name of the device that the query is about"), + type: z + .string() + .nullish() + .describe("One of the allowed media types (IMAGE, VIDEO, AUDIO, OTHER)"), +}); + + +const getOpenAICompatibleModel = () => { + if (!ENV.AI_API_KEY || !ENV.AI_MODEL) { + throw new Error("AI is not configured. Please set AI_API_KEY and AI_MODEL."); + } + + const openai = createOpenAICompatible({ + name: "openai-compatible", + apiKey: ENV.AI_API_KEY, + baseURL: ENV.AI_BASE_URL, + }); + + return openai(ENV.AI_MODEL); +}; + +export const parseFindQuery = async (query: string): Promise => { + const prompt = [ + `Parse the following query and return extracted filters as JSON: ${query}.`, + "Do not include any information that is not intentionally provided in the query.", + `Today's date is ${new Date().toISOString().split("T")[0]}.`, + "Dates must be in YYYY-MM-DD format.", + "Return ONLY valid JSON object with keys: query, personIds, city, country, state, size, model, takenAfter, takenBefore, type.", + "Do not use null values. Omit a key when it is not present in the query.", + "Use type values only IMAGE, VIDEO, AUDIO when possible.", + ].join("\n"); + + const { text } = await generateText({ + model: getOpenAICompatibleModel(), + prompt, + output: Output.object({ + name:"json", + schema: responseSchema, + }), + + }); + + const parsedResponse = JSON.parse(text) as FindQuery; + + if (parsedResponse.type) { + if (!allowedTypes.includes(parsedResponse.type)) { + delete parsedResponse.type; + } + } + const cleanedResponse = { + ...parsedResponse + }; + + return removeNullOrUndefinedProperties(cleanedResponse) as any as FindQuery; +}; diff --git a/src/helpers/gemini.helper.ts b/src/helpers/gemini.helper.ts deleted file mode 100644 index af54e9e..0000000 --- a/src/helpers/gemini.helper.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { ENV } from "@/config/environment"; -import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai"; -import { z } from "zod"; -import { removeNullOrUndefinedProperties } from "./data.helper"; - -const gemini = new GoogleGenerativeAI(ENV.GEMINI_API_KEY); -const model = gemini.getGenerativeModel({ model: "gemini-2.0-flash" }); - -interface FindQuery { - query: string; - personIds?: string[]; - city?: string; - size?: number; - model?: string; - createdAfter?: string; - state?: string; - type?: string; -} - -const allowedTypes = [ - 'IMAGE', - 'VIDEO', - 'AUDIO' -] -const responseSchema = { - type: SchemaType.OBJECT, - properties: { - query: { type: SchemaType.STRING, description: "Gist of the query. Remove the details of tags" }, - personIds: { type: SchemaType.ARRAY, - description: "List of person ids that match the query which starts with @", - items: { type: SchemaType.STRING } - }, - city: { type: SchemaType.STRING, - description: "City of the query" - }, - size: { - type: SchemaType.INTEGER, - description: "Size of the file in bytes" - }, - country: { - type: SchemaType.STRING, - description: "Any reference to a country (United States, Canada, etc) in the query, return full country name" - }, - state: { - type: SchemaType.STRING, - description: "Any reference to a state (California, New York, etc) in the query" - }, - takenAfter: { - type: SchemaType.STRING, - description: "Extract the date from the query and return it in the format YYYY-MM-DD but only if it is a valid date" - }, - takenBefore: { - type: SchemaType.STRING, - description: "Extract the date from the query and return it in the format YYYY-MM-DD but only if it is a valid date" - }, - model: { - type: SchemaType.STRING, - description: "Name of the device that the query is about" - }, - type: { - type: SchemaType.STRING, - description: "One of the allowed media types (IMAGE, VIDEO, AUDIO, OTHER)", - } - }, - required: ["query"], -}; - -export const parseFindQuery = async (query: string): Promise => { - - const prompt = ` - Parse the following query and return the query and tags: ${query}. - Dont include any information that are not intentionally provided in the query. - Additional Information For Parsing: - today's date is ${new Date().toISOString().split('T')[0]} - `; - - const { response } = await model.generateContent({ - contents: [ - { - role: "user", - parts: [ - { - text: prompt, - }, - ], - }, - ], - generationConfig: { - responseMimeType: "application/json", - responseSchema, - } - }); - - const parsedResponse = JSON.parse(response.text()) as FindQuery; - - if (parsedResponse.type) { - if (!allowedTypes.includes(parsedResponse.type)) { - delete parsedResponse.type; - } - } - const cleanedResponse = { - ...parsedResponse - }; - - return removeNullOrUndefinedProperties(cleanedResponse) as any as FindQuery; -} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 16c354f..a96cf90 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -33,7 +33,7 @@ App.getInitialProps = async () => { exImmichUrl: ENV.EXTERNAL_IMMICH_URL, immichURL: ENV.IMMICH_URL, version: ENV.VERSION, - geminiEnabled: !!ENV.GEMINI_API_KEY?.length, + aiEnabled: !!ENV.AI_API_KEY?.length && !!ENV.AI_MODEL?.length, oauthEnabled: ENV.OAUTH_ENABLED, oauthButtonText: ENV.OAUTH_BUTTON_TEXT, }, diff --git a/src/pages/api/find/search.ts b/src/pages/api/find/search.ts index 2bf858a..e5fead7 100644 --- a/src/pages/api/find/search.ts +++ b/src/pages/api/find/search.ts @@ -3,7 +3,7 @@ import { ENV } from "@/config/environment"; import { ASSET_VIDEO_PATH } from "@/config/routes"; import { getCurrentUser } from "@/handlers/serverUtils/user.utils"; import { cleanUpAsset, isFlipped } from "@/helpers/asset.helper"; -import { parseFindQuery } from "@/helpers/gemini.helper"; +import { parseFindQuery } from "@/helpers/ai.helper"; import { person } from "@/schema"; import { Person } from "@/schema/person.schema"; import { inArray } from "drizzle-orm"; diff --git a/src/pages/find/index.tsx b/src/pages/find/index.tsx index b7e72cf..0518064 100644 --- a/src/pages/find/index.tsx +++ b/src/pages/find/index.tsx @@ -49,7 +49,7 @@ export default function FindPage() { // const [selectedIds, setSelectedIds] = useState([]); // const [assets, setAssets] = useState([]); const { toast } = useToast(); // Initialize toast - const { geminiEnabled, exImmichUrl } = useConfig(); + const { aiEnabled } = useConfig(); const [query, setQuery] = useState(''); const [loading, setLoading] = useState(false); const [filters, setFilters] = useState({}); @@ -216,7 +216,7 @@ export default function FindPage() { ))}

{/* Adjusted margin top */} - Power tools uses Google Gemini only for parsing your query. None of your data is sent to Gemini. + Power tools uses your configured AI model only for parsing your query. None of your library data is sent to the AI provider.

) @@ -272,7 +272,7 @@ export default function FindPage() { return (
- {geminiEnabled ? ( + {aiEnabled ? ( <>
-

Google Gemini is not enabled

+

AI parsing is not enabled

- Currently, the Power Tools Find is relying on Google Gemini for parsing the query. - Please enable Gemini by adding GEMINI_API_KEY in the .env file. + Currently, the Power Tools Find relies on an OpenAI-compatible API for parsing the query. + Please configure AI_API_KEY and AI_MODEL in the .env file.

- Power tools uses Google Gemini only for parsing your query. None of your data is sent to Gemini. + Power tools uses your configured AI model only for parsing your query. None of your library data is sent to the AI provider.