Complete rewrite of the trace system (now a stream).

* Change: In Hurricane, in Flags add operator overload for "int" type
    and not only "unsigned int". Otherwise the compiler complaints about
    ambiguous overload when using enum values which are considered as
    "int".
      Simpler code for the BaseFlags::contains() method.
      Added implicit conversion from BaseFlags toward bool type.
* Change: In Hurricane, in Commons, complete replacement of the previous
    two trace systems (trace & ltrace) by a stream-based one.
    As it is a true object it is much less fragile than the one based
    on defines (but maybe a little slower).
      Define a reservation table for the trace levels for all the
    Coriolis & Chams components.
* Change: All tools, use the new trace system.
This commit is contained in:
Jean-Paul Chaput 2016-05-17 23:00:06 +02:00
parent 1c7cbbe6f7
commit 82cff69d9f
201 changed files with 2614 additions and 2627 deletions

View File

@ -84,6 +84,7 @@ stylesTable = \
, (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8', 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 })
, (Drawing, 'gcell' , { 'color':'255,255,190', 'pattern':'0000000000000000', 'border':4 })
)
# ----------------------------------------------------------------------
@ -189,6 +190,7 @@ stylesTable = \
, (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'antislash2.32' , 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 })
, (Drawing, 'gcell' , { 'color':'255,255,190', 'pattern':'0000000000000000', 'border':4 })
)
# ----------------------------------------------------------------------
@ -361,5 +363,6 @@ stylesTable = \
, (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8' , 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8' , 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 })
, (Drawing, 'gcell' , { 'color':'255,255,190', 'pattern':'0000000000000000', 'border':4 })
)
)

View File

@ -7,7 +7,8 @@ parametersTable = \
, ('misc.logMode' , TypeBool, False)
, ('misc.verboseLevel1', TypeBool, True )
, ('misc.verboseLevel2', TypeBool, False)
, ('misc.traceLevel' , TypeInt , 1000, {'min':0} )
, ('misc.minTraceLevel', TypeInt , 0, {'min':0} )
, ('misc.maxTraceLevel', TypeInt , 0, {'min':0} )
, ("viewer.printer.mode", TypeEnumerate ,1
, { 'values':( ("Cell Mode" , 1)
@ -58,7 +59,8 @@ layoutTable = \
, (TypeOption, 'misc.verboseLevel2' , 'Very Verbose' , 0)
, (TypeOption, 'misc.info' , 'Show Info' , 0)
, (TypeOption, 'misc.logMode' , 'Output is a TTY' , 0)
, (TypeOption, 'misc.traceLevel' , 'Trace Level' , 1)
, (TypeOption, 'misc.minTraceLevel' , 'Min. Trace Level' , 1)
, (TypeOption, 'misc.maxTraceLevel' , 'Max. Trace Level' , 1)
, (TypeTitle , 'Print/Snapshot Parameters')
, (TypeOption, 'viewer.printer.mode' , 'Printer/Snapshot Mode', 1)
, (TypeOption, 'viewer.printer.paper', 'Paper Size' , 0)

View File

@ -11,9 +11,12 @@ Cfg.getParamBool("misc.bug" ).setBool(False)
Cfg.getParamBool("misc.logMode" ).setBool(True )
Cfg.getParamBool("misc.verboseLevel1").setBool(True )
Cfg.getParamBool("misc.verboseLevel2").setBool(False)
Cfg.getParamInt ("misc.traceLevel" ).setInt (1000 )
param = Cfg.getParamInt ("misc.traceLevel")
Cfg.getParamInt ("misc.minTraceLevel").setInt (0 )
Cfg.getParamInt ("misc.maxTraceLevel").setInt (0 )
param = Cfg.getParamInt ("misc.minTraceLevel")
param.setMin(0)
param = Cfg.getParamInt ("misc.maxTraceLevel")
param.setMax(0)
# Misc. tab layout.
layout = Cfg.Configuration.get().getLayout()
@ -26,4 +29,5 @@ layout.addParameter ( "Misc.", "misc.info" , "Show Infos" , 0 )
layout.addParameter ( "Misc.", "misc.paranoid" , "Show Everything" , 0 )
layout.addParameter ( "Misc.", "misc.bug" , "Show Bugs" , 0 )
layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 0 )
layout.addParameter ( "Misc.", "misc.traceLevel" , "Trace Level" , 1 )
layout.addParameter ( "Misc.", "misc.minTraceLevel", "Min. Trace Level", 1 )
layout.addParameter ( "Misc.", "misc.maxTraceLevel", "Max. Trace Level", 1 )

View File

@ -27,7 +27,6 @@ namespace CRL {
using namespace std;
using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::Initializer;
using Hurricane::JsonTypes;
using Hurricane::Warning;
@ -133,7 +132,7 @@ namespace CRL {
, DataBase::CreateLib|DataBase::WarnCreateLib );
AllianceLibrary* aLibrary = NULL;
ltrace(51) << "| " << libDbPath << " : " << library << endl;
cdebug.log(19) << "| " << libDbPath << " : " << library << endl;
if (library) {
aLibrary = af->getAllianceLibrary( library );
@ -152,7 +151,7 @@ namespace CRL {
if (not library) library = aLibrary->getLibrary();
}
ltrace(51) << "| Associates to: " << aLibrary << endl;
cdebug.log(19) << "| Associates to: " << aLibrary << endl;
if (aLibrary->getLibrary() != library) {
cerr << Warning( "JsonAllianceLibrary::toData(): Underlying Hurricane Library discrepency for \"%s\".\n"

View File

@ -30,7 +30,6 @@ using namespace std;
namespace CRL {
using Hurricane::inltrace;
using Hurricane::tab;
using Hurricane::Initializer;
using Hurricane::JsonTypes;
@ -437,7 +436,7 @@ namespace CRL {
Catalog::State* state = get<Catalog::State*>( stack, "_state" );
CatalogProperty* property = NULL;
ltrace(51) << "topDBo:" << dbo << endl;
cdebug.log(19) << "topDBo:" << dbo << endl;
Cell* cell = dynamic_cast<Cell*>( dbo );
if (cell) {

View File

@ -90,9 +90,6 @@ namespace CRL {
using Hurricane::JsonTypes;
using Hurricane::Tabulation;
using Hurricane::BasicLayer;
using Hurricane::trace_in;
using Hurricane::trace_out;
using Hurricane::in_trace;
using Hurricane::tab;
using Hurricane::DataBase;
using Hurricane::Technology;
@ -210,18 +207,17 @@ namespace CRL {
unsigned RoutingLayerGauge::getTrackIndex ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const
{
trace << "RoutingLayerGauge::getTrackIndex ( " << position << " )" << endl;
trace_in ();
cdebug.log(100,1) << "RoutingLayerGauge::getTrackIndex ( " << position << " )" << endl;
long modulo;
long depth;
divide ( position-start, depth, modulo );
trace << "depth := " << depth << endl;
cdebug.log(100) << "depth := " << depth << endl;
if ( depth < 0 ) {
trace_out ();
cdebug.tabw(100,-1);
return 0;
// throw Error ( negativeIndex
@ -243,7 +239,7 @@ namespace CRL {
unsigned int tracksNumber = getTrackNumber(start,stop);
if ( (unsigned)depth >= tracksNumber ) {
trace_out ();
cdebug.tabw(100,-1);
return (tracksNumber > 0) ? tracksNumber-1 : 0;
// throw Error ( overflowIndex
// , getString(this).c_str()
@ -253,7 +249,7 @@ namespace CRL {
// );
}
trace_out ();
cdebug.tabw(100,-1);
return depth;
}

View File

@ -88,9 +88,17 @@ namespace {
}
void traceLevelChanged ( Cfg::Parameter* p )
void minTraceLevelChanged ( Cfg::Parameter* p )
{
ltracelevel ( p->asInt() );
//cerr << "minTraceLevelChanged:" << p->asInt() << endl;
cdebug.setMinLevel( p->asInt() );
}
void maxTraceLevelChanged ( Cfg::Parameter* p )
{
//cerr << "maxTraceLevelChanged:" << p->asInt() << endl;
cdebug.setMaxLevel( p->asInt() );
}
@ -329,7 +337,8 @@ namespace CRL {
Cfg::getParamBool ("misc.paranoid" ,false)->registerCb ( this, paranoidChanged );
Cfg::getParamBool ("misc.bug" ,false)->registerCb ( this, bugChanged );
Cfg::getParamBool ("misc.logMode" ,false)->registerCb ( this, logModeChanged );
Cfg::getParamInt ("misc.traceLevel" ,1000 )->registerCb ( this, traceLevelChanged );
Cfg::getParamInt ("misc.minTraceLevel" ,0 )->registerCb ( this, minTraceLevelChanged );
Cfg::getParamInt ("misc.maxTraceLevel" ,0 )->registerCb ( this, maxTraceLevelChanged );
Cfg::getParamString("stratus1.mappingName","not_set")->registerCb ( this, stratus1MappingNameChanged );
// Immediate update from the configuration.

View File

@ -318,7 +318,7 @@ Name BKParser::getNewNetName()
bool BKParser::isNumber ( char* token ) {
trace << "isNumber = " << token;
cdebug.log(100) << "isNumber = " << token;
unsigned i = 0;
char tok;
@ -330,7 +330,7 @@ bool BKParser::isNumber ( char* token ) {
}
bool BKParser::isFloat ( char* token ) {
trace << "isFloat = " << token;
cdebug.log(100) << "isFloat = " << token;
unsigned i = 0;
char tok;
@ -343,7 +343,7 @@ bool BKParser::isFloat ( char* token ) {
}
bool BKParser::isName ( char* token ) {
trace << "isName = " << token;
cdebug.log(100) << "isName = " << token;
unsigned i = 0;
char tok;
@ -358,7 +358,7 @@ bool BKParser::isName ( char* token ) {
}
bool BKParser::isSymetry ( char* token ) {
trace << "isSymetry = " << token;
cdebug.log(100) << "isSymetry = " << token;
if ( ( ( token[0] == 'X' ) && ( token[1] == char(0) ) )
|| ( ( token[0] == 'Y' ) && ( token[1] == char(0) ) )
|| ( ( token[0] == 'R' ) && ( token[1] == '9' ) && ( token[2] == '0' ) && ( token[3] == char(0) ) ) )
@ -366,7 +366,7 @@ bool BKParser::isSymetry ( char* token ) {
return false;
}
bool BKParser::isDirection ( char* token ) {
trace << "isDirection = " << token;
cdebug.log(100) << "isDirection = " << token;
if ( ( ( token[0] == 'I' ) || ( token[0] == 'O' ) || ( token[0] == 'B' ) ) && ( token[1] == char(0) ) )
return true;
@ -381,7 +381,7 @@ bool BKParser::ScanAux ()
// The Aux record looks like :
// RowBasedPlacement : <cell_name>.nodes <cell_name>.nets <cell_name>.wts <cell_name>.pl <cell_name>.scl
// **********************************************************************************************************
trace << "ScanAux = " << _buffer;
cdebug.log(100) << "ScanAux = " << _buffer;
// ***********************
// Patterns initialization
@ -441,7 +441,7 @@ bool BKParser::ScanNum ( unsigned& num )
// The NodeNum record looks like :
// NumNodes : <num>
// *******************************
trace << "ScanNum = " << _buffer;
cdebug.log(100) << "ScanNum = " << _buffer;
char *p_type, *p_num;
if ( ( ( p_type = strtok ( _buffer, "\t \n:" ) ) != NULL ) &&
@ -460,7 +460,7 @@ bool BKParser::ScanDegree ( unsigned& degree, Name& netName )
// The NetDregree record looks like :
// NetDegree : <degree> [netName]
// **********************************
trace << "ScanDegree = " << _buffer;
cdebug.log(100) << "ScanDegree = " << _buffer;
bool mDegree = false;
bool mName = false;
@ -502,7 +502,7 @@ bool BKParser::ScanNodes ( Name& name, DbU::Unit& width, DbU::Unit& height, bool
// The Node record looks like :
// <ins_name> <width> <height> [terminal]
// **************************************
trace << "ScanNodes = " << _buffer;
cdebug.log(100) << "ScanNodes = " << _buffer;
char *p_name, *p_width, *p_height, *p_term;
if ( ( ( p_name = strtok ( _buffer, "\t \n" ) ) != NULL ) &&
@ -528,7 +528,7 @@ bool BKParser::ScanNets ( Name& insName, Net::Direction& dir, DbU::Unit& dx, DbU
// The Net record looks like :
// NetDegree : <degree> <net_name>
// *********************************
trace << "ScanNets = " << _buffer;
cdebug.log(100) << "ScanNets = " << _buffer;
bool mName = false;
bool mDirection = false;
@ -580,7 +580,7 @@ bool BKParser::ScanWts ( Name& name, unsigned& weight )
// The Weight record looks like :
// <ins_name> <weight>
// ******************************
trace << "ScanWts = " << _buffer;
cdebug.log(100) << "ScanWts = " << _buffer;
//char *p_x, *p_y, *p_model, *p_name, *p_transf;
@ -622,7 +622,7 @@ bool BKParser::ScanPl ( Name& name, DbU::Unit& x, DbU::Unit& y, Transformation::
// The Placement record looks like :
// <ins_name> <x> <y> : <orient> [FIXED]
// *************************************
trace << "ScanPl = " << _buffer;
cdebug.log(100) << "ScanPl = " << _buffer;
char *p_name, *p_x, *p_y, *p_orient, *p_fixed;
if ( ( ( p_name = strtok ( _buffer, "\t \n" ) ) != NULL ) &&

View File

@ -208,10 +208,10 @@ void createPlacedRoutingPadsAndPinsRing ( Cell* top_cell )
netOccurrence = Occurrence(net);
for_each_occurrence ( plugOccurrence, HyperNet(netOccurrence).getLeafPlugOccurrences() )
{
ltrace(58) << "Creating Routing Pad " << plugOccurrence << endl;ltracein(58);
cerr << RoutingPad::create ( net, plugOccurrence, RoutingPad::BiggestArea ) << endl;
//ltraceout(58);
end_for;
cdebug.log(109,1) << "Creating Routing Pad " << plugOccurrence << endl;
cerr << RoutingPad::create ( net, plugOccurrence, RoutingPad::BiggestArea ) << endl;
//ltraceout(58);
end_for;
}
vector<Pin*> pins;
for_each_pin ( pin, net->getPins() ) {

View File

@ -93,11 +93,10 @@ int main ( int argc, char *argv[] )
int returnCode = 0;
try {
unsigned int traceLevel;
bool verbose1;
bool verbose2;
bool coreDump;
bool textMode;
bool verbose1;
bool verbose2;
bool coreDump;
bool textMode;
boptions::options_description options ("Command line arguments & options");
options.add_options()
@ -110,9 +109,6 @@ int main ( int argc, char *argv[] )
, "Enable core dumping.")
( "text,t" , boptions::bool_switch(&textMode)->default_value(false)
, "Run in pure text mode.")
( "trace-level,l" , boptions::value<unsigned int>(&traceLevel)->default_value(1000)
, "Set the level of trace, trace messages with a level superior to "
"<arg> will be printed on <stderr>." )
( "cell,c" , boptions::value<string>()
, "The name of the cell to load, whithout extension." );

View File

@ -28,7 +28,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -56,7 +55,7 @@ extern "C" {
static PyObject* PyAcmSigda_load ( PyObject*, PyObject* args )
{
trace << "PyAcmSigda_load()" << endl;
cdebug.log(30) << "PyAcmSigda_load()" << endl;
Cell* cell = NULL;

View File

@ -34,7 +34,6 @@ namespace CRL {
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -71,7 +70,7 @@ extern "C" {
static PyObject* PyAllianceFramework_create ( PyObject*, PyObject* args )
{
trace << "PyAllianceFramework_create()" << endl;
cdebug.log(30) << "PyAllianceFramework_create()" << endl;
AllianceFramework* af = NULL;
PyAllianceFramework* pyAf = NULL;
@ -97,7 +96,7 @@ extern "C" {
static PyObject* PyAllianceFramework_get ( PyObject* args )
{
trace << "PyAllianceFramework_get()" << endl;
cdebug.log(30) << "PyAllianceFramework_get()" << endl;
AllianceFramework* af = NULL;
PyAllianceFramework* pyAf = NULL;
@ -117,7 +116,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getEnvironment ( PyAllianceFramework* self )
{
trace << "PyAllianceFramework_getEnvironment ()" << endl;
cdebug.log(30) << "PyAllianceFramework_getEnvironment ()" << endl;
Environment* env = NULL;
@ -135,7 +134,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getLibrary ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_getLibrary()" << endl;
cdebug.log(30) << "PyAllianceFramework_getLibrary()" << endl;
Library* lib = NULL;
@ -165,7 +164,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getAllianceLibrary ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_getAllianceLibrary()" << endl;
cdebug.log(30) << "PyAllianceFramework_getAllianceLibrary()" << endl;
AllianceLibrary* alib = NULL;
@ -200,7 +199,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getCell ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_getCell ()" << endl;
cdebug.log(30) << "PyAllianceFramework_getCell ()" << endl;
char* name = NULL;
Cell* cell = NULL;
@ -223,7 +222,7 @@ extern "C" {
static PyObject* PyAllianceFramework_saveCell ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_saveCell ()" << endl;
cdebug.log(30) << "PyAllianceFramework_saveCell ()" << endl;
HTRY
@ -244,7 +243,7 @@ extern "C" {
static PyObject* PyAllianceFramework_createCell ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_createCell ()" << endl;
cdebug.log(30) << "PyAllianceFramework_createCell ()" << endl;
char* name = NULL;
Cell* cell = NULL;
@ -266,7 +265,7 @@ extern "C" {
static PyObject* PyAllianceFramework_createLibrary ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_createLibrary()" << endl;
cdebug.log(30) << "PyAllianceFramework_createLibrary()" << endl;
AllianceLibrary* alib = NULL;
string libName = "";
@ -305,7 +304,7 @@ extern "C" {
static PyObject* PyAllianceFramework_isPad ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_isPad ()" << endl;
cdebug.log(30) << "PyAllianceFramework_isPad ()" << endl;
char* name = NULL;
@ -326,7 +325,7 @@ extern "C" {
static PyObject* PyAllianceFramework_addRoutingGauge ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_addRoutingGauge ()" << endl;
cdebug.log(30) << "PyAllianceFramework_addRoutingGauge ()" << endl;
HTRY
METHOD_HEAD("AllianceFramework.addRoutingGauge()")
@ -342,7 +341,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getRoutingGauge ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_getRoutingGauge ()" << endl;
cdebug.log(30) << "PyAllianceFramework_getRoutingGauge ()" << endl;
RoutingGauge* rg = NULL;
@ -366,7 +365,7 @@ extern "C" {
static PyObject* PyAllianceFramework_addCellGauge ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_addCellGauge ()" << endl;
cdebug.log(30) << "PyAllianceFramework_addCellGauge ()" << endl;
HTRY
METHOD_HEAD("AllianceFramework.addCellGauge()")
@ -382,7 +381,7 @@ extern "C" {
static PyObject* PyAllianceFramework_getCellGauge ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_getCellGauge ()" << endl;
cdebug.log(30) << "PyAllianceFramework_getCellGauge ()" << endl;
CellGauge* rg = NULL;
@ -406,7 +405,7 @@ extern "C" {
static PyObject* PyAllianceFramework_loadLibraryCells ( PyAllianceFramework* self, PyObject* args )
{
trace << "PyAllianceFramework_loadLibraryCells()" << endl;
cdebug.log(30) << "PyAllianceFramework_loadLibraryCells()" << endl;
unsigned int count = 0;

View File

@ -28,7 +28,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -60,7 +59,7 @@ extern "C" {
static PyObject* PyAllianceLibrary_getLibrary ( PyAllianceLibrary* self, PyObject* args )
{
trace << "PyAllianceLibrary_getLibrary()" << endl;
cdebug.log(30) << "PyAllianceLibrary_getLibrary()" << endl;
Library* lib = NULL;
@ -75,7 +74,7 @@ extern "C" {
static PyObject* PyAllianceLibrary_getPath ( PyAllianceLibrary* self, PyObject* args )
{
trace << "PyAllianceLibrary_getPath()" << endl;
cdebug.log(30) << "PyAllianceLibrary_getPath()" << endl;
HTRY
METHOD_HEAD("AllianceLibrary.getPath()")
@ -115,7 +114,7 @@ extern "C" {
DirectHashMethod(PyAllianceLibrary_Hash, PyAllianceLibrary)
extern void PyAllianceLibrary_LinkPyType() {
trace << "PyAllianceLibrary_LinkType()" << endl;
cdebug.log(30) << "PyAllianceLibrary_LinkType()" << endl;
PyTypeAllianceLibrary.tp_dealloc = (destructor) PyAllianceLibrary_DeAlloc;
PyTypeAllianceLibrary.tp_repr = (reprfunc) PyAllianceLibrary_Repr;

View File

@ -28,7 +28,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Bug;
using Hurricane::Error;
using Hurricane::Warning;
@ -58,7 +57,7 @@ extern "C" {
static PyObject* PyBanner_new ( PyTypeObject* type, PyObject* args, PyObject* kwArgs )
{
trace << "PyBanner_new()" << endl;
cdebug.log(30) << "PyBanner_new()" << endl;
Banner* banner = NULL;
PyBanner* pyBanner = (PyBanner*)type->tp_alloc(type,0);
@ -181,7 +180,7 @@ extern "C" {
DirectHashMethod(PyBanner_Hash, PyBanner)
extern void PyBanner_LinkPyType() {
trace << "PyBanner_LinkType()" << endl;
cdebug.log(30) << "PyBanner_LinkType()" << endl;
PyTypeBanner.tp_new = PyBanner_new;
PyTypeBanner.tp_dealloc = (destructor)PyBanner_DeAlloc;

View File

@ -28,7 +28,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -56,7 +55,7 @@ extern "C" {
static PyObject* PyBlif_load ( PyObject*, PyObject* args )
{
trace << "PyBlif_load()" << endl;
cdebug.log(30) << "PyBlif_load()" << endl;
Cell* cell = NULL;

View File

@ -40,7 +40,6 @@ namespace CRL {
using std::cerr;
using std::endl;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -74,7 +73,7 @@ extern "C" {
static PyObject* PyVhdl_destroyAllVHDL ( PyObject* module )
{
trace << "PyVhdl_destroyAllVHDL()" << endl;
cdebug.log(30) << "PyVhdl_destroyAllVHDL()" << endl;
HTRY
EntityExtension::destroyAll();
@ -104,7 +103,7 @@ extern "C" {
// Module Initialization : "initCRL ()"
DL_EXPORT(void) initCRL () {
trace << "initCRL()" << endl;
cdebug.log(30) << "initCRL()" << endl;
PyBanner_LinkPyType ();
PyCatalogState_LinkPyType ();
@ -198,7 +197,7 @@ extern "C" {
//PyObject* dictionnary = PyModule_GetDict ( module );
//DbULoadConstants ( dictionnary );
trace << "CRL.so loaded " << (void*)&typeid(string) << endl;
cdebug.log(30) << "CRL.so loaded " << (void*)&typeid(string) << endl;
}

View File

@ -37,7 +37,6 @@ namespace CRL {
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Error;
using Hurricane::Warning;
using Isobar::ProxyProperty;

View File

@ -27,7 +27,6 @@ namespace CRL {
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -115,7 +114,7 @@ extern "C" {
DirectHashMethod(PyCatalogState_Hash, PyCatalogState)
extern void PyCatalogState_LinkPyType() {
trace << "PyCatalogState_LinkType()" << endl;
cdebug.log(30) << "PyCatalogState_LinkType()" << endl;
PyTypeCatalogState.tp_dealloc = (destructor) PyCatalogState_DeAlloc;
PyTypeCatalogState.tp_compare = (cmpfunc) PyCatalogState_Cmp;
PyTypeCatalogState.tp_repr = (reprfunc) PyCatalogState_Repr;

View File

@ -27,7 +27,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -62,7 +61,7 @@ extern "C" {
static PyObject* PyCellGauge_create ( PyObject*, PyObject* args )
{
trace << "PyCellGauge_create()" << endl;
cdebug.log(30) << "PyCellGauge_create()" << endl;
CellGauge* cg = NULL;
PyCellGauge* pyCg = NULL;

View File

@ -27,7 +27,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -68,7 +67,7 @@ extern "C" {
PyObject* PyEnvironment_addSYSTEM_LIBRARY ( PyEnvironment* self, PyObject* args, PyObject* kwArgs )
{
trace << "PyEnvironment_addSYSTEM_LIBRARY()" << endl;
cdebug.log(30) << "PyEnvironment_addSYSTEM_LIBRARY()" << endl;
HTRY
METHOD_HEAD("Environment.addSYSTEM_LIBRARY()")
@ -114,7 +113,7 @@ extern "C" {
PyObject* PyEnvironment_getLIBRARYPath ( PyEnvironment* self, PyObject* args )
{
trace << "PyEnvironment_getLIBRARYPath()" << endl;
cdebug.log(30) << "PyEnvironment_getLIBRARYPath()" << endl;
HTRY
METHOD_HEAD("Environment.getLIBRARYPath()")
@ -266,7 +265,7 @@ extern "C" {
DirectHashMethod(PyEnvironment_Hash, PyEnvironment)
extern void PyEnvironment_LinkPyType() {
trace << "PyEnvironment_LinkType()" << endl;
cdebug.log(30) << "PyEnvironment_LinkType()" << endl;
PyTypeEnvironment.tp_dealloc = (destructor) PyEnvironment_DeAlloc;
PyTypeEnvironment.tp_repr = (reprfunc) PyEnvironment_Repr;

View File

@ -29,7 +29,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -57,7 +56,7 @@ extern "C" {
static PyObject* PyIspd05_load ( PyObject*, PyObject* args )
{
trace << "PyIspd05_load()" << endl;
cdebug.log(30) << "PyIspd05_load()" << endl;
Cell* cell = NULL;

View File

@ -30,7 +30,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -68,7 +67,7 @@ extern "C" {
static PyObject* PyRoutingGauge_create ( PyObject*, PyObject* args )
{
trace << "PyRoutingGauge_create()" << endl;
cdebug.log(30) << "PyRoutingGauge_create()" << endl;
RoutingGauge* rg = NULL;
PyRoutingGauge* pyRg = NULL;
@ -97,7 +96,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getTechnology ( PyRoutingGauge* self )
{
trace << "PyRoutingGauge_getTechnology()" << endl;
cdebug.log(30) << "PyRoutingGauge_getTechnology()" << endl;
Technology* technology = NULL;
@ -112,7 +111,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getDepth ( PyRoutingGauge* self )
{
trace << "PyRoutingGauge_getDepth()" << endl;
cdebug.log(30) << "PyRoutingGauge_getDepth()" << endl;
size_t depth = 0;
@ -127,7 +126,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getLayerDepth ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getLayerDepth()" << endl;
cdebug.log(30) << "PyRoutingGauge_getLayerDepth()" << endl;
size_t depth = 0;
@ -154,7 +153,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getLayerGauge ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getLayerGauge()" << endl;
cdebug.log(30) << "PyRoutingGauge_getLayerGauge()" << endl;
RoutingLayerGauge* rlg = NULL;
@ -189,7 +188,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getLayerDirection ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getLayerDirection()" << endl;
cdebug.log(30) << "PyRoutingGauge_getLayerDirection()" << endl;
unsigned int direction = 0;
@ -220,7 +219,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getLayerPitch ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getLayerPitch()" << endl;
cdebug.log(30) << "PyRoutingGauge_getLayerPitch()" << endl;
DbU::Unit pitch = 0;
@ -251,7 +250,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getRoutingLayer ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getRoutingLayer()" << endl;
cdebug.log(30) << "PyRoutingGauge_getRoutingLayer()" << endl;
Layer* layer = NULL;
@ -278,7 +277,7 @@ extern "C" {
static PyObject* PyRoutingGauge_getContactLayer ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_getContactLayer()" << endl;
cdebug.log(30) << "PyRoutingGauge_getContactLayer()" << endl;
Layer* layer = NULL;
@ -305,7 +304,7 @@ extern "C" {
PyObject* PyRoutingGauge_addLayerGauge ( PyRoutingGauge* self, PyObject* args )
{
trace << "PyRoutingGauge_addLayerGauge()" << endl;
cdebug.log(30) << "PyRoutingGauge_addLayerGauge()" << endl;
HTRY
METHOD_HEAD("RoutingGauge.addLayerGauge()")

View File

@ -28,7 +28,6 @@ namespace CRL {
using std::string;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -61,7 +60,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_create ( PyObject*, PyObject* args )
{
trace << "PyRoutingLayerGauge_create()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_create()" << endl;
RoutingLayerGauge* rlg = NULL;
PyRoutingLayerGauge* pyRlg = NULL;
@ -141,7 +140,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_getLayer ( PyRoutingLayerGauge* self )
{
trace << "PyRoutingLayerGauge_getLayer()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_getLayer()" << endl;
Layer* layer = NULL;
@ -156,7 +155,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_getBlockageLayer ( PyRoutingLayerGauge* self )
{
trace << "PyRoutingLayerGauge_getBlockageLayer()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_getBlockageLayer()" << endl;
Layer* layer = NULL;
@ -171,7 +170,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_getTrackNumber ( PyRoutingLayerGauge* self, PyObject* args )
{
trace << "PyRoutingLayerGauge_getTrackNumber()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_getTrackNumber()" << endl;
unsigned int trackNumber = 0;
@ -195,7 +194,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_getTrackIndex ( PyRoutingLayerGauge* self, PyObject* args )
{
trace << "PyRoutingLayerGauge_getTrackIndex()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_getTrackIndex()" << endl;
unsigned int trackIndex = 0;
@ -233,7 +232,7 @@ extern "C" {
static PyObject* PyRoutingLayerGauge_getTrackPosition ( PyRoutingLayerGauge* self, PyObject* args )
{
trace << "PyRoutingLayerGauge_getTrackPosition()" << endl;
cdebug.log(30) << "PyRoutingLayerGauge_getTrackPosition()" << endl;
DbU::Unit trackPosition = 0;

View File

@ -35,7 +35,6 @@ namespace CRL {
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -71,7 +70,7 @@ extern "C" {
extern PyObject* PyToolBox_createPartRing ( PyObject* module, PyObject* args )
{
trace << "PyToolBox_createPartRing ()" << endl;
cdebug.log(30) << "PyToolBox_createPartRing ()" << endl;
HTRY
PyObject* arg0;

View File

@ -46,7 +46,7 @@ extern "C" {
static PyObject* PyToolEngine_get ( PyObject*, PyObject* args, PyObject* kwArgs )
{
trace << "PyToolEngine_get()" << endl;
cdebug.log(30) << "PyToolEngine_get()" << endl;
HTRY
PyObject* pyCell = NULL;
@ -98,7 +98,7 @@ extern "C" {
static PyObject* PyToolEngine_destroyAll ( PyObject* )
{
trace << "PyToolEngine_destroyAll()" << endl;
cdebug.log(30) << "PyToolEngine_destroyAll()" << endl;
HTRY
ToolEngine::destroyAll();
@ -110,7 +110,7 @@ extern "C" {
static PyObject* PyToolEngine_getCell ( PyToolEngine* self )
{
trace << "PyToolEngine_getCell ()" << endl;
cdebug.log(30) << "PyToolEngine_getCell ()" << endl;
Cell* cell = NULL;

View File

@ -16,7 +16,6 @@ using namespace CRL;
int main(int argc, char *argv[]) {
try {
unsigned int traceLevel;
bool verbose1;
bool verbose2;
bool coreDump;
@ -30,9 +29,6 @@ int main(int argc, char *argv[]) {
, "Second level of verbosity.")
( "core-dump,D" , poptions::bool_switch(&coreDump)->default_value(false)
, "Enable core dumping.")
( "trace-level,l" , poptions::value<unsigned int>(&traceLevel)->default_value(1000)
, "Set the level of trace, trace messages with a level superior to "
"<arg> will be printed on <stderr>." )
( "cell,c" , poptions::value<string>()
, "The name of the cell to load, whithout extension." );

View File

@ -395,7 +395,7 @@ dummy&#64;lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git
</pre>
<p>Third and final step, build &amp; install:</p>
<pre class="literal-block">
dummy&#64;lepka:src$ ./bootstrap/ccp.py --project=support \
dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \
--make=&quot;-j4 install&quot;
dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=support \
@ -407,7 +407,7 @@ do not support to be generated with a parallel build. So we compile &amp; instal
stage in <tt class="docutils literal"><span class="pre">-j4</span></tt> (or whatever) then we generate the documentation in <tt class="docutils literal"><span class="pre">-j1</span></tt></p>
<p>Under <span class="sc">rhel6</span> or clones, you must build using the <span class="cb">devtoolset2</span>:</p>
<pre class="literal-block">
dummy&#64;lepka:src$ ./bootstrap/ccp.py --project=coriolis \
dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--devtoolset-2 --make=&quot;-j4 install&quot;
</pre>
<p>If you want to uses Qt 5 instead of Qt 4, you may add the <tt class="docutils literal"><span class="pre">--qt5</span></tt> argument.</p>
@ -425,7 +425,7 @@ development team. To use it instead of the <span class="cb">master</span> one, d
command just after the first step:</p>
<pre class="literal-block">
dummy&#64;lepka:~$ git checkout devel
dummy&#64;lepka:src$ ./bootstrap/ccp.py --project=coriolis \
dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--make=&quot;-j4 install&quot; --debug
</pre>
<p>Be aware that it may requires newer versions of the dependencies and may introduce

View File

@ -121,20 +121,16 @@ p\
endstream
endobj
99 0 obj
<</Filter/FlateDecode/Length 2409>>
<</Filter/FlateDecode/Length 2406>>
stream
xÚµY[sÛ¸~ï¯`ã´Cï”ðº3;SJ¢lniRÉx=ulI±<49>È"Ëuó²¿}péKÚi26I\Îå;A þSÃg†ï…$<08>ù½1,<2C>Á„!q<Ç(?Ô',4,Ÿ¸Ô(ÿ4ßç£ê,ÎʨLòìØbnhòüèø_å¯÷|ÂC)ÆYÑ옆æèTv &N#Û„q5ìÙ ~lø¡ðãÊÑqi|3ˆëùÆ“^ŸRÂãÞp8'a ¿WFa|@•ÝŽÊŽKBO.ò®JÒq<71> ºGù,ÉÓ¤PŠµöjƒÜ@lALúk2+J˜Ám³(ã)¼±Ð„Y²¥Ìñ™dE¥©j<<3C>ñe*·ÏŽ™mƪ¤Hʸ¸´©wlqj dezqìØ&t9b¦kæ´( sf'êe{Óñ sÁŽayá®TšEÓdü<1F>Fˆ˜ß<CB9C>ÊmJkOEý„úVl„íí=ºÌÓ<C38C>hQè™DE)÷ µXZqé"eÿd¿È+|‰³Q^e%XH~Žò³)ÄÓ0I“òЄù0<C3B9>Ï
e7PDïoѨÄö<C384>ñ¬¨Ãñ<n¤&i<Ưè$ιxž$c5k§¹âi JË…`¹ÐãÂr#`·Ð1,6·x¼¿ÿþ÷Õróåêçßß[nš÷_wÛc˳mÓÚàó÷Á|½½[¯î,Fþ3xØÎ<0F>Íz»“ Ùm{õ‰œ/~DŽû¬œ»
š¯Ö_—øz»Ûm~  ëöñšÌ×÷ƒû»ÕúûÝf°½ÚÜ->?¬¿¾MÉFøírþeý¨¾sÎ Ç]Ûg¶ï-?¹< ÇcŸ®<C5B8>+jûîœùsñiÑÍHK˜V…“«:<01>YÄ£<S¾UùÙr¬ÌO˜hQPWˆOªcœàÈQ™Ï.°)Ò⧕Ìp!¦+í&"˜o_á™°@gÌ`…p™i˜+]Úœ½Ñ<7F>´·EÆóö£Îß<C38E>¬­§§'ëa='«»<C2AB>G>mE¨Õ«<C395>^õx>‘€:n¼ƒ“x3Éq¼ ¡iW¦K\]ž²(mbG  €¨øziÛž
*ù×}N|Ú1XP™ˆ ®×ëÝÃÒj0ŸoÈæ»r<C2BB>µÙ®?/ç»_t.[Ƽ¼” ¶ý×LÐVDAjž¯,ëþêËò—wÖgÝ}}Ø]­\w„¿E÷ëÿFwït×û\¬çz½ Ú³<C39A>ýØa u1z¥}YÁŸžof±,
ž‚ O€Éé
´èži<ä³3üˆpÖáh_GˆæD04Ÿ¨N•Àño¦a<Šª"Æ<>I©Ç¡[¨#lÐ2EËžYTÓi>+qeÔÓYØyg±ÖmŒMçIyŠƒ"lÐÚ§iœb {EPŽ?WÛS•Ǫ¼hv­?°;êf%‡ì°Ã7¥%R.±É2:©<>«¦´òÍ¥ÄÖˆ*âºPbˆïµãögçŠqœŸ
ß Ï <C38F>ÖÕá€C´ÍyPAÆ]"ܧ)ã> üZUÚ­L€\Ë×n6†eõHàÞ@Ñ8s o ’€š—&<¸ùùûo]ª •ÇvªíuWí<5@g”æY\4 XÓ¶³J¨NV…bÖÁ3åºáL­±Xþ{·^¯;ÖÕÅø¬µ}m9TFö?<3F>m/þô<C3BE>m£µÅÑÈéE#çE4ºdŒ÷ÐâécÑ Z[þ<ÊÊ}fÀ¡¸-»k†. œÆïî‹~yGª®æ“祺aÃc@ªÓ—ÊÍ€žø‰»<>ÆãCBÕro`#žÊëÛ®G{ΚL4 Ì5o‡CˆCÚNdŽ¾+Ñ,<2C>AaYßoKj] êõr;Wk2©²Î1‰t<E280B0>X.ÊðEB4¬<13>FqQHt†V…ÎÐÞk êCö׸]®6=ƈã7Æ<0F>±çC|X»ð•(,QÅ(-TQâ!`ÖÊ<C396>Ú¥C‹³ªC„PÄÏéi2BΘgù8Ö$‹Ú=æž8×ê]ß<Þõ¨)/,êP£<50>#[ß…hôÜÔ˜þ^Õ¥ç;T=S—ZrËšÔÙ—ûªI³ƒ<15>zPž
üÁá‰ò¬vc=<àÒ>?Ö#¼´¤°Vyh¤Ø¢F¾"E‡?ïI<0F>üµ“O]Û%Ó'ŸÖ½‡¨ç
Ö†µÉÞÉŠª¾êf¥<66>á}P ÚŒƒÂÔñÁ1´A£öèXNZƒ<5A>þc^«Þ_=ìÛžT «7[Á}:ŒïH ˜D wèÅ/<¤&<26>ÈX h4Lc|WWHÒ|ˆó<CB86>šÊ€ò<E282AC>-•„Ñ4ºàÕGâíÑ<C3AD>q<‰ªTÝ¥t.k&yª¯FöP4Ì1]ÔD(#³J`ÑÉÆ®s\<1B>ÓÜ鶴^ØpŒåªÇ7¼¹vÊ`l|õo\næÒ\“¼*Ò Ñ´ç.€¦v<C2A6>Æ]Ð…å,)Õˆ ^`<60>ál5žƒ©ÂäS<C3A4>ÑÊ!‡üÊñzÚ±=Ó9
0ràx^</A«xC¯,ÞÁ³D ªfðjMÆC© ]q0k ûa&.HyP8ÃkèÿÙ"4G¼êÛÓŒ·QûÅs»×:`%`ûíúŽùçI£ç*"É<> ²½ÁjBêÙk<C399>ÿ ñlL!¹&™JÞbyýxÓw¢€C¥mÆùNÄ_µü¼ÆSñYÂ9H¼y2žD,袇}¨ðÖE ±èÎdüž wòÀѨTà~â‰Ñ/ãxÃQ&%z¾ŒÑU¯“d%¦Ê¸Å]'YûvXÅšÚ•Tƒ¥xoƒe‡ ñ®ào/Øž^Æ“Œ¥ÊÒäÒ<é…>=ºê^<F¢î*"íÉC7<ð&2*NëÞžrV3ßùMO=&ò Kø”˜ žÅÞÒv·¬CÔ JvàÈßê<‰„<E280B0>ô ƒM¨žWŒfÉ´l´¨M4KNN•& ˆ¹ê¯²žÍ[ ”ò÷`ðfqýòej}ð®ïõ߀À-u:ùû´Þ~Ñ ëÊ Û|ßÝ®¿*@Xo—ä7ø÷ÜŸ¨|ˆ*8
4£R ­?Rµ<“\c˜O|䎮äz¶t€%õìžÞ
¿‡>Š+HÐÃøàTôVÖh÷Hðâe+Î\<5C>ƒûýóZ¤ÄøÚžþôïãƒ
xÚµY[sÛ¸~ï¯`ã´Cï”ðº3;SJ¢lniRÉx=ulI±<49>È"Ëuó²¿}péK¦³ÉØ$q988—ï|€<>o5løO Ÿ¾ 4æ÷Æ°4j„Äñ£üdPŸ°Ð°|âR£\üÛ|Ÿ<>ª³8+£2ɳc¹¡Éó£ãÿ”¿Üó gE³cš£SÙ5˜8<CB9C>HnÆÕ°Kf3ø±á‡Â<E280A1>+GÇ¥ñÍ ®çOz}J Œ{Ãᜄ<C593>þ^…ñUv;*;. =¹È»*IÇIvêå³$O“B)ÖÚ« r±1éïɬ(a·Í¢Œ§ðÆB2Çge”¦ªñ4Æ—©Üz<;f¶¨’")ãâҦޱũmU3<1C>•éűcÐ则®™gТL€Î™<C38E>¨—íMÇ7Ìc8†å9„»RiM“ñO|@!b~w*·)a¬=õêÿUm²¶·÷Xèþ1O?¢E¡g¥ÜƒXÔbhÅ¥”ý“ Zþ"¯ð%ÎFy••`!ù9ÊϦOÃ$MÊ lBæÃ4>+”yÜ@YX½¿E£Û?Ƴ¢Ç󸑚¤ñ¿¢“H8 ?äVày|ŒÕ¬aœæBè¹rˆ§-(-åB<C3A5> Ë9Œ€ÝBOÄ°ØÜâñþþû?WËÍ—«Ÿl¹ahÞYÜm<C39C>-϶MkƒÏßóõön½º{°ùßàa;<<n6ëíN.d·íÕ'r¾ø9î³rnîv(h¾Z]âëín·ùy0€®ÛÇk2_ßîïVëïwÁöjs·øü°þú6%á·Ëù—õ£úZÎ9ƒwmŸÙ¾·üäò0p<1C>}ºv®¨í»sæÏýŧE7#-avXL®ê`f<11>òLùVåg˱2?E `¢Ee|@E^!>©Žq#Ge>»À¦HŸV2Ã…X˜®t´ˆ`¾M|…gÂ<02>]0[€Àe¦9`¬tisör QÿEw¾)ÒÞÏGØ<47>: ´žžž¬‡õœ¬î6ù´¡V¯BzmÖãùDê¸ñNâÍ$Ç!ð‚†¦]™.quyÊ¢´ 0€¢Ràë¥m{*¨ä_÷ 8ñiÇ@`Ae"2¸^¯w;H«Á|~M6ß•ë¬Ívýy9ßý¢sÙ¢<C399>0æå¥\<5C>Q—аí¿f¶"
Rö|eY÷W_¿¼³>;8èîëÃîjµz§àº#üOÓÝûÝõ>ë¹^Goƒölc?vƒE]ŒDi_Öbð§çY,‹‚§`Â`2Eº@-ºgÏ&ùì ?"œu8Ú×¢9 Í'j…S%p|À i<18>¢ªˆq`Rêqèê´Lår„gÕtšÏJ\õôAvžÄY¬ucÓyRžâ ´öi§Ø"Ã^ÇB‡ãÏÕöT%ű*/š]ë쎺YÉ!;ìðMi‰”Kl²ŒNjãª)­|s)±5¢Š¸î†â{í¸ƒýÙ¹bç§ÂwÇÄ3h§uu8àmsT<>q—÷iʸO¿V•öF+ ×òµ<C2B5>aY=¸7Pt$Î\Ã$ æ¥ nþMþþG—jCå±Ý†j{ÝÕA;O ÐÆ¥y (Ö´í¬Òª…“U¡˜uðLy¤®G8Sk,ÿݭ׫‡åŽuuñ>km_E[ý_€Õ?}`Ûhm±C4rzÑÈy<11>.ã=4<>xúX4AƒÖ?<3F>²rŸÙp(®CËîš¡K§ñ»û¢ßEǪ«ùäy©nØð<18>êô¥r3 '~"Åî£ñø<C3B1>PµÜØ∧2Æú¶ëÑž³&ÍóDæbÍÛá⇶ә£ïJ4KãR}ÁAPXÖ÷ÄλÁÀZ¢^nçjM&U6hÁ9&‘îËE¾Hˆ†u¢Ñ(.
‰ÎЪÐÚ{mA}ÈþÚ·ËÕ¦ÇqüÆá¡1ö|è€k¾…%ª¥…*J<dÌZ¹Q»t¨`qV5`ˆŠø9=MFȹó,ÇšdQ»gÓÜçZ½ëÇ»5å…Ej´sdë»탞<1B>Óß«š ô|‡ªgêCKnY“:ûr_5iv°âQÊS<C38A>?8| QžÕn¬<07>\ÚçÇzƒ—–Ö*<0F>[ÔÈW¤èðç=éဿvò©k»¤`úäÓº÷•ã\ÁÚ°69Â[`"YQÕWݬ
DqpâA˜:>8†6hÔÝRËIk°ÓÌkÕÒû«‡ÝrÛ“Šacõf+¸O‡qà “È#€!à½ø%‚‡Ô D<12>@†iŒïêŠIšOqRs“CP¾±¥0#š†B¼ZâH¼=º1Ž'Q•ª»”ÎeÍ$OõÕÈ>Š†9¦šedVI,:ÙØuŽkÃa-|£sZƒû<C692>µÕ Ž±\õø†7׎CŒ<>o8à¯ö<C2AF>ËÍ\šëcWEz!šöÜÐÔ®Ó¸ ¡°œ%¥ ¬3œ­Æs0µB˜|*0Z9ä<39>ÿA9>CO;¶g:Çâ@F|Ï A€ç… hoè•Å;xˆ ^<5E>à Éxˆ#•¢¡+&r t?,ÒÄi 
gxmý¿"[„æhW}{šñ6Jpb¿xn÷Zç¬D@l¿]ßñ ÿ<iôBE$9°Aö£7XMH={ ò§ÏÉk©ä-×<E28093>7}'
8tPÚfœïDüPËÏk<Ÿ%œƒÄ›'ãI´È.p؇
o]îLÆï¹p'<1C>JNá'žíð2Ž§1e²Q¢çËè]õ:IVbªŒ«QÜ5qµo‡uQP¬©]I5XŠ÷6Xv<18>ï
~ñöíée<ÉXª,Mþ%Í“^èÓ£«îÅc$ê®"Òž<tÃo"£â´îíIP g5ó<35>ßôÔS`2!? Ø°D<C2B0>O‰ âYì-mwË:$A<>p¡dŽü­Î“HH:Ø„êyÅhLËFÚD³ääTiÒ<18>«þ*ëÙ¼Å@)o×/_¦Öïú^ÿ àÜR§“¿Oëí °®Ì°Í÷Ýíú«„õvI~ƒÏý‰Ê‡¨‚£@ó7*ÕÐú#UË0Éå0†ùÄGîèJ®gKXò÷QÏî9á­ð{裸‚ÄNEoe<6F>vÏá<C38F>/^&¸âÌÕ(§ÿ0¸ÿ×?¯EAŒ¯íùá/ÎãY
endstream
endobj
104 0 obj
@ -2258,148 +2254,146 @@ w
Ov°½&ýIIxšœ@¿$ù€§rõ·üãüUó¹Ùn®ÎøìLðÙûó7ÕçºÿI©”³wgbFé±ÑMCÃ÷Ožä´B€XˆѸH#g”Òû¡šQ^,<2C>k<EFBFBD>ÛŒ\Ï(oö4fFe¯Ú•Á¹yÈÈÝŒŠGOãgT>úa˜©¾üÉy¢þ­Yn®¨7À#}w¯:]}iå
´låjFu¹_îÃŒ*s?\̨6È— ¿ÎÈ—3ªÝ=M=£êݯgT¿Çärv&Å<>ŠÖQÑvÒ!a ÃKÄDm2j<32>¨h ;™h{ K˜È¦Î ¬„)*P«¨0íâÕˆt-Š`Aë3.`c“„€MV´E!È?dä°±MBÀ6 SX]"_€¼ÎÈa(½EÂ6z0ž ~¥@~=;S¹`(­ ºh|[¸Èž¥>¥¬…(jÐ&<26>Y“®!^]I;ffÄOêah9˜ÎE `9WËfº‡ê}äš÷‘{(Þ—<zÏÔ­ûè$Pº<50>^ <0B>ûÅ¡òÌã¡pÍ }ûhm¨;D> Ï &d¾Þ«Ë%õøäx>9^È<19><>ªô¨I<C2A8>¸¤á°·ÊÕIŒÏÿÏQJçÔÇ9=Gø®ïV«÷˜WÃy4sÔ„Ý|ŒÚ|^è¹›ž†“ÏÍÞ çÑÂÌ¡™ÉyÔ”9?ÐG·Ëñµ˜ÛéiÔŸ¹ÞOGcçÂK;?€ûáâÖ«¹ Óóh•æáÌ^ÎÑ2îçý<C3A7>^šLx*ÊáE˜?0<>^z.öìËXÐrxáç°ýn^ ¥G9—{ÛYù iœ}p:f“Éi©GÑjŽ\¸7CxDë\è=/0ï÷ þ0{Ôd t ÛªýúÔf l/ìÜÚÃ|Ò;ð'¦×‡³ÍÃa^ý…ã<E280A6>ãêÈ8ò/ä“Á|£üÖ¨¹ÈÇE¦_õ<5F>ƘœFë:çnrZ:;W{Õ»¿ðËá´Åô!ãŒç<!Õ·<C395>.çj¯• ¤ÇµÚÖ¹Ïô2žÇÞôÈçGÉ0˜yðÓ>i<4C>~T ü<>æ<EFBFBD>ts·3 ÊÎóz³Ýôïsð\¬D—ÍvUŸ=k×Ûz½ÝÌΟâÞÅùö²=Ž^ûÉ“ó·U‡©~¿Ièoê¯ÛþeÁ¢«—(‡ì{Õ,êõ¦ÖÛ®þÒ¿<C392>Øëè÷9ð»zUWš‰9<®ÎpõJ>¬@™TÏ¢NK¸ê!\ÉuàÚi\™ãê)Ü/ ºiT•£šP‡˜~˜öL9À Ó˜“¬½i·õÐáüÒtíÞ¯ªÍžógíVxl'œ,äü»á¿4_ë%{ÞtõbÛv÷첫‡üáH—Ã<E28094>᧻fµlÖÙ³¶kÚU3”eQÀJ:ɃAŒámµøT}|y9<79>œk@ˆ!ò˶ýD¸w·¬Yo[ötµjªõb¨…z_ä±'F±wQo· {S³Ÿ×_š®]&œ?ÎIÜ<>ßÞÿ1,z=½èHŽ_×mµZUÛ¦]`ªÜƒ|æAÛ<E28098>™¢ç/êuÝU+vÑ^oÿ={Ú-nš-üé®*Q䉵€õ¼]ÜfJBžI!t.…Î¥RäŽ+Ì8÷b[}¬d÷Ÿ?À* vY/nÖíªýxÏ.¡‹[êH$“¯âƾ°h×ËÝ2:êÐuóñ®ëg¯ÚŠh¸.¬”¼ÁæËúB•ËÐ_Ö«Ûº•<3<>~¤ºQÌ¿Dhƒ“w¯ôK³e3a§×)0Ãc€ûˆýºn¶M…™¢§ÈÜSlî)!÷W9ÊDÏ^\²Çì¾èªÛfßÿ]Dw]<5D>†pSÅÿØSä(š/¶<>õnÃÞÔ[H¹eϪÛR<Õk9
.bùå]×<>ãuÍžWÛêñOÕ¨]U2²,ó¢-GEûâ~ Ø6ÿ#g¨àæ«èƬbËzÓ|™éÃôJG&ëÏ(ÈÑìñcöv­wCäÅ4r^Î娜ÿ¶n>ìv}×ÞmÇèËiô#£ŽÂÿ7¤EB^o+„Ær¿žÆÏã\ŽÂåç¯õâ®/6oï·7E×Ü¢7mÖìÙÇíp<C3AD>ëéuòˆ—£ˆÛ¡RÒ2<C392>ØźºÝÜ´£Zòið¼Ò«Q|½®©´¬½f7m·…D½)ÚØëv9j±ÅôbyñW£0ƒV<C692>[>&w}Õ ,þyK e$<24>œ\@åÕQ<C395>ªÿëf³¨Q•×uhN½À^MÃ<4D>XþwSÿYwPýeÛ®FÙÕg©/ÅkL}ê¨Ô‹‰*)<29>¤)¦<>Wè—Øeõa(ÃQýPy+SÂAq€ï—<C3AF>l)i#<23>^eìU÷(n<>^´%d7<64>œG®r%ä]*.àúiÜ<b•/áî;r˜FÎcT…2ZÂÛ¾¯/!WÓÈy€j^æ9:r øÃ4pKÚƒwíj5J„RgάòŽ/2µsf7áËy9Ô£8J)r_ºÙ5ôt¨<74>çS ¹˜¬éG^¯G¹àÙMs e¸!ìQÖ×y©Õã׫vñ©´W“הȜ>b®°]ÜuæKýø¢úRckòŽ®£‰âÓ ŒØ|»ºÃm¤ÀefÖÄU2«ÉͪÊJÖGf倧ì¢ù|»ÂFëkE×ÙÓ×2ðá†_‰I+ ·kCÿµ©»6ìÅ]3ªAÙîd÷b' u´Kò°hÆûŽÐw?"¡ C–Å­{7»U÷@,v•,6½,6îL$ºxêS<ÑÁb<C381>`±áb±;b±<62> 6Ök&Ó¡M:<3A>M‡c2˦ÃÆt®“ÌÒéN:Jg<ý%0¶dQã,YF?bÑXT˜ñd•ÅSUOTY:ڌǦ,™²x\Êâ9 oíY:pŠG,kö/ßÕ›ö®[ÔOýÎ/ïokXêc}ðõÝÞ!¾1¼J'¡çO×k´?ýG(ÑœWé<57>s€kOÅ5Ü<sí¨7É-ä&ú\<`ëųùÁÛ<C381>7% ÇŒ8^¦7§Òçç¤'r_±3·gý*že±xˆÉÒ¡b<¬dñ¤ÅcJÎ(<28>¹<EFBFBD>GŠ%nÕ1·é˜ò ö,epöT8óíÂÇ“+öz»Š‰d H/d
L˜a Ó.ã\ ž²G|e:ZÁœ¸ˆ¯G³%Üa WN[ð cÚÊ ý<03> Š )ò”2¹}È*á€á)@wþ½3õŽáQ|ˆÔv<C394>%´| ¡æd„c,¦º(P:.aéL©°ü”‰RnÌ÷‡ûTD, C³§öíÌômÑÞìVž”ÿŽ%LõOñŒ?[âKOò5h¡‡|齧¢Èædh3„6ß.r*ºé|6ŠlŠ"Ç8*ñe‡|¹_®”…ã§Úp`Î¥ äRãJUSÄOgNÁŽÙ3cö´tq¤ÄÔ-ˆx“¥Ï4¾1_ØÔۤw'áK­‡ðS¥Ù ãÞšñúd@uZ"±¹º\j,ß&¨èsaAÓ Â œ*JÜÉ€ö;$K]‡Y4…]ÿÌ J>•õ<E280A2>>fHÆb”IhJÊÉ<Ôß!aH]=?|s%cÅƽÝ\Xì¶ <69>2í=¤(…®œ¬ƒnºR5RÌ3R‰SU¹u•šŸŒÒ©*ê4}ûÂän7¥äw¤—ÒGÊ<47>ÉÜ;Ç2™I?l,¤Ñe«OE°'f —õ`é‹*&Í„nªÝðƒ$%<25>¾žÌ&³Ë!|<7C>éÐôiW <>LJM® “"‰!Cƒ&×ïº<C3AF>+ÅKû%ä‰ÐJ ¢Ê«“ºŠ#ÑCÚÊór@)1å|^¹ÑþdWF<57>âTÉO ê\*%¹ôáK }kP§=„OÁíSoàLÝÊî¶ éµGêKRÖÙ1úþüu½lªŸÚ¯Wo™£1÷ZÌ}HÐϺºÚ¶ÝÙ«ê²þ<C2B2>ýÙloØ VëºúšÝöŸVÔ³ó·]»¼[ÔÝÙòKs»¼þü•ýq†j¥é¿=èE`Ò´ëçÕ¶>{þ#ý³WHÞn`þÎÅœÿ0Ãzÿ?_y
L˜a Ó.ã\ ž²G|e:ZÁœ¸ˆ¯G³%Üa WN[ð cÚÊ ý<03> Š )ò”2¹}È*á€á)@wþ½3õŽáQ|ˆÔv<C394>%´| ¡æd„c,¦º(P:.aéL©°ü”‰RnÌ÷‡ûTD, C³§öíÌômÑÞìVž”ÿŽ%LõOñŒ?[âKOò5h¡‡|齧¢Èædh3„6ß.r*ºé|6ŠlŠ"Ç8*ñe‡|¹_®”…ã§Úp`Î¥ äRãJUSÄOgNÁŽÙ3cö´tq¤ÄÔ-ˆx“¥Ï4¾1_ØÔۤw'áK­‡ðS¥Ù ãÞšñúd@uZ"±¹º\j,ß&¨èsaAÓ Â œ*JÜÉ€ö;$K]‡Y4…]ÿÌ J>•õ<E280A2>>fHÆb”IhJÊÉ<Ôß!aH]=?|s%cÅƽÝ\Xì¶ <69>2í=¤(…®œ¬ƒnºR5RÌ3R‰SU¹u•šŸŒÒ©*ê4}ûÂän7¥äw¤—ÒGÊ<47>ÉÜ;Ç2™I?l,¤Ñe«OE°'f —õ`é‹*&Í„nªÝðƒ$%<25>¾žÌ&³Ë!|<7C>éÐôiW <>LJM® “"‰!Cƒ&×ïº<C3AF>+ÅKû%ä‰ÐJ ¢Ê«“ºŠ#ÑCÚÊór@)1å|^¹ÑþdWF<57>âTÉO ê\*%¹ôáK }kP§=„OÁíSoàLÝÊî¶ éµGêKRÖÙ1úþüu½lªŸÚ¯Wo™£1÷ZÌ}HÐϺºÚ¶ÝÙ«ê²þ<C2B2>ýÙloØ VëºúšÝöŸVÔ³ó·]»¼[ÔÝÙòKs»¼þü•ýq†j¥é¿=èE`Ò´ëçÕ¶>{þ#ý³7èã$Ä°çòΘa½ÿ@(y
endstream
endobj
487 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 5628>>
stream
­XwXUW¶?È= E¼È•«€Š4%ˆhh!”"R•¦ Ez/b[LÞìLÆØC Ø°  âÅѨ+'‰%ƨã:÷® ïís“yïÍÌûã}ó ß>络³÷Úk­½×ï÷ÛG<C39B>É===ã€è™ó"ƒór
¥g<EFBFBD>c3²Oì, ùï<01>¶MiP©•zâèAâh}Q.Í0z<4C>¹a$ÝÏKwsze7œÑ×Óc§ûOvšìì“žš^”¾2y‰Õ„¢«¤Ü¼é©iEVvIöV.Γ<C38E>'ÑÛä‰V¾¹¹©YÉV³r òr ŠÒssœ$ï¬tî1zC8FàG ÃXóÆ23qLSMgäf03„Ê c #Ƙ±`”ÌhÆËŒcÆ36ÌƱcìGf"3‰qbÞcœ™ÉŒ 3…qe¦2Ó˜÷<37>ñ`<™éÌLfãÃÌfæ0¾ŒãÏ0s™@fÄ3!L(Æ„3ó™LÉD1ÑL ³<>YÌÔ0ß0k˜=fœž¥Þ2½ëƒr6(~ÐîAGôëGë/×ߥK*û‰ g ØO93î}®<>«àNpý¼7ÿH˜"<6øÀàçÁúƒ£ÿyðÀ<C3B0>)C¢†¬B†Ú mf;ì”á†ë<E280A0>ö½5~ßx¿ñÆ}&«M®<0E>ÞkºÙôòˆìçå¦r_ùyù[³`³<³Ûæ¼¹±¹—Rv(Ù&¹R ~HðýK•šcr¥ì©z˜Gñ†JöŽè¢”m““ {ŽÖ6Ôžû²ƒ\"gVÕgÉØ“@¢Èü•1é ñÁ±S£C;[
Ož(9EÎðÞÀ!ùT2§2òLÔéü+äiÚz¬ôHéŠÚšêšÃmG¿=-úk½Ì­Ç£"
§>“49æðÀçžÈÒ`yMžöÔôÔ<h¹æásXÁaœzúê:Œ? á
ôâVû/*
_:?;&%Që(Z˜¿½rû«Ó_<C393>¾\y•Ü$¯²îÍkŸwqZ2 ˆsn@x@xÆÄ–$ž²+mWÚ—éû2„òŒ£ /âP_7¿E~±~EWÁPì{(ª¨G3âû­èHÛmTü¬®œ ÷˘D[8p%ðþ~pi§sàÔ Ö?ƒ\Àiœ
ÓÑ"
<EFBFBD>"Ñ)Ý ÎìŠåa˜îQð^8M {0<>üŒòn´>‡NÍè´]¾Oе'ÇàÄœäƒVNh"9ðd·Á¼ÛÀñ ¸Qc¡f@m£äFÈ1kÒZj-@?ÄaY¸ïƒÏ$p…ðÁ˜þ~
÷E“š|ÐŽE}Ö<>®°ÚZ]+§£¥vºÖ LjNZo°½EgÊ‚>Ø ÇnCÐj÷¥6Å6˦®˜#€ WçÈúê~<pwÏ5ÁPmû<6D>˜-K`¢¶„3OÂÄßädáÎôÊ¥˪Ö!GÉá]•;<3B><>&rz]ÝÒýÅÙ»<C2BB>dSR¼tYáú G­lRçJ»=8íIº5Yðø—<C3B8>ix“V¹¬biÕú¿#<I<íîµ$nòÉøÿ'>ÌQ—ÊIüŽôò¢}EÕ%ÇþsI9šNM lƒ#ß_ =êJgÁžX -díyéõ¯âh9:òš¢û }!²hÏ«÷k èb°Æš·fàÃi»•ì9ÇqÚÛJ<C39B> Ó9ð“Yñ“äÚl¦‹Ñ‡î–ß(íRTºUúT„ tð{ûGI[y˜BÀ¨ñÇ[?Ü:ÕK`$<24>,8*ìàŸï¹ÑÐ|é\ûþ›ä{&ñÏ\U®*´ªÆ"àÇýœ\,„ÏxAž¯èHéH­!îÄ%nDrDÊÔå8”vªÃñr8Å<38> y^|9þJüaâL²gDžĺá`ÚEÅQ—†ª¿Q²Sä O`P>èGvÃsäÛqTN"8ž}u<E28093>U<EFBFBD>Ç”pdÃ<64>ÍEsŽ?êÀy àHêðHð €LöÔѲ7GšM™‚Â
G´¹¼<C2B9>ükØ'tlŸýö00ü<Pd¡|«d£ÔkhÍÒÃu×ìN\F<>g¾”+{þD ¤ Ìa˜<>éU˜Gà#ý>¢…v6¶6v81Ó¨’”²-@8%0vá ‡ŸšqÁp:“¬Pó©LìWˆõb8hûÄLµûÛ鼡æ¤È©Yúƾ©ý_o”l·ú±z«mïPdW2<57>`0AëVÇ^‡Þ…à@ šú׶¯{ýXž‡9 ˜æyøUp0GKhS<68>Î<04>ŽÊF>ù`W×yôŽ\*N$¸þ
šÃ È'oÉóÏì~°ûþÞ»õBÉ“gJÖÒŒî!ôîÔ¿S=½©à­öQïì÷¡`pªD+—ÃPò¬¾ëF×õÚ_¨­ÖuãÉô•¡iIéIÑËü);Do]´[@¾aŹ <0A>ÒJÈ~¢ÍLûNý<4E>øXmÄb,×ï؟ΪÓÿ˜D¼ÁÃ$PŠ‡û£YCM3ĹºœúJV‰Þt3ñîêÍ`4'~¢d ÙmÜ4ÝL<C39D>a`&xK^o嵩J `7rZºNM,n—,OÖLãXoà }Â6jˆ£>¨ sJÿþO ŸÎÞâ°Åþ³ÐOW¹þ£JYóu#ÕÝtäÐÍ`¾ÆÓ¡êãJœJË”óT²­ê|º©JB ƒBw¹]ÃY=ÐÍée‚ón ¸©ƒþØÐæàé/mèTn×`0Œ!0ª ¬”XhF+õ$Ø?îû®ŒZa¡û £Ú<špí F\˜ˆn6n6h…ÓeP4l}¿wZ_´Ub¤TßÐh5århĹ0V«7Fkô{†»% !`süõýÞ-@ƒ³úÿ¿O!Œ‡QäUaç¢ÎEµ³ˆ±JÿÀ/Æ/õ
iE
ÿž /þÙŽâ#V¾¡œ4úÔ»ïnƒ±^G%. þ·e OäÅ·rPqðNû…XNk­<C2AD>¨o~ p<C2A0>À˜ø¾iק^GÅô¥H`£Ë§Þ,Û!Ÿ‡áäYq{¼*¾jMÅÄÜYáÂN)”°ÏP#jvŠ
9y<EFBFBD>ÓÖÚi­ÂI<17>ë|/>W•U½¼ny톤•\?p¾õXë±eOˆ”hƒ;4<<3C>£¡ Q %AYÆ4¿i~ ”îYbUíªòëð{ʘ—i·²šóÎæÉ.ÏÜ—±#V”wNpX¶xj1í;‡ÌÞêSêS°/ø€€nüó8µfèäˆiÃóîçÝg_ªDh*²ÕRM[ŠIà8ЃŽbRóWì(Y…Žl½9F“üüü'f A9±¯óûÚï댟hêMí3“'èÕŒæ?;¾tåBð!RÓüæÅ›-RV=¥ÉÚ5å:›ßL_b•…L!2Š¢¾ì·K@ÔÌ1G?N,×'î§]i9ñiJVe&ZHÿÑ÷¸r@†ÊBä×NT,³<0ÈìÃ*<2A>\Œ¥ÃÒÐ ‡¬@CÅê¾"à2ÁWi,t¦˜†cš„Ú·•?—þ øtíö¤=þ{ü¿œÿE<4¤šS/Ë”²<E2809D>fÚÕê<C395>b´Ú<C2B4>EN;H{ÿS¼Ãb'F÷iWöoa<6F>¯)Žî) ¥Uâ u®\;R<>Ëb°`µí”ˆ»xqµÆ”Å@
-²Ï5Ýf´Žñê=JÙ.á8I½‰ïߣÄ44N´â`ä€ Ž”$A¡ú©©×ÑM2"ëù\Õ<•C5Ž$dîÆ€•sW†-ÈiESsàÛ­zJzHGñѤ†„²@2Uðå1è#|·g£@0_AÆ×x~~%üq.èÑžß캸ÿÂ<C3BF> g.^§à…/–ÈHÔ—)5©5+Î<>Ëänu{GƒªñÅ>0ß[Ííxb“ãæž;^‡ØÏÔ35¯ä{ðó½Q<C2BD>¢ãkŸÝ!<21>Ñ=”ê—0„¯kvw|~K*ÿrÞ×ko*ÞA¿åÁëžWÇÁŠ€mI`éõ‹ç+”<>£”/¢¥ü-¹Ö2»eök"ñ§e<C2A7>Uôôè¦ØHuàVu5êZ> "àDÛÐk¹ÚÒõ°X©úDÍ2IP</»EÕ€-ï¸dÒ2gbE<æw/èÎë#`!@#èÃX(SGŽmnZß´áxIãêV°6Ï.Mü"bgÄÎÈÏ#t{xô[ÛÅ8à\¾M8æû¿:€Q •Oº hœÀV^<5E>¶,XP<58><50>Ú0î/Þ[½Øµœ0È]<5D> íiëi„Výi;Ž–÷í؃,FÊÆ$
íwA_À;¹r;òaCÔͨù¿)=c¾k½ÓvûöÑ—„†÷(£Í¿Õï ê|OH£7ºÀ62(zž[²:Ö¨M—É¿%<25>Ÿ·í8¿ëâÞŽØñÈÇ A](#®uó®]Ëxù ­}õÇo%„O!žO<Ÿ¢Þi é:nʸxÉÙÙg<>ÅÑ?Ù=·ƒ1k…8Í
ù÷äjîÙùgÃ+=ÉXA{ƒÛþ¦æÁùKm—nTÿ@½P¨]4 å ÇÚ›<yVzíðÉÃ'ΔwÓäâú®â&P˜Pé»+”ª¥ŒXaÄcT0;¢‡†J Í;<3B>JÓ#×q±»#·†ªûl2gùÏšJ%ÌP2kïÜúð†ð3I—ŠbsÓsŠ³³×¥$’¶#kož°/¯ryÕZï•Áñ1ñ1ÅaÄ<61>8ûð^ÄÝÐÏ“LÅYíË®—<C2AE>çžF^dÞ
læ¶8À!Ô©.˜$l-(-ø¢¤‚&—êÏÞl¬Þ|ø“:ZäMí­®[]<5D>%ïÈÙMM«<4D>®n\U³¼R€ÅûÙþ%¦Ëɵò¶“ ':öÞ&,äÞ<C3A4>ëë —îM !Ä'#Ì7Ñ?a\1…v'2«4º&º¦à4éžh¦ÊÉ£ò+'éßåò{t¤ÛCwtÇÉ^8ÍÒí‹?l©ŠÜÕ)%<25>ÓÕ³LãßéÛe[£ˆ7™³:8+(;61#BXÏmiüì,¹$ˆ™¿×¢P´øö^èlë|\<Õö<C395>KO,>±xŸq¡‡ÏRxa¦éA<C3A9><41>~<7E>¥Dž²=·lEÙòÊ Uä©Ü^VV¶wGi$<24>ë«ï]¾·h{É%E¯X¾rC.IL4i×Éaák*°³,•²7tf”ñ$´$¾0§ 7yM$‰#q[c©ð³à<C2B3>­lÛH… Qò±ÿÂ\šË𜞕)äÜý¬<C3BD>4
ê«è&…é&:ñ`Œ8R[ªãõ\µ<>"¦²Íá;í<>ÿøˆœDÅïáêJŽ¢0Ëç+9¿eÕ*«w^gP—S-/â³r^ƼŒE±aá"ÀeWðCâCW‡f‡gÇ%dEÐçyàÀ¢Å@ͳ$
Çîïmî<wåNͯä>éXÚ߸¸ÌŸ¸
ý±´ƒHÂèÀ³sç:îî£TÿÓáï—×*£×¯Ó¯Ë®–Àtº¼A9AÙ Òüó„ãõž¿rþÊwÿ¼°JÙ·šwâ*ÌfÆÁçÞɽT IÇ«)<04>£]l]ìâ$¥áKQ¼|‰©'¦vø߉½û}•ïô<C3AF>hÜòäµðäÍi°$à+ôß¡ò˺êÝÅ›o>l ,BQøQê¥™í³ª(TS3Ö¹Öá3Âf¹§ ¡Í½1üVø­Üw4”?ƒ‚ó?1€ï°ò|õÁ+d[¨ð™IÖ†å…åÅÄÇÓ@t<E280B9>*Õ_ÓH#9réã¯6v Ï)B!Åü—äNÊùYf¢xK<78>Ì"oìïïÉÿ3„FþS°8øªåJË•ž<1A>ýŽäâ÷0DnKÑ7úVdwÁ[
½ÿˆ¾ÓÛüÚ~GßIB
ÿ ZçÙF…D…xfÓGB¥-‰<>x”ïæ6-ú8œø ÚtðPr®”Ê Ñ<>ÝÀy‹ü%tø-L𜠣šþ9-ØÝ·ýh°€ô®ÚMóF>‡.[¶$f~¢MÇrXÌâhݺ?æÈ»Ú'Wº»ºo7üHêÉñͧ×W“ù¸0YÃCœÜ*ºÛ×ÍÎN¬Ÿ{(£,£¬°lUùšò<C5A1>H5iÚwäø<C3A4>ã:vÝ'?×E0(Nè dßOYC<59>¦Ä.fą̈TâB¢wÄW¤îK­Í<•{2çVFoò»ÄîÔ£Y Ùe©$ž„%,Êåù¯q%á$t[PipixyÄ!<01>øžX iC`4yWuçâ<C3A7>Gï“^fªx äóIüÞ¬ú¬úU­äª@Ï¿7)<29>Ü„­Žül\“ç°ž0¹ßŠÇÂßPicªHígG¶4|~pëÞí˜ò«6/ý8ïã¼Í9ÿóûaSþ@¯þ*]-ël®^ |<7C>
r—\ÿâ«êËÕgO¹ lçöKÔ=Z=í-ÚslžMdà@ʧ<q%<25>‰§O-»F~¤¹Ü)ºšA'ºjzXœÃ¡Rk07'£~ÊŠfnJ£K³át櫘ˆëÔcÌiz&r×´A4íÒ éšjWÏÆŠèuÑR>)¤CÖÞËÿ9(ý© tò5¶ß $mÍÂUÁŠ•A%1i—Í-Å/“a|*Œ_)>P%àLÚzX˜ÏAZ¾¯³ò M bW<>•“w/¡ÎªÄ@
ŽZ­Š…¸¬ ~kmD•h"Ö²Ìá ­žÝX å 5{þL3& |„Î18Âc.rDGÿ²M Âôܺ<C2BA>ZÉSrç`gÛ•Ö #1S){,EŠ“´^Îøy®[žûŠÐ éR\<5C>™}07©YsCM˜ äÚ^^ü^}Ÿyÿ*”‹*^û¢ÿ‹¬î»<UÇÊkIÍLJ7Þx|uKqsñéU'KN®?ýQ3yAz¿¹%€Ÿš¼$;¾8¾xɺTE2·dlËؼ{qYÈ<59>˜½ÉÛS¶'l‰#ŽÄ#Õo¦€Ž|Cñê¦Ê“ÇvÖ뎨ÕÍ)ùyÒ¹²;]ƒÍ½Ž»ï£çCS2!q¦û ŠYú: _<>²ë×=_'<27>œœ%Ç·Ù^·½nWínŒy·lŸÕatsŠ¿<C5A0>p¡ø¡ÒWùà”ꌪ«úú<>`<60>œ
ÊWïBþ©øÁl0M—0…¨i=\§íÉó¯<C3B3>§­ŒuŸà,ÒÁÄ h{ï)\è…&uÒ &éhàGó{~ºhBP!¼¥xlP ŒêuÇ/÷ï¿R½RS }H@/ç—<C3A7>ס÷¼Tv*»jé37=ä jbïåe*Ø…"“#=åéáÒöÒ×ýÐ7¡¯s€¡8¦Ó“÷Ȉ<>NDâhzh€>ßTßrNÕ©ê<u¡ºI(Ç8¾8>'*9$5$-:3Q0\¶Os¿^ýÄi×~Ì`=vò¾¡ˆÿ<01>ï·
­XwXUW¶?È= E¼È•«€Š4%ˆhh!”"R•¦ Ez/b[LÞìLÆØC Ø°  âÅѨ+'‰%ƨã:÷® ïís“yïÍÌûã}ó ß>络³÷Úk­½×ï÷ÛG<C39B>É===ãИ ˜¨pÇà¼äœð„œBéYà˜ÁŒì;KBþûÇP~@£mST*…DV´`D¥ž8z<38>8Z_”ËF3ŒÞ"zgnI÷3ÆÒÝœÞFÙ gôõôØéþ“<C3BE>&;û¤§¦¥¯L^bµ$¡(Á*)7oEAzjZ•]½•ódçIô6y¢•onnjV²Õ¬Ü¼Ü„¢ôÜ'É;+<2B>{ŒÞŽøQƒÆ0Ö¼ƒñ‡Ì E“ÆTÓyÆ€Ì a†2È1f,%3š±dÆ2ã˜ñŒ 3<>±eì™ÈLbœ˜÷gf2ãÂLa\™©Ì4æ}Æ<>qg<Of:3“™Åø0³™9Œ/ãÇø3Ì\&<26>™Ç1ÁLÊ„1áÌ|fÁD2QL4Ã,d35Ì7ÌfÎ F<>§g©·Lïú Áƒ… Š´ýÁúÑúËõwéߥÊ~bÃÙöSÎŒ{Ÿ+ä*¸\?ïÍ?¦<08> >0øy°þà¨Á<0dÊ<64>¨!«‡<C2AB>¡6C‡Ù;eø<65>áz£½Fo<46>ß7ÞoüƒqŸÉj“«Ã#‡÷šn6½<"{Äy¹©ÜW~^þÖ,Ø,Ïì¶9onl]…J¶I®Ô¨Ò|ÿR¥æ˜\){ª¦ÄQ¼¡½#º(eÛääÂÞ¦£µ µç¾ì —È™Uõ™G2ö$<24>(2eLzBF|pìÔèÐŽÄ“…'JN3¼7pH>•Ì©Œ<u:ÿ
¹Gš¶+=Rz¤¢¶¦ºæpÛÑoOþZ/sëñ¨ˆÂ©DÐ.‚ÏäMŽ9<ð¹ç²4G^“§¥=5=5Zîß„y8ÇVpاž¾ºãOC¸½¸Õþ˃ŠÂ—ÎÏŽIIÔ:Šæo¯ÜþêôW§/W^%7É«¬{óÚç]œV… A✞ñ±%ÉŸ§ìJÛ•öeú¾ ¡<ãèÂK<C382>×Ío_¬_чÄU0ûŠ*êÑ̃ø~+:Òv¿ +€+çÃ}À2&ÑVÎ\ ¼¿\šÁé8uƒõÏ pç€Ât´ˆB§HtÊGw³%»b¹dfåƒ{¼NÓÁ ¤?£¼­Ï¡S3:íG‚ït-ÀÉ181'ù •šH¼Ùm0oÇ6p<˜PÛ(¹rŒàš´Z ÐÏÁqXnÆûà3 \a|p¦ÿ„ŸÂ}Ѥ&´cQŸ5¤+¬¶V×ÊÅéh©<68>®uÂ1¢“Ö,EoÑÆð†âŸ 6È1€Û´Ú}©M±Í²©+æ`ÂÕß9ò°î‡ºÜÝsM0TÛ~'fËب-á Å“0ñ79Y¸3½riŲªuGÈQrxWEeEåÎ#¤‰œ^W·tqEö®%$™ä”/]V¸>ƒÄQ+Ô¹Ò®DN{nM<þec^FǤU.«XZµþïÇOO»{-‰›<F2þÿ‰sÔ¥r¿#½¼h_QuɱÿÃ\dŽ¦SÓåàÈ÷WB<57>ºRäY°çh Y{^zý«8ZŽŽ¼f<C2BC>èÁþB_ˆ…,ÚóêýZº¬±æ­øpÚn%{ŽÅqœö¶RãÃÂtüÄdV|ÄEÀ$¹6ƒébô¡»å7J»•n•>aüÄþQÒâV¦0jüñÖ·NõI õÁ Ž
;øç{n44_:×¾ÿ&ùž€Iü3W•«
­ª1øq?' á3F<>ç+:R:R«Cˆ;qÉŸ2u9¥<>êp¼Nq`Bž_Ž¿ØŸ8‡ìYÁq!±.E8˜vQqÔ¥¡êo”ìúÝ0ÁùvU…“Ž§EŸedä1%Ù0dsÑœ <>:p8:<< “€=u´ìÍQ<C38D>f °Â† Ám.o'ÿv <04>Ûg¿ý ?ß*Ù(õZsÅ<73>´†ÃpÝ5»—Qà™/åÊžƒ?ésf`zæøH@¿<>(DF¡<46><C2A1>­<EFBFBD>NŒÆÅ4ª$¥l B Œ]øÂág‡fG0œÎ$+Ô|jûb½ØÚ>1S­Çþv:o¨9)òfj¾q¤ojÿ×%Û­~¬Þ*ljð@Á;Ù•L Lкձסw!8ˆ¦þµ€íëß^ÿçaC¦¹`~ÌÑâÚT£3A'‚£²‘B>ØÕu½#—…
 ®¿BSjDÓi„æ0ÃòÉ[òüó»쾿÷îA½Pò䙵4£{½ûõïTBoê"x«}Ô;û}(œ*ÑÊå0”<«ïºÑu½öê„ d«uÝx2}ehZRzRô2ÊÑ[íІoXqnC§´²Ÿh3Ó¾S#>V±Ëõ;ö§³êô?&oð0 ”âáþhÖPÓ ±D®n§~…U¢7ÝL¼»úG3͉Ÿ(YCv·M7S`GF˜ Þ’×[ymªØ<>œ®S‹Û%Ë“5Ó8ÖÁpCŸ°<C5B8>â¨ÏêÂœÒÿ€ÿS§³·8l±ÿ,ôÓÂF®ÿ¨RÖÁâ|ÝHu79t3˜¯ƒñt¨ú¸§Ò2å<•l«:ŸnªÄÁ Ð]n×0…`4@sz™…à<nêÀ ?6´9xúK:•€Û5 £`Œê€@k%šÑJ= ö<>û¾ë£V˜Fè>è‡6<E280A1>&œ@{‚Ñ&¢ƒ<C692> Fá4B [ßï<C39F>Ö— m•)Õ74ZM¹q.ŒÕê<C395>Ñýžán HBØ}¿÷A Ðàì„þÿÀoäâSãayUع¨sQí,â@¬Ò?ðñA½BZ¿'è6‡£øˆ¥„o('<27>>õî»Û`¬ ×Q‰Kƒÿmè­T¼Ó¾e!ÓZ«m ê_$(\  0&¾oÚõ©×Qq})Øè2Ä©7ËÄvÈça8yVܯŠ¯šCS11wVø¢ð…S
%ì3Ôˆš<CB86>¢BN^çô„u†vZ«pÒEç:ßËÆUeU/¯[^»ái%לo=ÖzìFÙ"%Ú †E çÁ Ïã¨ChChIP1Íoš_¥{XU»ªü:ü^†<>2æeÚ­¬æ¼³yG²Ë3÷eìH¤å<> „-žZLûÎ!³·ú”ú”ì >  ÿ<F-…:9bÚð¼ûy÷Ùׄ*šŠlµTÓb8ô £˜¤ÔüU;JV¡#[ï<> QÆ$¿?ÿ‰hDPNìëü¾öû:ã'šzADûÌä z5£ùÏŽ/|ˆÔÆ4¿yñæE”UOi²vM¹Îæ÷Ó—Xe!SˆŒ¢¨/ûíÐÃ5sÌÑ<C38C>ËuÌîʼnûiWZN|šU™‰Òô=®P¤¡²ùµKÁ, 2û°J#—céÀ°44ÈÃ!+ÐP±º¯¸L0ÅU <0B>¦á˜&¡ömåÏ¥?(>]»=i<>ÿÿ/çÍ©æÔË2¥l§™vµz§­öcÑŸÓÒÞÁÿï°‰ÑýAÚ•ý[X Ç«GŠ£ûGJBi•xC<78>+׎Tç²ĉ«,Xm;%â.^\­1e1<65>BìsM·­c¼z<C2BC>Å@8NRoâû÷(1<>Ee<07>­8#%IP¨~jFêut“ŒÈz>W5OåP<C3A5>#I™»1`åÜ•!E rZÑÔøö_«žÒQ|4©!¡,<2C>L|y úß­ÃÙ(ÌW<C38C>ñ5ž_…_ œ z´ç7».î¿pà™×)xáõeJMjÍŠ3ä2¹[ÝÞÑ j|±Ì·€ÇVs;žØäx‡…†¹çŽ×!ö3õLÍ+¹Äü|oÔ£è¸åÚgwÈcA4D¥ú% áëÁšÝşߤʿœ÷õÚ„ŠwÐoyðºçÕq°"àG[Xzýâù
eç(å …h)KÌn™}ÀšHüiY`==zƇ)6R¸ÕE]<5D>ºƒ8ÑvôZ®¶t=¬Vª¾$Q³LÏËnQ5`Ë;.™´Ì™XφùÝ ºóúXÐú0
ÇÔcÖ7m8^Ò¸º¬Í³K¿ˆØ±3òó<08>À=ÅÖÅv1Ž%8— oŽùÁþ¯`Cå“.'°•W - T`£‡6Œû÷V/v-ç r$@¢èG{ÚzÚ&¡AÚŽ£å}ûö ²1‰@û]ÐðN®ÜŽ|Øu3êfþoDJϘƒïZï´Ý¾}ô%¡á=Êhóoõ;ˆúßÒhÁ<68><> Šžç…¬ÎŸ5jÓeòoIççm;Îﺸ·ã€v<ò1hP@EʈkݼkA×2^~Bk_ýñ[ á“`ˆçϧ¨wG´%(DºŽ2.^rv6ÁYgqôOvÏí`D ÅZ!N³Bþ=¹š{vþÙðJO2VÐÞ඿©ypþRÛ¥Õ?P/ÔjÍB9ȱö&Ož•^;|òð‰3å<33>ä4¹¸¾«¸ æTúî
¥j©£VXñÌN‡¨<E280A1>…à¡¡RCóN£ÒôȵF\ìîÈ­a„ê>ÌYþ³æ¦R 3”ÌÚ;·>¼!üLÒ¥¢ØÜôœâìâìui$‰¤íÈÚ›'ìË«\^µÖ{epF|L|Lqñ#Ç>¼q7ôó¤„SqVû²ëeç¹ç†‘™·[„¹-Îpu* & [ J ¾(© ‡É¥ú³7«7þ¤ŽÖyS{«ëVWã_É;rvSÓ꣫WÕ,¯`ñ~¶@‰érr­¼ídÃɆŽ½·‰ ¹7äúºÆÂÆ¥{HñÉóMôOWL¡Ý‰Ì*<2A>®‰®)8M:„'š©rò¨üÊIúw¹üéöÐÝq²‡N³ô&Aûâ<C3BB>Å[ª"wuJIãbêÅtõ,ÓßøwúvÙÖâ(âMæ¬Î
ÊŽM̈Ös[?;K. bæïµèA-¾ƒ½:Û:×Oµ}çÒO,ÞçG\èá³^˜izÐc ‡_£d)§lÏ-[Q¶¼rC9D*·—••íÝQEIãúªå{—ï-ÚžGrIцå+¯Ü<C2AF>K%MÚurXøš
ì,K¥ì <0A>e< -‰/Ì)ÈM^IâHÜÖX*ü,øc+Û6RáC”|ì¿0—æ2<§ge
9w?k'<27>ú*ºIaº‰N<˜#ŽÔêx=Wm †ˆ©,FsøN;$Ä?>"'Qñ{¸º’¥£(ÌòùJÎæoYµÊê<C38A>×ÔåTÆÄø¬œ—1/cQlFE¸0FÙü<>ø<EFBFBD>ÀÕ¡ÙáÙq Yôy8°h1ÐCó,‰Â±û{;Ï]¹Só+¹O:6Æ7..ó'®B,í Ò…0:ðì\ǹŽ»‡ûhÕÿtøûåµÊèõëô벫¥0<>.oPNPö„ôÿ<á¸C½ç¯œ¿òÝ?/¬Rö­æ<C2AD>x†
³™q0ƹwr/UCÒñj
Aãh[»8IiøR/ŸpbꉩþwbïÄ~_Då;=$·<y-<ys, ø
ýw¨ü²®zwñæÅ(P~”zifû¬*
ÕÔŒu®uøŒ°Yî)¨Ghso ¿~+÷ åÆ àüO ໬<_}ð
Ù*|f€µayay1ññÁ4Ð"] ×4ÒHŽ\úø«<C3B8>]ÂßsŠPH1ÿ%¹“r~Ö…‡(ÞR ³È»À;Â{FòÄä ¡‘ÿ,¾j¹Òr¥§d¿#¹ø= ÛRô<52>¾Ù]ðBï?¢ïÃô6¿¶ßÑw<77>ÂÖy¶Q!Q!žÙôP@iKâ#^廹M>'~6<”œ+¥òBt`7pÀ" þF <'èh<C3A8>¦ŽD v÷í@?¬% ½«vÓ¼Ï!<21>ËÄ-‰™ŸèCÓ±³8Z·î<C2B7>9ò®öÉ•î®îÛ ?zr|óéõ•àd¾d[ü_b$.LÖðÐ&'·Š.Ç6Ç5OiF³³ëçÊ(Ë(+,[U¾¦|ãRMšö9~àø<C3A0>Ž]÷É<C3B7>äu ŠÙfä÷SÖP )±ËŸ93*Õ‡¸<E280A1>èñ©ûRk3OåžÌ¹•Ñü.±;õhVCvY*‰'aE r…Eyþk\I8 ÝT\^qH@'¾'èbÚMÞUݹxçâÑû¤—†™*ù|¿7«>«~U+¹*ÐóïMJ 7a«#?×âä9¬'Lî·â±ð7”AÚ˜*RûÙ- Ÿܺw»¦üªÍK?Îû8osÎäü~˜„Ç”?Ы?<3F>JWË:k<E280BA>W_gÜ%׿øªúrõÙG.Û¹ýu<>`O{‹ög¸ <20>ò)O\I`Eâ©ÄSË®i.wŠ®fÁ‰®šçp¨ÔLÁÍɨŸ„²¢™ÒèÒl8<6C>ù*&â:õsÚ…ž‰Ü5ífÍA»4h:‡¦ÚÕ³±¢$z]ô¦”O
é<EFBFBD>µ÷òNJj<03>|<7C>í7(I[³pU°bePI̦dÚesKñËdŸ
ãT 8“ƒ¶<C692>æs<C3A6>¤ïë¬|B¨ØÆÕ£eåäÝK¨³*1<>£ÖF«b!„ƒN1.kC¤ßZQ%šˆµ,sxBë†'E7C9CÍž?ÓŒ‰Aß¡s Žð˜‹Ä¿¤l¨0=·®å£Vò”Ü9ØÙv¥õÂgÁHÌTÊKâ$­—3~žë–ç¾"tCºWgf_ŒÃMjÖÜP¦Ñ3¹¶—¿WßgAÞ¿
墊׾èÁ"«ûîOÕ±òZRóñá<C3B1>‡7_ÝRÜ\|zÕÉ“ëOÔL^<5E>žÆon àÀ§&/ÉŽ/Ž/^².•dÌ-Û2v$ï^\r foòö”í [âˆ#ñHõ) #ßÐp¬º©òdű<C385>õº#jµÆDsJ~žt®ìNWÁ`s¯ãîûèùДLHœé>ƒb¾ÃÆ×£ìºÇuÏ×I 'gÉñ-G¶×m¯ÛU»[cÞ-Ûgu݇â/$\(~D(€ôU>8¥:£êª~D„þ#Ø#§…rÇUä»<C3A4>ê¾`0LÓ%L¡0jZ×i{òükài«cÝ'8t0ñÚÞ{Š×z¡I<C2A1>ô<EFBFBD>Æ I:øÑæüžŸîGšTo)T£zÝñËýû¯T¯TÀTƒ@ÐËù%äuè=/•<>Ê®ZúÌM9È„Ú†Ø{yÙ…
v¡ÈäHOyz¸´½4Aåu?ôMèë`(Žéôä=òšå Ï7Õ·œSuª:O]¨nÊ1Ž/ŽÏ‰JI IÎL —íÓܯ€W?qÚu„3X<33><58>¼o¨<6F>X=⿱ïÛ
endstream
endobj
489 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 554>>
stream
xÚcd`aa`ddptvós<C3B3>Ðö/HÍ NÌ+‰ùÈq1°thÈwwÃ<ìÿ~ýÙ/ùH†#‰õ‡Ã
xÚcd`aa`ddp
uq Ðö/HÍ NÌ+‰ùÈq1°thÈwwÃ<ìÿ~ýÙ/ùH†#‰õ‡Ã
L?˜ˆ²È200<·ùAäE)$˜¥„Ø9øŤBãJó2Ýœ !”„26Ô34pÉLÏ,ɬJMQHI,ITHÎ/¨,ÊLÏ(QÐHÖT0204І:
îùùé9©
ÎùEùE‰%™ùyz W+€<>ÍÀôƒ!cÐnÆvÆÆN6&FeO†&FNÆ&³ßCeX·‰ÊüòúyÈ`ÿ[*ók“¨ ˳Ÿ¼2¿¥Øù¾ø~¤à·[Ùo•ÌßÖ1¿ƒ8¾ó±­»¾öîš'k/¹1çßÏiß-~6ˆvÛÎóÛ˜°1þPé¥îKÝnܺiû¼Ý·ºïVœLÙ²%t<>k·swHYjbZb…_·Ÿ ËžŸF¿¢E¿þ^}‰½ûù¬s+·®Ü²sÁ©î݇O—mû.)a»È}z`7Çïúß\¿¥/”÷cÿáÏêð=â_ôw«_Ñì?%ÿEþºóÛêßöZÖBÑî´)ùó*çU,jZÞ½¬{Ñ”yóæÍ<C3A6>º¼{C÷†Æås+æL)èÎï.iª¨¬¨jÊïN¥¢3dØD~[Éü|ÃÎ'Ã^*ÃêG¡™tÅ(Ñ.ÃjCqДÏÿuká÷w/Ùþ4t³Ëq1²Îçáü±BCi`F
ÎùEùE‰%™ùyz W+€<>ÍÀôƒ!cÐnÆvÆÆN6&FeO†&FNÆ&³ßCeX·‰ÊüòúyÈ`ÿ[*ók“¨ ˳Ÿ¼2¿¥Øù¾ø~¤à·[Ùo•ÌßÖ1¿ƒ8¾ó±­»¾öîš'k/¹1çßÏiß-~6ˆvÛÎóÛ˜°1þPé¥îKÝnܺiû¼Ý·ºïVœLÙ²%t<>k·swHYjbZb…_·Ÿ ËžŸF¿¢E¿þ^}‰½ûù¬s+·®Ü²sÁ©î݇O—mû.)a»È}z`7Çïúß\¿¥/”÷cÿáÏêð=â_ôw«_Ñì?%ÿEþºóÛêßöZÖBÑî´)ùó*çU,jZÞ½¬{Ñ”yóæÍ<C3A6>º¼{C÷†Æås+æL)èÎï.iª¨¬¨jÊïN¥¢3dØD~[Éü|ÃÎ'Ã^*ÃêG¡™tÅ(Ñ.ÃjCqДÏÿuká÷w/Ùþ4t³Ëq1²Îçáü±Bi{`R
endstream
endobj
491 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1647>>
stream
xÚ¥SSTç¿w÷^ˆ$^dë*<2A>Í
"îð2Ã"%(V‚•Ç®°>va%ÒRl´‰ö¤1ql”” <20>ˆL-/—•×¢Ðe<C390>b¬H!¤ˆ´1ií4Îä»ìY˜Þ%3ý:ßÌïœóÍ9ó<39>ßï|‡¦D"Š¦é5)¹ I é[ÒÊ´úÌBýqç]ÊF7Jt6ÈàŽ;³lwXd®Wel˜WPü&šWñœhEÑJ/'¾ô’]×À°/S4Íz®•ÉƒC›˜üÎù*­Ñ 47èµVT:ýŠR£Ö2¼itÝ gt\÷s'jOhõÕêJJ+«×­†)ÃBãu%º
]•Vã§)¬(ô+6”ýÂèÌò *ÞìºU€°¿Dƒ¡ä¨Öï ƒ±Ì`,¬ÐôJ'[¿ºírÊ­F0ïÒgésôoi ß£G¿OŸ§? Ý¨`Š¦ÖQRj<52>àÈ©kÔ_iýÄ%Øåc—F—Ûª·EŒÈ[´Nô7±I&'ûdb'³ïYœféM™½<E284A2>“‰¾^ô<>á<EFBFBD>O™èœ½…ä€ì."Ûÿõ%ýø* <02>ɉoWaànÀ¤NôŸ•Ï*ˆ8(€a,_̾è$þ@Ø¥¼<>ll$TÿtÿÚ¿…'0©ˆˆn(G*K•¥ŠÓl…ˆkϞΙ.'_Ösñ,?æmÿ}Ç+Øõ%$˜ˆ:[Lmf³ôåY|0uü™ñ´ñ&Ê¥ æÜò%ù%YóhnÒ4"5<>Ö߃iøwÉqƒqƒŠÏÐpÀ!×¢è1Ò>¶Þ¡:Ë'w.ZaF«néºK¯€½Pp¦ä¤ádYùÑC¥ÚÒøŒ€h‡}PêT¦ÆþöâA±æqôXô8º´RDBÔ¯Tåц„Ciùs(òyÐ=Ö2T;T;üáÌÁÝÊž¢¾¢†Lˆ‡ðûr“rÂŒ(7¡œ¼*!-Ä7wá~|9/ø&CbÍWâkR®³ÎØô#'þR=vêþo¦I<>lh]˜Z˜ìYQ  3Ãíèz™­ažÖMv X-ÖÆiø+4{ÞnoâÈz<fOÇf)cy¿½ ‰æ·‘õœÃ*áóøïͶÖá¦!éEÉi z™œõ5üm¾Û ;OÇœlå“}øY²uéˆ;¯þþsGAJÞ'^
,ð…€Ã¯'«w«C è
I<EFBFBD>P“ðq•½ ùÍ,F2ÿÈ"^å$
ˆ
ˆÔôt~a¾‡¬²Eˆ¾ŸŽ˜B<CB9C>6TÂÊ“·[œ´áSŽ¤Hø'2q˜˜H— qëbóCÊàJŠýZ´ ÅÏ2&b‰íl ô\uðµˆm…è"\´!53ó<>†p0ŸdkfmŸõ˜Zï°—$g°ðg¸eG`ÔfôÈÅHH„Ô³jY”3æ·FÎL˧rÒÎßóuœâ<C593>…Áª>]<5D>®=¿)½)ý£=° òOÔè Šgs<>™Õ©°âšòónŸ‚§,ºqÞb³Ø&¯?q“‰Õö<ŽpØrŸ<72>o.ßm¾ÙÜyë“Q0Ã<30>_<EFBFBD><5F>0©<>êj⥽©F7\<5C>õ¾© 椉cIÎrÙaÏcÞÿO¹'ÿ99öc$ž+Š».Š9Àƒ]þJ¾B1qÏpÎHXeq×ìüÜ?;<3B>C *vf猼× [ÈfÄ!ÃVKjˆÖL”Ÿ=\ «{IŒƒõtKäLÁïÓ.Ä£âQ„¸
å™x°ƒå«ïq)<29>Y»ÿFÞ mw™µÌúÖ܃îËæfÓ5SÇû>íûôÎ¥aX€ C¯ºWÝ°Y@qù¶¬´ìô¸c!?|þï2ñ'tpT•ýSÍkà±uI©iã™ßdc<64>Rál÷u@¯Ás s‰Ä]GB<47>aÿôh}ôàæ˜5NäŽæŽl·âê¡g½÷o­fký8LSÔÌ«FT#þ×Q*H{où9õ#æ~³e¢û¹‰pù_ï·äZr3`ì0$«óÕùªŠ تzµ9Ól<18>/Yr×^Â=‚ñÊÞâMÃ>aUR+÷ÐH,)öïŠëÒ§rlp·a »£»c¼î¡À¯²Î>SOž+qœ-«sw寭ý/ªKeø
xÚ¥SSTç¿w÷^ˆ$^dë*<2A> ˆ;¼ŒÅ°H 
\V‚•Ç®°>¸°i© 6ÚD{Ò‡86JJ<4A>@D¦—ËÊkQèò*ÆŠBŠH“FÑNãL¾Ëž…é]2Ó óÍüÎ9ßœ3ßùýÎwhJ"¡hš^“œ™¤ÉÜZª/IÏ/9î¸KÞèBIÎzüÏqemvÂùª-<2D>
þ”°‰œ„€U'Ù@Q´ÊÃ<C38A>/½ä@ç5"R^"0ìË”M³îkÊ <C38A>Ç$$½s¾RoäUüq¾D/by…Ã//6êÑ!þM£ÃN8¢ã†Ÿ;PB_"Z½¡¨¸\´%†•ÂPUhHœ¡ÈPn¨Ôë|tùåù>…|é/ŒŽ,ŸÀÂÍ>a!¡![E öIàù¢£zŸ7xc)oÌ/7ð%*ºítÊ¥Z4ïÒgésôoi ß£G¿OŸ§? ]¨ Š¦ÖQrj<72>“è(©kÔ_i5ýÄ)Èéc§§~§áUoK‰§d<C2A7>äoR“B2Nö)¤&NaÛ³8+:ÌÒ›
[§<>|½è¦À
É9[³0ÀÙ]@ü¶ÿ'òÊúðU@@&+R¹Ý¿ýw&v ï¬rÖŸH3‰?<3F>@ Œåá‹ÙÄH<»ô<C2BB>'<27><> „êîûâAÛ·ð&uýQýQ >€
À eHe¨3Ô±º­ ±m™ÓYÓe„âͺ/žÆ<mß¡7c;£ŒIG³©Õl¿£:‹¯†³ö?3î¶k¶#žDµ¤aÎ] __5<E28099>æ&M#rÓhÝ=˜†};;àÿzn9¤ãZ”<FÚk¸gð†¥ÖòÉ<C3B2>V˜<56>ÑÊ[†®â«`/ä<>):ÉŸ,-;z¨X_§ñ‹²ûã€ÊÊTÛÞ^¼"*#Õ=ŽG§fQŠˆü•º,Š<>?”š;‡¯]c̓5ƒ5CŽÁÜ­è.è-¨O‡8;¼+1;1+Ôˆ2`q*É«2ÒL¼ÃpîÇ—ñw$T¿q%®&¡>ù:aÌpÉȉ¿T<C2BF><54>ºÿiQR Z¦&»WT~F3¤ŠhAçËl5ó´v²½ßj±6LÿX±Ùó6[#GÖã1[&3KšåýRôX,°3$J`ÜFÖsv«LȾ7· 5Ê/ÊNcà» Ê䨯n ]ÜNØy:úd<64>ä%Ì­KGdÚ¥˜yí÷˜»8
rò>ñðÇ<oð;üzv·6„GgH„øêø<C3AA>ã¯ì­Ïmb1ùGñ(#@Ô@䦧ó óÝd5<64>-btðEØtøºµ¢
¸Ýì°¤Ÿr$Y&<QHC¥D¾œ<C2BE>[[™RVRl·„Óâ(ä„)\(|¦™ü‰%¦7¢!ÐpÕÁ×·…ç£+`°xÑŠÔTôTôw:ÂÁ|þÑp;üY·©å{Ivó†[vDnF·lŒ€Hù0£†E%c~käÌ4°B*)#mÂ=oû)¸Q¨ì5tÚrÓÓ>Ú» ÷äÁ¼¼ÂÙÆlczU
l†ØÆœ<EFBFBD>œÛǧà) „n˜· [†'¯?q<>SHµ¶ŽpØ|Ÿ<>o.ßmºÙÔqë“Q0Ã<30>_<EFBFBD><5F>0¹—újÂ¥½â©B\<5C>uÞ) f¥JcHÖrÙaËaìážÿO¹»ð99÷£eî+Š;/J9Àƒ<C380>öʾB)qÕ8f$®²´sv~¡3³sFÙŽëÄ-d5±È°U²j¢7ÕÃgÈê
ã`=ÝWÉ%“÷ûÔ 1€<`dW¡2<1D>¶³B•ý=.Òkößȹ¡ï*µƒ{ÐuÙÜdºfjÿc什ŸÞ¹4 0Á÷h{´õ;!ˆmËHÍL=üÃÇþ®<C3BE>ŽqbG~GÕIQ?Õ½¾SØžÒž:žþM&æ©üí¾èq3h.~.<2E>¸H<08> ìŸ<4D>Ü\â³Æ‰ìÑìíV\=ø¬çþm³Õl­‡ qŠºyõˆzÄ÷:ÊEiï-?ç`¢nÄÜg¶Lt=7.÷ëýlKVƒöÀ>I«ÍU—Â&P×iÍéf~¾dÉ][÷Æ+z
»uõûÄUI©ØWx@w !/¸Ð·3¶S'žŠ~†»õý]í]íãµE~µ¶™:òü[™ý0]hih­«³pmí~f
endstream
endobj
493 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 4701>>
<</Subtype/Type1C/Filter/FlateDecode/Length 4702>>
stream
<EFBFBD>WiTǶnàô€2h´ñ ' ¢‚‰ˆ âˆ33È  D@fd<66>0¨QÔ¤ŒQc0 " 2(àŒŒâ„F½&N1ê<31>Æ^wŸ³¬W<C2AC>yY÷½·ÞûñÖ©îÕ}ªz×®¯öþöW:ŒBÁèèèˆÁÜÆú$FÄû‡Æ¯7+!v…Üáe>€Ql±µ äï^…ÚWª_«„¯YÉŒT:Ò‡º¹ž4Tñ!Ãè¦wæ¹±|¿>H¾ÑF¡£Ãºx/r°w?':2:%úóˆ+BSB-Ã3£#£R,mÃÇXNï0~½9ØYÎOHˆŒ<CB86>°œ<C2B0><C593>œ˜<C593>š<12>o/;i){i){ù÷<1B>y Ǻ†ºÃsÆŠËNP8ë̆gô™Ì@ƈ1f1fŒ3±fF2£˜ÑŒ cËŒaì˜qŒ=ó13žq`™‰Ì'̧Œ3™™ÂÌbf3s˜¹Ì<f>ãʸ1îŒ'ãÅx3>Œ/³€ñcü™&<26>YÈ,b˜`f1³„™¤Ëè0Ö½`<60>ã:¯t4ºŽº®ºuºwôLôŠ–Š Å^ÅqÖ `sÙ}ì3Ϋä>V%L¾noõ‡éà0`÷@ë<>ß6 7ÜcxÝð<C39D>Q”ÑãÙÆ×*ì=¸`ð«L?øöƒKC,‡ÌT): PÅÖ*<2A>»ú}à{SUšã¢Jñ\m¨ÂἊch3Á&8ÝØq¶«î±iÝÏ¿?ð…Æa6K§a5”){.Þ¹rºãôµ¢<C2A2>É«•w]Zg¶Ùâ &Ä:vº×Îd4ñÚíW´¨haUÀy?aŒÿ<Ÿ0÷p<C3B7>ôid<Á!gG¿tyéâJp"ð <09>'aÈSàUön¦Š¤nwõÁ£EGËÊ<C38B>—Âc|¨t îD\‰ÿ÷¡Ç–K;MZ@u°H²"ccbãÅøÅxÞŠ¹J.’ã{Ë*¬Ü}ŠÔ<C5A0>òõÅiÅé{H”`¤v µ‰gK['šþŽ¬[¹ñ`<Ìø`°[ ˆìS1L8 ö´Ý«
¸<EFBFBD>û4 BûEhŸ„ÎçÊv%I6 ³“À9>{0úò/P¼…VgÑž¶bœ@Љà¤dœ°Ç-F»¹ø¡Ë¼E'({&Qc¦[=GÅ 1<>«Õ*´:oVà6xž„IxÖá@ø®Âxì€t0ÄÕp~-^ÛµúÖ¬‘ÚæEQ:Û´Ç8#é>胵HóBËãËãê³ZH3©Ë+/+/Ï«%<25>¤9«.®4¶ty^ñ#˲ãâãâ³B‰?]Ùõ]9`°ŒÓÖѨa¡ìÿoM}]Aú¿‰—¿i"õyeeGKóêèãÿê<C3BF>J±ãÉ[Ä ¼&U¢ó[ó}©ÒF7òj¼É©Ø\ÍUxÂióTì9VkÌi÷ª4sXúÏ¿ •Ê¸™°WÔæÞÀ³+yðñöÕ»Ví ÛÖŒóÇtv9xþ•ÒIœ «~Õù[çÙ7ôÎÐÖðV×ûBá;þÆî¦cu-'Z
o“'Ä¥¿Žk·oñeN¥íá8ñOÉÕµu«O$â³fyDÒÊ$ï':Ä¿!€ƒ™O¼Ñ覇­
[å™ù)í á¨/¦êÓ*Åe¸¾y ý¥4'ýÛ•hýZÃ-ÅZûŒôš21ùäД ÁÜô‡ÒË>õ€hƒóìåqtJIçù<12>À ~´ àpŒ®þrõɳ“ Od$^©ØTu6 ä47˜ƒJø ÿòºˆ ]&4<>ƒ=¯9  ý< ä
عAÄ;8s4Õx3e`<60>îa¦f· ìÒJ†ÒØ©Ýw¤RØÙû<C399>šä<C5A1>4”m"uJa‡v#QF{~ìïQ±WÕéêË"î†2lã]sÜ7ºÊ2vu<1E>ÜÆ€!Gv'Àðþ³ûÏÞ<C38F>áxz‰ïöÀV%Z´ã¨2üˆPÿÑ× ‡£U¨tEOënn£ˆéS´aª;$Ñ=}´ãÑž¾(Ô_É|h¡bWšÐðÀËÚÚ.é&^¡žÁõ@©«w ì¡/m&ÚÝêi§ÚŒÅWœÖRFèªþ,ð0ì…4D«¥ñªÈ¥<C388>3
Ç3•¢¯Ðmç‰ú¤ Ts¡JÁîâ6 ç&dÉò/—“•d•Ðë
íd^«××ÃærøZÓÃj'ËÆËÔS9r/Æç@¶°‹ÚâÖ«ØËýíuåÉÔí8ü;ô6r½ÆšŸX­Ùû<C399>æpäa.XæÀ"úzPßsê¢bÿ©N¢Û¿Ù¼ÑD@/—k˜Jäæâ<C3A6>(¢!õAo
míèAùrq‡"7—k`&òÕÞ6 }L(™–à+®<úµŒ‰_<>1:ãú„“<E2809E>X 1±¯õzèõ0vƒ“<1C>œô…:O”æ<E2809D>ÿ˜\þüDÔñ¨ É,2{uÀÒˆ¥+g¯±#‚ô²¨Ãc?îã»ö]hVƒsi¬F¾Çý{0åÀ<C3A5>€eÝï_?<'ǃlÙ•Zn%üäNÖÙø3ñÅÁd™›´tÕÒU³3ÇÁ·rÿ©mcáçúZC&ƒ'5×Ïtœ¹QÜE~&`³tíþawmªp <09>xzÿÄœF«9*}$’—É÷ƒ:®Ùwà‡×Fžs«LÌO8<4F>^<5E>S˜s ·˜<CB9C>“û«ÊKÊKNí»HΆÜó9Â…œ«©÷bþ€\¥KŬCóóçæÏÞ5ƒàÇ W:Îœ8sÙ("™·×§$¨$¨2äÔŠS+®‡? }ruUYšp4­(mêþ”o“I< ÊX±2)2iQÎ|Ê©^»æåÏÏŸTn{RÀZ |Á<ƘFI®æE×o]g(Ý)e¾-R¯3Q)j%+ØÝ÷wKV*ô”3Á@ņôׂË}ƒ9lŠÓgBg&<26>&#ˆËá<C38B>Æ<EFBFBD>Æ”XA3„Ž˜Åœr•o>z3F/_ƒ 0Ÿ×?¯¿yåÜý³÷_Òwy35ÛÞ—˜^Ír—ŒÌFoÓÍ%ëÏdÞøü‡Ìö¬<¢Ö(±ƒ“6ö çœ”KÇ˙ԧ¢î±EzÍâSNÊè3cµ-pIêॠÍ`ŸpòrTŠ$Ê=½á¼ÚWó Kû*q—z:ß» o=‹ŸÑ•)î¨5&­Îæ(áL¹6åò2m8<11>¢k7†)Á°émÉS¹B²y\˜Srqp¬“Ÿ©³èD)*厗¼/{?Ž}GÉäÖž¦ÃÍÅ<C38D>§® ßr±®ø1O\Ó—‡…†ù§Ï!‚íâúŸ-HûÁSõ¥õ¥ûŸn“ᤦ¯ÑXÌA=a-÷m÷7wÈiú°M¥~Ù|³…\§]Ï&ר· ]Ý÷ºkÀš€<17>ù+a„ËŸ.oF6 cpx<E280B9>4$VûWL"¨KÛ§H¿ˆ‹ã=Étâw8òBÔ… ÊB¿õ]~Wå™ÊÓÍE<C38D>´ hj$Mºx—\Ùq~OÞóÏ• °<>^œœœ¸Á—VÇ©  <09>ú#°àhQKêrksjמÊ<»æ¬SR„C4^iR¢Y°Ýh;¥HØOÐ~³ÐºÍåK»ÓEAþÕüè
8Š…ª{ð"j8âþ­KÞ$a=­ã:ÍhEp84}ÔŒ‘hMЃ [ ZÝÕ9êM…CxÅ9$°$¢%¢iÍCº´<ªi­nk,½AKIUjåBÐ@XÅoA<6F>ôé+C"CüR¦É%PqF­§±—­ ?à»ÕEкpÛ; /VŸ¨®;àêûf‰OÈ<4F>—ö]ÚÓz ±D€u¼{¬gªO¶O¶ÇFW2¸/9·ä\Òõ-OuØÒ¸r\ƒŸ9>CãS²¤ºÑ$hÜ(ûýpøto@«nÛn[°
ˆú˜º@c(B~“''¾«(8TpøèÞzr<7A>´®¿´æ¤(<28>ËÇí§ÀœØÄ{úzúÆÚSU-8ó8Õ™E˜ÚgmC9¼sUŠ8M<38>¨έݖøͲí¡;"¶Å´!È­šê:Õ5|ÕdÆ÷n•þÇüO‡]L^š<>Ÿœ°6Š,Hôž˜¢¸¢Ø#©å9“×x­
Ió£J|L팇<C592>``¢Ì#Ë)µVsto7uS %<25>?cîz4º7Ú¦Ô. 
ÿƒ'-HéþòâS”Í[` ¡âá ÓGu/hüË™-1çaö)eノ¤¾ ²úpMÉ™½-4ë&pwIˆêÌêÌüxJņyÅyÅ}’…:´"øï +/N¯ uèiFˆ`Ör ×ìŠfæÄ;gIbTbTh†åÁÐü„ÊÄÊì³äœl³TŠRuÕ Êèîù·æß²©Äam 2óQGÈäv>Ûþüë6rÈn¾O¿6©ˆ7)xQÓVÓv¹ô1õÍ }2~bÑkÅ©Y°Q±kEæ`Ð3§ªxïÃ%%ûªÉáuÀyÔC½€`[s¸¥Ò¬5=ØÖ×#oÐ;)Xz+næöÃNVíþ×4ÐMEÃ[èÔ³ð–Óƨ %_)CØ<>¿R…ÏJ&rÈéþ'•âK©<>:'<®j¬il.é$m¤.ýHØáð}>d²ÐkûkóÆ­ÃãêØ
BÑsË^ï¿,<n<6E>ÈùrÍ8…þïžå—à·<<.Høœ k³ûzäõÓx–ÿ²²µ²µµôÞŸ‚ÿ/°šFw»Þr½i[I†3ÈülßDŸ„¥aÑ<61>ÿÓ¢²ÑÑ+äTziXé¿YT¼•lúOXzù<7A>ªšªZ.–Ü'ÈÅ„ª€ª€|Êjz´e8EúGùù&L&ÎÄ÷HdëÊÖ šþzzUú©=Ëž,{âyÝùŒó»"K3)QF½DÕ”FôŽ<éxÒñŠëƒ%>{¹úÝØT@7üÖó[ÏYJOàþžžóÒiöw];}íô¹ëU¿û%ŸVÎ<56>ÜÞóîŸý¼û7}gsËa[UêzºÐ`ŽämjZ÷«°ÿ?é[pÐ؈·Icb…ÿ±Àïe0u>²ø¡ùÿMβ+z<> ºÿ#ÍQÍ<19>(H½M‰ØÚüiÿ7ž[IyN/}zä2Ês©Ói6êàñ¹¼¯éHÓúÚŠ&ʺ_ÌÙìOÂm4\Tqî¸ODkvÞòYíÂ…%Þ{çzÒ°š>RfÞ÷<C39E>¹UãˆÎQ<C38E>£{@)×OÕ‡äÚ5<C39A>¸¯Yá³â³à(O! _3û7ºƒ#ÏJn6<6E>o>ßuè©$e[m,‚ãÊÄQÛÂd Û4.ðX¤§Ÿ³kN¬9WVVîQ1±rÌqϲ¸ ²¨jÎ<>*~fÞ@Îm8—u.ëBzËê‡\Äa¥hFä¡8#pZ@ÄtbKìZ\ž¿¢4ª6öDì•U?G¶'ŸM­J¯Ê8”—-äeî\CV 1¨gH<wQ½•ïyЯDÀíüù´¦ÌÖµ­ëoæÞï?h ,û±ý§öôäÇSW ÕNb¾K.\]¸ö(©¤*è ”Ý_à"Þ×áTºõ"ŒÖVQ9d|ľ٫Åûi,Ñ°$¿~ßuL€tÞ%ÅcíÂþýœ¥ñ4<C3B1>´4!P¹f\Ä‚¯øO‰' 9_<>ÜÔVØÖKs £¯Ï½>çu £»äƾö#í¥§OT\ ÁE3ækiº PÕ4<C395>ð6‡1½ƒ'dÍØâašËåÞÎêZ}cÕƒ•´j»{òú1<07>òà ׿Î/kiÓ:·Ü%B.÷UÁ—‡6—m:º©|SŦ£¹e¹¥J7nÉÃaR…Ê/4×Vd~š†ºë¦l ¢s¤Áø40J{Š¢´A‰­Ü¢G¸ÏÁr<C381>>»“Aû…¬á
%S醨5ÖÞ`á5ë¤!°V;„…?8í`é†ÄH'Y|ÍaJ’ü,¯MÓ£<C393>|û^f¤¸Æ‡Ç˜†E/Í $ËIø7+w ¸‰oX×<58>ÛHÞ¥?µÝo»ü¤ô¥8•âw%þÄax¯~šwÇÆyÔË<C394><C38B>k¯f4c¤Z_i¤ÉÔPȲµ¼´U=…Ž<C385>˜-eòÚ¼Þ@]y£ôšžBèzÁi×Þ|€ëpÀ@«<7F>T:ô?Àˆ•
<EFBFBD>WyTG·o`º§Q‰62aŒHDLW܇YÔ €ÈŽ,5š”1jŒ DPDÜUÜШŸ ‰[ŒúEc A?oÏÜ<C38F>óª1/ç{ï<>÷þxgªûtOUߺõ«{÷W:ŒLÆèèèKTsÝŒóIŒˆ÷<0F>_3~vBìJ©ÃËb#ÛbgIÈßr%h_)}­ä¿fEsFTêˆêŠzâ0Ù‡ £hBïÌscé~}ˆt7§7aÐŒLG‡uõ^ìèà8antdtJôç+­V†¦„Z…'$f$GGF¥XÙ…<C399>µš8ÁqÂxzs´·Z<C2B7><5A>a5'!91!94%:!ÞArÒJòÒJòòï7:ó`Žáu uG0Œµ|;Qæ¢3÷0f9£Ï b3FŒ13„1g,™‘Œ 3ŠÍŒal;f,cÏŒg˜<>™ Œ#ãÄLb>a>eœ™)ÌTf63‡™ËÌcæ3 ãƸ3žŒãÍø0¾ÌBÆ<42>ñg˜@f³˜ b™%ÌRf².£ÃØPôuŽë¼ÒÑè:éªtëuïè™êˬd²½²ã¬Àæ±ûØgœ%W%çå±üh~:ÿƒ«?\ÿÐ ÇA»Û ®üÎÐÄ0Üp<C39C>áuÃFQFgŒç_:¤ÄÄÛ¤ÐäÕf|ûÁ¥¡VCg)e<>¨d¥Æ]ý€>ÈûR•šãRö\m¨Är#%ÇÐfŠÍpº©ólwýc³úŸ+)yÆã-.
<EFBFBD>Ãl—MÇ(Wô^¼såtçékÅÿ ?W«îº¶Íj·+Ã!M‰Mì ¯é^+]ÈâµÛ¯xqñ¢ê€ó~üXÿù>aîáéÓÉCÏŽyéúÒ„UàLà£NÂЧ GVÑ·Eœ&<26>úÝ5<07>-¯8^<06>ñ¡B63Ý™¨ˆÿ÷¡ÇK;MÚx@u°@²"ccbãÇøÅxÞŠ¹J.’ã{+*ªÚ}ŠÔ’Š %i%é{Ho¤v gFçFG[šýŽ,[¹ `<,–Àø`°_‰äs L< ´Ýë ð¸<C3B0>ûyW4B‡Åè<C385>„.çIvEQ2 sÀ%>W0 úÒ/P¸…ÖgÑ<67>œHЙàädœ¸Ç/Aûyø¡#K¼Y(w&Sc¼¦G=WÉ 0Ÿ«ÓÊ´:oVâ6xž„IxÖã`ø®Âì„t0Ä5p~-Y Ûµú6¬ÚöEQ<Û´Ç8#ñ>èƒ<C3A8>@óC+â+â²ZI ©Ï¯(¯¨È¯#M¤%«>®,¶lE~ñ#˳ãâãâ³B‰?]Ùõ])`°œÓÖÓ¨a¡üÿoM}]F¾‰—¾i& ùååGËòëéãÿê<C3BF>R¶ãÑ[À<>rMªHç·÷§Š¹,æÊÕ®x“5R²yš«¦ð„Óæ+Ùs¬Ö˜ÓîUjæ²ôŸA+s³`¯ 5áÞÀ³+yðñö5»Vï ÛÖ‚ tvxþ•âI9¸^óªë·®³o˜é]¡mámªZ‡"þ;ù<>ÝÍÇê[O´Ý&OË~ßáÐŽãÊ1œð8ZÛ-À=p?%W×Õ¯9\Nü‰ÏÚ¼sœé~%@³žx£¡%Q¥‡­[í™ù)í á¨/fêÓJÙe<C399>¸¡e-ý¥´$ýÛÚÑ- ÅÚøŒòš:)åÈ% A{y­è ,£—)|êÑìŒ8çyØ+Ç1A8$i<14>çK4gøÑ€ãQ0ºúËÕ'ÏN><>x¥dSÕÙ4<C399>ÓÜ`.*àƒ<C3A0>Ëë
n$¼v¹ÐDö¾
0 ”0ìð$<24>Çc×FïàXœ„,ÐLã .”ƒ%:âuKº‡™šÝ¦°K[&Ša§v#ÜË`gßCjRn¤ÅlS±KÌ…Ú\:¢œöü8Уd¯ªÓÕ—Ü åØ.Wå¸çºÊ2öõ<1E>ÜÆ€!'ö'Àðþ³ûÏÞ<C38F>äôß-ê…­
´ìÀÑåø¡þ£¯Ž@*Q¡BOë nn§ˆéS´x`š;$Ñ=}´ãÑž½¨àÕ_I|h©dW™ÒðÀËÚÚnñ&^¡žÁõ`±»o°ä¡/m¦ÚÝêVq§ÚœÅWœÖJ‡Fèʪÿ,Êaø q¨VKãUG!ŽgJY^¡Û.'ꓦPɆJY»Ûˆž<C5BE>%+¾\AVÕ|Ÿ
ê© Ú)r­^/ÇákM/«<>"/WOãȽ<˜<>Ùü.jÛ d/x|´O%'Ó¶ãˆïÐ<C3AF>ÏåúŒ5?±Zó÷ÍåÈÃ<°Ê<C2B0>Åô#õ<>þçÔ3.DÉþS<C3BE>³/x£8ˆ×0•HÍÕ P@CæƒÞ>Ú:Ð (‚Òåê)Dj®×ÀL¥«¼ lâû/˜R2­€!W\yôk¾ctÁô7'#±DcâPçõÐëa,íg) u¾ ÎkùcrùóQÇ£,"³Éœ5Ë"­š³ÖžðâKÈ¢<0E>û ¸<>ï:t£y-Σ±ù÷ïÁŒ7Võ¿?|ýðœeµÜ,ˆ<C3A4>;YgãÏÄ—“ùd^JвÕËVÏÉKx[Ü.HAü§¶<C2A7>…Wœê7´<37>(L„Oj¯7<C2AF>é<s£¤üLÀv)èÚÿÃþ6ÚVãR:ñŒ<C3B1>‰9#<23>VsTüH /“ïu]sèį<>:çV•X<E280A2>p ½0§(ç@^ )%'÷WW”V”žÚwœ#<23>yçsø 9WSïÅüy
×ÊÙ‡Ì+˜³k&Á<> ®rš5iÖòÑ2¯OiPiPUÈ©•§V^ú2äêêò4þhZqÚþÔý)ß&“x”±rURdÒ✔S½vÍ/XP0¹Âî$<24>ur0ðx˜@`:%¹ÚÝ¿uŸ¡t§<74>ø¶X½ÞT)«­awÿSÜ-Z+ÑSÊ%2P pÙçÏÎJCF×Ã!M!M)°¼f(1[NpêT¼ùèÍ8³| ˜`>oxÞpóʹûgï—¼¤ïÒf8i¶½/1}š8>™\o³Í¥ÎdÞøü‡ÌŽ¬F<¢Ö(°“s
ÐsNÌ£ã¥LêWØ*¾fñ)'fô³ÚV¸$vÊÅ <0C> O8i9JYåž¾p¹ÚWó Ëú«p—z†¼oaÿ?£+“ÝQkL!Z<>ÍQ,Âÿ˜zmê5”WJ´áHpd4
ª S€aóÛÒ§4rùv?d-—ÈqQNÍC“Xg?3ÿÐIST*œ.y_ö~ûŽ’É­=͇[JšN5^ã¿åbE]ác9Q¥® óOŸKx»% ?[’Žƒ§ÊÊ:÷?Ý&Á1DM=^# ±˜zü:îÛžoî<6F>Ó<ôc»Rý
²å<EFBFBD>q]ö½Ka¸T£Þ6v÷Üë©^¬‚‘®º¾Õˆ
Â<EFBFBD>Å-Â5Ò˜Xã_X8™ .mk<6D>#ý".‰÷$3ˆßáÈ Q2h(ð•ò­ï
º«ÎT<EFBFBD>n)î¢AS+jÒ…»äÊŽó{÷œ?x®‡}òàÕÁÉÁ™ÁY<C381>}i5qš:<3A>©? Nu¤>¯.§nݩ̳kŸÁzõ<>?Dã•&%šÛ<>±·]†4€ýxí0ý¡ÇBZ±¸;]€ä_-?€.¿—»ˆ£YÈ¡º/¢†#îߺæOæ7Ð:®cÕÖG<>A3FÏ<15>6=ºÕ¢õ<C2A2>Ñ]£ßQ8øw°Y˜KK#Z#š×>$ K[á£Ú¶šö¦²ä!¹”T½¸vqÁ' øÕò-¨“>cUHdˆ_Êt©ÊΨõ4b鵡µá|·ºòZWn{WÑÅš5õç\#|Cÿlá ¹³ãÒ¾K{Ú4•ò°^îë™ê“í“í‘«"“ˆªdé¹¥ç®oy«#ÀŽÆ•ÓrâôÌéŸ4 Õ<>¦AãG;Œ€Ã‡ {#Z÷ØõØ<C3B5>u0¨¨#êcêB<C3AA>¡øýM99ñ]eá¡ÂÃG÷6<C3B7> ¤mÃ¥µ÷ EáR1~?Ä6ÞÓ×Ó7Ö<37>ªjÞEŽÓ\X´…iý†Ð®1”Â;O)‹Óô
Úܺm‰ß,ߺ#b[,A[ÜêiªiªðñTS<54>™ß»Uùó?v1yYbTBr|rº(²‚'Ñ{bŠãŠc<C5A0>¤VäLYëµ:4$4$Í<>*ñ±u3>€Á‰<12>¬ ÔZ ÌmнÝÜC%OþŒ¹ëÑäÞäp˜R;<3B>~Êüž´$eûK+JNmR´l<C2B4>±øʇ7ÌuÖ¿ ñG.g¶Æœ‡9§}oúÿ%<25>†ÂªšÃµ¥gö¶Ò¬ÈÝ%­k2k2 âI(Yæç÷IêЊà¿'¬$¼$½’Ôó §)€yëu<C3AB><75>^
Í-ˆwÎÒĨĨР?ʃ¡ U‰UÙgÉ%)Ùf+ee¦ê8ªÑ= n-¸e[…à Úd ŸÉí|¶ýù×íä<C3AD>Ü|Ÿ~íb1nZø¢¶½¶ýrÙcêüIJÏZn¤fÁVÉ®l[ªâ½G—–î«!gø×çQõ‚í,àR³AÐôb{¯´AïÄ`ñ­°™Û;Yµû_Ó@ o¡KÌÂ[N£6 I``'þJ>+F˜JI" §Vä?)e_šŠíÔ9¾ðquSmSKii'õéG‡ïó!Sø>k¸8°X˜7n<37>WÇUâPŠž[öÂxßøåáqùDÎt<>kÁ©ô÷,¿¿¸áqAüç\Ø°˜Ýß+­ŸÆóð—UmUmme÷þûòÿ«Yt<59>êê¦]=Î$ ²}}…EþOŠD[%D¯<44>SéeaeÿfQöV´8aé<ªn®n½XzŸ< ªª
(«éÑ–áéåç0…¸ß#m«Ú2húëñê}T}è§ö.²ü‰çu—3.gì­΢DDiÌRIVSÑ?8ê¤ÓI§+ªK|örÍ;º±3©€nü­÷·Þ³”žÀý==ç§Óìï.¾vúÚés׫9öK­œƒ ¸½çÝ?x÷oúÎæVÀh·*Õ t¡ÁÉßÔ¼þW~ÿÒ7僧n“¦ÄJÿc<C3BF>ßKÍcêdñCÿœ%Wô Ap%þG"[¢Z2<11>ñ<EFBFBD>z±<>ÅÒño<·Šòœ^úŒÈå”çRgÐlÔÁ<C394>Â-ry_óæ# u•Í”u¿˜»ÙŸ„ñÚh¸¨äÜq·<<6D>\xëguJ•zï<7A>KèIÃ&hÆ(‰yßCæVƒ#»Fw<46>é …T/>Uj×|â¾va„ÏÊÏ£<ù,.|YÌØèNŽ<+½Ù|¾å|÷¡W¤Š”o9”[ lj;¢¶…I¶i\á±@O?gמX{"®*¬"¬Â£rRÕØãžåqdQÕÄŸ;UòÌ¢œÛx.ë\Ö…ôÖ5ÿ„D½ˆÃËÐœH%B7qfàô€ˆÄŽ,ܵ¤0¼`eYT]ì‰Ø+«ŽìH>Z<E280BA>^<5E>q(#?›ÏÏܹ–¬á=bPÏ"<22>xî¢z«Àó _)<29>ÛåçÓš3ÛÖµm¸™wà 1¸üÇŽŸ:NГŸœºj¨ k„pó]rÑš¢uGI/VC'¥ìNøË<>p=N£[/Àm5•CÆGZ¼Z½ŸÆ Kòë÷ÝÇxH—»¦x¬[4°Ÿ³5ž¦<C5BE>#Ñ‚–&*ÖŽ<C396>Xáïÿ)ñ$!âëâOdw<64>û¼ÚÛûhn¡¢rÌõy×美¢at—ÜØ×q¤£ìô‰Ê 4¸hÆ|-Î0ªšfУÞæ0¦Ï$qbÖÌ-fy\Þí¬î5÷1Vm¢ ]TÛÝ“ÎÐ<C38E>_àp„vcnüz¿¬ÉfYÎëÝòòyÜW…_Ú\¾é覊M•Žæ•ç•m*Û\´%‡‹•
*¿ÐB[™ùiꮟº%ˆÎ‘ÒÀ(í)
âF¶qp]à>+4úìN’†+ÍÄÖX{ƒ…׬‡Â:íPþà´&â O²øšÃ1DéYZ¦W&úö¿ÌHQŇǘ…E/Ë $+Hø7«vñ¸¸¾1¯‰¼#/Ê~j¿ß~ùIèqJÙï
ü‰Ãð>ý4ï,<2C>ÜùÔËÜ®uW3Z0R­¯0Òdj(dÙÚB¹¸U=‡…%}]˜-fʵù}<7D>,ªäFé4½EÐýÓ®'rA:¬ãý­FbÙ°ÿˆ
endstream
endobj
495 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 436>>
stream
xÚcd`aa`dd s<>ôt×ö/HÍ NÌ+ÖuÊÏIIøÊq1°thÈwwÃ<ì2¿yþ¼áê•áèeý!ÃðCñ‡Ó",² ~yMDJ ÆB ¬ŒŒ<î¡q¥y™nN††z†.™é™%™U©)
xÚcd`aa`dd<14> ó
pÔö/HÍ NÌ+ÖuÊÏIIøÊq1°thÈwwÃ<ì2¿yþ¼áê•áèeý!ÃðCñ‡Ó",² ~yMDJ ÆB ¬ŒŒ<î¡q¥y™nN††z†.™é™%™U©)
)‰%‰
Éù•E™é%
Éš
Fº@ÂPGÁ=??='UÁ9¿¨ ¿(±$3?OäX<05>k@®…ó€V1±0­å`lg`fdTv;(Ãrö{¨ ë6Q™_^?ïìKe~m•ayö“Wæ·<>Z ¿×²•ýÍúmû;’ã{>ÛýïǾ›¬ù.ÎÁ'ÃÚùsÞ/^Ñï•¿ç\dïÞ<uͼ%󖮞±­{÷‘Æ7¿—HX®Ò<C2AE>­Ôý[®[=Ï'À' G¯û·0‡%ûoKÖßêßmþñ~?ú—ý‡Ý<E280A1>Y¢ê‡"¿3ËêÞ:cÙÒåËfnèÞÅñ.dïoæßÌ!rß/Éüjýõé÷ÑŸØùÊçÿú´àûõ—lºÙå¸Y çópöððýX!<EFBFBD>¦
Fº@ÂPGÁ=??='UÁ9¿¨ ¿(±$3?OäX<05>k@®…ó€V1±0­å`lg`fdTv;(Ãrö{¨ ë6Q™_^?ïìKe~m•ayö“Wæ·<>Z ¿×²•ýÍúmû;’ã{>ÛýïǾ›¬ù.ÎÁ'ÃÚùsÞ/^Ñï•¿ç\dïÞ<uͼ%󖮞±­{÷‘Æ7¿—HX®Ò<C2AE>­Ôý[®[=Ï'À' G¯û·0‡%ûoKÖßêßmþñ~?ú—ý‡Ý<E280A1>Y¢ê‡"¿3ËêÞ:cÙÒåËfnèÞÅñ.dïoæßÌ!rß/Éüjýõé÷ÑŸØùÊçÿú´àûõ—lºÙå¸Y çópöððýX! ¦
endstream
endobj
497 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1606>>
stream
xÚ=S{PSçÏ<>$ç”Ò`Õ(\SJ¬Š(©oåÒ¢(y(Ĩˆ@ŒÑ„G^Q¹Èx[‡K]mk±-m@„"0*b$h‘””µ­ÚZ¸Z-§v|t®_Â瞃3ýãü~»çì÷íþÎîR<>ŸGQ”x<E2809D>b]\âÆÐd£FŸªÒ­6äîä>$úðøsþ6|i úzI|ŽH˜#—ŒçšM¹ÞôrÍñvMå¿ÁãQQ¯sâÇaà$y3XÖOæ‰(ŠM•Ìš¾ü<C2BE>˜õåÇjJ4†Bƒ^ÃbÑÎ.Òh8o—¡¸€#<23>‰ó
u{9Ô˜4z5ºÝÚ"–õº‰ƒòòðhÝn]®D³SºSU¤ª Æ}\”tŽz®ô­pyx òùÒƒaw®FºÆP`4¨ŠtýN´”S-åTÿí±Õ{¥ÿPÔûÔ!
¨ÃÔêêCê#Þ<śΠàùy±Æ,ÞIÞOÔZê/¯H¯s^]^C^w½ÍÞ§¼-ü,ÁÛþU²I"èKÆâÝìA<C2AC>KÆÚÅþ¨û5 þƒIøÿuÍw}/"¬¾ÛÒ×jïm„!è5´¦´¦T/¤…%K²7è6*ôoC$¤6ëú²%÷ØŒ»x<1A>ä "þ §tã
ÀU€âÍá! C¶£ 0g?<3F>ý&#S·<53>U@"€ˆ/<2F>>ý«“È€l`DcÝÓ$üB¬¦=åžWÉ<L"›É ó§uÕMõ<01>õ5æcŸ”ã|ÿ
xŽs»1<C2BB>Ty¬ŸÓd™B^¾sÝúm€ÕQû#Ü<>çêá•Ž•ä7ã,<2C>ò҈¼æ-U„G<E2809E>%˜æïøÚÞÖÓÐs²·Êh45šª  ƒœƒúRc©±Ø˜gÈ3Än<C384>¹ÚÃÇOýQý2ŸÅ}‰ýCTæ½ÅýúÑ÷†NH[´ BÉ,Ôù÷·÷6]4w™/V~ úA<C3BA>ÞA°&2o³~y)
€Aþx <Øo×ÛõMÛ`D´iÚwJd ±ÇbjbjëSš4ÓÄOI¤ùd<11><>@f·?½ýôV7¡€ã¼Á¤oúÞú
}¾`ŽÒ<C5BD>¿¼eëè£ W­„¿¯QLÞÃh÷8ž¡Çç¾<C3A7>
0Ëíã¡É.šÆËä=±G $û‰ýx×­Í<C2AD>Í<>ugª-L¥°¢èýôŠ¨Š5‡6AöÄU®1×sq2l-ßñ®ö #9+p'_Œ·
ãû‰_\ceëÇGÛ?üŠ•½ùÏ(|†EâÆ ˆ;¶¶fmuR½²‰ÁZú±LÏ'ËØqb{rÿÉý.2¸<17>*B-¿½ì6
Îb0L¤¸˜ìÁ!1ºº$üg¢|ÑŠUn ý2Ä>26âªb[PLè¬?²%Þ\ѽª{~òÃEÊå™8 P(kCáÍ7W>ÙA¦À 8«º˜î›­ÝÉ|&,G¡I®]¯<>Û·´4`ÃÇ©Ÿ3x˜î|÷Jù¯@I¸N^#3¹§Ÿä±2ž“®7ÄW ÇhUœSœˆP§g¨2ÔJSÛÔ´ÙÖlë¿ìpFjœ§m§m]u¬J÷Jbâdw<12>B'军ΨCÆÚúÝê_¶ÞÙú°€ð€„<11>¿ÿÛýßmìøpžlD G ˬ8<C2AC>ÕÁ)q(`Ê„G ]û ÅÙâìºð½åªåWóÿ e :ý“¸<E2809C>V®<>F£'a.à9ÆÕà ¯eãŽ^U¯é܆Ëu:­6kO­®ÁES«Ú¢ªN…hX±/A©ÍØR÷²U®‰à;1
rÇ/ŽÏZ3!º&®-¹-ùÛÔåܴ蔌øÌøâ(`s¿~>t4f4†LÖÅìÀ„™túáOo\xÄ ÜæLˆèGÊñûùk—¬}Vlj«ð3^Ö½%K<>(° ”]¥½/†Äðøú™yånfÿŽ6õÍqdÀ¦½Y<1A>&'¥$’Ý-…YmQ[ötÂ7 1¹Ÿ/AGY±ÅX½¶ƒªlW~N~ÎöÜøÜØôüS²Óp:Ím“-MçªzXy{jÇž<C387> ƒ…ž@úPy­ï+‡}E®æ©ÿÐd-.
xÚ=S{TgŸ<>$3¥4X5
k
A‰U%õ­,-ŠËCŒŠÄMx$á•EŽm=,õê¶Û¥ ˆPŽ<>Š ZA$%¥Am«vA]X­ϺÇGÏú%ÜàÙÌïwïÌý¾{sï¥)<29>€¢iZ².6*9.=4ɨѧªôEak y»ø}(Aå¼ €? _FŠ¾žÇRŸ£Rö¨Ð%§\si×Û^®yÞ®é·(ŠŽz“Ç?§pHÍâ@Ô0•Ó4+ž.<2E>³ |å{1×j
E½†Ãâ½¼]¬-ÔðÞnCI!O:ïéöñ¨1iôkt{´Åëu“áѺ=ºb]©f—l—ªX%SŒû ù(Ù<õ|Ù;áŠð0 e1Þ<<3C>l<EFBFBD>¡Ðh(Të úE¼h¯ZÆ«þÃãª÷:øZG£+é<>èÃ4ÐGè£ôßé<C39F>éO¨Mͤ(?/ΘC<CB9C>¢~¦×Ó¿{Ez<45>÷êööºçmö>ímd ß•
®ÍRa§D:ïá f¢D:Þ!
ÆÜoHñOŒX*ø·k¡ë QͽÖþ6{_Ë CŸ¡-¥-¥f9 (*]–“¬Û”¦"!µEןã(½Ï`Ý%3€$eÅóðç8­W®”l Y²å€SºpîCù¯r2}+Y$ˆäòس±ß»ˆH2+œ!a ã©ð¼N`"ÙBf™?¯¯inhj¨5ÿ¬úWb<57>Ðs¯øØøͤÚcý!Édy}äî ëwVGÝOp^¨GV;V;PÐs@+Ê"òÿœ¿<-<,ÃtÇ7ööÞÆÞS}Õv°ƒõ`“©ÉTmäÒ—ËŒ%Æ|C¾!vÛìµ<>êWù,îËÜ¢³î/X2€¾§1tRÚí Î £¯ù¹Û|©ê`IÐ<49>ë
¶*ó·èW¡XâûÄ[Düàá»Þ®oÞ<>È¢´tmºö½R9ÄBìñ˜Ú˜Ú<CB9C> )-,šâ§$²²È& s;žÝyv»‡Ð@áqþPâ·‰ýï|<7C>>_²Ç˜'_ݶõ ö 6߆1¯V*Øß$!b´{Ï2ó_Ê„˜íöñ0äGÃàò¡Ä#Ä~¢ñ«¶®€®ú³5¶JTYüQFeTåºÃ!gò*׸ë…$ ¶Uìü@{È¿‰œºN<C2BA>/'ÚDiˆ_\SUÛ§<C39B>U<01>Ç:>þš“½å¿Qø6.ÄMA w|}íúšÄe3%™Y@Vpã$ÄöôÁÓÝd*ð/U„^ygÅžÃ`˜L pÅÂ3ÙÃ2,ruKÏ…Dù² «ÝæUˆ}2d|ÔU͵& „0ÙÿÉ~¼ñÖªž5=  g.Y¬Pdá@ ¼E·VÝZýt'™Cà¬îid{QŠL
ímÜ֌ؼØüåe!<21>ÉŸ¦~Áâ¦ëƒ«¿9 yƒÌæŸ ÄÊzN¹Þ\…^£5í|ÚÉXˆeIF¦*S­4%pMM?™cͱþÕ7`´ÖyÆvÆÖ]?È©t¯& !Nn'Ñ)óRnºi à¬zdm¡<6D>¡ß¯ý׶»Û
H8ñ…¿>øÍÆ<C38D>ïÉwaÔHԈ܊39]œ‡B¶\tŒ0u[<5B>­Îî?X®Y~1ÿúÁqÈQÎ`2>ûd%`%à†hc0úap"æžg]<5D>ž@ÉP6íìSõ™®Ã¸R±Ëj³öÖ9á:\2µ©-ªšTˆ†Uû´YÚÌ­%q¯Zå
¿—` 0wiüÒøì0¢kãÚ“Ú“¾KUÎO<C38E>NɌϊ/‰.÷›BÇbÆbÈTYÊ L<18>)gýüèæÅÇ@|a¨è§íÎŒÁˆ¤¿]¸~ÙÚouœ¼ÿBeß_6¸Ü‰B ʸUÚ÷rXOnŒÙWïe ìlWŸÕœPA&lÞ—­ÑirSJ#¹ÝJ3«-jËÞ.ø–%&÷ Éeè,o5¶köÀP•ï.È-ÈÝ‘ŸÛšÑZpºÐR~ÎA—¹Ýrªµù|u/'ooÝøó“dèÈs˜@Z¨¨ó}툯ØÕ2ýÿš¨-&
endstream
endobj
499 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 6907>>
<</Subtype/Type1C/Filter/FlateDecode/Length 6908>>
stream
<EFBFBD>yTÙ¶v!tu)L«”¥àhW먈:fÇ8
Š`1`l+I䜹›$©˜q0<71>9;:†ë8ã8^ÿ{Õ »\‡yï<79>j<EFBFBD>.ïï½ÿ[ÿZZPçœÚy{ïƒeaA™™™õpv]à:mñ`7m<37>wd¸kHðœ/çûDJ[ãÅÏ)±—™ØÛŠÕDÞ\´±HÂ)ïÕïO)zS”¹º+yvé,=¿éBž”†<°Ö”¢eF)ÌŠÍnš½0ûmÄÐáczÌ_l?xð<78>i!¡1aÚ€ÕšãÇ<C3A3>×xÇhÚv4N~áÚ€`ÍòK”_`Hh<48>_pÄPÍ??MÄj?<3F>¿6ÐO3m®ûÒ™n.š<>.n¿`¿0¯@<40>{¤w ÖG3Gëãîg¯ñ Ó¶¾h|BÚ<>àð¡Çp<C387>—&<ÔÏGK>ò‹öñ •6†hBý´ááäw<C3A4>6\æá竉Ñhƒ}#}%ödÝ?$8BBöƒÈî¦ <0A>ÐŽîNέ2F¬öŠ<C3B6>ø†kɶ&ÄŸœô ñ‰”´ðÒ‡k"ü¢#$>Þ~_mxh W áKH…†i<E280A0>"D†kƒL܇hÂü¼Â|ýÂ<C3BD>t%«˜ôÓÈ´ö
Œ1~b<ÕÎ_îè?Ôäƒÿ?¯´†Š†ÄJˆfŽFŠ@¯°<C2AF>)ÊLÙ×ÜŽ<C39C>ÔÁ¡ãlÕrM ÊRP4ÅP©N”%eE}F©¨ÎTª+eM±T7Š£ºS=(ÊêI}Nõ¦ÔOõ¡úR_Pý¨þÔÊŽHÙSƒ¨!Ô—ÔPjA<>¤FQ£©1ÔWÔXj5žš@M¢¾¦&SS(ÊšJM£œ¨é”3åBÍ fR³¨ÙÔÊ•r£æRîÔ<j>µ€ZHyP¨ÅÔj)µŒZN­ <©o¨%Rw 䟘è0«Ãš‡ÌÍÌÌÍŸYP½-\--°"@ñ=<3D>>§œ§,b¦„¹ÔëèÞ±ªÓ¸N;,5[­(«h«—Ÿ¥¨h•«êvguç²Îb—Y]¶w]Üõ¦u®õìD6—ýµ[L·_¹œ ÁíáŽq?tèþC·'mXlÛζù¶÷{ò=7õ|ôy|/E¯i½ÎôžÞ{¿Ú_}ÈÇò÷5šïûØôIè󬯣
ˆo¸z\\¦O®F¶ÕHo(ØRÅ6§ºjUó°ÌÄž r/èj}IEyjI ?®„°¼ªtC²MDi¹±q8Òf8½<38>¬äRJ“¥õô¶õ tLjzb>½š@§bkÅHÓÂ<C393>tS¤)“ô©u9*ÖåWo€Ht<ËMË%” ȶ•èòª+Éú éµ`ÍIä†Óz°V¨†<C2A8>«8:bZkP1Â;º
ì5Ø#ÞáƦÌuGÓ<47>_uÀŽõ[ãv¤\NºX™¹9±.¾b
¸z~¥fï9¢û²çTg$"&!=5†Ÿ¤Œ)I­(/ÑW«+•[ƒ›#šrliZKå[Ãå³è!:³7pcHÍ:Ý´
wCTñú2†½UžP‡¶2gϽ¡¾ˆÎäÇg”#Fú¿ d‡TgèÔÄR)¹ÑÛ#J= ™SJvNuº>Qb¯V%í‡ýÀJO3Pü7‡¿ ™±p<C2B1>Ëéׯž9sõÇigÞÏâØ>¿e+ý|W®ð;pôØþýM<î"Ž<>¼vSvÐ××S:xtÿ<74>& 8†+/,*Fz¦4MŸªÎBY¹Y¹-<2D>±Ê&1+3¥0)úT<C3BA>:åå3*ð!q4<17>3Ù(Ë6®<±xOW\Zý¡šÄÍÑ‹æâ,r&¥§Ç†:Ᾰ#²Cýö|q+6ûëSJc(ÕxT˜ŸSä ]ߢ?ÑŸ»~»ªü¢¼|TÈRõÉj\4‡I„TrJj2<6A>²òrò3oâ®;í¦<> g¬ÊÉÌÍAYL²C¥¨¤¤jÛ-èp¢wk~w‹ˆý©úDÄÞ-˜Ãnq‡m¥ççäe!ÛäT‰jŠ.U—[˜k¶^°qGÊ´5ƤêJ<1F>…Ícl¡K.ÌÖ![ƒ^¼(»8«dÙÛCŠŠÁ¶4µ4E<34><45>Òs3s°í*à•&WB…`fä*8˜A×´r4<72>gÀJºý^‰g(ÛÓf`Oº=ÚˆÙ¡ÿ<34>äj¸ö,i`Ê5U|­†ó
ñ÷ß|€/¥ìܾ_Ðv_^%F½ÿŒ+ÔåË—¦èSÔ)(3+=ÿð×1p
Ñ<EFBFBD>¸¨°¤ â1¢B€FÁ\Œƒß85(lŽÍ§`
<EFBFBD>RÛ)ñÈû˜s0¿ŒTãg¯8t¹úúΦMõõ5‡Ð!T½I»seµ šÍŒT¢Ù1.A+#µÚh/ä…´5õAM1×ÑeF…Ÿ=ÄrwEîóâ2I@&Û¦)I@êò óÀæ<C380>MK9æ•Ñ®¥án<6E>ó4!!î¬Åé‚¿Àþ : \<5C>òì±Kç|]à³Úè<óbÌ#{µZâ¿<:<1Å0©z¢®VT^ø®ñ:bî_ssægtÈ—Ã':L˜ÊÌU²7Dõ÷&ÿ([-c-΢ /±<âòóòóòÐ…-ûO¡³Ì<C2B3>S®Ù©£¥q¾AQq 1­©%ZA~iÙŽúãµgóýùe³xäâë—»1±)m^do¼~<óëÉSf ç 5+ö¦eåg &%55…G‰å‰{bO…M<ŽPþúø <0A>®¯¸ðõnɈÐM€?H€X×î6EiƒMÓB·zé­¼Âø&ªÇÒ8ºÅF±B u‡ãið…?u4Ñ 0‰¸Ç^€<>ÄCóÅ dÈb»uD½"T”_V|hÓÃAÄ<=ç:²ïŒiöü<ä±yùô£­©˜T¿;êÄš ,ÿö3Xƒ…Ããþü7È?uI”wpB—Z)<29>z€£„ëtÈärkr7 =º\õÝö#Çï=<zÕ êìÒL]fanÁ<1A>ÞPP¹ŠŸ…f…-Zé8gõO{UÐéõý¿õvÊÓáj'äáã=ž)öàꎪ7TîÞ{pã>ÄÜ<;sÒ˜ù3y´¤1ôi¶åelfT¹µ¢ ˜ý.ÀbÒ™â!<0E>n)%É™<C389>²mÛШ¨¨¨ÆŠ•6WZ:NQF·¦r<C2A6>ºŽH<C5BD>µ![<5B>êU [ȃ}-ZÂUîÖÞ]‡ÑEæç ÷žà0B<30>Üv¯ºÀ°ï¦j}£™Ì §“Þ½{úðµ]õývê†}íUÜý œf¹-v˜2÷ÔÕÎÜçÙwxŸÅ“Kó§8Îœ;q¬ ÷î^>÷˜—øj%+
pô€¹¨…¿¸¼è¼x”ŠfǺ†|³ÌaÒŠ)(Ť¥eåe礥&Gï<47>;Ì_AW¶|Ût÷RÃ3 ÓÆ<C393>
w4å+Lõ¿?ö…új>(<f2š¹ðocâãÖøDù#fúü«Ÿ<>½z—¿ŽNzn[<5B>Šr#ˆ3kÅ^ÿ”R ™¬ÖwìÛ´ƒ€Õm¨çÄ18¾(»(§Ù£â‚âü›ü_¨8«8µòÐ!<21>-*È-È!ÿm²Š3
‰‡PVNf6© óI§`&ÖÀ<C396>2Ôt7¡¦èŽû}zG%n!b´Œ<C2B4>øÌÌüld<64>2²²3r²mr² >“:P˜¡ÏÀKm0y¤ffe¢t[RÁ²ó³ó²m
2J²Š‰°…ùEŒÊUØX ¬ òR<ý]€ÏID}EÐ~<7E>1-ydH/IÊg`§òñb<ÁÙ!j<V‰œª]÷.Þ»äHøÄܽ¿{W)©š|:ÊÍMN‰ŠñNZ…¢ÕÕ¡cÏ¢ ŒVÍå—/®_:]½BÙ?ÏÑ <0A>eœÎy< ±ZšWϲHÊNÈMFÌ<Ÿ†Î~ÀKÐa'@±’¸sg°<67>bŠÉ
þ4^*Ö(ð*Ù¶<15>]Z"<15>ô'¡fÝ v
($°D“*Ñ¤Ø <20>5Ä àGâ³Ä6<C384>¤x<17>ó<EFBFBD>Q8O¿¸{ã)<29>®­:6vçùÝ[÷¡“ÌcÇKƒÔØ`:ÕL Ø<>?§¼sÆsž«Û7_ñØì•Q}úîè}ÆuÁR'µ*N™Zè$¬©µ¾$ˆ<>¤d  ¹<15>sëf¢È}<7D>çòU+C¦#7fœ<0E>qg襾Œ.n9Þ´µ®¬
•2†4]:<3A>DVzšÇì%뜃;Ù½+þ–,~ æêŸÐ
ÝòâJÒÊS!õ<>`¡d{™úR©"³ßøQ0ÿMà´2­CiàÞ€ôåÏ(¡Ï°Àœ‡šÔÓBK$'FÂÊf´/¾aõAï-sÑ"fª²Ï(ûÁêV»>­ý<C2AD>1láOa½ÀþŒbþ²>z˜úOÜŸX°É^êyË+Œ»|£©n4·DÊþÁhY7c‰¯)M|ÍZùBd.çÚF×È5!ÑÄõÚÇ\ý;®<>@W—~¨8jšøæ:¶¹ÒR`ÿ«À<C2AB>«<EFBFBD>•¦E2<D/X·:m1qX¿QO G‰Îo¿|DØ¿¯±ê ú Ýö.\[œö¡{¡dU5º£š JöžçÞ…Õ3ÑL4/ÂÓkéò@GäÄ8è<>þ0NýºZ}¾ž‘¶µ¥šAŒ€ã<de¸]UÚ+ÅÈ-².ÆJÙØo¿æOïni‰ô¤M<C2A4><4D>ÆtÊâè¶kmEÅx™MnËmÒI:'Óûm™ùv2]Œ®\Ç=ºó*ðÈÜ;øÛаÐÿä ƒËl*eŒ:µ
¨O¯áç+ ÿžÒ¤Îdúßùz²‰¼C»nl%‚¬'úü]f”Ówo‰,õÅõÜ£ñVe©Û‚¨"”’þF<>.G×é(ãn/ë’>r<><1D>‡â7x¼Q üÈÚ<>¿þ`BG1RGÃ(ü‡¢<E280A1>1Wo<57>ˆÈAœXS/³„½ÉRw[|h|NÌSôùÈ:rƒLáã úÐp®%O!áZ‰`vRG;%ã0æqÜ<03>Çã<C387>üzc`2é×»ã>¼·0¿`÷ý‡`%V`úKP4/É¥±"Ì àBK!ÇAèŸî¾|9îv§Óÿ»l…8 ( xüðÊçióGó*¬H ýƒ`m”˜<E2809D>†s„¶ºðè†`ãqèA4hÓA<C393>pŸ§¸ Ða#fÙ¤gfe tÆ8¹ Ò ä.»f؉¶ Êìm) [¾#Å<>]‰˜Cßíª-“
¥qÎÍ\QZ~¸ža£ƒ …Á(
Ååe0ÇÅçÜÿÓþĶ£ÑhŒBlèû«<C3BB>x<Ç_1gMQHO€>!ûæ~¹»éºÂ<wÔ¬¼ÿ]°C¡Ä—ÊÛ×<æΞ¸Øž'Ž «Ë$<24>ûEˆ9„È#ì6qžXÁy žÕîˆé;iÆ(2GÔøî‰Ø¹7éfÒ­¤<C2AD>uq »s{lÕZ´šqœî1T=9žÌ¾š[™¡ûpï<70>IMšÙŽ½;”ìNaÅù°¤#·zvó5<C3B3>NFö­ ª ÑM.w- Ó­«bØmaU ÛÑ.æêÅã<C385>ÕÐEϹR•û€—ï”lwyƒ¿jÿ)eL`4Û Ráš0U§O.«(ÖÕ¨<C395>nY<6E>iS¸["ûÊ ²Ðd)Ä3³7­9”E`À8ÀTT¤GS(-#ÁøÑ]ü3=búôQ#<23>oþ¬†Ÿï~”h1©m§êÉ)L?
°øñG ‰Àµb.qpm÷³4øgW+ùÔâ©tD§µßoaÒìdÓØMŒT|/;4ØD}ý<>œªû%”b?°h駸LGo<>Á× |Ñó[B±™ØKáJc^ ÄPÅKžÚŽnhGʼnmD[17<31>$Èû%^‰‡ÁJÅaÛrZà±;FŠXYXö0<C3B6>žMÃ8XCr ÌtÂÆt"¶]žzâç{PÂ<50>l$ãc¥AW^¢•8¶cÜAÛãõx¬Wì—É$“ºNkÿM,ô¥U¸ð¾gû¥Á’ú¯@PÞÑ*ö^Í¥Wd¦1'Eš¢³ò²
Ó@ºù(I(Ê*ELi©¾Tºª*Ê*aÚ©/“ÆqF/%$ÅP¿$<24>ÖþþšÿVÄvÆáéi9Y(£u,Ô¡¢W°Ã®%)E]+eHLºž0Eî/‹¥ï-h•Ø[|Ãa[úã´ÒX]f9²­,/#sAAna.à$€<>`Mrê¼à *6L¸W&UÙx¨¥o¹œªöG³F'ge¤£éÞ¬T<C2AC><54>
Z>¨Û^¼1wN¬YÆ;)Ý+VŽ¨ë÷Ñ<:åÒâ—êèÂÖgvO£ÅŒ9áNˆqö¬?uéöá?ø#èXÆÞÔ6YÞ*oD<>]ýˆChv‰©W\ØÜRãA³ËÚW^=§Ù£G§_ÐÞ€æõè
]†¼Æ*ž=숬]êÄ€ówÜ?LøÂ~ÂøA<Û8pÒã7o>ú‡1ÿÍm­õSþ<>À~/®­8ï½5nDüžƒ‡`Üí×aЃ¿Š®ÖžlØ^³¡•1dTJ!ÝzvNZÚâå®áSÉY³É÷~‡÷ïAþ)ºåU¸(?¶8]Öó<C396>«iÅ°hµ\ÍK¼7šü¸˜kTSÖ©%ÓËnÍÛã@h[²Ãdfx=,y6ìºÐpô&3ò•Rî ‡Â[î̓‰_ð컉ìí&=z+©(ñƒ© "SX,çPSvMž€'O&¤»Ù ÅŸáîöƒÏ_€ÕÑьϔæ<E2809D>LŸµS#]¥»Ò‰7~gê_nŸ{<7B>^£»î•Ã<E280A2>és<06>hŽ%Ñ\G¬ódÉ2ï"}¢±áªz:<3A>½-ûXˆ)ÓëÊxTšQT°¶Ø¹Ä1#f/šÊ»<C38A>2åãsü\†HpÓÔ•`gž¤]!ÔhºŸŒ¦{(Î!#¸çµE;%?(†~‰̼
ž½s5ïj¼Ê`Néâ±ÐE<C390>mš><3E>öU5ìÛ¹»|¶Ÿ8°YÉöm×<6D>ÄÜ
<)”{uÇqÐP‡¡Cî½úõî½_<C2BD>uÛè>cÝÞ"Õíñ]KÍÊÖ·Òô*#¤}h[<AGÊ›/o'£<>íA´)}sôõåÒ_0òTÊq²¡=¡€~4óüPµòŠXâÖfùw¿YCÙy_<79>}Izñ1%S¬~ŽGËÞÿµM£iöMŽøçþÅy£9ÅjBÊ à|)cˆ[*]-©ÆÝd8úÅå+/yqn<>
y­t>Ä‚õ%)k‰H®0ƒk:3°³"äÓèïIcXE劣²°én:½‰HŠ±<>B´bbʾlÍý7²•WÆ:QÓ>š¼“ý¡:¶Ôüs´
OâÉðÆç Lþ±7ÀØTÖ½³ëñs-ÍÞh[!N53E&{MKàÄÔïZíËã²AÚÞngȆ]küÈ´ôÑf}~Åñyjo´&Êwiä±µW!†u÷BÁ1ÚåL»|WÞzKÁF„H„s<E2809E> w…çi*„ŠéÝB©aƒ<61>ïöÍ;J÷£¨&£ný¨ò0cÔie5“ßäÐß»œ©fÝ]Q@ô¼ÙL+RJcN'ã00<30>Ãì —º¾,X¿ý¨€µûîF†€ßOì;pì„~_Œ# ôäÑoüG©Ûî/ ¸<>gûSsK5qïK“P²:ôžÔ릙g¾'8ßùÕ/öË/_à.ê)hiè"g†]Χ¹7ß“œ<E2809C>è`?pÉÙ‡÷þÁÿ+t¼oƒ/xέ¸ºpçd]† ÇØòÕ0èL ã:³³‰@G¡½R. {Ë$ÎòÚO¬þ¿QÃ%” ±Q<51>v_ß{õêÁÝò­Ž ¬ÁGrbž”µ ”XšVÅßÃÏ›Þà /]Y¹±Éq<C389>u4;:¼iØ܈6¡Ú予ôüܺ؊u"õÁh Z2t,ÓÚßÓR]{'¬o„J!ªô÷N"Ç­Þå¹a>bì§.ŸÅ£Àê í1Ûc·§ßM;<3B>±-}kéï·ÅW…¡fÑLßQ_9ïkR—(ËÓôIÆî{\koßz×c ½ý!ÿ±Wˆ+OÎÜçQCt}àƵý n%£ôù‘¤·<C2A4>*K®B•Ìá3»ïªï£SÁEžùq%éemuñéí¥º˜˜–k¬S¿ `]kýI„¹<03>¥²ýª[:*M-ÞD;\\þë߀޿ÃødzL”<4C>éỀt«öœä¡B•òF?Lr€ñkàýõg#îž,º¢µ¢Vʦf\A³<41> çºÍ@ÌŸƒ'x8-ƒ¢f²=éÛÅ?¨Y§«èâöÓÍm¹j?u‡ ¢•B<E280A2>,ƯÓØ?WDÓx<W\‘õâ²{<06>†I-Vdį%yb&ºvBÖ|º¯=A;ã;#A§XB<58>ÁºipGñí§ÖÐO Í“ôOPö—)>ˆûB8 #%Ÿîå<C3AE>Ѹ7îŽ{BwEÓ§ç<C2A7>ÆâxÁûTÒÚšè¹Ðëía¶WÌút·Ÿj¬GÞÄïV ˆc7:áþ
Ì~|ðáƒY4èÅjEŧ…n¦ñü<14>ƒ§ŠS²JÓ‰JúƒHDì%å/XJÉwƒM×™§¡P‰ñKE€ØéµéfsÞ©„3ðR¡jLÄ,ÕoÞ¶» &¿¤U0e©ºø…«Vº«±£ù‡‡dÇ妥£D” Ë¨ÌÝ0dÏýðÊÓHK¤FéEÑùk "¶¡zÈGBòÆ5u{ê I_¢]„É®hi#B×fG“Î %0Iú´ §7<>WKÇ÷ÕmÙ[P™§+Aåˆ ®qyá[Ñ^‰ÔùUM ãSÓÔ(¡$³&gwöæP¤•˜#oCÔžð5áÉQÈðX-4“0‡'\
ÊÊŽ<EFBFBD> [ŽâP¢î½‡ãukѯõ]‘–€Ò¤?<–¶#ú#g ú­¨
Õ¤lYiÑƤÝhÚQ]/TÕêÊ<C3AA>Nj•“Õªõµâ˜ZÚµµ´º“¹¡ÿ[u<ÜI°<le%X}&¾îö?<05>
Š (ˆ³Œd[I”œó!wÓ€$³©T0æ1gGÇpgÇë¯:a—ë0ï½S Òåý½÷ë_K êœS;ïoï}0£,,(33³®® œ< v×ûDE¸…†Ìþrž`”´5^üœ{™‰½­(QÝAäÍE$œò^ýþ”¢7E™«»g‡ÐÎÒó.äIiÈckM):Pf”¬Øì¦Ù ³ßF >f ç¼Eöƒ® \©1~üx<C3BC>OŒ¦mGãä¡ Ñ ¿¬ó
öª™ï﯉\å¯ Ðùk¦ÍñX2ÓÝE3ÐÅÝSãââî¤ñˆò Òújfk}ýC"üí5¡áš Ö<17>ohˆŸ6R1Tã¡ñÖD„ùûjÉGþѾþaÒÆM˜x°6"ü®ÑFhýC"ýý4¡mˆoP”ŸÄž¬„†DjÂÂCÉ~0Ù!¤<B#"#|õaÂÑÃɹUÆÈUÞß-ÙÖ„<06>“~¡¾Q6í{ÞÚ<C39E>t¤ÄÇÇ_ã§<C3A3> òŽ!| ©°p­Q„¨mH ‰ûM¸ w¸_<C2B8>®d“~™ÖÞaaA1ÆoC<6F>§Úùk##üƒ†š|ðÿç•ÖPÑ<50>X ÕÌÖHÑäþÑ"E™)ûšÛ±“:8tœ¥Z¦I0#áBYP
Š¦ª#Õ‰²¤¬¨Ï(Õ™êBu¥¬)êFqTwªeCÙR=©Ï©Þ”šâ©>T_ê ªÕŸ@ÙQ){j5„úJ £†S#¨‘Ô(j45†úŠK<>£ÆS¨IÔ×Ôdj
å@9RS©i”5<>r¦\¨ÔLÊ•šEͦÜ(wjåAÍ¥æQó©”'µ<>ZD-¦PK©eÔrÊú†Z,EpBþ‰Ù<E280B0>®Vw8dnfž`Þlþ̲èmáfÑh<C391><15>Š¿è¹ô9å\eÃ0%Ì¥Ž\G<>ŽU<C5BD>ÆuÚa©±ÜjEYE[½ü,EE«ÜT·;«;—u»¸vÙÞuQ×Ö¹Ö?°Ù\ö×n1Ý~åzp.\$·‡;ÆýÐ=°û=Ü{œ´am²m;ÛæÛÞïÉ÷ÜÔóÑçñ½½¦õ:Ó{zïýêõY~ Ëß×j¾ïcÓ'¡Ï³¾Ž* ¾áêqqA¸ÙV#½¡`K=Ûœêþ©UÌÀZ0{‚Ƚ «õ%å©%1üHºÂóªÒ È6e¤åÆÆá(›áô²ZgH)MÖÓÛÖ'Ð1©é‰ úôjþ<01>Š­#M ?Òq8\¦LÒ§Ôå¨X—_½¢l^Ðñ8<7-—P2 ÛrT¢Ë«®$ëOL2L¤×€5'NëÁZ¡nâ\èˆ-j­A!Äïè*°×`<60>x‡MCþÕ<C3BE>;Öo<C396>Ûr9éZbeææĺøŠµ(˜™íæõ•š½çˆfìË:œS<C593>Yˆ˜„ôÔ~2¦$µ¢¼D_­®Tn iŽlÊa°¥i,•o —Ï¢‡èpÌÞ <C39E>¡5kuÓ*< ëŠ×—1ì•uå uh+söÌÑêèlPQ`~\qF9b¤où JvHu†>AM,•’¸=²Ô«<C394>9¥dgW§ë%öjUÒ~pجô4åþgûÉ ’¹ 滸œžýê™3Woyžvæý-Žíó_ºÂßoÅrÿG<>íßßÄã.âùÁk7eýü¼¤ƒG÷hâÁ€c¸ò¢b¤gJÓô©ê,”•›•ÛÒ«l³23P
“¢OÕ©óQQ^Q>£_GÓq9“<39>²lãÊ+‰÷tÅ¥5ЪIܽh.º3)(==6Ì wðÃê·çëX±9@ŸRŠC©ÞÀ£ÂÜüœ"gèôý‰þÜõÛ Pååå£BÆ<42>ªOV« à¢9L"¤SR“y”•—“ŸywÝi‡0…4A_8cUNfnÊb¥*E%%UÛnA‡Ðý½[ý» XDîOÕ§ "önÁv®¶=”žŸ“—…l“S%ª)ºT]na® ØzOÀÄ9(ÓÖ“:TT¨+}6<>±….¹0[‡l zIð¢ì⬠dlm(*.FÛÒÔÒu6JÏÍÌÁ¶+m€Wš\ ‚™‘ÿ¨à`ÈÑ<ž+èösxž¡lO˜<>½èöh#f‡þÿÑì«9`àÚ³¤e€)×Tñµfp Î/84 `gȾ”>°sûþ}ÁÛýx•¸îýg\¡.¯<>X¾4EŸ¢NA™Yé ø‡¿fÛd<11>ˆ<EFBFBD>Sˆ~ÄÀE…%Œ*^<10><11>4
æbüÆÁ¨)@asl>Sx”ÚN‰GÞǘƒù} ?{Å¡ËÕ×w6mª¯¯9„¡úèMÚ<4D>+ª]Ð,f¤ÍŠq ^¥ÕF{#o¤­‰ªnŠ¹Ž.3*Døì!–»+Šv—I2Ù6…HIR—_˜6‡lZÊ1¯Œt-• wÛ„˜§ q<>`-NöoÐYà
”g<EFBFBD>]:ÿã3èŸÕî@ç™cÙ«ÝÑüЀeщÁ(†IÕu ¨¸¸°¢òÂw<C382>×sÿš»3<C2BB>¼¢C¿æà8ÑaÂTfŽ½!ª¿7ù/PÙjkq†Mx‰<78>à—Ÿ—Ÿ—‡.lÙ
<EFBFBD>e~œrÍN½-‰ó ^ÓšZR ä—–í¨?^{1ߟ_êÊ#ïP?ï˜u)q¹KÒæEöÆëÇ3¿ž<Åu8?ͯY¾7½(+?1)©©)<J,OÜ{*ôhâqÄ€ò×Çoxt}ù…¯wKF„nüAÄŠøË
¾æp·)²Hl2˜ºÕKoåÆ7Q=–ÆÑ-6ŠåJ¨8ü¡¨£‰¦ðH€IÄ=öl$š'^à CÛ x<13>¨#ê¡¢ü²âCŽ"æé9·}gL³çç"ÏÍËŽ¤—5hMŤŠøÝëN¬>÷-ÑÀòo?ƒ5X8<îσR¯“âNàR+¥S¯p”p<E2809D>™\nMî¤G—«¾Û~äø½‡Gï£T<>]š©Ë,Ì-"X£Ój+Wò®È5|á
ÇÙ«Æ Ì0xÚ¬N¯ïÿ ¨·SžW;!O_ŸñL±'WwÄP½¡r÷Þƒ÷!ææÙ™“ÆÌéÈ» Å<C2A0>aO³õ(/c3£Ê­ÁìwŽ“ÎqxtK)IÎ ”mÛ†FEEE•0V¬´¹ÒÒqŠ2º5•kÔ pD
¨=ÙØBìkÑ®r·öî:Œ.2?O¸7xðjä¾{åÍ@†}7Uë·Íd=<3D>ôîÝÓ‡¯Õèªß·S÷0ìk¨âî_˜ïäê¾ÈaÊœSWo^8sŸgßá}O.Íâ8sÎÄ ®îݽ|î1/ñÕJV$àèsQ qyÑyñ(ÍŠu ýf©Ã¤åSP4Š)H)J+ÊÊË$ÎIKMŽÞw˜¿®lù¶ég¦<>î4hÊW˜êì õ-Ô|PxÌd4sß$ÇÄÇ­ ô]€˜éó®>|vöê]þ::éµmlA*Ê-Ž$άPJ<50>bZß±o_ðV·¡žÇàø¢ì¢œd[ŒŠ Šó ~ â¬âÔ" °ÄÈC_TX„t¶¨ · ‡ü·É*Î($BY9™Ù¤&Ì#<23>™X?ÊPÓÄš¢î÷鸈Ñ2â3 2ó³mÊÈÊÎÈɶÉÉ&øLê@a†>/±Áäš™•‰ÒmIËÎÏÎ˶)È(É*&Âæ0*7ac-°ÈKñôw>'õAû=Æ´ä‘!½$)Ÿ<><C5B8>Ê_\n ÇŠñg‡¨ñX%rªvÛ»hïâ#s÷þî]¥¤jòé(779e]ŒOÒJ´­ª;Ü{]``´l.¿|qýøéêåÊþyŽîh,ãtÎó‰ÕÒ¼Ú|æ<>ERvBn2bæú6œ¸pöð^;šˆ•Àƒ;ƒíSLV€á&à ñ±F<C2B1>Wʶ­hìÒ¥¢? 5“èf°S@!<21>•$šT‰&Å ¬!NŸ]$¶y$Å»œ§ŒÂyúÅÝOytmå±±;ÏïÞº<0F>d;^¤ÆÓ©fZÀþøÃ8å<38>3^sÝÜ¿ùŠÇvx q`¯¼ˆêÓwGïÚ´
2nó—8©UqÈÔB'au­õ%Aì$%c¸XÈ-oœS7Í@­\:¹3ã”øsèŒ;C/õetqËñ¦­ueU¨”1¤éÔé$²ÒÓ<g-^ëŒÜÉîXñ·”`ùók0Wÿ„~XXèžWV†˜
© %ÛËÔ'<27>J%˜ý&À<>ùo§•iF÷, /F }æÔ8Ìt žZ¢81
¾P6£}ñ «úl™ƒ2S•}FÙV·Úõiíïpˆ 
ëö¿`<“ô—õÐÃÔ·xáþÄMöRÏ[^aÜå[Mu£¹%Jæö½¸F˺K|MiâkÖÊ—"s9×6ºF® ‰&®×>æºðßq…ººôCÅQÓÄ<C393>0[€<>µÐ±Í•û§Xþ\…¬4-”àñ zþÚUiˆÃú<C383>z½ø;Jt~ûå#Âþ}<7D>UgÐOè¶Oáâ¼Øâ´Ýû %«ªÉÐ%ÕLP²÷¼ö.¨ž‰f¢¹^ÞK9"'Æt@ô‡qêïÐÕêóõŒ,°­Ø,Õ bç)+Ã}èªÒ¶ÜX!Fmu1V²ÈÆþx3ø7zwKK”mê„4¦SžXk+*ÖpÀËlr[n“(Ò9™Þoˌ̷“ébtåZîÑ<C3AE>WAGæÜÁßØþhâ7Ÿv€'„pXjS)cÔ©U@}z ßHã=8_ù÷”&u&ÓÿÎדMäÚ¥p`+d=Ñçï2£$˜¾û{KÔ`¨/ú¨ç<1E>·*ÛHÝD¡ô<C2A1>ôG0t9º(Gw{Y—ô{ìh<¿Á#à<>bàG®Ð~üõ:ŠQ:Fá?mŒÉ¸zƒDDâÄšz™%ìMºÛâKãsbž¢ÏGÖsd
Ñ—†s-y
×J³“8šhö-‡1<E280A1>x<ä'ðРJ“I¿Þ÷á},€ùÓ¸î=Ó_4 yI~(<28>Z
<EFBFBD>8zÐ@ÿt÷åËq·ûð8<C3B0>þße+ÄY@Áã‡Wæ»8O7šWa¥@Zèk£Äl4œ#´Õ…@7ã<18>;@¢Aj„û<Å]€áj“ž™•<E284A2>ÒãäV€H3<48>w¸ìša'Ú‚*³·¥0lùŽCv%b}·«¶L*”Æ97;h}lú:”ˆÒò#ô lˆ, AëP\Nps\|Îý?<3F> @l«1<1A>Æ(äÀ†¾¿êˆçsü%Aôèºoöá—»Ž¡+ÌÓq·IÍÊûß;Z@,|©¼}Ísά‰ìyâØðZ±L¹_„˜#p@ˆ:Ân犜·àUí<55>˜¾“fŒ"sD<73>ßžÈ<C5BE>Q{“n&ÝJÚ˜QÇ°;·ÇV­ÇéžCÕÃãÉ쫹•º÷˜Ô¤™íØ»CÉî–Ÿ¿A:r«g7_óèdäa¿ºàšPÝär·ÒpÝÚ*†Ý^•°íb®^<þXý]ô*œ#U¹xùNÉv—9ø«öŸR¶ÁD&H³<48> ® S•qú䲊b]<5D>èå˜6U€;0±%ª¯ * B<C0{ÓšCYŒLEEZq´1…Ò2ŒÝÅ?Ó#¦O5ÒùæÏjøùîG‰“ÚvªžœÂô³Ñ š\+æ×v?Kƒ?iqvµO-ŽJGtZûýö$ÍN6<4E>ÝÅ(Å÷²CƒMÔwÑÈ©º_¢A)ö~ŠËôw„ð| ’Á=¯% ›‰½n4¶hé5_ S¼”᩽éè†vT|.<2E>ØF´UsÓI¼_âx¬P–±í §.8{`¤ˆ•…eÓéY4ŒƒÕ$)WÉL'lL'bÛå©'~¾%8ÁF2>Vtåe)ºX‰c;Ƥ±=^<5E>‡ÀzÅ~™L2©ë$™6*°ößÄB_Z…»ï{¶_\à^Ë(©ÿ
µé}­aïÕ\zEfa*sR¤):+/«0 ¤<C2A4>„¢¬RÄ”êK¥«ª¢¬¦<>ºñ2igôRB¢Q õû iíï¯ ñoEÌagž“…2ZÇB**();p³;ìVRôѵR†Ä¤ë 3Qtàþ²XòÞV‰½Å7¶¥¡?N+<2B>Õe#ÛÊò22äæñ<E28099> <20>NØÖ$§Î > bÃűˆ{eR•<52>÷„ZúË©¡ê䚸 :9+#¥H÷f¥ê|THÐòAÝö⽈¹sbõRÞIéQT´tD]ÇxŒæÙÔ)—½TßD¶^<Ë°{-fÌöŒpBŒ³Wý©K·ÿÁAÇ2ö¦¶ÉòÖ(Ë&Pù
ìèGM½âæOš]Ú¾òê9Í=:ý‚öŽ4¯ß@Wè2ä5VñìaG4Í'œ¿ãþù`ÂöÆâÙÆ<C399>¿yóðÑ?Œùo&hk­Ÿ
ðö{qµhÅùìõ¬q'â÷<Ûàn¿ƒüUtµödÃöš Õ¨Œ!£R
éÖ³sÒÒ-s˜JΚM¾÷;t¸:ðOÑ-ïÂ…ù±Å鲞o\M+†E«åj^à½ÑäÇÅ\£š²N-™^zkîBÛr<C39B>&3Ãë`ɳá÷Ð…†£7™¯”rÑ8 Þrog÷ØMœ`o7éÑ[IE‰L`™Âª`‡š²kö>™xr0!ÝÍn(þ wÿ³¬Ž6ˆf|¦4‡dú®™å&Ý•N¼ð;#XTÿrûÜkôÝõ¨nìHŸ 0€Ds,‰æ:b5˜+K¹é<13>Ð<E280BA>ìmÙÇ2ÊGL™^WÆ£ÒŒ¤5ÅÎ%þˆ1káTÞ}”)Ÿãç2D¦®;“ô$íÚ0aFÓýd4ÝCq6Á½®-Ü)ùA1ôKÌ`æåPðì<C3B0>Û¨yWãUsJÏ.jÌÈhÓô ´¯ªaßÎÝå»<C3A5>À°ýÄ<C3BD>ÍJ¶o»ãIaÜ«;Žƒ†:8 êpïÕ¯wïýj¬ÛF÷ëö©nÿïZjV´¾•¦W!íCÛâ:ÚPÞ|y; l¢M飷¬/—þ—RŽ“ííô£™ç‡ªÝwäb÷6Ë¿ûÍÊÎû ìKÒ<C392>áð(™b<E284A2>ðs<Zöþ—¬mM³orÄ8<>Í)VRfç C¼Ø2Pé²téL5î&£ÀÑ/._yÉsqƒLÈTÈk¥ó!¬/IYKDrƒ˜<><CB9C>¡ŸF/ûÂJÒ(÷P•…MwÓéMDRìˆí¢åSöekî¿­¼2Ö‰šöÑ„à<E2809E>ìEб¥æ?˜£UxO†7¾a²ô<C2B2>½Ħ²î<C2B2>½X<C2BD>ŸkiöFÛ
qª™)2ÙkZ<02>lÃþ³»·4 ¦~×*?ß<>uÒöþs;ë@6ìZíO¦¥<C2A6>6èóË<C3B3>ÏUû ÕëüD[³y%bXo£]Æ´Ëwå­<C3A5>lD¸‰D8™pWˆp^¦Bø™¡˜Þ-”6ðnß¼£t?:€j2êÖoYWnŒ:­Ì¡fòÜú{—ó#Õ¬‡
Œž;iEJiÌéd¦q˜ áR×7<03>ë·ÿ°vÿÀÝÈðûã‰}Ž<>Ðïq„ž<ú<>ÿ(uÛÁý%÷1òÌajn©&î}iÊSV‡^Ø“zÝ4óLð÷ç;¿úEÂÞ`ùå ÜE=- [èÌ°KÁù4÷æ{’³ìN"9ûðÞ?ø…Ž÷mÐá ϹåWìœL £Ë<C2A3>áØ<06> t<@gv6è(´WÊ…ao™Ä¹C^û‰Õÿ7j¸$6J0Ðîë{¯^=¸ûO¾ÕA5øJNÌ“²¡cSÒKÓªø{øù`ÓÜ á¥++769.°f‡C‡7 Ñ&T\YžŸ["ªžª>C[±vS”>-FKC‡ŽeZû{Zªkï„õ<E2809E>P)¬k$ý½“Èq«vym˜û©Ë\yT¼=f{ìöô»i§3¶¥oM ýý¶øªpÉ,œé7ê+ç}Mêeyš>ÉØ}<7D>kíí[ïz ¤·?p"ö
q…âÉ™û<jˆ®Ú¸fc€Á½d”>#?ªôöëÊ«P%søÌî»êûèTHW~\IzY[]¼Az{©.&¦%ÇëÔoXךAaîÄ@`©l¿*ÁŽJÓ@—ýú7 ÷ï0þñ,eç¦eúE:ÅÎ'<27>ÅÊ='y¨…0¥¼Ñ`¼ÁÚ&ø¼eýÄYˆ»'®h­h…•²©WÐlã9îÁ3³Ø÷à  ¨™lOúvÑjÖé*º¸ýts[®šÁOÝadÀ&ñë4¶ÃÏÑ4ÏWd½¸ìžA aRñkIž˜‰nÝŸ5ŸîkOÐÎøÎHÐ)Óc°nÜQ|ûéƒ5ôSBó$ý”½ÀeŠâ>†PÆÂEɧ{ùc4î<34>»ãžÐ]Ñôéy „†±xžMð>U†´¶&z.4Áz{†í®ŸîöS<C3B6>õȇøÝJ°f qìF'Ü_<C39C>Ù<EFBFBD>¯>|àJƒ^¬VT|Zèf<1A>ÁOñ8xª8%;¡4<C2A1>¨¤?€DÄ^RþB¤”|7Øt<C398>y
•¸¿TŠ<>^n6çã<C3A7>J8/ªÖÁDÌâPýæm» jòKŠPSª_°r…‡;*Q@Dx`v\nZ:JD ºŒÊܽÙukQ Cö<¯8½<38>´DjT^<14>¿¦ rªg€|$$o\]·§Î°‘ô%*ØE˜ìŠæ<C5A0>62lMv4éÌP“¤OÛpúpÓyµt|_ݽ•yºTŽÈàX±í•H<E280A2>´ >5-I<>J2krvgoCZ‰9ò1¬Û±:"yò!<V Í$Ìâá —²²ã£ÂWEÄF 8”¨ûf¯çáxÝ´…ÇkýÖG¦% <0F>¥­Ãˆþȃ~+ªB5)[Ö_Z¸1i7Ú…vT× Uµº2¤“Zådµj}­¤vm-­îdnèÿßVw,[Y VŸ‰¯»ýx
endstream
endobj
501 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 6275>>
stream
<EFBFBD>Z XSgÖ¾rsk-¶ÆkÁ¶I´UÛÚºÔ:c;v\jµ.ußµ"K’°„„@6 @B vP@pµÖ¥VÛZÇ®Óvúש˴ÓXmûŹüËw@í?Ï<úͽßwÎ÷žsÞóžO9DHÁáp_ºbÝÊ ¯OZ&IÞª|K&]úâ<YR ûèß„ïIŽï©á„OäûF…levÞyíÃ}Š ‚ƒßA¦ìç¦Gñ'1<“5à‚Ë)á|̹¹9mòÔÏ®]µþ¹I“^x]&W+$qñ*Ñ´W^yE´M-ê}"š/VJ⤢ øiâ$™<Y,UM­Eªx±(V$½¾|EÄ¢e EÏ.\¶V´P,D+R·%I¢EK%Ñb©Rüœ(V¦%þ"ŠIc$*‰Lªœ,š«E‰”rq´/gDåìƒDr±"Y¢Tâ?$JQœ"JªLjT2D<1A>ÚÇßÇʤ*\!ÃÏ“ñ¼Õ
<EFBFBD>Z XSgÖ¾rsk-¶ÆkÁ¶I´UÛÚºÔ:c;v\jµ.ußµ"K’°„„@6 @B vP@pµÖ¥VÛZÇ®Óvúש˴ÓXmûŹüËw@í?Ï<úͽßwÎ÷žsÞóžO9DHÁáp_÷Æ«GLZ&IÞª|K&]úâ<YR ûèß„ïIŽï©á„OäûF…levÞyíÃ}Š ‚ƒßA¦ìç¦Gñ'1<“5à‚Ë)á|̹¹9mòÔÏ®]µþ¹I“^x]&W+$qñ*Ñ´W^yE´M-ê}"š/VJ⤢ øiâ$™<Y,UM­Eªx±(V$½¾|EÄ¢e EÏ.\¶V´P,D+R·%I¢EK%Ñb©Rüœ(V¦%þ"ŠIc$*‰Lªœ,š«E‰”rq´/gDåìƒDr±"Y¢Tâ?$JQœ"JªLjT2D<1A>ÚÇßÇʤ*\!ÃÏ“ñ¼Õ
™R¥ŒVHä*¸<E2809A>ªø(kW)Á<>E²XüfŒ,:•=Mÿ3U”Dª©Ä*ÖÎ6±(F¢”'E©±]¼•\!ñ»<C3B1>ª”HãîZÇE)bÄJÿ¾,*wÏ'pê(¹<Ií_+ó¿Õo_¢RŠ“b'ß<>Á•@ªˆp®ÈDKEl¶ ú† 8ügˆ‰A/“©™A³ˆ?s‰×ƒßä, Y´Žó6E%r< ‘Å!.AÈGˆÄ£ÄcÄHOŒ"hb4ñ8NŒ!ž ž"„Ä8âb<1<>˜H<G<O¼HL&¦S‰iÄtâebñGb&1‡˜G¼NÌ'Þ  ‰7‰EÄbb)ñ±ŒXN¬ V«‰5ÄZb±žØ@D‰MÄâmb¦Aœ‡9“8jÎYε à éA¥A·cƒÿ²9ä[îfîä:ÒJ~ÁÏ»L)¨fx8íá[õ<C383>Ì{äï¡ÓCÏŽÈ~tþ£—ÛôØ<0F>ýkd9ÿ¨ŒQ—è¼Ña£¿}|Sؘ0SøÌð+c&Œù쉴'§<yá©OýM/
Ož‰~ eF @]žÓh%ç·Ûû~:w;Ýöý <0A>¥f»¡BcÏ h<>úlSŽÅr*…7C»b ¼¯žXûSú'Ú°wsê3 žÚ™°X°Ö5wL6ƒ-«DX«3é-¼vVC±Á¡­4T<34> ìÛ+]­ýj&~Th(1صnƒ* Âæ(·9
mÐL}ûí9w¾ƒÚ=ò¦”ƸʷÊ»Â68”ÕÐDuîi8+Ø{32JäÕÚ&¨„ŠR‡«Ônu@#ÕÊ;l/°å7eTÉÁFKNn^a^aAaVq˜¡ÈlÍ-4Zs!ÇJ…"Ù<>`zcÉÏ ˜Ãµ.<2E>§ÍV‰Æ¢š°PäFÁÁ¾Ew†Ó©<C393>mPÅÍc8[™Q &¨ƒá]b¸-Êsê<73>­mÓR¢¯\€B€ŸáæÎ>F!ŽJk 8©¦ÔZ© eâÝÐ,¼45U.„l«Ù¡¹È„´Nñ0!iÒLˆ^c1C6%¯MmÔ‚Ó^·ë2
@ -2421,57 +2415,56 @@ J
YzB</2ÝíÈÐÇ£jΰ×]·®¢ˆ~úGF$| ¢4£¨C<C2A8>Ì»{æÁÍz™fh+78zikÞ=dHv¿ÜZI¢ç|‘ô>h34¦·¤UÇBõÆ[3¦/ë¾$€ÖêΚFO}?ôýtïÈÏÑfñíd«þ 22ò͹þ Ìü÷výü]s_ÍÉŠ.!šHò§þãÝõ­àGn…?ÌuÕTW×,„*“3Í<33>Ԙ茇<C592> ÎüÓò¾<C3B2>\CA˜‚Ø+<2B> ´3ÕeÀ& ÒæpbÌ6ôNÖ-LÆŒ˜ªm¶<6D>ìEÜŒU¬3ÑH¤}Ç\“ç6Õ˳@G©Ö¥/¬…¨ri£a‡Æ•Â²VhÆÀÀ<C380>À \s94•Æ*([Q™}oÆ1ý)vz¼qË<>®”o×'»£Ëæ8ØÍ…YÅš½ìTÕ÷1Á~Œysºßñ/ãá gAÛ]õì>÷ù®<E280B9>}ÿŽ˜Ù{çdÈÆé!…š>t¸ïÏ]L"ù‡Kë)8<5F>Öív;Ë¡k,˜rÀdÉ4lQEæ¬1ÈJ³ËÍ¥;žUBu^ÌVEûJ:©ÙûL,&ׯQè"€Z.«;*D;qÒ¾èiPí°†Uâ7aEõֽɭÊýºCpZ]݇©Èð†²«ùÇbtN¢Pšá Dn1y¿ÞÛ7=Ü[$ýªßE¢?1ßsoãè{nåïlòă7q<37>}Ñ—˜EÜkäßÐÕ6+{C>h™L¦<4C>&ßhÒŒö¢3@®þz-%£™—¡—¸ÓÉåÌK1èÅ°a_Â]ö<>JÆ¿ËL€X¢É(õ¨Û-ß2WÃnô9â{áÙ0 µ ð¡wõÔ<C3B5>«e<C2AB>Yª«Ö-[vÔ]†<>]Ø”]o»¯)öú<06>b8aÌxf”Ä®†äÞÌ^ƒµ ¡^_.s^~/ìÓe
“6TáØB{ èÌoÀÄ.»ƒÅxGz•ÄJ±Äç«ÆæÑk;q(Øýz+qˆÊìÇ%—D™¾em}gfïã w»Û2¨Ä:õ>3œQ2$Rî.¬©<C2A9>áƒvšFšY•zgŠ
q1Þô©ih²Ù [¬ž<fïHõH,_>_ÀÌä<C38C>ÜlLÉOdWI!Ù<>ٚט_bÅÌåÍ?»üã¶ZÏ×H­2«Ñã;<3B>ÇsÝʺæ7ÀFŠ±b- r£AV µ¤§áåɵéíÏž½$@ØFS‰­±¨µÈÍÞ¿íÈt'nO)2ûçý¹¼KËϾ<C2BE>šž,™'­ÅÒl±±ÿ•€Á6ÖgÖKU2s&lÅ6þ’{$?ǧõt:èMérEN—XøÛÔÎÂ÷åQ€;²:f4QŸ”¼^Ù$¨[IckSÃî?çìÚÝi{`ì¨ê<ضÇÆŽþàM÷øyÐH<C390>ÇC
<>ÿßáÝvóáë¶áÃoÄ÷ã¨ÿikéù
<>ÿßáÝvóáë¶áÃoÄ÷ã¨ÿÖèéõ
endstream
endobj
503 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 5531>>
<</Subtype/Type1C/Filter/FlateDecode/Length 5530>>
stream
­x T׶v1Tu!8[@ÇVp@Aq DDdž•Iæ¡™¡A‰C®yû^£Æy@PF™AdTfDœ0q$jŒ ×x=Õ}Þ
½w%ÿ]o­·Þ{«EõªÚç|gïo{ŸV¡ÔÕ)û ë×úz»'E$¬ I<>ÍwL ‰“† <09>ܧ<C39C>¡Ô÷êüëFK4²_٠Ѹ/aCi~*ÅKTøiªüt5žSß¡¥:<3A>¢T&+õv¼p˜ \uÉE¼f¥®¢B[{ø.4]hf+<2B>¦J3"ÂõÃCRCôÓ¶¤H£¢Sõ ÃŒô™-4O. Môí£â"ôW'¦$%¦„¤JL ú<52>Hÿõ<C3BF>¬­E«hRcU>£$ª3Ô樫/dS«ÄC‰(-j5žšJM£¦SzÔLj52 æR†”eBͧL©µˆZL-¡R˨Ï)sʲ¡VS¶ÔÊŽ²§(Gʉr¦\(WÊ<57>r§<(OÊZKyS>Ô:j=µ<>ò¥ü(*<2A>Z®J©P³TlT­UƒT“T ÕÆ©™¨­Q W+U_­~…¶¡ãæsf+sˆy'úBô+{NcŒÆe<C386>§cìÇìó»æTÍF­­;c“ÇéŽ;5¾cÂÊ »& M4<4D>¸zâ‡I'ýcòÉ)VSp ¸ãÜ°¶‰v¶öm<C3B6>Ïu6ê$IÔ¯# }‘“(œä<C593>É<EFBFBD>h8M¢¨æ$ê/äc%ø3Ñ8 ³AB7 ¯`cfä6y<36>F&ŒB,?Æ Txc5=°ËZ![”¶0Á1:8:8<-XÛè.$Òƒ{GžÌ,ì)««¨­Î­ýsð<ýFXSX£Ç9+X )^¼6®Œ1<C592>ÎɘX æ<>±¹à{Á¯3e:¡ådSÛPr¡¡ôJYWáÀ™§¹O?€ÛìH²<<3C>»ó¯LûLÇ <0C>t¿4_YDbrbR\f4<66>Õ)ÀxpäQÎ9<>zËkËkkrêFa˜üFÓŸaH bþ÷ƒÀè"0KÙÆÒšúÒî²îÂ;9OsžywØq:@ž&¡m¹6¸°­0¡(þx(l€ð/¥â6Å%%F'G'»DšxßKºa »³º¦º¦íÌ-`q¶/ælÀ3'¨ncmZ'܆æókÎTUTVöT=©GÝÊ5º+ÝœB}Ò|ÒÖfy«4B20]¶¨ß¹ßù§X¤/`ðø@Ñ@ѽƇýH[è¢@¡³h,Òx<C392>¦÷£…blÉøãñŽ†Ëlðy^¬ÛVx¹°¹ © ¶XX¨¨"§:·úH´Àó„[ž­­ù†€5À4ÆÖÞÖ1z`ŒËfßĪx¦ý[÷Õî«â—<C3A2>!;N¡ä<C2A1>Éõ8¥šÁë🡙ÊÏø©x†rªRŒgŠÆÉ'·óRŽOeÊÐ"Z)cÆñ'.Þå@z(ùtÆéŒs;ÏC=Tœ,8_Pr¬¡|gÁS§R%@DlKŽKŒÏ$Þdÿ‡fh‰á æPÊé-­.«Ââ‚’ãÕÐÌÞŒ-wš‘Û’â’>-£P*òÐW2 ï@<40>ä;x<11>ŒD#ÆJm$"OÑdù[NaôFLå%ur7“Ü ÆòÓHzˆƼý†Xð2‰äÛ•"zœD=YÞÆGp<47>ÊY1Ø…ä<12>m˜ášÑ\òdÐ×|ͧ 3N9<4E>AÓÐТ®â®ü®¼î}˜9Œ5NbMÂ4õù!•š îlù0Y’Ô =zt©šé½!­a-•V9ìaÑûìǵ]}]}Eàg¥âÙH_˜ŽŸ3Ü;E1¯áVF½´.:w=ØÁçqŽ®~®~æ²Y„hzÃöbù:e1¯àNú¥<C3BA>æ°<w°£Ø•Nëœ|$á± À*WØHèÅÜÏð*õeàM4CwN+f °ày€? ÇšdÌÇÌEãe€m[7`ÉK×sÑd_´ wË¡Cí':sXât<.B³)`V:ßuü.ö- ‰€æ I+šÔ†& ¼~Ñ÷²ï÷Ä
ho =E¡Â<5A> Œßšü†õ/ad¯?ù
½gÐj@&¿½»…Äd”#S@6ìðËá/cÐ>‰ú~Ù1H ¿EÞ\uÓ¦ «žEFžBÄÆ«­XjàjàŽÇÄá©di…?:¢<>täj4ŸÏ” ù´2<C2B4>Aª|1Í÷1Åäë°ì2FÞ#?ÈÅ`Õ2ÆJÛ䥙³AŒÇƒI…Ý€ý€”lr2 yùHr<19>%ãÎë—7^õÿ½ ÑDúvue\Éhß|9õ:2ѵ+²Ëµ?fwÌæà
ÀsC±Ör¬e1ð{l(ÅŸ¼ªöë¼7Æhš?²4<15>~š}‰E¦rT¼âå¤%ƒÅêô°!C6¤Jc«úΊAr[ZnÈàYö¥ÓÙÚø<C39A>üº|²|"<22>#˜a<CB9C>a?d,÷û³ÑDþ²A:Mx\3{ <09>7c­f¬Ù„ÇÇ=N.cJ)­ìaPÖ¤àTË͉Kyˆ„žD`¶lˆÃ:qäFåŒÛ?WNc ƒ:F!g3Ãs%Ø…ÞÉ`#‰úïýçò$˜^
<EFBFBD>#ÍGûO Š<>ÿpèúþ&ö[2;<3B>-Q—i£žQssÛ w$â±2<5‰÷0Ê ‰z'<27>þ0<C3BE>µ¼¡éä!ý4W|€áƒ%x¹à9`—B<E28094>pÎ!Í0}gúO¹,8]ð¤p¬f‰Õ-cugl@F,^
Ø°CÖmøz.û¢•€f€W#•{,R¹ÿRíF3»ÑŒ"ÈžUñVIêg½«z­ÏÏ&1<7O ÀcÉp1µpüÂÙ,†Ä^U:Ýuú.æÞ"ƒ³H\<5C>´Ø¤uíçÁþÁþWeïG“¤C>"¡—þÛœsÒ°x#Ö
Âc]M-,Lcfþ7ç$>W4p(Ò(‘ÁH<>¶ ‰^¡ebò×€¼¥ü/üÞ$SÿÏñï9´ŸAÊ÷4rcð.ùTôu?<1A>æÚ&F{±‡/MÇáÓ Y0C0°¥!².ê¬'XÀŒh ;/;/ÃDÌô–Ì¡‹ÕÈýzLèxLaÀ[rк³qKMÆ…äÊèRi©cƒQ÷š çSΦœÝr.+/+Ïy¨€½m<C2BD>í wÎ>.ínßÖ¾­9½.å:š§ërÞ=ÇóØÚc®Guƒ _¼b±e‰ÒD°Êv¨ñªòºµvÈëµÏõ€²ðŠ°S<C2B0>°ž…űv.\|—¦`
°&©î…˜ê`±•¨1õòÖÖ/Ûvö|u©×­~uïçû<C3A7>H…H=Á¼Ÿßª<C39F>J$´Í›µ1¦Gâ™lLóó\,Q<X-¡wŒvo$1CFÜŒ<7F>=Ä.ž‹°æÁê³~u~ ²«pÚöœ¸<C593>Ö*Æë
/{Ž¨nýb—øŠhWνkw×1Ñh> s@Úµ?ÿðË“>¤]‰V xòåþÂÀ«ÝH-éÌS,æ@ËF£áÀÈsGÓm-£”<C2A3>,vÀœ¦C<C2A6>Å$ÕoIÔÖŒ>ub”:##—á1¾$w2„¡½C{þ.ÑØŽQ ¿ßhºOñÀËHªü°ï)ô}ý£nœB,(ÇÇÐiè“/E¼Ê¹¶sg.Ÿjb00oßüýfÍ#¾ºã'ø2y‡íå;#´k*hdÍ š¯’‹óiì#ðn<C3B0>|²bˆ3„Rss¬I† O¬X”¿°Õ±ÕñNÌ+@“¾Gšh>Q˜dLʼ˜<15>h<™qÀÖt“ÔÙä_â_æ}Ò<>ðÎkd çAÙqUq•[;á{@*§Þ•½){ÓxÿJgwg_ÑM¸
Íé•¡•¡Ù>¤,¦†ÍeÃŒÖ[8»9»:Ç9<C387>Ýl¾6<C2BE>{/K÷?º~íe=Ó€4Ï"¢Gz€DÉ/Ö]_wݦt>8ƒë÷·(7OWKv'©Q¢¼ßN?Í~<>&”¡¥BàA‰üWMdn!+ú0“çQØ$½$íÈè#­²›"<22>CšÝ+±1Ù´zÆŒè¹Ñ†<C391>Vk}<}Ü’a ¬ËŽ¨‰ªÚÜIJøPöš_ª~i}Øß{½·¯äšPMù}éܼ̬eÑ,Qè<C3A8>­Á™Á™wûÃ
p;·±1¨1­žÀ‡ÓoÊ^VüÔt§çÒÕyßÁuÈx(eÑŒ%e O™ób».u¶[â‡i2RHáôK»bÎmÛÛ¶CQd!q{ËÍ<C38B>±Ë<C2B1>,œœÌü±¦¿<37> ™oÖâÔâ$Ä­®œê.ï.ïíî$K"§Ç A 3…ÆÌ
¬Øl¹mAÖlñ—Œ'š<¿wT4¼FÒ9¬éþ="þ@ª§ß—½­ø­á~W[gGoA?Ü„–Íáá§×Â*˜“naLÂféàâ@Âæ"øã+>+<2B>ëÖMGŽ´çô±hŽÈ1Ö;-hÇÆÁ{B`)8ç…5…\J¿Ͼy¨[Ê P@Ê<E280B9>ÚM¤v£ýg@Zð ¹gCý†:«\0„…±Ë<C2B1>—;;.ôÅŒfS° 4˜+Ÿ{ˆ½eóKO¨§HãZ jG^ê¹Ô£ñ ÖažËÿÃéØØj Ï®ö^é½vþ&<26>)çf)³¸ávQ[W[WÍË|4 mS ê¢/™<4™Æ;É?*ûi^wI©¸¸¤þd\€ú//o¾ˆ8ÝM‡â…~0ö$Ї/|Özû„˜Äaqê\]ê˜é@#§<>ôgX¥y$…Š“BÃ7m€Xˆ<|Å3D•Ûkw7®:¢x¢xÄ)Ĕc®< B-Í¿0#Ç3¼<>ùÅÖnrKˆ“ÆJ¥áëòC[Xý¨ü7ÈÜEððý»LHŽ5€¦•ýÚÿkók ¾yÔç]çS·¤<08>%«kÙ{0í°8íÛ¬l(€†ºWåÙ_î­$¿WÝûîþ÷Õº´kÛ[“. ¨sº#yÌAwÎåµ=<…oÕ}¶ójF…¬Bv:BÁJênbl²‰4ÌËÀéDpqpqڸ̢óòÿä óHKnsNÓùªªüšÂúc-еۋŠN„7xeù¤û§ùÆG„'†'n_ì:9__¼í"t~ä{¼6²dn£;M(5q'n~ÛAâñ£ìF@““ý¹%àÎ[Ü£]£Ý<\³YÌé'{<7B>uï:Öq¤åhÛÑ×<C383>^>Òz´ýZ`É ññ¹ÿ(yQwW\ûý¥ÎŽêÎê®3ÝÀ¾iö3Ôƒ¤=w¸<77>sÙ)”®<E2809D>2¥#–™#<23>hT&¡‰7⥒ÙÖÜ]PùÇÎæåæ9•ì•„b<E2809E>éRHܱ)u“,+"…9ðTµŸàv~K[kKÕçƒH<C692>öZ—¤ >%Á xÚZ{s‡CøÁÐQŠTl¿ P„O”ˆ\þ°XÞ¿-æõÿ-¦ØŠùR¨ŠŸ!Ý*´qüÛÑj÷qÛVÌcÞ<>Îb‡2‡Fî nkðR>ŠÆ<C5A0>Œ°Ý4môdTÈ~Ÿ&¤†)ä.‚ÿ?ð{s~-~RsK\}§¡­µš|²Û *3seç<C3A7>DHÜí—i‡ ‡t…e¶|ɉ<C389>ƒW ^ ÏR¯ÖÔ;<3B>]Žà”îæêæêeÎîbvß“] ½zÑ3×ÜÀ=Ã+Ú3ÚÓËÓýÉEA4Öûäw!`‰¹ïÏ?¿ð<C2BF>¸ænCg[MKMû™¸å™9É9ɇ£ÈáøSØ>Q†@˜E ô{ZÅ0˜ÒçßàÛèH <20>Šáã.uõt¶ø/Ö)ùI Æ]BŒšÎ<1A>D]2Ï>é¨B i·¦<7F>°Îv¹Žâ5b³xsws§¥~XÍ«Ë„g2`<60>ŠÙÖÖ¿E ^?¾úøjßÓ&¤FÆ9¤IN|, <20>Èw6ßÛÜ<C39B>[E,X”¥œÅÚ»mvì¢ø…AvÞ~Þ~.2;°$¥$¤1¸iMøpòMÉ<4D>çŸÕßìjîlîËö6tÊ.Ôúç¸ÕŸJç£>¡t6¥sÌYáä<00>4_®»¶îúê3Afð„•X“H䣈Q7<—ÈûhÒXÞF/«<>ë<EFBFBD>âoŠ¿9û·SßTéf
Ü+šcšcþ/*§$ŽôÄy±æNË<4E>œøa-¬%ÖD5òÍÚœ[ïƾkÐsúJÅ•Šž®ÞG¤ŽÅb<C385>Í«öÄÏQ¦ê˜è¹„YB㉣<E280B0>H&“r5ªÑ¿, Ôû”p:ö&<26>È¿ŠiBÊ+Óp¿»£»³·°úà2iB*BO{´³Óç†Í <0B>·ÎÒÉÍÉÍ9ÎM¨-òÝan<E28099>Þ³).).1,ÐßåßIó<49>ÿ<EFBFBD>ìgEF“£±½¥¦­¦ãÌU(‡ò¿”ï¬ m³ôPØþ@AôUä2t<32>ƒ »ª¶•l+K-Ž-Š/Z_f[³ªÖ¯LV<4C>Z°£*¡áteyqyaó‰xw·÷'°)mhÚŒf¬š‡Ò*¨Â¢D‡µ^ÒU°œO{WT\ xæwoã娳Ég“<67>ÆB¬ßãñ9°<39>àû­Ï Ÿ¾¹…,^$z8”JNÝè3ø½h ûnWå#ø<>lØ„×C\4$Þ|fó™/–âuG»ˆŒ é¢|ÂR ˜v´Ÿ6bðD¼»®Øn#ôx²ò펵{|!H –¹õáua×Òá ì+=Xz°ðÛ³‡Xĉ<2üwF~jïÖ“ê'HÓœaóm6»=!T KÏ966ô§>!ÍKÏÉîÒîÒÞ®¾Aö(i^F­[0s•‰©3c[‹ƒ­}½¼ÂÈ'ÝX#¿¦×zPz ñh7ñµ"áÍ ÿ£`cÇàûÊ¡hg<av&í5ÜÜ…ÆnEÖμ\—È9J4Ëïh£†ß÷é}{ål}¼7rqä¢$›Í^ìæoµt«z¿~ö¤É¿Ð%-=nÖpǺ<C387>úqædÎý<C38E>öýE[øÂéû¢ÀŽ<C380> ª“« "ÏKh }1°þ¯^ûˆN)¢ø(ÞŽCÞJ;<3B>Cx?ßÆûó4^GôZi†mx³Ñ~—²P™¨ì¡Ñz†lê q²K"#|å∘€ ABŽ²xª¨~{ãî&Òsä^­=H$wЪº<1F>ð<EFBFBD>Œ„”õÑÖâhë‡TO²-hß{gÏO»Ÿï¹±»a_KÎ3ävÚyh"­,däò;EHŸ6`ðDš—1ÃNïS±-ü:ZEŠ'AJ¤'aÕEãÒÏ(Gï~a”Y š>FEmR<6D>_4åÿ6èjè
½w%ÿ]o­·Þ{«EõªÚç|gïo{ŸV¡ÔÕ)O‡µNžÆîI kCSCâ¤aÂ#÷éc(õ½†zÿºÑ<12>ìW6H4îKØPšŸJñ~š*?]<5D>çÔwh©N£(• ‰äJ½/\&W]r¯™D©«¨ÐÖ¾ MšÙJ£¤©ÒŒˆpýð<C3BD>Ôý°Ä¤-)Ò¨èT}Ã0#ýEf Íæ“ËB}ûÄĨ¸ýÕ‰)I‰)!©ÒÄS¨¾€Tÿ#Ò}'kkÑ*šÔX•Ï(‰ê µ9ªÆê ™åÔ*qÁP"JG<>§¦RÓ¨é”5“šEͦ ¨¹”!eD™Pó)SjeF-¢SK¨¥Ô2êsÊœ² l¨Õ”-µ†²£ì)Êr¢œ)Ê•r£Ü)Ê“ò¢ÖRÞ”µŽZOm |)?ÊŸ
¤«R*Ô,UkÕ Õ$ÕBµqj&jkÔÂÕJÕW«_¡mè8F…ùœÙÊbÞ‰¾ýÊžÓ£qYãéû1;Æü®9U³Q+DëÎØäqºãN<C3A3>r® CM'®žøaÒÆIÿ˜|rŠÕ”Üî87¬m¢<6D>­}[çs<C3A7><73>:IõëÈGB_ä$
'ùcr#N“(ª9‰ú ùX þL4NÂl<C382>ÐÍÂ+ؘ¹MÞ£ £Ë<>qÞXMì²VÈ¥-LpŒŽO Ö6º ‰ôàÞ‡gs {Êê*j«së<73>EÅÆ<O¿ÖÖèqÎ
Vׯ <0A>+c ¤s2fVƒygl.ø^ðëL€Nh9ÙTÆ6”\h(½RÖU8pæiîÓÃà6;,Oãî|°Ç+Ó>Ó1Ã#Ý/ÍW‘˜œ˜M`Du
0y”óCÎã¢ÞòÚòÚšœºQ&ÿ„Ñôg˜?Áðí 0ºŒÆR¶±´¦¾´»¬»ðNÎÓœgGÀvœ„<0E>§Ih[® .l+L(Š?
 üK馸MqI‰ÑÉÑÉ.‘¦Þ÷îÃCÈ©®i;s Xœ-Á9ðÌ ªÛXÖ ·¡ùðÅìš3UE•¥•¥=UOêQ·r<C2B7>îJ7§PŸ4Ÿ´µYžÀ*<2A><>ŒL—-êwîwþ)©Ã <>P4Pt¯ña?ÒÀº(<28>ÁAè,4^£éýh¡[2þx¼£á2ë¶^.l.h*¨-*ªÈ©Î­>Ò-ð<ág«G«e¾!` 0<>±µ·uŒ^X…ã²Ù7±*ži?ÇÖ}µûªøe`ÈŽS(ùcr=N©ƒfð:ügh¦ò3~*ž¡œª㙢qòÉí¼”ãS™2´ˆ˜qü‰w9<77>J><3E>q:ãÜÎóP' Ϋ<>F(ßY°åTÆ©ÔC Û’ãã3‰7Ùÿ¡Z¢`8ˆ9”rzËG«Äª°¸ äx54³7cË<63>¦@䶤¸¤OË(”Š<ô‡ŒEÃ;Ð#ù^D##ш±RF‰ÈS4YþS˜ ½FyI<79>ÜÍ$wƒ±ü4"…1oA¿!¼ŒÆF"ùv¥ˆ'QO·ñ\§2FV v!¹Dcf¸f4—<ô5Aó)ÈŒSNgÐ4tä´¨°«¸+¿+¯{fc<>“X“0M½G~DÈC¥&ƒ{[>ŒAV€$5C]Fj€fÀ@zoHkXG¥U{Xô>ûqmW_W_Ñø™E©x6RǦãçà ÷Ž`DQÌk¸•Q/­‹Î]vðyœ£«Ÿ«Ÿ¹l!šÞ°=‡X¾ŽFYÌ+¸“~)¤9,ϬÀ(v¥Ó:'ŸIx,°Ê6z1÷3¼J}xÍÐ<C38D>ÓŠÙ¬xàϱ¦%ó1³ϳÅFÑx`ÀÖ XòÒðå\4Ù-…èÝßr¨åPû‰Î8<1D>Ðßl
˜<EFBFBD>…•Îw¿‹} h" ¹HÒŠ&µ¡ ¯_ô½ìû½±Ú[BOQ¨p€Öú#ã·&¿aýKØ…$ÙëO¾Bï´<1A>IÒ¾CÆoïn!1åÈ<14> ;ür8<72>ÃË´O¢¾ŸFv Ão7WÝ´)Ã*€g„§±ñÁj+¸¸ã1qx*YZá<5A>Žh#¹Íç3%h>­Ìc<C38C>*_Ló}L1ù:,û€€Œ‘÷Èr1Ø„FµŒ±ÒÃ6yiælãñ`Ra7`? %›œ h^>\Fcɸóúå<C3BA>/C4‡¾]]W2Ú7_N½ŽLtíŠìrí<72>Ù³9¸ðÀâP¬µkYÌÇ"Jñç€í¯jÆŸý:ï<>1šæ<C5A1>lM¤Ÿ‡f_b©Ü_¯¸¥<C2B8>zG9iÉ`ñ°*=lÈ<6C> ©ÒØꟾ³b<C2B3><62>Ü2xÖ°­@é4E¶6~'¿.Ÿ,ŸHãfØcØËýþl4†l<E280A0>N׌Ç^ÂcÄÍX«k6á±ÄqAO<41>“˘RdJ+{T$¡%5)8ÕrsâRF"¡'ј-â°ÎF¹G9ãöÏ•ÓXdàŽQÈÙÌð\ v¡w2ØH¢~<7E>Æ{ÿ¹< ¦—BçHóÑþƒâã?º¾¿‰ýÌNgKÔeÚ¨gÔÜœÁ6Éx¬ OMÇFâ=Œ2H¢ÞIc‡?Lc-o(D:yH?Í`ø` ^.xŽ Ø¥Ð#œs@3Lß™¾ÃS. N×<)«YbuËÅXÝ<1B>‹—ìЄõ_¾žÄ¾h% Y$àÕHåTîÿ€T»ÑÌn4£ˆä²g•e¼GúYdïª^ëó³IŒÏMÅSðX2\L-¿p6!±W‡E•Nw<4E>¾y„·Èà,×#-¶i]ûy°°ÿUÙûÑ$é<><C3A9>Hè¥ÿ6çœ4,ÞˆµðXWS  Ó˜™ÿÍ9‰Ï Jǃ4JdpR …-hâ‡Wh™˜ü5 o@)ÿ ÿ°'IÀÔÿÆsü{ígP„ò=<3D>ܼK><>Æ£y€¶‰Ñ^l„ÆáKÓñÀ¸Gø4ƒCÌ liˆ¬0#ÚÂÎËÎË0s½%sèb5r¿<72>:Sð–´îlÜR“q!¹2ºTZêØ`Ô½æBÀù”³)g·œËÊËÊßs*àAAo[c{Ã<>³Ï<C2B3>m€K»Û·µokN¯K¹Žæ麜wÏñ<¶ö˜ëÇQÝ`ïXlD¢4¬²j¼ª¼n­òzís= ,¼"ìT ¬gaq¬<71>Ëߥ)˜¬Iª{!¦:Xl%jL½¼µõ˶<C38B>=_ÝAêu«_Ýûù~#R!RO0ïç·j£ ­Gó&DmŒéx&Óü<KOFKè£Ý<49>·Âcg±‹ç¢,y°ú¬_<C2AC>_ƒì*܇öƒ='n£µŠñºÂËž#ª[¿Øå>„"Ú•sïÚݵCL4šÈ<1C>víÏ?üò¤iW¢ÕÈ^†|¹¿0ðj7RËD:óË„9вÑh80òÜÑt[Ë(e#0çƒéPc1Iõ[õŸµå&£O<C2A3>¥ÎÈÄÈ%AxŒ/ÉÅ<C389>Ì_ahïО¿ƒåC4¶c”FÃï7š®ÇS<ð2ª?ì{
}_ÿ¨§ Êñ1ôDúäK%¯r®í\Ǚ˧šØ ÌÛ7¿Yóˆ¯î8Å ¾LÄa{ùÁí1ÀšÊY3ˆæ«ä"Å|û¼Û#Ÿ¬â a<>ÔÜÁÜÁÑ4k!ÃSëå/lulu¼óŠ„Фï‘&šO&“2/fÐvÅ#Of°5<C2B0>Å$õD6ù—ø—yŸt#¼óÙÂyAPv\U\åÖNø<1E>Ê©weoÊÞ4Þ¿ÒÙÝÙWt®Bszeheh¶)ˆé†asÙ0£õÎnήÎqN£e7¯MçÞÁËÒÇý<C387>®_{Y<>Æ4 ͳˆè‘u××]·)<29>ÎàºÅ=Â-ÊÍÓÕÝIj”(ï·ÓO³Ÿä£ eh©<68>xP"ÿ•F™[ÈŠ>ÌäyT6I/I;2úH«ì¦Hç<48>f÷JlL6­ž1#zn´a ÕZO·$GXë²#j¢ª6w>”ý¦æ—ª_Zö÷^ïí+¹&”GS~_:7/skY4Kº%dkpfpæÆÝþ°ÜÎml jLë‡'ðáô›²—?5Ýé¹tµåFÞwp2JÙF4cIÙÂSf¤LªÀ¼ØÅ®K<C2AE>íøašŒR8ýÒ®˜sÛö¶íPÙû¨cHÜÞrs`Aìr' ''3¬é/ÄMûcBæµ8µ8 që…+§ºË»Ë{»ûIäÒ„Èé1hPÂL¡±³+6[n[<5B>5[ü%ã‰&Ïï ¯t<C2BA>ˆ?<3F>êé÷eo+~k¸ßÕÖÙÑ[Ð7¡esExEøéµ°
æ¤F“°Y:¸8<C2B8>°¹þøŠÏJ纠õ@ÓѦ#í9½E,š#rŒõN Ú±qGðžX
ÎyaM!—ÒoÀ³oê2(Т2¤v©Ýhÿ<19><HîÙP¿¡Î*× aaìrçåÎŽ }1ã‡Ù¬%( æÊçÞ²aoÙü…Æ“ ê)Ò¸¨Ú—z.õh<Dƒu˜çòð/°F:6va…Zó«½Wz¯<7A>¿I`ʹYÊ,îG¸]ÔÖÕÖUó2MBÛƒºèK&M¦ñNò<4E>Ê~š×]R*..©?Ù þËË›/"NwÓ¡øCá߆Œý& ôá‹$ŸµÞ>!&qXœ:W‡:f:ÐȇÁé#ýViI¡â¤ÐðM "Ÿ`ñ QåöÚÝ ‚«Ž(ž(qJ³á؆ƒëOƒPKó/ÌÃÈñŒïc~!¡e±µÜ⤱RiF8ºüЖ$V?jE<6A>ÿÿ 27BÑE•kü|ÿ.c  ie¿öÿÚßüˆož$õy×ùÔ-)ÂcÉêÇCöÇL;,Nû6+
 ¥¡îUyöW…{+‰äÁïU÷¾»ÿ}õß….íÚöÖ¤ (êœîHž<73>sùbíÅÚ«EO¡Å[uŸí¼šQ!«<><C2AB>Ž<EFBFBD>ºÛ‡Øl" ó2p:\\œv.³è¼ü?9è<ÒÛœÓt¾ª*¿¦°þX ´Cíö¢„¢„¡à ^Y>éþi¾ñá‰á‰<C3A1>Û×»BNÄÅ<08>ù¯<>,™ÛèNJÍG܉ßv<C39F>xü(»Ðäßdn 8€ó÷h×h7—ålsúÆÉÞc]Ç»Žui9Úv´åð壗<C2A3>´mÿƒX2C||î?J^ÔÝ×~©³£º³ºëL7°ošý õ iÏÆ.ä\v
¥k£LAéˆeæÈ#•Ihâ<68>øC©äD¶5wWAþ±³y¹yGÎC%{%¡ØcºwlJÝ$ËŠƒHa<•pí'¸<>ßÒÖÚRõÃ9Ä Ò£½Ö%)ˆOI°Až¶ÖÞÄá~0t”"Û/á%"—?,÷o)¶¢A¾ƒªâ§eH·
­Aÿv´Ú}ܶó˜7@&¤³Ø¡Ì¡‘;ƒ›ä¼”<C2BC>¢q #l7M=²ß' ©a
¹‹àÿüÞœ_ŸÔÜWßihk­&Ÿì6h†ÊÌ\Ù¹ä#wûeÚaÃa]¡C™-_rbàà¨óÔë<C394>õõNg—<67>#8¥;…9…º¹z™³»˜Ý÷dWC/†^ô̵7pÏðŠöŒöôò´d¿drQ<10>õ>ù]XbîûóÏ/|'®¹ÛÐÙVÓRÓ~¦.AyfNrNòá(r8þ¶O”!fýß^<5E>V1 ¦ôù7ø6:¤bdxĸK]=<3D>uJ~ˆq—£¦³F Q—Ìs¤O:*…HÚíŸi'¬³]®£xM¤Ø,ÞÜÝÜÃi©VóÃê2¡Ç™ X§bö€õ€õoh
¼ƒWÅ<EFBFBD>¯>¾Ú÷´ ©qi H'ò<>Í÷6wçV e)gq¤ön»(~a<><61>·Ÿ·ŸÌ,I) i nÚDD>œ|Sòãùgõ7»š;›ûò€½ <0A>² µþ9®`õ§Òù¨O(<28>sd89@#<23>ä—ë®­»¾ºÄL<C384><a%ÖÄÆ$ù(bÔ Ï%ò>š4·ÑË*äz øâoÎþíÔ7Uº‡™÷Ê€æ˜æ˜ÿ‹Ê)‰#ýq^¬¹Ór'§~XËkÉ„ƒ5Q@<40>|³6çÇ»±¯àôœ¾Rq¥¢§«÷©c±Xcóª=ñs”©º&z.aÐxâh'’ɤ\<5C>jô/ (õ>%œŽ½I'ò¯bFš<46>òßÊß4Üïîèîì-ì‡>¸<4C>ŠÐÓÞíìô¹aóBç­³trsrsŽsªD|7A»¤Û£·ÆlŠKŠK ôwùwÒ|àÿ#ûYуÑählo©i«é8sÊ¡ü/å;+HÛ,=¶?P}¹ ]ãபm%ÛÊRcâÖ—ÙÖ¬ªõ+“¤ì(<28>Jh8]Y^\^Ø|¢ÀÝíý lGJš6£«æa†´
ª°(Ña­ƒ—t,çÓÞWžùÝÛx9êlòÙ䣱ë7ÇǸd|l ø~ësÂç„on@!‰^¥S7ú ~/è¾ÛUù~'6áõ<C3A1> I‡7ŸÙ|æË"‚¥ø@ÝÑ."#Cº(Ÿp„Ǧí§<C3AD><oÆ®+¶Û½%ž¬|»cí_ƒe®G}x]صôA8ûJ,üöì!q"<22> ÿ<>ŸÚ»õ¤ú Ò4gØ|ÍnOÃÒsŽÍ<C5BD>Íý©OHóÒs²»´»´·«o<C2AB>=Jš— Ñæe« ÆÌ\ebê̘…ÁÖâ`k_/¯0òI÷Öȯéµh<ÚM|m‡ÈAx3Ãÿ(ØØ1ø¾r(ÚÙOX†<58>I{ 7w¡±[µ3/×%rGŽÍò;Ú(„á÷}zß^9[ï<>\¹(Éf³»‡ù[-Ý*‚Þ¯Ÿý©Gò/tIK<49>†5ܱn ~œ9™sÿ£}?ÁöGÑþ…pú¾(°c#ƒêäjƒÈóCÂf ¬ÿ«×>¢SŠ(>Š·ã<C2B7>·ÒNàÞÏ·ñþ|<05>×½VšaÞl´…ߥ,T&*{h´ž!zC܆,FÞ®Äßp©8"& Ã6BÐ<42><C390>£,ž*ªßÞ¸»‰ôœ¹WëÉçAÉ]$´ªîG'ü##!e}´µ8Ú:Á!Õ“l Ú÷ÞÙóÓîç{nìnXÅ× ¹<>všH+ ¹¥üNÒ§‡ ˜$<æeÌ°ÓðëT¬A ¿ŽVbÁI<C381>éIXuѸô3ŠGÇÑ»_eˆ¦<CB86>QQ¤¥ÁXžjË
endstream
endobj
505 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 475>>
stream
xÚcd`aa`ddw õõ
×ö/HÍ NÌ+Öõ,IÌÉLIùËq1°thÈwwÃ<ìÿ&üÙ)ÃyS†#‰õ‡ ÃrL?䙈²Ôó0É200<øAä)$/ 1°22rð¸‡'”æeº9ê¸d¦gdV¥¦(¤$$*$çTe¦g”(h$k*è C÷üüôœTçü¢‚ü¢Ä’Ìü<=<3D>ƒ@.V€¸ÎZÆh˜•_Ë°œý*úMTæ—×Ï»@ûßR™_DeXžýä•ù-ÅÎ'ÃÒ«ü§Aôq÷¥<07><ºùùÒïBßk~Ý“øÞȶä»0ëï& Å0ïá×H®\½cöÑî-Ý;÷Ulû.*Q6%wJÊä”IÙýÝ
ÝÖ¡Á!¡‰:9¿%KÔ%~'yÖy°~eû]þï\•]i@AdARJYDwvwÚ¤„Y¿Ù7ÔnmÙÙÍñ+éGƒè÷º_wXÛ°ý®ûw‡õûZÖÑîÜ)%sªæT/l^Ö½¢{錅K-™¶ª{Çñ¼•r™Ýùõe%eÅ 9Ýi|åóÝ™ùýÓk¶? Ýìr\ŒÌBñ<œ?Vˆ¿ì»¿
xÚcd`aa`ddñô
ö/HÍ NÌ+Öõ,IÌÉLIùËq1°thÈwwÃ<ìÿ&üÙ)ÃyS†#‰õ‡ ÃrL?䙈²Ôó0É200<øAä)$/ 1°22rð¸‡'”æeº9ê¸d¦gdV¥¦(¤$$*$çTe¦g”(h$k*è C÷üüôœTçü¢‚ü¢Ä’Ìü<=<3D>ƒ@.V€¸ÎZÆh˜•_Ë°œý*úMTæ—×Ï»@ûßR™_DeXžýä•ù-ÅÎ'ÃÒ«ü§Aôq÷¥<07><ºùùÒïBßk~Ý“øÞȶä»0ëï& Å0ïá×H®\½cöÑî-Ý;÷Ulû.*Q6%wJÊä”IÙýÝ
ÝÖ¡Á!¡‰:9¿%KÔ%~'yÖy°~eû]þï\•]i@AdARJYDwvwÚ¤„Y¿Ù7ÔnmÙÙÍñ+éGƒè÷º_wXÛ°ý®ûw‡õûZÖÑîÜ)%sªæT/l^Ö½¢{錅K-™¶ª{Çñ¼•r™Ýùõe%eÅ 9Ýi|åóÝ™ùýÓk¶? Ýìr\ŒÌBñ<œ?Vˆž‚»­
endstream
endobj
507 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1080>>
<</Subtype/Type1C/Filter/FlateDecode/Length 1081>>
stream
xÚ=kLSgÇÏi{N<> <03>£ÐI¹,xkDS
”qÙ¨lÞPZJ{°-P^ !cÜðRD( âà *$è²±IÐMYÌÜ{Ú·˜<C2B7>n‰_~ïÿ¹|xþïó<C3AF>„DB<44>$ùVÖö{Ó4ëµeó'…f«*ÍVXj*ò–´«}Éé5!¯…¯ôÕOŸbÙŒÑQ|(Á‡‘|¸ˆ<C2B8>ó¬äS_ÑÛA¿é¥¯Ÿ—¢‰@D‡$ÙÊà°µªÊcÕ §æ¬œÙ Ðf÷êb®Üâ}LÞœÙô_)Z•l2šl¦jƒ^©/´*‹¸²*ÉXbS®)Z«Œ‰ŠŽR ˆÞ ü€ãŒ¥eg)ã,…6gV{m)½¾”ÿûz ÓIjE'É:¢^<5E>§ÈÓdù äçÄ:$¤tˆbŤ8@!”ƒU¸Ó]<5D>!]*W¸
ɼk¹Ie
çnpía™þN™Ny êÁË! 6”Æ~›™¾)s±È†W^ 8¨+ônüÄûÏôÈ^ÂBÛìÌì<C38C>c¿õ#ibš…$
f<¡è
; 7-=9ÝÙ ˆ,9q@Uª.HÞ<48>³;7Óš <09>Õ¢Ô Ú'á òÂóŽÇLûãÞ»ÃÎaçXË`d.+¾
Õºÿ¢píÙŒ<C399>3˜@~¿L µ5Ë[/6754Ôkíqö¸£Úz¼Â3(s[]}«Úšò¼¬§QÈSÄÌ.ÜZ¸u{Èá¸êè¸ÖÔßÔwî{†ß¹;;wni‰€DÐÔ¤ZR-Ûó6§2<C2A7>°øÞ<C3B8>îÁ&¹³ÑynnÂÕ#m\ëÁ¯ô°«LÕ%fc^§×ì\“äIÄã<C384>f,§dîy÷žoØV$§°<C2A7>FùîΧ—†_í³b?ÊL'x¤z—žá¥V 9ëÑÑü1þQ<C3BE>cðöؼ¾®RSX±M^`<60>¯ÞÂÈÜ_ó•ü562OdA|F ß@w"µEãì¥m÷?¹Ðw¶óKy癎/:`&,Îœþì4ˆ,5Æ$g$gDÀ€)áë»09Áà8éün$:„„=ûÀ‹Æ¹+s—'F<l~
ÿzÃø$ùnÒ<6E>uß »wë]¡5r?§>HV÷`_X­ 9ñ¹ÚÔÂØüMjxp@ûúÑ´Ñô¹ýˆq9?ÔÆÜhí½ÜådÎÒ8÷C§ŠSa2Ã6xïBL;ƒc¤÷l³µó€¤°xqîúÜõû“#Ï~z>€|»Qh7
k@
@,ãaÑ{]ʾ´§16ödv<64>Üp°Ä\bä
ª
ìyÇ÷Bìj2ö÷V<C3B7>ÁÏŒ`¯íÏÑ©Ñ©ÙžEÁ ?ü+°h+<2B>n ·Oá­´ÌÞè~x½øƒöÔ)öÏ÷]Æ»ò_ÝòN
xÚ=mLSgÇïm{o¯¬&ÖQ餠 ¢ƒ© ÇÛxÙ¨:”! ´*öb[© 2|I&;[fB4q,%dÔ"B» n0/jD ²lÝ$è¦,fî¹íSÌn·Ä/¿ç^>œÿsIˆDIoìÈÍÞ•½;ZS©7}Tj²¨2­¥Æ2I³&€<10>
x%$â—g}ýŠeŒ–â .‚äÖ
¸uBN&úD"x“ ÈÐ×ý”ú)âI„ðH® <0C>X¯*?r¢FofÕ¬…5éyZm~½<>=lö?Æ*Îdü¯«Ž<C2AB>I5ŒVc<56>^§Ô•ZK•eleµÙh(·*£ÊÖ+ãbbcT<b7*ßgYC…^™Âš+Ys©ÕÈšÔ~[J¿/åÿ¾^Åüt¢:Ái²žhàå§ä²žüŒòsbÁXK ¤<E280B9>tâ…¤0X!š@»”C¦ðfyæx!^:¬ðöÊ¢yÏr^-*D¬×îÉ“Zmü;ý^ú}U^°±"þÃøœ¬ÍEXXˆVx àÕ]á·§Þ}ªC+à,´ÏþÀÌþ8öÛ÷#¦…O¢PÆŽ®ÈîÁMsOAw¾= b‹Ž®; ªP—¤î)ØS˜cI‡$ØÙªui]¶;ðÙø¬óÓñ¨ïÖ°sØ9Ö: ŒÔcáÖ®BuÞ¿(Fû¶`çL À_f†Ú[äm[šíöZýQ<C3BD>p\sJ‡ƒ|wB¤^§URS¾ 4
{‚˜Ù…ñ…ñÉ!‡ãª£óZó@sÿùïa~g§s]¹®­­ë Òj3Ìæ÷Š¶d0sXxûÆH·«YîlržpõX;Ûvð+ìíÉ}ÕÆšr“¡L§Õ¥åF¥øñDˆ Ë)©wÞ÷<E280BA>¬ É)¬§Q±w…‹é¥á—{-8<>ò„ÒI>1…Þ¦pb
+<2B>\æÓÒÜ n®Çáš[<5B>I«J®Ú.¯J²%Öle¤Þ¯¹#Ü5YäœÚy sÙ!œ<>¾„TÔR <0C>ó—¶ßÝ5ÒØîÒ—òKg;¿è7L™<4C>ù­™XlˆKÍNÍŽ<€ƒ×warŠÁ âù=Hpñ{€çMî+îËS£ƒ¶<<3C>½fxœz+ezÃwüîù&¼:Oß¹ 3îgÞS÷` DÃ&KRAb¡&£4¾xs•ÞÜ=š9šåÞ<C3A5>(˜€‘ CíÌ<C3AD>¶¾Ë]Næ] ?À‘ ª& q(l‡wã:'¾m<C2BE>­$†ÅîëîëwïŒ<ýéÙ t£ðnaG
@2Æ'C#²I:ԛߛה@s:¿V{\{X°ÜTn`KªKlE'?†ØÝlèÛ×W=?3¼½ö?GgFgf{y'Üð¯ CÛh4Îß>…·ÑR[“÷áôüÚWâ5¤pE±d÷íÊHÇòg
endstream
endobj
509 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 392>>
stream
xÚcd`aa`ddäó tsÕvö Ž44‰Øäý ùõáçlÖ2 ?dÈ1ý<31>gþ!Î"÷Ћå?“,ÃAù“D~j@1Wˆ<57>[¨¡mjbQQ~yQfzF‰<46><E280B0>±ž<C2B1><C5BE>s~A%˜¯ ‘¬©`hii®£`d``©à˜Z”™œ˜§àXšXää(ç'g¦T*hØd””Xéë———ë%æëå¥Ûiê(”gd(¥§•¥¦(¸åç•(ø%æ¦*@¼¡¡œós JKR|óSRò€.dTí LŒŒ,9?:ø~Õ|¯ÚÌxøóÏkß«DC ’šëâÜš}º»8ê§wOÓÝÓÛ?wÑÛc÷¿³îœÞß×Û=©{Rk_gOüœß¼{S¿ÛtLïê«êæh®ï®—ïîœâ³Õc~mÙ«Ù*+»ËËçvÏ•ç+^üÓ~!Ûoéiìr\,æóy8'ñpõðpoæÚ̽y6ó~(­éŒ÷
xÚcd`aa`ddä
<EFBFBD>
Óvö Ž44‰Øäý ùõáçlÖ2 ?dÈ1ý<31>gþ!Î"÷Ћå?“,ÃAù“D~j@1Wˆ<57>[¨¡mjbQQ~yQfzF‰<46><E280B0>±ž<C2B1><C5BE>s~A%˜¯ ‘¬©`hii®£`d``©à˜Z”™œ˜§àXšXää(ç'g¦T*hØd””Xéë———ë%æëå¥Ûiê(”gd(¥§•¥¦(¸åç•(ø%æ¦*@¼¡¡œós JKR|óSRò€.dTí LŒŒ,9?:ø~Õ|¯ÚÌxøóÏkß«DC ’šëâÜš}º»8ê§wOÓÝÓÛ?wÑÛc÷¿³îœÞß×Û=©{Rk_gOüœß¼{S¿ÛtLïê«êæh®ï®—ïîœâ³Õc~mÙ«Ù*+»ËËçvÏ•ç+^üÓ~!Ûoéiìr\,æóy8'ñpõðpoæÚ̽y6ó~(Û®<C39B>
endstream
endobj
513 0 obj
@ -2487,26 +2480,31 @@ x
endstream
endobj
485 0 obj
<</Type/ObjStm/N 41/First 346/Filter/FlateDecode/Length 1840>>
<</Type/ObjStm/N 41/First 346/Filter/FlateDecode/Length 1839>>
stream
xÚ͘ÛRG†ïósïRzç<[•J`ËÆA å Y b±+k%ÇÎÓçïYÒJ6²$ ZÍaçÐýMOw )2a2s(ƒ°í<Þ¢<C39E>+”Bi„”™AUÆ=ç„Í2!<21>Â<ôÊ\sÅ¥R<C2A5>CET*X“_ä^X)…2_^(—Ità<74>·JX¡rìg¥:óN8¡•Á&2­ƒè¶ Ê\h¯°s&t ,ê&³¹pZ¥st@F¤pAË++¼qÐÃkVk*,c}X¢À=VXm¬p˜Ÿ
<EFBFBD>ŽÙx4šI8Nb¬•J8ì€

»âOüò ½Çrk0-ªòBƒó[êÓ÷tÐÆ^u餎ofÓQQÆšöû7±†66<36>»íF‡KÆøÔ:þ2Ž´ÓŸöGÕð×_ºð*G¿Êmz¬…€ž[ðC a´ã™«~—Îã³ù7TÓ¬•G CPŒƒÁ¡Чyx+u:Š­Þá¸Î%ŽÌ<ÜÏƹrfêAÐeÉÌn?ã²´‡Ò:ɇŽUš<55>NQ¥“4©Ìuúì<>ǧ¹°4ãÙJt#lÃóŽŠël·n5]þè<>ý¯hýþ§ éòV¿ööñöÈezWò\+Hn“­Áb²<1¶n^¶çê-ú€¼Múê0?}ÓèÏv¬0R¯·ã`ïN¶)]€;à<>`¯Þd<C39E>ÕÁÒ<ìÇ»f´cg'7pt°+uʧ7l¼ZÛF¯iNıÛð˧“,P«äÆR W§ƒO+;ˮ̦™Yª±ûà^'óæžá1}«‡ËjfÀëˆÀN¸n%Ý¿fw.g»s|àô™á·žÕ<C5BE>ÖÍ|¦qÿ,·ãùÑõs×ÿ빫ÍI¯Òøi×µZgu¯Mϧem?(å÷<C3A5>É*5Ûv ¾Õ6¾F6eýÍhÞ$_`ogpi9@Z`8ÚsóXc×ܳYÜcã b
â&GEŽüÍ7Ú"íá$Êqj<71>š]2µLŠ™&ù"”¹Nòrd㶲:=ð© ^Íc¬lJŽ†ðj1X«ùZxçáK $åº1ºÑ0ùoöÁþH[ö;é {ÏìÖïZµ.“Pž½¿Ì3Ÿ” t«rJG³Snp<6E>¤Óârz]§„³I‡&õtçº?Žöúóªt<C2AA>^”ƒê²(‡)Ñâ‘Ûý:¦õ^Ÿo¿>}Æ™ÕQ¿¬Ó&Ïc=˜ãi5I¹%Æ#)Z”â~²¦ñ«X ¯§B§h«ÄudÄ£¸Ñ<C2B8> ¤]$WÅ`«Ž¢ÈèhoÞ‰¨;ê!Zu{»ú|ÑȃE‡í©*),û>½î£ØLR=œãµhIú5^¡ÅËÜóʳE\ªI«“²@_D<5F>^¸µÓÝqö €æ©Ì—Ø `žµJLÎøE†v…¡[f¸wÞ}Õ=øCÿĦlo<6C>aK<61> ª¯_Úe#lÝÙóãÞöñîÝn<C39D>íjt¹Ê,üÌ”š°w8B(—¬dÈ—ÁéepëTÙ<54>žùú6ùw]áÓw/Ïw_>Ä3<í2ÏuªlÈÓ=æ<>îww{‡ Müé!m˜uªlˆ´<C3B4>¢J¶øõŽz;§Ïö‹›³ºW•{<7B>·q8[%¨6%h<>¾ˆßW÷üdpkù9ççЉŽÂï?‡ì)H¹Œ­VÖk°8µ£vÛ;xwx¶³¸ízÓÓƒ ÷àÔ8•Ùµàd¶ŽRÂŽâÿãà×jðKä8u]&kUØ<55>\;¦Ø…˜¢¾S^ž<><1E>¿½·òFµUnÿB6³j_Z·ta38ŠŽ59ÿv<C3BF>¸ø­WeC~+Q%ÿá°òü¤÷úäôa¤ö "m…•õªlˆôQËáÖÁÙ¡º'µXÖ«²!ԕТ~Çkÿà°»sòl§wt.³UL'ÖîÞ fwˆ²ó3BË<~dsD>[@¤rÑÉ]&¤äÿ~{»Ì§ADod|^\]ÅI,±¾°4Žƒú7¨ÕýòR÷ñz¯¦MmÂÂÀÄIQÿIãѬ¦AusÓ§ë/ãëXòEuIõ¨__#WÀËQURoŠ¦6ŠuMñã¬?¢á$ö±ãÝ¢mÚ¡çôºô^ £è5ýF{Ô£}zCtHo鈎é„ÞÑ)<29>Ñ9ý.<10>gå%$T“ˆJ}ú@º¤HW4¤k*èú“FtC%U4¦<34>4¡š¦4£Oô}¦/ô7;ñìË ”Å´áH`Tã/“Æ¢a•±?˜MãûUj†>Î*¦Fb±Ùh§ìÚfeÑÝFðjJÅ?Ašªž/Ã6u{UaˆåVYwíÅ=ø‚ÿ'ÕÏUMU¹˜þ•ZÓëILí«j6Ieñ)µëâs*â§Xr%WÊ¢Yàê*¹ŠÝï•Eç
ç®i±<EFBFBD>ðJÿôÏRr
xÚÍXmS7þÞ_¡ïwõ.ÝL§3B ‰Ã[˜|pÌa®5wŽÏÎK}ŸÕ°ÏNp2´<05>¬ÕJZí>Zí®QB
½PÒ£<C392>ÂŒ3)Ã8Ó"j<>Þ
¥¤<05>…Z2'‚ð^8)…òûÀU™aÂ
­ǃ0D™<á”Ú|¡½T``&8-œÐÎs*^mqˆŠÂ˜hØÎC Ê„ 'Ka2hà@[é2á<32>°Úd`@G•ðQXÇ5f<ì†Í…LÍŠI¶‡5ŠÌqÂë„Çþ4Ð`zÆ&`ÐlÂÚ,²ÆRx…µNiáqlL;4NÅŸøí7z5ÎËî`ZTå¹·´[LßS¯?̪œNêüÕl:*ʼ¦—ý뼆5.­»aƒáƒ÷ÔÂÚ<C382>FÇ_Ç9m÷§ýQ5üý÷_΃ÎÀ×™KÍ9(cüÐCãyçê‡çÒ=b½œÃ4ÃVôpÍpð%xІ´³Ê¤«ÈpõÁBžiîqe΢1Ÿ<31>zeŒi^&7»ùX¬“é 4mhzç_:¤4'iÜ¢N7iSŸ™øþÆëÓ^xš ì%¦Ñ¾øDÍ4{À
7."ì–ÿëV¿ÿå\ù¬Å7Á=Ü™Jía5ÏŒ†æ.ù<Ff cçç}«ùW}1DH.Ùkâüömc?ûqtÂ*³Þ<C2B3>£»½Ù¦÷á€O¿+¯ƒ§øOðÍjÏÁtðŸ/õ:¤öHÁ·ÁµÍ<C2B5>xaùv<1A>ÂXêêL I²wÊ\Ú)Åჹ^eÍ;C³Žck@Èjv êˆÈA(1mc2ZùÍï|Æ~çùý è3†ßk«cšýŒÆ][=DûYùyêÿÕn©9Ò«hüˆ¶ëF÷ÉY=kÓûiyÛOjùcw²ŠZ€oû…ØêšX£šÌ²þe43)¸Ü;®PXÎöœÅdsîšG6‡wlƒENAÞ䬨™Ëßü¢Ê.¢<—Èp±9Eê•|`Sδ)¡ÏLÒ—3<1B>µ3©!B¤>=ϱªé9"ªYä`£ç²0K,4eÚZÓX˜â7Ç`‡xdÇ<>4ÃÑSÞÄ]§×U:pôWaFá“
”ݪœÒÑìÔÌQô¦¸˜^Õ©àlÊ¡I=ݾêO„§ý9©|¤§å º(Êa*´xåV¿Î“¼×g/ÏÞ=áÊê¨_Öé<C396><C3A9>¼LŠñ´š¤ÚëQ-jq·UÓx//†WS¡¬×Ô­y Õñ*t銫bÐ-‡£\H:šæק"FÚõ‡Ð?IÝÚª¾œwê`Ña@©Šb
bߧéÝb”7“L‡k¼¶-M¿…WláeïðÊä"\º)«“²/Ç,¸ur²Óí}@ûØÌ–l°€™l¨t\p91t+úe {/Þ<?|ó Ã#Ã0U{  ØCýíG»ì„­7{¶·}òììö´ÎV5ºXÅ,þ˜ihâ"pÁ¸ÃB„d­ œYn<>)¢g¿ý„möCOøíñé~¯{žÙ£ÄÓ-ã¹Î” ñôù¢·÷º½{]4eðÇi+Á¬3eCHÛYÆ,ø(ÔX@T«eüö÷<C3B6>wzÇO^×fõAU¾èæÃÙ*zS<04>77â÷Õ~*úµøY5ÇÏ/A':¿ÿ<ª§¨Ô2l­´²Þ<C39E>€s²<73>]Œß¸Ó§O_½[<v½ë™<C3AB><E284A2>wÀéà´tk<74>Srr( ;šÿ<C5A1>ƒ_«1,!Ç¥ërëMعvNq 9E¯ìíí¿¾óòÆ´UÜþ…jnÕ~´~éÁJŠŽ³ÿvP+ɸ)¥+µ¦lˆßJVÉ~:­?Ûïvï‡Ô=BH[ie½) ‰¥wüüðùÉý úGj+±¬7eCPWR¹Ãô-^‡'œ<>>Ù>8z§ä*LÖþ. Ê[ˆd û+RË<È9DA.@¤3Ñɼ¿ƒ[Ƨ•ATotÜ)./óI^òúÜÑ8Ÿ°Ô¿U÷Ë iÜÇô(¿œ6Ô„•'“OŠú/<1A>f5 ªëë>]}_å%Ë(ª ªGýú
µ&GUIu~]4Ô(¯kÊ?Îú#Nò>ä0¼]Ú¢mÚ¡§´KО°šöé9½ zI¯¨G¯é<C2AF>Žè˜Nè”ÞÐ[zGgxV^@ÓA5ÉC©Oh@”Ó% éŠ
ú“þ¢]SI<15>é#M¨¦)Íè}¦/ô•þæ þ<>c¹…Qƒ¢˜ØÕøë¤ñhxeÞ̦ùûUÔ,}œUŒFZ a³Ñ(Ÿrh•ÅîWÓkþ Ò<>f.†}êæ©ÂËnY·ãÅ3ø<33>ÿ<EFBFBD>Oª_«šª2çnú9<C3BA>¦W“<<3C>/«Ù$õŧ4®/©Ë?å%Éé˜(FÀåe
Ï~T“-œùfÄÂ’þH6S
endstream
endobj
528 0 obj
<</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<b94d77ce206f8dfc5dd36e121e44962a><b94d77ce206f8dfc5dd36e121e44962a>]/Size
529/W[1 3 2]/Filter/FlateDecode/Length 1261>>
<</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<f054ffc13bd83fc8f7d51fd5c7fb7e88><f054ffc13bd83fc8f7d51fd5c7fb7e88>]/Size
529/W[1 3 2]/Filter/FlateDecode/Length 1263>>
stream
xÚ5ÖWpUEÇñýŸÛÎIÒ @:¡zˆ”¡ ˆRz HKAzMB• D@¤3øÀƒâƒÃÌ8Ž£3> Ž3xóÝ^>óßîÙ»¹9³{<7B>1æÝ;ÇÈkcÂ昧¸&
aclêã#îó ÌmšÓ:èC?0ˆ!tÑÃŒÄz…õ±6äSln„ÑØ ÝU3´ûi<C3BB>1Æa<¶ÆLÄ$LÆLÅ4LÇ lƒm±fb{ì€YØQŒiPû<50>…s'¾áõü]v‡<76>Å$¾ÕÑ÷ÝÈhKL“þ‡Žvat˜N]´ïJ¿…üÞÇbºÏ×9÷Äôè­¹˜áo4wÇØ{aoÌÆ>bF\Öù}ù¬­bÆý©M?šíäþb¦kÿ>ýNr<33>Žæ2ZJÎÃ'8á`"fY¦>5‡áp1EÝÂo£Y“®£#X³BLIŽ6#iv)Û¤Í(š=|‡­ÅJÖ~4ý>ò+¦ª«Ž~ÀèAò8²íÇã15Úäyùkí®^µù<C2B5>ù‡É<E280A1>q"Nóæ¥Î™,r5WókS4ðì1òT»SµŸFœ| §c!ÎÀ™8 g?‡÷&?$é:±Ny.ÎÃù|?É"/ÆéÌ<C3A9>™yŠ¼@äõRí?¡?-òOsm>¥ù’¼¿ÁE¸XœÐ
<EFBFBD>¹Dœ¬{áý8¿×f)Ïž§ßhmÑ|E.ÂåâŒúWGW0zAœm>£¹L^‰Å¸
\ëp=^Ç ¸QœÂÁºæ&ñÅLïÓ[÷WoæS®<53>Ÿb n_â"<22>³U|å<>Ú§*â´ùœ§®¿Æm¸]|ûëVÞ!þÂòðSþgµÙÉS7ÈÖ]X*þ9uŸU&þ·Žæ‡XŽâÿ;Vûݘp$¼r ÿ†6_°²ÝÉ]܃{%0i<30>ÎÙ'ÁY¥á§³Ok³Ÿ§ìÿôÀƒ\P÷Þà<E28099>5š¿Eûþ‘à‹‡Ú•ÐñðN$Tù\c¬lßçhßðJ U÷Õ9Uâ&ŸÔ|«ñ„¸)w´?)nijí=UÖGS¬lwrψ[©£gµ'§}oïà9¬Áóhßà x/‰{8«ö³ªŸéj—Yí¾¸5µ¹Bó@ÜË´¹JóPÜÇ#µ¹&î/¿é-ÜíIÛ¢½A¡ƒƒ±6GvF{§´@?0c±%±Æa<†0[cº˜ˆIho¨dô0S0Ó0Ûb;ÌÄzho´£0 Û`GìŽõ±Úû¨'ö†Ø³±6Âþ˜<C3BE>öΊÆ€ö¶ÊÃÆØ›â\<5C>«p(ñ8í eo%{Ù{g ÚÂÞ5ö<19>0'áD´·Àdœö¾˜ŠÓqâ œ‰³p6ÎA{ÌÅy8íÉoÏa{ÚÛ~!.Ÿí^„+q9Ú³ÚžÏÅøËq®ÁuhÏX{f`¸ O =Íìé´<17>à<„Õx+ñ:žÁ“XƒöL¸ˆçñ^ÂÇxoã=¼ƒwñxkãõw²ˆûû_šñüyš}âµMs@¼„lÍAñêæ‡ÄËx¥Ù/·³fO¼â-ùOs¤xE™šë‰·òæT¬<54>­Ú¯½ý½<C3BD>.Þꟴ‰Æ&Ø [`Æb+ŒÇñJ.ó?ÑW
xÚ5ÖWPUGÇñýŸ{¹÷+¢H•bKQƒbo1ÅŠŠ-j4*;jÐXc¯€5bP<13>%bc2™ÉCâd&'8yÉħ´sùÏüæ·{ö.—Ã.Æóæ<C3B3>c¤Ñ˜<C391>¹¦·ÒD`[l<>c<cÄý¡Šù<C5A0>&šFÐAú1 D= ÇضÆ6|ŠÍm±¶ÇH´»ŠB»ŸŽØ c°3vÁXìŠq<18> ˜ˆI˜ŒÝ0S1 Ó±;öÀžØ {cfŠ1­¾±PîÃ7\ÌÏewØWLÂß:Ú<>ÑŒvÆêhFwÒÇŠéÓ_û·èw¿Åz|,fà
<EFBFBD>óHLÖ`ÍÄL|¥y fá ÌÆÁ8‡Š™T£óßæ³v™öZš½äabæoÔ~8ý~r.Ž³<EGG2z<32><
Ÿãhƒcqœ˜uéúÔxœ€Åõ ½<>fK²ŽNbÍ21%9Ú¼CsXLi±6“iŽðƉ9¯ý»ôÇÈSpª˜Š¾:ú£'ÉÓȶŸŽybªÚÌóòUÓ®~ói3“ù§ÉÏpÎóê<17>3G¤v¸æ¹"u³4çóì9ò<‡s´ŸOžü .À\ˆp1.Á¥"ßýÚ›ü§ë¼Ï:äe¸Wðý$‰¼˜¢3?`æ%òJÆ5Ú¯¢¿,òo¤6Ò|A^<5E>wq ®'¸NgŠ“ñ ´'³A<41>xöš89“´YGó%¹×3¹ùïåcF«ÅÉ<C385>Òæšò܈p3nÁ­¸ ñ6nÇâŒÒ5wŠ¯ÓÌÐ>}1Í?õ§|Ê-r–à.ñ%¬Ò9»ÅwÈizª,FÏxªü5îÁ½â;Þ¼ò>ñ=å_xIý<õÙzŠióg•Šÿ¯7šŸà!,ÿ?ÑÚ°¼“¡•ÃfÔjó9+Û<><Ä#xTÂf<C382>Ô9Ç$°x_è©À Úç)û;}Š'ð¤V6¿·§$ðÓUÍоÿg$ðâög%x>´ ¯Í9V¶ïó´ox¹+›Ï®
q“*4ßÃJ¼ nò]í/Š{0±éž*ÍÖæ<>\Æ+â–¹:z•Q{rÚ÷ö>^Ã*¼Žö=¬ÆxSÜÓ=>«ò¹®VÃjõâVm×æÍcqï¬Õ¦æ‰¸Ï&hS'ë-œ…ö¤í…‚£ÑÞ cÐÁ±…ÑèþhèÇ0ì„1ØØc±+1ã0]LÀD´7TzŽÉØ S°Ø[¢½Ñ`oŒÀ LÇLˆ­°5ÚûhfcŒCp(¶Åa˜†öÎj‡¹8ím5
Ûc$vÀq¸7áxœ€Sq"ÚÊÞJö&²÷δ7…½kì-3ópÎÆYho<68>98í}1àJ,À…¸ã\Šö.X†ËqÚ“ßžÃö´·'üj\ƒk±í^„p=Ú³ÚžÏñ9Âí¸·¡=cí™Y¥¸÷á¼€ö4³§ÓQ<ƒ'ðVâY,ÇÛx/bÚ3á^Ç:¼‰ÏðÞÃGxâSñ¶ÆêÿÉ"î¯5;âùs5ûÄ Ôkö±Ks˜xñÙšâ%ŽÐ/í¥fW¼}4{âå‡k¯ð?Í-Ä+ꮹ¥xîj0E¼MÇ´·ÿo§Š·ù…6í0£°#¦a vÁ®<18>˜,^Iµ1ÿË¡WI
endstream
endobj
startxref
624048
624046
%%EOF

View File

@ -464,7 +464,7 @@ The second step is to create the source directory and pull the |git| repository:
Third and final step, build & install: ::
dummy@lepka:src$ ./bootstrap/ccp.py --project=support \
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \
--make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
@ -477,7 +477,7 @@ stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1``
Under |RHEL6| or clones, you must build using the |devtoolset2|: ::
dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--devtoolset-2 --make="-j4 install"
If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument.
@ -499,7 +499,7 @@ In the |Coriolis| |git| repository, two branches are present:
command just after the first step: ::
dummy@lepka:~$ git checkout devel
dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--make="-j4 install" --debug
Be aware that it may requires newer versions of the dependencies and may introduce

View File

@ -34,9 +34,6 @@ namespace {
using namespace std;
using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::ltracein;
using Hurricane::ltraceout;
using Hurricane::ForEachIterator;
using Hurricane::Warning;
using Hurricane::Error;
@ -118,8 +115,8 @@ namespace {
void Slice::merge ( DbU::Unit source, DbU::Unit target )
{
Interval chunkToMerge = _xspan.getIntersection( Interval(source,target) );
ltrace(300) << " Slice::merge() " << " " << chunkToMerge << endl;
ltrace(300) << " | " << _getString() << endl;
cdebug.log(129) << " Slice::merge() " << " " << chunkToMerge << endl;
cdebug.log(129) << " | " << _getString() << endl;
if (chunkToMerge.isEmpty()) return;
@ -129,20 +126,20 @@ namespace {
while ( ichunk != _chunks.end() ) {
if (imerge == _chunks.end()) {
if (chunkToMerge.getVMax() < (*ichunk).getVMin()) {
ltrace(300) << " | Insert before " << *ichunk << endl;
cdebug.log(129) << " | Insert before " << *ichunk << endl;
imerge = _chunks.insert( ichunk, chunkToMerge );
break;
}
if (chunkToMerge.intersect(*ichunk)) {
ltrace(300) << " | Merge with " << *ichunk << endl;
cdebug.log(129) << " | Merge with " << *ichunk << endl;
imerge = ichunk;
(*imerge).merge( chunkToMerge );
}
} else {
if (chunkToMerge.getVMax() >= (*ichunk).getVMin()) {
(*imerge).merge( *ichunk );
ltrace(300) << " | Absorb (erase) " << *ichunk << endl;
cdebug.log(129) << " | Absorb (erase) " << *ichunk << endl;
ichunk = _chunks.erase( ichunk );
continue;
} else
@ -154,8 +151,8 @@ namespace {
if (imerge == _chunks.end()) {
_chunks.insert( ichunk, chunkToMerge );
ltrace(300) << " | Insert at end " << DbU::getValueString(_ybottom) << " " << chunkToMerge << endl;
ltrace(300) << " | " << _getString() << endl;
cdebug.log(129) << " | Insert at end " << DbU::getValueString(_ybottom) << " " << chunkToMerge << endl;
cdebug.log(129) << " | " << _getString() << endl;
}
}

View File

@ -41,7 +41,6 @@ namespace Etesian {
using std::ostringstream;
using std::vector;
using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::Warning;
using Hurricane::Technology;
using Hurricane::DataBase;
@ -81,7 +80,7 @@ namespace Etesian {
Configuration::~Configuration ()
{
ltrace(89) << "About to delete attribute _cg (CellGauge)." << endl;
cdebug.log(129) << "About to delete attribute _cg (CellGauge)." << endl;
_cg->destroy ();
}

View File

@ -191,9 +191,6 @@ namespace Etesian {
using Utilities::Dots;
using Hurricane::DebugSession;
using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::ltracein;
using Hurricane::ltraceout;
using Hurricane::ForEachIterator;
using Hurricane::Bug;
using Hurricane::Error;
@ -290,13 +287,12 @@ namespace Etesian {
void EtesianEngine::_preDestroy ()
{
ltrace(90) << "EtesianEngine::_preDestroy()" << endl;
ltracein(90);
cdebug.log(129,1) << "EtesianEngine::_preDestroy()" << endl;
cmess1 << " o Deleting ToolEngine<" << getName() << "> from Cell <"
<< getCell()->getName() << ">" << endl;
ltraceout(90);
cdebug.log(129,-1);
}

View File

@ -26,7 +26,6 @@ namespace Etesian {
using std::cerr;
using std::endl;
using Hurricane::tab;
using Hurricane::in_trace;
using Isobar::__cs;
using CRL::PyTypeToolEngine;
using CRL::PyTypeGraphicTool;
@ -66,7 +65,7 @@ extern "C" {
// Module Initialization : "initEtesian ()"
DL_EXPORT(void) initEtesian () {
trace << "initEtesian()" << endl;
cdebug.log(34) << "initEtesian()" << endl;
PyEtesianEngine_LinkPyType();
PyGraphicEtesianEngine_LinkPyType();

View File

@ -34,8 +34,6 @@ namespace Etesian {
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::trace_on;
using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error;
@ -67,7 +65,7 @@ extern "C" {
static PyObject* PyEtesianEngine_get ( PyObject*, PyObject* args )
{
trace << "PyEtesianEngine_get()" << endl;
cdebug.log(34) << "PyEtesianEngine_get()" << endl;
EtesianEngine* etesian = NULL;
@ -84,7 +82,7 @@ extern "C" {
static PyObject* PyEtesianEngine_create ( PyObject*, PyObject* args )
{
trace << "PyEtesianEngine_create()" << endl;
cdebug.log(34) << "PyEtesianEngine_create()" << endl;
EtesianEngine* etesian = NULL;
@ -110,7 +108,7 @@ extern "C" {
static PyObject* PyEtesianEngine_setViewer ( PyEtesianEngine* self, PyObject* args )
{
trace << "PyEtesianEngine_setViewer ()" << endl;
cdebug.log(34) << "PyEtesianEngine_setViewer ()" << endl;
HTRY
METHOD_HEAD( "EtesianEngine.setViewer()" )
@ -131,7 +129,7 @@ extern "C" {
static PyObject* PyEtesianEngine_place ( PyEtesianEngine* self )
{
trace << "PyEtesianEngine_place()" << endl;
cdebug.log(34) << "PyEtesianEngine_place()" << endl;
HTRY
METHOD_HEAD("EtesianEngine.place()")
if (etesian->getViewer()) {

View File

@ -49,7 +49,7 @@ extern "C" {
static PyObject* PyGraphicEtesianEngine_grab ( PyObject* )
{
trace << "PyGraphicEtesianEngine_grab()" << endl;
cdebug.log(34) << "PyGraphicEtesianEngine_grab()" << endl;
PyGraphicEtesianEngine* pyGraphicEtesianEngine = NULL;
HTRY
@ -65,7 +65,7 @@ extern "C" {
static PyObject* PyGraphicEtesianEngine_getCell ( PyGraphicEtesianEngine* self )
{
trace << "PyGraphicEtesianEngine_getCell ()" << endl;
cdebug.log(34) << "PyGraphicEtesianEngine_getCell ()" << endl;
Cell* cell = NULL;

View File

@ -1,7 +1,74 @@
// -*- C++ -*-
/*! \class tstream
* \brief Trace & indentation enabled stream.
*
* Traced \e stream are a derived class of std::ostream that provides
* integrated indentation and selective printing according to a
* verbosity level. Only messages comprised between \c minLevel and
* \c maxLevel are to be printed:
\f[
minLevel \leq level < maxLevel
\f]
*
* The cdebug instance of this class, in conjunction with Hurricane::DebugSession
* is provided to create tailored program traces. cdebug is a global
* variable which is put in the root namespace (not the Hurricane namespace).
*/
//! \function int tstream::getMinLevel () const;
//! \Return The current mimimum level for the messages to be printeds
//! (equal or superior).
//! \function int tstream::getMaxLevel () const;
//! \Return The current maximum level for the messages to be printeds
//! (strictly inferior).
//! \function int tstream::setMinLevel ( int level );
//! Sets the minimum level, returns the \e previous value of the level.
//! \function int tstream::setMaxLevel ( int level );
//! Sets the maximum level, returns the \e previous value of the level.
//! \function int tstream::getLevel () const;
//! \Return The level of the latest message that was submitted to the stream.
//! It is automatically set up after any call to tstream::log() or
//! tstream::tabw().
//! \function int tstream::setLevel ( int level );
//! Sets the current level, returns the \e previous value of the level.
//! This is the level of the latest message that was submitted to the
//! stream.
//! \function bool tstream::enabled () const;
//! \Return \true if the currently memorised level is inside the current valid range.
//! \function bool tstream::enabled ( int level ) const;
//! \Return \true if this level is inside the current valid range.
//! \function tstream& tstream::log ( int level, int count=0 ) const;
//! \param level The level into which to print.
//! \param count Increment/decrement the number of tabulations to print
//! at the beginning of a line.
//! \return A reference to the stream so the operator \c << can be used.
//!
//! Send a message into the stream, that will be displayed if \c level
//! is enabled. The number of tabulations printed at the beginning of
//! the line will be changed \e after this message has been printed
//! (or discarted).
//! \function tstream& tstream::tabw ( int level, int count=0 ) const;
//! \param level The level into which to print.
//! \param count Increment/decrement the number of tabulations to print
//! at the beginning of a line.
//! \return A reference to the stream.
//!
//! This function is dedicated to change the indentation level, but
//! not print something on the stream (event if it returns a reference
//! to it).
namespace Hurricane {
/*! \namespace Hurricane

View File

@ -0,0 +1,117 @@
// -*- C++ -*-
namespace Hurricane {
/*! \class DebugSession
* \brief Enable/Disable trace information (\c API).
*
* DebugSession provide a way to control what and when text send through the
* cdebug stream is printed. cdebug display selectively the trace/debug messages
* between a \c minLevel and a \c maxLevel :
\f[
minLevel \leq level < maxLevel
\f]
*
* DebugSession manage a stack of \c (min,max) pairs so multiple session
* can be opened. On opening a new session the \c (min,max) pair is
* pushed on the top of the stack and define the active range of trace
* levels. On closing, the pair is removed from the top and the previous
* range became active again. Do not forget to match any opening with a
* closing.
*
* In addition to the levels, a DebugSession also can be triggered by a
* \e symbol (i.e. a \c (void*) pointer). The DebugSession has contains
* a user managed table of symbols. When, in opening a session, you give
* a symbol, the session will actually changes the trace levels only if
* the symbol is in the internal table. Otherwise a session is still
* opened \e but it will keep the current trace levels. So, in any case
* the session must be closed.
*
*
* \section secTraceLevels Trace Levels
*
*
* To avoid mixing messages between different parts of the software,
* the following allotments have been done:
*
* <center>
* <table class="UserDefined" width="50%">
* <caption>Trace/Debug level allotments (provisional)</caption>
* <tr> <th colspan=3>\b C++ / Coriolis
* <tr> <th>\b Tool/Library <th>\b Minimum <th>\b Maximum
* <tr> <td>Hurricane <td>\c 0 <td>\c 19
* <tr> <td>CRL Core <td>\c 100 <td>\c 110
* <tr> <td>Anabatic <td>\c 110 <td>\c 120
* <tr> <td>Etesian <td>\c 120 <td>\c 130
* <tr> <td>Knik <td>\c 130 <td>\c 140
* <tr> <td>Katabatic <td>\c 140 <td>\c 150
* <tr> <td>Kite <td>\c 150 <td>\c 160
* <tr> <td>Solstice <td>\c 160 <td>\c 170
* <tr> <td>Equinox <td>\c 170 <td>\c 180
* <tr> <td>Unicorn <td>\c 180 <td>\c 190
* <tr> <th colspan=3>\b C++ / CHAMS
* <tr> <th>\b Tool/Library <th>\b Minimum <th>\b Maximum
* <tr> <td>HurricaneAMS <td>\c 500 <td>\c 510
* <tr> <td>amsCore <td>\c 510 <td>\c 520
* <tr> <td>Pharos <td>\c 520 <td>\c 530
* <tr> <td>Isis <td>\c 530 <td>\c 540
* <tr> <td>Horus <td>\c 530 <td>\c 540
* <tr> <th colspan=3>\b Python Wrappers / Coriolis
* <tr> <th>\b Tool/Library <th>\b Minimum <th>\b Maximum
* <tr> <td>Isobar <td>\c 20 <td>\c 30
* <tr> <td>CRL Core/Python <td>\c 30 <td>\c 32
* <tr> <td>Anabatic/Python <td>\c 32 <td>\c 34
* <tr> <td>Etesian/Python <td>\c 34 <td>\c 36
* <tr> <td>Knik/Python <td>\c 36 <td>\c 38
* <tr> <td>Katabatic/Python <td>\c 38 <td>\c 40
* <tr> <td>Kite/Python <td>\c 40 <td>\c 42
* <tr> <td>Solstice/Python <td>\c 42 <td>\c 44
* <tr> <td>Equinox/Python <td>\c 44 <td>\c 46
* <tr> <td>Unicorn/Python <td>\c 46 <td>\c 48
* <tr> <th colspan=3>\b Python Wrappers / CHAMS
* <tr> <th>\b Tool/Library <th>\b Minimum <th>\b Maximum
* <tr> <td>isobarAMS <td>\c 48 <td>\c 50
* <tr> <td>amsCore <td>\c 50 <td>\c 51
* <tr> <td>Pharos/Python <td>\c 52 <td>\c 60
* <tr> <td>Isis/Python <td>\c 60 <td>\c 61
* <tr> <td>Horus/Python <td>\c 61 <td>\c 62
* <tr> <th colspan=3>\b Special levels
* <tr> <td>Determinim check <td>\c 9000 <td>\c 9001
* <tr> <td>JSON parsers/drivers<td>\c 19 <td>\c 20
* </table>
* </center>
*/
//! \function void DebugSession::open ( int minLevel, int maxLevel );
//! \param minLevel minimum debug/tracelevel (>=).
//! \param maxLevel maximum debug/tracelevel (<).
//!
//! Change the current debug level to (minLevel,maxLevel).
//! The previous range is stacked and will be restored when this
//! session will be closed.
//! \function void DebugSession::open ( const void* symbol, int minLevel, int maxLevel );
//! \param symbol symbol to match.
//! \param minLevel minimum debug/tracelevel (>=).
//! \param maxLevel maximum debug/tracelevel (<).
//!
//! Change the current debug level to (minLevel,maxLevel) only if
//! \c symbol is traced. If the \c symbol is traced, then the new levels pair
//! is stacked, otherwise the current level are stacked (we duplicate the
//! top of the stack). This session, successful or not, must be closed as
//! any other.
//! \function void DebugSession::close ();
//! Close a DebugSession and restore the previous trace levels.
//! \function bool DebugSession::isTraced ( const void* symbol );
//! \Returns \true if the \c symbol is in the DebugSession symbol table.
//! \function void DebugSession::addToTrace ( const void* symbol );
//! Adds the \c symbol to the table of traced symbols.
//! \function void DebugSession::addToTrace ( const Cell* cell, const Name& name );
//! Adds the Net \c name from \c Cell to the table of traced symbols.
} // Hurricane namespace.

View File

@ -220,6 +220,18 @@
font-size: 110%;
}
table.UserDefined {
border: 1px solid;
}
table.UserDefined th {
border: 1px solid;
}
table.UserDefined td {
padding: 0px 5px;
}
table.DoxUser td, table.DoxUser th {
padding: 0px 5px;
border: 0px;

View File

@ -42,50 +42,52 @@
* This enumeration defines the orientation associated to a
* transformation object.
*
* <table>
* <caption>Orientation codes and associated transformation matrix</caption>
* <tr>
* <td><center>Name</center>
* <td><center>Aspect</center>
* <td><center>Code</center>
* <td><center>Signification</center>
* <td width="6%"><center>a</center>
* <td width="6%"><center>b</center>
* <td width="6%"><center>c</center>
* <td width="6%"><center>d</center>
* <tr>
* <td><center><b>ID</b></center> <td>\image html transf-ID.png ""
* <td> <center><b>0</b></center> <td> Identity
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>1</center>
* <tr>
* <td><center><b>R1</b></center> <td>\image html transf-R1.png ""
* <td> <center><b>1</b></center> <td> Simple rotation (90°)
* <td> <center>0</center> <td> <center>-1</center> <td> <center>1</center> <td> <center>0</center>
* <tr>
* <td><center><b>R2</b></center> <td>\image html transf-R2.png ""
* <td> <center><b>2</b></center> <td> Double rotation (180°)
* <td> <center>-1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>R3</b></center> <td>\image html transf-R3.png ""
* <td><center><b>3</b></center><td>Triple rotation (270°)
* <td><center>0</center><td><center>1</center><td><center>-1</center><td><center>0</center>
* <tr>
* <td><center><b>MX</b></center> <td>\image html transf-MX.png ""
* <td> <center><b>4</b></center> <td>Horizontal symetry (Mirror X)
* <td> <center>-1 </center><td> <center>0 </center><td> <center>0 </center><td> <center>1</center>
* <tr>
* <td><center><b>XR</b></center> <td>\image html transf-XR.png ""
* <td><center><b>5</b></center><td>Horizontal symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>-1</center> <td> <center>-1</center> <td> <center>0</center>
* <tr>
* <td><center><b>MY</b></center><td>\image html transf-MY.png ""
* <td><center><b>6</b></center><td>Vertical symetry (Mirror Y)
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>YR</b></center> <td>\image html transf-YR.png ""
* <td><center><b>7</b></center><td>Vertical symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>1</center> <td> <center>1</center> <td> <center>0</center>
* </table>
* <center>
* <table class="UserDefined">
* <caption>Orientation codes and associated transformation matrix</caption>
* <tr>
* <th><center>Name</center>
* <th><center>Aspect</center>
* <th><center>Code</center>
* <th><center>Signification</center>
* <th width="6%"><center>a</center>
* <th width="6%"><center>b</center>
* <th width="6%"><center>c</center>
* <th width="6%"><center>d</center>
* <tr>
* <td><center><b>ID</b></center> <td>\image html transf-ID.png ""
* <td> <center><b>0</b></center> <td> Identity
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>1</center>
* <tr>
* <td><center><b>R1</b></center> <td>\image html transf-R1.png ""
* <td> <center><b>1</b></center> <td> Simple rotation (90°)
* <td> <center>0</center> <td> <center>-1</center> <td> <center>1</center> <td> <center>0</center>
* <tr>
* <td><center><b>R2</b></center> <td>\image html transf-R2.png ""
* <td> <center><b>2</b></center> <td> Double rotation (180°)
* <td> <center>-1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>R3</b></center> <td>\image html transf-R3.png ""
* <td><center><b>3</b></center><td>Triple rotation (270°)
* <td><center>0</center><td><center>1</center><td><center>-1</center><td><center>0</center>
* <tr>
* <td><center><b>MX</b></center> <td>\image html transf-MX.png ""
* <td> <center><b>4</b></center> <td>Horizontal symetry (Mirror X)
* <td> <center>-1 </center><td> <center>0 </center><td> <center>0 </center><td> <center>1</center>
* <tr>
* <td><center><b>XR</b></center> <td>\image html transf-XR.png ""
* <td><center><b>5</b></center><td>Horizontal symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>-1</center> <td> <center>-1</center> <td> <center>0</center>
* <tr>
* <td><center><b>MY</b></center><td>\image html transf-MY.png ""
* <td><center><b>6</b></center><td>Vertical symetry (Mirror Y)
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>YR</b></center> <td>\image html transf-YR.png ""
* <td><center><b>7</b></center><td>Vertical symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>1</center> <td> <center>1</center> <td> <center>0</center>
* </table>
* </center>
*
* The transformation formula is given by:
\f[

View File

@ -7,6 +7,43 @@
/*! \class UpdateSession
* \brief UpdateSession description (\b API)
*
* \section secUpdateSessionMechanism Update Session Mechanism
*
* Here is only an outline of the UpdateSession mechanism. The classes
* involved are:
* - Go (Graphical Objects and their sub-classes).
* - Cell and it's QuadTree(s). Note that the Cell is \e not a Go.
* - UpdateSession.
*
* When a Go is to be displayed, it has to be inserted inside one
* of the QuadTree of it's owner Cell. QuadTree allows fast geometric
* queries which are used extensively to perform the display.
* If a Go is \b not inserted in a QuadTree it will \b not be displayed
* at all or be included in any geometric query. When we insert a Go
* in a QuadTree, we talk about \b materialization. So a Go can be in
* two states: \b materialized or \b unmaterialized. The default behavior
* is to materialize a Go as soon as it is created.
*
* Now comes the UpdateSession mechanism. When the characteristics
* of a Go are changed, it may be needed to update it's position inside
* the QuadTree, or even to change of QuadTree (in case of a Layer change).
* Basically, the mechanism proceed in three stages:
*
* - Start a new UpdateSession (it's a SharedProperty).
*
* - When a Go is changed, the \c invalidate() method is called, that
* \e unmaterialize() it, then adds it to the current UpdateSession.
* This is done by adding the UpdateSession, as a property, to the Go.
* The Go owner (it's Cell) is also notified a \c Cell::Flags::CellAboutToChange.
*
* - On closing the UpdateSession, all the stored Gos are \b materialized
* again. The owner Cell and their instances are then send a
* notification \c Cell::Flags::CellChanged.
*
* It is very important to notice that the Cells gets change notifications
* only when a Go is \e changed, not when it is \e created. If we want the
* Cell to be notified, we must invalidate it manually. This is particularly
* critical when working with ExtensionGo.
*/
}

View File

@ -586,6 +586,8 @@ WARN_LOGFILE = doxygen.warn.log
# with spaces.
INPUT = Generalities.dox \
../../src/hurricane/hurricane/DebugSession.h \
DebugSession.dox \
JsonSupport.dox \
Initializer.dox \
../../src/hurricane/hurricane/Initializer.h \

View File

@ -352,7 +352,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonBasicLayer::JsonBasicLayer()" << endl;
cdebug.log(19) << "JsonBasicLayer::JsonBasicLayer()" << endl;
add( "_material" , typeid(string) );
add( "_extractNumber", typeid(string) );
@ -375,7 +375,7 @@ namespace Hurricane {
void JsonBasicLayer::toData(JsonStack& stack)
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonBasicLayer::toData" );
@ -449,7 +449,7 @@ namespace Hurricane {
update( stack, basicLayer );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -405,10 +405,10 @@ void JsonBox::toData(JsonStack& stack)
if ( (xMin <= xMax) and (yMin <= yMax) )
box.merge( xMin, yMin, xMax, yMax );
ltrace(51) << "Box(" << xMin << ", "
<< yMin << ", "
<< xMax << ", "
<< yMax << ")" << endl;
cdebug.log(19) << "Box(" << xMin << ", "
<< yMin << ", "
<< xMax << ", "
<< yMax << ")" << endl;
update( stack, box );
}

View File

@ -194,7 +194,7 @@ namespace Hurricane {
UniquifyRelation* relation = NULL;
Cell* cell = dynamic_cast<Cell*>( dbo );
ltrace(51) << "topDBo:" << dbo << endl;
cdebug.log(19) << "topDBo:" << dbo << endl;
if (cell) {
relation = UniquifyRelation::get( cell );
@ -394,7 +394,7 @@ namespace Hurricane {
SlavedsRelation* relation = NULL;
Cell* cell = dynamic_cast<Cell*>( dbo );
ltrace(51) << "topDBo:" << dbo << endl;
cdebug.log(19) << "topDBo:" << dbo << endl;
if (cell) {
relation = SlavedsRelation::get( cell );
@ -667,12 +667,12 @@ Entity* Cell::getEntity(const Signature& signature) const
return NULL;
}
ltrace(51) << "Cell::getEntity(): <" << getName() << ">, Net:<" << net->getName() << ">" << endl;
cdebug.log(18) << "Cell::getEntity(): <" << getName() << ">, Net:<" << net->getName() << ">" << endl;
if (signature.getType() == Signature::TypeContact) {
ltrace(51) << "Looking in Contacts..." << endl;
cdebug.log(18) << "Looking in Contacts..." << endl;
for ( Contact* component : getComponents().getSubSet<Contact*>() ) {
ltrace(51) << "| " << component << endl;
cdebug.log(18) << "| " << component << endl;
if ( (component->getLayer () == signature.getLayer())
and (component->getDx () == signature.getDim(Signature::ContactDx))
and (component->getDy () == signature.getDim(Signature::ContactDy))
@ -683,9 +683,9 @@ Entity* Cell::getEntity(const Signature& signature) const
}
if (signature.getType() == Signature::TypeVertical) {
ltrace(51) << "Looking in Verticals..." << endl;
cdebug.log(18) << "Looking in Verticals..." << endl;
for ( Vertical* component : getComponents().getSubSet<Vertical*>() ) {
ltrace(51) << "| " << component << endl;
cdebug.log(18) << "| " << component << endl;
if ( (component->getLayer () == signature.getLayer())
and (component->getWidth () == signature.getDim(Signature::VerticalWidth))
and (component->getX () == signature.getDim(Signature::VerticalX))
@ -696,9 +696,9 @@ Entity* Cell::getEntity(const Signature& signature) const
}
if (signature.getType() == Signature::TypeHorizontal) {
ltrace(51) << "Looking in Horizontals..." << endl;
cdebug.log(18) << "Looking in Horizontals..." << endl;
for ( Horizontal* component : getComponents().getSubSet<Horizontal*>() ) {
ltrace(51) << "| " << component << endl;
cdebug.log(18) << "| " << component << endl;
if ( (component->getLayer () == signature.getLayer())
and (component->getWidth () == signature.getDim(Signature::HorizontalWidth))
and (component->getY () == signature.getDim(Signature::HorizontalY))
@ -709,9 +709,9 @@ Entity* Cell::getEntity(const Signature& signature) const
}
if (signature.getType() == Signature::TypePad) {
ltrace(51) << "Looking in Pads..." << endl;
cdebug.log(18) << "Looking in Pads..." << endl;
for ( Pad* component : getComponents().getSubSet<Pad*>() ) {
ltrace(51) << "| " << component << endl;
cdebug.log(18) << "| " << component << endl;
if ( (component->getLayer() == signature.getLayer())
and (component->getBoundingBox().getXMin() == signature.getDim(Signature::PadXMin))
and (component->getBoundingBox().getYMin() == signature.getDim(Signature::PadYMin))
@ -817,7 +817,7 @@ DeepNet* Cell::getDeepNet ( Path path, const Net* leafNet ) const
void Cell::flattenNets(unsigned int flags)
// ***************************************
{
trace << "Cell::flattenNets() flags:0x" << hex << flags << endl;
cdebug.log(18) << "Cell::flattenNets() flags:0x" << hex << flags << endl;
UpdateSession::open();
@ -1003,8 +1003,7 @@ Cell* Cell::getClone()
void Cell::uniquify(unsigned int depth)
// ************************************
{
ltrace(10) << "Cell::uniquify() " << this << endl;
ltracein(10);
cdebug.log(18,1) << "Cell::uniquify() " << this << endl;
vector<DeepNet*> deepNets;
for ( DeepNet* deepNet : getNets().getSubSet<DeepNet*>() ) {
@ -1020,7 +1019,7 @@ void Cell::uniquify(unsigned int depth)
for ( Instance* instance : getInstances() ) {
Cell* masterCell = instance->getMasterCell();
ltrace(10) << "| " << instance << endl;
cdebug.log(18) << "| " << instance << endl;
if (masterCell->isTerminal()) continue;
if (masterCells.find(masterCell) == masterCells.end()) {
@ -1043,8 +1042,8 @@ void Cell::uniquify(unsigned int depth)
cell->uniquify( depth-1 );
}
ltraceout(10);
ltrace(10) << "Cell::uniquify() END " << this << endl;
cdebug.tabw(18,-1);
cdebug.log(18) << "Cell::uniquify() END " << this << endl;
}
void Cell::materialize()

View File

@ -22,80 +22,11 @@
#include "hurricane/Commons.h"
tstream cdebug ( std::cerr );
namespace Hurricane {
// ****************************************************************************************************
// Tracing tools
// ****************************************************************************************************
static long TRACE_LEVEL = 0;
static unsigned int TRACE_SHOW_LEVEL = (unsigned int)-1;
bool in_trace()
// ************
{
return (0 < TRACE_LEVEL);
}
void trace_on()
// ************
{
TRACE_LEVEL++;
}
void trace_off()
// *************
{
if (0 < TRACE_LEVEL) TRACE_LEVEL--;
}
void trace_in()
// ************
{
if (0 < TRACE_LEVEL) tab++;
}
void trace_out()
// *************
{
if (0 < TRACE_LEVEL) tab--;
}
bool inltrace ( unsigned int level )
//***********************************
{
return TRACE_SHOW_LEVEL <= level;
}
unsigned int ltracelevel ()
//**************************
{
return TRACE_SHOW_LEVEL;
}
unsigned int ltracelevel ( unsigned int level )
//**********************************************
{
unsigned int previousLevel = TRACE_SHOW_LEVEL;
TRACE_SHOW_LEVEL = level;
return previousLevel;
}
void ltracein (unsigned int level, unsigned int count )
//******************************************************
{
if ( inltrace(level) ) while ( count-- ) tab++;
}
void ltraceout (unsigned int level, unsigned int count )
//*******************************************************
{
if ( inltrace(level) ) while ( count-- ) tab--;
}
// -------------------------------------------------------------------
// Function : "demangle ()".

View File

@ -330,37 +330,37 @@ ComponentFilter Component::getIsUnderFilter(const Box& area)
void Component::materialize()
// **************************
{
// trace << "materialize() - " << this << endl;
cdebug.log(18) << "Component::materialize() - " << this << endl;
if (!isMaterialized()) {
Cell* cell = getCell();
const Layer* layer = getLayer();
if (cell && layer) {
Slice* slice = cell->getSlice(layer);
if (!slice) slice = Slice::_create(cell, layer);
QuadTree* quadTree = slice->_getQuadTree();
quadTree->insert(this);
cell->_fit(quadTree->getBoundingBox());
} else {
//cerr << "[WARNING] " << this << " not inserted into QuadTree." << endl;
}
if (!isMaterialized()) {
Cell* cell = getCell();
const Layer* layer = getLayer();
if (cell && layer) {
Slice* slice = cell->getSlice(layer);
if (!slice) slice = Slice::_create(cell, layer);
QuadTree* quadTree = slice->_getQuadTree();
quadTree->insert(this);
cell->_fit(quadTree->getBoundingBox());
} else {
//cerr << "[WARNING] " << this << " not inserted into QuadTree." << endl;
}
}
}
void Component::unmaterialize()
// ****************************
{
// trace << "Unmaterializing " << this << endl;
cdebug.log(18) << "Component::unmaterialize() " << this << endl;
if (isMaterialized()) {
Cell* cell = getCell();
Slice* slice = cell->getSlice(getLayer());
if (slice) {
cell->_unfit(getBoundingBox());
slice->_getQuadTree()->remove(this);
if (slice->isEmpty()) slice->_destroy();
}
if (isMaterialized()) {
Cell* cell = getCell();
Slice* slice = cell->getSlice(getLayer());
if (slice) {
cell->_unfit(getBoundingBox());
slice->_getQuadTree()->remove(this);
if (slice->isEmpty()) slice->_destroy();
}
}
}
void Component::invalidate(bool propagateFlag)
@ -408,8 +408,7 @@ void Component::_postCreate()
void Component::_preDestroy()
// *************************
{
// trace << "entering Component::_Predestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Component::_Predestroy: " << this << endl;
clearProperties();
@ -469,8 +468,8 @@ void Component::_preDestroy()
if (_net) _net->_getComponentSet()._remove(this);
// trace << "exiting Component::_Predestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting Component::_Predestroy:" << endl;
cdebug.tabw(18,-1);
}
void Component::_toJson( JsonWriter* writer ) const

View File

@ -325,15 +325,14 @@ void Contact::setOffset(const DbU::Unit& dx, const DbU::Unit& dy)
void Contact::_preDestroy()
// ***********************
{
// trace << "entering Contact::PreDestroy " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Contact::PreDestroy " << this << endl;
Inherit::_preDestroy();
Inherit::_preDestroy();
_anchorHook.detach();
_anchorHook.detach();
// trace << "exiting Contact::PreDestroy" << endl;
// trace_out();
cdebug.log(19) << "exiting Contact::PreDestroy" << endl;
cdebug.tabw(18,-1);
}
void Contact::_toJson(JsonWriter* writer) const

View File

@ -225,7 +225,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonContactLayer::JsonContactLayer()" << endl;
cdebug.log(19) << "JsonContactLayer::JsonContactLayer()" << endl;
add( "_metal" , typeid(string) );
add( "_cut" , typeid(string) );
@ -254,7 +254,7 @@ namespace Hurricane {
void JsonContactLayer::toData(JsonStack& stack)
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonContactLayer::toData" );
@ -333,7 +333,7 @@ namespace Hurricane {
update( stack, layer );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -56,7 +56,7 @@ namespace Hurricane {
)
, _netOccurrence(netOccurrence)
{
trace << "DeepNet::DeepNet() " << getCell() << " " << this << endl;
cdebug.log(18) << "DeepNet::DeepNet() " << getCell() << " " << this << endl;
}
@ -154,7 +154,7 @@ namespace Hurricane {
JsonDeepNet::JsonDeepNet ( unsigned long flags )
: JsonNet(flags)
{
ltrace(51) << "JsonDeepNet::JsonDeepNet()" << endl;
cdebug.log(19) << "JsonDeepNet::JsonDeepNet()" << endl;
add( "_netOccurrence", typeid(Occurrence) );
}
@ -174,7 +174,7 @@ namespace Hurricane {
void JsonDeepNet::toData(JsonStack& stack)
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonDeepNet::toData" );
presetId( stack );
@ -191,7 +191,7 @@ namespace Hurricane {
setName( ".Net" );
update( stack, _net );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -253,7 +253,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonDiffusionLayer::JsonDiffusionLayer()" << endl;
cdebug.log(19) << "JsonDiffusionLayer::JsonDiffusionLayer()" << endl;
add( "_active" , typeid(string) );
add( "_diffusion" , typeid(string) );
@ -281,7 +281,7 @@ namespace Hurricane {
void JsonDiffusionLayer::toData(JsonStack& stack)
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonDiffusionLayer::toData" );
@ -360,7 +360,7 @@ namespace Hurricane {
update( stack, layer );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -80,7 +80,7 @@ namespace Hurricane {
if (_flags & ForcedIdMode) {
if (_flags & NextIdSet) {
_flags &= ~NextIdSet;
ltrace(51) << demangle(typeid(*this).name())
cdebug.log(18) << demangle(typeid(*this).name())
<< "::getNextId(): Consuming the preset id:" << _nextId << endl;
return _nextId;
} else {
@ -223,14 +223,14 @@ namespace Hurricane {
void JsonEntityRef::toData ( JsonStack& stack )
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonEntityRef::toData" );
unsigned int jsonId = get<int64_t>( stack, "_id" );
Entity* entity = stack.getEntity<Entity*>( jsonId );
ltrace(51) << "jsonId:" << jsonId << " entity:" << entity << endl;
cdebug.log(19) << "jsonId:" << jsonId << " entity:" << entity << endl;
if (entity) {
JsonBaseArray<Entity*>* array = jget< JsonBaseArray<Entity*> >( stack );
@ -243,7 +243,7 @@ namespace Hurricane {
update( stack, NULL );
ltraceout(51);
cdebug.tabw(19,-1);
}
} // End of Hurricane namespace.

View File

@ -1,4 +1,3 @@
// -*- C++ -*-
//
// Copyright (c) BULL S.A. 2000-2016, All Rights Reserved
@ -19,12 +18,7 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,10 +26,7 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./ExtensionGo.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
@ -59,7 +50,7 @@ namespace Hurricane {
void ExtensionGo::_preDestroy ()
{
ltrace(10) << "ExtensionGo::_preDestroy() - " << (void*)this << endl;
cdebug.log(18) << "ExtensionGo::_preDestroy() - " << (void*)this << endl;
Go::_preDestroy ();
}

View File

@ -66,7 +66,7 @@ namespace Hurricane {
ExtensionSlice::~ExtensionSlice ()
{
ltrace(10) << "ExtensionSlice::~ExtensionSlice() - " << (void*)this << endl;
cdebug.log(18) << "ExtensionSlice::~ExtensionSlice() - " << (void*)this << endl;
_cell->_removeSlice ( this );
}

View File

@ -428,9 +428,8 @@ void Instance::setPlacementStatus(const PlacementStatus& placementStatus)
void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
// ************************************************************
{
ltrace(10) << "Instance::setMasterCell() on " << this << endl;
ltracein(10);
ltrace(10) << "NEW masterCell:" << masterCell << endl;
cdebug.log(18,1) << "Instance::setMasterCell() on " << this << endl;
cdebug.log(18) << "NEW masterCell:" << masterCell << endl;
if (masterCell != _masterCell) {
UpdateSession::open();
@ -476,14 +475,14 @@ void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
masterNetList.pop_front();
}
ltrace(10) << "Remove " << this << " from " << _masterCell << endl;
cdebug.log(18) << "Remove " << this << " from " << _masterCell << endl;
_masterCell->_getSlaveInstanceSet()._remove(this);
_masterCell = masterCell;
ltrace(10) << "Add (before) " << this << " to " << _masterCell << endl;
cdebug.log(18) << "Add (before) " << this << " to " << _masterCell << endl;
_masterCell->isUnique();
_masterCell->_getSlaveInstanceSet()._insert(this);
ltrace(10) << "Add (after) " << this << " to " << _masterCell << endl;
cdebug.log(18) << "Add (after) " << this << " to " << _masterCell << endl;
_masterCell->isUnique();
for_each_net(externalNet, _masterCell->getExternalNets()) {
@ -494,7 +493,7 @@ void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
UpdateSession::close();
}
ltraceout(10);
cdebug.tabw(19,-1);
}
void Instance::uniquify()

View File

@ -212,7 +212,7 @@ namespace Hurricane {
}
}
ltrace(51) << "HurricaneHandler::String() [key/typename] \"" << value << "\"." << endl;
cdebug.log(19) << "HurricaneHandler::String() [key/typename] \"" << value << "\"." << endl;
_key.clear();
return true;
}
@ -230,14 +230,14 @@ namespace Hurricane {
_key = key;
if (_state & TypenameKey) return true;
//ltrace(51) << "HurricaneHandler::Key() key:" << _key << " objects().size():" << objects().size() << endl;
//cdebug.log(19) << "HurricaneHandler::Key() key:" << _key << " objects().size():" << objects().size() << endl;
if (objects().back()) {
if ( doCallToData() and not _key.empty() and (_key[0] != '_') ) {
// The key is no longer a simple attribute of the object.
// Triggers it's creation in the Json stack.
ltrace(51) << "HurricaneHandler::key() Calling "
<< objects().back()->getTypeName() << "::toData(JsonStack&)." << endl;
cdebug.log(19) << "HurricaneHandler::key() Calling "
<< objects().back()->getTypeName() << "::toData(JsonStack&)." << endl;
objects().back()->toData( stack() );
}
}
@ -248,30 +248,28 @@ namespace Hurricane {
bool HurricaneHandler::StartObject ()
{
ltrace(50) << "Hurricane::StartObject()" << endl;
ltracein(50);
cdebug.log(19,1) << "Hurricane::StartObject()" << endl;
_state |= TypenameKey;
_objectName = _key;
objects().push_back( new JsonDummy() );
_key.clear();
ltrace(51) << "objects().push_back(NULL), size():" << objects().size() << "." << endl;
ltracein(50);
cdebug.log(19) << "objects().push_back(NULL), size():" << objects().size() << "." << endl;
cdebug.tabw(19,1);
return true;
}
bool HurricaneHandler::EndObject ( SizeType )
{
ltraceout(50,2);
ltrace(50) << "HurricaneHandler::EndObject()" << endl;
ltracein(50);
cdebug.tabw(19,-2);
cdebug.log(19) << "HurricaneHandler::EndObject()" << endl;
cdebug.tabw(19,1);
_objectName.clear();
if (not isDummy()) {
if (doCallToData()) {
ltrace(51) << "Calling " << objects().back()->getTypeName() << "::toData(JsonStack&)." << endl;
cdebug.log(19) << "Calling " << objects().back()->getTypeName() << "::toData(JsonStack&)." << endl;
objects().back()->toData( stack() );
}
if (stack().size() > 1) {
@ -279,22 +277,21 @@ namespace Hurricane {
}
}
ltrace(51) << "objects().pop_back(), size():" << objects().size() << "." << endl;
cdebug.log(19) << "objects().pop_back(), size():" << objects().size() << "." << endl;
if (objects().back()->issetFlags(JsonWriter::DBoObject))
stack().pop_back_dbo();
delete objects().back();
objects().pop_back();
ltraceout(50);
cdebug.tabw(19,-1);
return true;
}
bool HurricaneHandler::StartArray()
{
ltrace(50) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl;
ltracein(50);
cdebug.log(19,1) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl;
_objectName.clear();
if (_key[0] != '+') {
@ -309,8 +306,8 @@ namespace Hurricane {
bool HurricaneHandler::EndArray ( SizeType )
{
ltraceout(50);
ltrace(50) << "HurricaneHandler::EndArray()" << endl;
cdebug.tabw(19,-1);
cdebug.log(19) << "HurricaneHandler::EndArray()" << endl;
return true;
}
@ -350,11 +347,11 @@ namespace Hurricane {
{
close();
//DebugSession::open( 50 );
//DebugSession::open( 19, 20 );
fileName += ".json.bz2";
_file = fopen( fileName.c_str(), "r" );
ltrace(50) << "_file:" << _file << ", _buffer:" << (void*)_buffer << endl;
cdebug.log(19) << "_file:" << _file << ", _buffer:" << (void*)_buffer << endl;
if (not _file) {
throw Error( "JsonReader::parse(): Cannot open file \"%s\"."

View File

@ -1113,7 +1113,7 @@ string Net_SlavePlugs::Locator::_getString() const
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonNet::JsonNet()" << endl;
cdebug.log(19) << "JsonNet::JsonNet()" << endl;
add( "_name" , typeid(string) );
add( "_isGlobal" , typeid(bool) );
@ -1125,7 +1125,7 @@ string Net_SlavePlugs::Locator::_getString() const
add( "+componentSet" , typeid(JsonArray) );
add( "+externalComponents", typeid(JsonArray) );
ltrace(51) << "Disabling auto-materialization (" << _autoMaterialize << ")." << endl;
cdebug.log(19) << "Disabling auto-materialization (" << _autoMaterialize << ")." << endl;
Go::disableAutoMaterialization();
}
@ -1140,7 +1140,7 @@ string Net_SlavePlugs::Locator::_getString() const
if (_autoMaterialize) {
Go::enableAutoMaterialization();
ltrace(51) << "Enabling auto-materialization." << endl;
cdebug.log(18) << "Enabling auto-materialization." << endl;
}
}
@ -1155,7 +1155,7 @@ string Net_SlavePlugs::Locator::_getString() const
void JsonNet::toData ( JsonStack& stack )
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonNet::toData" );
presetId( stack );
@ -1169,7 +1169,7 @@ string Net_SlavePlugs::Locator::_getString() const
update( stack, _net );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -149,12 +149,12 @@ namespace Hurricane {
void JsonNetExternalComponents::toData ( JsonStack& stack )
{
ltracein(51);
cdebug.tabw(19,1);
check ( stack, "JsonNetExternalComponents::toData" );
update( stack, NULL );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -180,15 +180,14 @@ void Plug::_destroy()
void Plug::_preDestroy()
// ********************
{
// trace << "entering Plug::_preDestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Plug::_preDestroy: " << this << endl;
Inherit::_preDestroy();
Inherit::_preDestroy();
_instance->_getPlugMap()._remove(this);
_instance->_getPlugMap()._remove(this);
// trace << "exiting Plug::_preDestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting Plug::_preDestroy:" << endl;
cdebug.tabw(18,-1);
}
void Plug::_toJson(JsonWriter* writer) const
@ -290,7 +289,7 @@ void JsonPlug::toData(JsonStack& stack)
} else {
cerr << Error( "JsonPlug::toData(): Cannot find \".Instance\" in stack, skipping." ) << endl;
}
ltrace(51) << "Instance Plug contents ignored for now." << endl;
cdebug.log(19) << "Instance Plug contents ignored for now." << endl;
update( stack, plug );
}

View File

@ -81,20 +81,19 @@ void Quark::_postCreate()
void Quark::_preDestroy()
// *********************
{
// trace << "entering Quark::_preDestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Quark::_preDestroy: " << this << endl;
Inherit::_preDestroy();
Inherit::_preDestroy();
SharedPath* sharedPath = _occurrence._getSharedPath();
SharedPath* sharedPath = _occurrence._getSharedPath();
if (sharedPath)
sharedPath->_getQuarkMap()._remove(this);
else
if (NULL_SHARED_PATH_QUARK_MAP) NULL_SHARED_PATH_QUARK_MAP->_remove(this);
if (sharedPath)
sharedPath->_getQuarkMap()._remove(this);
else
if (NULL_SHARED_PATH_QUARK_MAP) NULL_SHARED_PATH_QUARK_MAP->_remove(this);
// trace << "exiting Quark::_preDestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting Quark::_preDestroy:" << endl;
cdebug.tabw(18,-1);
}
string Quark::_getString() const

View File

@ -350,7 +350,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonRegularLayer::JsonRegularLayer()" << endl;
cdebug.log(19) << "JsonRegularLayer::JsonRegularLayer()" << endl;
add( "_basicLayer" , typeid(string) );
add( "_enclosure" , typeid(int64_t) );
@ -373,7 +373,7 @@ namespace Hurricane {
void JsonRegularLayer::toData( JsonStack& stack )
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonRegularLayer::toData" );
@ -440,7 +440,7 @@ namespace Hurricane {
update( stack, layer );
ltraceout(51);
cdebug.tabw(19,-1);
}
} // Hurricane namespace.

View File

@ -236,15 +236,14 @@ namespace Hurricane {
void RoutingPad::_preDestroy ()
{
// trace << "entering RoutingPad::preDestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering RoutingPad::preDestroy: " << this << endl;
if ( not _occurrence.getPath().isEmpty() )
_occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
Inherit::_preDestroy();
// trace << "exiting RoutingPad::preDestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting RoutingPad::preDestroy:" << endl;
cdebug.tabw(18,-1);
}

View File

@ -179,22 +179,21 @@ void Rubber::_destroy()
void Rubber::_preDestroy()
// **********************
{
// trace << "entering Rubber::_preDestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Rubber::_preDestroy: " << this << endl;
Inherit::_preDestroy();
Inherit::_preDestroy();
_count = (unsigned)-1; // to avoid a new destruction
_count = (unsigned)-1; // to avoid a new destruction
for_each_hook(hook, getHooks()) {
hook->getComponent()->_setRubber(NULL);
end_for;
}
for_each_hook(hook, getHooks()) {
hook->getComponent()->_setRubber(NULL);
end_for;
}
_net->_getRubberSet()._remove(this);
_net->_getRubberSet()._remove(this);
// trace << "exiting Rubber::_preDestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting Rubber::_preDestroy:" << endl;
cdebug.tabw(18,-1);
}
string Rubber::_getString() const

View File

@ -294,16 +294,15 @@ void Segment::invert()
void Segment::_preDestroy()
// ***********************
{
// trace << "entering Segment::_preDestroy: " << this << endl;
// trace_in();
cdebug.log(18,1) << "entering Segment::_preDestroy: " << this << endl;
Inherit::_preDestroy();
Inherit::_preDestroy();
_sourceHook.detach();
_targetHook.detach();
_sourceHook.detach();
_targetHook.detach();
// trace << "exiting Segment::_preDestroy:" << endl;
// trace_out();
cdebug.log(18) << "exiting Segment::_preDestroy:" << endl;
cdebug.tabw(18,-1);
}
void Segment::_toJson(JsonWriter* writer) const

View File

@ -107,7 +107,7 @@ namespace Hurricane {
void JsonSignature::toData ( JsonStack& stack )
{
ltrace(51) << (void*)this << " _subTypeName:" << _subTypeName << endl;
cdebug.log(19) << (void*)this << " _subTypeName:" << _subTypeName << endl;
check( stack, "JsonSignature::toData" );

View File

@ -41,8 +41,6 @@
#include "hurricane/Commons.h"
namespace Hurricane {

View File

@ -640,7 +640,7 @@ JsonTechnology::JsonTechnology(unsigned long flags)
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonTechnology::JsonTechnology()" << endl;
cdebug.log(19) << "JsonTechnology::JsonTechnology()" << endl;
add( "_name" , typeid(string) );
add( "+layers", typeid(JsonArray) );
@ -683,7 +683,7 @@ void JsonTechnology::addBlockageRef(const string& blockageLayer, BasicLayer* lay
void JsonTechnology::toData(JsonStack& stack)
// ******************************************
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonTechnology::toData" );
@ -708,7 +708,7 @@ void JsonTechnology::toData(JsonStack& stack)
update( stack, techno );
ltraceout(51);
cdebug.tabw(19,-1);
}
} // End of Hurricane namespace.

View File

@ -258,7 +258,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonTransistorLayer::JsonTransistorLayer()" << endl;
cdebug.log(19) << "JsonTransistorLayer::JsonTransistorLayer()" << endl;
add( "_gate" , typeid(string) );
add( "_active" , typeid(string) );
@ -289,7 +289,7 @@ namespace Hurricane {
void JsonTransistorLayer::toData ( JsonStack& stack )
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonTransistorLayer::toData" );
@ -374,7 +374,7 @@ namespace Hurricane {
update( stack, layer );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -147,15 +147,15 @@ void UpdateSession::onNotOwned()
void Go::invalidate(bool propagateFlag)
// ************************************
{
// trace << "invalidate(" << this << ")" << endl;
// trace_in();
cdebug.log(18,1) << "Go::invalidate(" << this << ")" << endl;
if (not UPDATOR_STACK or UPDATOR_STACK->empty())
throw Error( "Can't invalidate go: empty update session stack" );
if (not UPDATOR_STACK or UPDATOR_STACK->empty())
throw Error( "Can't invalidate go: empty update session stack" );
Property* property = getProperty( UpdateSession::getPropertyName() );
Property* property = getProperty( UpdateSession::getPropertyName() );
if (property) {
if (property) {
if (not dynamic_cast<UpdateSession*>(property))
throw Error( "Can't invalidate go : bad update session type" );
} else {
@ -183,29 +183,31 @@ void Go::invalidate(bool propagateFlag)
}
}
}
// trace << "done" << endl;
// trace_out();
cdebug.log(18) << "Go::invalidate(" << this << ") - Completed." << endl;
cdebug.tabw(18,-1);
}
void UpdateSession::open() {
// trace << "OpenUpdateSession()" << endl;
// trace_in();
UpdateSession::_create();
void UpdateSession::open()
// ***********************
{
cdebug.log(18,1) << "UpdateSession::open()" << endl;
UpdateSession::_create();
}
void UpdateSession::close() {
// trace << "CloseUpdateSession()" << endl;
// trace_in();
void UpdateSession::close()
// ************************
{
cdebug.tabw(18,-1);
cdebug.log(18,1) << "UpdateSession::close() - Start materialization." << endl;
if (!UPDATOR_STACK || UPDATOR_STACK->empty())
throw Error("Can't end update : empty update session stack");
if (!UPDATOR_STACK || UPDATOR_STACK->empty())
throw Error("Can't end update : empty update session stack");
UPDATOR_STACK->top()->_destroy();
UPDATOR_STACK->top()->_destroy();
// trace << "done" << endl;
// trace_out();
// trace << "done" << endl;
// trace_out();
cdebug.tabw(18,-1);
cdebug.log(18) << "UpdateSession::close() - Materialization completed." << endl;
}

View File

@ -230,7 +230,7 @@ namespace Hurricane {
{
if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonViaLayer::JsonViaLayer()" << endl;
cdebug.log(19) << "JsonViaLayer::JsonViaLayer()" << endl;
add( "_bottom" , typeid(string) );
add( "_cut" , typeid(string) );
@ -255,7 +255,7 @@ namespace Hurricane {
void JsonViaLayer::toData(JsonStack& stack)
{
ltracein(51);
cdebug.tabw(19,1);
check( stack, "JsonViaLayer::toData" );
@ -326,7 +326,7 @@ namespace Hurricane {
update( stack, layer );
ltraceout(51);
cdebug.tabw(19,-1);
}

View File

@ -176,7 +176,7 @@ namespace {
_objects[_objects.size()-1]->setName( _objectName );
}
ltrace(51) << "HurricaneHandler::String() [key/typename] " << value << endl;
cdebug.log(19) << "HurricaneHandler::String() [key/typename] " << value << endl;
return true;
}
@ -201,13 +201,13 @@ namespace {
return true;
}
//ltrace(51) << "HurricaneHandler::Key() key:" << _key << " _objects.size():" << _objects.size() << endl;
//cdebug.log(19) << "HurricaneHandler::Key() key:" << _key << " _objects.size():" << _objects.size() << endl;
if (_objects.back()) {
if ( doCallToData() and not _key.empty() and (_key[0] != '_') ) {
// The key is no longer a simple attribute of the object.
// Triggers it's creation in the Json stack.
ltrace(51) << "HurricaneHandler::key() Calling "
cdebug.log(19) << "HurricaneHandler::key() Calling "
<< _objects.back()->getTypeName() << "::toData(JsonStack&)." << endl;
_objects.back()->toData( _stack );
}
@ -219,17 +219,17 @@ namespace {
bool HurricaneHandler::StartObject ()
{
ltrace(50) << "Hurricane::StartObject()" << endl;
cdebug.log(19) << "Hurricane::StartObject()" << endl;
ltracein(50);
_state |= TypenameKey;
// if (doCallToData()) {
// ltrace(51) << "Calling " << _objects.back()->getTypeName() << "::toData(JsonStack&)." << endl;
// cdebug.log(19) << "Calling " << _objects.back()->getTypeName() << "::toData(JsonStack&)." << endl;
// _objects.back()->toData( _stack );
// }
_objectName = (_key == ".Array") ? "" : _key;
_objects.push_back( NULL );
ltrace(51) << "_objects.push_back(NULL), size():" << _objects.size() << "." << endl;
cdebug.log(19) << "_objects.push_back(NULL), size():" << _objects.size() << "." << endl;
ltracein(50);
return true;
@ -239,7 +239,7 @@ namespace {
bool HurricaneHandler::EndObject ( SizeType )
{
ltraceout(50,2);
ltrace(50) << "HurricaneHandler::EndObject()" << endl;
cdebug.log(19) << "HurricaneHandler::EndObject()" << endl;
ltracein(50);
_objectName.clear();
@ -247,11 +247,11 @@ namespace {
_state &= ~SkipObject;
} else {
if (doCallToData()) {
ltrace(51) << "Calling " << _objects.back()->getTypeName() << "::toData(JsonStack&)." << endl;
cdebug.log(19) << "Calling " << _objects.back()->getTypeName() << "::toData(JsonStack&)." << endl;
_objects.back()->toData( _stack );
}
if (_objects.size() > 1) {
ltrace(51) << "_objects.pop_back(), size():" << _objects.size() << "." << endl;
cdebug.log(19) << "_objects.pop_back(), size():" << _objects.size() << "." << endl;
delete _objects.back();
_objects.pop_back();
}
@ -259,14 +259,14 @@ namespace {
if (_stack[-1].first[0] != '_') _stack.pop_back();
}
}
ltraceout(50);
cdebug.tabw(19,-1);
return true;
}
bool HurricaneHandler::StartArray()
{
ltrace(50) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl;
cdebug.log(19) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl;
ltracein(50);
_objectName.clear();
@ -285,14 +285,14 @@ namespace {
bool HurricaneHandler::EndArray ( SizeType )
{
ltraceout(50);
ltrace(50) << "HurricaneHandler::EndArray()" << endl;
cdebug.tabw(19,-1);
cdebug.log(19) << "HurricaneHandler::EndArray()" << endl;
ltracein(50);
_state &= ~(ArrayMode | SkipArray);
_key.clear();
ltraceout(50);
cdebug.tabw(19,-1);
return true;
}

View File

@ -655,7 +655,7 @@ namespace Hurricane {
{ }
template<typename T> inline void JsonStack::push_back ( const std::string& key, T t ) {
ltrace(51) << "JsonStack::push_back() key:" << key << " t:" << t
cdebug.log(19) << "JsonStack::push_back() key:" << key << " t:" << t
<< " (" << demangle(typeid(T)) << ")." << endl;
_stack.push_back(std::make_pair(key,boost::any(t)));
}
@ -667,7 +667,7 @@ namespace Hurricane {
<< (count+1) << " elements remains to pop." << std::endl;
break;
}
ltrace(51) << "| _stack.pop_back() " << _stack.back().first << endl;
cdebug.log(19) << "| _stack.pop_back() " << _stack.back().first << endl;
_stack.pop_back();
}
}
@ -685,7 +685,7 @@ namespace Hurricane {
int i = _stack.size()-1;
do {
if (_stack[i].first == key) {
ltrace(51) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
cdebug.log(19) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
<< (i-(int)_stack.size()) << " (i:" << i << ")." << endl;
return i-(int)_stack.size();
}
@ -693,7 +693,7 @@ namespace Hurricane {
--i;
} while ( true );
ltrace(51) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
cdebug.log(19) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
return 0;
}
@ -703,7 +703,7 @@ namespace Hurricane {
int i = _stack.size()-1;
do {
if (_stack[i].first == key) {
ltrace(51) << "JsonStack::as<T>() k:" << key
cdebug.log(19) << "JsonStack::as<T>() k:" << key
<< " t:" << _stack[i].second.type().name() << std::endl;
return boost::any_cast<T>( _stack[i].second );
}

View File

@ -1095,7 +1095,7 @@ void JsonNet::toData(JsonStack& stack)
update( stack, net );
ltraceout(51);
cdebug.tabw(19,-1);
}
} // End of Hurricane namespace.

View File

@ -1106,18 +1106,17 @@ template<typename Type> inline Hurricane::Record* getRecord ( const Hurricane::C
template<typename Type>
inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::GenericCollection<Type> collection )
{
if (Hurricane::inltrace(50))
std::cerr << Hurricane::tab
<< "jsonWrite< GenericCollection<" << Hurricane::demangle(typeid(Type).name())
<< "> >(w,key,coll)" << " key:\"" << key << "\"" << std::endl;
Hurricane::ltracein(50);
if (cdebug.enabled(19))
cdebug.log(19) << "jsonWrite< GenericCollection<" << Hurricane::demangle(typeid(Type).name())
<< "> >(w,key,coll)" << " key:\"" << key << "\"" << std::endl;
cdebug.tabw(19,1);
w->key( key );
w->startArray();
for ( Type element : collection ) jsonWrite( w, element );
w->endArray();
Hurricane::ltraceout(50);
cdebug.tabw(19,-1);
}

View File

@ -1,4 +1,3 @@
// -*- C++ -*-
//
// Copyright (c) BULL S.A. 2000-2016, All Rights Reserved
@ -19,10 +18,6 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
@ -64,28 +59,6 @@ namespace Hurricane {
class Slot;
// +-------------------------------------------------------------+
// | Tracing/Debugging Utilites |
// +-------------------------------------------------------------+
bool in_trace ();
void trace_on ();
void trace_off ();
void trace_in ();
void trace_out ();
bool inltrace ( unsigned int level );
unsigned int ltracelevel ();
unsigned int ltracelevel ( unsigned int level );
void ltracein ( unsigned int level, unsigned int count=1 );
void ltraceout ( unsigned int level, unsigned int count=1 );
#define trace if (in_trace() ) cerr << tab
#define ltrace(level) if (inltrace(level)) cerr << tab
// +-------------------------------------------------------------+
// | shared_ptr<> support for DBo |
// +-------------------------------------------------------------+
@ -121,6 +94,13 @@ namespace Hurricane {
string demangle ( const char* symbol );
inline string demangle ( const type_info& info ) { return demangle(info.name()); }
template<typename Element>
inline void erase_element ( vector<Element*>& v, const Element* e )
{
for ( auto ielement = v.begin() ; ielement != v.end() ; ++ielement )
if (*ielement == e) { v.erase( ielement ); return; }
}
#if DEPRECATED
// For a complete explanation of this function, please look at :
@ -733,6 +713,107 @@ inline Hurricane::Record* getRecord ( const std::multiset<Element,Compare>* s )
IOSTREAM_VALUE_SUPPORT(Data)
#include "hurricane/Tabulation.h"
// -------------------------------------------------------------------
// Class : "::cdebug()".
//
// Wrapper around the STL ostream which to print debugging messages.
class tstream : public std::ostream {
public:
inline int getMinLevel () const;
inline int getMaxLevel () const;
inline int setMinLevel ( int );
inline int setMaxLevel ( int );
inline int getLevel () const;
inline int setLevel ( int );
inline bool enabled () const;
inline bool enabled ( int ) const;
inline tstream& log ( int level, int count=0 );
inline tstream& tabw ( int level, int count );
inline tstream ( std::ostream & );
private:
inline tstream& _tab ();
inline tstream& _tabw ( int count );
public:
// Overload for formatted outputs.
//template<typename T> inline tstream& operator<< ( T t );
template<typename T> inline tstream& operator<< ( T* t );
template<typename T> inline tstream& operator<< ( const T t );
template<typename T> inline tstream& operator<< ( const T* t );
inline tstream& put ( char c );
inline tstream& flush ();
// Overload for manipulators.
inline tstream &operator<< ( std::ostream &(*pf)(std::ostream &) );
private:
int _minLevel;
int _maxLevel;
int _level;
Hurricane::Tabulation _tabulation;
};
inline tstream::tstream ( std::ostream& s )
: std::ostream(s.rdbuf())
, _minLevel(0)
, _maxLevel(0)
, _level(0)
, _tabulation(" ")
{ }
inline int tstream::getMinLevel () const { return _minLevel; }
inline int tstream::getMaxLevel () const { return _maxLevel; }
inline int tstream::setMinLevel ( int l ) { int pl=_minLevel; _minLevel=l; return pl; }
inline int tstream::setMaxLevel ( int l ) { int pl=_maxLevel; _maxLevel=l; return pl; }
inline int tstream::getLevel () const { return _level; }
inline int tstream::setLevel ( int l ) { int pl=_level; _level=l; return pl; }
inline bool tstream::enabled () const { return (_level >= _minLevel) and (_level < _maxLevel); }
inline bool tstream::enabled ( int l ) const { return (l >= _minLevel) and (l < _maxLevel); }
inline tstream& tstream::tabw ( int level, int count ) { setLevel(level); return _tabw(count); }
inline tstream& tstream::put ( char c ) { if (enabled()) static_cast<std::ostream*>(this)->put(c); return *this; }
inline tstream& tstream::flush () { if (enabled()) static_cast<std::ostream*>(this)->flush(); return *this; }
inline tstream& tstream::operator<< ( std::ostream& (*pf)(std::ostream&) ) { if (enabled()) (*pf)(*this); return *this; }
inline tstream& tstream::_tab () { if (enabled()) (*this) << _tabulation; return *this; }
inline tstream& tstream::_tabw ( int count )
{
if (enabled()) {
if (count > 0) while(count--) _tabulation++;
else if (count < 0) while(count++) _tabulation--;
}
return *this;
}
inline tstream& tstream::log ( int level, int count )
{ setLevel(level); _tab(); return _tabw(count); }
// For POD Types.
// template<typename T>
// inline tstream& tstream::operator<< ( T& t )
// { if (enabled()) { *(static_cast<std::ostream*>(this)) << t; } return *this; };
template<typename T>
inline tstream& tstream::operator<< ( T* t )
{ if (enabled()) { *(static_cast<std::ostream*>(this)) << t; } return *this; };
template<typename T>
inline tstream& tstream::operator<< ( const T t )
{ if (enabled()) { *(static_cast<std::ostream*>(this)) << t; } return *this; };
template<typename T>
inline tstream& tstream::operator<< ( const T* t )
{ if (enabled()) { *(static_cast<std::ostream*>(this)) << t; } return *this; };
// For STL Types.
inline tstream& operator<< ( tstream& o, const std::string& s )
{ if (o.enabled()) { static_cast<std::ostream&>(o) << s; } return o; };
extern tstream cdebug;
// x-----------------------------------------------------------------x
// | Classes Neededs in All Hurricane Modules |
@ -740,7 +821,6 @@ inline Hurricane::Record* getRecord ( const std::multiset<Element,Compare>* s )
#include "hurricane/Slot.h"
#include "hurricane/Initializer.h"
#include "hurricane/Tabulation.h"
#include "hurricane/JsonWriter.h"
#include "hurricane/JsonObject.h"

View File

@ -43,6 +43,8 @@ namespace Hurricane {
class Net;
class Cell;
using std::pair;
using std::make_pair;
using std::set;
using std::stack;
@ -61,8 +63,8 @@ namespace Hurricane {
static inline void addToTrace ( const void* symbol );
static inline void addToTrace ( const Cell*, const Name& );
static inline void addToTrace ( const Net* );
static inline void open ( unsigned int traceLevel );
static inline void open ( const void* symbol, unsigned int traceLevel=80 );
static inline void open ( int minLevel, int maxLevel );
static inline void open ( const void* symbol, int minLevel, int maxLevel );
static inline void close ();
// Singleton Access.
inline bool _isTraced ( const void* symbol ) const;
@ -76,9 +78,9 @@ namespace Hurricane {
protected:
// Internal: Attributes.
static DebugSession* _singleton;
set<const void*> _symbols;
stack<unsigned int> _levels;
static DebugSession* _singleton;
set<const void*> _symbols;
stack< pair<int,int> > _levels;
protected:
// Internal: Constructor & Destructor.
@ -92,18 +94,21 @@ namespace Hurricane {
// Inline Functions.
void DebugSession::open ( unsigned int traceLevel )
void DebugSession::open ( int minLevel, int maxLevel )
{
_singleton->_levels.push ( ltracelevel(traceLevel) );
_singleton->_levels.push( make_pair( cdebug.setMinLevel(minLevel)
, cdebug.setMaxLevel(maxLevel) ) );
}
void DebugSession::open ( const void* symbol, unsigned int traceLevel )
void DebugSession::open ( const void* symbol, int minLevel, int maxLevel )
{
if ( _singleton->_isTraced(symbol) )
_singleton->_levels.push ( ltracelevel(traceLevel) );
_singleton->_levels.push( make_pair( cdebug.setMinLevel(minLevel)
, cdebug.setMaxLevel(maxLevel) ) );
else {
_singleton->_levels.push ( ltracelevel() );
_singleton->_levels.push ( make_pair( cdebug.getMinLevel()
, cdebug.getMaxLevel() ) );
}
}
@ -111,7 +116,8 @@ namespace Hurricane {
void DebugSession::close ()
{
if ( not _singleton->_levels.empty() ) {
ltracelevel ( _singleton->_levels.top() );
cdebug.setMinLevel( _singleton->_levels.top().first );
cdebug.setMaxLevel( _singleton->_levels.top().second );
_singleton->_levels.pop ();
}
}

View File

@ -40,9 +40,9 @@ namespace Hurricane {
public:
typedef DBo Inherit;
public:
enum Flags { ForcedIdMode = (1<<0)
, NextIdSet = (1<<1)
};
enum EntityFlags { ForcedIdMode = (1<<0)
, NextIdSet = (1<<1)
};
public:
static unsigned int getIdCounter ();
unsigned int getNextId ();

View File

@ -1,4 +1,3 @@
// -*- C++ -*-
//
// Copyright (c) BULL S.A. 2000-2016, All Rights Reserved
@ -19,12 +18,7 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,10 +26,7 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./hurricane/ExtensionGo.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#ifndef __HURRICANE_EXTENSION_GO__

View File

@ -55,6 +55,11 @@ namespace Hurricane {
inline BaseFlags operator bitand ( BaseFlags ) const;
inline BaseFlags operator bitor ( BaseFlags ) const;
inline BaseFlags operator xor ( BaseFlags ) const;
inline BaseFlags operator bitand ( int ) const;
inline BaseFlags operator bitor ( int ) const;
inline BaseFlags operator xor ( int ) const;
inline BaseFlags lshift ( int ) const;
inline BaseFlags rshift ( int ) const;
inline BaseFlags operator bitand ( unsigned int ) const;
inline BaseFlags operator bitor ( unsigned int ) const;
inline BaseFlags operator xor ( unsigned int ) const;
@ -66,13 +71,20 @@ namespace Hurricane {
inline bool operator != ( BaseFlags ) const;
inline bool operator < ( BaseFlags ) const;
inline bool operator > ( BaseFlags ) const;
inline BaseFlags& operator |= ( int );
inline BaseFlags& operator &= ( int );
inline bool operator == ( int ) const;
inline bool operator != ( int ) const;
inline bool operator < ( int ) const;
inline bool operator > ( int ) const;
inline BaseFlags& operator |= ( unsigned int );
inline BaseFlags& operator &= ( unsigned int );
inline bool operator == ( unsigned int ) const;
inline bool operator != ( unsigned int ) const;
inline bool operator < ( unsigned int ) const;
inline bool operator > ( unsigned int ) const;
inline operator unsigned int () const;
inline operator bool () const;
//inline operator unsigned int () const;
// Hurricane Managment.
virtual std::string _getTypeName () const;
virtual std::string _getString () const;
@ -88,12 +100,18 @@ namespace Hurricane {
inline bool BaseFlags::zero () const { return _flags == 0; }
inline BaseFlags& BaseFlags::reset ( BaseFlags flags ) { _flags &= ~flags._flags; return *this; }
inline bool BaseFlags::isset ( BaseFlags flags ) const { return _flags & flags._flags; }
inline bool BaseFlags::contains ( BaseFlags flags ) const { return (_flags & flags._flags) && !(~_flags & flags._flags); }
//inline bool BaseFlags::contains ( BaseFlags flags ) const { return (_flags & flags._flags) && !(~_flags & flags._flags); }
inline bool BaseFlags::contains ( BaseFlags flags ) const { return (_flags & flags._flags) == flags._flags; }
inline bool BaseFlags::intersect ( BaseFlags flags ) const { return _flags & flags._flags; }
inline BaseFlags BaseFlags::operator compl () const { return ~_flags; }
inline BaseFlags BaseFlags::operator bitand ( BaseFlags flags ) const { return _flags & flags._flags; }
inline BaseFlags BaseFlags::operator bitor ( BaseFlags flags ) const { return _flags | flags._flags; }
inline BaseFlags BaseFlags::operator xor ( BaseFlags flags ) const { return _flags ^ flags._flags; }
inline BaseFlags BaseFlags::operator bitand ( int flags ) const { return _flags & (unsigned int)flags; }
inline BaseFlags BaseFlags::operator bitor ( int flags ) const { return _flags | (unsigned int)flags; }
inline BaseFlags BaseFlags::operator xor ( int flags ) const { return _flags ^ (unsigned int)flags; }
inline BaseFlags BaseFlags::lshift ( int s ) const { return _flags << (unsigned int)s; }
inline BaseFlags BaseFlags::rshift ( int s ) const { return _flags >> (unsigned int)s; }
inline BaseFlags BaseFlags::operator bitand ( unsigned int flags ) const { return _flags & flags; }
inline BaseFlags BaseFlags::operator bitor ( unsigned int flags ) const { return _flags | flags; }
inline BaseFlags BaseFlags::operator xor ( unsigned int flags ) const { return _flags ^ flags; }
@ -105,13 +123,21 @@ namespace Hurricane {
inline bool BaseFlags::operator != ( BaseFlags flags ) const { return _flags != flags._flags; }
inline bool BaseFlags::operator < ( BaseFlags flags ) const { return _flags < flags._flags; }
inline bool BaseFlags::operator > ( BaseFlags flags ) const { return _flags > flags._flags; }
inline BaseFlags& BaseFlags::operator |= ( int flags ) { _flags |= (unsigned int)flags; return *this; }
inline BaseFlags& BaseFlags::operator &= ( int flags ) { _flags &= (unsigned int)flags; return *this; }
inline bool BaseFlags::operator == ( int flags ) const { return _flags == (unsigned int)flags; }
inline bool BaseFlags::operator != ( int flags ) const { return _flags != (unsigned int)flags; }
inline bool BaseFlags::operator < ( int flags ) const { return _flags < (unsigned int)flags; }
inline bool BaseFlags::operator > ( int flags ) const { return _flags > (unsigned int)flags; }
inline BaseFlags& BaseFlags::operator |= ( unsigned int flags ) { _flags |= flags; return *this; }
inline BaseFlags& BaseFlags::operator &= ( unsigned int flags ) { _flags &= flags; return *this; }
inline bool BaseFlags::operator == ( unsigned int flags ) const { return _flags == flags; }
inline bool BaseFlags::operator != ( unsigned int flags ) const { return _flags != flags; }
inline bool BaseFlags::operator < ( unsigned int flags ) const { return _flags < flags; }
inline bool BaseFlags::operator > ( unsigned int flags ) const { return _flags > flags; }
inline BaseFlags::operator unsigned int () const { return _flags; }
inline BaseFlags::operator bool () const { return _flags != 0; }
//inline BaseFlags::operator unsigned int () const { return _flags; }
//inline BaseFlags::operator unsigned int () const { return _flags; }
inline BaseFlags& BaseFlags::set ( BaseFlags flags, bool state )
{

View File

@ -284,8 +284,8 @@ namespace Hurricane {
template<typename T> inline void JsonStack::push_back ( const std::string& key, T t )
{
ltrace(51) << "JsonStack::push_back(T) key:" << key << " value:" << t
<< " (" << demangle(typeid(T)) << ")." << endl;
cdebug.log(19) << "JsonStack::push_back(T) key:" << key << " value:" << t
<< " (" << demangle(typeid(T)) << ")." << endl;
_stack.push_back(std::make_pair(key,boost::any(t)));
}
@ -297,8 +297,8 @@ namespace Hurricane {
<< (count+1) << " elements remains to pop." << std::endl;
break;
}
ltrace(51) << "| _stack.pop_back() \"" << _stack.back().first
<< "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl;
cdebug.log(19) << "| _stack.pop_back() \"" << _stack.back().first
<< "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl;
_stack.pop_back();
}
}
@ -316,17 +316,17 @@ namespace Hurricane {
int i = _stack.size()-1;
do {
if (_stack[i].first == key) {
ltrace(51) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
<< (i-(int)_stack.size()) << " (i:" << i << ") "
<< "(" << demangle(_stack[i].second.type().name()) << ")."
<< endl;
cdebug.log(19) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
<< (i-(int)_stack.size()) << " (i:" << i << ") "
<< "(" << demangle(_stack[i].second.type().name()) << ")."
<< endl;
return i-(int)_stack.size();
}
if (i == 0) break;
--i;
} while ( true );
ltrace(51) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
cdebug.log(19) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
return 0;
}
@ -336,8 +336,8 @@ namespace Hurricane {
int i = _stack.size()-1;
do {
if (_stack[i].first == key) {
ltrace(51) << "JsonStack::as<T>() k:" << key
<< " value:" << demangle(_stack[i].second.type().name()) << std::endl;
cdebug.log(19) << "JsonStack::as<T>() k:" << key
<< " value:" << demangle(_stack[i].second.type().name()) << std::endl;
return boost::any_cast<T>( _stack[i].second );
}
if (i == 0) break;
@ -405,7 +405,7 @@ namespace Hurricane {
template<typename T>
inline void JsonObject::update ( JsonStack& stack, T hobject )
{
ltrace(51) << "JsonObject::update<T>()" << endl;
cdebug.log(19) << "JsonObject::update<T>()" << endl;
stack.pop_back( _attributes.size() );
stack.push_back<T>( getStackName(), hobject );
setObject<T>( hobject );

View File

@ -221,15 +221,12 @@ inline void jsonWrite ( JsonWriter* w, const std::string& key, const C& )
template<typename C>
inline void jsonWrite ( JsonWriter* w, const C* object )
{
if (Hurricane::inltrace(50))
std::cerr << Hurricane::tab
<< "jsonWrite<" << Hurricane::demangle(typeid(C).name()) << "*>(w,object)" << std::endl;
Hurricane::ltracein(50);
cdebug.log(19,1) << "jsonWrite<" << Hurricane::demangle(typeid(C).name()) << "*>(w,object)" << std::endl;
if (object) object->toJson( w );
else jsonWrite(w);
Hurricane::ltraceout(50);
cdebug.tabw(19,-1);
}
@ -243,35 +240,29 @@ inline void jsonWrite ( JsonWriter* w, const std::string& key, C* object )
template<typename C>
inline void jsonWrite ( JsonWriter* w, const std::string& key, const C* object )
{
if (Hurricane::inltrace(50))
std::cerr << Hurricane::tab
<< "jsonWrite<" << Hurricane::demangle(typeid(C).name()) << "*>(w,key,object)"
<< " key:\"" << key << "\"" << std::endl;
Hurricane::ltracein(50);
cdebug.log(19,1) << "jsonWrite<" << Hurricane::demangle(typeid(C).name()) << "*>(w,key,object)"
<< " key:\"" << key << "\"" << std::endl;
w->key( key );
if (object) jsonWrite( w, object );
else jsonWrite(w);
Hurricane::ltraceout(50);
cdebug.tabw(19,-1);
}
template<typename Element>
inline void jsonWrite ( JsonWriter* w, const std::string& key, const std::vector<Element>& v )
{
if (Hurricane::inltrace(50))
std::cerr << Hurricane::tab
<< "jsonWrite< vector<" << Hurricane::demangle(typeid(Element).name())
<< "> >(w,key,v)" << " key:\"" << key << "\"" << std::endl;
Hurricane::ltracein(50);
cdebug.log(19,1) << "jsonWrite< vector<" << Hurricane::demangle(typeid(Element).name())
<< "> >(w,key,v)" << " key:\"" << key << "\"" << std::endl;
w->key( key );
w->startArray();
for ( Element element : v ) jsonWrite( w, element );
w->endArray();
Hurricane::ltraceout(50);
cdebug.tabw(19,-1);
}
@ -280,21 +271,18 @@ inline void jsonWrite ( JsonWriter* w
, const std::string& key
, const std::map<Key,Element,Compare,Allocator>& m )
{
if (Hurricane::inltrace(50))
std::cerr << Hurricane::tab
<< "jsonWrite< map<"
<< Hurricane::demangle(typeid(Key ).name()) << ","
<< Hurricane::demangle(typeid(Element).name()) << ","
<< Hurricane::demangle(typeid(Compare).name())
<< "> >(w,key,m)" << " key:\"" << key << "\"" << std::endl;
Hurricane::ltracein(50);
cdebug.log(19,1) << "jsonWrite< map<"
<< Hurricane::demangle(typeid(Key ).name()) << ","
<< Hurricane::demangle(typeid(Element).name()) << ","
<< Hurricane::demangle(typeid(Compare).name())
<< "> >(w,key,m)" << " key:\"" << key << "\"" << std::endl;
w->key( key );
w->startArray();
for ( auto mapElement : m ) jsonWrite( w, mapElement.second );
w->endArray();
Hurricane::ltraceout(50);
cdebug.tabw(19,-1);
}

View File

@ -20,9 +20,7 @@
#ifndef HURRICANE_TABULATION_H
#define HURRICANE_TABULATION_H
#include "hurricane/Commons.h"
#ifndef HURRICANE_SLOT_H
#ifndef HURRICANE_COMMONS_H
#error "Tabulation.h must be included through Commons.h"
#endif

View File

@ -80,12 +80,12 @@ ProxyProperty* ProxyProperty::create ( void* shadow ) {
void ProxyProperty::_preDestroy () {
if ( _owner ) _owner->_onDestroyed ( this );
trace << "ProxyProperty::_owner := " << hex << (void*)_owner << endl;
cdebug.log(20) << "ProxyProperty::_owner := " << hex << (void*)_owner << endl;
if ( _offset > 0 ) {
void** shadowMember = ( (void**)( (unsigned long)_shadow + _offset ) );
trace << "ProxyProperty::_shadowMember := " << hex << *shadowMember << endl;
cdebug.log(20) << "ProxyProperty::_shadowMember := " << hex << *shadowMember << endl;
*shadowMember = NULL;
}

View File

@ -47,7 +47,7 @@ extern "C" {
static PyObject* PyBasicLayer_create ( PyObject*, PyObject* args )
{
trace << "PyBasicLayer_create()" << endl;
cdebug.log(20) << "PyBasicLayer_create()" << endl;
BasicLayer* basicLayer = NULL;
@ -96,7 +96,7 @@ extern "C" {
static PyObject* PyBasicLayer_getMaterial ( PyBasicLayer *self )
{
trace << "PyBasicLayer_getMaterial ()" << endl;
cdebug.log(20) << "PyBasicLayer_getMaterial ()" << endl;
METHOD_HEAD ( "BasicLayer.getMaterial()" )
BasicLayer::Material* material = NULL;

View File

@ -62,7 +62,7 @@ extern "C" {
// Class Method : "PyBox_NEW ()"
static PyObject* PyBox_NEW (PyObject *module, PyObject *args) {
trace << "PyBox_NEW()" << endl;
cdebug.log(20) << "PyBox_NEW()" << endl;
Box* box = NULL;
PyBox* pyBox = NULL;
@ -106,13 +106,13 @@ extern "C" {
static int PyBox_Init ( PyBox* self, PyObject* args, PyObject* kwargs )
{
trace << "PyBox_Init(): " << (void*)self << endl;
cdebug.log(20) << "PyBox_Init(): " << (void*)self << endl;
return 0;
}
static PyObject* PyBox_getCenter ( PyBox *self ) {
trace << "PyBox_getCenter()" << endl;
cdebug.log(20) << "PyBox_getCenter()" << endl;
METHOD_HEAD ( "Box.Center()" )
@ -128,7 +128,7 @@ extern "C" {
static PyObject* PyBox_getUnion ( PyBox *self, PyObject* args ) {
trace << "PyBox_getUnion()" << endl;
cdebug.log(20) << "PyBox_getUnion()" << endl;
METHOD_HEAD ( "Box.getUnion()" )
@ -154,7 +154,7 @@ extern "C" {
// Attribute Method : "PyBox_getIntersection ()"
static PyObject* PyBox_getIntersection ( PyBox *self, PyObject* args ) {
trace << "PyBox_getIntersection()" << endl;
cdebug.log(20) << "PyBox_getIntersection()" << endl;
METHOD_HEAD ( "Box.getIntersection()" )
@ -179,7 +179,7 @@ extern "C" {
// Attribute Method : "PyBox_contains ()"
static PyObject* PyBox_contains ( PyBox *self, PyObject* args ) {
trace << "PyBox_contains ()" << endl;
cdebug.log(20) << "PyBox_contains ()" << endl;
METHOD_HEAD ( "Box.contains()" )
@ -214,7 +214,7 @@ extern "C" {
// Attribute Method : "PyBox_intersect ()"
static PyObject* PyBox_intersect ( PyBox *self, PyObject* args ) {
trace << "PyBox_intersect ()" << endl;
cdebug.log(20) << "PyBox_intersect ()" << endl;
bool result = false;
HTRY
@ -244,7 +244,7 @@ extern "C" {
// Attribute Method : "PyBox_isConstrainedBy ()"
static PyObject* PyBox_isConstrainedBy ( PyBox *self, PyObject* args ) {
trace << "PyBox_isConstrainedBy ()" << endl;
cdebug.log(20) << "PyBox_isConstrainedBy ()" << endl;
bool result = false;
HTRY
@ -273,7 +273,7 @@ extern "C" {
// Attribute Method : "PyBox_makeEmpty ()"
static PyObject* PyBox_makeEmpty ( PyBox *self, PyObject* args ) {
trace << "PyBox_makeEmpty ()" << endl;
cdebug.log(20) << "PyBox_makeEmpty ()" << endl;
HTRY
METHOD_HEAD ( "Box.makeEmpty()" )
@ -289,7 +289,7 @@ extern "C" {
// Attribute Method : "PyBox_inflate ()"
static PyObject* PyBox_inflate ( PyBox *self, PyObject* args ) {
trace << "PyBox_inflate ()" << endl;
cdebug.log(20) << "PyBox_inflate ()" << endl;
METHOD_HEAD ( "Box.inflate()" )
@ -326,7 +326,7 @@ extern "C" {
// Attribute Method : "PyBox_merge ()"
static PyObject* PyBox_merge ( PyBox *self, PyObject* args ) {
trace << "Box_merge()" << endl;
cdebug.log(20) << "Box_merge()" << endl;
METHOD_HEAD ( "Box.merge()" )
@ -364,7 +364,7 @@ extern "C" {
// Attribute Method : "PyBox_translate ()"
static PyObject* PyBox_translate ( PyBox *self, PyObject* args ) {
trace << "PyBox_translate ()" << endl;
cdebug.log(20) << "PyBox_translate ()" << endl;
HTRY
METHOD_HEAD ( "Box.translate()" )

View File

@ -44,13 +44,13 @@ extern "C" {
static void PyBreakpoint_DeAlloc ( PyBreakpoint* self )
{
trace << "PySingletonObject_DeAlloc(" << hex << self << ")" << endl;
cdebug.log(20) << "PySingletonObject_DeAlloc(" << hex << self << ")" << endl;
}
static PyObject* PyBreakpoint_stop ( PyObject*, PyObject *args )
{
trace << "PyBreakpoint_stop()" << endl;
cdebug.log(20) << "PyBreakpoint_stop()" << endl;
bool result = false;
@ -71,7 +71,7 @@ extern "C" {
static PyObject* PyBreakpoint_setStopLevel ( PyObject*, PyObject* args )
{
trace << "PyBreakpoint_setStopLevel()" << endl;
cdebug.log(20) << "PyBreakpoint_setStopLevel()" << endl;
HTRY
@ -89,7 +89,7 @@ extern "C" {
static PyObject* PyBreakpoint_getStopLevel ( PyObject* )
{
trace << "PyBreakpoint_getStopLevel()" << endl;
cdebug.log(20) << "PyBreakpoint_getStopLevel()" << endl;
return Py_BuildValue ( "i", Breakpoint::getStopLevel() );
@ -112,7 +112,7 @@ extern "C" {
// extern void PyBreakpoint_LinkPyType()
// {
// trace << "PyBreakpoint_LinkType()" << endl;
// cdebug.log(20) << "PyBreakpoint_LinkType()" << endl;
// PyTypeBreakpoint.tp_new = (newfunc) PyType_GenericNew;
// PyTypeBreakpoint.tp_dealloc = (destructor)PyBreakpoint_DeAlloc;

View File

@ -65,7 +65,7 @@ extern "C" {
// Attribute Method : "PyCell_create ()"
PyObject* PyCell_create ( PyObject*, PyObject *args ) {
trace << "PyCell_create()" << endl;
cdebug.log(20) << "PyCell_create()" << endl;
char* name = NULL;
PyLibrary* pyLibrary = NULL;
@ -88,7 +88,7 @@ extern "C" {
// Attribute Method : "PyCell_getLibrary ()"
static PyObject* PyCell_getLibrary ( PyCell *self ) {
trace << "PyCell_getLibrary ()" << endl;
cdebug.log(20) << "PyCell_getLibrary ()" << endl;
Library* library = NULL;
@ -110,7 +110,7 @@ extern "C" {
// Attribute Method : "PyCell_getInstance ()"
static PyObject* PyCell_getInstance ( PyCell *self, PyObject* args ) {
trace << "PyCell_getInstance ()" << endl;
cdebug.log(20) << "PyCell_getInstance ()" << endl;
METHOD_HEAD("Cell.getInstance()")
Instance* instance = NULL;
@ -133,7 +133,7 @@ extern "C" {
// Attribute Method : "PyCell_getInstances()"
static PyObject* PyCell_getInstances( PyCell *self ) {
trace << "PyCell_getInstances()" << endl;
cdebug.log(20) << "PyCell_getInstances()" << endl;
METHOD_HEAD ( "Cell.getInstances()" )
@ -158,7 +158,7 @@ extern "C" {
// Attribute Method : "PyCell_getInstancesUnder()"
static PyObject* PyCell_getInstancesUnder(PyCell *self, PyObject* args) {
trace << "PyCell_getInstancesUnder()" << endl;
cdebug.log(20) << "PyCell_getInstancesUnder()" << endl;
METHOD_HEAD("Cell.getInstancesUnder()")
@ -188,7 +188,7 @@ extern "C" {
// Attribute Method : "PyCell_getSlaveInstances()"
static PyObject* PyCell_getSlaveInstances(PyCell *self) {
trace << "PyCell_getSlaveInstances()" << endl;
cdebug.log(20) << "PyCell_getSlaveInstances()" << endl;
METHOD_HEAD("Cell.getSlaveInstances()")
@ -213,7 +213,7 @@ extern "C" {
// Attribute Method : "PyCell_getComponents()"
static PyObject* PyCell_getComponents(PyCell *self) {
trace << "PyCell_getComponents()" << endl;
cdebug.log(20) << "PyCell_getComponents()" << endl;
METHOD_HEAD("Cell.getComponents()")
@ -239,7 +239,7 @@ extern "C" {
// Attribute Method : "PyCell_getComponentsUnder()"
static PyObject* PyCell_getComponentsUnder(PyCell *self, PyObject* args) {
trace << "PyCell_getComponentsUnder()" << endl;
cdebug.log(20) << "PyCell_getComponentsUnder()" << endl;
METHOD_HEAD("Cell.getComponentsUnder()")
@ -268,7 +268,7 @@ extern "C" {
// Attribute Method : "PyCell_getOccurrences()"
static PyObject* PyCell_getOccurrences(PyCell *self) {
trace << "PyCell_getOccurrences()" << endl;
cdebug.log(20) << "PyCell_getOccurrences()" << endl;
METHOD_HEAD("Cell.getOccurrences()")
@ -294,7 +294,7 @@ extern "C" {
// Attribute Method : "PyCell_getOccurrencesUnder()"
static PyObject* PyCell_getOccurrencesUnder(PyCell *self, PyObject* args) {
trace << "PyCell_getOccurrencesUnder()" << endl;
cdebug.log(20) << "PyCell_getOccurrencesUnder()" << endl;
METHOD_HEAD("Cell.getOccurrencesUnder()")
@ -323,7 +323,7 @@ extern "C" {
// Attribute Method : "PyCell_getLeafInstanceOccurrences()"
static PyObject* PyCell_getLeafInstanceOccurrences(PyCell *self) {
trace << "PyCell_getLeafInstanceOccurrences()" << endl;
cdebug.log(20) << "PyCell_getLeafInstanceOccurrences()" << endl;
METHOD_HEAD ( "Cell.getLeafInstanceOccurrences()" )
@ -348,7 +348,7 @@ extern "C" {
// Attribute Method : "PyCell_getLeafInstanceOccurrencesUnder()"
static PyObject* PyCell_getLeafInstanceOccurrencesUnder(PyCell *self, PyObject* args) {
trace << "PyCell_getLeafInstanceOccurrencesUnder()" << endl;
cdebug.log(20) << "PyCell_getLeafInstanceOccurrencesUnder()" << endl;
METHOD_HEAD ( "Cell.getLeafInstanceOccurrencesUnder()" )
@ -378,7 +378,7 @@ extern "C" {
// Attribute Method : "PyCell_getReferences()"
static PyObject* PyCell_getReferences(PyCell *self) {
trace << "PyCell_getReferences()" << endl;
cdebug.log(20) << "PyCell_getReferences()" << endl;
METHOD_HEAD("Cell.getReferences()")
@ -403,7 +403,7 @@ extern "C" {
// Attribute Method : "PyCell_getHyperNets()"
static PyObject* PyCell_getHyperNets(PyCell *self) {
trace << "PyCell_getHyperNets()" << endl;
cdebug.log(20) << "PyCell_getHyperNets()" << endl;
METHOD_HEAD ( "Cell.getHyperNets()" )
@ -428,7 +428,7 @@ extern "C" {
// Attribute Method : "PyCell_getNet ()"
static PyObject* PyCell_getNet(PyCell *self, PyObject* args) {
trace << "PyCell_getNet ()" << endl;
cdebug.log(20) << "PyCell_getNet ()" << endl;
METHOD_HEAD ( "Cell.getNet()" )
Net* net = NULL;
@ -449,7 +449,7 @@ extern "C" {
// Attribute Method : "PyCell_getNets ()"
static PyObject* PyCell_getNets ( PyCell *self ) {
trace << "PyCell_getNets()" << endl;
cdebug.log(20) << "PyCell_getNets()" << endl;
METHOD_HEAD("Cell.getNets()")
@ -474,7 +474,7 @@ extern "C" {
// Attribute Method : "PyCell_getExternalNets()"
static PyObject* PyCell_getExternalNets(PyCell *self) {
trace << "PyCell_getExternalNets()" << endl;
cdebug.log(20) << "PyCell_getExternalNets()" << endl;
METHOD_HEAD("Cell.getExternalNets()")
@ -498,7 +498,7 @@ extern "C" {
// Attribute Method : "PyCell_getClockNets()"
static PyObject* PyCell_getClockNets(PyCell *self) {
trace << "PyCell_getClockNets()" << endl;
cdebug.log(20) << "PyCell_getClockNets()" << endl;
METHOD_HEAD("Cell.getClockNets")
@ -522,7 +522,7 @@ extern "C" {
// Attribute Method : "PyCell_getSupplyNets()"
static PyObject* PyCell_getSupplyNets(PyCell *self) {
trace << "PyCell_getSupplyNets()" << endl;
cdebug.log(20) << "PyCell_getSupplyNets()" << endl;
METHOD_HEAD ( "Cell.getSupplyNets()" )
@ -547,7 +547,7 @@ extern "C" {
// Attribute Method : "PyCell_getPowerNets()"
static PyObject* PyCell_getPowerNets(PyCell *self) {
trace << "PyCell_getPowerNets()" << endl;
cdebug.log(20) << "PyCell_getPowerNets()" << endl;
METHOD_HEAD ( "Cell.getPowerNets()" )
@ -572,7 +572,7 @@ extern "C" {
// Attribute Method : "PyCell_getGroundNets()"
static PyObject* PyCell_getGroundNets(PyCell *self) {
trace << "PyCell_getGroundNets()" << endl;
cdebug.log(20) << "PyCell_getGroundNets()" << endl;
METHOD_HEAD ( "Cell.getGroundNets()" )
@ -596,7 +596,7 @@ extern "C" {
// Attribute Method : "PyCell_getAbutmentBox ()"
static PyObject* PyCell_getAbutmentBox ( PyCell *self ) {
trace << "PyCell_getAbutmentBox()" << endl;
cdebug.log(20) << "PyCell_getAbutmentBox()" << endl;
METHOD_HEAD ( "Cell.getAbutmentBox()" )
@ -620,7 +620,7 @@ extern "C" {
// Attribute Method : "PyCell_setAbutmentBox ()"
static PyObject* PyCell_setAbutmentBox ( PyCell *self, PyObject* args ) {
trace << "Cell.setAbutmentBox()" << endl;
cdebug.log(20) << "Cell.setAbutmentBox()" << endl;
HTRY
METHOD_HEAD ( "Cell.setAbutmentBox()" )
@ -640,7 +640,7 @@ extern "C" {
// Attribute Method : "PyCell_setTerminal ()"
static PyObject* PyCell_setTerminal ( PyCell *self, PyObject* args ) {
trace << "PyCell_setTerminal ()" << endl;
cdebug.log(20) << "PyCell_setTerminal ()" << endl;
HTRY
METHOD_HEAD ( "Cell.setTerminal()" )
@ -658,7 +658,7 @@ extern "C" {
// Attribute Method : "PyCell_uniquify ()"
static PyObject* PyCell_uniquify ( PyCell *self, PyObject* args ) {
trace << "PyCell_uniquify ()" << endl;
cdebug.log(20) << "PyCell_uniquify ()" << endl;
HTRY
METHOD_HEAD ( "Cell.uniquify()" )
@ -677,7 +677,7 @@ extern "C" {
// Attribute Method : "PyCell_getClone ()"
static PyObject* PyCell_getClone ( PyCell *self ) {
trace << "PyCell_getClone ()" << endl;
cdebug.log(20) << "PyCell_getClone ()" << endl;
Cell* cloneCell = NULL;
HTRY

View File

@ -61,7 +61,7 @@ extern "C" {
static PyObject* PyComponent_getPosition ( PyComponent *self )
{
trace << "PyComponent_getPosition ()" << endl;
cdebug.log(20) << "PyComponent_getPosition ()" << endl;
METHOD_HEAD ( "Component.getPosition()" )
PyPoint* pyPoint = PyObject_NEW ( PyPoint, &PyTypePoint );
@ -77,7 +77,7 @@ extern "C" {
static PyObject* PyComponent_getNet ( PyComponent *self )
{
trace << "PyComponent_getNet ()" << endl;
cdebug.log(20) << "PyComponent_getNet ()" << endl;
Net* net = NULL;
@ -93,7 +93,7 @@ extern "C" {
static PyObject* PyComponent_getLayer ( PyComponent *self )
{
trace << "PyComponent_getLayer ()" << endl;
cdebug.log(20) << "PyComponent_getLayer ()" << endl;
METHOD_HEAD ( "Component.getLayer()" )
Layer* layer = NULL;
@ -108,7 +108,7 @@ extern "C" {
static PyObject* PyComponent_getCenter ( PyComponent *self )
{
trace << "PyComponent_getCenter ()" << endl;
cdebug.log(20) << "PyComponent_getCenter ()" << endl;
METHOD_HEAD( "Component.getCenter()" )
PyPoint* pyPoint = PyObject_NEW( PyPoint, &PyTypePoint );
@ -124,7 +124,7 @@ extern "C" {
static PyObject* PyComponent_getBoundingBox ( PyComponent *self, PyObject* args )
{
trace << "PyComponent_getBoundingBox ()" << endl;
cdebug.log(20) << "PyComponent_getBoundingBox ()" << endl;
METHOD_HEAD ( "Component.getBoundingBox()" )
PyBox* pyBox = PyObject_NEW ( PyBox, &PyTypeBox );
@ -154,7 +154,7 @@ extern "C" {
static PyObject* PyComponent_getConnexComponents ( PyComponent *self )
{
trace << "PyComponent_getConnexComponents()" << endl;
cdebug.log(20) << "PyComponent_getConnexComponents()" << endl;
METHOD_HEAD( "PyComponent.getConnexComponents()" )
PyComponentCollection* pyComponentCollection = NULL;
@ -176,7 +176,7 @@ extern "C" {
static PyObject* PyComponent_getSlaveComponents ( PyComponent *self )
{
trace << "PyComponent_getSlaveComponents()" << endl;
cdebug.log(20) << "PyComponent_getSlaveComponents()" << endl;
METHOD_HEAD( "PyComponent.getSlaveComponents()" )
PyComponentCollection* pyComponentCollection = NULL;

View File

@ -66,7 +66,7 @@ extern "C" {
static PyObject* PyContact_create ( PyObject*, PyObject *args ) {
trace << "PyContact_create()" << endl;
cdebug.log(20) << "PyContact_create()" << endl;
Contact* contact = NULL;
@ -99,7 +99,7 @@ extern "C" {
static PyObject* PyContact_translate ( PyContact *self, PyObject* args ) {
trace << "PyContact_translate ()" << endl;
cdebug.log(20) << "PyContact_translate ()" << endl;
HTRY
METHOD_HEAD ( "Contact.translate()" )

View File

@ -76,7 +76,7 @@ extern "C" {
static PyObject* PyContactLayer_create ( PyObject*, PyObject* args )
{
trace << "PyContactLayer_create()" << endl;
cdebug.log(20) << "PyContactLayer_create()" << endl;
ContactLayer* contactLayer = NULL;

View File

@ -38,7 +38,7 @@ extern "C" {
static PyObject* PyDataBase_create ( PyObject* ) {
trace << "PyDataBase_create()" << endl;
cdebug.log(20) << "PyDataBase_create()" << endl;
DataBase* db = NULL;
@ -51,7 +51,7 @@ extern "C" {
static PyObject* PyDataBase_getDB ( PyObject* ) {
trace << "PyDataBase_getDB()" << endl;
cdebug.log(20) << "PyDataBase_getDB()" << endl;
DataBase* db = NULL;
@ -66,7 +66,7 @@ extern "C" {
PyObject* PyDataBase_getTechnology ( PyDataBase* self ) {
trace << "PyDataBase_getTechnology()" << endl;
cdebug.log(20) << "PyDataBase_getTechnology()" << endl;
Technology* techno = NULL;
@ -84,7 +84,7 @@ extern "C" {
static PyObject* PyDataBase_getRootLibrary ( PyDataBase *self ) {
trace << "PyDataBase_getRootLibrary ()" << endl;
cdebug.log(20) << "PyDataBase_getRootLibrary ()" << endl;
Library* library = NULL;

View File

@ -531,7 +531,7 @@ extern "C" {
extern void PyDbU_LinkPyType()
{
trace << "PyDbU_LinkType()" << endl;
cdebug.log(20) << "PyDbU_LinkType()" << endl;
PyTypeDbU.tp_methods = PyDbU_Methods;
}

View File

@ -44,32 +44,35 @@ extern "C" {
static void PyDebugSession_DeAlloc ( PyDebugSession* self )
{
trace << "PyDebugSession_DeAlloc(" << hex << self << ")" << endl;
cdebug.log(20) << "PyDebugSession_DeAlloc(" << hex << self << ")" << endl;
}
static PyObject* PyDebugSession_open ( PyObject*, PyObject* args )
{
trace << "PyDebugSession_open()" << endl;
cdebug.log(20) << "PyDebugSession_open()" << endl;
HTRY
PyObject* arg0;
PyObject* arg1;
PyObject* arg2;
__cs.init ("DebugSession.open");
if (not PyArg_ParseTuple(args,"|O&O&:DebugSession.open",
if (not PyArg_ParseTuple(args,"|O&O&O&:DebugSession.open",
Converter, &arg0,
Converter, &arg1)) {
Converter, &arg1,
Converter, &arg2)) {
return NULL;
}
if (__cs.getObjectIds() == INT_ARG ) { DebugSession::open( PyAny_AsLong(arg0) ); }
else if (__cs.getObjectIds() == ":ent:int") {
if (__cs.getObjectIds() == ":int:int" ) {
DebugSession::open( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
} else if (__cs.getObjectIds() == ":ent:int:int") {
void* symbol = PyObject_AsHurricaneSymbol( arg0 );
if (not symbol) {
Py_RETURN_NONE;
}
DebugSession::open( symbol, PyAny_AsLong(arg1) );
DebugSession::open( symbol, PyAny_AsLong(arg1), PyAny_AsLong(arg2) );
} else {
PyErr_SetString(ConstructorError, "invalid number of parameters for DebugSession::open()." );
return NULL;
@ -82,7 +85,7 @@ extern "C" {
static PyObject* PyDebugSession_close ( PyObject* )
{
trace << "PyDebugSession_close()" << endl;
cdebug.log(20) << "PyDebugSession_close()" << endl;
HTRY
DebugSession::close ();
@ -94,7 +97,7 @@ extern "C" {
static PyObject* PyDebugSession_addToTrace ( PyObject*, PyObject* args )
{
trace << "PyDebugSession_addToTrace()" << endl;
cdebug.log(20) << "PyDebugSession_addToTrace()" << endl;
HTRY
PyObject* pySymbol = NULL;

View File

@ -76,7 +76,7 @@ extern "C" {
static PyObject* PyDiffusionLayer_create ( PyObject*, PyObject* args )
{
trace << "PyDiffusionLayer_create()" << endl;
cdebug.log(20) << "PyDiffusionLayer_create()" << endl;
DiffusionLayer* diffusionLayer = NULL;

View File

@ -59,7 +59,7 @@ extern "C" {
// Attribute Method : "PyEntity_getCell ()"
static PyObject* PyEntity_getCell ( PyEntity *self ) {
trace << "PyEntity_getCell ()" << endl;
cdebug.log(20) << "PyEntity_getCell ()" << endl;
Cell* cell = NULL;

View File

@ -48,7 +48,7 @@ extern "C" {
static PyObject* PyHook_getComponent ( PyHook *self )
{
trace << "PyHook_getComponent()" << endl;
cdebug.log(20) << "PyHook_getComponent()" << endl;
METHOD_HEAD ( "Hook.getComponent()" )
Component* component = NULL;
@ -62,7 +62,7 @@ extern "C" {
static PyObject* PyHook_getHooks ( PyHook *self )
{
trace << "PyHook_getHooks()" << endl;
cdebug.log(20) << "PyHook_getHooks()" << endl;
METHOD_HEAD( "Hook.getHooks()" )
@ -83,7 +83,7 @@ extern "C" {
static PyObject* PyHook_getSlaveHooks ( PyHook *self )
{
trace << "PyHook_getSlaveHooks()" << endl;
cdebug.log(20) << "PyHook_getSlaveHooks()" << endl;
METHOD_HEAD( "Hook.getSlaveHooks()" )
@ -104,7 +104,7 @@ extern "C" {
static PyObject* PyHook_detach ( PyHook *self )
{
trace << "PyHook_detach()" << endl;
cdebug.log(20) << "PyHook_detach()" << endl;
METHOD_HEAD ( "Hook.detach()" )
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );
@ -120,7 +120,7 @@ extern "C" {
static PyObject* PyHook_attach ( PyHook *self, PyObject* args )
{
trace << "PyHook_attach()" << endl;
cdebug.log(20) << "PyHook_attach()" << endl;
METHOD_HEAD ( "Hook.attach()" )
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );
@ -147,7 +147,7 @@ extern "C" {
static PyObject* PyHook_merge ( PyHook *self, PyObject* args )
{
trace << "PyHook_merge()" << endl;
cdebug.log(20) << "PyHook_merge()" << endl;
METHOD_HEAD ( "Hook.merge()" )
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );

View File

@ -61,7 +61,7 @@ extern "C" {
// Attribute Method : "PyHorizontal_create ()"
static PyObject* PyHorizontal_create ( PyObject*, PyObject *args ) {
trace << "PyHorizontal_create()" << endl;
cdebug.log(20) << "PyHorizontal_create()" << endl;
PyObject* arg0;
PyObject* arg1;
@ -152,7 +152,7 @@ extern "C" {
// Attribute Method : "PyHorizontal_translate ()"
static PyObject* PyHorizontal_translate ( PyHorizontal *self, PyObject* args ) {
trace << "PyHorizontal_translate ()" << endl;
cdebug.log(20) << "PyHorizontal_translate ()" << endl;
HTRY
METHOD_HEAD ( "Horizontal.translate()" )

View File

@ -209,7 +209,7 @@ using namespace Hurricane;
for ( unsigned i=0 ; i < _types.size() ; i++ ) {
if ( ! strcmp ( _types[i]->_id, id ) ) {
//throw Error ( objectTypeRedefinition ); // 04.09.2009 d2 modification so Pharos can run several scripts during one execution
trace << objectTypeRedefinition << endl;
cdebug.log(20) << objectTypeRedefinition << endl;
return;
}
}
@ -496,8 +496,8 @@ extern "C" {
HTRY
PyObject* state = NULL;
if (PyArg_ParseTuple(args , "O:Hurricane.trace()", &state)) {
if (PyObject_IsTrue(state)) trace_on ();
else trace_off();
if (PyObject_IsTrue(state)) { } /*trace_on ();*/
else { } /*trace_off();*/
} else {
PyErr_SetString ( ConstructorError, "Bad parameters given to BasicLayer.create()." );
return NULL;
@ -526,7 +526,7 @@ extern "C" {
DL_EXPORT(void) initHurricane () {
//trace_on();
trace << "initHurricane()" << endl;
cdebug.log(20) << "initHurricane()" << endl;
PyDebugSession_LinkPyType ();
PyUpdateSession_LinkPyType ();
@ -836,7 +836,7 @@ extern "C" {
PyInstance_postModuleInit();
PyQuery_postModuleInit();
trace << "Hurricane.so loaded " << (void*)&typeid(string) << endl;
cdebug.log(20) << "Hurricane.so loaded " << (void*)&typeid(string) << endl;
}

View File

@ -43,7 +43,7 @@ extern "C" {
static PyObject* PyHyperNet_create ( PyObject*, PyObject *args ) {
trace << "PyHyperNet_create()" << endl;
cdebug.log(20) << "PyHyperNet_create()" << endl;
HyperNet* hyperNet = NULL;
PyObject* arg0;
@ -69,7 +69,7 @@ extern "C" {
static PyObject* PyHyperNet_getNetOccurrences(PyHyperNet *self)
{
trace << "PyHyperNet_getNetOccurrences()" << endl;
cdebug.log(20) << "PyHyperNet_getNetOccurrences()" << endl;
METHOD_HEAD ( "HyperNet.getNetOccurrences()" )
@ -92,7 +92,7 @@ extern "C" {
static PyObject* PyHyperNet_getLeafPlugOccurrences(PyHyperNet *self)
{
trace << "PyHyperNet_getLeafPlugOccurrences()" << endl;
cdebug.log(20) << "PyHyperNet_getLeafPlugOccurrences()" << endl;
METHOD_HEAD ( "HyperNet.getLeafPlugOccurrences()" )
@ -115,7 +115,7 @@ extern "C" {
static PyObject* PyHyperNet_getCell ( PyHyperNet *self )
{
trace << "PyHyperNet_getCell ()" << endl;
cdebug.log(20) << "PyHyperNet_getCell ()" << endl;
Cell* cell = NULL;

View File

@ -73,7 +73,7 @@ extern "C" {
static PyObject* PyInstance_create ( PyObject*, PyObject *args )
{
trace << "PyInstance_create()" << endl;
cdebug.log(20) << "PyInstance_create()" << endl;
Instance* instance = NULL;
PyObject* arg0 = NULL;
@ -117,7 +117,7 @@ extern "C" {
static PyObject* PyInstance_getMasterCell ( PyInstance *self )
{
trace << "PyInstance_getMasterCell ()" << endl;
cdebug.log(20) << "PyInstance_getMasterCell ()" << endl;
Cell* cell = NULL;
@ -132,7 +132,7 @@ extern "C" {
static PyObject* PyInstance_getPlacementStatus ( PyInstance *self )
{
trace << "PyInstance_getPlacementStatus ()" << endl;
cdebug.log(20) << "PyInstance_getPlacementStatus ()" << endl;
METHOD_HEAD ( "Instance.getPlacementStatus()" );
@ -147,7 +147,7 @@ extern "C" {
static PyObject* PyInstance_setPlacementStatus ( PyInstance *self, PyObject* args )
{
trace << "PyInstance_setPlacementStatus()" << endl;
cdebug.log(20) << "PyInstance_setPlacementStatus()" << endl;
METHOD_HEAD ( "Instance.setPlacementStatus()" )
HTRY
@ -163,7 +163,7 @@ extern "C" {
static PyObject* PyInstance_getTransformation ( PyInstance *self )
{
trace << "PyInstance_getTransformation ()" << endl;
cdebug.log(20) << "PyInstance_getTransformation ()" << endl;
METHOD_HEAD ( "Instance.getTransformation()" );
PyTransformation* resultPyTransf = PyObject_NEW ( PyTransformation, &PyTypeTransformation );
@ -179,7 +179,7 @@ extern "C" {
static PyObject* PyInstance_getPlug ( PyInstance *self, PyObject* args )
{
trace << "PyInstance_getPlug ()" << endl;
cdebug.log(20) << "PyInstance_getPlug ()" << endl;
Plug* plug = NULL;
@ -198,7 +198,7 @@ extern "C" {
static PyObject* PyInstance_getPlugs(PyInstance *self )
{
trace << "PyInstance_getPlugs()" << endl;
cdebug.log(20) << "PyInstance_getPlugs()" << endl;
METHOD_HEAD ( "Instance.getPlugs()" )
@ -221,7 +221,7 @@ extern "C" {
static PyObject* PyInstance_getConnectedPlugs(PyInstance *self)
{
trace << "PyInstance_getConnectedPlugs ()" << endl;
cdebug.log(20) << "PyInstance_getConnectedPlugs ()" << endl;
METHOD_HEAD ( "Instance.getConnectedPlugs()")
@ -244,7 +244,7 @@ extern "C" {
static PyObject* PyInstance_getUnconnectedPlugs(PyInstance *self)
{
trace << "PyInstance_getUnconnectedPlugs ()" << endl;
cdebug.log(20) << "PyInstance_getUnconnectedPlugs ()" << endl;
METHOD_HEAD ( "Instance.getUnconnectedPlugs()")
@ -267,7 +267,7 @@ extern "C" {
static PyObject* PyInstance_getAbutmentBox ( PyInstance *self )
{
trace << "PyInstance_getAbutmentBox ()" << endl;
cdebug.log(20) << "PyInstance_getAbutmentBox ()" << endl;
METHOD_HEAD ( "Instance.getAbutmentBox()" )
PyBox* pyBox = PyObject_NEW ( PyBox, &PyTypeBox );
@ -283,7 +283,7 @@ extern "C" {
static PyObject* PyInstance_uniquify ( PyInstance *self )
{
trace << "PyInstance_uniquify ()" << endl;
cdebug.log(20) << "PyInstance_uniquify ()" << endl;
HTRY
METHOD_HEAD ( "Instance.uniquify()" )
@ -295,7 +295,7 @@ extern "C" {
static PyObject* PyInstance_slaveAbutmentBox ( PyInstance *self )
{
trace << "PyInstance_slaveAbutmentBox ()" << endl;
cdebug.log(20) << "PyInstance_slaveAbutmentBox ()" << endl;
METHOD_HEAD ( "Instance.slaveAbutmentBox()" )
HTRY
@ -309,7 +309,7 @@ extern "C" {
static PyObject* PyInstance_getClone ( PyInstance *self, PyObject* args )
{
trace << "PyInstance_getClone ()" << endl;
cdebug.log(20) << "PyInstance_getClone ()" << endl;
Instance* cloneInstance = NULL;
HTRY
@ -332,7 +332,7 @@ extern "C" {
static PyObject* PyInstance_setTransformation ( PyInstance *self, PyObject* args )
{
trace << "PyInstance_setTransformation()" << endl;
cdebug.log(20) << "PyInstance_setTransformation()" << endl;
METHOD_HEAD ( "Instance.setTransformation()" )
HTRY
@ -348,7 +348,7 @@ extern "C" {
static PyObject* PyInstance_setMasterCell ( PyInstance *self, PyObject* args )
{
trace << "Instance.setMasterCell()" << endl;
cdebug.log(20) << "Instance.setMasterCell()" << endl;
METHOD_HEAD ( "Instance.setMasterCell()" )
HTRY

View File

@ -54,7 +54,7 @@ extern "C" {
// Class Method : "PyInterval_NEW ()"
static PyObject* PyInterval_NEW (PyObject *module, PyObject *args) {
trace << "PyInterval_NEW()" << endl;
cdebug.log(20) << "PyInterval_NEW()" << endl;
Interval* interval = NULL;
@ -85,13 +85,13 @@ extern "C" {
static int PyInterval_Init ( PyInterval* self, PyObject* args, PyObject* kwargs )
{
trace << "PyInterval_Init(): " << (void*)self << endl;
cdebug.log(20) << "PyInterval_Init(): " << (void*)self << endl;
return 0;
}
static PyObject* PyInterval_getUnion ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_getUnion()" << endl;
cdebug.log(20) << "PyInterval_getUnion()" << endl;
METHOD_HEAD ( "Interval.getUnion()" )
@ -110,7 +110,7 @@ extern "C" {
static PyObject* PyInterval_getIntersection ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_getIntersection()" << endl;
cdebug.log(20) << "PyInterval_getIntersection()" << endl;
METHOD_HEAD ( "Interval.getIntersection()" )
@ -129,7 +129,7 @@ extern "C" {
static PyObject* PyInterval_contains ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_contains ()" << endl;
cdebug.log(20) << "PyInterval_contains ()" << endl;
METHOD_HEAD( "Interval.contains()" )
@ -155,7 +155,7 @@ extern "C" {
static PyObject* PyInterval_intersect ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_intersect ()" << endl;
cdebug.log(20) << "PyInterval_intersect ()" << endl;
bool result = false;
HTRY
@ -176,7 +176,7 @@ extern "C" {
static PyObject* PyInterval_makeEmpty ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_makeEmpty ()" << endl;
cdebug.log(20) << "PyInterval_makeEmpty ()" << endl;
METHOD_HEAD( "Interval.makeEmpty()" )
interval->makeEmpty();
@ -187,7 +187,7 @@ extern "C" {
static PyObject* PyInterval_inflate ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_inflate ()" << endl;
cdebug.log(20) << "PyInterval_inflate ()" << endl;
METHOD_HEAD( "Interval.inflate()" )
@ -213,7 +213,7 @@ extern "C" {
static PyObject* PyInterval_merge ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_merge ()" << endl;
cdebug.log(20) << "PyInterval_merge ()" << endl;
METHOD_HEAD( "Interval.merge()" )
@ -239,7 +239,7 @@ extern "C" {
static PyObject* PyInterval_intersection ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_intersection ()" << endl;
cdebug.log(20) << "PyInterval_intersection ()" << endl;
METHOD_HEAD( "Interval.intersection()" )
@ -265,7 +265,7 @@ extern "C" {
static PyObject* PyInterval_translate ( PyInterval *self, PyObject* args ) {
trace << "PyInterval_translate ()" << endl;
cdebug.log(20) << "PyInterval_translate ()" << endl;
HTRY
METHOD_HEAD( "Interval.translate()" )

Some files were not shown because too many files have changed in this diff Show More