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, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8', 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 }) , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', '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, 'gmetalh' , { 'color':'128,255,200', 'pattern':'antislash2.32' , 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 }) , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', '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, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8' , 'border':1 })
, (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8' , 'border':1 }) , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8' , 'border':1 })
, (Drawing, 'gcut' , { 'color':'255,255,190', '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.logMode' , TypeBool, False)
, ('misc.verboseLevel1', TypeBool, True ) , ('misc.verboseLevel1', TypeBool, True )
, ('misc.verboseLevel2', TypeBool, False) , ('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 , ("viewer.printer.mode", TypeEnumerate ,1
, { 'values':( ("Cell Mode" , 1) , { 'values':( ("Cell Mode" , 1)
@ -58,7 +59,8 @@ layoutTable = \
, (TypeOption, 'misc.verboseLevel2' , 'Very Verbose' , 0) , (TypeOption, 'misc.verboseLevel2' , 'Very Verbose' , 0)
, (TypeOption, 'misc.info' , 'Show Info' , 0) , (TypeOption, 'misc.info' , 'Show Info' , 0)
, (TypeOption, 'misc.logMode' , 'Output is a TTY' , 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') , (TypeTitle , 'Print/Snapshot Parameters')
, (TypeOption, 'viewer.printer.mode' , 'Printer/Snapshot Mode', 1) , (TypeOption, 'viewer.printer.mode' , 'Printer/Snapshot Mode', 1)
, (TypeOption, 'viewer.printer.paper', 'Paper Size' , 0) , (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.logMode" ).setBool(True )
Cfg.getParamBool("misc.verboseLevel1").setBool(True ) Cfg.getParamBool("misc.verboseLevel1").setBool(True )
Cfg.getParamBool("misc.verboseLevel2").setBool(False) Cfg.getParamBool("misc.verboseLevel2").setBool(False)
Cfg.getParamInt ("misc.traceLevel" ).setInt (1000 ) Cfg.getParamInt ("misc.minTraceLevel").setInt (0 )
param = Cfg.getParamInt ("misc.traceLevel") Cfg.getParamInt ("misc.maxTraceLevel").setInt (0 )
param = Cfg.getParamInt ("misc.minTraceLevel")
param.setMin(0) param.setMin(0)
param = Cfg.getParamInt ("misc.maxTraceLevel")
param.setMax(0)
# Misc. tab layout. # Misc. tab layout.
layout = Cfg.Configuration.get().getLayout() 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.paranoid" , "Show Everything" , 0 )
layout.addParameter ( "Misc.", "misc.bug" , "Show Bugs" , 0 ) layout.addParameter ( "Misc.", "misc.bug" , "Show Bugs" , 0 )
layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 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 namespace std;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::Initializer; using Hurricane::Initializer;
using Hurricane::JsonTypes; using Hurricane::JsonTypes;
using Hurricane::Warning; using Hurricane::Warning;
@ -133,7 +132,7 @@ namespace CRL {
, DataBase::CreateLib|DataBase::WarnCreateLib ); , DataBase::CreateLib|DataBase::WarnCreateLib );
AllianceLibrary* aLibrary = NULL; AllianceLibrary* aLibrary = NULL;
ltrace(51) << "| " << libDbPath << " : " << library << endl; cdebug.log(19) << "| " << libDbPath << " : " << library << endl;
if (library) { if (library) {
aLibrary = af->getAllianceLibrary( library ); aLibrary = af->getAllianceLibrary( library );
@ -152,7 +151,7 @@ namespace CRL {
if (not library) library = aLibrary->getLibrary(); if (not library) library = aLibrary->getLibrary();
} }
ltrace(51) << "| Associates to: " << aLibrary << endl; cdebug.log(19) << "| Associates to: " << aLibrary << endl;
if (aLibrary->getLibrary() != library) { if (aLibrary->getLibrary() != library) {
cerr << Warning( "JsonAllianceLibrary::toData(): Underlying Hurricane Library discrepency for \"%s\".\n" cerr << Warning( "JsonAllianceLibrary::toData(): Underlying Hurricane Library discrepency for \"%s\".\n"

View File

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

View File

@ -90,9 +90,6 @@ namespace CRL {
using Hurricane::JsonTypes; using Hurricane::JsonTypes;
using Hurricane::Tabulation; using Hurricane::Tabulation;
using Hurricane::BasicLayer; using Hurricane::BasicLayer;
using Hurricane::trace_in;
using Hurricane::trace_out;
using Hurricane::in_trace;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::DataBase; using Hurricane::DataBase;
using Hurricane::Technology; using Hurricane::Technology;
@ -210,18 +207,17 @@ namespace CRL {
unsigned RoutingLayerGauge::getTrackIndex ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const unsigned RoutingLayerGauge::getTrackIndex ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const
{ {
trace << "RoutingLayerGauge::getTrackIndex ( " << position << " )" << endl; cdebug.log(100,1) << "RoutingLayerGauge::getTrackIndex ( " << position << " )" << endl;
trace_in ();
long modulo; long modulo;
long depth; long depth;
divide ( position-start, depth, modulo ); divide ( position-start, depth, modulo );
trace << "depth := " << depth << endl; cdebug.log(100) << "depth := " << depth << endl;
if ( depth < 0 ) { if ( depth < 0 ) {
trace_out (); cdebug.tabw(100,-1);
return 0; return 0;
// throw Error ( negativeIndex // throw Error ( negativeIndex
@ -243,7 +239,7 @@ namespace CRL {
unsigned int tracksNumber = getTrackNumber(start,stop); unsigned int tracksNumber = getTrackNumber(start,stop);
if ( (unsigned)depth >= tracksNumber ) { if ( (unsigned)depth >= tracksNumber ) {
trace_out (); cdebug.tabw(100,-1);
return (tracksNumber > 0) ? tracksNumber-1 : 0; return (tracksNumber > 0) ? tracksNumber-1 : 0;
// throw Error ( overflowIndex // throw Error ( overflowIndex
// , getString(this).c_str() // , getString(this).c_str()
@ -253,7 +249,7 @@ namespace CRL {
// ); // );
} }
trace_out (); cdebug.tabw(100,-1);
return depth; 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.paranoid" ,false)->registerCb ( this, paranoidChanged );
Cfg::getParamBool ("misc.bug" ,false)->registerCb ( this, bugChanged ); Cfg::getParamBool ("misc.bug" ,false)->registerCb ( this, bugChanged );
Cfg::getParamBool ("misc.logMode" ,false)->registerCb ( this, logModeChanged ); 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 ); Cfg::getParamString("stratus1.mappingName","not_set")->registerCb ( this, stratus1MappingNameChanged );
// Immediate update from the configuration. // Immediate update from the configuration.

View File

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

View File

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

View File

@ -93,11 +93,10 @@ int main ( int argc, char *argv[] )
int returnCode = 0; int returnCode = 0;
try { try {
unsigned int traceLevel; bool verbose1;
bool verbose1; bool verbose2;
bool verbose2; bool coreDump;
bool coreDump; bool textMode;
bool textMode;
boptions::options_description options ("Command line arguments & options"); boptions::options_description options ("Command line arguments & options");
options.add_options() options.add_options()
@ -110,9 +109,6 @@ int main ( int argc, char *argv[] )
, "Enable core dumping.") , "Enable core dumping.")
( "text,t" , boptions::bool_switch(&textMode)->default_value(false) ( "text,t" , boptions::bool_switch(&textMode)->default_value(false)
, "Run in pure text mode.") , "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>() ( "cell,c" , boptions::value<string>()
, "The name of the cell to load, whithout extension." ); , "The name of the cell to load, whithout extension." );

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,7 +40,6 @@ namespace CRL {
using std::cerr; using std::cerr;
using std::endl; using std::endl;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Exception; using Hurricane::Exception;
using Hurricane::Bug; using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
@ -74,7 +73,7 @@ extern "C" {
static PyObject* PyVhdl_destroyAllVHDL ( PyObject* module ) static PyObject* PyVhdl_destroyAllVHDL ( PyObject* module )
{ {
trace << "PyVhdl_destroyAllVHDL()" << endl; cdebug.log(30) << "PyVhdl_destroyAllVHDL()" << endl;
HTRY HTRY
EntityExtension::destroyAll(); EntityExtension::destroyAll();
@ -104,7 +103,7 @@ extern "C" {
// Module Initialization : "initCRL ()" // Module Initialization : "initCRL ()"
DL_EXPORT(void) initCRL () { DL_EXPORT(void) initCRL () {
trace << "initCRL()" << endl; cdebug.log(30) << "initCRL()" << endl;
PyBanner_LinkPyType (); PyBanner_LinkPyType ();
PyCatalogState_LinkPyType (); PyCatalogState_LinkPyType ();
@ -198,7 +197,7 @@ extern "C" {
//PyObject* dictionnary = PyModule_GetDict ( module ); //PyObject* dictionnary = PyModule_GetDict ( module );
//DbULoadConstants ( dictionnary ); //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::hex;
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -16,7 +16,6 @@ using namespace CRL;
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
try { try {
unsigned int traceLevel;
bool verbose1; bool verbose1;
bool verbose2; bool verbose2;
bool coreDump; bool coreDump;
@ -30,9 +29,6 @@ int main(int argc, char *argv[]) {
, "Second level of verbosity.") , "Second level of verbosity.")
( "core-dump,D" , poptions::bool_switch(&coreDump)->default_value(false) ( "core-dump,D" , poptions::bool_switch(&coreDump)->default_value(false)
, "Enable core dumping.") , "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>() ( "cell,c" , poptions::value<string>()
, "The name of the cell to load, whithout extension." ); , "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> </pre>
<p>Third and final step, build &amp; install:</p> <p>Third and final step, build &amp; install:</p>
<pre class="literal-block"> <pre class="literal-block">
dummy&#64;lepka:src$ ./bootstrap/ccp.py --project=support \ dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \ --project=coriolis \
--make=&quot;-j4 install&quot; --make=&quot;-j4 install&quot;
dummy&#64;lepka:src$ ./bootstrap/ccb.py --project=support \ 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> 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> <p>Under <span class="sc">rhel6</span> or clones, you must build using the <span class="cb">devtoolset2</span>:</p>
<pre class="literal-block"> <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; --devtoolset-2 --make=&quot;-j4 install&quot;
</pre> </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> <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> command just after the first step:</p>
<pre class="literal-block"> <pre class="literal-block">
dummy&#64;lepka:~$ git checkout devel 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 --make=&quot;-j4 install&quot; --debug
</pre> </pre>
<p>Be aware that it may requires newer versions of the dependencies and may introduce <p>Be aware that it may requires newer versions of the dependencies and may introduce

View File

@ -121,20 +121,16 @@ p\
endstream endstream
endobj endobj
99 0 obj 99 0 obj
<</Filter/FlateDecode/Length 2409>> <</Filter/FlateDecode/Length 2406>>
stream 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>Ï 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¶"
e7PDïoѨÄö<C384>ñ¬¨Ãñ<n¤&i<Ưè$ιxž$c5k§¹âi JË…`¹ÐãÂr#`·Ð1,6·x¼¿ÿþ÷Õróåêçßß[nš÷_wÛc˳mÓÚàó÷Á|½½[¯î,Fþ3xØÎ<0F>Íz»“ Ùm{õ‰œ/~DŽû¬œ» 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¢Ñ(.
š¯Ö_—ø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Ûž ‰ÎЪÐÚ{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ݬ
*ù×}N|Ú1XP™ˆ ®×ëÝÃÒj0ŸoÈæ»r<C2BB>µÙ®?/ç»_t.[Ƽ¼” ¶ý×LÐVDAjž¯,ëþêËò—wÖgÝ}}Ø]­\w„¿E÷ëÿFwït×û\¬çz½ Ú³<C39A>ýØa u1z¥}YÁŸžof±, 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 
ž‚ O€Éé gxmý¿"[„æhW}{šñ6Jpb¿xn÷Zç¬D@l¿]ßñ ÿ<iôBE$9°Aö£7XMH={ ò§ÏÉk©ä-×<E28093>7}'
´èž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œŸ 8tPÚfœïDüPËÏk<Ÿ%œƒÄ›'ãI´È.p؇
ß Ï <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ž o]îLÆï¹p'<1C>JNá'žíð2Ž§1e²Q¢çËè]õ:IVbªŒ«QÜ5qµo‡uQP¬©]I5XŠ÷6Xv<18>ï
üÁá‰ò¬vc=<àÒ>?Ö#¼´¤°Vyh¤Ø¢F¾"E‡?ïI<0F>üµ“O]Û%Ó'ŸÖ½‡¨ç ~ñöíé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
Ö†µÉÞÉŠª¾ê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¤ÄøÚžþôïãƒ
endstream endstream
endobj endobj
104 0 obj 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å 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 ´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 .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 endstream
endobj endobj
487 0 obj 487 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 5628>> <</Subtype/Type1C/Filter/FlateDecode/Length 5628>>
stream stream
­XwXUW¶?È= E¼È•«€Š4%ˆhh!”"R•¦ Ez/b[LÞìLÆØC Ø°  âÅѨ+'‰%ƨã:÷® ïís“yïÍÌûã}ó ß>络³÷Úk­½×ï÷ÛG<C39B>É===ã€è™ó"ƒór ­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<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;[ ¹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 õÁ Ž
Ož(9EÎðÞÀ!ùT2§2òLÔéü+äiÚz¬ôHéŠÚšêšÃmG¿=-úk½Ì­Ç£" ;øç{n44_:×¾ÿ&ùž€Iü3W•«
§>“49æðÀçžÈÒ`yMžöÔôÔ<h¹æásXÁaœzúê:Œ? á ­ª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½#—…
ôâVû/*  ®¿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
_:?;&%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œ %ì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
<EFBFBD>"Ñ)Ý ÎìŠåa˜îQð^8M {0<>üŒòn´>‡NÍè´]¾Oе'ÇàÄœäƒVNh"9ðd·Á¼ÛÀñ ¸Qc¡f@m£äFÈ1kÒZj-@?ÄaY¸ïƒÏ$p…ðÁ˜þ~ ÇÔ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úî
÷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™‚ ¥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æ¬Î
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$¸þ ÊŽM̈Ös[?;K. bæïµèA-¾ƒ½:Û:×Oµ}çÒO,ÞçG\èá³^˜izÐc ‡_£d)§lÏ-[Q¶¼rC9D*·—••íÝQEIãúªå{—ï-ÚžGrIцå+¯Ü<C2AF>K%MÚurXøš
šÃ È'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ÿÀ/Æ/õ ì,K¥ì <0A>e< -‰/Ì)ÈM^IâHÜÖX*ü,øc+Û6RáC”|ì¿0—æ2<§ge
iE 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†
ÿž /þÙŽâ#V¾¡œ4úÔ»ïnƒ±^G%. þ·e OäÅ·rPqðNû…XNk­<C2AD>¨o~ p<C2A0>À˜ø¾iק^GÅô¥H`£Ë§Þ,Û!Ÿ‡áäYq{¼*¾jMÅÄÜYáÂN)”°ÏP#jvŠ ³™q0ƹwr/UCÒñj
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µÆ”Å@ Aãh[»8IiøR/ŸpbꉩþwbïÄ~_Då;=$·<y-<ys, ø
-²Ï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ÊÆ$ ýw¨ü²®zwñæÅ(P~”zifû¬*
í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Í ÕÔŒu®uøŒ°Yî)¨Ghso ¿~+÷ åÆ àüO ໬<_}ð
ù÷ä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Þ Ù*|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
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 é<EFBFBD>µ÷òNJj<03>|<7C>í7(I[³pU°bePI̦dÚesKñËdŸ
ê«è&…é&:ñ`Œ8R[ªãõ\µ<>"¦²Íá;í<>ÿøˆœDÅïáêJŽ¢0Ëç+9¿eÕ*«w^gP—S-/â³r^ƼŒE±aá"ÀeWðCâCW‡f‡gÇ%dEÐçyàÀ¢Å@ͳ$ ã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Þ¿
Çîïmî<wåNͯä>éXÚ߸¸ÌŸ¸ 墊׾èÁ"«ûî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Ù…
ý±´ƒ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Á[ v¡ÈäHOyz¸´½4Aåu?ôMèë`(Žéôä=òšå Ï7Õ·œSuª:O]¨nÊ1Ž/ŽÏ‰JI IÎL —íÓܯ€W?qÚu„3X<33><58>¼o¨<6F>X=⿱ïÛ
½ÿˆ¾ÓÛüÚ~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>ï·
endstream endstream
endobj endobj
489 0 obj 489 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 554>> <</Subtype/Type1C/Filter/FlateDecode/Length 554>>
stream 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І: L?˜ˆ²È200<·ùAäE)$˜¥„Ø9øŤBãJó2Ýœ !”„26Ô34pÉLÏ,ɬJMQHI,ITHÎ/¨,ÊLÏ(QÐHÖT0204І:
îùùé9© îùùé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 endstream
endobj endobj
491 0 obj 491 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1647>> <</Subtype/Type1C/Filter/FlateDecode/Length 1647>>
stream stream
xÚ¥SSTç¿w÷^ˆ$^dë*<2A>Í xÚ¥SSTç¿w÷^ˆ$^dë*<2A> ˆ;¼ŒÅ°H 
"îð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‚•Ç®°>¸°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>
]•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Þ'^ þ”°‰œ„€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+:ÌÒ›
,ð…€Ã¯'«w«C è [§<>|½è¦À
I<EFBFBD>P“ðq•½ ùÍ,F2ÿÈ"^å$ É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
ˆÔô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„¸ rò>ñðÇ<oð;üzv·6„GgH„øêø<C3AA>ã¯ì­Ïmb1ùGñ(#@Ô@䦧ó óÝd5<64>-btðEØtøºµ¢
å™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ø ¸Ýì°¤Ÿ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 endstream
endobj endobj
493 0 obj 493 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 4701>> <</Subtype/Type1C/Filter/FlateDecode/Length 4702>>
stream 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>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>û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 <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>Ëë
o“'Ä¥¿Žk·oñeN¥íá8ñOÉÕµu«O$â³fyDÒÊ$ï':Ä¿!€ƒ™O¼Ñ覇­ n$¼v¹ÐDö¾
[å™ù)í á¨/¦êÓ*Åe¸¾y ý¥4'ýÛ•hýZÃ-ÅZûŒôš21ùäД ÁÜô‡ÒË>õ€hƒóìåqtJIçù<12>À ~´ àpŒ®þrõɳ“ Od$^©ØTu6 ä47˜ƒJø ÿòºˆ ]&4<>ƒ=¯9  ý< ä 0 ”0ìð$<24>Çc×FïàXœ„,ÐLã .”ƒ%:âuKº‡™šÝ¦°K[&Ša§v#ÜË`gßCjRn¤ÅlS±KÌ…Ú\:¢œöü8Уd¯ªÓÕ—Ü åØ.Wå¸çºÊ2öõ<1E>ÜÆ€!'ö'Àðþ³ûÏÞ<C38F>äôß-ê…­
ع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 ´ìÀÑåø¡þ£¯Ž@*Q¡BOë nn§ˆéS´x`š;$Ñ=}´ãÑž½¨àÕ_I|h©dW™ÒðÀËÚÚnñ&^¡žÁõ`±»o°ä¡/m¦ÚÝêVq§ÚœÅWœÖJ‡Fèʪÿ,Êaø q¨VKãUG!ŽgJY^¡Û.'ꓦPɆJY»Ûˆž<C5BE>%+¾\AVÕ|Ÿ
Ç3•¢¯Ðmç‰ú¤ Ts¡JÁîâ6 ç&dÉò/—“•d•Ðë ê© Ú)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
íd^«××ÃærøZÓÃj'ËÆËÔS9r/Æç@¶°‹ÚâÖ«ØËýíuåÉÔí8ü;ô6r½ÆšŸX­Ùû<C399>æpäa.XæÀ"úzPßsê¢bÿ©N¢Û¿Ù¼ÑD@/—k˜Jäæâ<C3A6>(¢!õAo ×ÊÙ‡Ì+˜³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
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þÕüè ÐsNÌ£ã¥LêWØ*¾fñ)'fô³ÚV¸$vÊÅ <0C> O8i9JYåž¾p¹ÚWó Ëú«p—z†¼oaÿ?£+“ÝQkL!Z<>ÍQ,Âÿ˜zmê5”WJ´áHpd4
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[° ª S€aóÛÒ§4rùv?d-—ÈqQNÍC“Xg?3ÿÐIST*œ.y_ö~ûŽ’É­=͇[JšN5^ã¿åbE]ác9Q¥® óOŸKx»% ?[’Žƒ§ÊÊ:÷?Ý&Á1DM=^# ±˜zü:îÛžoî<6F>Ó<ôc»Rý
ˆú˜º@c(B~“''¾«(8TpøèÞzr<7A>´®¿´æ¤(<28>ËÇí§ÀœØÄ{úzúÆÚSU-8ó8Õ™E˜ÚgmC9¼sUŠ8M<38>¨έݖøͲí¡;"¶Å´!È­šê:Õ5|ÕdÆ÷n•þÇüO‡]L^š<>Ÿœ°6Š,Hôž˜¢¸¢Ø#©å9“×x­ ²å<EFBFBD>q]ö½Ka¸T£Þ6v÷Üë©^¬‚‘®º¾Õˆ
Ió£J|L팇<C592>``¢Ì#Ë)µVsto7uS %<25>?cîz4º7Ú¦Ô.  Â<EFBFBD>Å-Â5Ò˜Xã_X8™ .mk<6D>#ý".‰÷$3ˆßáÈ Q2h(ð•ò­ï
ÿƒ'-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óÆ­ÃãêØ º«Î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)‹Óô
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û…¬á Úܺ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>^
%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:ô?Àˆ• Í-ˆ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 endstream
endobj endobj
495 0 obj 495 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 436>> <</Subtype/Type1C/Filter/FlateDecode/Length 436>>
stream 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™é% Éù•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 endstream
endobj endobj
497 0 obj 497 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1606>> <</Subtype/Type1C/Filter/FlateDecode/Length 1606>>
stream 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>‰ó xÚ=S{TgŸ<>$3¥4X5
u{9Ô˜4z5ºÝÚ"–õº‰ƒòòðhÝn]®D³SºSU¤ª Æ}\”tŽz®ô­pyx òùÒƒaw®FºÆP`4¨ŠtýN´”S-åTÿí±Õ{¥ÿPÔûÔ! k
¨ÃÔêê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ã 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
ÀU€âÍá! C¶£ 0g?<3F>ý&#S·<53>U@"€ˆ/<2F>>ý«“È€l`DcÝÓ$üB¬¦=åžWÉ<L"›É ó§uÕMõ<01>õ5æcŸ”ã|ÿ 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 ß•
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) ®ÍRa§D:ïá f¢D:Þ!
€Aþx <Øo×ÛõMÛ`D´iÚwJd ±ÇbjbjëSš4ÓÄOI¤ùd<11><>@f·?½ýôV7¡€ã¼Á¤oúÞú ÆÜ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>ë
}¾`ŽÒ<C5BD>¿¼eëè£ W­„¿¯QLÞÃh÷8ž¡Çç¾<C3A7> ¶*ó·è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
0Ëíã¡É.šÆËä=±G $û‰ýx×­Í<C2AD>Í<>ugª-L¥°¢èýôŠ¨Š5‡6AöÄU®1×sq2l-ßñ®ö #9+p'_Œ· ímÜ֌ؼØüåe!<21>ÉŸ¦~Áâ¦ëƒ«¿9 yƒÌæŸ ÄÊzN¹Þ\…^£5í|ÚÉXˆeIF¦*S­4%pMM?™cͱþÕ7`´ÖyÆvÆÖ]?È©t¯& !Nn'Ñ)óRnºi à¬zdm¡<6D>¡ß¯ý׶»Û
ãû‰_\ceëÇGÛ?üŠ•½ùÏ(|†EâÆ ˆ;¶¶fmuR½²‰ÁZú±LÏ'ËØqb{rÿÉý.2¸<17>*B-¿½ì6 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å
Î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 ¿—` 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ýÿš¨-&
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-.
endstream endstream
endobj endobj
499 0 obj 499 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 6907>> <</Subtype/Type1C/Filter/FlateDecode/Length 6908>>
stream stream
<EFBFBD>yTÙ¶v!tu)L«”¥àhW먈:fÇ8 <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%«˜ôÓÈ´ö Š (ˆ³Œ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ãä¡ Ñ ¿¬ó
Œ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è󬯣 öª™ï﯉\å¯ Ðù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
ˆ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Â;º Š¦ª#Õ‰²¤¬¨Ï(Õ™êBu¥¬)êFqTwªeCÙR=©Ï©Þ”šâ©>T_ê ªÕŸ@ÙQ){j5„úJ £†S#¨‘Ô(j45†úŠK<>£ÆS¨IÔ×Ôdj
ì5Ø#ÞáƦÌuGÓ<47>_uÀŽõ[ãv¤\NºX™¹9±.¾b å@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
¸z~¥fï9¢û²çTg$"&!=5†Ÿ¤Œ)I­(/ÑW«+•[ƒ›#šrliZKå[Ãå³è!:³7pcHÍ:Ý´ “¢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
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|­†ó æ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à
ñ÷ß|€/¥ìܾ_Ðv_^%F½ÿŒ+ÔåË—¦èSÔ)(3+=ÿð×1p ”g<EFBFBD>]:ÿã3èŸÕî@ç™cÙ«ÝÑüЀeщÁ(†IÕu ¨¸¸°¢òÂw<C382>×sÿš»3<C2BB>¼¢C¿æà8ÑaÂTfŽ½!ª¿7ù/PÙjkq†Mx‰<78>à—Ÿ—Ÿ—‡.lÙ
Ñ<EFBFBD>¸¨°¤ â1¢B€FÁ\Œƒß85(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ÄŠøË
<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·)²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|á
pô€¹¨…¿¸¼è¼x”ŠfǺ†|³ÌaÒŠ)(Ť¥eåe礥&Gï<47>;Ì_AW¶|Ût÷RÃ3 ÓÆ<C393> ÇÙ«Æ Ì0xÚ¬N¯ïÿ ¨·SžW;!O_ŸñL±'WwÄP½¡r÷Þƒ÷!ææÙ™“ÆÌéÈ» Å<C2A0>aO³õ(/c3£Ê­ÁìwŽ“ÎqxtK)IÎ ”mÛ†FEEE•0V¬´¹ÒÒqŠ2º5•kÔ pD
w4å+Lõ¿?ö…új>(<f2š¹ðocâãÖøDù#fúü«Ÿ<>½z—¿ŽNzn[<5B>Šr#ˆ3kÅ^ÿ”R ™¬ÖwìÛ´ƒ€Õm¨çÄ18¾(»(§Ù£â‚âü›ü_¨8«8µòÐ!<21>-*È-È!ÿm²Š3 ¨=ÙØ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ïÚ´
‰‡PVNf6© óI§`&ÖÀ<C396>2Ôt7¡¦èŽû}zG%n!b´Œ<C2B4>øÌÌüld<64>2²²3r²mr² >“:P˜¡ÏÀKm0y¤ffe¢t[RÁ²ó³ó²m 2nó—8©UqÈÔB'au­õ%Aì$%c¸XÈ-oœS7Í@­\:¹3ã”øsèŒ;C/õetqËñ¦­ueU¨”1¤éÔé$²ÒÓ<g-^ëŒÜÉîXñ·”`ùók0Wÿ„~XXèžWV†˜
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ŠÉ © %ÛËÔ'<27>J%˜ý&À<>ùo§•iF÷, /F }æÔ8Ìt žZ¢81
þ4^*Ö(ð*Ù¶<15>]Z"<15>ô'¡fÝ v ¾P6£}ñ «úl™ƒ2S•}FÙV·Úõiíïpˆ 
($°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Þ´µ®¬ ëö¿`<“ô—õÐÃÔ·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
•2†4]:<3A>DVzšÇì%뜃;Ù½+þ–,~ æêŸÐ Ñ—†s-y
Ýòâ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Œ:µ ×J³“8šhö-‡1<E280A1>x<ä'ðРJ“I¿Þ÷á},€ùÓ¸î=Ó_4 yI~(<28>Z
¨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ßíª-“ <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…»ï{¶_\à^Ë(©ÿ
¥qÎÍ\QZ~¸ža£ƒ …Á( µé}­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ù
Åå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? ìèGM½âæOš]Ú¾òê9Í=:ý‚öŽ4¯ß@Wè2ä5VñìaG4Í'œ¿ãþù`ÂöÆâÙÆ<C399>¿yóðÑ?Œùo&hk­Ÿ
°øñ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š¢³ò² ðö{qµhÅùìõ¬q'â÷<Ûàn¿ƒüUtµödÃöš Õ¨Œ!£R
Ó@ºù(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> éÖ³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Û
Z>¨Û^¼1wN¬YÆ;)Ý+VŽ¨ë÷Ñ<:åÒâ—êèÂÖgvO£ÅŒ9áNˆqö¬?uéöá?ø#èXÆÞÔ6YÞ*oD<>]ýˆChv‰©W\ØÜRãA³ËÚW^=§Ù£G§_ÐÞ€æõè 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òÜú{—ó#Õ¬‡
]†¼Æ*ž=숬]êÄ€ó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;%?(†~‰̼ Œž;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"ö
ž½s5ïj¼Ê`Néâ±ÐE<C390>mš><3E>öU5ìÛ¹»|¶Ÿ8°YÉöm×<6D>ÄÜ 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
<)”{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<> •¸¿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
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>
endstream endstream
endobj endobj
501 0 obj 501 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 6275>> <</Subtype/Type1C/Filter/FlateDecode/Length 6275>>
stream 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/ ™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 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 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 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Š “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 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 endstream
endobj endobj
503 0 obj 503 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 5531>> <</Subtype/Type1C/Filter/FlateDecode/Length 5530>>
stream stream
­x T׶v1Tu!8[@ÇVp@Aq DDdž•Iæ¡™¡A‰C®yû^£Æy@PF™AdTfDœ0q$jŒ ×x=Õ}Þ ­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+šÔ†& ¼~Ñ÷²ï÷Ä ½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 |)?ÊŸ
ho =E¡Â<5A> Œßšü†õ/ad¯?ù ¤«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_ä$
½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Ìæà 'ùcr#N“(ª9‰ú ùX þL4NÂl<C382>ÐÍÂ+ؘ¹MÞ£ £Ë<>qÞXMì²VÈ¥-LpŒŽO Ö6º ‰ôàÞ‡gs {Êê*j«së<73>EÅÆ<O¿ÖÖèqÎ
À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%Ø…ÞÉ`#‰úïýçò$˜^ Vׯ <0A>+c ¤s2fVƒygl.ø^ðëL€Nh9ÙTÆ6”\h(½RÖU8pæiîÓÃà6;,Oãî|°Ç+Ó>Ó1Ã#Ý/ÍW‘˜œ˜M`Du
<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,^ 0y”óCÎã¢ÞòÚòÚšœºQ&ÿ„Ñôg˜?Áðí 0ºŒÆR¶±´¦¾´»¬»ðNÎÓœgGÀvœ„<0E>§Ih[® .l+L(Š?
Ø°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#Ö  ü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
Â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.\|—¦` ˜<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õòÖÖ/Ûvö|u©×­~uïçû<C3A7>H…H=Á¼Ÿßª<C39F>J$´Í›µ1¦Gâ™lLóó\,Q<X-¡wŒvo$1CFÜŒ<7F>=Ä.ž‹°æÁê³~u~ ²«pÚöœ¸<C593>Ö*Æë }_ÿ¨§ Êñ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øéµ°
/{Ž¨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¸ æ¤F“°Y:¸8<C2B8>°¹þøŠÏJ纠õ@ÓѦ#í9½E,š#rŒõN Ú±qGðžX
Íé•¡•¡Ù>¤,¦†Í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ûà Î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+
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…ÆÌ  ¥¡î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
¬Ø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 ¥k£LAéˆeæÈ#•Ihâ<68>øC©äD¶5wWAþ±³y¹yGÎC%{%¡ØcºwlJÝ$ËŠƒHa<•pí'¸<>ßÒÖÚRõÃ9Ä Ò£½Ö%)ˆOI°Až¶ÖÞÄá~0t”"Û/á%"—?,÷o)¶¢A¾ƒªâ§eH·
Ü+š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è ­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 endstream
endobj endobj
505 0 obj 505 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 475>> <</Subtype/Type1C/Filter/FlateDecode/Length 475>>
stream stream
xÚcd`aa`ddw õõ 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ÙýÝ ö/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ˆ¿ì»¿ ÝÖ¡Á!¡‰: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 endstream
endobj endobj
507 0 obj 507 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 1080>> <</Subtype/Type1C/Filter/FlateDecode/Length 1081>>
stream stream
xÚ=kLSgÇÏi{N<> <03>£ÐI¹,xkDS 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>
”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¸ x%$â—g}ýŠeŒ–â .‚äÖ
ɼk¹Ie ¸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
çnpía™þN™Ny êÁË! 6”Æ~›™¾)s±È†W^ 8¨+ônüÄûÏôÈ^ÂBÛìÌì<C38C>c¿õ#ibš…$ {‚˜Ù…ñ…ñÉ!‡ãª£ó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
f<¡è +<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
; 7-=9ÝÙ ˆ,9q@Uª.HÞ<48>³;7Óš <09>Õ¢Ô Ú'á òÂóŽÇLûãÞ»ÃÎaçXË`d.+¾ @2Æ'C#²I:ԛߛה@s:¿V{\{X°ÜTn`KªKlE'?†ØÝlèÛ×W=?3¼½ö?GgFgf{y'Üð¯ CÛh4Îß>…·ÑR[“÷áôüÚWâ5¤pE±d÷íÊHÇòg
Õºÿ¢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
endstream endstream
endobj endobj
509 0 obj 509 0 obj
<</Subtype/Type1C/Filter/FlateDecode/Length 392>> <</Subtype/Type1C/Filter/FlateDecode/Length 392>>
stream 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 endstream
endobj endobj
513 0 obj 513 0 obj
@ -2487,26 +2480,31 @@ x
endstream endstream
endobj endobj
485 0 obj 485 0 obj
<</Type/ObjStm/N 41/First 346/Filter/FlateDecode/Length 1840>> <</Type/ObjStm/N 41/First 346/Filter/FlateDecode/Length 1839>>
stream 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˜Ÿ xÚÍXmS7þÞ_¡ïwõ.ÝL§3B ‰Ã[˜|pÌa®5wŽÏÎK}ŸÕ°ÏNp2´<05>¬ÕJZí>Zí®QB
<EFBFBD>ŽÙx4šI8Nb¬•J8ì€ ½PÒ£<C392>ÂŒ3)Ã8Ó"j<>Þ
 ¥¤<05>…Z2'‚ð^8)…òûÀU™aÂ
»â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 ­ǃ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{À
â&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ç 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á“
ç®i±<EFBFBD>ðJÿôÏRr ”ݪœÒÑìÔÌ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 endstream
endobj endobj
528 0 obj 528 0 obj
<</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<b94d77ce206f8dfc5dd36e121e44962a><b94d77ce206f8dfc5dd36e121e44962a>]/Size <</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<f054ffc13bd83fc8f7d51fd5c7fb7e88><f054ffc13bd83fc8f7d51fd5c7fb7e88>]/Size
529/W[1 3 2]/Filter/FlateDecode/Length 1261>> 529/W[1 3 2]/Filter/FlateDecode/Length 1263>>
stream stream
xÚ5ÖWpUEÇñýŸÛÎIÒ @:¡zˆ”¡ ˆRz HKAzMB• D@¤3øÀƒâƒÃÌ8Ž£3> Ž3xóÝ^>óßîÙ»¹9³{<7B>1æÝ;ÇÈkcÂ昧¸& 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à
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>óHLÖ`ÍÄL|¥y fá ÌÆÁ8‡Š™T£óßæ³v™öZš½äabæoÔ~8ý~r.Ž³<EGG2z<32><
<EFBFBD>¹Dœ¬{áý8¿×f)Ïž§ßhmÑ|E.ÂåâŒúWGW0zAœm>£¹L^‰Å¸ Ÿã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¹+›Ï®
\ë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 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 endstream
endobj endobj
startxref startxref
624048 624046
%%EOF %%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: :: Third and final step, build & install: ::
dummy@lepka:src$ ./bootstrap/ccp.py --project=support \ dummy@lepka:src$ ./bootstrap/ccb.py --project=support \
--project=coriolis \ --project=coriolis \
--make="-j4 install" --make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=support \ 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|: :: 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" --devtoolset-2 --make="-j4 install"
If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument. 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: :: command just after the first step: ::
dummy@lepka:~$ git checkout devel 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 --make="-j4 install" --debug
Be aware that it may requires newer versions of the dependencies and may introduce 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 namespace std;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::inltrace;
using Hurricane::ltracein;
using Hurricane::ltraceout;
using Hurricane::ForEachIterator; using Hurricane::ForEachIterator;
using Hurricane::Warning; using Hurricane::Warning;
using Hurricane::Error; using Hurricane::Error;
@ -118,8 +115,8 @@ namespace {
void Slice::merge ( DbU::Unit source, DbU::Unit target ) void Slice::merge ( DbU::Unit source, DbU::Unit target )
{ {
Interval chunkToMerge = _xspan.getIntersection( Interval(source,target) ); Interval chunkToMerge = _xspan.getIntersection( Interval(source,target) );
ltrace(300) << " Slice::merge() " << " " << chunkToMerge << endl; cdebug.log(129) << " Slice::merge() " << " " << chunkToMerge << endl;
ltrace(300) << " | " << _getString() << endl; cdebug.log(129) << " | " << _getString() << endl;
if (chunkToMerge.isEmpty()) return; if (chunkToMerge.isEmpty()) return;
@ -129,20 +126,20 @@ namespace {
while ( ichunk != _chunks.end() ) { while ( ichunk != _chunks.end() ) {
if (imerge == _chunks.end()) { if (imerge == _chunks.end()) {
if (chunkToMerge.getVMax() < (*ichunk).getVMin()) { if (chunkToMerge.getVMax() < (*ichunk).getVMin()) {
ltrace(300) << " | Insert before " << *ichunk << endl; cdebug.log(129) << " | Insert before " << *ichunk << endl;
imerge = _chunks.insert( ichunk, chunkToMerge ); imerge = _chunks.insert( ichunk, chunkToMerge );
break; break;
} }
if (chunkToMerge.intersect(*ichunk)) { if (chunkToMerge.intersect(*ichunk)) {
ltrace(300) << " | Merge with " << *ichunk << endl; cdebug.log(129) << " | Merge with " << *ichunk << endl;
imerge = ichunk; imerge = ichunk;
(*imerge).merge( chunkToMerge ); (*imerge).merge( chunkToMerge );
} }
} else { } else {
if (chunkToMerge.getVMax() >= (*ichunk).getVMin()) { if (chunkToMerge.getVMax() >= (*ichunk).getVMin()) {
(*imerge).merge( *ichunk ); (*imerge).merge( *ichunk );
ltrace(300) << " | Absorb (erase) " << *ichunk << endl; cdebug.log(129) << " | Absorb (erase) " << *ichunk << endl;
ichunk = _chunks.erase( ichunk ); ichunk = _chunks.erase( ichunk );
continue; continue;
} else } else
@ -154,8 +151,8 @@ namespace {
if (imerge == _chunks.end()) { if (imerge == _chunks.end()) {
_chunks.insert( ichunk, chunkToMerge ); _chunks.insert( ichunk, chunkToMerge );
ltrace(300) << " | Insert at end " << DbU::getValueString(_ybottom) << " " << chunkToMerge << endl; cdebug.log(129) << " | Insert at end " << DbU::getValueString(_ybottom) << " " << chunkToMerge << endl;
ltrace(300) << " | " << _getString() << endl; cdebug.log(129) << " | " << _getString() << endl;
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,74 @@
// -*- C++ -*- // -*- 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 {
/*! \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%; 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 { table.DoxUser td, table.DoxUser th {
padding: 0px 5px; padding: 0px 5px;
border: 0px; border: 0px;

View File

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

View File

@ -7,6 +7,43 @@
/*! \class UpdateSession /*! \class UpdateSession
* \brief UpdateSession description (\b API) * \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. # with spaces.
INPUT = Generalities.dox \ INPUT = Generalities.dox \
../../src/hurricane/hurricane/DebugSession.h \
DebugSession.dox \
JsonSupport.dox \ JsonSupport.dox \
Initializer.dox \ Initializer.dox \
../../src/hurricane/hurricane/Initializer.h \ ../../src/hurricane/hurricane/Initializer.h \

View File

@ -352,7 +352,7 @@ namespace Hurricane {
{ {
if (flags & JsonWriter::RegisterMode) return; if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonBasicLayer::JsonBasicLayer()" << endl; cdebug.log(19) << "JsonBasicLayer::JsonBasicLayer()" << endl;
add( "_material" , typeid(string) ); add( "_material" , typeid(string) );
add( "_extractNumber", typeid(string) ); add( "_extractNumber", typeid(string) );
@ -375,7 +375,7 @@ namespace Hurricane {
void JsonBasicLayer::toData(JsonStack& stack) void JsonBasicLayer::toData(JsonStack& stack)
{ {
ltracein(51); cdebug.tabw(19,1);
check( stack, "JsonBasicLayer::toData" ); check( stack, "JsonBasicLayer::toData" );
@ -449,7 +449,7 @@ namespace Hurricane {
update( stack, basicLayer ); 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) ) if ( (xMin <= xMax) and (yMin <= yMax) )
box.merge( xMin, yMin, xMax, yMax ); box.merge( xMin, yMin, xMax, yMax );
ltrace(51) << "Box(" << xMin << ", " cdebug.log(19) << "Box(" << xMin << ", "
<< yMin << ", " << yMin << ", "
<< xMax << ", " << xMax << ", "
<< yMax << ")" << endl; << yMax << ")" << endl;
update( stack, box ); update( stack, box );
} }

View File

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

View File

@ -22,80 +22,11 @@
#include "hurricane/Commons.h" #include "hurricane/Commons.h"
tstream cdebug ( std::cerr );
namespace Hurricane { 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 ()". // Function : "demangle ()".

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -428,9 +428,8 @@ void Instance::setPlacementStatus(const PlacementStatus& placementStatus)
void Instance::setMasterCell(Cell* masterCell, bool secureFlag) void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
// ************************************************************ // ************************************************************
{ {
ltrace(10) << "Instance::setMasterCell() on " << this << endl; cdebug.log(18,1) << "Instance::setMasterCell() on " << this << endl;
ltracein(10); cdebug.log(18) << "NEW masterCell:" << masterCell << endl;
ltrace(10) << "NEW masterCell:" << masterCell << endl;
if (masterCell != _masterCell) { if (masterCell != _masterCell) {
UpdateSession::open(); UpdateSession::open();
@ -476,14 +475,14 @@ void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
masterNetList.pop_front(); masterNetList.pop_front();
} }
ltrace(10) << "Remove " << this << " from " << _masterCell << endl; cdebug.log(18) << "Remove " << this << " from " << _masterCell << endl;
_masterCell->_getSlaveInstanceSet()._remove(this); _masterCell->_getSlaveInstanceSet()._remove(this);
_masterCell = masterCell; _masterCell = masterCell;
ltrace(10) << "Add (before) " << this << " to " << _masterCell << endl; cdebug.log(18) << "Add (before) " << this << " to " << _masterCell << endl;
_masterCell->isUnique(); _masterCell->isUnique();
_masterCell->_getSlaveInstanceSet()._insert(this); _masterCell->_getSlaveInstanceSet()._insert(this);
ltrace(10) << "Add (after) " << this << " to " << _masterCell << endl; cdebug.log(18) << "Add (after) " << this << " to " << _masterCell << endl;
_masterCell->isUnique(); _masterCell->isUnique();
for_each_net(externalNet, _masterCell->getExternalNets()) { for_each_net(externalNet, _masterCell->getExternalNets()) {
@ -494,7 +493,7 @@ void Instance::setMasterCell(Cell* masterCell, bool secureFlag)
UpdateSession::close(); UpdateSession::close();
} }
ltraceout(10); cdebug.tabw(19,-1);
} }
void Instance::uniquify() 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(); _key.clear();
return true; return true;
} }
@ -230,14 +230,14 @@ namespace Hurricane {
_key = key; _key = key;
if (_state & TypenameKey) return true; 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 (objects().back()) {
if ( doCallToData() and not _key.empty() and (_key[0] != '_') ) { if ( doCallToData() and not _key.empty() and (_key[0] != '_') ) {
// The key is no longer a simple attribute of the object. // The key is no longer a simple attribute of the object.
// Triggers it's creation in the Json stack. // 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()->getTypeName() << "::toData(JsonStack&)." << endl;
objects().back()->toData( stack() ); objects().back()->toData( stack() );
} }
} }
@ -248,30 +248,28 @@ namespace Hurricane {
bool HurricaneHandler::StartObject () bool HurricaneHandler::StartObject ()
{ {
ltrace(50) << "Hurricane::StartObject()" << endl; cdebug.log(19,1) << "Hurricane::StartObject()" << endl;
ltracein(50);
_state |= TypenameKey; _state |= TypenameKey;
_objectName = _key; _objectName = _key;
objects().push_back( new JsonDummy() ); objects().push_back( new JsonDummy() );
_key.clear(); _key.clear();
ltrace(51) << "objects().push_back(NULL), size():" << objects().size() << "." << endl; cdebug.log(19) << "objects().push_back(NULL), size():" << objects().size() << "." << endl;
cdebug.tabw(19,1);
ltracein(50);
return true; return true;
} }
bool HurricaneHandler::EndObject ( SizeType ) bool HurricaneHandler::EndObject ( SizeType )
{ {
ltraceout(50,2); cdebug.tabw(19,-2);
ltrace(50) << "HurricaneHandler::EndObject()" << endl; cdebug.log(19) << "HurricaneHandler::EndObject()" << endl;
ltracein(50); cdebug.tabw(19,1);
_objectName.clear(); _objectName.clear();
if (not isDummy()) { if (not isDummy()) {
if (doCallToData()) { 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() ); objects().back()->toData( stack() );
} }
if (stack().size() > 1) { 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)) if (objects().back()->issetFlags(JsonWriter::DBoObject))
stack().pop_back_dbo(); stack().pop_back_dbo();
delete objects().back(); delete objects().back();
objects().pop_back(); objects().pop_back();
ltraceout(50); cdebug.tabw(19,-1);
return true; return true;
} }
bool HurricaneHandler::StartArray() bool HurricaneHandler::StartArray()
{ {
ltrace(50) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl; cdebug.log(19,1) << "HurricaneHandler::StartArray() key:\"" << _key << "\"." << endl;
ltracein(50);
_objectName.clear(); _objectName.clear();
if (_key[0] != '+') { if (_key[0] != '+') {
@ -309,8 +306,8 @@ namespace Hurricane {
bool HurricaneHandler::EndArray ( SizeType ) bool HurricaneHandler::EndArray ( SizeType )
{ {
ltraceout(50); cdebug.tabw(19,-1);
ltrace(50) << "HurricaneHandler::EndArray()" << endl; cdebug.log(19) << "HurricaneHandler::EndArray()" << endl;
return true; return true;
} }
@ -350,11 +347,11 @@ namespace Hurricane {
{ {
close(); close();
//DebugSession::open( 50 ); //DebugSession::open( 19, 20 );
fileName += ".json.bz2"; fileName += ".json.bz2";
_file = fopen( fileName.c_str(), "r" ); _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) { if (not _file) {
throw Error( "JsonReader::parse(): Cannot open file \"%s\"." 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; if (flags & JsonWriter::RegisterMode) return;
ltrace(51) << "JsonNet::JsonNet()" << endl; cdebug.log(19) << "JsonNet::JsonNet()" << endl;
add( "_name" , typeid(string) ); add( "_name" , typeid(string) );
add( "_isGlobal" , typeid(bool) ); add( "_isGlobal" , typeid(bool) );
@ -1125,7 +1125,7 @@ string Net_SlavePlugs::Locator::_getString() const
add( "+componentSet" , typeid(JsonArray) ); add( "+componentSet" , typeid(JsonArray) );
add( "+externalComponents", typeid(JsonArray) ); add( "+externalComponents", typeid(JsonArray) );
ltrace(51) << "Disabling auto-materialization (" << _autoMaterialize << ")." << endl; cdebug.log(19) << "Disabling auto-materialization (" << _autoMaterialize << ")." << endl;
Go::disableAutoMaterialization(); Go::disableAutoMaterialization();
} }
@ -1140,7 +1140,7 @@ string Net_SlavePlugs::Locator::_getString() const
if (_autoMaterialize) { if (_autoMaterialize) {
Go::enableAutoMaterialization(); 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 ) void JsonNet::toData ( JsonStack& stack )
{ {
ltracein(51); cdebug.tabw(19,1);
check( stack, "JsonNet::toData" ); check( stack, "JsonNet::toData" );
presetId( stack ); presetId( stack );
@ -1169,7 +1169,7 @@ string Net_SlavePlugs::Locator::_getString() const
update( stack, _net ); update( stack, _net );
ltraceout(51); cdebug.tabw(19,-1);
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -179,22 +179,21 @@ void Rubber::_destroy()
void Rubber::_preDestroy() void Rubber::_preDestroy()
// ********************** // **********************
{ {
// trace << "entering Rubber::_preDestroy: " << this << endl; cdebug.log(18,1) << "entering Rubber::_preDestroy: " << this << endl;
// trace_in();
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()) { for_each_hook(hook, getHooks()) {
hook->getComponent()->_setRubber(NULL); hook->getComponent()->_setRubber(NULL);
end_for; end_for;
} }
_net->_getRubberSet()._remove(this); _net->_getRubberSet()._remove(this);
// trace << "exiting Rubber::_preDestroy:" << endl; cdebug.log(18) << "exiting Rubber::_preDestroy:" << endl;
// trace_out(); cdebug.tabw(18,-1);
} }
string Rubber::_getString() const string Rubber::_getString() const

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,3 @@
// -*- C++ -*- // -*- C++ -*-
// //
// Copyright (c) BULL S.A. 2000-2016, All Rights Reserved // Copyright (c) BULL S.A. 2000-2016, All Rights Reserved
@ -19,10 +18,6 @@
// License along with Hurricane. If not, see // License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// //
// ===================================================================
//
// $Id$
//
// +-----------------------------------------------------------------+ // +-----------------------------------------------------------------+
// | H U R R I C A N E | // | 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 | // | 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; 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 | // | shared_ptr<> support for DBo |
// +-------------------------------------------------------------+ // +-------------------------------------------------------------+
@ -121,6 +94,13 @@ namespace Hurricane {
string demangle ( const char* symbol ); string demangle ( const char* symbol );
inline string demangle ( const type_info& info ) { return demangle(info.name()); } 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 #if DEPRECATED
// For a complete explanation of this function, please look at : // 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) 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 // x-----------------------------------------------------------------x
// | Classes Neededs in All Hurricane Modules | // | 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/Slot.h"
#include "hurricane/Initializer.h" #include "hurricane/Initializer.h"
#include "hurricane/Tabulation.h"
#include "hurricane/JsonWriter.h" #include "hurricane/JsonWriter.h"
#include "hurricane/JsonObject.h" #include "hurricane/JsonObject.h"

View File

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

View File

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

View File

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

View File

@ -55,6 +55,11 @@ namespace Hurricane {
inline BaseFlags operator bitand ( BaseFlags ) const; inline BaseFlags operator bitand ( BaseFlags ) const;
inline BaseFlags operator bitor ( BaseFlags ) const; inline BaseFlags operator bitor ( BaseFlags ) const;
inline BaseFlags operator xor ( 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 bitand ( unsigned int ) const;
inline BaseFlags operator bitor ( unsigned int ) const; inline BaseFlags operator bitor ( unsigned int ) const;
inline BaseFlags operator xor ( 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 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 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 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. // Hurricane Managment.
virtual std::string _getTypeName () const; virtual std::string _getTypeName () const;
virtual std::string _getString () const; virtual std::string _getString () const;
@ -88,12 +100,18 @@ namespace Hurricane {
inline bool BaseFlags::zero () const { return _flags == 0; } inline bool BaseFlags::zero () const { return _flags == 0; }
inline BaseFlags& BaseFlags::reset ( BaseFlags flags ) { _flags &= ~flags._flags; return *this; } 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::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 bool BaseFlags::intersect ( BaseFlags flags ) const { return _flags & flags._flags; }
inline BaseFlags BaseFlags::operator compl () const { return ~_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 bitand ( BaseFlags flags ) const { return _flags & flags._flags; }
inline BaseFlags BaseFlags::operator bitor ( 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 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 bitand ( unsigned int flags ) const { return _flags & flags; }
inline BaseFlags BaseFlags::operator bitor ( 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; } 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 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 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 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 ) 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 ) template<typename T> inline void JsonStack::push_back ( const std::string& key, T t )
{ {
ltrace(51) << "JsonStack::push_back(T) key:" << key << " value:" << t cdebug.log(19) << "JsonStack::push_back(T) key:" << key << " value:" << t
<< " (" << demangle(typeid(T)) << ")." << endl; << " (" << demangle(typeid(T)) << ")." << endl;
_stack.push_back(std::make_pair(key,boost::any(t))); _stack.push_back(std::make_pair(key,boost::any(t)));
} }
@ -297,8 +297,8 @@ namespace Hurricane {
<< (count+1) << " elements remains to pop." << std::endl; << (count+1) << " elements remains to pop." << std::endl;
break; break;
} }
ltrace(51) << "| _stack.pop_back() \"" << _stack.back().first cdebug.log(19) << "| _stack.pop_back() \"" << _stack.back().first
<< "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl; << "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl;
_stack.pop_back(); _stack.pop_back();
} }
} }
@ -316,17 +316,17 @@ namespace Hurricane {
int i = _stack.size()-1; int i = _stack.size()-1;
do { do {
if (_stack[i].first == key) { 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 << ") " << (i-(int)_stack.size()) << " (i:" << i << ") "
<< "(" << demangle(_stack[i].second.type().name()) << ")." << "(" << demangle(_stack[i].second.type().name()) << ")."
<< endl; << endl;
return i-(int)_stack.size(); return i-(int)_stack.size();
} }
if (i == 0) break; if (i == 0) break;
--i; --i;
} while ( true ); } 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; return 0;
} }
@ -336,8 +336,8 @@ namespace Hurricane {
int i = _stack.size()-1; int i = _stack.size()-1;
do { do {
if (_stack[i].first == key) { if (_stack[i].first == key) {
ltrace(51) << "JsonStack::as<T>() k:" << key cdebug.log(19) << "JsonStack::as<T>() k:" << key
<< " value:" << demangle(_stack[i].second.type().name()) << std::endl; << " value:" << demangle(_stack[i].second.type().name()) << std::endl;
return boost::any_cast<T>( _stack[i].second ); return boost::any_cast<T>( _stack[i].second );
} }
if (i == 0) break; if (i == 0) break;
@ -405,7 +405,7 @@ namespace Hurricane {
template<typename T> template<typename T>
inline void JsonObject::update ( JsonStack& stack, T hobject ) 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.pop_back( _attributes.size() );
stack.push_back<T>( getStackName(), hobject ); stack.push_back<T>( getStackName(), hobject );
setObject<T>( hobject ); setObject<T>( hobject );

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -209,7 +209,7 @@ using namespace Hurricane;
for ( unsigned i=0 ; i < _types.size() ; i++ ) { for ( unsigned i=0 ; i < _types.size() ; i++ ) {
if ( ! strcmp ( _types[i]->_id, id ) ) { if ( ! strcmp ( _types[i]->_id, id ) ) {
//throw Error ( objectTypeRedefinition ); // 04.09.2009 d2 modification so Pharos can run several scripts during one execution //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; return;
} }
} }
@ -496,8 +496,8 @@ extern "C" {
HTRY HTRY
PyObject* state = NULL; PyObject* state = NULL;
if (PyArg_ParseTuple(args , "O:Hurricane.trace()", &state)) { if (PyArg_ParseTuple(args , "O:Hurricane.trace()", &state)) {
if (PyObject_IsTrue(state)) trace_on (); if (PyObject_IsTrue(state)) { } /*trace_on ();*/
else trace_off(); else { } /*trace_off();*/
} else { } else {
PyErr_SetString ( ConstructorError, "Bad parameters given to BasicLayer.create()." ); PyErr_SetString ( ConstructorError, "Bad parameters given to BasicLayer.create()." );
return NULL; return NULL;
@ -526,7 +526,7 @@ extern "C" {
DL_EXPORT(void) initHurricane () { DL_EXPORT(void) initHurricane () {
//trace_on(); //trace_on();
trace << "initHurricane()" << endl; cdebug.log(20) << "initHurricane()" << endl;
PyDebugSession_LinkPyType (); PyDebugSession_LinkPyType ();
PyUpdateSession_LinkPyType (); PyUpdateSession_LinkPyType ();
@ -836,7 +836,7 @@ extern "C" {
PyInstance_postModuleInit(); PyInstance_postModuleInit();
PyQuery_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 ) { static PyObject* PyHyperNet_create ( PyObject*, PyObject *args ) {
trace << "PyHyperNet_create()" << endl; cdebug.log(20) << "PyHyperNet_create()" << endl;
HyperNet* hyperNet = NULL; HyperNet* hyperNet = NULL;
PyObject* arg0; PyObject* arg0;
@ -69,7 +69,7 @@ extern "C" {
static PyObject* PyHyperNet_getNetOccurrences(PyHyperNet *self) static PyObject* PyHyperNet_getNetOccurrences(PyHyperNet *self)
{ {
trace << "PyHyperNet_getNetOccurrences()" << endl; cdebug.log(20) << "PyHyperNet_getNetOccurrences()" << endl;
METHOD_HEAD ( "HyperNet.getNetOccurrences()" ) METHOD_HEAD ( "HyperNet.getNetOccurrences()" )
@ -92,7 +92,7 @@ extern "C" {
static PyObject* PyHyperNet_getLeafPlugOccurrences(PyHyperNet *self) static PyObject* PyHyperNet_getLeafPlugOccurrences(PyHyperNet *self)
{ {
trace << "PyHyperNet_getLeafPlugOccurrences()" << endl; cdebug.log(20) << "PyHyperNet_getLeafPlugOccurrences()" << endl;
METHOD_HEAD ( "HyperNet.getLeafPlugOccurrences()" ) METHOD_HEAD ( "HyperNet.getLeafPlugOccurrences()" )
@ -115,7 +115,7 @@ extern "C" {
static PyObject* PyHyperNet_getCell ( PyHyperNet *self ) static PyObject* PyHyperNet_getCell ( PyHyperNet *self )
{ {
trace << "PyHyperNet_getCell ()" << endl; cdebug.log(20) << "PyHyperNet_getCell ()" << endl;
Cell* cell = NULL; Cell* cell = NULL;

View File

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

View File

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

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