From 469c5a941bb581338430b854a81e75ce9281d665 Mon Sep 17 00:00:00 2001 From: paradicecity Date: Wed, 29 May 2024 08:54:15 -0600 Subject: [PATCH 1/3] added ability for the user to add custom functions - new menu item 'view' - new popups 'add function' and 'view user functions' --- calc.py | 28 +++++++++++++++++++--- ui.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/calc.py b/calc.py index f50fe73..64e9d98 100644 --- a/calc.py +++ b/calc.py @@ -51,6 +51,7 @@ def __init__(self): self._button_functions = dict() # a dict of all the pre-defined calculator 'button' functions, like sqrt, sin, . self._imported_libs = set() # a set of all imported libraries self._imported_functions = set() # a set of all imported functions + self._user_functions = dict() # a dict of all user defined functions like {'name': ''} self._all_functions = set() # a set of all possible functions that can be called including buttons and imports # use the awesome math lib to grab some pre-defined math methods .... mathods? @@ -151,7 +152,7 @@ def __init__(self): } self._button_functions = built_in_functions | one_args | two_args | iterable_args - self._all_functions = set(self._button_functions.keys()) + self._all_functions = set(self._button_functions.keys()) | self._user_functions.keys() # add the math functions to the exec_globals so they can be used in eval and exec self._exec_globals.update(math.__dict__) @@ -999,6 +1000,10 @@ def return_stack_for_display(self, index=None): else: return None + def return_user_functions_for_display(self): + """ returns a set of all the user defined functions """ + return copy(self._user_functions) + def return_buttons_for_display(self): """ returns a list all the buttons (functions, methods, operations, constants) known to the calculator """ keys = list(self._button_functions.keys()) @@ -1035,7 +1040,8 @@ def _print_stack(self): else: log(f'{len_stack-idx - 1}: {item}') - def _convert_to_best_numeric(self, x) -> any: + @staticmethod + def _convert_to_best_numeric(x) -> any: """ trys to convert to an int, if that fails, convert to float, if that fails raises a ValueError @param x: the value to convert to a number @return: the number or raises a ValueError """ @@ -1046,4 +1052,20 @@ def _convert_to_best_numeric(self, x) -> any: else: return val except Exception as ex: - raise ValueError(f"Cannot convert '{x}' to number with error: '{ex}'") \ No newline at end of file + raise ValueError(f"Cannot convert '{x}' to number with error: '{ex}'") + + def add_user_function(self, function_string: str): + """ adds a user defined function to the calculator object + @param function_string: the function string to add to the calculator object """ + self._message = None + try: + exec(function_string, self._exec_globals) + # get the name of the function + function_name = function_string.split(' ')[1].split('(')[0] + self._user_functions.update({function_name: function_string}) + self._all_functions.add(function_name) + self._message = f"Added user function: {function_string}" + except Exception as ex: + self._message = f"Error: adding user function: '{function_string}' with error: '{ex}'" + log(self._message) + raise Exception(self._message) diff --git a/ui.py b/ui.py index d48b37c..3fcb52e 100644 --- a/ui.py +++ b/ui.py @@ -243,6 +243,8 @@ def __init__(self, settings: CalculatorUiSettings = None): self._menu_bar.add_cascade(label='File', menu=self._file_menu) self._edit_menu = tk.Menu(self._menu_bar) self._menu_bar.add_cascade(label='Edit', menu=self._edit_menu) + self._view_menu = tk.Menu(self._menu_bar) + self._menu_bar.add_cascade(label='View', menu=self._view_menu) self._options_menu = tk.Menu(self._menu_bar) self._menu_bar.add_cascade(label='Options', menu=self._options_menu) @@ -265,6 +267,11 @@ def __init__(self, settings: CalculatorUiSettings = None): # add a 'undo' option to the edit menu self._edit_menu.add_command(label='Undo (ctrl+z)', command=self.undo_last_action) + # VIEW MENU ........................ + + # add a 'show user functions' option to the view menu that opens a popup window + self._view_menu.add_command(label='Show user functions', command=self.popup_show_user_functions) + # OPTIONS MENU ........................ # add a check option to the menu for 'save state on exit' @@ -279,6 +286,9 @@ def __init__(self, settings: CalculatorUiSettings = None): # add an option to "edit the plot options string" that calls the method edit_plot_options_string self._options_menu.add_command(label='Edit plot options string', command=self.popup_edit_plot_options_string) + # add an option to open the add function popup window that calls the method popup_add_function + self._options_menu.add_command(label='Add function', command=self.popup_add_function) + # MENU BINDINGS ........................ # @@ -335,6 +345,69 @@ def __init__(self, settings: CalculatorUiSettings = None): """ ------------------------------------- END __init__() ------------------------------------------------- """ + def popup_add_function(self, function_string=None, parent_object=None): + """ opens a popup window to add a function to the calculator """ + # create a new window + if parent_object is None: + parent = self._root + else: + parent = parent_object + window = tk.Toplevel(parent) + window.title('Add Function') + + # create a text entry field + entry = tk.Text(window, height=5, width=50) + if function_string is None: + entry.insert('1.0', 'def my_function(x):\n return x**2') + else: + entry.insert('1.0', function_string) + entry.focus() + entry.pack() + + def apply_function(): + function_string = entry.get('1.0', 'end') + try: + self._c.add_user_function(function_string) + except Exception as ex: + message = f"Error adding function: {ex}" + self._update_message_display(message) + else: + window.destroy() + + # create a button to save the changes + ttk.Button(window, text='OK', command=apply_function).pack() + + # create a button to cancel the changes + ttk.Button(window, text='Cancel', command=window.destroy).pack() + + def popup_show_user_functions(self): + """ opens a popup window to show the user defined functions """ + # create a new window + window = tk.Toplevel(self._root) + window.title('User Functions') + + # create a text entry field + entry = tk.Text(window, height=42, width=50) + func_dict = self._c.return_user_functions_for_display() + for key, value in func_dict.items(): + entry.insert('end', f"{key}\n{value}\n\n") + entry.pack() + + def edit_function(): + """" opens the currently selected function in the edit function popup """ + selected = entry.tag_ranges('sel') + if selected: + start = selected[0] + end = selected[1] + function_string = entry.get(start, end) + self.popup_add_function(function_string=function_string, parent_object=window) + + # create a button to save the changes + ttk.Button(window, text='Edit', command=edit_function).pack() + + # create a button to cancel the changes + ttk.Button(window, text='Cancel', command=window.destroy).pack() + def _load_settings_on_launch(self): """ looks for the settings file 'last_state_autosave' in the local directory and loads it if the user has selected to save state on exit """ From 487a92cc1b7fbd8980281eb0126cad9bf0dcf410 Mon Sep 17 00:00:00 2001 From: paradicecity Date: Thu, 30 May 2024 08:35:40 -0600 Subject: [PATCH 2/3] added functionality around the user functions - new menu option / popup to remove user function - new menu option / popup to clear all user functions --- calc.py | 20 ++++++++++++ ui.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/calc.py b/calc.py index 64e9d98..e55f167 100644 --- a/calc.py +++ b/calc.py @@ -938,6 +938,22 @@ def clear_stack(self,): log(self._message) self._stack = [] + def clear_user_functions(self, function_name=None): + """ removes the user functions from the namespace and the user functions set """ + if function_name is None: + to_remove = copy(list(self._user_functions.keys())) + else: + to_remove = {function_name} + for func in to_remove: + try: + self._user_functions.pop(func) + self._exec_globals.pop(func, None) + del func + except Exception as ex: + self._message = f"Error: cant remove function: '{func}' with error: '{ex}'" + log(self._message) + raise Exception(self._message) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + def load_locals(self, new_locals: dict, clear_first=False): """ loads a new locals dictionary into the calculator object @param new_locals: the new locals dictionary to load @@ -1009,6 +1025,10 @@ def return_buttons_for_display(self): keys = list(self._button_functions.keys()) return keys + def return_user_functions(self): + """ returns a set of all the user defined functions """ + return self._user_functions + def return_message(self): """ returns the message string """ return self._message diff --git a/ui.py b/ui.py index 3fcb52e..278db56 100644 --- a/ui.py +++ b/ui.py @@ -22,6 +22,7 @@ def __init__(self): self.float_format_string = '0.6f' self.integer_format_string = ',' self.plot_options_string = '-o' + self.last_user_function_edit_name = None # window size and appearance self.stack_rows = 7 @@ -33,7 +34,6 @@ def __init__(self): self.stack_index_width = 5 self.stack_value_width = 200 self.stack_type_width = 50 - self.message_width = 57 self.background_color = 'default' # set to 'default' or , default matches the system theme @@ -49,6 +49,7 @@ def __init__(self): self.stack = [] self.locals = dict() self.settings = CalculatorUiSettings() + self.functions = dict() class MainWindow: @@ -277,6 +278,9 @@ def __init__(self, settings: CalculatorUiSettings = None): # add a check option to the menu for 'save state on exit' self._options_menu.add_checkbutton(label='Save state on exit', onvalue=True, offvalue=False) + # add a separator + self._options_menu.add_separator() + # add an option to "edit the float format string" that calls the method edit_float_format_string self._options_menu.add_command(label='Edit float format string', command=self.popup_edit_float_format_string) @@ -286,9 +290,18 @@ def __init__(self, settings: CalculatorUiSettings = None): # add an option to "edit the plot options string" that calls the method edit_plot_options_string self._options_menu.add_command(label='Edit plot options string', command=self.popup_edit_plot_options_string) + # add a line separator + self._options_menu.add_separator() + # add an option to open the add function popup window that calls the method popup_add_function self._options_menu.add_command(label='Add function', command=self.popup_add_function) + # add an option to 'remove user function' that calls the method remove_user_function + self._options_menu.add_command(label='Remove function', command=self.popup_remove_user_function) + + # add an option to 'clear all user functions' that calls the method clear_all_user_functions + self._options_menu.add_command(label='Clear all functions', command=self.popup_confirm_clear_all_user_functions) + # MENU BINDINGS ........................ # @@ -345,6 +358,52 @@ def __init__(self, settings: CalculatorUiSettings = None): """ ------------------------------------- END __init__() ------------------------------------------------- """ + def popup_confirm_clear_all_user_functions(self): + """ opens a popup window to confirm the user wants to clear all user functions """ + # create a new window + window = tk.Toplevel(self._root) + window.title('Confirm Clear All Functions') + + # create a label to ask the user if they are sure + label = ttk.Label(window, text='Are you sure you want to clear all user functions?') + label.pack() + + def clear_all_user_functions(): + self._c.clear_user_functions() + window.destroy() + + # create a button to confirm the clear all user functions + ttk.Button(window, text='OK', command=clear_all_user_functions).pack() + + # create a button to cancel the clear all user functions + ttk.Button(window, text='Cancel', command=window.destroy).pack() + + def popup_remove_user_function(self): + """ popup that has a list of user functions and a button to remove the selected function """ + # create a new window + window = tk.Toplevel(self._root) + window.title('Remove User Function') + + # create a list box to show the user functions + list_box = tk.Listbox(window, height=10, width=50) + for key in self._c.return_user_functions().keys(): + list_box.insert('end', key) + list_box.pack() + + def remove_user_function(): + selected = list_box.curselection() + if len(selected) == 0: + return + key = list_box.get(selected) + self._c.clear_user_functions(key) + window.destroy() + + # create a button to remove the selected function + ttk.Button(window, text='Remove', command=remove_user_function).pack() + + # create a button to cancel the remove function + ttk.Button(window, text='Cancel', command=window.destroy).pack() + def popup_add_function(self, function_string=None, parent_object=None): """ opens a popup window to add a function to the calculator """ # create a new window @@ -358,7 +417,9 @@ def popup_add_function(self, function_string=None, parent_object=None): # create a text entry field entry = tk.Text(window, height=5, width=50) if function_string is None: - entry.insert('1.0', 'def my_function(x):\n return x**2') + default_text = 'def sqr_x(x):\n return x**2' + txt = self._c.return_user_functions().get(self._settings.last_user_function_edit_name, default_text) + entry.insert('1.0', txt) else: entry.insert('1.0', function_string) entry.focus() @@ -372,6 +433,7 @@ def apply_function(): message = f"Error adding function: {ex}" self._update_message_display(message) else: + self._settings.last_user_function_edit_name = function_string.split('(')[0].split(' ')[1] window.destroy() # create a button to save the changes @@ -390,21 +452,9 @@ def popup_show_user_functions(self): entry = tk.Text(window, height=42, width=50) func_dict = self._c.return_user_functions_for_display() for key, value in func_dict.items(): - entry.insert('end', f"{key}\n{value}\n\n") + entry.insert('end', f"Name: '{key}':\n{value}____________________________________________\n") entry.pack() - def edit_function(): - """" opens the currently selected function in the edit function popup """ - selected = entry.tag_ranges('sel') - if selected: - start = selected[0] - end = selected[1] - function_string = entry.get(start, end) - self.popup_add_function(function_string=function_string, parent_object=window) - - # create a button to save the changes - ttk.Button(window, text='Edit', command=edit_function).pack() - # create a button to cancel the changes ttk.Button(window, text='Cancel', command=window.destroy).pack() @@ -582,6 +632,7 @@ def menu_save_state(self, save_path=None): calc_state.stack = self._c.return_stack_for_display() calc_state.locals = self._c.return_locals() calc_state.settings = copy(self._settings) + calc_state.functions = self._c.return_user_functions() pkl_dump = pickle.dumps(calc_state) file.write(pkl_dump) file.close() @@ -613,11 +664,24 @@ def _load_calc_state(self, calc_state: CalculatorUiState): self._c.user_entry(item) log(f"loaded stack: {calc_state.stack}") if calc_state.settings is not None: - self._settings = calc_state.settings + # need to handle new items were added to the settings class + incoming = calc_state.settings + latest = self._settings + dif = set(vars(incoming)) ^ set(vars(latest)) + for key in dif: + setattr(incoming, key, getattr(latest, key)) + + self._settings = incoming self._apply_ui_settings(self._settings) log(f"loaded settings: {calc_state.settings}") - # note: you cant update the UI here because this method is called before all UI objects are created + try: + if calc_state.functions is not None: + for key, value in calc_state.functions.items(): + self._c.add_user_function(value) + except Exception as ex: + pass # older versions of the calc state class did not have functions + # note: you cant update the UI here because this method is called before all UI objects are created def menu_clear_all_variables(self): self._c.clear_all_variables() From a90149a5bf33f5e79137345aa9e841bfafe41ba8 Mon Sep 17 00:00:00 2001 From: paradicecity Date: Sun, 2 Jun 2024 10:42:43 -0600 Subject: [PATCH 3/3] updated readme to include more detail about user functions and plotting - bugfix: pressing the plot button now plots iterables and plt.Artists, so you can now define custom plots and press plot to plot without having to call plt.show() --- ReadMe.md | 226 ++++++++++++++++++------ calc.py | 16 +- media/PyCalc-PlotExampleA.jpg | Bin 0 -> 93241 bytes media/PyCalc_UserFunctions_DarkMode.jpg | Bin 0 -> 97983 bytes ui.py | 3 - 5 files changed, 188 insertions(+), 57 deletions(-) create mode 100644 media/PyCalc-PlotExampleA.jpg create mode 100644 media/PyCalc_UserFunctions_DarkMode.jpg diff --git a/ReadMe.md b/ReadMe.md index 45b68b6..05ca2d1 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,37 +1,106 @@ -![PyCalc](media/PyCalc-ListsAndPlot.jpg) - ## Hello and welcome to PyCalc, the RPN ~~calculator~~ ~~IDE~~ program that loves Python -This project is an experiment to see what happens when you take a Python interpreter, and put an RPN calculator style -UI wrapper around it. -I have spent years using Python Terminal and Jupyter Notebooks and while each one has its strengths, neither one -offers the simplicity or immediacy of a good old fashion calculator when working math problems. But a calculator -lacks the history and exposition of a Jupyter notebook. -Why not incorporate the strengths of both a calculator -and a Jupyter Notebook into one App. +![PyCalc](media/PyCalc-ListsAndPlot.jpg) +_______________________ +![PyCalc](media/PyCalc_UserFunctions_DarkMode.jpg) + +This is the best calculator you will ever use because it packs the ecosystem of Python +into a fast and familiar User Interface. +This project is an experiment to see what happens when you take a Python interpreter, and put an RPN calculator +User Interface wrapper around it. The result is a novel and fast way to interact with Python with the familiarity of a +calculator UI. +I spent years using Python Terminal, Spyder and now Jupyter Notebooks and while each one has its strengths, +neither one +offers the simplicity or immediacy of a good old fashion calculator when working math problems. But a traditional +calculator +lacks the history and exposition of a Jupyter notebook and the power and massive catalog of tools available in Python. +Why not incorporate strengths of all into one App. So this project was born and has become a go-to tool for daily engineering math and quick Python scripting. ### Highlights #### General -- [x] Feature filled RPN style calculator with stack view, history, variables and plotting -- [x] Novel RPN style interface for interacting with a live Pyton interpreter +- [x] Feature filled RPN calculator with user functions, variables, plotting, and history. +- [x] Novel RPN style interface for interacting with a live Python interpreter - [x] Built in support for Math, NumPy and Matplotlib libraries - [x] Import any Python module and its functions are available for use in the calculator -- [x] Python Interpreter backend for full access to Python language features directly on the stack #### User Interface -- [x] Customizable Tkinter.ttk UI with Stack View, Variable View, and History View +- [x] Customizable Tkinter.ttk User Interface with Stack View, Variable View, and User Function View Window - [x] Support for copy and pasting between excel and the calculator - [x] Session history with undo and redo -- [x] Store variables of any type including functions and classes -- [x] Save / Restore sessions and state +- [x] Store variables of any type including numbers, arrays, functions, class instances, and more +- [x] Save / Restore sessions and state, by default launches with the last starte +- [x] Dark mode and light mode themes (tracks the system theme) + +### Intended Users +- People that want a really powerful calculator +- Engineers that need to do calculations using saved variables, functions, and libraries +- Python developers + +### How to install and launch the calculator +As of now the calculator is a Python script that can be run from the command line or your IDE of choice. +You must have Python installed on your system to run the calculator. +#### Using the UI +1) download the repository +2) from a terminal on mac and linux or power shell on Windows, navigate to the repository directory that contains the main.py file +3) from a terminal on mac and linux or power shell on Windows, call: `python main.py` +4) This will launch the calculator UI and you can start using it. +#### Using the API / CLI +1) If you don't want the UI you can use the calc.py module and instantiate an instance of the Calculator class +and use it like so: + + ```python + import calc + c = calc.Calculator() + ue = c.user_entry + ue('sin(43.7) + 17.3') + ue('enter') + >>> Evaluated: sin(43.7) + 17.3 to 17.0214373937804 + c.return_stack_for_display() + >>> [17.0214373937804] + ``` + At this point you can see that the calculator program is intended to have a UI wrapper around it but still works on +the command line. Of note is that the calculator can handle user_entry single chars +at a time so you can also enter 'sin(3)' as: + ```python + ... + ue('s') + ue('i') + ue('n') + ue('(') + ue('3') + ue(')') + c.enter_press() + >>> Evaluated: sin(43.7) + 17.3 to 17.0214373937804 + ``` +This is useful if you want to send user keyboard events directly to the calculator from some other User Interface. For +example if you already have a snazzy calculator UI and you want to use this calculator backend. I'm looking at you +flutter and js devs. ### How to use the calculator At the most basic level, the UI is an RPN calculator so if you know how to use an RPN calculator -it acts as expected. If you don't know how to use an RPN calculator then please use the internet to -update your knowledge base, also you can type out expressions in this calculator and it will operate -like a 'normal' calculator. +it acts as expected. If RPN is not your thing, you can enter equations as infix notation (like a regular +calculator) by using parentheses, for example: '(sin(40.2 + pi) + 1.42/24)'. After entering the desired equation +pushing 'enter' will evaluate the expression and display the result in the stack view and in the message +window. + +#### Quick notes on usage + +1) You don't need buttons to use the math functions. +For example to calculate nCr(5, 3) you can type: 5 'return' 3 'return' 'ncr' 'return' and the result will be +displayed on the stack. If you are a speedy typer this method is faster than going back and forth +between the keyboard and the mouse to enter functions. You can also type out the entire expression, then +press enter, for example: 'ncr(5, 3)' then 'return' to evaluate the same expression. All functions in the Python +math library are available for use in this way, a reference to the Python Math Library is here: +https://docs.python.org/3/library/math.html +2) Calculators typically use the notation ln = log base e and log = log base 10. Since this is a +calculator, it matches the use of ln=log base e and log=log base 10. This means that there is a +wrapper on the math.log function so calling log(3, 10) throws an error. If you want to call like +this you must explicitly call: 'math.log(3, 10)' as the builtin log method (for this calculator) is +always base 10. + + ### Examples (using the UI) @@ -58,32 +127,15 @@ like a 'normal' calculator. 4) press: 'enter' 5) The value '2' is stored in the variable 'my_var' and is now displayed in the variable view -#### Using list and array functions with NumPy and Lists - -1) press: '2' -2) press: 'enter' -3) press: '3' -4) press: 'enter' -5) press: '4' -6) press: 'stack to list' -- this will convert the stack to a list [2, 3, 4] and display it in the stack view -7) enter: 'np.array' -- this will convert the list to a NumPy array and display it in the stack view -8) enter: 'my_array=' -9) press: 'enter' -- this will store the array in the variable 'my_array' and display it in the variable view -10) enter: 'sin' -11) press: 'enter' -- this will apply the sin function to each element of the array and display the result in the stack view - -#### Plotting - -1) Continuing from the "Using list and array functions with NumPy and Lists" example -2) enter: 'my_array' -3) press: 'plot' -- this will plot the array using matplotlib and display the plot in a new window - #### Non RPN style calculations 1) enter: '(1+1)' -- the parentheses let the calculator know that this is a math expression 2) press: 'enter' -- this will evaluate the expression 1+1 and display the result '2' in the stack view -#### Making lists +#### Making lists and arrays + +Note that you can copy values in Excel or Google Sheets and paste them directly into the calculator. The calculator +will convert the pasted section to a list and display it on the stack. This example exposes the underlying power of the calculator to interact directly with the Python interpreter and how imported Python module's functions can be called directly from the stack to operate on the stack. @@ -94,9 +146,73 @@ imported Python module's functions can be called directly from the stack to oper 4) press: 'enter' -- this will convert the list to a NumPy array and display it in the stack view 5) enter: 'tan' 6) press: 'enter' -- this is the equivalent of calling np.tan() the calculator loads in all +7) enter: 'a=' +8) press: 'enter' -- this will store the array in the variable 'a' +9) enter: 'np.mean(a)' +10) press: 'enter' -- this will calculate the mean of the array and display the result in the stack view functions from the NumPy library so you can call them directly from the stack by typing the function name and then pressing enter. +#### Plotting + +The Calculator uses the awesome Matplotlib library to plot data. + +1) enter: '[10, 7, 4, 2, 7, 4, 9, 0, 1, -3]' +2) press: 'enter' -- this will evaluate the value on the stack to a list type object +3) press: 'plot' -- this will plot the array using matplotlib and display the plot in a new window + +Note that you can copy values in Excel or Google Sheets and paste them directly into the calculator. + +![PyCalc](media/PyCalc-PlotExampleA.jpg) + +#### advanced plotting + +You can interact directly with the plot library like so: +1) enter: 'np.linspace(0, 10, 100)' +2) press: 'enter' -- this will create a NumPy array of 100 points from 0 to 10 +3) enter: 'np.sin(a/7)' +4) press: 'enter' -- this will create a NumPy array of sin(x/7) for the range x = 0 to x = 10 +5) enter: 'a=' +6) press: 'enter' -- this will store the array in the variable 'a' +7) enter: 'np.cos(a/5)' +8) press: 'enter' -- this will create a NumPy array of cos(x/5) for the range x = 0 to x = 10 +9) enter: 'b=' +10) press: 'enter' -- this will store the array in the variable 'b' +11) enter: 'plt.plot(a, b, "r-")' +12) press: 'enter' -- this will plot the arrays a and b with a red line and display the plot in a new window +13) enter: 'plt.show()' -- or press the 'plot' button to directly display the plot in a new window +14) press: 'enter' -- this will display the plot in a new window + + +#### Using Python Libraries + +On launch the calculator imports: +```python +import math as math +import numpy as np +import matplotlib.pyplot as plt +``` +This means that you can call any function from these libraries directly from the stack. For example: +1) enter: 'np.sin([1, 2, 3, 4, 5])' +2) press: 'enter' -- this will evaluate the sin function from the NumPy library and display the result in the stack view + +For Python libraries that are not imported on launch you can import them directly from the stack. For example: +1) enter: 'import random' +2) press: 'enter' -- this will import the random library and make all functions from the random library available for use in the calculator +3) enter: 'random.randint(1, 100)' +4) press: 'enter' -- this will call the randint function from the random library and display the result in the stack view + +For methods that require exactly one argument you can call them directly from the stack. For example: +1) enter: '[1, 2, 3, 4, 5]' +2) press: 'enter' +3) enter: 'random.shuffle' +4) press: 'enter' -- this will shuffle the list and display the result in the stack view +For methods that do not require exactly one argument you can call them directly from the stack by typing the method +name with arguments and then pressing enter. For example: +1) enter: 'random.randint(1, 100)' +2) press: 'enter' -- this will call the randint function from the random library with the arguments 1 and 100 +and display the result in the stack view + #### Saving and Restoring Sessions The calculator has the ability to save and restore sessions. By default the calculator will save it's state on exit @@ -112,7 +228,6 @@ Restoring 3) With the calculator open press: 'ctrl+o' or navigate to the file menu and select 'open' 4) In the file dialog select the session file and press 'open' - #### User Options You can set some options in the calculator by navigating to the 'options' menu. The options are: @@ -121,20 +236,28 @@ You can set some options in the calculator by navigating to the 'options' menu. - 'Edit int format string' -- This will open a dialog where you can set the format string for integers, see: https://fstring.help/cheat/ - 'Edit plot format string' -- This will open a dialog where you can set the format string for plots, for valid strings, see Parameters: **fmt** here: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html +### Working with User Functions +The calculator allows the user to define functions that can be used in the calculator and stored with +the calculator session. +#### To add a user function: +1) Navigate to 'Options' -> 'Add FUnction' +2) In the dialog that appears, enter the function using the standard Python formatting. For example: + ```python + def sqr_x(x): + return x**2 + ``` +3) Press 'OK' and the function will be added to the calculator and will be available for use in the calculator. +#### To see all user functions: +1) navigate to 'View' -> 'Show User Functions' + +#### To remove a user function: +1) Navigate to 'Options' -> 'Remove Function' +2) This will open a popup window with a list of all user functions. Select the function you want to remove +and press 'Remove' -#### Notes on Usage -1) Due to years of using RPN calculators I have adopted the terminology of X=stack[0], Y=stack[1], Z=stack[2] and -T=stack[3] (thanks HP). In the code I often refer to X and Y as in 'pow(X, Y)' which is equivalent to -pow(stack[0], stack[1]). -2) You don't need buttons to use the math functions. Just type the argument first then the function. -3) Calculators typically use the notation ln = log base e and log = log base 10. Since this is a -calculator, it matches the use of ln=log base e and log=log base 10. This means that there is a -wrapper on the math.log function so calling log(3, 10) throws an error. If you want to call like -this you must explicitly call: math.log(3, 10) as the builtin log method (for this calculator) is -always base 10. ### Future Features - Installer for the UI @@ -145,3 +268,6 @@ always base 10. One of the additional goals I had for this project was to explore the use of Tkinter. I have used various other software packages to create UIs and I wanted to give Tkinter a turn. So far tkinter has been fast and easy to work with. + +It has taken me about twice as long to write this readme as it took to write the code itself, but it is a good +process because I found a few bugs in doing so. diff --git a/calc.py b/calc.py index e55f167..bb97314 100644 --- a/calc.py +++ b/calc.py @@ -305,11 +305,17 @@ def show_plot(self, plot_args=None): if len(self._stack) > 0: x = self._stack[0] # dont pop X, leave it on the stack for error and success try: - iter(x) - if plot_args is not None: - plt.plot(x, plot_args) + + # check if a plot type object is already loaded up, if so plot it + if isinstance(x, list): + if isinstance(x[0], plt.Artist): + pass # plt.show() is called below else: - plt.plot(x) + iter(x) + if plot_args is not None: + plt.plot(x, plot_args) + else: + plt.plot(x) except Exception as ex: self._message = f"Error: cant plot: '{x}' with error: '{ex}'" log(self._message) @@ -1089,3 +1095,5 @@ def add_user_function(self, function_string: str): self._message = f"Error: adding user function: '{function_string}' with error: '{ex}'" log(self._message) raise Exception(self._message) + + diff --git a/media/PyCalc-PlotExampleA.jpg b/media/PyCalc-PlotExampleA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3ef916b0972e7e1e5c54b754d5af3873d99d10a GIT binary patch literal 93241 zcmeFac|26#|2TffV34h-kX@lg_I(>{VbgC^f{%jgEUIYW@4;VOs$g20Cr6fOWcPw-iULPIEUg+DwfI^-Gz^2^BiFpw7~ z*Fl54G-%5Lu2JA41M-~Ung~8_k+ewLDTO-oa>8KDV)i^3m-BIRKKikvS7?PvghFmKKPjwbU8x(v}z%P*cb1}GX59(Pcm zhMd2*6f^*d0r{JpE(v&WLCwi#NC#q|r^nFKF<>wlMn(oEW=mNBl7}gE*2Ip86jRF znSY%oi=l-KP%#QHD-6*rM4=a=CQBg!&`&xPl1Qw8dm1z?9X*DDk!b;_aFZP#DKrf& znvRZ^7L@J-E|&Z((V*Y4aBAt&UDOXBStuop|3pe*OW0LE#4?4n`h2 z9Ca+=_=%IJ5|fh8WS%{D{zBHpOSySBZr;i-D7^jPVdKhuLJ%91C>DAkJ z@7p^%yShJo{MOe$F!+7w$M6Wu7tALmkvRK_uZ4gw8d_R3Ee7TbMdJ@MzL1tqNSc0; zmKnx=H;1rHCVQtgfyY=IK}hBdEY~F12rXw@<&H4R!r3OeGWdotEiHHfA5#QdmGPNMXhiVTv=Q$ zSGM+T;p_IYqxphu16N+F-g$jWx&O(@=L3@ad&iSE>Q7YZ92^ixC`^sCR=%eS6ZH7$>pQqXT4xNM6v=~et-WgRbf%58;f9JJx8S^W)H8n)aELn#B9 zJr~D2$5#c3|KfgwZ3D&^~Z8on)qqFSqzT>}cx+{^Nzz8mIvaS+Sv|6C;z*Cv%(1wGwC2 zv=#_sph0eKA`_GUt3%s$grIbT2`i;L_*x0=sKc(J$E;%Ip+yhRiPsA)rSWE8&!`&K zU$bKXDywry2qL~IOi@-h6dOrakW4%pUg#)&H0l0_&(Wi-LEoNVQ7<}qCs`{tRY;!Y zZrpY~{$+#;TRRPF-uLR`g+$s_*$cGm!j}m}=NK#tY_t3JLg3Un!%mK8oTI5-!=p?h z3oAI!e$aMX*Dq_rd>C6byKw&TJi!bUT0uhCb44_iRQykVOxClHg z?kMQexPNo?)@HRMA~t%Jcf5^FUVmuK8K0^=y&aS03D0Z7s~%^%@}@Ff#7*2b8EPJW zHgs!M#F6mWAgg7PgY_Zz-&7OiF5HajYa*uk>%AEB_45C#H+ooUZEM_6T~i~5!uMp@JgLd zXN}u#^tz8P#lkRx;c@x}O2WsU`^7V@KWoI@EV>lRFzX2#8u-X!;kh-}+^mk{Gk;i| zcuN51oqI<+j9B{l**eTkKWEmO-3Ve*+$&HK)B2>3NdKANuFY2tfGrgFfAtRHZyblg zXxD+o#vi}ezxrPN+$~3qLFchSbQ? z+{@hQ)mENnePX8T0H^17%@fN2VRJLy3I$fo8{5uRMwzvic*Qa$&3$|KMkV-PAIpLO zQ=1wz+c{h&p=}(Kkk(=s0KSxyGzkf&XpXdHj4%)}*37T6l;oW+H|=)6=|Eu5vOfqN z4Za=rrfL(;>f<+emVSgkZKOVha5qCBE zv&Kzc>GEY~&*Df1<*mq&6%WlK%TdZ(5O1--sZH-2muF>jFy$^b`yuaIBR#!FQ5dZ3c5 z=kS5TvW+2ks@$G2WGCBr7oXf7aK_d%$LPlO+ zI_G)d@wlPOaV>O(mZ~0>&#-6Jm6O@y=@Liwe>;);aI}4qNhjVURW9GOq+qdaYY~5j z@BZLPsCcIf%YDtneZ3}*8=TZ%URy7gAB&@9z`PL1uA*mCK+?YABvekSoVvp(F2TURH$bsLVK+j)oZeJ z^tjkxYjy9mf^rzjMD9t87<4imx^yWKVuoa~tk#Yt!!IuO8uvR+j7<27b7@+PeR#=# z97R_g8?Zj`w9Tb!Y8Uxfv|KLQw3N$f_-c3ZGM-^&)DGH@$r@a|7hQi*{n(1iQ-0SU zpOQE#^`74wO?WcQ|7K(O`saBoT8DIt6f}FUc3F9L#Og)8G$^|3o?kV#pnR+v^WNg2 zj0t}SExUJx{;GW}x?ZErhr1@&gU^mgS^(X2+D~(=*2~;hK~pODQ|(aJ+Oq}*cl5VC z)(nsxN+^1#a^HdPrhE-AmSJDt>$^QU65%Bd)4y2nChZ^dq<-Zs*a9+ z8g6h#+rcx~fRMRekU7^I66ZJW`;txiasdB{%^N47IIE0tZ{3Zut6>o5bPvp*c3BIaEeu?9NiVI0_nB*mq$P$_R(CAvM|%`0|wT4dbi%pN{)x^yc?xi^Y1x+;)%l zQHZL_1p$%R=;yI+w7oHhNImhOp_8xQkzI1w6Jl}uRz0Blk6P&5*ZpRVlh9&S$?*~} zEaq2r1~scs5|*8s05tAjB;J4D$2R)$>{)@pEVQQi(re96_grYclD{)`ovrJs+C?F0 z);Fz%Z$vQLuP4$jEw5JY;(Zpi^34XOS1m^*JK5rVH6NLP=*&Chjb+GFtpT}@Iuy*Y zw!tCdqie;b0ECQKx}|M8#f6RX!c%OuC?4fTILFa z$g9gGJ{RqoPc0JPcY4c6kv8UHwcD47yyc1aOZtx9FM0$lw`d46K4`u5?Cs;XF0P2W zvg%l7esW5>E-lV#FUJ>rkIM5)DrHgKCGiKXLd%2?UddtF?8l6>vAR(-Oxpw|V%kZl zR@dgzZI`hy5L|u=3+Wb)D{Cu|E^V7E?tD=Kn7V}+F>bP~%ks1HR z+gtD96SJ{L(AH7wiLOujuWE)gx0>XpjrxDD-fh|`a5KezrA+8C1%8!~7{~-ca`a}# zm;E<+uW=DnbJ=d{VwdcH9#S|`hm>8mysp)GQT2Lw>~WMBf=dG~te3d;?%{rgRNkw% z_U-GoF@LD~t(;FBHLYQ0)Qa>b7yV&te^$-ndJ~@JX1PA)SDDLEHT^_Jo=-j}ni?Im zUC43ep8XrVBo=s8t2$&^QzFfrrM@^HJv|wfMl-DNaY27UQDu!mp?C+QYApXiY0~l& z+c*wJOO^Gw(pVX@Ni+_fYx?pgP55?Oe@lI@?N&%(Z+@2nN2gkT*M@uh+|W7itDv79Xp9OVuxZ9~{gK8fh>(XD^ph$XnjW zYSVi)WVdOvWP;quv$yK{AJu$Ke-m0$yZGYyJuj6fvG^Yo2hTU*(ys>wOniO36Ql5HFYhjv zJ2tsv^}|F?weP*J2y09jVzgL4C)B0L(-{gk)6vr;)ub&G>UsR*_fgPECB@#B7mPO#amV$kyP3DhbXA?YD6l%d_40$0ks-+*6T>f2=#J0n zCc`}|JJx(Z)+s#p9uMuyLfJ)Exh804aOAc>{$kwF?Y7p8c+)Lz+s21nv5LxS-?KjJ z-f1dr$iC~p0_CeuyV@~MdGJiP&AB|e1+)p#_S=igYm_?)Yc@azPXmwf`nfFMw1+$i zZr;A;0SDue5RWU2mo`y?9LW8`YdEZV0>YYxgme1xSNxf;bedY)1^VQMbT4-%tk@Cx zF(gd_*R=KQC&eVbb{kQr?Jvy7+W5JgVl^Lz>5JBU_Z4_^8w3IuHGf=!@(nclt!#U` zHH-F4LZRj%->jGwcB>6B?0O!S9>3}MsOzMoSmo%p#A9|FJkgY|^4jpggH)IFNhoqakmtCS$+X^ChPY^rk6s;P zN|=PAh>V@1;qVfzHp0-_|G68dS>Ud{E8Q~97k%8AwMNE7EcDHYRmSwzDAwd5M!dh% zcdy0Scf|7(bKmKTC_%mphW0039H<$lv!?hpvFU?!oq44ft@mSwSa~MmF>k22z0WP* zf48pnmJ42}lY%;qyuLL%W83#7#jmdt?dj*$B|Nz*FMoFLyXql}CrtY;p;mO(8l5Xv zM)UiO>=_A3cVlKh#my+iT~fKFhwW-nxBk{(S6t#_+9RQ9RZB4a7xcfMT78?lmLvSO zS$spf?8gwvpu@O3GAcLE)tZ&r%cQlwv2A#B6Ea#uzk>FDPpa=DU5gg|>z2KK%inh@ zXNf}>&m7~l=wv1y_?mI1XHQA7IN9cPY{hFQwRttpHkfr&iRp&BBhC@DOhNwWz+S1Q6 z;y;;QSic7{jQ^ykpRKPu-;Cw0En9^;DAVP4mag2n>k2$8vuxJ9HFEhTO}Uvic5H2R?L(I(RPW zEsjP|Hr*RIFt9}-PQ;XoNFJ8X=c``Xug_r8GOT-#M;l{uHD_hK+|J=Rnu0H~8&;7&gYdhj?01z4QqJ2>N8|Y?*yMw|B5$=VNbx9a~tos zisa824{7*joi5tkf$9y7f}$<~RlRy@; zorJ(f$faD-9{V?ap9_k%6QhR%tBvtB9TNf9z3}aittOtW=18kr`r(mF;H~rTt7Y|U z_fJAUhTrF4AFD7Gj$g}ob88YRnuNx8t_kZ&-gP2z)q!|ceE&u6tV_y!xLjWG@7lwJ zFC}(Ghivs~mMH3aCotM$?zpbelKy+`p4$gPnzi(sJ+z*@vahin42yf}eZO4xMm`@W z-oj8iplO}ON|CUor^h}F>*ubp5AWr$9%sEe| z_SAy%5ev`d{Y+!g1ruK%ncuvZo4>ZsXqjj6aE>DC==zh}^;)+%yKWX3sO5q7SmsSa zwvyw%UR@RoF5~M1ih8e`Su>aQsK_qTRDoU?AOE=1_kt-(m-Ck&%w!XIX2NpX)z{Zs zMN-lezt-N#%K^96(aS?Jz}{O@daaZsq^23*ZSS}X=PT%db8+)j7w)}NBrNFWq%OQ! z-bl*GTLP7Yy)l_r$9Ns0$;=RX`pF zO9~4jReX1;3vU6BNOZh>aDsAc<bGLkYf5}<|zKG4(GK0v|~FG9hv4u^O2ar5?d^YRpgG1@zL?eSF? z2J}fC^YAt@q9UGi3_LvG-XgW}zPf&(@vlYdKeB6<8Cr3$~JI(_j!vncUQ|scu^Db)b8NG)~5D`*{ z0}^xBq{tes2nIuCotNVtn3CZ-bz!)JDo$RGZcZvl)2@a>OavD=XrpDR>M$@xJz+jyM<(z`WKCAdyjWa!`_Ta*)6&IN>DZloezp zl;jnaCFGp!rKA-dl&1Ec_%B1CG02RQSijEJ?-q*{=(#y+TU6}gt zkW^*_?8eF7*M6P7FAnsA`Yh3s@+?sTezXYqgb^8eIk`Cp{;n!)sff%C-0*;GAld3H zaJ$JlcQ-*q=T+<-VGB|h#@qYhoP^0hM^}4K7aZ^fKp#of+~$zEqnwfpZ{x<^u8-f3g!2kb7U~0LA^8|5~KUhpnzN5KjsH0k4^6>QaG1u1?1Sg9GG2IY7L<6xwOCd>nN4&R|sp&?_`KH;|@6X|*S`gGA0ppro z{!0jp6IfP(b5Vkz7S_?*2ONDv*@3)*zppo(htJ7zg7DA@}VWC$5SrjQ`y0PTU?Aa}?Yk^omv0Kr4%pj`VO+VddoO+hOM z(8>*R1TEG30*Pe?j>ln@<7ywUlPcxCnqOUO2F61Was$g59IjYY6%H7c{M*REx#YiPC!nX(V}K2LAMY($uTOU`p(O;Ol6;J*c-Q~yvOk|9&3-(s7q0x#^V{~!s9 zi~pUtSXl{wfF5>~OiX__NWAcI?LSBuK~7E@!XH$eRYgf<7HCcYtATmg-&rsQgPjxO z&p=c;lj&bdx~-e=Gq$UWx$sf35@%Au7HO4#H@~mFPg4tJZH}aD?|K35Y2yjPNHl zf3EY#CWF$_(!&1S`cLk;)BdbySZ^kf{siN!I+Z<~=tav2v*5D;g7Xmt6Y9O3`Ye>Q z0Sv5vJyyJYGz2@JAna_UKSS8(Bl15}MnW4WNIw()lY3N2tvKzU5SfR}+qyZ?Wv=ks zM!!q*fUTp7#XEkSvvjP7Phyw$`yClC!z|2?v++-T8>4FC~redrsyd4%p5~vFvZiOpO)uZ)*NjjL{=Pu)~7G=HI1hL|BTa)-Wh) z=!k4Onlwf{8LZSpdT3k0LErIaoM&G@}{Is`E} zI|PL?8X$!MD7(0KLPA0pwA>GFXKfgScr&NSd@9{Sa9TJCZKg3WkoZcUOskCUjAc=;o+IuNhxsXh4^HCS;uf4Q^2phQdo#$YtwDYQVe~2ZJ8~h8d zC{2Dz3fag&mWZ$nB4nGApS%8oR7aW|1s&M{;Vx2lucmrOsWsyYR{Ugdju6A77xpS{ zCD)i`JHT|;rWU%~QW;F9Aemv`@DiW3#F+5YPBaZKZyI|KFSQNQmcf(~k)lEiK!fN9 znRS%KBx{TEFv5?IR&r86P+aMPd6E%_nt_$d8 z;N^@no;OHU$m0lZs2$i{__*4A&;(1W05)d`NRH%6$v|plN~IasSrql`ExO6pIMrdQ zhVTc)blx4*IDCo1E5&wzb%6j~a0c#wxS^v4=%AlKM)dN0&L55=l_?UNW|L?&K<=(z z&@68`-TV9lB`TN_@*EVsfQ9{lDTGNL9&xBbD$Fu^;LV!4dsiQHvA9c_I4B*1RSE2z zkPxFqt~u|tND#3gI=iy68fhIi(kiLb3M~*iTp(2b5`$T;K5dkT9O2#& z7*^gqm9+E4a506%G~U_N@dGAW%)8S2DZ@<>y^JD6T1t>yJQrUQANv3r?U2fE@rsq% z!~k?b&4pN7dO#hMTFb-B%}?;rss4H8PYG$2q*cJQ27DF)mPO|fNfxu!4e4vCRMr6X zLBI?}55=nK>t8`w2`%hWQdLk<>%8DBiaA@`k9N$f4q`=h$;)AmH@+;ZY;5GmTV#eO zi0F93^`{bbc?dgRSnC3>W}H_+%4cgM{o-Xtn-1a3&d&1bqzQr|CJs9W9Uvl95|Q4S zz{?lL-p$KL0QV&?A)pL1(p1DpQWJ>R(tM;Zu3aR8A4%j1J78 zFzaS^Y$lcUV)Ye7;#AwE;6g_BCI}KTfwd7!0#Te9tTxQmB@`&RaPG^jv4!l-ItyBNH6YJ8 zsI0OrHQtuj%ojv5PAK~Eg}`gHE4zT!@yw?E?^o<(xgxad{hRpUu2X4qw|%JC)l_pn z35J3P*Ot5F8?fx>ZPXR-QY?^M7r1BG0Fi3H`I;H+AZCTjOEW>#nj%*)ZQ69<_f$2I zVrG(NK|;pXX~qq9B>a@B^HME{yXWCH;&f+IAXF%0$hRU7(DG}0Hy^42{8ktM(%*AU z!?lc$;=aI>8ux~c#3{B>F?tEx6*&2Kb&;Y&RE&P$_D%v6LBCf7t_LUbgoJSYFLyw= zxp|gxr6SWRjER45*Ii)N6xD%1>^34sjKHWS^?XJqr~Vh3>juCxCN1t0R7E2@I<&~Y zU-t=xo+eU<9a46d*8o~X9roRMvxC(#`}*SV8N&7>t4t7MPZ&2VfVFh9^)OPBc%9%x$ulql^*oPXB(NlN3fF z9mN-(tnRm?$QyM+-+FszCbtcRt})4lBQ8Y17Fz8Ee_}V7$dO3|mNuKZKH22qKnzav-eQ2GIY*cpl6b$k>UAmSWB$AvQAdNa%_Cnkx7YWwciRhCq7B|QtG$@4A{N_!7fF#og1Q;0@ z)UNJy0um?!_FFykk%$Zw0L7Y`!YJl2Z=RvRk3gJ6m@*_HeX-RYQ6dy~gkFC@V=wGb z!C1qBon*GSKQ_OpMe5=>h4A_o= z=YH?ZgCn(}CX z8HFLL2uLI;n)P4#E?8luvkGr_0E)~zYQPs{*? z5LODz&M=#7^7w%oEFwVwhZA6!)nBRUIVmRmk7i^9FPbT~-xsXYlv>`qxFNFvLXbq0 zJSl^l|4@H8A?8)8a7d3y&kVc-ESEgpQAkqfqW@|dL@0o{-We?6Wot9r?W|~MR)JLuoc`X|LrO{t(n`oyBN;Qou~bgLwxN_y zU5x-ZLuo-={Tz;)r^2Urur&LZixhO3r|XQ#4Vj>4_;Ye+VC7Y6YA1!N|E1F-MZhqPl~h>gS#=!_~~8j0K>mezfe(9;~7Q|LQ!(SJ%cT9u>TLz&l}R@CS*+DZl-$B zTk&=5Nro$R;ScVDodJkT;MIFL5y}7di*h_3jdAD3en4*H`Lu{aNNtYBzH%DH8>&!tRST_?Q}hjeE`nxFXzPdKVW_7d>J-yuS#; zewpT4wSopSoF^Fp%rr$|lv9aEnN3ICIpI`D55wUhWmL zM}X{9AvH-(9r)fqNEG?st~F)oR2f_BKsuBLnyv{3gPjvYZU(`2C;F}#jc798AzR0g&plA5qc{x@HgBUh-yb-IGLqNd4`=TCZ z`7ipbs*X(deZa5OXom=@JeNFzhqStr$q_&XhhSglVO_uG+l5WHAG zM2N71JvbDI$6=aq5(0aW;nyHqItZN*4j#gaVIlafBKE&CG4R-`(F@+NhfRz-jbMr@ zNitsV9mGn237|6xp74v5eW6hv9Sb*K&H;%3!WQycS8(dk48^F3j!x&Al@V} zSE3-2bh+XhO9#;8hr;AW{}lBg#jsPLUtHsM8w@FFryc-g72+7DzWBSEne;2ePn zf5UIW0>MC}C<|2*U#Nwgtbn0#nmG-UU=gGXvcCkO(<;CFrBKYDfl>rtNn~N{KPB*n z3i+tsA4OQC)-dnnEf&}+nPYxJ`VY5%t4QdWY6ZX-63=j$k_H|q5uB*AC24R-1Buj_ zb#{W>sejNHaw&`k)tR$DshhIz4Fm_0pg6LTL>)dIBG`|&gT;vvbuNa$!77LgjJ)7q z+9w1yfq634y$HmTCnT^#+NCdseF;+#>QWVAF)p5=u6_IoM7UF6QHrQ5H!n{bRb4@U zfm@*t4P^@qfd5H_K>RxV#kcA^{v+HHJmdf-T50O*uouzIz{(0wAF!PY5FiOKuOy`) z2LXSDN{au0XfB3c-;8`j-*u6NWwrk{mYdWsS$a!|0>4dcf9tG(n7E!ODrTui9p&1z8(s3KprrJqxmf$EQFoxOkJ3 zfw_@e(||(?O28Ze(`v;7NLSFp?7#%3kz+2SvcQ#=Mxf9wr5qxHl$5FLGFO9nkDR=H z0lCt48vZ!g-q1ARb~6kC_J6P!NCf5ZjHy%U?g}bU#}>k*@>6k5y-tD(EeCc(N^IPx zsj&u|bonO=95F+1BF_k@IS~d&fjwEDF+;t4De;UwUYfI9B7>qspJ9RvO2mO6pDn zbD&ZbBvYndru-un^oJRM8Vnlbj771AHkHXLDq%2AazNe6vHyTzKJVI{;UrGOD#SGH zW=3{i?{H3c3Um}5oPi#`!9d{cG2$%n9{|8fvFWvd$DK-)JRJ<0&l`j5R#H&Gn6xRr z4dlsTILIN4&S$8AVX`R`Rh5MxRiUOX1)-*5B^6aAWjS!t{ulueASb{KbEvTq>hLu% zYhq#G-@nM~><0oewett&CY|CJww9>oYD+;2QydMUdw(# zl<*%Y0PwE7TxopVe98PeuY9~M5_GEleEl3O5*h&?)ASCuYcxlmNCMHv73>B47sib$ zPpV_^WzxwD4>xu4^R?j6;i#WU6ar(c!*Pvuy`S%YLGm0d9CD&g%J4lc@EoM%1KY!V z<`AMb1r>aqNs(MadKG*gRy*_cgK2s=6my-HCVyf zzojRL;E!>q@GgT$E26(QWm#3yK((FMBlMJVlitImhDb1VuxFT5XJDR`%pQp)N$&5x z6LWRhA9yFy=*~y;gy4=-(oBkEDCynd`KTV^TPQR*DH(93?k~VbI*(c2+gE#~NqDl?>yHwb_p*j>~Rpdd20VY2$`2!aT ze(FkmYexG4!lW8k-y?b^?(sLq=~=BDOArz`b{c*s5pm4-`0p01MV zQ72#05(rq;Uoyw->6WbA(&bIz16=u>r`}}+w+vWP8A=Pzz#9gCCpPAMxhfK--+jXy zVL)I0B02e){!uGsA@CnMfVchk2`vNmc7JXrWS~Ptm8sCK1SSh!t?h;=JEKI13H~25 zh$a8r=(qRaUtX?ehrmC-q@yMOjx=Zj|MaquGd9@Lo&1hJuI1-tJc_uj9l^vYZhHDZzVMm6tAg>Tc&y#0Q|)D^d1QgxRljXd_M*nN z*lY-8i&Sqd27G_V|G0K5iAnz&=*f*cl6%sM?BSX}hFFKL2>?*x>GCTq-#N&Ay^(-Q zjHv#O25n9Swl_~*(W zauTv^3>QiCh#h=gCEOC~iOm^$w|qNec0ZAtqAAG$&sP_n>Zet{dl+WBth z*RXe8?;fl@*cFTxQk9Y18-$4LL)xQC-vNbG-Ge<<-909!^ov$icMk6DBlhvt{fG;V zZ@ha-zE8`$v|YV+&r+TKkjr>qeD2N1JPi_G1tfiLZ7*exjcKXvdcf9xWI9F9{vkD` z5clnOw`UGMXztbsNaO4GZtXU(dq^MTaGaLzP|xYAiq=FzwMf5ohA#L~%U!;u%`SDy zO%^+Nx35fz+ zJHSy?b$B?wdSD3G{XHpC{m~n_Z)?Ov+4D_OHf(*@fA5i!J#MYbh)%K@EBKkn!hXhV z{Fa_xnozATH_wWshSl^rJv>j(^;KYX`hufXg&z(I`g(RoN^389KV2f;GR&_HFzc9K z+nH=4)YTH+HWGZ<89$*Fwb2LTirM;)vfN2FIC-s)q&3)lx;x1c_fo$$7oN3##~`Eh zfUIO;udB3Ms{=e*>eoa*YO$ZKcqWUu0+7n>N4#wcvw)!j#JabYwCMHOfr>uaePZQ# zeO?;`56%9-BdObX@)(w*#`2tbt9G5k+(?>)OtlsXD(6gSz0JoP0S~s4I7u zpkrYbKff=SD{M#2;j4SHbvnlCeK@{8^sO1c_PwZGt7;7Y(6ck%^Xj5RmqQX|OWu#C z)&R>uh%sD*&eV2r>nyYFWM>lI>~U#zvwH_SSKU}R+{6R(?(GgPP&fKLD(qwkxedao z1o1G7RDd?<0{FSQZ)G+}Cn$DS|25IcTNhZGvsL*Uy?p`iT9$m-34CX#oOQ*nJl2?& zdWo#D?Ipk-ckgE55|o_q9;Sh-cogIW^A^+Jky0YEYcW0%|8i5VlTSAKHE&yE3-*1( z?Zy|8{IT9U>Gh321tqWj6m$&Q6&|@+NuC+IA>;TYw0t5r^g2>WCc!2YTMbfUg(sXII`4BRy9CCH^${?|HI1*UBxh;>a_(8 z{runW3po~Cv#9n5m*ZuBxg)y*jAYc_fw2~eW|nTWZuBRq%Bzk3Qu%660_{FuAEpO3 zPZ!yTPdhGlt>CVzw4dp9+Y{0~3lz&W+uL6_vvDVP7RWN`@br{4a9?ZC;Ib=wwCIHc zM$scpYJaw$-MZLji`1=M{BIwFAEjRoE4WR`fPX5`&C(!FKDz519*>u_<>O8B7gw!# zZKR{OX#kIR#p7Pmmew_ZLROJW<1`g7 zQ|)1|t@x>@3-<1;jy7}D=q!Cye@TlNh(xc<{@g)LcAC?&365t{k21&`=1L7XOU-Dk9 zE-dWHySK%Ggc2j+*UR*G>rSV%nfWX?|3XjMOYLjc9puvRw|W(En@2N>WR?36Z(&oh z?);d^0h=gS?pkX#(IkHJB#SJY^TJEs!3@LxAhB*k>VZLcOk^L}$G0tc_l~m;wZL~o z_30stbu8Mi1qNMS93szU8t%54))EiZ7o;W{2LYG+li$6^R$75L;yE4o<%XUwp;lHZ zr_V2*Qt6<5sc;L}v!6*s+Rpfz!{eXdHwa>m{)K|hj4`p-!_LhIr%&Z=1qSvp+AV52dWZOQZ`{>(i_h+iW>=$my?yXuKJ#=LJ^;oe zx4?U%rdA>=c>9&HjJHc_pMHHbO@b|&nKu@Ar`p-a2){~SF7*To@+ zZ1jNQy`{(*_WK2y@4ke!EKQce)=RVn9Dk_3!?nbO{Z_cU2G_J1#wO~UP$V&*b}S>y z=0Wda`XH5@Z%5ob1RhN9)$UZma6ucwMrP?NHV@VvOg)<{TPAU~ZcGRXae#pC)m|%C zw*lrH?I9IjhAr!V$4Seg-MU71`4z=Lx*P9=JQ>I|hoe{*Fg`rJD*;sl6k`X_k+~B0 z$EP#En~B59FkreX+>*8oR!dSMDd)up(Klzbqq^s5P|KS8UM0Pis9K5F+W=p73=lMHj?oWS! z>HAfN{!fLTu{(ENcmk}84FWUVrWGlk(Dc!dlXzBTMHY8tR2UX!*j#HgC)UG3);rz}1GUjvlaLZc30k^0@-5hw z$U28#p-A-7^nkInyZISKgwu6^0z;r_}9m+gg;N5A(;jdfdG9Uv_#ubMzQul6ZOm zSF?yOY-NRUyTSDf92JsfWbDgmU9J@+Qo80k zjaz&tGAbI5?yEzdEh&`Z9R#wXYSd41BgcF{LI2sEO;_2U-4=W1iRpMOG)7VezvH{s zT(&s{2W4cjE?jiSE&Hfo{zh!FQ{Yr=PgX)fo6|;_ceANs33g@1guW?Dw91$95N`b0obx{$Y4!VDNpRJaMKEbWwWch1%xpl<(LC5tiu*V zUBdv+L>lm$8V4)`=IFcGBCcSgmd55l#-q|idi`&_ZO?YMFPFoF1>bx816~_ZY)#O{ zCQCo!PI8Kem$FU2v6%GQU8&nM*m=+R9+zLVVM6QNlN)%#D$N7m4|%;X)G>2E)%bA| zdcE8LAFe|yYxps^bUj{B>S>T7V)3M2?E+K(TOfH4PolEfk9*aXy`v7}Ja`s57GsH% zdnmk4zC3VqGhx1Bww3IC&jfSu@};` zihT1s4@|T@T=NM&Jhl9{C`?v(&om#Uyll_x{i~OZ2vjU7VrC0oPSzKc5ErcbCNv zi~F&!JI7nzwl z&D`+iM|q)q`B}YAecKx!qGt|X%@I<51LH_>c6iACTI^ywON+7A8QhOA z%7s~@J4!rkjoCd3Ex~c?@W`cK_-605P*CuzX({)Sa8qv|N!N8xc|t0= zP4-(dh!nIQ9c?JsQJdPmi!U)`&FM#Yr;q9;fWFv`<7`!T4vaP5i5MjCv?g9&`thrb zY&ZDv_wmz}mY-!m)J)mk;8eDIS{C#xAhk*BW_jP5Vfnb86U+zOe=uPbrJhQZ1uZFm z+Fz#4g39)^-ALK!o=br!N}|q5-ZA%b0o8ZKJ(q3@-K!M`d5fuPmuhyUUFPt#KmGQ# zYPhl>^z}=`=LJ$v4~~`HJH6eX=lU80fvW2IYv22CoN6hM$6(gBRd3@74=;%P=G<)K zr`I61W?`71oXrF(Q*4aShj;xXbUkOSm;ruUnaF}}re#8zqAR#6?hFSMY18ZEw!M3? zY6$D^?X~$f`cCrEplrd9p=l;4VK}wSy^>#nR!h@%5sIfvXti_59Ts1k^yD@@c!8#k5Zlw zAdhdpcDWgsMmn?e*CTSqmC&g->F^~ky|L$u{8A|I7CKb@@tL-T(&Mb}EhaijvXqpU z-VoH{Zhiy{ieFYPk+mgQ%-DY07VhY>Lm{;u_Mr)k8faT(zReCEwThEaoUC0!Qc?Az z5ghmS?^k^>{$lNq4ruVyz+=$nT`99DwWTa~)B3_(9l?VScKKwQ!lPout&@_-E2Foy zz}ekGNT;nux^H6lB30ayXMp={2e+0Paod#si3Vs!Qgng(pr{`_uep~>Q4DEs2BpO< zJNHdOA4BO3wm&AijCjSRPC|!>qU&n(b*eE~Y4h z$D^=Yc?pDEM!hO-n}?c5;7zP=_MUS&O^Rcj;HBhD$&$>3AG;xD4nGCE3+pZ6YsVzC zX}inL2P6JGXK4)>;+FUw;N=@P^mEr?mZ|MBwTTK@;&GP{axrJE@FaAL@0&)Fp4K%U z8C$wHavEEr1*Gqct8KV{?lHZ|(Yi%;qQxtcU zA-+`JAJTw#ih6gl9Ps0X>Z1(kbLtpVdOD?g0uN{DXdrk*^?E9PAqPFvFD7Sz_ln1c z&>m1{o>;Rc=I*05!M64{g?qItW!@GkrrP`{eZa=5TP)bt(ZXHMqE+%#RUeo&Nlh!kuU@V&)T%!VfR-m#7@Auix20dt3TMEb zZs*>JIZ0f)`rZ~if))k8&4{AGK*%F#(lcum%|dT>K_Mw=tmz^xJF{9s9P;!T)X+o$ zFFt{ekug1Ql6cOhgV$DRP41%|g9mm8x8*)v9DLvLgpXy82_e&@FEaJ$iAgACYjs9Rg?E=4#@DP4T(dO#w)v7krq*EH%x}t$hcY&tx>nZw{7?~Ne94D8C%?@K z!yn$N?^v@PQ{B+{CR>fG{TRoa*v9O!xQzYUPan3%-8!rH=AP=<-73Z}eM2H%FYjE5 z4HQzprH}v8X2>|iU&H2Ub2TOW;TMUMhwh!L?uqc`S-MmERY;w?fz6eel4Be_eM3rn zdGGybSu0>4-{N|tvaEN!MfA}9yZPy1PldcH-roGaHuqU?woJCIwst|V#+8Wswdpb< zwN9SP*4dhU9Fg3(=sgkiO~5xwf1B0ta)N zzdmc;&vWPS4~f^WX4&ABLt^3t%T5zu1uK9R&_MJwuoaLGZlGWzfNg+AYmty0#RzCf zMi5eMn|Sxa@`M02e%m#hSo;Fh?r*um_lbKy&9~?{{l3U!8j7Pu97PR$V^_y}+aF); z_~CnPPu}R5PIdy%*xIr^4@Sp?xjz<$gl`FWu`*^qV_W35-XEN5!IzI~7Q5#L<;0D) zt3};;bKg2xf4k7oRrjntuLS%elU}3@?Q);ET*J%rVNuD~);&7{+D2R+=u}7UFf1~> zmiS`9^Dwo`jgN0HS5s^|-F@$J$55R_t_Ds0pl#9pi2skhH-V?BYyZZjqa39;g`#wD zkU27xG4oL7F+~|FAwvlnGK9>th>$Tu<}wc{L@GlnGf9QanKJdReFj76zPsJe@AH3t z@B2UP_F2QVzSp(B>sr@Zd!MtNesS%wlQk8mOk!?_I~oe1_Iu7Biv-rai6o4YY=f$5{9*<927-pRONv z$t=2Z2{1E8CDPCLo~GyZ^0X7n_uU$VB~70)M`s^wtLg=gtbN2(fysaDbgw5P@6ecd z9c<72+cw_~V1pGUMXbnZHGzWX+cQVU0=tV3E{^pJeD47tpxaDVbS-Ah0<>Mrnv(|? z%R$A0{dW?co3_1URdrO$*L_JuVH+N#W;EsQoE;_!*6jmb`Ne!!;xgT7Iym;Df@L>6 z7}}k_eFdJ$1${+m%QgZ6ye%;Nt!Uo_@tKAM!O3;r;>Zb6B|RjqvZc%YJElEJRWLMli0^va0BnLPRpI&vN? z`_hxr%BZ;?ZbztRyDQMP^Dv7@R1<{wC$kcyVEy zPk80^-I+IIXM_^;)QxXaXp)x0+^^0U((^aE4(ZFi6lG$Wtx!pylm4Dm+!97JSdr;M zT7S4?;YK`5FsVqzOPkp)H|nmXNnXyc6_3TdmX`G@3iz*6e093GlWAG_LM!!4{;`p2 zDw}D(nG|J_ijoYu@Uvk(Z5%)FGM1idt7pf4{G_fqpqR0wEc`f;cK@klRi@Av7r5^J zf1OZPR`uDDp_6qmTj9NbUzf33aeo%v!cD~sm1;Kv&ue$rj`3wv(?8G5ES40?6~|&q zU%~vKjLDc*UF~)*$Ta{^K6hU zOfKpSMshPRw9*Rqst6(!#eBNEp86S%il&@BSJ`wZAvkP~vd7onB;?ChI2C7r_+*Wv zUsTyh`$VT(7_%~gdbRx(JF+8;sYj&6yt=!dMeC2a+90?OXhmmqz(!F6$44^Xx7r=d zI{3OumPJfyC^0GcIz3y-yY`@W-HG&%8M@2;^IJlv)NV1)-eY^gcC0Bqx;p+T(c8i2 zit!rnlL}PHXx}-cb=b-b`sM1L)p#%RK$KOrIwh9*@EtjyS+m2sy0`2^7rM_!>C{AT z5i06bUw+U#AoKCT+X9_NO%4^6YNvU6Q%OlrDt3g4Aq}BU&i>`$xNXLcWGYH=e2zT? zvP_L`)pG3>7li&s^J~V+(9L?{^G3htk+KCFo=;40GMP z+ywl?nn?j=1oV|0NWKd?nk#qtHps9(z~{Elhj&G)zULPLMl~=cfi@$ENM(?D!(=+R z-DFtij81#1;pOcn-_IO{R5&ubtGtKY?eRwpFC##$btwSVMH^ZfLg(|Y`K_X#{)oI- zX?o%51DgG65fbdo5urj^u{qN&UFXYg7#dGq-7(JcAk}VisK8i`>{C~zTdw=(#JU?# z^(xW=UH9X34_w{#zB#Ew=fT(N7}1Wc z5!yqoA4}frm`etTKQ^5J9KCI-0TyX0?(cw&oI9WitaX?GU3*7b1&Xy4NkOr}0X|Ud zI}W7ZDL=Jg(iNQ1o=B56vCfUzQ#dKd8m>(%OQ&PjkSJmsF+IGrjr zE5&&QeaBtzEGume!G%KTM{gOxMOYu~>5NTS<|jNH?I+RqU2ww4X*`Q1;-%VznV!kR zFRr7qg2peqZ=1;U0-iD$ok33?2b?LpoY|Fe>D>saE{{T~S?SluAB*6UZuE63m&Qvy z_zKf?laB~|f(P4EmN~)t3WjHSkF{LcZGH^IIkB(4yBQFSQxkn@9JK`#)QkqVIMw?a z#J-x;Olsa+Ga}h1`6qf>uQE2EQrn6{zwnQoB)ozw{-CEv;{NeiRVGtsqC!x$ZXHq3 z%L|_q?mmlfO+D!4`kF{lf;`w;^P}(AgR^ade7pGux6_N*aJ$t!$Gc=%z83RE$&C!BSV!< z6x`*=l+|JC`KL@T``z3rD>#6fcx;r~ILo`&QtE||OdQ?)E5rO+J$X~g+jdN`(G$4v z73@<{Hw@LHCx?f$XEQs5UvW<*8q)F^*F8K$Vz78DImlxn%{UJEfMw4jYIi@zyCmJDhjvap=_1l$Z_?SWx;qQ+0{EnRgj9hj|pwC!Ib+USa`GSjUo0Lk;g9Z!#TLg(ABy8_$mma%jhVDs( zYd=sXJ1fV^#GD)doii!o#a=5K7@0*6j6`y1pZ92VIboS-IYxiNeeFK!@!X6EzlA+R zFLv}kFP7U|ZJLpD!9r!|=19F_lj2;}eBRU#yx`}I*Mi7Y_q3~DaENJ6ahFpsmt_26 zrhJo-Mn_bT;$gylOKE80b+3x5wFi&=qM3L~=xy*rvoD{VzonrOx!h6G6!`;6b>c(05w9vji7d&gFh(EXI z4=FgUUn36sT5w0*c zY8CFLqI~`yV3+KslSe+U!BBvPaAB`x#KjN$R__Z(O}~$L3Csta>uXRif1c<6K5c=|`mv6m z!NDww0m@>L{ur+Gl;+G^H}G|MQW{S#w(+JNUABx)SrCm?w9o465c1&=N++{68<8nN zXxMA8G#>DH;o-?sM3g5lem0fD*v~k){|DZ^GGSk5#mTAJ;$^nHoWzz(cz$Qf-=%)r zYyBwFx3|i;Yo59k7Vq;m=IdO3gO%C2>U^@^ECO4WN?oFHP1n-@-i*s=g^%g1c$X7- z+o)eX&UpKTtIJ#_m08T;UQ1gQ7yEEwQAQ&vV6ojxhZx9FoHRWn-c zp3>T#D7VY~%KgDUFr2|Qc}r5JVYSzq&A3ipyK;7N59+b`wkW#B_vYu0U$)XayCq7m z!^hG#v5Q82Xeg61OtoZWpiF@NyokQGl}DO+VyjFJB{Tc0=I|=Bb9D;kb!L%>cH&Qh zj`a%@MNa#LPkley-w^V@<88r)qp!g{$3E)nGHb9sg=L-7BBA%;%vbieuPz^9?|aNI zKmC+Ko^a_|k<&hks{#d5?u}v`7Nh5C2u82e&pj#eqk81_Drf;M{W&j@EIMlRAXFYT zeWfd86k!GgJBKD3$JR9QG_a?sJEoF_F6y*RekHMR8!cygMKK5-`z-6+8ezYr5?2!g z#ZKS}E;f5~6l&GZQt{62`m}gnr)EUNQ7Yv6f?H>W?~bCk3HNnBK&j3SNR(S*K1;Ob zmURretZ-VFHHWH8lCkhi_=I6}Sf_ZqRf#XH!b!BTWv`&lSw1S5C5Lcd(bVgUG+_w% zGXG#6bXQmY?I{uRo2-kc=kmT?_<=WrNlskqYp9O(!PWdG%X{tz-X976S1E9C$%5%r z3FvvDWKGMU(GOFjC@SFih)8oCJsf&%zzA-oP>xs<#%sx77{fo-r=hq&;?_39^?3Va zU56ieSqf&9Gv7HMQZ+c2%Kjqd;Sapgok2V!zHha9%v|UjX%pY*XexB!4Fr0|5115a z+_|%Opf<}g=u%7T=PEzx zP@L<#aZ&w6(CHs|$0NJ0m%Vm*qXd$~=87O3LS?r^bS zCwKxCY>*`Dy~O+bT1*?=ZP)ZSYP$yU-@$zNKx0FfA;*16Imgy?#``64Wxu^K^_j@V zGbTmp-c`tUSYlRA&SPN-2B%$Ra#!W(&s|_94!vaf{lLR!ujY}){1D$+b_qv`nA7Tq7+oN*Ii@KZ@-zzBrPJfG->54kl~#8#Ez({siAhc+6r8TN z7hDZZjB08QO-{&2Q3;j#D#@haLZl+DC#NDmFes<&)}tq<+Hc4tOYAPmWY74z=mNGS zy7~Ik$&Mo19D`g|Th&kgB@6Uw1sptV_$Jf~X+A=Youw_2X~c;$v(suEJ4?C7>!1Da zcmvA?A4e#Ax|6{h%Uus9(x}4k-3jLj(0|iJtjA?X8IYl5H+V39K)tJfu<{4qS!O>W zuJrUcp0auWj0!OpC3*Gxo40+q?)2LJ?i4J9&F85k-A&u!=Vjote_BSUSA$QJGAb09!&AyHJnGMHSGm~VHv&7JQ( z{-fD*R6*}@XD+`gpdxyFa$C-U1SeTj((RJmy&6Tw_a98Ms9u#>Q)KH8L{E zPAT;myX#xsh8g{PLt3SDS;fKG9gcFYv%H@MuKL8DH4X~55%Oa#6Z5l& zc5QKWY3@0VzVob|;;EmwMeQCb8#>HzTr<=4V$`-4P;LAYPx;hvisuk&N?)U+;<6N5 znG_l-_^b7q#&7Cyx?Jj$*~rYrsG8IvZfLI}5u$b>-`?&(wd#PG#%Hhhb!Pmw2u&&} zY`f;~VnaepL_xPN>M%T0ckq0X*W3Pfh&vp#l)mH2vs?6$!G*TV+ma@CBSUqG%ckZ{ z9V!-D!TholynoBM4F8I#$(7FHD-AIdk<4soo`ziHQB=ZCKOd$0myOHyHPy|Gq8*mv zYF$h6ItLgved4%e$CDlkO%p)7=bA1akLi71t%fBB4(rCF*Kd|5uT3}H17wi9TBl(q z7O4N5X~Xg)Ll0c4qWzsNl=|IIh%A*U?_IIm1u$`ZTr8L}ZX2ikB(-L~{>Cb33JId1 z0pbm${h%Iv(B|evZP5&e=_3zkM`NqLGTi1swA#5tU2RT!W9Be>FLKM_l5gsV#L3I| zRKmP%@3{MzD?*IfosF3lMBkyLGZ>7w7(5U;lvy4k#@_QO->@H(e zODSB+LGKQ5B4KFc2ZIL}-zzQ(A9$;Dg*|55vj=`ce(Yt!!RRWxSfEBX{?#sB`bqb< z=H2nH8gwOjfGuy5x}3se;^B1Fk5V7nXg_kTw4L$Tp+49G4ZK1a!nj+*j_%w?l&5f> z*+-skQHF^$yX*8&!^F2rZB~O6&9%S}?rO&-MP0R2e^7ok%nsS5r86Q<`yXeDOrN{Y`8e#L-Azq%l;=k8*K^6NviZwK* z7T1ICsFQo-D3zR5=VfisGSv=E3*RP{nJziXp@sc+gcK=v_s|-i@|>iL3IXq4L0k+H zwdkUsl44RHdvXq)-k@4KNJnN8+cJRmc+ol$F(D59{Ot9Bf}WrIF*HDStP0fD4>ROV)DqXOZtPVT zKG1+$1QYYFN1LYFy@#{g3?*jv=%?&EIEia`(kwt8KyG}Q24cx%U~hz z4ioDwuXkNw-!WXsk^BEA*>{W;T%EN_lYjPh!p4IqX?ZJgeOGfTi(ei!odnNKD?LIn z5;vO7o)o$uuwi2guYgP0UxphUs!Up2yu(XwKlvc99-S^VbGkjXyHog8eb;2V4G(daBG0x^4K}aD zOkWZ{W?tsYh<#>0De~RvOJNt1%ti&!|$;OC1wIs@{qP896&s(AKqC*ZF$?LRt?JzkmVW(S~t ziRz^UmTz0jY8Uu84p}MQTdH722hfkB&MksfzrO~>T-L6?F8!$tT&6nVg{i1-&$FMQ z3LoFEeo{2WeiEHRiDoV@dVE?WQdhYwZ_snKv%*C#m3v#l!swas@#E?;s#>!xd>p-3 z)0*MD%kw}Gp)N~CrTXG2$-R)^J;7HMWE5oUj?)}xG-X8fyY;UW$|!OYVrwwv`Fqxg z!`q-rc-?VE6liuYq^QUV7N!v>`#vak+G+N&`3D*ng>Mv&DWBXT!k^fG?`mY+Ry-R~ z@_wh;Q-|64+5FD$$>$@DGfEl?u1*X!lqIR^jN3u5R>NSjofWrBNt-- zlx0?oB|VcsvT$y6nAawXEOtg`w@Q3Wd=;h4sGs-^ z3{<@-ZZ#d_AF?G&vKk#RS-ReBpT+jpb_Ym+a?>;UezTfN$R@Rr_2l~y!koHRjrfaNhOX{DA z^*l*>ul|j$r{#4)Z2`yraRoT|piNoZicSI)H2fhAH+)Ln5&{N$zV>{t zKVleW40+-*DRXMK5Hj`O$!Eg72rwO^6AL!0JyJQ_{`8>#yMJ39! z#(h9YAvyU~CPTkePwA}gnY1z9;4D3Sk;XAoUYi&p3QPS);eu-Jn^J5iRVACc+rSJa z4AYoy%lTMowveIrPI3qy|FLn@)66Y;5YGKQaK0uJD7Zm+qYS_GOdh#;+;UI>+6Qe4 z)DE!GHxqfK`U3$wW|kH+=j!+g3YAU?g+!HIp9HYjYRTm_gL9K-<_Tw~k7kTDz>A#7 z!_svtG{ecfNEXL2v_0A8~;?x9B9*2X;$)jrdJ zzy=~BHXd3(T_a8-04i7FUSRaA`nqb@BT|Hw`$)Bk9*Ch+bg=Wjq?p2=l7txqs&V^% zD*Q+*6N7zz{{MQ1P4^GH^B1hlE)1Hb2Htha zbQE6bAddclH?1@czMx4JV52NBcKuUv=92XLIMVB1p-^h9W89HO()3v4W50Au{X3nghDV=W zlF$8tN6|aVvfFyV%^9kTql@SXxa?oHa zIJYG!JAZOGILBOWvF4WDb($MKc__K=*obChLE^;kPYTA3M(sFLM+FO^88pdO|57(x ziZ4-{<4E)iaj|biqDK5T-0X;VsK^r(gcslOjiV>;ws^QcHlpX($OdIB-^k)uCm$x9 z{wmjV!RY6<0#V^9)vk7--;U0KDXk3loqK{wfXgzP(i{gdQU-G8ToN}%6mU#JF%V6^ zKBKU=>Y9@BOfyLsn;xe}bO}Jg?f!LL-e;HW&pZ?VtZnPj+*LV{`kgQ>mC99p53geR z=ouRoo5%JL|cKm^5?{w3;~N)9qM>yHu771rw$Dh z62S_ycB&dIog=vNDSgwc%*U-Al^NW%Lwrtb9$nW9UzE-^CS@pf9erzd-cT)t7TzR#nQ{?Ft#Wl9KJHoVkO7p)hX*#!DHl|X}kWOc=?incd5WBRO0 zd-AK>5)3i3kF@gXC1ew_or$Ql4l3tse>H3!ad11VLKxB#?kLvLFs(E5?wqoOcjVA3 z7^|`FQlEcZVsY-)H2Lepj7rTqr?6-8Ar~SKMfk#N_@DygFX^ zNlnkk%e6-04`GEy?x|WcoSam24-EHjl^Rw^V2JFv0$ z^W`V*t=D*nKM)T}_vmM6(PVyYRQN)ZsK@>G3~{wqWZzD8IR+jh&u0%WTOj4j_PJ&0 z@u#)TzUy{M8^31;H^7n|GF!JUMe?IsJ*z z7YR{>Tu4(p~LR@U^D3A0@7#BaQkiSd$&H$w??bTg% z9`hrrT92(*;S%!!QnC1yRg3uNNtI!riHXuT)Bn7BRt1H)CJ7A`%+!*S|vc0ifp%f~jnV+8|DJ*-`jR*B!RPVN5l)F{1z z`Qim)io9&wjZ1xCB5g15u2ze;e$xcc+-@X4XpMLmZ+*M=@<|%FYI-%)>k6)$9SNcp z=QTpR^bwCpB@6V=2dKZv6E%7K#G{SJY@q{;yYFsuG8GO3J<}LWxG;^IA^uQkyvOm? z4%1j~Xxca`T=DZ}E8P`|U!kPZC?AkbGM`(-&3gks^E*wHjngG)@|d*R+ZI<*h+aAQ zq~mOw5K)_K8$+&eVAnf8mg{EBI~FU*AfH@Po3g6)b~lo5Yw2+F&dbwiFB+DsN6F=t zL+;pDPxs}q2vdRgf5s=t?SW0Ely-q{Y!VL2i}D!>4ZpYGX)%7%pXKP`#k)X^FxSi; zC?O!r@_>5jIwf8>O_rJ0UQSSRO0!?n-(ttDEEv6jztoe&A{Tz_X|B zKEOtKNiT0d_q&=;R)I+)X|($GoZ_0Ek&mT3vi8xdwm!^AesD(KjEJ&8#n!}J}HL9lvMma>KW6)4Ng9xyqQGjK?TcE_T>qc8`yIg#W;lZy;=hE{ud%n}ctDG+T? zCrh*#5;=DvC!>4I2w=N9k|R&=&4tscJ1g4AbecnGgk{pGwwOC;P=XM^C=$ zfqbB#y=fl$gX#E^14n*Z`Fv_RD}0Q?M{h5ljh;RFZ0>atOWjp=X`0%r2X6oK6Y|xq zz*8M3&rf{KK?A&l)o2~xrRSx3d>g%ZVE^%5;6$Zdd-lBnCL?L-QDc+(-MDIP=^V-#54H*IL6#<8u1x%fhQ1$oBIbXq ze0d8BZ_5g!{~+O@{k_9Mc5N?K(~FM&&sKB4PX)s9@cxG04J{JUT~=NK-zD4l--6S| z3U*Qv;NQE@lGHEH#M(a{|rBn5Vong3(!HsH9DXL2lqO$l0YGV%qFHM zAfFJ4w}JzLyC@D5^TP$ANRTHXggI}Le3+{!k_13tUnqcsd%-}$73vNQe+&3^4%nZ# z`cE>>5Eg{9!3#~AGpN{t=PbH8@{t?BZcv0I0iNCq_#Xum{4KD} zk?;CPUEVzT!6*K}{u7%f9~Jlq_6Kg3{FUw0PagYI_P>{W(f?uc|G+u_-z8t>zkqx= zp6jMIo51rCe=xJ~PavKDKK@cnCP-9^9b(Dfy5YNLM`23vi`_#1};&Wbm+N$e_Sgxii2=haGT{ z9xS`#Dh?lkOZ*l2Cw|$|Z&-jP-xZK1a|*}622^aIaYM9U3RgX!I1!8gXXO8av~j^o z%y(%6WJ1RukPpO=&Ku+XRJ!W<_i&v5N`*@uRyD@oATz)fF8bw+ec$+vWR2&WVew&@ zUH}Vm30NOa^~!LA`=NLzP;41e z2MuCCekGr;`xlMDTW}h2RT$fTIT%gaG+uwB)bk zdp0Cu@mE7DPLT`Gt`7F>zL5Hd&vP7(ux zAs@06$jhN^`-S|V<6D}st#F*I?(>n(prI_vSq4TTio(Z=p>d$}TF=K8{z5+Tswg+c zm=#V|yY@5S3Nkve*7Idio@ikNt_hZWnR|f;ajoFE1de>HUR;x(vKaEALP#E&35mgQ zGF!2U<0#TPEG$+dv{GYBaKamB*Lr@i>|QQ_zd}B|3e(nD7FGl41;?-CZw!l5x}JPV zK~TOzen35@Eqm~Pi2Ohk2oQla6?GSrkVXZbGQ`>g$631>@=-xdpg9Z+B{Nly#=i|T zLgmo$@5o2_)vY1_2rn9wmP;1qj|Ts@Sx9KD55Oa#L{iNRmxWObC$Heh@A za~k9MP%Df)6nPL>Q;A$L6S)oycPF+X9EY>22v>q_wJwVdJEBOm=YuMTRq_>)flQF_ zB+z&r+X_oQ(6XXvBUr34vM7w_L$MAc@3>07yA0|M)Rq-!464K6uX3_7$}3PCCDwaB zKxMtq(guEVK?szG9-QEE6aJ0Xb0iFctxh z1NhN34+#ybBo?GKkSg#RZy+ zqR>OUrjIy9K=QASUp-$IMP3Ir(O;`k7B{otIJDJK#+7WO=vU7NRHQ+YU`!$MF$Y4H z0fA1hasvM=*p-IAdVa7dO*4QZT}uTlSXKhvWK|Dphiv?2MZko{l>wVr&;Zg5rOs-nNb-s|R=yht1`L;2wGe?tW}K|U;e$0A)5pI&|2g@Q07qN`D8j%x{}DbikPwM!vW^N22pnf2 zL_QsW^>;yEc0sjxBqw0t-Wo>NZ_hHTcQsdJ5I76hX_P4qK2aO2h|>tj2X}=2whMnu zelQE_Wf9616Wo9Se~XMZ(skuCTsY1!hzj(v-t+zCAAo4E3sVJd=HL=5z1}E+As+^+ z)=`0J3&$yfG}2h!0CSB72ZBWW2|k8=85sJ;8WwG(;W~|&Ku3ta)CK)I0mCW6w%R!R z=j3Ao9eRF2P=7}LpL;&qJY+}_)>`M4x%rogKlXeytPCmy%Q^BdQCBMe*z+;4aK>g# z;y)dBFk|P6-Ik!hSBwAT^-swUmQKVd`V(*<^H0eSX2c9G^3U-9DfuYB|5@@;*n9h1 zU>KI5vka~;gqW^DXA-m-|CoGP%-uE=9vlY+g2o9fRru)3Nt|A=Bw@&h)~0nq0K>pq z1WXAO=t|Mek@&LUOR$g%2opCF2w5ZoNXoz<8L(H!EVxj1-SP+3{!SwcR23|P7c7cI zpvAx$2M?-XP%RuS1N5T9PT&^gPkRqY<~JIHzN4GtVG+=hICvZ^x)2h;kPi*SN);dz z0tXi25*U-9La2}1(6#GgK5iBRqOfhTiGS|-vUCWvBAms4{r-WH(WKk~ED#Pg1RtHRcs|xMp^t}9!Gt)^N6SMc=mUXE z{6-@o7Z6zg^;g^gV-Z%MHbXu}`Jk!Vz_<&-|u!XXmE7*fg1zIz&bNDj<_yBcbOnq^w}AX+C2Hd z^S1!s184vr2M@HP2PF_&zDj-|sDcXDY?DslN@QTzDp?F5R1R!&#+VAkPGIrzaUPBU zIO{!sh0N7>1;^oIa6psQ19(0v5GSz4^ViC(k`FqFYYRGyl|kSVs~T}7!7{KFF_3V^ zn!g?#7xULj{?u??6|V14Ar|m&-c~(-#jrn1;0#`ej}Kq5ABKQ%R%8B8cK%%!xegbX z!L>qD2V58D`MB~G?SGe$K_lRL>Wsx-*9vc~=i?;*R1thV6b64?A${XP( zAC7?5qg5(kD|kO8@HhK##JagG^AqZ7)_Jo}rXW_0Uq6d+<<5{2S@Hwnz-A=)788jq5_AND!oFZ&&p<*5&QN~S2y5tZM4O9;hX8{M z_9_^6-8A`dh+gn5EE2RIVxgfoG&#^l3(9PoeBdDJGHXg>kv zHckGD2SVhap&&S5FhG`t4m4w%CLe|Y!JM7Z$e0rX4Gw|>l-)G>fCMZKNFXuD=rc|) zI#B-`^4H+6fnQl`&}Ew@9}SL&UAa!I!AI}t{&mh12VA*=FY5ez&j;kA zaj;O>9su(3!1d$5^!ybMgjhmHFf9BE`6r-)O_PsU^_-0tToMTWf6nuf5d5Y+AC4Ye zTo)iH>g9nW%7(2|>(}`7lv|ivj|1Ru+ z3qybaN4Y{V69a`+fk2moLMXp!@>e_%A_pD8u<#K15IO%Y=3^!-fPxP6IAY;(;SLk1 zH|_bP`5jkqhZz?FHl-#J@*AHzyf8EuA3r11pFo=1L+pv+FJ?0ug2qkoEwkSf`$|OlZ?vFPXg~ZqJNPa{Ia|V z3HU2CF51W0?!6YeY;(X&hyZm`mNGY3 z-PH{|Jj{Pq!yq00WU1@<1^KTF$t|0bO6qimcboHM|v^J=c53eFLy38&_ckKylfZX!}#4F)F@kIPPI;o}( zk|=+8bIO6ukV<&hvy@!^%Tqkf)CVb^*BNR&=w&0(ExYGd_>GO^%uS9_;)waDpPrWk z(0AfD)sw`fJuj0-ENb`ml-iIZG7g=$j(sgcE-f$oHJ*s0BJd71j|Anpz&FSnaLZ8> zW9oYuDSK~lcOXj|&D*s-I>tK{wm*GkJsHi;!bRYAJz<26nNmHW*{L+vw1{%NDXdx0zekXa!xQ|G1p43AuT|&d| zVfT&TzQ;l(0VggWybA}d)8Z)wXAynHfV4((=^F9Ed%IJ!rzFAX$lp$izf1DQP{U5n z^Z1lX?Z_!@Wd0HxMXi@%PTV%p+$Dmly>{x}m$oM@Rp!x@TyGmN6Vm;GC(}lL7g1Y$ z&pf(`fI9M=%)IpF+S>O+C#M`bWE^gt3iv`lFDx0q!@PfRmkgBVNfMQ=qm;Y|GC%N? zcqNl%ztAsl2h7wrCd;L(oa-J*A)D;t()E+QWWrPMjc+HHHgR;EvQpExZ9#1zq^A#G zziGr8;2Y^(CkDFy#VA>UBA2P#!eNB`#latV$G(x><>5%YX#uR7jtUW>yfo@|ZM<1P zFa>$Go7G2=j=bCdWlwSpC;hPGL4y5dZ=NA6kk{Ue)mcW(9qA~7^(qdsJZgRQQD%5p zlp^;)1X(wC;qa?ELkBBS@{wJqh{p5uqS8d=FSLubXK$@N?)|c-=kv*^o$cYx!WN%d zjt-r*ez*uq=kG|%U;3aObUIe0Hud2mQ!eq{sncZKUp~rL<_Y`IW*nVJ?rn>e46=;% zPo!#yuPtoo@VxZKP+Q|>=cOUF6SrcczfUHXW@#?zZe8-*duTi6PaG}oI%|C|*h?Z_ z`EaNlJ>vI?J#*rw1-VoX6qobZhCO-++D+^2X$mT>qqu5&q%T*p-Z@DhTxXbj`Y#g4 z2(R3cFOHi#?CI(0%+*w|=;(wCKKNTe@WDl&EqJ6f7NR6aI8P`c&#wtS_)zefoBe^u zEAFVqRb_EvNPBQ=DS=4P$Ao+ka}pYq^K8CPO%B-(TyvBpYy6U;Tw1B4B&UDu{B`;% z=O1_GuC7pdu=$9>B@mb7~uRh1cV z6!OLJLp$^NAqlbPNQzx7+&i}vp-5n;v^5+9zCz2$xZY&W+m@{Tm zTjO1Jtru!Cy|Gljk7>lm;A7#J^PrnWUY5hQ)~_hY7w(c}pQ0PtgD7E+xFLXgk~#Ep z?=ZnBzL56gg&89P&j^HWMU0H5>AkLWIHEeSmGoJ*LHWxv_YcE63_cc#AFmK=og4e! zDtSsUrYOFzqf0{-5nK0}t?UOLrT;@r+rR{sCb*V#M9&Zhux_a=Nsr9^p4!NDw^YNpBW9QG+UCZg*nZRhl=I{Oecv$YS z{nDm@ZTind*3w%K&$}ic7>?Pd+)DmD^81bO+=tH&FZG?hc{=(|-p+){Q$*hjF0^?l z&mH&fiTJk5`a;BogNl*+tSv5|iU%G3a^cFo)Cl}*4#TOBs1FH#XiLx`clZ)5aK`r%le}L1;fc*WFXes!X9T zF8n@miB2%TAzT?3#g-J>HGbfI{0hPeD+$=j;KK-@-3-|6La!~PoO(3MLE|LI6QVgs zT;k4KHhq||P+I+gX%bFl+5N$++<*EH5oJ+R?cx60f3Bat4DU${meKfA!2h%y)n0M2 zJq)bM(&2L@)iv=-agL{2;*uYq>+2d_WR##u?BlW7I_P-2#~X3x$qgRPE4#N>4+gru zX3?||ZWR83H*Trzhl-(7KYOmWTSAO@hQfx7_u>cNA9zi+j$ao~KYnK3u)SZf@Nu;P z^={7L!Y2i~#C10;O^6-`EN(lw^E@gh`Y`Rgh^jFfGlv`J^kkXt9QkHIBa<$dka%jA zZcElX!m9SO;AiJ@C^cr7of_s87tg$!oD-p`dQawS%c_|75kK0NkN#8jL*_do{{&@!81Ps3a4 z6Yk4Qn1mb01i$XG?Qvh0X&&|8ymU_hDM5C4xMD?oq_L{}nW!Il2OUzqRKs;kmgaAF zj6Huz;=asyvZsNCyXqs^Cz2OFo(8f^qI^tQg~{dO8s!vMPd}sjjyO}Gmm#F7mrPPb z;h`^2t#xsrAz+#RQBFL!uvyhLE#n>fD3v}hIA`Js+a9{!QXh4FTLrO`Pm>tfO1-wS z@J2f7kIhbzNXBzf-92q~xV%&*%4dvX9p^-}$7vyR?_{$TK>z zS(37y+8=-5`R9<%u?%0^-Frtx9{k`;(%r7|sKRr3y`_PBos;hzr$6mM-{&bQvp=iY zuDWMzpg4e|et$n-hmn3uvh1uO>&3*jFrBK8A_v4v;oDf{R2S?x3VH$}Xb8{ssg*6x z|G=C3fmd3xw8TqbX5l5W#4dW=>p{wb%@xa4n%V}3DR2J zDX$XI+ubTYL$c)de`Uh*8;r)u>)B`X`VX2d-RFVRaWgS-fDEkw=gDx_vo_5Ix8`r- ze2u7xvf^$_W%!d@zEvb|)|S(RHJ|Y+jPiXM+<_||T^vszGKZW2;*z=FWH*=Dw(Mu9 zFGDK?Gxys#=q28JXL@2z{gcV`?g*M4iwfZtF=SU6>OBtMU#_w>-Mvi{2iVg;Y{#k4fY+8E4X3tZm5f+;QA9I1ZKS z;JBvUS-+|_wps^jCcXt~a9M-%1&9l10z%VNz4ngU-2(hU<;ZJm4Ls>Z@*XbO>g~_Y z-L|&epirqVAluTCZ)@28F^&|6O5lH1Wq^uc>TPOP2IP&eGqZ*cA#tqCN3C*u#5OeV zJn3m;;%t+(6kSifB~Gr?AFkDaDZPhZGC8MS8>-3`r&83#Kzi2RQM~^bChWh1F@zi5 zx#E=^qM$mq)ITB*iQDH!0Uc@d>fXHx zmR&CnR<;#6-q+e)Tz233Q>pRX=K#x5`-1&BJr1;}6j|nT2b8Wdf6(s<(ziZ+EYjTP zkl6=`r!*GEocoEt?Y(%9IM3lMyC%VTw?1(V#Pd2vHmC6qKJ@*|5r{atFFsB1#Qc&x z(|Xs7Hn|7^*30r+5qdEvhW9+#Yjj8i{H1o54$o{iZgI0$lh$O1=V14W9BaukKl&7= zy$!x-QbN{Vl}>Qa-1(LF;;DU)D`%B7T=-{h-@7Bh?s=ENfk^LUc*HQD*M5C-c3<;` z2>;ytqiQ#i&8lgpmyNfyUTYUeO(@-WJ=nIa&_{GxxFNQd#C?#}K4C9~Ekf(?J_7;@96~ESL2Q4gW?4)B5?L&nzBN zzr$Il;XeqvzoigDw}mO@_ExbxF&*G^5_+aL?{(%)%Ej&y!2MdX;4sf!PyFWUnT}c!|Q%rv3DY zYApu6{^DZ`bbBwt6=6|TUJW`q`##e49zMtI)qJ)Fc`BP@Un(zP7FK^cZW>?IM*$`q?7XD=@0IV{iy_3bl_?;~V(OQhmcA7uOnBGo0Ju1Rhsi(Z8*?w-O|Bacm zUeHANJN6v}zCG7KW*Sf@Y2aD9EDwE9#xlDHeiRR$LMdbdMP_ z@fzCLDBu>ECXG(LpkP`KcHerGq{M6QhsIB}sw_k~ZrXH={lFvJPfU8Xuw%z8jhtIx z%s%#hmD0c#-#RJF8=Tay4?pd_d!C!YzvTy>H)ivQ9)(FF6C29;QS<-|!9#gQl$k7U zGnl+7hGKc^n}^>;qz~=e_Ew*hdb#`f?%II1BexQ*U51NIjgBn$k7T;PUT_50)*|`T zAGgsC(b6;XEwP2sGu_~)fPDDSkZaSWYPZxem?2MYeqMpkg1zmP-gvA`KR^YJ`sw>YIH8Iy5=yf~PHbC-3 z=!2VH=tUZSyYsG{`+5BbD+DJxmIpZ&g54CFoNt8Jc3r3L+Jj!sca5ZZs+=aJYYW=_ zz{+ud@3-dJZ_g-XqLx;k*F%30^Se)oz;@M&dN)hL7cPnOuf3<(q0NB;Q-<%gRx86> zqdqQHqX7wm)OOImZJIBTX2+Y8Ml@`*rqR7NXC0_DrC;+f@2k$x4-IwP3R&|eVplwY z4ft^=y8T_T80)=Nk5zEE>o8F7MdlCi9Qis!)*s@lpgUE6+#u6?VP)KjnQ1IF#M{zd~8VAZsyWX6*Y;crlh4J0nYxwJaq{Dv8%_tQljM zbud&UEuzJ~l%0xDC_<7#mXzN!V`o1QIcT>{Nx&GO-uGpgHCo+cC=-k1ZGSX<=~sWWJ(jZ# z{p_E9WBZ02!X1Ji2x zYPG?$d9$N!Dmcn3g@>zLH!(lY;v;qP8}L)H0IWr4ztYTGKv+0Gl~4MRQ_pt__?D8sG%&f zf^jvAp~m0<_~woHi(#*t-jO3xCTG{k7K5E8ji%LQWDAV1b9PtA)CHaK9PX8CO{S2< zz=p~c@fkxPb#FW4B(Df*r+M$0Yh-k zE1ZNqM(?%PpxsB5}r z;g3Lusa^BOf;)gX1BzE}_tn{T6b#>j^(c&Q+vD!o}FpTCRuw;`PwTtaGoA zKe~LQ?bB=bonE>vXGdcyT~63Ja-J|Rc^_qowTFM+*AOD_zY3P7IUPuzMssA)h6N)= z&5Xl6m{m1^S}9+x$n!|!vSe>eH+QdkjT91)a6oIZuaQ0axB(mUp|WSEB`=#BSrL(I zQaj9{-Neh=j|vQn{Wj1C1)C@{-y~E_2vPm=g=BQ{q1Y=q6hk)W0E_xqm_aQ|pJY%p zp5t!;4%vb{;Js$gp10vC0Am*SJ-T|E*)TIbZ%Rwb^3&c*?TB0u=&%hBv%!2j5uwf& zRjKjUmKFh%NHT6;G$7j0dwsc5X7fWl#xl|FO?08~*4UW|Z0AWYv-qwLd(|Yz_ElOC zp`D~8E9n3~CV_D;`-sbxny8D37XdTCEZ~@SkNa+^)*tU}jrZ|@4pAiJZ^G>N-KkU4 zqc~3Flgl4G%bcj1kTMQAdH${MNJ(+)#DR8Enm5)zV z6|fr^;y1Z6FhE<>V%@*oa^hif|5V z-oKRj@$-^I(ZN&7R4$1!>nK^)v>Z7Szr6?I=q6ODUPWWdHn;_Qe^q=7UeCn1&vD}Q z${uVwBbJ?g%_DJ+zd*QCK*eARu8LZCZWFR&)mkm+VxD@GUDm&cF5ArgjcfF`Xm8op zo-;zyUDEpbx?Jc=Qh_SAjo$%0*RFZUVBNscv(a+ub^kBxTLf8b|!UW(40Q zzoXdoaZi|Z*?jDe2AQNG2vim1uGaa>Jo=JG_DH?pyfMc520kgoGknJxD(lmgs%A6N zAa9TFYHsQl0x;m$TrKlubskNum@phad%`R#Z=CVTkg-GBRAyvK-}wFez)181)c&#Zzq&gO$7`b^S05L6?IH;aW3d{ z@kb?9T=w){+NiuYEaQ3XpRO9BOZ>!LP#|02F+f(9u3z7;*Y8=JBWhgWx`MB$gJfE@ zoiHV0arwNM^h*<8$oHa+Ti6sp$QPNwBkc3<*y#52!vjL3unL>4f%B9=u8@=fyc{QYP1uz8u#1oRFsB%gk_>cL7iaz^BND-ryWx*-eyC zB`h{n{Cg7yI1a7o6ZDJBo6J>e&S4Y@iy+VC?RQ#qha~$?^y~kE4r?-bni}9!i4U3{wcxn z$=8GUa|1IiW1VE665)|us4(R>K`cA$sI zd%y6_n3(vsf2Ur63)b6s?iORuv?`q#D~{$72-aY*F3VnD`6}#w7WQq`C!A+gIqYYd zH?BIGSR2prvkn19jcHKgFI9C@iGS6V97K!yp78Co-T2k2j%W2>fPjXqa`L+SLc;FJ zyWy-XQMNK1^+z5OjU^zo3skytd1T@8Sp}rE)Ed^kB5p+z$&VGXKwN4a&q%-xlwJ>g zcZ1CB^XC>WZ)3{V!yAB592NEPFDD5RBGS-Cbrmoko750kCQ^LeKPA~mCU3!Jvzeqa zq`Z$uRE$2&RINV>xHhrtGnU|RPF0pV$4qMn&hqf5+ei8q^3}axguODPrm?n4NK$>sV=v-s zAo`#$UKuX*+CfMEc0M`b5nO~ZRRnY=jDj=#MGrW5l;8Z*5j`KzP0wpx`~mqTATph3 z??`3X@(CiT46UeiQ3{ok5|(Z6EjH%ePSaBVEQnRL`A{7j^UijGB#wfrD5@o{lp|h$ zpd&Cb+4h{w1w2Q!sQ%#dvC~f7)ngrlvn!O-G`jwDH&X`d((4!4_Ti8s)D@=X9W#;W z0tqk4`8&rLHe-ofY8F!0d{2=jcyOm=ev*cz?ik=TS_dgEngd3M7;Z9I;3rigbeZGf zmx)_Dq}Ui~1FM&}!M%L=f%>PNuhNj`Y3%tfcg-@^H+i_J2Cr{=@tFE}0xqiW3A&G( z{Tz&q{1}og-U#Zh1eGY!PlwghlvgY=*`uMpVsRKDG-JoZ(sjv;D^gY<#fxy3-l@f@ z$&3FniHYg`ui%r!m^LZS_cz$%?UJmuHUOUF|Il!sreZrck`}O@H(u{}P)RRJ#L;nx`;>z6r zjeM-D93bz_;CF*(&-=dEK%EVzcMEj@T@V;IPeh2S93j#L-~i1gWnPaulOzqNcc|i} zlkbDyAQ#Yv#7rL{zpx01NbwIXujKs;;t!GA zoyU1TszA)~uQGq7elu&dw9Q3UjmR5<{`5vuS+hT1WIA(8l`tJ>StFyETd)7~RaSNX zk)UG^=ZT&C{J+gSfsqftpcIi}n)RI)7V@=aP#v9-6`j-!($^a=I3<{|{GoxO_KGB! zlINsG=!)CTyIqCk-l(fK6qpjXW02I2bULlqmQD+N%pEK*Q*XxHKspR?4=uA(z~Oxb zcZ)JAfIa#9ijhg2AAi~~|HAa8%S71lYg}-9jAP$R9_GXe>=S6M$7eymSXXtJK3F=D z07+EH6~!jA>f6HiSD=ELxOHDB9_GGP<$&&eA)5&u@$un~bL&Fip09s(|F2ezQjQ^6P2+-KRK05jn!m)nU}QvD4v2ADYyaN4+SK>$ecFD0K={b$71t;lki`#%b?iQQ4vZL$D-|$-Tl@>Nn0rL`4XKH$%yO*aLMXd24y!L)gw=~!`?~k zj-Lfg~G1^qWEf6y=#Y(q-!vxA1KPdVs2GK|g`o zuVv&chEw|hQ2f5q22PT)TJyq*CjoyTgT!Z6x9-lta*mVG^_A%mrF6Xho3>y=5kQLZIS7VJWEh8IBl6vpS2oZA#{FzGq=2<7lN z^EWLKVW_mT+T7CtIbj*UxQ;_|VhDa1PR~m|u)l@jxyy3#hs`Me7I_3<+4$^k54v7% zl0`h=XJ}P^gUYR~ky)TM`n`;zgx3C1m*OIy4CLWQOW2gCIdg$I5qSSFVHvbnrYw+W ziT!{=K(pVAWBPXs?n}N9qsm8`XrToUFwqFMq4V0v1ujDm@{`l+vedLykIB zkm9=1M$%y=qzSA;&F%c~U~R_o09D6!Ye5Wa#0Z@M&JH&eL8h~6w$rcmJd&1ukTg8_ z-z#gf8OxZ0bMWG}%6Mk~&WLDUOPbtmHQAJe8Lzez+>K*kq_Ycu%wdhAY2U4<-Lwta z`6o8-{@LIE7wS-haN5Lp-A6qI{;a0URQMm8J!>%adub|plSOx(9~JCquEv>*R*o`kz+L|xGX?H4)OCX2hr%^pE3 zM#AxBnu*-K?K&4!kG3eEKn&e5`$L z8Q`M83rp!IxfcM^dO;_sU{@8VYna4i;G|i=a_dzZOZig*8Fyoa&IWA2qn^gC?Qc0fo;*5^OZ;8cbd*k}I+>A;*Zo)!jU5u|K$~ z6$P@9_DpX+onWG6>IdCDe3+W*TCeHi z+&@KWv#{TBArc$&Xz|17=zrL|lTg;XUAk^NF8cUfN}*8xe~Z%HH!q_xFhsJ6Yj(T| zthY8b+BYnrI3AL#M{rfb*GFQ+3N}1a(qZQ{vH_A82Dnk1%;=ZP?+H}a7T@~rYReP* zZ4&@10(>#R=m%hcLquz2Zr8-EQ=1D;j|ZE1Gl|AzdB!tj3O>vZ)2Ki2QdT;7>(n{6 z9Cj4dnwTmqb$?scL->;Oy&1$%`hcpMyN*aJLxid2u58 zx)J?d=Fu^p*P_{^po6q>PnnN6$hbNj*Sv5-yO-KffVVSj@$#@>@#7kldoak%RW4CB z8*5hl36}EWo-lOl+HSZ$Ya_cvnOdw;@jXkqfl%}&gqWlnP(L#dCT7%2e!~R zPsO9>kKWs_$wC*4FA&1>nY8Lcl^#>ep{7MB1``CIYMSY@j}_zvm!BQc=@-=%zg~@z z9L}yO-rXKBa=(%V+<&{LKH-&!O-h=Pb~x(qC0KCucZ%>2oPxmz00mn=%a5MFU_s*` za!r&S46z>%fjFIs(IupcDOZn~k4sg)st5n!6E1ql(f263Mx2!ILKs!NtB=!|Y=5ld z@sFB(_)Og_FDe8y2ZDtUYH2ZC=gkM5L8&xSCWWQXyteJHI-0A($)mox-oy1>!)s*2 z1yOs&vsX9P?t`mTjs0FG`@OVO*Q2PeTWW<^Y6aDbKx##ZnM`)X%qU7AGsKdZ35Grh z0b&g#`EL17#C1cqvsMNFnaEpQ18mCrI~B1M50?}`4~OwKQrbe9rGQhtYA|N=e0jty zaWv(5>p;YZ^E3+(cX*glHO5=Gv3JhGCtcHm+ z2J@NJgksqQQFr(vd#*y<4b~qK2*D!KKkZLaXrR&Yc)UhdJx(WDQNqgp zW_sjewnlMEf`UPHa&gAqR8LnO`aZmCkYP;Z2`D13a(HM`&x{_F86MYvNxzD-vOV3s>iT)~l+?GV zFMw3I55RSOl5%OB*9RDo`T*^|xu+CpV!5b9b~@nd`e-i%fFj07jb%;dpqkpnR@LI$VuTbf7A zwG|)9WWqY%XNQecH>xLC!YxZpVN?-ZURQQgS1_ieJESp=LlX}{d~9GcLZEKUb?mE= z3TK{{8W5;0!9~Zr*^uDq2eZ6YX(BiWtX;MoHfaPb1`{_v2kUTl_0o~8$2;c*~L2q)Nm1=nJdB^{WYpnJ}tb@tTvW)QW z^?))Y!ixjLj8N4HB19GNd5BM#FMKnF?VXJUF+Q9~yN~>XxJJUIy5j^$>GhYOH&`iH z|2cL2oK_D&7z61;?k1qGKhczY%yub_8XQea0nct?yqK`_BIliS?v!WV&yGq7h&#Sd z)jJO<(2sVw5Y67kn=##2e@L(Lkx+f^2U+E3oxn){u#`4VIy1v3sLZ=Fa)#C z34B^eO?BcL86{*AD~bMY<)(@O@hy||jUli+aURZ>LC_ajg`4y>?JGZ9Q@cZ<&?^^d zKP<7I6D+y!s7dKTzyh>{bl-&gci&~${o0RyU^hh0pFpCd})gY4CDGinc|wkznNnz3ValG9Rsxp9=_sH(9-OpM%wqx+?Ko&H6T4JNN8hstLl{n+B0 zE9(o_dAmr|?*XfdH7LDSn6KC~fWkYWg?R=%%L<9E0$mJLK-x-upse;j_`&ijM~qi3 z44v3^d+hQ{V#kXYoGP9y?(tXv2YgRP3}Hj1$+d+A zAt-9&dYn1@b4sU^8=bb-fP(p+O9SB;@8Mi`nY;YAzzp3=K@(b7{jGaz2gn=5xBG3UniC&!yT4+B~x3i^L7=*VRJJ)L`|f3 zs%O;f#H^>tMFesQLT-E?gUCTZ1FvT`wPnt$eTw{E&Cbm-({D`2Ig9$wih7==utC0SV#0{sPTU6&wgK=mo} zivLOsscpU?g$LabG$7AA9UnKZvm%eI)CJD{|C@U~@-?#He=AwDEu?m&e>p zK6&U>K($^c4_e2^Q9Yi(+)wRVpx}0@IKl~f7F0y%GI`38yO_`v5%Qcf+yq^VniK~P zCXimJwrE_qOi0&6ez_D3G2b(Bv<=1C6o$&30x7 z+hR{^C%CuauEGNp67eEUzL5lp z-h7?P-*-ASlG%;72vf+U$!?@qA6FJP{z7D`ua3`uVU6s;Mn?`glUl~tX&;3Ms{FY_ z&%~V)xj%M4Gjy^GuHlMxf*z#ki73<~nY!6-xZf<&I|QaJ@R(ljH%V*n^ZKdZ|NC1t zgzQ1L`cR`%AENN)dkE=c#1W+Lu(u_^I6^EpG_AdcgY<2~@U6EVHS6g9+D8Ba_Xa^+1~fFPW}kna61t|DS$ ztK>UFOprx{2T+{L%PI790(n+2zGT(aCztwGoIgR pn{nKTzY%{rSI$(q^BFzhOCZLzCg>T`qGmP*(9{|C^A$!h=r literal 0 HcmV?d00001 diff --git a/media/PyCalc_UserFunctions_DarkMode.jpg b/media/PyCalc_UserFunctions_DarkMode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ab8fb18cc08eb5524273b2ec7a4edc1b1b2fc45 GIT binary patch literal 97983 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

s!{1{U!CN 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