From cadecba59a8c73f32a1db416e740ee8886a9e35c Mon Sep 17 00:00:00 2001 From: Pablo <42.pablo.ms@gmail.com> Date: Mon, 13 Jul 2020 01:31:02 +0200 Subject: [PATCH] lean+ --- dataset/README.md | 3 +- docker-compose.yml | 23 +-- main.py | 157 +------------------- probeutils/utils.py | 293 ------------------------------------- requirements.txt | 3 +- static/img/castaway.jpg | Bin 21292 -> 0 bytes static/img/fire.jpg | Bin 51747 -> 0 bytes static/img/gopro.png | Bin 93659 -> 0 bytes static/img/phycoctd.jpg | Bin 19829 -> 0 bytes static/img/placeholder.svg | 1 - static/img/suna.jpg | Bin 7922 -> 0 bytes templates/upload.html | 177 ++++++++-------------- 12 files changed, 74 insertions(+), 583 deletions(-) delete mode 100644 probeutils/utils.py delete mode 100644 static/img/castaway.jpg delete mode 100644 static/img/fire.jpg delete mode 100644 static/img/gopro.png delete mode 100644 static/img/phycoctd.jpg delete mode 100644 static/img/placeholder.svg delete mode 100644 static/img/suna.jpg diff --git a/dataset/README.md b/dataset/README.md index bef6593..0ce8bee 100644 --- a/dataset/README.md +++ b/dataset/README.md @@ -1,2 +1 @@ -This folder contains all the sensor data uploaded to the server - +Barcode generator \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index ca58d4f..c426290 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,26 +2,11 @@ version: '3.7' services: - ## TODO: Add true proxy WSGI Server instead of running the builtin - uploadtool: + ean13generator: build: . restart: unless-stopped - volumes: - - /mnt/storage/dataset-neo:/app/dataset labels: - traefik.enable=true - - traefik.http.routers.sdc-uploader.entryPoints=web-secure - - traefik.http.routers.sdc-uploader.rule=Host(`upload.med.upct.es`) - - traefik.http.routers.sdc-uploader.tls.certresolver=default - - download: - image: abiosoft/caddy - restart: unless-stopped - volumes: - - /mnt/storage/dataset-neo:/srv - labels: - - traefik.enable=true - - traefik.http.routers.sdc-download.entryPoints=web-secure - - traefik.http.routers.sdc-download.rule=Host(`download.med.upct.es`) - - traefik.http.routers.sdc-download.tls.certresolver=default - - traefik.http.services.sdc-download.loadbalancer.server.port=2015 \ No newline at end of file + - traefik.http.routers.ean13generator.entryPoints=web-secure + - traefik.http.routers.ean13generator.rule=Host(`ean13.fosc.space`) + - traefik.http.routers.ean13generator.tls.certresolver=default diff --git a/main.py b/main.py index 50a99ec..3fa952f 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,10 @@ from flask import Flask, render_template, request from datetime import datetime -from probeutils import utils as probeutils import re import fnmatch import os import meinheld - app = Flask(__name__) app.config['UPLOAD_FOLDER'] = "./dataset/" @@ -14,41 +12,10 @@ app.config['UPLOAD_FOLDER'] = "./dataset/" app.config['MAX_CONTENT_LENGTH'] = 10000000000 # 10GB meinheld.set_max_content_length(100*1024*1024) -app.config['DOWNLOADS_URL'] = "https://download.med.upct.es/" - -probes = [{ - 'sensor': 'SUNA', - 'img': 'suna.jpg', - 'active': ['SATSLF0037'], - 'stations': ['M1', 'M2', 'M3'] -}, { - 'sensor': 'FIRe', - 'img': 'fire.jpg', - 'active': ['SATFIS0006'], - 'stations': ['M1', 'M2', 'M3'] -}, { - 'sensor': 'PhycoCTD', - 'img': 'phycoctd.jpg', - 'active': ['phyco_v1', 'phyco_v2'], - 'stations': ['M1', 'M2', 'M3'] -}, { - 'sensor': 'CastAway', - 'img': 'castaway.jpg', - 'active': ['CC1326008'], - 'stations': ['M1', 'M2', 'M3'] -} -#,{ -# 'sensor': 'GoPro', -# 'img': 'gopro.png', -# 'active': ['gopro1'], -# 'stations': ['M1', 'M2', 'M3'] -#} -] - # Return our beautiful Bootstrap webpage. That we totally have. @app.route('/') def upload(): - return render_template('upload.html', probes=probes) + return render_template('upload.html') # What happens when the files just don't fit @app.errorhandler(413) @@ -66,131 +33,13 @@ def upload_file(): if request.method == 'POST': f = request.files['file'] - # Get which probe the user uploaded - probe = request.form.get('probe') - - # Get selected probe - activeProbe = request.form.get('activeProbe') - - # Check if its a valid file to upload - # TODO: Implement this method - # probeutils.check(probe, f) - - # Check if folder exists - try: - if not os.path.exists( - os.path.join(app.config['UPLOAD_FOLDER'], probe)): - os.makedirs(os.path.join(app.config['UPLOAD_FOLDER'], probe)) - - if not os.path.exists( - os.path.join(app.config['UPLOAD_FOLDER'], probe, 'raw')): - os.makedirs(os.path.join( - app.config['UPLOAD_FOLDER'], probe, 'raw')) - except Exception: - return render_template('error.html') - - # Strip station - # if forceStation is checked, override all station parsing - if (request.form.get("forceStation" + probe) != None): - station = request.form.get("stations" + probe) - else: - if (fnmatch.fnmatch((f.filename).upper(), '*M1*') or fnmatch.fnmatch((f.filename).upper(), 'M1*')): - station = 'M1' - elif (fnmatch.fnmatch((f.filename).upper(), "*M2*") or fnmatch.fnmatch((f.filename).upper(), "M2*")): - station = 'M2' - elif (fnmatch.fnmatch((f.filename).upper(), "*M3*") or fnmatch.fnmatch((f.filename).upper(), "M3*")): - station = 'M3' - - # Date Parser of filename - match1 = re.search('\d{4}-\d{2}-\d{2}', f.filename) - if (match1 == None): - match1 = re.search('\d{2}-\d{2}-\d{4}', f.filename) - try: - date = datetime.strptime(match1.group(), '%d-%m-%Y').date() - except Exception: - # Error! More strange data format XD - match1 = re.search('\d{4}\d{2}\d{2}', f.filename) - if (match1 == None): - match1 = re.search('\d{2}\d{2}\d{4}', f.filename) - date = datetime.strptime(match1.group(), '%d%m%Y').date() - else: - date = datetime.strptime(match1.group(), '%Y%m%d').date() - else: - date = datetime.strptime(match1.group(), '%Y-%m-%d').date() - - # Crafting the real overpowered name!!!! - filename = probe + '-' + station + '-'+ activeProbe + '-'+ date.strftime("%Y-%m-%d") + '.csv' - #print(filename) - - # Setting the filePath and saving it - finalFilename = 'raw-'+filename - rawFilePath = os.path.join(app.config['UPLOAD_FOLDER'], probe, 'raw', finalFilename) - f.save(rawFilePath) - - # Start with probe definition - if (probe == 'CastAway'): - ''' CastAway Files ''' - - df_table = probeutils.process_castaway(rawFilePath) - - elif (probe == 'SUNA'): - ''' SUNA Files ''' - - df_table = probeutils.process_suna(rawFilePath) - - elif (probe == 'FIRe'): - ''' FIRe Files ''' - - df_table = probeutils.process_fire(rawFilePath) - - elif (probe == 'PhycoCTD'): - ''' PhycoCTD Files ''' - - df_table = probeutils.process_phyco(rawFilePath) - else: - ''' Empty probe ''' - - df_table = "
" - - # Save file on raw folder and create URL download - url_download = app.config['DOWNLOADS_URL'] + probe + "/" + finalFilename + # Return success webpage - return render_template('successful.html', url=url_download, tables=df_table) + return render_template('successful.html') else: # No POST Found return render_template('error.html') -## Force regenerate QC -@app.route('/regenerate') -def regenerate(): - error_list = [] - #for each file in raw folder, execute all QC - PATH = './dataset/FIRe/raw' - for filename in os.listdir(PATH): - try: - filename_nn = probeutils.execution_NN(filename) - probeutils.execution_PAR(filename_nn) - except Exception as err: - #print(filename) - #print(repr(err)) - error_list.append([filename, repr(err)]) - - #print('Regenerate FIRe done') - - PATH = './dataset/PhycoCTD/raw' - for filename in os.listdir(PATH): - try: - probeutils.check_if_old_phyco(filename) - probeutils.execution_pb_phyco(filename) - except Exception as err: - #print(filename) - #print(repr(err)) - error_list.append([filename, repr(err)]) - - #print('Regenerate Phyco done') - - return render_template('regenerate.html', error_list=error_list) - if __name__ == '__main__': app.run() diff --git a/probeutils/utils.py b/probeutils/utils.py deleted file mode 100644 index dd352e8..0000000 --- a/probeutils/utils.py +++ /dev/null @@ -1,293 +0,0 @@ -from datetime import datetime -from shutil import copy2 -import pandas as pd -import numpy as np -import os, csv - -UPLOAD_FOLDER = './dataset/' -tableClass = 'table table-striped table-sm table-responsive' - -def get_date(probe, file): - ''' Test utils file ''' - return datetime.now().strftime("%Y-%m-%d-%H:%M:%S") - -# TODO: -# - Check if is a good file -# -#def checkUploadedFile(probe, file): -# return 1 - -# TODO: -# - clean the head of csv, need to extract info an remove the %% (maybe new file with metadata info?) [done] -# - create the empty csv, first row with headers [done] -# - desviation and more data things -def process_castaway(file): - - try: - # Copy raw file to process folder - with open(file) as CastAwayFile: - filename = os.path.basename(CastAwayFile.name).strip('raw-') - processFilePath = os.path.join( - UPLOAD_FOLDER, 'CastAway', filename) - #copy2(file, processFilePath) - - # Getting some metadata info - #with open(file, newline='') as castfile: - # lines = castfile.readlines() - # device = lines[0].split(',')[1].replace('\r\n', '') - # filename = lines[1].split(',')[1].replace('\r\n', '') - # start_latitude = lines[9].split(',')[1].replace('\r\n', '') - # start_longitude = lines[10].split(',')[1].replace('\r\n', '') - # start_altitude = lines[11].split(',')[1].replace('\r\n', '') - # castfile.close() - - # Opening the csv with pandas - df = pd.read_csv(file, skiprows=28) - - # Extract perfil bajada, el 1 es por el header - index_max = df['Depth (Meter)'].idxmax() + 1 - #df_perfilBajada = df[df['depth'].between(0, df['depth'].max())] # No funciona muy bien - # Limitamos a solo el perfil de bajada - df_perfilBajada = df[:index_max] - - # Guardamos solo el perfilBajada en carpeta PB - if not os.path.exists(os.path.join(UPLOAD_FOLDER, 'CastAway', 'PB')): - os.makedirs(os.path.join(UPLOAD_FOLDER, 'CastAway', 'PB')) - - filenamePB = filename.strip('.csv') + '-PB.csv' - perfilBajadaFilePath = os.path.join( - UPLOAD_FOLDER, 'CastAway', 'PB', filenamePB) - df_perfilBajada.to_csv(perfilBajadaFilePath, index=False) - - # Trying to show Dataframe on webpage - return df.to_html(classes=tableClass) - - except Exception as ex: - print('Exception: '+repr(ex)) - return ex - -def process_suna(file): - try: - df = pd.read_csv(file, encoding="ISO-8859-1", header=None) - - #df.columns = ['fechaHora', 'INSTRUMENT', 'Start-time', 'Nitrato(uMol/L)','Nitrato(MG/L)', 'ERROR', 'T_lamp', ] - - #if not os.path.exists(os.path.join(UPLOAD_FOLDER, 'SUNA', 'HEAD')): - # os.makedirs(os.path.join(UPLOAD_FOLDER, 'SUNA', 'HEAD')) - - # Return webpage - return df.to_html(classes=tableClass) - except Exception as ex: - print('Exception: '+repr(ex)) - return ex - -# TODO: -# - Ask for FIRe examples, actually only bin files found (done) -# - Extract file to process folder (done) -# - Save a File with PAR info -# - Headers on email (ask for new headers)[done] -# - Remove negative values (this, done) -# - Arrange similar windows depth and do measure -def process_fire(file): - ''' Processing FIRe ''' - - try: - # Copy raw file to process folder - with open(file) as FIReFile: - filename_raw = os.path.basename(FIReFile.name) - filename = os.path.basename(FIReFile.name).strip('raw-') - #raw_file_path = os.path.join(UPLOAD_FOLDER, 'FIRe', 'raw', filename_raw) - processFilePath = os.path.join( - UPLOAD_FOLDER, 'FIRe', filename) - #copy2(file, processFilePath) - - # First, need to check the csv headers - # Open the process file with pandas - df = pd.read_csv(file, header=None) - - # Headers (now working fine) - df.columns = ['fechaHora', 'estacion', 'fecha', 'hora', 'profundidad', 'Fo', 'Fm', 'Fv', 'Fv/Fm', 'p', 'Abs_rel', 'Abs_abs', 'led_light', 'ETR', 'coma1', 'coma2', 'coma3', 'coma4', 'coma5', 'coma6','error_norm', 'PAR', 'V', 'cero1', 'cero2', 'cero3', 'cero4', 'raro'] - df.loc[:, 'coma1'] = 0 - df.loc[:, 'coma2'] = 0 - df.loc[:, 'coma3'] = 0 - df.loc[:, 'coma4'] = 0 - df.loc[:, 'coma5'] = 0 - df.loc[:, 'coma6'] = 0 - - # Fixing empty values - #df.to_csv(os.path.join(UPLOAD_FOLDER, 'FIRe', 'raw', 'raw-'+filename), index=False) - - filename_nn = execution_NN(filename_raw) - - execution_PAR(filename_nn) - - return df.to_html(classes=tableClass) - - except Exception as ex: - print('Exception: '+repr(ex)) - return ex - -# TODO: -# - Only perfil bajada (done) -def process_phyco(file): - ''' Processing PhycoCTD''' - - try: - # Copy raw file to process folder - with open(file, "r+") as phycoFile: - # Sustract raw- of filename - filename_raw = os.path.basename(phycoFile.name) - filename = os.path.basename(phycoFile.name).strip('raw-') - processFilePath = os.path.join( - UPLOAD_FOLDER, 'PhycoCTD', filename) - #copy2(file, processFilePath) - - # Working with the process file - df = pd.read_csv(file, delimiter=';') - - check_if_old_phyco(filename_raw) - execution_pb_phyco(filename_raw) - - # Return webpage - return df.to_html(classes=tableClass) - except Exception as ex: - print('Exception: '+repr(ex)) - return ex - -def check_if_old_phyco(filename): - # Checking if old file csv - PATH = os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'raw', filename) - with open(PATH, "r+") as phycoFile: - # Check if old version - line = phycoFile.readline() - if (',' in line): - old = True - else: - old = False - - if (old == True): - df_old = pd.read_csv(PATH, header=None, skiprows=1) - if (len(df_old.columns) == 16): - df_old.columns = ['station', 'latitude', 'longitude', 'time', 'depth', 'temp1', 'temp2', 'cdom[gain]', - 'cdom[ppb]', 'cdom[mv]', 'pe[gain]', 'pe[ppb]', 'pe[mv]', 'chl[gain]', 'chl[ppb]', 'chl[mv]'] - else: - df_old.columns = ['station', 'time', 'depth', 'temp1', 'temp2', 'cdom[gain]', 'cdom[ppb]', - 'cdom[mv]', 'pe[gain]', 'pe[ppb]', 'pe[mv]', 'chl[gain]', 'chl[ppb]', 'chl[mv]'] - raw_path = os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'raw', filename) - df_old.to_csv(raw_path, index=False, sep=';') - -def execution_pb_phyco(filename): - # Guardamos solo el perfilBajada - if not os.path.exists(os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'PB')): - os.makedirs(os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'PB')) - - PATH = os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'raw', filename) - df = pd.read_csv(PATH, delimiter=';') - - # Checking if NaN values exists [for hack lab version csv upload] - if (df['temp2'].isnull().sum() > 0): - df.loc[:, 'temp2'] = 0 - df = df.dropna() - - # Extract perfil bajada, el 1 es por el header - index_max = df['depth'].idxmax() + 1 - #df_perfilBajada = df[df['depth'].between(0, df['depth'].max())] # No funciona muy bien - # Limitamos a solo el perfil de bajada - df_pb= df[:index_max] - - filename_pb = filename.strip('raw-').strip('.csv') + '-PB.csv' - pb_path = os.path.join(UPLOAD_FOLDER, 'PhycoCTD', 'PB', filename_pb) - df_pb.to_csv(pb_path, sep=';', index=False) - -def execution_NN(filename): - - PATH = os.path.join(UPLOAD_FOLDER, 'FIRe', 'raw', filename) - df = pd.read_csv(PATH, header=None) - - # Headers (now working fine) - df.columns = ['fechaHora', 'estacion', 'fecha', 'hora', 'profundidad', 'Fo', 'Fm', 'Fv', 'Fv/Fm', 'p', 'Abs_rel', 'Abs_abs', 'led_light', - 'ETR', 'coma1', 'coma2', 'coma3', 'coma4', 'coma5', 'coma6', 'error_norm', 'PAR', 'V', 'cero1', 'cero2', 'cero3', 'cero4', 'raro'] - df.loc[:, 'coma1'] = 0 - df.loc[:, 'coma2'] = 0 - df.loc[:, 'coma3'] = 0 - df.loc[:, 'coma4'] = 0 - df.loc[:, 'coma5'] = 0 - df.loc[:, 'coma6'] = 0 - - # NonNegative values rutine - if not os.path.exists(os.path.join(UPLOAD_FOLDER, 'FIRe', 'NN')): - os.makedirs(os.path.join(UPLOAD_FOLDER, 'FIRe', 'NN')) - - # Remove rows with negatives values - df_nn = df[(df.iloc[:, 4:27] >= 0).all(1)] - filename_nn = filename.strip('raw-').strip('.csv') + '-NN.csv' - nonnegative_path = os.path.join(UPLOAD_FOLDER, 'FIRe', 'NN', filename_nn) - df_nn.to_csv(nonnegative_path, index=False) - - return filename_nn - -def execution_PAR(filename): - # PAR rutine - if not os.path.exists(os.path.join(UPLOAD_FOLDER, 'FIRe', 'PAR')): - os.makedirs(os.path.join(UPLOAD_FOLDER, 'FIRe', 'PAR')) - - PATH = os.path.join(UPLOAD_FOLDER, 'FIRe', 'NN', filename) - df = pd.read_csv(PATH) - - # PAR execution - PAR_columns = ['estacion', 'fecha', 'profundidad', 'Fo', 'Fm', 'Fv', 'Fv/Fm', 'p', 'Abs_rel', 'Abs_abs', 'led_light', - 'ETR', 'error_norm', 'PAR'] - - df_PAR = pd.DataFrame(columns=PAR_columns) - - index_max = df['profundidad'].idxmax() - index_min = df['profundidad'].idxmin() + 1 - depth_list = df[index_max:index_min]['profundidad'].to_list() - - last_value = df['profundidad'].max() - similar_depth = [] - for i in range(len(depth_list)): - #print(depth_list[i]) - - if (abs(last_value - depth_list[i]) <= 2000): - last_value = depth_list[i] - similar_depth.append(depth_list[i]) - elif (abs(last_value - depth_list[i]) >= 6000): - ## Save the actual list to DataFrame - #print(similar_depth) - index_first = pd.to_numeric(df.index[df['profundidad'] == similar_depth[0]])[0] - index_last = pd.to_numeric(df.index[df['profundidad'] == similar_depth[-1]])[0] + 1 - df_range = df.iloc[index_first:index_last] - - # Working with df_range - estacion = df['estacion'][0] - fecha = df['fecha'][0] - profundidad = df_range['profundidad'].mean() - Fo = df_range['Fo'].mean() - Fm = df_range['Fm'].mean() - Fv = df_range['Fv'].mean() - FvFm = df_range['Fv/Fm'].mean() - p = df_range['p'].mean() - Abs_rel = df_range['Abs_rel'].mean() - Abs_abs = df_range['Abs_abs'].mean() - led_light = df_range['led_light'].mean() - ETR = df_range['ETR'].mean() - error_norm = df_range['error_norm'].mean() - PAR = df_range['PAR'].mean() - data = [estacion, fecha, profundidad, Fo, Fm, Fv, FvFm, p, Abs_rel, Abs_abs, led_light, ETR, error_norm, PAR] - row = pd.Series(data, index=PAR_columns) - df_PAR = df_PAR.append(row, ignore_index=True) - - ## Empty the list - similar_depth = [] - last_value = depth_list[i] - - ## Adding to the new list - similar_depth.append(depth_list[i]) - - # Saving the DataFrame - # TODO: check last values, around 400 depth - filenamePAR = filename.strip('-NN.csv') + '-PAR.csv' - PARFilePath = os.path.join(UPLOAD_FOLDER, 'FIRe', 'PAR', filenamePAR) - df_PAR.to_csv(PARFilePath, index=False) - diff --git a/requirements.txt b/requirements.txt index 508dae9..ef1bd05 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Flask pandas -meinheld \ No newline at end of file +meinheld +python-barcode \ No newline at end of file diff --git a/static/img/castaway.jpg b/static/img/castaway.jpg deleted file mode 100644 index 8a443dc6888df23e99e47252a4eb3dc22b2998d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21292 zcmb5V1yo#Hvo6}WySux)Ly*SZ8Yj5BdxAT`gL`m?;1CGz?hxGFJ(s=Dxo5n4lYhMT zX0OqsdsTg3tvS1E&FZS^-;2LD0I0H(GLir=FaQAT{Q>y>1`rTe1&XRGsq&Lrm@-*A znpu##voW)h(z>}=*;|mx$V!pQDg&iR-MQK67)hPnjBKr3y-0;fd0F9quK>gW(2!8j zP>|5jP|z?i(6I2R@bGYO@R-Obh^RQ2xVSi&*x2|)R3!KW6olB=q>Q8#)HHPTba*68 ztW315RJ3%o|B!&ez`(%6!ehY0W6AAMchC+R2y2E?p^;)k%3 zRc0OoRJ(9Qakl=razJs~&A7$L(PR3;Rc0kWwS)G+D-Vi?OPU4IcX@+$2QJGd=u^#P zx><|4?*Tc-6jiYflDy`j{>z6xoiqiS9hh&f9J;RSCX-bovy!o%fAB*IPJFv&wooO^ z=Aju_8ZT%X@son@8Q@FIRI88^0?Z-7$Ipuwi5xM@xAxLNL) z(dew_NC8!oH9^4GojOR8XzC{;w-2-kS=@q H!t)C6=9#+78^z6*VgNJvWnGLgl+0~u?C`C9mkNeyJH8pZzpuC zBA>q6dWW$bc^Dr+C<*>S3^8sq{n*4)gsi#3HM}r!@#@xvgB$l<%1=*!;nX&a!L`kX zY{GAysUoiB!Jb!0mZB<}2zE1_K&WY8htX|9r+PpQDNb`&-~2^)a%$oada&*6^OuRV z*+IjtlLy^9k&g-K=4DH!_Q$o_gkjC+7JEP=jckJrXWm6!Al6ilspA+_cDIF>U6uDh z_Ty}~*#aMlVHfrR=f^*o0b!}P$ZDe}`%G0=nF5Zf?$;pO*(DG&^@qsVq)w@rtc6N< zKgLtm5rrfbeYgR{$;GCOk(f72+M)xqx)VW k$~cl9v#Xmwv?PBZ7Mh zGFlFeCjEmL(=qmXh{KifyhfYZV$v3b|JsjVFT7nmq4Dectt1B1_Wep1TaB(@WpXe+ zQ*%S;g8IA~(BCsZMZjf%lS8(Rd8zl=?cuwM|NGwfe+?8)h4WDJ72sUaI`YfC=G=na zeoAqw!BY0Rm(8IQroVSSozeX;c?ui|6XY@M=<%3NU#yW(-ci$ik4&=KaD4~nPx^mR z0s!!yQl6W5-Uh47t6QgfLx{;MpoZuD&d2kxP9e-W841;H+I3Ug-I4S+T)*OB()9J^ z8lD8*o9)1}Opex*JqxJCAAfKPKK=$AAnWI7vTt*MChi>7ZMnRNjEP!UIKQ7_?pMnB znb~ElL3Px(MV4t!Vb;o`N-=7xow`pASFDq-m(Drdh)e`XS?_r>js8ImwwKuE(yotU z^Q|lW`0>=>kwi!^E*D~$K_+y-4)gF@=GwL2I;90$3a5;7Kp(q@cPG{rbYn4LD0aC2 z#5n#Z-#*{L>NSoGrL*sXPFZOg>isYJD`78{UHF$ $EvIqt9=j)i}@Yr!T$T9xfI1 z+3%cDaD6^e2T7bnLJKG)+qh`ma!e69S#{4oVPo)=e de^OL z-T7wEuO^3!M|h=xAf#=A<_dO~;p@pMbKP6d1VPovC=ktlWEY-!Xip7o&TgdZ$@0e^ zi~s;OA;W Wit?FMP0LJ!SvG2DqLY^IDi%hSKqBNXgzm(0{f&VQLoLUTP1UFkwQQp#>>mKI^Ni z$se_!_@9Ed;57e6^3GCz`757KQ87oPnkVdP*)KGMHfK Tfd?Kd$7o+v~E9OLX*4c3^7%3IzZzbC1>> zQm*|Y7Z7sVixta#JY|24R2XY@h7@>IrH<=IU4HrxNH#ACv!Mzf?5?oJ30 ^d;&kGN|9}Djh=l~Nrw;z3`2QBbyhqh+r~oiXu=gk%9Qr-D{zv0Il7@gp zgF=T!#Zbm1V`Jwa qED1^yebAwy|uw45xNSE^3WXOj5D zk%`Z29qSaZ?Xjr~rmOc;O*0)s$MZz$6-BkxcIXDY$Q;W@RXx2ZR43>OxzTh0r+DtD z*d95^ >tIu1hh-5KC%$QKQB)O29 zzQf)Xym=LNeceF7yv5P-E-E^ApGVJc0FbJMsc*2HX*g8epjQ>n_`Hc4>-aIJpp1Ay zir7C4u}-Z-Hiw9+3(*r620i=4wHq2sa*g_rSIuM!J5J3;EGl1(C8 4Y6namZ)m6ZNI?QLG!fc6I{ 0Uca;AKlO z=U9X#O~()ed$;y3#t5Vv8sTM!R8iCuvFWpVod~BnoPASnjj_fyfz`FfLG7H(C ^csbSz=sL5JGnZYnt mUoWVM=P;*p?u$? s;R>k z0fk0%-&9ihHpD1liTwAKcqiC6k7_=SPvgwOYc6h(;VaTA_%=^_$XZYc=^BAHT>*J2 zJZM1t6Tx;RLaKZi)4KvibwG6^QJztWn^a74@SUPyunPIXC%S-b(th~#`CCpmRagX6 zQ=ZeHp4bW~!Wg604Oeq f5=0xV0J#DP|1t4wzjbaaYhjnd2O~T74FOG@z~ 1Mezfry*9`TYtJL@E5LGy-kL^rE!wl;p2z zkSGb(7fq`56mldJp&dWdfLJu&m0X0`o8@-T S@eS7e4Z2i<*Z2}@7H=ROd_ch=7;Zs zN`&eV)cRCkzR>9Vlt|gf*FvrdA%qTmz1>k!RP`~v=h =RU~nizX4T1%$?r=+wAwdEJN@c@h;7p>r-sZ zS9|QaU=u6FQi#Ncqg^6;O4q_uX7wWss3Nh0nU0r8y1~*;r45D<;a@G<&tKPq;a4@U znyT`TpxPPZihj|MM|#k`8NSQ?7n<7!x%$p-5L+iNPToSdnv%?<7UF??9P PkP>x-T_jvyFePX8x zx{hh_O%4nqM7~he9K$QaHaHTr5lnk3Dk%|6iWHv;F0g)*G~MF~^Xl&m*aNcd@dyZK zN3Rov4th88BF35Rf8`brMrGhO3Vd@?d|&SBmFMUjLS_}2M$R3-kDCtG93L?fB7Jjd zcspb`w6eFZhkn87@jQDtd1Od0K4i5>kr~BGw%tU42|HqB-xs%3st)cu3$9&M5xq9G z*toUgq^FSs_~0mw?Y;z`=xZ_;;An&|8oL#m#}6$5PvOp8;(?ed?`t0RdU1c6H4-5y zt}Mz8YIM^9?P7(`&ofHaqaOjHR#l|pfmngNSQ-rOi vurwDgdTWW8bxnYNx>RkGyW|m9uZt`*L)MDSEOZ>IGMdlh3 z9?H}|0?58M|F8&(2(CP(EhdCVOS3yFc0Ij6==$zK^Ihf^+A4ng#mw!E8S0I$ T7 z>x1Z+vtT6cm0+R!CeGOEtxzYcf5s=rM5U^mCyrX7X^Eia9Tgz4qu+o_r%NfyLV6N9 z9qn-MOU)~$ GTCMG6pCA{Gm28Q0}9YQe-X`Jw6w_Qo8Bqhd*idVMU>7fFv)0w0Dm;fnS zzW2?h;uTL@TYEoQr~P};RKwSsJC8~WF^tr(-j|C19@oRSI?y>AR`+A>QA~3w_1n5B zyUG8KY+VrI pbSzCJte=7t1$}%Q4MPInwYW95jh0i#FbZ0N6 za!d;W;=oCdPR^z6HN1CnaE4%R=HY|*ftRw_F*kkB^6hUxu1({eYz~YLbDBPTezfZo zlO#8%;NwM>$bqJjUAV2-0aZ+2tW&7z!%DX1uU*x)GwpH&o9 ^L6WMFJIA&|27D*GZ*9yJeyq79g)Lc!^)%^yA~fd0Ek6 zM5q;}Wye#(O({VEjuPYf1p#}gw1wXQX9O2>zYW|sPLon|eShM_N)?GsEOVMyWAoAt zmsD3B48|=`%#=a4%t~dnURHcyk9{hVd>KVr=D4=BNBD05G ?t;*{P5_woeaI+G75z?cQ5_s6`ro*)(%;n}{w;Y}{I_b&5 zTXR#KGT7vj2Qf-iXEKRwa$Oqr*;=yl-wM|qD6RP|p9*i~e~CshHegEk)@-yP#z*WP z)zq%P AowaJv*vA+mmHfob9Bd*R>mJ)QiNgmX5wQi>#my3k{5F z?D%Pp%}Y5KbKGtG2H3%x5pVCk{}wGbKPEd;-}7H3In6^XSoIyP9DJ(G7$YyNBv&`0 zaoSuk_Y*i78x2#GL`mtvlWJK@ZXwaAH|duziBB4gS>`c6O){R@B1>wpNNA!s`VPV! zE!)jv?u#jE@K10G)JZZg>sG*%gB9oCCG%joa?>T(bf)iF|Jn{ksMDyfT7b{09GV^L z>`g9`K);*B7um>x&|;WawlveQjCocur21A+Otm;Xns7nSZd`;_vTFw?kboUsJv8@` z%sZ_ejmd>2C@x`Q$SC?tZ|A%*AAe;=Ifj_c^2j5BIFn^P+Q^&{M$%P*3kviRwXWr2 zv8qsCc)}b42FwHV*M4q3M-MiXruW%+=RAnGpSla*7NgBx|1gb~?9dzuC|lU@-yw^| zZleTwq-q3}wpC)Q$GNgSqlV9PVS`F?U=vKUeu08}OU0(C6olCb@fpo9wMx1D8gA+5 zohgTB>W*1&odwvll)%fz&NtSpq2FESm|NB)o(_v9?Y6;YcVkeqrJW xp#|8>_`O8+ !^3?tzX1fgxx?(O4~QCaBXlO>`h$7GZ-rNq`y9Ukic%EmTy$;h z8Lj8KP28Z$teDkW p(%fHE#L I^J=8d zy;f@`?xkST0sTk>$0gk>3Y^lx3$G^@{+ENa>;~@wCyj5nJ7(VDVsyuAc05nyNtFs{ zfmVdHnYfvd{(KFj`C`sN?b=E>{&gaCt!PRH$5uCFWBstj(;Whmpwd)l);acX!Q%g% zCijCap6n11|CO?%B8WQYp(~e%aR6ivIb0@wX_CnIq$oT4p87q)$Fk_ZwN(F0YlRGp z7qw3#vZi)o7@J#IxmLYT2W6;1sQ;ck<-lgmj^>HdahKVVH!&{W*ct(k%mioZ(UCzT zdf~VQGcF(hUKglOrbIzAmdTaK!6=q(Ve%R5YBdsV4auj%);?Y{t4Y$H!ULnW*TL1q z4_+PKaikUhUMpmH=WsO}?}3Pp1sZfiEAv1hCLc<062lqHG`Y~)+cp1l&3WW_GE9|q z)-&`;?plKDtd<|i`^YIfRE9|fljfN`yJMbQn{-D|-?09g!7qwPZCI=ycq^e%GBTLw zpKTUQ-V+n)H_!JQfKw`f);AmX`lV0wmI2k;kHwkpaLpw7FzyA-op#najtzCDwVH6! zvQlwkKGHRVPHmXX!|lL@-smk%p@1$)+0^p8+RrcF^2rg}O9>Lf55GC0{SeFlk{cWx z9A55GA2NV|Cx<78jgD#eYm0Kziku^Q^qXqGX}HS+eEb9fT=SQ`s{0;t%?Cma203;z z)xl&*u`74FfsJ(4ouT(zVCh36yq0gyVMC zGIBO2NK$rDWtGnqtVYfl?;F}j d)?0xj~M1^JK|zOlMc zNrY2L1Tw#CqqtyWW`}K(tnGYM3*Q&4fUhZyXn3HLJjJ`$*yK0a5F50pb$DsC>-Ho= zCs7&WX5=t>fE6|B!Z_jDvAj_d$~3HffTvVgL@Z$zNTEa)6%SreY%8*MAqxN2h`QyY znppn;HofdNC08UFyKkf;OVAQ2=Qa6Cv?zQru>l_h>+V)Gxz>TYDM5iLGlo8)>N`W; zgpK#Dqm3DZ(CZTU1aq8*NCs$UX5uEDH%aIq{*zg7kpg=8 R={2mN=9I9fG0zD8gJBe54J3b1 zt84VFAZ9SdZLR;Y{UrDx-pQ><=Ch9538*K7HgUEy35h_?Bgh~CCOWk(cQ4v mdObj&=xsAl0$VpxJxe95j5N`z3)*&5XCfp6 zsM85_&Axx*>YPTgD{A}Ttai?%X2b*vo=Y$EsTPzKR+T7;_a;44S0q@2`^5}@ma<+p zSd&@#X<=t~ aXPakT+wv z)XovHR*O|DVWZwmK~x9wyhlr(6ta)l!#^rym$gD{bTn!*Za~`V1sj%GI#u@>#`TR3 zYo5ne#74c5d?jAWXZz@xgyuQfMRzM>npx%yTojKF@ru{9rdN4)nQA77@6{0=+c>M? zvt+E|jIU8Qp3&1}(efOY2j2q+G^u4CkG^>1^H~GKP8FLJsn6Mz4-g}2b?gUqa X@xOHh &$FJVN_~)wnh`c(cx|#VWqQ3U#A54!uBcvl%awpNYCiE1sNHGIZ~JbpumMz7>LW zeC&KFb&d#Ux({CtUoMNGaM)QHcVIPgLPjr|ujCb@ex6ezpC<9Xcgrg>OhV#-4Qa+k ziM*^onykSkO+%!@ArE}0_m$RT$P|NHK0?X0rF_&)n&ZwfO&Q@scB~8@(a4j-Yj%Ro zQ%QD`6|xmnu6||_=hbOzKPHbSQ4vYL`}-V|fLF0J7~|^v _FtW7b^>jZN>g^Y=tHdA zj6k*X9W8v%_bT&Y0XHI_d$W=;W)te>eAJ*U=W8`1ZZtPoF%b`hUET%6@Z)>) z?t71l@X>UHWTfBcQ %L6;1$pdp1;7F=ia_t@@AX-ns+M0#+Xp|niS`PsNRq0y(XFPhgh`T zsibr@s4W}djz~6i gAn%FfAzh`lH9sY^x1~QR=-%GqjSoA)1^>77! zTb)}#-iHcopZ3llWGqv>MWI}sA>)9KaN_C6*9d-&I<=`sFfM(x)sOwMxpAyfvx4ed zrlPY)@|B^`gXsdE JzzLRrVV}&cHu-zcS#CdBX@P#l7o-{Gtw1T0*(z$ld1tiVKNZ3(y z%3`G>rCJ# dS>LN5+6o8SsI`{nlCGIuvQ3=pqGO*$8vsks zxOE|${ggoh``MNx{sjyf0wGhw!!Xv#gRyxjCU2 W-hG!9Yc8}3{;HOpkd3E#kk(PV4P*53PLg;mG>T1g z>XVjrn|wHH>%`In*eEY*=7KR|NlF{(&t g;vO*;%u5joFC z?dJ!$_uv6r0=qPXC$b8pz@ q z;O-&X`lZ&4=2>}X)^-^Z=wQmDdaEn)V?_oP(p q?P}Y&C=d8e zURJeaO8H}#t#hOEPa}Jsw%BZC3j;q#$O2FTRZQKXodMlX1zwZz=g1JI2fXs(l8_-^ zXtVOy{fd-;%P8DpO)#+prH_LUbD?X&KdwfDJtTTU-ASGpTt-htHPB@DDuNJTJw|!@ zH&OzVEufo^RH)Gklax2yMhPe_h8SO@1Qm#X1K_dPL@QNzunU&)ZSOfX1NzY0VuM-~ zBAtU5-G-sBwiXfSwd%CzP^ZfGncZc6H6%n9M%!ozX$RmoYxUTrgw<3^H;U~Qp?j~v z4&I_3%eon>php^NJ??Y)xG$jl-q?mJmln!HY7#JZd__Ws38I9S=q=Q@BrlXf?)#+k z=z2W1PDroog=AwLY1v3E_PxhZx(3%c4gym{A9ciFSiJjVk@%0Hq))AC>1j>WX1Ue~ zY`{$>9cUuz2^d-RWJ#@xPW~8wSa(;y5ChA*e8=%uS8X!KYJj?9tLf6lrUa^nslC0C zC_>?_yFXtBwVuRDa|d(*CE{^zT)38i^)~x4gj~!j+ 0~tOn?{t23Rr?ea^^H-Yd2aDe_@CQJ%L`k=C>?!ZJB{GPy&-6^F! ivAgFu{FBf`&>}7Zm>1F{SaL9O_ksXZ~6v$AdWl2 zf+&*3h;c5F=F7n6&6Z~=_FGxBwjD3s3FW9V@<>|JKveDUCH?*iG`dn#2JHUsY&^~5 z=B=2lGVHoVV#v!*zSLabxOh#<&>}uI)n_o9xztk0LG@Qgm?Q5isKMU=X)1Rma@zbj zJ7}CAYF3nNrA(?!k~*yS;vJd8mjO#^)2}%gEFGt%-tvz3c4lO_lS u$YPtr=5#Wr9y5l}KAMx2mA(JvuFni^L5LgPc!%iAk*WvgZ z$&x>O-;JX~3VbzrtWDC?3Hyp2L3SsRV!#daYg-w~_Y z#GVyJ(hwyCb47m7&Q087SLG&TD4FO7d>Rz 4#mk#whC( zwL?C-B;x6go1s%^VVdNFr_E}+E&pW7k`7lNk(ME $g`MV|--^#fEVIR69Wd@-HgkJ{VpN3r z)$#Up8U=>ZxKH+6^#bg6@X#J&*1rK$H%}XgzI3bo^VRe16DRiCtNuMgJu);{4D!H; zl!9W>4a4*ZIx3>^0uxsGORC8;uFwG>9@WEpSaL_oc1bCWjiP(E7a&vmT!ZEjiAjYX zP85zRCfvDohv>`V1JhblJXNsgP7s_otEnP2NA{z|EqEm0oVsLd$QUk**FUV(G*nQp zXO@w|$r~4E;=*@4wxVKZTo!{OvXk)mGX&cWjL;6-V{9J6lkM0<8Sqvvn13VM7k*|@ zm>X-)S%ZGmG%G^A5or|iG0$3T48sM3gH{yM2+ H z)8#y7hnU0#l)};`#Jti+uYyBH6|+b-k_)wRQnjVf-#6`uTmyPWw$KzS{Lq0*H5Dr6 zoMam&LKkOVT_POL`=jQ1DnWZdXQ{GXp)q?7KUch|S%n{=?Sb5OH)0|UHOsnW%wk8o zX&tkcp{tH}k_PRgdlYIsbtkYE^iydUx9EyNRVB~yL~Bz>*aQGW9~D1GVL;}W39*4t zDt=8d)w!reuk*b<5PaayunY6gncxIrxSk_pqe}BTv2$86e7n!4`Y>WO4ozKYS`*C+ z=u^hyU&ra)(M-9ulXr#ls*o^ KE9Zip{pv&485ydKvF%{!HQjmCBKTUa`ZHRUc#){7J{*HSMb|R-jOplJzlFZzZa( z#?%*%eFzdgcz)9ha@}xb#$F!Nq1B;0{d^kqG{JF-A$|P^gwK?eN7zW$wVO^vy-KQD ztlzZ`dgpsnwgeGnt O>g7es I^nyRD zIon+PcO7CoB8Q5>gTzs@QA44LAp}yCWKMz`-Nn;eExEbbrr0|YD)go@RHzNF*tvwM z#HiEqgE;DmC#l?h$;SpMsCM#8{h)U5#Al^3kYZw@MN}}9?j9R6rIn-->5)H9>t+8W z$FxZcSox5n?o$(9cOl%X^u?_Kfnky&^A^*6)3R2QfB?7n0?7S|F_p*6IFiJRofzCq zG%C;ZYExlBVEc?~ZHO1wsP=uVE=K>TnG$pHW=iEXiBn NMmmTSung@aXyzHv?k8ZS;jklf~_&Ic~jjTitF^G)9U5n0N^!mX`^JG)Kc!xFQ zb4y?E3hOc)RSG*FQy!gvhSv)Or7LCm9#Z7eYIH$hFl<8i_X@?yI)4ZV_KS99G+tL5 z)#S-(i`eF;D0GfGp(P*x_NWU2 ^SVXDK#^wVbYkxNbFf{6(oPuG!L@+=vPOEEHm=-w z|KhJ*&~Y!%@4@@Of5ia&lTk&zo)G;1cCd5>{3lIX3@OU<|HKp4loXZzA51Xt&iMv0 z{hfBBF`ch5`|rSUu~x~v{`~g8NvSHiY{qY-W4iuAyZuVR)dl}`=5Msav6gDijmxIT z7cYO(c6ft!e>x{lze)W$&FFS07TPP0^-ANv0O|5Fs}{sVJ>9GS1dgp?k o7v2BziS$W|2LW8zJms<4 z|F9@H7DDOipW!}!`twhV(;?Cs0ouP#=w|=4$Xlm>;a62yLBiwkC-7&ZCrkPBSDs&S zf3fIC`qnwFHUUY-@h5QbSf9fuPe$Ap=jG2!EggdbrWR(V`lkK~9R5)^Ra5OC$iVfd zMaD#5TlBJoZ)|8Ye*%AgN8aE54Zz<+q4;x>f>k8w&j;mI9b7JdBFE();u)^6YS>u* z0=%>gW1kRN3(xv<8rKty 7r6KR8&I%5mt*Y)@~@)n3Ho8C z*_gj_zMmYfMuGTqY5uwL%L&1&iNBlstD*Ot0Ug?VNd_DM`QDiN@BQST63st3gZE|w zBd5>r6&X_HsrZkZ7yr|1fcn~;3^j^REU%iUbZ`@VbeF+?J{QtR5B@y-eZEV=RIvb| zu*s5!%{ylm>V7yMJK!RO&R=w5gHnk6!>W CT?qpZ&r9lX*QDXE?dNH zSD(yt4@J(&7De4Ri$Vp`NL%IdinE~IYkbbu*CDy?A%cUKNPBjIuf*{s1b5~PTrVz@ zKgd#Rw|As|fH%`3{YsXYq3m4)IoW-P5EVPy3ct&~5V&~?$1-lIjqlq#2dcItG@Dv- zhRWhL!tJLtYEe;H9dr@%1HNFe88bwfx?wh^bdV1YEX0AA29K1w*m{M&>dly1&yVtm zVy~PM-&jSMEcsjXD{ZqyW{>j*WxVng*zMjkIUWmr)b}(wgkiT3`)pxh@r+~_)}ZE4 z%yl!8j(<(khs+bVgx?M4pmfez=UdQzZy1}6 D4rffJKJE#uXP)xVT_8rW|JslHo{GO6ABikoCU7wpe{O) zt2b3Z-4ly$y3J$G&~3)eDEL#699{*biOQrdh4vWQ%JkEQNiT~d^ocO~eH=F~j^w(? zQg$=fwS))55n;a|tP@glGa?rbw@^&$Z-AMD%nLZ7VmEmf+ cdofeZ4vn_rhXqtl?`L$(knK RX>qyT?Zz6=LI$gZJ?_`KIfb9${a}hvqPM z6&=Ct=Y;mrgeER|6Au#Mjr*E8Pe};!^u*@^bKBuk;P1m;FMR@%Tnf`Z-oK4=`ecZZ z3|3M-Zm+(HMUs2)JcZ)&w|u&ul#%HLg%52T^ZHZ4n%iw67`^5UjtKB~UsFj5quoBJ zbDoq~UGL>DFHX9Ny() B#-}mr5RBF z*$duF_5UW2|7k$`cQ1I~2~hvd9xHcGU66j _En=6n_OP$x{YjnUoaODW%;#adjJ&D<5+j2qncSoz;8_(@m=2 z5} n8qaw|9ib$w~~>Ix5r-71L4m=!C(IU{c&( z5}1++BRBIKK%H{{58>~^3-yM`?XK(nU>i%nUyF?Ij7l;}R4(>G+o3j1$9mq D>to&1eNTQMBj<|o|FJ1sXJe=cOD}_F@vxYUphL|gQ z>gtCd9 <7tv@|tfyn1tqU;&q6z2-NKe;XQ!pQPd`AS+*4Hc%Xh<^6T~g lK#zwK@5M_{1^Im)1 5YCK$9R2r2Q{Rnin>r`f0|& z*yvfc8D1;XWz(>DeEFVQkSB85fL^iIJia+GwnDDzbsb5XTWe}Xw{~Q4=Gt+Ze7#(f z1fGVP20{K%7>*l}aD ;Tp!x)Y3vj(!PRefjcvzxx%7N6MSZrSb-eDtIzbwt)WrABGQ*_(?o{k4N5YHX zTAlWT3qqp}TP}_U-Od$pep+?dAM$rR1)0t~ Gls1f1*+j7iL5;@2B)Ifq^_) zi9ySfP~PhZ1#e@t>GhAgRYTk#YB5MN+0+3wnf#A^3WcmXd@-i?Ry?r1Assj>sY6Rk zFJ<}LGho)=Ms=f } *^H3dx}P79X+Ln~!Bir90baXp`}xQh z3O!dq6i?pdt5!?2FfNx{#Gqg `omR&z zX|Q={ltZ{0s_&A-Q2xuryJU})^AvmFx3mFbnoT-B;+4?cp-8Dt*0_!*Se&cB0sXjX z$3?k)GK~syc-gdKA*qO+GGZnfIQNLiS(nPtiN66~=#K#RDfIUCqsKO1#m=45zGJ@1 zBJfd;2w$GgK~%gIsVyVD0cXo1e2HM>7^h8E%7W1KW5a9e7pU=x4d6aU`Y4fhu|+5e zivA?&d6FxN<0SD8Cvawj@eW;q4i>D^C%@MwvU!u+@{~aF {m#CMrmKMs9SX}7@!jFar9qEvOAt6x@F_Zhxp|8g> z`Se!ihr#Iz2!x0?k&GV50*@g)J~adQPi{kJD(v2yXZ@t-af~E3c{%S>DPpOikJUFw z=t6NSG_E6V`Q%u}^>x-N<2=_3dWz)3OpbWQd1zJ%fw?&IA}WtqnS9B&65y+!3|D_x zvkg+**)v)D7pYVy=(e#VcOz>INXt+DbO&Y9P_oEHNXF~Emw}N~Q1gGWo3+CKdWmxW zcs3G^Y2VDr$~SQKo){wps@s()Wa26GM)ZgD5hyXTB&oopHLerWwo}6{>(Nv xy?B`8xNu;lE2(B6d-!PT2s_qERizRqNI?^AHkKIgo&zRSkM5tZ*tDxftFY z4MZ7yPO%)TP^*2R$;MIwmI6oQ)*eU5v>6PWw-baM&iHkeI>`ZJSB(Y DNP6+W zPy6}vzFe1z#RQ)Tk DkS-wn98X) zx@QDYS4rglsocj+#Kky{B~CWg?yf3q)<38_Xfw >FM`YwT*& z7#BqE%D!?3j4cmqX45I@BfCWhr2TvX)!f7cJJs+PqhIe?+6mC0m*Kzn7K}{+!?#_y zpHg=U{1;Hji%eCHRCX+`;q$9Toq&KmE|k23K=cm!!K3@GZGxw;d*XW>&YwrrsBJxQ zXD(KA-@IOb07DfRK)a4&6{6G83Sn?E?7+RzEIqYTNEI(mfvcMc@(t?9y}|3iGOqmr zh2&A8X%dzpQ=<2nAPE0?Cb*(g#>)Qcb$D>$C9y@I{{3hZs6l7$-VOgz;%Yd`GlM<2 zYFVT$VVMyTLN}!)(z4SNoUS3&b1V2w9@*Dk*tz)lu8X1 TdY;(^x#p~0 z)?n2d5h^GKq4>(8y-9)nuzGX273!q|5;KY2iEho-s-|3+f`OOxDZEDVFI1s{*9o;= zUa;9aC5SC`0cvwOOt+hJ8H#F}M8%BqWG+Fe?IZ#r3u@1IVLKj=9LS01AL?Hr$qo(8 zoz!BnV}$bBhH)~h>folW3_$M{xnH@)2z2b43`huzv54Yp%nV#7yzQFL *gT%IR`gc`T@zQqq#NCk+QZV-j<3P(Z45t5bloN*OJSOaJ9O0RA(+w!Ou$pQ4K) zbo5+cdKTYy_fzC+;%5$KnB5nD;OyL2ci|hJzL&y2LlSfBbwPJ3WgAs7-NliqEg_=$ zCl}8gRyJz9OuPRT-U}i05ZNM@G}_i>Gvc~RBV0gRHHaEHCMj2`E|*70OMS6+GU|(d zYz!69 V3&Xe_LaEf1(QOiG^*|1-C~8db04u-Sw4%n_Vk?a`IvhtFi`* zt_rKt-XTaJiOO^2TfQNe(<&(j2O-Onv$z`&jEP(vf~->kf`PqY?{NLc*MnEaSbb%6 zX1qVsK71ZjJN5jIyfhs?#3OHK$q8TUa<41(DaV4+ #lgPh(hGgdQxu|9QAmOf_i=jcBllJhN3 z^t3jAeZo-g!g&v=Ly})v9;nKAodV#gg!vG6b~AFfliocY(FsWGeCOtWUJYLdInFL) zJBm+p_ew$^%lR}{LH5DIyK#aUZMZNLR-@BdiD0_^!ZlSpT0Wxx03#(!O+2b%)g6L) z)2Knl97;`X`bu^M^nZruHS#eNIh~-5{-GXa57a(y-{j3reRl N#Fk$k!fNU_AYE0pxuu5A-lir_4sx=2X!c zmILKeEi#qIh3og2pMTNf?KGDM$&|3DD7rZM6#8b;u3{e#$hw`?BRiuWO24^ghzn{Q zpay$!eGc&TG^d&A*T&unpAhsOOEjLQX9Rr6R$%p+C68*a28`Nj&0p^k3~{;rr&))P z`ex2M%KGYienoW^e}4?R$4BBQYzROdL|EprF|E)Sba5Z0t|HKsWmbc`F%(#BzRxq9 zyu3o5p7XVeTbF1Z5q{BlcAUH#Lj`F`WuOwmFHK(aN0;fFN|Uwi`4!VYvFeAB!Je^r zLiA~cN>LxbUznj&G!@cqDCHJS<&)x}HKhSS^n`Q^5Z6obAY}_xFJdJ@!k~o*Db=uN zRXu;lG=vv`^5}|MM7d6yja`bY!}|3%hM%i`M0G#E>WsRfm}7F3of))-vl6!W1~!jp zhBu*G3=x?kT>v&wuRj7?Mp}0zO&*A1CMY;vv7I%v@pXX7)L3n;EOmJiO)osFi-OZw z^g8*?qV?a@-g(FSzMqmG)8Un)g0FaklT)MCHC7m4Z15_fDDfhydFb|sMF!SpRtxId zMuAML%LGNOF9=($dc_>kwZV6mh*!VFM{N3BhhXvW4y)>K>oOfj)AjikkGU_xSyCTl zN9qIsaI6z~2 iHLpDQ1-IgCTf0OP1;XW+Bo8F*#Mx~2E%lV%qt7|!JZ*ZCn)xMN<>RdA zaKirp`6yI1k#T+AV9%rtagUgQs+zqBaCJXq6y0CszgbMdI8vk?8FkuJw>@LY^Nq$m z7p7gkD{$y=${R7FWrpG#*LYa%j oI!%lhu^aIydI{6L6#Ce-Mi*lkiN-s6I$(`rGnOUQ-PN$KRV1QMqP^P0S3qt&pY< zRGMyHDh9S s(EQ=oXG1(w2+eeW3*a27?EKpMlUY z{4OG*P5E!KR6D H2$=9CGc6qj0Y8m-KMM&bq=?8C`Y!!*4n zM&D_6+Jv;F5KPO>0?>(AYl(wHqkgVojJzTCLH8P^`M4Gv$v>DFNVRnvSmbM(A&0s& z`p=5{lrC)d{D}BeA~moTukcFc36xFt{{XPAmUX}J9ATc8{Yz(n4HGmp nHS zU=NZ!ww(#-uZd)oXu$RV0Fd^r#S!KI03|*5kpt1@92><5`bs;Rdc|F}_d6NuH?Nu1 z{{SPIlNeo_OToLu{<4C6L-IXil2=Y*ovLIXGN3?)qsM?s@M7n(kPn#YGfkuAs6Zno zGt!*PAoCU3>SABINVDrMEk7~5#qAa!9n9asNyE$XS~2YEm$GPh0@#0mBMr`x)MA8C z(y)%7IQ1i+Cy|edQg=jG8E*U^DAA0o9hj!(sl0bPWFIRZf*bVwi>M#C6uNNsO(ChY zHv;3NsZlZD_!*=A2nppPBk33nDce{>q(~;8i}39&Li~VG`-DFt&LvHXZuqa%0~s8Q z5~k4q00Rh*fL7`x9u0gP Ad5ev%mei|dcXYZhc;D09O$nN2L*2mNpuSDuf zP2hNs1c*eH;zbOsH+g7-Xw6fD&M+rcUSA6o+TUFAzE|X(N@dOkdVe&f#t^f)FLrr4 zFrps;;CPtKL_mdJTbBH_ydF>}G#TRTL{8}P$BK?D=(h(}U@#nOoqh9Pl-|spD3>hN zBcVw8V&k2pXk`L++zkH!>BJ<0Lo47S2Ut3TnP5GM8tQ}RzHtHMHhpEjgQ22ko#^^U zB_WLulcmskq!oi-l+q<_TMY&m%vYHm3f}%k0fV@yV3<2;F~NQEO pO%|!K$BmNf#yjrmArUAd?58TEcE5Xuqb#}@neovqAq(9JG zPU^nwJ)+RX6EBmeavL4U2}p?eg@?kIS#4n`04l41I^ReI0!kN;upfJrCQr>#9l@{_ ztQ?z1r&!>_zCqlKG%C2A*m(9>d<~ik^fw!qvCpi|;XqmU4ZP|aoPKRH47)-;Qvku= zr!ikqL}=_`JB+ z=^ z6=u&j;u=3V-1M2lxgC0a<#E2Tm(I){Zjn1sUGZLXL~**a-k|sB1P?*zO#nQCELs<) zVxn=!l*~&EVRR4{wGYn>`Bv!g`fgAeLD3iZmjj1Px%7idH4hnO9u+7B-dS+swsBmY zgEOKu($_C{f9MUz!oDK_FurHkg5aFzCJWNaK$OMOJ6JOgK(i+5E5YnB9HCsW3j}OB z5tlOEZa97+r}_i9B N7o zodD|jZVm%EN5npPf{OnDLr6AWhD45xUk`cuNVzMkv(QJ(Wd8t*AUeX5YqWsr{{Sg` p2VrT|GQ8L-^LP1+mo8knfB00SsYEgPs+B5KsbBe2sbB6N|Jm~Ny0QQO diff --git a/static/img/fire.jpg b/static/img/fire.jpg deleted file mode 100644 index b41d0b52bc4bb1719edfb2a927a6c36dcb4a2fb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51747 zcmbrkV|d)(6F0oE8nba4J85h+HX7Tu-LSE(# Y&H65{oi-EO;vj;IBF$Wv``zk=>L)8DT*N2e*UjjbB z@4Wz2Sa5YP3J5S%05~cb1S;5jKY$Pb1^@?#0MP;e=LH510}BlY4*>-UqT_-H|1T;4 z009XF1`hqc0{8?0!lFQ+003Z@R{#JF0w!@Qlr)+O7L|G|fVfm2 fnV#kcm(|fPmsD46>U4 zgw&G5(J9pGl13m)rO >;;`SBfNADLfn=ybN1Zyq0( z2f)#2gBM_buz|z-OHvNTFbQbIErsx13_2YE*KeJf+)CS7CJvp|A8b`nBn@E!PanJh z;&{N#8(~M9Pcoyi0AKlvtOf7iS20_RY7T>CWw*u*&UiRLtdR22KV|^z&F-rQ^)ubX z#GB_kz_hW`qxlJ!(}{b~a@y uDDXHB zi@Z%%2WDd@t!1IngS@Y T|dw~ZC@gFEaKtU2G zvd8|WG9#OEX}VL#J>z8gvOIsw8UB>#S4)$aw7xc_dzf6aX3OL(Nu@ssXeuoqFiaW= zPV8!a%?1{hBy*N7z32hDSF!%Zhri!Dj$9Zu9XQ4f5jEOjJB^w(o60xVFrh}U$Ubne zP?DUK)% w;54QeS_*qDWK$(z4wQntO-OXmlTrI*Iw1px>jATTIt z6#J^jn?Hpa=_f+zz%OUIdL_#eTz^U=e|03N8b5k7mYUT>%(`Bx&Og-<$Nvi0`hdYF zQ`v6-N8X}U?aHwXi?I#ox^m149kiF7ktbbL^)mX>mG6=Bjhfq Xv~ z@s7@6QYC)HwDg2gC5(ZJZ@HDV$L=zk%j4-n+33w*FJa%FhKhTj=J->5;ZH!oZx9T0 z^wf8BfcwhQ0<2RJUsbES=K1sO3NLq!pHB}fl`{@%4x+Mqoz2cK8Y7&k)Jy&gXz*b9 zT;=G8Yz1c)pb4zgcXy7y!C6~uug8`dmlI3pZnmGS7p|!JjCS*8)rDbHuw?Q7bO}Kw z2_SdeIC%+tRg7SnkMQNX&4@akyxH|UtshHIqa5EMkoE~YkzPZTJe&!g0tbWg|1dEZ zDx4^4F+r9_BRNPTy3yw{^r)F<4Bxgwll)|$K&!uRh2ZR~)_V6$En%z=Jh U6bsW8x*i^!>oNP~KzbDXP0xB+Fy!jm$6RB8Q++?RZBv=-P7q44Vcak?vo*!z9KM zKs+1{KH&<9$?VfCx)8nP$uSz_2w%i|!1|Jctz9{{mU?ma&6C~rcfjue!4LCL6k3(9 zH@uTJ^HZptnCGh7rtEC9T3Yuw_|e>7xXQ1Qgr08}Cw=Yoe(@W}tA8LsAx!*|!kf4; zIqLB;nv}av)BarOS$*an13#=Bq*FS0DLT$|SrgfL>{ wCl0<> zLhq|>ZV2ddg}8LJY{w{6Y#Zum@IcQ$thq=#%_GFB2Y~%c7Epo$oHvTT(F(a^jdD#J zqV4T3hdg7gi}>~@Y?<1!<&*}vbq@q`ZiSL$wMvB%AI5 ^0l05)#l90KSGPMk_ zHg4okNenekqhVc;F4$?OQfg$=ypoG~W(wlLppbukfG~(#MgHR7$ofWq&po763$#4G zu%n;U-~iWcDjO`pcD#;W ?8+FxOmrA@{y&`In?Ugwx-r zHb0w;aH6^7Xf5QejSTR}^|+W^xOU868pk7`{Fj6QC@ODeyips)N#=C~n$O}|YF>pY z^jlA-{EVK#c9gj1PiF|qo6c;Mp0G5aV)Xk%Q7Q3b;w5k7Mq%O+*DI&1Z&%gbs1f7# zLnY2ij2k81ndcdV{G!vHwN|bmEW>}<1w|!ZK5oxXxJY_3CR_PnOm$|1y7Hhyp3h2r zT% WUV(oi}AHcuZlAW zDchrRS=$mJ$N)Hg{|~!B(O0?`D8fT(COvT^UaPRN{*3D}iae>yuRn{o><(0teFx0m zt+PpHClX`-&uM^MG87N$?u-fZ2NI==e&x tp`P?eERft91S~sR_92HnE|tv%flqMjTt3@mGlyHOx4kDI(Mzo zAJFdje}JeEFnQxPi^t8~hraV3wk5l<>#PU%m;b`QE^+ 3sG{C}=m5n6 za4&kC&`N$osCbvVkN?W+>C niT@6QA&? #=y_%rN_Rt|MqW{ 9erN;#q-ytCdU^lWzI|r zHpk^2%s$Pz?x88fOa4;=1}KF|IRA8FqJA*%m1a5Ea^oY;Q@pM=G_o)*^I}x7dCvb} zgE8+aL=N^}pNI*n4ZPV$X5Nk_2QEGbQX3pd^2LW3uU3R&?2VSQ11pv9fVoT8nsISZ ztEOG@U$+1bN9DmaRs8a(` ^R!(rf`8QfAl CH*n6|qwt~xhJ-va*?A3F7cfKLJi z3;Wc>n{_#URf-cN>IMF$ m5V-@f+X<=1eUB+mp8*g z;mtbD&o`xFT8!_w{x*D}aTnq6?$ol0Xa3+FVBvYOLY<|K3Gn~#;8UrW;(Kt; *-YN_LaK!=8(9IAKyZeQJ;FzU_%0L1^R^0DyQa;z-fJT#N^C8JC| zEtyYxYn4vmJKp!5rwfCg yu&CbD%~N?O)vhQ!4zSJe(ZjcC{}(TIMy1*>V1o zv6fu;>ht)5=(84xZzaA&m{N5~noLj&CGo$a3y-25(BZ+fQ23bIdEmmgZ_ayx&Cv>_ zL+}0P@!WT@`gh~*<~pO!rZ`hTKR7JZ?++J%(vwN%jX Ze0=H^-rT*0CsS5`!RQ?0=P$28`F^%T)E_GT))gV-l^$8vEg`YWt6?D|^!p z^=_Rd-RkVC-1I;4r9h~j|LS@PaVv0l=q*!VFpY>M|CCzwV8?UmNv%D&hUrSI-#x>q z)8ESdQnz77k}N 7-wagKaz|aP6T+ zQW&J@KP{kh_P5H#t5VJ1YjpeC>&&q8B|%C4G&C{U?<{3NBfzY94Akty()@243JQ=y z)8|3e53}<2xO6Gg+|%{Er2ixBmIp>2j-vf92m!E=DDs@HJi|!C#NfeUfM5SY0JKZF zhHwDzeK11_D(zTU;(xrLVhROE<}X1OfDo?|AW2p#a`ex~03kt1Wza_qI!Pr-D)o3+ zx(}Ct8jxCYuv_9>;s8+U7KBU!l@?^s?8lA*8up+dVWC0w>A&$13=#?e4grk{14|-^ zf=0^xm4%fZ9fSA_85@(30wxwY#WzaOTnG!A8Nr~yN06`lnuugID^<(YXytq4zvHHH zzu`7I<-Tz3CnnYgV|{WX@>#OY=!hIdnU7f!3cHsL#>H@VHw6Vv3~t7EhU|{VMC$Ex z$**G}q)jd)y}BG&C(<#G>pY!oqvBqDp|nId`wYSJn$m9sIm>(E0h4FvdPDR&n&>?| zZ^R?i(PiHCsEf)Mf%BRT;szQWxy%IxBT8f3;~bKR78zG+^wv$`S*9~8(Ld`tV%)Uk ze~?dN52P>tswgBuNil|$IQXO6XTzD4A^)3ea#c4QpR )U5a=_cY@`r!oU0!z8fqM!s(EHu;p&}qp`I`1mo zbR)4K%}>Yf4T}q=JR*A8xg<1HsGsFnVoE9n{mEsL7@$(nhj2|iJZN|&P1j|lkMBje zi^fa1JdZP;W!bh|dQsP~q;RS~CC3+|efc3$q@VFk7aMyvakwKNz0ZBmjL53OMbpnl zJBf8XS3?n_0M>rws|lp_JD?cFNEldST3g{_=WT)(yTi6f;x5jjtnODqwhNm~mvxTE zH-PX$ak@1QU>H!`;a@a{C%S`HvOG@|L}8FHAI_~>@I5FsYcb*`{Iq)>?(%A&;88WW z$i~7VZc{u6ivr7w46d~_gsjrO#DklyYeisQ9QZw^ap~!$riSS#tu{qM=sJ^lOT_s6 z-jjPOFA6_qB+cUlZ;}nfF*m$Av_{sqmNRIk&D^S3#&lp?C>jmIz5{x+e>U{p!r?=@ z#S;`}!Jdc_B+98w&rwBFYM%M&_awg_={}J~YY^;lCHtVoh!bS=s4EL7 L=oRSywiK9c}WC5(7OV~z>2CPoz zI5O8=nco4VDMd+)RdRr 5&>wroT^7TSrHjs}?u?}l&ld~dW> z{pP8}0s$?wXy8DWxJVpjmj}q*iN>X_QD#|qk}KuE5{6`dE1oFF)E~r48f2gaetga& zFGypglvaA839V{nLkjYr{&|hQQ$LN&n|s0jslYvs1F-~)Q|Y_BbHy%ci^0-k{wur} z`iA70F=dybnoo;qDX6##>k6$ym< z1M@@7_e%~gefdaqo8|mo$*?P(cP{YJZzHhtGuD?sxMH|?%3*?m7mS=SWBdbw2sN(* z>Br@26i$Vt9oe503z|!8WE|*c$6pQoYh!=ugkJEejNl%JU1J&AP$G}2VA0Cca_hST z@vLfIH@A?-_yc(Z0vl+1Wi%B)g25JO&&at1D%^o*_L^s;Z*CHvw6R60FL@m^ndG?2 zxHtm6YHON~xP*Ki2d6bY?|`Z_&JL)yfIe|4UPKz?A=X!IN J9Tk^Cx8S9NYfHRE>UTg?!b!~X|F*qBstqC$$ oPtz6W<;KLY0;Q6uBQfpr>O-zE*x6w;_WyVnQfSRd!#y6bT`or!y+?KIR z*ISr$hdZoVA!t)Pig1Uy>~~FYSj}SAV|X#*c}9A)effZ@eo%y&^B$v7Jmeo`o|; zcc}2E09Oei1r!q%Z(odjmfAB!S)s$tKgBjEyaSjN)T f{@C;3!Ie 1X!xWP-k~yr$ zx5F;7kvpRjJ2usJWap!NWu^j*ROtvIEa3r;mmp7#NY}xosm3L*a#p$uj5K0aEMbBM z$}*MwO*8|7+yjobGl;j@4BcL9|0#| rB23nb(b_QN}CQu%6;?6}%aU+3nhWm+0WgSNEQ z+ev}M{*OwjzjcW`)(@FoPhXc)5WmcFc=TW~4DB`qJ@kFyA%A13unIXNSk6f2S-{#k zi-}Yhx*EA+L~c37>1X(jk>TVdhh9Mubks3q)Z~huGm8LaPz98W5Vxv%u+@7gvbuD) z){Tsk#~jKd3+Lx9@8u_Hit0M!+e|A8YwpsY|MgXz9a~tbEh4{xefkQo=D{~-BX&d% z^X=K69x9%z#-2 DMTyje`3U88FW;1J#EHjzdgge1H|Y9g^hDp1iiL; zeXFXVr>1I; *1}K~(I5VZ${(7u63i-vks20v_CNtI8 zCLO9!Dbd^@g%g9AkW4D%-7$#T-wXUEzOJsL5P`FudW}nudom;?Iu8_SGbg2|`KDDv ztv)ANHF-cy(qHgLqz}V8PfAm&C)7}*;i(uuc(W*>T3VHaOnR3_=!yb=&v*t}w<8@~ zk=nE0Upve?x0+SbqTFF$NLmBhIqu|~z`}=tmz2o=t4Pt*9-3-MD20aSSfZh6El@dN zMM^_OWgP>$$TteqX>40167Bf;`TGSE^%Hi3IvGh+02nwp6f6uB6cjYfM=t| wyh@PA5lL!c~}E~ *uDpy6M@Q`p6Sez{a+v?UBD5+Lv{S?GtnRJizS zFV8OBaxI4U11TxtTTRWPekCnjR&wyC!0LG~AiwvGa>-TkDkBme7+TKnYtcqP`B&G; z{Z_0{iG=-H7>PAx%gQdSobbqjIUY*yTG$#9KtlqTTob8t<70 &;u;+jTfYxqD0tu71WFZdGv=N4K6) zPJKES<_zG=t0crF_uY*Kb;|XoyJPcTDmYj(BK*@fzvK;`;weUvebxjcw$XFtiA|`N zxoXy~(Q}ND^r9d!h`vmd^Hxtc(Ytq__e0%L0n?~-z15 Y&Re@^9(+0bA0GGG^w TWkb;lFq^2AHnAA21j?b|rYnU()1vA4s4Vn;_blr*dnz=-GYoMa z&wQ@l_+cUszKb?j$#&?ij81HxI(B*cS4`%MP|+}j`3$k1zpHEIEuRBzZwJvm6zH7x zV b#jpR2*A-+Yz7C zav6jaRU^DZ`@F&RRtCr-33Px6h^7gNKDg4t3*czDpoxE+-odjrU;i7xmon)YQnEbF zD<1ylIa|d^2zwuuJp4`JQ>pAV&9^8eq=8o&pIEs)p)#aiW9CjJTv1%&mgMFWxcfAO z-VY!%uNrV6E8U(Koh38R=| u&AYK42r>}sh^i+2*f8j&%BpJe5cXER*C+20VKu)-6 zBtfS|v(2H+@e`*n)|Da)Zbp9aE@+5W*)($t@)2U;-3y)^{m)N|xaiK2p%>UP(J#s? z+^J^mUEBI{5akFL+kXdVzBA~EbddfO9*UM>=@jnV&~~YJ=(`hb)ZrTcCOgY?LDOi- z%3*Yel9R9JhCIL@Us_a2aQFZ-hux{=X$9e$1gq(>!dBl5c`+Tklt j@4PJOJq2PVLDi|Sao;cp27RmGS<1x3^xYz~Q^(x5b5idFzIg0| zr;!5ga@_NAg(p#ewj%T* q!W})A%qgn zo#L)`z1SDc{~fH|yCVPj)O0t%Ik2K`Dv!RKkS1F4S5Mj-@EuT|s80!tLavhLHm>`b z$5pcwa)|v(v~tM-Pl1t{X1->bK6&{hx1q0KhM3z_Id+K&4-<0b`nlg5El7jW75>D$Tp4cNmVRzqSw!J3R{)4x>k2vMu`Se zCAND$9OAC$+-PHB<}I@IuIe<+`r 5%`KgB9=+6=dnAiLpdvu8d^DCo *<>ghJ+8!a&tQztndR8YlC^ z*~&_P2OyWITp9;X?2UI>;{JHZrnfFSj2qwohSv6nq}ADgWNuX6n7#U9+<&=kRfUv$ z(88tILXM)eZ{9hyembNt{ ESxNNf{R*(@pbdr6&W4vjo)j;e)^G4O+d+Przco zc? F&2Xu*F66As;hyUs zgJ-yLsU9DV(}PTP4v(w2#vF*{e6}U_jyhRo_)v&!FjpZ8vbR^RMh~zhV(RjM7nwDp z#gox3EEB?QbR(>i=S1hSjnjpVJCfskhtWngTo+Y~MvXfDKk=w>w!Y&cVPt zvC$hvpE79vGUXWbeom_2i^ EIE0{vXEF_b2%U%)roL@s=*=iLF^f|N0d;F v8Q&(RuuuA)!SdgnIKs5z&HNbZNioy-yd&!F)Iz4TzjxKwuA^(HO%+ z=FBx&{`_GAUV*E+?yNX)r|a%wodKRW&8pkoUWd|XH7O $QC}6e?4ojtd(SQ(zOM) z>ioVGKaT&B=sWz9eFtGKUO>_Da+vaGlFjSgDh>&UQLK9-yFY@{eOK93YnVJTYmR*r zi_jh;uNZm^@L^|je%l|vbI6U!f2z6U_uSb065`d(u6C67Xs;q~n*R>?^eUnA_?=dY zYcrYPa8lbPWc)=ccIf}Y!FGx%9%&?>6(?Te;nD`ttN5BW8yuAIZa8HNyJPlBk`>e5 z0TH#4&&qFMRTX{4O*C?;PTjODF*yVdJ8m>F8~o&2EhQoOIJ*tmLld2f1e%e%q?wFY z!3bj3{8Dj+EkHKgoe1N!Oz*ov(V$tC4saQNmM+J&;AT%!j2PGb@3k=MJJ8Dpujrl< zZ0A9}2qr7Zk8eM3i *rzXTf50oqPB&84s!KWL558{( oL$452c=Nt{Oc&6jgFp%WYs8yHRpskYSgFL zWzAI|bPF3(BU4uhU^;8Mw#<;VIhCRX@ njo !wjKNQIRGdbi08uc1X0l {Wl` z83%z0%39>LQV! }-=q`a (JoFA|hm3NAQ1IgBdI!|Y$rQxtGR9cm2if?|-Dq9PIl 59{*wq z(K@PMu%w@bbJjJ_lEuaI(4>CZB6HH7lIYEAIVr38R9XQ39F1K{=g6+fX`Gqwz{ `n8k0x zA=kE1sS$N*EAY(>3K>&w=akpsXyUlk@@{=1Epwv=sI0wkPpMmJT79MZh324L@T|wr zi}=l|J*i^)mmm9{t%Ym#Q65{T$bhmAzL8n{>*FlT@`7D@gK47*t+Jdts|a;Ib(<@N z+3m6F3?hJI-iV7VXAI>g<7V0q#E?u-{SK{gbh>TBg*(uLV$-88JX+( yE!Il zMSgEMAxlaA^r X+tos7AU?n@1NUFG>@qP3Q24vf- zly}&RaN$d233M#dF)|aiU;;r8JQs7gaiYo=W)4{7FqaECQPVs#xl?s3I3#YL$1=X> z-`NUA#^>3$y>f>~KIJ}Ab8&j+Z;N;wil8=7w=&neP4mMKj&z&u-SbWQ%Bmz|w}loT zWauY`i-~EBL&m66y{6f6f0@r*=de>M9gjIoxvo0BU `rwGisQ;ZqWdnX3iyR zC1@3$QK}O}1HHz8e`JWUoR!fPcBQJl=X+B+!jZ}G3(Wrbk(SIGKbjE}`j_fEfc1bS zaLkq{h!QMzG qq%vZ;JHTm;2sJg!u~GToZRPP{J4tb_l1~}bM)SFk>B#1 z+Nb#x#n>&8bVnD2D&aOykEwoYTeC{Zi4mm@>XW@bk#932_|3+-zf*8Wg=Eaxikh%d zrr8b=LdV6=?gicfh56<-JaTHjg)p_*!|r-j>azTopQtxFOR=GPrXx%LjJas;Ru-i+ z96}Ul1+$w~N`-$LNa5c%-^=8`;tLz3Ac ESfu;Erx T)Xq-}IRO!oXIbIPL@)#^no@qGlxlm0 z59Y4r3 &H^OB=nH-2U_J)%%rx7 zedE4XjccU?@#VeHHxQto+KJCnz4+-;9JNs^W~uHSa50(gl}YNdXHB!7VYK=rRfnDs zUY}4Ysf(EMMnpO>0J83B{#HUh++xJB3AdjcM |)b>KvHJGYE z=IpP+<6o!TpGpUm4xY+WJ1qppo>!_}63z{e#qj;F;nUu(s@uvfStDa>v8-FUJEbvK zV+jTDzREsoRc~&@J5ZpN+&Y-fTkYY^@tfb+EftN|*}O6+=;tdvM{vIb3aVod?HK56 z28Ck@Bwwj^#@pxXW6e|^^M_lkFbHV8GECl-2i|mPgP*Efh5V_*^_=u)lQb=gBt^2i z
Le`B$JwEYTZ zeuABvCvRB_Rtb}0u~+KpTM8(vIvyZqBy( YUT zR-VX^^tmXssDbxJ+yQDt+}Y^4R8AI}O(p-h-ZAmoya3 isCcJw1sp~sy(^VG{UaGVB|8+&=Be@^ zO;l+)vHPum_ue69->h$v3^S52>YpC0bjonj7|RC7$h%6748<6!@OQvEr()!XxdNbl z4F_4G1V3wN4^&M-!b~YA!QjDwdyIPN68}dI`%99U<1fG2s@dvl^H@#+Q!AL0x*qj^ ztQ4=b1mW+d{>S3}v>IOLo#>U&O7&FnSDx38jJrMYLxcQpYx(JB$A;&AFE>mh#iwiW z1hem5+Sf0!Cl^Y#O8Oy=zF-2r`xXyB@89ApQeCO+{s^oGHiQ}nPT~4W?{TfRlGMsN zdR6u4I5p&GCHfmTr3?GMj<~5VqC1-q1(mb)^(}gaU#|1M17IHC0g{I?Z4}PI=JGZp zB2rMAwWW)(Y*`~BNj4BK#kjZEIsx_VP`LJQm=!Y;F0O$S6IX>@Sk8*_zHm#F^@v6o zC&mqk;IGa3*%M7W*|5zr&fhhvd&Dxu0fRo%@o>k8-Tz#Z5hpi6D{jekc518SHTRnC zDGXY=#m1p5msdFc`Ah6l!QD cnsl+Hm-JyU?~R>@i-+Azb|$*Hif;vlDHUv#_anY0=G%j#SKyke^~Rm%wabn{8- z5y=Iph;k%|v$wr0O6J+?lN5Tnp*F8h;586*il _o(pMTS^ zaFO&013MUCe(NhWb&x@-KC5Q3koB4Ja1wV|$4f_$aZm|$m?FNbn%tIeUcRm~+B&+D zU$XV9G@-=!kF9ft>Uic&%I8o|X4UQRXl!NF4Ib8#@%pR5jm`7~ny8UMxw2b#;9B$T zJ7DN#u})Wy*@7Di#^&@{lrA!P65Sr-8grvFaROyxn1MoU?`%jp_3XY>O9onw^C0~~ ziJjUi>a~4w-ryE{p01OyR^FZ7+GacwI=V+_%YSpyIyt9whzx*Ua#E?*V8i4k7SDAf zPQGFe1;yEXt7qTUQqGr~Y>N8XIfj*&bP@-JTF@ac?uBJ^1I(d6wnX5!c{_|F=-Tf1 zW46>p0o^@8f {x395SSVffeO#_k&3bEOYjN|jkDcBWM0)zkePa9|f@VC;p&6COV zZF5ZSLhh`#cL3(*Y~4)oB)XdeP8$hQ-L7rZ7QD^CLJCSlW^Zf*S`tJ}z&FfFNnsTD z |bELP6wwiu|{;x!u=Y?iETk7K(ip=;I3R8-h#6UV!6RDFisaupEBA zl(U6|qAYIJyl7f5cj1n0%>+6_VnU})3YkGE}X$BjUdv+1M$Y;u$njT}XSJAyNG@ut&)Jjn6kIkS`MP4# !jlB1VYsU|9#n&XyZnDWp`+HfiB zJLwifGj}XCZ_2&pF}33{O}^=SZ$5;&{O5c*)jTxl2vsLVIBb=?nK-A|ehG-k46(Qw z(*t`sRh+yu` kXgX7>03DuP4L1Y410wa){Y zE#8bCCH~pGPW9pB0&GIm+rW8`ffNo7fi@*-G^#eQlUxpl3xfGojWi3_zy##hY6P!z zhGulk(qXO@>%_({hCirIo# -<`|uybjaJ{_iz}ibXYB3By8k@TSn!$ zM|70I+#OCK57Bzk^67-@oV9Iv+JEX-pfLMyoG=D$0+hsBvWwLeQm7mEnT6BJq#L@2 zb(69*jVZ72I9n;TT_ikk+*DWXxg&)N$+fwtHI*ud)AvTe{n@oJM#=j(mEzirb5pzN zymBjyeXgeHU{oL3XwoKs7CjPjJ|H_qY?wsLX!>bJeO?6h&6@Z*mtmK@UX|DHfW{N% zRsp;X&*& r17W7;IdGst(OqlHPf`(hN@@ziw!1x*C)kPZ#H?ZZo$% zRPn!F# EY*L8@$d^^imgkG0N}@ZSv2jpxvE$Bgoy??A5ee^)r)5Z!)1*pD zO^0dy(PgETGS>9LScwjur9h()MrZn+QTAQOqB&h8nvBzHeaoKSV#Bzi->YQKxRQf} z>!MaDEnd1rS*wnMI*ERa9?~{yy)IKQB7kd0&l$Ssx4$i0kx2#nyvwJXzY7x-0lXM0 z6lc|miQ_!}t2_JK2$?rwBJTiNI={30klIJqx!rn3+fSpzg@v3dcv|I}bI)U6N9mga zv|T_2!+9^y2KS5Z^iwdmrfR+de73J;3LBMfMw0O76bfNagE`)Ux}A`d6=i+ x&N3UiB9A(u(>ONQ zufmqo!lVjq2EWTCi^#dHm7^&SyBe$(&YW;iXmXDm#=KBWKZeraihi3BJBXco@C@_R z4q6qhBS=(a=x%Rn>c!J?2ZQncMiaxPSj7L#|1e%=Q^?0i+B(^^wknQyPCg)Z&`xd3 zX53m~5Ztw8A}fE9Fh-+k(3+_f({XUnVU0Lew(`K+#e_=E8A`E{EEANT!b~q+I#&A< z*GMqDK#r9%!_v0Aj&3h{0UPGA%(0r5lx~5{^elGXHZwq0N%=E6uEbv)!R291M22Z) z!($OMxGCL&+?KNuKR$>UlUke@jG1QP=j>{^w6e^Wj-1b6;a;&C3xi4b7n2$atWm!K zxX=i%rlRSf;AE4N*Ih<(M$WKf3vTbG?GS?odRP}HY2^etjKcW{%%H Bz9K$y(91 z=IoshZrIVp7oG2d>)`AUAh1zUgKYnC$I({WnnFRCq8yd~x0wk%CB!DlE<-cmr#$?O zU;TWys!T72d)yN5RD9I5$6v&T#_Un8A^=)-f<1beOnvn+{%Cm~ZmLX2dVG>yZ&@U! z0UpyAojzY})ec*04#qI9tQ9*)c})}D)=6>%1QY8^DEeV3x>6`|8&w=ZoZt@Z{d7`V zJu^DaurL^i)b6zO*i^YZxOOMN=^WEZOt8&;(!ePVq4O@G`}btbi0Wc%i{fcTP-7dJ zz3nL@P(NR-I@U+?8>0j6uc+O;7vi@FGACHvn^BWo_My$Cw ~X2(`tOa0IN@R)=T>hmv)|Toe&kzSAGYYmdqCHp9RIZI zmp6tL+G)(aOo!@NQ>Ze32b?n1so3WGtrPGnRJ7&G_*RQQFJE96_zG8ewi)6|lEo&j zi(4a^f8)tErdan$GlNNI#yjOW2zGK3jx@nFy2bG8$lCT4+2igmKOiX&bd0kljqM=2 z?{yK$+*o;;${${Z)cg9~msU9V4r%lxaBY_8SAoyjA;JvUV|?WiIx1sUjXH3h32?qT z3wIPM<^iaZsp$cUry)3AglR1zQv1hU6*JZ-FXW4NAaCZt7ea8&yDZ$<)LRM6-EjKb zb72uWUrOY~(|hVGUiyT7m4o5x27{%$7JG?>;I3gMH<49SWv*~|7TP*SG`}{BT(0E% z ^g83nziqwA*L&9+r?o}rUd!M zwwG7YHm(f)d7BC5h0QnWIs9OR@K7Me9w?UTqZ;=x+rf~RP^yGp$~&Mjjd;=oc`pbN zeU*yuj+{lX*gF5D;HiIo62(k()8GdZ>a?kpe(PpXBiJHCnTPJZ Yy}Br=;$h!@pU(>OVohQR4E}n7EOg?;*-W7UDGJ>gu+htxp)ehpIS1!D8&mo z{sS5|LQ)jxB-k)My@$S~Y!66+_p9Kjh Zy`0w) zZ)(W3QlY#~4RC~iaFE77_AeL6DxaW_HQX#EGe$C0Rt^!&(n%U# 4UEfp~>j(wt2ziB?<2sYdE!N(^KW*YPHT1 zD`5QGZ=Dnad(}EwHul=P S}f->GR!+l=G>W-MC7SgHrS5(>7?ixk5NTjT);jWw4dx( fM=ZWV!ReDnwZEs)XLg7fu z@z(^1#Mre3BV(1)qms!{8e1iUWYseK{&pE|pgVKxhCFqjiCryAumo;h)EDjSI5ur- zDWxBRhMqe27_kl1gK?aFeuMP1zm-ly;l*h2u3D?hWqd}q{*JtouE{Vv@{*m-*Wn(X zF5+J8`|??I$e8(Dzv%boOLyeR+?Hlzv)s9L9oy#ulb%euecDKv86B?Uzb>W+v2sb= z??ns7Ee3rXjMfJV=S#ojNZ*!LVKd(%`>f>Za=%?G&V%Dj?jjJ<^-JGG>cql~f4 m49`xn73fd|MUs93K4>JLGHE-*2^#of?Qb_LxAyV^k&= zyQGwdNJ8(ef#jHRmDx9kH>`*0)+cEEC%3LUpWh@oINzG`J7n8(N#Ag}1UEKgk|}sy z%toD{kvw;$y%Xea2i>)@zq|v!^|f^;3X~sbUQm4Q9w9&(pLg >!Aq4!Hx|f!A8_E-gvQQ1jedpZYg+RRh8NzGHY#eCtd6i@t9duL1 z-95uRi$7f$2>kZrB+DuIw*QdqY>Q|;-5F`epc=>ZXUb~4SdVx0@Hi~?->lLGfuTm% zxJ*KK=E7|8*xUK5uDDh7=6As1q^H(vKd{gHcxNw!D #bZmv6;JRi%*GdXevE{We8(sT_i{8X*nP@Ksw0a0 zcx2m$v_Vv41pO`b?*)QYcauV(&o`HSw8AgT4x0)DH7mYm_%f?}H}$*+pJ-T1d`;qS zcYB}2tyOsQ1&*s9&?n(0&CjvIymG8yO&_;~TDdj{c0*rWOlI^qqmi{O)Z)lq1%hv* zmr6Xu@{cDUP~nb3kUIRk85Cmu^1lya$oPC|*FTA2{m01ru~bZz>+dwWp!{nuEY8^c zjb*1`f8fg|9^8CRFggTXVx{&0GB3_dl@xwXF^GNTOZmQ3O0kR^3@d3)8F{78jo6H< zWA9=z@ehCe0g{FrhrScZjii#3)t{UB@o VtEs?fRmJmxnoxiK4XFFAG1+5#kYJGh;+0nPSN27&fGvB z)kiK}3Jj?(#2RbZap{es7hl9Pk_{K@{XhbTLPFu>|A(u$j*IH~{>SewOLt1MG$`H8 z(v6^~bazOD^wJ>>Qc8!Qv~)Kp9g@=0T_UmgU46ekkH_!vJOAu`-nlz-=A5~A=AM~( z-m8!|Ca)Y{-Z#Fy3LC)y> _ysl8WppWejLusMP#W zXG{#m@pKxFAwgUHj_3YKVtJJ99MV{>-E-S&p$hx9s9^#G-CiU@WqsBw(ilIH24pKS zV(&=D`gtf(+es%fBh2GT?<_voDZV?mlS=embc0}MjyntRNz=0ZtmFQ$GnY!copJ+8 z&}01T{i*S~TbTo&v9+-5#?8$Lm0t`PtM+0I?{&R;ze*A5D74_-I-@rit=i0ACI7W_ z9Os?3$yMDCa)NkQT D+jah**DJUiLzG* zp?7%$DTo}KSq+zt%K2#!qO8jIn@tn+NgCzG#*CnBm6O)`@FyI?oj8^|vAObv^#I-y zY5UJBUowv|)P(~zhj==IkmD(2iIi9GCHU1Nf0eWbow3KS?S#1!;~p$PdTwsl`s0qO zI9-c6k=GPbbAJ*T39@(SsPUC-g*t?t+iYL-N^uyz4J~8UmTcIH6f(?-b1CI5TG*c) zsCr=OUJuYNX|qsufV-{aUHbXlMeo-M`o~4mem+E0ue>A^Yx)&mesdmvd5u-^*2JXI z(oXDMg|F1RpigQyO-&{`cFn&FRSyCl<@f?~!(if6;V*u_6%q(9dPc~{&6@V&81IA< z^wq9?e{1G6{5q5FSzIACc(wIb=;g}mHv=J9UfGdL*Ifr;y*`d1qU*-X1nN(Sj=o?( zN-r>`{Hu#>d%dWFR;F%me1u#^ISfXdtn9B|Jx+e^mz=_N5~Nlmc3Df!2+mDe?xB^{ zgz|h^+Fdb1TUZymaO>)+_H=%kn7`fV$Z~!tYT;+$*)iP1@<`cgpeKZSiB`Z;X7k%s*4PT>Lgjnj@aM^X+mRoAsu|h>xTMQWzKQ=@gZZ z#P;10%e16^nDbkI@mMBR9T`#%r%!+H`cb>3_MFDa$Gzz|Vy`^5Af6dZ CTXx7i*oWo+7YpbG<>?yk+?5=ekB{tN|*nO%(>E%3>H^M(D zzSsJo-WqUv_Ab@u=<5d+#og^~OjTYs)<+cI(Vp2pe(Cx#F_M`@c59o+C8fh^;$67j zt5MM?x#UaVx?cO*#0I-Bl|ps*MP(cdDh o1v{P zhuxjLD42XdOl~_`<@jR#)v=*OGlMdmD?rz4kI=DQj0orK!$mH9DFs13=Z%pH#}^ z#YVyW>2p;}CS8CiD|DTn9?Hy)!c>IKYJ)RJUcywgP3k}@`MCEJ^yllB3qp)0)V5c$ zs=4fsPp7!9^|uyqmhqo&r#rIOx^ui;V6=SYNWv{I#Qx~J@MFcv&qf8V%QDZ2X2qSF z8c5umYj#F?VVTxt3?;cGsue^RIyZR@i`~{!EX?*A=@@i0>N|A`b5B%)q_=H$ilevc z`iiDxHp$0aJCmRB6!yr^d|o@tXTQ(x9ndLaIW^$(B(ZvX1OCz6P*hRev^ @LnQXU1D-+;kgr_;uRC}=X VGU_Z>Cwp-tzP*hY |jY$kZg+blI-=FSZIi&PTjKbbjYX2Eo}0kSs$WFe)+*{=c210Fs1= zo>%6S;9vARzowgK61si{`@h|z()16O&Qn-x^3+Yi*W<=aGKMID& {;X; z!i9dAoX)jJB^tzVCQUR0f6GI!pB;tzmIK?xO|~pHk--pPN@NkJ&_l5IPb4S!%nL4O z33C#{vD21VSXwNJTYo&{t&t`6SAF;cm~ |9ppV~MJ2^N &7pV+Fh8_-bLKc9@9a z?tPowO`JteI`-@wce_WCoLor09lwa0_yJOyEy8>go#1c_?|MW2(;SKik19!jnOOY$ z5byC1r33)KNBd4MxHnpXG$U<8nWc?yoHZ^W`>h|A9Gd3Rs5P>cvD;D^ypR)cr4VJ4 z6B;OJ-V|%vm#o@HxuBST$P+o~iUd~1(QlSNk4pg^fxi9eD3wDG)qRaoPUJ)`y0Wu5 zw)6I1aEMB?YZ&wC#hlXJnPn#QGWXdqD$B(Ibl&|`UpXQb{b!w9n8X&K^fw;c9~2xP zTm4{XIJ|0-GLQ_4>68o#hI3zB5EbIzKCDY{TLu;y?9lD-bY;996+unJ9PGw4&rlxX zNh6Fnncg&u6i`mgKwyqEAsJ?5Tp&6Kv$udU7w0VmvW*5Vr@-T1)HSZvL;*1Bp#gp~ zw77St_&?;m E|e? z%DScu!44Q7%}4Ua%@SxVVY(njY;nQ!?=fIBz5AYVxI2j!GY-ScFf4ELx1pa|2Mnf( zw64r#W%N6KV7M?lLP9t&uC(XbM#4bS`awj{Z>v@JtoG5)`Jo3z 7Ht zp4%1KQlr()RXsB&)ZL4+JDCG@u>w#IXkWe`35@#Q)GkpLQ-hBMAR*DCWY<-}36xic z@#P6%kZ-79pz^Ie*Q$5*6vx3rWlH6}woN^^#)_mZr6R8BNz9{U#0g?FIYjpg5`FBX zm0dc}*VxOJq7#OPre?qBzD1@O+RHXy{&e<*L@%hU6ET7=TKNg{5FVPrctIX^MQlM& zKr9FvuJ$EG*MbO!3!_$JLOB4IlsRnWE-)XgwBwD3yr9dhbvMS>5@SVlSF`oYoKth~ zZ*FhtN-CWZMkkoi>Nb7f9!C1-keMjo`AuMeiRs&mEEJRoOo`+$LM#A4<0!Ek5U0<3 zG^%nNtG*d?JD|18l9v|+jlBfr(J-&TgMq1P8LX{s(*8Qm_&5s`j~6mFN(71i!SX#n zN0XGs3aZh~jBKS{Y7%Tk5*w$`^-NA%FQ^}tjDWnbYeI-IJ0_@87R_mt_mXIeNkfwn z-Js>qPne@A{Mo$S_~;3~ !SyMS|fO5d>i>@~!< z#kG@h-SxZMTxE51@0+N%bUzp$73n>!QBIfD?FG=&OPWPZ*k)1oe{huVBhkGCWNLL? z>DzEu;N!l(nqQjHi-7Af9kAX_!)DZ8*_mMgl%zl9Kx)9xy$w@G!zrQe&|s<#7u?lV zuvGIN`Zf!8_#U;nlzA{L3|?Blq~bsb0+eL&TcR2{`4fH_dgS+D*l2%|*Nz|(yrn0e zKw&sip3VE3$&5N*4Vg+r?y%PVUchmIswjWSJ^Lu*qNB4f13NM>k*+Ft^cO;d8Z)Tv zqZ`WXi*=|rE}4>xqkQbH3X73wsh6w+Cb)ZzM!$)$C=}0 Y$C zlx5u7x)2jJ+S6dev$h~2>b? p!K*=YV=r`YF$TMBR z4bM(DSHkXKrs`g%?|F}mV&rhTokw=1zo71Wj_zC2cCn$XUI8Y3KS)nd0=*p$BA512 z_NUXQa&i~Qqe4)rZ|@Z|pOa4Ttre!sU?|4uLCvt{8k>wyAD{pBn3Hx3o$(WGQV*um zF=Bz7`(1Ci2yaGH1(;C RN4kJeR237wgv@0ul>F7o{tK0d0?pqB9EF?YBJ;S$)#~S@w zSu&n$4y@zOgL*S=%k3O_i-IPRT4kzrG+Sxt$d$n#AxPXrF!;uop782(dkG$_w;24r zd38DjUX>RnE+k0$HX{LklSB6d_K4KEN|VmHly@zlOImvAN|0tP7?h8(J#rmNy7U+_ z1*edhWzNu+6G4}oZ ^+!hu1d}&4)s(M4haTAap q(Q8XJfSAW>7T10XH&Gs*4gBGxq12>D)HvA&y+Xgw^iE$PUvW z33RW{xl>KH^lcVo_aNFn)A*7-f?0G=&_QZZUM`VwWqs)lTQH0WH>6(RQ}9E*G}^E* zXVoR9q3$HiKiQ&A66hiij_H->am(MeWlluM5^#JjZL$@Kz;J^_XpwvYd5SaRH4lPr z;fOmI)<84y5rQtSPEpc_aeTSH-7(ek!KVZ_;$=~W(U;RFABYrU^qBFeFHcZK* # zueNq9QyW1dUmJXg4~sk_ems~9#Ln{~E=yz@K-E%uQV1iCSWA=%9>7DG!b4o_W{Pc5 zqR k|5gf$Qdi=l7)Pkzrh3(@D=NFT)w?vsh-`AMwo57W&i}#0_5@Ls(Ff z0VMTCguxDW#UA=SL^K!#@4P&14}aCgmd3~*AU$_P{i!$u-6T()EBI6VhvH^)J4NSh zf|}qojF2-Fba^%b_FnB<2KqePQx_Crtt!dnEH)WM-1HEJ5%qu#Fscibpkb2su|1}? zvSKe>+W&G*^Zty7Zp3C$aHj~{99IG{6hcFcoOz|amDAA2q2X`0;;F@^uEXAS#Yk)= zP%$OP8^6LJCj!v)P@;#KEYjIz8G|XgoSSo)iN*yOZh=kQ`_dQZb6X$VuH%V2rfDB8 z?8D;XsdN_e=uEO5NK|#TyR(PR)1=lKTw={^*HnfesA3jRgok7n>%EhNLiIG{42Qb* zGxqGmj6 KOemXfzswlwQWX&zXBIsQa4YGlcL@?r~qi7gIr~79>2Dp z&L;J&!&k6M0+pr3N6K3x2%OuqimDCoJ?W?a9=J+AB{vF76J4JR52RHgPcqcaeo!uY z>yMYx2wd=kt@^2H)49 eG( )6}UatE> zuXLVyvH&jb6Dlz+^hRY&Oq{eKhG;RtBQQ YCZq-36As-vaKBf)XEfNfP)b z@{)xE$1vUlm~r)V&U4b`0JTu-;G|?kK6XTV@B}1O@t6t<2ml^nR)Z5RQ5 FIKVYEicdmfgmuDh1?3Lm20zPg5o1es-Nc J`|Vi%xeWc q z!r;0d5m#XnxGE@2JN~?Kg8DVT#YKGA%|aY!8(u zG$;B-NFa4=U0e;s-n?H)oWPS2sW$!wdFOlgjp+D@1BIW8fM$ajO{9J9m^f$}elouE z^7ed9E)vWrUvl>J<4Fbttt{|i3(Nl2?r4g%LfdD^7plP0^-~LYWVqQ|2Oo0ju6n}; z? -?qt|+Ld$+baE*;N#mhqV4YbH~3o(2xkfpiMw*Zu> z*}h8k5t*;oly~v55j-8$&Zx};i2NY2?rv8e{E8s)l|I)|Ds~{WHVS4PE@wn7#*vVs zY>W9UcC7tMd<4@5itbK e$Gu3vGPVnX15gTUWw@dai_7-{Lezcy=EL=$qN|y&TjFP+SWeMZ86p|j ze}EvdPKou^BDzvdq31;q`m~5qC@ewv%Ucdz+A#l_>gwLFNz*)#b%x-ykRm@~UI{eO zw8= ||gqNfAR!*_o{^*^2v@N$o7Y;L1;{*ub&S@Ztg zsSTc`-+N1Y+IOi#=AZ3jhl^(};DdsPMWE*;+PaNnXsQeOB>ZbnFj8whqEnif+v#@9 z`r|d1Oy_k5a?u;J^VJ=)Uv4mia|X&!uC8T~D>)}-IK=rySB&q KuM?4e!GN1$uWY04Jop z9xwF~^xPl5r02%Uu(wIY(6RXi|NQwBnn&Aq56drkaV`;}HM;iFRmg5JV4aUfrZV?g zk$tPKb?7V|N>tDZdhgK{(2X<%JhSu!bI?{Qa)eWuKC*s7YQ28OMtzU19zGjg_1c}= zmh!Ptn`|mfvJ|9+BlxY)ie50ULoVB;l&O$F7vSlp=MWVXSI610Od*S`xRK@yer0w@ zdLrFi{|E5rb9u+#Nn?sde02htWWUZ|R$a_uD1a=8voOw_!%=gx+`}lO^!N$4$CU|Z zOuu$v>DTh(C0X6V>-7iH=qb!BVsnZ$t%yfJXCLcieLCdr5SnJU*}A_9mR$}1MX~zs zA4+KHwIsdW<&DU JXh>XhSd3!xNP)0$fvvLm@V zgZ?`Uj`((eRo|6y_QUOG+KybOsqYW5tr^2+PLxuFe0C{beh8Yf&qy;U6$-$3@ VJy8Ec>pi&*A0-1FxCaDP@1({E3J$_!Pi z>uagEhB>DIjgdK^ZQ1vd2|Z8eM#+Z>=#CX|IE?K&rHL%9Ec5uVA+TqejdHyu+SC1s zqr+Qr4YxTXup zoWt`vEN_qtCOgA3n`?a;vRScJ>%@hh-j@Z0SAiv*G#&4Jo6uGt9dBKColJ?X>fHsp z>AbGIgV8_s+?SGnEc=8@nf5&IC^4f`&rrNlS4rWON4^0LZvi1i>2NZq*mi;!PMJ*i zPH7Lbaa)2e6AbJKO#z7bxCu!Fh}OWrlk=xLX9gpY?^9!l;+h0wbdUAv&TnGco=e+v zbyn@FE`D?_>ehqU-4>XxKePb%j)44$0o}Z}Ft`Tg3_Fb86wu;>As-JvJBj)R;Fl4c zQQ&G#OVrcFCN7BcEa)0#;eJf=P_9$u!^20eKL8ug5R~?lxY$1P^H} fnMOVWMG*MGl_7?;A9xepGY2_H^imuE}<2F$s_-DDVQ>@-)f8Y xGU~I@(qms9La#!V$Xg|9)$+o$mXePmpP(0pr=oC=xrYizi`)4qvSXf?0uP4) zq*mT5P;AQ=F03(g>M)UH?-l9aDxtYKXuqW0vU3%NPkoOou0e2*KJL4;1J01QuyT21 zM`C2lTqpSoeGZk=y@Ug^{F%`slnj6eB&(cYT*2@owozOb U!1%umSq7~ 8Jfjn0)P HP4B$g zeq_|#^~+|DJGTwRsY@Yh8rV}Qz(Ac(e)PEt%+DM{R|qk@|J@%JNT~P>;=lqQB6mSW zt>CVlbW`j4l~e6Oxie?%+wF+!qZXLeb8|PguoV3LuIJ!dAiV8vcnA0cg!fRZt$@9l z9eck#l+2O+cyR=n3_8HM*A(wyfpy51)L{L73)L;Yol%^HsB<1|2FW7)1#|;H`L?Fc z`X)4f)|C6VGXd&NXkhaEU={A3Am6R;0R9cYJ*O)Z^aJH5On9poC`DV^(43L3l*Mu7 zrTeXj?zDm5IKy3;LIZtJ=p=An4MC3%@Cq{N?);5IXToa`VN-J36^Lm1Qfnc2$CLfz zjxI|0 EuIp{z#fdX(41dIUyDp2Gx05AbE zOmHNjE)4i97*IG2O7uVKUjUM<3<-fj|DH#R43Mlck%-9z{)du5%%cSmFaY_BK#)X7 z^iRr6e{)BQ3^S{fNQg2N{tp3|)fu}GI41Nj0zp%p_X}j0l3{-l0qD{9r!FBF|1trf zU{2K-TnK^k-y}eWW%UuXqzjVx4}oEiS|nKiD-HmXwOZX!kY9KBCo15dkBrk`Oz^)5 zLgYA_`#Kd_i@yj2NXgL%x-$Je{#(aCzz1bc9^ikPK?plf3jEi=pnr)nDA+3&sc>k> zKLkLoQbon!Nb4X41jTNO%DsR982{2RM4I0A%VPrYe<<00fr>pf ne*uyefyLoL5cI!_17MgOOHsxDIgcrcltvB<0RLxq@YGjg0uVAD^;eQ{>re!c znn3>o5EOENzfKPMpNYVrV~Xy%31!INBme@k4FVfNi2i3H8OHo)dXWD$4rC(QxAA1; zknitx00@c#eG;$F^gjp&xRQf>PgNjrWD>H$y~=+kf&>4rI0zRmkd(oc{5J_{QYJLB z7f=w>KLh|>VgZBj5ZFJ2$-GN6kMkA!Kb?s%?kP3ciT*P?G>MCX|Ji@O0|N{#pggAk z*%^Q&g5-CQPW_)TF`1(K Kn{-nU5Qjl8F^3s zPaw%MOkhla=)XLf{(21)5&}d1AoB!5V8| _3Ih?A^)xpTK|6=agB4ctZp8r+B+Z!hL z6r3dd4-a;>Zdu2F0M6-Qvf-wm{6}{g8$9@*h*=GtM_UNCk7U}??o1#j#YTtZ<*|3( z(^a2oGWUr0FG~4AA*Mpag6@1*_lNdhh~)b`GJL6CZZ~Q}#FK2=uiM$5t!#VI)}v*1 zY&RAmj>azX&9zv0-OMY6whOi}VPr9=MGQ=q1|N2r0p-iwLy?ZUK*# Gd)4l^d%R{T4$%ybeSEx5uCAD+S7(*1mHhqSM1+m)4;P~0&Q@A;Y xp<=mRv{j(wwpB z>-$fL5@{)^$4p@#o;>Z;z`uls%b|m)aPCB?k~P)iNsF MjM>B?F%z{0rs5dXM`sLN7sn^v8yuQJ8PU%(a7nJB#r?vZ}4%4 z1wvkyUPT1s^U@A`1en~JNPStn@>jUaH|2%I1sR-B8;WiMIJ0;@v#Y;d9~&`{rh?-< zPMQzWGGhcAq&Ol3s%g$V`nH9#8J? awRAk7VIp~6ZzZEsZO}q2gktCuhN9?((5BYr3qIFSKFdCt z5!;vH$}#a>UC%CP>ZK^`?G4C8MsG6(A>ZUZtifMK{f+Z*Mo6wWe!h*zXL!soW6h#> zaii!r9w$2%r_oFG%-V0?<(qR^=bYZk@?*Y2)h7}n4x*!3F%Sw!zFyYPmPj{Fg=DW! z#;CPUVpO6<^26}d_oPL<4R-pMgk+rDF7fIkVo~JuEtKABRY6WN8MJHnyCE`tpiv`- zI?u_wK;8SQruB)gZqB%!_e;{m`MhBfc)Gk3Cx!A5Ji>QLgeU$tljI9J6t7vA-{Sht z411-mI*EE{mo^|N6C;FY08E}%isw=6H HK#I2sv76TTf!` z7^(3~xjVN4BJtiy(%Jj38d>dJ=R<9LC|s5@x1lpAwkhVIFS=AaS<3VRsq+ntCq`?( z0*I1vqB9vshUxjglx2{piEpDMz-Ddq0_QpwtGnTA!BV%GoupHZM>jfwWk)y&Oa#OG zYOCmEy@Q&%eG5^s`BiGi^>*lpzOnk}GNW!!5!q4Uw#FyC53{j9j>mJ2o|`d_C@wOn z!xs{RAE%uVf#N6(n4*3RyQ>+o_Lh&0pHd`9vz~XfxE)+?Je=!CF&kK 6lLwbA8; z>sceO>zvb>vo>aTs{zlBlgOfZG$vEu(w712Jj
#G|DmK=7eg?DSYlLyJFYm^4hwt!ca1U4CrUaHefn{|dlzxqnO4dO=TVs-p zx}Q9MPG!fz4ChY*)U{txZwvIRfiX49XvJr!ZNZXnxz2re^R2|)UJTw(%WFHnbZEV< zZLr&U?af&7o~$2_&1c}lZz=q5O`bl9N)2&1F^>q_%!NC}QcdPHILK8S{I8`vSpn0o zH70C#`6{k*i#L}sl^w1PJ0`O$XWu&(gU!MtqOOGBj~Lr>H_JP!`tEmWMk!JJ0R+J# z<^H+t!n=N;8(GaFua9@rv@*{|m^lWHpBz*yucjoltz>M-j~LUJzxX|&@SG;LtY$~V zpIrM38rXt!l(@mLma2~To10#yzJ-_