From 1d1606580fc4ffebaf4f4652dbab0c93987c82ca Mon Sep 17 00:00:00 2001 From: marcusDenslow Date: Fri, 24 Oct 2025 15:05:29 +0200 Subject: [PATCH] restore core files accidentally deleted during folder restructure --- include/builtins.h | 102 ++++ include/common.h | 116 ++++ include/shell.h | 141 +++++ shell | Bin 598768 -> 598760 bytes src/builtins.c | 1444 ++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 26 + src/shell.c | 1068 ++++++++++++++++++++++++++++++++ 7 files changed, 2897 insertions(+) create mode 100644 include/builtins.h create mode 100644 include/common.h create mode 100644 include/shell.h create mode 100644 src/builtins.c create mode 100644 src/main.c create mode 100644 src/shell.c diff --git a/include/builtins.h b/include/builtins.h new file mode 100644 index 0000000..291e6f1 --- /dev/null +++ b/include/builtins.h @@ -0,0 +1,102 @@ +/** + * builtins.h + * Declarations for all built-in shell commands + */ + +#ifndef BUILTINS_H +#define BUILTINS_H + +#include "common.h" +#include "system_monitor.h" +#include + +// Syntax highlighting definitions using ANSI colors +#define COLOR_DEFAULT ANSI_COLOR_RESET +#define COLOR_KEYWORD ANSI_COLOR_CYAN +#define COLOR_STRING ANSI_COLOR_GREEN +#define COLOR_COMMENT "\x1b[90m" // Dark gray +#define COLOR_NUMBER ANSI_COLOR_MAGENTA +#define COLOR_PREPROCESSOR ANSI_COLOR_YELLOW +#define COLOR_IDENTIFIER "\x1b[97m" // Bright white + +// Add declarations for color functions +void set_color(int color); +void reset_color(); + +// History command implementation +#define HISTORY_SIZE 10 + +// New struct to hold history entries with timestamps +typedef struct { + char *command; + time_t timestamp; +} HistoryEntry; + +// History variables - made extern to be accessible from line_reader.c +extern HistoryEntry command_history[HISTORY_SIZE]; +extern int history_count; +extern int history_index; + +// Built-in command declarations +int lsh_cd(char **args); +int lsh_help(char **args); +int lsh_exit(char **args); +int lsh_dir(char **args); +int lsh_clear(char **args); +int lsh_mkdir(char **args); +int lsh_rmdir(char **args); +int lsh_del(char **args); +int lsh_touch(char **args); +int lsh_pwd(char **args); +int lsh_cat(char **args); +int lsh_history(char **args); +int lsh_copy(char **args); +int lsh_paste(char **args); +int lsh_move(char **args); +int lsh_ps(char **args); +int lsh_news(char **args); +// Alias command declarations - added for alias support +int lsh_alias(char **args); +int lsh_unalias(char **args); +int lsh_aliases(char **args); // New command to list all aliases +// Bookmark command declarations - added for bookmark support +int lsh_bookmark(char **args); +int lsh_bookmarks(char **args); +int lsh_goto(char **args); +int lsh_unbookmark(char **args); +int lsh_focus_timer(char **args); +int lsh_weather(char **args); +// Text search command +int lsh_grep(char **args); +int lsh_actual_grep(char **args); +int lsh_ripgrep(char **args); +int lsh_fzf_native(char **args); +int lsh_clip(char **args); +int lsh_echo(char **args); +int lsh_self_destruct(); +int lsh_theme(char **args); +int lsh_loc(char **args); +int lsh_git_status(char **args); +int lsh_gg(char **args); +int lsh_stats(char **args); + +// Add command to history +void lsh_add_to_history(const char *command); + +// Get number of builtin commands +int lsh_num_builtins(void); + +// Expose the builtin command strings and function pointers +extern char *builtin_str[]; +extern int (*builtin_func[])(char **); + +/** + * Extract a string value from a JSON object + * + * @param json The JSON string to parse + * @param key The key to find + * @return Allocated string containing the value (caller must free) + */ +char *extract_json_string(const char *json, const char *key); + +#endif // BUILTINS_H diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..47609b0 --- /dev/null +++ b/include/common.h @@ -0,0 +1,116 @@ +/** + * common.h + * Common includes, defines and macros used throughout the shell + */ + +#ifndef COMMON_H +#define COMMON_H + +// Standard library includes +#include +#include +#include +#include // For isprint +#include // For file control +#include // For POSIX API (replaces direct.h) +#include +#include // For waitpid +#include // For stat (replaces fileapi.h) +#include // For terminal control +#include // For console dimensions +#include // For signal handling +#include // For time functions +#include // For PATH_MAX + +// Define PATH_MAX if not defined +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +// Common defines +#define LSH_RL_BUFSIZE 1024 +#define LSH_TOK_BUFSIZE 64 +#define LSH_TOK_DELIM " \t\r\n\a" + +// Terminal control and color codes (ANSI sequences) +#define ANSI_COLOR_RESET "\x1b[0m" +#define ANSI_COLOR_BLACK "\x1b[30m" +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_MAGENTA "\x1b[35m" +#define ANSI_COLOR_CYAN "\x1b[36m" +#define ANSI_COLOR_WHITE "\x1b[37m" + +// Background colors +#define ANSI_BG_BLACK "\x1b[40m" +#define ANSI_BG_RED "\x1b[41m" +#define ANSI_BG_GREEN "\x1b[42m" +#define ANSI_BG_YELLOW "\x1b[43m" +#define ANSI_BG_BLUE "\x1b[44m" +#define ANSI_BG_MAGENTA "\x1b[45m" +#define ANSI_BG_CYAN "\x1b[46m" +#define ANSI_BG_WHITE "\x1b[47m" + +// Cursor movement and screen control +#define ANSI_CLEAR_SCREEN "\x1b[2J" +#define ANSI_CURSOR_HOME "\x1b[H" +#define ANSI_SAVE_CURSOR "\x1b[s" +#define ANSI_RESTORE_CURSOR "\x1b[u" + +// Key code definitions used by the line reader +#define KEY_BACKSPACE 127 // Different on Linux +#define KEY_TAB 9 +#define KEY_ENTER 10 // Linux: 10 (LF) or 13 (CR) +#define KEY_ESCAPE 27 + +// Special keys (Linux terminal uses escape sequences) +// These will need handling in the line reader +#define KEY_UP 1000 +#define KEY_DOWN 1001 +#define KEY_LEFT 1002 +#define KEY_RIGHT 1003 +#define KEY_SHIFT_ENTER 1010 +#define KEY_SHIFT_TAB 1011 + +// Typedefs for compatibility +typedef unsigned int UINT; +typedef unsigned short WORD; +typedef int BOOL; +typedef int HANDLE; +typedef int DWORD; + +// Define Windows constants +#define FALSE 0 +#define TRUE 1 + +// Struct to replace COORD +typedef struct { + short X; + short Y; +} COORD; + +// Struct to replace SMALL_RECT +typedef struct { + short Left; + short Top; + short Right; + short Bottom; +} SMALL_RECT; + +// Struct to replace CONSOLE_SCREEN_BUFFER_INFO +typedef struct { + COORD dwSize; + COORD dwCursorPosition; + WORD wAttributes; + SMALL_RECT srWindow; +} CONSOLE_SCREEN_BUFFER_INFO; + +// Struct to replace CONSOLE_CURSOR_INFO +typedef struct { + DWORD dwSize; + BOOL bVisible; +} CONSOLE_CURSOR_INFO; + +#endif // COMMON_H diff --git a/include/shell.h b/include/shell.h new file mode 100644 index 0000000..36909c8 --- /dev/null +++ b/include/shell.h @@ -0,0 +1,141 @@ +/** + * shell.h + * Core shell functionality + */ + +#ifndef SHELL_H +#define SHELL_H + +#include "common.h" +#include "structured_data.h" + +/** + * Display a welcome banner with BBQ sauce invention time + */ +void display_welcome_banner(void); + +/** + * Execute a command + * + * @param args Null-terminated array of command arguments + * @return 1 to continue the shell, 0 to exit + */ +int lsh_execute(char **args); + +/** + * Execute a pipeline of commands + * + * @param commands Null-terminated array of command arrays + * @return 1 to continue the shell, 0 to exit + */ +int lsh_execute_piped(char ***commands); + +/** + * Create a TableData structure from an ls command + * + * @param args Command arguments + * @return TableData pointer (must be freed by caller) or NULL on error + */ +TableData* create_ls_table(char **args); + +/** + * Parse input line into an array of commands (for pipelines) + * + * @param line Input command line + * @return Null-terminated array of command arrays + */ +char*** lsh_split_commands(char *line); + +/** + * Launch an external program + * + * @param args Null-terminated array of command arguments + * @return Always returns 1 (continue the shell) + */ +int lsh_launch(char **args); + +/** + * Main shell loop + */ +void lsh_loop(void); + +/** + * Free memory for a command array from lsh_split_commands + */ +void free_commands(char ***commands); + +/** + * Initialize the status bar at the bottom of the screen + * + * @param fd File descriptor for terminal (STDOUT_FILENO) + * @return 1 if successful, 0 on failure + */ +int init_status_bar(int fd); + +/** + * Temporarily hide the status bar before command execution + * + * @param fd File descriptor for terminal (STDOUT_FILENO) + */ +void hide_status_bar(int fd); + +/** + * Ensures there's space for the status bar by scrolling if needed + * + * @param fd File descriptor for terminal (STDOUT_FILENO) + */ +void ensure_status_bar_space(int fd); + +/** + * Check for terminal window resize and update status bar position + * + * @param fd File descriptor for terminal (STDOUT_FILENO) + */ +void check_console_resize(int fd); + +/** + * Update the status bar with Git information + * + * @param fd File descriptor for terminal (STDOUT_FILENO) + * @param git_info The Git information to display in the status bar + */ +void update_status_bar(int fd, const char *git_info); + +/** + * Get the name of the parent and current directories from a path + * + * @param cwd The current working directory path + * @param parent_dir_name Buffer to store the parent directory name + * @param current_dir_name Buffer to store the current directory name + * @param buf_size Size of the buffers + */ +void get_path_display(const char *cwd, char *parent_dir_name, + char *current_dir_name, size_t buf_size); + +/** + * Initialize the terminal for raw mode + * + * @param orig_termios Original terminal settings to restore later + * @return File descriptor for terminal + */ +int init_terminal(struct termios *orig_termios); + +/** + * Restore terminal to original settings + * + * @param fd File descriptor for terminal + * @param orig_termios Original terminal settings + */ +void restore_terminal(int fd, struct termios *orig_termios); + +/** + * Get console dimensions + * + * @param fd File descriptor for terminal + * @param width Pointer to store width + * @param height Pointer to store height + * @return 1 on success, 0 on failure + */ +int get_console_dimensions(int fd, int *width, int *height); + +#endif // SHELL_H \ No newline at end of file diff --git a/shell b/shell index 6ae20ee1c3c943671793cff9c2ae7c8b8cdd12e1..d5b4193dc9e48e323219439c5085a22c8cd84258 100755 GIT binary patch delta 214586 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%0Am3}tHj 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%0D5>KsR)}umw85c;<5kHim zWEsv&7@WM#YL9P>iLHIH)+E{V)_#D1V(5sF4mh$gX4TGi_uOxv7keN2^JCugQZ!3e z+6fj1Dy)u{UCggAnthyJs0BiKeVpErqUbxsQ~j~oAf4@H*n?b>PtsdR#!AH|bcRpU z)i5z#yn$kUronPCzc(7h=Ng`9EmRE5(hTec@o&>r7l+~ulb6AH9Yi-U$8pz4j%m$= z9#NMAIdOm5kk0c5T-sG>VzbqItL^MYRJA+Od9#3t?R(75vod?E*i>4tUgM^(vGZdy zO0YDLUOZD$J?>%JAiiG{pOW5F4x?q_OH}Sv=^4{(@`9{aH>ZnRQL^djJlpr1Pw3Fn z0GzrybdwI9*cZNC9l8af+~kE1Wwe5 z98%NStmScn_iE_Gg9M#NmYvStOVp(GwjvVOV5^m(<{NAA4;TMNUQIMuChowDrKtu- zTbGk-1&LL$;|V1O9uPh2U}Jx_`8;FFY1nt4MqPnMH& z4?5?LG-_CDr^pnvDo2l~dkU1ev^&x|$zc;0JO8NAHfW&?gQk8lO|9zfj#*-=Bv7dl z9tWA1(}J<1Ac|pMbU;IUB~1-eC1Nys%6<(F^%bk+amuckgw&!C)ATpe(&Ru_X83NK zCiAFfPO*HD|bQl4MwqAfk@CFlTsmnwoW$nZFM~ z(@txqY~`UM4cctZ*$f-~e`Q#GZiYkqVmlOP_|Z6-;V1G35*mjgl{3th65=(KJzzdp ziip-wxW1dE#mA(~O1Z+Dr|Bh>MA|0K6MfWA zwc9)OqhX4Xuo6~XB{~oD(>qnowf9$vVlX)%)u(LWpR0WL40m@wgxU4O!`%-bf@`LF z#NF%cY|m{Y++6&|(x4v8QWg6AYB3E>WR!*%R*P2XM^|ciNwv5f@zYa7oOkWo8gT&3 z%}5O`Azo^aSBtg~;EvQ#78*2tlqX6{@J(E5+$xS=UM+5fuG^{UEv=6EUK%aSwO$s> zcn3X1yolw6y{U-?G$N#0Ey_!Au2`x%_x_72!&i5OO!bIL6#{)u^;T-+Z>j#3%G$%M zJ%LnjkNJCEecGY)ob2;|WcG#5?At2CdWz1u!lN_e6hHngBlpIK?Y_MpMMK|^k~dJI zzu-vbL|r+|A+D(nDQY^jq((f9z-=i!uHn1B8sE`@uK5Tm>SKKF{|G8-=ODNLBdDQQ z2T5{=Aq;x31im*#RoIRiL0xR0hIiM95g>a|!}T>{7AoklhWFNpufXG%8s1+c=E9Kp zDkVfa@lb&^qCMpQTMFMfh5@a{iv32LDDnKPRa|3eg+Ei2AK+jOFAIv)c+z;-OkQK1 zKU5}ApS>AkA!^Uk_3#7|U=Xl1ys5^jPzf&Qd{86bLr*xVi60TgSnX;si9-2RK<%0u ziRY{YBa2f|9%E&x%yOybvF;fy^2I5<>ViSMMzq7=xip2hG;mpI^s3cW@Ij5?EJv!7 zyuJMOev;zLYSxDS{}c4GNhD52^Q3w&;U&|PQQlr{)}FpW+>fGtALR`fJY43ZJN_8u zO7_;46eP1l;fxHR14!9N@RNpNrjw!fvxYJ6THU!1>O)c_3Xa%<9_f`#Q$WOvFD)%y zh_$gMO<>nKDVOwhSFN|Rd)^5sl%mX^;eyTuh|^%1XbSxp)!=B+6Wt+2gM)lK`?^1@ zM~h7B=cYVn=L{PIR$A(umSBni+Qk~Ki&>XmAZ4~4ou3{-38qMTaGJ>kQ#FkF`Nj*} z#gEwqjrXgBBV{^+DPN?U*d`1nR-69r8;{w!Z3pz1c{G>^#Kahlx}NPG=Mz-p`&^Bs zecar~?Pwvbzr7#jaRMh$pQ;vpP%$4yozbW-eD-;&+FISmEqffc>>qux49aPnm&mMg z8XDExz~({m(P#lFcr>ai^B8p1qtU)|pv7^bYn6AxjETn9DDRv?BdZd0r0X_aqaRdZ zt0ZO%_izrYd&wM@>T=hmwuQyRS=PZ0|-y8AV}cMA85fQI)^;eHd;@WCk)L={RLr+eP9DPkx@6p1>_ zZSCvWF7y+6tN8>N>sy}rdTg_akoBU=eFD2RSM)M zl#Cv%F%(BtIko^zMZYX#4Y8-4Yd>ihwJ!xfA19MM7Iu^rX6tTJ_b}S9Neq9SoWbu< zR%Vm#?zks0;sj?Oz%(r1fm9$G?$hOsz8 z8uDrlVKcHd~XY47%hA;f$SYc2VHNmpszgT(i{Xz`<@Ncs4J`@6YoHrlzd(dZw4 zCQ(J-(M%@XYsr+NZWVYj+oP-gnFJ#h@3re|%==NGKa+aMuCum=yUt%p`LgTO)v!Rk zx&Ro#Ng$SnF{<&}fQAo_uVIP!bO2h+YN%nq6bKE_B6uFU%GnmgbLgpd_(E!%7k> zH4Mvyn#NrkJ{*&haFf*VtR!(?QbS*2Nz~~CN)q>L7?PL-NgPWmEt1?P()Z6a{BBNS z-H9`TV466;U=+>fVy@4Th)=_~f+0`k%q~GW;r?s=3`{#(OlXm$hKj=#R?}RG|GNA! z#7W4wqb9zzf_?Cvl6W==En6XeMSHqDN$(fA&gzjbQ{Jh2e-sQ)ND8S9C6(f0w6&>8 zaWoQOU3hJU_yeu@x(0+Q@dujr^%`M)g>SW@IF(9(=jUE1#R#aHE0e;~$Uh7Vc}gRh zuf`H@0d1bf*i=C&ohQ*eRwPnoF3Di@7_Q`@7?O)yg8wv1uS|^6{v@k*(~UpW@NJ+6 z61m2$+I18{izNpWc`vP1yB;Cdq%4_vNR89p35FwOX4O6c1Z2GcE&g`4Soa^3SoL7W zeRZ=P^q?}{*^E6Tv}RcsryAGk>AtBSN=!O5ot_+|5Z4VsUyak&@(eK$E%dLrQ1dX! z^LT}kO^06IPMB>`P&cgX^!?LC1_t)k8a_Ck*IU&43{U6`kI4*A>I^p_L*L7%fQRQ}{twT1AMn``hGhSEH78g;LtKJ}S*qccGYsFq zzLlwdSE;VlsYWZTSnVpA>T%D;)Hv8t6f-H?~x5^t)yZs>5EK%MT>qW(opl3*OW-# z3z-SDonh>bMASs8!gs0ZmT$8gc^)v`h1=}B8FiLSaDz(lJW>4viN1-bEmQkv2r?#r zieyP+^7rY6?^2&kMfaW2lMIz6XatES=#5r01dSl631OYJ^|jAU*bas3rDG28T&lYn zY3R;6Vf_s2I)(6x#52UF80#-eNH~c^*kUxDhk_vqdI~+=st8ETUzjdfq4mJB1T{0? zJ6$Y+{$uE9#12_VC>Jia5QBG1sJSHYQH(RH>h9 zQa2l`;T>~D8WK&2(|UWZ$Ob$mjtyLlaC60QXtitOVrPwT8q#L#&V6LA5xfL^UlKa? zn&e|XbTd7o?soJ-X6KTS+KUAfBUT6*hWOJF*fhSo56V=NWg_EtM z@0mlM7{_0sur_O~do1G)92~kF!GAa@b8si0GYsHUHeltFCOg=su6lq zbz(PQ@)FJ)!H`@lnqLD&N?+_(X#yVx1N41oL;B-7{g&#)a-IJ3zooB0@GhPHCrXd{ zZy@lqCa|MAk!~tr2L3vifG_w8!tqq|f5Z4r6N?WiX6Dy$VIm<_nBCQeZ^u7UHHC0l z2AQFWe@~XBlhq^Hxcz_6>sT!VNNqYf| zGz~AT6g@jY(#>?h2XjOT28e4k{KXt!91W6qdMh>e-Gz`5eN6dsK<$sMuS|RoWn#zW zrvWvNJyFS*P=BW3gL4wU1QKR^Uj*2W!2;Qw#GesVzytM(K$aY+k5!5RsJxT9Oq(j< zX?73owzHa&6Yduseq;{&)U2Q?`|e8O()Zw2j~jW;&NtU@^SB+Jv-6tzz&~fvI>^h$ zE$&zXQ^t_{YNcjUyJ#1zeTrDprEWczx}ULCQG zCa>YOl~~?fprLh@f(o-x!{17IE!XgR;vy(|8%B@7bB{@0B5i%dE*P$>9;6yykAU8c zR>PJ`scwAxYkadF_qZ=VkB!{(@$%*Kc8;02!Q%$@*jZ*iUYg-$^ms5aETB3abkiaX zN0)2(h+JbGqhU-du7*M4YWRa1u?$UZRUn|(SixLy5av5i`af9XaUa-YCl`?A`=np3 zRIaZPm%?D(;a6ScV2y9ZT912d54c=|m*4h)%eD`A+^l+VS%Q~tc!^zFf=|Ev4Koq3 z2Sf1z4TCEhsz3Jgz9X}CPmQ3HM}F1u;F3-z`OSYWmrgx2|BX!X4!VT~&tTPv;C~sc zqkF==t^aw%hb;daS4eH-9($58c<11d%ZS;lzs0{nyO>4u?-hk=KjLOBfVs4z*? z4>@WBBuM-)dmFCx(pj|sJ z^n{wC4vq7hd07voFN zQ5L3q8;`2Ae+ zk8hKdi{uYV{uY&-O6qqS9YsP~?A(HddB1Ekbk-mh+wb&~v88691lt%KKE8l=BQ+XJ4$$drAf;vO?`bS zKiJH3Oxmzegq;-(pPpmVB50AXnS`Oj#+T610je6H5NWBiqfa&Il{hDk)r-z1jSMvH!Kc8OJs1ylcsMM#8-%4K9xKQJ-sndrDqe_GOD}AFExcU3+Mor&XAPKFPbc`98yz-DaMLQt(R$AeO z?v?v68CkSQBKN_NLyx!`7T$i1xV}=f#@y#spIWQH!ujjy`mgEuCn~e)j=cSpLl9%v z>pnF|AH-Po&MlJkMoF1Q=#PB7^$shDmDZ;e?K&^px#7{6g^Mg74^h|6cRRjp7xw)f zVcTq~o=x*4otHF=b(aiBrIK>qX0wumQ|Dqa3X`N=w$@1(ix;}NbuXhI`McmFs)q1k zViJ~^U$=F?sjwE-Nb<_OHh3EIUt4S35j>6g%+^ZcV(}YPz<0J*3M0AW{b;LtI(Tsd z!F##fZs%9*1kctQci<~HLhTW>+FQ9)E9S~$T#OX?)W6fa<{Wwzh|XbpMYAQnJCt!I>h_LM zLeH_)91Q0i)08mB=Di4TEYIdCVXm!wBs*raEL$}Qe|CEoW;WwCNiVA+DCn7jyo29+S;$PGQ0#`7f8Y?ByquUR zCL-YUIVfqY4Stj%X6?5##d&CTXEc0zrWl2a|4G9?&lI;IlV8289XOMScoj5%lOgCI z72+V+3|ZVx8KX$#rWyrCoOPD7EMazl-aIEHPi*Mtir4IHC%F$iDV96MZSoqH(a0Z{ zYH=GS*TO6eQfV5L4#zwVN{3^<1_$|Y`7}2w4B`AN9tmsvdLz?Pt_kd-9ive6Sc9(K zL`P$2XyQBy<r&PT~h_^s-o`(Cpr@e6u8l6*_*Jae+>a?%{^?u8NuL z=e$y~XV(5c)9?kR%Vf7I4YccWB%6o^HCJQR&-A@8-93K5E@=OiLVjH3A*i%>TWT_a z#oZ6uL+@#L?@X)747bxkJJ0j#47cnc{H|Zqm)>})Gy$r-$8~~L6)4A5Gu^cZarD&j zneNM!BtX+#JWI|^@}f?%l#<+8;f4>{g_pIs`tKqbL}ekD@OzfBnGQ+`yszOWDh%s+ zmFgXxK^Q!JqA}K0P#xZO$ZqcW^=fzfAr!{G)_wO7ywq*4b$>sEeG?0=b+cbbKYr?3 zxBKgun$AOxOSvC^Izck@OoOKR6aAQd_P5LKK)x{=j%#)Qfxn4H<2yC1{7ow~jLqWY zepxAD+89gTCs$J&DthE$5LoSXC?`+t7#@q)=+v8H*4BycZ?D^}WB);$FJ&&Ljgwqf z%O6-FuZ%`>A;Y)S+gR!r9NtZaZ>hJlguxc=JQ$$!E$31U)?5wZLR_T5p{zrOXmB`+ z5W{(Y8ZP594AZox(&#^3M~>!^VTJ}vjeANOMHv+KWnOSX8vqnyA8cE$~3gUuH?B`9jt7ge;EX0laJJw*0 z6?@ZE%lpfL_WM83uG46rXslJU4QuCUNlZDGWp<}cWqhxlE$B?CUo^aawip79|Eq>K z&E~a`-z4mVi8I@3G1mR>n|3EB35ZM0Ye%|yZ`p-;-=b?Qmqmx|%x zbE#n_f5O6hEDn_rMpxO`_g3*zNST?eR$HpXe&~ov=hPXE?NfCf9l@T9n^2B?&SK*w zQdTSE54zXMa@A1tC2MAFO*JX1pDP{$3$0DPJ~>ysb)LKPUv^F+n-Myz z-E*zR!`!d_W#>94F)VNLWDRx`j^LaRIGKu$V02uABJA?$DOiP|11k4;&Tc2}2e{s& z8rPNz-z)0N@1v?Q%^!!xM2B4N^{Cpdht5nG@{jr_jE^Mk~Ns9^T-|dj$%? z<}wHda>3-#xAa2y_qXA*aR#_~@8Gw3fZOjKJFjptEe_+kga3n3^4!js;-XokVI3Ig zE_nxwFk7h@6uU~tmL=9x7*)Y)4}0>k%Tv;E91IR8`LNmz{bUYN`GaOzJyD7Iq)?w{ zm6}IN2%o>|pwEu}tr9({*vgoQWms_wBzs2a4`mGNj`JnW9I!zTv*PGNmswdCxMfG} ztdWgXOna4%y-LHd9!gNAnNm2=EEU!OI_nuvu@(+>oob=?KVpFiC7v(N z=@`~cB{IpqCO)yDwA>*d7OF$Spr$lW>r8f_Gdb^I^y$HJ>(kARe-|17f@$)uU0h73 zw_YIhWOBBk<6Hadg5&&FC#MuWi<92b)t!%|iI0^~NGrJjfzx|;_IDqB*UoKUg^{R$ zF+b=cS=>zQ;lZx0$*3GkSRnYj6m)V<_zMy?S_@rwhD1O3Jelqe`Ga(IQ?R%J?bY=? zG;R|1UkxLpbx>ii*RrEg&eU=^TqR-8UW?I1q}gSnr90w%tWO>Cqr<~()*5Xz&4lR)| z21&?c!P96MczysHJu834iX>nKq^1BK#q;=2(8O~fY@Q@}uxu!%q+1IS&UJUNB9xSZc}ix41^Lw>Vfou?Pr4)j!x zM4~+VSva>`-x9XHFFAw#}%R^&?L>}6GH;b6F4PyusRnfGs+~`Wvi8sP#h{ z-hG1=4}!0Y0I>uM<%UMp&q}`bGgt6e`JfP*A<=dbXwO_Mj|CrANMyLvW4#MDcL`P- zILqY*Z*b$YrW^Rq&NX-KG~Jfp*?nVggT^Rfk@VJYm3gRr_$d3`pq%H!H$4nEcJQ2pY<`uzcp-T`>%ukBmHPGkOCt+X+01AM33kg7)Q8 zkhzBl$m8n6^ls4+^=2UPKD;MQ4#B!i3_enl>=i)P z(Lwl^$=6Hf{0dpcI$NE6bbLwjdw{w+{Q4GNyM-u!BS@JJKsL z19^gGW_EW5fk^lzl-8?b9z8&|ZdJ zn%o(Hyh+L)z&u`^OXiS0kb$(dCf_7w4|aMWlx~vx4=BaxP$2t~_-UXaZ<4ZyF@n5F z${rCv7zpwvDf@~zn!C!Ir0lV&BM~ESlCsOw#{pO?=#+eW9J3;ClCsD9sS(JVr0faN z$v~4gN!b&LuM(r4Z<4YnGnae$CMkPrxDtuvO;Yv@XB6r~-6ZAnrBm(XkvU`+hZFX= z+q&BY9q1-0^AgZb*hvkFJ_j^O9_GuS6QB=@O{&2tT`+a`YWL@J|2L??<#bLduz zp&~>;dR%~{BIXm2!32(p+XuO4de|*vozX3_%@kl`Xx#xNM-(xw$AOZ3Rq_GEct|Sz z&+yX_>Zl>~V;z@>TiXj^VB(_cGZaSkXcS%x((y+Vrs1bI;0zG=TuqdIqJK0F7>)Vf z@9>a|A>r@e$aRo=LLAE8lAF>a#a z{|J%_JS3RLGZe{rIq8GlZoTY*bQRK)UUp8a(-<(~4vXk`WYvkrXnHZ6Zm4)iUhzGM zLW#2B@9rMyg>ii(3KJX>?|{i$D3U6G{}~P);p;`H3tlSDQ#brXm2qR2FE@_F_|8$N0W)ERL{*s0#^+!38npt zO!jh}b>1V>9znI!gYVOkMWmb%nsW=s5iGuzOyf2_aA|e6rhgv-)5mbtmQ5 zC{7QG`#7AGP3aP1t)LXt* z8DKM&k8J)5xaMa3GaOPIGkL8DW20fx`0U3uGWhY;@uF;|4(2!`{1_N;N+UF?JKeo* z%g(5TXAw5;0)$L|8RYOFD}F@X93=Nr9~u{>49Ro~Yy^4>Lcf!=1s>XRNsp*Az&@k5 zNFj7O0n;-N)Y=CmI6vlDiqxHgls_#vd$8_49JNQ};5xm*LkjqO6}>#>aRHVF4sqiRmnqK@d2ENT2*d{a%P*@s6ipASv>{^x^uQ!(KeVQAT3g&8zDtv>_mNt zVX`Ut{|}pzNkgz|J^_BGH6o{zos&w(KYQ-uOVD=`i&R9IHExeiaHT>Kj|I}uFG(87 z+?oH$o~WCJ^2D=tOim*)Vv;h?yFG$&nPRY+w90!N=~Gs6-0^wdV}sp8o$QXW_w%J7 z?nEnVa#j$RDnY#es+7PuZ(NmD74IN81MQxDuY*}dY_HBI9wNcOQf z*~j8M){r3T+fUPLvpAEg-M<0VYSyOn`#T}L-!oPzdZmy8;6%@Ww;!FwP{q79L zX&-c3SjuR|9Zx8*QRGB_qvV2;Y|N%0e=Q~1lEv?2Oq=`i>D|``qKeWkL-0qPJe30c zWKnwqiKl>(+8qH|lR+wC1zE6UR$Gw}MPiwVfM_(s4=l%kXlA%?Tev+A~V9pp98Z1bQ;i z+3bZNSiBSyDKVAFOHiq~(7oM0Yw}J5SLJ3CN?V#tC*w>tj}b6{dAz#0GI@z%n7rm| zM0c=r9S|$cnEN#-X_I$0P;N5Mr^Le;VS!2eF<|m80QM4-PKJib`!Nufn{+W0OkO(J za+OIJL&4;A0jxEZ$xE!PH@_gX@qVhpP3BReHX&Mvm>niv33Z$=nQUgC1E zNf$%Gk3dU zcZF$w?W4Mj(p!WqUgvHOjlkwDb{cHn1ZndoNSil7+Pn$U=1q_`Z-TUW6Qs?X$Tn{x z+q{Wv^Cn80H)|8L>~eob5WUb$k3%EOjovG{ACbSUOV8~nt;sN<(P{e$nfH21-n`Dm!;u%OYw-U7o z16gJ%0SOG`nU4`#G8y)lqnk{kjH2-mAh3;*ng^*Ck4Z&Ei(rbAU_-`}00q-otcJN1 zZ6uh%a&XK)DMsEe8!_)EATMbY$R(QjMec-vUDT@@P)V_?+N4ss}?6kHW8$)c1Ai&(P-^_cK3X6a{ z5rBPoX1xxe^;7J`Gxt90&W(fTyQHssKYoMr`^gl}qM`0uqnuE#dnkgr``ts`AMnc;hB)%VkT(dGtH{BMed`2NBo@+#CfFGr|AWyeak9Lu zr2zG##4!`Wsc&*Vy(p9=LA8xyw9IqYB;cZseM69Rf+?BNNQQIbBKHs|UqNf>J@27# z8lMdBBxuF-MU1_XLg}C3%SQ|K7NftXuSQGJ#-#8FAeiLocqP7#~jcM|PF zxDkLB8!iA(#u}90zZSNggI^px2(;mP`F^d6J#pXA-rC ziDofHOJ>?pDobvU>324myco&wVi1p`8iKvAwQ_fXPBU7nN!rD+OB-T&B`A5LXElY8 zbz^utx_>00E9<2rD&w0PKiTm1Z0fd6#>x8RAjpz83ehb=f;FZ0SE$YG^SHw$LD{L$ z@?4A_r5xJqY-lDn420x8L%q(1{x=)d)tGTdoDHQ(N2ni%Ud5r=kb&W)rJ7J*4!-d$ zax2^Yh*&%doKSC$ee!JVND3|C(3j4JjzI$o_2STX&xYQQ9v71LKb<-odJQBQ>dv?p zR#{Xb{|oVlx^ZYGhw}LqfwZCc8rkCD&k~Rj&wu3)X0``lc?X|1-20<;+H@KnW>`V0 zKImhp`c)j9fffAb+hDslz*+Ddme%AbpZN$Ks&{ z-UCm6OfFZ+-Pv@~ZTzf6ubZEO-LLZ#B_~f)mUuj!FTxfnD@0m}POtU2$ZCPi7#p=b z?Ex;7AbBzDpH=#5ncT3hG^*u3XA`H&A~3#Rvdlq$8TL2|Y)vz6wWyc5^(nS(4o&vD zucp{pO`cG=yA?IhV<^iqE6PQ}G7{|PH=|xRn2ITQ0Gv$qvQ%&R3zdZD3Yx{>5p^@r z_aIfmNTOy5!HkRFW=Kx`RM*}5a4^ZM0gpki=KnY5a49DX__65#X%n*^alQr znN6{CeG*q~+%`P4<>p`BIBHRtdXKYjRS4f8fF93Cu>Y<%tSD5(zoZbB%6J@|1Ej?m zIY00wNGjisvrj0b*aU^;S&LF0_a;en$Q>H4EvzMxp7z03) z=|%Kr`Ge!^Cl%7&3dutsk0o27h6<<8#i9*xCGxmaZ58T9u19*1wYw|b?jODf(k_#2 zvejRv8_BSfi>Vcsc{8aMVujLkKTt0BvPH*>Uh#m7yli}w|6#fpBZ((rh&v?%dq~`=eSzi|q+x!|z~0Ik zzsm5%sxf&UY=`r2%^;2GSgD!gdAv3DdYP)ZJ~7Ah0C+fK@TvB0)NXK z&-cjsjM-7bJLY(357*s)Q;J--p zx-8GHKTC#RL^wU7Zlf#@VMLWw?dHFj?zfpJUmv90CsQ6%DI3XzNcoXYxlgCWs$)MC zASzRQc}nJWifjWsqOKDrL##)lG6fEY+ZyvsL7z!Cc@pQXUA`^GO)t}Q{;=JpS(vWB zid4-^hZ5uPxIHmXZ*K{{Xu0$KrMxarUZM&8=B+hg$qe~<-jyIVDb z|DZ*A?f`ou&3KxWg3E0&`-nnouN%t~L)=x_V7mthmYZQ3jl8vox5eUbIV}l}C$ZtV zljza9=VX&7YB(TzE0$F~KmHxC zS7nxHRE;xLqxzRe4Nm(jEgZpj#N(IU@K~kC9R?%lJr9}`EAC1ouox`9CP}88G~L=< zm^Y+bUh|~LUVyf|0}|LKafY9e*}mA2?JYXnZ64Kckb=HozEh^S;VYTq9aSc53e_p@ zlqoQZj`gfZihCrd_>6e}SWg66aE)gD@K~^p&pbR1CB~35){~#(4$QOjhBXCq)iSFK zzm!=u+<8&A8ft?(TD2!l4cKy3zQ*GmLwAJGxqaT?3BQan1g406)0ennEziz0Z^z3A z$f2+TQlB7m=>CPwA+Dh?-^v`^ynLt$;<4gf>HdXbYJ^Ps%I7la>;}oTM_n*;BRt8H zxnpCk36&F#OV1Y52uwuz`l{R&iQ5`T+^k9TrRwTPB`CA!DKt`^^jMQ88vW&VbpD_v zPzzaikR;#y%yhrYS9RV&^1%bh3&^&y#F_k=xJxDJ){tbdP7*pN$!{=&ZV}uAR{mRN(zHRXj>T+%hNL$d z*?Ec8@rH4mNTm6iw|4&XG0z596xjI}1fX4R7pfhhT^#`1cgUU3-r5t-#XPh?bEohV zF{m{p+;TBa5EEgVSb1x|eJ*BKeQ3H<3+&wFJHYH|kw{Gks^R&Vec&V0y{`bhd>Pt| zSRfg_SuqNR_z`svN=9M9iH1JY*g=vtRA*fe$$|}xX#A6T*qcMWat))?RSTZ^sG!S* zpQ21OThB(6<4V1QyX%&ihnADB(g8bS@!Q^)WP3=eMq{Lef*B>}*3v=s!~3SYs1OG} z{Dqgt3Sm2U{6MBEQK{H=9xr&wj9jqLn43Q^-LHXb?#4@?v7ME)@1Kdz&vd&qwj0N` zgUKaS#ybv5vKtgxQ8zSSm2nAcFKWme6p~i|olqh}+{T)hyIf9Pn97Z3m`Z_~<44qWDJNPJ?9M6%dPc=`9Zxa6ZS5*Ld!19} zWW@AlD~5X(`JTz?*0~FQ&-$9K!O(|Efw4bE8!Yhj<^Q z^YJ^pG6?dJ&(?D-Manf#^3OJbD4hFIY2NNOZ{hH$EgYoI&0Fy=U<7d^>4wj(^x{W= zC&KKG+y4)~MV)s8V(A-6h<3Vn(@^)j&#mOxX_UL=*>YE_atBjovEy3-A5R#Yr|kdf zV=MmO``A*bDf|x~8@bqQxY+t@ADexSkIg>E$7Y}7W3$ikvDxSN*lhUNo_xn@)S)Rl zig_=8`(e{2HRW$><=E%A+U#>&ZT4G1H~&j3Ge)kp6q@SV%|OFDF5wiow)=yI6-fLI z?LizUrfoxaRRz9Ah((Mx-uZQnfbagAh((Mx-%fRnfZD!Ah((MdNLrlnfZD# zAh((M`Y?cPW+l#9nUp?pz zXTHG>ZMLBeXUo2_r1#BtNjwdla>JQ#7$e9HXTA~fL@f1`x>$t(o$y9 zdq)aS=l3T0mys&^JQMatqxeSj-V&Ih0)97|G`XIFVz6pLO=a{Igjyt{Q-3MM(N>|f z4}m0}rihGiE4&-xR{-ronGAWw2#U&Lz!6^)v1|rH;(f3Z$_b<(QADiFcK4mMievWx z!->o6XoJvPa1)oEM%oQWnGle}fJa;mtT^eO^NPjDAuf+&Y@_Y08Aj)@&v}ywkPkAf ze2{{CkYVM66vZGJRz65UKFF~2LB>LYoRDGVgcRh23@az3ASYy4IUxl(A;ZcEDaZ*K zR!&GkPRKAjA&nw2i86}DQ%i1Rq)@RMQ$0jNVfy4b@t+>Nn0DdWyhv6eb+HByUb{#n#kvv^N#wzcq{frBOClFuMEdZO$cGn6k7pcm zQbn?ZJ|d@lm-(^0UHu>@*dFC|;%+D+Mk&=?7 z7%2>exGj(?FQQy|f^4rylLW$w2y*2`lq*lrcIyav^2S0FU^g)^EaJmnLs-qsC-B~0 z`fd|aoKXlAlR9pXMugFH*3G)YR{<%YhqvSO_;yUAuJhTq(A zJ{1~LDu!_^uSWKp$CX>pX?_W9M!Ep;esj0R9E#+5DzIJ$&H`q>3j9PTe;9#{QmIe+ zO=G9bC^Rq@0V@TeeWh4f=@X)QNJ$NS45K==AT$(faB2NRJy411&Pg&(l#(k1sgdF z6F?%@N60zk<;!lv@1aki;IhM^`-#z<5Pf_QJwJ36cuGkK9Uw-tLmi0Gej(BX>4~8q zK_MeC{GTNE#_z4@fOJSGr-gLCY#}a)0m(&p0qP@XtF+Y*P#pa;*p|&EPgbPoM-=)y zUXAcx_xSf#R^bLB--U~s4A!Ioa;m{zqV%u$Z*K19{b1$977s?bPkZ8q5gHdeJP?(T zGg2~BLBT8%dNZtcAlzw23m^o{2pKocXy0$%M$ZaDq|wv}KLb^hx4{!8Xrm7H^g@)8 zLyph*AqBe-Y`q3ao8jApTmOTV>zS0|e)NNt?kP@nf5&ecxz{4Ciy>q#nuq#};h*et zi%(nWt;q9~wTo+Q451K69{gXne4JiTr5_JDOZDkC{tlP+vyB9lRw32dSPW$FDrxaCg&(aP|^jkx4Tt0+cwTDT->KQQRea|r(oi!`iN z4vK!-a$Gnlo{Y*bD4zZq7J+{9gZoc$2P4nEhs+AYPj^%|ZqA{(6w2+4SjsiRob<^NzHN3J7X0jlh@Ec(VWRqOl^LSJM)Z{8>0r(OuAbi)>Mr`nr@6U z=l4KW;klRU4-YQuL?_}a>&Ba`lCTV1Y0?}Q9$S(!ZilZl7Z1ViT{DhxYu8qqbeP~I zz3h8zj(HXGoNNYYdjzg*IbLaA4s|p|Bm6$c=k%2MZh^4qF>gcnzscm`0*vAbP)_iqfL}ZZ&$Y#R6HJ$EG($MK{dPxXdBcLM4fT9+o=pfGEhJb)JqA18B;0TDz zpfa+kxI5xFGmJR$y{GEj5c~K0zo{p=%Uh@FoH}*tRNdRRsz`1=wc+eD zKvQ)=HWZYy-nZpzsn%56zK4__nD@u3Gb01+^7;#oHnyK}G3A0I-)0?zpYSg@TDMCM zO3RDVX4<)gJE}8Z0OcM^JKz?({OkgTSx|{(j4dOBD{_t&0u|ZrEYjX;>)lspdAv5_ z{zho!RD-wLa;X@22zT~psuWXUt(74*UT3MoIh-XJYdb!di!F5s+)u6Vhleouq}pO?KT(D;@x;M!*(Np`nGyY z0NC#9pOIN{oz8a+>-mw!h}hm3RPS1wk|Us3CC-)C*=5d8j@*HdFnO+7EjvMZ(%M9| zb!^~%4{rZzWm{U3v^|UaZ>?FB5#FCT_adK~pHMe5Z?Ma?KSAT7k6rEt((da%T95&{ ze1?4nzVvEN?Na{;nz{ByyR=_KlE31j<3&eqlXExfB>9{K4MvW?=(u?heUAO4*4w&k zG)*=OY+2hEZ9;up`=m8XIXH+t3}U`uRV@*(S~6e1#x6g&=*Vw-3v1o1A{)KWPFdCK zczlQKEV)dfif>+t-=}w%1^gdoAomunR42n4O z+fg0LJNC0S)RxrW)*8yZ&Ac6A>j%-@)<)VPjL!V`)pmKBGJm57jQJ8S@_WLV>Ebvp zhSSA}UUnJ5MY|2XG`n${8(ZCG&lZvuyVrbF1(4CRpmxI9R;~w$W?g ziI#?xr+N+S{Isq8!6d&0-fGFBu35bWcJ{u?{@~V(L9Ts`V4RlvdG-f?!Mjf%^w0o1 z+riAy*SQ<)M}7@0x%&PocY`L7xuNBnUML$pjN5h`ZKRPY&}p~YE~%|WO+%y~NNjsh zfKFzeL*Qdbf0KEC!fmwd2Zo1>a<$6dkn1fOt%ifm|}VUfc4@+Y|X?zaoFE zmb~R*wC*JrTiWF%ll0DCk=}Wk^b$yC^aJT&8w(Ns6=}GZw95k!Vj>B#JkslM|~i)`NAnU#9Dh4V*iDxBvW@08Pj%E(Xc5YC-;`C?mV zW7(jMGbiYUTI4mxXL-no&uAARl0x5Xi5Bnzf7HM;@n_M)iiLH+FcH`5C~`SFzK0G6>2Q<|AK~Em42O(w>F`fFT%v=cCB~{PC#B95 zIp=4{t^J(^$^VmUg9cEmMIHYCTysFDxpu&nW=%gJ)a9Q8{(~za3WBYf#nCKPGQeqd z$l|`vg6aRKDD~*oo<$uli?Rn<>9UVSY@K2&DOA}VZNT=^d8v2%IzP6#QuLGrwa1m( z{lCSPR8Fc_YQG{vT-D*XxGo~D%W%jbjXOx=4&v${{tgGeKCvENmTKL@*}I-=F4y>C z#aik9MNrkPabisiu`AXM=#7$ktz@~(TGjYbMAWJFGq|-KMN<1^{#4^i9S$`oLMfs3 zGXN26S6UpF)R3jlk2B=7ZEOZKld7&Lxw!w8IE^lnIO_0Uh|?9x>r@Bnsg5bA+9AQ5 zj&_F2Zk7A79N%{5akRQU&VrFtE408L@u&43NiHw`m0HAYKrHG&I=9Zkt&MbUrP5nT zHajgx;=qqBF6+e;M(Wre=L1%yZ_3mxBXUck%fDp@Yv;v8Z ze#^?BCgh}s>?BDAMF>>}QmpvGl80wil3bA91&J@HbeWEPNQs@KQk_mXZ?7*GRyzym zi(-Q&GMd`1tLag|m3Hg*!IecFE{nGZDRq-371U{5(?F~w(~V2ny5kzK9y2i2aJF;4 zOX(+_sTbL;$G_4Gq*aU?#fY&wTxR^gHZ3ZoLsgkFS*k4uS)CveRKwS%?R4Zqn)6dq zO%^#HaL8#>xM|fDsjk&2QCch~QPknGD9XZ=agjFC?dpD{u&t#7y@0T(3RJeGWK_Oh zNrs5lMg}c8VW%V+%A}NWIod7vz4|2bR=3Bb+TP%1Y|yydLSggA-Mas*>idaA#2ml{*=R?J^6> z-A)hgw&6G^)mo`G)axMYQ6i=)v5uwKX*j4RW~btkgKlZ4wr!_+vQy<`I9frzRi`Ye zMWdW2uaJF)3*9r*uYhLzG3}-?5|F@3(1ul@u&Bd-Q6*H2qfALT%l$;H?AwtCK__%gU3<=HFO%ODi-IX+FeIjFFkVwU zoRxT)?;+Nr4rxa7F)m(Yh!Vw=D+Iv#3~-MUCu-Dy_cN@y-W_Z zIXZ?@j_N=fvQieh<5jxCRAbrs6=y^a`~$0s-f-5H&r}!nSJc&-7DNV4t+3YLTp^1-}2EUg5&ZSNV!9D*%_s^9f*^9T|su{q6VOPu{wh_vbaoAfg=E(YQ$8Jve6w4 zHQ_7BI$Y$+>eEMS^_9cICoHMK>zpl{xWbecqsqZFw9C5QPHLlqugBSoe^nWd1Qkdf zNMtKnvz6+>rbcJ@EJP+(I{PaBR99B+VCk@sn5e^Lt&u6(RU7;- z`jn*d6Gy?!p}aPERA;SH1@*$NrC^dtDygT&45ZyFXfTnfMh_n$t&=*)%-Z%`Uo~ab zs8z$F{4#1sfy(^NjtT?x3`Y-GBA)D0`&Ky@Tp4t`!)0aexDgC{J;8XO(r>tjj&eu+ z9-liBj~bPpAYu%+x55($8SzSYMK}>PV)3ZAGGbJOEB$U?AZoZ{72#;SG*M>6{js>a zDp09%0pKq6#QcG8%04}{9Xa_2OWKa`lq;vVE142R0|)gcgy z8=h#n+Z#^c%3T(~R?Okc68b|vk|iFVX@vaMZci`(ZZSD}ycn1qYc!l8(2YsZOm_N=O+)=|D^m{^yh{=b3-P0VKdwkHBM=J2Ycp~~4e=g5uQ!w)^QqKS3)Rs; z+^?#E6kZWE29TVCL-A-0Qzk;OKzYdTQ%OjhF&`L#nzpQV5A8q79rINAbtU*`B|O2H z5-?I@xKXV$jk0ooJO+KEwpj-T5Pzsjl`RmGZnwxyq7Xh$jR7_LLuOUfil;OjiTbOw zi3DR6tO+UsF@bT>Wzo>#gTdVAkHTKu36$~L-iRs#a~#7F2psiSh9Rwz#Bf)7qBH%` zm{H!{&zf?FJTMWY*4oN9OK+GL`H&$hH@Zc37k63EQy%MSxD%m7%ml)hb6!5?76<`X)sv0o`6t#N!RbQ57Mb z6oQcrqfkoerb1bQo}|*4-)lrvS&4rlq-f-GlSEdlh~`;qB*6e`5}Tz%;gK47ev)W0 zrLLio9%}1AH8OWR9QOp3(VzyY9^Iwk@Jv!8D=y+G_p8Pm^1=d?1)3BwX_+e8X6PD_ z8||*Fj0kEf9F+^FijF;?@>tm0vzI#-^Lj#MMs2b>O-5uMbF+n~zS(M4_DWYQ@n?RYTDy)oOD;U;~h7Fe^A8zQ%mJ6qd_RZZxOUk33 z2%4(f8?TAL$jRE|@^KQ3?(Y%E8|6W`&ptO)9o$|&V&YVUo=a!cgDCe%$Ox|I=JBy zeOD`kDu>g8kB(Kq{E$&8wQqHm2>9d!vqWc?+Z}@T(dgx_Sz<^x5RncHxIEN`zK&P9 zL(~vdX21ipA&t*p<(B!vm7PR1#k$?G8W>wJ=#EiWfFdb_r9^0_e$;(D0OyNxDc7h< zpwt~#eguv)LG|e_4+cuT=+I*RXqBJ33oT&X;=~i^id5r4zt>gKKpjeMYDKER=;zAN zy-^<(QPM$)DCE4TxWS1$qmW;2kBa=(nuu4!W&>OC-qK^P;Id zI#(1l9}Qm&ZvIewh-Rw#q15+tMQ4l4WLG2aJdfGHH`RCL%FRZ1#!C3;!3UsbZ0HUm#09`=T# zQNK4XLrIZePuCwQHYQgj#b_G}E8k6uen}V-+XZ=3QXcj27#UP4UTUaA=~U%XTSX^a zO%2+Zl?cZH`!OUTeMH@r{!jv`qfmlUCRvBd%om77g6J74J+l#^ua)T}%2T&2#9EDc zP-_&H3)et2l#yErYm}7*6R`?;?;YX^v{PR=5trQ;iP_ha9*_}gUkRt!=vHK4JflQV z9kOmlaSx0b4FiLz*A|KEU5Z@w9RFM-t{n@9KW_zSXUKPtkyJql$-)8SEZ3 zbj(DpR+O3)9SQmsDRijKv?2k?szaoe%kgsPVzJ6ey&38H#9~n)R3AonH!l%+4mE<3 zQo&_f!HV-!FULDJHk}p_QYaLZ*!mh?Wn9LX1j(C5CbG(L2Rma#l!0>uEQwv?qTF ziM^Q>o|qeok3jdk!=khyoPF7xGH^t#1%rN{Y!eZEt^i8Hc&Ww7NfCj?5h9{PbJQ~p zI}9?~c-X9dIqj0j8v^PCnoX78h$XyUe=J7*g&+Pch-~~+CZ8YefZTz~!|V3axW(|g z!*DaoU3q9+EvHn7Y*%&6T@wk+_6KF60`D>00Zkj9txZI=pE@EaOH)H;44bGP%V}VX zo?PV|@`S>%px+PM#+Znh2EyKWkcO&>U_6FurXjc23s**_=<&ued~}z?O&KGop$^Yg zZAQrp8qGWs#;{~yI2@G40fDvglwk6UfGAEvdsNYCz+lkm8WyIsL8fY;XtPz(sBxl0 z4QabG^`x|>Sx^(gLkp`%HIPUcJpzj1^%^iD<+rsvP$|$=VHhuu%@FN!%Mx?u)YNe_ zsyL96$}bzuM3s)7DVnwM)+z~471c%&>P(dxSwT>A*0O4*XqT^KK-q!OAR_LCDM0$D zQHt?2>Qio=Df+woQ9L#I1LYO6UQo1>y@R5#0W3}14DyE_~gRH6)#qym> zQPv2LJ=C^fBW}Mh0Hc%rri%huFmq8#M`R^t&B@+*(Hu3Hq&->CKm zG5YX_gGPBIp%oqrm&F6oS!hkMnfmFDJhG=$%#`nyigxl+sR+ohS5!0}KXl|RqsFV0 z7-)FW_GE@nbZ9Yh5G>gr8xh8XOBfG^{z^4em1BLPON&~ML=TV^XyWMWQ5Et9AM!rq z6D7GN=ve%fCD0E%IJz#h6ZEHEkGBHNtK2U-$cOyU!C}AXB!BXYcJ0c-QB5$& zeG0{@F2nFtq3c&qF4~Av8&KhG?-H$L@m=C-x$-WtMUK8(^mSHy0`UljVax9pH_P|$ z7VGU$;mlO^QnAhAf&;`@%@g#eIxWM`3#sYL#ZwunCijc__EfirL>nsxF;Qk8HCm0OY6#3o06{9%Hi;>pU>_3Wn z7Wu&j(W61Ew&SVrW8@`WPm1OB)HpD%fz?lnv3UbWjT&y0j2SRyY>9i|fMWNcQNu?S zE3c)fQWu^SKU(C%`C?oHa%E*6~uW2tW;0ew;6ga}yCC3`7%} zZr!L1gix@UbT1Io<)0Ube1Yyy(a5hCi0-n>d>G#C^Rf8_Mqe-qA3c@mp(^pN_QTu3 zjObd8Db!V@+9%gn!+<}o79KfzwrGEaIdCe2nacUIMaTLy0HT2h*;7oO10=I+L`1Hu z5zXYT8Z@5sH5jbr&JnFzQuY=8AYP^5BBGzXU{3LvTrfxE%AIo{e3zI=%B?Xp(6cdd zL$-d@B%dD%M963A2OGFsdDD+*9nZwU;g>kLL2y;Xw$H+ zsD*fhk*yyk;#AsU}-vsvU^RcF+u3JS{zB7NGUl)PcHXm^{*I}zZK7YKD*V~#NlguNAo z+B`@@q&E%La@M!<>_*YH(dFnu>TSDwrDdb&>`;RZxoV@xYDz<`5SmC835QWCk;$dc zirbsjb^62}@47re*<&LN?hX`8F5E1H^lcW+DXX}OLI1fD~oH@uF7ka;aQnfNO@3aWU4`F z)@#&xIsp;Av8FfJ6zpr7|JdCA@8(Ne$X_<28Ex2%KD=s+=q7h=5f8~pThNU9Y!UgX z(a#HMY5uFED@%SDXMcSB`thsJTeBb9Ca`Fpv}_YCEG_h@lRC-i6f;6yCriQ7f}h3K z(i{b1ua1Th!4zHT95N#w*8-U(o58qX+!XW< zd1kw4kzA#svy6q;>SQz(~K`o!)XQ? z<-aNor?rQG4>Z=KMV#OS>(cOZj6aoz|E!Diqb^P+eySmMTbRn!YYuQytSm=12pd@$ zof$9U-FMG2ek0?tg_?eVN`<{f7%v`#3xs)0KNYtYBP(e<#oOJOi~~Bt*qDaXG*=`r zwxr>U8Q-3U-^cilG@Pca!Y|P8fe5nSOCodVlT2%Fy;H$LzQDM-`HqRxybqFP_W<1t zO#Gzm@seoap_NHUr{?AWrxh#O&r|Ev{K0oRvuS{`ldjX(S8v03`r`EG6r1}Ub~$FJ zXll7h-o6tyJw%^IsZ(-1(vpbgmOtYAE2uOTPz65X=@O;cbH)cU|U(=<;K=^yjt`dwn0waZFreN{~Bb&8A_!CYP8 zQHV-(*FC85c`6n=95Rk|nB?kLMYrVMBf4yRX+j*r0VcqQyy||LI${zAR5@3INcpQw_{n_m-+a?-c^%YzFgB20adGhY*f za|Y3bZ-gJ!5!(SX0jcqwQ?uodzzn4q7*7bIX->Qqos_`yIN-NfhqlAoE(O8cKUptH$g{6y=Jz& zAMwL>v7Y*w@U7g9bmKDnsx3_4I!EU-kK5F1jAH>Nl@Wd6Md4k>dA*OWMvlgf3;CMC zZtguyM|heOyz@6hcG)Ysc?Z&LeuSf3qSkN_q=C1#XyDJdr*H$~=cj1a>lBK$))-IU zS$Z<#b6+v!%V3l8#PWap6IOc z_AJSFj4%6C1JAMUXrT)#QToT7wf9wN`~7t?xnJE=1^8%`PGNeO$W>l`=eXd}UR^93?`01f8t zJ9NZfIQ|8WZ<>%h5pP?(2Fv6e5QD9Amdc)Qi0;YBdo(3Y)1?r_TmfSA$s78fK4YP< zit)sBb&E+K`ur$xQsndrTA81!cbW>foy>FdwZRY&703coO(zTICDvnj@yn)e#5v$r!{q zCa=iF2gTs*?K}c2WFw+gWl2@f@04c`!f92kkc|(C?zeriTo<{cJ{irR5~6E;Oy}H( zOV*w7hx0Vy9SO~!F1xOb5*f;m9=obmg3B(ae*bTrWdmQK~cC@xuJ z#t$#k_qEpX@*>i4VqOnYrzQ*G;#z$Ny=e&ise)11m8)wjqQh0*n z&B-PEG;C~TJbj_Los9o=k|tcw^oJS$lzY!5jGtuu&4-k7WQQZ7lQmc&i;uul^-Wtx z?gk#wT&$809}z{?mG{cCpvxH_(7DaxOt&)K-cDB86%{EV+Sej5)Ovsf^Db1lHX*%*FeygB1fwbnNDJR4UbaB790%JauWp$#(yWZSnf zNZSS5Z(qiju#NYr2{GWc16@>YP=jfqOJRV>si>nrZE@cQvLlp1$g8 zIpYV}&`ked%{cE5mNd|Zt8h0*WId-jzNPsX>ln{?N7G%y^jjHE-!}dT<9&Xo^ZA@L zb(Zm8uPt~J+#ezuS+k6TT)&*Z@lQ^$sH4uPK4&EGev14kw)d1X-^FrO_#|6?@~-GM z>|&KBF^83pGUZii!;VdiW6pzO7Gjn!Gk)?0Iq5x7WW)NJ@`?9gn^>k%zJrTl^?s+d z;^V%E7HB0|QnNMAjEsqlhiR8l1e$6@Ar73Zq3aMi?0r0$RnZ$d1a6DQIZn6oF`Zxp zm-+9EW36EM(fep56^%8)9+e!kUvsn|>FadnFg}F7-bLWyuF;k8s(#FY&8$D;Be+qm zQ>ifHm+|vKMc>qz%Mm_~X#Wg4ufIStEOn})3Yb7LLHa6`k29XWgyS=e-~6J^pcAX^ zb;eir(ZDv&{}kg`Zj+Fv>XU!Eq9v)QZm<=uoP0ub>zU8*3`_^&%+&yuH*c*lg!Zzb#W4#so&F?Tf&2xtXW;D{V*IF~OCv?I} zR#_I~^Sv79JxGiK;EnLwX(7LL>&Sw2XZp>>TCmmnWDH`Qw?33leuRO;4>Vg5p))5= zGEw?Ml&cs|^^(?;sMjC)HNZ=(_k$eYZl2C)H|KYX@${_#zGQrLjppBq3wx3A8C!J* z^pc!H{X9}mZIGK!icZPXXPeSi*;KFXKtZzhoQ}66GU*g_G=# zp8QR^z`on^A}+FrwbWS+Wd+3YHSdx;<-m_cQO@Xqj!-*fAlv;MKk2X`pZFN&mA*@K zMjM^Mrl)nG7IVfO7!R_&eacF^k@0%0v_&lYIL0To)%mDh9}pL0oOclITDyhlJdW7- zgU(@mdwpKUxGf9M9H&s^eQ)ZButlHWVuH_>%GXb!iJp1MkbeiEwf|GH;52}(=Pa`1 zG|IZ<8ZAqLQ{Gpg%bLCu_MaGkV2Gx_m&^Jp;}ttJ=NiuEDC40c8sEbBIpEY4@eV@r z(rH*@$GFb)8%=BEw$(z+SfBy=p@~8d##co2y*c3T&-mZUbUx4PXk!fHKhm_ZF98bZ4M{92gvF%|$Psf{9e{0v@ko+*(%&!R1l8K@KXQu$yX*LGU) zi7YrCu~g{GxT{p($C=-4j9Z3A9U zP}s|f+bq`iyYcl`d=@n3@Jw;f)cFa2THT6 z^>Ttw=gH2W;tgusJ2j)LIm7jw&PeN`U*L4zLUI|>We*ByiEaGk>$pl6^x2R+{wYS& zfBcVDSr3QKcqHOUp8lM#`D^cVPWK+|vWh^j_-8TWImX+p(h4v~*>5oJNXZXBgFWYRRrlrmE^z#w3JpBO zxV?i`z~j3#U|K*E#-rnPLB3*BYR7o`hQrq}-gljnOWu7B54B~#lUvVW9E=slrumG z2@BIKvxw>M;IR_TrK4~=<5&$v-G8c%h7n-=JDM?z-3zd=jgFbi5$UUV-Ou>O89HZ{ z%XpgcN4P`fp2c{T@i+KQ0*|DO1B~zY>wKhQ3s3VgNBn)0AwT&N{V$e?mrcIH#alHN zIS3a$`_Nz-c&^-%qap3ia0F1$i9j9Ff*64{>_z zBrS8kMt#nhDTjTH3Z`j`a{=Tue3^4(?G$v;96#HPy&6D}OyAjhA`>)Pp+z;{#Li_r zeN%=-jIYkt9Og13$#_Yj&S$Td!+4tU6?Z9oobfFusQuuo?w3fa>=)1Uh0PPVtiNpBzj*fSD|YaZ$-6A9%|*f&b8`W zZJ?{9tF`O8`V+FX>r>~|=S7p$^wzG3#d3>$I}eG?;pRT+%6Hw2UGs+0>6E;OPHuS! zCu`Q!Kg%{bv<=W1@*bRAg7zvzcu2n8#&w2Y3`!*WNp`D>a0YC540}^xgvm2!s*{O_~(xh|;8~fJh4%Rtf6@GQuEDR785O zp(TiH=uwa&AVDb`LWu}U&HnGX_ioAX{XXBv&V5fmx1G5&yK((oA@}DB3#zcK+o}e$ zLL*L?_!u7UG5b$5N4=j~x{_6DUg^mnf1q{U z5ORM`p*deZc+jZk$2)ea{fpJjN)Sp+icnonHJM77LQSrA0xu|F(++$Ro~E@d860|4 zN(oaY)1ORGGqn#&28UgeRFCW`sWYqHj_*poQ7|cLhLBs^Ais@D65ndTYe{^s0gsV* zngMSv@hk&wN`#vxQ338q{F9@0bLPYrm-{sK3}?;L*kPS_$}aM-!#)exGx3f81P3DUtqxhllT$?{z~Gj47h2&9CI-iZr|Gl7D?D@ z5GW$?y#~CL#M2CT8Hr~Y@Cp*o^y0$4sg@*M@)9U7CR2ThXBqJ35_cK!4ie8b;N2zu z)PVO+k_1!3{G)e>#0whmkrFR%z{f~D#DIS&@hAiSvBZH0(&#WJRV`dhaMOBcmuxqvcM-B@PiVcnGZ+*-@G9N z=Hw%oOp&yZ;=ct3e7?k&81Uy3UuD4G`%CCqYrt~}r}4MdKzQ$_5ZG(LKfERIGz0$Q zZGmSP@aZmrXBzMp*#f@=oR5Fc3OGa(vJ3(x?+F2y0q?bn@?$dP8t|n*2>hu5ud_zr zrbgbuF6Lj!`GQc;N8mux0)ZDd;03=Dc!&W%EAc1;zOC zV*{T3NEnVc;Bj$+Khc1{oG9?F2An++c%LK#p}ZsvHsGCFh$VA`0ly{r#~bk8FNA@~ z27J53XG%QD)Ayd~F~=YfSWIMSfdMbKQ)FV50Uv!puI&bVoW!^0$CFGSO2Xd!1k=Y7 zPcz`tB%WcwXG%QNfG11*k^%pW;~0Ng211Gya2fFV63;c@izNQkfG?A{sj+vo^OSun z@q&cY`1f?dYDp+=5Lhem5CgtJ;!y^Cv&5?y@EsDbOL>@S_q> zG~gK$?`pu$NW6~$|Mh@b%>Tg#!UZWX!hm0q_;>^Um&7L<@Ou)UX}}*zd`{z}{C)FE z5*8Q)l!IbaFEQW+B)-ak7m@f{171qvTRpgl-((7wguNaDA1WqO8HuME@NyE*FyNIW zo@v0VOZ<`nPpT~mSq4IViMtGV6N%><@KzFkYQWn`+!UKX(;Wql{og?7A_a;Y@V6u$ zV!-=LJj#H-Bk?K*e7MBxa2)yfOusRb(AXgGfyCnt_#}xZ8t`cn?`ptjNxY9gPW^9_ zgu(s<;BzHD!hmZMpJ~AN91??cfdNmI_$mW_4mclwTMdLuQXtKM-;#Ky0lzEpECc>b z;<*O=mBdX=4E4YDu!x{|ll+6FjKrf1cnyiyG2rzi9&f-~O1!HVm-DZkBn2kpV9y@l`%t z%)iQ#u+>N4^RKqV(+qfPiDw${M2Tk^@BtFfHQ>Y3lZ2q?GT^$z z>lpB55|20FYbD+_$w1g734;yz5s8mC;7*CpG~nkYzQBP0F7Z_o_tyUpC1I;U;2(*n z8Snx}MCLLLcu9$88Ssh{&&`h~nW{*Fsd@e`XejaG2HdlGL>cf{$zR8SH^ES?OjP@b@JD0s}ru;;RU!@$Z>_(IJl=p`JtFJ>t_H#lDKOZ8 z=SqCM0sl|pGYxpbpX5Shz&-j`wMfbzaZxF-)ga(8kY>P3O8!g(9xU-J172C;xgK1s ze@JEb*BJ ze4fM?7;sJCNv2f>!naajs{vml@iYUzQ{tHhJXPXZ2K=PNb2%R1n|^11GHc28r?WJT zHSj%Eq3&2Bib4KwrdGE>a0ky*6{0Tnqk5j;5WdJCmrrmAU*?Cq+U;1_U|of%kD4=+ z+q&$6+4Oi=t-#3HoF&l_*X^F!l<2T@(E7byrC>B~#Dr<~x0|wxn)B@{%FFxO-*4Aw z(IYYWUX{d@>6cO_ovQwJsD}n0} zoe{Y{eWeB1L)%>Zk0g#H+98xuoPXF&iMF(f4I$h?2y0Tfj#s$uD@bt>r|Y+;+9-R1 zGVq1A&EBd>VSjyHrNa2)q;V27PUXSGy?iX(sp-}D&P%Q47nQ2sg?MtpO=eHH*)-w& zwBI}qr8r$@Nwc*1(|_8uFQzF!ywIM15mx4t93EpeskE|J>EIVyZO4S@rT>!B$Bd-y z@daZO9#8wlPw~`$wWE$PwTg1Cr;;lqHsR^Cxq=Js!~VS|KKofuv_bPmDQ%u=C+GE2 zYCP4-&u_2%@>m-?KTi4cnYL+uMdiw4{p)V5LQ*<(Y)y1n$NWtpUm#5jAGzJOv7rkh5eg7C;_f!eAwI?x0LMG*J9s(Yg7&s#hLp=?t zeee)cj)V-E-awDf4(rAIlqb0qjYw}ArC=lM`CNNQ%QEz>&M%e5rO;gtt0O;UjnK!_ z%k>Qq`gnS~<pw_g+;h3-0(U#?s6)BP`)J>7U$T#IhZsRJVq zALPpi%hgsctf3@7)=n*KnlzJ$_Jm8`6yHKNd5Uif7l#Y!T$#;b4|&c4;YWf?48!As zF+M+IoM7Z**G0*F47xA5G66}&@=FyIQWYpnE_GN)@f7ax*O1c-p`E+WL-ROy;sJM# zCy7hX@{^wEcRkXhNwa)aPO0>dR`shiW#@e@=c~#QQ~$#9VedIJ(Gf879@M9t@#bdh zKU(cYWvWjk*q$&`rlie%IVl|0!TBlG?rRel_BVJ=)CfG~Z6Aq-iBBlMQg8RR0 zqswDBclC)v`&S zyiK3jTSRxdM%{9|vumKl!W5X3=XPVuO8*sgFJZ*U#ysTHxrh&p9-j#hp}1Lfb_+S@B$6nF;RDYmOxi*KT}X)9MM z(SK>---IhY|J0g%b55!Irxv&>QWVZ)0!UEgJC zo4$`zdi=rlbjZ>ytD7nTSz4>rgOv@}wbiTRDvZ7ki4;_9LJiAwn*RK1H6>f9b-J2d z(=0z!Qp#P27dMoctK@+)^omwv&3tA4746`fumZb(M`&p#t?rrzTFD zfimfec6n`6CH9I|dfi~<;_uqzb#cm)-?csKB9mrcqRbylOt~m_`Q8`vnMj0l2#1dm zbVDp}COmyNvAVfp74*aeiz^1^kN?y&G36F&;Nnh;eRyG}?xkNT+py~P?>kDP0A<|*D^djr1FYDmC16?BzzfvBY zmPTmOe@;t`_p0`3?adjnL1jpx!(!nAe9vlfQCl`6QaN}^J20byQvZ_n=ZsIo0;#KP zX@Rx@w7J=BBlsTYbTzu754o!bC(S@-`8o#cYTj>L@9mT12-jQY0`*D4Q!Fq~O%rRw z%M>CytVj4qz&Voe+l2RDal3hzv+3Rn+ul=jK^A99Pb~vTEEH|PmY5`{Hzc*0ms%NA zXToE&O*wRH(+IZgJs&3y{WUTD&jN`Ih2;?x0JlhxbokkC22r|wuv-d4i0&Q^3l^uV zE~4Fwk!j=XmY;CN(o!t@Ilc@3dd4ay zwB>7RizHDVeMzD_x&B0S#3jhks(V9gO-@i?+1v1saLrQkO|W|cj)8dd6I!EL5mf`v z^NOhe_c~{^h^r)cDXui|`mD%W?XVsI%jDRv_}7=OWARCd>=3ZzG?rr7 zg$wxK{Vm(6_3R)}AkYDn-&= z3}ZDp;U)4NNZMU2HsR&8opuWotrW}C46{l2ACjE#6nu98;C?Oei?_A;6H4n3Z-Y32=wxkT?Rd5J`A^VC3XYI1;*p?Jhh@BMo)^tAviY-U&XdjEqPayj zf6UYd&W;G!!JB*vuJ}!xGdn71u4L!|exA_me=U0=E2xc`_ShEP`3%O2({>Yk778^} z&h$iwjc;Jmom4l_#HuuHivB{ATvDlgb}c+Z{(AX$WNPnx7Nc}Jqka8Z&yw$DQc%A2 z-*S54=OICTIm-Pr@j(-4`%0TXJG5{EPH?(*pWe~s^P#MBU8K~>ce~g8Y74V|evLb0 z^y|sVe14Taqq*nAC|gcy4O692enkVv1!Ifmplf1Cf@)b!R*w!csMm zD^5?PJzK2N4Un6h;jlSc+WhDY?W-+%P}31NjCADNS086Upj_hKTBAQ2G3cFf<6y5P zG3_1q{+J;jzRx$;Mwtu829RpVKnKdo}s2wrXr_Q0G(Ru;ooIz`K3uaqa%t zuF99Ev=-xu9puu_Lu?C`?R(y3Fl3-fo#ayla68&A;!yi;reX4-}Ai5RSw zuTE**23l(=UKMiOPlJ4N!cGkOQIL#H*g0*zFyVB4a8hJt?+IcKLZz$4Q}+bv^pMceu?jt|Dao@qkcdK+qsZM_hULho)+8N@rO z)F*LUGpJ8$`k&CAfv>zgP^9M4)_QVC$UJi&+E`ripH`Xg(}5bm)G_zZ_LPiVCV zTZ8|m!Gl2TmMwt!7QF@++Ni-5v?U*vQih(;ei>X!OZ%vBiSuBk1#2Dkq1_Tgl+uM9 zKl8klKB46f4z4-|Ex#T7fp60eEaqW&%XT~F7oZ$Umn*! zpHNL1a9rCvBqHDpdIEhz8*}~R+O-M6O1b0OzY`Kd=N_ZnI9*MTz$J%exop-rqP;b- ze(6TkfpUrcOp=CXXe%bRDcy!QvEZE*%cdg@t4Uw2?4$@SXj0XZuAfP-k6brR>oO@^ zDSu2GGpTZ~Pq7z6Z53J}IU`m)$fLPdHZ#x^10@O@k=@c263I`40_QE@HM+IyQRsJA z)^T>eNGx`0cPG`Ve<7W_960+9Pq{6VCO86|!2`5D|B1^D^2xT0*XYcV^i}-_}sbZ9l@J8RnC_ z|Ffn|j;?Ish<`K%G0L2_4F70ie%7u`4vh=@nSvsU|5{NTE71XR%X{xD`uXKiijBCb zI6SJ={lwa5gtxP3V}^vs%`T!-za>5BgW`wChf^LOdLW~Yqhy>Qf8$+gq5ANsw(^sZ zszbQ2ZzSzKKn{=u9B2*kSl*cSjh6m_Rb6_-t(VARLHepwYT;s38kCa82OQMOPiZ*# z$$pv%6H0?}ld=c57XBp1T23MsgQtmfsN%5x!l}L;{T>9dUD9gd-SwRYo{ar&Jt~`7 zwKF417Tzq?FFv5%ol+}qiGjBl^tt-u!3S50J2p=#QNzGk6O3B=$kNJ&Bifj$<%@rY zN3*^fc+~-I)zoTAniZ@uBGPtM~GcB}92FjY` zr;Ms>%T8QV4TD5vABHy{dp7uiVr6u?N**MowA#)|*XB%%2)GPBOy6iA1JkJjNcxN< zWr5#{Y9{RZIv+5;8&;>zw79+X(6h7JgnkWz^urX9<-D&RI=)Xk&@WQ?>a2FHUlZlt0WGwDH|6UC+UWkf zDkun(oVBH5hBz%PaGXN_(aQ6Jvg~w49TdCy@B_TY`S~DMZ{p`Jd?kIdhZqz5YMh~) zs2i+TMUAtFB>XCmMHnBvud{tMPPao`hquO=#m5kyBZ(U4BX0Ed8fPl8i5h1Fu^4Kc z8X)`EI5ptV|Eh6L8aHO+k?s^{fByl7c=kiV#dXb7CN92#mrS)Q89C# z<7e=%XBN=(+D>h;{`aO~k*}DE*+6{|cVRyzKRvZPI#m?@;b7(IM=@p<#mp#DWVZ~( zhu!+#N$tj|(j{nIq);u>jHAs@QY}-a1&67Yi2%%NnINKDN}tpQ4Q{0z@zpY=z)Ay) zY(dReqLw+ei|1pasAV>y3U_ zaoxhW%~#soIIev$q?)oxls0+j5b#lHlPpS`507gvhBQ##+N0HdC$ejOF`6?`v1giy zjUHw?U7dD%2Cc$xLan{`@$rVTn@@t}LhKU6E}14;AqI-mW!2#%1lR;$~qh`PDTG-I2MwdyKy{Aif#*P0A=W^%> z#H*=-Fo^jh{Aja7`(S97i0@Gr*%xj6U)$##r*>^rx2@_ck4b#k&uicS=VcGdd(khyaA&a51{;PQ2ZZy zq~#Ne5*zr+s}|hm*1O$PBLXo=9hN4X%jr6~LAyJmR>N?EkbOPh&8b}T7ET!+`%>}n z_1c>wqm{?$+6N;`*T0Ig#NHW4qQ?`{Z(y^=RDw4F4YucZ+5*L5x89MirH+hHzDnm+ z*ElMZ=usO#c^tWcS6wyJdDRt39p|aKp5uT54`vcmFqiYMO0zd;b>EL4SQ5QN3a77bF@wsWPru=7|4-Yk=`f)u z{vS|bE3xon!dFN?Ovn{1MJz8)*X{M%+4tj=;p?8F9;U*7BXxbAzJ^6)_Bo+ zxJA`3U1k;4nOoe8e`nUD+ADZGTRB&HYGv70_@ zJ_U~_WUhvvxY;I3f`35YQ9s)~hFzm* zq}YY?Q1|YdPM&y&@oBrL4rz7-%pye&+e~WtRa!r<;o@Z1iP$JZlE>-Vx7Mu}yT%%- zGjY-G8Y>(2bR$=iW>C_2jayH;#@d(K2>PSIf$8+V51lmIH>!HeKUk=m_Jdph?;2}V z>P-VjO%F$3a18i^RjJY9NAj?B!9@F_c;Why4czJ~gVi@6u?-Sx4$NQugM~Hh#QS6s z??}-BhfLIs$V-p!p_P_Q8@k0WUoXCQ>ou;k5H$@-+FfV$0*|Bk!BC}Mb1mNJ*5_Pj z6$69mDFODN66l#C8D{;!byiNju*$99fUHtvtx1E;!dv|jU1FHU%@qCKXC!e1lc@K z&GL53d$Ro-@93Vclveblv5Q0lzjfEx7XoU;QpJ0x_1(-uiJlRKMC$$j%Njc{F2Z`aL$8kZTL%&%?zM>*YX;lTu<@w;X zCVBqna$l0X;HH&4x`7MLq9`TCuYrjJ&&Y3lB1GA;+N~G-i*<|q>q|fWvD~WVEHGjU zgg2A_VnbSNSVNPF&;2?`6KcIiSP@om)aiOf?l>$5W%Ge(o|Vn(%iVg&O;$&p25lX2 z(e^l8L>ax5Gx)y@u@$;S@$noxquti$$}7AM@e=={2kcm24!uhg4xZg!=GN11vZm?? z3`h4(q_{aQs@`JBMHb8#&UgLBt?#+To~V6rvE??ar?&put>3)O8YQj6{@@B)fg$k? z(&B2elxMEUJikn|71)0cVANA&bm0M?i0Lp~H@R+u zS72`tMg-Td5=$~2LS19RJte?HUPhAR-!F2l_hJPIqxWlFi-94@d;Y^m%CW=Ygw;a` z$V?A7N&fxB`?%**F=FE+`s!<9A{38I5}w-Q8|a}fR#FW`3TwGACLb?#>pfgZ;R#&e z>-Ck@Rk--k#fF3|Ure(6JSN0D(1tJJCoGNCPRM7!Y)snP+=O8BOg%co;ghzckLaDW zM2sSrpHNi7fOpaokx$x7AoApkXk(Xw*J=3!hyC=QD;w<`w&3_rdmd-AZe2@>~ zeh&oXibW#w9fZx&N@_##PK2_)xlR@Qp(%lz&-tXscU^|T2} zaKUZ!;7}*YsGeNp){8!3-PPKl4|#W-d|n(~nq$y58Z|?>}O-)GvUP z{f9-Wy@AC4!{(^>R;&8Se^?WBkFM$kAG7l6$S*Kh9z$v_kT>a~Dv+^s(HF=(y2!S> z_05l27j@4U?!`}7S9RxH46G+?OVLLQWF%D=y7ig=A!CU!Rr_C7O}+9ZM}qaNe^~+b zIh0QSmqn?A7ODEGe_2F{iz$ffL&QBBhd-Ypm->)@S!ncqXv`Vv>$(uTV=eD(YuF;y z)G{SQPoJQa4xR+*oEm;?C}+%2O)0Y`f|#H5?^npye=N9QI9c7ZKsZ~vA-V4zC45Mz z3*38l{>N&wn%xXqFwo}tAbWh{Sldo`HZj3f8J%DEIf8GCywrWh!qv*S==zL(t$w#q z)$cuHmCMfhjAshF9v_tc;%}e_xws9v01vYxYG{qS>EAZ#-r zuaY*{$7kypi7x75FqKs&&2j7O1v+3Idac$Abn%YQ-TGTESo5lne4;c>?Yl%~9sJ?A z!}?+YCHU|5GRFmfnhoOv(Q%hwu(IZBb~kPzUb0Z@;Lp7t@Y(LL9$O&O`xc2jgyF=O ztX$YAh-B+DO}sgdLO*HXrhZbNCA;;NFIgk?b0C*qvT8*aCi5&sxvD~kH|BwB=lWYL zNb5@i<M-Q(+gGen=oe%RZ~9%s z2TCXUfb!ibZvF39SYr|~!N=vXL+bnURK1Ry1*zj_qh4~ecZ2_SAc0-GC8T6xfjA-- zh9`*eh#M|WGV=@D{l{{JAB0C9~{z0~(0V#$G=P~m)LEap^@dD&7!<5Yosi?kX3TQyv5L|>;nhOVrY{uMoP`4m+j$Xi z?sbaW8vGUU_)h5CPX}zbES(_ImTD7qUJSzfRZ%Ki55OAjV)P;EiG4FrGpkBXwQ7=E zZ>}m)>M#w%gpf+`wPUswXhSM z$Ce9O{~MD~IJ?rKv<;7^fF0Ho=r+VP(x=Kf)xG!)rGHp}RPcg~`(C|niLfWVq0|by zz$N7qav%K}960ob5)-!kf79249#BB3(Pr5HroRin@OWWD#YD#R$p8nE3p-iIPI&LVA$>3bd1$h5x zyuNCRV%4)tD0MsZ9Y+seo}!CPIW5%ckNo3zzl9r3;tUZK^({l+r$;5HRYV zM|hn-BRSzHqwmgS3=6Dnc{p3uvq~vZ1%H@L{hhE?AM~>l99D5O9I9_mIEq6Yd#9iA z77TyMW)iq#gOoB#?)zc}Ec?K%&z;0#)fN~R$0o7b=9(B;dRPRjSlW6nnN->`_&Um0 zqiv(zdV`Ny)6nwc`6zY~2@k$Ghtm}YZF4?mzo|cubMF~EnQc@edksWaIRfq^sistM z&f!~d=Z?kQ!BqBJa4UE_$9DUU+Z}kwb_XBmgjz5aJdI5&v<1^X@K9P#v_5Vci`EZL zV*}KJ@4NMg>8xGHdDFRzOCFLt+{MwuxMx{};OhYR5HBp9@5fgS&glsFjO6_GhBshs z%XAi1vIm}EQAAv!(>38;9G^^QrP{0<0esd$7wI!asWa%U)4uss)-b620)G2xa*V>^ z#SB)hLK+-Qv7LgVY|LI$vTY|W8Lb7<<~PIK`e!rPQnlPjw_ZL8chUDp;Ql0urKl}u zs`||&mYk$c^~LRoc|HX#N8B^|@GD0?8{&4)Jop8|Q5sbs)1bbIc9$eV?Jmy6DR$Rcix^lOvJU*90VhTgpNDXUWK7$@*CTKPQ` zV96}F_V+$afdlm5FZ(ar4ens58DCkQ{wC4!zOt6%KNaEz#fBd^u38*8w!RDlKd`GpidAPIopqCWRGm7iRL!h z+$NeQWb-@G%#lq^G=sPSr)zdU6wjZtz2TwVXwi$y;B4usba2EEC0r)>^xhn{L_PkY zx;TYJ#IO5McoEPaUgRHJfwt{@Bv_)ma&3=3B3A!*UkhTg3`k+2;rEG@e+r1Hc&?9I zUzoy1s(avCUJ8pYpbo;i^T4E!ox`f@-R81iTDFxgxO!vi$0Q%5m5EI(gcQYrl2ZT| zF}Schh=8c7bN(YKXM~Auy~J~@wf#}&*>Scp9Hutg+4t(Kp6)$weZg9)YFrPTjc6>k z$dmU)xNrBwY5072KBhg7t@#*ZY;V1dW9kL0^neZB;PB}Rd`=Wx`wymGS}Cj_bGRlx zaI)bzs@)lwG=2;teGD0#VWN`L&%@%tymDA?jMm3jW5KGk8%F2?)=a(hmRrBJfK@7g zwma{Rr$3UtgY;pVSQEk~asboF-CKCqdU02Hx3@g^&O_|p3l)Q{4hiAE?903t{ax!h zilXJd@9u@C5?`|5D)oHWmyqWx!8|`n;qi~}3y&RLv8a5>23R-sBuDXngV(k9k?Rf% zS?xCKpay+cT%=rdmaPlN-jLle3EqQckUz^iV9DMWiHIDwL_KLfE3LY_xb+JQ*|?;R z+)262r@hIATMEpzjjNV7=ho#M_1&auoY_N7F;FK8RWtn64-wc0e%J_CXMlJ(Mcv}C z4gkq-W2h?xI{OK@B7lj_LKBh4`cvJVsiPXmj>;)SsJgveq%`Uj*Z8;hAWd~_>5W!AL4rLggwDFBFl;1nq zqT~RsiU5``VQpGJA`>aLTuN#3LHZEiXdD&Ky=?QI(aUZ$X6&}&QqiN1s8PPg0cIlv zy7_DNRgnelNh98^v4!X#EMn#KaZ6dTs9VjszQYs>7BOGcr{K7k_3%<=QQz#~)}2cc zTo5kUGFC&q)!wbwS;nH(bX*{trS(zESP^wad-tBn%UBvys}B|#Yf&Tt#*r#`muiYB z>U)szEADTdw$ZY$k<kug7xF(Dy(Fc)W#rnUWs0GfwW>J z>r>!hOy^+w;Y6>70Ww{Bm>y6BZwvA#u~^`}6cuD%ce`n$TRwOb$YEnaaP${a;N8Yfcs|Q#dTA@f*OrQ>rv6^3B@2ah$)q zKmP@Ry?k55=Y*{{S2JDhjQCuuS>uxLg2Lkv-u~6ht=Id3+3RfT2?lz^E9+H3S?49c%~a!>^Xh zZi1!ZM|P~_=3a==SL2lcZeGi3Ck^UBa@IQdKm|v0$`R9uV{tz~1m7&hJGKEOfONz8 zU}uWodmj0HEIdd)T0EyiqTNx2rkBHdr@Nn`2WVjb{Q!z^66_~A5|X@VFFu@%coNkk z76+VbS(U_@Trl7do_R|>&f{~wFiGRg%KElo+auWO8`%D8jDB3l8k8&og5TZy3gDC1 zv5HAqkn`*JVU2l*enAQKc+{O^d>07ZZNh`R-pL0;kR@JjSeGF!RBl*TLR0d=AP>Rv zsU%pY;KJ@83HvT0BO4RI%g0fY97qovi83bKE8fN<-VVHW2N59H7Y&R)PZ_fpVzh8v z!w1ISz9!Vf3)v1!0%xR&DaO(~; z>)8=CqnoO)+<+$!Ya8OoZ3BB>EsPmaeIv`Ow5|aeu?+6&m!jVUHl6wc+Sfp+%O+-3 zCwEu%ZJSuxple{rNrG5^$)9&k(zNp8`fn~>Xy({(L| zys)j}3;Gf9@DDS? zezz5di|=B6t!W*=>9Fjl53$}ZZh#_e7poI}t`_8Q7`ll6FoO-ZRkYRN&YzEoiM4Tn zxr+rSHLd5pS9Dls`jNsM05^`WwyZ4*yQISM^QA zv%NicO#Qej2GU*@9QIjzk)T`9P0_+tnnD+Bpc{ztKyvss|C|h<&Iu zenLjR+lR;SU*qD`KGspa0#aBi>k~1P#)PA17RFNszD{eF%bTZV^I8ON-j>ZXq8ZwpGm8~IH5`ZkKeO1TmpPNK9vVxU?Uuu(#L|DAfu9wAQ!DBdrEfR+Z z@a4^s)qg1?6v}baox5mFj^#b%cNb7K0;}sW7GM1{;y|`9Lv6fN`zcK0hL~F3_cu2q zu*yzUxQJTs?PTw$RimK7i8qB7gY?kJti29Jk?}=58U#hLiJ*Fd;Ix^c5R;WwiX~0` za&|G)YtCU!2F0(8+#iZ3dl@XDbUc^v<#Q;6avJDK87!()h=EoULaq$F_2me2>s5}k z)S>Gdiw-RqMjl!UQ9dxNLZJlBawJbqms|~(X!Ob%Y=i8~Gpux_W~F#qAJi9F?rcTVu%(Vf7acgm8no^Z zBbdU1xJ?Ka1Ll-Pez>w5OL=cTh&ILUS8;&ex^f0orMHj8ud<>y!kZf?%9 z(n;_7umLs}7o;bdEGnrDmrqYEia5pDKvP7H$$jZ08H^L|rKi#{xS*HGM-P|sKKcuc zd!Kv(NiX7+zv53%iu;FWCp|UP%dp>{A@07Uck|Mh<)cSR1N0i5aBylqx<%3(c57% zzmEa*&n2B+C=>>k`O&c~-J=O3y7$n1+GBxb6vJKZudGao#w3j&Z=$|;#Gt$N&~q%Z zd9^?xBj@6V;`F5G0Qx-nApMIszRQZ;`gjeJw_M`gz{k$G;&{2?9G3R$xEOy4cMQWz z;B|&`Y+|WG+*K?>@;l3C15gQH#+OC=o@as4Z;LsbDTn7==>i{>PS?~xJdZh#o0ghT z`}902o4PdS4VBF`a3%hR$|k&o2;d<;5U&F`Dw|+^%WtfzdIBo0{DzJ04>%BffsL|W zsAHT0T|ioVfkln_o=7+-@=bxIWEl4cVhSvfbl(u4l8-+1HF{q`UqbTy%M)x$&Fi>zGp!G)p6Q-wKQH;T{z*b9%757NKB0pPAo@|I%U6FvZbD1uXwOBevw zqH+MNz{Q+P7yvCemu~=A3h@C@zTte{*_JnWuJAJu(z@*XZD{gig|wO!uhX@)5SFv; zcf>aazbmG9ZN=*L+k&5R!FIy=|Jk#_gv|(F)%1LOc!7^;1816mHx>OEc)~>?GgmOQ%Foclr(vXE zz!!a?p|saVjE^HRKu>MWYWHiG$Af<=2b=GA-)a@(!B-aa$&&61zL=mF5cD~c?hF1w zfZnDJYpxtBpwDi@s>jWG1w(kahauaGGyBeOcEelbc@S|p;`&HcCB1oU8=&8VimEk0 z;ZJia5sN*p5EqCECu87Cg{nM?n?(Ns@HAH z66$u~6h7V$TliC-3Yd1|-O%psrs_VPWfuL%wyc%X+oI>RWwqjhUr^-y8$%mwk&nJC zcEVIc7N0!l5j@}{K0Vc!#jAz&UhP<|s)s@0S=>h~_PFI-AZ8;M@MZD0!uqCmEF|!K zB73r!XVK5MW0jO~MfI2MSfki6X4uU4yNEf@xOt&1JvG{!pkFcd_;AEDTv1FPoyZ0$ zO#=1PiL8fGEI=>Uo^1-~NSlJZ0a5g;?O9Ync^?$3=!H74Mg?orQkIgCp>OTLsu#p} z{-N>T68h8*Y@t%0?FsA%jSAk-dbcy{-EZP!?$59)q&Yp+*CGAMb-Sf!e!8zin+bZ1 zppTXEzQrNjte1Y1ovpe5RUUbRnM^+{LqAFu`wus{kQTUnV<<}1OLk#xllm|b07Npx zuSp(z#6==s6WOHrveqpxPu|7W!q)?6Stbn@X% zW5iX;&HY@JZ7)hZ$qB2NYkXdwo?FdazUVnHt|G1*uk!SgU0Jyz;V_nH$1BANYxT6l zs&#Q!_J-cKE9;;vf1wZP&Z_8Vy0S+7s{c(!dai=KwG}B|-*_BMQPTPYwL4#uHZj%K z;+o&3X4}kg#F0SGzRQL2mgbqm2+8D1h985w;ap?i%RGH)H{1YJ!^QD#IG}tF7Z19z zG0LrH3k<$m5t}e4@QdSlzK)52RXw*1-ZZwp z$kYGm$r?po`Hwr23rBKI6W<_1IUjk<9r{mi&l??wtIee=D_ z3v$vDE$ELVy_|PFC@APm(4R|sl$Y*;g^s=1TgtbO^>2G)19|r@Oo*j#7U%X2wXb>C zT3Qi@Bd%$L@Wr?ERei1(>cgsc4g`fSeT9g{9(OOB1Y%x>lYnpOs|a<;32TwJgeCY* zk=TT_(|$lGhlty=5_Wr{&+3Ek9AqGEtNXC~O#=V%?>`zd4i{;UyCB{1g+770T8_#V z80aV8#*@11xTxBfC8%l8_(5M*Rq6Gwz8pYOmpfcf8uv0i)wcvSq@KbHuY!J9(yiVU zmKO9tLEkIs^sc6;U;h2qGYjU^l0d)7E`CpBz~el;TbM~-aZRe-RuHfhSdQH$PXfN- zntbVZd-c#?G6wrzJN*z0zT0XS&r@8-p62Om`muy2yYPL0#C#h@eXcXEll0EFK!-sq zlw6|q;}!-(#r~|1ItR&_*`Kvg$34r_kMw61l|qm8YZ)Zkvey1z`0jxPJePy$*XbzFha-um@HcN@-V%ao{ z<_g(-a-XZ(B%8NIbEj-xtR>oqWjjMOkIUvh(Jai<;dHIPuQwjZvX!$B^bYT`cXZnz z7Nqokpf4N5#w)k(>j8sVlhWA_VbF6!lY_~Pj4isa4;ai^lsM0Qv*k)S;l93UFl(uN z`asVe%!aZR`mEusdWpZeRWDb)9DTtM7GCi&6pLk2p0QpjO-YvL!MupMaaaFk2)<>s z&C4o|Sn>XuYlU8S1dA*&hTQWAIbCBP>O)4b@*SSt zE66)sO6TbJ-ox9Coqf=CxJbL|BTN~JKw8{;N96rL_Um~caYy9+NBsPNpGe3Zk@uc1 z%6oM^aX4$NjK8h-9Kx!VIC>`^ujQ7=z7y*6Wq)&VWA=C6{GqG7&Fi zk<)nD4<9D{a2L)GWEAn_y{}tZW{Yk)MPiqR3OxL<7(d2{Z$?{+adHqImzs0L<`j zAme9u)h%5ajcHY#lzaM5vi8o;+J~CxKS@o21ov1>D~TrG(8rBt-D{ks@!$(DlbTZ2 z@T#Werhb1ktF3Gc;Lq$zJh>($soa3SldkLInkZq)+`n|Thqci+j$uWV`T_dBF|4u@ z7{DKem8=b!9K5Hti2tyoBj#RF{qM0XBFY3DKLh%oe0H~s_8EsIy(rCIq#{pGAHyP* z-Raf(CnJly@A6(Vb$FiXCPExKoT*JU==CjvGa+bTQ7axbEwrEkk(m43%D#9P< zl}x{qU-R)I+`rljf&2W!3lI*=>LS9q2Cul0Mm{48g^<$rihge#3#mIya_)rNlxjpt zQT>1>|8^BW!e}R%w!jiS`zy_|^iJd1hNK;Z$qt`7dDr=RW&4tfT8HIFPI0=Nzms0e z9@*S0nnz@FUH;}$(ae!lyJ&_>>(fLtPBzE((yNKp0*^C#>blI#c znu_dU^%08=_=RVJb4|IX&-sWwjJ{roobWvqdHVvN z6p3^fkB$qwsxO(q$~Els4Be2zYi~>$D#3|bxEWAilU?SrcqffhA6?ROC!kn4dQC4j zktH??G?<$58}G|f9G35M3~lI95pc4}Z(kJ{VtG z9r=5nR%ZPvb;^}I?e6-e)`|s?P0tF$^LzyyUvH=#9!kMtg2uvVK9NMvhiJO%{PoH{<@r}eYr70)xfcBW0i;uIENPtp#=93`QDqK2VMVeJY&6O z7CMMUOs8d+^0dpF>bLprSMCOWuo$~1Cp%rU&Uu#kE##ArFaiV_jn~}?aH8vGyajkJ zPfOa|P+fi@PusgWM*ZryydAll-)5@oY@XI>YlEcfihO~nA};WK1w62%UkjjDnS&(B zQWzJV9GsNsn7E)5zFf=Tx&0s>pkSxq?`Pcx(ycw+(xl^;Xgj4`;Oo1q`!Dc~UeIc0 zx8cy7);?0b3*7v+D1HlRax5aVxG&o7r`PiyT5(c=w;hSYkjMl?*J4|DYY10jsY@Rs zk!Q~5X=}Dcg_b$X6FH%LBI@QTEssbF@1Sz zpi7S`r-p`~JwzT^w>~mj7zUq;r6sD>q3rFn8tTimJZ%oz3<*1zR!Mao=0?=_fYat# z1DWZQK15mYL?2ufeRcN$S9~&8D1Ppp_p_kjpY#T5Unr<{BvBoN5GEd}q_#bTTpfv5 zf5PXDBa!MX7*>B8sRle&v~fR0hS%TE6$U-z3bRgn6`p{C^*<$83qKZ=>t0G0RGE(^ zs0E=a{^u&%grh;$XXF=tLDBbK#+?Is+KQvmYHM((9}Q6pqJ8z~5H$#q#s6GCq823V zw)12V4`=+p+4lHQp57_M99m%rr4J`?IQ}-ds`E~>yv;GWhW)rVPtPlDZrE$!KB|QI zar}-gw4cNk<$UR>VUQKaUrP^T!NWf0&OS#Ap1tQBd%|*bJjP$`gP5OB-TY4!JouZ8 zI$g^S=jn5U&7ZU%v_}x>JG3Jtv4}@kPB75^0u}4(c(9XVLr^0Ril91%`!m-8GZX~+ zW8s9^d*-;4k9OuL|tt13&K{7T?KTjo&C-9ehxaudGk4y}}AMLSQio&hfBNNJ@KuWO`@VNZ%6;+Q6H%F@< z?#t6#hns7vYk+(dZf=w`UZ+>{58!Sy#nS%@O%hw0y!GtN7Xfc`28<`-1cazq;poE= zbMPKA>9AekBB&%DdAI6u#Eyyo0^7Iv#x#Bo5?e5~`w0~i@n#;aln%XWgt6LLGBSoUnx-hl2`&XB+=r}|7sh@RDUd+W5O+m^`9J4@4M$Y$*Ix-snj0j&$R@Y_kApKY%dqZt&adJe@#Ql!;x#kN1dpGY zHsHx#&rf>1r)z_06reUDhm-X|QRY_a-`nv7Cdyn--MA}HzZ_+*rY7Oyjc9YEb+^lC zwJ3w%M+1$`V_PuR z%b7!4z9A)*{E|z(lH2%GXIpXZHUA3hXSXSIUignjK6C$2gNyC=VeNp;!0W)um$&r~ zjuNXk%*H&uR+c)%+T)gDIur#???U5RpQi^@G*?xp zxfDG!OAS|F+*I_3S!!@Z@_NjkZWygIVRKmE!!-PT*J^3_wTghc9^S2zSFHmz{cosk ziuAroiEz4xAekF(s14K(oAC6qk~uml?=L`eNqFZ16Y0OtIpXr;g5o3L(PrOD9 zUze9etC1lmYlso1$9hbQ$2(T-H3e7KdQ&pxHR54Gq?8PKjrg4)MkGd#E#?#)37xMW~#`)g5JpJukYINDN zWDj58Cfrcu?%aT~vzpoQ&iOSIQ^FFwRItRv%j(!H;q4Siiy7;*}Ng9lR>8iUy&-wQzi`Y2pY>sf<5_o~hQfTgiZ)PHtInX?j*nO|zl!oH@HOyty5s<=bEammg8s-wwvsQC6 zTVZA^-jQs~CxhkBYr<4{M5WX;cP`Qc-Xz=JLRy$!wx+q3KBp#Dyr--4^i6be4i~@H zgiAlH&Rbl|TvnY8Ai9=0yyTv%+>5<3o4tO>)4S9%$47r8((19BP04jw8W1-|;zXo% zYb|qU^@s2C7S}fSQ9FE}r}wK3OBHc3v$nZ<6(`S+n#_NF3%>!w-{xs>h2(wN{1x2i zYMTc~oE5`BW|RKP%U8b(Q@Ae;(dr5GA)0=|N5#t{a9Ud^;hQld^tyHN)5HrvwAM4fsRqL9VfD-% zqPMT)cEoEvfwsSdol=*C=WoHCU+Tg0HF$*Ou4k@Yb^`h3v;3Z?iQae{Je}%;xjHVU z)JOLg#>KMw=96l(m3jKe2Il(e8@TwU0Z6x20(l7*ty!(7PhW+`Mk@8Q78S zc*aWaYEZuTj{XZA$I@HLo^THjWF0|2BXH`7kx8mvw4pg9XcXQMh)uXRZ6%jOcx`j@ z^u`U%E!67E5ne-V&hBM+YowuhPTfDxk&|3+3i65F6MrR4{3&r5#Q*SjQhhALkb^;u z%>T#NmB80@eE-~g-?e8!o+KnBvF~fhDnUXlA=cWLqSo4DspTPFiRUSOjj0wzOVL(U zwN!0EJ(SvaT3T&i8d?+$_2U0MGxL@t{r!DD^5)E0=FB-~=FWEK&K-GqwwGpt{lZ$V zRw`AnN1=V^_Se_#P!*jy& z3*o5`V+>QY)2KJTOI5S1CNZ~=ks51g9r5BF58Ib#1>2G}E{AnpRlq)uHAF^y<3%<} zlBKxG%7W~VSVQIDM%i4mLzdnj;oD7?pdc2{gwgicW@rIsdBUeEzeZVv&-*)b5 zAp0QR(4_1IDvQ2W$}@vZ{$^YTLSh|cwGV;yT%(r!1J{N3uZ|^eqjaktBk~-xY#jVU zf@1|(U1~o-fCDAiMS$57Oc3DEQ>srnlq%%ceY=3oNid|PjoFJhfG#bs(K+^In9(}w zT*YqNqT~4U48)G$UikACX1tDs`Kph@ITK)){h-6aKxwp1w*dMce#t7eHZ-V|^saj* zwg>V^dK&E3x3!^~p~PEwk7#ylLv;PWpjPfn42Kcuha{P?uNyothnf>ugW%O4TN^5A z1@O#2tqm9b8h=lQ;*I4V@~$Ns9%x%pz^Nodu;z!v?@5NimEXd5aZ|I*TS&A;{6N~a z43s~ljiI%suPk8e+rX8lR}`?TZ4BMDSx7W!Yly1QW(B$4{aK=B$e-HQFr~u&w|M?~ zsqOZ+pio;wblIuM&os|Rw!-|{8LG0r?F{}}9MEIi8Nw@f!Uh^NSs^sxKhOl`Rsxu&`vP)dGph$%d#dFRZ+Hm$B{x#6{1U`$vNlkJQ9x zaKifY@Y9RK_)~u;{B$30|2Qgr1#svr_^#3vXks?A;I?m<_`5m^y0X-=RJapN8Kg7D@tevky8be z$uUw0nJ zkX%Q=1@M6ccM0&m1UCt=s$E3&Dgh=-aIpXrB{)-nu>v$X#t1lGqWc5P4R`D3Qg6~> zw|afKdei8wBCjZm@aW%4=udI{LTYFbh4{%ro-E?k0cb)S#k!P$TS@d4fVpdF9$2V| ze{$S9TtXj)aU}(Ed&#s>$ViuxQIk{DkgH9$s=>2M`l0C)lCQ)F2N)LzAnM0 zB=aAdJr+`PkVj-=kI3GV=|v{5dS3~e?hAN;gntB>`%y8Oejb@Om$<9mQ8H~6GG3M7 zdjcFMK?{lOUQA@pA+n}P45vLZ=Si+ULWos@9R#>Sg3%~|311uxlJKt!3)q75TA-=EN6IhgI;5XJm1H}J&8mMP!3_dDDZ#e^=JqY7 z*sX)^&{^RTc}Ox15;A@epvloyz`sj$BFWT?$?WHmnc$J>Vk#qK+?O)`UBI=@li)po zxjShQw~+mIlSq?zqW*z?LstEQx;WEvr4 zI3(B`pdYMTAmR243Rw6>_++m~O0q}FGf7rnNC^-_35P1cDiZvAJ{0?gFB^OJ7;kt) zK1BB*>snPZ9RL#)X(~XI<8uK=OZ0k@`C2iVlRPrld1N+|Oyh)%))E{jz%&V_k;sb0 zL{=w}(kGogGE*d1un;0gSdP*H>@Ts;O^|trkKetkp10ralYDd{vg+d`(|2G()iWgc zH9!;K84~`OWWHWZ=Gz{bn>;e#mP}KG%#S2EyfD~{L{=^)a_BynnkGjNA(J|FIUsdZ z6GFQ1=8De)3-AkBgd)K65_~idMeLzhy$VIV<}SkV0NsPM#5u{dA519l>Twe(Vs~s8 z@D+*vfMnug>>@IseCtx%vDPCqM>35SGJcTY00EwoU>6cup_oY1CXdWc9+@shf`pJi zrI1nrd?>+Zb0PB}tw0s3`XGACifu zev!&9^T;ef?;tDNLNa|nhgY_(1osIrO@f~R%$-_HWHO1A4f7L^%v8xWQwZrV!7&0H zE5ZIGGrXA0G9ESidPHVOrkX;=atT%fNDcF236~_9r)kZ$ke_qDahp^3$lN8F&d=sm zKO(^+0=y`}T>x|6C?;~cTcpXc6FrVJ=Pk))5<-5H;3NU&N^ls-tX)iIZMRIv5Rb_F zlBt1^@mzvo0xUQo8>S!0yhx+^?9JZNQX0O(sa@OGT?G_PdpWo`P(Vonia#N?uUp)u4*oy3uWhgM zDRf!R<-L9V2Kub{AGIopU8o(wakNu?Pj-?ssT+~oM~IC8bUecBA)c*n3YrHq&?d_gQ$Oy23QMQN8)9 z+^GKWnB1uTY$`(fKR2oexM=%ITCM+7xl#R+FFIi18ph-s)zhZSjq1&Wv6#I!s<)#6 zxlwH?hFmF-wEH=w7;>6G(uVLW#gMOXWYJAoQ*$DOo42A(cyClk784NU(W`VZRt!1ZQ}mQ# z$o5nIbECSeEc#s@V%Q^>8`W{e1e6fc=}bXnF=Xy!w@FGDL!J^yzES;vX7Ys$_BqEE z-KajrXZ&`DBK0b|QN2^*?@%kEjqD;D)o)9DjtgIOqk4uU*noz?H>!J2mK)WLX2^|d zA5KzeqdEvUzEM4vI%LmA^=DJWMs>_HD$mo?)WK?n7x>84-}AoGtE)Ubjro727;9oR zj<1EtJ%VKuz;4wOz4K;HVAXPQx$}>|X%#}((aqD=gp!;fXKy5)XyT}f8P#g~n-*l8 z4FjTu(fZ)ue4cN2EXnXlXxB(cuydTZ1S4v~R~y}5QAW$zG0`n;kCYbXC9Ttu5nP{T zQd+oMpKa6rLt2za+H5IpC+K(&%dDrgu<%H%n)VekyBE_i5gpfz-?fO^d0>*?smY)n z#YR$Cb1Jk9&a^`FR<9SZgTHGrbv{8H(4WeK|vIbbD_(v{1i(o`r?EC~NY4&Db3)B1L9>X7tvBNu9`PLKg5wg{}TKkAzHq=GICO6jKAh{+PguVsM_adWO9aLBS zp#`Q?L$)R5qWAK8Iby^%EcTAAlay3z%59jW3@;X~L|!c%G?s=IXR+lu7vD?k_lH(Z z`*&gioBfBD_FCRh5gvRZowGN_9UkW=xgMkx3TR5M9C1hk9uw7R`D6pvG<{K%gxD$eco z!S*q4O=P72YKmFngCqEwJTG?}{KI*G4=2$U_a|}6qssa{Exh6eK68eb<+;yBqlF)9 zPCzenPiq$1WC*uOcTVSRlOTxr;GR~q(izcA=qz}9PGxtL1Md1gEuun=BI5gw;%yr% zUw)FbdA#OaRLTyd(8L7j`l z=@(-}{br6Yu-&!?vI>7{fkA0Rn1#2hEclPj7&2(?sDj-Ie`;ryhJ*RM2BHX(4heBo}D9eAQu2{<(bB7>yJ4~`0v z+FT^c1053T;tu584#6Gb;_gY@>!2Db)Cf$Io@jXa2#KY{{o&WL?DvtdWZxCs+i`ym zm7RWlFrGY^s$@?hJ6WT`ce?A%uZwx)s=cEL4@-SA#JG*o1>9&cR*~mO7=rsMkvFtq5;Nk{ynAyrL&>$I5QC z0*s!s_Z7HVjIU-4FJOuJTBT4wxF6;qEqpM_lKP;3domcED=4CFQuSR1BMNRXP#h76 z0B%V_P>Q<7ZG(9qT5H2F_boE`9A9eIT%6!?U~l7;^EJ! z;vR387=Tl0&$QZxf#9<(__11;Cczy;TxVG*)88_~^G+tp`AjaOo4V-d*zh^cBVjUq_rPd zu&w;*z1eJCRTfsAH?B^r&N0y zucvS#T;9|h+j}q3O>D>(m1jh4)i+CUi2zGT@>v2jNN}tGRS6CdV8IR{s*3>sm0*GZ z^Cj3wfPV|HqobOD|B~o{!pw>QpGoYaUR=xP68r_A7#*}N&xVyTRP@{S3F*L%e63%> zSDzVj)k<^c&|CH5y}{3fihH}GMQJ!A7;bvWPHKj*ppNt=B6VW@5l*hv1-AACw7#H9>EBPw0e(6H88QVdg1sy{lCuIb#&6cFwQcK;q&?JH?W zZ8n|wtvo)Ym@tYTIhdUAnsUm|cDk$SnLA;Q?4_^?od0F`_v(+gO+QifXNofP!o zHI1j!Q_0Em7pHk$I;|P-gv7qKC*|OSr44nHrV^z~Z;t_MAdcMG zc1Khfh}p%bA$l(s+vVbs57I)iiF4$jR$Kn&=A!DB9?i_Q57E|^hPY9!a9PI0!%KGrjZy|yl{O#NyGSekxmf=jNV9=V?sdsI3|jM4kd_!ZgZ>X z)un1pQ%Mcu(l}8rT<Fo z%}+_pUD5?HOA#h(VD&xAk<=|YoOq1prQlX7KSL$cz7*=Y zh|Y(5=}jqr8sz6*zykoSZioPcs0^6tl6F7Q#;ZJPBL;g&uOjRvX(vf)ZjWmD8-jvcd&t%c zvNDeJhA8iWzoAl<3Lfkf7xslo@yXqyh#qpohh%@QP_m~KE6=q%9>Qk1lLV>X=bPQ6 zov#%I7ou80JP}O z#?hf)K5U^1Q~0(9LX3B8=rJt%Wssx}Kbwj#zA1-jg)-;1Ms$}+9&TgC01=lNmjMeK zQo-O`c@%7g{Im9y^{~HBF2AzPqR$_vu>%zh4a%iju+oHs#Cod8iPvyPKXU@5ogAyN z1{Dp#eu?lV)WS?s{|I?KDjHg8>SmQKt7wR9^kfq)EA%@~Q~QTJ-Iu3-BXh89ZiwWH~kk5B!V{el?R?5BH8dN`vz8EyEkB4ca@H_Z;c!gaE zEShWoz^$f7A$!GfW8hkfy_l2-{+XKuq8t$49FGn42Yud@RJz;Wf+b|-EM_M0;nNZw zs}c%q{wLaLI}!_Qy-!pR?nL`E7zuW_r{qI~Paa;()uV<({0Y3P0JHFSf%GaMi%H3! za~{}|!~z#gB-`5c$FGW*0LF==6!yX`%<-ybYcj!@POji@8|goQEGFdz7q*vJAgqEA z_OTRZ*R$QJ58SDh?vxEedz?(IUI#gRh*1%CLvsR%7bT*giyx8}V*u#(pA6Gxwl1*U zIvHfTJdAdB?&5FE;W_Cb+mEDtqcAd#TK{om6newLqOT?zYbq@UET^PcY^e_03mmyl zpTh;|uj9vJoJhd%^Qk#M4?>OuJ1Q!A3lU-V&Ry*;N(ElelYgUiBqv_)&t>jKSR z#Rx~jt~VN{*}nWfPP;o)vpxL2lJ-4*?+p(1YXGU}CTQ<(1F~A2io_x_nfUIUO%~%U zBrUp$G7irfWzjQ`QVwP5uk-v-`0MH^uzjYtBUlUp^0~6mJaewYhfBZQ5J+pn%lD}V z_FnPY57N9>MKyJwp_++e_!%~8EXIFnyQYvS`0df<$lu%&=Q-I$FEZtbs0r&NB&UfvV+x2W6-^qw=d|h=L-B0-h-g$F5-65GE*Kal`Q&n z@WiA%o`XF%u?93ZuD~|>hZ@GR#AMYc0xwN6qGf??!w-!HUTBGmpf4zkTMlnygdJaf z+9kU=J|F!xDTsw8{p=tpm`z#UIzkY(MPb-XPL1dG4$#GLV9p7=@t;WZ=LMD>u<1CjuvJ}Lw zIf>NDYFo;pmj;T5jSqNFp9!wAKZ;k)-;A##(*q%ulVTk#2DAH9 z3a)BAxHbYLsJw`+)9-Ra?i%kln3C3frcd zMEoRi0`Cj4u5i70g**gD3ule}V%E{eBC ztuHJw~#&F0RvM&U-~Vj;90&ZQ6< zV=-F5Y|&Sez{7L(q|v2EFzGEoaD+<6z2%85F85h;g7IPqv|3Iva) zI?x``q+M!;E9lM}HD^l^Jz9ITpqJ+>HTkL^S?0x@l03F?N3cbI4_TJpFI=T7X9peW zotpJ4hM7RH?q;o`t?z{ZZEQcyHts@W-!08ZDe8$EAt!52sNY1?4!t`rMAi++I(H#N zbM)10_b-HpobJnu^ItX-QB8}%Gw~jf{yDICdYkO9vAosDtIM?N-^(@LD~%~Y#Dlsk z_(nlmAx-%g1N3ytPD2Gw@OSwX8VduqPR44Zbk=I#-eXU5>}IrKxdMYZ$ZW^yn(p9 zk7i4}T+hEBQCocSaD}Wf4S6#!hx^r&5(05o8nQNDt{PqfSu_PXJQq9FB*mIe_gv&> z;qha<(_6FMy_}$Jz;BH!b$p+~0K$Fak<;%=sBu5)2}KNG~1t7LjCFpo&;3sGh_u{Z4$7T>YJryrrd>u3}p7bI>9i$q1c)V z$bmw9gpq_CJSKN9I;NFWvT3FZYfFJNlS>f=hPsYa0C>HGI@T&~o=X`u+q#}@ru~-jsfd~1t9!G|`kT`@e z#)G}au^D)^)g|{8j`S=Suo~1Rmq8~VtY8osbf2>nFS@5JbBqN$)LM`H^{Mq!-u1o- z$(Uv($JN1fd+Owx{Bc+zP}>=D`9KNLTLDjHWG-h{rmXw8zv9S&fr8Iw2CoZL*GI=9vV?iQ?vg(%tQb)4pBa z0Ed)p`ymt& zJ;3c~L&7Lh9KXQ77JVeNKw!Sl%l8zWHTPa>R>p0M{yJY!nx;FRfJbQY91gPdzDExy zj5V|L9w4#nN%%{0?YbXC(m%Uiil^8|`?V^jA;9l7AzLhiIQ*gUG2M<_>|`C&6Di?X zPF;-E_`6uN`4oBIkRzc3FjHKj45C;oAcwutkbp55)>r)&VWjbOBA?u7^n8V|pZ|j_CvF zhtDhu&(>RjTo}=!JH}`}uE+KsE;$2_nDfX*7}IUtuV%?jydT_@c6})*$&4#FYl&a& z`YbG%H94qt)zYEof`hn|?3>5}w&$SMLF~ex zm8!u4ZYxH%{*+c4w{*No{=m`K#k`F>>{WTA9V@{-0vsd3tpeOA!S@9Civ%qI@f9|{ z48|`b?~f$kqtvmU4X66ikJo-q|AAqy?sO(!DeChUz%=M{?+o}$0A%3SkVxGZ7bq;HxWw%M9ong2r;jmV( z>{l{lE;1G!)*6_;F_WhBi0GY9_ki-7WEVf@8>it^6X*dQR=S0Y#v2rhW=>m*7AdfV ztAcsdd3)7v0VnWu;J2!HuK?N#u2!mh0u|%OMbT>`M)z{?COnEUC7*ipHQSzH1-681 zsbxx`Bs}Qxq6zL~3ATNFt)`|_EwG)rX4G=S3cmdP8r>rwit*2&YzyY9#18GGW{dO=mH!{r)fL0u*EiYfj z@bsK7+&p&27q1rBO5AP`kr#qm!Qt_#*6g7quaMZ+QFzbWjYb`dDyCwwl9a?@9Q^qB^V_{JNJytl&|EjV%ytgu^8dN6mV)27 zpKEJn12J^{`3LP}g#ug4Uz%zqDi(Y>_Ls_v)(<5uzT2qAS(;?fB$C>zonPOIgil^7 zdc9pV4Z&5eEFnk}euALy36Rq_(M!8oJGe4+BUTOQAB;gat{w=dG`J%w z7T7-cwPxjOn0V7ABIjHa@Z(5W^uw5j|M+WAjV*v^!$NS2WywW{GWO?{vFl5Kqkpy^ za)VR#ae!jXyHLiwZWetINy#Rt?qOI%tPG?MKkgQkgRr>`v~*$u9E1@(N}csvT)$_C zBMX<6`Yv`kX=#JPjDAV?kI&Pu{tK;q;b}}ih*W5F2}ufci@uxB{Hd$wrSQJ+%YmBB z_xJYcu{1x@Ti~y!G1u~^Aku><)1n8^51LJDq}LdbwkC{vg90vRZ!pA*b)rltY1eaK z(QF_7o?=@23WQouQH}V#OT#i^8B%r)xe4FY+bK z>)4w@AP$+LLcIr2|2yvuY>^=4>u zp{9FZ!gHzcj79$qlO>DqO`1hXz4?3*&+@yJ$G1%!x#iHi;>ACG4^bPpb81>Fb%nUK zvhUZ(6mkX6*Qoa~eO-U;?c9dij`9VzCb`iegAk2b=3O`*fF&O=z-^T+x<4jv3vw4~ z+dx&~kGiJqzGSi^C~pyk9~qHyVvhJ{VhT=H;zuBmzlc*(J^B-+#VQcIU+5b^U7x?X z7H0{I;RJ5ZPQ+;~2RHEmk(zTx?PUNycY=>GVzzF(@JD3e77Cc`HP9L+qhMx0l+Ft+ zy#z&|aRO?TS4~?{4j(AVtD$xDEwIhVYhJB6td?ayM3v=#xzqITaN^S9`)yCnb|Nn{ z*x@IX{F*<7^_7G)E(X$>*U*>=SLIF@U2;kez6Df zp6sF7_TGyaaUOzmk04mRto3IZmtB`}+J*RAtgAXfL@`(W7xM9m$JAeNW-@g*V)jiz zL5cT61E;`{Xe!A-RO3>OKuo+JV(Lu{|83ziP)-`2594vwF^25eW{0oE^So3^P*}uK z7mIldKTqP@oKx_PJX8#$=n_Pvwv6i@t1Yf-FngNms0Sm%{Xkz6Ceg{f@{-RUp(CNVF#U6yFP7uYTOyS=Dc z`7i%c7{Z^6g;iLT&Xn7A^99GoO!Rs5m@YNkPsBk>~UI;s6BXI2cFNkaUXV-5bw!i-?tY3CF zUV%j;FjzrTlTaTHZ2~oVLEZ6G%u=d&72x>P0D&owaSX-Bo^qFj;?*j!XQen0wB0mY zn+L&K9sCY_5at^QM9krNcF_KJqpkk{-h_n6uFtF>JQZ&XB zv!!S(qY>2-uwmPCUTI9jv-CIkL2SJw*H^aqr6>V4y+OlR^z8qZ!FK1PmRhCmnr-=` zzNU{+m((ot%q!H!qVbph+4c45uJC!!oqETeS}s$^bVex*4~bvAFY{YIH+k|zD$o1X z;?t#E_cR{iD)BOHBmb_bWuqm}{=0@DI~}9*5C4u+UvFx={da5arCwl*cpR+V#c%xM zdD`D43T*oySJU>tuG*SB35|;Mfg8J#QD3Jr%@3f2>rQ{s-T4p&eX(yoP>6@|g0sT8 zmrm-jcrJ`GMa73-o`h&!fqvsjWRnGihP)fZWNb~+y?j=YGwUOsQZ}BIC2@^ypb}`i z{iJ!rAzrdlPX__tRX=Gp=I4s#o(66p|2-Zu}vR5df zrK|A%Lr>G#9fMLsD^Ln-ho6oLSwt1313E0I;3Q!B&q+<53p8_6`>)t|PfqVBcV*cauMQ0i)gg&JR+|fz1J;<+=7(PZ?U(VEa|4XjZOZ_dZUkCMtCn^5K%2j^} zQ8nK$a3Vkzqpkn5<*$r(h{lnc2LVI>9DC^zsQ2NZKu`HMzWHA; zd6rht|g;NvqE zeGDK>$1PFgky!mtLDo4e=jlBG04GXVz6R1P`T#)Or&cmPH5WcFTN z-}Z=LPpPBO=O@w81vH^O-V7GKJ18x_9f-cjw5FR!MlZ<7{e%ZeOi^v?c*q)ZZG&9e z`T--g)riQ1(&Gx3eld|sKZ(CZOFvI}!U$KMAUooyD&w(n+!7Ek4F<)j|9m3@s3ZOydTg1o8066&Tj}T z?bVKUCXju$B*=dJD-csZzP61Ny7Czboehxp;~QZqFYY+b-BfaGt^bz&cnG+PHMpBN zUTyI`kI$O%e*C9=(ct?3{`h}3IOCAQ4ery2yumpgqQQls#)W$FAznTCipRVsU*7P8 zIN^)uIR1}85+L%$@;rcceIr~WdeWId$extdF(_3!4wgQ|o0#xnypXbdF-b8-0>b%m z{8i54L1l>wL(<)rac?%Tl?DHD(UhOGMxM8`@3t1sz66I@^nxD}%fqaYai|FE|h5D0`(OBB(J4h+9OEuaLDo8;4LV z#=l!ZJ^dN}$_V-sNp}QY;@CXI5j{6V1RbNO@{XXd;zR^(Mx(|1qj55VvK}~Dt5V7+ z%^#t(p_Ee5luI$qM!%B0bryXzT`x9N8X=aG2jlGY>$Zd?(v|> zl=RQri-o24d3nb;~dL- ziqpB=>0dXOJ;k3ep_>7Ra6xJDolEpZoNo5WSPB`^=@Us8?+_jAAsdb+ZPC+Q+9m@d zogPC()Kg3@TzVPgTYP;8Tcq?-lqZbfi_&>dakCkyjpy;V@DiNW_d4>toqip`bxc2u zP%F|?lxNS%DOEzOz`*6^=javi%#9|OK)V@xSwml?azIWm{@fB1%~`)Y*(<(Eq}Jk3 z@gPiy|Koo?2)lDm&kC9HJ3aaI9zTi);gr9ed_u_{`6{vHGeqE-eRT>v3qmx(PYE`T zrcP4Kd*o7odqfb8dB=2xDa2H&*qC=t&%%%3iofxaN8A!6FM>s&$bAYnT0%zp4y94+ zTnA8goqAyUXV*_5a%o<}0{oSF)!H=?jpaIa=`lnS(DG9p!r6L0(~U&P7HSIRTZpEh zB0McRmS06v_|@TLH~cX~8izQrm(v4BAyTK`#SrP)U1;hVB2|WQ zy+ZlRMifk28_6Nk*C3`L(z<3+=-Y4`HWL8yA<~C1kQaA6=WZsswZyw}h*TL|#fC_? z8d6ag8p}gtN|=t0XybtK}t#OV*v%Xy$D<2C?Y7aow6AGIEn~>Z>CKmaR`GQ zWL&#G2q68#`ws3@8_0>PsDy@e65cnT!{gMe-F&@^O{$1?Gp{SJjA%D4?>O0e713@U zq5)C#COrG)e_F?nb9&m%0endsA?klsSf?=zjD?u?off(1=K`@vu}36~Jz;=f;St;_AdK`bxMMiLjkJJ-fhLE%X4fYGq<>f` zaHo36RPKEk$5HARCyO>Jebd%bJH$6EAr^~i^y8C(@5<{Lmr*rq!i6qWL+{13fxO}J zDp85fJ5G55rrm8PyJb{5hRjCv;hGeP!iXPfu^RC@q7kjOcFmx=JS)kfhap8P5m9zM z5_DqxoL`4@7f-`2m6Y<@U3hn2C1sYDUPoimK}x8pDM&2YT}b7k+p>dU@JutI5J}}h z7sCN=r02DTkz&aycKvsN!brc$6sqlq2uhV5kVJ+Ue`$<>hECe; zpPjhlDn{$|qm#u4D^+S8yTA=tqf=1>eugj;XNEq!z&k4{E3rL} z+~8%2FFf(X_ifH`O+V;Rw5&RA-&Q3iYwxqzM060DCB^m0tX7`iyohEWAoz~E1>p{ zFr`+bZX_TP0VanD_FMGKpFyn<v!s#AVk%LSyuwpap9R z3i+w3@}8D_&B^9eQ&P3u8%}1grX*_{k?;#wYJ|*&^N*STI)ko(>iW4DjBJ8AI)^LG zw4q4M4_7KT&*C2BR!D_kX#|U-KQvZIC!S3HZOqp^MAff5+39elfp!sPzX(?vnqE?< zpa>M@`iiIMtZ!Vv2+vH$v>Go-BCZE7&3cVW%fM>8D9M^y5p-YwFJa3eEHADQaW=1& zZjCaxSJ`I~N;R$f1t&Wbq0|c51L1j-NUOg*S~*mx>=&s7sb$);;0sE)cKN)Mb&6EN zwD!P^r9?|qZ)v1b%fI0z1aRgdmHLu%5PL9Esa>JNRf=kJUtSBWj$L%J{79uy)frci zpJk3leqQYrc{MLJg&fmIx^u zYAB8Uov00sO|9?-uK!^xYbsT>^_QHhYAR9MyRbrZO(jB`hQz>{O3#*6&r^pS{1yntTk##8*yT({tu*0 z_E4THmw|biJ7Isn+Db%~2?!wgC>#{rLFrsCyQ3C#=>&qHDJTmSI-W!olFj)547jki zQeO){iyopjR5xC5?*6{E(qGZuJ>z6`>Z0)_z-&|NqVYY2sJ(SDJ3E8Kow`az?b&H3 z`=>6fauA7#dP>duPZJ;>``RCn6}g7lXWb1UiE>3l*qflT$@TDPSas6L8Z=UZRcivj z&sXb*j5`g0xs6h8*Hd0;d@r6<=E6QXL&By_g0Z+T(SA>R2$n+Y*Xk=NS|k$N>nlOp zmQzl4ygs@A2PeB%AAymH5_}sV3cmzR!v;$8`Zwc>YCRhUm(ABp>-BL`>p91z)>Gqz z)``gAS|5W4Xv4qIF_; ziVmX}5f`%O-<*_pEMA%gOS*%e{y_9nkBHAj7h`4nJsXILc!=gJS`^Ip9cc;NTdhCujK$F`F<0G%S zkKV4ZvC+^b8f9;ZhU}+M>v}Y_$=ENoX&eJ>rXFyzK{3##8xjj*piMO-a$=OmWp5pF z+5RkxkAdw2V`2NDP&O$R)~E|PAIB;Ye)@itf0$+&zc;}{=yI%5zxmC5(vMduCa^+S zj^5{lhI-p|Xe$;2J(Y&?c;Ta!HBhrf9JH(Qt&?TMDP6l(c1gHhRKonV|0Uu20j_N) zi`m8C{@7->wYVlRUTLTeLDkyCD^s;=-#FRscx95dc`rti38?-;B)TS`m!5%YjY&}Y zX*c#^K$@V;ZDjcdKENARsW`i1Nh(Dzn|(#;R10sNw z2LG`~7$Rj~AuI6LGPxDf*2@R;j&FGdaNJ@K-dftHI4lj|?v#CVHfGM<%>enuZ`(@X-itO$NO0E@G}*$F`ii3)?j^)K zCg_o80sB`QL~R@r4cjUa!Ed2z;+24`xi9ScXh@=I;|h9<&&W&-)au$#yPRxO12tUR zhs1G8tVSY_64R0JYluWoB$^`eT9aKKXVvemAQIt6IPT;q#mCVOmBn1_qs_1z^6qk4 zJzIiL1o)-|pOVq>(pA>Nql+UTM}J)+8h+_yVJ*}MH6)HDwNUG+Ph#2l7HU6rV=Noi z2>GU1_6Old#4_I~b&6IB455wHDDCV{3<9FmWGxE`rKQ?aYmUUj#%iMW@Czqf-BPVz z@yHjV*wn0rdr+=j?_YvVZlcC&eYWGF+(i9Eb9{xNSX1?>_W7rnz%)~bn9@E4k5yk@ zjp}vmAo?vI$E+`%FCED{@aN1<{2BWhuX@}DT=PN(rut78d9}Us4u68F9PmE)VmVUu z>Z@Y{NqGi&i!cMAdxsqHB(mgoTF}Bj6TjU}OaL{g!ZUd(biKU=Sxb29R}x~|FVVf{97%A=i^%l&xf=So-b%F zJiieP-1B3R;GVCJ1o!;uPo(FeIQP6Z2nl;j^?>oa%Fx5A^B*yIi2WRETdiOp4X<#7kgiFv-I2T*eO{~@qV?S-#f{l4 z#r+;6#C7;Dap!}CxPZdqR&J8wHf?pX#5lE)Iwy!tj8nrxvp=MAjk_yR^}Xld4NwpN zU@YH^0q>1CwTf02It>j*6;GnBmE+a3njMMz@oHUT3nSPq<`w_AhfcFTbh7#h>iEj@ zf%=Bu$KpdzQ`bq>sT-W^iv)G6W{3Det<@pw_&|1`wOUC_TaU3qYjwBwB}i5#s;Sx* zklajE8>lrZvJF+B^z(IG>Cg&7X-}yup<=rvwVU=9iqB3`tJPU0X<+TW6nFBu@bw4u zT<~9nGaab6@9YXJqN{4`wnAoC6WIg3n5nf$=CP9M8KNG{asN$~`~jZnZPY$mm5&f? zNCeF&?`33pzHj*k=k5}1)rP9(x7Nv8CZk(ghQ!Qd+~yF!-nn~AvU*(67OZpbp4wi; zdi~#J=?29Ih0n=lGCVjss1uC~fGv!Axr(F4u@$MRzcHW~eo`U)(lSN)?__iSmb+(l zR39j6-%@N`XFMNlHs|h@ozuK;w zcin9VZ=XzlTlhqb)_q&*+$SA6^K81^+P8`qqnAJG3X0aCD3HaIyS*q%zKun~u4;6f zWgx}Uq`z55ABu>jcTcEWZehbCdH+#BKG-7W-ZzfXidN-E*!gK!wSIe_Y>2^S^u(RH zpMHF%m4P@)9pgb!(n}GqxT_5-VLmt(sy@&}{dAF)imXer#3I`NvVt?!0>z&HrpQ_0 zWJkKG-Lt7bzP7rCT?9VAhsHl zJS1`!_SG`>XHT`N`kj^e^-?1mw|$G3c2$gHdzGXAov4%vgHl4^nQ?vk&b%- zwL9>*<7rx;#aMYB>;#;6lJs4SO{tW8YbxGRwq5TgIPddwRY$0 zP*qAjScvM*n0%LH{-n{ac0Tzj%`^?5kFmcc#HCb8H)9@$Jz#eniq639cx5p=HBb%jG@MsY-ekbn zjM~Ax=v?+de^{g);a%%rbp+~=K-KX^`7U8C2dR?{Luo}7h^dMDN3_qb79A^20 zRZFP}&aLfD_d&3dIh1W$_EZW_3s9IZz z{9p>g0`2B66KR_Az@Bn59%iNFGc ze-%AJjrpwct7>DvshQx(V3C9PI{gq~rAeUK(N^ zfFY@5(c>KCq{l&e6x;_P+5a760p2ZHS$H$8QjLj}2|;_ojK?E61In+a!jVhq1QV+@ zTpe6*(0pp*^k)9cjP)+0V=ie)H+^0g!_|n$ z%Hk-$V=U2OU&o$uR2b?wg#k{3PGk`yV5kEVS;`2tarkF~?ly|M?UND4w}JS*B7A=M z*BtiF2(@n2X`XW@*6-{joC8uzb#u$ z5Uqcpuz@4hDrKI};!Ga`UI5td5{J|NgrJSc+cr|I+G8u_p_sy2T_8P>OIDu2os;q> zrSoQ^bsaKfVXZmk_5qrJP_B+#7xjs`tnzDWgAt`jQ!8=t)^QWXAb@cvju0A3EVNz5 zy~FJkLS7`nSHGd2+TB6tP_5)#`#Vt*r@!_F+xD7j>ClDng++Blg#VYQhoZ8a{fU>@ z(n#|ck=69MtZO?hsAK@uYvCL0i&1LhDi6s=2zX1o8kr757G9jOv@1mfj#=#AQEJuT z{F$PkEDuD$fpBRSbp~rXTJ5Z6&t&sPtJT#N)7gik)!M#`xfbmL;D$x_S@*BiV0Gbi z_HeWs=>I87!p+x^0%Qk)^h=pe20#`{tUHUvj#0-|96FZn+xY9mBma8*ipzm`;_exv z)>3PaWw*zub<}5LSedcvaCO%VHgT+4LtQ?DWsgN~yK6c-Ggb{zS5Ieuj8&JbW2Un= z#;Fq;*Ug|p%x7tAgmT8BOfgM;FbxyfIQ+r1uiR+SgPfYdg2t=gsO2+upC7NPit0O! zU4C8tNF6nm&6%K1RG&^^_a~^k)TAlw!-=X*{bVwWo}^BwJ8n{;Qa+uGZng`bQkf6& zQQ4t7RC?fKc4m^gv;2yQoSdVOeQpwad$O9Qo}bF@OjaY({+fVJ$GixPS?2Nhn@3kJ zsjt$9JLUtlSSeFHweNz|Zk_}f&hg2s0>W#h5^fZHk%_ZAPYxdzzbj6z87l z%{|bYd(?P#YKodzemdx2M3=s!Ca}<{u>FR~6jYT;@};Va6WEZcn93zjVQ)=UV}d%q zE@CGj)uOr8={1i1G*ulQab~z}j%?NR7=-=4gSlzfh6q;*Lf;{RkkHAmvuYXY&U%j9)O7i*vhb{=)ffmB z2%_IJmi?QdR!`8zp|#PJ`D@9DM^WKH=AF^RXuNPs2&U(ts6gsiHekBizFRlq#1-Zo zBcBud;C#9rDVygaG(Bt^U=|O#V-@+|B{*v&?rn zk(tw?4l9v~JLHjxLB{~}I|tXliRG{B<92tPp;lMa@5ZnRGu7&bv!Jt`+a9Vm8PCqP z)`HphGu0Mh^?rofkg{zQMB`<`xi5S&W(o-<$Fk5_>iLLqRA-QU`?|H7T`2p~OtI?0}&5|Lk$^td4QEAG;GCOr) zUN^-=l3!fenBhQk9GmaKUR$8{Ry*}z`xmGoRqOXqed?Q!f;H=K&L7p3v*+?LHzG;6 zJD>-9yg+TBDMOuX-DHGY+(I>~%fmrjEUiJgpNK0sXY>dJ$0s9_4Am8z>}ymCi$WkB`=^TtFF?IaNW28 zEZVHLsZ)Wngpb-}<%3Z~+Z~DtlV|1Z z#cN&iE`{F0%B~9@HW&5*>ksFE*2m%O=X}Wv&HY}?Q)-DqB0PmG?Z-kEtC5|TQ7%)jsDA%gurjka;JgVssqu3}V%msI|()qhg|p8~d{EOVsGVjc2$bYw1UtuPL=CMo zpLBE8%%jK#;Zs)$8wavGOVsM+_V&xpJ`iCkMT+`b29VL_lhLNtvSgF>uw1jzo6@7xU=Vv7XXSsB zwE~&DMs`Ou{GB&Gb3f~DQJ1NPe(WcU8f6MP#nr4pKSIsfy};(Wz0>tsodhedN6y|F z?&!JztH)oyb~MF%lNfr_mtZ%1&r4nNy~$my z{-4DTkj2ub2H&1=4Du@Wi@vVFt&c7TaytpRDfA<1v%RNxZE%@6UCHNLmBfLb9dzZO~jrg-VGEeRE1-ZLDhW=<_GJ`lsnf6w|U$G4fkP35U5=bM^+hwOS#X1jAe}i3?s~7)cKgJa&TX zmqR~7zj{5`tmSG%_20Q=a`rZHYm@;kFt*wA3y-+`?-h2(rUsT@FS2)t>|bSe=xm;C z-a^^v;%@dJ>ym0mBt>v%L2+DCbm;>MJRN^wKb0^TTmOSSX|#&BJPsO9^jYS!M4!2z zeta^9!yem@bIPssBkEA0J6rjd8diOrtV6iF4#TJrtj5YRclKuI-cqYKPV0_rL>w*v z7xJO;Gs?3XLxuDpkM#NJTzdL*?f~y@^bFd%m-KLed*}(5`v)xrctkJeqRkJWh5LIq zww`Ro3N<`%ww>2zI{k>+{M3!jejBT)87GCs>&+@$%p2r&tFbQ+3ocYLM)Y8jE7hi2 zZ7{~atwttnO~d4+vuFSnijjXJjNrd02P&sxute&`QX1Bn(1U%oQmvhI3E_+5g?Jy1 zTG2ipKHkT!QiPCcp}?*yhOOP5g;G`8oDdp?9qEFuW;AGze#fhQkbXq9>vR>>4goC> zw8PYLJia^9gB^NXtyEffmBKH=uhIY#A+NEJSI;BQmc{~XYM5ys_hioAdhVe3nPO84 zwkDjC`08%_VJ|#PQISBHN1h{V0i)vb5sD~uS4Vj@*3gfrh7L5MmPZ_pZ2!VOwW$>& z7s^6fx(i8%R7@5mUnx=&?34Aiq8i%d$9WR;l;Z^PSi*rrtFr!y)`O zsPDOF?2ZAce3*-gD#o=mUG-nIR15{a#cUouz}NI6Y*`Jou%!cJ=mF@*XIf9xiDy_7 z9&nM~UDgB`-;zyY(ebGG=mVybg4(M$e~&!m%En~?U3NR(Ro_rd-8xaezJpGCq5c6> zIL5>hywd@T49k$`*qwqu6*_ZlCb0bJLmUSP@eQPiIW4U{i3JLCvMZ0)8pS^PWOp9= z3ff0EVaPDZoyj-DVHY1qM|U1|En*`*%AM!gNRL1s^nDa9)b9a(0sbPv>I7PizwP5T zzC%C4#+{%vw=sKXjasStxFdwg+1nIliO1?{ZWd`pyW@|J3^%+t3>+yW4fRMmk<6@X z&9k03SW;~zlN*qW(ox|8!VB~N*HD>RT#HNOK?I8d$LA7uZ~S-C)TRfgEP1p z#r~aT{th}V0@pT9W`=cY_42X6@({9%Wdd_ZIlJR% zo85l_R#ayj)^a@-^K%Z0#kBm^Z1#HWleJG`r`KcMx_#^2_t&cdirOoQz1*ONY5@ln zR&^tqYg_`0-l#SRzMsfzx2FK1ZJED<)Uq0P?Uz)y;#t5)YSqflb}(EMSfMc82p63t zp6%GI)>b#RW92_oyES{*`ah)ZgG()6-KLV{>Nx5m2BUZ4sGOkE)L>CRr5)S(q1vF? z)c+Eb^uNUn=VGd=nQd8`wzA3So-y-MJ?2AonN9kpQU+Cc-L2R$`JyGq_@0C5vAP6j`%J?O2C=86#;~$PGVF6f+Mp%tuoXemE`d$jigOz| z(Kwe^TMg9e#W`&grq^Ket81m$Z(Cux&}bI44RP-CwTSbeC^m2#;(TOFwtXAod}NE= zKWw9Qi#{zGKFU`+s9{TQ6R#Ix{rF2}{S*tpVa?gF?P?GU`&2EdCj1|F?;Rgi(Zvtn zy|Z^WJ%RL|kN_bB2)#q-k={XSP&%PW5RkG#Kx%+U8I%?fkuD$*dXcK4f}(<=f&x!O zR0KpYo80$%X6|lw_wjk(zurH7zx{lY@0>Yj&YU@S%DHn}BYu0A8mewFn4i?*+jglj zu_HbpFW&sO-uh-OQ6#qE{}#!rMTaVs`@gT2SEn@OO?IoT)GzAr*}KtA_5$~)A^h{r z%*s#hhD-MB;5P}U)s&Js4WwlE24rcR`bBLjQD42Xogdu;xwYvs|5$yOYHHQyiSMf! zYHlt5^82{5XQ?N9Wk@aRl^xZvx;%ET8l`sI#vAU1l9(F2&tCYyc0HcE7yjQ@Q~F46ps}5+CU6+>BxwLNMHhclOYmAAjpa$_4{44KTIv>0b-zaTZz{~Gf$JsvJP1DxA zD-iy5Jf^p+F7#l~U%1eCy^?mtg>LR4U&BK_-h&PV{drmW<*=OV`_)iu&bubuhjNLZ z$-%ZvMp|L*4^&mHwsI$#c6H%D&he3&imA>-WYBsAgAeRTVuOSBB#jhx#R8 z>UR^Ai%CWm{`jEUE<8L<^g>rfd7;a8h(2ugs)DiOe+aQnczPkemAucSnp1g~!#Lb` zs_^lLaW!ssimVEI_O8~Pq>z&)sM(c-yx;9=G}zX_ze*0DeH6hgZe1dQ!_|24VN6`n zX@wC-)MQhwP-t{lhUvawD|PiHbSyn5X00M0cT`PRgVPENj^geacDJI@Njj(SRmatV zvCS(Ajrf=dEg*C^qVs~~oeG74C)8@1+Ho~+_94uOh~@o1R0pQh=h}<0A~Eb4z*ik1?aX8Om>e zgafxfhMPXd2v0Zo9SnY?;D^T>>s!MZPoL4j`ZAm^|5&XUJ=ELyTx(JHFp|@HAcF)} zg!3yOW2&-8^8Y|kts7Gq@QHfDw^?r=3`V*P;hhUtBJ#m)ChnIZ>Ucp@UTCG6PQDTM zto1Hg(d1|ZPy9x$)@id1Y=k=UMi;p>2L@t1h-(p)i*rxG6x;Mqd_^-1@uI){sg6}t zId(7x^NcDiuF^;=Wjeom@C)p~l?Wjs%%pbR@!~&zgLYN(h3BrTRlFn9 z=&CpbmMBz_7Hg0Ll|su;>Ns=MyT3`kX15c6wLyMeY%g4TPtEo-kNCr`^PoR5*FJo# zS_&f`t1V1Xr+<{C5`Gt@_8H`#zu5~XJyA=|YVa{`Piiz1OlotN}kNSm)HBBrn zJZo3qFju`a7{$>dM1b!1=$!f<`Xqyl&iK(@m}6pTrnqThSMy@gjUPpYqYZKg$X{&X zJpD)5_l3%)vEe`2d1uD*SlDfQ;SY?ZnplM|$S{a? zv#Y^;h{krPDgC*>g&kz$zq9l678HK%J5jjmr?T*3NyZrD0EkiH!e}e=F|o@x?L5Vc zWwJ9j?0k|JieJ7Viq90=AoxnCB*z)#9*BwJA9=ARXz+DA_wr#C>et5&Q$;_aDy$Rq zinVz&@E?1kyR>?4ypwI?t3V=dL8Jqw%rvsV6W@W*yOFN)Q!;@wVG zRqnjqIN>};+bMb4oO0-~xML*-wiN|`Waqb|SVqNXh=km44T!sFN6iJ9KhUOP0t)VK z%O^&&(6F}W?E0@SNERM#7Cg0`;Q2-qFAl=(Wk%KFv%;C#|E2!X$AZxV3_8LqF4+0i zXtr7%9>qt+u+&a(6gmwu=KpNyMxPi929?+?$w6gu)IKogqQ!282e*-i@A~k+4Ie3a zzO#u(hVPXbRfix0wS9qi+`9Xv??-}h1PrR}`8hiu6U$DN|40_Ne^BP{IB(~T;#h5V z00I-@SS{8ZO?)?wbqeiU8zOmHht?!1=9W({+PO8JC56_cyu5k0=-gYf4x&`^c=kq< zHLbuxyUJLj$+vX3q`x?_{?p1Nj?$ez#^t^_r|le1Z?-mP!!dkQ0;|BsB(OEU!&}O_ zo*S3as_Q4950xW>T9$jtjzb?f56c%S&Jz{m<+fBmZj5fpyC$-Pn0=y5=$GkImsnLr zlQPl%C5fyGTXM?IXIEfh{If*n#XdP>=QofYu0#8OX+7G4M^=E=qT^&qsE?sl+y^MM z+ThGy6`=L(Nuf24sZh9?a_XU;&nmEHtS(rANvv|rCnt@rPrK5tPmsQeGToEd5Y~CG ziI-HtGs5+exSGUj;z=Mo@0iLW3S*O57gPG(BN&e~@QS7%BYWo+VWoC%ReW>QnMV#= zbKK6?Rb(~&&8LwsZ=6bL#=ot|;>%BkBD5%^nK+1~MO-rT?ke-2H|437SbR{5AoCuI zcp&sq4gO*!R)IY|Z0EBov8cpp?iC&_vx(}jdcw|+RARSTI2y6OGTT+}Ss~1a^-9r( z!)~U=qaLhoRE@`7WW&%1TMEl!Um)>Q3LB`Zjd_bIEVlgFgVY4);?}wl{aV}ue+);u z3LD3)I}C3=+-`XDdZE1#-pn<%Cr46Ysu8AI4$(w;8C21j4;(HwQ3W0@9(cf+N9E!U z87^K#`lO3P8VDChmhLCfJaN*V7y4KIGEdV*MeobR&I|pzKHrmu1F}Vuhh4TT0Fx&y(e!rckR>RTw6qXzIl5GKH<`Zdysl%$V8|(ulT2yDLtSvk? zt~w4&<$aFB@+nd-DmtU`e?KfM588Rx8f=o+y*gr~J>>BfSXB8Y?^C0k$K=Fbc}&b# z;kFgFWpTV#I!lOn{~Z%vlY6@C@^hO@cqz*}cw8=>#j`d0aQq-vy&|bz*ya}Irm8ZD zYdKminS7XO+?q95nB3;NxUlU1866*a9G=$ZK{Z*7f15qjrcT@7?C)#yh8R;Ua*v(& zugTJbFYHAF#dBecJDx{Hp}Uj$hMFw4>Y?3KsLgd_uEj|_`S2FB|C;VrpmA+cAbcDO z&?94WW*%1qm-e9h#q&b_YV)XCEGDk8p^bFJqe@KVS2j`OE*33EYkSsW*P6TtGY`|Q z;jiNyO>0Y8G+chAFL{Z($7)j+O#t+67nzlS#tf~^QrKU+?R;5nRzXeQ$IGo};f-*H zjG0o)ERa#k9AMDx=uR01x5od8sK%Vu<5vwIb*w>kF3wKS*IQL!f)!cy(V>bWxlW> zOQ<~cUGk4}^iQ`Wg;rX1ZJfIQgkk+Dn=&-8fUr|C# z>M=1QKTq7ho)`5(_rl zdF$q^Nz80;z)lMQx$x&@|*K!cy)&ff%na7$K$ZAA0iv}Bp;kJtIK zmTUmKfQ;W;vO#RsCOhxaibb=FkR98KRqs}he1~~pajOu=t*YX#!|G_0m|?DqNvk^D z!MeED^^-(VcW#EdX+MYVVD&ngVB}`5wett9SbO%}Iy=W(WfR#qZ`=96)-2xtD>9aD zgUt(lyMoxusd(jWnPtov#%caP)Fns|wQN{#=NDSDj!mu0WZ&wu4orM1ezA6Ysmbkz z*1Jh2`s&{q`PH>M7uyujoV-{&ved-8w1Fl0NK9(Oswd@29r!{O=3$(Z(EZn!+As=Sc$QR}{u-hYa$mtc|{?jb}_(oetzPGFf@nW1YP)Ka;IBspYQl z>h0MBcJVDckL|$vvm>kRd|wY1%$Igxq3Q?G;$X1@E71Eour5jJDtY8-duZx+Ppfih%yubWk3*}2T zJG|V^k9TGb*l)1!@6Ig4`r2xmB(L+O@8UVg1<1Yfz8b-Ey0A2szsk;MlIcZ|LCxF3 z;cZ78DyE~sX!qSNtZwL#|6+xLRii6A#Ij*x=k6?GbvI^JGeY?I?wGV+SZe20yRqcZ zTLGdq%Q)IsQY0zmJmPHQYKq= zpIV1J^t5JhC*Ru%l0S51R%U?*U{1XHZFyme`tuU0kV%D=BKB$jrfcpJ{zrF~5Z7|q ze;-E2$}&*n)q1cPHN{Yw2_IzlU^qEJVpR`JQ|r-gapl4Sul&%14N(8i<4t<9Dr$7F zykPNY5ue?Yb*+%Gq^!${IaFQ>bauInMf`D3Hk{QhFMFI?x{y!qg)N<0OL$^$81cI| zpV%8cB66Y8BV4rLV4jw2^*;;vlHTlTYK0(ia3{ds^qoX}`Q*__dbZW+_*wJe%YT72os*T6_ZESi;_PD}JRfOOE!J z1@Sqi1p#Ch9Z+MYe zlXfi-htkb2d7?yK=*3b@qzC=@?cLZmesdnb{UWQZZeLPXTAjayr}bkE%^h)|WE<=C zXO-0V=95f9xp`>3ivgDT{QG|B_)AI@uJ>aR=6-YCiuGD7imA01^W6TdvUvyW=QA6y zYSr_!$@tz+Cf+ARZOPN3&^5>5@`4ZW+Kqd=hk{+^^`1_M>7$=njqgQPj+IuStabv ztLtx+|8f@ZnuUO*;v0Nv7K^L!?rb+dR|1I-N#)I(AewoxD0DXeEDKBFTYpQ(t0QKK zg6jNv!qaMLuEe_Y_^ctUCEJvX=nLN)SAFL28$;Oo$emOJo!W^fm%=lRwW_C$FMEk) zs6V~VufD{p+dAMADX!1_zA}?SqMU({$El!yePYu+6~@j|56Q*{#{@f`*z#JgI5c%6 zJKkVx9_&!To*YE%3%T_8IiK}1vn7=>cvUW!4Q((R2J|7BlU3zVE@HVnVJHiU{Y`Qw zV@0F-Lywged^C%98_MEZtt`vBI7{f7T+fhRP{!J2upEk}m9g@LqTrFQQ{A$eFM=!H z$zXV4({ysuWPf7Ic8vVBw;@}XWL@^+CJWgdhfCs#?c&hh(|NUF?5w)!HU4NAOHp4v z%-|+G93M_x^Tf2 z*S6oE@^5X&HxK?r_N0(S+wnlZgDo%Ci{7%)O%-oA3|oelQLKgf?Q8snQOu_PGQIHQ zQ7q1+R+)}Rnpk{DCcX(xQ$WFF$99TkGLId@HmI*oEj%%XjaJP^U&Rz89vN;nj#UkN zmSw{ClO{({!xk?;Fp>hzqAYG3hiP?o7QZ)+RSWCvCer{9S}xXFX7MWH*#z~#-LYq zgK45rKJese2-O_IznH_`S2G3`&Y8 zcc8iSV$qK%wh+%;YJ-sB{@CT*zSKOejUhSjMgGGARQz)vp1zPpH@Mde5lx$CCRB*G zKgkNA(AEdp;+twSw$Ewv#FHH~kk47jlFaX1#;o3a4lWw+>BY}4#4#xD&5H=V`f%Sx zEIQN|`aN`~^yQ5gv4+vH1E>yFe$~Z?su>%W+?w4Bk$4#}RAfDhsDX2@OwOb8+W3G`N?YgR-tND4Ep@TY!0R zd$nG?cOI)3*@ljaJkHM?ZqEz-=39B3YaQ$+R5)2s@g^#VR?2etX`@RP&&p$IafLW+ zE@~Zu=@3N!lQU(9r3mTU_b%MNl%?a9BE1T~TZZwkzTdO(PCgrJ^2z979F`}1$ZNQ< z=#>@hg!+27!kQ~t1Ctujk&ju$($#w%`1)0>N7sXRJCcYz*yQTsc;o%FKg_rcJf3<{h}T1-xjhLKQTs~r8SS; zfKm5DE8b=U8(e2{T{(>Iwljv&P-M6dqeU&rYORAIxwsV#qbUAp1FNV0(t@XMWYLii zn!|HtV=1Va?9TIA@If09>4vrAGdE(;Y(L}}GzXgVQyW=gFH;M0Ilf?MpV{>j1QR`{hHDt0MHS=C$ex&^GK>eZGnEHs_pPJl}eP#b~hzup}fNuHX-Wwvkn!Ra~^p0fw&y58yfMiwy?2{#(|%iH*dMP zqA1P}yGj>HvC|FVr@U2yy?9;&Atg2mE;i*e-epswd!8cwAz*Y`c*gZ{vSAH*z*d$L zI{rh4fV1wDhP=a8R?&Q$8ghFx&fN00GOwt|`y7(4j=RvnXl;bi+Iw{9^5%6Fwp=W- zHs&|C;&2r;;>BCBJJt4#!gJnZ3F`Ot`ReyreRlJ-!mqrCmDpCFKY5SUWx2>m+s2aB z#QMDZHr7b3*o-gThEI+DSl^iM<~d;pPZJ6O1XQ~1x>)A^7*gh;&_^I1DsgtZ3>IPQr{ zIa$X=P7cGhXopc$cmkGftIxmN!Rp1GZUmN`jcIH-*bPy_b=vgfop)jm@6oWZU?>6nH?MQX7x$S-j?_gzE9;HrTFIB-c{V2Q~=~W2*69u;&L~YU0>Rk5w zUWNN+s4+2JDhX4&?vogTjBuTH|b!F+FTUJ=bH@ zhHMF16%wn?VE#y~pu|!XE+3~ZV|K`FiBqSr@)hkoE*?g0MWTJY+MYE;TX?)$H~H^f z(CwIW?j(|7+OMv8R}$^~VZ0g|b4%tH?X7?=M7MDU?iNLhHde6n!~``YGMzH8Rk8=s zZ`tE$uRuZP1hswnOJIvbB4@5JccK9YL}kb5ESY!E7P!VM=vnXA--bWVaUVFjsaJVh04CoJYkmp5B5>P9-a+XAi1;xbrxm7_sf&j zRQ7X{ou5dC6aI`BPN>=_ILW2`;+fVw|3%x~+P^$Tw0{k9oeh`~gG*@@)z>@zy3MWm zMbSd`IdYw{*N}&446WEkUe4|NvKM+@Xcm>Ex0T8k?1{!esHBc5zg(2Py6{7pUlaMu zDyfs3RzZH7g=g9}ORK7LWA_!fxMo8rxoh6?b$^R3*l0d+ zgBoFb0}hjKXw6(W^V#x&XM1HXyo-P%V<_J8TQLQ;&?;5)G@4!e9cjwX)Z&G0P9xqu zjYp8N&VU;lMcllmhsKc~&WP^;NT&`(y;$WASI?d_a&XSbVVMiHd^0M-S#+LW6peAf77HD zXXv{LU!b?Op||=wzY1O%nTAj2JP0DcqQYotDo)Ntdx9Z@oi@B_PkS~-v_0R9IJ}y0 zI4}PJ3$gvYN!aZu@nxhak%SV5Wr?fUY&J?yl6_PaOe}f2)N^gVwL6YMInRT(~b4hQLZ0U|;<)}!gpLEuzf>q|M_2A-5 zpr{L`m4oV2hU&RcC6?H;M#iM_e9A!<8+^i5c{>zeK9DcH%%W|9^VTb{GEd7hN`y*l zHW{Qvk{b>3Z()~q*dU7}dBY%Y2r@JkhC$=68>#taRv!x@tG&yt{(hs5SkvlJRrKn5{l0{)W_Yh0+A61ssFO2U!#9|{`872iw z3ws)*xg5WDh^2PBg;vAFA)}nbdo>Bt`SqNc&y<`Tqt2kr#dvL%e-srLJJMzINL|d< zGVfwh!!SOikcHZQ6ZV%aBrgS0llP7k2dXA2bTse<_=29s)t2K*C}t5=*mve=tm2qO zreL~}E{HXGy5N!1vqcG*J?YNX4^c4FmKXX0>OwtVJ0)a)`ZjVLZnT*4KXc{-#yH#$Njz*HR6+0 z;zl^FNKzvub!RQFd4z?9tfSmKEtO1_GwR?#-v0uJ8gSBv!!;HoLbdQV`#X~p_fVC~n6^)YJD^=H7fwqiZPPf?!X-6IWv{T3GM1AxD*F4kuNqwyTmI^ZDSap3qh z#WwvW5(RG+>vrIqZx`z^{)+PT+G4#4aQ8YW09INL1;Bg20^sLciuH5A74H`7cYt-b z7VBoLziolZz;MKNt%1Y07wbcT-aCu+1wgvCv<C0}z{@l3x)N?vl*n9I9u5V-*1%!2VL7k^uISGNPR0EKTY!1J?qt0DbYa*hAo}z@RuqxeZJQW}8a%u0#VT0Do6Y z^yR=LbBVqe_*^T|uKXhg!f$4b8_5iRg@EY)KJiPo2=#A~x zm_$WsZNp>MO^|qkXSK6{)ti*)xxkxv$a)K~9G;Uu2aE;Y0mk8>elx=0wZLTH?Tiw= zHSpyYCHhd{E#O?>Fg(`34R{rJ8CVG~b9exx*HQQ(03MF_E2IH!xkz+G;uhXckqzvJ zcXliRj>Ri4b^-4LF9V+f9{>|NLqRgu0AL!hC9oqf44byuz;CyaF5v zd+;4N;4fh|Xt=r@4@qe^r-F<3nY zuB)Ud{{c1uHp?&32LR{2S)$JXezu}SUk7|)6+8zV1-t{C05n%tls>EBIbiG>c&@Sy zQ{_6i4jJB?;5y*WLvS51uCPSE1l$KKB0P$g<9v77F|-``4zMHegHvcZaP9@P92oo& zJO{i0ybPT7F+2zC`3cG+K=|oPln4I(70TO?=y4MYfcI`g0dU$KxDHtR9$W|94txk) zQ3TheqO<-1*8%?lb_EtZM5hJDJVvJle)bgQfv-J7rvuJZOZ6wf!MIf?qAEs*wN!5a z{Mf5hxAjHhKi;MKRN#)lQhg2ZSKwh_RCK9+9oRCqRDTBCngj)DXjwHV00!46)%yaU z;1S`eKr?RrSp&S%0p)>}`jzT8fm?@_>UN+$qEwHmhBuOIFV&j>f81Sa(+422e1EB) z3p`R-suut+;JKF5z(prZ^;^JBr%H9DIxPRNR8IgNJ6Eb_0Mjp&>RCYF&rlxt6|ev} znXs=UI-_FX*NGyABn{LKwVz|{5}W@fM@aG;w517@=yTm7Xk&f;1OU7 z@LVVq0QZHXJTN8#<$=>8Q688XqwAM}6JvG#0kChpuKU$il!_H}Jq`F;lCF0I+Qud8 zdNvaGflGjDC0*YIJX#qFC?EI$*byHq@~eZBLiq^_cjZlUXSfL{T7*2VaL(n{BJknwqIU0(?tg%2Gb0N(AO z>(_u=d+7QTU_fsusE5D=*Z_DJ*cZ5_udYu8z5`qb{QE^+KMuUtPuFh(_5QkU2l@@r z^_cnyZh=jJyMY7h2Pw)WBxWEZ0H+h{>hq<)nJbub`M%%G;ii%NquRxh*@*}3@p7BTb%H9sx;gm@jOz$~7X|@`k+{>H1jxVy@TX5I<~xJ5NJ|EY z!#VuWV{@EkDAG@7@NXZRqbzfg9=3=t`V;9bNKaYJcOY#&hxFTvi+TTGaZ97Jcrm|E zGWfcLvTh0Yd4zN_(&O@YDy3T^{pM2Mp3*~+eqk9OP3gHvZ(hb1Jwm_L-@x2h3w7!@xhR1DJ zK%B%W47LucTk zs|7znQLIW=2&{gGzxIbYif8?4Hd}I#(P#@F4S%&;iS)O0V&zu4%=ZVtpM?{y|K`$FcG9mP5x zTP%}d$t1v=2WncSsSucsQ@=58EgJ6dhq4Cz3p@GK-_a9~BOSJzN5M6gn@Bg>&l^$N zj`ZIBydR}wEQsPiAos;tGLU}v1HJ+Iz6sDj6m-2q#jB=kvDO7he|xNW)kZDWMqd$p zhO@xAZZ_DQ$Luor18{cus@pN2=se~Rz~6rgXQgiZBq!g`in;Yel*h<$I*LtHsRHzJ ztC9wRp!59xa}0@&NFP66tRHbxcEG7D8~k1$73+Tox+;4VXed*bfS-1wSg#4ElvS3d zIrzK4Z~8;Ao`eapj34J^@Kcn_5XiV!tpDSt;4i0w2jE9ND8|>{waChT(31QBI{{GU z)Ha25$>}x?i3~&7+7U#1gJ_oxq9;l=a4k8htmG2#v%&vg2W1!dSD3ej`W{Cps$@>Ja%XH7@?dtAb8{@fgE z=?UVGs@$i<991a?>G5fHeZ8w2)HT8nGy|>#|3Mnx0a@Dtq}x@q>%-mp(GW*JQm%oY zSHu24z3>G557Ke^hW_e2SZsuaDoa2X?I-E=?D|%J7k(zqrv4;SLkKm1(CpTB{VbG~ zDLLsQkDNT}10a*og*UQeK+ZtAc6Z*-jsaPK^ph9)ETr3?L;8i6?DDO8j&)EyDAbTK zcfkJ{e2u0o2cL|2CWeBr1rxY(ZaBY3y3>&UZKQCjr6bZ~NAXlR&615YzDdxY(o2v& zHI9!)+PVwr%Q<#F*az$EWe}aF3NKq8AiZrW|CkE+!4uiIyO#>2A-!-mu7WMpeNwM0AsVOwP9$B6I?K%~C} z_b(8U2I5OR(o#%BM-XXvx+eNB5ZNFa;~AI6L@WXE1|BWyPsA<|&mF{N5ZQP*MsOa0 z_z}c067$2HaSu;reMdwZh>2@Z&tK+5Yflh(I*t2AXpz<&5G5e0Mqr{`10oSm;dLR- zVGu8Y7*E7?5SKwLBjOo|QFv(WeIgjGp9LPql_Ez*~U;4Wlb!&@)< zhd}%?h;o;3M2UC+!Vkn+BK*puH5XA|2&za2Vg3l6g*aV7ECZo~W6J??=!RW~zsefb zUXGpwWUU1MUGOV=Habd7(IR3w44G}W?RsNZ9j{6qWbt+I&w@X}m9LH=0U7cQ^6ngGurBn2xAS1-q=vW zJ&0v(#f?ZLP09{~KL#63U%TfqxeK3asy{A5|GsZ{2sm~{6FF7n*%_U3&NI%+kkB6TwrE^-xS+!i`=Z4=d@-W`0rsm z?l&lQR;Cs?-F+PV9NerJ=E|3+Mr2HyauWihA<)yc0tzW*$S*8bQ2Omqe24R?Io6sC z;%*o|HTx7ZT5Hl9QNn%y24^IQC6Oh(#^2y90I@Zygm(d_@-7hRF(rCkS1V)>7QON^ z_-$fJM37wh0f?FqHo01)+MP}E!!C3A*b-h`9{oKH#Q4~f|G5Bn1b&5~BUfX{J=4V@@D={q3!#Gve5pkX6LSm=v}?#KNx*0B zXgYcVqE<4#(un}h8iHN!sd%egF%fk@)T)e@lUPp>X&~03W!4-J*(oJ7OGa8(g17+U zJK`JwaiofLfb|-PuvFk|+v2nrOfA=nJ}1M$h9I2?6Al%NcVC=1fRBfXZw$s7=y ztCr|^vtL;U!cD*A0dl}f;#Y(4GaTW=ASS1m@KdxPUk9-egjk)QftcVRBCw6#2SogH zh&2E)sTMwJia5+R0K`1(2Gd!jv%9hp&cQbW{Ht|K^r>#vOmbSY4*V+ECEo2Bq7;~& zhwLLfA`$%ZM_45K`qgP$viW5?0s6H2mb>i8N@4X@Lg0QT7!58 zL~{qJ>ICeFyE=ny6rP~++4$FMGTtQT z#&0F~2{czPfxygZCHiK}0ZwblQ>#LqM(l-5@zN4~5=5Lb>NqF=3izFu;fpzL{H21Q zfV_v`p8=mf>gFs@1L!IDv73FYA-Hg{9-q66wj+M81ET*5zR0XaS$ZPfWd+|s=^Uh+ zbN(@q@N%?Zxe4%`60Nnk+GSNrgR;o@#@h0;X>pdrNS`^%11!kDj&%RyygH?yA-(T7?@Z|kT=Ww1EhPOr->lS(iiE?=lLE=PenTA0{@KCYmlCMiT_UN!$^l+<^fhM&UO>&4WE|i z%q_|<^(Ie}BkkbN{-#9#$+b6-Bd?1NA-Y!r1e@O|(U-Y8n=Nt{_&h=19#K!xdxHRE*LN!>NP@$(O3E;o+ zHwK`a7o)|w67e&LZz|P0nOqIXH2K-!0}{xBzz4WAa2w~9WftBPhk^LH;OF?2>OnXs zFXQ`)@R;}o;13Nh)i1lX@FH3$594X@gW^l|-Z)EemdBXmDc+rF=RFOKT9*XYjYZ(T9doI+q{yMt@y^wAVcT1Lf0ou5ycbDWxwV zUAl14P{gGjB#|uVnPuclaP*^zSsJZ)_>mFEE#evop@V*%5r( zwo-kG>dK$*Jo4G#|GJ}8KjRh{9v6XO0*WjFf5`{9qT%6K_E?-scN9mLuDy*sQ>x!_ zGvY_55p+#1?R=@uq0o7B)Hg*3rlU*O>fSkzLxR&e8(pvq!?l)uZo<2q!nly9ya&FY zTV+;fWnIBv@lmOM(yjavXZZ=>*ZjCtKkMd^lMat$D$5~o4R27pYhO`x|!Kv@p{-``{8xEa{ZY2aS) ztNmE2-*Yukz3p`874RSb$UhF$qAEQ^y2~wi#?9C;r?Ekmv2XShPYu$dtm#Pi`>B+| z+R#+$1YMDlgG*z-xfxRAG-Lw!E$;F~C~R4d^pd-L2c`ES{n0&c3B*XfMmm1ssW8U! z1nHUgc|bX&LsD?L>;bP{PQyKXftuM;2N{3<&KHqjPoyh78Fo*d&&=~g0qlkd^Dx&AU)-|G`1(wA3m4H<{+*A z!#@tv;;d_s?qt^aAK0$99tN>j!>iZJfw&H0idE+|hXXh=h0{aesw=xoDWwX0Ad=h`Ng{(jwt8hm;wIO06Y<+A>>~NqBbrJzU?Nw$|-yt z{N1=vIK%AP(WW@VqMP7*hw1tmt1JJwa|XAAzXKNt@c~Sij{36DpFm+#OjSf0xN^83 zd}mL_N~~@x8x0wd$xYC845~7jtTKKU`18Q0_r*DNusxy=B_Jyo{0Ll?^hMgqZ%gI* zYi7;Iwgr4W5f=;H%6D=0!E@l(#?{O}T+6HXo$kK_zKV;Rk#6NfoaN1F2>Zato>^J_ znNIstlw=4LL14M7fV$XOL2K~)R@CL$$50S2fS8W6oaS>uw63V@ZQaIs3o*_Uplu8I zqf>C<*46(Ml};Cjps+`jHW05DD_6KLR{POXTO$KpehIVaxMQFgSlz(71~!{zUh$_I zXUn9P!$}<^M)Z)_VSvQ0Sq4IeI*K0&yZrVpmDPM;;9&z#70*vG&j297dt ztbwl>IK{x32F^BciGj-ueAB=+21+N|uorbny7=XfB<{H(@q~eQZc92|guGa)4E)Ey zVLwa$Lj#B1k@PEfCBAo0;>;q6&3}^7?;4Cg#Zq9ufeudu z2FMC39FU3~|Fe(F^5YGB#lR^B&M+|7z&QrKaojBGR~8x>%M4s);93JW8Mwv3Z3gZ% zaF2l>7U)efsYIdGPxhwCw7*&g;fUzZ~r$Fu_d#mkT`TB_8w^kMi3*_$NK+3$8Sc ziyu4`{Ol?K{%;2DSb83L@V!sFdoa+0PVu0ty3k@=Hgd_J!_eG=?r6}CYPx&yM|tok z8nnaZvpnSAD5K@Pz>N&YF)k<*AbXU99`q>>`U``mC7yoY7_`HH`yTwioP1foVm;$% zn^X|&L02|ti)1S`4BAmaD-Sx;qx?V*{s;%(s9%}xAuz`wU{uIG=(Qg7HV=BY2mPT3 zebJyD^()tm3<^Hz_pL!YTKI|gRba7r%2jazf#W-aP$F>i2`pw zk`*`%YT}_V(}Ul^ga492yN{x>`jufG3PyVo=+N(g6V&ia@5Rpf+hTI;k$U2ovv25;bh!uuh$H#u^eCCMKBOSn@$q-c+WTe-31 zKK3TA?KgBJO%ZorC~-b;dMs-f#*_+1&x`CQ6FuV{T@l;uU*bBmdN;f|vb?;k(*W^i zZPd6NP}(t(sU0FPc~!-7?4?@itR?Iv$}(GL367+N%niJ^3w^hF!C>svoJZTtjYVF9iEe^5 zHxWdNsXlR<3L@P!0Av6sBxLz%s%^T;y49Qr-ruxTkaW6VRzt_bC^{nc}kuS=MrF6tqSJMI8s2G9hY>4xzMS z>P$pT`7;17bX9X|AohoYtYO-7u!Co#lJG$4O~G`3aD+egvfwFD9T_MD=!S_{-?wd~ z%gb!Gl2AfO4G5TSV-Q(G1D6s@)){9#3&P8^7&+E>Z_*W^_&i0PHGwH86GjCi5|S2D z`8nu9)?~lIqWl^Xswj$hnQW~5Gb5RYybcT}0kc+gNS#HTL_ zeQ5IQ!g%$eT6pGl(7rjM%t!9}Dp!IYOP8dtkZmr3s=zk*=ksbH9oD}{_CKV5C@3Xp z3(p&hPLhR2dLIj*!&%v4RIa2v$8qv`U-fT9Su`w^Al%)h_!OuCM0KNVn$?slU*Vsr zhspB87$UI~gp%|#tsCl%tM9{bITq|#B3S;j8UFsLyr0Qyl%TK7O!9vp-RTXJ7*i~N z%}oDMD7?fZrVo~XeWqnvHg7*ntDydr&BqPX64gJmdHyhro3Ug0-eFp@T6Y}(dYD#6 zjU3PYhHJG{p9wr;IOKCC@S%iVCh`TtQEt#gzH_)1ua10$Uk05yz#wexC`2${esD_OuM2royw0xR_!>Ie>Xx)^`o7oFZ{?;GhXK9Mrxt9YfX`pZ1`@L z_YWjcb34?r{D-q5$4^kcXeOzmS>7~)zsQv2ty$J17%A5SWYNR8f{FwGgW=@4HY?p@ z_PfL9HtR}|54}1G#d~cQ|Dj0X$KM@^9%47Bb2#Yq3mBz57QK(6J@Uq5|t?8ffgi9>*~P+-lS_;Ea^fYw~6A*jV@kbvo@)$DEUG+ z%im_R((Lw*SL9U`hpVjP(c~?nE|!1TrX9-SyGLsY_32{Y?AMIyddpf--4Lpd`oio) z*}{=Z=(|uj(wFAEg9EvFjFy~n2bPTTrySIPKmduTg{Y@KM@8G>kjP zP;Wx(EuRhGBgbe7YUn_|Xp9!E#tr1}jlp%~mC#!MhyJqY4X1_?4h{9=rG}A_uZ*9f z)UPQG%u>=O!a!4i==zR0iXs5|nbvvJq#uw#UcrIzrddCrT3fKx{MJ@7EKqcFyuYlk z<$OP$nGMTk_2;9raSxvr7E{nhfkb3k&=zPYA4?$_e)nJ@{f?pI___pbOa^UHGH7Em zXai8t#$?dOWYETByv9r-USq08;hL|Cc7^kP5QAgDh{B zU`Sag{;?YI&uxb1*YVkST#ZqzT`YY3i&~s1o-ch-i;AGI!RuH6wX7DBLQ1io*ZAod zwMg}mnSTdi^*SDn1074Z!TIb|12#jP(kdln0AV@EYxdJ(BFba^upSfZ$~PoIj#Dfz zYJ6BfEk2S0E-xeCqSnd!EDy|leLpQK#1XDEBNpjaEY_?p_mkt|=kHB;OCI-k%Vv*Y18Qix_r`n7ck#~Z?sZ9Y%(-j|?+j8ZC?+Jc}^ z2vgbCHzcEb8NY$SzX`rqCDi@B7umPNCPhvglBVQ!AEH8ky50Z#ij<_ubWwF$N=Y8` zx~Apwngg&D-iDS>{irk6wDG|Muof1#Mov}o9m#btboVuM`;1bqiX*4yXTyjR6fYEB z>_@{0zi%X9GM{aQ4WzBGl0(}RL+ArT2-;*nQ1eG>y9JX!9-u|pn!@Neh2Ai9P2 zft}?|uaFt&MY97U&sp9#LvRmnwhw#FNc z{8lm>`APqn!49=J7P(qZ6TF|GM50&=$P3Cxh#6>={2T>h%T~!IMu8slh0gxUMw|!I zFFFVi%cNBK9e?F%BwLjPv6gDJy*A*`h_zI6 z-44+jc#~$imTC z>mFFPaB4k-fLu7WUV&F3E!RzLpnuuAsSOS%-^g`S%Zj`ULav+I5Mhd3H?^0%DLj$u zruK5^eTd0*Q*+x6(OkDfw2=X23#T^L>j!AKqIlD~X|YDq;i*9DrdBN=>?nVwgRyS1 zuaOtFix+f2AE0&9n+H4xFgip@Ib)RuR;w31muylocC6lFWGJR&^aQJqAk3yA7#mh! zL3o+Q5ywvuex_T*@fSpp=|4mS2qMJ9Ni0wh5vHm{1X*ouQD=2kc8%LPKCxa*&sw_YE?S<~1*WaljSRPK+_H06};u-W{RCD-hqo#sYDj z()GgsL>eC;MaD(w^r|oBo%E=?$ngupl1xtv;}`W58U9$_Q;dx0jVK==W*2XKdFNqA zEi$|xvdUQ+V*Glu3`5SVwv{Jz!jj#KH}9l{bvT1s{4`Zmvm25swE@S1=A$W0WS^sK za=oI_8?L=)GI1boIi!suhj>9JEj%O^m3j|lKCshZ9JTUKI%!c|XpQ&BdQUy5C9x@C ztg#e1_#O+OV@rn0l3wv3edQ(zO=lw4U@f)sI-Ru?wU31l>WrXbL0vwpvleMO$k%i> z0tauoVECeihWQ8_E_c@AllsDW-eU6v3oh#DL?YC1@h@2MLZ}kZ1zL3ruiizAtnmQm zdHb3~yXl-3pDr@~DKQjg_`k0nqHJoBqE+XwcF__eD9Z3hltGR9!%>5xmE-Ss(ZXu~ z1V1e@S&3PT#vy*E#eZ~}b$!4LJb*HbOsT@I{J!RCtNAn7)N&NECz;S~aN&KGEOE(M zu#gJUYCg%7Kxr)JKD3-qGx<;ftkdSpt9ak8T9Pde$1=+#dW_@#7}_4CpK0Ciq=({~ zEK{^BI8q7Nhs+mb3CEo^7i9sIr~zS7;ssNvQI$_C6zF0qPkow}lz>3cUQ&V0agWYI zFzIJnHx;L4LW7qniZtM~cV^`6<&wRe`X7FMAmsBkTu|QRE2e||(=*M1`I7mPA>>mj z5vzpBk2KP*jnC^SP|@Ts3tX8QSv%iYxc?&yDkZSqX9lFgO@UJC(oFO6e7?S$7T;hP zgoMhP_G^5;f_KOde^1~?RM_ufU z(4UvbZ+AE1vonc~{<9-bDtl@eY#F6oFru1~<|L!0o(|?{<1gr&cH#%`LVERZJewtvm8xxYkkutnGqShgy;6q5~>|uBFiEk6hGf~@X78F**_3B z`g?=U71gX=#6Rt!rN?hZs}=@)0DZL2;kyImBCqMF5nB}Ip^JG;Pp!J&m$0s@DE9FJ z-n*xkRD)ut-d?E)VQ~DX_>#x^cr}*fcwaKFuY;Uqj#^?>|Twc#`Ib2X>F&bkE zv-FrR+2@>veJK>HAXW()H#Vhz0HzhhVlSgQmssp|;}|?LCXlpXsp2G_4|3hHu(*X{ z78!~G4nf=^LotgC#Vj%uv&c})B119eD|akBVlgvCSHU!aLEIUO`Fh4;s9fx8IAXC7 z8H+{#A03M&Ov6<3e@!eV_ArcCEU_#W3vTMz!!Tm87ELjq;nLKwra1BV|3B=a`R9K| zUAF%UyCN}TMnA?-Md%gu69^;p@}(}Sm{O}?@d*%wm*PuuSVNCOEZhgPuUC_he~>m) zx$tbtXevgkB}k*)7K_|%vB=$)nBN%&rJp~-s*xC}_{HcbNAXyukrA;EIvnv>M@MFP zWCn_f%A0jHGW}>^%tRfLG%&CS6R{n(mA7Og%bR5xQr2V0^ciOo(ZmN}rK$%ZE&~w? zI2EgF%=R%PWYA-c@ZxFBwWvti#PK#ZaY~6zvvZWtJvDPpJ8n6_~J@bA&HU&inThAXki3hzDCgX zkhs)J#afPcYoUeNuEB}tW$ZNSJt~IHZ{p);S{Dx{7GaWzk@3d@8(V-Q_K7Kw`UcD2 zYh!CcUp0xTnHD6r6!h1Q;3|XB8!~T7HbO6U8`^G~%25ZTP5fFc4dUNBu4}EdF?xl| zuMT>Rjm-l6r$b#=|0mmcL`#ghX4`oa!q>O+td?4Q%Pvr}N48_rR$;z!Ndnq|C-eRv z=H5HZiehUY?e5y$yLa9b_T;c9k&^@^s30I`MloP!^k{ozL_DCP zqGAF>lprd41jmeu5=1bdU`}}ay>C_ZFnZ2+zI*R;|M>Ou%{RYn%) zfRCD`e5W9s13u;R9btBkp2FFO-|yx3gPv*= zFmF|uzSXt<=paQZ)Ft7qKH*p+*&Tsx6~(Cwm2mx4X92|m&SO~CZOuGg)-%Pw0AJ*n z?UI?X>owVUY&t#F53AeO_bNVf^mp$=Bq2B%?CDPi8)w=RH4;@8d;}+hhnrC*$;qJL zWN@HA8Qd}xN*s-Jj2YKRT(8F7{s+l%x={TXRT**^10m1wliN7c{+Gs@sIg>nXEh}U zPO%k>RNMy|Wd`|hN;1)u!x0+NOu^x4k`FJOX`71`wy)HSpL?|Q0!cw;-=^#FdGiXj47K*{9MTn!N%xvGw}C=E%|+rTYl43Eji?a zgJeHQs(!%zv3u@ODd@5`#I7KvZIVOekh>Lr>!w`%=#y>IGtCk9g?D?!1F+k)>u#_60K2UBRUls= z$*Rl{l3;M=m?eXx)Sw>+I0qRlMKM+)AW(PE3tHE9=}^ zfahv(ZJoQU!ti2)>_e)?gAJy)BQ$#mEg!R?#RkS4;w<;P(Sz)iwb}D79fS?E-3-om z{AuTgCIa`*6IWv+ih=Xi%}6mEWMQ``pPJ(|Dukgw$j9aJSruX`cDkX zT?9a>|HQFU#)(Coa*E?5;9En9!R``-s;x9JB*Jk^ZKa75vQGt|w$j9jiE{v`tu%3x zq){3{aY|z4!L2lLR_uDIDtrxqQVELDQaq&+6k|gC5Ga+PI6FlJ zqf!ZqbEK@wKuVk^0c9X1#>OuJjoL~R*h=G6rqOVy5)1?j-vLz2X{cx)kFD~K3Od?C z>N$kPmU{Nns>BP!{bpVv5lU*Jnj{?J?cF#@=CKOLs9Rhi!krQk} zzk$$($?a~thS(!OODiY4MHbPNm6P34F_K13b}I?M$mviZ1Sp5YgI9KI@fqF|EbSv{ zXJ+xA+V&4&;$?@N@^;*o>UgUkX_14G#d%)v**H7P5=L=#V1%;0VIikvG-sg>G>6Q| zR>rc^86mEjT^I_nt$fGeE_gA@sfly6CXN)joHvr6{FiMcXn)YTnxRs<5N5NRLQYX; z5(w>fQ3jsDSeA=L4o1!)_`IHD^L@A8G3(24JZ1yurMaAUoKq+%ux~|Uf%B5G0I=51 z`G!N46ma+Eg`MI` z4)m?Vk1DLXbgzdMPnjva+Svcy6n5HL;js5>*eOZVt3~XjX3=?Yw$sAb8uW;ugBGc*2pTALy*Og8duw@aW$lL0QgzX)M=d&(uSr~0ojxA zuXq$g)zUt1oP3uSsUf8!Kul44WHzLf1nvRWK>K3WtJ^v5tA}--SIR>%AE3$fdqOgtOP*ak zcJ(TtTxoSB@kuTb=2+Tx6{D0f*V4ADtf+aGwp|S)=1%J|W@A(#N1KI~wq2ztODt`> zx*0UfEN#2W_3=te+pa>cKE_&W2s!AX+0wSFRBUdvj%Lhw_g?@S4ObgEl%auj;K&Ty z)!bFyDRHN&2W?kv8@zLug2d)*-lhSi~PUp)6bzClN{~l!a>oofqG=d}-mD|0~|Dd}-mD-xq?ohRu3( zccXy?-GUGB-svGE?9NYmof3{Rod~JLyqmyGCzPK*jRfC;AXFf?klk4fFO=`;ifUx4 z;5PKLN~$RfCIhdEZ$`RBZ$|Zu!$wj@-HtxmN=B8uiNM3d1@{BNsse4eDE>QXtV7=- zR4k!@H4YTv5(&6gHaLe%B@nfWPe@*4c5-OggQ)-2kp`r1&Rt4J7e}DJ_ut zTI)WLM#>~$S^olQq+9|4>!+|cGU*gZWlc0BTccrdk1QINK)~W2Su`R6*Ww;oG%A6p z#XYiUOae)34}rJ@axIT&2?-Qf+#`!7B~W5*#&pW_}`G?f^I zV(0{?@W@Mn8Ow7&;pk0Agt5Zd0>l~CTx2a)6nhBouJsB5m7Aos4Oxq&b68>7)-V0N zW3!xAnMV-lHlWJld$YN5A4&#lP#%?cA$+4*&O!OL?luIv0&56kY9x@h zjzj4sT1cRkwT(banQkX*19Qz?D3OQVuRSBW1;u^PImf;Uqa zp%4$1h2xs3n^BL4x#N&{62uM@=`LPJgNt1b!J-8{F-(NSs7uwi+eSedvCW8y=d;&_ z#B3cC_!c5LZ&-4^GSM{-GfWJPhRHF?Nd5u}=NJ_kz7FXpuaStifxF3naBYYb!nek} zSguoe?1zve>j;Hk{UJC%XTFL5P68E*vm8zUJm6F0)pcTEI8 zSe9R(>r{+tftZ}3RsAtFv4`S4+y_;eyeUQrxTuq)M)(kfX5S+P%=n>-tDI~FnorH{ zAcD+f08^?+$|*XG##YX=lAQZdDz=(4wDsmt{AVuq{E07efr;XoDW{y8xtU;+KNAhX z*(aIwMBC9xEcYHwIr%-a5#mfVW$XmTGVi)P!b>oGXWuT1TBWYsy{_I4bEKljoG1M|l_IImLw#%E-d(lQgYBVX6W- zEa}}1EbF(Z_k5mHV=an$pXND7^ejWmjGw5OHWHmo&G!7KQoWD}qZPs)AHfJ?Gy2SY zr_9QUd6(xqh1Roi&&zkp&s&O$iFZ=y$sz*(uu9JYkC16SjGw^W4ExoRxtNUrl^`*U zWG#e`|EA)SU!pa|Ga493V5wC>>B5Z(ucW{!>)L~?#;CMD_E{O>x!o`V9-r6^j^8ts z{|uX8&Dja>;sPfxp9dAPE|8Ve5(TXrRk=66z$xnX49odSmGDT$$|8{x26j@8>r~uS z#<4Ptz!gdF3y_w*h=v|7R1$HpZcaKh;Z+u5sy75x7jIBFUl51?47&Ank}<$LvEsKVfa9g{Zko1lke5IZTdVoY0vO{O%IpJKO`JOr?(Cie4s%^ zwDSu}{vlCD`K5mVXn(>W`qg#ZFbP$ta;)M3GLVO;ajmAD|?z7yEapkb@C9BT?a3i>G!N z-tJT(lY{3?G&({B#6cC6Jy~#AkWs@VTHPM%f))3u0;o=sNP~v}fi5QKw%E=;2F<3bnlf=k2g?oul!uB^>WKydA z{(On(ibO^Wxuz5KvnPwrD3Z~lM#ax1kILd#~D*Z zT*|7T4IfVOT|c6{CG7Ro=%~vs;a%7Wlm{^{p%s? zV3Dpt6+UbgP`;4Zs6X-IZ8m(Xr3zi^hn|H5mioAje&`X%@lvau!rkJBM!@$GA9uSS zIx-`JTPx(x{NOLZ;x$XRgDq3ztKU+2SgXt6$Xrz6C1^}fS~(;|Y0jiK!`~6XA^2ULnk$8oc0=NkHhP;JH)9FOp$T1<#u*c%$J8 zKf$$A1&8>RKD=?NFgdRIaN|@XzJ-b*JWJG%aSp|%8skkX%t<@M&H(MvcUAlzox4|w zmW#x;`OF~w4f=4Ohfbi_qS*Amez7OwgHg~0{+PdPYUBz{G09If6Z3vaJ6$vDA>9eq;hRbnv6IV**V2>i)6qV3xV=CFgew7nL(g{$#S&AQ>`KuFne`In2>U~ zkFgK|4*+AhRje@9BH$qu;s_sOI|80!3_S-?=b1-8ud*)h=a5A(t`J2q2jZV+cH+z(inST&-WktvhKxIIJWal9$>h)SFxvpC+ASp=WUWezX);}>2oGkCEnGbrlU zUM}-D!H?g5IkE?r)n8k;cmiz6Y`QZvHkEhZZ?jQB$@8eYF@r$YR`(eTc%cG3f~ zUr}^F>s}_i`|qaKX0DzgrbCi{nPF8FJPjF{@=rygeF_+2XwusRrsZ?d_9Etut5oze z_$cx*8(vgZ?Zs-G;sWNRlMgN&NcfuuCJAloG9Ym)V_`H()AQ(E_^12wC+xdwv zQ9S4wfG3PWX2&Lo8>pYXsxHP3c!4bBK>Y?FFuifvTv?)nuBeM~MSP)---!6f0M7~U zMv8&@#^rU9d!AO}YR?TutY6&g*23x3?->kZqMCZ zi>s#%LK8ZWWrnw;h0{JW9~9hfyA{RQ@}OFn+C)CVPu1_*Bh~NAZLw}>X0abrD&kg3 zMI2KqV*D%zdQ6###gvjbe++|^9yq3K#bTB{^k~QqZv<#y?Tcv=5}qyRI?}Kuyn_As z*20S!{s)Ru+@{_;qnO0s6wa+Vc)z1a;?(4M``-Vv{eNpW_cxMnCfmnK2lKrbzc){n z$oH?vc73sY|Bg5>R`A{BnT1@QbbzchRLf^TcptC>7v=EMtJFSlN!pPac(;1zp%jzR zeV{a~MP|yY|G>^UdDbZ}%w5n($qhxP3q2!B4Yi|>6G#oU(>=sAU2BK8{R3Dp zP#x{`l3_|6?Hn!vrH*!vkbqK0J4Z@DsiU3V5>VP`r>_K{jV8B#5*TLDyMohS0wb&f zNaGC1P2D?1}4-GX0cZNjXLpCq9cr?$^ zNAoNm&2zNF1*x=lPLecAY3-bnm<|M`w06#leF6qbY3*cc^XDK+X|0`6g*+aswARjO z%BQu~&X^GESZS@Dvs1SsMro}bdBi{~tsQ;BKq{>r?QlUVt)21iwGdc4TnGjWSz&D( zE%Z~TeY{|mH*>2tYjc^Gf~DTWTXDQeYNqc+Kp8aC?{CEsXQi3WQkv=X^8DTZ~~qPjvm3GD_;sWmHP)&LaiVive}#k)n8-G!|9okzxr1+DP4bq(nkW zcOEH~fYO~u%EB&)r0)E!kL~susXLDrmt%OBy7Oph0mm>y>dvEO5>UGHXt@NaJ4cUC zOTaPOHz}+qNERp)D6CmyO$uukag)ND%$pR}XBeQ78tbdK*{%9h2@+Fwg)y}i5mV~j zjx9iy8d~)@(A_m?ixDmZ;`7xxj7Ga1K`P5v_~sBVitX5GSI z#^Y{Dj5Ar!N=EnjjEqjaVI}*m7|$CB{xjSRM2$cuBMzmTw|l#tD5Fj#r;QYG9}y|5 zOsCk0TPZJRhh1eIpYpozu*(XlY0bVy;vUP{pkx|{lJ(*puo#59jU9Fc&YV8917}XD z3eCPrCccums(_%D+`7Xq&vZnycE_pXE&CbGWQ_=IA$^A)E>xP5s@RC|L}`{bek}LH zjf(S7fNoSA!Vp=sk@@I+Zct?L^D^jQa0VsenyR|!%)+~Dr=8V}6T8%9GCS1EY8jfl z`DpN2XhGuHj<6Ut%)?M_8_ZG_ zFz<~a=E+Flbu-MyAE?hXKASNgJPd=ZAJX_-#!MiaZ<%ro3eovsZt{RaWx-A}Lq<~v;&7|aXdcqvW#(Rl2-j8V zfZ|idIcZdtB7V1dETYXD@cNmVJsNa8y`;7$aL%=LPF3d=rfn*K0zN1;*! z^*@6rZ;H>ibWtzdJS6lG_i6FmqkfDGhGBWw%(3Espe$gTP-}!f`a?y(ud(j)vC5ib zbulqc;CZH8p`Cgx7?}AGu7g$ZvCP*>G?Deld4-6v5eDjCgHT+yRQmyq2v`G>!G6Ho z2pEv-RqnPsSoM~7;%@Z!S1hlNzpaGVup8#BhY4@(ZrBE2FTCx$?TQ{p*h-QxN}A6? z%*f5-AkAberP5uAQaTKROtJEkD0ocN8;68$wY{EuFmt?DlTTM%46_ALW?Dro5H#~O z8IuQfuds^Qrvvr#kSR8^s}%-|%w$8m#wt{at=&Atu5c8y7nDSXS%Rv#(JECK8($xS z@X#YcB6%O~L0hU4-oLaFWXiW74!R{RgV0gfDF&o z8Q!Uw$PAwh;(b2JcC@U{@Uq5dhWyVD7i49oKeZ}!u^`i-JyGwF&+VL?dr`Lgtx6TM z3t~ST^M-$Jrw6|pQ+)1LKZcosaKBis73Kz6aP}JQg9Bp9$0WOm(CqeZX6YKC#Yu0& z=XT|QC$aU%Cl8}GACtnj6j_Sp_sDMvn#Q4izySnYgn%A?z}DA?*v}=sc3;3n&u`h@ z&@b$&R-ff4o}32r;f%>V0aWMvRC7V~K+3!83p?F?c}ih(!pX-R1kBkYpTkt3{!WxH zZzsD#=+?SLH;;VpTcmaR57L=C?8~+Myw^^)(M>|O(WVyohR`kWZ|For!SQWB;7$b4 zN_4L%YK3swszb*Yc@w_0ap0_2iFJ((&+RNu7?@VWxo8mb!!_6};qVFFNv+u$fv1^a z#zAXQYhD9cPxs-cYt1oWc!m!zuQeZo#Ao{Oidyqc5RO!1DhzXLYRzwu>sm8QPJ!yz z)|%r$aJ7%Hx;FH;pA0YYHAW8(x_>iEIOsyHRBP}2NeMbv{ixy9GxOB&y1f>Q#((^* z;x;x%S!@=n#5MvYrZ)UadO@seSq|&>E991bBW~z}&Xrwy0_3VTD;4R=+HA^QZFX1i zvf6AG3^=HQSz4RTf~heJ6}+T2n*~#2wpH-r+U&=2J#!xn`I)VD>RZBW$^5tX^Z#0{ zebF~co(_JK<~BxGQ-4L6&C(4JZMigKzUxbc+zL2+%!Xg`u`s?L;PNsh>fG8OMPJ@c zftlI0L5jY-pOWmr$RH(Ok*C0)M+RAgD_SY=`;iWZtd$Xt&}^2@P9U!hbJ|7e9gf$p zh5agUI9zX%pG8r>xYl_Y$eT5|q}J((*v#u1UR`T{xmOBp%+-C};js3W{G!2)SFQ6o zits}XF06IBf!o%&6725U(5YW3>UO%IRv_mNPvGsyVfTkBu@Krz-^BP?_mQwcc0;H-EWtO#d!H`Kc)sF zfpVoop}KsoxSZeAkiLc5FZj(dK&VlLzj0{rL`ZaHM|NmYzhS7Xnk$c1u`7oLSwdHy zsAAU+4YB~{l<~s~afix^n$tlQz|x`4sYo<)Lx`zB&pOn3xfox@Fo6%} zC~$akvT>U(`7J~3oG+BDTyFA7jx+Ai1-*4>^=$}ojzY%n%2q}3?oe42^ELS1P$08Ie`IxkdlsRp`c+w3OZ&W(Qr}* zMd1DITf64)R>=FgQesS?o$;U_tD#Z$T{@8)bt1_NjSHpt(8}4nKEn>yw|3>AY~*0z znR^tD?kJFFHnae;+y}N}xlal=6`dxnmYz~|K@D<-?W>z=6EOmfYn$twPWy~piHeJxl%ReGQd|g zKFx4-95%*q>WGrP@h@l;eTZyqvAaBoAE`?8J(EaPB0Q5wp3>MAo=FHOV^=sP$q-W3 zuJBAkK&cnunS_8+FTyhk0i|AqXA%NRy$H`F1eAIao=FHO^`hNR0!qDT_m_ZDFTz;~ z&ju*|icgSo=&C%JWPZ}>#o!L` zh6j^Je!_&PbC&nUPdGZGl!~zb0g)BI3;&Hkd=Y=#xKb*{Pa>3#E2U!GB{VxrDiyQX zV5}^uRLoLJ#UQIIOl@4SnKmxiOdA(e+PLD1^%!k3*-{;M3tqFOI*xBfaf^=_Ak}d) zN~+^zRFPE2xdr{v4W%ioTLgU+#h^OQEtY_?WOYjW z+3qb*ZD{YR+8M0&C>x?$B&5Bc{sW1c0R))8qP+5rP#oXb@F?YJlh1Z zaamEPG#9^-Ecr1gZGnjB(5jDt8Z07XdL4{SHob>`v5QJx#E=%hDb5ls$E(Q~$*E<^)WIbmv;M^pHe4eD)zG?M?ObWomV|nZp=}*R zb09H7&=h_BEA(QgpcrDOD^=7;Mk^tgcP9FH5~lV9Qb7GY9PQYDXI<=n1_cY6fD5(TcBB+=1DquXo^poj#uP;|W%h$>MWa zD>!YPXe92qc(o{Q^sCxp0V#W#-l2A!@lU; zi;YcIb{D{b`n5=nS$^wJS@ur;mwjmFeiXQwV>(_(mD~F{n&L4VXrLmfb}TmC(@<$x z+di2Q)H;?l1w5S*ucCF7o35%t=yU{inU!WXM>LQ;krC8oR+_~sU>_-l+%tln<}TIP736 zB+UNhJX7EuYdIxW%|LIg1xw*)+j!SmusJ!J&GuTk2Klt5%8+j%WH#IsN5ap8@wKfu z=t7T?Nw7Yy?X?cF(GWCoA?W8;v3t<-d<$HaEQxy$ikWwd&Gd11>;iNJYU~rX^XX6B!;^5A# zAFKl>$ZQXBD=@=GwkNC~3yAVZ z5N5Ivx{n;P12rrkPXwH-qjN#mr=1c4Uc6b@N6F5ORA(A(?*)!z;t&20=P(+k1u!n;38os%2GaqH0vS- zevT4|HZy_Hr{pUB(_??I< zU>Fo=W?n4Wz#{er0Ry>=vl`B)q@tt}HyDh(*_wmx{Rk~#6P>Qzcq7 ze9ZlzYI{=Xv=MU!vCx~AH~~a8_BfJy(m9~Bzme1=KN=%l| z8|9_nT0}}4C!#5g)Rn;qj4_CMnqQBrAw)7<-gqzl#yL;`30`UknjS&kW5p#HmmWdh zW5tauTi19?q1U{UsHMP{u6bf8s3aS=Agr-?I>(zDAZNkp=U}C^^bv?h-)m0m0=x|4 z1;jL&G!gF{WqC?r8yLAm_124`-*{FLhCZ7wsZ5#_LGDoNbD(HaMD8$*U<3C9Yx<<% zWYBELWAZ^MxCLM%4h|!b+<)e9a3q1`{xh{PhsO|1?mwGwa2$c}^mO_(vswny@*zhv z<1FO!<9Xc5W>!Yz?%_RutH(JznqeI>KMok9`B*O=c33CFtkW;eqB_H$0FDq( z0Jo-is*ReLywe4i1;{$&Qz-q=zoIBV-3f@8DZI%|qBshU(VC5+aPB7!y&n+o;c-0> zDKWg!2#F9L)7DWWXXPhX!Vx~ko53Cmrl*tmf11CAv%EQGHSmzOv$^n)cC5MZkoHw` z=^;%$Ig{s>jNlE=axz;84{2Rnz`66!sOOPQxC+)0R)5M2RfrhPOCHDq-2)o|?WZ{U zaTP&pJ`DxQOx;TD3Ni746#w8}0qC)pve8EMhV+|8oECYs&-ey`r+BA5r881tw4yx+ zGeaM%S&YFJA1S`a0>b}&~ z+1t{}$c_P0DHps+2Z30GvY?OETu+D?MEn66##5gi64FsOowW+0T$<8Cq&W;_h%|4I zO(7LsYCsyoRqYbvPoP?AFtoSCAX07xA1JBUx24OO(+X=xBU%b_1EmNC?V%NFDA=I?qSlv>gh&xYDH6 zMU&Nrp^j!W`TZJa$!Bm1DJBx+RGa0(b<#XYYOichCnP$mwU27M5g8rT+AmfzHguq< z);>mMtfDl=-MZ!Iy%s`U!LYUb31tJNZ0Of_ZrA_q-zf- zS#_XmuT~iy=-O+uW2mD8U3QVZ4tM@Pkt?F8*4`&OXO~>GmLpv|U3$sc zCbzFeq)Y!(yJa^0e_^L#bG zi9;KeX=$EKnYJp^+FVHN+Nn%i^Ij^+Q`+x~NP~vjvIJ zO^~j7n@gyqyUGkP@1RT%m6>SvpmrL2s$8vk3*~yL%mVWm(e+lDrT8cgGJRC$F4IoD z%T(qO^9`y~t}-u~Kap^KRpyBK7?t!>neVd7z@R@#Bh0LGQNMzYJD6EZP@{1GW%`;~ z$B{Y54I>|6X8ke(w^QuJ=#DZC_Xg~9LF1{wK^w#MKD9H*-iF));cbsnTa(psad!Y_ z+boZL9lzW`%mRiVc|gkKbqaV4Y}r@%&!eK+6skP!m<7mIWRI3cO#Z^v;7HUFO+ zqtoMHXg=%uGcb?6g#BR4>2T@dv23#7XHa5$lZ;ce!p4Kw2h+@YhhSo2h%0gEzQsn= za{mTb`w|L}pE1W_OQxRhVg`y!3qw47`$ku;`H;-p=;}~}=*W$v>Q=0O|e~6gWRXu7@|zB--t^d^wmiZzB)3d(>%py8Q2)EFA4u%@vx9hC(2NpW%yIub?!pyHjTN6mJ8h1hvL@(-AeVlPBHc@Y~>$E1&H*DnL#4q z0^h>Y5_NV6AEczhZDR-~oh?x*WoA?;DV8>7j%K1L6FKjOn2(vtuh^GuTX%r*uVxU#BJ1~K-$lR7CpesZHOz7UQdF1@6{z>M2*7)DdVgV{kBw=%{|hcauvBJJ5pfzgH6|icp;m7YN)%kk@|z{ z>gvRI7WOydw+_Gi@Uxl4ww$b9I5O2{7hwa*w)f!3v7a`tVdJDrNUksF=p=1^rHvEH zb>fyTk1c;P@<{d;rnB=&r|T`JGwI9{pE!#)I8)PyxeGF-cd)y3I?<$yLSn4LPl=LA z|Av@q^LwK7q!vjE7fInF0bC@C%h?H1)Xzk+Tr(Pq+c1AlciQ&UUG(=iq{>$4TzM5XM}2X%CS< zgNpyB0$MBqJ5z1`w@|k=38mywTF|28LzEM@r!MU0zS<>U-{vlzK&{e){nqH8p$5-Z zYEf-y;BC}-I}N;@#@vxU=DonZ<5nXz>OOa_{v+sg&g)R+F!+6ipBm8iFB5mQQQS$t z%C>Y9#NF|4!djqhM|%>Wgf{(XL)y2~39@YzHjeSwI4SF(-a63ld~KZ$>bRo{B`#+X zUFI< z?D_vRLsI11wbP)XJPXH4JNUp9BvG4YNz{aC8NpB(5eQBp-gZW)!O8dp={G>rV7Wp54+^pN>MtH)OG_JTgQq~%{v!S^J+tVvC*@}HtM8Z z`O2Nrl$$HXAk`15Z1v;x$wA{xnx?TPEpNr|A^i5@ryA+D0Y|3VH1|e2%3A2_ z?aEp*iH)9KlEhz48q2{^cIWsk&LgcrRKTqU|J_q$JBcR?=57%MeWYDer zpfJ_ufA>mth(_tOrCJTHnommmY9Uqg&e_HAIBegxwx!lw?mp<2_5DO?1)4SPKx@># zw&q)?ZM7jLHf7Q@-Zp$X)MLB+ESr3$pJi|Q`dLdfa+QTOA>MQoi&Ar(=NIq*pU56Ufg5uut1>&wYG!<-W$)l-Ye-{O( zt*_LM<1=7tJoO@W0$B%*u?oBNLg(xb0UUk60m#3T>YRY3~4>CN;RLF)h)Ld>3yl8|3S$*cE;H8&R zWn9i~=tA&3TdLgW4(s*w^e&J|TRzN+f2dncx@ubmex}+qi?0?AWzXbrRPbS^`Q%cb zNckUv%hw%dnVKmBiHs!f`R&4M*YD9ZVhTXT^lZYpq-G;Wg9tz5LT zCj_CZ#HqyN?lvxYQ4dji6-o`#m^J@s5YG@J<9-rDZPXm3#&yI=^UXm+c$#xkic^jR z=Z&eoJ;YJlV6Qh?UF}U6-q90kV!no2quv(|NBxG^U+W7+jCdmEuWvBCUVmb4L(p60 zRb}zoXe?2ctd`}|L~)sS^f)gv-YQ=_XoN$N;IL$Mbueaxqmh~twMjDu>`nNp!a+zj&KnE*0^VRGV1y$6a550| zq6UfVk0fGY8JZ-9^_<`fN0RlBI~fD7aI!w4YWkyrpnn$n7YzrftMOn$K0HmF*NS@P zOBji0!WW(t3M6V}_dkiE#!%cF56ufgkYG4qOe6_L_!2%y77GSr!8rBQfRu?~jOA05 zUiuok*9)op^*^V?>aUVub}W<#dK(fkL#eH)kd#6CO+*8RYI2q@Z1e&E4XBE7-z;dH zluBB!GbUbn=}7PBu@fOn*jE$pFNb->IgL%~p%%OivEVE{a)eVgHMZltm80?5*gz0p z-&SlUOuTIL*o)A7AQ(e6ZxX`%;cU=WhojI66zH8zN{JiZdS9$A7>gUeM6{YVA;aok z30mrg+C2U=KDvw4Gbke-_4lvv#^Zipq*|`^ijr*aEH$RqKs@OcJ^ECu!LBxfa}qJ1 zKcUrMH8&BAW3&@q(ux|Zco3E-&FP|8)=d^&##`Dp;t}RRf@p1%DBffw84m{fTL%>o zbV9PB0hS4Vfh4S&1o!#tk_}4DvfFe~(%3Z6;SiJs!_(7&SchPE0Wt=EFdSwhZ*EhM z)aVIH7{jX!ONo=fcveRnutmEOKg>K72_?MMzFARa8valsgwE=`{N^e#IIAXzO0$e= z?BlZcR8iw16*SD1%cqJSqBdF&K|(Q^b4s*#R{O)zxLnrKQz*ZiD!R79p!>p!P<_xy z)O%~A$(WorMHKXdKB3G|y>7fJ8m*&&jT6zlXhac*BGplYYQ_^jsQQ*EqVqYbT7>F> zus#~0-Q1ur2F=t*$v&Bp8l&166^G)1ctY-;BHCwD9e5F{6Y$NI|C}PakFaXQ)nxZJ z_!6~>HwZAXB7tU>s8&-CtE(pF)mE2g6Q{DP#FX>AUcz9sAcS=odcrjItU>8K9Iu5X zSdAJDq^+Rbbd@O2P<;#5`~30SCt>7$u^M=eq%|w+j7V^{*B1_92EzLF{xq2(QzBaD zjT!!M&=-LXS){=^4L)>3WuYcmks5EScqnli3CA_p2+mCU!f`lCcsJh!Zi#ZCNKF$v z@~Ga3kH#}v7mToo)Gez8H4r)jgVC_65tlDtDGD;1XoGP%08?i)X<5^&t=I2s@WBe_ zY7Ht3UDle@ba4kUj2bK3i0eA;}^>WcX(XD&HOADYec6c%dbNFKvGdLPE z>Vx&lUl{1s9NnuY=ZRhe$TvmF^K#b>tV%KPRR&Ae9P?wY)S`VXBeO9>pfLaK^FF=EL` z1XG08;ULy0XhhEnd1@xkS`u^AV528gkcdJ}@rE$G3k1jLg=Pg&G)IRTm{wkNrUpL9 z>kR~Fp^=C$5{-w0LEIe?4M%5VxxgGwh7+VWat>-X`4gDA-kKPw{z%PS0_hdkKxmL| z%xm>g%bg5iaZGq)XoCf7h+=W|#^+*r42QjOiilvishGG0^PnDK3vy%P;xbYfx^Eyd zNnnjsauX}1KZb1^$&+O3j)lz+tr0ZW9siZ-Eq1WsUoATILHg1A_X z8ltpl>qSc`4i3NzE`h!VVy0l79Gd0HYpoQn7DfmV!I0I-3lpNfoSG0_@&Hlq$S1>? z{7@T=852x4CPZ#4a;CG5N=T#>2H%mQN(nzK8q&p#D$Hgz{+J$EKYmGwAwy?*Bjng2 zJC?FwsHT>t6jTYF`lAu04%kR6p$D8CIK^SQ7i3UzIXx-*_Jw3HQ*B~e1xj{sX-Mkn zMADHS6SHU~k!zEpmm9TwWV8E{VqI4CylU`3W8rX624;y#?pj~mOD3Q3tLPwKpC!i1 znKMOkUX7O~A85V7fbtRXq~9Nm$7NjHqSZ<#Vao(LSI!TvLbdmji zq9BJ>g&GVpxW#Lsl(!qTZrLo(lM7&a7w8p;CSXIT0md1xO(p`-*%5D| zHVA{$Yb>Hm%+mUXa8L;gbEP<))VKR*(LU4i!X(#ko5gVX$7%>?wO5^t_~nK7h~ga9 zRU#Qj->ai?>OCUA9lR`}>FOw*Uci~dokb&YnY>5bRz%&SdDi4Qle<6us|TkuPW5ExKjm{KOv%HIQcI(!0e>x!&bzFU?J&ofBas=31LgqD+uj zO0h#w(0FN+8b@g@j#Qx)lz@{|9XEx2n99^9OcJxUmevntu84<&JxqAMlH_ zWJ{+fSB}W>w3ZbC(O)hMpzkl+5xegRh|<)r0nx+!15^t4AE47WJ?XR;AXYd_!Xicr zQk=c@aRV#8I+m^P5`E>M4dM#9VFON*Uf&?b=MNhq7`Vn9!2n{=i^yw#an zEl%Yz3yqmcxCs>+$GjNpWa{EtG0e=Sg_p8C^!J9uMtS)RFkZu z3^nqwLM*Qsclk!W=q9rxVsiFy-Jzken$a}D{}K^@>BAPHhP5V0F(yR~-l~`{f=7VW z(ucr4sLzb$YmK6R7IlYAo)%Ww!s98Hofe7ZEq$|mp)g%K;6+RBTm;Yj<05fECKej9 zdaSo`dGce(SlLrgTrak`GHBt)nQ>h(kP0pl*^Vr$ zmlPzVVz-J?n_RU_)RmGnw7k(`rcM|TxWF@UzYsMBWY6VdT59QXVVbGGufX-X>;&cl ztPIvhHBzhpCg#~w<#!0&8aVV$@u$?LJH;PuX9x!FsS~RO{+{1^wHPf67m8ZBd?Bpn zi-idGscq_pytGji=8zYGXC$SO4a*gcqE!BSjp!#YTq_pKf36i1TTYlbbmHX`yu*fG z<{dunl5v-%My(UynVrh%EVmrzsF+3N4Y4Q|AWYy$O}W3k64xw}^)hlVR=V@H3V+}7 zWIR^Rmxizqs7plU>P#IMI0C`yvRVX8u_P`o&}ERaT6q&y{nu8Jk3}Arnrh>KYqKo-eo8^4|1Ri`Ozq?P2?|!18<5T?Uu;UVSZ?V?ETxlgodMX@GWQY&$IZGWwN^Ip-l zSRa?eYche=eJ1+gK2emT=*#tLh`!0-eWLTZ79p03V3X295ky3WwZM>6@QV;i$4<18 zz?-c{!;K^eRmBj6A}p9pw~LlVYO?4R$!a=O&fWLR7ylt9w{L^%yL6icCCByc7w0){&0CWvSN}ugNyq(| zgU5G>9ek5s95#xYIxjo$sHc8xhG zbQs_MM^T=(Y5!mFj=)VL&kzH&u5cM%r80%*)0<3G-oghleO4O%r5bNETBa2Qn2{rm z(Okw$7`F!FM&Q5KfffG+zlZq@nn!}xQDvPT<$@uqpc&uK_=q(8ea5FVZs2A~N?%*J z^^zCH?Q-bDu)tisYoT_&V*FL2OmC%D+Y!YA?-vJ7V`%+dI2}wW4PiV`h6AK|YK!;Y zGX7j&jlaS40oBa%Y=<22uxQ)32&L5AkUP&DC3=vT@DXYF_n8_W#ke&y)-nC1Y4rCq zKAmw(x%4^$@NYDxuRXJ2db0&J97x0IUKYY@)9~Yrhtu#M8E;6#9r%Zc_$*R59zC!m zYG)N})B;&OYsL7Dj9b>xU9Nvryy!*`qF+Bx<99Ki+ciGS7}=-`MsdMru5j~p8sC6t@hCmT zcsc#+i4<2`+&!%O@imG`-oNtg%~m%_J=A{stDbTgH~GCt^rALOC5)Gy(9I0huu;Ky z3;JsriSKza=uamD~OjopQ=@>~a&AO|*mixAnSy}gWTliMShw!c47H%kyDtGS^!n|JY z+a<`2_qp>3iQsnfXffp$(<%s;ONuHWH%+Mz zaN_5fCvDG&S&aopHQrP2j61pB%>}x``P|P=opn89l%7A9*WSVO=}#{{#dy!pHG|{K z=MBbv&nuv}VcjeLQ;BZCdhElR+ef&<@-a5qd5`GR_}ed91Fv$AI%1_H4Wz$4`&`CX zSLvqLaStzMJpFA~Qy9Pf7EQl`>FWr$Wg8vnT>yC80|F7h_x=}-Fpi}BGzbT{dtQA#GB38dcQQ3JW;S*YVKx_cPOiiHL; zLHaYzV}R4Z?;fcoVtz(F(@*+E^O>T!VclT-)xT-rPR5ropAu~da^POkqoV!Qx^#r* zVZ6(ge_X49Q#@8*Fuw8&L$25hPjoXy=t$Od5-qfpm)6R6_ljx#zhqZtO{Z#cMKoO>|78aSzUh+O}?$Q}LLbGq6tE`DAW=NaqH*4po`Ya8_b z2I|lH5>0P1{Y@Yvb|un$LFD?=Km7Y|u9p7dy`mhp4s`<>P6@b~zKqYfO#?45KAiEs zt4%ro1u?R~dLOU#I^H!*(5r`h_XW7A)KxNLpC}uX{*vH!2(_snbBc67&f|WRF`oYT z_)x}gE3wJz_F+}+^19r)PgEA{WHX%FT8p@k31=*lt@mR!{WYmM55|&3$!w(?PXB~W zA>*YF8Zy3LOl>SK)sk7~WQ`yo4fp=jne$;8R}5{|4Lqc)8EY8-VT1+_=xW9zj34`l zrXQwv#$Lt)^h6e(i8J0}l^o=P^simnb9GPl=jsNmCvQGy`jZ1~a>a|7Gv98|oJ{t? z#ZVRL{?Oy{-4{jWnDiHd&*bt`KWous552#I@eLfPS`Kd`;{{`FvhF3gnC@xkUk91s zqVKdPUZD9IpE5p}o`FT$#<&v~7f8VKS88A!Yoayd*26D*882r1GtEclzASq5S8rQD zed}clmori8FLkZ2SsT+B7h7cPWl`3MH^Hk`Kg2>xX(N|g&zd}|VPhxb!H+e+7A(vz z#vhiNa0AotXMDj?4P4LodyM}@C=V-(UlBcQS)=5|ufQz@Khj*6F!8xvMc?f(fD(G2lq)&LM zsbqo!*}6kst~izP=iA%l`3J?wijj0}2DE@Hm$eBP>lmNTi_`#BipM}1Pk+_iD~x~tA1(Q(th%F&Kk<$R zx+&FQ96v`vD_fp%kL>q`$SoX9FK$D!rXYR9hKv|bFiQU$B5B7>rt;7mqR++2PqZjj zu(+BjKS>K4wlnT#`iQP(JjOWQzjoO_MWuc7F;m|8Png@SM@{)64lYjr48TPNT9)(| zbzjMN`Zt*pz{wgesg=Xt#3|K))mo{CS%PC+Fa0wRCmH_)r&O=M2`6lPq-#9Q6>|_c zlTu=zXk`vyB^NUO%r}~_8xLY{#s{oqfURl>RYc=L5!1 z=}RGP=~ALfpK<{n>Xj4T7Jd2;;gfx93c5S6Aw8m-uwK1c$oOmP<<7UUW_-RxGu)^J zGNyC+iQ6^)tlk;*jHkb4{TjyKdQ!Kuf@6g>j8Az-E1#aUqVzc9uMJl8Z4ACPW$fjG zya_V)j+kYey+(fi4!pM*B@5m~7~A7kQ;vC8jBH%LN{f1{W@tQ7qU%Rm;$0Lki z^{Haq+xUVTILHO>AJaf19qEs^yEzHvj#`EGDpqKbjI-l_% zEA3hh8&@#i_BP#e51xQw##i=N40;>9q8SUgpl+<@JgKYZw3zW{;x-xo0A22wuL+{2 zCU}_%)}4~OKERCpb%`mz0HLj9t1LJI;Np}a#~dLyNf(Tf_yopSR;v4&{s{lwjHiF{ z{Yl2J<5SVOEWxXczrYr-gYjd)Y2}%&|F)4o9uYknKl(%q@uimD=+IdUadMsptnjEG z<99CBxD~PwVSMY`n$P{rXCmW*uNFMd_*BL-Pbm7<#uY5xTokl~bS3is4@Iu+$Vj>W zLtJ@WwO95$irHvA%vzzU;YEC1w46s-PMi~|G|0l&=zN0Nk70c2A&sA61GtLuFFQEo zV@KgQWx1}g2^R<`?O}qgJPmd$6fc!xJpENoUok$FO|?4<@Ehabe5e^%?#KhfqG_J1 z71(I3;0E5z&;@v~P$AYe*AlLf{;~D`jHiD(eI!npY1pj`LJsC%$@Knxn*SKk;YAX7 ziwX*;LSH`1vldG~SE!#WOFzby&BH(FvFOVTH*mcp^hg?#Rqr9Lcl-l+E$S7df8fJ; zmhR}IH_H7VBm5ooie}hPvoXe^T-hxz-qyc+)45*#>zbb4P(o=Yr`%XsXSeF zE!9=K@f_cP0i}U2Ni)Psrav%EGoY93P#VwpCo46dk2P$B7~kShdTBH+XA$Rf!8d%3 zoqdV1obj6XH0LLo(H6$LEYQFS#-FtKe54sC8GnxPMQ>?7QsHnchq)m88dDzn3@d0c zPA@V)$H7I%4S7Be`v3g7u9LDl2ZupQYWn(~TQ^b%oMNPv$>sULby>yG~I>9x9pz*FWd%KbeUi!C| z(Yo|GpK%|b2kc{YT+8@nv$O@x=Y}NX>EDUp!uY746#wDs!D+=y-|mu(;a)Pj_X^8H z+9OUtns1i4af)Z4sP-c;l%_gv2r;q~(ABF{k2 zqOY{qSR~Dk$c`$|Zf;a+Xh+WtCjNHXSBy&5Rr!0QS>m}6lXfWW_Q-2!H(WlAo$c2X z($>jyfhpzCPC&=XYq0ZtxkdZIU2mNG)qxdb<5T_n;kN diff --git a/src/builtins.c b/src/builtins.c new file mode 100644 index 0000000..84496e4 --- /dev/null +++ b/src/builtins.c @@ -0,0 +1,1444 @@ +/** + * builtins.c + * Implementation of all built-in shell commands + */ + +#include "builtins.h" +#include "common.h" +#include "diff_viewer.h" +#include "ncurses_diff_viewer.h" +#include "filters.h" +#include "fzf_native.h" +#include "git_integration.h" +#include "grep.h" +#include "persistent_history.h" +#include "structured_data.h" +#include "themes.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// History variables +HistoryEntry command_history[HISTORY_SIZE]; +int history_count = 0; +int history_index = 0; + +// String array of built-in command names +char *builtin_str[] = { + "cd", "help", "exit", "dir", "clear", + "mkdir", "rmdir", "del", "touch", "pwd", + "cat", "history", "copy", "move", "paste", + "ps", "news", "alias", "unalias", "aliases", + "bookmark", "bookmarks", "goto", "unbookmark", "focus_timer", + "weather", "grep", "grep-text", "ripgrep", "fzf", + "clip", "echo", "theme", "loc", "git_status", + "gg", "ls", "stats", "monitor", +}; + +// Array of function pointers to built-in command implementations +int (*builtin_func[])(char **) = { + &lsh_cd, &lsh_help, &lsh_exit, &lsh_dir, + &lsh_clear, &lsh_mkdir, &lsh_rmdir, &lsh_del, + &lsh_touch, &lsh_pwd, &lsh_cat, &lsh_history, + &lsh_copy, &lsh_move, &lsh_paste, &lsh_ps, + &lsh_news, &lsh_alias, &lsh_unalias, &lsh_aliases, + &lsh_bookmark, &lsh_bookmarks, &lsh_goto, &lsh_unbookmark, + &lsh_focus_timer, &lsh_weather, &lsh_grep, &lsh_actual_grep, + &lsh_ripgrep, &lsh_fzf_native, &lsh_clip, &lsh_echo, + &lsh_theme, &lsh_loc, &lsh_git_status, &lsh_gg, + lsh_dir, + &lsh_stats, &builtin_monitor, +}; + +/** + * Set the console text color + */ +void set_color(int color) { + switch (color) { + case 0: + printf(ANSI_COLOR_RESET); + break; + case 1: + printf(ANSI_COLOR_RED); + break; + case 2: + printf(ANSI_COLOR_GREEN); + break; + case 3: + printf(ANSI_COLOR_YELLOW); + break; + case 4: + printf(ANSI_COLOR_BLUE); + break; + case 5: + printf(ANSI_COLOR_MAGENTA); + break; + case 6: + printf(ANSI_COLOR_CYAN); + break; + case 7: + printf(ANSI_COLOR_WHITE); + break; + default: + printf(ANSI_COLOR_RESET); + } +} + +/** + * Reset console color to default + */ +void reset_color() { printf(ANSI_COLOR_RESET); } + +/** + * Get the number of built-in commands + */ +int lsh_num_builtins() { return sizeof(builtin_str) / sizeof(char *); } + +/** + * Add a command to the history + */ +void lsh_add_to_history(const char *command) { + // Don't add empty commands or duplicates of the last command + if (!command || *command == '\0' || + (history_count > 0 && + strcmp(command_history[history_index - 1].command, command) == 0)) { + return; + } + + // Free the oldest entry if we're overwriting it + if (history_count == HISTORY_SIZE) { + free(command_history[history_index].command); + } else { + history_count++; + } + + // Add the new command + command_history[history_index].command = strdup(command); + command_history[history_index].timestamp = time(NULL); + + // Update the index + history_index = (history_index + 1) % HISTORY_SIZE; +} + +/** + * Built-in command: cd + * Changes the current directory + */ +int lsh_cd(char **args) { + if (args[1] == NULL) { + // No argument provided, change to home directory + char *home_dir = getenv("HOME"); + if (home_dir == NULL) { + fprintf(stderr, "lsh: HOME environment variable not set\n"); + return 1; + } + if (chdir(home_dir) != 0) { + perror("lsh: cd"); + } + } else { + if (chdir(args[1]) != 0) { + perror("lsh: cd"); + } + } + return 1; +} + +/** + * Built-in command: help + * Displays help information + */ +int lsh_help(char **args) { + if (args[1] != NULL) { + // Command-specific help + if (strcmp(args[1], "cd") == 0) { + printf("cd - Change directory\n"); + printf("Usage: cd [directory]\n"); + printf(" cd - change to home directory\n"); + printf(" cd - change to specified directory\n"); + } else if (strcmp(args[1], "cat") == 0) { + printf("cat - Display file contents\n"); + printf("Usage: cat \n"); + printf(" Displays the contents of the specified file\n"); + } else if (strcmp(args[1], "grep") == 0) { + printf("grep - Search for text patterns in files\n"); + printf("Usage: grep \n"); + printf(" Searches for the specified pattern in the given file\n"); + } else if (strcmp(args[1], "gg") == 0) { + printf("gg - Git command shortcuts\n"); + printf("Usage: gg \n"); + printf("Available commands:\n"); + printf(" s - status (enhanced git status)\n"); + printf(" c - commit\n"); + printf(" p - pull\n"); + printf(" ps - push\n"); + printf(" a - add .\n"); + printf(" l - log\n"); + printf(" d - diff\n"); + printf(" dd - ncurses diff viewer\n"); + printf(" b - branch\n"); + printf(" ch - checkout\n"); + printf(" o - open repository in browser\n"); + } else if (strcmp(args[1], "weather") == 0) { + printf("weather - Shows weather information\n"); + printf("Usage:\n"); + printf(" weather - shows weather for your current location\n"); + printf(" weather - shows weather for a specific city\n"); + printf("Examples:\n"); + printf(" weather\n"); + printf(" weather London\n"); + printf(" weather New York\n"); + } else if (strcmp(args[1], "dir") == 0 || strcmp(args[1], "ls") == 0) { + printf("dir/ls - List directory contents\n"); + printf("Usage: dir\n"); + printf(" Lists files and directories in the current directory\n"); + printf(" Shows file sizes, types, and modification dates in a table format\n"); + } else if (strcmp(args[1], "mkdir") == 0) { + printf("mkdir - Create directory\n"); + printf("Usage: mkdir \n"); + printf(" Creates a new directory with the specified name\n"); + } else if (strcmp(args[1], "rmdir") == 0) { + printf("rmdir - Remove directory\n"); + printf("Usage: rmdir \n"); + printf(" Removes an empty directory\n"); + } else if (strcmp(args[1], "del") == 0) { + printf("del - Delete file\n"); + printf("Usage: del \n"); + printf(" Deletes the specified file\n"); + } else if (strcmp(args[1], "touch") == 0) { + printf("touch - Create file or update timestamp\n"); + printf("Usage: touch \n"); + printf(" Creates a new empty file or updates the timestamp of an existing file\n"); + } else if (strcmp(args[1], "pwd") == 0) { + printf("pwd - Print working directory\n"); + printf("Usage: pwd\n"); + printf(" Displays the current working directory path\n"); + } else if (strcmp(args[1], "history") == 0) { + printf("history - Show command history\n"); + printf("Usage: history\n"); + printf(" Displays the list of previously executed commands with timestamps\n"); + } else if (strcmp(args[1], "copy") == 0) { + printf("copy - Copy file\n"); + printf("Usage: copy \n"); + printf(" Copies a file from source to destination\n"); + } else if (strcmp(args[1], "move") == 0) { + printf("move - Move/rename file\n"); + printf("Usage: move \n"); + printf(" Moves or renames a file from source to destination\n"); + } else if (strcmp(args[1], "clear") == 0) { + printf("clear - Clear screen\n"); + printf("Usage: clear\n"); + printf(" Clears the terminal screen\n"); + } else if (strcmp(args[1], "echo") == 0) { + printf("echo - Display text\n"); + printf("Usage: echo [text...]\n"); + printf(" Displays the specified text to the terminal\n"); + } else if (strcmp(args[1], "alias") == 0) { + printf("alias - Create command alias\n"); + printf("Usage: alias \n"); + printf(" Creates a shortcut alias for a command\n"); + } else if (strcmp(args[1], "bookmark") == 0) { + printf("bookmark - Bookmark current directory\n"); + printf("Usage: bookmark \n"); + printf(" Saves the current directory with a bookmark name\n"); + } else if (strcmp(args[1], "goto") == 0) { + printf("goto - Go to bookmarked directory\n"); + printf("Usage: goto \n"); + printf(" Changes to a previously bookmarked directory\n"); + } else if (strcmp(args[1], "theme") == 0) { + printf("theme - Change shell theme\n"); + printf("Usage: theme \n"); + printf(" Changes the visual appearance of the shell\n"); + } else if (strcmp(args[1], "loc") == 0) { + printf("loc - Count lines of code\n"); + printf("Usage: loc \n"); + printf(" Counts total lines, code lines, comments, and blank lines in a file\n"); + } else if (strcmp(args[1], "monitor") == 0) { + printf("monitor - System monitor\n"); + printf("Usage: monitor\n"); + printf(" Displays real-time system information including CPU, memory, and disk usage\n"); + } else if (strcmp(args[1], "stats") == 0) { + printf("stats - Command usage statistics\n"); + printf("Usage: stats\n"); + printf(" Shows statistics about your most frequently used commands\n"); + } else if (strcmp(args[1], "help") == 0) { + printf("help - Display help information\n"); + printf("Usage:\n"); + printf(" help - show all available commands\n"); + printf(" help - show help for a specific command\n"); + } else if (strcmp(args[1], "exit") == 0) { + printf("exit - Exit the shell\n"); + printf("Usage: exit\n"); + printf(" Terminates the shell session\n"); + } else if (strcmp(args[1], "ps") == 0) { + printf("ps - List running processes\n"); + printf("Usage: ps\n"); + printf(" Displays a list of all running processes on the system\n"); + } else if (strcmp(args[1], "news") == 0) { + printf("news - Show latest repository updates\n"); + printf("Usage: news\n"); + printf(" Fetches and displays the latest commit information from the GitHub repository\n"); + } else if (strcmp(args[1], "unalias") == 0) { + printf("unalias - Remove command alias\n"); + printf("Usage: unalias \n"); + printf(" Removes a previously created command alias\n"); + } else if (strcmp(args[1], "aliases") == 0) { + printf("aliases - List all aliases\n"); + printf("Usage: aliases\n"); + printf(" Displays all currently defined command aliases\n"); + } else if (strcmp(args[1], "bookmarks") == 0) { + printf("bookmarks - List all bookmarks\n"); + printf("Usage: bookmarks\n"); + printf(" Displays all saved directory bookmarks\n"); + } else if (strcmp(args[1], "unbookmark") == 0) { + printf("unbookmark - Remove bookmark\n"); + printf("Usage: unbookmark \n"); + printf(" Removes a previously saved directory bookmark\n"); + } else if (strcmp(args[1], "focus_timer") == 0) { + printf("focus_timer - Productivity timer\n"); + printf("Usage: focus_timer [minutes]\n"); + printf(" Starts a focus/pomodoro timer for productivity sessions\n"); + } else if (strcmp(args[1], "grep-text") == 0) { + printf("grep-text - Alternative text search\n"); + printf("Usage: grep-text \n"); + printf(" Alternative implementation for searching text patterns in files\n"); + } else if (strcmp(args[1], "ripgrep") == 0) { + printf("ripgrep - Fast text search\n"); + printf("Usage: ripgrep [path]\n"); + printf(" Fast recursive text search using ripgrep-like functionality\n"); + } else if (strcmp(args[1], "fzf") == 0) { + printf("fzf - Fuzzy file finder\n"); + printf("Usage: fzf\n"); + printf(" Interactive fuzzy file finder for quick file selection\n"); + } else if (strcmp(args[1], "clip") == 0) { + printf("clip - Clipboard operations\n"); + printf("Usage: clip\n"); + printf(" Clipboard functionality (currently not implemented)\n"); + } else if (strcmp(args[1], "git_status") == 0) { + printf("git_status - Git repository status\n"); + printf("Usage: git_status\n"); + printf(" Shows the current Git repository status\n"); + } else if (strcmp(args[1], "paste") == 0) { + printf("paste - Paste clipboard content\n"); + printf("Usage: paste\n"); + printf(" Paste functionality (currently not implemented)\n"); + } else { + printf("No help available for '%s'\n", args[1]); + printf("Type 'help' to see all available commands\n"); + } + return 1; + } + + // General help - show all commands + printf("LSH Shell - A lightweight shell with modern features\n"); + printf("Type a command and press Enter to execute it.\n"); + printf("The following built-in commands are available:\n\n"); + + // Sort commands alphabetically + char *sorted_commands[lsh_num_builtins()]; + for (int i = 0; i < lsh_num_builtins(); i++) { + sorted_commands[i] = builtin_str[i]; + } + + for (int i = 0; i < lsh_num_builtins() - 1; i++) { + for (int j = i + 1; j < lsh_num_builtins(); j++) { + if (strcmp(sorted_commands[i], sorted_commands[j]) > 0) { + char *temp = sorted_commands[i]; + sorted_commands[i] = sorted_commands[j]; + sorted_commands[j] = temp; + } + } + } + + // Print commands in columns + int columns = 4; + int rows = (lsh_num_builtins() + columns - 1) / columns; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + int index = j * rows + i; + if (index < lsh_num_builtins()) { + printf("%-15s", sorted_commands[index]); + } + } + printf("\n"); + } + + printf( + "\nFor more information on specific commands, type 'help '\n"); + printf("Use tab completion for commands and file paths\n"); + printf("Use arrow keys to navigate command history\n"); + printf("Type a partial command followed by '?' for suggestions\n"); + + return 1; +} + +/** + * Built-in command: exit + * Exits the shell + */ +int lsh_exit(char **args) { return 0; } + +/** + * Built-in command: dir + * Lists files in the current directory + */ +int lsh_dir(char **args) { + DIR *dir; + struct dirent *entry; + struct stat file_stat; + char cwd[PATH_MAX]; + char file_path[PATH_MAX]; + int detailed = 0; + + // Create table headers + char *headers[] = {"Name", "Size", "Type", "Modified"}; + TableData *table = create_table(headers, 4); + if (!table) { + fprintf(stderr, "lsh: failed to create table\n"); + return 1; + } + + if (getcwd(cwd, sizeof(cwd)) == NULL) { + perror("lsh: getcwd"); + free_table(table); + return 1; + } + + dir = opendir(cwd); + if (dir == NULL) { + perror("lsh: opendir"); + free_table(table); + return 1; + } + + // Collect all entries + while ((entry = readdir(dir)) != NULL) { + // Skip . and .. entries + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { + continue; + } + + snprintf(file_path, sizeof(file_path), "%s/%s", cwd, entry->d_name); + if (stat(file_path, &file_stat) == 0) { + // Create a new row + DataValue *row = (DataValue *)malloc(4 * sizeof(DataValue)); + if (!row) { + fprintf(stderr, "lsh: allocation error\n"); + continue; + } + + // Name column + row[0].type = TYPE_STRING; + row[0].value.str_val = strdup(entry->d_name); + row[0].is_highlighted = + S_ISDIR(file_stat.st_mode); // Highlight directories + + // Size column + row[1].type = TYPE_SIZE; + row[1].value.str_val = malloc(32); + if (S_ISDIR(file_stat.st_mode)) { + strcpy(row[1].value.str_val, ""); + } else if (file_stat.st_size < 1024) { + snprintf(row[1].value.str_val, 32, "%d B", (int)file_stat.st_size); + } else if (file_stat.st_size < 1024 * 1024) { + snprintf(row[1].value.str_val, 32, "%.1f KB", + file_stat.st_size / 1024.0); + } else { + snprintf(row[1].value.str_val, 32, "%.1f MB", + file_stat.st_size / (1024.0 * 1024.0)); + } + row[1].is_highlighted = 0; + + // Type column + row[2].type = TYPE_STRING; + if (S_ISDIR(file_stat.st_mode)) { + row[2].value.str_val = strdup("Directory"); + } else if (S_ISREG(file_stat.st_mode)) { + // Try to determine file type by extension + char *ext = strrchr(entry->d_name, '.'); + if (ext != NULL) { + ext++; // Skip the dot + if (strcasecmp(ext, "c") == 0 || strcasecmp(ext, "cpp") == 0 || + strcasecmp(ext, "h") == 0 || strcasecmp(ext, "hpp") == 0) { + row[2].value.str_val = strdup("Source"); + } else if (strcasecmp(ext, "exe") == 0 || + strcasecmp(ext, "bat") == 0 || + strcasecmp(ext, "sh") == 0 || + strcasecmp(ext, "com") == 0) { + row[2].value.str_val = strdup("Executable"); + } else if (strcasecmp(ext, "txt") == 0 || + strcasecmp(ext, "md") == 0 || + strcasecmp(ext, "log") == 0) { + row[2].value.str_val = strdup("Text"); + } else if (strcasecmp(ext, "jpg") == 0 || + strcasecmp(ext, "png") == 0 || + strcasecmp(ext, "gif") == 0 || + strcasecmp(ext, "bmp") == 0) { + row[2].value.str_val = strdup("Image"); + } else { + row[2].value.str_val = strdup("File"); + } + } else { + row[2].value.str_val = strdup("File"); + } + } else { + row[2].value.str_val = strdup("Special"); + } + row[2].is_highlighted = 0; + + // Modified date column + row[3].type = TYPE_STRING; + row[3].value.str_val = malloc(32); + struct tm *tm_info = localtime(&file_stat.st_mtime); + strftime(row[3].value.str_val, 32, "%Y-%m-%d %H:%M", tm_info); + row[3].is_highlighted = 0; + + // Add row to table + add_table_row(table, row); + } + } + + closedir(dir); + + // Print the table + print_table(table); + + // Free the table + free_table(table); + + return 1; +} + +/** + * Built-in command: clear + * Clears the screen + */ +int lsh_clear(char **args) { + printf(ANSI_CLEAR_SCREEN); + printf(ANSI_CURSOR_HOME); + return 1; +} + +/** + * Built-in command: mkdir + * Creates a new directory + */ +int lsh_mkdir(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"mkdir\"\n"); + } else { + if (mkdir(args[1], 0755) != 0) { + perror("lsh: mkdir"); + } + } + return 1; +} + +/** + * Built-in command: rmdir + * Removes a directory + */ +int lsh_rmdir(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"rmdir\"\n"); + } else { + if (rmdir(args[1]) != 0) { + perror("lsh: rmdir"); + } + } + return 1; +} + +/** + * Built-in command: del + * Deletes a file + */ +int lsh_del(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"del\"\n"); + } else { + if (unlink(args[1]) != 0) { + perror("lsh: del"); + } + } + return 1; +} + +/** + * Built-in command: touch + * Creates a new file or updates timestamp of existing file + */ +int lsh_touch(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"touch\"\n"); + } else { + int fd = open(args[1], O_CREAT | O_WRONLY | O_APPEND, 0644); + if (fd == -1) { + perror("lsh: touch"); + } else { + close(fd); + } + } + return 1; +} + +/** + * Built-in command: pwd + * Prints the current working directory + */ +int lsh_pwd(char **args) { + char cwd[PATH_MAX]; + if (getcwd(cwd, sizeof(cwd)) != NULL) { + printf("%s\n", cwd); + } else { + perror("lsh: getcwd"); + } + return 1; +} + +/** + * Built-in command: cat + * Displays the contents of a file + */ +int lsh_cat(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"cat\"\n"); + return 1; + } + + FILE *fp = fopen(args[1], "r"); + if (fp == NULL) { + perror("lsh: cat"); + return 1; + } + + char buffer[1024]; + while (fgets(buffer, sizeof(buffer), fp) != NULL) { + printf("%s", buffer); + } + + fclose(fp); + return 1; +} + +/** + * Built-in command: history + * Displays command history + */ +int lsh_history(char **args) { + char time_str[20]; + struct tm *tm_info; + + printf("Command History:\n"); + printf("----------------\n"); + + // Display history in chronological order + for (int i = 0; i < history_count; i++) { + int idx = (history_index - history_count + i + HISTORY_SIZE) % HISTORY_SIZE; + tm_info = localtime(&command_history[idx].timestamp); + strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", tm_info); + printf("%3d: [%s] %s\n", i + 1, time_str, command_history[idx].command); + } + + return 1; +} + +/** + * Built-in command: copy + * Copies a file + */ +int lsh_copy(char **args) { + if (args[1] == NULL || args[2] == NULL) { + fprintf(stderr, + "lsh: expected source and destination arguments to \"copy\"\n"); + return 1; + } + + FILE *source = fopen(args[1], "rb"); + if (source == NULL) { + perror("lsh: copy (source)"); + return 1; + } + + FILE *dest = fopen(args[2], "wb"); + if (dest == NULL) { + fclose(source); + perror("lsh: copy (destination)"); + return 1; + } + + char buffer[4096]; + size_t bytes_read; + while ((bytes_read = fread(buffer, 1, sizeof(buffer), source)) > 0) { + fwrite(buffer, 1, bytes_read, dest); + } + + fclose(source); + fclose(dest); + printf("Copied %s to %s\n", args[1], args[2]); + return 1; +} + +/** + * Built-in command: move + * Moves a file + */ +int lsh_move(char **args) { + if (args[1] == NULL || args[2] == NULL) { + fprintf(stderr, + "lsh: expected source and destination arguments to \"move\"\n"); + return 1; + } + + if (rename(args[1], args[2]) != 0) { + perror("lsh: move"); + return 1; + } + + printf("Moved %s to %s\n", args[1], args[2]); + return 1; +} + +/** + * Built-in command: paste + * Placeholder for paste functionality + */ +int lsh_paste(char **args) { + printf("Paste functionality not implemented yet\n"); + return 1; +} + +/** + * Built-in command: ps + * Lists running processes + */ +int lsh_ps(char **args) { + FILE *fp = popen("ps -ef", "r"); + if (fp == NULL) { + perror("lsh: ps"); + return 1; + } + + char buffer[1024]; + while (fgets(buffer, sizeof(buffer), fp) != NULL) { + printf("%s", buffer); + } + + pclose(fp); + return 1; +} + +char *unescape_json_string(const char *str) { + if (!str) + return NULL; + + size_t len = strlen(str); + char *result = malloc(len + 1); + if (!result) + return NULL; + + size_t j = 0; + for (size_t i = 0; i < len; i++) { + if (str[i] == '\\' && i + 1 < len) { + switch (str[i + 1]) { + case 'n': + result[j++] = '\n'; + i++; // Skip the next character + break; + case 't': + result[j++] = '\t'; + i++; + break; + case 'r': + result[j++] = '\r'; + i++; + break; + case '\\': + result[j++] = '\\'; + i++; + break; + case '"': + result[j++] = '"'; + i++; + break; + default: + // Keep the backslash if it's not a recognized escape sequence + result[j++] = str[i]; + } + } else { + result[j++] = str[i]; + } + } + result[j] = '\0'; + + return result; +} + +/** + * Built-in command: news + * Displays information about the last push to the shelltest GitHub repository + */ +int lsh_news(char **args) { + printf("Fetching latest updates from shelltestLinux repository...\n\n"); + + // Use GitHub API to get the latest commit from the main branch + const char *api_url = + "https://api.github.com/repos/marcusDenslow/shelltestLinux/commits/main"; + char command[1024]; + snprintf(command, sizeof(command), + "curl -s -H \"Accept: application/vnd.github.v3+json\" \"%s\"", + api_url); + + FILE *fp = popen(command, "r"); + if (!fp) { + fprintf( + stderr, + "Failed to fetch updates. Please check your internet connection.\n"); + return 1; + } + + // Read the entire response + char response[8192] = ""; + size_t total_read = 0; + size_t chunk_size; + + while ((chunk_size = fread(response + total_read, 1, + sizeof(response) - total_read - 1, fp)) > 0) { + total_read += chunk_size; + if (total_read >= sizeof(response) - 1) + break; + } + response[total_read] = '\0'; + pclose(fp); + + // Check if we got an error response + if (strstr(response, "\"message\":") && + strstr(response, "\"documentation_url\":")) { + fprintf(stderr, "Failed to fetch updates from GitHub. The repository might " + "be private or there might be a connection issue.\n"); + return 1; + } + + // Extract commit information from JSON + char *sha = extract_json_string(response, "sha"); + char *message_raw = extract_json_string(response, "message"); + char *message = NULL; + if (message_raw) { + message = unescape_json_string(message_raw); + free(message_raw); + } + + char *author_name = NULL; + char *author_email = NULL; + char *date = NULL; + + // Find author object + char *author_start = strstr(response, "\"author\":"); + if (author_start) { + author_name = extract_json_string(author_start, "name"); + author_email = extract_json_string(author_start, "email"); + date = extract_json_string(author_start, "date"); + } + + // Format the date if we have it + char formatted_date[64] = "Unknown date"; + if (date) { + // Parse the ISO date (e.g., "2024-01-20T15:30:45Z") + struct tm tm_info = {0}; + if (sscanf(date, "%d-%d-%dT%d:%d:%d", &tm_info.tm_year, &tm_info.tm_mon, + &tm_info.tm_mday, &tm_info.tm_hour, &tm_info.tm_min, + &tm_info.tm_sec) == 6) { + tm_info.tm_year -= 1900; // tm_year is years since 1900 + tm_info.tm_mon -= 1; // tm_mon is 0-based + + time_t commit_time = mktime(&tm_info); + time_t now = time(NULL); + double diff_seconds = difftime(now, commit_time); + + // Format as relative time + if (diff_seconds < 60) { + snprintf(formatted_date, sizeof(formatted_date), "just now"); + } else if (diff_seconds < 3600) { + int minutes = (int)(diff_seconds / 60); + snprintf(formatted_date, sizeof(formatted_date), "%d minute%s ago", + minutes, minutes == 1 ? "" : "s"); + } else if (diff_seconds < 86400) { + int hours = (int)(diff_seconds / 3600); + snprintf(formatted_date, sizeof(formatted_date), "%d hour%s ago", hours, + hours == 1 ? "" : "s"); + } else if (diff_seconds < 604800) { + int days = (int)(diff_seconds / 86400); + snprintf(formatted_date, sizeof(formatted_date), "%d day%s ago", days, + days == 1 ? "" : "s"); + } else { + // Format as absolute date + strftime(formatted_date, sizeof(formatted_date), "%Y-%m-%d %H:%M", + &tm_info); + } + } + } + + // Display the information + printf(ANSI_COLOR_CYAN "Latest Update - shelltestLinux\n" ANSI_COLOR_RESET); + printf("════════════════════════════════════════════════════════════\n\n"); + + if (sha && message) { + // Shorten SHA to first 7 characters + char short_sha[8] = ""; + strncpy(short_sha, sha, 7); + short_sha[7] = '\0'; + + printf(ANSI_COLOR_GREEN "Commit:" ANSI_COLOR_RESET " %s\n", short_sha); + printf(ANSI_COLOR_GREEN "Date:" ANSI_COLOR_RESET " %s\n", formatted_date); + + if (author_name) { + printf(ANSI_COLOR_GREEN "Author:" ANSI_COLOR_RESET " %s", author_name); + if (author_email) { + printf(" <%s>", author_email); + } + printf("\n"); + } + + printf("\n" ANSI_COLOR_YELLOW "Message:" ANSI_COLOR_RESET "\n"); + + // Split the message into title and description + char *first_newline = strchr(message, '\n'); + if (first_newline) { + // We have a title and description + *first_newline = '\0'; // Temporarily terminate the title + printf(" " ANSI_COLOR_CYAN "%s" ANSI_COLOR_RESET "\n\n", message); + + // Print the description + char *description = first_newline + 1; + // Skip any leading newlines in the description + while (*description == '\n') + description++; + + if (*description) { + printf(" %s\n", description); + } + } else { + // Just a title, no description + printf(" " ANSI_COLOR_CYAN "%s" ANSI_COLOR_RESET "\n", message); + } + + printf("\n────────────────────────────────────────────────────────────\n"); + printf("Repository: " ANSI_COLOR_CYAN + "https://github.com/marcusDenslow/shelltestLinux" ANSI_COLOR_RESET + "\n"); + printf("View commit: " + "https://github.com/marcusDenslow/shelltestLinux/commit/%s\n", + short_sha); + + } else { + fprintf(stderr, "Failed to parse update information. The GitHub API " + "response format might have changed.\n"); + } + + // Free allocated strings + if (sha) + free(sha); + if (message) + free(message); + if (author_name) + free(author_name); + if (author_email) + free(author_email); + if (date) + free(date); + + return 1; +} + +/** + * Built-in command: clip + * Placeholder for clipboard functionality + */ +int lsh_clip(char **args) { + printf("Clipboard functionality not implemented yet\n"); + return 1; +} + +/** + * Built-in command: echo + * Echoes arguments to stdout + */ +int lsh_echo(char **args) { + if (args[1] == NULL) { + printf("\n"); + return 1; + } + + for (int i = 1; args[i] != NULL; i++) { + printf("%s", args[i]); + if (args[i + 1] != NULL) { + printf(" "); + } + } + printf("\n"); + return 1; +} + +/** + * Built-in command: loc + * Counts lines of code + */ +int lsh_loc(char **args) { + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected file or directory argument to \"loc\"\n"); + return 1; + } + + struct stat st; + if (stat(args[1], &st) != 0) { + perror("lsh: loc"); + return 1; + } + + if (S_ISREG(st.st_mode)) { + // Count lines in a single file + FILE *file = fopen(args[1], "r"); + if (!file) { + perror("lsh: loc"); + return 1; + } + + int lines = 0, code_lines = 0, blank_lines = 0, comment_lines = 0; + char line[1024]; + int in_comment_block = 0; + + while (fgets(line, sizeof(line), file)) { + lines++; + char *trimmed = line; + while (*trimmed && isspace(*trimmed)) + trimmed++; + + if (*trimmed == '\0') { + blank_lines++; + } else if (strncmp(trimmed, "//", 2) == 0) { + comment_lines++; + } else if (strncmp(trimmed, "/*", 2) == 0) { + comment_lines++; + in_comment_block = 1; + if (strstr(trimmed, "*/")) { + in_comment_block = 0; + } + } else if (in_comment_block) { + comment_lines++; + if (strstr(trimmed, "*/")) { + in_comment_block = 0; + } + } else { + code_lines++; + } + } + + fclose(file); + + printf("File: %s\n", args[1]); + printf("Total lines: %d\n", lines); + printf("Code lines: %d\n", code_lines); + printf("Comment lines: %d\n", comment_lines); + printf("Blank lines: %d\n", blank_lines); + + } else if (S_ISDIR(st.st_mode)) { + printf("Directory LOC counting not implemented yet\n"); + } else { + fprintf(stderr, "lsh: %s is not a file or directory\n", args[1]); + } + + return 1; +} + +/** + * Helper function to extract a string value from a JSON response + */ +char *extract_json_string(const char *json, const char *key) { + char search_key[100]; + sprintf(search_key, "\"%s\":", key); + + char *key_pos = strstr(json, search_key); + if (!key_pos) + return NULL; + + key_pos += strlen(search_key); + + // Skip whitespace + while (*key_pos && isspace(*key_pos)) + key_pos++; + + if (*key_pos != '"') + return NULL; + + key_pos++; // Skip opening quote + + // Find closing quote + char *end = key_pos; + while (*end && *end != '"') { + if (*end == '\\' && *(end + 1)) { + end += 2; // Skip escaped character + } else { + end++; + } + } + + if (!*end) + return NULL; + + // Allocate and copy the string value + int len = end - key_pos; + char *result = malloc(len + 1); + if (!result) + return NULL; + + strncpy(result, key_pos, len); + result[len] = '\0'; + + return result; +} + +/** + * Built-in command: git_status + * Displays the Git status of the current repo + */ +int lsh_git_status(char **args) { + // Show current Git status + char *git_status = get_git_status(); + if (git_status) { + printf("Git Status: %s\n", git_status); + free(git_status); + } else { + printf("Not in a Git repository or Git not available\n"); + } + return 1; +} + +/** + * Built-in command: gg + * Quick access to Git commands + */ +int lsh_gg(char **args) { + if (args[1] == NULL) { + printf("Usage: gg \n"); + printf("Available commands:\n"); + printf(" s - status\n"); + printf(" c - commit\n"); + printf(" p - pull\n"); + printf(" ps - push\n"); + printf(" a - add .\n"); + printf(" l - log\n"); + printf(" d - diff\n"); + printf(" dd - ncurses diff viewer\n"); + printf(" b - branch\n"); + printf(" ch - checkout\n"); + printf(" o - open in GitHub browser\n"); + return 1; + } + + // Execute the appropriate git command based on shorthand + if (strcmp(args[1], "s") == 0) { + // Enhanced git status with more information + char branch_name[100] = ""; + char repo_name[100] = ""; + char last_commit_title[256] = ""; + char last_commit_hash[32] = ""; + char recent_commits[2][256]; + char repo_url[512] = ""; + int is_dirty = 0; + + // Check if we're in a git repo + if (!get_git_branch(branch_name, sizeof(branch_name), &is_dirty)) { + printf("Not in a Git repository\n"); + return 1; + } + + // Get all the information + get_git_repo_name(repo_name, sizeof(repo_name)); + get_last_commit(last_commit_title, sizeof(last_commit_title), + last_commit_hash, sizeof(last_commit_hash)); + int commit_count = get_recent_commit(recent_commits, 2); + get_repo_url(repo_url, sizeof(repo_url)); + + // Display enhanced status + printf("\n" ANSI_COLOR_CYAN "Git Repository Status" ANSI_COLOR_RESET "\n"); + printf("══════════════════════════════════════════════════\n\n"); + + // Repository info + printf(ANSI_COLOR_GREEN "Repo:" ANSI_COLOR_RESET " %s\n", + strlen(repo_name) > 0 ? repo_name : "Unknown"); + + // Branch info with clickable link + if (strlen(repo_url) > 0) { + printf(ANSI_COLOR_GREEN "Branch:" ANSI_COLOR_RESET " \033]8;;%s/tree/%s\033\\%s\033]8;;\033\\%s\n", + repo_url, branch_name, branch_name, is_dirty ? " *" : ""); + } else { + printf(ANSI_COLOR_GREEN "Branch:" ANSI_COLOR_RESET " %s%s\n", + branch_name, is_dirty ? " *" : ""); + } + + // Last commit info + if (strlen(last_commit_hash) > 0 && strlen(last_commit_title) > 0) { + if (strlen(repo_url) > 0) { + printf(ANSI_COLOR_GREEN "Last commit:" ANSI_COLOR_RESET " \033]8;;%s/commit/%s\033\\%s\033]8;;\033\\ - %s\n", + repo_url, last_commit_hash, last_commit_hash, last_commit_title); + } else { + printf(ANSI_COLOR_GREEN "Last commit:" ANSI_COLOR_RESET " %s - %s\n", + last_commit_hash, last_commit_title); + } + } + + // Recent commits + if (commit_count > 0) { + printf(ANSI_COLOR_GREEN "Last %d commits:" ANSI_COLOR_RESET "\n", commit_count); + for (int i = 0; i < commit_count; i++) { + printf(" %d. %s\n", i + 1, recent_commits[i]); + } + } + + // Repository link + if (strlen(repo_url) > 0) { + printf(ANSI_COLOR_GREEN "Repository:" ANSI_COLOR_RESET " \033]8;;%s\033\\%s\033]8;;\033\\\n", + repo_url, repo_url); + } + + printf("\n"); + + // Show regular git status output + printf(ANSI_COLOR_YELLOW "Working Directory Status:" ANSI_COLOR_RESET "\n"); + system("git status --short"); + + if (!is_dirty) { + printf(ANSI_COLOR_GREEN "Working tree clean" ANSI_COLOR_RESET "\n"); + } + + printf("\n"); + } else if (strcmp(args[1], "b") == 0) { + system("git branch"); + } else if (strcmp(args[1], "o") == 0) { + // Get the remote URL + FILE *fp; + char remote_url[1024] = {0}; + fp = popen("git config --get remote.origin.url 2>/dev/null", "r"); + if (fp) { + fgets(remote_url, sizeof(remote_url), fp); + pclose(fp); + + // Trim trailing newline + char *newline = strchr(remote_url, '\n'); + if (newline) + *newline = '\0'; + + if (strlen(remote_url) > 0) { + // Convert SSH URLs to HTTPS + char https_url[1024] = {0}; + if (strstr(remote_url, "git@github.com:")) { + // Convert ssh format (git@github.com:user/repo.git) to https + char *repo_path = strchr(remote_url, ':'); + if (repo_path) { + repo_path++; // Skip the colon + // Remove .git suffix if present + char *git_suffix = strstr(repo_path, ".git"); + if (git_suffix) + *git_suffix = '\0'; + + sprintf(https_url, "https://github.com/%s", repo_path); + } + } else if (strstr(remote_url, "https://github.com/")) { + // Already HTTPS format + strcpy(https_url, remote_url); + // Remove .git suffix if present + char *git_suffix = strstr(https_url, ".git"); + if (git_suffix) + *git_suffix = '\0'; + } + + if (strlen(https_url) > 0) { + // Open the URL in the default browser + char command[1100]; + // Use xdg-open on Linux + sprintf(command, "xdg-open %s >/dev/null 2>&1", https_url); + int result = system(command); + if (result == 0) { + printf("Opening %s in browser\n", https_url); + } else { + printf("Failed to open browser. URL: %s\n", https_url); + } + } else { + printf("Could not parse GitHub URL from: %s\n", remote_url); + } + } else { + printf("No remote URL found. Is this a Git repository with a GitHub " + "remote?\n"); + } + } else { + printf("Not in a Git repository or no remote configured\n"); + } + } else if (strcmp(args[1], "c") == 0) { + if (args[2] != NULL) { + char command[1024]; + sprintf(command, "git commit -m \"%s\"", args[2]); + system(command); + } else { + system("git commit"); + } + } else if (strcmp(args[1], "p") == 0) { + system("git pull"); + } else if (strcmp(args[1], "ps") == 0) { + // Try push without credentials first - force git to fail without prompting + int result = system("GIT_ASKPASS=/bin/false GIT_TERMINAL_PROMPT=0 git push /dev/null"); + + // If push failed, try with credentials + if (result != 0) { + char username[256] = ""; + char token[256] = ""; + + printf("Push failed. Authentication required.\n"); + printf("GitHub Username: "); + fflush(stdout); + + if (fgets(username, sizeof(username), stdin)) { + // Remove newline + username[strcspn(username, "\n")] = 0; + + printf("Personal Access Token: "); + fflush(stdout); + + // Hide token input + system("stty -echo"); + if (fgets(token, sizeof(token), stdin)) { + token[strcspn(token, "\n")] = 0; + system("stty echo"); + printf("\n"); + + printf("Attempting authenticated push...\n"); + result = execute_git_with_auth("git push", username, token); + + // Clear credentials from memory for security + memset(username, 0, sizeof(username)); + memset(token, 0, sizeof(token)); + + if (result == 0) { + printf("Push successful!\n"); + } else { + printf("Push failed. Please check your credentials and try again.\n"); + } + } else { + system("stty echo"); + printf("\nAuthentication cancelled.\n"); + } + } else { + printf("Authentication cancelled.\n"); + } + } else { + printf("Push successful!\n"); + } + } else if (strcmp(args[1], "a") == 0) { + system("git add ."); + } else if (strcmp(args[1], "l") == 0) { + system("git log --oneline -10"); + } else if (strcmp(args[1], "d") == 0) { + run_diff_viewer(); + } else if (strcmp(args[1], "dd") == 0) { + run_ncurses_diff_viewer(); + } else if (strcmp(args[1], "b") == 0) { + system("git branch"); + } else if (strcmp(args[1], "ch") == 0) { + if (args[2] != NULL) { + char command[1024]; + sprintf(command, "git checkout %s", args[2]); + system(command); + } else { + printf("Please specify a branch to checkout\n"); + } + } else if (strcmp(args[1], "debug") == 0) { + printf("=== Git Debug Log ===\n"); + if (access("/tmp/git_debug.log", F_OK) == 0) { + system("cat /tmp/git_debug.log"); + } else { + printf("No debug log found. Try pushing to generate debug info.\n"); + } + printf("\n=== End Debug Log ===\n"); + } else if (strcmp(args[1], "debug-clear") == 0) { + system("rm -f /tmp/git_debug.log"); + printf("Debug log cleared.\n"); + } else { + printf("Unknown git command shorthand: %s\n", args[1]); + } + + return 1; +} + +int lsh_stats(char **args) { + printf("Command Statistics\n"); + printf("=================\n\n"); + + if (frequency_count == 0) { + printf("No command history available\n"); + return 1; + } + + typedef struct { + char *command; + int count; + double score; + } CommandStat; + + CommandStat *stats = malloc(frequency_count * sizeof(CommandStat)); + if (!stats) + return 1; + + time_t current_time = time(NULL); + for (int i = 0; i < frequency_count; i++) { + stats[i].command = command_frequencies[i].command; + stats[i].count = command_frequencies[i].count; + + time_t most_recent = 0; + for (int j = history_size - 1; j >= 0; j--) { + if (strcmp(history_entries[j].command, stats[i].command) == 0) { + most_recent = history_entries[j].timestamp; + break; + } + } + + double hours_ago = (current_time - most_recent) / 3600.0; + double recency_weight = hours_ago > 0 ? 1.0 / (1.0 + hours_ago * 0.1) : 1.0; + + stats[i].score = stats[i].count * recency_weight; + + } + + for (int i = 0; i < frequency_count - 1; i++) { + for (int j = i + 1; j < frequency_count; j++) { + if (stats[j].score > stats[i].score) { + CommandStat temp = stats[i]; + stats[i] = stats[j]; + stats[j] = temp; + } + } + } + + printf("Top Commands (by frequency + recency):\n"); + printf("Rank Command Count Score\n"); + printf("---- -------------------- ----- -----\n"); + + int display_count = frequency_count < 10 ? frequency_count : 10; + for (int i = 0; i < display_count; i++) { + printf("%-4d %-20s %-5d %.2f\n", i + 1, stats[i].command, + stats[i].count, stats[i].score); + } + + printf("\nNext Command Prediction: \n"); + if (frequency_count > 0) { + printf("Most likely: %s (score: %.2f)\n", stats[0].command, stats[0].score); + } + free(stats); + return 1; +} diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..efc6a5c --- /dev/null +++ b/src/main.c @@ -0,0 +1,26 @@ +/** + * main.c + * Entry point for the LSH shell program + */ + +#include "common.h" +#include "shell.h" +#include + +/** + * Main entry point + */ + +int main(int argc, char **argv) { + // Set locale to support UTF-8 + setlocale(LC_ALL, "en_US.UTF-8"); + + // Setup terminal for proper UTF-8 handling + // This is Linux equivalent of SetConsoleOutputCP(65001) + printf("\033%%G"); // Tell terminal to use UTF-8 + + // Start the shell loop + lsh_loop(); + + return EXIT_SUCCESS; +} diff --git a/src/shell.c b/src/shell.c new file mode 100644 index 0000000..6fd93d3 --- /dev/null +++ b/src/shell.c @@ -0,0 +1,1068 @@ +/** + * shell.c + * Implementation of core shell functionality + */ + +#include "shell.h" +#include "aliases.h" // Added for alias support +#include "autocorrect.h" +#include "bookmarks.h" // Added for bookmark support +#include "builtins.h" +#include "countdown_timer.h" +#include "favorite_cities.h" +#include "filters.h" +#include "git_integration.h" // Added for Git repository detection +#include "line_reader.h" +#include "persistent_history.h" +#include "structured_data.h" +#include "tab_complete.h" // Added for tab completion support +#include "themes.h" +#include +#include // Added for time functions +#include +#include +#include +#include // For DIR, opendir, readdir +#include // For stat + +// Global variables for status bar +static int g_console_width = 80; +static int g_status_line = 0; +static int g_normal_attributes = 7; // Default white on black +static int g_status_attributes = 12; // Red +static int g_status_bar_enabled = 0; // Flag to track if status bar is enabled +static struct termios g_orig_termios; // Original terminal settings + +/** + * Initialize terminal for raw mode + */ +int init_terminal(struct termios *orig_termios) { + int fd = STDIN_FILENO; + + if (!isatty(fd)) { + fprintf(stderr, "Not running in a terminal\n"); + return -1; + } + + // Get current terminal settings + if (tcgetattr(fd, orig_termios) == -1) { + perror("tcgetattr"); + return -1; + } + + // Create raw terminal settings (make a copy first) + struct termios raw = *orig_termios; + + // Disable canonical mode and echo, but preserve some control characters + raw.c_iflag &= ~(ICRNL | IXON); // Disable CTRL-S and CTRL-Q and CR to NL translation + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); // Disable echo, canonical mode, and signal keys + raw.c_cc[VMIN] = 1; // Wait for at least one character + raw.c_cc[VTIME] = 0; // No timeout + + // Apply modified terminal settings + if (tcsetattr(fd, TCSAFLUSH, &raw) == -1) { + perror("tcsetattr"); + return -1; + } + + printf("\033[?25h"); // Ensure cursor is visible + + return fd; +} + +/** + * Restore terminal to original settings + */ +void restore_terminal(int fd, struct termios *orig_termios) { + // Restore cursor and terminal settings + printf("\033[?25h"); // Ensure cursor is visible + printf("\033c"); // Reset terminal state + + if (tcsetattr(fd, TCSAFLUSH, orig_termios) == -1) { + perror("tcsetattr"); + } +} + +/** + * Get console dimensions + */ +int get_console_dimensions(int fd, int *width, int *height) { + struct winsize ws; + + if (ioctl(fd, TIOCGWINSZ, &ws) == -1) { + perror("ioctl"); + return 0; + } + + *width = ws.ws_col; + *height = ws.ws_row; + + return 1; +} + +/** + * Temporarily hide the status bar before command execution + */ +void hide_status_bar(int fd) { + // Skip if status bar is not enabled + if (!g_status_bar_enabled) + return; + + int width, height; + if (!get_console_dimensions(fd, &width, &height)) { + return; + } + + // Save cursor position + printf(ANSI_SAVE_CURSOR); + + // Move to status bar line and clear it + printf("\033[%d;1H", height); + printf("\033[2K"); // Clear entire line + + // Restore cursor position + printf(ANSI_RESTORE_CURSOR); + fflush(stdout); +} + +/** + * This function scrolls the console buffer up one line to make room for the + * status bar when we're at the bottom of the screen. + */ +void ensure_status_bar_space(int fd) { + int width, height; + if (!get_console_dimensions(fd, &width, &height)) { + return; + } + + // First clear the status bar if it exists + printf(ANSI_SAVE_CURSOR); + + // Move to status bar line and clear it + printf("\033[%d;1H", height); + printf("\033[2K"); // Clear entire line + + // Add a blank line above status bar for spacing + printf("\033[%d;1H", height - 1); + printf("\033[2K"); // Clear entire line + + // Restore cursor position + printf(ANSI_RESTORE_CURSOR); + fflush(stdout); +} + +/** + * Initialize the status bar at the bottom of the screen + */ +int init_status_bar(int fd) { + int width, height; + if (!get_console_dimensions(fd, &width, &height)) { + return 0; + } + + g_console_width = width; + g_status_line = height; + g_status_bar_enabled = 1; + + // Clear status line + printf(ANSI_SAVE_CURSOR); + printf("\033[%d;1H", height); + printf("\033[2K"); // Clear entire line + printf(ANSI_RESTORE_CURSOR); + fflush(stdout); + + return 1; +} + +/** + * Check for console window resize and update status bar position + */ +void check_console_resize(int fd) { + if (!g_status_bar_enabled) + return; + + int width, height; + if (!get_console_dimensions(fd, &width, &height)) { + return; + } + + // Check if dimensions have changed + if (width != g_console_width || height != g_status_line) { + g_console_width = width; + g_status_line = height; + + // Redraw status bar at new position + hide_status_bar(fd); + } +} + +/** + * Update the status bar with Git information + */ +void update_status_bar(int fd, const char *git_info) { + if (!g_status_bar_enabled) + return; + + int width, height; + if (!get_console_dimensions(fd, &width, &height)) { + return; + } + + g_console_width = width; + g_status_line = height; + + // Get current time for status bar + time_t rawtime; + struct tm *timeinfo; + char time_buffer[10]; + + time(&rawtime); + timeinfo = localtime(&rawtime); + strftime(time_buffer, sizeof(time_buffer), "%H:%M:%S", timeinfo); + + // Get current directory for display + char cwd[LSH_RL_BUFSIZE]; + char parent_dir[LSH_RL_BUFSIZE / 2]; + char current_dir[LSH_RL_BUFSIZE / 2]; + + if (getcwd(cwd, sizeof(cwd)) != NULL) { + get_path_display(cwd, parent_dir, current_dir, LSH_RL_BUFSIZE / 2); + } else { + strcpy(parent_dir, "unknown"); + strcpy(current_dir, "dir"); + } + + printf(ANSI_SAVE_CURSOR); + + // Move cursor to status line + printf("\033[%d;1H", height); + + // Clear the status line + printf("\033[2K"); + + // Set status bar color (cyan background) + printf(ANSI_BG_CYAN ANSI_COLOR_BLACK); + + // Format: [time] parent_dir/current_dir [git_info] + printf(" %s ", time_buffer); + printf(" %s/%s ", parent_dir, current_dir); + + if (git_info != NULL && strlen(git_info) > 0) { + printf(" %s ", git_info); + } + + // Fill the rest of line with space to color the entire bar + printf("%*s", width - (int)strlen(time_buffer) - + (int)strlen(parent_dir) - (int)strlen(current_dir) - + (git_info ? (int)strlen(git_info) + 3 : 0) - 8, ""); + + // Reset color + printf(ANSI_COLOR_RESET); + + // Restore cursor position + printf(ANSI_RESTORE_CURSOR); + fflush(stdout); +} + +/** + * Get the name of the parent and current directories from a path + */ + +void get_path_display(const char *cwd, char *parent_dir_name, + char *current_dir_name, size_t buf_size) { + char path_copy[PATH_MAX]; + strncpy(path_copy, cwd, PATH_MAX - 1); + path_copy[PATH_MAX - 1] = '\0'; + + // Default values if we can't parse the path + strncpy(parent_dir_name, ".", buf_size - 1); + strncpy(current_dir_name, "unknown", buf_size - 1); + parent_dir_name[buf_size - 1] = '\0'; + current_dir_name[buf_size - 1] = '\0'; + + // Handle root directory special case + if (strcmp(path_copy, "/") == 0) { + strncpy(parent_dir_name, "/", buf_size - 1); + strncpy(current_dir_name, "", buf_size - 1); + return; + } + + // Remove trailing slash if present + size_t len = strlen(path_copy); + if (len > 1 && path_copy[len - 1] == '/') { + path_copy[len - 1] = '\0'; + } + + // Find the last component (current directory) + char *last_slash = strrchr(path_copy, '/'); + if (!last_slash) { + // No slash found, must be a relative path with no slashes + strncpy(current_dir_name, path_copy, buf_size - 1); + return; + } + + // Extract current directory name + strncpy(current_dir_name, last_slash + 1, buf_size - 1); + + // Handle paths directly under root + if (last_slash == path_copy) { + strncpy(parent_dir_name, "/", buf_size - 1); + return; + } + + // Temporarily terminate the string at the last slash + *last_slash = '\0'; + + // Find the previous slash to identify parent directory + char *prev_slash = strrchr(path_copy, '/'); + + if (prev_slash) { + // Extract just the parent directory name + strncpy(parent_dir_name, prev_slash + 1, buf_size - 1); + + // Special case: parent is root + if (prev_slash == path_copy) { + strncpy(parent_dir_name, "/", buf_size - 1); + } + } else { + // No previous slash, parent is the remaining part + strncpy(parent_dir_name, path_copy, buf_size - 1); + } +} + +/** + * Create a TableData structure from an ls command + */ +TableData* create_ls_table(char **args) { + DIR *dir; + struct dirent *entry; + struct stat file_stat; + char cwd[PATH_MAX]; + char file_path[PATH_MAX]; + + // Create table headers + char *headers[] = {"Name", "Size", "Type", "Modified"}; + TableData *table = create_table(headers, 4); + if (!table) { + fprintf(stderr, "lsh: failed to create table\n"); + return NULL; + } + + if (getcwd(cwd, sizeof(cwd)) == NULL) { + perror("lsh: getcwd"); + free_table(table); + return NULL; + } + + dir = opendir(cwd); + if (dir == NULL) { + perror("lsh: opendir"); + free_table(table); + return NULL; + } + + // Collect all entries + while ((entry = readdir(dir)) != NULL) { + // Skip . and .. entries + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { + continue; + } + + snprintf(file_path, sizeof(file_path), "%s/%s", cwd, entry->d_name); + if (stat(file_path, &file_stat) == 0) { + // Create a new row + DataValue *row = (DataValue*)malloc(4 * sizeof(DataValue)); + if (!row) { + fprintf(stderr, "lsh: allocation error\n"); + continue; + } + + // Name column + row[0].type = TYPE_STRING; + row[0].value.str_val = strdup(entry->d_name); + row[0].is_highlighted = S_ISDIR(file_stat.st_mode); // Highlight directories + + // Size column + row[1].type = TYPE_SIZE; + row[1].value.str_val = malloc(32); + if (S_ISDIR(file_stat.st_mode)) { + strcpy(row[1].value.str_val, ""); + } else if (file_stat.st_size < 1024) { + snprintf(row[1].value.str_val, 32, "%d B", (int)file_stat.st_size); + } else if (file_stat.st_size < 1024 * 1024) { + snprintf(row[1].value.str_val, 32, "%.1f KB", file_stat.st_size / 1024.0); + } else { + snprintf(row[1].value.str_val, 32, "%.1f MB", file_stat.st_size / (1024.0 * 1024.0)); + } + row[1].is_highlighted = 0; + + // Type column + row[2].type = TYPE_STRING; + if (S_ISDIR(file_stat.st_mode)) { + row[2].value.str_val = strdup("Directory"); + } else if (S_ISREG(file_stat.st_mode)) { + // Try to determine file type by extension + char *ext = strrchr(entry->d_name, '.'); + if (ext != NULL) { + ext++; // Skip the dot + if (strcasecmp(ext, "c") == 0 || strcasecmp(ext, "cpp") == 0 || + strcasecmp(ext, "h") == 0 || strcasecmp(ext, "hpp") == 0) { + row[2].value.str_val = strdup("Source"); + } else if (strcasecmp(ext, "exe") == 0 || strcasecmp(ext, "bat") == 0 || + strcasecmp(ext, "sh") == 0 || strcasecmp(ext, "com") == 0) { + row[2].value.str_val = strdup("Executable"); + } else if (strcasecmp(ext, "txt") == 0 || strcasecmp(ext, "md") == 0 || + strcasecmp(ext, "log") == 0) { + row[2].value.str_val = strdup("Text"); + } else if (strcasecmp(ext, "jpg") == 0 || strcasecmp(ext, "png") == 0 || + strcasecmp(ext, "gif") == 0 || strcasecmp(ext, "bmp") == 0) { + row[2].value.str_val = strdup("Image"); + } else { + row[2].value.str_val = strdup("File"); + } + } else { + row[2].value.str_val = strdup("File"); + } + } else { + row[2].value.str_val = strdup("Special"); + } + row[2].is_highlighted = 0; + + // Modified date column + row[3].type = TYPE_STRING; + row[3].value.str_val = malloc(32); + struct tm *tm_info = localtime(&file_stat.st_mtime); + strftime(row[3].value.str_val, 32, "%Y-%m-%d %H:%M", tm_info); + row[3].is_highlighted = 0; + + // Add row to table + add_table_row(table, row); + } + } + + closedir(dir); + return table; +} + +/** + * Parse input line into an array of commands (for pipelines) + */ +char*** lsh_split_commands(char *line) { + char **cmd_groups = NULL; + char *cmd_group, *saveptr0; + int group_count = 0, group_capacity = 10; + char ***commands = NULL; + char **command = NULL; + char *cmd_str, *token, *saveptr1, *saveptr2; + int cmd_count = 0, cmd_capacity = 10; + int token_count = 0, token_capacity = 10; + + + // Allocate initial command groups array + cmd_groups = malloc(group_capacity * sizeof(char*)); + if (!cmd_groups) { + perror("lsh: allocation error"); + return NULL; + } + + // Split by && symbol + cmd_group = strtok_r(line, "&&", &saveptr0); + while (cmd_group != NULL) { + // Trim whitespace + while (*cmd_group && isspace(*cmd_group)) cmd_group++; + cmd_groups[group_count] = strdup(cmd_group); + group_count++; + + if (group_count >= group_capacity - 1) { + group_capacity *= 2; + cmd_groups = realloc(cmd_groups, group_capacity * sizeof(char*)); + if (!cmd_groups) { + perror("lsh: allocation error"); + return NULL; + } + } + cmd_group = strtok_r(NULL, "&&", &saveptr0); + } + cmd_groups[group_count] = NULL; + + char *current_cmd = cmd_groups[0]; + + // Allocate initial commands array + commands = malloc(cmd_capacity * sizeof(char**)); + if (!commands) { + perror("lsh: allocation error"); + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + return NULL; + } + + // Split by pipe symbol '|' + cmd_str = strtok_r(current_cmd, "|", &saveptr1); + while (cmd_str != NULL) { + // Trim whitespace + while (*cmd_str && isspace(*cmd_str)) cmd_str++; + + // Allocate command token array + command = malloc(token_capacity * sizeof(char*)); + if (!command) { + perror("lsh: allocation error"); + // Free previous allocations + for (int i = 0; i < cmd_count; i++) { + for (int j = 0; commands[i][j] != NULL; j++) { + free(commands[i][j]); + } + free(commands[i]); + } + free(commands); + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + return NULL; + } + + // Split command into tokens + token_count = 0; + token = strtok_r(cmd_str, " \t\r\n\a", &saveptr2); + while (token != NULL) { + // Check if we need to resize tokens array + if (token_count >= token_capacity - 1) { + token_capacity *= 2; + command = realloc(command, token_capacity * sizeof(char*)); + if (!command) { + perror("lsh: allocation error"); + // Free previous allocations + for (int i = 0; i < cmd_count; i++) { + for (int j = 0; commands[i][j] != NULL; j++) { + free(commands[i][j]); + } + free(commands[i]); + } + free(commands); + return NULL; + } + } + + command[token_count] = strdup(token); + token_count++; + token = strtok_r(NULL, " \t\r\n\a", &saveptr2); + } + command[token_count] = NULL; // Null-terminate the tokens array + + // Check if we need to resize commands array + if (cmd_count >= cmd_capacity - 1) { + cmd_capacity *= 2; + commands = realloc(commands, cmd_capacity * sizeof(char**)); + if (!commands) { + perror("lsh: allocation error"); + return NULL; + } + } + + commands[cmd_count] = command; + cmd_count++; + cmd_str = strtok_r(NULL, "|", &saveptr1); + } + + commands[cmd_count] = NULL; // Null-terminate the commands array + + // Store the remaining command groups in the last position (if any) + if (group_count > 1) { + // Create a special command array for the command groups marker + char **marker = malloc(sizeof(char*) * 2); + if (!marker) { + perror("lsh: allocation error"); + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + return NULL; + } + marker[0] = strdup("&&_COMMAND_GROUPS"); + marker[1] = NULL; + + // Create a special command array for the remaining groups + char **cmd_group_array = malloc(sizeof(char*) * group_count); + if (!cmd_group_array) { + perror("lsh: allocation error"); + free(marker[0]); + free(marker); + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + return NULL; + } + + // Copy all remaining command groups + for (int i = 1; i < group_count; i++) { + cmd_group_array[i-1] = strdup(cmd_groups[i]); + } + cmd_group_array[group_count-1] = NULL; + + // Allocate space for cmd_count + 2 commands + // (original commands + cmd_group_array + marker) + char ***new_commands = malloc((cmd_count + 3) * sizeof(char**)); + if (!new_commands) { + perror("lsh: allocation error"); + for (int i = 0; cmd_group_array[i] != NULL; i++) { + free(cmd_group_array[i]); + } + free(cmd_group_array); + free(marker[0]); + free(marker); + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + return NULL; + } + + // Copy original commands + for (int i = 0; i < cmd_count; i++) { + new_commands[i] = commands[i]; + } + + // Add the command groups and marker + new_commands[cmd_count] = cmd_group_array; + new_commands[cmd_count+1] = marker; + new_commands[cmd_count+2] = NULL; + + // Free the old commands array but not its contents + free(commands); + commands = new_commands; + } + + // Free the command groups array + for (int i = 0; i < group_count; i++) { + free(cmd_groups[i]); + } + free(cmd_groups); + + return commands; +} + +/** + * Launch an external program + */ +int lsh_launch(char **args) { + pid_t pid, wpid; + int status; + + // Fork a child process + pid = fork(); + + if (pid == 0) { + // Child process + if (execvp(args[0], args) == -1) { + perror("lsh"); + } + exit(EXIT_FAILURE); + } else if (pid < 0) { + // Error forking + perror("lsh"); + } else { + // Parent process + do { + wpid = waitpid(pid, &status, WUNTRACED); + } while (!WIFEXITED(status) && !WIFSIGNALED(status)); + } + + return 1; +} + +/** + * Execute a command + */ +int lsh_execute(char **args) { + if (args[0] == NULL) { + // An empty command was entered + return 1; + } + + // Check if it's a built-in command + for (int i = 0; i < lsh_num_builtins(); i++) { + if (strcmp(args[0], builtin_str[i]) == 0) { + return (*builtin_func[i])(args); + } + } + + // If not a built-in, check aliases and launch external + char **alias_expansion = expand_alias(args); + if (alias_expansion != NULL) { + int result = lsh_execute(alias_expansion); + // Free the memory allocated for alias expansion + for (int i = 0; alias_expansion[i] != NULL; i++) { + free(alias_expansion[i]); + } + free(alias_expansion); + return result; + } + + return lsh_launch(args); +} + +/** + * Execute a pipeline of commands + */ +int lsh_execute_piped(char ***commands) { + // Count the number of commands in the pipeline + int cmd_count = 0; + while (commands[cmd_count] != NULL) { + cmd_count++; + } + + if (cmd_count == 0) { + return 1; // Nothing to execute + } + + // Check if this is a table operation starting with ls/dir + if (strcmp(commands[0][0], "ls") == 0 || strcmp(commands[0][0], "dir") == 0) { + // Create a table from ls command + TableData *table = create_ls_table(commands[0]); + if (!table) { + return 1; // Error already printed + } + + // Apply filters from the pipeline + for (int i = 1; commands[i] != NULL; i++) { + // Find the filter command + char *filter_cmd = commands[i][0]; + int filter_idx = -1; + + for (int j = 0; j < filter_count; j++) { + if (strcmp(filter_cmd, filter_str[j]) == 0) { + filter_idx = j; + break; + } + } + + if (filter_idx == -1) { + fprintf(stderr, "lsh: unknown filter command: %s\n", filter_cmd); + free_table(table); + return 1; + } + + // Apply the filter + TableData *filtered_table = filter_func[filter_idx](table, &commands[i][1]); + free_table(table); // Free the old table + + if (!filtered_table) { + return 1; // Error already printed + } + + table = filtered_table; + } + + // Print the final table + print_table(table); + free_table(table); + + return 1; + } + + if (cmd_count == 1) { + // No piping needed + return lsh_execute(commands[0]); + } + + // Create pipes + int pipes[cmd_count - 1][2]; + for (int i = 0; i < cmd_count - 1; i++) { + if (pipe(pipes[i]) == -1) { + perror("pipe"); + return 1; + } + } + + // Create processes + pid_t pids[cmd_count]; + for (int i = 0; i < cmd_count; i++) { + pids[i] = fork(); + + if (pids[i] == -1) { + perror("fork"); + return 1; + } else if (pids[i] == 0) { + // Child process + + // Set up input from previous pipe + if (i > 0) { + if (dup2(pipes[i - 1][0], STDIN_FILENO) == -1) { + perror("dup2"); + exit(EXIT_FAILURE); + } + } + + // Set up output to next pipe + if (i < cmd_count - 1) { + if (dup2(pipes[i][1], STDOUT_FILENO) == -1) { + perror("dup2"); + exit(EXIT_FAILURE); + } + } + + // Close all pipe fds + for (int j = 0; j < cmd_count - 1; j++) { + close(pipes[j][0]); + close(pipes[j][1]); + } + + // Execute the command + if (execvp(commands[i][0], commands[i]) == -1) { + perror("execvp"); + exit(EXIT_FAILURE); + } + } + } + + // Parent process closes all pipe fds + for (int i = 0; i < cmd_count - 1; i++) { + close(pipes[i][0]); + close(pipes[i][1]); + } + + // Wait for all children + for (int i = 0; i < cmd_count; i++) { + int status; + waitpid(pids[i], &status, 0); + } + + return 1; +} + +/** + * Free memory for a command array from lsh_split_commands + */ +void free_commands(char ***commands) { + for (int i = 0; commands[i] != NULL; i++) { + for (int j = 0; commands[i][j] != NULL; j++) { + free(commands[i][j]); + } + free(commands[i]); + } + free(commands); +} + +/** + * Display a welcome banner + */ +void display_welcome_banner(void) { + printf(ANSI_COLOR_CYAN); + printf("╔════════════════════════════════════════════════════════════╗\n"); + printf("║ Welcome to the LSH Shell (Linux) ║\n"); + printf("║ ║\n"); + printf("║ Type 'help' to see available commands ║\n"); + printf("╚════════════════════════════════════════════════════════════╝\n"); + printf(ANSI_COLOR_RESET); +} + +/** + * Main shell loop + */ +void lsh_loop(void) { + char *line; + char **args; + char ***commands = NULL; + int status = 1; + char git_info[LSH_RL_BUFSIZE] = {0}; + int terminal_fd; + + // Initialize terminal for raw mode + terminal_fd = init_terminal(&g_orig_termios); + + // Initialize the status bar + //init_status_bar(STDOUT_FILENO); + + // Initialize subsystems + init_aliases(); + init_bookmarks(); + init_tab_completion(); + init_persistent_history(); + init_favorite_cities(); + init_themes(); + init_autocorrect(); + init_git_integration(); + + // Display the welcome banner + display_welcome_banner(); + + do { + // Check for console resize + check_console_resize(STDOUT_FILENO); + + // Get Git status for current directory + // If git_status() returns null, git_info[0] will remain 0 + char *git_status_info = get_git_status(); + if (git_status_info != NULL) { + strncpy(git_info, git_status_info, LSH_RL_BUFSIZE - 1); + git_info[LSH_RL_BUFSIZE - 1] = '\0'; + free(git_status_info); + } else { + git_info[0] = '\0'; + } + + // Update status bar with Git information + update_status_bar(STDOUT_FILENO, git_info); + + // Get input from the user + line = lsh_read_line(); + + // Empty line check + if (line == NULL || line[0] == '\0') { + if (line != NULL) { + free(line); + } + continue; + } + + // Add line to persistent history + add_to_history(line); + + // Check for pipes or && and parse into multiple commands if present + if (strchr(line, '|') != NULL || strchr(line, '&') != NULL) { + commands = lsh_split_commands(line); + + // Find if there are command groups (&&) + int has_cmd_groups = 0; + char **remaining_cmd_groups = NULL; + char **marker = NULL; + int cmd_count = 0; + + // Count commands and check for the special command groups marker + while (commands[cmd_count] != NULL) { + cmd_count++; + } + + // We need at least 2 positions for command groups: + // 1. The groups themselves + // 2. The marker with "&&_COMMAND_GROUPS" + if (cmd_count > 1) { + // Get the last non-null command + marker = commands[cmd_count-1]; + + // Check if it's the marker + if (marker != NULL && marker[0] != NULL && + strcmp(marker[0], "&&_COMMAND_GROUPS") == 0) { + + has_cmd_groups = 1; + + // Get the command groups from the previous position + remaining_cmd_groups = commands[cmd_count-2]; + + // Set these positions to NULL so they don't get processed + // as regular commands + commands[cmd_count-1] = NULL; + commands[cmd_count-2] = NULL; + } + } + + // Execute the first command or pipeline + status = lsh_execute_piped(commands); + + // If successful and we have command groups, execute them sequentially + if (status && has_cmd_groups && remaining_cmd_groups != NULL) { + for (int i = 0; remaining_cmd_groups[i] != NULL; i++) { + char *cmd_group = remaining_cmd_groups[i]; + + // Parse this command group + char *cmd_copy = strdup(cmd_group); + + // Check if it contains pipes + if (strchr(cmd_copy, '|') != NULL) { + char ***cmd_commands = lsh_split_commands(cmd_copy); + if (cmd_commands) { + status = lsh_execute_piped(cmd_commands); + free_commands(cmd_commands); + } + } else { + // Simple command without pipes + char **args = lsh_split_line(cmd_copy); + + // Check for corrections before executing + char **corrected_args = check_for_corrections(args); + if (corrected_args != NULL) { + for (int j = 0; args[j] != NULL; j++) { + free(args[j]); + } + free(args); + args = corrected_args; + } + + // Execute command + status = lsh_execute(args); + + // Free allocated memory + for (int j = 0; args[j] != NULL; j++) { + free(args[j]); + } + free(args); + } + + free(cmd_copy); + + // If a command failed, stop execution + if (!status) { + break; + } + } + } + + // Clean up marker and command groups if they exist + if (has_cmd_groups && marker) { + // Free marker + if (marker[0]) free(marker[0]); + free(marker); + + // Free command groups + if (remaining_cmd_groups) { + for (int i = 0; remaining_cmd_groups[i] != NULL; i++) { + free(remaining_cmd_groups[i]); + } + free(remaining_cmd_groups); + } + } + + free_commands(commands); + } else { + // Normal command parsing + args = lsh_split_line(line); + + // Check for corrections before executing + char **corrected_args = check_for_corrections(args); + if (corrected_args != NULL) { + // Free the original args + for (int i = 0; args[i] != NULL; i++) { + free(args[i]); + } + free(args); + args = corrected_args; + } + + // Execute command + status = lsh_execute(args); + + // Free allocated memory + for (int i = 0; args[i] != NULL; i++) { + free(args[i]); + } + free(args); + } + + free(line); + } while (status); + + // Shutdown subsystems + shutdown_aliases(); + shutdown_bookmarks(); + shutdown_tab_completion(); + shutdown_persistent_history(); + shutdown_favorite_cities(); + shutdown_themes(); + shutdown_autocorrect(); + + // Restore terminal + restore_terminal(terminal_fd, &g_orig_termios); +}