@@ -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 / 1 DQ98p1csw9A ==
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x / NqQCTep2zIARzdXiKXPh1Fe + M =
dBZyCsfrbwqvA0sbdGrIGg ==
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x / NqQCTep2zIARzdXiKXPh1Fe + M =
n + 0 ptngHIPIjFuMNQ53bfoMbif5SSuhU + ED0z8LQ0uRP + 8 tAmQ / sx0zSKtQtV + DZAsSdFCQjtILVBd7FvDmtwc6THtaa0pvFowRX + Q + yEWI =
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x / NqQCTep2zIARzdXiKXPh1Fe + M =
PEKPgJeDDCLnL9UcS39EYQ0oxS0YHncLtyklh46m5EBkNzGCoSotSCFeO4A9wJZj
I8MGJUwtjfcKc5w4E0SmjHtl5KRuv0WI7NyW3SlEwCrZmcmaREiC99KS4CzwW5Su330khbLdQaeuAWr4x / NqQCTep2zIARzdXiKXPh1Fe + M =
1 u + XjG / 2 + GSQRv6EzCaWRQ ==
I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir / P4mdpfwDI34s6 + 8 CBN0
Z71ucSR75ppLp8TcGPXjF3pMbrAmHfUi73meeu5lk5g =
I8MGJUwtjfcKc5w4E0SmjHwLsErBQ84ek459TV1n0Iir / P4mdpfwDI34s6 + 8 CBN0
+ aWWMzKsJO + aM6tUDo7l22gaN / EfQwY9pVk1jkrGHubq5BMU7tPycF7U4lfA + PnV
NyzlU2YOTFNZFPd7RK11YaUw7ZYsBQH6PJOb5a5HaopbJMLTygrp / eIUmAMGN6Od
s + bHc / 90 a3lxFTPvWEu + yQ4hdETfvFmr96jd16JVhvU =
a4WDhREt5YBbYTTI0 + NOTlxdCabhZWLzl3dzPJCL2ns =
H4fJMREGje1RhDKY1u71WkFaRhA2 / BXughjkfaZp1RetweG / KCGDvlR75NN9AWxqG7njwjkItebPDjCvvD0ScUXpMVMO8Q7fKdfHqxQvhc0Qo + XFxK2fsZP0OPVxNa30
agP6Y0IXgzGYLtZLVcCCZ / 0 T599xXC8rG / FDWEro2DxfJQNabVUQQfe30RgJll2GWgYLMccciONnZHIUS3Z5qWHn2s7WlDckd + TogFxnamkRlczRvd0o9wecbthheLVo
I3U + Q + NUzPWPEuq1msm2jktlvsiPJjAhTZasqurt + e02ugu / S01xy + 8 g1TfxXg2xBw7u6ZrdCIKv6h8lGzSaB2XtdEhETr84GetEdGL9JNROgGPC7MQ7C + tI + RwFXBStB1 / PylFqV2Y5eewvjz6yzB0KARJjv + PUr3VN5C1ldweqNOD6WfVOtgYZlJOd / RKai2gm1Xe / 1 qHEsrMqBKfzR0r88ShNiOdlXNPN5Q2Kc + 9 CXEnQQ5w / 3 oU63fxP1wk3R02xH78wobUwoMnSpGoiOFRVJcXce2 / cO / j80Cr9xp / Bq36qcHrFNfxxLOo4NoQeITeD12nvkWwSaNgmpkti9tZqh3rrD0bz / KPjsePqDqaSBQuy8Z + bZn9RP82p + 6 QscQO8YmQ8zBEN9H1QouaZMs033 / PTbriEeQYkdZyPQmaWKMjODPdHjGM3AvUXrex5lNXifEog6jVp9jpCvLXiQWKOl6vCXdhA6N09FEV5 + hc23vD2eelgSUOeS / CVWnQn
9 GxZpCRwMRDPejWR2Vvf + BGs2TNDawMKvXw7wkGFKycwYV + KrGJBLOWE5ZKcXjfZ
hqlhGn9T + umTkW8M7AGCyf53pAfC7nEQD4HNVdEJQZLIkmHZl8U57qY1DeVTGYl + nUTy7H49ZrUNzIpKIAr9zZIIyN / 9 N + wehqLU + wEqAEsnKcNuw / Damkm1gJmpUF / q
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YwSw + qPU1x9H7h5sO7rqpwAq9aEd9 / ZDyB7sxwH9WQaDw ==
TP9zhKzoqP2ZyB / hk4eVp4PgFV6qyVcVcXyg9pUYTH + fe1NKLaf5spkcfWXgRsYJtnS4hcBQTfomcVa3NGK2kw ==
1 V2v8QerKOmubvSxgB4eTBhWeQzn26oNLaz4XtiKd3AdDQBUXiqXQwhmu5WlhFn60xMYWLG5JhZsJWdFpyqQ7A ==
VmVrGQo2zRokW / ZuO9bN6w0DuXITxu54bKEKszNtCJvIZ0v / QRc2IeaSOENH3l9T90Rkz5x6Un2VmLIOzr8dwA ==
VmVrGQo2zRokW / ZuO9bN65gGPMYTOZHI9ZQoxsnmP7KLEtSB0GLS5Se79m + TG2t9135KBsD2gO3FZdgx0O9OKmGhezJAz / k4uf64WYthAg9CvHenbGCdg + rCL1QdVGZO
VmVrGQo2zRokW / ZuO9bN63uze4Lnmw99IoHHLSLuFlE =
VmVrGQo2zRokW / ZuO9bN65gGPMYTOZHI9ZQoxsnmP7JlthBTUL7R5HqxLcjsSXIrwynkyFYqgigXe0guno1SD0MxRQkoinrozEUjd2i76KQ2FdVaMOaG6NgLEeroNbqY
xWoGNWjKGPfI4gq8aHoTfCMtL0f3r / mGFy + NqqYlupPtN4LM6Lh / S65ElrzIM2mEFR4wbzAXWHZrnhVLLLAO0g ==
ut2tmPKYoa0Hz0cuVsUj3tMSGh1ko3z0 + MlUSmSyMwhIb1zJinXvIFDxLfLhTecS / 1 MzMv2RHX + TvRordfgZoA ==
x2LOCSeSzacmh81ySUhNRyMnvRWiL5oO6Qgq1srO26J5oIdOF2MB2jFyE3kJu + XCO3xi5v0zS0Bck5oPwGmqdg ==
5 nKwQL / 1 xmQIH02KLn2uCz4YF8qrIN87bFE85HkLc / i7k2M794x2Yq0LfVLigc6ht6OQMPr12G5ehRdntmVxAA ==
cr04jPiHcZs6CKfXkpLJpg ==
k2Zl28bOLN38qJfNGTaCZ6rMM0mTyJFOy3hLy7u57NY =
yfhcGVf2iYc + Ztxqwy9MUIKrmif2LWU + zznzn9UpLXI / s + FPgY2 + Hxtx2sMMpbTlTne9WXFpqgJJ6gPk5Wav9w ==
2 wtz2EJ9gcVOn6ULRb1bGIe07hjE + 74 SGaG0w588uApK / 2 t5XjeyKC8OdX + 1 C8HjQ + IfmVBZwTDF0pqgdxhjkQ ==
VmVrGQo2zRokW / ZuO9bN6 / lqCmGJfh2uNEvtBuw26X8w + 5 enulKar / ZSvLijxaNb / dPvHp6PgHlhD6KLaQ5LS4HdQeIvfc9DPai / jd4 + mwsBcN1vPq7nE76tV7UQ7HVwLJrb0xura69ySsodzPM1j9yiS4WA + QFYcOiZSLVhiLqfCr9XBVFfJx44SoYr2facnIdAeqw2baAk / 6 b5GJTW0bSxIFm9YutewCUa95yzA1QYUb + WlbdF5fohXe / pPENEyoNRGxO1JUaGh6nK9g7YnA ==
KQe2cpNa8FkcC9SS / NMi8CpV7JOOSbLjDX5EVV0mMeZBU6EHWzQukb4HO6oqSoSn
GI0tVzKIRtvBR9LqilOl4U0EMIK6j0pKu8mjRYtcrdG7dZ269LI7frBhzviGc3tyjRVIj7Ajag15BCDZNPPiCQ ==
cr04jPiHcZs6CKfXkpLJpg ==
KQe2cpNa8FkcC9SS / NMi8G0P9GY6qNLNYbwjnq7t4XZr0KjhChiSWxjHizc34qaJqim4buwZW / fRlFpl / CdD8LcP / CgbTeIlzjwrd8jnfS4 =
UrJP / jKni + bt3Mjt / LR2 / JixjGffYHjGQSIIYHxxdbx6x + W3qD4ODikQky2 / dTb0FJxL5jKdPUwgMlZ4WeWfOn9MU6Yj + i91j0dzx6dZUvM =
cr04jPiHcZs6CKfXkpLJpg ==
JLLU9 + nVY1JUMr5gL / q4iFLnR8rZZKgJ3OwXpvTNq3REjghdQYFTNphtNqdZRRnh + 6 KIUHLhYejxdcDDAMpidcvFYi6gVlk0eEAx627Syho =
h5FvPAwG81WNEoTw22EDzkR3HrRLEnwFXkWthPsBXv5FxJO4EU4fGo07ytQwj7zA
H4vRWcZMdeGTkaux2duG85KYo6NtqzfaByFi2mNPcgBBHwoC77PGMeI / lbIfKdFGFKByKlbEQzoPmxasTNih9g ==
2 wtz2EJ9gcVOn6ULRb1bGDs + vEyftqMNg0ecms5Hu3Ns + s3h9c + vz6ytuh + HVVQR
VmVrGQo2zRokW / ZuO9bN64dGT517FFoHJ0TEwdOhtfnc + CAijAojPGqiIIwkNeAf + ikp4vrFkNt / evEciFGybQ ==
2 wtz2EJ9gcVOn6ULRb1bGNqBvm70dZ7HtlEosE / Nvm4WGWQyuwgvUYRCgxKPD3IXayptF1loB8Wt5TBeELqccO + 40 wL0pvNylzYrUHw6JBE =
VmVrGQo2zRokW / ZuO9bN6x4A95AfXu9BB2SGVN + xyx0QdXN / K + kB5RwpHBtFUdMco7LWTmbDJvRzHVtYD + qEVQ ==
VmVrGQo2zRokW / ZuO9bN67ezeGNjgojkyMvJrElaSuLp1VoIPcnvjrt1egmDrxsT
VmVrGQo2zRokW / ZuO9bN62PFnbgPIhp3A8iSXWSsu5IPoEqGgdDHCzJcdTWYiFwo
T09EhIon / 1 QoA8oqVWmf9YDvrNcJ40cqakka + PgK4WIoJfqJFeo + lh65ATFyUEMyF0Y / + zwyDgyEpxfdJC1T9s7UhkpoJHbxUBQZk4Fz00RqB4T9ckqgL8prAZIi3eST
1 V2v8QerKOmubvSxgB4eTBy6rynLclEPfDHFwfFdGkrqZYjti0bOFlAKQAZdWvRRBTq4Tw3TkA7zqlFYV3GEGw ==
VmVrGQo2zRokW / ZuO9bN631PXfqa0WsPxY3cPKsjN + + sf3pPhl4PmY0D + iiZJP6K
L0eUthVnpkGsmKFAX6d + uKiZA2NxmniTgCRjkzRry5tHeci7yRgrIj81Qcc56UWP
4 hdB7RJambPsQ0dtPl5R2R2cbNN2oigWOYu + sXAe6NE =
Z8EhB + ghYGoKD9XY4aLecICNYZH3MI + WkCe55V3zbmE92inO + KpNM / U7zaoDuAPEuoRzraAIHccyyiUiZq0KCn4SIx0pgaa5qCV5DyiUzg8 =
cr04jPiHcZs6CKfXkpLJpg ==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YyVGBH6aNnzPjcK4RvfX4hfYve9n5OSl18xA0qaFTGh / FvjgivZL + gAYkkYN7wuGkE =
wgR07xfoapmx6eEnFHXXYpiq7dd9WD1xT5fQ5Vehci + ppnSgw3Uh / 4 UFjdGtp4C7cvhGp5bS426UifixsSPqnA ==
+ rSqPmR0H16Evq8k1dmRlB4xIbvaYG + O11hO82myw91Ydmx3LodFeccWDl136pyS + nAQAVxikLOkQvSOY9kJQAL4dTpsdxfBRhjl8YNkSe0 =
YY + NVOVvcj0xKLmCGeWNx2BestjgssDXb997jOzwt9Aq32N7lFRvKaEk5Fl / ha6S
tqyC1MJ6XiYh + GD0a1kac5dSvZffsX + eThfLrN6YbFmpi1kaiU7RgZCp0rtM29PiZ3vWLi + ljJuWig8NiQ + 4 bg ==
2 wtz2EJ9gcVOn6ULRb1bGKZE1Zcf2OrvDEjNWK0WFBUgbaWhDaV89uXGofJoOVRr
VmVrGQo2zRokW / ZuO9bN601Odt2qBpBvUnMq3yF58HwhhNM7lVHcWsw71hZ1B8rwe2VgzE / Ygfs / ES / u0phTJg ==
2 wtz2EJ9gcVOn6ULRb1bGE3fWxG5qHjknC55f8ermFzus / o / QnSnnp1lNx6tgemIWgwHLhJMu5mRfNxKVC4tGUagweF1aVyTeSeOgr2pV0E =
VmVrGQo2zRokW / ZuO9bN6 / 3050 nTbENCuAHMJP8rPTyx4Hr09t3MP1sylZ2k9TWT1Z / y9kt5XpMdcbz6I / 4 KRQ ==
1 cV64uRoDtvn / 9 K8xFmBBX9ZdUkOEyIMST38LHOp7fSKs2ImPRP0uyopElCHPi7HMVolZMF8O0XYdhXxBgTZgEqtCxmaQbs6wC + 46 PgWeNDCrmBUCzHdmv + 1 vOWqpreU
L0eUthVnpkGsmKFAX6d + uKJozLiMP5XT821uPNJ8RPjEdXEmGnrZWY / p8GPQZsgGWBxCipm0x1x / vOwPH25IOA ==
9 LvBrxm / uKypfgjBGJGYtcBuhWDF5ev4FlLJBPqtxn4 =
rqA8uevZ84obkmE4 + PiALpn7E9 + AzYGlYfGJdMimSUSjnNUvkpCHlBESha0byLU3ObnMbt + xpHSu7mkeF29b / TGgdBW9AIpou7zfLCAKfCg =
cr04jPiHcZs6CKfXkpLJpg ==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YwJt + VY8UEHNTi + + WTqHhGFcQLxNOcaxrVugGzPuGlKxDpuTXtsBiJx6HKGQdLz9CA =
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWMqK7Soh3XPs5AU7ubhT3vOqORY + HJbq5ao42T + oXB2TxMpFXIxfI / VHCXdH5U / gk8 =
poFDBYdcnIoac22Rpx3wOFqmecX / dbM0cwOE9JcdOUxhOvVL / xyrkb8pvE3XuSq / AF6vTbgqAOzaclvnzUP78zNBCUHIe9viMRGZD64lExwdRQ37I52ZP24wl2h + HEYnkzG37tN6AaS9pxgDJLGXWA ==
9 Vq3hrd3Q3VGJ7tCv0 + KbRjjCn / SrIsjP / N9ZQ31H8s =
tqyC1MJ6XiYh + GD0a1kac + C23p8m5Q8Czgkq36h7kR9597Aftw1MKkys8jKCT8dDNm0OhJLEvszQGKdpR / tUZg ==
1 V2v8QerKOmubvSxgB4eTBhWeQzn26oNLaz4XtiKd3DBM6qqjMAtodeg9N3wCm9Gq2yeZjXnN4HfG2ObtojCyuFuu4uJxjeY08uVocnJAWzulcdvmrB + 9 jE1iVskGH1AwKoc / O1U4u7wqM1 + ViPfz4Nc7TcCBSHiHSfnNKMbMSgFTRrNcK1VUSeA + xqt + 7 Gps9biwxLJJkfYwpud7rzzLTIQYO3dgrSEgNopaKP1wHQ =
89 eRayX3G8tCX3FDU5IcjcI7XW0AOTd7 + zV / GdfWl4M =
VmVrGQo2zRokW / ZuO9bN69cX0oe78riTFf2DR0iSouZv8VJVkm4PXJpjAZ8dMu85ue9EvVlif7D0Hfkl6Hg6wA ==
VmVrGQo2zRokW / ZuO9bN6x2UBXrziXsE1YruI8yEIdpEkt5u9hKDhDnaxZI1tKV / 1 MiYuJ9V5LAPFKhhY6L1DPpcIKwtbw6ZwveQkIvw4MONL6VbKw7Qe3GYzo57G9ez
VmVrGQo2zRokW / ZuO9bN63aR3YocYJrJURmHuOn6NQyL2YNwJCHOOO4dVXSO1OrOu57rWNUOaY / g9Z4DxYYIAw + FuROKSt7S7gbygqMsdJM =
VmVrGQo2zRokW / ZuO9bN63aR3YocYJrJURmHuOn6NQxt5CXBImKEYcRbajp + HfFQgcG4V6mNlUB9TfRtQuR8trry1sH16bjkYZEVMTwcB6w =
VmVrGQo2zRokW / ZuO9bN66TcS6o6l70yqYAEaLGRTwyJxvl18TfQzpu1GNA + 7 HjH
VmVrGQo2zRokW / ZuO9bN63uze4Lnmw99IoHHLSLuFlE =
VmVrGQo2zRokW / ZuO9bN6zhHFvchcMiaUYiV8FEKyco =
x2LOCSeSzacmh81ySUhNR9w5 + XreI5pXDQTDZ2h9wlRlZm0n1nilVwIkZR412HMxDvSJoPfkBBhn4MVgLI7ors / 3 tML7Yd + 6 oLX9YHq7J8c =
TP9zhKzoqP2ZyB / hk4eVp5dwJ3AjKE3bduAuqPgvqjLT78U + Dqd5CSCjq + oD1f0ZsvntMFuytKQk / UqvAUPWuxQYcRKHE4yIrWtNgj + / 1e4 =
TP9zhKzoqP2ZyB / hk4eVp5dwJ3AjKE3bduAuqPgvqjJAEyYSNUdFNS6Lh4D94nUUUjoRv + eD3l2E / Q + p9vL5xMs2E2yAFDG + aCuGb5VjBn4 =
UTxJ4jWO6dHQO8pTjqkurgCMD / 1 jMHNO7c5IGagQ / I2QGV7PCdztnRenkMZGlh9 + 0 iLnOQuFMDxZCa1M85F7cg ==
XX9hoBCxjod6pWwbTwYew9PA9JlQNG5VtJfkL0XPTA4 =
L0eUthVnpkGsmKFAX6d + uOSGjw9k4 + ECXaFBolnRCxXrkljYR7gvNUjTs + cnRe7RhvtQwTDG80WvhjGs0l3aVw ==
GrDu9Oao7I2P1akJgF09eDtLRscASUn24HyLWqaEGOoLFd3Pyl1FDaBsa3nmHXJlV6TKQFpWc3mjwlMasU2QuQ ==
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWMqK7Soh3XPs5AU7ubhT3vOqORY + HJbq5ao42T + oXB2T + dPZSHoCsu8Rvh / / + BFVlqkbhy5clkrm5xd5xWnatOtX / i00VnO9Du8rLpc5vQP + Q ==
KQe2cpNa8FkcC9SS / NMi8BFvFUJwV + XI / wdURlfBJWAKHDHHyrOU8iCWTLbvkh9K
rqA8uevZ84obkmE4 + PiALkqLDY5CT7nUo6WhuYTmudfvPnqJdzDNw7liPPnKRWgCH5aS6 + 1 HbVYGvtufo0BSXKqCmMResFIg8Yd1Urarz6E =
cr04jPiHcZs6CKfXkpLJpg ==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YxTcmv / VfxPFlecQ2Xnotqt2IE52L3gC7dCe4SN49 + Z4J0rlz5DNFH0zxI1SMhseJ0 =
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWNJQB7DVYymMOWmjTgS4eEyfy + l4kioIRjPlfjna0D49HQWKrqNczuGOV2UnBCSpJk =
npCRXd + WLSmlk7JiNtxtm9gbYh / Jik1FIDXG9IEelYlUIDsISM + xNL1kwJmj6EVRBZZmSfp4awYJxDtGhLbmSnyPSsssdTNdjVh8miFF4Jn / qor6xUfnuQIA6ZtKmpvNSOx1PBvgevr8PiuUrmOT + w ==
6 r4ECPT4o7OwHqIcEmFYzlEbZOlulJHLZOuh0 / zLs3M =
XmWcjbejqXjijvSDMMApGon2xDjBspqtUFw + zce5TQt7ub7089lB2nVxtLvJitZEjjV + Ih920BeA + wbO6kaybA ==
8 qTxQznEcsQMgFW26Dqik8Cp05AEJsEUSbVdG + IW7IfjrtNpbPkvFbMSrg7fTklWMTS1MlUC5TsFldxvdJejTw ==
89 eRayX3G8tCX3FDU5IcjYVpWBUTJe + 6 dnMemLr9pO4 =
VmVrGQo2zRokW / ZuO9bN6w6POkpptsbLbDcwAs1qGzyVhhDiOEGExsweZmFRMA6uit7 + z8HqafOBm + f1YAnPFg ==
VmVrGQo2zRokW / ZuO9bN63pkTmxnYm4QxVHRndiusm21eM9HuqziUJfSxSPrf2PAsXwHDxb8ftSlHSZHnsh24GzGc87Dpn2aHIxSb / ojqvUGBW4iJF9d9xK + 17 b + 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 + 8 KK9sCVUVaQujq9zlh3iv0vxDOxrHxVoWL0vPQy6OANUn3YB + xIhGV3YCx + 4 Xg4wSM30SDGMDNrxRAq7ROxx1v4Nz9VcDQJnf3l
VmVrGQo2zRokW / ZuO9bN68W7kg6GMlDfsyj9oqABfICnFRJY4e3Ft7u0FDEeTLb + Tttpv2vgL2k8tL9C6IQypvRiZXCeHsld0iOwrv5oWUk =
XmWcjbejqXjijvSDMMApGqg66JQONXEM / znZP + hhHbvJqwnVLtBpSTFW1C8zjERP
f9qliXFiuzgVqdx2xlu28laTsVt0v0AcLDLGFGh4ei4 =
L0eUthVnpkGsmKFAX6d + uOSGjw9k4 + ECXaFBolnRCxVXWqXRfRFrlYkhQXdVympE
GrDu9Oao7I2P1akJgF09eIPmKz1Z36SfVzbX5EtIVBSJLXuLhRL9bU8hNSIy2ELM7gHJn + xHvxDr0YymbaxYQw ==
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWNJQB7DVYymMOWmjTgS4eEyfy + l4kioIRjPlfjna0D49BiYt9QMwyQ4CP42XHTRd2Eae4u3klBtdxzhjxB2tp / fpTXxrSMhqObBE8An2UfNyw ==
KQe2cpNa8FkcC9SS / NMi8I + ywyBJxxH3fLZbImuOz741MPpebUEOYQ + + 4 urBwfNp
v88P / mqO0QCsEtt5FQxQSW16A / YQqwPQpq1pkQgukNC1qdmOmTbKBeiUamM5fkCyU04u6JgeNbqszxMDnR3gWGQltPPE / JiBntG4yiEJOhFE81 / yTcpkQzySU1 / dU0WkEn1B6J44c2f3ZUeAWZFpMwGnZPjHe4mEty4JAddSTnY =
cr04jPiHcZs6CKfXkpLJpg ==
4 ILYwbt7Vw8dM6uHbkq0vJKFyJOT6EmZCVi5TPscIMcKGdQWeHEhTG56vR6HfHecSYcaTVmYfDlfVruxO4vUILrx4YEZmPUd2JfQRcEJJDSvMDclu / 6 DXDm3D0QaCRqiqvrLHQOib2Vy31zzzYp3RQ4H8P1U8KU0rqQvuCGHL2xnlpGCfIwSNh8v / VjP8cnigUeJ + QAptPmy2DVB / 2 BwNPs8k2ztWHWvl9bc + 7 p1e7Q =
4 IH4b6ywJwYs95 / tFiL8lfnVM8cGC / TcQN6wOHKJkru7qKTJqyg + NRdMZZjqWBn3szh6PMq7v8cN3fvQg3xbZuKkD7c / LeXguV4QIOtOzQmInXNic0zqAbqxWrq8yun8i / kQI6c1s / Em6ebGCLvt3rsKACzVCUV / nEuuE364wWwIqGjKqWfzxiUAA73uNvIn
4 ILYwbt7Vw8dM6uHbkq0vJKFyJOT6EmZCVi5TPscIMcKGdQWeHEhTG56vR6HfHec6 / zuyKD4TNiS7umIUQ1eh4mx53BbRpEGDorZQsRxUIdr / Yovh7zG9leoCSODHOex0 / be1Sr + cfB5VTJKpjqus0DNc2HZNsgg0ccmxlW6HR6l5lCNTGQD1izZ3oo6Vc3Zvd0NHBGxCrhCEGjroOZL / qmPNTCSc79RhJ / im8x06v42AlgXJtJmMDVKBFY2Ki9kxzkecSlRQld / 40 PT4PjR5E3 / NtH1pOL / to5r7Lfk + / hRui6SIs2FvUkBA6 / kIiO4UP5 / F0C8bD8DS + HXSEi1JuUaz9t3t6e44P8Q70xu + QOk840HWTXQU9mxACc5PsyDVQ4GOY0Ph0hF72l / O9pPph7Da737jtPgBihJKejdB9cyNG1scb2M0BPnYqR55Hpp
4 IH4b6ywJwYs95 / tFiL8lfnVM8cGC / TcQN6wOHKJkru7qKTJqyg + NRdMZZjqWBn3szh6PMq7v8cN3fvQg3xbZuKkD7c / LeXguV4QIOtOzQmInXNic0zqAbqxWrq8yun8i / kQI6c1s / Em6ebGCLvt3rsKACzVCUV / nEuuE364wWwIqGjKqWfzxiUAA73uNvIn
GCWEveFNOjCMyiiJnvM3cj / vlLOzJEJeXu4Wc4MzTT9m / lr3kKqDifw8VnjgCbmzEVvoSNnOlUy5clRfnyQg1A ==
guSZID0bFQuDFoWO2uxAJsjFYYfXNGsMOQ7vVBnR2Zc =
Z8EhB + ghYGoKD9XY4aLecBk1 + N / K2p7q6loOj5hO / AY / OY2IChkLDqVzJEzXKrKk5Dhqc8kgf7n8kn3bYhf6mSyxjI41IXmkSnhG277VRrK9M6jwUqP0hzg + 3 dxRvJy / 5 bLZrUrlKLLAqdOB1DfhD8hInusaFJKOPu0wf70s1wc =
cr04jPiHcZs6CKfXkpLJpg ==
tf1Oq1wYbINEkyucXtee1cMgJMhHf1FsUsP2LRuuwug1o39iAStOUDwI0RHQuoo1DY6kPK9KpPHWiGmnoKUpnaFv5CqtlCnc9iB52wcO11EZ + gBlPecinoTKWp2vNyQXL + jk + xFCOP33oQlYIz0BugeM / Xs8WmaxUp + YAPU / 27 ZVp5rbBob67xkA4H0ahEQtvyWXuaWjvb6vC + TD1 + mEEZfT4zwsKh1vwbvDluhn5ng =
wyvncB / 3 / 67 oBT3vhbMVkleD3cwd9I6ljdxbr1LJWaBalpGbxaXxP / vvYmQVlTq6AXqr + pB5OJA9v + pwNTkRIUjhIPP3l7NehRhk / YXgDF5I6D1WciLFei3jd03xok7qhRg / Cr5NRwF3IWBai3fmz9CCYlyMGnypU8zhPd57O3J + PYMqQcD4Zcup / TfAGEaN0P5evWJFcQLIOV9zlKJ7QQ ==
tf1Oq1wYbINEkyucXtee1cMgJMhHf1FsUsP2LRuuwug1o39iAStOUDwI0RHQuoo11dIkX7kqHzlkFxHSyD6tnXs + xhWWWFAgjgE6iZVyEvVxS3hDQ1kZ7mZO69wsx7qXMiK + + axVuM7kDei6Uc8fdG2Ij3V95ndg3NGhF5c8Ve + M43nLzx5EEadj3AIL988up2jz6IXskD13juE3HHLxstJO7 + + UKrO3Fph0H0YgADU =
wyvncB / 3 / 67 oBT3vhbMVkleD3cwd9I6ljdxbr1LJWaBalpGbxaXxP / vvYmQVlTq6AXqr + pB5OJA9v + pwNTkRIUjhIPP3l7NehRhk / YXgDF5I6D1WciLFei3jd03xok7qhRg / Cr5NRwF3IWBai3fmz9CCYlyMGnypU8zhPd57O3J + PYMqQcD4Zcup / TfAGEaN0P5evWJFcQLIOV9zlKJ7QQ ==
BsAbgDLrhQj2uYn3yuDnJfTmJeo1JkS + iXr7NiMr2ZGVgoDFcakJ59CcFxnHHC81E4rjC26F25zO4kie0jx4Nw ==
guSZID0bFQuDFoWO2uxAJsjFYYfXNGsMOQ7vVBnR2Zc =
QWxBDaw3VAaL036sX4hCHMARERUPqvMRF5uWXT0klt4M8uDrT3wrTUNGrzlsT3SHynX / h4n6qICxWvRyD6 / zjg ==
cr04jPiHcZs6CKfXkpLJpg ==
CjeKMqexO85OxFkNTLsfVe7SITCOKaZp1LGMwqVNe4A =
R65WfMhum3uW9cFR5COFLNNgF + xCIveKPUqFxBGX9W8 =
wbI88h5UWpmLfMPZm1GHGsVMKwcuDJu56WFkvk / fR2TtwNrgHZQRoxBog1rgNcsJMOWUeXIf2 / 8 hfo8KTaG / XQ ==
JGZY1C2 + nS9wZYWgd + gvh082R8I97omw8iSHX8Km7LmoB4CSGmPMOwkUtKpjByEk5vVvPtxTZbu3mWhXtEeW6uJ1VBaEFl9c7YBx5ZTGNMA =
SY9CIZHY29IN9pslG93gZg ==
pVMCrZ7PAAHymZ70WROm / xN7uc37HHCphJNP6wBWNFFkfCrTO3 / zWdRXL0JcM + 29 WG0o7tsUYtBK + YT4qlbtoHBEcSL + oYQx8umm33tHtvxlOnew1yGrW + 9 tUb / 3 mIzCXV + bwMsE5oXss2lYpTO3GNQd55Kh2tKBwIfi983jfE5WfGpdHOOq3NWmcvgx1IQ9
L0eUthVnpkGsmKFAX6d + uM37yNPNIFu5Sy9mvfTDYR40t895iJsTBk2DH1n3Un8e
TTmoxB5HuP9wmwf8x1QYvrn + 3 uJVMIWBGgMruE5M1BU =
QWxBDaw3VAaL036sX4hCHMx8zffAVdfqNc5 + di1I5xBdsKxDZKivqDomKrgNbiQV42S8BdMCjk5yRAW6CwZB8g ==
cr04jPiHcZs6CKfXkpLJpg ==
fnnuZD0QAdxvV2PveMWL8FOZqBJQkO5fkDyErcdv3sHBCTMsJBafZRCNzddg0fI312AFmwseKma + xsssgq5CNQAjmSvAJCGuc0eXbxvMQOdAMf1OlFFfed4k7hRAM3At / KtVPJ5SelXm8whoB / FEOXQ3qFgH / HpWgizR1mjK / e6ou5uOv4f39VcQKtXRn2Jd
3 eIpXgbBonaoheCPx8AFY6umFI8slLWq / upaa1Uk2jpSVyMvPJ4mcBuZLgraO + q9GQedAucc4xrSwIqyV / B6gCTFpRYHtmfOoqOLaWkwYvc =
4 / 4 + Wm3Rsh2mkp + PCxs2s6VV4mJNPEuvR7w91QHZ557aHaU / Cb + THTNE07rfYLXxrdZDRZPikp + SWMJYE4H3Ig ==
dID / HuTFI39RGoF22OwzKyXop25iN / 6 Cgmas1ryG / 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 + 4 h + 8 nsMn2hxb5D0Q6u6aGCqIPaFsLj6fC1TahQFgsNH4kuSQ + lduIVprP5UXJaS / 58 J7CKl19 / ZhwZDgV8O6QU8iHj73adX3xjmEJZkf6Qrfvc431ZzHai1xsHjSFJgmjI + xwBn + vfmSyEbXYaPyIavlSyj91iOeD8FqpN4irSOGSrBibcPvxEkbNEBWdfzw ==
VmVrGQo2zRokW / ZuO9bN68wHZtGYQdFVE6PwKTgvaNtYzBFUcYX3fyY / 6 M9 / dXzj
VmVrGQo2zRokW / ZuO9bN60GIVQb1dVeSTDjJFx4iZ8K1YL / MjcMgl0IDPsbhoWcM7yQ9EOiw907XJNWeGVgujqehYoLtC9EudSNuKe99 + CWrrATAnvnn66j4nlkv3EcPJUeAgTtZo77f5zqZOUsiGesKkQIGJJ6zd / 3 K7c2P48s =
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 + 2 TzTj2DszDWHbL / Vx + mrPtVnbW + SD1pBk7cc7rsaJwQNo4QU7LoHvOicKqoaUNdoG5e + AzVGaXRW1n1Nqg =
VmVrGQo2zRokW / ZuO9bN67wpbXh8GxRtxxUdyv9 + tcnQYOPzlH126m / rftVMv5cRl / hQkptryk / t8Gtg8ajJsb8lwpAI2nvgWtGpl8TpQ + K9nHJFRXKol1tZrc9 / ipu8kaOocsRDzkPn1olW6CDnbALkALXUpIrfjvDKrygdIdVqX4xoNpvqmFtSkD / wGtSGVW8x0 + + ZkFMLlzwBleSXIofOOFMqbdm8kP / g / 2 Q9cnM =
VmVrGQo2zRokW / ZuO9bN61k54EIrXJ5YDEJYX7KVSMQJb2yB2 / tKePc0AJNb7scfmBx3ZMDkULLl85vjDrKPDsRbYCCYbmQ4JM / pYb5gQtg =
VmVrGQo2zRokW / ZuO9bN6 + 4 h + 8 nsMn2hxb5D0Q6u6aGCqIPaFsLj6fC1TahQFgsNc8McXaMNkcQsuyQNX9sTxBDIVJELewreELhbA7ExKAhYHdGr0vUfJ656qPdz61pEMCuI1svU236YOtcqeeWw9hqHZiYtOwsjiw0R7ymDlNoj5gwm + V1FBszZXgoQ / hN6BxqCiqLFSweS / VzkreCfWAHbQNqrDsEDcEKlGn64ivJUmuj9zyfGuDZOIHE / SGBUK2SlyF9yV95YTadwSATEnw ==
VmVrGQo2zRokW / ZuO9bN6 / AO4eShpSZK4uRSltMUWur6UmoAJ3uYmBh6Hb4u8 + QZuLnJtd07ycHQVITOJweo3B01crh9ZOyXk + RD4zH9h3dxaFHiZPGzCPB05djMX / pZ
VmVrGQo2zRokW / ZuO9bN6zhHFvchcMiaUYiV8FEKyco =
VmVrGQo2zRokW / ZuO9bN6yIQVC / ANBR72Zf + NN0mt0w5vOuC994hsp0d + uCS6 / 55 EZLchuUQTeEJwheE06nZPQ ==
VmVrGQo2zRokW / ZuO9bN6z1vYAYiDcZJ2goOT3IWOLIPUh30Y1JucFlnMHb1teNZ16yXgRYuOnoJWnC9DJL + 4 Zj / 1 ue9Mx4yCXqgEarMjmo =
VmVrGQo2zRokW / ZuO9bN69XWNCdW2VwaznplNhiELZEzh9jk6I0q3rmZW4u4dtEB5X / k82 / 6 F0 + ZL0tohkmBOkIUMP4Pr0PSa2rrEIkJpyeCRFXjMs6Jo7fo5NVOVuWlM5YByI4VbPYwOI9kC8H + zNIdR0QyalN2tczBM2yXnr + zlXuJh0AhmzcDReqsIiJHe8wIa9fruyQvytkiCOU0rw ==
VmVrGQo2zRokW / ZuO9bN60CwpxhzHd5Tsu3VuWdEIGbC5Eco8WcHvSLIMGZrC4J8HM7Mhe6VWR6L / Sg / mo + 5 Ug ==
VmVrGQo2zRokW / ZuO9bN60 + OYD9Lp6v7rDnBJufgyu0dtNrYkL8H7zhFQ + vQrlqhvCE6NtoBH6ioyORLFJjNRF9SGfkFntthQsprIkcvCtCK / JhjIZowEZYnAX2rXG2bsXd3yGimQl5GilD4VC9gNoyJDrUbIX84KmcwTFd8 / LRErn07610YcZNUf1UtMXy9vd3qDn0Q / AVxLd1KCmzh4jDf + 6 iTl3HBqq6d9N7CJeNtaOYmfKxXO3OYOtgspRP3
VmVrGQo2zRokW / ZuO9bN66jTdv1hTu + 4 fFiv1YBwZue7lv6Aufd7luwy7B + 0 aC0dbzx6VRSrf3fzINUzlq8XMNkGKWBWvxEGkmN / 9 UAOa6dKPNyUHrHmxW5rH1tExZwQ
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 ==
7 iJfWS / hi94 / vke2djffqmjBjwDgzRyWSoEw1Q3z3GT4V7Je3CZ1mm5s206h0RWJN8GlLviN43HL / e8mdYfKB8xyWTX906NaD7r9udlkATM =
WTPaI3KC72IatMBY2cUf8DhINsfbwu2z6BUbAhOsimUwCOTh2mByfFmolL6LGlAzznx9YHBnysnjX5w3K0Aa4lU42GWBOTkXRGOsJGciABerQH0fIN3Cc0Ha2WQAmXrtVkuiFi7WSacqVGM92Wz0RA ==
yfhcGVf2iYc + Ztxqwy9MUGl2MlVdixWiPkpdkDIaDTR2fL2bGJ0eG / T3S3mFK3I1yjUKdBI / 7 / TjB + C0Q1TF7A ==
2 wtz2EJ9gcVOn6ULRb1bGHs / k + FAu74ujznevW9tehQxxh + / BQiuLboLlLsvhekSf7bU2kLTTL5K33sDNiX0trhbG01wTa4j5HspvJM + CjY =
VmVrGQo2zRokW / ZuO9bN62zAi72PGE + cjoOBruJcs80PAY9N3iH7ke6TUqsi1sSy8D9ganeo6V2zi4SBqW2bdOnBzTgDx5DTrEDZzIkiR6xafY1QNC1k21Wx2o1UPd5i
WTPaI3KC72IatMBY2cUf8GcB7Gs9lcHGWbUjG0C9vSs70Ygjj7wUoEbxnNP2i9zrzgxlxVIkk0U + 7 ydFZHSoEzXRRuiyI8zt4O / 5 cZ2lMz2J5pBt8vqrB5dxECjlX6ZE0SioSpP6KutnXcCf1ehJKTCWzRi2xhcBQ0FshyUTLQg =
iwvjn39WsWBJqN2zZdgrYIdzLsQ825kgPBf5VIBdj3uoMjS29MAx3RxOuWvlnXiosQ7KPIpTLW0MUcNlsu / ulyBkoOXWnXGiVxFPDjplOPmOZH25r / PenV + QVxeQxMCQfVpOT + W5VTimeAhxNV8PQw ==
iwvjn39WsWBJqN2zZdgrYJapEN / AKnY2zLbcAIzyrBBU1RXGfgWqmb + 6 / 1 Y8honwoq8vQFNWL5QXG2xnJPe0LBPl / ycfTdBL8st + Ep1mgsYzpmdsWR6INN9Bz4yFZESMs7wbMHG0SzC3fg0QgFp086x0icWfwhosFLdQWu1ZDy / D1nu3zd6GRjYEiiID4hWyqMGLVMlVhlgucIyj8rJvGGu4F9qYL8XJEbUPtev2y4Q =
j950dDFgNocMT / 8 FQS6TYJHV9Kyoac68bruP5hOu5qmaOOkbdmWW75ouQPYNKTGSSa2ykeEdUHfzKTkJdx / Ccg ==
96 orka / uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2HnATx3FBLn85SCdMGIOm1E0hlma + GxHkgZc93eWmwVjA ==
bqFhodE9GHP09Cm0jqHUfmkdtpV9kuGe / MGw5ZaaoCp81F / rxUszv1KfXRZWtOlE3la7p6gT6SCyEt8mcZzS2A ==
q4nc / jwATOMUyfSjLibfEbtbU6LFt5q4ewa9MuGiJMo =
jsE17 / UlKDH9XrhQJJowi15 / y5gn5lH8c7Gqcnf3Esr7fxvcWtKirtM5TT2hHcoLOOiNTfJ5a7izuUZ8eDTQRw ==
jsE17 / UlKDH9XrhQJJowi9yxaM1QuCYxVef9FbIoMZ + eKsxoKPzwQ / wwh + qx24Hi
AaCYXSBoNzzxOXBdbJWxCPghQQ + zxvQLtEy2BM3tYqHuDq6yKijsnOS5h2YQlWHI00dhyYcLovqVLkdh0Dy8fMQOez3M0K6 + uE8weXP9Ap5DYQqbnNlIhatzkP9KpuAj
jceVTICIbdeQFZqTJKGutSjbVQ97l0vRfz6aCyyExd8BAD7ORBXAStcGQntGkH9VeVHgeQxgUAn9i5xQBjtmtg ==
w07xSMqKvzErqU8Z4gNDycTDkv3aRFmhNSvV3Fxu24BqPo3ptCHykzMf9nG / CGMxQaiucRiWiW3Flz8o49yWP5RB3d68MNFb5mogSyWvDQA =
cr04jPiHcZs6CKfXkpLJpg ==
fnnuZD0QAdxvV2PveMWL8CSqz + / 2 LSHUFrClcf5BdQrTv1c0XJfhDdpDKKPo0z0b14 + xocsVY8vCZj / 69 cLwfoiB1FEWbmyYbrlCddxFGEsCX5QCEQvSd95BTrhq1nlZCNY9ga7YYTrfSnw + 46 RbFP + ovv8K0iZCj + u7EFMHJ / IMXwLlnh3z3jdyNDu7TFNo
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YxDlh4Xxnj94 + dsoExgikc543ZsABYd7Ls6YBhmFxb45wha5ZOThRb9RHRh4ve9w0I =
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWO / PpcmZKW2bAAbmrDnw1SCP4uaE0ZYA6R3BnA + nWDqAy1mL3cUFeM8frCNXgKcWp0 =
ncUn2TP8ZQ4fZMBYk + CUrbejaOCU8cNhJKyCBZWCqq1sY02wl0mD872qKy8RvJgnAbv7KCxyej8W9Q + U + qS + nMiBgdyd4po5Df4qqDwKnLOe / UUDOA1H47u9gqHf8WHl6B1PCla277lpLOkFu7GkR / mj98MnPUXQEt54mzwtDe71lGzby4KJ9Ma / n9OkWQnE
A4iM5LeR0j / aNdRd2ACS4ny8WZLXU05tQMpWxiCT9JuuAqjT43MG9lWrq5R0d6qpJwthsL4nn9qcoduCQeoOlw ==
5 REqqEJCYV1z7x5neHLGFDGAviuWIaE / TYt4LSZwDiMXm / 53 mOKPZnbzemXU4 + GZEUcMNcyvWJGIOUQ5RIkIIpC70r0TF2jbHjMwqOoUldc =
3 DnhOSKd6qzCIAY6ANKkgJYd0P / 22 B0l1MZyem52ut9bERvo0PX / T68xhBrjCbLsd45eA + op38niJOuRPomiESt7gvsqdzn5rexbsh2MuoA0EOCYOneAtVYTW8225GFO + VCWMzhTlT1SXl7twpHYnQ ==
R6vHhJwn2j7IZ8 / oBXXPlT1VLHYksWD6DKGcKNO8kyDSYJaiXzcsBEJQzsggxUu3
yfhcGVf2iYc + Ztxqwy9MUFkJFa9YS88pkqSw34PcNf4lRXLRKL7BLErDKD8oJEUa8Is5OQTKCIYC80QzJUv + ow ==
2 wtz2EJ9gcVOn6ULRb1bGC0c4KGSGGqyU0mFPA7k9 / zMuX9TZw / BP1yH6IjAzrb0UW4BCVFU5p42K5W86y / mOUKYixfq2yNN6gEZO27U3aI =
VmVrGQo2zRokW / ZuO9bN62alG5rsG3QEZzQ33 / QBje3tmhSRMsf9NUXv9udZovEkoqejbYgifjLzt4 + lAxk98Q ==
VmVrGQo2zRokW / ZuO9bN61IpWQW8LyV5vGxMqJtLAMG4GidKSYVzYqLlwKnkYGh3
VmVrGQo2zRokW / ZuO9bN66B2cWRLetUcWMU + aw + SZbQ =
1 cV64uRoDtvn / 9 K8xFmBBdHLi7PMpkqFYqY7BMozZdA =
xWoGNWjKGPfI4gq8aHoTfPboh14laZFSUPEgtjSKUWO / PpcmZKW2bAAbmrDnw1SCP4uaE0ZYA6R3BnA + nWDqA8JKb1hHUBhmO1q9RpqWkO65x899CtNFF6 + cegZlLYKatosIHzYd1sSurD0D440aNw ==
xWoGNWjKGPfI4gq8aHoTfPSftyw23aWBm0SalP6bSZ5uFgWb + TdmXVXjEBOfs4SIpa / FkCphz9Tm5ZgfbL0jqHLzP164gR1SD2C8 + k5o8kpAwYIJv84ufmqQyFKhd1DZCis68M8tRgaB6ZXGCaNrCkbBbv1rEFnJ3jwN4L9DvSeA0NBccCpd8oVxmdplQ24eWXMmssJ + SewTSv3wCcPzXui4VvS88RJY8GZHoEgTtE4 =
UTxJ4jWO6dHQO8pTjqkurrjGYhp2vBYcOlWBI2li3lQTi9a9ylfr2bPqUUBeRL9Lp7KgysTqDJQBOFjwXnAT7A ==
L0eUthVnpkGsmKFAX6d + uG2V4ODQQv2yL6nL1etYQzYzTVLBKVfwwGviW9wMWGbPvgdbWuIi8fuBLcL8k + 2 CkM8xJKi / 40 nY + 5 NrgF6Um8o =
KQe2cpNa8FkcC9SS / NMi8CwZjefuYFdgIVltRQ6d / OEFpkMvPQIEkY8jmyRMDoerHhdkzdV + Z4 + gMSYNTzKt6xu + JQBCWWXi1l89v4epCfY =
+ oS0XSKoqGXJre3Q / 1 v1BlvSlGCveCkN / Z8cmI + VqTrpmsmHgDb9KkDKC6ZVLS20UIZPb95vU7cgxrlJ21Bc2ar9RFcrYmzQRZ8SjSyJJ84 =
cr04jPiHcZs6CKfXkpLJpg ==
nCZEvlHDeEU72IAmy9hXaHLXXyBaHBxe + RST4mPX / 1 s =
JsM1B8QNr50RvpRbP1YnPuFx5C4ai7Wud51VQmeOJhtTbi2K1dw95XnWrJpGmome1iYmoZa6Oc4Q6EBuZoNV + fX + bUk82IAFMAM49zKO3cBTybz8r0H5oeeZD2PG2vz9YvwAvdCggT5OaK2dzb9qtkyl9EQWU / 5 TuiTRRLK9wPBcfCiv8BBTrzpbXxUyEJkAlKS7V + HzybJN3Z1X6AT + PKpq6HL9uxam8gsZOZHM2 / HTQ3g4puzMy372Km4u6jdZortgp3ZYADH65j98Z05y5Q ==
fnnuZD0QAdxvV2PveMWL8ChOX9d1DU + esVC4Z + TLQn0LGt4 / lA9B1nK95LwQUMwDyBIvMUEQynEPvkKTsUPmBA ==
tqyC1MJ6XiYh + GD0a1kaczblP9d + 7 MbugTMefIcU5knRIIUxS / 2 Wcv7v0aIZ + 2 c9FzydBTSgZglAaMKN7kCI / + weTX / 7 RdLptz4gfoDeOVA =
2 wtz2EJ9gcVOn6ULRb1bGJbVRPKXqKnqQ6mDrr8yTxwFA9NUMvAWHGQpE / FJKpCSlbP5Zg80d4pY2gBPsk7i8ozLuZO1ozYdjzrgJw2U5OUEKIiU1L82Uq2rBkRVdg0FCh + 0 rlh1SAarvhCyIPm4eg ==
KQe2cpNa8FkcC9SS / NMi8MCNQ / S9KLk1s7xLXNfFHdSzUR + lpVwNBVZYrPMpnyol
oV6EeCQGmWRpCjav7p0xHU9dTzjHsDMOBcmP4S9Cd0Sm / BfUaDvQq6 + oeGDChPW7TipeycZUvdKZKFIi70R6ce9xK8Y1ET3qsvaYpUbml / t0t7fn8Z81Ufs3uMSqjXwn
cr04jPiHcZs6CKfXkpLJpg ==
6 r4ECPT4o7OwHqIcEmFYzuoVsBFhqfPJAaTURpnU6VwScF3eicqvf7HjZ11RI4NP
fnnuZD0QAdxvV2PveMWL8AuKdHixQT66Gc00Gg1vJS6 + GO0xBdztvdUhCI5Ge5N555Yujja5lRVAwH + nvKDo0g ==
6 r4ECPT4o7OwHqIcEmFYzheDtvHlqty / 0 KdCgKl0ylz / 1 KEPPjnNCy + Qa3YCQV4ej0URjhxYyA78RnBZQa + b7w ==
KkG36smI6M1sDeGTVVD + qSP00dlWGnbBakrMMitnwAHUW1Dpt7HTXNcTRJlaQP8kip102wRtA7YBJRxVLYKDJU8D8qE4aeWEhK4dD0Pl6fVL3wtOaxsjGuUlU3uOMl80q62tcnhnh6ZpLjlBbduGpw ==
4 IH4b6ywJwYs95 / tFiL8lY1GyBaN9rJuTeVxWOfmJ6U =
2 wtz2EJ9gcVOn6ULRb1bGM8IQ2dJE0FhTsv41jhWplnZWgQQDp3w / UtYWI2rgs6eeyYGfdf / TyqbhqX4p71ooQ ==
VmVrGQo2zRokW / ZuO9bN64SEuusKjyuHabj781H + tb1pbX8IQ6fviKyAJ4bIwo6f1MEOhr9OA2EPLA0laTC + bQ ==
KQe2cpNa8FkcC9SS / NMi8EFKVhLSE9F1GFAOmsqhoz0nSuR5P8d9BeQpjUGmCKYl
PUlTSkp7cRpcs3JwkQy2WnJTeXdbhFjvuSced9pxt6YzgizBmOcyjfpim0HV2MrFzan / z6jOh7I71bA4NdyyuRUOhVQJVxU + 8 UkcayIiIfY =
cr04jPiHcZs6CKfXkpLJpg ==
fnnuZD0QAdxvV2PveMWL8JrP786E2VWv6OEVjvqfqal1F0tGEw4g6I + m / uUhNjRha + 6 HO1sT2iO4abtaK4OE1Vy7eO + + Khxe / SuLdIKHyJcUbwrJ8UwpyBO + PNDZ52RrEVi8iM258cNgoOb0YAZQfN7kK2V3iyKgd / GnMPZXMTL4JzhUkcRyggyZfDNgDqT2
XmWcjbejqXjijvSDMMApGmQVBFK + 3 Fu7ffDX8KPyOyo5Q0Ti2ZZ2YMkf71vb / W909tViVHOCaDHTsuIQl / bZlA ==
HyB13FOAEbSI2KAABytWG1lJdYY / yjhXtGuYXK23U9uctTZthkax3pqCq + KZWhToqgQK7rULc + rIh5RV3cT5QA ==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1Yx / jb + vZHJt3XPEP0sYLVm5vGGxbG9PnkJrq0RBLRyPIHfCkYLqlrQewmKTeUugXsTUbZM0 + Bq0egdvyjbtYB3RDS3E8 + 1 Of5ENemfFFdPgZTU4bGrWNIhvEpJReOGDokjH + + X8r7oe9AMTBA / AQnDw
ut2tmPKYoa0Hz0cuVsUj3qcXVeFDr / mvvHeu4hSOYIh9yLoIX9tq9Y5O / hZBb0tffbu4 / T77YQFbF6NFadqzOjISdrhc269PQWx3OJ7ouTW / 1 PToQZX1 + XjOsQbRA6FVDFry8tD5zNbLBVLnSpaRBYyncHoM / p0AK6AxDDXFQ0s =
ut2tmPKYoa0Hz0cuVsUj3sGyPnE6nUmywzlUF1eIcgMYiYMpPOa4pahwX32jHUUbAHbImsTgL9Rk7Q5kcJIpqFEt3V081Pokv5C1DXYg8pqGB9PcgYc / 0 ZKPNh5eLzBu + Y2u8nxkPk + kysiE08xWJ / yoGtaacIJybZbO95Rb254 =
CTDlCq / Yx3kXyawzsUjqPn4DoEOXY94GKmJFYozlJ3MZVnazWs2aCAAG7WaeGpIc1rom6k73cpvAMPH + Q / / OZpGilDx8wm + pDjOdrv5qwBM =
qgvPLYf8 + 6 pituXauG2lHnpUgYTRBVrfogZrz8 + a40teOzfvu + 2 n8c / F + VGRE5UBE + 95 iEDTw4AWhkst55N38A ==
2 wtz2EJ9gcVOn6ULRb1bGC1vdhobTwHQicpopnpHvZykrJyTIAmAai0BhcHk + 7 gzy73WaZ2MEopQp2fV5AohLeqaAoV6nx / xVq + kH9sAGKaH4qZ78s4pETjbffhT67 + 2 hs20W5A4KJiH5y3gyd7fe6NKlulpdwtFzGl88VxNvpEEnITo4gbXmnmsr8ygIv8n3g91w2QrdIzkQn0ufjy3bw ==
GWDYUI0c8Ct3i6L4tejkFH + T + usUscBWHul4 + WUmgwbOzbAkPgcaVWU00rXS / 6 TINxRI9WPCNgbBpH3y0BmNIlDXzXFXd8smuo4pyHtd6TXp + IWr6p1Yms4KzV7K + 7 d9
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG / aec6OCmYKY + 09 xxIr6eMh2alPog27Xzy1z2oKXLS73HcJeh1hUDN7H85yZJB5KxuBlzR2QZnnv / WK + a3HqEG2 / aHMlFkAVe3Esv / bm7MQwzNHTVwwyX4 + 6 N + / zduqbDASrbgp8JW6r5U8s + FwOGJKV3Reqnqs + / XncY8o8wAEYx8at6gS1KqPmr0887m7q3O + Ee7ToQpXAfZjupafNVMg8Y8z1mpq7au2
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG / aec6OCmYKY + 39 fBu + 1 OUNo9hSWZFf45Fcr6iPppgD4DcuTJOEcdbftxfoxWo + dL7xmuaL72fiDyJXXIbckZwwxve32cXNdfbkRrzY5 + C6FmNBvbKFIVZHoA ==
LiVO4OAZQ41GCrj1VFqy49tJnp9BlG / aec6OCmYKY + 1 n2xOSacmX62EVJC46g / rjd6q6leIqAfA2wvM9hBNUnsUjYma72h95TF0VScg5YB / mF3paIQlxoFvcT9133xB0byBDM3NyEvDFj3YDOsQIzA ==
LiVO4OAZQ41GCrj1VFqy40xXTJtMuJpqKqDGzO / / HWCYHnWQl + / 6 dVTnz8Uv / mP3KmU2LGm9S9Y68bkk6wUkdrOAEmwaqRGxgGr4fpcThJo3C8cyEwdyh / XtjLf + FpGV2WAR9PWURWOjY + 3 Dsv / AZJYvWnrAn0zEx2VtrCjwEzW6kWWTTynhagWnOHllrPEmWkZfNHCg5BgDtz8zp + oNUA ==
6 S1DTW1TCVbUfeFz1 / zAP8MlMUQ + iq + gDP31FgA75hZF23hEP2cwNRG64dw0lVR68qDE3 / oN8uznLfLYYOujJRyjCktuJsEmBB7fgUvhf6KfqI2UVTxHqF9WT82gADkW
fnnuZD0QAdxvV2PveMWL8MnPURZP7EzUIFSNSkR / DP3nRYXb0fUDE4U7M1r3zRQtQl7HxMPsKK69DQPV524wlWgMtz + Ny / G0Pe5DM3zxSvEXMEiQRG9A / Zj7S8KL6NnajyFMooBUqX66G8CR8bMScicsJ75E0Yd9Cze0RNKU9Wza3aIdiEmdkoJJHprWviuT
oacxXEoPih9NKsd5qduwcBiuy7u2Ow2MIJfCF1pBvq + l5eyzjf2YC17f5yyPsixULDkW15S / zqjX1ADtgbpcxaPhfDdsZoOAh4jgcFf2hLfK5yksS8k7tRsztEy / dLNF1rwP1aVLBoDTQCcVq4DrJQEM40DKF8m5PpGaChnts2mp / Acv07Y + 1 SGRblH0AiyrFhwdzM31v3 + snTzxybhzqh3fcofAFa / 1 YdUVAUvETCuO9MReNXR / ti5B4CEPZcu1CVDXm0iCcoCE2zgQZBAFl94T2Cum0QSYBb0 + iro9jd / nItGRClUCZa1bTCuqbX / O8d6o77kuW416R / Ylj7EogtYaTw + Nj7s4g7j3vFgNlzDarsz + 8 doOepdfvAEN4 + BOfX0kFvzsGw + BZvhVQsiFdYe5vtFiL2iELYzBnoDcptzwmqgcgyDVVOsMynvbIjFPM1zF1gxYKs63V9iT5VO4yFXtAf87QNjvvyitSpTdIoDijHo5xNeCCIz586 + rNedRp / 92 kdW + Soi4SKEHSO3 + myTZEV9rgTwzVT + nb7xcD7j / TBg / LIl1rnEh9xXfubdPmGA3DVwS7bWo3OHWlBhKyvBfqQcsIcvV80 + 2 O3MHeYFuF28roWFw6QhGfFGcHoCrwgaukoJVKuJgHNrirJoelrvpKHC0QNwVRr73WlZSwyIh45 / Ilyg3N / Sx6JET5iz080hktNKrJLUui0w7UBjTLGcQhAOJ / ExFiqD + shKGVW + Omn0I60Fa1AL3048OE7P + JYJo3d2KocToiEQ7EDx5mGzt2Aof1brVNuzkaBxmCmB8 + pgf625W3oBZ3l2T0XtHI6DBqAddf2ue2yWW2VErfnsjCHxEp9RlGPsrJnuLq2 + YMvPyH9heuL9TvnMKPKHdMm2pOvTac8wOO05I + o9tbwHaQrrzYs1KjvW8Ogl3vmYEtvi999H / PJrHRNdvCZOvfpcbLd306BhEpxAXscITxTqfrXc3v9YpzMcRsI7mGnLJjgioA2RCnpEgXgYsPiNM
IL9sA67H0z06wFBWIR8QkaTnKJDOXWBfh9EK16Yt5HjpiShKLm24lByCsmMOp / + nm6sbfuAiTHANiUGCrj3O6YJUoGlXCUdJNawa7R4ydgTXxF1mtteD59hEDOyF5 + eaneP8lM1d5A4NQGGoWiVG8g ==
NREvnNIDTttHan / FJweGj / msBpf / p1aKu8LZw94 + KUqSn1c + F + iZlZgS / VL7fr / 48 X68sN6vyPH3CMR6 / 5 oTo9qAC + Aq27vo62T00ZLfVanRZyH61IW97E6RRG1aY8G9PylFnqmEkg0hwE00IeHsj8B2FWSQPVs2IQsDmtv2d0jkn + EfMgHJJpItKcvIvvSjuTUXyAh + teqKf6BoWr1i9HmflGa + pBxysP8DY2jVav7fOiF26qxzGUTuyAkvh4bBiPPOkc1z0f2Kfh54NmOGmQ ==
yYOGmvXvGt / cRLLVkO4eKqa + hM3PuRZfD7b8rMYq / UT5o + JnFaIJw / yVufWRJ3GYE6JJV8UyWObkwgX0nomex4N7hMwH0p / mvytxHRM0LsXoHlzxAgZ68TlBXX9wMqO +
NREvnNIDTttHan / FJweGj / msBpf / p1aKu8LZw94 + KUqSn1c + F + iZlZgS / VL7fr / 48 X68sN6vyPH3CMR6 / 5 oTo6pzILMLc9S2Abfp3x11erswXy + 6 aKQxkAOV3JNDJy / u4bISLULyNHieYZYXNxvYW / Dtf + nQ / d3q + 8 B6w + EKAiJUPNmPW8Mx5AGhPkKWWMQsz7ioFJ2CQjBvlTk / 2 hfy1MbIqtmWyx3r6g2Vvg1 + UQ4ptd3QByZwW46 + nwoFVVe7u8OdItBRe7okhek + hhTpiYfdw7mDXnQfcpCHAC7y4BjGXo0CurX7AjM06m7n6D1EA7tHc6gqHSOm5 / cGUTKXig ==
yYOGmvXvGt / cRLLVkO4eKqa + hM3PuRZfD7b8rMYq / UT5o + JnFaIJw / yVufWRJ3GYE6JJV8UyWObkwgX0nomex4N7hMwH0p / mvytxHRM0LsXoHlzxAgZ68TlBXX9wMqO +
CTDlCq / Yx3kXyawzsUjqPj / 1 UgvtLUwbSocBDSTGdlQdGlfuxYW1zktAmMlWajLEJlycf3QM6d3m2 / 8 WV / 7 qap + 0 + 9 bbcfKO31Ha3 + gfc0v / wa / / RxuB / CTGHWThqgBLKsNaADG5PBVOlQNWxwKSNUS + 55 fKYqn7UbOGJUsBt08 =
iwvjn39WsWBJqN2zZdgrYH73io9UFYsVQIpyJHGNPolTowZ3ES6qaIlYZbd0 + 9 c8k / 3 / kVFrQkiBM1cR8ZRiGoxZK4ShV6FY0bULRqyn93CV5P1j8chjs7oBotB9I / BtcUB3JYzsnV + 37 ppDY6xcDg ==
iwvjn39WsWBJqN2zZdgrYJapEN / AKnY2zLbcAIzyrBBU1RXGfgWqmb + 6 / 1 Y8honwoq8vQFNWL5QXG2xnJPe0LK1Ma + Uxp4BV2qI3ukXHtQYKXoJzDPI9GCy7FvK4NRqoVIY2d3UNJZ6JrGvDp8Itv8UtbTtOKRZzMGesfAFfpr8M2F7b1sde3FoHIbX53bIajKUCfv6EdR2qn5YyhmO / 0 Q ==
96 orka / uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2HnATx3FBLn85SCdMGIOm1E0hlma + GxHkgZc93eWmwVjA ==
6 we + bQ + BNhpl74ICwbzDD6SJhA5UxkUBfCZmu1pDNmRCVuoiUdtV / LjGUcclBb9x1lO73 / pbYlp7Qn7laP / ALybE3LW0N3KSwXGpr6c9FY4 =
cr04jPiHcZs6CKfXkpLJpg ==
fnnuZD0QAdxvV2PveMWL8FnhE / Qbu1TUcwt3ycoXzAb63R8Bw + Kjhj / s + Ugn6uM2VYtJ5GD3NvbvtZB / 8 CpMknz6mUrg1bAfFvVuTUch8Fa1XKdHthZX + SiOeT190cbuzf1PMxPOpzbt2lZhBmtWnV5tc / shXzdOMbVzBF3CVbwpT3MP6rpratp4mnHz3RuO
SE5xU / Z0JSLRg + BF0JZlQ351DCSneiU0Ro4ul8s6YQ0 + e9ClxvBwl8Z8jDAAh4Pw29EBMojpWeiQDQQ3je1JBQ ==
ncUn2TP8ZQ4fZMBYk + CUrbejaOCU8cNhJKyCBZWCqq3ZxbWlzmOTv + kBIJsZsjljcT1q3oO0cOKLsE5F65U + psAkCkXFw1 + rnPdHpl45RtMkIcHFBbTnubK1Yw2j5SiSMTQaANcjGIXkA5pbNDFojl1kkOkaPHt6uO54XZwjB9PlZ8XdctMBp + wpTD06crdB
R6vHhJwn2j7IZ8 / oBXXPlciOa3G4bauQKWbklU12JP0CWdxdVaZIoNzpWfrmbe5i5gswcTWd6DqXeLXmYLSydw ==
wgR07xfoapmx6eEnFHXXYv6sj3jsGK5jp + XNGADM1YwZ3X8erO8tF + 9 rF + ud3CmG2DzTMUCy19ltKZJBZVeJ2G3b7Y / tUzeVbHaaGaNkyQryOXyVCJelyU3NO9pBJXZwU4csk3bxLN74sMPi17loDmo4qNbgIL5dTT7IV6iCpcJf45etCMNP7ojLR / iLdfFt
ut2tmPKYoa0Hz0cuVsUj3l2A / S9h8YCNZoTpXi3WyNmbvxKV9hRgROXsqHqZmvm0sTMN + 4 iSaKr2yT / X + fgBC4YDIVZ1uBFHcV7UgCMzOjI2lx9 + St + VE5ivldn9lPHV3rb5YkHv11D4TUNLk3DCWm7kTSih4pt3xjcF9tbSGek =
ut2tmPKYoa0Hz0cuVsUj3iSUOfYfZogjpziC8PUGLSE9MjZBw4GuEUF0vb4KA4CRuxc4tpvehR3tbZvfDCzpxJksbJGmNWFIh7s9WlNnDc + qD7wQpCT3NbfBgRmblirSNOVpyIgLflRUGrvOFeOG9zFm3PjGlOZ00Vv3qWkURL8 =
oF + 52 jOqU38B3IbYFCrd4N3GYJGn + k9zqnS5QNsGjaRnqfzqGwgeL + xZ / I7WiPbOLIGF8wwQthufZuWJLZ8TV8PVM + kG0CKewnf99F2dx5s =
p4mlb5HXUU40EYWFAnjifyb31sUX + 0 BXv / YW9j2K + gI =
8 qTxQznEcsQMgFW26Dqik37xPQpnAepb + 3 VTmXSvTHkBXZvjIZwIqQeUzzujDsnU8 / MAPAbj2oDa9K3AqwPTFQ ==
2 wtz2EJ9gcVOn6ULRb1bGDulJXIx4y56v5IQGpDjYFZ136nD / ZkugeoB6wP9mFEheXByEOtBdpbVts7POYAC1Q ==
VmVrGQo2zRokW / ZuO9bN60HnLn + 7 qb3BEYgduIkYBusMNq2qQ2m7PTCE41vqIcK / Cewvi49S3FU5bVmsIU / TRg ==
VmVrGQo2zRokW / ZuO9bN66B2cWRLetUcWMU + aw + SZbQ =
fnnuZD0QAdxvV2PveMWL8GzimDATsb9PCxhUZX36WPceYPd8 + C + DZiTdw0oWYeDzPAREthfc0Ab + 8 X6ybl3VEmmQvWGs9zAYVneC2Hy2egkTCe1Ob78xdnB0S18HF60ZIM1v7YQAQ8UB + CC4cZs7fQ ==
AaCYXSBoNzzxOXBdbJWxCI9qK / O2dxQuwFCqR22 / ccmrRlWPB13BOQzWf + aWkGS + 2 + eb + G2UGJ030Ldkc / TRa6QakPcSXSNOI3gUmbZsFE56ZNHp130Cn7JwRwpSNvyF
Igyj + TKK + I9SELYdi + D74wrFQ1TlNAWhWGzDssoXLbghxc1cj / mwrtUBlQ6VRLTuoSRRar3R + eQrcrTodxnolxO11AHYzchAkrT97uXxfomkpOzQL5Tmlw5oI / hsnk0R3C + lgPstP5 / 4 bDc90 + iRQT3cMxKnuQv1rM9z6oW2nPBssswhEAPdwxcmplZu4C3JnPxdZByVx6FbRN2Jgg4Y1CUhjhiIBddhAyjAv1YWNpTM8o5GlDeqrvWm2293br1F
Igyj + TKK + I9SELYdi + D74wrFQ1TlNAWhWGzDssoXLbjeoHs / 8 Mje8tsYdNHFBscqwQug2YW9a6jBvQV2kMslbbKaz2EQLgEjn6frBGO4TfxHRuA1CCfJmWabVkIQMFxrCJix3c + 0 lMgO1 + 8 zPIjvrg ==
Igyj + TKK + I9SELYdi + D74wrFQ1TlNAWhWGzDssoXLbiZex8VHIziY50edMtwBriCkbhwV2pZ9K3FDuHuJkHYxeLxgByj1SOSg2vK7OLlpEhM2jDZRUpXVynPlw8R1bP7ZLPJI + hMXZWTM2qTMVW4Bg ==
1 cV64uRoDtvn / 9 K8xFmBBSyIwLLAyZtDmWjNCGSK35oV7Lln1obVdrK86aC2P / 5 d2IugIo65luFTN3ITzWeIAojASipLuDAxR0vKGzse + 0 ZM659ojBqm1tuvWsd / 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 / 4 JOzfvVymJ + MEoKHZyQjjwZIIOXp4KFKnmvUZ9q4C / / bBvwEaBQJ6Qteg7RZ0QQkafEG / NBncU1vOMCYFIZTOG / ym + H39xC51Omll5vt64U6rtJO7lsIO + WKd9WZAUYATPv1J1g1aRzsJycWilmD + jWXpI23ZcbmmTf4VctIpeCNZwnm + aQm7J30HLgU2PnkluZdq744bQ4GCZQVgHkLM + + NGVUmDB97Rx / 4 FIZ9i83MNYpndJPYOe2yYnQ5vThEHFeanLo115DYYct09qBrRVGeM9hxfN7UP1MWDKFeAbZF5flQE =
nPNZk + Xvg1c6GZFzrp1IbMVt0EpHjdQMD / KiHv3lEICoTqIbAmvUQ + gVypzCdBB8Gs0AbP + Zh9pMLpuFBMJVhrRL3RKTfSSRfVHFNiMAjiuK48g7qWvs2jmegZXfmVGc + gXJ9imIODTMBbyPmgyrR0qZFdlSN4 + ocHLB0gjsQGmIRDYaJNrNAnS4USkTNOXVJ + CnobHbEUrDvenXe4GcGwb6lwpI0j1vr6tVraqgemOc + yVhnFDBFX0eaTQPMUsDqeqEbxv / r / mhMEfOmRGhUA ==
wu62rpGT52ZTxeUUs2GeuGgAZsk / tzh / isMkRRQuL7nq3eaiw1Qb9M0 + Qc8KElN + 7 mEiLyeftYZBbZDOnzNciRm5TdJahLGV1drbGS1rn8dSqfam6zfdyDZ + 0 qHR + jnX
nPNZk + Xvg1c6GZFzrp1IbMVt0EpHjdQMD / KiHv3lEICoTqIbAmvUQ + gVypzCdBB8Gs0AbP + Zh9pMLpuFBMJVhlpvc3VMIX / ToG + YV / rNHgA6KSwDvFN3sEa / wtjnlB7Gwj6zOH2itskLF4HrIvxMLthUmGUfGpnVqtHOpKzBOhMdQMK3ECYTLkqJgqQIjZkxcxvKH33BB8iIKHhbL / 7 VeuzthB99YJSe3mQ0vuX2vvcBZTIlX / khXl8eo63Qod7ozf7o47f41YKmUdwsO / JMXjeiD0NMGOFxwR4AREJ50Invb5AF4D9pp2kJTvEUlKGD + L4b4hSYjM37qFKD1zXD1A ==
wu62rpGT52ZTxeUUs2GeuGgAZsk / tzh / isMkRRQuL7nq3eaiw1Qb9M0 + Qc8KElN + 7 mEiLyeftYZBbZDOnzNciRm5TdJahLGV1drbGS1rn8dSqfam6zfdyDZ + 0 qHR + jnX
8 qTxQznEcsQMgFW26Dqik37xPQpnAepb + 3 VTmXSvTHkBXZvjIZwIqQeUzzujDsnU8 / MAPAbj2oDa9K3AqwPTFQ ==
2 wtz2EJ9gcVOn6ULRb1bGDulJXIx4y56v5IQGpDjYFZ136nD / ZkugeoB6wP9mFEheXByEOtBdpbVts7POYAC1Q ==
VmVrGQo2zRokW / ZuO9bN65CLqRUEWJ03MnVfT48m2QyxHgYbgNM + mUWp / RHlScL707Hwd5hAXrcCQuNOHzWRmw ==
VmVrGQo2zRokW / ZuO9bN66B2cWRLetUcWMU + aw + SZbQ =
iwvjn39WsWBJqN2zZdgrYG5NBDXw / UERaMa5qn6uxHIlNsNh7PeHEY5YZ4B / EHd4pgIscKVIIX7ioUSholIaIyLKidrEOF20CDJX / iz34wBbW9zWqoCbzoD6tzk7oYnY1Lb5dkZX86F / rOGlcmjsIQ ==
iwvjn39WsWBJqN2zZdgrYJapEN / AKnY2zLbcAIzyrBAAFOSsyeU1IHqhRAAJmxek18L8hhYV0nclwoNTInf9BxJ1mKeAbWt9n4txx96fjdNoTICL7WaSPRAd + PHZ9Rckg0kFG02IFUMdzt0r5RApu6mM0z1QqDZmZc2kp00MWUTfdnwFkK6MLDk + Drcqk5fnWaio6MEpLq2BY4 / d9cl99Q ==
96 orka / uERLyRst14azQwifX4NgxGrWxr0Kq7A5Rg2GgtWLCloikT548er10NVqyOU / URIs3U0nX + iki5Rj91UImIzSUQ3706pgDdxepy + E =