From cf7f8c07977d82c4d7e1801b2ab474cbf0d69a28 Mon Sep 17 00:00:00 2001
From: Alessio Piucci <alessio.piucci@cern.ch>
Date: Sat, 27 May 2017 16:52:43 +0200
Subject: [PATCH] Added the multiple scattering contribution to the chi2
 covariance

---
 CMakeLists.txt                    |   3 +-
 include/TFRChiSquaredFit.cpp      |  58 +++++++++++++++++++++++-------
 include/TFRChiSquaredFit.h        |   8 +++--
 include/TFRGeometry.cpp           |  32 ++++-------------
 include/TFRGeometry.h             |  12 ++++---
 include/TFRMultipleScattering.cpp |   6 ----
 include/TFRMultipleScattering.h   |   7 ++--
 include/TFRPropagator.cpp         |  11 +++---
 include/TFRPropagator.h           |  18 ++++------
 slides/day_4_performance.odp      | Bin 2467683 -> 2470047 bytes
 src/detector_sim.cpp              |  51 +++-----------------------
 src/fitting_chi2_linear.cpp       |   8 ++---
 src/fitting_chi2_quadratic.cpp    |   8 ++---
 13 files changed, 92 insertions(+), 130 deletions(-)
 delete mode 100644 include/TFRMultipleScattering.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8077bcf..2e2eb00 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -234,7 +234,6 @@ target_link_libraries(DICT ${ROOT_LIBRARIES})
 #add the custom libraries
 add_library(cparser include/cparser.cpp)
 add_library(geometry include/TFRGeometry.cpp)
-add_library(mscattering include/TFRMultipleScattering.cpp)
 add_library(propagator include/TFRPropagator.cpp)
 add_library(kalmanfilter include/TFRKalmanFilter)
 add_library(chisqfit include/TFRChiSquaredFit.cpp)
@@ -259,7 +258,7 @@ foreach( appsourcefile ${APP_SOURCES} )
     add_executable( ${executablename} ${appsourcefile} ${ROOT_HEADERS} )
 
     # link all the libraries
-    target_link_libraries( ${executablename} cparser geometry mscattering propagator chisqfit kalmanfilter DICT ${ROOT_LIBRARIES} )
+    target_link_libraries( ${executablename} cparser geometry propagator chisqfit kalmanfilter DICT ${ROOT_LIBRARIES} )
 
 endforeach( appsourcefile ${APP_SOURCES} )
 
diff --git a/include/TFRChiSquaredFit.cpp b/include/TFRChiSquaredFit.cpp
index bc16e86..86733f8 100644
--- a/include/TFRChiSquaredFit.cpp
+++ b/include/TFRChiSquaredFit.cpp
@@ -112,7 +112,8 @@ bool TFRChiSquaredFit::FitLinear1D(TFRTrack *track, bool xz_view){
 //----------
 // Perform a 1D linear fit, with matrix formalism
 //----------
-bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){
+bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view,
+					  TFRGeometry *detector_geo){
 
   //linear formalism:
   // f = Ap
@@ -172,16 +173,30 @@ bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){
     //should I fit the x or y position of the clusters?
     if(xz_view){
       X(i) = curr_cluster->GetX();
-      
-      //let's assume uncorrelated measurements
       V(i, i) = curr_cluster->GetCovariance()(0, 0);
     }
     else{
       X(i) = curr_cluster->GetY();
-      
-      //let's assume uncorrelated measurements
       V(i, i) = curr_cluster->GetCovariance()(1, 1); 
-    }
+    }  //if(xz_view)
+
+    //should I take in account the multiple scattering?                                                                                                                                           
+    if(detector_geo->GetMultipleScattStatus()){
+      //assume momentum and Kaon mass...                                                                                                                                                          
+      double momentum	= 5000.;
+      double beta = sqrt(1. - pow(493.7/momentum, 2));
+      
+      //the first cluster is not effected                                                                                                                                                         
+      if(i != 0){
+	V(i, i) += (pow(A(i, 1) - A(i - 1., 1), 2.)
+		    * pow(detector_geo->GetMultipleScattering()->GetThetaRMSGauss(curr_cluster->GetLayer().GetXoverXZero(),
+										  beta, momentum, 1),
+			  2.));
+	
+	//let's forget the off-diagional elements, for now...
+	
+      }  //if(i != 0)
+    }  //if(detector_geo->GetMultipleScattStatus())
     
     ++i;
     
@@ -239,7 +254,8 @@ bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){
 //----------
 // Perform a 1D quadratic fit, with matrix formalism
 //----------
-bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){
+bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view,
+					     TFRGeometry *detector_geo){
 
   //almost the same of the linear case, with the only difference of the dimensionality:
   // f = Ap
@@ -285,17 +301,32 @@ bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){
     //should I fit the x or y position of the clusters?
     if(xz_view){
       X(i) = curr_cluster->GetX();
-      
-      //let's assume uncorrelated measurements
       V(i, i) = curr_cluster->GetCovariance()(0, 0);
     }
     else{
       X(i) = curr_cluster->GetY();
-      
-      //let's assume uncorrelated measurements                                                                                                                                                             
       V(i, i) = curr_cluster->GetCovariance()(1, 1);
     }
     
+    //should I take in account the multiple scattering?
+    if(detector_geo->GetMultipleScattStatus()){
+
+      //assume momentum and Kaon mass...
+      double momentum   = 5000.;
+      double beta = sqrt(1. - pow(493.7/momentum, 2));
+      
+      //the first cluster is not effected
+      if(i != 0){
+        V(i, i) += (pow(A(i, 1) - A(i - 1., 1), 2.)
+                    * pow(detector_geo->GetMultipleScattering()->GetThetaRMSGauss(curr_cluster->GetLayer().GetXoverXZero(),
+                                                                                  beta, momentum, 1),
+                          2.));
+	
+        //let's forget the off-diagional elements, for now...                                                                                                                                      
+	
+      }  //if(i != 0)
+    }  //if(detector_geo->GetMultipleScattStatus())
+    
     ++i;
     
   }  //loop over the clusters
@@ -343,7 +374,8 @@ bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){
 //----------
 // Perform a 2D linear fit, with matrix formalism
 //----------
-bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track){
+bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track,
+					  TFRGeometry *detector_geo){
   
   //linear formalism:                                                                                                                                                                              
   // f = Ap
@@ -423,6 +455,8 @@ bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track){
     
     //let's assume uncorrelated measurements on x and y
     V.SetSub(i*2, i*2, curr_cluster->GetCovariance());
+
+    //to write the multiple scattering contribution to the covariance!
     
     ++i;
     
diff --git a/include/TFRChiSquaredFit.h b/include/TFRChiSquaredFit.h
index 54c0ced..3443691 100644
--- a/include/TFRChiSquaredFit.h
+++ b/include/TFRChiSquaredFit.h
@@ -36,13 +36,15 @@ class TFRChiSquaredFit {
   bool FitLinear1D(TFRTrack *track, bool xz_view = true);
 
   /*! Perform a 1D linear fit, with matrix formalism */
-  bool FitLinear1D_matrix(TFRTrack *track, bool xz_view = true);
+  bool FitLinear1D_matrix(TFRTrack *track, bool xz_view,
+			  TFRGeometry *detector_geo);
   
   /*! Perform a 1D quadratic fit, with matrix formalism */
-  bool FitQuadratic1D_matrix(TFRTrack *track, bool xz_view = true);
+  bool FitQuadratic1D_matrix(TFRTrack *track, bool xz_view,
+			     TFRGeometry *detector_geo);
 
   /*! Perform a 2D linear fit, with matrix formalism */
-  bool FitLinear2D_matrix(TFRTrack *track);
+  bool FitLinear2D_matrix(TFRTrack *track, TFRGeometry *detector_geo);
   
  protected:
 
diff --git a/include/TFRGeometry.cpp b/include/TFRGeometry.cpp
index 4e4a50b..c593852 100644
--- a/include/TFRGeometry.cpp
+++ b/include/TFRGeometry.cpp
@@ -10,26 +10,6 @@
 //------------
 TFRGeometry::TFRGeometry(const std::string configFile_name){
 
-  //-------------------------------//
-  // setup the default propagator  //
-  //-------------------------------//
-
-  /*
-  propagator = new TEveTrackPropagator();
-  
-  //setup the Runge Kutta stepper
-  propagator->SetStepper(TEveTrackPropagator::kRungeKutta);
-
-  //set a uniform magnetic field on x direction
-  propagator->SetMagField(0., 10., 0.);
-
-  //some other options
-  propagator->SetFitDaughters(kFALSE);      //do not follow the daughters particles
-  propagator->SetMaxZ(1000.);               //maximum z-coordinate to propagate, cm
-  propagator->SetMaxR(100000000);           //maximum bending radius to propagate, cm
-  propagator->SetDelta(pow(10., -6.));      //'error' on trajectory reconstruction
-  */
-  
   //-----------------------------------------------//
   //  set the geometry from the input config file  //
   //-----------------------------------------------//
@@ -41,8 +21,7 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){
   //----------------------------------//
   
   //loop over the detector layers, to create the keys of the map (i.e. indexing by layer id)
-  
-  //I've no clue why the hell in ROOT there aren't nice implementations of iterators,                                                                                                                  
+  //I've no clue why the hell in ROOT there aren't nice implementations of iterators,
   //but just this stupid way (that I even didn't used at my C course during my bachelor)
   TIter it_layer((TFRLayers*) this->GetLayers());
   TFRLayer *curr_layer;
@@ -50,7 +29,6 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){
   //loop over the detector layers
   while((curr_layer = (TFRLayer*) it_layer.Next()))
     layer_map.insert(std::make_pair(curr_layer->GetID(), curr_layer));
-
   
   //--------------------------//
   //  set the magnetic field  //
@@ -65,10 +43,12 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){
   B_mag = configFile.get<double>("B_field.magnitude");
 
 
-  //--------------------------------------//
-  //  set the multiple scattering status  //
-  //--------------------------------------//
+  //-------------------------------//
+  //  set the multiple scattering  //
+  //-------------------------------//
 
+  mult_scatt = new TFRMultipleScattering();
+  
   if(configFile.get<unsigned int>("multiple_scattering") == 1)
     multiple_scattering = true;
   else
diff --git a/include/TFRGeometry.h b/include/TFRGeometry.h
index 740256f..7370452 100644
--- a/include/TFRGeometry.h
+++ b/include/TFRGeometry.h
@@ -23,6 +23,7 @@
 #include "TFRMCHit.h"
 #include "TFRCluster.h"
 #include "TFRLayer.h"
+#include "TFRMultipleScattering.h"
 
 using namespace std;
 
@@ -87,7 +88,10 @@ class TFRGeometry {
 
   /*! Returns the magnitude of the magnetic field */
   inline double GetBMag() const {return B_mag;};
-
+  
+  /*! Get the multiple scattering */
+  inline TFRMultipleScattering* GetMultipleScattering(){return mult_scatt;}
+    
   /*! Set the multiple scattering status (enabled/disabled) */
   inline void SetMultipleScattStatus(bool _multiple_scattering) {
     multiple_scattering = _multiple_scattering;}
@@ -102,9 +106,6 @@ class TFRGeometry {
   /*! Geometry tag */
   std::string tag;
   
-  /*! Track propagator */ 
-  //TEveTrackPropagator *propagator;
-  
   /*! Detector layers */
   TFRLayers *layers;
   
@@ -120,6 +121,9 @@ class TFRGeometry {
   /*! Magnitude of the magnetic field */
   double B_mag;
 
+  /*! Multiple scattering */
+  TFRMultipleScattering *mult_scatt;
+  
   /*! Status of the multiple scattering simulation (enabled/disabled) */
   bool multiple_scattering;
   
diff --git a/include/TFRMultipleScattering.cpp b/include/TFRMultipleScattering.cpp
deleted file mode 100644
index c6b0e4f..0000000
--- a/include/TFRMultipleScattering.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- *  @author    Alessio Piucci
- *  @brief     Library to handle the simulation of the multiple scattering
- */
-
-#include "TFRMultipleScattering.h"
diff --git a/include/TFRMultipleScattering.h b/include/TFRMultipleScattering.h
index 1f7edf2..b4ee40e 100644
--- a/include/TFRMultipleScattering.h
+++ b/include/TFRMultipleScattering.h
@@ -17,9 +17,6 @@
 #include "TROOT.h"
 #include "TRandom3.h"
 
-//custom libraries
-#include "TFRLayer.h"
-
 using namespace std;
 
 class TFRMultipleScattering {
@@ -36,9 +33,9 @@ class TFRMultipleScattering {
   ~TFRMultipleScattering( );
 
   /*! Returns the angular deviation with Gaussian approximation */
-  inline double GetThetaGauss(const TFRLayer layer,
+  inline double GetThetaGauss(const double x_over_Xzero,
 			      const double beta, const double p, const int charge) const
-      { return random->Gaus(0., GetThetaRMSGauss(layer.GetXoverXZero(), beta, p, charge)); };
+      { return random->Gaus(0., GetThetaRMSGauss(x_over_Xzero, beta, p, charge)); };
   
   /*! Returns the rms theta for Gaussian approximation */
   inline double GetThetaRMSGauss(const double x_over_Xzero,
diff --git a/include/TFRPropagator.cpp b/include/TFRPropagator.cpp
index e7820cd..01ec1f5 100644
--- a/include/TFRPropagator.cpp
+++ b/include/TFRPropagator.cpp
@@ -272,20 +272,21 @@ bool TFRPropagator::AddScatteringToCovariance(TFRState *state, TFRLayer *layer){
   
   if(x < xmin || x > xmax || y < ymin || y > ymax) return false;
 
-  //Check wether we should calcualte the effect of MS at this point.
+  //Check wether we should calculate the effect of MS at this point.
   if(!m_useMs || !m_geo->GetMultipleScattStatus()) return true;
 
   //Get multiple scattering factor (how much material)
   double XoverXZero = layer->GetXoverXZero();
   
-  //Calculate the expected angular defelction
+  //Calculate the expected angular deflection
   double momentum = fabs(1.0/(state->GetStateVect())[4]);
   
   //assume kaon mass
-  double beta = sqrt(1.-pow(493.7/momentum,2));
+  double beta = sqrt(1. - pow(493.7/momentum, 2));
   
-  double angleRms = m_multiplescattering->GetThetaRMSGauss(XoverXZero, beta, momentum, 1); 
-  //Tranlsate this angle in variations of tx and ty, tan(alpah) = x/z = tx (Good enough approximation also for the 2D scattering case)
+  double angleRms = m_geo->GetMultipleScattering()->GetThetaRMSGauss(XoverXZero, beta, momentum, 1); 
+  
+  //Translate this angle in variations of tx and ty, tan(alpah) = x/z = tx (Good enough approximation also for the 2D scattering case)
   double txRms2 = pow((1+pow((state->GetStateVect())[2],2))*angleRms,2);
   double tyRms2 = pow((1+pow((state->GetStateVect())[3],2))*angleRms,2);//TODO
   
diff --git a/include/TFRPropagator.h b/include/TFRPropagator.h
index 16880f9..f358280 100644
--- a/include/TFRPropagator.h
+++ b/include/TFRPropagator.h
@@ -19,7 +19,6 @@
 #include "TFRLayer.h"
 #include "TFRState.h"
 #include "TFRGeometry.h"
-#include "TFRMultipleScattering.h"
 
 using namespace std;
 
@@ -31,9 +30,7 @@ class TFRPropagator {
   
   /*! Standard constructor */
   TFRPropagator(TFRGeometry *_geometry, bool useMultipleScattering = false) :
-   m_geo(_geometry), m_useMs(useMultipleScattering) {
-  m_multiplescattering = new TFRMultipleScattering();
-  }
+   m_geo(_geometry), m_useMs(useMultipleScattering) {}
 
   /*! Destructor */
   ~TFRPropagator( ){ };
@@ -44,22 +41,22 @@ class TFRPropagator {
   /*! Get the information wether multiple scattering is taken into account or not */
   bool MultipleScatteringUsed() const {return m_useMs;};
   
-  /*! Set wether multiple scattering is taken into account or not*/
+  /*! Set wether multiple scattering is taken into account or not */
   void UseMultipleScattering(bool ms) { m_useMs = ms;};
 
-  /*! Extrapolate a state to a given z position. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field*/
+  /*! Extrapolate a state to a given z position. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field */
   bool PropagateState(TFRState *state, double z);
   
-  /*! Extrapolate a state to a given z position without taking into account multiple scattering at layers. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field*/
+  /*! Extrapolate a state to a given z position without taking into account multiple scattering at layers. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field */
   bool PropagateStateNoScattering(TFRState *state, double z);
   
   /*! Extrapolate a state to a given z position with a straight line */
   void PropagateStateStraight(TFRState *state, double z);
   
-  /*! Extrapolate a state to a given z position in a constant magnetic field. Returns false if the particle is replected by the magnetic field*/
+  /*! Extrapolate a state to a given z position in a constant magnetic field. Returns false if the particle is replected by the magnetic field */
   bool PropagateStateInBField(TFRState *state, double z);
 
-  /*! Add the effect ofmultiple scattering at a certain layer to the covariance matrix of the state*/
+  /*! Add the effect of multiple scattering at a certain layer to the covariance matrix of the state */
   bool AddScatteringToCovariance(TFRState *state, TFRLayer *layer);
   
  protected:
@@ -69,9 +66,6 @@ class TFRPropagator {
   /*! The used geometry */
   TFRGeometry *m_geo;
 
-  /*! Class to deal with multiple scattering */
-  TFRMultipleScattering *m_multiplescattering;
-
   /*! take into account multiple scattering or not*/
   bool m_useMs;
   
diff --git a/slides/day_4_performance.odp b/slides/day_4_performance.odp
index b5ea1ddf052e482b0a3d55d8aec9f0eebb739f7d..3c510be9b5cd9275d14ff46b1b3387a66556d2d1 100644
GIT binary patch
delta 18604
zcmY(qb8shdvpxKc?QF2IHa0f4vB8ELYh#-eCmY+gZQHhOV`IJh+~?l<)!SV)-KS^f
zulZE<snb1slZjwiJBeV33NjFom>>`=2o&fXgZL9U(78?8>;WU*5gP<@#E!9&0HC0t
zAQ7?P(Qq)}A+gYqFflMO@F~BLvr%BdljC8s5TP;?qi|7TQBhKoGVqZz@o_RzadL7J
zut<<`NK^AEvGI!03#+n<s&fA@;8!#dqQ{rwpitzcRuo|RA;h5~M6V^uY9!BXtiU57
zA)%?MDXMBFsco;KW%R?qMO)8E4KVYxP!;l&*0$9YGt$@fGFLM-HMO>Oax-*wcX#L1
zTl{4cpkp88tXykp8Eo$U$HX%R03toz;v_6rWNlZ~T-Plvmu+oUTwT_ztlm96->rNT
z9D-8aB67TAi;Vm>E&puWNA9@A?`0t(`qHpv!y))tYx>)2g}IqTIXEWk1NyOErm+sr
zpTfwW64;+g_@6(hKGnW`XtI46bA8%!ergMSSV(-DDty>Wf4HiB0D2#8Zt20_)6@AX
zQutB>ZSx{r3u8PA3x(R6B{wp4x7rjx{k1-VOy48y-s9cQs<j^)RX&TnUt28R+gvAl
z<;KPp7A6#zmsO6(ly^7OfR|Ct*M(ni{rYcxuJ6;PCns9($J#eHx^HKCZ!d<y!NGxn
ziGF^m{-JT9QAz(SEUYXntUfTQ^iO78Qc`weT7GhJPI`K2e0+0wPGeerMSM|9Nm5{L
zR!VI~NJDT#Q(k0qVO(KhQC?n6X<d6`MSg2dMRRj=K)_~}Pj?s)wjCV&?w`7!oV=G_
zGZdbCm{5A0QGJ@7^<LaDTiw=QRCH8S^j6$*UR`z4+<aDB``+2p)!N<HFtk+Hd)YQ}
z-4|HUQ<2hNpFhx6)7RNP+|u|S6!@Oz|DKxiQ5f-Fn()>d^j??tQBd&ST=d@3(%rS*
z-_tqSQ#aDnJl_jcEDkrljfQ;mrX0?7z4sNr4>Y~cbPf*>k50|^&u-3*4K7YkZOn}<
zE-v=;Tnvr>?O!|?oxfYz*j-q8nB2Kr-8ov_yFXl-dmr!pm>+#xo4?pue%o7pzui1K
zIyyLcI=g*&KRdj?ynnyB`1{Z9Umu>{-v8b`JwClZJpdmcAFjWHy+9yL7Aa97W!Ke<
z3=~hi1+Q*K=j>||oii+|JWUA!r6p)p5;;6P!wCPS*}<DuuU03iL>$@uinUqm7&drg
z4G0ZsuL3UB<5}TKO@{fS7H0w%)*lMCs-w;cr288jiQ=8tic^C}%P~eb<pPv4FJ2EG
zlp2kOTmTMqWBD<~?1snVrQ_AB_toRk1`(@mAY~zZ_W$^{{Ye)JURV}E>c|oB_O~`F
zL%)F?ZoBQi3JkwRpERrOqC-4Qps6zYb2>tXJ;~$Cw#U>Y?KAb=$-k$Z5Bs8<gWSLz
zyFZ&cP^?=NVYH!$zk-eHX|it=OC2kzIRS>op>9gSNJIq`^_)d=`?fMl171ube;XjS
zMcBs!`Pj!%J`6VgW-awAf?Mk+%U^1IcMIsDfVv)SkextKzj?$xMCMc)^L!EuDsf}~
zHO7R^!8Gooqcx@VetLF>JJ`qjOcu1*Ly&y7gzTf+d~&F}WovTr9RZ{OzF8E@cLo$b
zmV4aSja$HOLoAhb{q;UyM7mlUR=%iMZX@u#pe#!E5N5^m)}dJPQtx<9G8`|er#|G7
zNWr$&{r(;%@ZA@G3EpRYf{3qo-n1br6^coufRF-&+ur-Oorw2yiRsLuQX<3k?`m1*
z8_}Vz0;aiKgUdE52p{~KyRTdq_z8r&u>@xU1`PQ6-)uVJ_#1;jS}qd1shU5R*4^UW
z4j)pVhAK0gFSJ7&i+<aq+*MJ55xFn*!)$s<7rwkx-1}d(s=uO%t=M9$*bbdFG|}9o
z*(eM<eNT_2tiC}t%oGA`88diBmgsf`fh?cMqb)BFx1>Fz^*8Z8H&q_ro`7G6kz{H^
zk4z2hE|d7$pC?%zMTyVf1kE9SI>=uRtBglHm9)SdWIqJvou$Zss%cwIuvS%lBKI!}
z+~uYI$zz{mC0O^^Y&v`c#oM6|8FL_TFYL2=EXqx{XVP1C2j;BW<yn`X*bS@E7r(8a
z=R|t<|MD1GeT39~lYFE97zU!~4{iFF_<hXj6rldknFKWc1Q*EENh|A>!02Hkq$%Tl
z$NSVrl=@8x4XY^yViT{PH)JbM<+bb}MOU1$BCuPr4LpSuq9g<_ElsHiUC2jIL8ZH<
z3PlVlBL%^pT{x+Y{T?vFns5^CC|WeCf&2E8&-kYei~NQju%|xPAly;Xr^V<wZDeqE
zsy;T@>f$n=R`CU_+n|a)jkC^xW26-BG#*c~BcXzQMlt)e-<(6JGIL(umJT-YC;RV|
z1NP0|=o7zniV;Eg<{5fT3n{X{p}^+L)Kbbha=i24{GrlDw3cqH!!|5CRYgI$f%6*U
z4~E3c<0N4RKoGZw@i8bF#8MEb4Bi?9(WcYGq=bU&pck480cTuyL}`0Ghbko?ZyGKt
z>FgI!?n#j<WS~)b$z(;YB9INQM-MSQ#!`U~8n9%x(Yjt~E;c$4SWG!ZrNRT<jKVPS
zK^V#z&czuT&Kd48@$>O>ysVzg)TG$8TAisH8oRRq`~*W)H*<S&afWtuX}&iIb8~SM
zdwX&Ib8$=@{H?#i*rIxjY#eO*3WMm=zPhJ1vAJYfb8h;CF`s|ZYc{gkgc@cP76w&J
zbZ9mbUJaT<3<>ZfAtA|WrlrY$Cm?!in45NKH~Wo*;_G|ab9wmh>f7micsWwjS=iG#
zvndB)M|XE`pZH#y9TWU>ysJyRcH7oAxAGR3Y7cbimlt;rm~Zm(4@i;SCq0)b@N-~A
zQA2Yo6zczbSoA~@uijS9jFAL2PT&4ERi%v5KoCO;WK#T)fsRtI<*PlCdk-n6<MZ0p
zFb2VQkPrjtbrrX+zvajB!h&U#ega$T0m-i3C*D|UxIPkUuIv`&@R{xT&b(=~>5J5`
z37Ma2o9pj!`z-dIs~{r<Og_f!P%Wxh6L}dOFoMog5n?N?XBw|xnY17uPp%#<I5^ZL
zI#8}k5ac+5iIe?^Sw?IA2m*`LL9AEeUob4?5qYo44cGILN@NfUNnM8QJkYxm?HN^8
z3MN>Dx8SzXK22PFidihGn(+PBYF@@g6fbw2z@;I`$Hydl1YX52*PKo33%m&h{NMUv
z8M|`=6oD@7Ag;W9qjOajR<de8S!pnZa2^ymcUf1h^)W*&r8%KIOZLpYFJ2A7psf5N
z(QReqceaXcm;*dAcSH~=7$E<<ld@Q^3L}pMGA-g2UF<qK*8Knz{tJ}gK4$=1f-8$1
zgikKT%#@NCg@&rCo-@4qQfMCLT1GzJUP_>dAboFkqeEdmZI$p3#iKXGUzCI__FR4t
zAeO;8gaZSp-_ob|O48Ax^-A->zu*Qqv0qS?%8TbpNxW2{V)uJDMuAlnbvTLQbn@)v
z+N*Z5{G>2QDu-KjwiDAYyf!c(w-Ym;l-y@6D>ziAYfJ;4nV+y5(;;wB1cJ9llW!X-
znA$SDj>JNOa+!R#i^D^N+-Zt4WhBoJ(J}_zPwRy;8DMWn>p`uvbuXa)UTUmfeU#NM
za1a`=BZcGPcF#kwDbOSGO6WmV5;*C3p!bSfI#0B|<o$pNTT7KSB@<paB^6hGDy755
z3+2?qLC@&g{#I^_mZ|MUAvyo%fcC31ZrW}J0TjRsGXCuGx`+}Lk+%Qr^he2$kCb>I
zumtuEB;|N-uMJ_0NY?_}^Rox?umooiuh3EGi^2JPzA2nZ02#0ZujwC|!bN`|36V+^
zpnn>KZS4EGVGDJHgsDATtvwzL<$_Y)QGf$5?N=Ab>MILod^F(oS`FDXr10P>O?IqR
z=^9Z=GEZEYELC4qr7wbJU0Z5;PqfKL7WJii*BpY%Y&as={E&_9`Rrk+^9khiXR`4#
zLU&Fis<BA`c%wS3Lumw_)49L*)>McssZ+bc*YTrh2ZXLoVyj%2LNwE*`w`)6d^WtJ
zwZ?L}AP37ZJPr4}3yDx?ay6~v8t{FJDv=n6TF2^4f<mdkNYM=s1sN)El(-ug|Cc~i
z6!->p>X2bc<9!lm1l<U|@Im<B{QVnf`Sqoc8NjHL1j!kKHmXZXa&ULkQU&;z*VpPB
za+=&gUpbs?F09S1j|oh10ycv>={t~4q#*_IobcUi0#R*NXW6DBA_$K+-M_j=H2BWc
z>}?d~*i^Tb2!o9e7C7pZF+nm(NQk-*s$+hGx8+0nf|zX%RSGg4=CQF(f~K4~PM@>z
z1YnL#u;i&HTE>H-h<w9q{J$R*JS)>E4T3DWt4V3E+q-La#eMfQB%3|K)TVdvosqaY
zD!>@?*C%s)Fnw&xwoo)|vL^`O{Pd14@M&Ser{Mgwp}T&<OIwc|IlMyXbfFkncNq?&
zIl{c_sC8f5LycnkAa;*Bw@v(J)r<%v0Kk!}=5}0UDv-0bXrb2hmd_lyG{K|ev>5v5
z4xO6%ed;vWFvj-yRns;W!IoW%XmKoWq~Vg*P9Ul<uZP}#B+=p^Nit|9UZE0`l9Z0F
zC<_;cTL{F6(!@&l8^kEn#Ds{E;K_*^%wURl!6Cwv)hLf6b^n1ZoM-z}MxIY&2S|!V
z5E#^mas;Xn`?ne8;)sj0Qqv{o+pGFH4$BYRVHge?ncQrUI4Ih7Ql(|b9j?gkbdc@O
zN+rmiFma{H8I584Y+b<jD|8cpX_15X#pv~;A&WxjpI-?Qquvbp)l-4{?wE3-!Zsp_
zC><{sW3ZYmLB>NUDol<M&KFPvz;ZE>WH~i0>J87v5B%KNt*cvcZF+v{od=mopDK2!
zOOB+mllb&aNL5>Xd!7v?aL%@IKWmH?_d0lISq=<~I+I*$>_w*ru3igxL7K0~D6cF`
z_;R8JK5GK|2rw8*oC&=#goK3LF2M3*?ROT$>7WfFL=*`Y)EDt%%vE_607Lx?WSs;8
zoZtCOp4CqE<ALcko_1TLg6rh(A$UJ6I*nXis44u>(Oby6>Tk1a;66C1o*#(x+EekR
zsTu~v^m}S7GM63hpz4g!39Q;sI-f!JV_qjEO70m~%QzHzSJH%mDpO(+FCVRMF|jPT
z!}%;FS~PKj7+J8v7}O!6KnCt9>>0TP<I9NwN6AmxKQKPZbb@CvBosouS-BqAo`?1z
zJ<{$&^~8qIZGFYGwHdPd)ESC>q1LI3tpjr_rv_JoV~7`9pSFw&>!vXzu%f;b>zl@w
zUl~^XB~Cb={Avsbu|9RVA{tYx>Wc;@6}+yR_})cb6FZJlv1`;hfd9F0TpevSkGi;s
zV7)`_8)lA;oc;wJ__ipUB`GAi?(~7kk<KlQpRZ5As&4GtF(C}evEz{6rOz1c^IHsY
z5Zp0`;2=GiO^eKtM#@oE?OFvm0$A485&Y{0KT)>veU3tlrxltSlR~4kg2})-xNbDJ
zH-ZXTrl%3L6Jx9xz`vaf@ie9YSNoi_7wuVhazL}&@;6oGCeh|Ap@L}8YM4=2*<c~*
zuqPT#WO>cu)NAh_)9~F8sgf3Aj|DI)=b7<U$jLqp^)`5xQg8)X=Q2}yaPblFL3cWH
z*tqUB&iGU1vMPG29j4`oN<%%W-AE~KiEhg0APCg^mUVt=V3+XWIUUt0aKkrS#vbww
z)oQ?ZH%Pr~3N5iWI+~RDdA%=oiD&;FMitj*!#h*pfVt)&nppEo^_meHf=14!xL`Ij
zi$w*1#WFlFnW~_)-sf#Xd+Jz)>Cncklo({l-?WxtiXd1$L6H;dz(d9?5I_;UfBg);
zd|Qr2pNDG)z(814=qocG8@H{`H;9MN{-ZCsSgEPg@g+Y4Lby!{{$dG+N2tt0hn^}j
z(9n2+m2j}5DV@j_)F`uj71tPwK}D_?^DiMm^dn=oH3?5%{vr#R*Ea$wx?ZA38l>-p
z=`~^-bP28)9_~*q8SryEl-xi>T>w8aAr9ShE@plmFz<2rF`oJ~f8dqZ&%2SVEdnBi
z+58xx?}aY|*UP^#lJ6myFFDQXshqAe1%uM=w$aY)@Yo^mu$+cqJz>iywA#XUg#nq;
zB4;}wR?DUF;I;WAtFx-v7@WbWXEwrdEcP1?{x+UCM(=er`8<>|JwHD=u{=M2iFkOJ
z`n+NRfZgRKnT-#j&dr))Sq~{J!X-6t*mR$d%s~u6IxJfEKCCk6^odbT4P<0H4jx-N
zi@I(j69B;CZmTwz2aW`QhW9&@#OFz$qE2n}?k1Ve&ChELcdlcfbqcpg##$Ok$EZfY
zspXFE4ILCoPxI4lr}7qbJxJ~B?AoG|^$Q>b9b9ka*?GBFfQB`j^-A=%&r_E1z@{0Y
zvag4PukmN*0axD6TaY-V#E-~u9E-uFCmikklQ1K_^h{4r&q?K|$%ue){|g|2GMb<3
zJ1_Xf>xX^MPFDjC2%utBgv=gm&o)?7;idr2|Ll)~AL9o9J^UD)8H~$#=Oc4@1YCq(
zE<f7j*)juS+C1FdU*t1I$=q^lx{AuqL<Pc~A}k|K@a!N;dk2BHU$5AckuFZ`na8KW
zACr|B+Ul!r+3yHIqALU(D%Y(Nq0i+Gl*ZijnWyz%uKCg-Rd-lflb!yNk4($Y{lkyU
zo6MTFx@iHHS*P#tqCnK<0=sYm@Il_#1;Z_|W3(g*aD)|Bm(>+H+;u5xa?aL08=1%p
z{B@i?eEj}^Z~FO`_3dy=#@3Y?luOG3PE0!H#x_yR`|(HK6R`gR+COmrDr8hAl}&US
zU3j9AUl$$uJ+g=-@*p{9Q;8)l$Py)g23xuaBZ~KJz#%%nECfx_;70ZZ(DHcoU-_==
z7r<+6`0O?{Cok~*g%`Qu3laEd74?ooROU#$lHZ*;X!OAV)JkI??Co$v_B^+@(%03I
zSl(@asP1b2q&WhGK{LeZ%WvB}jriM9co>K*1D@LQYeBHNTJfNB*N^07ZO{#^7WA4d
zgZWpld|N+MvVG3KW$tXiPbtuJ2P+6wV>^qTF#3daRZMQ7f9v&pAS}!VUEo3V??KKe
zc=qRv31lMQx^F~gD)Fz_{RMcp-DQP89={{`&|af*B%#0rNk09jOlxwL1q5FDZZy=M
zC<UYvL4v&^jB4?a*<WC%?oUvFqt~ekaGbASX~2k|v5o>qal7S#Pjc?HrM$c;`6z7v
zoLEryEl4yd=#bsQ-Lb?LM|BLtvk0u8q-D5C7}P=wB`8%QPOD%qeta_uk?kCx$}=|*
z%V?rBU^xIbEiHh(F0?6nz>Xw{Ce6-1nc)8G3vJmK7-9)&KD?}%``Ce-rWY8Uv1jM!
zS+Gs?Dm~Ja1PDPOzE+kNMzC&e#pUBuy8u4v2VGi4Gf6dR$v^V8O@Cri`sd`89x=l5
z&Caai2@4Wred*VM2rtjao$DvQMF~cl2ABxnOj(_rQ&gpqtf!@JVPNWL+ksRUNqw?Y
zG+4)0c{pmpX;a-I*~?l}41Jf>(}q{w)(6+Nsd<K0)XM;$gz|Qui~D8H$OAh3v06e@
zxEfdv-vW75jpw3jrOWt;K5*Z<kg*pB+1~Hx=h6_#=$V6s(<YgaLNy2+i-V=$9DYf@
z*y^b2Keny>YG+0XdbJ{rp|rC>m*||_TU=rz_y#q|C^z_MY+o#h4A6Wt4lc57U3n40
znk~mdZ0!L{p+Z$L7);W+b*%ty)}}wUFK-BkEe7`~!t@zgcV_l2&x+QUyaHDWW4vLd
z=;h$W;I6cwb~RUn#tHc~m&@f$-8Cr(dL9?dQ5Q?iJ2Q#1$_pMBE852DXe{vNPnpMy
z^^Mt8zpRW%E1vYrMeR1{`U~6o`f@MO+U45X>@Ki+Xm8bq2x?lId7((U(=i#-Ir4h6
zer&wlSX*qo==At>b%6rep4(bFSZ}pGvVa<SoVi>sJ087*4IeL6j~)mr)|`2?+8!<)
zRRbV7QGM(CPMXsp#|>*P;HAbJX?eA8Kp!YqKAYJ(?*r|ie<mgNL$p#@&+os|JTxpU
z>_2Tj&KsE!NMpime^euGRog@12glMcC@pngE=@?4?hxyLD75YoZ`7CtbRkG6Hi|?0
zp*F|UZrV*ohkmX>GWM#MEO7Lr!9(OEA1V<v?KEw`L<dJLq$vpq$b6$(Dz^!=&;C-0
z%&Vfooz$prgSpU<kXYLKC6Qa)iE>^z$AT>*;E=Hh5HHnTyAF0B2(-lsG7TZKibTa0
z11mZOKREY0bDxu?n#?xsFV-W8WYVh6>+_I{SZ*koggq;3NE2?U8cMCZENJLVCNy&Z
z#X0#YfFC_VS!u4UmvI_^%~>6>qfDq2HpE_ZSc#w0E=lycIap9_Iv{$THk9>*VfL+E
zn<ISy!0N93>fP6Jtf+v6TH`&=Qv0v)tOmEx?b*e!z087mKD7js)T7km6z#sWTzLpR
zc|Qd?c+wU3iO}_BXWIn>;%$8=e)-89EfHRC%6618;&g27?30mXF@3nJx(Bv?tJ^9^
zYwR_P{S@I;`~9Rywe!5HEPt!le{{0V6tO!DP~KdVs{pIORGn8MByD#m>r0Uy@?fzT
z%9Z<yt>7dJz%vP-5%ZDBKy3utp$JTl<s1!@OT~nx2dms>{j^`WXr5b?!jj#(*LU20
ztW=wvLNX>Pmv&|6ay_$Ad<RpIfq_N!;49n)1A#0cL7@L0fd78~HfazjE)|suxNuZQ
zY+?J&agrPchs3F6Dd~!l2);TTOFLpWTvcU6JOLe74eipH#EV*8;1HQV^}=v_v_%MU
zy8~wDi_6CtFMu0}67qs*z|F(xTB*%T`{sPpXX5M<?4=wy9tAFHtVm3)f^j3{RFvD=
z?xhpLS;0bFU95ykteD`P5ExPkw5jMeR(>-Yqm6=`d%f$`8m<0CGhp{d&HvK>RIbb+
zR~Nso{T+!59UgvI^x8Ur@wGkw9=D^fPFpdtLifQWoG)yVAQ3_)Kn-!Px&E!gnjT!%
z`C!&6j2}U`z)iX{l~&NMnl{|Jjrp{ow5cI&YE>=lzE_kcFsy;Ed}4bSxHGp;{0vpk
z6<iw*UNEk>Y0suAL%|uCTKp+__UM#_hUE@U7wI$B+xt?e6>$2ku+~<Qm;d$N!3^Ul
zt(xcfN1<O5z{j_V=M|olUerUR5+2&}{f(lx&aL$Ac4cN{rSfS26d)!`;x2m4jvYFO
zO?#4e9>M6W7{1HlN%2z>sHDrW&AG@;xBB)Azpqh!Vu<#M+7J@#S93FjXtvk2)#ULR
z7eA!CCL%SgcA<uSz?CoVDL8+h^8RqH08er*FIQ!eZZxA+CBxz5tl=s1DmTtZ-Z&i}
z`X3oV5}{sFX7zp3u2tuSBxsnr9QVcHhlLUT>~B3_g@U<+WMM{&0Qae1J)8FFprZkf
zhD6;+LU2pPVjcw6=v~Jk40s0NQao%Yl~%m-2M^CwVL{P@BwQypJHg==*;8ly?5hHD
zUA{eNju&fM-${JAu>U>63l**Z?k}f%U8hp!Q$tlcYh`9eILag{T0<U5anGDDYmlN<
z%(8G&kEe4Lbl5x_umtyTrTv#G4b|qp@AZ5bPRI-S7!hfiMU9hpB3ds*6y*jiYz~{m
zu)f5E!Wb%cf+Mfz?M&n<@164SVw%U$v`VCh8$v6);#4IxQSnW8d#&Lr*t!gKO~3O>
z(pAFEQy=+)KJz_NI-4sx{AhSa;n^9zFTd_Q2A0oZ{R3$aXr3^^w~FbHNG+6dT8@)2
z$e(e5m8T4cT4Ea*A{4F@^Ex0$owvSz0lVSp-9=6X18y!dX%2SBjJ($_RJ@2gd<E?v
zrKfL&`!VES=_yEP5l4D4LcaSz2D{9#(=7;UTe)mz*A-~p>`5d@j%CRhAal|L`cOR|
z7v-%+5t02PiAP`Tq$Cq|!H@;uI3^0kp~&%zt0R^)vd5BJVUK92VUUpG1fMt1Z17UD
zBI?2V-?r-zS<Qu9h)I=3a7X_t6lrmdaJEe7g=SA6Clpv$&8~#YGY5q5uZ@4Ow?)DS
z=fwx;HwcFOW^b0fvk|%v!rf!(W?rV6tx#|o7Pl}3f=U>4jm1rso_>G2aBOHT!H@AS
zmR@{xseZ;Em8!f(RW7vkjC;J%BNMCYrFiYrt&N|-Gl%6j8{rF3V}lRx>}ALhzxVO%
zx-CwB!rPg{8QXM(ys)^}A=jyCP*ayK;<Tyxk7Q&+zrAWjqUqSSy9qaZ{{!E6M}0*<
z!xhp16dV+64zd)bTZ&b?D>;x$3iI%VcuwZA1@{^KkZ^%}b0Qx(WbhUQ=i~XIbL0o-
z9|kwN6s?sW=6%7RfX(;BpQVBfVe11jinpxLK6mrk6{We^rJ;rwG;d)tv}!4`FT;h|
z@x*}=(%Gc03Gjx5O{^+1$qMxb4|CNF<a^NuNWM%vb{jY>{nCWcw~Ha`k<1Tn!8RWK
z+437#FKZ%fL#M{u(E$JIdo4-q%-P@fv%Q(%j|0Yn+p8U`0V9H{^()s6%Atnv%6qSm
z`?0*vM@;0NWjD}$?cTyz#AO^dPeeqa;n?Y~gpXSZtKaPO7W~S(X$oG55Ev-G8tr)M
z0m8HTM$jIHq5T|3hmU89>hD<sjoQz7dKbL+X2Rst4=TS>KAbc~8)c8{6FobgZ{mEm
zgl||RA8|LuUGkby4$HUWQhEqoyV`O?4+cskGx^4!U^e)MrFLJ%*Ui*(HKX>7i5!^C
zA`F&OQ#KgiX+LMt;?m$!N}Z+G-pO%LfnrCwb#{r_&fG(vzglObbruue1IjPrLnFyA
z`WTz@n1knzwp^h_r>%I&g!oA}^#>Y#H&Tc;(3QQ+l~)%mmKhp4V})@s7`fd%7j5RV
z=2m4k$&pL-9e9RJx2aJN%NzttILnPHnmbb&X2yb*T>%?r2LZ@~5ZotOCcNTADt<6*
zzdBW1<jw;A@HW05-3|VIGE(8-oq)a!RDcSkIY-pO4A_qV-K>pHOX0TE--PO$t;rN)
z1K|JZZU}utcCFAL&>+qKb+`X+9>fJ=bAtaPIbGOn{|WclJpTzjIHXB}ITVO-dN{EE
z!R9zB|1ER;Cv;(x#^K?j|8JUPkxKy&|NnLw{_}ENFfQhQZfD>U1AC2VokwcL`=K`Z
z{lPkhQ?2K6D?e&2Y*y0h5J*Y>XoTv;%$xp}e}>`OkN!;3jfECe@_E8h+Lgqo|6S%R
z?)n%kp4T?x)A@dBcZNb}i|Ik$O!W1|m9yJdM2k^<3+40XM#75!?Q$ZklcFr)XqzXA
zvyC1Zo&HCrCq7EHJ%GA(Gyb~60DlP^+VR97sENNtF-ZVt7p>BYA+uFe=?ZUAZsw$_
zUY@Z%ly7GIOSLpCal+$w;J~VNz=Is^T&+)ux|dk0s&}}Tl^9#FrAWN1M4s#4j_tX3
z+c@%_4b%FqtNV_EI8#0rtgwNQgF^`CTl*b`TMg<ZTz#UsNnkf72QRPu9E-B}<jGXS
zPO`_ktzXg5RKX9v?yERw5UC);!Psx4KThNy?&{wUD}$Y&#wVf0BA&y)Bx(%Ur`3fX
zggP}*ttgLQdHyA2SplxL2%czGIWEEy6SD0|87*bMG14zm2JDLze0ef3>0=)<^yn8r
zD0plbc#KKfmISCS=doO(ul7UYtZ+>gCUJz|kOUMGr%pEAy$wrqETQ7EyDbp;=r#2g
zLi}{4c8oB0qD7^Uhf7<g19ir=j4Wd-bm>`4tyLWfTCB|!aU$8l|MeL)kL&A?vYdLn
zdDh<D5VT}duS$4Y^3lyz_(50EvHdY@^}T9E(KAn4O&~^l`_^q6v^#_<K{z4IU*=5N
zKs=c!|HG7J<1+v&U#_Rm`x~`=taKWQ=-OZ^b~iZ5PKJVJ>@Pb@3gfxQn<li0x#LJ!
z7J&;11<3K8G|MGjwB;MM;hxkm0s-$k`lLm-TOXj%A2LI~1tE6B78J`y3wCxOHO#3j
z&hQ7k5x8GR*>XFRW5Hke-r4g3@q-rz3B0|JBEvI67#$$P-ZPtGe|OM1N@^`UFff}V
zmCH%uB(5Y<*k|_kDqM3RJdY1ogYL>Bt~`G%){+`(Z*Lp~V}ctV39(ePot)+eFB=d%
z^uE?yReqk19Mv{36%fZ!>!vVLK_T`I#c1a<0U*1g1FBPS+TYi<V7j^p-h!5Rh{O`8
zR8&ksOV4@lAsisLk>%TP2M;2Zkx;e_JVcw$0v243FZ=G*=P>6OM7#24t3-!SD9gp_
zk!J%rQJHKl{lsHGE}*AvnW6aQASMu;O|pDGo)e7aDTja5>HQpMRXvv|6`?Rg^?=JZ
z0K$g=ESiL)Y&|&-q9URsa{H1=gy+2YaU}3$(XT)uoF0_I*9$Z17>yXA%q%5bkNPgQ
zig<ogDj_iT{=t`J$3`=IQ5Jgl^eD@N=T7L;p|4?muRSu2RQdj_(nEuHFwrCBp>1*j
zLSWC^TqDSAS7>@<Z^_R#uP}2u?eE@=z|$tj){jq?xjwxN_88v4@J6fQM(0E<n_|_F
zo&eiAa!BoLNa@&Z0wL=kLs(*2w&b(dUYId_CXWBsQv?bBjYeJdB4HMji~1g3HhtK1
zSxt8b@qtOa@VF39@J+EAHaoy~%5qlPE~f=TGqVzwM@luByaueC%zNGwzr5rZz$o`+
zg5@Cgx7f&D%OsRfn40NP5te(S>D&VH8N<5kBol3#_oDDLv2DC7@gTJzH7t6Zu|=TW
zk3?2hY+4w5)qQIeIWzM8a4ggaZ+=7?Q8a@LDeW4%QXf;(q-ajjc*3cH0BkYu<`J=<
z%?LOsg0JNl5Odd_G?4Yi0cgp+0F!rA?vz6@5}1X=8hR3Zn50Z%EYlr0_RqkSR(5q-
zN8<7K8e#8nhibuhNChdJpJr-usygYjD%sB1hE^ziu^ofl@-ecx1c}fpH4qTfbUY9I
zB8_Ija58s7SQmQCeWg2r_|t-Mu)p7mh~Ov8_2{y*mH*EDuCv^9g|}Yy1`;3L;tui&
zjB#xMYG(<03L*hjmt<_J3zn%3*P)C<4dC6_H5t<k%&3l}5;~GzTYw>SUH_GxR1)4a
z_$iYIb7^AJVa2^5?7rooA1Zm!CA&P=Tm49>)4!xP>!v{2$NJ~O!pfwYQVPRiy5H%+
zgguo2nY!+3km#m~uobF0khA&q_j^_w=Z&g-_?_^+(pC;MLLl-06Qv`Q@L()C9Q(xB
zt!KM54%iSb8apyFmnS%f9>2n)?@?>~MW85Bd?XI#YF>Cy`m=Is$_ziz9MBClZhY+D
zykPDsNq4vhbAH#mYJc>~iF+-ZIvK$8I$XzgO5IBIan<!XiTlG85Z&fdH93PyjY^D;
zo4Qwye;;C@#K6Y2`9x-YdYyBYdeg^nBbUMR=w(Y&Bq*S_Wt!^twfeG(UL_g8ifWBQ
zQpOs9IC=CvIC_Ib_%2P<bQV{*(0Yqpcy1E4)*3xa!{uqcI6c!PDB3H}-hGBdxQV(b
z!p;O$PA4fFtM+FYV5MyAy5NqHZBy;M7_Vn7mj6vOHCY4Io~B7@zkXd%DlSD{&)?1K
z^3z{AD1E3My4{qbFailsjX6hO)weE!)378S`9|7yFD|no3kGKnZ+G>Tk!&i0Sza54
zm)?SImGo0k=ePbB?iH{Nw8w;yzTwohB0b}a0>p3(CPDUUKmy`WoBD}Y^a_F~D|saO
z+e88$)=N1xaobm#)v3EOk7BA`+nzOBf6i{w-{tNBUQw+w2zs%>EOcY=`MeI>L_KFW
z;Z6Q@pMNrpt|*Arn*HnNPnd_X)d~0WzQ}Gkypy&vm)J(wM%n#2BYQks<dpk;{{v&v
zI)NV}jB%&Y6u70hjkPVbxb6w-Fuwe}TAi>1KOinHt~)lC1R}pT?}b*x4~l#`bwI<3
z7UKyF_Lzu%hVZJ_o{MG_7`_l`n?Hlc6TF*YK&S%5%7oj#$`?>eU$9Yzg1-!q!Gn?Z
zG$duTn=J%em*exa&YJ(IK&F)ZwXlPh<L&5fnn;vl45U*Vv1Rhpz%wFTQOk-;w2)uU
zu}l1_S}l0}WRqR}DMrvii=y^2&M2Xs06#1rXVm0q!P4?;NtaafxTQ8VmHHED=NkR9
z7rlayY|WWgypSAsDZAu0+IZY$8{z6<LJe&xEA>b4iZ}N-wi<~&g^edCU+ke?gMIoy
zuCBwh5fF2y6FH%=QOsm|7asd;WimG!XWg(W%YoCPtkK$O<OcnMDYsVcH^-K0IB%_Q
zgrhB{tc^mxLL1Y9me}vICh{n3P|!5JLV--c=qq-a9(IhC=ZdXu(1GOzo#6^Sx=SK`
zrXs3{DNFq|r|<%tQECHT?r7MO48q&Ekb}Lr7-*3LV8$g2@^ZSs)<klt6rwCu7sq`X
znPG>076}DaULG3?Y+3R7MVAL?QKrAGqH|>}q9IiY5H`6!9u=_3XZ|`J;*I-ysrqM%
zv{cGx@&Md~0op(i-ILHZ<Co!EcwG+P!)YYaxLsEi($iDF?6+oa9*$zu&)-o<{eg+K
z>VOc%h3&sN_dU-s(*7>LfK!|y7RGeCl6Uy`7;MknERyFGy$+>c44BO>_|>X-G_}Vo
za2F{gUY{>h)H~{N-o$KY7Lr*SM6k?21+OyUtP4EK{kP;oL&8&r{Hp}9P%V;t8}~dC
ziw&sz32QduvbOBb0lD2dZOJU=%dqTA8$dQoznwvGV=J3~BX#AwL0FQTr-xCP=Hb}t
z?w1Qds?l{PT%>lOOuP9@;dLOk!I`mZ|L5S%TUcbauxHWvP)gHHe^R%xQ*gVR-M(C1
z2P_>=aar$X<xuB>lqsB^v&*t3_RwZE_K|@=Nnhu7Hr)&3RFC&8!NbEq4N+G0J@5$o
zYUZ*mkNI#>o#hn#uB^X>{OabiJoTS~u4C}Kmi`v%t7{WoM90NjK0OMqYc_j^NO$+5
zgEmnUr@~n9+b)c`m%T%}8%rT!n?jU!@esp{>;KE=4Y5ya!ZL}%J8Dsb&eFq}d#741
z=Rim~yMdEkPtQ>R_b0dcXBg+FyVYS$ZA5}qxuu~o9_?Cl7cBLf`pV!ahic=$x^9P+
zmcex=%i7{;la&RwaC>Wm747OLy5*X{w=x0g%a*aEmx0?RC+d%ox4f{M2nB_tlPPfB
zRs~&%=2lmr2dO9h?Cq?fyhUFgyUyDN#W>HaWg=J6Mi&@gwDXkf`VF-;9q|z-rG^43
zh5^k(fcSPv?m<58plpFkt^Y{``9Rr(AWk^a|3lXX&Y#%$Ad1ws-wqB<{*T~BBAOkz
z)AqIHhj9x%7!WLJ#U{|d<dZf$Te)2m1b<`Rvk0A?q_SmIA``Mi<BDlpTk&bn0f%!7
zJ!>#5dBrE@eA;#YK@M>Li|+n|5D@+sh5ZNRA^s2I*B**uotIrY^BCGOf?rs`a%vFM
zwo+8noL@-fC(W;HEH0z>;zGKRQx><G5?NSC)I`uyoZ>GwA(}5S`CgPMCpWib>eiGe
zw*st>9;$LQ)wU!|Y)AyePgGc18#~aZ{nKBoHV+w?^L0}u$}{7d_0u%i%o|WEnCT`c
zx9LXa-##{;@}%}m`)6JB^tfF`Jd?M5<9oIgnu)AYnQkKe9;-X^Opab$d&w!@-$d`%
zQml-#ero82-;WrjQvCkz-B4rw3kw_lC<5pKNf|Ax5%x2qW(VLLHuyFV5=Z*_Fi%8S
zK-jGki{GD>9JsUcf2~N;JOr6{F3Za3;ve$njm}c;txyja;wep>Pgc0)k>Fr~)=-zw
zG%9#0zgScg6cL@&foW1*nretQ$|o6q?7X|GD;2K$>)_>(Q+~H=tovXQL}X@$=m)fp
zS)rBSgJA44M0J9O-<il2(MjaP<!JUgrFSE|Q3V*u2vv_Qm1H_lEV!K&LgXp7&S9R5
zCcH#W!x;7-t<_z-{M`$MP7EyQV8mqUnp;t#C=0&s#fmcUG19oj7p1Hb4yrU;&6{h*
zx{iA8;Dzg{r*LTeG7^)#l|@@rsRq^<%vzN180e34A?GckX6G*D3LejjnP^Kk6fv@J
zDZ8Pl?0L9Svf-Y2lxQFB)-CAbdwkpO*b&l>MPs+8erhM*Z7OKHDfMB0gc)LBaqR|N
zDbaS?FXHLcVAJ0m@2-V;giBa_9Pjc3GDZwFs4WEV=8mRw_8p}wnvuJmumipGbqbj&
zJW%1PE{IzIm3=#tdX_@4$^sjEYFuH@9X5H(@O<F2*{*Y+@0!GEXcE7!sjx1y_&{1B
zrCql}<kA_MdV89y*tcVPSt5kkROAbD;Z_E^qxZJ34umIoWF_VOh|qS$nC~4zl46_1
z!+2lZ@<?qe!=nGEI6(&3oF-WPq+XL=Q5|hmYJ3fjR%%SBt%$cOu%tC^+k&Mw)`WGa
z3eS{bZKNv9S<#^3ak-wskjtef<i8_>t1P_ZB<Ie)_1uv;{u)1mTtpkj?IR-kmWr+!
zzDs~qhs;FF&Rysakr@<fo^HxDUPMEz7$;nK=l{6p`PDi(BS!!@D7vA$rY87H<Ch;x
zO2<tlAdrN7w?cB`8_zP`zdRObjpHU+>>8da(Z^qCXKn_feAN{0xlzR5LUA)y;jrhZ
zq;Qj6(o3$yG|PS_f&0g9^97kd5*}k%*(;LX34XJ>9=kbqU*q#$Ox~~wZe+-(`J}=`
zH}ou+M_6o5$Or-!I$<gkE!JP-XiVMGx5jR1ul9Pgb$oQsV!rf}@tA1pyifO}RlV=y
zJz+@fpE=#iL02klE1zrNjX-~ei#}@dajay-3Nw_Xd~r1oiI#3+_}w_N;D_*NncQkT
zUNzgmwRnW^YOk$}c5Okb1NB@i+cx5usoaw%Qs!=*|Dz0G9&Pw4vS>~|LW1?B4{h$1
zZbFfnvQ;r)V7@3ZB$Q$E9xP)$U1g-!5u}o&r!?^@IT}%F>_%3KvL)iiutU6AAw_YJ
z$e*Dmee?EhYHV)OFpWnMz3`=<Ze?mP_@d0mPyZ~D?@AfMqKewF&^H72wjOEN!HYkQ
z7v@$tYrGJM(6_FNkgLp($bhw_ttdysPWwx6ehAy;ULi{w>gDD-K^UJlE%ACbcFyhd
zww{UoZ5(t$JDCiH!GZSOXd_+ulJ`7zuK4{h#=F8jtVjM{!|sTQZX-2R+@}POr3!a%
zw5G_gd3e%}{q7c;mxOY+l$Ufv(2{y;SfyKqFxJ8BaaYlfb<#?@$K6t2VfK-hHLv#N
zV00`wV^=d(H}QlT;4!2;EYg;Grx>3KqmC%Lk&VKX5bvI#ii&`mFMd;Cm2v(9k;~e~
zgxB>f@E<9Qk;{0L9vuX_27&$m1~qXEbVR_I{T^rH#*~`vydr@L8hz+?T4gQmtTPQw
zD{C1I%LW=j$BB=mq%ei9h*F};+Ov<wWYoApXYLWvq0Cnh5xA5hDa9|dvA?~IAxj4>
z*pHbq;L|7q{BD)kA-Om(ANQ~!vyy_H1f0vdT2UV_Oay6pL^dB6!Fv2d9If`?9tQx4
z0PdP^R&*D**~O5W*~z`>muEGwa68Wf5tIS7KVDw~hNm>OZyKtW)lU*QSDGu*>P9`!
zAo(b)@a9?z8f_Q7jZ{-?E<|lN8ks9(1P{`t{2L>(3|x3oU{7^mF|=ZKM+QEU&SqGo
zddo(PI&{J;#1L}_Ak`Du^$P;KofQE_Eis0&gJq0;Qf_r#Fw*3GC%*XZ#@m_JcFB*?
zw47pgHYQ*8iXgO5sW0|z^Gs__{Y}&>OMAHuPJ9es^%|3y%&kny?N^jBi#kfEkhd27
zM{0$-4)@8Zjk@@~mseHx8wkP{>4l6XI4!->%&a=SP$2`0>xH;iQkrYYOX7gPtZE(|
zO)uQNaG}ko51XePju+rJ-D^-^OJKg`5907C#W8+EgCeyyC6=Gv&9y&gbAE4%BH~|@
z+3&G3_H4ezd9?$7r)Q}N-dOxa?1UGN_0rrxJ>A++g7Hr?6V*x+r9#ZjSD0@1LM6@{
zh7up^cSzI5p`R#YARSuKNC*M)WJ7q!CXL=gW?oS8lpI%Wl2r$oQpyD815|bmdp4m3
zQ>VEDc}NOdk+f!VLn`j{4tPokl|VB;Lr7)Avd2=j6Wq5O4xl9*Qw9txgO#FthbQ>d
z>|}V_;QVT^F+{#$aKKhIFCHXgyUAa)=Ebqu9xf2lB9BEHQmh!Gpkx8x>MdnO_~Fb~
zB=HwwB))T1NxiG{QZtOhb>U9sL<}O=Zaf_Zv+;jP3jE8OkT#vaGAgf1=G!0H4xJK%
zSE;v#!!5L5r{}@<;)6YA#I~~ajNTGO)x&}5Sue~3{Y-}F|MY6#@OL$*5};XqYp*)9
zZz#9;w<4RqOfJaR3tI=^+UYH$B-=v#j_5Tx9*WpgJ-xu;tPs#4&RRzLgQ&PI^ocn`
z7;-<b&#}~7R9?1`t8$tlQg0TZ0HLL&SO>cK_9NOQ6jA_2s+)~u{r#D-_lRc)<5#&B
z4twtWd^VI;k<2S72@I*1eI?ZIr$iRpbLcs@76lkm@k8?cPfj%8p^dx@!_S~vc9c#V
zC)n0k+)d_Vmy?_yO$_c^kos;1t0|x%I=>gkgkzYvMUIxSCAZ+WVl(_>w_||-KbT=X
znvPtOs&4CNpj46x$l-WU?u(S9@E)Yca|q^7<XkV;k@uYhnL5#FE?X1E-9v1}33V(q
z#H8g(#$cvgF78)==?9*o{Ym#Qb@oW=b+JPIu&d&AAlo&BKp5=FmtMvVpY>TH@&{IF
zi>aEkL#HqVu?4Qz5ouGLZ}vSmEFsrdU=cTl$GcE)0}QE@8uZ*IgZ*?%q6BQ*hw5tZ
zOUpUbioZBeDtXVbk&F}@I(E%fF+hs!!w1MzOS0!H3Y$p40b#f0eqDL7)>TZTo{fcD
zGSfl(_rkauY|i#%vzRtg!I||vcXF?v%8zj&<Ok~oP=9$PqvJzq(d?h>(E~j%@5Z%_
z`OsCC8IYw=$*m7HM;<=N<GsC-8i-F|Qh0@6t<o)TW0Z*b@Wti}arg=1iyhT=8N;Cd
z31~#Me^FQf3n2J!7AzT~(RjSJ#NVVauYi|@zu7&l&<i~)7cS1JiY_j##WL>SU5eOu
z+F|--A<+JWa-e-1>~c}6;4gNLGG|9ScA6M1HB~1dOJUw_hcO`@O>OXJ9?s1#+3?|*
zlE>w|R@N}@A@J55fXlSu4$R~p#jUFlr2doI*k^<UD4qr7-LoS#8U-@W=us%bwCQ2V
z4V(wDMnh+}LD2ufa=_8{AyjJg62xfD9eMBPw(YFHU?-(V6BUw|B#O~2kWXFY)PODv
z=&ec8ChT7FpTWkAh>^EXb|G(3U#he*p{uLhtF2;)PG{68*^rT&*~m~fglCe?;Nw-q
zV4rpZPCXaKj~WKGb3p}UlOl%>#C>ez{C+~}0QrQ#-KPIT6`K7t{%i8^84O$~O7CX4
zCI;z(TX{(6znRx-gSQKlpKQ1A`Yt>p6K)Dk-R*MYdow#jUsPIW$rj9<kVhImrPpdu
z!U7?5O_F}wmR8({I<=RqBcD<}(~6F!$!H1yRr%BXN}M)IKb#~+P|*ydlF2Fo`^s8o
zX`uPIq{T_mx51_={p&lIG?zqac0o8h|7|H^aVvk0rJ&%MrJz}yAyRS4eGRm7p5{jU
zTyYpprSY;6_th$bh9S*R3qQI_9z)+E_~R1Wy71G#|FO=kn+~O%*QQ_8+bZ}D+KGz*
zQWv!!Uxy<jrI9M4RDN8{oXq?P<on^hd94h5JZTly_fe{H87-O7sbMyKpFR&EC(v6R
z6UYiScXV35KeA?AHcYC|`etS`{zqV5Hq?O4{6g$5p+dsWeO1hRjVEz9Q}|h93F@0%
zhJf0SYlSq(4FxL^*Op4vPJhx?L<+eQpoP-6Djr>6-oEtX#$(`kzP3eY#_fWzBJl?w
z5%-E?9~|8Ghm!0X;BK~kY*SFqgK;$NRRHVZmtQmX!%}}6p}CaltENX<er_TzA&mMj
z<`BEqM^>E}EWh90cMqTnV+XJ5`ov;KJu_{gv*B6yqt1r<I;ip^j!}f5&*b$y0Q%Ds
z^htHyRzQ^=HK}W&Q;hPPQly!4lIka11Bzb1n(YjkJ?n3F%@zjffcj`1O7QU6D6^Sl
zLMU6lm(S0SDsZDp3}o}gpw42)o$z=}8MRuc^@tb!$7I?&2k^Wpyr^{p<Q^LFe8w%f
zMMG8ApC&iv@jnwvz4~ldT#5*6foS<|666!_R@_t=v{9jE-hlW`RPYn{qA(H33pA2D
zQnXoj5vny#7dzOK4w8H=a(;2(Nvk-E!$U-}LqWjmK4jYX#VpnF0W#*H6`x%#-R?qa
z4-QVFht8H`0LGhoX9DFMie$q$tCMCNi#T>lFTQGQ9dis}r3Zc`_nK1(P;BJuYW-VX
zE0*;c-Dtb>P5t0`vJGV$EWA0-fHZ3NtK0hfIE2R+hqZiDeVo>`8h?ZK>pH7;vm5fZ
z5;xJ-sx64MD_uH7`l`(MJEU$~ktsaM0a@%k>+hX)4e95r&P&CW2TPK|Mxp3b{5Hj2
zxIV2VvJ4#ObgrY}eB-jQKvLdtR7lRty*>PrywS0IRzUCx<qqXB&&?C|Ck-po>apId
zXW?^yH7R5lrt?xMJ2OxU*($-!&>-`PG9r-Rkzwg%FDYQ3=N<3=qNwDeHWS%f1{0EM
zY<CJ4P<(QzDquO+&^`Iw_DkIK$KZf-EvYy!82TgG*yA}P)8(ZTAlAyhxwU1sAIp`{
z50x2J%MdFknIvSGN`JJpOTkx!<i@(cpG1rc{>@Q7_>;uvM`gBctjJLRX+WMmcx3<Y
zGESP@{1o0uK}d5bNhtLVU-Isnu2T5RqQ_eOO}PUXmsw?q(kIPk*A2nZTr*Rrxcb?N
zVcd8YW=)L>K{Em{pnzL0XFmVr^^vBU?QT-pNF-L}z*w+^L%4)6U>4Oke<_EJ+`ma$
zN?FC<e-<5VZFVc`F+t+{m84^Y9r0VJT4O}u2E+9+SUf!fXGIzw@tfNLnb5Z%r41fx
zKj4u^C#M}n!>JTu8<X_0iDD%1192(G629M&IJ=}|I&(H-0JY_dyD;|-@B*5D$k?8q
z7{ct`P5V`&-}*@va)cWZ_BapJzGNzu4k8d<?$FX(OJPS?)t6nYP~k_zx?bhQrVL)1
zCS9L&#=;Lcz~$&bUq18~jXI_&*YlK=eXl}e$(kLOIS4x_aL>z(=+hU+IN)ZcNI{}v
zCeq%^LsW724j7aY*>cg?MUcyD?yAE=oKphmA^E-N{J9VN%6ucAm=zeDXN#6}%QAEb
zj><T24(Xm-GZjssBet0jLns1wzr6R^{8t1=DF(rO`;q;=4`JS>+Ad)WE62Mq#`2_P
z9e7rpISB+Aa#t!1=pS^;`4fn6=a~AtKHleiQY>FHfIv4+s^Q#5C&)FVmQ*8^_P|~@
z1Sw_mX_v3B7ASwn?Rxr&qV^~dU4)G}gpCOv%GkMy|9GO4-{}7|JjTRNaf*1O=-@JG
z7X)LDH0?8=gGjJ}Sk;M!#64De;E6Igw`H{MGe<Lc+V%AJYGFEf_^Zc!%os{$0?#b$
z{PZm03n0Id;I)$bRln210odMzUvkoho}=A<MI=L%h@n?ewb?F>nek5FvzXN+cW^8p
zdH<X*OYeMy(_DX4j0Pz#n6p*F!;yf6TB|TC%6CIX|GllScX8Xk^m1@HFlga1RsCDD
zuZ>MVI5{=6i8Ol9?vpvzatrBayIo1uUBMM&2cYK}^iiVKcPSK}?HZAJzRtHcaJ9y?
zA>MCjT)}$;V0FRkc-WuSpjMrnYzlABVgID2*J*)6K4D?P`(_qt`@<JsRDK?j)OVss
zy<4<ag>*ghC-m-*YtO#vY@2&hF!4-~*HODtNG@kS>Hk;9nMXBsL~;0$uqMGEOGqFR
z0=x(T(V`KwQc$+YqGF+?qJXj$i+}<GA_Ux!NUaj<s4+$eBuY^fEKw|?SVTdj)QaLl
ziq@bY;(|s{vGV|H;yHcieDBP;bML#qncVp&=brImyI`*uElVd48_H~2cJYTqJpK_N
z<j<-SyUjM!Doq<TH+Zn3GB|3mvL3gwg!8_`*R>xF)TR@ySlu@wN#t0|eSb9L6LYM+
z@k|T-j+-p+7E6|QpXc@wmiO%@<5I!iL9Jlj!_s({j37x&9l!kN#_Fb^fzDr4l|z!!
z-vo*TRi7xSBEwUV9#vm-BOA|apuK53pRAjkO39U+TbU~{d?!uLm5|@XeOtr~Y^oGG
zfAM{J%$WmaptL$6Vd`_?QM>(@rk&<=w_XpA3e?M;`AnFvAiYx>KDQij%N2B!UT5If
zhB#&7ijLX$ebbvaP*#09YWj6ao;OlUy`129-Dz>#LS|1YA)FF=t>OMQo_XjoZbfUa
zd5FowHFj;@9QGzQ;RtuNMW0r%P`2RZq_eAjT=p_#iBGhnvnnX)AvKP_E@8)%UrlRN
zDi2<oV>bQu4Y{u?Y$)fACckyRx)eNI6>`AmMSaS>(R7o^k3Njn)VtZO&Tg)pduDs0
zAER1yu4YQ~<@M`5+H{oHWM_CAy3#@;I;MJDMNOhB6ual?-CY#4kWnmRcG0j`R=|~=
zquUrt3w-@!VfQ|KeM07UYdR&>EPsBe%Zk|SU5gp-E^Vv|ALKl^_x8@&@K^O~UB|a1
z?r+!R?Fwr0KE*zK!(*W$tXJvU9^fC6W$v(>UH1El5j(WluAkQ;N>?SZ@fYiIn0^Kk
z1cx~%7H+gg@eVZZm76S7X~{x6J^e>m=+=@*T}Q3-r3+XGmq)0i6*=pSb2j{dga$ut
zJG%02x1xcx2zTmhZlSY(RP(kDFyDU*XVKoq=63uX+T|;riy}<toa~-4r(_xJ*24BD
z|2&Bdd%<#fuSezaXgj?u8hg=#cID=q;ae9=YFDlI8``tM@Q~-+mCrM08nt~zq>rvH
zyJY()w&wn+H}=C$van5q+I{llwX&vJq6PL*VzaIbwnZ~U+k3yHxJ(;de|Mxym_szV
z;A5Am<hm;g4-SRAoq4Ebm=oT5CjUib*{i`SpONUmLbqMQlRQscbgsT~XKI{|-qy<*
zMp~QErzRsitp3Uh!SQJO8=o1vG{+HQ=PfBV%3uJ!SGbXZqMzI@%><F9oUY-}LcyPM
z2c`Jn`H0{Et2<lB#SN|>#@crTPD2Byj1WZoyk`5(S^tR6<?EUxItT^_0cm+;TaYb5
zO*ix13;6C@5F7*#(U$Ywb=oDcFQ*{9M+c${(Szti4CLWGgt-pbBp?tWB#0qok{l4o
zt?AfAOdc6x1eq+4$unNzJa%V^;VqeCQam0>iU%oq<f%Zf95pQ<R2f4|Af|Fcm04yy
zjF)erP%80c?4Fayd9M0(jtBw)YxBsK@?{p32aZ?{4_^wz972WAAQo~DU&{-rV{uWD
zT`Amt9RxBKSHP~bgwP>VAXX5DoLy(VwjcYJsGJG0f!NAL<#t&rOaxVgPQ$?g@Dro6
zKD%@U6pB$dYfPYeGcdfNMeX@u4tm5WWf|tB-c&_W^Fa_Z3j|4xO-oBiicfXUT$8vY
zKnrJze7x=jYbpNp&_4~~$bbog52I{MVa{Qcj`Ly)+Rf?g{|{$qgl929&tbSi7@l7W
z!)wPrX9DJzpk|mctOOdLG6fr`4nPb$y#90au@Q7otw`#5#s%cq2n=X+FdcSzO^BMJ
zWh3yQ(KUU?vOTr|;!@N;4BH&_zv&1X8kx3mbJDUBV>PzsW4E<>sS`Egws8PMg3>S*
zb0sJppXv*%M~a$*6bXtI4-jG29euDiCagrzEkUi})ZQ{U(`-Uin`t2sO`SgfU3@&k
zxFlyhg2B;9zNZl6m!V!vY-yiL{&TOFa$~g=@F-x(fkQdWeu_aEpNcFWS6hTxSJ_Tj
z;R#?&(v$-RF^}ZM6CQAtL@+~&T8~wz+EMsSsmn!>BArk=e0z7Jy$X+DXs)O2ICET1
YzjRy<RR$}AD+RM<=v3YGBPd+`zq=C?i2wiq

delta 16249
zcmZ|01ymhN);4@_f)m``A-KD{d+^}yE{EU}2(CecySux)OK=PB&iTo`Gw;lu^?$Y2
z(_OWtch#=8+Pyn#D+z38A_)vZNfrVU9RPp@03K{(5mb>LY+Ge=qcgG(5CMP##8_KN
zAUGH#6wC)0SXg*SFt`sNJ|LnYe#AkCgGGfw$47(5#>PX!qld?5!oerQC8fh7V<kgI
zAjg0s!^i$ahQm&b#7m7wO+`(`z)s7;%SubZ!$Qx&!NJPT#m>#o!_LCP#g0oaM9CsV
z$}UUACG&|>n3hM8idTu9SA;=CgI83B11R~KPuWcP6TTcLxi~MYiU6&Q2%m;9y^bWC
zksPO)GOwt(q=>AljIySxoS3Szyn&Laj+(5twziz6iL{=Rx~`eLk(<UBI~`M7RWmOu
zbs;-#acf-#Q+*9bT}i7iT5ewyyv)^%&8>~>d>tKao!mV9{QR`-0(BjOEj+?3e1Nge
zz9F^&DXyWZo>95JaRmW3S|LvQkshY8z7`-@7|;hS5E=pq6B~p}10qHOQQ(4@2|+aE
zAR0~(2Nj5q8^kRI5>N(-Ac3T?K*|IlF$Rz%J4k~Pq`?g`qXn6BfgHF%l2RaPb&#ew
zNK+Fe{{^IF0n&2@SxAAbG=U%|DUgRI$kGyI;RbTI0J*w?Yy&_Zp&-Aw2!G$?K>O5C
z*PL(e`7z$0fX|>{3sA5dDA5yC=oc83l9mveo|YDxTo{&F8=FxS{j(u0rzp9ou{1Tf
zG%KzuGqNr_vZW}ovnsPFzc9O^t+=wWw63YGzO<#KHo2@jqh_E0*fd<!F;mypU)i_R
z*45uQywozW**3M^Q=T$VlR4B_Fxpny+fqH<RtO4@07WE&5<@^qNuZQ`P-YFNAPQ8N
z0;<Ub6&8RB8$tEOpoRuec{iwW0Mt4)+|@MSTd_3M0P3v-4YZ654-8DqcTN48n3)@$
zU0E3GS(qGJod9;NP4}(LjxR4S4=wG@tZuKYZ?5ibjBj79ZtpK2UhXdrY_BhZ28KXG
z^PssQ(9!~Ed<(R+yT7##+MayfTLN9I?d<OD>>uqP9v|&(o&4TAelKU2Cs%i`hlj66
z*U#6#udlCe?jG)+uJ0b6UT$tc*N?A{H*arm000080)ga`X14(VxO{0bVKtAH(=~53
zG)+Rlrc0!&HHL;RRKrSWAx1Y8O(gZY)Ov(o$*P@oF*+n0w#XPbcs~gV1(USY0?dcw
zq~PsR<VFi3ty8;r1h#!)3+|JJJFOrW)Q=*>BAzBgN<C|WcM6BS{I;hW-d;%K?c}WP
zXKTR6@pc2VvoWIy9L$UBK9ToJ6^z*bxL`u_1z|ITH+iGorys`P6IJ;QtG}$`OVaHH
z+Ip`B9H3-&9597`@mcca0G(^l3S3gVtc%WmvXjDs)^cyKJKZZ#`?}=?&hTWubE0xQ
zWpNH74m{b$CCi-MXWKwhXePk5tghqGKMHupK(B$DO=z^fc&Z5a)t?T7B{=JONnA=}
zr@qf%E&;l|*O`5R-h63m6p|1U5_+BR_m{d~n9u4DB7D{s3Ilxu>kx~QhhP$T+uK&W
zA@x6lL<N8g{WS~#q(1=V|Iyf71W=A6Fk}J2ges>k%*`Un<7=JkUrVhP_dBIHW;k<3
zJB$>YY6Hpp<<3eTtm*VP_F2;{rpGktOrn>Ydyz~g?9ZVU-uwZOp^$MJup}QX*!sRj
z61TO1^++>Ox&`JeO8^4HQ|RqnQOyjQus3TM%}Iyws|mWK2S3H5x>y*kT9$Vg*k1!t
zgbw!7o15gfND$04IhfF@IQ0XFrF#J83fdLQalCj_Hc8$e0#Q>CAx##!ZzaqoMZTsg
zvQ2Wq!vE}^Ba@2nHLW}P)@8y`BptW_4XX-&NJU@QvFyzXU|alPh0df(c9wjuJ|YG=
z%rNJ*%TzQ)jehOuXI-t9M{Tnw>sbyAp27cNzNPNCdMEuj?nCi`&u335$;}-`GJ_wY
z!pyRUZCP|#e}cS{L2@<gbcDrWY?**h`xE-FQddmcu{>NlRe1c19e8RM=OOx2Le{|;
zs8~3LV3iJ3{}C3L&ItS6k!H6gp`P5{IpB;Sm1^3aZlsvuKKF+oqD~mPtcA<K0!-L^
zPKeDd1@QWhW-eb+wY2u8E>7_E;h82M04bfAMzx=H*G3YpPpZC_i|h~v4|GhDT4FW;
z3gXPMmW+oMN=UjYN?WBSraleY#R*nTZjZQ~l6r=$!7m4yLC1*Ya163|3KOFpj{57%
z_4+r6z>kw~$8(3+I3YtWEe_ZN<Jo!}q`)>l*-Xq>K>M3F&X$(29K`VvHY@hB_T2K}
z!4Nj-nj5i(-pI&=C#8d-oMDU^LNGZCTYlXB9H=B0fuAA|i7cg^UM6p<tOF;W4^hK`
zM(M;tQPTh~H&J2NPV5g6*fB*3z^0)q4@k);919$m>RZYiD(<z(7sZbSuBq?GCiaMy
z8IaedGasRZ$m*rI!Oo@yeZh_ykQ$?N8R=^!@i!4-$qqR%7F<AJHRGoYFmEMPZ4pa>
zD#{nqq^v8_v5XZBFwP50KsaP7mnCOe+g0~}iw217L`8F7ynqDb5nA1tZU#q*qs}1y
z_j&;S&!r*=?k^eGI8Dk3u)-fS2QkVT8vw8J1}Hnp>O^@Z!M?TV5;KDv#(%g`;a+Cc
z^k{Nx4)oM5njOh_bz=Cj)7qb>V8v?5Mj16n?(Q~(p&t+J9^=G4CCgCv+3Fl+Y+BVn
ziTZ1_CtCs9{ph2NHjXgR$x~v}Tcj{%%jd_U3Vr>a)(yC7#b-m+WEmNX2qf-CZFNd-
zg`&D!=iOFbkI#~V9GqYlIZI$_V_Q08Ap|8(DBQMd?J||fLNsXC=t1%pklYYnV?W9(
zz^#H?WHc$%(5?1l+O>*YTuhGH^Mtkb(tZ{KXi%li;Zh~1&3ZzB)}Q5?*5DNZ>E~P2
z(Y()&&8p@wPBW$543uO{I9o)j@Sj{zKIy{UG{yBfwu-WbR)RO!e@fDtGDQI+{?`rW
zLe(GW<}M(}?A>|@Z4W$<Rc|{xE<5pE$1(?pZf|HhpIa>T(tk+8uDas#I2TR9%eum7
z+a-iCX4F#!26{q3`^JJN3ql2sMaJ4e8cv<ogCE0U6A}pAdCeJv+*CCH(Gquk>|IF)
zW_L_nYrP4s3jQ6jge5Q>Hjp<_I>H0{TcfIhXVXS>-vC{QQpmoZ;NN=hzJ2Zv@4G}D
z@gkk^D*K>I2o{*dqV9jYi_5eGF%VL&3XsSy3$$YbdRUTVe^LmHG$!ld<h^CKzdlT_
z37Gi)d!oF~PBu`-j6)tl#dj{N^(U?X((gxfk1YkBudXgfqpI2W3+NBrI6W25Zvb?$
z(KSbp=ZV{Cd-701X)hj+odt8G6M&($p`LDE+(0?<`Yjls8nydmvsPz;(fTtU(GQe0
zS1y49ATzDNL;cbeR_??AdqHT3cn~{y4B?f_*v@Ec@0*sp0Qr6~TDT-<XDtu^g_Kio
z!$TFT^p+9g6uXP)?qwKaeW)l0xqi#_efmZx!`9nfmn3HN>+eg4NuN7#>!sdG{D5gN
zDJv}>+QZ$nF>%QT24vamw=KgFh<YPES;h4Z;N?8vu6<|vB<5_BPT93l&;{z|)91^>
zbs9<0?>9d70L3xm3oXPbyC+w^R+45+o8s?YKkqvZKLIw8F&3*>T`!-4SWz}zY>ah#
z8Q*FdZojf3{|J%Y`cSW2NwG-q3n?ix%62Wa#aR+sOjfa-C#(H!{F^Jy5%0=5cczES
zEbwvufXrwr-<&m5ro_C2d@=Kz9GrO};o2IW2X)MAtGfo$x}%}$dC%SI(ub^<wf5ad
zZ-5qFEC4w2^Z26%d8W?w8*LTC=|%i${b|kz=KC4h7DI@@0ZgB|q4ox&;lzA-*^K}K
zSRMyO3Ao!|3qyGL5MMOE2BMxU#vl6vh=FH*S_>Uz97uQc&IHf&We${gY%e*z$*$$T
z40mJp3Rwu|oMpabkM@kv95#r^e%!CA-{!ul!Ny1kew;k>a}nJZ>^W25k6r2@HoMJ#
zckrBf1+2A<l?gy!7ZdGq+sSP`C#JRG{@1XAC+O{0FcG6{Q(%OdARCAM?_?seL13o?
z{f}3c6O7}zmnUayFRZ+RLISTVA*^~XhTqaWWpv!z^Td+@bjTGteiR(rcLhzb9*~ex
z?&byf-(goB0|8^6fX+EKf3&H4!*+X@oT8&*nhl-;kCny+PID*plyc<4TJbsav5{r2
z+AV)P1)2>kCDpMcxuOpvSl3f-O+Y63=?;FCF~gCBUiriDqh;Tot*BhfjXO5>*SJbl
zIa98ZCo=~$Mkx2KyZZCU*Ef{p?rBb7khSVY=%E1M|Ly_*a~u8h76pL(f4_eG9|!nP
zxi#vpR=-Rw&&7h5+<=#5UDR4N6}1abPvKwqisIs){g030;s&=D*EgMjJs_%pPDf{3
zUT$7n5lf|zx~jgeijuaHwhGGum|Fk*{NCikZn2u@BG^>BPIIS3KCR|yrN)Q*gH9cN
zJw3ftgSO6Wp9)im-QHiCng_*KrIj!-2HJVFD(Y%#8fr<JMQ~T6*R&-$y0IlDAYB;h
z3K}JKHO#{ZwZuhU@T;p%lKWYOGCn~?KjaI8J4WZ#^DPQiz<ZGvR}iZZF%0;7=?4o7
z`@ZyxhsP!a&N895UDM@OX%4#mP^24|fh9qT6v~xaE1A2*6#XLEP|E-!9JG`f(I^^x
z7;nRw^j5g__}#i0Y)zK17Q`iD)J36M9uq46VEYV)zGeJcpfWib;J8A|ai{xv%6Szs
znierbHr-(^u4DjK)O6Nal;Nk<rc=%odzx3y<L=xC;G;F#Ta{Zj3gP#`Ln+dHWRzsn
z55BHn8%_f7B-TCEMv2cK@(hWinRKh-d%fl5m+JF{op(y2ZgbWajmNd`Rb=$!6zjMF
z_WTmmU$5^2INA@-)PGd@7yCJ+J)hCeN<_T<;y}AgJPx#5JzG%vVGgeMJIb~za&xe8
zYaaIn1Z>#bYdB!nV$jE57)_GjDWVfZFKE7p{y|)69P~kmTWA>*3mpUfC)}?tb%vkt
z-8rf#2Rc7y$P1-$Or=vlil7v4f~VJe(3R<UPerfXmvkE5_(jHlXMRf{H<*;ER9ZB-
zOLtwH<C4Du!XAtu2s#WC7#uxGpRj{Y7?Ebf#DJf|L#apxXV1K2Pix4vz}x~g1i5Qt
zvI+Uy@WdAb9_X(dcgmP7wtgMOi9n;=(U_p4;>H(IU$fDmeg@a=Hh<eIPPZ(K!l1u6
zuoC2U@aB{`-VdokS-@yZ!*9E7ECK<PWMN>fbW=vR!2kejNWgph&*J~@GoV!_o(z{3
z=*B}oke<g}D?O+yH{;*i9}>iAM3Wsw-yDY@`tl?LJ!8Z4!P=p)kq@OR-#I#O^6Asn
zfdP@|)fSlJR~&vibwS*G<S=N2FFd?-kD00h46j~q>*j9mp%7|;^kJf6rrN|b>S&k3
zu7$Y`ZN3^2+~v%~RYl4uq{{KaQQ~10z}9*FhKhWXQM&Jtv(L3Nx+6sz#pKdg%#Sy*
zm)iMO+8Pw?t#-JM<ml)z#hdG}26vv)cuZcQ=B>H(I-Mtz*xs1sy!0?haGZ!cMKv$&
zb_^nNZhJGfqhRo4`JOTzX>>x4O?2PvTA6?6mo(PvOs;4~-u8%%%{;CUE|@vI0X^Bd
zM}emF%0;%jy}xS~JTz1i>S4acnIF@b-afZX!ou@|aY%L<D_i=iej;^6Q`P2SB+7WZ
zYOV>tmR}-pp<?ZppDj9z5*SdLsNEDyrJA2@-(p0`9B19rRFuE=(0p-%&1ES-;U|4a
zgQr-IOuSRR8^CI%mKdh+p-`2o0Mh5URGg9?h&6JDB!6Kis@yF6h6-tM^n!%)^{(5U
z>u2S`1Il6Y7b)Rg=5ZBbALKD5tP7liTp`TY<!*G0VMqSg0PrIR*J_6(Le=ln3*AzL
z2WCgHTDkzZ4<9+CyK;q|=Nn2p*tk;==W8VzDiz+q>S2+Xp+4SXYv<K2C<C$b%8yt$
z3ygb*c+=!7NXKmJ2??r{GSArsP!4yCD#R|tkJ@UkH;%Lg82IZYWiH&6XN|h~1I}fO
z+mQEIbZB9i7`}k%Ef@yb%B*cH!7vNANqzsxc}%w#Zty(9z4Lo{_;C{fRhbtz0GAK1
zDeXB{E-Gi#ka<-zzTYYn4-yD-Pw17v5Z1`E?c1=Mkj)I^5&~_LN{^puCdDL{8~Wf+
zv0Unq;0&Wt8&?f}WS8!&2YRh;RChS>jT79qVd{cfDbe4v;MTlVyf|IC7j;*Id`P-@
zjoDDkAo?8YTYQM8X*z{3H2}YBQ4++9_@zesZYU^|+YS`qxQ59ZEeni=j!r8OcU@Bz
zGs~NX4^yQ27QD#TJ4`52D-W?pjxuL=@dS3s+Y^VB_SNw6G?R8`d(_5n^;G>UaqCwh
zr+byDE0Hl(#b*X~65fcR9;`6VuaKec)2{UMLj1PwZ`rl^`j@ZYY2%Xw)%)-r)WQME
zSJTK@zc)bGbVh>ZVRS%|5`1Kb2jwbD0d`vAEuntfwr&x<!8vs<MQLsen-qzW^JtIN
zp#YyedE$MTEYlQK_!bD}SeXeWvrr!OYp#Rch8~&#Bwn?&mUg)VCV_qw(kC0%XRK2m
zTKs5MmXLXHlC;ImFXNq1^F;gKMgfC{KV=$4)=3D;f8rFh_$31Ia>TdNUpJOr;PvR}
zBehCp&q4K1g?yT)Pe7OQUx;SEcI=%2)!?J2Waf`%`pIG1^!-pf57NyjLP$jCx&R#f
zU#OGUA#a*tsyfu($Ng+Em+7u4?ISXl>h%*#?YMGVkgh0eSWeLw0XySlCGFB`ReExs
z_Tdx4xeVphw@APws67+9fcf~(#KO2MN5bgN#QEI1l<+*QvRjqL(j4xW5FZbh9V2<L
z<#71ql&V8^w?uBN?~B_GyYC;{oUr{NAc=pPSf75GL__D)2*=WtR)%F64d#YF<xkWZ
z=L*~J<wA(OQYfalF&3)w;pcx=yHVBZV^m-IX@IE$CJzIo=Ws8tXGcj&;Qsin&nv}S
z*^DpIItdJEscr2v5ict`>gTHjhZu`rMhDPW;AyJ!p;_gXp@p4c;j;8Kdc)U=fAw$$
zIN9mvI(MIyOM=~soUQEoDp9}edxh56Jndq$s<(Q=2%Ix_8*Mlcy{(6uA7rY#$Uenx
z6n(B1K86P}32;zyCMOZaF{(OKw#PC&E3R8LE-T{Z<ez>2QnV6Sjd3q=8|sgQ*=YQQ
zP2`@$0_`Io&iAM1x>v4H+l{oKXjnOr6^|PxT6|x8!!>W4V^r~gC9ZU#WuzUMbdqmb
ze;&V#p|_c9=S^h*yr!HTrAf&OjqQEBgHZMi`{e=<-_l!k9PG&RF7bR$$9GocNkZ}{
z<w+U-*Br*ciHQTVOu_FKtj_}YnwNE_tG$<w;P%j&J<Jv78MHQ8D}Jjv@v(S0Q-Vj{
zRx`ho-8QOpJNF(q2Ml)`2{WpVn=_dm@LM~2vRYN0g(^D5){8ymV0OSVZYG^Fe<F87
z;4&B}m9`cj_K2abzFm77yZO}6;_dSlUXc|Ah+w#d5W<mNN%%k5njY4D(_Qu$tg1O>
zn7bDI>#>$IpG8p*4FC+%{`;}^cT77TgM<tG{ryIfgze8Rn1uJwPMMT6*{6g8A^w5{
z_D}nXME!3v$Df@d32A&O>BoOn(QQrbT)!AOG5&X`{I4UNmQo<V{pSf9&p<{DT;=%K
zabBrJQ{No>k;qG)Pk};#Vp(t1vHzEI1Sv^4vvie|72D42TOj|55oqHr&K5up751Hk
zLS}miThmj*<33d4XX~`TzAxy|I}irF{}a+#Xc`Y8l9HkEAmYM(FVOEvI~BPT_?oQg
zQSW5ya$x9v{F7LDdv{p$5<m+Byd)THBeMIsiKJ7Fw*i&(eY>@<qn8A(M#kOeeMy5M
zn-j%et^j{sk9L#7RxURJ=UQ%hooQ**(SWAiT97EM-IY+;(IZbMIFMP>6A|?~C9@W&
z%;#ly@#xni9d}{JwsPwBdqT;vj?gl)|BIOOHQ1_Wvjd)IU4rrVm{2Km;H8vmy|TuF
zWca*`PaeHsp5Za0@*FlUT{T=St^{=msnDmbQ8UC#SI9RnEzbRlP*<q2yMYMYYa9mp
znusknbBx}t<0p-p;*^cYLjsc-(69FOYxP~u)5rvj>>4so8#zk4@x?*x15pZ$r7wlO
z^Ml6DeFDz;?)CldvFX`iKsvic%tnUE3DiM991A4{JmC*e{3uD2M|XOa%=1bO0n%k%
zwg~(*I)?LM{sz)pCg?dRlF~>+CCyX8`Zu~JHXk=iF>%N_=~|-k3+t#62C=_B`1hCc
zHCfz`D=i`Z#xZj2f>o;%&<w`hHnq2fvgIQ+z1o8>tKOi_b?rzj2VQVEEb%b`rj5f$
zlTEY<%iXBzx+arCzgw`ZgPJgd<h#Z7DQTSIWYW8}E{*#U4Zm()M3*v1m2+{#)f_$F
zJcsSlm`FmVX5IDDfInThHXK(nojlNuN<;+OF#5elNFVcgb_v7_2TWA0K@Yoe0i@Fs
z{co@OOi$=^kfOm`fVXSN8!gB3Eco-B9m2mLWOP??AuS?hcpewv9A7fDzUA{T-c)*K
z+`Gz0_Rkb}ripM?3+oDM#mYY3rrK?^RH>@y<M`ACG}UYbI#CeRUX9>Fb&(TOk)7yt
z(}+GpmSIAqwsxOes_u#MQoD!eyyBCnfng=9^ZP&0D8v9qfUv)IAZJst+a8|<p@}vS
z{3MUd&BYU`)zvKki$_0SO>6;Ian*Y`g?9oaaTu07tl0XUq%1fb7^99x%gBdR9DN2e
zb%HmSL{-Yu_=8cRlU^!)9|P%m>+yto#UUTq5ZM@)GWZdm4md-&GqlXopwho&R_6+e
z5Rgg-F3AHhfVO;ZbehF{gK!IZ_l{4F;bftQZ83r}!)saqG{v1ta<DRh$WLwt3Klw+
zp=(uI<K&y<g2WjZL<$Wdgz9RZ1zSP+Xomvv@7J;Ax|6CxuUce&9)d05_Q56&pO2Qb
z-T*Ac>W+=!DAdG6y1dH)`~2WGO+@@4+qa_hNKU~qAf{l-Q~Hr2D?7r1HrlYNl;yQ(
zOZ{w}hiIJ$BxO)Mh4xf%qL4IxTYpmg?3T{7Ir=5r3yQeMAa;fYh2XYiwl@>u;m%iP
zv!kl^j#=VyRkpaM=|O`l=pFK&tgr6nS}9Fgo2(giD!Ni<UFd~$B5rXQ1JY$+#}`Bx
z$WYd~zy)|!@fw%vJbmRWhYDw~&FsYbTNQYIow_5dP**HFUGJ1cc|kf73lwS@U6dWj
zY;?%4!!`9H+*G5fN0Et$+;l#Tfd%OJEE4clA_C_y7@uRsdC^*OwZ*`c%WMO7rbus^
zkb26B_JY%O*@9R7uK;z5tG`$gN2x@Fv?YeXfvVU8=O1shk*Y}yPpJjm!m7d&OlV+P
zIUP`xQ^Iuu8$_T*)`{pwBbAXbi?RT;NXDe6CBq|;Xf1GacE))p*^+Il76&wO(sklJ
z*|ctkfHbqgGpwP7ai$zg!l7ISdNVEdvKT~Mi;vykKv%{&+ECx1=%_JX^Oot;*)s#u
zfel%EzRM=umXg{7>G%C-Vfni`gTIlk!SnU@oAK_eX8Dfo&qJT3Q89%$@LsG8m*Q@B
zv|?FpIwiQI!A=b)T|-`4mYb3EDov^d8h@k!RF{wv)Ya~fb%z>JmG4+P(BWciOImo=
zA7yCc`+uk^wYOO!ZJEO_B-eDuK0~450U<StT0^u!&UjR3zr&sMEx7yKi@HQeM5k{)
z;2<Pd_eqP$UDxm-mw%M$GLjJc7U+wV?vI#)+~>Q=gJk6WNf|7kOd|Y>I+w&uAkoaM
zZgOy!$N|h1$BWo55tnc~((@3^v#hFS&5KY5nm#^HbxT38hCbLM;w%*OeBS9C0^Gsf
z@`zrzTo<}5quAYb=HD{~<%|vYi4Uw289@sQJj$LRrVo)RucV-rEPwk=ZTmIQ4;;y*
zR4K_Km@MI|gEuTr21y>XKqq(57!qpQ2DwQ51j>y1H6?1ATS$y!{KHsF?}5bLO&e>_
z7+&IRBob<iJa>5%Z=l6h4J3PV2Jo}ZPukwng>-;#V0|qmBr6>$JIPGnSOAJ@Y9eXD
z9<)rFoG&<D-)~kBQJ%`K?r(NOaXMyOn}^v5kMtNMXWppMTnK3n)L#{xGQZ8>9F$bU
zJQuZa9PR2nfAbhxY8%JedwO57z?V)9V;)AQR0a`AEUbNkqO)c+HB9gaD*^iR<0_rY
zbRTqk6D>VF$c?aBRxB|sn#+St&nr#)Wg4uDilaurU-d@y1NNDJ&Xesn_vw8Gpa~`z
zX=@PgrSgLu^uL?85qLaO)x>9{`|BDZ&8QR(5*rwL#(Y;{a#g&IELzFyVejD^ps4u1
zR;jbYmO9TXkKL;NB!|!tv<l1}P8#Cgl3Uyi#A_X018vl&@4$`-E1{ZCdrASLIa78b
zDiQ`nLALGCAA-X11SPt$B41FOt4xl<dE_N`1#9N6ps0DCW+|cT-uz4XgdlQOa27Gp
zkV8W;`pMvsNGIx(Gumk8L+$GD`CC-16w2?Yq-5r|P$~UfoGg-vQh}yFhE3Tr1xVo-
z;m?`nBqW;qCT7_sKUc2gKZDrhR#e6D+v%{>pT-y^^%CKR6yn7iU94GBKQ9`P>Kr!b
zrlrw<5VsuA&U-$V^OL2U(MeE}TP|i7U&WY?xoyIq-;Hac&Ss@4g#Pm5xv4EhX^!Lk
zl|}f$x$5)s-IwV~ZVO<|kTzrJep!h+cAclh@JmCjWxq7%XIn}<6K*l>mJSn7=qGe}
z)ye?X#WdqNJ0lZpJ#jTXWb$dc*k;tECFd1UcgpG+ox`z@q0#AGq>YN=bCMcuQJ<>y
zBLxB#_#jL#QSxtTbE)A9(8HBf8@{IJ*##Fk=QYNHbt<c-W2*uC)+jq6tn%WfV>bLx
z1!A#^U^wV(&4gC4Aw7hwkh5tYpI20xaFB>dce4}WEsRYqm$Md8KU50ha{})VbknG0
z8E%a;r4XG<`>0Uo$%PJ_zOrILFn4|6L2ObeXLcJ{o+9*i9E5&q+8Bhk@$sR=(9Iyg
zQ>z2k4nn_($Z7-2vg6#E7G}Dh7;d1Q9FwzJ!kHsKSSZj44x|qu3dB#wyvSAQ(=cGc
zt??pgl_Fwj-<$;9^~H1mUk_3o%A^HR(r(%F6f2Q~QaaTLX_1e3LqfgK<Yt+XU9o2F
zdq~AAP-ZyWr(^2R0-nq`abxE7ls2|0FONRuDdOFWE8PP*3lwMdlZwvlm9nhH#_+29
zNBKJVYx)si+ZsH?pAF&}^tpCWY%Z;^?1E{0wt|<ua0o9t-MBz)WJM?&G*6EEwtSZq
z4mj&1l?M2pdiIRqqe#C?syL6U?Oi{922WWgxEtuNUL5N$UQ+yB#mGe+`8KLrmE{uJ
z?&)|kC}{(H<?r!ZA-F>e_vJk?UpEp=Tx#s~`$cfa`iFq^PDozj>=XF)N!Hk&SI}})
z6q-;<-kXSNvo(4r2NTBXF=o;)dx45`Fr3Qxsv7=rDcI*E_xpe9A_8tCM6HL9-AnNB
zMokmV*c2}b#{!5`o3#3eFOeA_;Lvqt;9Y0Lb!D;{q3o*G%D@aqQbToJ)N^D^T~xj;
zy{)k&p6u#F|LOn*^f`R3ZIs_?gBeL*sm^Lc?rUXt!>e)4)6d<^R*&K=MxajeHu8{Q
z6ZQrylxON2`9(1NExZ3{<UQ6J%1!e~hyG}a^}Y-9@%^0=$I7)WW|Y@6(5fN2*ZPT_
z?jgkPhDg4}2OuN>ASMDFq9PB&0Cph&ua0{oe^su)0FQt!Wt6|kS783N%dZBG0CfAa
z-{a%!NWb7w5N#jLghq#1(iAmd6cNH~NV9M(`1Q=LkA82egU2fGjzX3fTF>~j@OTUf
znV@?%*WbFx1Je~XVeE;*zL6G|-nxvZy|*SQ{@wb+W2FCAi{TINJIi0KM;8Kt2_;rN
z#&d$upEL=YI=l0jp7rATwy~NzPhl}_E2NbTH+yV#oXR-u{K$!#I(7^W;sVdaS-vra
znd?8iIN0S4a`)DwIV^$BvgtZ2Ycu;v9PUJ@aU6|x&H3XDwsw}zogV3}eKCGU9JM|Q
z+ab1QzlzjFtfLGq1;ETd6zn704`#W1l<ZCJfPk2lz&q)NL=Hl@3+Z`vFa|@j|KNdq
z%<JS<5lyA05;v(R)|rtiamSqqwW5_FSD^jHZATNQw8e;t#Bl|P%@!k;=D8<~4-O_1
zR$zb^W{t3o0*gJX+sc75i1<aVGxKu==V|<cSF<Tn_I{*1=Ul(v1ZxR`D@!IppiK+O
z{MgxA3MX!W8K4T$kzi|nq+Ycede!kMmJe@J)KO=crN*}f{~Gyxpf`?XkML#%mV&uC
zyf))587%iQ9ETYAB$A;Vqr#*cbIj$$Ds~o15*;_>^thDAa#l*Ne++YZ&9ZG2JV9AM
z=Ur7`yb3p6y?gvh3~Fk&m-3wsewp|Hf9{Sl$wsZ`61A6o5e}t!|8|+DW~{qCL~<Zb
z@%@U;d9}9*t}*I!lq`y3Dx*&zJ+?-Hd=jR%(GNb=AU6!4%_{{>vemDAC;~dL+ZBqN
zI&amZbspL=87ud>KJ$SO4qq|2Gk(a$1icUxW4wBvv19gZcCA0A1<SjTN?jZje;V_&
zFRI`xHi8G8ECq>2b8WZIMO6N{4bdDEm*s1DxZ5V&nNAaIc~IDr-Ellszs+eXVxgM2
z;5JvomDcwHMls#eCz$UmfR)b^^tuy8;7=kh^!6F4v&%>A=UHC7KuLdMaW(QwYg$*@
zyoqhu&YxtJKZGAB@|eA%M)H`r^x_APbVsWkf@}{yQWaK-&(V{YS`6N6^Y*TG2Q%mr
zj`-FV8_UUZRlo^5JcNhiNk(RGvODgI8uu5`6SyniUQ;e>szbY~vYa&H211D&X;5p(
zuVF~EEw;JGBPq6VHabh3cD4+$?<Z&DmCZju%DfeelZt$vJdp}0KB7koM=0XUdj8k~
zZCcZNG?L4)iDFb)5cIvwL$;?3LQFOa>B!K(Feev|>@&i3F`SfIP|VTG<||WH5T2R&
zAyDzrk`K{G2BtlNxHu0s3Tb3=GPu{rOR9}3AAwEa&MC+0GvUV(qMrxTRo^Xte8%mP
z24N~y@zX`0htk*4;&Br!eiSUQW|Gs4V48Y~fy7i&Qpv^!jXVvdrp=AMA=Ton-Se#&
zd%$Iy9e7w}pG_3X3ynhzt!!G=4X~f@;{&IDFMd(?t@yo?2lpBCz+K<Z)K?dK4*tTL
zzed-?<iKXM<eb;zwLIAe2AB&AY*pwO?b?IGkL0%{TNWbwy643}oKYItzl|~z&XZ}y
zm)BDsnOe+RzuCiY-C|{NUFuT)eg3hhO?Ocf@+B=yQ&@m@){Z5EO8sJJsw5Mycot|?
z=Tsg-zo8ZgDZfm$Vz=x3c^__dH6`+dEY;|cp9U#n-8K7RX_%2G8WM~KmZU>dpoX~}
zcNX8!H`hu$$ko;A0#N!=Poi{wtDUGN2czVgMXA1x47p$ArDGv>`$os0NP+JLXRIRK
zoTG4%h$rGlbNEtM%XFl06IIMJEemWIxb&l<&(2OQF`D32-(R64$e?kS4B)ecxYEs-
zq@4WPrbJb1X`Hf3=N3;#<0c8dCev-**U#gr(#qY#sNanimb)RUUz>4czSM~1_Ihn&
z$Q17Ete@hI2+1w@2tD>1q=}~HtI`}kU8*U0(s7jB-iZC8mVv=ZGOiRwV-HL_ETOC^
z=cvH<<_U?k5z%DzvhNafCa;)LoJH&lxmnbO(miVAcGV%mxW8SS*|S-}H2dVK&dTaq
zx-rW)gKgIwdd2ADr>9Z&kP(}qRbxhRn_Ok0bDT9u8#Q<-_Z?kQrfZz~dlb}M(Mu7#
ztXtRa#kF<Y<uM52&$pekN?@;+_D2991PttdKJNVa@b~Wm|6Vb+w{tPIbNS?9Yjdi%
z?zF?@)-kEdw31eyQ9>bpk(F6pxZ+mY;MQth(2`N2X4gRcF^*}xGbX`w+?J3y*)vvm
zmxkj!hUx?04VGLyJi)?Ur-0EWk_!kx62$*;P4Lm*@8xLtK1dRsiVLBFN+^yB9PY<d
zfA^Kw6(ch1blQu{wW451B$V4!A|8)55mfPEkg&`fT%KEuu4(>ayeqzLFjM!iI>0wU
zH-ADMJ14uywO`htx}%0py5*Kf)4a#$6rDd`k4|-2Mvv?K7c1Jnbu06lOF2-^^h1%)
zt@u*?mFjkQWK8y%BvU^-Lna@-PjhD33|mW@0%v+uopL^tzQR}ARaK48v?mEp(>!-6
z3CD7=p%&)D=u(EChn}c|^=^OGw8?a@Wc_SnWn&7CQjYqPfP(7OI>*$?-nUr1w764K
z>&pL0$IwlK>CDDluE~nFWOW^=rj}fJ-0L#W(y?$uMq|<`;J37_e&T)_Iiiv6^abCw
zV_Yt+k|@Nen6^Ad-mRd5baaL7c}&_KDZ>8CkK7bAcccj3DQB5JQ6Q0p7?NCgP#9tH
zaB_SYcx;`TQh~N3&5x#XdC>77a#jY$)s_M_5f-LnOdit`N&LgoF&`XItfAk+$e%YI
zJkeGzBL!EKZu^N%LK(Yo55Uj@12z+>@}*A3w{ksrdPc+rr}a!<IX9Yz;_Mq2+9m4G
zaU#mZLzg9{(=;O%O<)-u+O~0bH=IzWO6p7oit0L4g@^XQf_M|snhib+U|Kcki(F*(
zV2Pgk=S|5`cts1A?}NHP_(bC1SWS<LtE4*)w2<5^6j4evj&BuBEAuH>@3HK(pYd!i
zShtwgNTbpp+1JgHk+TZw<nl<eAnV(xqJLAzrw1&W_|c~(VPOVsgux#YPm4z<uf3%7
z7hcuG_!fAfrLh^n9C?w(EGbLH;56^Sxh3Y{4S>NnEXE^yG|Nx{XM3Y6WA4LLPJ~E=
ztm_Kn1$(IF{E8w>7o*u<lWQg>L(?iE_T;bc(YNMEz<#3+q>P7=t^0Ka;W1gG3-l6O
zo;Ff87VgOD>*o3|A%-J39`<hH&l85-QtWbY_7t`izn0AJ>WkECe^Y|j)m3f<ALfvb
z1x7;)hFT6uh%`L|k2iuQ-Fv9&biJAE#EZ*CV45Zt@4zZVaD(t#5}^+61Z=M{9$lLh
zL~)e}V(V3TQ14oEOYy$e)as7%>7kG{iN)tq0+qjoDT+Bpgp+7^oa6HtBr)GUkRwp0
z>~UJk9k{1!ae)xIEuECs`lWZf8HPoA5?G!gNab2dA+&^mjFxERBp<?Q?ji|k3h>23
zFH}N$OQ+0&v%PmGI>OTp1`v(42bew^6*l2_r|ch|1g5Cx?#={P>xjf_ZYk$j#J+7`
zz!#$g2@|5$&;=QIku>KE4xO0CNi$X*VASjdtGIOgU46t23D;NB4Q77h&tujPBGivl
zI>`}Flbz-Ul6|aQi`mMauI_5lXzKnXA6`=<?y<L%U6w7Cwv(*sEDazZCr|dyUSp~@
z7xffOfB`rwb=BmStdX5|FH1kBFzw~Cb5Q0IwX~&a$2L+5O|R{EkpeX%U@Yb0oX%!G
zJ_(RZjqD|2H~Vmhi-6sGo|Ru?4l8jHMoXcP+wCg?Yj!}|MK4bRmBKT~ES^2EJY4IT
z{H8)rT+zky%syTSxhp^vp!O%_v=E@?ZfCsqGjATK5Bm|-xZs2*x04T_nC(RBJJ}Mx
zu&s+*Xhwz|$9e_{PR;b>`jIUc5rCQKYl@h7D0TeihBsn4Gt%kToOudEHc5?X^4T+-
z;W1R;0R$I>^z<qJH{n<ly<?cV+pC1H5Q?h1NNZb-u5sJ_4Vs6Rxj$G}aT99tj=kj;
z5^nssRt#nh=`<b~aLed%42j0#@;|>iKwrVS0JDcpOBtt(N8Dg7L^NGYQ?y|8KiPUm
zNsU4(Goj2F@HgUK7l`&ci)<(G!>(<*U{t6At;%7BL8#aFMlVqPq;Rlm=R^E9xQp&c
ziSlo=aXSJrb^BbCAgMxTWLpUyUTY%utf$NG7|3hgm3>;%;4mo<q5dXT!_zvJ_o}vp
zMGD30((GQ22L|cxFvdgZ^z#gr7jW^J#ldr#-(1fdQ9nKS)h6eJ8uI+!C@i$hnl~~9
zM){<-+b@BfV(JEEEGhl?mG`LE^;UNSS&{i0udD*$BAL2lEV8ZY;51X_X(R3z^JS6w
zZszn`(G71~krl{#ez0*-Aqh(o;Mv`&<0!piIL!O||6290p)JH!(m7Q{EZVwwMpQV~
znsY4gDVXwH)Egc!uA0>)3RiQ?vcppZ26q%}C5<2(H);S|>nCbflU52>Y<Glbptv#e
zL7OIDPj-vuRG#O$E%`EdmW!*X+$Qld)4qFTjwaka^znqA@J1!BbP*u1d6P;bryyNT
z9^~Nq61ZJY4>aR9t1{I-fqBN%x*o+ud3{Gh{#eybs??vRowO?2&uTdo8M3kujOwUA
ze4e_1LjS38Y@4lG_QXen^HUzZvEBUfkh>Yzx}`6#{PI9%pAh#~DN%_Y3r0n;>t=3>
zfW%m4u)}vFealbRQx0XlJNFUOmSSIpr#(*z%TfI^ku!W+wi1Hy4s@rMI>jxgcMY@6
z%9Hm_PqW~>$!Y~*pRGy9kfRD=fa~_Bws8>>GC*9zRKt`_8v~OXN_NQgr?XSA6{+4(
zLrVhXqwblffQ9&c#0g)#NqC;Frx^*)?u)EAZ??^>@0(eWex2yS*VFxx=kT}PCv%X<
zRNST|*>_-a9$?7)q>Sbo*YyWEYC~{GuDM<0&nXz;F6l3~yP&sYLD`sQpafTuHo;TK
za-g$HjZRo%yRjVsk=yrvLq7$h7tiB(9eQFds<1kYrY#ARxJQSi^Sb7onVWO$PoZaZ
zFi0afT;!<h)*O<NOcGGA$)Pbk*doL_`c96pmJp;SdgLNchOm3-BcG5+jG2PwBKrpM
zk+R@#XBP}%EwO$Vo`Rva0ObVb<0rln&ln{C+>das;J4-HCuU3uJ!^RBssw9)jBO{*
z<DIJ241OF@zQU1<5HDGE(xc{eAvTCj&!e7btXN$9w$M;{O;m$RxE69uy5V^b#^?XR
z{hQ2*s;+TXYnJ$78JZnDD#JHYd%70t?oncck_-&R>-5ikd5`=2RlxR(J(jKCHJbTa
zyNHc0jD7|CK@2*-Y~jo!e=XOqN6UyZR>TGk#hEDi{Ze^m0drMt)-PN2d`Q6aPDm%O
zluRW;6-7+jL$BzJsSx!2NNAQ7v_@KVa%sinfOeU@S)!Q#MFYAI))=xgfn%kZBbC;r
z>oDyxPlfSWkQ6lMkP18-IA7ADEjKPEB#>oyj;fDUd(451vs+zL0vGv>V9l9igWAzG
zG1~gM-$MAQU!jE(S`dom{wMYQ2_w__8KQaz`^Lt`(QX`jd_IM~+!f`Ft=Qss<1}ro
z#W)Q9bA(6dUCd<SBk%&3OWzBUAUkHE={o=D;(2(<TLk=Y-$kIK8ijVF2mV*cI@}oA
zs%Hpke`6p!;@adH#%xPE&H34GDiYgKqs3#(S2gm{xpYcP^K>s~YK$)p5gLIr0$?(>
zNy5dWwfE=jhQ|vT`LqRP7QY+8@)zLp-Oy!J!E2_2W)kFo(V9xn$|1?<fZJHVIAnfK
zU27wY<?7D4pwkEPB4OUOcE$55xqsVgGqdx*SakJ=4CX4HIMd^&<0?vI(g-R*`yv)>
zSA|IT+!V>O^&Um8Sa{>}Us^TydU7Nc3aeiTBbu8mezBp5p4x5pC#6~5g69>FhzANq
zac~pL#eIvM=aLuyrpd?CWy`Y`N0QoVvAC3?%0v9&;+G_lj5TU~T41ksT$G*X5cR4Z
zu6=!2y8eixJnF2DyDeC(&qszXRQ*#@FK+pc4IwgXOCFmv{cwO#@FO-4k?A4RJz4bt
zYVuFiMJcBi422--KH(?xuNJgrn`FNg6zXeV6t#JSul?r5y0wkOv)g;Lv^H--Gws?T
zxDJZ%&aDrDGw~=H_VTTr!rynn#pu4v3E<P`Clj7jD(Pgcy?lgC$8gi=!Kb`o?t^ok
zT$OSq$}gRghYW=si|tZ4qnP+z*o{V8J729e2oXkl#9LU+OD~>$nr5!dJxMBCf)Jwc
z9Y{cYM1Gd`V8^W8ZNaFfL8o@-NVJxXRMST#$3pZ4=o+FhT&O)utu>wQ+)n`)?%1b8
zDUZzDfoSO~jEQbI^mtCXT^+Tx77k|0wH+C$H#^@$kDQ%8V^l@&K9X!DcG7kE9sKk`
z^p~qRl+nE==9~P3r%H$?;eqkKW#bp5U8E14C1<_sMFlTiOeK(mW_K%JvO?vji>^W4
zR5qR)Kq_Hya(R2D4j%F#rlJtNK`~wkG$EDg#*yp9*aPJ8>-osN$86thMT(~o6IM!)
zliWsL+a&UlCxf*CF>L6sH1M@lK&p8)<AN`)=mETGKcPZnPgW++Vgn_oOjbn)aJsce
zAZMyF03u6I2R#mvUs(qh;;AQ6*#dZ)&voSmbg-OJ+U{Z-<=0p7#F|E9?A0>7W=Cae
zj&!A6>&QduyWQ+hB9Yvn9{~U63kGe+_@J+5EFCw1ZZ7Be*G6AE;%D0yx+H<>j~rF}
zQzz9QckK9u1zbXL25+VzO~yZYLzW}8tKCohxRu%oQS3FCFdSyib66<#d9|XEV}Ux@
z3xoR}(PGx*pUI}53c`|}*2Jt2r5<dZIBa)qM4dTaow#+LStK3!^ueUTvYDs)khRSE
z-PCm|gFMom(K0l-SC%E!eGA)W&+B=6XU_a9u)E$kG`OR6Eq7(eG;y0}A{{7fcV$E!
zD16_y&J@PGGTu8FM*JGHZsFpkK#bXW)1M!=7<2?9>Bdc#S?s&ZAN5n$!JRpr@?+_u
z{v5?VjP9t=G5^HOp^7N%j^7rh0Y(5!LQ~C_bKn0|zqZ+;a_VOqIlv8@TAN|CL}A>r
zc*~hqM_rw!1M|D4da0!qHDhJbCz@8Nv{I`Dbai#5**TVavXTZxsCHi<Eq)<Hn#tMR
zUPn|NZZExbv5j?J(ig<Hj^pq8wg$r_p59K^-$8GKAeRl!PxsnxlJ(jJg0PG020+x{
zw|l{sQqkN7;0SFxvvY}=!axc)Vg`4r@&4RZ0*;n<77L#G>ik2jz%vPJDh}&T^sd~d
zo7wO{3RhJ4>|Yxlpv;eNmn7FHYQy-&GgE5AxWy`~@SdeOTdvX?rxB+mt)dwrn=%XD
zy?&MH=f5_7ty`UsxBkm7WSU;0y2JR*Gbp;l?|z=r9VTp6!PA^c@YR*BaHN<ejH4T_
z`BLP5x89lxF86$g$9;OG(xl?ZA)MuGt24oj?KwXLES1o|t@li1zbYZ|NaVjN$?;U@
zHkbG^?_sdGtKNr9J)anz#z9`rV%A7GrFQ!(Ep`9&^%ZK0Ry3|VlVCb<mUeI1GqI}s
zNao?eb61nB(@VgwezIYntl^bIdof&UnG6eW*T=(?+&D14dh|8vC%h-yH6WgG=hBP}
z44bG5SQp||TTSYtn3oLW+XlYN$|3pVA|G?p!{PT!Ii^q3DG&vHD*AywKKr^|Xni43
ziSSU3zbt{55Dunn=mU|_w<A8E=2>F{d)xf3WRO)e(2rroeDAe`JCJfUS7^=4(dRgG
zHUSDtoZ0~uERbSC^(m5&*;@sizvdkGnXofc{z&akuOA|x#?eQ*UR5y9ApR)~jqlzg
zFy-uZV#adMT0T<oQ#CsejaVoO+133%2<%VX<d81EXblAbDDL@Z@=zd9A`~bA_73oO
zK)eI85hwwLnfIO=6q@`S>K)MUfO!Y(J3cff|AynC`NNz=gMSCYI}qQ2)HsWVJnH&~
zksXfw4wQGGHfD!^)cf>@2x|QJ4zzcmH-Z{5I?dmSja@{TWe|TVc4V0F^nb*>6*1p|
z^$zTJ;JgF3(OVI(+xZVupcn5Q`0pTi2jM%28s8VRsmFhq%M~Q=Abkf}<8lSL=l!4K
zsufT$fFu9;;g^-NtcdYFDD;kGR9-l=<ex<p=>PL8aB_bU1sCv-^nYg%zyCM<U&RRt
z0I)T6G5Ql#Qj!G&M+f{TyZFBov=IJF2LOn8_q?;Ii;Jb5x$}Q({++<pD)V2$r~v%`
zY5@SASjkbv6twT7NoFpkzz46ziZ>v^r~TXV|BpU^=pX7wSjhw>?@oAEZ~voCiJfd!
zLP1UZXOw>g!T%*q^$#t5?07g*n&j2@{IUPjtjCTwA|*ulZ^M80=oC9yv6O=H|9VJ<
z6F*6c|4+fcY-{7ZcO4VxU}R@%^PXz<Pv@Og{wJ;n_m9rR;=DW0#nZ<0AFlg%O80-C
z*ngsa|0$&O|A+zp+hDRo83p8D<JVu%b?W~K1^5H@|LDEfIQf&S!jZ|68_Ot&|BP$7
zi~=7*aSJNBIvkla8MpjzDqs0KH4+Z~Z>sOVs9ArgTK>p?s2ueFw)*dxLR>1OvonVP
z{J}qMHdZ7PS5SzO{F#}_pZ@1M5CFg*{8P#U6Ek_52$LhZrQ+|o8LD_UM~RF1#~fDj
zTLlH(pAOSizEfEx{-Tm5S14klC;M0atq}c(b=Qpdw}M$O9ud+%JDGg>M<O<#<c|b)
pGIbRN?O*O<t??B6{hn42`vCyJ_=md?GLoIDD5#*hvnbx_{~y@1G(P|U

diff --git a/src/detector_sim.cpp b/src/detector_sim.cpp
index 262565f..385b9d2 100644
--- a/src/detector_sim.cpp
+++ b/src/detector_sim.cpp
@@ -25,7 +25,6 @@
 #include "../include/TFRParticle.h"
 #include "../include/TFRGeometry.h"
 #include "../include/TFRPropagator.h"
-#include "../include/TFRMultipleScattering.h"
 
 using namespace std;
 
@@ -139,9 +138,6 @@ int main(int argc, char **argv){
   TRandom3 *random_ms = new TRandom3();   //multiple scattering
   random_ms->SetSeed(1);
 
-  //set the tool required to simulate the multiple scattering
-  TFRMultipleScattering *mscattering = new TFRMultipleScattering();
-  
   //I've no clue why the hell in ROOT there aren't nice implementations of iterators,
   //but just this stupid way (that I even didn't used at my C course during my bachelor)
   TIter it_event(event_list);
@@ -166,23 +162,6 @@ int main(int argc, char **argv){
       if(curr_particle->GetCharge() == 0)
 	continue;
       
-      /*
-      //set a TEveRecTrack, required for the propagation of a TEveTrack
-      TEveRecTrackD *temp_track = new TEveRecTrackD();
-
-      temp_track->fV.Set(curr_particle->GetVertex());
-      temp_track->fP.Set(curr_particle->GetMomentum());
-      temp_track->fSign = curr_particle->GetCharge();
-      
-      TEveTrack *prop_track = new TEveTrack(temp_track, detector_geo->GetPropagator());
-      
-      prop_track->GetPropagator()->InitTrack(curr_particle->GetVertex(),
-					     curr_particle->GetCharge());
-      
-      //propagate the particle!
-      //TEve_track-->MakeTrack();
-      */
-      
       //I've no clue why the hell in ROOT there aren't nice implementations of iterators,
       //but just this stupid way (that I even didn't used at my C course during my bachelor)
       TIter it_layer((TFRLayers*) detector_geo->GetLayers());
@@ -202,15 +181,6 @@ int main(int argc, char **argv){
 	
 	TFRMCHit *intersection = new TFRMCHit(*curr_layer);
 	
-	/*
-	//check if the intersection is valid
-	if(prop_track->GetPropagator()->IntersectPlane(temp_track->fP,
-	curr_layer->GetPosition(), curr_layer->GetOrtVersor(),
-	intersection_position)){
-	
-	intersection->SetPosition(intersection_position);
-	*/
-	
 	//check if the intersection is valid
 	if(propagator->PropagateState(temp_state, curr_layer->GetZ())){
 	  
@@ -222,10 +192,10 @@ int main(int argc, char **argv){
 	  if(detector_geo->GetMultipleScattStatus()){
 
 	    //get the angle by wich the track is reflected (the full angle between track before and after scattering)
-	    double theta_ms = sqrt(2.) * mscattering->GetThetaGauss(*curr_layer,
-								    curr_particle->GetBeta(),
-								    curr_particle->GetMomentumMod(),
-								    curr_particle->GetCharge());
+	    double theta_ms = sqrt(2.) * detector_geo->GetMultipleScattering()->GetThetaGauss(curr_layer->GetXoverXZero(),
+											      curr_particle->GetBeta(),
+											      curr_particle->GetMomentumMod(),
+											      curr_particle->GetCharge());
 	    
 	    //Express the current momentum in the coordinate system where z is along the momentum
 	    double sinalpha = temp_state->GetMomentum()[0]
@@ -267,19 +237,6 @@ int main(int argc, char **argv){
 
 	  }  //if(detector_geo->GetMultipleScattStatus())
 	  
-	  /*
-	    temp_track->fP.Set(TEveVectorD(pxz * sin(alpha + theta_ms),
-	    temp_track->fP[1],
-	    pxz * cos(alpha + theta_ms)));
-	  */
-	  
-	  /*
-	  //update the propagator
-	  prop_track = new TEveTrack(temp_track, detector_geo->GetPropagator());
-	  prop_track->GetPropagator()->InitTrack(temp_track->fV,
-	  curr_particle->GetCharge());
-	  */
-	  
 	  //add the intersection to the vector of the hits of the particle
 	  intersection->SetPosition(TVector3(temp_state->GetX(),
 					     temp_state->GetY(),
diff --git a/src/fitting_chi2_linear.cpp b/src/fitting_chi2_linear.cpp
index 16843b6..708ed01 100644
--- a/src/fitting_chi2_linear.cpp
+++ b/src/fitting_chi2_linear.cpp
@@ -116,13 +116,13 @@ bool fitStraightTracklets(TFRTrack *track,
   //  now I can finally fit the two tracklets  //
   //-------------------------------------------//
   
-  if(!chi2_fit->FitLinear1D_matrix(track_beforeB)){
+  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, true, detector_geo)){
     std::cout << "Error: problem with linear chi2 fitting of the tracklet before B." << std::endl;
     track->SetFitStatus(false);
     return false;
   }
   
-  if(!chi2_fit->FitLinear1D_matrix(track_afterB)){
+  if(!chi2_fit->FitLinear1D_matrix(track_afterB, true, detector_geo)){
     std::cout << "Error: problem with linear chi2 fitting of the tracklet after B." << std::endl;
     track->SetFitStatus(false);
     return false;
@@ -181,7 +181,7 @@ bool fitStraightTracklets(TFRTrack *track,
   //  linear fit on the xy plane  //
   //------------------------------//
 
-  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false)){
+  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false, detector_geo)){
     std::cout << "Error: problem with linear chi2 fitting of the tracklet before B on the yz plane." << std::endl;
     track->SetFitStatus(false);
     return false;
@@ -246,7 +246,7 @@ bool extrapolateVertex(TFRTrack *track,
   //----------------------------//
   
   //fit the straight tracklet with the 2D chi2 fit
-  if(!chi2_fit->FitLinear2D_matrix(track_beforeB)){
+  if(!chi2_fit->FitLinear2D_matrix(track_beforeB, detector_geo)){
     std::cout << "Error: problem with linear 2D chi2 fitting of the tracklet before B." << std::endl;
     track->SetFitStatus(false);
     return false;
diff --git a/src/fitting_chi2_quadratic.cpp b/src/fitting_chi2_quadratic.cpp
index 494ea6b..34d7e6f 100644
--- a/src/fitting_chi2_quadratic.cpp
+++ b/src/fitting_chi2_quadratic.cpp
@@ -89,14 +89,14 @@ bool fitStraightAndParabola(TFRTrack *track,
   //-------------------------------------------//
 
   //fit the straight tracklet
-  if(!chi2_fit->FitLinear1D_matrix(track_beforeB)){
+  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, true, detector_geo)){
     std::cout << "Error: problem with linear chi2 fitting of the tracklet before B." << std::endl;
     track->SetFitStatus(false);
     return false;
   }
   
   //fit the parabolic tracklet
-  if(!chi2_fit->FitQuadratic1D_matrix(track_inB)){
+  if(!chi2_fit->FitQuadratic1D_matrix(track_inB, true, detector_geo)){
     std::cout << "Error: problem with parabolic chi2 fitting of the tracklet in B." << std::endl;
     track->SetFitStatus(false);
     return false;
@@ -152,7 +152,7 @@ bool fitStraightAndParabola(TFRTrack *track,
   //  linear fit on the xy plane  //
   //------------------------------//
   
-  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false)){
+  if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false, detector_geo)){
     std::cout << "Error: problem with linear chi2 fitting of the tracklet before B on the yz plane." << std::endl;
     track->SetFitStatus(false);
     return false;
@@ -217,7 +217,7 @@ bool extrapolateVertex(TFRTrack *track,
   //----------------------------//
   
   //fit the straight tracklet with the 2D chi2 fit
-  if(!chi2_fit->FitLinear2D_matrix(track_beforeB)){
+  if(!chi2_fit->FitLinear2D_matrix(track_beforeB, detector_geo)){
     std::cout << "Error: problem with linear 2D chi2 fitting of the tracklet before B." << std::endl;
     track->SetFitStatus(false);
     return false;
-- 
GitLab