Update to 7.7.0

Since version 7.7.0, we recommend yours update python to 3.12.

[+] Using nginx technology to load static files improves access speed
[+] Refactor homepage, website, FTP, and database using vue3
[+] Table loading changed to skeleton screen
[+] Add Website statistics-v2 professional plug-in
[+] Add Home page - top 5 resource occupancy
[+] Add protection for Files management (requires Tamper-proof for Enterprise 3.7)
[+] Website, FTP, Databases page add program status
[+] Add FTP log analysis (only supports Centos)
[+] Add password-free login to phpMyAdmin
[+] Add Proxy Project in Website (Supported when web service uses Nginx)
[+] Add WP Toolkit (Pro version only)
[+] Redesigned Docker module
[+] Add WP Toolkit Protection
[+] Add WP Toolkit Backup and Restore
[+] Add WP Toolkit Migrated
[+] Add WP Toolkit Clone site (supports new domain and subdomain)
[+] Add WP Toolkit Create site from backup of other panel
[+] Add WP Toolkit support for Cron automatic backup (only save Local disk)
[+] Add WP Toolkit operation log
[+] Add Integrity check for WP Toolkit
[+] Add WP Toolkit plug-in management and themes management

[*] Optimize phpMyAdmin formula access method
[*] Optimize Home page PHP display problem
[*] Optimize jump to the login interface after the login expires
[*] Optimize automatic renewal of SSL at some times
[*] Optimize Let's Encrypt to increase application success rate

[-] Fix Logs Audit cannot be opened
[-] Fix apache URL rewrite issue
[-] Fix phpmyadmin installation problem
[-] Fix the problem that some servers cannot install software
[-] Fix upload file error
[-] Fix left menu hiding problem
[-] Fix aaPanel Mobile QR code display problem
[-] Fix problem that third-party plug-ins are not displayed in the App Store
[-] Fix issue where the menu bar is blank when opening new tabs
[-] Fixed panel not being accessible in some cases
[-] Fix the issue where Curl warning caused the inability to apply for SSL
[-] Fix Quota issues for Website, FTP, Databases
[-] Fix file interface display problem on mobile terminal
This commit is contained in:
Jack
2024-07-19 11:25:10 +08:00
parent ed34994f45
commit ed55fa708d
1949 changed files with 329210 additions and 26644 deletions
+5 -5
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
@@ -128,7 +128,7 @@ class main :#line:22
import re #line:293
import projectModel .bt_docker .dk_container as dc #line:294
OO00OOOOO0O0OOOOO =[]#line:295
O0OOOO000O00OOO0O =re .findall ("container_name\s*:\s*[\"\']+(.*)[\'\"]",OO0OOOO0O00OO0OO0 )#line:296
O0OOOO000O00OOO0O =re .findall ("container_name\\s*:\\s*[\"\']+(.*)[\'\"]",OO0OOOO0O00OO0OO0 )#line:296
O0O0OO0O00OOO0O00 =dc .main ().get_list (OOO0OO00OO0OO00OO )#line:297
if not O0O0OO0O00OOO0O00 ["status"]:#line:298
return public .return_msg_gettext (False ,"Error getting container list!")#line:299
@@ -138,7 +138,7 @@ class main :#line:22
OO00OOOOO0O0OOOOO .append (O0OOO0O0OO0O0OO00 ['name'])#line:303
if OO00OOOOO0O0OOOOO :#line:304
return public .return_msg_gettext (False ,"The container name in the template: <br>[{}] already exists!".format (", ".join (OO00OOOOO0O0OOOOO )))#line:305
OO0000O0OO00OO0O0 ="(\d+):\d+"#line:307
OO0000O0OO00OO0O0 =r"(\d+):\d+"#line:307
O00O00OOOO0OO00O0 =re .findall (OO0000O0OO00OO0O0 ,OO0OOOO0O00OO0OO0 )#line:308
for O0OOO00O00O0OOOOO in O00O00OOOO0OO00O0 :#line:309
if dp .check_socket (O0OOO00O00O0OOOOO ):#line:310
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
# coding: utf-8
# -------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
# -------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
# -------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
# -------------------------------------------------------------------
# ------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+4 -4
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
@@ -42,7 +42,7 @@ def docker_client_low (url ="unix:///var/run/docker.sock"):#line:25
def get_cpu_count ():#line:39
import re #line:40
OOO00O00O0000O00O =open ('/proc/cpuinfo','r').read ()#line:41
OO00O0000OO000OOO ="processor\s*:"#line:42
OO00O0000OO000OOO =r"processor\s*:"#line:42
OO0OOO0O00O0O0OOO =re .findall (OO00O0000OO000OOO ,OOO00O00O0000O00O )#line:43
if not OO0OOO0O00O0O0OOO :#line:44
return 0 #line:45
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+4 -4
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
@@ -41,7 +41,7 @@ class main :#line:1
O00OO000O0OO0000O ="SAVE={}".format (OOO00O0000000OO0O )#line:36
public .writeFile (OOOO0O0OO00O00O00 ,O00OO000O0OO0000O )#line:37
return public .returnMsg (True ,"Set up successfully!")#line:38
O00OO000O0OO0000O =re .sub ("SAVE\s*=\s*\d+","SAVE={}".format (OOO00O0000000OO0O ),O00OO000O0OO0000O )#line:39
O00OO000O0OO0000O =re .sub (r"SAVE\s*=\s*\d+","SAVE={}".format (OOO00O0000000OO0O ),O00OO000O0OO0000O )#line:39
public .writeFile (OOOO0O0OO00O00O00 ,O00OO000O0OO0000O )#line:40
dp .write_log ("Set the monitoring time to [] days!".format (OOO00O0000000OO0O ))#line:41
return public .returnMsg (True ,"Set up successfully!")#line:42
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+3 -3
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
+5 -5
View File
@@ -1,10 +1,10 @@
# coding: utf-8
# -------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
# -------------------------------------------------------------------
# Copyright (c) 2015-2017 宝塔软件(http:#bt.cn) All rights reserved.
# Copyright (c) 2015-2017 aaPanel(www.aapanel.com) All rights reserved.
# -------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
# Author: zouhw <zhw@aapanel.com>
# -------------------------------------------------------------------
# ------------------------------
@@ -27,8 +27,8 @@ class main :#line:15
if OO0O0O000O00O00O0 ['mod_name']in ['base']:return public .return_status_code (1000 ,'Wrong call!')#line:43
public .exists_args ('def_name,mod_name',OO0O0O000O00O00O0 )#line:44
if OO0O0O000O00O00O0 ['def_name'].find ('__')!=-1 :return public .return_status_code (1000 ,'The called method name cannot contain the "__" characterrong call!')#line:45
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['mod_name']):return public .return_status_code (1000 ,'The called module name cannot contain characters other than \w')#line:46
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['def_name']):return public .return_status_code (1000 ,'The called module name cannot contain characters other than \w')#line:47
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['mod_name']):return public .return_status_code (1000 ,r'The called module name cannot contain characters other than \w')#line:46
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['def_name']):return public .return_status_code (1000 ,r'The called module name cannot contain characters other than \w')#line:47
except :#line:48
return public .get_error_object ()#line:49
O0OOO0O0O00O00O0O ="dk_{}".format (OO0O0O000O00O00O0 ['mod_name'].strip ())#line:51
+4 -4
View File
@@ -1,10 +1,10 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: hwliang <hwl@bt.cn>
# Author: hwliang <hwl@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
@@ -464,7 +464,7 @@ export PATH
return public.return_error('Please install nodejs version manager first')
project_name = get.project_name.strip()
if not re.match("^\w+$",project_name):
if not re.match(r"^\w+$",project_name):
return public.return_error('The project name format is incorrect and supports letters, numbers, underscores, and expressions: ^[0-9A-Za-z_]$')
if public.M('sites').where('name=?',(get.project_name,)).count():
+304 -304
View File
@@ -1,304 +1,304 @@
#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
#-------------------------------------------------------------------
# Copyright (c) 2015-2017 宝塔软件(http:#bt.cn) All rights reserved.
#-------------------------------------------------------------------
# Author: hwliang <hwl@bt.cn>
#-------------------------------------------------------------------
#------------------------------
# 磁盘配额管理
#------------------------------
import os ,public ,psutil ,json ,time ,re
from projectModel .base import projectBase
class main (projectBase ):
xfs_quota ="xfs_quota"
__O0O000000OO000000 ='{}/config/quota.json'.format (public .get_panel_path ())
__O00OOOO00OO0OO0OO ='{}/config/mysql_quota.json'.format (public .get_panel_path ())
__O0O00000000OOO0O0 =public .to_string ([84 ,104 ,105 ,115 ,32 ,102 ,101 ,97 ,116 ,117 ,114 ,101 ,32 ,105 ,115 ,32 ,101 ,120 ,99 ,108 ,117 ,115 ,105 ,118 ,101 ,32 ,116 ,111 ,32 ,116 ,104 ,101 ,32 ,112 ,114 ,111 ,32 ,101 ,100 ,105 ,116 ,105 ,111 ,110 ,44 ,32 ,112 ,108 ,101 ,97 ,115 ,101 ,32 ,97 ,99 ,116 ,105 ,118 ,97 ,116 ,101 ,32 ,105 ,116 ,32 ,102 ,105 ,114 ,115 ,116 ])
def __init__ (OOO0000OO0OO0O00O ):
_O0OOO0O00O0O0O000 ='{}/data/quota_install.pl'.format (public .get_panel_path ())
if not os .path .exists (_O0OOO0O00O0O0O000 ):
O0OO0OOO0OO0O0O00 ='/usr/sbin/xfs_quota'
if not os .path .exists (O0OO0OOO0OO0O0O00 ):
if os .path .exists ('/usr/bin/apt-get'):
public .ExecShell ('nohup apt-get install xfsprogs -y > /dev/null &')
else :
public .ExecShell ('nohup yum install xfsprogs -y > /dev/null &')
public .writeFile (_O0OOO0O00O0O0O000 ,'True')
if os .path .exists ("/sbin/xfs_quota"):
OOO0000OO0OO0O00O .xfs_quota ="/sbin/xfs_quota"
def __OO00OO00O0000O0OO (O00OOO0000000000O ,args =None ):
""
OO00000OO0O00O0O0 =[]
for OO00O0OO0O0000OOO in psutil .disk_partitions ():
if OO00O0OO0O0000OOO .fstype =='xfs':
OO00000OO0O00O0O0 .append ((OO00O0OO0O0000OOO .mountpoint ,OO00O0OO0O0000OOO .device ,psutil .disk_usage (OO00O0OO0O0000OOO .mountpoint ).free ,OO00O0OO0O0000OOO .opts .split (',')))
return OO00000OO0O00O0O0
def __O00OOOO0OO00O0OO0 (O000O00O0O0000O00 ,args =None ):
""
return O000O00O0O0000O00 .__O000O0O0000OOOOOO (args .path )
def __O000000O0O0000OOO (O00OOO00000OOOO00 ,O000O00O00O00OOOO ):
""
O0OOO000OO000OOO0 =O00OOO00000OOOO00 .__OO00OO00O0000O0OO ()
OO0OO000OO00O0OO0 =None
for O0O0OOOO00O00OOO0 in O0OOO000OO000OOO0 :
if O0O0OOOO00O00OOO0 [0 ]=="/":
OO0OO000OO00O0OO0 =O0O0OOOO00O00OOO0
if O000O00O00O00OOOO .find (O0O0OOOO00O00OOO0 [0 ]+'/')==0 :
if not 'prjquota'in O0O0OOOO00O00OOO0 [3 ]:
return O0O0OOOO00O00OOO0
return O0O0OOOO00O00OOO0 [1 ]
if OO0OO000OO00O0OO0 and O000O00O00O00OOOO .find (OO0OO000OO00O0OO0 [0 ])==0 :
if not 'prjquota'in OO0OO000OO00O0OO0 [3 ]:
return OO0OO000OO00O0OO0
return OO0OO000OO00O0OO0 [1 ]
return ''
def __O000O0O0000OOOOOO (OO0OOO00OO000000O ,O0O0O0OOOOO0OOO0O ):
""
if not os .path .exists (O0O0O0OOOOO0OOO0O ):return -1
if not os .path .isdir (O0O0O0OOOOO0OOO0O ):return -2
OO0O0OO0O0000000O =OO0OOO00OO000000O .__OO00OO00O0000O0OO ()
O0O00OO00O0O0O00O =None
for O0OO0O0O00O00OO00 in OO0O0OO0O0000000O :
if O0OO0O0O00O00OO00 [0 ]=="/":
O0O00OO00O0O0O00O =O0OO0O0O00O00OO00
if O0O0O0OOOOO0OOO0O .find (O0OO0O0O00O00OO00 [0 ]+'/')==0 :
return O0OO0O0O00O00OO00 [2 ]/1024 /1024
if O0O00OO00O0O0O00O and O0O0O0OOOOO0OOO0O .find (O0O00OO00O0O0O00O [0 ])==0 :
return O0O00OO00O0O0O00O [2 ]/1024 /1024
return -3
def get_quota_path_list (OOOO000OO000O000O ,args =None ,get_path =None ):
""
if not os .path .exists (OOOO000OO000O000O .__O0O000000OO000000 ):
public .writeFile (OOOO000OO000O000O .__O0O000000OO000000 ,'[]')
O00OO00OO000O0OO0 =json .loads (public .readFile (OOOO000OO000O000O .__O0O000000OO000000 ))
OO00OOO0O00OOOO00 =[]
for O0OOOO0O0O000O0O0 in O00OO00OO000O0OO0 :
if not os .path .exists (O0OOOO0O0O000O0O0 ['path'])or not os .path .isdir (O0OOOO0O0O000O0O0 ['path'])or os .path .islink (O0OOOO0O0O000O0O0 ['path']):continue
if get_path :
if O0OOOO0O0O000O0O0 ['path']==get_path :
OOO00OO0OOO0O0OO0 =psutil .disk_usage (O0OOOO0O0O000O0O0 ['path'])
O0OOOO0O0O000O0O0 ['used']=OOO00OO0OOO0O0OO0 .used
O0OOOO0O0O000O0O0 ['free']=OOO00OO0OOO0O0OO0 .free
return O0OOOO0O0O000O0O0
else :
continue
OOO00OO0OOO0O0OO0 =psutil .disk_usage (O0OOOO0O0O000O0O0 ['path'])
O0OOOO0O0O000O0O0 ['used']=OOO00OO0OOO0O0OO0 .used
O0OOOO0O0O000O0O0 ['free']=OOO00OO0OOO0O0OO0 .free
OO00OOO0O00OOOO00 .append (O0OOOO0O0O000O0O0 )
if get_path :
return {'size':0 ,'used':0 ,'free':0 }
if len (OO00OOO0O00OOOO00 )!=len (O00OO00OO000O0OO0 ):
public .writeFile (OOOO000OO000O000O .__O0O000000OO000000 ,json .dumps (OO00OOO0O00OOOO00 ))
return O00OO00OO000O0OO0
def get_quota_mysql_list (OO000O0O00OOOOO0O ,args =None ,get_name =None ):
""
if not os .path .exists (OO000O0O00OOOOO0O .__O00OOOO00OO0OO0OO ):
public .writeFile (OO000O0O00OOOOO0O .__O00OOOO00OO0OO0OO ,'[]')
OO00OO0000O0O0OOO =json .loads (public .readFile (OO000O0O00OOOOO0O .__O00OOOO00OO0OO0OO ))
O00O00OOO0OOO00OO =[]
OOOO000000OO0O0O0 =public .M ('databases')
for OOO0OO0O000O0O00O in OO00OO0000O0O0OOO :
if get_name :
if OOO0OO0O000O0O00O ['db_name']==get_name :
OOO0OO0O000O0O00O ['used']=OOO0OO0O000O0O00O ['used']=int (public .get_database_size_by_name (OOO0OO0O000O0O00O ['db_name']))
_O0OO00O000O0OOO00 =OOO0OO0O000O0O00O ['size']*1024 *1024
if (OOO0OO0O000O0O00O ['used']>_O0OO00O000O0OOO00 and OOO0OO0O000O0O00O ['insert_accept'])or (OOO0OO0O000O0O00O ['used']<_O0OO00O000O0OOO00 and not OOO0OO0O000O0O00O ['insert_accept']):
OO000O0O00OOOOO0O .mysql_quota_check ()
return OOO0OO0O000O0O00O
else :
if OOOO000000OO0O0O0 .where ('name=?',OOO0OO0O000O0O00O ['db_name']).count ():
if args :OOO0OO0O000O0O00O ['used']=int (public .get_database_size_by_name (OOO0OO0O000O0O00O ['db_name']))
O00O00OOO0OOO00OO .append (OOO0OO0O000O0O00O )
OOOO000000OO0O0O0 .close ()
if get_name :
return {'size':0 ,'used':0 }
if len (O00O00OOO0OOO00OO )!=len (OO00OO0000O0O0OOO ):
public .writeFile (OO000O0O00OOOOO0O .__O00OOOO00OO0OO0OO ,json .dumps (O00O00OOO0OOO00OO ))
return O00O00OOO0OOO00OO
def __OOO000O00000O0OO0 (OOOOOOOO0OOO000OO ,OOO0000OOO00O000O ,OO0OOO0000000OOO0 ,O0OOO0OO00O00O0OO ,OOOO00000OOOO0OO0 ):
""
O0OO0O00O000O00O0 =OOO0000OOO00O000O .execute ("REVOKE ALL PRIVILEGES ON `{}`.* FROM '{}'@'{}';".format (O0OOO0OO00O00O0OO ,OO0OOO0000000OOO0 ,OOOO00000OOOO0OO0 ))
if O0OO0O00O000O00O0 :raise public .PanelError ('Failed to remove insert permission for database user:{}'.format (O0OO0O00O000O00O0 ))
O0OO0O00O000O00O0 =OOO0000OOO00O000O .execute ("GRANT SELECT, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `{}`.* TO '{}'@'{}';".format (O0OOO0OO00O00O0OO ,OO0OOO0000000OOO0 ,OOOO00000OOOO0OO0 ))
if O0OO0O00O000O00O0 :raise public .PanelError ('Failed to remove insert permission for database user:{}'.format (O0OO0O00O000O00O0 ))
OOO0000OOO00O000O .execute ("FLUSH PRIVILEGES;")
return True
def __O000O000O0OOOOOOO (OO00OOO00OO0OOO00 ,O000OOOO0OO0O00OO ,O0OOO0OOO0OO00O00 ,O00OOO0OO0OO0OOOO ,OOOOOOOO0OO00O000 ):
""
OOO0O000OOOOO0O00 =O000OOOO0OO0O00OO .execute ("REVOKE ALL PRIVILEGES ON `{}`.* FROM '{}'@'{}';".format (O00OOO0OO0OO0OOOO ,O0OOO0OOO0OO00O00 ,OOOOOOOO0OO00O000 ))
if OOO0O000OOOOO0O00 :raise public .PanelError ('Failed to restore insert privileges for database user:{}'.format (OOO0O000OOOOO0O00 ))
OOO0O000OOOOO0O00 =O000OOOO0OO0O00OO .execute ("GRANT ALL PRIVILEGES ON `{}`.* TO '{}'@'{}';".format (O00OOO0OO0OO0OOOO ,O0OOO0OOO0OO00O00 ,OOOOOOOO0OO00O000 ))
if OOO0O000OOOOO0O00 :raise public .PanelError ('Failed to restore insert privileges for database user:{}'.format (OOO0O000OOOOO0O00 ))
O000OOOO0OO0O00OO .execute ("FLUSH PRIVILEGES;")
return True
def mysql_quota_service (O00000OO00O0O0000 ):
""
while 1 :
time .sleep (600 )
O00000OO00O0O0000 .mysql_quota_check ()
def __O0OO00O00O0OOO0OO (O0OO0O0000OOO0O0O ,OO0O0OOOOO0O00O0O ):
try :
if type (OO0O0OOOOO0O00O0O )!=list and type (OO0O0OOOOO0O00O0O )!=str :OO0O0OOOOO0O00O0O =list (OO0O0OOOOO0O00O0O )
return OO0O0OOOOO0O00O0O
except :return []
def mysql_quota_check (OO0O0OOO00O0OO00O ):
""
if not OO0O0OOO00O0OO00O .__OO000OOO0OO0O00OO ():return public .returnMsg (False ,OO0O0OOO00O0OO00O .__O0O00000000OOO0O0 )
O00000OOO00OO000O =OO0O0OOO00O0OO00O .get_quota_mysql_list ()
for OO0O0O0O0OO00OOO0 in O00000OOO00OO000O :
try :
if OO0O0O0O0OO00OOO0 ['size']<1 :
if not OO0O0O0O0OO00OOO0 ['insert_accept']:
OO0O0OOO00O0OO00O .__O000O000O0OOOOOOO (O0OOOO000OOO0O0OO ,O0000O00OO0O00O0O ,OO0O0O0O0OO00OOO0 ['db_name'],O000O00O0000OOO0O [0 ])
OO0O0O0O0OO00OOO0 ['insert_accept']=True
public .WriteLog ('Quota','Database [{}] quota has been closed, restore insert privileges'.format (OO0O0O0O0OO00OOO0 ['db_name']))
continue
O000O000O00000O0O =public .get_database_size_by_name (OO0O0O0O0OO00OOO0 ['db_name'])/1024 /1024
O0000O00OO0O00O0O =public .M ('databases').where ('name=?',(OO0O0O0O0OO00OOO0 ['db_name'],)).getField ('username')
O0OOOO000OOO0O0OO =public .get_mysql_obj (OO0O0O0O0OO00OOO0 ['db_name'])
O0O0OOO0O0O00OOOO =OO0O0OOO00O0OO00O .__O0OO00O00O0OOO0OO (O0OOOO000OOO0O0OO .query ("select Host from mysql.user where User='"+O0000O00OO0O00O0O +"'"))
if O000O000O00000O0O <OO0O0O0O0OO00OOO0 ['size']:
if not OO0O0O0O0OO00OOO0 ['insert_accept']:
for O000O00O0000OOO0O in O0O0OOO0O0O00OOOO :
OO0O0OOO00O0OO00O .__O000O000O0OOOOOOO (O0OOOO000OOO0O0OO ,O0000O00OO0O00O0O ,OO0O0O0O0OO00OOO0 ['db_name'],O000O00O0000OOO0O [0 ])
OO0O0O0O0OO00OOO0 ['insert_accept']=True
public .WriteLog ('Quota','The database [{}] is below the quota [{}MB], restore the insert permission'.format (OO0O0O0O0OO00OOO0 ['db_name'],OO0O0O0O0OO00OOO0 ['size']))
if hasattr (O0OOOO000OOO0O0OO ,'close'):O0OOOO000OOO0O0OO .close ()
continue
if OO0O0O0O0OO00OOO0 ['insert_accept']:
for O000O00O0000OOO0O in O0O0OOO0O0O00OOOO :
OO0O0OOO00O0OO00O .__OOO000O00000O0OO0 (O0OOOO000OOO0O0OO ,O0000O00OO0O00O0O ,OO0O0O0O0OO00OOO0 ['db_name'],O000O00O0000OOO0O [0 ])
OO0O0O0O0OO00OOO0 ['insert_accept']=False
public .WriteLog ('Quota','Database [{}] removed insert permission due to exceeding quota [{}MB]'.format (OO0O0O0O0OO00OOO0 ['db_name'],OO0O0O0O0OO00OOO0 ['size']))
if hasattr (O0OOOO000OOO0O0OO ,'close'):O0OOOO000OOO0O0OO .close ()
except :
public .print_log (public .get_error_info ())
public .writeFile (OO0O0OOO00O0OO00O .__O00OOOO00OO0OO0OO ,json .dumps (O00000OOO00OO000O ))
def __O0000OO00OO00O0O0 (OO0000O0OO00O0OOO ,O0O0O00OO0OOOOOOO ):
""
if not OO0000O0OO00O0OOO .__OO000OOO0OO0O00OO ():return public .returnMsg (False ,OO0000O0OO00O0OOO .__O0O00000000OOO0O0 )
if not os .path .exists (OO0000O0OO00O0OOO .__O00OOOO00OO0OO0OO ):
public .writeFile (OO0000O0OO00O0OOO .__O00OOOO00OO0OO0OO ,'[]')
OOOO0000OOOO0OOOO =int (O0O0O00OO0OOOOOOO ['size'])
OOO000O0OO00O00OO =O0O0O00OO0OOOOOOO .db_name .strip ()
O0OO0OOOOO00O00OO =json .loads (public .readFile (OO0000O0OO00O0OOO .__O00OOOO00OO0OO0OO ))
for OO000O0O0O0O000OO in O0OO0OOOOO00O00OO :
if OO000O0O0O0O000OO ['db_name']==OOO000O0OO00O00OO :
return public .returnMsg (False ,'Database quota already exists')
O0OO0OOOOO00O00OO .append ({'db_name':OOO000O0OO00O00OO ,'size':OOOO0000OOOO0OOOO ,'insert_accept':True })
public .writeFile (OO0000O0OO00O0OOO .__O00OOOO00OO0OO0OO ,json .dumps (O0OO0OOOOO00O00OO ))
public .WriteLog ('Quota','The quota limit for creating database [{db_name}] is: {size}MB'.format (db_name =OOO000O0OO00O00OO ,size =OOOO0000OOOO0OOOO ))
OO0000O0OO00O0OOO .mysql_quota_check ()
return public .returnMsg (True ,'Added successfully')
def __OO000OOO0OO0O00OO (OOOO00OOOO00O0O00 ):
import panelPlugin
O0OOOOOO0O0000O0O =public .to_dict_obj ({})
O0OOOOOO0O0000O0O .focre =1
O0O0O00O0OO00O000 =panelPlugin .panelPlugin ().get_soft_list (O0OOOOOO0O0000O0O )
return int (O0O0O00O0OO00O000 ['pro'])>time .time ()
def modify_mysql_quota (OO00OO0OOOO00O000 ,OOOO00O0OO000OOOO ):
""
if not OO00OO0OOOO00O000 .__OO000OOO0OO0O00OO ():return public .returnMsg (False ,OO00OO0OOOO00O000 .__O0O00000000OOO0O0 )
if not os .path .exists (OO00OO0OOOO00O000 .__O00OOOO00OO0OO0OO ):
public .writeFile (OO00OO0OOOO00O000 .__O00OOOO00OO0OO0OO ,'[]')
if not re .match (r"^\d+$",OOOO00O0OO000OOOO .size ):return public .returnMsg (False ,'Quota size must be an integer!')
OO0O0OOOO00000OOO =int (OOOO00O0OO000OOOO ['size'])
OO0OO0OO000O0O00O =OOOO00O0OO000OOOO .db_name .strip ()
O0OOOO0OOOO0O0000 =json .loads (public .readFile (OO00OO0OOOO00O000 .__O00OOOO00OO0OO0OO ))
O0O00O0O000OOO0O0 =False
for OO00O0000O0OOOOO0 in O0OOOO0OOOO0O0000 :
if OO00O0000O0OOOOO0 ['db_name']==OO0OO0OO000O0O00O :
OO00O0000O0OOOOO0 ['size']=OO0O0OOOO00000OOO
O0O00O0O000OOO0O0 =True
break
if O0O00O0O000OOO0O0 :
public .writeFile (OO00OO0OOOO00O000 .__O00OOOO00OO0OO0OO ,json .dumps (O0OOOO0OOOO0O0000 ))
public .WriteLog ('Quota','Modify the quota limit of database [{db_name}] to: {size}MB'.format (db_name =OO0OO0OO000O0O00O ,size =OO0O0OOOO00000OOO ))
OO00OO0OOOO00O000 .mysql_quota_check ()
return public .returnMsg (True ,'Successfully modified')
return OO00OO0OOOO00O000 .__O0000OO00OO00O0O0 (OOOO00O0OO000OOOO )
def __O0OOOO00O00000OOO (O0OO0O0O00O0OO00O ,O0O0O0O0O000O0OOO ):
""
O0OOO0OO0O0000O00 =[]
OO0000OO0OO00O0O0 =public .ExecShell ("{xfs_quota} -x -c report {mountpoint}|awk '{{print $1}}'|grep '#'".format (xfs_quota =O0OO0O0O00O0OO00O .xfs_quota ,mountpoint =O0O0O0O0O000O0OOO ))[0 ]
if not OO0000OO0OO00O0O0 :return O0OOO0OO0O0000O00
for O0OO0O00OO0O0OO0O in OO0000OO0OO00O0O0 .split ('\n'):
if O0OO0O00OO0O0OO0O :O0OOO0OO0O0000O00 .append (int (O0OO0O00OO0O0OO0O .split ('#')[-1 ]))
return O0OOO0OO0O0000O00
def __OO00O000OOOOOOO00 (O0OOO0O00OOOO0OOO ,OO0000O0OOOOOOO0O ,OOO0000OO0O0000OO ):
""
O00O00OO0O000O000 =1001
if not OO0000O0OOOOOOO0O :return O00O00OO0O000O000
O00O00OO0O000O000 =OO0000O0OOOOOOO0O [-1 ]['id']+1
O0OO00OO00O00O000 =sorted (O0OOO0O00OOOO0OOO .__O0OOOO00O00000OOO (OOO0000OO0O0000OO ))
if O0OO00OO00O00O000 :
if O0OO00OO00O00O000 [-1 ]>O00O00OO0O000O000 :
O00O00OO0O000O000 =O0OO00OO00O00O000 [-1 ]+1
return O00O00OO0O000O000
def __OOOO0O000OOOO00O0 (OO0OO00O0O0000O0O ,O000O0OOOO0OOO00O ):
""
if not OO0OO00O0O0000O0O .__OO000OOO0OO0O00OO ():return public .returnMsg (False ,OO0OO00O0O0000O0O .__O0O00000000OOO0O0 )
OOOO000000O00OO00 =O000O0OOOO0OOO00O .path .strip ()
OO000OOO0000OO00O =int (O000O0OOOO0OOO00O .size )
if not os .path .exists (OOOO000000O00OO00 ):return public .returnMsg (False ,'The specified directory does not exist')
if os .path .isfile (OOOO000000O00OO00 ):return public .returnMsg (False ,'this is not a valid directory!')
if os .path .islink (OOOO000000O00OO00 ):return public .returnMsg (False ,'The specified directory is a soft link!')
OOOOO000OO0000OOO =OO0OO00O0O0000O0O .get_quota_path_list ()
for O00O0OOOO0O00O000 in OOOOO000OO0000OOO :
if O00O0OOOO0O00O000 ['path']==OOOO000000O00OO00 :return public .returnMsg (False ,'The specified directory has already set a quota!')
OO000O0OO0000OO00 =OO0OO00O0O0000O0O .__O000O0O0000OOOOOO (OOOO000000O00OO00 )
if OO000O0OO0000OO00 ==-3 :return public .returnMsg (False ,'The partition where the specified directory is located is not an XFS partition and does not support directory quotas!')
if OO000O0OO0000OO00 ==-2 :return public .returnMsg (False ,'this is not a valid directory!')
if OO000O0OO0000OO00 ==-1 :return public .returnMsg (False ,'The specified directory does not exist!')
if OO000OOO0000OO00O >OO000O0OO0000OO00 :return public .returnMsg (False ,'Insufficient quota capacity available for the specified disk!')
OOO0O0O0O0O000O0O =OO0OO00O0O0000O0O .__O000000O0O0000OOO (OOOO000000O00OO00 )
if not OOO0O0O0O0O000O0O :return public .returnMsg (False ,'The specified directory is not in the xfs disk partition!')
if isinstance (OOO0O0O0O0O000O0O ,tuple ):return public .returnMsg (False ,'The directory quota function is not enabled for this xfs partition, please increase the [prjquota] parameter when mounting the partition<p>/etc/fstab File configuration example<pre>{mountpoint} {path} xfs defaults,prjquota 0 0</pre></p><p>Note: You need to remount the partition or reboot the server to take effect</p><br>The setup is completed and the error still occurs, please refer to<br><a class="btlink" target ="_blank" href="https://forum.aapanel.com/d/12700-how-to-enable-disk-quota-for-root-directory">How to enable disk quota for root directory</a>'.format (mountpoint =OOO0O0O0O0O000O0O [1 ],path =OOO0O0O0O0O000O0O [0 ]))
O0000OO000OO00O0O =OO0OO00O0O0000O0O .__OO00O000OOOOOOO00 (OOOOO000OO0000OOO ,OOO0O0O0O0O000O0O )
OO0O0O0O0OOOOO00O =public .ExecShell ("{xfs_quota} -x -c 'project -s -p {path} {quota_id}'".format (path =OOOO000000O00OO00 ,quota_id =O0000OO000OO00O0O ,xfs_quota =OO0OO00O0O0000O0O .xfs_quota ))
if OO0O0O0O0OOOOO00O [1 ]:return public .returnMsg (False ,OO0O0O0O0OOOOO00O [1 ])
OO0O0O0O0OOOOO00O =public .ExecShell ("{xfs_quota} -x -c 'limit -p bhard={size}m {quota_id}' {mountpoint}".format (quota_id =O0000OO000OO00O0O ,size =OO000OOO0000OO00O ,mountpoint =OOO0O0O0O0O000O0O ,xfs_quota =OO0OO00O0O0000O0O .xfs_quota ))
if OO0O0O0O0OOOOO00O [1 ]:return public .returnMsg (False ,OO0O0O0O0OOOOO00O [1 ])
OOOOO000OO0000OOO .append ({'path':O000O0OOOO0OOO00O .path ,'size':OO000OOO0000OO00O ,'id':O0000OO000OO00O0O })
public .writeFile (OO0OO00O0O0000O0O .__O0O000000OO000000 ,json .dumps (OOOOO000OO0000OOO ))
public .WriteLog ('Quota','The quota limit for creating directory [{path}] is: {size}MB'.format (path =OOOO000000O00OO00 ,size =OO000OOO0000OO00O ))
return public .returnMsg (True ,'Added successfully')
def modify_path_quota (O0O0OOOOO0OOO0OOO ,OO0O0000000OO0OO0 ):
""
if not O0O0OOOOO0OOO0OOO .__OO000OOO0OO0O00OO ():return public .returnMsg (False ,O0O0OOOOO0OOO0OOO .__O0O00000000OOO0O0 )
O00O0O00OOO0O0O0O =OO0O0000000OO0OO0 .path .strip ()
if not re .match (r"^\d+$",OO0O0000000OO0OO0 .size ):return public .returnMsg (False ,'Quota size must be an integer!')
O0O00O0OOO0O0O0OO =int (OO0O0000000OO0OO0 .size )
if not os .path .exists (O00O0O00OOO0O0O0O ):return public .returnMsg (False ,'The specified directory does not exist')
if os .path .isfile (O00O0O00OOO0O0O0O ):return public .returnMsg (False ,'This is not a valid directory!')
if os .path .islink (O00O0O00OOO0O0O0O ):return public .returnMsg (False ,'The specified directory is a soft link!')
OO0O00O00OO0000OO =O0O0OOOOO0OOO0OOO .get_quota_path_list ()
OOOO0OO0OOOOO0OOO =0
for OOO00000OOOOO0OOO in OO0O00O00OO0000OO :
if OOO00000OOOOO0OOO ['path']==O00O0O00OOO0O0O0O :
OOOO0OO0OOOOO0OOO =OOO00000OOOOO0OOO ['id']
break
if not OOOO0OO0OOOOO0OOO :return O0O0OOOOO0OOO0OOO .__OOOO0O000OOOO00O0 (OO0O0000000OO0OO0 )
O0O0O00OOOOOO00O0 =O0O0OOOOO0OOO0OOO .__O000O0O0000OOOOOO (O00O0O00OOO0O0O0O )
if O0O0O00OOOOOO00O0 ==-3 :return public .returnMsg (False ,'The partition where the specified directory is located is not an XFS partition, and directory quotas are not supported!')
if O0O0O00OOOOOO00O0 ==-2 :return public .returnMsg (False ,'This is not a valid directory!')
if O0O0O00OOOOOO00O0 ==-1 :return public .returnMsg (False ,'The specified directory does not exist!')
if O0O00O0OOO0O0O0OO >O0O0O00OOOOOO00O0 :return public .returnMsg (False ,'Insufficient quota capacity available for the specified disk!')
OOO0OO0O0000O0OO0 =O0O0OOOOO0OOO0OOO .__O000000O0O0000OOO (O00O0O00OOO0O0O0O )
if not OOO0OO0O0000O0OO0 :return public .returnMsg (False ,'The specified directory is not in the xfs disk partition!')
if isinstance (OOO0OO0O0000O0OO0 ,tuple ):return public .returnMsg (False ,'The directory quota function is not enabled for this xfs partition, please increase the [prjquota] parameter when mounting the partition<p>/etc/fstab File configuration example<pre>{mountpoint} {path} xfs defaults,prjquota 0 0</pre></p><p>Note: After the configuration is complete, you need to remount the partition or restart the server to take effect</p>'.format (mountpoint =OOO0OO0O0000O0OO0 [1 ],path =OOO0OO0O0000O0OO0 [0 ]))
OO00O0OOO00OOOO0O =public .ExecShell ("{xfs_quota} -x -c 'project -s -p {path} {quota_id}'".format (path =O00O0O00OOO0O0O0O ,quota_id =OOOO0OO0OOOOO0OOO ,xfs_quota =O0O0OOOOO0OOO0OOO .xfs_quota ))
if OO00O0OOO00OOOO0O [1 ]:return public .returnMsg (False ,OO00O0OOO00OOOO0O [1 ])
OO00O0OOO00OOOO0O =public .ExecShell ("{xfs_quota} -x -c 'limit -p bhard={size}m {quota_id}' {mountpoint}".format (quota_id =OOOO0OO0OOOOO0OOO ,size =O0O00O0OOO0O0O0OO ,mountpoint =OOO0OO0O0000O0OO0 ,xfs_quota =O0O0OOOOO0OOO0OOO .xfs_quota ))
if OO00O0OOO00OOOO0O [1 ]:return public .returnMsg (False ,OO00O0OOO00OOOO0O [1 ])
for OOO00000OOOOO0OOO in OO0O00O00OO0000OO :
if OOO00000OOOOO0OOO ['path']==O00O0O00OOO0O0O0O :
OOO00000OOOOO0OOO ['size']=O0O00O0OOO0O0O0OO
break
public .writeFile (O0O0OOOOO0OOO0OOO .__O0O000000OO000000 ,json .dumps (OO0O00O00OO0000OO ))
public .WriteLog ('Quota','Modify the quota limit of directory [{path}] to:{size}MB'.format (path =O00O0O00OOO0O0O0O ,size =O0O00O0OOO0O0O0OO ))
return public .returnMsg (True ,'Successfully modified')
QRASP55VO/1DQ98p1csw9A==
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x/NqQCTep2zIARzdXiKXPh1Fe+M=
dBZyCsfrbwqvA0sbdGrIGg==
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x/NqQCTep2zIARzdXiKXPh1Fe+M=
n+0ptngHIPIjFuMNQ53bfoMbif5SSuhU+ED0z8LQ0uRP+8tAmQ/sx0zSKtQtV+DZAsSdFCQjtILVBd7FvDmtwc6THtaa0pvFowRX+Q+yEWI=
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x/NqQCTep2zIARzdXiKXPh1Fe+M=
PEKPgJeDDCLnL9UcS39EYQ0oxS0YHncLtyklh46m5EBkNzGCoSotSCFeO4A9wJZj
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x/NqQCTep2zIARzdXiKXPh1Fe+M=
1u+XjG/2+GSQRv6EzCaWRQ==
I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir/P4mdpfwDI34s6+8CBN0
Z71ucSR75ppLp8TcGPXjF3pMbrAmHfUi73meeu5lk5g=
I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir/P4mdpfwDI34s6+8CBN0
+aWWMzKsJO+aM6tUDo7l22gaN/EfQwY9pVk1jkrGHubq5BMU7tPycF7U4lfA+PnV
NyzlU2YOTFNZFPd7RK11YaUw7ZYsBQH6PJOb5a5HaopbJMLTygrp/eIUmAMGN6Od
s+bHc/90a3lxFTPvWEu+yQ4hdETfvFmr96jd16JVhvU=
a4WDhREt5YBbYTTI0+NOTlxdCabhZWLzl3dzPJCL2ns=
H4fJMREGje1RhDKY1u71WkFaRhA2/BXughjkfaZp1RetweG/KCGDvlR75NN9AWxqG7njwjkItebPDjCvvD0ScUXpMVMO8Q7fKdfHqxQvhc0Qo+XFxK2fsZP0OPVxNa30
agP6Y0IXgzGYLtZLVcCCZ/0T599xXC8rG/FDWEro2DxfJQNabVUQQfe30RgJll2GWgYLMccciONnZHIUS3Z5qWHn2s7WlDckd+TogFxnamkRlczRvd0o9wecbthheLVo
I3U+Q+NUzPWPEuq1msm2jktlvsiPJjAhTZasqurt+e02ugu/S01xy+8g1TfxXg2xBw7u6ZrdCIKv6h8lGzSaB2XtdEhETr84GetEdGL9JNROgGPC7MQ7C+tI+RwFXBStB1/PylFqV2Y5eewvjz6yzB0KARJjv+PUr3VN5C1ldweqNOD6WfVOtgYZlJOd/RKai2gm1Xe/1qHEsrMqBKfzR0r88ShNiOdlXNPN5Q2Kc+9CXEnQQ5w/3oU63fxP1wk3R02xH78wobUwoMnSpGoiOFRVJcXce2/cO/j80Cr9xp/Bq36qcHrFNfxxLOo4NoQeITeD12nvkWwSaNgmpkti9tZqh3rrD0bz/KPjsePqDqaSBQuy8Z+bZn9RP82p+6QscQO8YmQ8zBEN9H1QouaZMs033/PTbriEeQYkdZyPQmaWKMjODPdHjGM3AvUXrex5lNXifEog6jVp9jpCvLXiQWKOl6vCXdhA6N09FEV5+hc23vD2eelgSUOeS/CVWnQn
9GxZpCRwMRDPejWR2Vvf+BGs2TNDawMKvXw7wkGFKycwYV+KrGJBLOWE5ZKcXjfZ
hqlhGn9T+umTkW8M7AGCyf53pAfC7nEQD4HNVdEJQZLIkmHZl8U57qY1DeVTGYl+nUTy7H49ZrUNzIpKIAr9zZIIyN/9N+wehqLU+wEqAEsnKcNuw/Damkm1gJmpUF/q
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YwSw+qPU1x9H7h5sO7rqpwAq9aEd9/ZDyB7sxwH9WQaDw==
TP9zhKzoqP2ZyB/hk4eVp4PgFV6qyVcVcXyg9pUYTH+fe1NKLaf5spkcfWXgRsYJtnS4hcBQTfomcVa3NGK2kw==
1V2v8QerKOmubvSxgB4eTBhWeQzn26oNLaz4XtiKd3AdDQBUXiqXQwhmu5WlhFn60xMYWLG5JhZsJWdFpyqQ7A==
VmVrGQo2zRokW/ZuO9bN6w0DuXITxu54bKEKszNtCJvIZ0v/QRc2IeaSOENH3l9T90Rkz5x6Un2VmLIOzr8dwA==
VmVrGQo2zRokW/ZuO9bN65gGPMYTOZHI9ZQoxsnmP7KLEtSB0GLS5Se79m+TG2t9135KBsD2gO3FZdgx0O9OKmGhezJAz/k4uf64WYthAg9CvHenbGCdg+rCL1QdVGZO
VmVrGQo2zRokW/ZuO9bN63uze4Lnmw99IoHHLSLuFlE=
VmVrGQo2zRokW/ZuO9bN65gGPMYTOZHI9ZQoxsnmP7JlthBTUL7R5HqxLcjsSXIrwynkyFYqgigXe0guno1SD0MxRQkoinrozEUjd2i76KQ2FdVaMOaG6NgLEeroNbqY
xWoGNWjKGPfI4gq8aHoTfCMtL0f3r/mGFy+NqqYlupPtN4LM6Lh/S65ElrzIM2mEFR4wbzAXWHZrnhVLLLAO0g==
ut2tmPKYoa0Hz0cuVsUj3tMSGh1ko3z0+MlUSmSyMwhIb1zJinXvIFDxLfLhTecS/1MzMv2RHX+TvRordfgZoA==
x2LOCSeSzacmh81ySUhNRyMnvRWiL5oO6Qgq1srO26J5oIdOF2MB2jFyE3kJu+XCO3xi5v0zS0Bck5oPwGmqdg==
5nKwQL/1xmQIH02KLn2uCz4YF8qrIN87bFE85HkLc/i7k2M794x2Yq0LfVLigc6ht6OQMPr12G5ehRdntmVxAA==
cr04jPiHcZs6CKfXkpLJpg==
k2Zl28bOLN38qJfNGTaCZ6rMM0mTyJFOy3hLy7u57NY=
yfhcGVf2iYc+Ztxqwy9MUIKrmif2LWU+zznzn9UpLXI/s+FPgY2+Hxtx2sMMpbTlTne9WXFpqgJJ6gPk5Wav9w==
2wtz2EJ9gcVOn6ULRb1bGIe07hjE+74SGaG0w588uApK/2t5XjeyKC8OdX+1C8HjQ+IfmVBZwTDF0pqgdxhjkQ==
VmVrGQo2zRokW/ZuO9bN6/lqCmGJfh2uNEvtBuw26X8w+5enulKar/ZSvLijxaNb/dPvHp6PgHlhD6KLaQ5LS4HdQeIvfc9DPai/jd4+mwsBcN1vPq7nE76tV7UQ7HVwLJrb0xura69ySsodzPM1j9yiS4WA+QFYcOiZSLVhiLqfCr9XBVFfJx44SoYr2facnIdAeqw2baAk/6b5GJTW0bSxIFm9YutewCUa95yzA1QYUb+WlbdF5fohXe/pPENEyoNRGxO1JUaGh6nK9g7YnA==
KQe2cpNa8FkcC9SS/NMi8CpV7JOOSbLjDX5EVV0mMeZBU6EHWzQukb4HO6oqSoSn
GI0tVzKIRtvBR9LqilOl4U0EMIK6j0pKu8mjRYtcrdG7dZ269LI7frBhzviGc3tyjRVIj7Ajag15BCDZNPPiCQ==
cr04jPiHcZs6CKfXkpLJpg==
KQe2cpNa8FkcC9SS/NMi8G0P9GY6qNLNYbwjnq7t4XZr0KjhChiSWxjHizc34qaJqim4buwZW/fRlFpl/CdD8LcP/CgbTeIlzjwrd8jnfS4=
UrJP/jKni+bt3Mjt/LR2/JixjGffYHjGQSIIYHxxdbx6x+W3qD4ODikQky2/dTb0FJxL5jKdPUwgMlZ4WeWfOn9MU6Yj+i91j0dzx6dZUvM=
cr04jPiHcZs6CKfXkpLJpg==
JLLU9+nVY1JUMr5gL/q4iFLnR8rZZKgJ3OwXpvTNq3REjghdQYFTNphtNqdZRRnh+6KIUHLhYejxdcDDAMpidcvFYi6gVlk0eEAx627Syho=
h5FvPAwG81WNEoTw22EDzkR3HrRLEnwFXkWthPsBXv5FxJO4EU4fGo07ytQwj7zA
H4vRWcZMdeGTkaux2duG85KYo6NtqzfaByFi2mNPcgBBHwoC77PGMeI/lbIfKdFGFKByKlbEQzoPmxasTNih9g==
2wtz2EJ9gcVOn6ULRb1bGDs+vEyftqMNg0ecms5Hu3Ns+s3h9c+vz6ytuh+HVVQR
VmVrGQo2zRokW/ZuO9bN64dGT517FFoHJ0TEwdOhtfnc+CAijAojPGqiIIwkNeAf+ikp4vrFkNt/evEciFGybQ==
2wtz2EJ9gcVOn6ULRb1bGNqBvm70dZ7HtlEosE/Nvm4WGWQyuwgvUYRCgxKPD3IXayptF1loB8Wt5TBeELqccO+40wL0pvNylzYrUHw6JBE=
VmVrGQo2zRokW/ZuO9bN6x4A95AfXu9BB2SGVN+xyx0QdXN/K+kB5RwpHBtFUdMco7LWTmbDJvRzHVtYD+qEVQ==
VmVrGQo2zRokW/ZuO9bN67ezeGNjgojkyMvJrElaSuLp1VoIPcnvjrt1egmDrxsT
VmVrGQo2zRokW/ZuO9bN62PFnbgPIhp3A8iSXWSsu5IPoEqGgdDHCzJcdTWYiFwo
T09EhIon/1QoA8oqVWmf9YDvrNcJ40cqakka+PgK4WIoJfqJFeo+lh65ATFyUEMyF0Y/+zwyDgyEpxfdJC1T9s7UhkpoJHbxUBQZk4Fz00RqB4T9ckqgL8prAZIi3eST
1V2v8QerKOmubvSxgB4eTBy6rynLclEPfDHFwfFdGkrqZYjti0bOFlAKQAZdWvRRBTq4Tw3TkA7zqlFYV3GEGw==
VmVrGQo2zRokW/ZuO9bN631PXfqa0WsPxY3cPKsjN++sf3pPhl4PmY0D+iiZJP6K
L0eUthVnpkGsmKFAX6d+uKiZA2NxmniTgCRjkzRry5tHeci7yRgrIj81Qcc56UWP
4hdB7RJambPsQ0dtPl5R2R2cbNN2oigWOYu+sXAe6NE=
Z8EhB+ghYGoKD9XY4aLecICNYZH3MI+WkCe55V3zbmE92inO+KpNM/U7zaoDuAPEuoRzraAIHccyyiUiZq0KCn4SIx0pgaa5qCV5DyiUzg8=
cr04jPiHcZs6CKfXkpLJpg==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YyVGBH6aNnzPjcK4RvfX4hfYve9n5OSl18xA0qaFTGh/FvjgivZL+gAYkkYN7wuGkE=
wgR07xfoapmx6eEnFHXXYpiq7dd9WD1xT5fQ5Vehci+ppnSgw3Uh/4UFjdGtp4C7cvhGp5bS426UifixsSPqnA==
+rSqPmR0H16Evq8k1dmRlB4xIbvaYG+O11hO82myw91Ydmx3LodFeccWDl136pyS+nAQAVxikLOkQvSOY9kJQAL4dTpsdxfBRhjl8YNkSe0=
YY+NVOVvcj0xKLmCGeWNx2BestjgssDXb997jOzwt9Aq32N7lFRvKaEk5Fl/ha6S
tqyC1MJ6XiYh+GD0a1kac5dSvZffsX+eThfLrN6YbFmpi1kaiU7RgZCp0rtM29PiZ3vWLi+ljJuWig8NiQ+4bg==
2wtz2EJ9gcVOn6ULRb1bGKZE1Zcf2OrvDEjNWK0WFBUgbaWhDaV89uXGofJoOVRr
VmVrGQo2zRokW/ZuO9bN601Odt2qBpBvUnMq3yF58HwhhNM7lVHcWsw71hZ1B8rwe2VgzE/Ygfs/ES/u0phTJg==
2wtz2EJ9gcVOn6ULRb1bGE3fWxG5qHjknC55f8ermFzus/o/QnSnnp1lNx6tgemIWgwHLhJMu5mRfNxKVC4tGUagweF1aVyTeSeOgr2pV0E=
VmVrGQo2zRokW/ZuO9bN6/3050nTbENCuAHMJP8rPTyx4Hr09t3MP1sylZ2k9TWT1Z/y9kt5XpMdcbz6I/4KRQ==
1cV64uRoDtvn/9K8xFmBBX9ZdUkOEyIMST38LHOp7fSKs2ImPRP0uyopElCHPi7HMVolZMF8O0XYdhXxBgTZgEqtCxmaQbs6wC+46PgWeNDCrmBUCzHdmv+1vOWqpreU
L0eUthVnpkGsmKFAX6d+uKJozLiMP5XT821uPNJ8RPjEdXEmGnrZWY/p8GPQZsgGWBxCipm0x1x/vOwPH25IOA==
9LvBrxm/uKypfgjBGJGYtcBuhWDF5ev4FlLJBPqtxn4=
rqA8uevZ84obkmE4+PiALpn7E9+AzYGlYfGJdMimSUSjnNUvkpCHlBESha0byLU3ObnMbt+xpHSu7mkeF29b/TGgdBW9AIpou7zfLCAKfCg=
cr04jPiHcZs6CKfXkpLJpg==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YwJt+VY8UEHNTi++WTqHhGFcQLxNOcaxrVugGzPuGlKxDpuTXtsBiJx6HKGQdLz9CA=
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWMqK7Soh3XPs5AU7ubhT3vOqORY+HJbq5ao42T+oXB2TxMpFXIxfI/VHCXdH5U/gk8=
poFDBYdcnIoac22Rpx3wOFqmecX/dbM0cwOE9JcdOUxhOvVL/xyrkb8pvE3XuSq/AF6vTbgqAOzaclvnzUP78zNBCUHIe9viMRGZD64lExwdRQ37I52ZP24wl2h+HEYnkzG37tN6AaS9pxgDJLGXWA==
9Vq3hrd3Q3VGJ7tCv0+KbRjjCn/SrIsjP/N9ZQ31H8s=
tqyC1MJ6XiYh+GD0a1kac+C23p8m5Q8Czgkq36h7kR9597Aftw1MKkys8jKCT8dDNm0OhJLEvszQGKdpR/tUZg==
1V2v8QerKOmubvSxgB4eTBhWeQzn26oNLaz4XtiKd3DBM6qqjMAtodeg9N3wCm9Gq2yeZjXnN4HfG2ObtojCyuFuu4uJxjeY08uVocnJAWzulcdvmrB+9jE1iVskGH1AwKoc/O1U4u7wqM1+ViPfz4Nc7TcCBSHiHSfnNKMbMSgFTRrNcK1VUSeA+xqt+7Gps9biwxLJJkfYwpud7rzzLTIQYO3dgrSEgNopaKP1wHQ=
89eRayX3G8tCX3FDU5IcjcI7XW0AOTd7+zV/GdfWl4M=
VmVrGQo2zRokW/ZuO9bN69cX0oe78riTFf2DR0iSouZv8VJVkm4PXJpjAZ8dMu85ue9EvVlif7D0Hfkl6Hg6wA==
VmVrGQo2zRokW/ZuO9bN6x2UBXrziXsE1YruI8yEIdpEkt5u9hKDhDnaxZI1tKV/1MiYuJ9V5LAPFKhhY6L1DPpcIKwtbw6ZwveQkIvw4MONL6VbKw7Qe3GYzo57G9ez
VmVrGQo2zRokW/ZuO9bN63aR3YocYJrJURmHuOn6NQyL2YNwJCHOOO4dVXSO1OrOu57rWNUOaY/g9Z4DxYYIAw+FuROKSt7S7gbygqMsdJM=
VmVrGQo2zRokW/ZuO9bN63aR3YocYJrJURmHuOn6NQxt5CXBImKEYcRbajp+HfFQgcG4V6mNlUB9TfRtQuR8trry1sH16bjkYZEVMTwcB6w=
VmVrGQo2zRokW/ZuO9bN66TcS6o6l70yqYAEaLGRTwyJxvl18TfQzpu1GNA+7HjH
VmVrGQo2zRokW/ZuO9bN63uze4Lnmw99IoHHLSLuFlE=
VmVrGQo2zRokW/ZuO9bN6zhHFvchcMiaUYiV8FEKyco=
x2LOCSeSzacmh81ySUhNR9w5+XreI5pXDQTDZ2h9wlRlZm0n1nilVwIkZR412HMxDvSJoPfkBBhn4MVgLI7ors/3tML7Yd+6oLX9YHq7J8c=
TP9zhKzoqP2ZyB/hk4eVp5dwJ3AjKE3bduAuqPgvqjLT78U+Dqd5CSCjq+oD1f0ZsvntMFuytKQk/UqvAUPWuxQYcRKHE4yIrWtNgj+/1e4=
TP9zhKzoqP2ZyB/hk4eVp5dwJ3AjKE3bduAuqPgvqjJAEyYSNUdFNS6Lh4D94nUUUjoRv+eD3l2E/Q+p9vL5xMs2E2yAFDG+aCuGb5VjBn4=
UTxJ4jWO6dHQO8pTjqkurgCMD/1jMHNO7c5IGagQ/I2QGV7PCdztnRenkMZGlh9+0iLnOQuFMDxZCa1M85F7cg==
XX9hoBCxjod6pWwbTwYew9PA9JlQNG5VtJfkL0XPTA4=
L0eUthVnpkGsmKFAX6d+uOSGjw9k4+ECXaFBolnRCxXrkljYR7gvNUjTs+cnRe7RhvtQwTDG80WvhjGs0l3aVw==
GrDu9Oao7I2P1akJgF09eDtLRscASUn24HyLWqaEGOoLFd3Pyl1FDaBsa3nmHXJlV6TKQFpWc3mjwlMasU2QuQ==
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWMqK7Soh3XPs5AU7ubhT3vOqORY+HJbq5ao42T+oXB2T+dPZSHoCsu8Rvh//+BFVlqkbhy5clkrm5xd5xWnatOtX/i00VnO9Du8rLpc5vQP+Q==
KQe2cpNa8FkcC9SS/NMi8BFvFUJwV+XI/wdURlfBJWAKHDHHyrOU8iCWTLbvkh9K
rqA8uevZ84obkmE4+PiALkqLDY5CT7nUo6WhuYTmudfvPnqJdzDNw7liPPnKRWgCH5aS6+1HbVYGvtufo0BSXKqCmMResFIg8Yd1Urarz6E=
cr04jPiHcZs6CKfXkpLJpg==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YxTcmv/VfxPFlecQ2Xnotqt2IE52L3gC7dCe4SN49+Z4J0rlz5DNFH0zxI1SMhseJ0=
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWNJQB7DVYymMOWmjTgS4eEyfy+l4kioIRjPlfjna0D49HQWKrqNczuGOV2UnBCSpJk=
npCRXd+WLSmlk7JiNtxtm9gbYh/Jik1FIDXG9IEelYlUIDsISM+xNL1kwJmj6EVRBZZmSfp4awYJxDtGhLbmSnyPSsssdTNdjVh8miFF4Jn/qor6xUfnuQIA6ZtKmpvNSOx1PBvgevr8PiuUrmOT+w==
6r4ECPT4o7OwHqIcEmFYzlEbZOlulJHLZOuh0/zLs3M=
XmWcjbejqXjijvSDMMApGon2xDjBspqtUFw+zce5TQt7ub7089lB2nVxtLvJitZEjjV+Ih920BeA+wbO6kaybA==
8qTxQznEcsQMgFW26Dqik8Cp05AEJsEUSbVdG+IW7IfjrtNpbPkvFbMSrg7fTklWMTS1MlUC5TsFldxvdJejTw==
89eRayX3G8tCX3FDU5IcjYVpWBUTJe+6dnMemLr9pO4=
VmVrGQo2zRokW/ZuO9bN6w6POkpptsbLbDcwAs1qGzyVhhDiOEGExsweZmFRMA6uit7+z8HqafOBm+f1YAnPFg==
VmVrGQo2zRokW/ZuO9bN63pkTmxnYm4QxVHRndiusm21eM9HuqziUJfSxSPrf2PAsXwHDxb8ftSlHSZHnsh24GzGc87Dpn2aHIxSb/ojqvUGBW4iJF9d9xK+17b+BpD5Rw+OA6q5DJ7d0o4S/u9IHjFW8HcRAUi/mlM43BsUCJh/jk3jWn71snZbWPixdQAZzjNUireEtL4ye5p5yYA8qA==
VmVrGQo2zRokW/ZuO9bN6xatn4pQf6Qylq3DHGXCyT1/gtrxi1hEFizOSLgOoO67H2dMVxci0va3+/BS4a24dQs62DYcvihjvbPqFll4EGU=
VmVrGQo2zRokW/ZuO9bN65da9+cSQosYOCAUllk+pAhHrZNpey+rOYfxZixSyiq9e/vKx2xioCH8T35uXU2iNeWRXpdbAL8h4Lkvzght0U/Ts2rWOX49CLOXyoRKCpwcy8TuX5rPw+VOr42ds1YAPLFlCCg21RSbk7iu+fTC50sk182IVPHmk1sBhgAs9M+bs1klsfK7JJlGrew/cX8A5sVVCSyoYIFcZI1fqs8NZdj8zjoyXLLEDzm6KRkc5qrvSI29znlAPdb0TUzeex0G1Q==
VmVrGQo2zRokW/ZuO9bN65mTvxewxktldzaTIh0ruseAf79XDFvSH+mS/WNQRDu58Jt2SHiNf3FiIIVL9XD6qksS8Pi50Znk2FgPbjr91GE=
VmVrGQo2zRokW/ZuO9bN67BmtbRZu7DbWxJyGfNqdp2DE5GklxTMrqrBNoUflNgJ
sobCGpmMf4/g7+HpPqBjC6JAoG0FhLZpTt8WF4LoCdc=
VmVrGQo2zRokW/ZuO9bN6ycgigIJ0vi/BKT5iDenSw2GswKcw3nZbhDFVP46d9mwIKxz8tsOD+PKOJ6VxbkS+Doa2QcmIKejv2R92AsreFRo1/svGGmZidNFI7nhWcXh
VmVrGQo2zRokW/ZuO9bN6+wwJYTJogYbw0PvRmy4lbbxRYV2gypJbeoLmseomGGpvhP1RsTU2N4c3EIRExz7t0+QX7ho+8KK9sCVUVaQujq9zlh3iv0vxDOxrHxVoWL0vPQy6OANUn3YB+xIhGV3YCx+4Xg4wSM30SDGMDNrxRAq7ROxx1v4Nz9VcDQJnf3l
VmVrGQo2zRokW/ZuO9bN68W7kg6GMlDfsyj9oqABfICnFRJY4e3Ft7u0FDEeTLb+Tttpv2vgL2k8tL9C6IQypvRiZXCeHsld0iOwrv5oWUk=
XmWcjbejqXjijvSDMMApGqg66JQONXEM/znZP+hhHbvJqwnVLtBpSTFW1C8zjERP
f9qliXFiuzgVqdx2xlu28laTsVt0v0AcLDLGFGh4ei4=
L0eUthVnpkGsmKFAX6d+uOSGjw9k4+ECXaFBolnRCxVXWqXRfRFrlYkhQXdVympE
GrDu9Oao7I2P1akJgF09eIPmKz1Z36SfVzbX5EtIVBSJLXuLhRL9bU8hNSIy2ELM7gHJn+xHvxDr0YymbaxYQw==
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWNJQB7DVYymMOWmjTgS4eEyfy+l4kioIRjPlfjna0D49BiYt9QMwyQ4CP42XHTRd2Eae4u3klBtdxzhjxB2tp/fpTXxrSMhqObBE8An2UfNyw==
KQe2cpNa8FkcC9SS/NMi8I+ywyBJxxH3fLZbImuOz741MPpebUEOYQ++4urBwfNp
v88P/mqO0QCsEtt5FQxQSW16A/YQqwPQpq1pkQgukNC1qdmOmTbKBeiUamM5fkCyU04u6JgeNbqszxMDnR3gWGQltPPE/JiBntG4yiEJOhFE81/yTcpkQzySU1/dU0WkEn1B6J44c2f3ZUeAWZFpMwGnZPjHe4mEty4JAddSTnY=
cr04jPiHcZs6CKfXkpLJpg==
4ILYwbt7Vw8dM6uHbkq0vJKFyJOT6EmZCVi5TPscIMcKGdQWeHEhTG56vR6HfHecSYcaTVmYfDlfVruxO4vUILrx4YEZmPUd2JfQRcEJJDSvMDclu/6DXDm3D0QaCRqiqvrLHQOib2Vy31zzzYp3RQ4H8P1U8KU0rqQvuCGHL2xnlpGCfIwSNh8v/VjP8cnigUeJ+QAptPmy2DVB/2BwNPs8k2ztWHWvl9bc+7p1e7Q=
4IH4b6ywJwYs95/tFiL8lfnVM8cGC/TcQN6wOHKJkru7qKTJqyg+NRdMZZjqWBn3szh6PMq7v8cN3fvQg3xbZuKkD7c/LeXguV4QIOtOzQmInXNic0zqAbqxWrq8yun8i/kQI6c1s/Em6ebGCLvt3rsKACzVCUV/nEuuE364wWwIqGjKqWfzxiUAA73uNvIn
4ILYwbt7Vw8dM6uHbkq0vJKFyJOT6EmZCVi5TPscIMcKGdQWeHEhTG56vR6HfHec6/zuyKD4TNiS7umIUQ1eh4mx53BbRpEGDorZQsRxUIdr/Yovh7zG9leoCSODHOex0/be1Sr+cfB5VTJKpjqus0DNc2HZNsgg0ccmxlW6HR6l5lCNTGQD1izZ3oo6Vc3Zvd0NHBGxCrhCEGjroOZL/qmPNTCSc79RhJ/im8x06v42AlgXJtJmMDVKBFY2Ki9kxzkecSlRQld/40PT4PjR5E3/NtH1pOL/to5r7Lfk+/hRui6SIs2FvUkBA6/kIiO4UP5/F0C8bD8DS+HXSEi1JuUaz9t3t6e44P8Q70xu+QOk840HWTXQU9mxACc5PsyDVQ4GOY0Ph0hF72l/O9pPph7Da737jtPgBihJKejdB9cyNG1scb2M0BPnYqR55Hpp
4IH4b6ywJwYs95/tFiL8lfnVM8cGC/TcQN6wOHKJkru7qKTJqyg+NRdMZZjqWBn3szh6PMq7v8cN3fvQg3xbZuKkD7c/LeXguV4QIOtOzQmInXNic0zqAbqxWrq8yun8i/kQI6c1s/Em6ebGCLvt3rsKACzVCUV/nEuuE364wWwIqGjKqWfzxiUAA73uNvIn
GCWEveFNOjCMyiiJnvM3cj/vlLOzJEJeXu4Wc4MzTT9m/lr3kKqDifw8VnjgCbmzEVvoSNnOlUy5clRfnyQg1A==
guSZID0bFQuDFoWO2uxAJsjFYYfXNGsMOQ7vVBnR2Zc=
Z8EhB+ghYGoKD9XY4aLecBk1+N/K2p7q6loOj5hO/AY/OY2IChkLDqVzJEzXKrKk5Dhqc8kgf7n8kn3bYhf6mSyxjI41IXmkSnhG277VRrK9M6jwUqP0hzg+3dxRvJy/5bLZrUrlKLLAqdOB1DfhD8hInusaFJKOPu0wf70s1wc=
cr04jPiHcZs6CKfXkpLJpg==
tf1Oq1wYbINEkyucXtee1cMgJMhHf1FsUsP2LRuuwug1o39iAStOUDwI0RHQuoo1DY6kPK9KpPHWiGmnoKUpnaFv5CqtlCnc9iB52wcO11EZ+gBlPecinoTKWp2vNyQXL+jk+xFCOP33oQlYIz0BugeM/Xs8WmaxUp+YAPU/27ZVp5rbBob67xkA4H0ahEQtvyWXuaWjvb6vC+TD1+mEEZfT4zwsKh1vwbvDluhn5ng=
wyvncB/3/67oBT3vhbMVkleD3cwd9I6ljdxbr1LJWaBalpGbxaXxP/vvYmQVlTq6AXqr+pB5OJA9v+pwNTkRIUjhIPP3l7NehRhk/YXgDF5I6D1WciLFei3jd03xok7qhRg/Cr5NRwF3IWBai3fmz9CCYlyMGnypU8zhPd57O3J+PYMqQcD4Zcup/TfAGEaN0P5evWJFcQLIOV9zlKJ7QQ==
tf1Oq1wYbINEkyucXtee1cMgJMhHf1FsUsP2LRuuwug1o39iAStOUDwI0RHQuoo11dIkX7kqHzlkFxHSyD6tnXs+xhWWWFAgjgE6iZVyEvVxS3hDQ1kZ7mZO69wsx7qXMiK++axVuM7kDei6Uc8fdG2Ij3V95ndg3NGhF5c8Ve+M43nLzx5EEadj3AIL988up2jz6IXskD13juE3HHLxstJO7++UKrO3Fph0H0YgADU=
wyvncB/3/67oBT3vhbMVkleD3cwd9I6ljdxbr1LJWaBalpGbxaXxP/vvYmQVlTq6AXqr+pB5OJA9v+pwNTkRIUjhIPP3l7NehRhk/YXgDF5I6D1WciLFei3jd03xok7qhRg/Cr5NRwF3IWBai3fmz9CCYlyMGnypU8zhPd57O3J+PYMqQcD4Zcup/TfAGEaN0P5evWJFcQLIOV9zlKJ7QQ==
BsAbgDLrhQj2uYn3yuDnJfTmJeo1JkS+iXr7NiMr2ZGVgoDFcakJ59CcFxnHHC81E4rjC26F25zO4kie0jx4Nw==
guSZID0bFQuDFoWO2uxAJsjFYYfXNGsMOQ7vVBnR2Zc=
QWxBDaw3VAaL036sX4hCHMARERUPqvMRF5uWXT0klt4M8uDrT3wrTUNGrzlsT3SHynX/h4n6qICxWvRyD6/zjg==
cr04jPiHcZs6CKfXkpLJpg==
CjeKMqexO85OxFkNTLsfVe7SITCOKaZp1LGMwqVNe4A=
R65WfMhum3uW9cFR5COFLNNgF+xCIveKPUqFxBGX9W8=
wbI88h5UWpmLfMPZm1GHGsVMKwcuDJu56WFkvk/fR2TtwNrgHZQRoxBog1rgNcsJMOWUeXIf2/8hfo8KTaG/XQ==
JGZY1C2+nS9wZYWgd+gvh082R8I97omw8iSHX8Km7LmoB4CSGmPMOwkUtKpjByEk5vVvPtxTZbu3mWhXtEeW6uJ1VBaEFl9c7YBx5ZTGNMA=
SY9CIZHY29IN9pslG93gZg==
pVMCrZ7PAAHymZ70WROm/xN7uc37HHCphJNP6wBWNFFkfCrTO3/zWdRXL0JcM+29WG0o7tsUYtBK+YT4qlbtoHBEcSL+oYQx8umm33tHtvxlOnew1yGrW+9tUb/3mIzCXV+bwMsE5oXss2lYpTO3GNQd55Kh2tKBwIfi983jfE5WfGpdHOOq3NWmcvgx1IQ9
L0eUthVnpkGsmKFAX6d+uM37yNPNIFu5Sy9mvfTDYR40t895iJsTBk2DH1n3Un8e
TTmoxB5HuP9wmwf8x1QYvrn+3uJVMIWBGgMruE5M1BU=
QWxBDaw3VAaL036sX4hCHMx8zffAVdfqNc5+di1I5xBdsKxDZKivqDomKrgNbiQV42S8BdMCjk5yRAW6CwZB8g==
cr04jPiHcZs6CKfXkpLJpg==
fnnuZD0QAdxvV2PveMWL8FOZqBJQkO5fkDyErcdv3sHBCTMsJBafZRCNzddg0fI312AFmwseKma+xsssgq5CNQAjmSvAJCGuc0eXbxvMQOdAMf1OlFFfed4k7hRAM3At/KtVPJ5SelXm8whoB/FEOXQ3qFgH/HpWgizR1mjK/e6ou5uOv4f39VcQKtXRn2Jd
3eIpXgbBonaoheCPx8AFY6umFI8slLWq/upaa1Uk2jpSVyMvPJ4mcBuZLgraO+q9GQedAucc4xrSwIqyV/B6gCTFpRYHtmfOoqOLaWkwYvc=
4/4+Wm3Rsh2mkp+PCxs2s6VV4mJNPEuvR7w91QHZ557aHaU/Cb+THTNE07rfYLXxrdZDRZPikp+SWMJYE4H3Ig==
dID/HuTFI39RGoF22OwzKyXop25iN/6Cgmas1ryG/r0=
VmVrGQo2zRokW/ZuO9bN6yIQVC/ANBR72Zf+NN0mt0yltbzDkWCCV7TF+F4d/yUWRi3IdQCvPfYZK+rRnnypTQ==
VmVrGQo2zRokW/ZuO9bN60bK2UgxkvkWzml09hTN25JfpBLx03bYbZyT1mbcJLoM9IlxgO6bebtiUCLu238r87hHo/BkL3I8dZPhAAdHYzQ=
VmVrGQo2zRokW/ZuO9bN69XWNCdW2VwaznplNhiELZFhveDssDscfLsEq3UYW8Iw4usKj8FTxO0dSaukGj8cnv8+vtmaKEgZ0bN/GMY3GQDbfxr0gYg6NdbH2kpceCeziSX72rUP2GIAP/ebCA3AjE8/vyUHOlZUHuT08r4QEqVOFV6VX0kqtotk/D+bdiQoW4FGuVaT65K0qS+w4pQd/A==
VmVrGQo2zRokW/ZuO9bN61k54EIrXJ5YDEJYX7KVSMQJb2yB2/tKePc0AJNb7scfmBx3ZMDkULLl85vjDrKPDsRbYCCYbmQ4JM/pYb5gQtg=
VmVrGQo2zRokW/ZuO9bN6+4h+8nsMn2hxb5D0Q6u6aGCqIPaFsLj6fC1TahQFgsNH4kuSQ+lduIVprP5UXJaS/58J7CKl19/ZhwZDgV8O6QU8iHj73adX3xjmEJZkf6Qrfvc431ZzHai1xsHjSFJgmjI+xwBn+vfmSyEbXYaPyIavlSyj91iOeD8FqpN4irSOGSrBibcPvxEkbNEBWdfzw==
VmVrGQo2zRokW/ZuO9bN68wHZtGYQdFVE6PwKTgvaNtYzBFUcYX3fyY/6M9/dXzj
VmVrGQo2zRokW/ZuO9bN60GIVQb1dVeSTDjJFx4iZ8K1YL/MjcMgl0IDPsbhoWcM7yQ9EOiw907XJNWeGVgujqehYoLtC9EudSNuKe99+CWrrATAnvnn66j4nlkv3EcPJUeAgTtZo77f5zqZOUsiGesKkQIGJJ6zd/3K7c2P48s=
VmVrGQo2zRokW/ZuO9bN6/o4zScwQoTUi+tr1czRySSTBNwD3hHM9vC0XVvu0iF/uL9dBtNk/w6BB5ctKdmT5CcwaDY3ncMWkTQB13YuBkvaC3/J+X6jTdOr7PDuX2PSynf0+gGLE/QAUz3VFC0aHU1OhnUAoA9NI005K47zs9vF8K4GOfiRNWxWRaEo61bK
VmVrGQo2zRokW/ZuO9bN6y0EoUp3iWRH9OmX39lPFAedKJOagVu1hc7h3Pe4GIyhE4KZU3Jx0OYEExfBCrAKqagP9yem43/r6C4T8+tDACodjJey9cFkvf//RgViLJEY
VmVrGQo2zRokW/ZuO9bN696Qz5c9i0uv9aeGTx01h1hC3aUrUxbV7GyHYuGQp68o9ge64GJUGHt5FQuweqvNs7qVTiNgWwYE10vLvinIRsMYIM/myPIdDv/AqzuwHVzOOae1yPP1GqFmx4OoiOna/EGkKRt3Z8kNd3k4/rs4wwzo61sa5wcv2NX4XAwqnj1CEvFdWPd/bPz5yy3bIgVjgSZPiSvSqJXgxQGFENnWTi4=
VmVrGQo2zRokW/ZuO9bN67tgFk4kAxPV2NXuFIabsssnHcnxv5PUS7w7nqdNDlZmad2xlF197WUG6enWS1ddeO2lu2wARsOMM3olmtoDpSE=
VmVrGQo2zRokW/ZuO9bN60bK2UgxkvkWzml09hTN25JfpBLx03bYbZyT1mbcJLoM9IlxgO6bebtiUCLu238r87hHo/BkL3I8dZPhAAdHYzQ=
VmVrGQo2zRokW/ZuO9bN68mt+2TzTj2DszDWHbL/Vx+mrPtVnbW+SD1pBk7cc7rsaJwQNo4QU7LoHvOicKqoaUNdoG5e+AzVGaXRW1n1Nqg=
VmVrGQo2zRokW/ZuO9bN67wpbXh8GxRtxxUdyv9+tcnQYOPzlH126m/rftVMv5cRl/hQkptryk/t8Gtg8ajJsb8lwpAI2nvgWtGpl8TpQ+K9nHJFRXKol1tZrc9/ipu8kaOocsRDzkPn1olW6CDnbALkALXUpIrfjvDKrygdIdVqX4xoNpvqmFtSkD/wGtSGVW8x0++ZkFMLlzwBleSXIofOOFMqbdm8kP/g/2Q9cnM=
VmVrGQo2zRokW/ZuO9bN61k54EIrXJ5YDEJYX7KVSMQJb2yB2/tKePc0AJNb7scfmBx3ZMDkULLl85vjDrKPDsRbYCCYbmQ4JM/pYb5gQtg=
VmVrGQo2zRokW/ZuO9bN6+4h+8nsMn2hxb5D0Q6u6aGCqIPaFsLj6fC1TahQFgsNc8McXaMNkcQsuyQNX9sTxBDIVJELewreELhbA7ExKAhYHdGr0vUfJ656qPdz61pEMCuI1svU236YOtcqeeWw9hqHZiYtOwsjiw0R7ymDlNoj5gwm+V1FBszZXgoQ/hN6BxqCiqLFSweS/VzkreCfWAHbQNqrDsEDcEKlGn64ivJUmuj9zyfGuDZOIHE/SGBUK2SlyF9yV95YTadwSATEnw==
VmVrGQo2zRokW/ZuO9bN6/AO4eShpSZK4uRSltMUWur6UmoAJ3uYmBh6Hb4u8+QZuLnJtd07ycHQVITOJweo3B01crh9ZOyXk+RD4zH9h3dxaFHiZPGzCPB05djMX/pZ
VmVrGQo2zRokW/ZuO9bN6zhHFvchcMiaUYiV8FEKyco=
VmVrGQo2zRokW/ZuO9bN6yIQVC/ANBR72Zf+NN0mt0w5vOuC994hsp0d+uCS6/55EZLchuUQTeEJwheE06nZPQ==
VmVrGQo2zRokW/ZuO9bN6z1vYAYiDcZJ2goOT3IWOLIPUh30Y1JucFlnMHb1teNZ16yXgRYuOnoJWnC9DJL+4Zj/1ue9Mx4yCXqgEarMjmo=
VmVrGQo2zRokW/ZuO9bN69XWNCdW2VwaznplNhiELZEzh9jk6I0q3rmZW4u4dtEB5X/k82/6F0+ZL0tohkmBOkIUMP4Pr0PSa2rrEIkJpyeCRFXjMs6Jo7fo5NVOVuWlM5YByI4VbPYwOI9kC8H+zNIdR0QyalN2tczBM2yXnr+zlXuJh0AhmzcDReqsIiJHe8wIa9fruyQvytkiCOU0rw==
VmVrGQo2zRokW/ZuO9bN60CwpxhzHd5Tsu3VuWdEIGbC5Eco8WcHvSLIMGZrC4J8HM7Mhe6VWR6L/Sg/mo+5Ug==
VmVrGQo2zRokW/ZuO9bN60+OYD9Lp6v7rDnBJufgyu0dtNrYkL8H7zhFQ+vQrlqhvCE6NtoBH6ioyORLFJjNRF9SGfkFntthQsprIkcvCtCK/JhjIZowEZYnAX2rXG2bsXd3yGimQl5GilD4VC9gNoyJDrUbIX84KmcwTFd8/LRErn07610YcZNUf1UtMXy9vd3qDn0Q/AVxLd1KCmzh4jDf+6iTl3HBqq6d9N7CJeNtaOYmfKxXO3OYOtgspRP3
VmVrGQo2zRokW/ZuO9bN66jTdv1hTu+4fFiv1YBwZue7lv6Aufd7luwy7B+0aC0dbzx6VRSrf3fzINUzlq8XMNkGKWBWvxEGkmN/9UAOa6dKPNyUHrHmxW5rH1tExZwQ
M0ZySqkmhuHCw6olbCKv99p0Om1sGOCLOPcvWBGiKm4=
VmVrGQo2zRokW/ZuO9bN6/IJQworJPCLdiBBDQz9p5RwSTJBcPPTw2MHkE7h2GTjhvnVFr+q/CK5r4h+EYXiyQ==
iwvjn39WsWBJqN2zZdgrYJ/brbUvLQT8xFC2K/CMfMpSLWjSyTEJEwqWm0w226ndjFtOnyhoGwu9FfNq6tbV24x74jC3NVVQJ/zXWM50PNKF5ZjzeY6CK05/XMakHiEDBjCNUSVpX7NFuVqFBQoXFQ==
dKwZPlLLroeAXoKoRvFRMPkQmp49Bc6BILmWMD0egRbJufQJJVHeUyhmpinBOzpu7lZkSTQPR3sLPWAb1XrOdBks43Ja3veKdkPBsYEtP+4=
cr04jPiHcZs6CKfXkpLJpg==
fnnuZD0QAdxvV2PveMWL8GG3YPzBkIz9Ea9idqA0hv7KzY3K3PuUh9EVgCFxsnuQ948EJfpPabGHe6RQ1WLXqx3Sw1oJIpfRNJqpmc8NXbiDy0sb/I/Fx6BFCgQNeSfWkMOO46FZGiOPxWAfogF5t95B5JeJd/sxMl1fwroGSOQGzaf7YZCSCW9ezDLi1u3T
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YxTYMkXt8S0Nah7w8r9TF300puk+OnsqWzfPRMs3Mbi7zOrp3cqhM0qeqORamoAJBM=
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWNGuMooTRErT71B83/M8nD4aRWyyME7sQDlOs9XPKbRnkn/lNp5zeuNE5AF5qUcgYw=
XmWcjbejqXjijvSDMMApGpsWw+e7nEJCTIvfvDqrkKXboOR4vzQVwubyAa+M5U2ai7wdT1soKMjQ5oH6v9r1qQ==
7iJfWS/hi94/vke2djffqmjBjwDgzRyWSoEw1Q3z3GT4V7Je3CZ1mm5s206h0RWJN8GlLviN43HL/e8mdYfKB8xyWTX906NaD7r9udlkATM=
WTPaI3KC72IatMBY2cUf8DhINsfbwu2z6BUbAhOsimUwCOTh2mByfFmolL6LGlAzznx9YHBnysnjX5w3K0Aa4lU42GWBOTkXRGOsJGciABerQH0fIN3Cc0Ha2WQAmXrtVkuiFi7WSacqVGM92Wz0RA==
yfhcGVf2iYc+Ztxqwy9MUGl2MlVdixWiPkpdkDIaDTR2fL2bGJ0eG/T3S3mFK3I1yjUKdBI/7/TjB+C0Q1TF7A==
2wtz2EJ9gcVOn6ULRb1bGHs/k+FAu74ujznevW9tehQxxh+/BQiuLboLlLsvhekSf7bU2kLTTL5K33sDNiX0trhbG01wTa4j5HspvJM+CjY=
VmVrGQo2zRokW/ZuO9bN62zAi72PGE+cjoOBruJcs80PAY9N3iH7ke6TUqsi1sSy8D9ganeo6V2zi4SBqW2bdOnBzTgDx5DTrEDZzIkiR6xafY1QNC1k21Wx2o1UPd5i
WTPaI3KC72IatMBY2cUf8GcB7Gs9lcHGWbUjG0C9vSs70Ygjj7wUoEbxnNP2i9zrzgxlxVIkk0U+7ydFZHSoEzXRRuiyI8zt4O/5cZ2lMz2J5pBt8vqrB5dxECjlX6ZE0SioSpP6KutnXcCf1ehJKTCWzRi2xhcBQ0FshyUTLQg=
iwvjn39WsWBJqN2zZdgrYIdzLsQ825kgPBf5VIBdj3uoMjS29MAx3RxOuWvlnXiosQ7KPIpTLW0MUcNlsu/ulyBkoOXWnXGiVxFPDjplOPmOZH25r/PenV+QVxeQxMCQfVpOT+W5VTimeAhxNV8PQw==
iwvjn39WsWBJqN2zZdgrYJapEN/AKnY2zLbcAIzyrBBU1RXGfgWqmb+6/1Y8honwoq8vQFNWL5QXG2xnJPe0LBPl/ycfTdBL8st+Ep1mgsYzpmdsWR6INN9Bz4yFZESMs7wbMHG0SzC3fg0QgFp086x0icWfwhosFLdQWu1ZDy/D1nu3zd6GRjYEiiID4hWyqMGLVMlVhlgucIyj8rJvGGu4F9qYL8XJEbUPtev2y4Q=
j950dDFgNocMT/8FQS6TYJHV9Kyoac68bruP5hOu5qmaOOkbdmWW75ouQPYNKTGSSa2ykeEdUHfzKTkJdx/Ccg==
96orka/uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2HnATx3FBLn85SCdMGIOm1E0hlma+GxHkgZc93eWmwVjA==
bqFhodE9GHP09Cm0jqHUfmkdtpV9kuGe/MGw5ZaaoCp81F/rxUszv1KfXRZWtOlE3la7p6gT6SCyEt8mcZzS2A==
q4nc/jwATOMUyfSjLibfEbtbU6LFt5q4ewa9MuGiJMo=
jsE17/UlKDH9XrhQJJowi15/y5gn5lH8c7Gqcnf3Esr7fxvcWtKirtM5TT2hHcoLOOiNTfJ5a7izuUZ8eDTQRw==
jsE17/UlKDH9XrhQJJowi9yxaM1QuCYxVef9FbIoMZ+eKsxoKPzwQ/wwh+qx24Hi
AaCYXSBoNzzxOXBdbJWxCPghQQ+zxvQLtEy2BM3tYqHuDq6yKijsnOS5h2YQlWHI00dhyYcLovqVLkdh0Dy8fMQOez3M0K6+uE8weXP9Ap5DYQqbnNlIhatzkP9KpuAj
jceVTICIbdeQFZqTJKGutSjbVQ97l0vRfz6aCyyExd8BAD7ORBXAStcGQntGkH9VeVHgeQxgUAn9i5xQBjtmtg==
w07xSMqKvzErqU8Z4gNDycTDkv3aRFmhNSvV3Fxu24BqPo3ptCHykzMf9nG/CGMxQaiucRiWiW3Flz8o49yWP5RB3d68MNFb5mogSyWvDQA=
cr04jPiHcZs6CKfXkpLJpg==
fnnuZD0QAdxvV2PveMWL8CSqz+/2LSHUFrClcf5BdQrTv1c0XJfhDdpDKKPo0z0b14+xocsVY8vCZj/69cLwfoiB1FEWbmyYbrlCddxFGEsCX5QCEQvSd95BTrhq1nlZCNY9ga7YYTrfSnw+46RbFP+ovv8K0iZCj+u7EFMHJ/IMXwLlnh3z3jdyNDu7TFNo
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YxDlh4Xxnj94+dsoExgikc543ZsABYd7Ls6YBhmFxb45wha5ZOThRb9RHRh4ve9w0I=
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWO/PpcmZKW2bAAbmrDnw1SCP4uaE0ZYA6R3BnA+nWDqAy1mL3cUFeM8frCNXgKcWp0=
ncUn2TP8ZQ4fZMBYk+CUrbejaOCU8cNhJKyCBZWCqq1sY02wl0mD872qKy8RvJgnAbv7KCxyej8W9Q+U+qS+nMiBgdyd4po5Df4qqDwKnLOe/UUDOA1H47u9gqHf8WHl6B1PCla277lpLOkFu7GkR/mj98MnPUXQEt54mzwtDe71lGzby4KJ9Ma/n9OkWQnE
A4iM5LeR0j/aNdRd2ACS4ny8WZLXU05tQMpWxiCT9JuuAqjT43MG9lWrq5R0d6qpJwthsL4nn9qcoduCQeoOlw==
5REqqEJCYV1z7x5neHLGFDGAviuWIaE/TYt4LSZwDiMXm/53mOKPZnbzemXU4+GZEUcMNcyvWJGIOUQ5RIkIIpC70r0TF2jbHjMwqOoUldc=
3DnhOSKd6qzCIAY6ANKkgJYd0P/22B0l1MZyem52ut9bERvo0PX/T68xhBrjCbLsd45eA+op38niJOuRPomiESt7gvsqdzn5rexbsh2MuoA0EOCYOneAtVYTW8225GFO+VCWMzhTlT1SXl7twpHYnQ==
R6vHhJwn2j7IZ8/oBXXPlT1VLHYksWD6DKGcKNO8kyDSYJaiXzcsBEJQzsggxUu3
yfhcGVf2iYc+Ztxqwy9MUFkJFa9YS88pkqSw34PcNf4lRXLRKL7BLErDKD8oJEUa8Is5OQTKCIYC80QzJUv+ow==
2wtz2EJ9gcVOn6ULRb1bGC0c4KGSGGqyU0mFPA7k9/zMuX9TZw/BP1yH6IjAzrb0UW4BCVFU5p42K5W86y/mOUKYixfq2yNN6gEZO27U3aI=
VmVrGQo2zRokW/ZuO9bN62alG5rsG3QEZzQ33/QBje3tmhSRMsf9NUXv9udZovEkoqejbYgifjLzt4+lAxk98Q==
VmVrGQo2zRokW/ZuO9bN61IpWQW8LyV5vGxMqJtLAMG4GidKSYVzYqLlwKnkYGh3
VmVrGQo2zRokW/ZuO9bN66B2cWRLetUcWMU+aw+SZbQ=
1cV64uRoDtvn/9K8xFmBBdHLi7PMpkqFYqY7BMozZdA=
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWO/PpcmZKW2bAAbmrDnw1SCP4uaE0ZYA6R3BnA+nWDqA8JKb1hHUBhmO1q9RpqWkO65x899CtNFF6+cegZlLYKatosIHzYd1sSurD0D440aNw==
xWoGNWjKGPfI4gq8aHoTfPSftyw23aWBm0SalP6bSZ5uFgWb+TdmXVXjEBOfs4SIpa/FkCphz9Tm5ZgfbL0jqHLzP164gR1SD2C8+k5o8kpAwYIJv84ufmqQyFKhd1DZCis68M8tRgaB6ZXGCaNrCkbBbv1rEFnJ3jwN4L9DvSeA0NBccCpd8oVxmdplQ24eWXMmssJ+SewTSv3wCcPzXui4VvS88RJY8GZHoEgTtE4=
UTxJ4jWO6dHQO8pTjqkurrjGYhp2vBYcOlWBI2li3lQTi9a9ylfr2bPqUUBeRL9Lp7KgysTqDJQBOFjwXnAT7A==
L0eUthVnpkGsmKFAX6d+uG2V4ODQQv2yL6nL1etYQzYzTVLBKVfwwGviW9wMWGbPvgdbWuIi8fuBLcL8k+2CkM8xJKi/40nY+5NrgF6Um8o=
KQe2cpNa8FkcC9SS/NMi8CwZjefuYFdgIVltRQ6d/OEFpkMvPQIEkY8jmyRMDoerHhdkzdV+Z4+gMSYNTzKt6xu+JQBCWWXi1l89v4epCfY=
+oS0XSKoqGXJre3Q/1v1BlvSlGCveCkN/Z8cmI+VqTrpmsmHgDb9KkDKC6ZVLS20UIZPb95vU7cgxrlJ21Bc2ar9RFcrYmzQRZ8SjSyJJ84=
cr04jPiHcZs6CKfXkpLJpg==
nCZEvlHDeEU72IAmy9hXaHLXXyBaHBxe+RST4mPX/1s=
JsM1B8QNr50RvpRbP1YnPuFx5C4ai7Wud51VQmeOJhtTbi2K1dw95XnWrJpGmome1iYmoZa6Oc4Q6EBuZoNV+fX+bUk82IAFMAM49zKO3cBTybz8r0H5oeeZD2PG2vz9YvwAvdCggT5OaK2dzb9qtkyl9EQWU/5TuiTRRLK9wPBcfCiv8BBTrzpbXxUyEJkAlKS7V+HzybJN3Z1X6AT+PKpq6HL9uxam8gsZOZHM2/HTQ3g4puzMy372Km4u6jdZortgp3ZYADH65j98Z05y5Q==
fnnuZD0QAdxvV2PveMWL8ChOX9d1DU+esVC4Z+TLQn0LGt4/lA9B1nK95LwQUMwDyBIvMUEQynEPvkKTsUPmBA==
tqyC1MJ6XiYh+GD0a1kaczblP9d+7MbugTMefIcU5knRIIUxS/2Wcv7v0aIZ+2c9FzydBTSgZglAaMKN7kCI/+weTX/7RdLptz4gfoDeOVA=
2wtz2EJ9gcVOn6ULRb1bGJbVRPKXqKnqQ6mDrr8yTxwFA9NUMvAWHGQpE/FJKpCSlbP5Zg80d4pY2gBPsk7i8ozLuZO1ozYdjzrgJw2U5OUEKIiU1L82Uq2rBkRVdg0FCh+0rlh1SAarvhCyIPm4eg==
KQe2cpNa8FkcC9SS/NMi8MCNQ/S9KLk1s7xLXNfFHdSzUR+lpVwNBVZYrPMpnyol
oV6EeCQGmWRpCjav7p0xHU9dTzjHsDMOBcmP4S9Cd0Sm/BfUaDvQq6+oeGDChPW7TipeycZUvdKZKFIi70R6ce9xK8Y1ET3qsvaYpUbml/t0t7fn8Z81Ufs3uMSqjXwn
cr04jPiHcZs6CKfXkpLJpg==
6r4ECPT4o7OwHqIcEmFYzuoVsBFhqfPJAaTURpnU6VwScF3eicqvf7HjZ11RI4NP
fnnuZD0QAdxvV2PveMWL8AuKdHixQT66Gc00Gg1vJS6+GO0xBdztvdUhCI5Ge5N555Yujja5lRVAwH+nvKDo0g==
6r4ECPT4o7OwHqIcEmFYzheDtvHlqty/0KdCgKl0ylz/1KEPPjnNCy+Qa3YCQV4ej0URjhxYyA78RnBZQa+b7w==
KkG36smI6M1sDeGTVVD+qSP00dlWGnbBakrMMitnwAHUW1Dpt7HTXNcTRJlaQP8kip102wRtA7YBJRxVLYKDJU8D8qE4aeWEhK4dD0Pl6fVL3wtOaxsjGuUlU3uOMl80q62tcnhnh6ZpLjlBbduGpw==
4IH4b6ywJwYs95/tFiL8lY1GyBaN9rJuTeVxWOfmJ6U=
2wtz2EJ9gcVOn6ULRb1bGM8IQ2dJE0FhTsv41jhWplnZWgQQDp3w/UtYWI2rgs6eeyYGfdf/TyqbhqX4p71ooQ==
VmVrGQo2zRokW/ZuO9bN64SEuusKjyuHabj781H+tb1pbX8IQ6fviKyAJ4bIwo6f1MEOhr9OA2EPLA0laTC+bQ==
KQe2cpNa8FkcC9SS/NMi8EFKVhLSE9F1GFAOmsqhoz0nSuR5P8d9BeQpjUGmCKYl
PUlTSkp7cRpcs3JwkQy2WnJTeXdbhFjvuSced9pxt6YzgizBmOcyjfpim0HV2MrFzan/z6jOh7I71bA4NdyyuRUOhVQJVxU+8UkcayIiIfY=
cr04jPiHcZs6CKfXkpLJpg==
fnnuZD0QAdxvV2PveMWL8JrP786E2VWv6OEVjvqfqal1F0tGEw4g6I+m/uUhNjRha+6HO1sT2iO4abtaK4OE1Vy7eO++Khxe/SuLdIKHyJcUbwrJ8UwpyBO+PNDZ52RrEVi8iM258cNgoOb0YAZQfN7kK2V3iyKgd/GnMPZXMTL4JzhUkcRyggyZfDNgDqT2
XmWcjbejqXjijvSDMMApGmQVBFK+3Fu7ffDX8KPyOyo5Q0Ti2ZZ2YMkf71vb/W909tViVHOCaDHTsuIQl/bZlA==
HyB13FOAEbSI2KAABytWG1lJdYY/yjhXtGuYXK23U9uctTZthkax3pqCq+KZWhToqgQK7rULc+rIh5RV3cT5QA==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1Yx/jb+vZHJt3XPEP0sYLVm5vGGxbG9PnkJrq0RBLRyPIHfCkYLqlrQewmKTeUugXsTUbZM0+Bq0egdvyjbtYB3RDS3E8+1Of5ENemfFFdPgZTU4bGrWNIhvEpJReOGDokjH++X8r7oe9AMTBA/AQnDw
ut2tmPKYoa0Hz0cuVsUj3qcXVeFDr/mvvHeu4hSOYIh9yLoIX9tq9Y5O/hZBb0tffbu4/T77YQFbF6NFadqzOjISdrhc269PQWx3OJ7ouTW/1PToQZX1+XjOsQbRA6FVDFry8tD5zNbLBVLnSpaRBYyncHoM/p0AK6AxDDXFQ0s=
ut2tmPKYoa0Hz0cuVsUj3sGyPnE6nUmywzlUF1eIcgMYiYMpPOa4pahwX32jHUUbAHbImsTgL9Rk7Q5kcJIpqFEt3V081Pokv5C1DXYg8pqGB9PcgYc/0ZKPNh5eLzBu+Y2u8nxkPk+kysiE08xWJ/yoGtaacIJybZbO95Rb254=
CTDlCq/Yx3kXyawzsUjqPn4DoEOXY94GKmJFYozlJ3MZVnazWs2aCAAG7WaeGpIc1rom6k73cpvAMPH+Q//OZpGilDx8wm+pDjOdrv5qwBM=
qgvPLYf8+6pituXauG2lHnpUgYTRBVrfogZrz8+a40teOzfvu+2n8c/F+VGRE5UBE+95iEDTw4AWhkst55N38A==
2wtz2EJ9gcVOn6ULRb1bGC1vdhobTwHQicpopnpHvZykrJyTIAmAai0BhcHk+7gzy73WaZ2MEopQp2fV5AohLeqaAoV6nx/xVq+kH9sAGKaH4qZ78s4pETjbffhT67+2hs20W5A4KJiH5y3gyd7fe6NKlulpdwtFzGl88VxNvpEEnITo4gbXmnmsr8ygIv8n3g91w2QrdIzkQn0ufjy3bw==
GWDYUI0c8Ct3i6L4tejkFH+T+usUscBWHul4+WUmgwbOzbAkPgcaVWU00rXS/6TINxRI9WPCNgbBpH3y0BmNIlDXzXFXd8smuo4pyHtd6TXp+IWr6p1Yms4KzV7K+7d9
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG/aec6OCmYKY+09xxIr6eMh2alPog27Xzy1z2oKXLS73HcJeh1hUDN7H85yZJB5KxuBlzR2QZnnv/WK+a3HqEG2/aHMlFkAVe3Esv/bm7MQwzNHTVwwyX4+6N+/zduqbDASrbgp8JW6r5U8s+FwOGJKV3Reqnqs+/XncY8o8wAEYx8at6gS1KqPmr0887m7q3O+Ee7ToQpXAfZjupafNVMg8Y8z1mpq7au2
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG/aec6OCmYKY+39fBu+1OUNo9hSWZFf45Fcr6iPppgD4DcuTJOEcdbftxfoxWo+dL7xmuaL72fiDyJXXIbckZwwxve32cXNdfbkRrzY5+C6FmNBvbKFIVZHoA==
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG/aec6OCmYKY+1n2xOSacmX62EVJC46g/rjd6q6leIqAfA2wvM9hBNUnsUjYma72h95TF0VScg5YB/mF3paIQlxoFvcT9133xB0byBDM3NyEvDFj3YDOsQIzA==
LiVO4OAZQ41GCrj1VFqy40xXTJtMuJpqKqDGzO//HWCYHnWQl+/6dVTnz8Uv/mP3KmU2LGm9S9Y68bkk6wUkdrOAEmwaqRGxgGr4fpcThJo3C8cyEwdyh/XtjLf+FpGV2WAR9PWURWOjY+3Dsv/AZJYvWnrAn0zEx2VtrCjwEzW6kWWTTynhagWnOHllrPEmWkZfNHCg5BgDtz8zp+oNUA==
6S1DTW1TCVbUfeFz1/zAP8MlMUQ+iq+gDP31FgA75hZF23hEP2cwNRG64dw0lVR68qDE3/oN8uznLfLYYOujJRyjCktuJsEmBB7fgUvhf6KfqI2UVTxHqF9WT82gADkW
fnnuZD0QAdxvV2PveMWL8MnPURZP7EzUIFSNSkR/DP3nRYXb0fUDE4U7M1r3zRQtQl7HxMPsKK69DQPV524wlWgMtz+Ny/G0Pe5DM3zxSvEXMEiQRG9A/Zj7S8KL6NnajyFMooBUqX66G8CR8bMScicsJ75E0Yd9Cze0RNKU9Wza3aIdiEmdkoJJHprWviuT
oacxXEoPih9NKsd5qduwcBiuy7u2Ow2MIJfCF1pBvq+l5eyzjf2YC17f5yyPsixULDkW15S/zqjX1ADtgbpcxaPhfDdsZoOAh4jgcFf2hLfK5yksS8k7tRsztEy/dLNF1rwP1aVLBoDTQCcVq4DrJQEM40DKF8m5PpGaChnts2mp/Acv07Y+1SGRblH0AiyrFhwdzM31v3+snTzxybhzqh3fcofAFa/1YdUVAUvETCuO9MReNXR/ti5B4CEPZcu1CVDXm0iCcoCE2zgQZBAFl94T2Cum0QSYBb0+iro9jd/nItGRClUCZa1bTCuqbX/O8d6o77kuW416R/Ylj7EogtYaTw+Nj7s4g7j3vFgNlzDarsz+8doOepdfvAEN4+BOfX0kFvzsGw+BZvhVQsiFdYe5vtFiL2iELYzBnoDcptzwmqgcgyDVVOsMynvbIjFPM1zF1gxYKs63V9iT5VO4yFXtAf87QNjvvyitSpTdIoDijHo5xNeCCIz586+rNedRp/92kdW+Soi4SKEHSO3+myTZEV9rgTwzVT+nb7xcD7j/TBg/LIl1rnEh9xXfubdPmGA3DVwS7bWo3OHWlBhKyvBfqQcsIcvV80+2O3MHeYFuF28roWFw6QhGfFGcHoCrwgaukoJVKuJgHNrirJoelrvpKHC0QNwVRr73WlZSwyIh45/Ilyg3N/Sx6JET5iz080hktNKrJLUui0w7UBjTLGcQhAOJ/ExFiqD+shKGVW+Omn0I60Fa1AL3048OE7P+JYJo3d2KocToiEQ7EDx5mGzt2Aof1brVNuzkaBxmCmB8+pgf625W3oBZ3l2T0XtHI6DBqAddf2ue2yWW2VErfnsjCHxEp9RlGPsrJnuLq2+YMvPyH9heuL9TvnMKPKHdMm2pOvTac8wOO05I+o9tbwHaQrrzYs1KjvW8Ogl3vmYEtvi999H/PJrHRNdvCZOvfpcbLd306BhEpxAXscITxTqfrXc3v9YpzMcRsI7mGnLJjgioA2RCnpEgXgYsPiNM
IL9sA67H0z06wFBWIR8QkaTnKJDOXWBfh9EK16Yt5HjpiShKLm24lByCsmMOp/+nm6sbfuAiTHANiUGCrj3O6YJUoGlXCUdJNawa7R4ydgTXxF1mtteD59hEDOyF5+eaneP8lM1d5A4NQGGoWiVG8g==
NREvnNIDTttHan/FJweGj/msBpf/p1aKu8LZw94+KUqSn1c+F+iZlZgS/VL7fr/48X68sN6vyPH3CMR6/5oTo9qAC+Aq27vo62T00ZLfVanRZyH61IW97E6RRG1aY8G9PylFnqmEkg0hwE00IeHsj8B2FWSQPVs2IQsDmtv2d0jkn+EfMgHJJpItKcvIvvSjuTUXyAh+teqKf6BoWr1i9HmflGa+pBxysP8DY2jVav7fOiF26qxzGUTuyAkvh4bBiPPOkc1z0f2Kfh54NmOGmQ==
yYOGmvXvGt/cRLLVkO4eKqa+hM3PuRZfD7b8rMYq/UT5o+JnFaIJw/yVufWRJ3GYE6JJV8UyWObkwgX0nomex4N7hMwH0p/mvytxHRM0LsXoHlzxAgZ68TlBXX9wMqO+
NREvnNIDTttHan/FJweGj/msBpf/p1aKu8LZw94+KUqSn1c+F+iZlZgS/VL7fr/48X68sN6vyPH3CMR6/5oTo6pzILMLc9S2Abfp3x11erswXy+6aKQxkAOV3JNDJy/u4bISLULyNHieYZYXNxvYW/Dtf+nQ/d3q+8B6w+EKAiJUPNmPW8Mx5AGhPkKWWMQsz7ioFJ2CQjBvlTk/2hfy1MbIqtmWyx3r6g2Vvg1+UQ4ptd3QByZwW46+nwoFVVe7u8OdItBRe7okhek+hhTpiYfdw7mDXnQfcpCHAC7y4BjGXo0CurX7AjM06m7n6D1EA7tHc6gqHSOm5/cGUTKXig==
yYOGmvXvGt/cRLLVkO4eKqa+hM3PuRZfD7b8rMYq/UT5o+JnFaIJw/yVufWRJ3GYE6JJV8UyWObkwgX0nomex4N7hMwH0p/mvytxHRM0LsXoHlzxAgZ68TlBXX9wMqO+
CTDlCq/Yx3kXyawzsUjqPj/1UgvtLUwbSocBDSTGdlQdGlfuxYW1zktAmMlWajLEJlycf3QM6d3m2/8WV/7qap+0+9bbcfKO31Ha3+gfc0v/wa//RxuB/CTGHWThqgBLKsNaADG5PBVOlQNWxwKSNUS+55fKYqn7UbOGJUsBt08=
iwvjn39WsWBJqN2zZdgrYH73io9UFYsVQIpyJHGNPolTowZ3ES6qaIlYZbd0+9c8k/3/kVFrQkiBM1cR8ZRiGoxZK4ShV6FY0bULRqyn93CV5P1j8chjs7oBotB9I/BtcUB3JYzsnV+37ppDY6xcDg==
iwvjn39WsWBJqN2zZdgrYJapEN/AKnY2zLbcAIzyrBBU1RXGfgWqmb+6/1Y8honwoq8vQFNWL5QXG2xnJPe0LK1Ma+Uxp4BV2qI3ukXHtQYKXoJzDPI9GCy7FvK4NRqoVIY2d3UNJZ6JrGvDp8Itv8UtbTtOKRZzMGesfAFfpr8M2F7b1sde3FoHIbX53bIajKUCfv6EdR2qn5YyhmO/0Q==
96orka/uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2HnATx3FBLn85SCdMGIOm1E0hlma+GxHkgZc93eWmwVjA==
6we+bQ+BNhpl74ICwbzDD6SJhA5UxkUBfCZmu1pDNmRCVuoiUdtV/LjGUcclBb9x1lO73/pbYlp7Qn7laP/ALybE3LW0N3KSwXGpr6c9FY4=
cr04jPiHcZs6CKfXkpLJpg==
fnnuZD0QAdxvV2PveMWL8FnhE/Qbu1TUcwt3ycoXzAb63R8Bw+Kjhj/s+Ugn6uM2VYtJ5GD3NvbvtZB/8CpMknz6mUrg1bAfFvVuTUch8Fa1XKdHthZX+SiOeT190cbuzf1PMxPOpzbt2lZhBmtWnV5tc/shXzdOMbVzBF3CVbwpT3MP6rpratp4mnHz3RuO
SE5xU/Z0JSLRg+BF0JZlQ351DCSneiU0Ro4ul8s6YQ0+e9ClxvBwl8Z8jDAAh4Pw29EBMojpWeiQDQQ3je1JBQ==
ncUn2TP8ZQ4fZMBYk+CUrbejaOCU8cNhJKyCBZWCqq3ZxbWlzmOTv+kBIJsZsjljcT1q3oO0cOKLsE5F65U+psAkCkXFw1+rnPdHpl45RtMkIcHFBbTnubK1Yw2j5SiSMTQaANcjGIXkA5pbNDFojl1kkOkaPHt6uO54XZwjB9PlZ8XdctMBp+wpTD06crdB
R6vHhJwn2j7IZ8/oBXXPlciOa3G4bauQKWbklU12JP0CWdxdVaZIoNzpWfrmbe5i5gswcTWd6DqXeLXmYLSydw==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp+XNGADM1YwZ3X8erO8tF+9rF+ud3CmG2DzTMUCy19ltKZJBZVeJ2G3b7Y/tUzeVbHaaGaNkyQryOXyVCJelyU3NO9pBJXZwU4csk3bxLN74sMPi17loDmo4qNbgIL5dTT7IV6iCpcJf45etCMNP7ojLR/iLdfFt
ut2tmPKYoa0Hz0cuVsUj3l2A/S9h8YCNZoTpXi3WyNmbvxKV9hRgROXsqHqZmvm0sTMN+4iSaKr2yT/X+fgBC4YDIVZ1uBFHcV7UgCMzOjI2lx9+St+VE5ivldn9lPHV3rb5YkHv11D4TUNLk3DCWm7kTSih4pt3xjcF9tbSGek=
ut2tmPKYoa0Hz0cuVsUj3iSUOfYfZogjpziC8PUGLSE9MjZBw4GuEUF0vb4KA4CRuxc4tpvehR3tbZvfDCzpxJksbJGmNWFIh7s9WlNnDc+qD7wQpCT3NbfBgRmblirSNOVpyIgLflRUGrvOFeOG9zFm3PjGlOZ00Vv3qWkURL8=
oF+52jOqU38B3IbYFCrd4N3GYJGn+k9zqnS5QNsGjaRnqfzqGwgeL+xZ/I7WiPbOLIGF8wwQthufZuWJLZ8TV8PVM+kG0CKewnf99F2dx5s=
p4mlb5HXUU40EYWFAnjifyb31sUX+0BXv/YW9j2K+gI=
8qTxQznEcsQMgFW26Dqik37xPQpnAepb+3VTmXSvTHkBXZvjIZwIqQeUzzujDsnU8/MAPAbj2oDa9K3AqwPTFQ==
2wtz2EJ9gcVOn6ULRb1bGDulJXIx4y56v5IQGpDjYFZ136nD/ZkugeoB6wP9mFEheXByEOtBdpbVts7POYAC1Q==
VmVrGQo2zRokW/ZuO9bN60HnLn+7qb3BEYgduIkYBusMNq2qQ2m7PTCE41vqIcK/Cewvi49S3FU5bVmsIU/TRg==
VmVrGQo2zRokW/ZuO9bN66B2cWRLetUcWMU+aw+SZbQ=
fnnuZD0QAdxvV2PveMWL8GzimDATsb9PCxhUZX36WPceYPd8+C+DZiTdw0oWYeDzPAREthfc0Ab+8X6ybl3VEmmQvWGs9zAYVneC2Hy2egkTCe1Ob78xdnB0S18HF60ZIM1v7YQAQ8UB+CC4cZs7fQ==
AaCYXSBoNzzxOXBdbJWxCI9qK/O2dxQuwFCqR22/ccmrRlWPB13BOQzWf+aWkGS+2+eb+G2UGJ030Ldkc/TRa6QakPcSXSNOI3gUmbZsFE56ZNHp130Cn7JwRwpSNvyF
Igyj+TKK+I9SELYdi+D74wrFQ1TlNAWhWGzDssoXLbghxc1cj/mwrtUBlQ6VRLTuoSRRar3R+eQrcrTodxnolxO11AHYzchAkrT97uXxfomkpOzQL5Tmlw5oI/hsnk0R3C+lgPstP5/4bDc90+iRQT3cMxKnuQv1rM9z6oW2nPBssswhEAPdwxcmplZu4C3JnPxdZByVx6FbRN2Jgg4Y1CUhjhiIBddhAyjAv1YWNpTM8o5GlDeqrvWm2293br1F
Igyj+TKK+I9SELYdi+D74wrFQ1TlNAWhWGzDssoXLbjeoHs/8Mje8tsYdNHFBscqwQug2YW9a6jBvQV2kMslbbKaz2EQLgEjn6frBGO4TfxHRuA1CCfJmWabVkIQMFxrCJix3c+0lMgO1+8zPIjvrg==
Igyj+TKK+I9SELYdi+D74wrFQ1TlNAWhWGzDssoXLbiZex8VHIziY50edMtwBriCkbhwV2pZ9K3FDuHuJkHYxeLxgByj1SOSg2vK7OLlpEhM2jDZRUpXVynPlw8R1bP7ZLPJI+hMXZWTM2qTMVW4Bg==
1cV64uRoDtvn/9K8xFmBBSyIwLLAyZtDmWjNCGSK35oV7Lln1obVdrK86aC2P/5d2IugIo65luFTN3ITzWeIAojASipLuDAxR0vKGzse+0ZM659ojBqm1tuvWsd/P5Hs8sc9RblCikWUy4X3c3w5R9/jB0lLIJ44vKAW2Z/MoB4f+A5ULgHqCz5/JSrpUeMfl/E8YVza9ME/7/ufufeoNA==
/wrjOJbIgR3iizz9ZfsYFV1S0QEoNDYDB0tPgYYyunCzrR8+mwbHh2ZHlRO+dgFF1df50fLmTkW5bI44PHknwmKwbKoYj8Y9Uyhuh9nMKzL8yi5sZyw9SFrwXay2nHnR
fnnuZD0QAdxvV2PveMWL8DHcrBrw7XfIoGItmS/X1LRvez55+VhH4ORJHoks3tPiigwsWjzGIQ1+EqGmE/pzsSG8L1Qo4r3de+ZwnWu4x5aYGJBCnAtBWXOAjrBM7bRdQX4XYwovgtmfpuO6eZBDlcrPlsAE0RxjrJ/E/BsdBTRGuen7gVcgLjFTZvWMO4Fa
oacxXEoPih9NKsd5qduwcLPkuMecFSQLme+U3RYD4k6vG2vB69hZeZTj75RiG2qUS2vKp6FFekTp22dTzpmqrhqwF3gZSut9skRswVAOd+ey+p8hkk31WVViZKUsvFoZcQzf5qFZ5bMTM/a7hA53WqJlzxxMkdA2km9UpRf8a2WRvbBa6KD/jTkeYiZl/nHyHjmA2tqxhDLike6xDAbA2AQYYTbkiirIVH9/A+P08TmTNHCZUryZAOMBqpffFuhKa4uoh4D0WBbjEPrFdoiEz3ocw5bKhTwdKD2RQWcIFihi+UnmV2ApR3o26gPYgi6HRSeiKrZEwhcp5m+whI7lnng5/abuOGGbabfAagwFRP8HkguHuJ2vfjmYtJiVXkgrpjYSJsDZHFwhgfPxj9XqVRNzREoMxO0S/b0FC90Z6w0r1eMRmzBF5N2Zn/4JOzfvVymJ+MEoKHZyQjjwZIIOXp4KFKnmvUZ9q4C//bBvwEaBQJ6Qteg7RZ0QQkafEG/NBncU1vOMCYFIZTOG/ym+H39xC51Omll5vt64U6rtJO7lsIO+WKd9WZAUYATPv1J1g1aRzsJycWilmD+jWXpI23ZcbmmTf4VctIpeCNZwnm+aQm7J30HLgU2PnkluZdq744bQ4GCZQVgHkLM++NGVUmDB97Rx/4FIZ9i83MNYpndJPYOe2yYnQ5vThEHFeanLo115DYYct09qBrRVGeM9hxfN7UP1MWDKFeAbZF5flQE=
nPNZk+Xvg1c6GZFzrp1IbMVt0EpHjdQMD/KiHv3lEICoTqIbAmvUQ+gVypzCdBB8Gs0AbP+Zh9pMLpuFBMJVhrRL3RKTfSSRfVHFNiMAjiuK48g7qWvs2jmegZXfmVGc+gXJ9imIODTMBbyPmgyrR0qZFdlSN4+ocHLB0gjsQGmIRDYaJNrNAnS4USkTNOXVJ+CnobHbEUrDvenXe4GcGwb6lwpI0j1vr6tVraqgemOc+yVhnFDBFX0eaTQPMUsDqeqEbxv/r/mhMEfOmRGhUA==
wu62rpGT52ZTxeUUs2GeuGgAZsk/tzh/isMkRRQuL7nq3eaiw1Qb9M0+Qc8KElN+7mEiLyeftYZBbZDOnzNciRm5TdJahLGV1drbGS1rn8dSqfam6zfdyDZ+0qHR+jnX
nPNZk+Xvg1c6GZFzrp1IbMVt0EpHjdQMD/KiHv3lEICoTqIbAmvUQ+gVypzCdBB8Gs0AbP+Zh9pMLpuFBMJVhlpvc3VMIX/ToG+YV/rNHgA6KSwDvFN3sEa/wtjnlB7Gwj6zOH2itskLF4HrIvxMLthUmGUfGpnVqtHOpKzBOhMdQMK3ECYTLkqJgqQIjZkxcxvKH33BB8iIKHhbL/7VeuzthB99YJSe3mQ0vuX2vvcBZTIlX/khXl8eo63Qod7ozf7o47f41YKmUdwsO/JMXjeiD0NMGOFxwR4AREJ50Invb5AF4D9pp2kJTvEUlKGD+L4b4hSYjM37qFKD1zXD1A==
wu62rpGT52ZTxeUUs2GeuGgAZsk/tzh/isMkRRQuL7nq3eaiw1Qb9M0+Qc8KElN+7mEiLyeftYZBbZDOnzNciRm5TdJahLGV1drbGS1rn8dSqfam6zfdyDZ+0qHR+jnX
8qTxQznEcsQMgFW26Dqik37xPQpnAepb+3VTmXSvTHkBXZvjIZwIqQeUzzujDsnU8/MAPAbj2oDa9K3AqwPTFQ==
2wtz2EJ9gcVOn6ULRb1bGDulJXIx4y56v5IQGpDjYFZ136nD/ZkugeoB6wP9mFEheXByEOtBdpbVts7POYAC1Q==
VmVrGQo2zRokW/ZuO9bN65CLqRUEWJ03MnVfT48m2QyxHgYbgNM+mUWp/RHlScL707Hwd5hAXrcCQuNOHzWRmw==
VmVrGQo2zRokW/ZuO9bN66B2cWRLetUcWMU+aw+SZbQ=
iwvjn39WsWBJqN2zZdgrYG5NBDXw/UERaMa5qn6uxHIlNsNh7PeHEY5YZ4B/EHd4pgIscKVIIX7ioUSholIaIyLKidrEOF20CDJX/iz34wBbW9zWqoCbzoD6tzk7oYnY1Lb5dkZX86F/rOGlcmjsIQ==
iwvjn39WsWBJqN2zZdgrYJapEN/AKnY2zLbcAIzyrBAAFOSsyeU1IHqhRAAJmxek18L8hhYV0nclwoNTInf9BxJ1mKeAbWt9n4txx96fjdNoTICL7WaSPRAd+PHZ9Rckg0kFG02IFUMdzt0r5RApu6mM0z1QqDZmZc2kp00MWUTfdnwFkK6MLDk+Drcqk5fnWaio6MEpLq2BY4/d9cl99Q==
96orka/uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2GgtWLCloikT548er10NVqyOU/URIs3U0nX+iki5Rj91UImIzSUQ3706pgDdxepy+E=