From f3a50aa94b0dd09ee593c9a88423e1b6ed3ab992 Mon Sep 17 00:00:00 2001 From: marcusDenslow Date: Wed, 11 Jun 2025 15:54:57 +0200 Subject: [PATCH] this is a test bruh --- ncurses_diff_viewer.c | 638 +++++++++++++++++++++--------------------- ncurses_diff_viewer.o | Bin 169272 -> 169184 bytes shell | Bin 517864 -> 517808 bytes 3 files changed, 323 insertions(+), 315 deletions(-) diff --git a/ncurses_diff_viewer.c b/ncurses_diff_viewer.c index dd94619..daf8545 100644 --- a/ncurses_diff_viewer.c +++ b/ncurses_diff_viewer.c @@ -138,26 +138,25 @@ int init_ncurses_diff_viewer(NCursesDiffViewer *viewer) { nodelay(stdscr, TRUE); // Make getch() non-blocking curs_set(0); // Hide cursor to prevent flickering + // Enable colors + if (has_colors()) { + start_color(); + init_pair(1, COLOR_GREEN, COLOR_BLACK); // Additions + init_pair(2, COLOR_RED, COLOR_BLACK); // Deletions + init_pair(3, COLOR_CYAN, COLOR_BLACK); // Headers + init_pair(4, COLOR_YELLOW, COLOR_BLACK); // Selected + init_pair( + 5, COLOR_BLACK, + COLOR_WHITE); // Highlighted selection - low opacity line highlight + init_pair(6, COLOR_MAGENTA, + COLOR_BLACK); // Orange-ish color for commit hash - // Enable colors -if (has_colors()) { - start_color(); - init_pair(1, COLOR_GREEN, COLOR_BLACK); // Additions - init_pair(2, COLOR_RED, COLOR_BLACK); // Deletions - init_pair(3, COLOR_CYAN, COLOR_BLACK); // Headers - init_pair(4, COLOR_YELLOW, COLOR_BLACK); // Selected - init_pair( - 5, COLOR_BLACK, - COLOR_WHITE); // Highlighted selection - low opacity line highlight - init_pair(6, COLOR_MAGENTA, - COLOR_BLACK); // Orange-ish color for commit hash - - // Gruvbox theme colors for commit info - init_pair(7, COLOR_CYAN, COLOR_BLACK); // HEAD (blue-green) - init_pair(8, COLOR_GREEN, COLOR_BLACK); // main branch (nice green) - init_pair(9, COLOR_RED, COLOR_BLACK); // origin/* (red) - init_pair(10, COLOR_YELLOW, COLOR_BLACK); // commit hash and arrows -} + // Gruvbox theme colors for commit info + init_pair(7, COLOR_CYAN, COLOR_BLACK); // HEAD (blue-green) + init_pair(8, COLOR_GREEN, COLOR_BLACK); // main branch (nice green) + init_pair(9, COLOR_RED, COLOR_BLACK); // origin/* (red) + init_pair(10, COLOR_YELLOW, COLOR_BLACK); // commit hash and arrows + } getmaxyx(stdscr, viewer->terminal_height, viewer->terminal_width); viewer->file_panel_width = @@ -2055,132 +2054,134 @@ void render_file_content_window(NCursesDiffViewer *viewer) { wattron(viewer->file_content_win, A_REVERSE); } - // Handle commit header coloring -if (line->type == 'h' && viewer->current_mode == NCURSES_MODE_FILE_VIEW) { - // Commit header line with special coloring for hash and branches - char display_line[1024]; - if ((int)strlen(line->line) > content_width - 2) { - strncpy(display_line, line->line, content_width - 5); - display_line[content_width - 5] = '\0'; - strcat(display_line, "..."); - } else { - strcpy(display_line, line->line); - } - - // Print character by character with gruvbox colors - int x = 1; - for (int j = 0; display_line[j] != '\0' && x < content_width; j++) { - char c = display_line[j]; - - // Look for specific patterns to color - if (strstr(&display_line[j], "commit ") == &display_line[j]) { - // Color "commit" in cyan - wattron(viewer->file_content_win, COLOR_PAIR(3)); - mvwprintw(viewer->file_content_win, y, x, "commit "); - wattroff(viewer->file_content_win, COLOR_PAIR(3)); - x += 7; - j += 6; // Skip "commit" - - // Now check if the next characters are a commit hash - if (j + 1 < (int)strlen(display_line) && - display_line[j + 1] != '\0') { - int hash_start = j + 1; - int hash_len = 0; - // Count consecutive hex characters - while (hash_start + hash_len < (int)strlen(display_line) && - hash_len < 40 && - ((display_line[hash_start + hash_len] >= '0' && - display_line[hash_start + hash_len] <= '9') || - (display_line[hash_start + hash_len] >= 'a' && - display_line[hash_start + hash_len] <= 'f') || - (display_line[hash_start + hash_len] >= 'A' && - display_line[hash_start + hash_len] <= 'F'))) { - hash_len++; + // Handle commit header coloring + if (line->type == 'h' && viewer->current_mode == NCURSES_MODE_FILE_VIEW) { + // Commit header line with special coloring for hash and branches + char display_line[1024]; + if ((int)strlen(line->line) > content_width - 2) { + strncpy(display_line, line->line, content_width - 5); + display_line[content_width - 5] = '\0'; + strcat(display_line, "..."); + } else { + strcpy(display_line, line->line); } - // Color commit hash in gruvbox yellow - if (hash_len >= 7) { - wattron(viewer->file_content_win, COLOR_PAIR(10)); - for (int h = 0; h < hash_len; h++) { - mvwaddch(viewer->file_content_win, y, x, - display_line[hash_start + h]); + // Print character by character with gruvbox colors + int x = 1; + for (int j = 0; display_line[j] != '\0' && x < content_width; j++) { + char c = display_line[j]; + + // Look for specific patterns to color + if (strstr(&display_line[j], "commit ") == &display_line[j]) { + // Color "commit" in cyan + wattron(viewer->file_content_win, COLOR_PAIR(3)); + mvwprintw(viewer->file_content_win, y, x, "commit "); + wattroff(viewer->file_content_win, COLOR_PAIR(3)); + x += 7; + j += 6; // Skip "commit" + + // Now check if the next characters are a commit hash + if (j + 1 < (int)strlen(display_line) && + display_line[j + 1] != '\0') { + int hash_start = j + 1; + int hash_len = 0; + // Count consecutive hex characters + while (hash_start + hash_len < (int)strlen(display_line) && + hash_len < 40 && + ((display_line[hash_start + hash_len] >= '0' && + display_line[hash_start + hash_len] <= '9') || + (display_line[hash_start + hash_len] >= 'a' && + display_line[hash_start + hash_len] <= 'f') || + (display_line[hash_start + hash_len] >= 'A' && + display_line[hash_start + hash_len] <= 'F'))) { + hash_len++; + } + + // Color commit hash in gruvbox yellow + if (hash_len >= 7) { + wattron(viewer->file_content_win, COLOR_PAIR(10)); + for (int h = 0; h < hash_len; h++) { + mvwaddch(viewer->file_content_win, y, x, + display_line[hash_start + h]); + x++; + } + wattroff(viewer->file_content_win, COLOR_PAIR(10)); + j += hash_len; + } + } + } else if (strstr(&display_line[j], "origin/main") == + &display_line[j]) { + // Color "origin/main" in gruvbox red + wattron(viewer->file_content_win, COLOR_PAIR(9)); + mvwprintw(viewer->file_content_win, y, x, "origin/main"); + wattroff(viewer->file_content_win, COLOR_PAIR(9)); + x += 11; + j += 10; + } else if (strstr(&display_line[j], "origin/HEAD") == + &display_line[j]) { + // Color "origin/HEAD" in gruvbox red + wattron(viewer->file_content_win, COLOR_PAIR(9)); + mvwprintw(viewer->file_content_win, y, x, "origin/HEAD"); + wattroff(viewer->file_content_win, COLOR_PAIR(9)); + x += 11; + j += 10; + } else if (strstr(&display_line[j], "HEAD") == &display_line[j]) { + // Check that it's not part of origin/HEAD + int is_standalone_head = 1; + if (j >= 7 && strncmp(&display_line[j - 7], "origin/", 7) == 0) { + is_standalone_head = 0; + } + + if (is_standalone_head) { + // Color standalone "HEAD" in gruvbox blue-green + wattron(viewer->file_content_win, COLOR_PAIR(7)); + mvwprintw(viewer->file_content_win, y, x, "HEAD"); + wattroff(viewer->file_content_win, COLOR_PAIR(7)); + x += 4; + j += 3; + } else { + mvwaddch(viewer->file_content_win, y, x, c); + x++; + } + } else if (strstr(&display_line[j], "main") == &display_line[j]) { + // Check that it's not part of origin/main + int is_standalone_main = 1; + if (j >= 7 && strncmp(&display_line[j - 7], "origin/", 7) == 0) { + is_standalone_main = 0; + } + + if (is_standalone_main) { + // Color standalone "main" in gruvbox green + wattron(viewer->file_content_win, COLOR_PAIR(8)); + mvwprintw(viewer->file_content_win, y, x, "main"); + wattroff(viewer->file_content_win, COLOR_PAIR(8)); + x += 4; + j += 3; + } else { + mvwaddch(viewer->file_content_win, y, x, c); + x++; + } + } else if (strstr(&display_line[j], "->") == &display_line[j]) { + // Color "->" arrows in same color as commit hash (gruvbox yellow) + wattron(viewer->file_content_win, COLOR_PAIR(10)); + mvwprintw(viewer->file_content_win, y, x, "->"); + wattroff(viewer->file_content_win, COLOR_PAIR(10)); + x += 2; + j += 1; // Will be incremented by loop + } else if (c == '(' || c == ')' || c == ',') { + // Color branch separators in cyan + wattron(viewer->file_content_win, COLOR_PAIR(3)); + mvwaddch(viewer->file_content_win, y, x, c); + wattroff(viewer->file_content_win, COLOR_PAIR(3)); + x++; + } else { + mvwaddch(viewer->file_content_win, y, x, c); x++; } - wattroff(viewer->file_content_win, COLOR_PAIR(10)); - j += hash_len; } } - } else if (strstr(&display_line[j], "origin/main") == &display_line[j]) { - // Color "origin/main" in gruvbox red - wattron(viewer->file_content_win, COLOR_PAIR(9)); - mvwprintw(viewer->file_content_win, y, x, "origin/main"); - wattroff(viewer->file_content_win, COLOR_PAIR(9)); - x += 11; - j += 10; - } else if (strstr(&display_line[j], "origin/HEAD") == &display_line[j]) { - // Color "origin/HEAD" in gruvbox red - wattron(viewer->file_content_win, COLOR_PAIR(9)); - mvwprintw(viewer->file_content_win, y, x, "origin/HEAD"); - wattroff(viewer->file_content_win, COLOR_PAIR(9)); - x += 11; - j += 10; - } else if (strstr(&display_line[j], "HEAD") == &display_line[j]) { - // Check that it's not part of origin/HEAD - int is_standalone_head = 1; - if (j >= 7 && strncmp(&display_line[j - 7], "origin/", 7) == 0) { - is_standalone_head = 0; - } - - if (is_standalone_head) { - // Color standalone "HEAD" in gruvbox blue-green - wattron(viewer->file_content_win, COLOR_PAIR(7)); - mvwprintw(viewer->file_content_win, y, x, "HEAD"); - wattroff(viewer->file_content_win, COLOR_PAIR(7)); - x += 4; - j += 3; - } else { - mvwaddch(viewer->file_content_win, y, x, c); - x++; - } - } else if (strstr(&display_line[j], "main") == &display_line[j]) { - // Check that it's not part of origin/main - int is_standalone_main = 1; - if (j >= 7 && strncmp(&display_line[j - 7], "origin/", 7) == 0) { - is_standalone_main = 0; - } - if (is_standalone_main) { - // Color standalone "main" in gruvbox green - wattron(viewer->file_content_win, COLOR_PAIR(8)); - mvwprintw(viewer->file_content_win, y, x, "main"); - wattroff(viewer->file_content_win, COLOR_PAIR(8)); - x += 4; - j += 3; - } else { - mvwaddch(viewer->file_content_win, y, x, c); - x++; - } - } else if (strstr(&display_line[j], "->") == &display_line[j]) { - // Color "->" arrows in same color as commit hash (gruvbox yellow) - wattron(viewer->file_content_win, COLOR_PAIR(10)); - mvwprintw(viewer->file_content_win, y, x, "->"); - wattroff(viewer->file_content_win, COLOR_PAIR(10)); - x += 2; - j += 1; // Will be incremented by loop - } else if (c == '(' || c == ')' || c == ',') { - // Color branch separators in cyan - wattron(viewer->file_content_win, COLOR_PAIR(3)); - mvwaddch(viewer->file_content_win, y, x, c); - wattroff(viewer->file_content_win, COLOR_PAIR(3)); - x++; - } else { - mvwaddch(viewer->file_content_win, y, x, c); - x++; - } - } -} - - else if (line->type == 'h') { + else if (line->type == 'h') { // In commit/stash view, show header lines as plain white text char display_line[1024]; if ((int)strlen(line->line) > content_width - 2) { @@ -3010,151 +3011,156 @@ int handle_ncurses_diff_input(NCursesDiffViewer *viewer, int key) { } break; - - case 21: // Ctrl+U -{ - // Move cursor up half page with smart positioning - int target_cursor = viewer->file_cursor_line - max_lines_visible / 2; - if (target_cursor < 0) { - target_cursor = 0; - } - - // Find the actual cursor position (skip empty lines like move_cursor_smart does) - int final_cursor = target_cursor; - int attempts = 0; - const int max_attempts = viewer->file_line_count; - - // Look for non-empty line near target position - while (attempts < max_attempts && final_cursor < viewer->file_line_count) { - NCursesFileLine *line = &viewer->file_lines[final_cursor]; - char *trimmed = line->line; - - // Skip leading whitespace - while (*trimmed == ' ' || *trimmed == '\t') { - trimmed++; - } - - // If line has content, stop here - if (*trimmed != '\0') { - break; - } - - // Move down to find content, but don't go too far from target - final_cursor++; - attempts++; - - // If we've moved too far down, go back to target and try going up - if (final_cursor > target_cursor + 5) { - final_cursor = target_cursor; - // Try going up from target - while (final_cursor > 0 && attempts < max_attempts) { - line = &viewer->file_lines[final_cursor]; - trimmed = line->line; - while (*trimmed == ' ' || *trimmed == '\t') { - trimmed++; - } - if (*trimmed != '\0') { - break; - } - final_cursor--; - attempts++; + case 21: // Ctrl+U + { + // Move cursor up half page with smart positioning + int target_cursor = viewer->file_cursor_line - max_lines_visible / 2; + if (target_cursor < 0) { + target_cursor = 0; } - break; - } - } - - // Ensure final cursor is in bounds - if (final_cursor < 0) final_cursor = 0; - if (final_cursor >= viewer->file_line_count) final_cursor = viewer->file_line_count - 1; - - viewer->file_cursor_line = final_cursor; - - // Adjust scroll based on FINAL cursor position - if (viewer->file_cursor_line < viewer->file_scroll_offset + 3) { - viewer->file_scroll_offset = viewer->file_cursor_line - 3; - if (viewer->file_scroll_offset < 0) { - viewer->file_scroll_offset = 0; - } - } - break; -} + // Find the actual cursor position (skip empty lines like + // move_cursor_smart does) + int final_cursor = target_cursor; + int attempts = 0; + const int max_attempts = viewer->file_line_count; - case 4: // Ctrl+D -{ - // Move cursor down half page with smart positioning - int target_cursor = viewer->file_cursor_line + max_lines_visible / 2; - if (target_cursor >= viewer->file_line_count) { - target_cursor = viewer->file_line_count - 1; - } - - // Find the actual cursor position (skip empty lines like move_cursor_smart does) - int final_cursor = target_cursor; - int attempts = 0; - const int max_attempts = viewer->file_line_count; - - // Look for non-empty line near target position - while (attempts < max_attempts && final_cursor >= 0) { - NCursesFileLine *line = &viewer->file_lines[final_cursor]; - char *trimmed = line->line; - - // Skip leading whitespace - while (*trimmed == ' ' || *trimmed == '\t') { - trimmed++; - } - - // If line has content, stop here - if (*trimmed != '\0') { - break; - } - - // Move up to find content, but don't go too far from target - final_cursor--; - attempts++; - - // If we've moved too far up, go back to target and try going down - if (final_cursor < target_cursor - 5) { - final_cursor = target_cursor; - // Try going down from target - while (final_cursor < viewer->file_line_count - 1 && attempts < max_attempts) { - line = &viewer->file_lines[final_cursor]; - trimmed = line->line; + // Look for non-empty line near target position + while (attempts < max_attempts && + final_cursor < viewer->file_line_count) { + NCursesFileLine *line = &viewer->file_lines[final_cursor]; + char *trimmed = line->line; + + // Skip leading whitespace while (*trimmed == ' ' || *trimmed == '\t') { trimmed++; } + + // If line has content, stop here if (*trimmed != '\0') { break; } + + // Move down to find content, but don't go too far from target final_cursor++; attempts++; + + // If we've moved too far down, go back to target and try going up + if (final_cursor > target_cursor + 5) { + final_cursor = target_cursor; + // Try going up from target + while (final_cursor > 0 && attempts < max_attempts) { + line = &viewer->file_lines[final_cursor]; + trimmed = line->line; + while (*trimmed == ' ' || *trimmed == '\t') { + trimmed++; + } + if (*trimmed != '\0') { + break; + } + final_cursor--; + attempts++; + } + break; + } + } + + // Ensure final cursor is in bounds + if (final_cursor < 0) + final_cursor = 0; + if (final_cursor >= viewer->file_line_count) + final_cursor = viewer->file_line_count - 1; + + viewer->file_cursor_line = final_cursor; + + // Adjust scroll based on FINAL cursor position + if (viewer->file_cursor_line < viewer->file_scroll_offset + 5) { + viewer->file_scroll_offset = viewer->file_cursor_line - 5; + if (viewer->file_scroll_offset < 0) { + viewer->file_scroll_offset = 0; + } } break; } - } - - // Ensure final cursor is in bounds - if (final_cursor < 0) final_cursor = 0; - if (final_cursor >= viewer->file_line_count) final_cursor = viewer->file_line_count - 1; - - viewer->file_cursor_line = final_cursor; - - // Adjust scroll based on FINAL cursor position - if (viewer->file_cursor_line >= - viewer->file_scroll_offset + max_lines_visible - 3) { - viewer->file_scroll_offset = - viewer->file_cursor_line - max_lines_visible + 4; - if (viewer->file_scroll_offset > - viewer->file_line_count - max_lines_visible) { - viewer->file_scroll_offset = - viewer->file_line_count - max_lines_visible; - } - if (viewer->file_scroll_offset < 0) { - viewer->file_scroll_offset = 0; - } - } - break; -} + case 4: // Ctrl+D + { + // Move cursor down half page with smart positioning + int target_cursor = viewer->file_cursor_line + max_lines_visible / 2; + if (target_cursor >= viewer->file_line_count) { + target_cursor = viewer->file_line_count - 1; + } + + // Find the actual cursor position (skip empty lines like + // move_cursor_smart does) + int final_cursor = target_cursor; + int attempts = 0; + const int max_attempts = viewer->file_line_count; + + // Look for non-empty line near target position + while (attempts < max_attempts && final_cursor >= 0) { + NCursesFileLine *line = &viewer->file_lines[final_cursor]; + char *trimmed = line->line; + + // Skip leading whitespace + while (*trimmed == ' ' || *trimmed == '\t') { + trimmed++; + } + + // If line has content, stop here + if (*trimmed != '\0') { + break; + } + + // Move up to find content, but don't go too far from target + final_cursor--; + attempts++; + + // If we've moved too far up, go back to target and try going down + if (final_cursor < target_cursor - 5) { + final_cursor = target_cursor; + // Try going down from target + while (final_cursor < viewer->file_line_count - 1 && + attempts < max_attempts) { + line = &viewer->file_lines[final_cursor]; + trimmed = line->line; + while (*trimmed == ' ' || *trimmed == '\t') { + trimmed++; + } + if (*trimmed != '\0') { + break; + } + final_cursor++; + attempts++; + } + break; + } + } + + // Ensure final cursor is in bounds + if (final_cursor < 0) + final_cursor = 0; + if (final_cursor >= viewer->file_line_count) + final_cursor = viewer->file_line_count - 1; + + viewer->file_cursor_line = final_cursor; + + // Adjust scroll based on FINAL cursor position + if (viewer->file_cursor_line >= + viewer->file_scroll_offset + max_lines_visible - 5) { + viewer->file_scroll_offset = + viewer->file_cursor_line - max_lines_visible + 5; + if (viewer->file_scroll_offset > + viewer->file_line_count - max_lines_visible) { + viewer->file_scroll_offset = + viewer->file_line_count - max_lines_visible; + } + if (viewer->file_scroll_offset < 0) { + viewer->file_scroll_offset = 0; + } + } + break; + } case KEY_NPAGE: // Page Down case ' ': @@ -3247,26 +3253,26 @@ int handle_ncurses_diff_input(NCursesDiffViewer *viewer, int key) { } break; - case 'a': -case 'A': // Amend most recent commit - if (viewer->commit_count > 0) { - viewer->critical_operation_in_progress = 1; - amend_commit(viewer); - viewer->critical_operation_in_progress = 0; - - // Force complete screen refresh after amend dialog - clear(); - refresh(); - - // Redraw all windows immediately - render_file_list_window(viewer); - render_file_content_window(viewer); - render_commit_list_window(viewer); - render_branch_list_window(viewer); - render_stash_list_window(viewer); - render_status_bar(viewer); - } - break; + case 'a': + case 'A': // Amend most recent commit + if (viewer->commit_count > 0) { + viewer->critical_operation_in_progress = 1; + amend_commit(viewer); + viewer->critical_operation_in_progress = 0; + + // Force complete screen refresh after amend dialog + clear(); + refresh(); + + // Redraw all windows immediately + render_file_list_window(viewer); + render_file_content_window(viewer); + render_commit_list_window(viewer); + render_branch_list_window(viewer); + render_stash_list_window(viewer); + render_status_bar(viewer); + } + break; } } else if (viewer->current_mode == NCURSES_MODE_STASH_LIST) { // Stash list mode navigation @@ -5666,40 +5672,42 @@ void move_cursor_smart(NCursesDiffViewer *viewer, int direction) { } while (attempts < max_attempts); - int cursor_movement = new_cursor - original_cursor; + int cursor_movement = new_cursor - original_cursor; - viewer->file_cursor_line = new_cursor; + viewer->file_cursor_line = new_cursor; - int height, width; - getmaxyx(viewer->file_content_win, height, width); - int max_lines_visible = height - 2; + int height, width; + getmaxyx(viewer->file_content_win, height, width); + int max_lines_visible = height - 2; - if (direction == - 1) { - int cursor_display_pos = viewer->file_cursor_line - viewer->file_scroll_offset; + if (direction == -1) { + int cursor_display_pos = + viewer->file_cursor_line - viewer->file_scroll_offset; - if (cursor_display_pos < 3) { - int scroll_adjustment = 3 - cursor_display_pos; - viewer->file_scroll_offset -= scroll_adjustment; + if (cursor_display_pos < 3) { + int scroll_adjustment = 3 - cursor_display_pos; + viewer->file_scroll_offset -= scroll_adjustment; - if (viewer->file_scroll_offset < 0) { - viewer->file_scroll_offset = 0; - } - } - } else { - int cursor_display_pos = viewer->file_cursor_line - viewer->file_scroll_offset; + if (viewer->file_scroll_offset < 0) { + viewer->file_scroll_offset = 0; + } + } + } else { + int cursor_display_pos = + viewer->file_cursor_line - viewer->file_scroll_offset; - if (cursor_display_pos >= max_lines_visible - 3) { - int scroll_adjustment = cursor_display_pos - (max_lines_visible - 4); - viewer->file_scroll_offset += scroll_adjustment; - - int max_scroll = viewer->file_line_count - max_lines_visible; - if (max_scroll < 0) max_scroll = 0; - if (viewer->file_scroll_offset > max_scroll) { - viewer->file_scroll_offset = max_scroll; - } - } - } + if (cursor_display_pos >= max_lines_visible - 3) { + int scroll_adjustment = cursor_display_pos - (max_lines_visible - 4); + viewer->file_scroll_offset += scroll_adjustment; + int max_scroll = viewer->file_line_count - max_lines_visible; + if (max_scroll < 0) + max_scroll = 0; + if (viewer->file_scroll_offset > max_scroll) { + viewer->file_scroll_offset = max_scroll; + } + } + } } /** diff --git a/ncurses_diff_viewer.o b/ncurses_diff_viewer.o index 997a30bb6d39a7e8c08bf2784b7895ef12219b82..9f9cc27c4471b98b73bada2e1f2d94a009e08962 100644 GIT binary patch delta 15627 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 delta 15716 zcmV-qJ)6SdsS3EN3XmuQIFGR^C8(3o(h`$ls1uXk&L6XrsCfbb1CtG_9h1M$WwVc~ z9*uu|RMok^Gk0b(`<9syLcj!!tg<8Op`4A$o->00lkR`J$@fPFneUGdoG0I#Qq1o^9a3o&qursyMls|~ zQ)e33Rr5FK$%biZKNG-!n@D?!*n;4*)Y zQ0PW51wa_VQ~=2cE(ef?U>blC2&MxVk6;FXDF|i)n1$d901FUY2_P52Yyf!(<|e&m z*trzJ{MaD_6e73^tX^{|fNudvZql(X$9>cwtUz#$Z<|q6BFK%3VAUYFKD5awet_Tx z;Mt5|Vdzr>Y(=m*@Q6{=Ay_it??!)31A^NI{*M8g5G)1jnh`AX>@$iM1h>cSMh3Pa z$Olu~5iEBn7&Ut_kO>I`MWDt)&6r@SC`0=VnIZ8R0x7J5KpG!^W4t5H7xL}ApcZBT z^#Gly6SYv6$R+V1BmzGqUA(Om86k4bH_o=r_>csGZCKc`aA4uaB8){E7PEh_sPO_D zJniswcrl@%S?&elM})S=jmNmBjE5c44eC56qe6d*`0N*tH;jMdwZWopg>BeN21*0E z4qNia21q%mQ&aKtep^^@g~VrI>TzcLgWpd$(}X5?{|w&;8O_RaP_BCixWzj;Yp(H{ zES&YV4Q=x#>qCrhgWR^1?@ND{L2mJGIMnz{bsvU?0~icpb=Xi?y@NdeHOU&HUoT|& zZE5dGS?P+bq1Xpe)-aL<;9>x7HY!7Z42*INPja%L5pMC0f<~fI4gjN2kOPex?&KEg zBy6<)i4c}-yL62dHr6fP35;{sIC%i@jt6@aLGlEU9HZt6B4}<1aUFkSJ1Lr|XF4g@ zyjj7c#yez))+cjxC4Zdobip%$1kKPJrJ(F!f$RS-2vZZD9(a1;>4T>qo&k6U;TeKw z7@iS$M#+>L_2Y&q6Y`FwYu;~r@;&Uco07ykMq?4UDQzWyJOCFXxH)m1K{a9}4BEFq zP4n@KG=Sd$xQpRpfGvLvZ;fm*I9nMmf!c!9G=#SSEM&Meyxkx!X1FYIhk$bk-i~^& zB8WrNE`|lDm*H}NtqfQAL`Q35xDsGH!$N=^42uAEGF%1l2*W!7b~7vnMJE`p26&QT z3Bc0~O97r?xCY>PhHC*{VEA3^W#1yW4!Z}#^@$=e-3-ehz5IU+%Yit|u)_Pf@l0k| ziGgNVg`sA6C%_R5s{xK-xB(Q6XSfky7Q^oW@f3!e08VFE18^3@&7Kd9=NyJxpmqVn zyWOou^m7<)h1#6=(h=SR-8+}zy-=HbjNp#|E;OL#7o(fVUg+ZanqLeoA}3*RdCORH zi2lEw2_|TMF}8p1@W{!?FUG)D#xy#;Dd};H;vT2hOuXgDtH8*u?LJcJt(NV1VOgRHUrrH z#%xIJvFWMebI@mehKJ}nxi-LP!qb7-`|5C@6d?I;m! zDFT13^jVY!Gi)JY?`Hn28uT4B=uv44etrj~?qL(~A^6fMGCXZ~ZzSz7CXMQT?~ks!4vb%KntunkBZN2*LG!OKU({a2r$=`#DTzRcKXM zWKgZ2Q>j*}41p@}-x+&ghx`uy4SRK9L~EylwFmsnFCJ)CxZ4K4|5$u}MYb=p9=`s| z-;e8;VI$)KtLr!6=V|;|@xS7s+mY&qUd%V*=XHOQ`Gn5dj0C4Ju#fg59ixk6i%`zd zfEs}R!-LpwK=yxrqZtp_)5Z5lkj=;VHG;Rs1p9g`Sb$+)AnH1Wxv8eQt5975OSAvC zS+@r3ei-c2VAA;n=zP+mQ|ZXjHmHAD)Tc|aQMWB9(7QphL@_7u6CGH-2wGYY{XS+$ zIK+S1nQeLkTRq>DQ;D>LA*bmU2OH3cuL4BFjVzvhz`7n+KwIOTQ zISXvRASp95graPH65!tW@ztEGHz^47)^?cxV98 zNi$%mKNzNDMpo0eo^z<;oD|z{-)*ExAVQM>eSQo-XY~4fGk%^PvG(*b{CuPQjE#I4 zTZ}aKA*hfv5%D<(_k+gYOgde$HSUOr^BAa{B;M`yg<43=^}ul<&K$Gt%rP#JI4*z0 zM+*+UzF`yL%V40d-@XaN+maFxw;{GO-i26a+=AGV6u1HK9>f_*E^uJ|EPx{!&LJ2? zxB%d2uFY|=$q!TcP}HzRyu_1|gz-ib0VXB+pr6z))g(_bm0ip;7LBym=Q)_>Dk`CV zLXsQn7mJk={oSQfOl1kVvi^3pemZ|kSO_p1p1Xzf8ycqYWCcMNj58%rT7fbFXY6Cuqhp>Jrz;1>G8kxRb zn*J*DHKxYM^zCT6$UBkxT26ePX8!qgW=M&1qQ)mp+M03 zOiSyZmF~KQTb~&pL+&Ct3kGIG2k@s__#cq``&y$*{$?s2xp%acf-gTsG|`ke8RXm2ja^ZqaT!oBr9A5-=9$n5w%>w7*nhI;~G zaF85iUWtX!0F3>s408uarN55RFoEg6KjzQW%=G>}!$QjL!-;H;E6C=2oJ{5%PRvAe zI;w&D{X`n`&R5ICd7R2?4HNV#tviv@x2sw@rIbp&Qu{D5h}GTI%7}k6#ZLr9+NVs= zWAcCHqv|T{vqT?OUqFjaGOpPG_!Q$Ui2ucSD`G9?7p>Fln>OMoAM>99+>P})F~2z8 z*6Z65UlR*B1`1q<_}UoBtKA?y&`jl($rOUTSX7*H8Bs%~n`04VI#F$QxL;6N$y_U9 zVGGyFSO~dJDqO7VY36^b?xkx3>pER+`j>S9#XY_B+{=2-R0{|@P~j8UfsUp#IN=1| zZ;PCdG1f7S?v`n^pS0QO3I1u9eAg9sZjs2z3L!2cY z8V(gDC$_L@m?xr%}sv{a1#I0sf7lxiHG6^6^2C3MZqyk}?zF z1}cq2ILFnwq~6VL--?a&Fm5#G+udxvc+5`pP?txBIgDF3Nt@PCxyT5WUc9_S%isjs zWlCM7DN;uz26*|XWN;-LE@Wh}j2)Z$U%Fh*GMdF=3zL6nw!G7R>?ltjCuFr_)_ zJD$Pzyc~6lN=JS7Gp3#gO%J{r^<&Vxp4mjh!@$9O+QxSppnJ1L_Ym17s#*8u=rEkl zI;siJ7Uyk7FR#|~R~KmYQMfY^vjYwkoL^nlsG-cFp_ZM|_zG(%i)NsPBPg-Tl!y`* zTO{n462^ZFAqk74!?2U(5zL}&)mN<1mPS44x^>2vxh6ukBHC-l?~17EjwP_VpIt=i zx+3Gz;D(ie{}dVZCN#N@aW-Y&N^r@C5#E+Crh#q`;vTMVM|_;|Uc{d;?m+x!#s?68 z8lget2;!3wx3JZ4AmY!Nz7z4O2#;zQveR6@3+sRX%D82vblEw2)9+YbrKLuxI~`I8 z*r!FBCra&WHLHKiQ4ODxJ{*SI>3V)0reMZAjUVug*oRu%`Fkxu`j|+HB1c&T9`W!i3DxQ@@Q*y9i##fhP}iF!>tAH& z7imkln<(S)6I@-T-4^lD?p%EEi*}t&m$!e6;E&5J{&-zue=HbE{&zOD>;=eF%-*~aWqh%t)c0{ZYTx!ZgtJ^KD4#+ANN$JO<7Aqa}IehYtjJ_J{~&ibv!7pePAYOeW6DEG0r6Da;I#wQVXGCqy?ppT9@n^v1=4u^ek=3oQ?)xG1R)M#F< zp}rlgFX$(EXHZ^@@p;5?#utAOC;3U=4n<#zpY$C;eS`d@uf@2uAmWk165CCm{7xMlrUfG(f{X@KIXy^+3biJ~mzu&bH%R9cJs9VCjO&C) zaAAbMoe_UEbOK~++&_x?iPt;Ea%dd%!fz&w^^0`O3M%)HB&CzR0p2T0qFbpv#YERL zQI6I}Qfw3vl`>JTNtAy_3sW4}KszJhcv#hDBkp4C#*8>7)o&ih8F7CmWyCR8 z7M*C}=Be975#E1MPMA719;C$17 zE1Am~*C3w8xT!)mVkpfsh1`g_2@#qkk!c>|trccCw`+fj+EoeBBquJQ1eBs1=vZOk zcnarY_^3<#k>&o@ zlxuqWP1S$XhZG8BPPCl9eZoyRQm&BXrzj+6*{@yYgeeZ)h|hC<58^LnW}04kHW|y3 zOo+o*9EUSz9P*PDonNzACsC&6rZ}{VIN04(dm3wX#%D~8r)XCAVgiW_xZUgxqmK@7 z^NP*1fF}}T>67fH9)7{Bj&XIqHqh-o4At+KNriuZrU3n%6%KdP!RC3ias=a=aw&5Q zm3pBz#m%d!awY8JNa{Y8dOf#wYq=ROrh+1$DQe3Fl%f_AQPxDhLvi=b%vEeqrS>2j zR98-u&$Z0?n912!{&uE%;Xlj&4a?uIHh3j<$5ENQwl}31OmDLj8%!r2;FGvj+97uo zs~dmK>bto*Upwp$W86M4!}_$^7e8_*V&Ch4!ATNrREgrAzU^9Wwri+|+SOEUkzwg~ zQ$2hID2QOzs+2y6(3`DsOBT&qm99+7?bBwL+?`7{zI{r}f?4V=*MGcyy4%&??b9}P zmN8f|zjFJuoU5y}Z7#Wa$H9;>oe#Xum~MZc_PV^v5ht|RDNTP-o+&>xiCXM*(N4b^ z`NJ-GKGCPe&PiZWB3s%-#GH$HQcQm-(jyDb!O0AJ`UebI{qw1{s|WTujDDwC6|8@ z{{-j7H2NQTHIVX`BVq-QYWA4AYR6}9r5jqk0Abm(}P>61Bf?sedk&kwM(d3 zZ%yVi6(=3Kbeo4R$2o3d&pX@c#~#;>Q{;Rn-)yc`hK_tH|2`R_S?c6yt~H}=*}gsG ztO#O?sB;4%;Gw6UiE>4Pv5cn zb4iY|{z8)9CQZIV9eeCfFQ0+ntR_vqS~5J!t}D{cJ1FHl&1(Mb6nOTZ4jRk4&2y!l zmPQYjNw|s|z0)yD{Xxl2$7I?e0%@DWnv+{C;<`8hjW4petyXbct>Wr?iCceQ5$BVq zUaO~)xCIW{Q+JdSrk|g*BfiQ(w`*2L%L62dqH>U1dFg1(!mgD-&s|NCgB zqBRx1WGP?LaI3<4+DgQ+@MMNHrEnoXRsP3>T{0Kla3S9ucI8f^o-sqW+{n*lhy&$3 zhIpwopJCq{`SH_WvbaL;dn13NnFTqzc_R--E|x}q)Yr)HbTV?O)vAAG(kf$mxkK7y zsJ}xGlYD6)-_f3)2D4ECTQEo3H-qh~)Rr^<0%fY>-=Z1z7c=)lWdQv#mGju#`*hxd zVFJ`KzEEOv-Akil!Aw52V5;^KN%S_A9~+|K8u1047IKYdH`+-hNZF&)KAaBLUtzqr zL^51yHt1EIR$Uz>n$mxy$EX}VgY>@1dbgW;t5v<7tf!$=k+Xox>siiGmQ$x3!#+pl zBTV%XQ*AZ1ZB@0MU~RRkwxv|Q#&S-voGqn&!}X6DBusPg?iIsjW4x=>OoDe*^2gVxrE%m9>_0SGz5G%i{Ku#w8q$;2X@`V&34c;|pN%TO>P;0dwf6Yj-yP2mo7C zVrk6=`RkN5vuJ-NDY0j;d4#7}%wNOy;r;nKwjO__yq+OiU&au})N+P6dR4KgLSg#- zT!|y>0}K~vmk7Mb&PM-2W23)dqZipnsH@t=%v&JSXbzQsm<7pptKE+jg=Ut_rP8Qg z&eg>lYR{3{`Pb#P#!*-BubJ(m)Zg>w*lGPyfG&T_W?6qzyO{sJD~bOt8=WzqSTELi zZ`){%cYZyz=BUm3d!R0xTd*3#BOXBh$;PuV(tp7GHD!HzQRfwuv^_RDoZDK~x38UL zs&lpw9VPWcm3k!)0(PQmC{wmY>cvQkovx;u(Bz94HzQ7C+=4irahti%{-qh7sdgGF z&aBrc&!2z1l7E^>|4AA)h|k%W`!hMIPMoc285Kn(M&(7AewZ{b*eGcV3DQsCi)F*h zsEp2rvEn5gCCSo$ZnvtmcCO}MK~1sb!8o~NO_)o0FvTYCrU}o*h34rJSQy@BbMwLw z_f8yWx_e$B>v5N}k`trWyrQGyFm064Aw;sxw)uZhMhD86Z}VDYEUJo2YKDz=3ms(;#7oQ|3IC7c7#_jQ zA8UW(4IScf9K%Cpbaie~_`FoOpA{zC#?mivDhSV{09AkigG>WZqVF3divND(M1pY^ zi9TDlMPg8q2tWPrQUzwqIp!(j^DwCAUqV+;He6uqCKq&6!~Z5e-uIU+d6czK{~2XY zCzAh-4oQB8@Ep}1siyyjuuL^(h#Y;-urWQ$CeYLY>^pf70MsV8j+X(~V3}X%&0kB* zCqaY9tAeIk1kI6xrT|x53W`a8PhD5E(x^$1Gta*P2iB7Pw>?t<(*glRml0M0BY$yO z5(Ee=0N%+3NlCOsVFB6gLyQGUIe8F3DUMTH3sRnpMGFg(tzQg)Qqs(r3xIK_(-suv z=}bBSNX6613>Kj3&U9j|n7C~cV*#ppNKM*#X{YY@o%8=ME(ED-)I3xo{O+IA>@oitgdT+fGvlH6g>CPkVAVC_Uq^xqOv~p6wt77J5oS*4u8AS7`TpI zT}WO}p#CWAH{L>(5f7m9U2a)pGzSp)5#l*?C$Wdd*ozvTh0z>D<&Us8hr>y9XZwyEFF^b%y5HqNf zY19``TR?RIH3d`_5G|lee}CcDIn>-NAXX?)wE~*xuZ^I(ht>ji6%Z+)t^j`lA}3qq ziF7(Gdu1+zW7CM0pxV_kYP4Y(==I;hlj^ zs;7z>IAjEoGmvr`{%JU7Ai0NC*hk=`&r9%5!gZI3*o@9Rf!iFykvtmZ2mA_R(kgi# z&*kBg?;x6oQw%>qmzsSJ{tQvT!n(}Ek;OiG6n}CNj&XGA+g`fa`w=_~ znZX{eIfgpEWpI3)CT31+zZ_x7QWFdD#3B!IK)jwqm2eEg_tBNBil0+0r+D!JPHb?& z35yF3&cU{h?w2+<9o(^Li`BG#OH=XE6B?CX$F{ys=q_OszbywzA6CS$ zZ$tWs_$C`v&JgoO^{b1NVwd8!;56!~7E$_?d<79XO3ZaJqXk>$)HGG!t~_k_;aFBI zOO~Rl3vSI$G2$p{{v0)rQgbgi@7>be{&_Ta+~1@)f`79JQ%50slX3=LuD^mxZm@#* z2iTt{kn*Hj&*Oz91mwFod0kD;<%blgUJMnZ?om{XVvh{MzJh2P?fR+m46)V- zh=w#683J)bri}v;BOWo@Lq~PtJcERkH}Ci1LJ4pYWQn zOn;zT!|ptf;0PM2!Vlo<(d|{?ORkE+LWyQTARH-IIa?2ZX%S0_Z48cRNK@w`?UJ{xl(~tU0x*=64r>q z7XTw3hFCzin7@=U;z8i&TC!lX$tFfeHGd&mPE3=jyNOn&1^v}!(M`8!R`5Leopaco zRm8fc$6X;MaKU=C*)C|D&qFT2PJ}D+)m?<`1}g`7gL)jfd6Tg7)3RKVO+ZD#;unR4 zl@V?eEU4=wFiri4^=UZIk}gVtG>UUdGiVOsN%%=~QnzOiokC=86279Q^aPwsY=7I` zIk>V2orOnHy%X*c)IUVsLo`jmH(O*i=ORZd0sjNkrqIdg`MC(Yl{ORvr{WA6ZW*D19%YpW@h_p8i0nIo5cv@kXeHNS0*w=lg=QM_9pRc?x*oDYpuyYQ}14<7OBH&)4dT_GpQbbrSVX;hlx zbRY#xkSQvniJ%iF;hupY0Z)){lUR{=mryE6kOLppT|dJu|6GxT-Ws*(aewclnw{3o z4(PXL-AsJ1xL!o%8e%ziHLJuQzM+KnCJF6+LWB1j%c?)YZjZy1!A>oM`;`p-LId1~ zc7A=cB)|Ux{tV%UTURFF%zvfeO2Iuve7dC*w@uO@sVsac?KO!D88qoW6m{4J3ld#v z6M=cyvodA0gvs>5Xo*1FB!}-mmS^PZCU^I+Mr=&q+^JcLq)^3%=mBB_B$?kQm8ope zf498Kh-N-A^Yhvg=1^f8pOkT=0)Fjy_XEqbMH*-wY=Bb~D}{(`A%Eh}1QL0W_Zv^4 zhl-N$z0Y;_Xh@#c{m1lee?LyK4eubM*&@^A8Dj62*`Q&I>S6p$&$EVgL#}nuFNJLOllc# z*1nuO%O*hskR+Dkkit#lS-2*naJdu_*{>kX?B*mpP`Au;qnZvGT4zr26Q^(}^`UBS zzd>=}G~w(XoRek;eW>ZDiG|?)A@hB$=KGd3@moS;seK#Q*ME^@* zBpYD+RGAJ){C~EKTi$K9Z?iW|ns*oboC!oHU^fm%s0XrBZZVoOeabmFgl`Oz6nTnF z#4_A>xcjPQQqVkVj1+f^dV-7;8A>^12?Z{qYE4O4jQ*TdlUYiKO5|WtEKyS^K-`1> zj>)K&M6hu3+6pQjB0+qYQ<9lel6m73@b3|mf2*{*^naOJ^DTLX{INzO5r&=UdyP@; zO=!KV5M;CjwSqgWJ(cSgYxZcQN3{cYNGnZ~AlSISUO%V zU({-mZoc}Pn|kQ2Tlp_8>L zmsF7~F{e7SaFF$tYt;Kurg>4l8%+^w81bV^MpL=AH#Hhr8S=C~D5LHme*co>XyI?m zVmKyWdIIs9KQr-;Y$4vhClRmhJtPS+S)~|E!hZ}tfiOnT1}$pjhYB;K!Uze^5oO5s z1yN({3zfcy!OF9d6d{!bjD6Iao~dzzCdqCh2{$rna$3=(hiJkd<3yCU%|z)|MByUH zW=4C2(SDM#-mwkqOB(C{N@M+Jg!Lq;!pB7UV>G@(7bM-_~VoUOQP+f-8P*)2kOa2#=AdP&k^jaD*!s2^>s< zh9VB<(M9ldPVpKbh-{v-B=moQ&=5Scdij8cBB)!4MZ8k2m3S#Q;gzpxEuedd9|Lpn zYwq`vQo!*!&E~6`_DN>u24Y8#Dbrz&&q8MBuKv=;&?6srQ|OEEgkD}*#nEwiCVz-s zZ!)`jEOxa$G?LUGD+da5oHWyFaa#K~))EedJ~ojgPIcxi=h8urJ`M4Dfr$3Umolh( zjnu2^aUQKUagi#AMWJj^p?^{@?mY>G@J=x&$Iil)=g`7sw1<%>Vi!R}anm){Vm=Z^ z=L+JNQ8$5LMk9C($5LD+o`frdU4JzFb`DxBS!`ju=HkVgmJNbrKVO2l7|j*Ni7*16 za&`{ctha}{^cd(S(ePd)3n6p&p<(<-%~5vS$`O_oXm!6 z?E1Jf+LaqK13GdYDe{RCyzvQgXf1f_m6t-%AyadjwV*RiPTd(oK+N=)Vx}Y4Nl+0^ zJK6awj>2;hl@oeZXBE|19#iS!>+p;hdFdx~5H;fU3_4a(U&J$SqHP)VE7#H1PdD^h z563ru8Q=cJ{mMCEFwy-nV+V9%ml%=6A00T zk6mZ~wmPmUIHwiBr2p&mO<99^wGd;-VP4j7&XP;2J9BYoj@w%SaN1-6(c53p2t7}N z)3>1Qc z^ZrjQ(oJx)Nbb^nzF!YitNk0YNIP&y!t$3)?x>JGtWqkodKqaE@wY#t>T_k4*GYJJ zM*OaEoCP~LxM4RomA=ZQE>Ss1&*zP!<){$VgP%dceQwx@U-^_c2u{PHR_MK?Fg!~; z@Cz>(?_5&HCA^Gw)PLm4h{=^rQ{-UAh+(tveSiQlC^6?nLwp09T zBc?6k@^_wO3GWy?SwbIMLS9H9@Bc2Mi|jhuzl-)!*cXj2Rijm`{+@B5oSgUBr`UJ@ z{_iQ@{Q{KE}4%_d9ltE2zef*k!oTSG;C=YM{yzTL< z^(c%X4)BhU2Y+A;hEQu94yk$15$6x65&IEdFn!@?wK8FoEJtZ#3Eo^FXNa#eq)92Z zBcuj?X*%oAi*Fhy%i&;6@x1s31)FwWaeiL>c81hP)N=7Q_Zs>~-s>}u?-ets=PsWU z7amX(*XPjW%;TGQe}yV?eUi+CJ*(PNU-t7|qo}6)6(2IzSYLoR3(p-+dvRq^n}hEzul-QKbzIjCOmRrC=M0YJ&^U+CG;gIePqIJV zOaX%UHh&o}P9_NCc)nEDFi8bm@+~g$tCIK>Jak<^W6tU!Tk7GJ6~bukAlIBS59}F!$bgAnKE%Cdt>jB#Hge7=J2hR!hvXHEGV&q6be32lW(O<7h5% z@uZeBYhqn#-b2>|v`um}GrA;kT+@iGr-_IV?`3pI;&VBs; zHPm|-b{GQU|9s~GiSku4bIlJ1~ytbr}y(-DQ2ZlZuhc;x{`_2}knO zv+y)4Lp2Vs@rQz9=^L!mN!Qeq^7|#+d9;t~M2rp<{{_zSvd_UhoXIEEI-@oqHZKu5 z#;IiaY!RKDeGx)uQQy8sjl$-}|0-|%cYpF4ATO#H)qkixqbdeodZf#Pm#saGdIH~0 z-GqmfWu78aoHfGS?wstUfAE||6DO>sxRaKws$BPy#$J$8is<$FzVvW}blHrF25<7g5ub!wM)MT1JS6s{E!O~MwpT)DbwrrVb^ z%k=76wNq%N*~jwmB)POT%S4G0rIwiVOHpYfT!2DzF^>+dC&Af z9!Jz74>`e)pg?_JQF%!G7tGO0t09!OuVVo zQ3)l1uPLryKnwA+Of4avhx=tjE@O8dyWWKT{mrcP*G5FMGh;$I!!oJ3aXT#Ja z;mK|u>O&;uGQy)A5jUxfqn4D?!N&hoX%`d-cj>r4{1vX#&dRPOsDD?iNp0;;k%3Jp zkH=`Yg8VuyR*~<0MkwrZx7wjDT2^ysM79ugkwvudYBpJDH)&~Cx`_B0t+`e16S+ug zUqTMU(~synCw}c;=WM9@ARxB3993jKMRGigk9W zIuZymzJeyc_N2%fCx7%_WxGoHDL0n|i4%l#>=TUL!W#i5yba`PDuviZOw~%LTtb_A zcj+{NT6qS(o19$lv2p^uw$~9@Mra0|L)2v#8om#oaj-(?1cXIKC+BcZKtTA%;GaNc z3KbK?EqCCZMe8zoUp$0|bZ`;TBI7fj!fyK1#+lXx=Ak^N-G6taSeD{RM3+sRliaqN zXdhsk;3Hx;lDif+JM2PZQFYR)Kg zFs)?h?xsEi=YKxZr0(RDJpx(y|3mhV95V5D7dwSJ`K&m|K_P_rv$CXkzbr{kt1l_S zNh;%i!Q`n^R2bp!p`>uBe|1R_Px5OdDLhHxO^V$~@i)}IIVslY){+zzTyly(Y=45Y zg|l6n<+(YK;V`q3km8(HF(Xf`uaoLogKe0<33-JCDt~Lfh2@9v&{LZ3LjFW%*R)?_ zU+1vTaeD})ASqPx-B%B{sR99=g>x8=6vdDC5uhh-ZRgfZ1l-Ym(3mrjgrLAAc}(w7 zz?|ZYV|IRuDmh0u<)B`$)W-|FGO7<7P;mW2tpiDO`Y)qGC4o7vz%_l3U21a1tH}Kx zfJ#oEW`7G7PQd#nYUt}%%pJHfINmO$Wwl)8^c!|`YdNQ%Z#Vf%Ehl9h<<|n6UdX?M z!|13e9V@zuD&tUv%3~p5v|cB>nC3v@>7SEDy#xD)sC;alle&)UKB_o&xphg#h!LJ9 zT>Mr{Ydosjt=F6R)yNZu{-SKcMA0$%wvMmEI)84UnA$!|xSEE2o)s)#iLQLWhfv5X zlExn!L^m;;=8S-oMdNVDXx0BBMo&a8z`I5T{S@S0XW5&E^Bg*s;Go!rFv3Z!{$AK; z_;YX))uXWg63!ky{)Dzt6Z-JL1n*-8<%q5%i1i(0O2t=V1ZVvqfl(QwN${Db5i&yO zbbl^SyN1I8C&fzy`^mj^U*z3XK5w8hoO`st(W0$ktM)gI_fsVr`vo( zdhL4^gb{Nyxl-Ru%==S_OmHTz)=U*CK9E5AYXmh!Awr^)gL+fG%k(iMVG~}?VJR{x zPg|U8Ndj}DhO&>L?6=srQn7F48h@w3uA;sVWCx!Sx4BWx>tUdxv^_J-lpTyHo2 znh9A%@Q)D7a1eA@F?%I3`z}7E(#uDUNM~CjK~!?c*J#ddVGSXv((}9%QGctFfjh~I zoj~mZKReH|Id4)T;!>M|ge#{;#k@X})rY19GQ%UfmN>&Q^7XHO;~T^&|K<|2%6}~z zM6b@hCfut7qbkF+ly}@$qUk)y(NLykSQC>BP%wqs2f%T4>gXbz3#@v3HqO8)LE55t zQdYw7hF&ImG-w{Nl6hB|zkf+@*#C&n6~pKbb0&J&ib0gx86+Z}+4=L?oj%KJyfGN$ zf_h!xGwV;m-2?nHICnFD9hO6-=~vC_nG>VBms!moN|1`mfOT!_L$&fD zA03N|*yck(Ve=5s+~;@*=%?1w7_RaOps*a`!#_vF^BLmkRn>w|{(memj;m*7H%pp2 zkJVZ_kJV;AozeZ1M`7!SoHUPR*>8{*jgN7VvU`)-m?Nbz$;VRoIs!2&M{cVVJd#z6 zIyc5qkLHwmV%`j&b|p62de|y(ULP@;hqISGrn(34oM4Z~J&awWNDiZ6m=97kj`B)Q zuXt@9K0Z!UWwKzYd4E+e`&6Mcs^TSMbxb!o?$jVVwq(&i?eJLOKI+Wd|=i*G(qlQ z%{u3Mt2}NW`Nto9Ho__6%!fy<5&nUacvWdBiPtPMlXyKpHh*`Xy_|;$UIRe;I)?_k zcFg2uLU1Op^HtuxcXH~j%H(b2OkNj3JOw|eIG3rFLJF`Q-^YG(OX=Hg;+ee@aFp^6 z_A%zT#L4R}oDsclWkj!S^bU1eRQyx9s@ESgYN17}XqjYJaNj&xtN)u}Q;E`ODay^r3yb${j-c#Ja}HY&LJ zkUvQ{hfc=c5RP!V13^?F2RIlEEpQ|mn#2nVCx}e(ik2r$csm&2WAOpWS%V4GP4bB} ziW1s+FW&bMUNLHPl%tvzL@1ByNqkv%;lD;=$C*P3)J$@=uV)f_xRHk&jd1d^QV9Rg zMi27nn}1R2ARI;MuTvvZEg5#|6D)+*uWE#@aZOVc`jsgB_zjYUPR)JCv@CR5vhZho za#sA?H&>?jcG#`XT&%X2RbvAE2c-KEQ3rmw)*bHoYAyJsqK^Xg{MZp@%m`romh+ zeRIdsXlloAu}uTV(3nP`PiG%3;^{QHb*2@ChPvcMWw09%9op6~mgYA#JQc@=`0bFc zxD_-SvT^BASbI%aqy5X+a|_8i)Q#~Gp<0Tn@A8j11o_bM^YiTWnmb|UIXk-6TsZSE0NJ<@D&r)C5DwvHCQ!AVEv z0tnUbc#q#3y z?H6dj&wHdTWV4r5c0wAypQzl1w8o&7+fbRs!JPKWj`8lhV~$TVQw!hF5~o8qQ}C{u zH!t%;D|uM|Sph-XtKq!)<32h^>3>fyF;q)rXP=QTmCikuz_MQ<7(Ap#?!rT^?Ew2( zD%ef0)%u{HVp|N5e*O(1xb*A=mgmU1_F`=Gz*wCO$0?p z9MZTHGh#po6-HF}hM5GxF)C^hMl*^K0TGk{<2bm1;-K<=b?>bJ{xRQs-}f3qX7(5B7ue!C$>q`&D++D+(OOm% z+6Vv4Cy5<5Q?K|*aaV278MB4vvY0*LjOmlo0mX^aH&f4`EpC8Z)Iw{5w04M`&%KFB z_^}}0l*3q9T$l;B2KkwRj5!s&Imq7|%viXBw*>jSfFt6fCK~uVgM2|MV*|`}TPUBq zG8h}Ez){=_>I3z-7)jn18pCf%VJs&uO#FT>#SM%#WafJ#8S5q99ZTujkhpO1 z%~(p(u8wmFy?~O(zG5)vyjE#zOnd_7IxhohOZGu{8TM)Zq z`Vg$K2y$!{iwdY$aH}udGzOGi3E}_hGnBW53c1I}Sc@k;3PxVDgJ7}SuK|8gXMCz36 zd%(TK=h}k}(h(EEYNi77c?Rq=OB^etG(JzzI7;V@qW?JZdmr{CSU!@{xcVWghKcD| z@elJ|VMQD*M@$X#<;QE1b_sJGhG9}gGj=7X`UaZ2is_|z%=)gCBHBWe_<2N1AMwdJ zO7>i-tOhH%CdvR4(YF9OLaAF!70}-0>u0hk;xmBk7UOOKa@?iJy#_G0T`U1|aJ$!# zPYbmMX`dU@UPC}FgdmpMzv+!Jsf{tT-=)B!_yZh)H4@%=$7=;>F@Gz8u?}w}WRoiL zH?L&uLj}%->)rz6L$RN}V4B+z%|z08a_fg;2b;mxUe5_uIW9(wr&NAI%p6a>`AM;K zJlyw{cp6af>sTX~`B{&ugm|G@?x1bc@!@^eV3 zh1Li7E5Hx)MxHU?qYbYRy*L~S^g?K?uH~wn(ed1UVrRb}EwYy2gPM}fz5m7vWdg+hE z4l>Qs8sKf&jI9y(Pk>pT6dNbNENjI(6JVBS#VJ6eo>OY?3-IOGyGg;F0e%m1V7r13 z2l(rNUx|%uv`g`i24uwcgyrUmu@lKZXkKiN<%|Ho4#8L%>r^|9)W0XzDuagu%*7DX z?~Ap-3%>91n`x6z%^u8pvSkcwp)*VP0R+T8kLxTVUj`aq>1XVK#~@=5<)?Xh6dciM zPQcJ8mq7Sf!6?6jQ4kL*cukNWgSelV1SJ6{Kaz#SJ#mqwTf1{EJE<_%2U83CF!qI* zek-MCo%VFsrdJX1Un#JdcYw_g3Y^NjV5f6p%dM0W{MHj~X5<)Vk6Ler??k94KiWL@ zvsx}fPShfTqm_{!4Dv`+jTi;54cZHyG4WdvX7Xbo+#G8NrG-|S2xAqzE$GuDb<+C!cjF5t}6 zLc8jfOgfz=UhpCwbM1g%W(j^f z`Fqduq?rL!Yy{9O&k)n(le9St*c>tPc9gMlo+wo3j}E zT<#(P45FlrD zm1XrtJbbU#H8)D< zx(@{-MpgvY9QpHcCKZVOlOc40KEMi#ARi8v zMJASUx_J;i6BNA7tT7W6j3Om#(5(ta3n#sLn_@GD??FaPR?8cMd=a+ap~swnp0X?2 zu@Y7hyC;*I-z^SKrX*e}&P_(yo-N|@xCj-rQ#euU(Dy7iH%4Kf{P49~5D!NC^tRh9Nn=Cpi}@0i zm_6NMEH-M=es{OM?1wBm1tuApA02M1_dC28^{q8?%YKV5w;v01%War%G+Uw&Ec*o&4Es$Ofb-ft%u*+Q zyJf$}-IrvfYX!34f;c!8MdCt?b%LL(lnL&1TM53V%1G!a(PJ90^9bX57jde$v69K^?o#be z1#blQ{jSKF5C!G9iX{eM&><-Dd<-Iex6A4mPnGk%FhhrezbrRydH+!G*X717?*o@E z8v*o_74a)U$T0B%R}Xm~&_W#*#-%OT>58%9s{*1wiG3RsLp{=Bc*bOypx|>R!$bxD zWHRg#X))YT5&tK}uy>@zu+wCi9BJ{}0)CEKaeM|P@Sym424$o^8`W(K`+^x}u6++e z@?#{`%VJasO4Of4SqUZc?P5g<_0f+-`OM1HUcqHI@P&A-gfg<7(bjZp1(yXZB0AdY z7OU)cmYT%tOxiL5J;FN^qz8!HndH~6i`I`}4L9xzqi9?&=3+XdAX+zlc)Xl{iDF); z;3g=8b7v{|xWtPy(IUGdy00(16%LIN2WR4TmMeali6ERP(q>^;AjZhyccMZLFNoE0 zXcsMVI4us(BEKiXWpq)t5c&#zjUQnxqVL2t__lECO<-dKKZ$6V9&VLAD4({eJ~gvY2GH5;?PYTjQJKtU`==g1FVHC0>4)Twl&1xtO%^X48IuDKPdbyzrx?D z@LL<=D-}L(75z#nQ*T$Bmj;Z>&Tdgsid)UTUrm1`o{-Z=e>Htf>@B4f{-rowN;&+X z@Xw}RDF+=xtZPP%@f`B0!?M(dTH`(BQ!#BeBITG^Ivc0v=VIM#${d*$W?5;oxhX5m zij*z2Mz&|G^=-900>vsv!L7C0Vm4UV=b$?pA~G3ys>1;>kHsW}bL;4)x7>Krz^93iN;ysLd4ULAAci6zCxlR|c&f z7Q@QOKX6r;mHK;Yjk3`cW;`RHJ*k7ZtJP{pE#H~R*rVdXGDPfC;zi)<8N9p4uozZb*RKPlI5sPzLmy~lg_8%k6sxS$~Uw*W^ zSiI9?Cj3t|cBji+_NwJOS%T9omd&Ho*i2`vx$j&pUjg^_amI?)dDKhGb@mVkz*d{+ z)Wt9JC|N7TFaEn=kl%{YcTw+NPdL3MYEvyT=^XgpG6-2#hz7S=G~PuSyhS{Zjr>jV zHqc_;y-fan;=Ek@Nc5PGVZRtQA93`#xMM#25hsFjGEFoCy6&2A%N##}57Tc)sj71% zokl`Q&|wVdXyk!wyj9gXtfvp$@#kkUcAwD7Vfy<;W;uvHAZ{!Nr-#KHK%-VVx(|H* zBZ|?Z3P$IC13Kt86pTCm2EcDRBCJ|0@A&#!bWwKEUXHS9cUT?5#sJ@eY7`^RO0FJ} zPyw#7BDVru6GSnf(nLiSC2v2PG{1uJ(%?ZgNmVeUkS~STI3hj*J1z8DfNzI+C#ZEu zm8;`{EyMwKz|Yu6;;t(47ky+m6vqv%fM0-#589Oq1^g83bI9(rx|Q*=p*vz%H?{)4 z10MLYd;2*4eF|g$76(C9=MZj>DPYIEd!8*E5u6@X~pG8D=tTBx&&z!?$@Km&p^6vwB0(s z+p8$sg=xF>`q)-QvP~Ofx1J7KtM~=@>Nnkns4`?J5z`k!rEwy#5U;S~?aCWcC08Um zVqI*-N>JBQ_h5=bTdLBWMuV?wS4yR{(1uDHhg{ONJh=m{NF_C)HS=hGbA5fK@mv+J z8Cn|@()l4cCBdB0LSI&L4LOu}$&Li$64gWP2!373e?n;XR1;?^`2aYomx9k#^7CMt ztQof~gNd8}gx1Gz&fr9-;-evEj%GxHv7;}4D4(%Gm$2={f5Ztj_>vhvkHTYve~4n# zS}AW{S1E95Rq7n1(ADCryD1}>ry21o9X%T5W4Hp%hp`(KXg-YHq`*SQx_8X-HWCJu zpX_U4$VDt)yZC1Iv$f?`bBAmN3)FHEYRCc9CO$2QQ%aZHg_qY z5De}TpWj0%Bkxp%M%gPqG$k3X*eqhDnsKSb8w9G~E^GZ!wLXu{7dKR+XZf8;7*(Ru zc(7X~7Gs(>i*?mV=)Z_v)#T6Kp&8#ppx3YBN$}rJ1@Ee~zqQw7ef>q!uL^Gs_2KV| zyc(3#_rP=%9Y`EYkEVKVUY+0 zZ>)kzq7>9o37bTT+FE2pw0OK0T>6V061qYhtOc_{;yfVl5WDr(b*d7wx;o(Mt>Vf$ zq{*LcM*PY58u{q;SDV$6;dMklinS=%dL3z1FkVOG3+;9jmS1qm$C90jT9NU>^`_1F zJR-yvnr=K8>{7^Eg7!(f4BLslbri*qii41aSBUdcqzYSxnTI=rB&&CY?P?Q-4DwmI zN--%hM7~>zP-sYej{=K~gsfKJBtzaB1r{6fE>fiC${Yz9i#I{usYa<;tu~KgnHT(w z-EN!JW_tWN%j10Q>3r){zuneXon)IJ

pq5gw7J+Kkr+`AB7NvygAJkdY9jYPp=T z%xOr70^9emnJh44eE8b_*I6tIY*vw;OV=XB3v5=AF2yAqhvj=*n(2J2iGSV!KrCHM z(M9iZ>qc{`TAn2zaO*5NS8cSQoxJ-2g>Qolhq!YULKcno$mc@47xDJJ=qHD8G5%gk$w{Gf!Lw~L$Vski4fZW$Q2 zI9Csx7rCOgp8OMXdG~_|ZAOQY%WpLAvR|Vd;w5`JcUs4I6(0+wW-6oLDI^<-FuQxb zj^BVpm?KWsQ(DUP++{w6w3`nrH}Qz>ZXnq>D7FeBV&UuH>qpsNthLjAbb&?yF(0520YZ*a@Mq}@_exiOFAguE5iy&ro@A~!AHm-u`UPn-Z*AEh zq?BmBxaHg<^sK{n=x;6S9-}8>Y#+VdlDmPtz4*|U!Ztb>#e25&d5_lX{Qj2qPw9(T z+tITv+rFdUhw~vVxBN`YY`n7NgA3I7e7Lg!>BpSxDe=v7jsy|?xTAN=>gOE}TT0l| zCFD6 z@L-&C3U>Kvs9eJsZH!qIwc6Qb%ZkNXR}ID1QST;l%cbMwUq(qyG#G&GDT-a*MZWcv zIFwSfMb$L;IHh;dm`2Kem(uq?McIWI=mz!6DD{h+SuU4?mri*eBz-saaCVX2OtAwc zJBKaZBRLh5*I^s%rECc-q%^r!P5L2<#qK1hkK&wuXA1e8S5nlYmq?zpOHg;QtScs}12VDsh?jd^;#vt~b#DsX!A&L2^r6JcUZ@N@=5E$*9%Vyk+!gxiCg< z(H;w;N0F=5lp}|4@sH-XkBS`HJy6oC{lbbVM$CNOk=qjfw&QNiTcjNh*ivyb&^Fop z6dod%)-G1+pglIX@9i)iL^)Roz=v(GcEtw?YP#NmNJdTw3Ex} zp@?M^59B}YAblN0IdiDT9Ta055c{!M^`Rp%IG!S#$+v>^8tPw1kxi6Q z0978psKDg^jRM*K7X|ugHPtk%ordQbYTPH)h`LM-V}8G!cOBOfF6!WxB6jPbLkIUK zj;r}}QFYjnBJSMh_%2DGD)(eBqi|;|Wp`olb)D>z9|}7mk`FkNTADs`oDS>vMO~H_ znRkOWG*9c9r@h1SwD<87ou_&8Ffadl@g0mcU!+v{>jXtKQ~EO0q`}s5&J;pEj-E`eITW=_Zt8u4T+I|w zM&2?R5fWiCf@^#5IAUuL^V9Ib@O;MyikrK_a&7x_#eH32Bk;QN kdRN#;9wYb(3~k~%IV=*57$VLd3NxCcS}uNjB&_%U010MR>i_@% delta 10017 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 V5q=IsgP4WEHl$tr>RedA{|2OkV7&kU