PK +Aoa,mimetypeapplication/epub+zipPK+AiTunesMetadata.plist: artistName Oracle Corporation book-info cover-image-hash 864675251 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 955971281 publisher-unique-id E10825-01 unique-id 238930096 genre Oracle Documentation itemName Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2) releaseDate 2009-08-01T13:29:44Z year 2009 PK7W?:PK+AMETA-INF/container.xml PKYuPK+AOEBPS/pc_20exi.htm3z̅ User Exits

20 User Exits

This chapter focuses on writing user exits for your Oracle Tools applications. You learn how C subroutines can do certain jobs more quickly and easily than SQL*Forms and Oracle Forms. This chapter contains the following topics:

This chapter is supplemental. For more information about user exits, refer to the SQL*Forms Designer's Reference, the Oracle Forms Reference Manual, Vol. 2, and your system-specific Oracle documentation.

What Is a User Exit?

A user exit is a C subroutine written by you and called by Oracle Forms to do special-purpose processing. You can embed SQL statements and PL/SQL blocks in your user exit, then precompile it as you would a host program.

When called by an Oracle Forms V3 trigger, the user exit runs, then returns a status code to Oracle Forms. Your exit can display messages on the Oracle Forms status line, get and set field values, do high-speed computations and table lookups, and manipulate Oracle data.

Why Write a User Exit?

SQL*Forms provides the ability to use PL/SQL blocks in triggers. So, in most cases, instead of calling a user exit, you can use the procedural power of PL/SQL. If the need arises, you can call user exits from a PL/SQL block with the USER_EXIT function. User exits are harder to write and implement than SQL, PL/SQL, or SQL*Forms commands. So, you will probably use them only to do processing that is beyond the scope of SQL, PL/SQL, and SQL*Forms. Some common uses follow:

Developing a User Exit

This section outlines the way to develop a SQL*Forms user exit; later sections go into more detail.


See Also:

"EXEC TOOLS Statements" for more information about the EXEC TOOLS options available with Oracle Forms, V4.

To incorporate a user exit into a form, you take the following steps:

Writing a User Exit

You can use the following kinds of statements to write your SQL*Forms user exit:

This section focuses on the EXEC TOOLS statements, which let you pass values between SQL*Forms and a user exit.

Requirements for Variables

The variables used in EXEC TOOLS statements must correspond to field names used in the form definition.

EXEC TOOLS Statements

EXEC TOOLS statements support the basic Oracle Toolset by providing a generic way to handle get, set, and exception callbacks from user exits. The following discussion focuses on Oracle Forms but the same concepts apply to Oracle Report.

Writing a Toolset User Exit

Besides EXEC SQL, EXEC ORACLE, and host language statements, you can use the following EXEC TOOLS statements to write an Oracle Forms user exit:

  • SET

  • GET

  • SET CONTEXT

  • GET CONTEXT

  • MESSAGE

The EXEC TOOLS GET and SET statements replace the EXEC IAF GET and PUT statements used with earlier versions of Oracle Forms. Unlike IAF GET and PUT, however, TOOLS GET and SET accept indicator variables. The EXEC TOOLS MESSAGE statement replaces the message-handling function sqliem. Now, let us take a brief look at all the EXEC TOOLS statements. For more information, see the Oracle Forms Reference Manual, Vol 2.

EXEC TOOLS SET

The EXEC TOOLS SET statement passes values from a user exit to Oracle Forms. Specifically, it assigns the values of host variables and constants to Oracle Forms variables and items. Values passed to form items display after the user exit returns control to the form. To code the EXEC TOOLS SET statement, you use the syntax

EXEC TOOLS SET form_variable[, ...] 
     VALUES ({:host_variable :indicator | constant}[, ...]); 

where form_variable is an Oracle Forms field, block.field, system variable, or global variable, or a host variable (prefixed with a colon) containing the value of one of the foregoing items. In the following example, a user exit passes an employee name to Oracle Forms:

char ename[20];
short ename_ind;

...

    strcpy(ename, "MILLER");
    ename_ind = 0;
    EXEC TOOLS SET emp.ename VALUES (:ename :ename_ind);

In this example, emp.ename is an Oracle Forms block.field.

EXEC TOOLS GET

The EXEC TOOLS GET statement passes values from Oracle Forms to a user exit. Specifically, it assigns the values of Oracle Forms variables and items to host variables. As soon as the values are passed, the user exit can use them for any purpose. To code the EXEC TOOLS GET statement, you use the syntax

EXEC TOOLS GET form_variable[, ...] 
    INTO :host_variable:indicator[, ...]; 

where form_variable is an Oracle Forms field, block.field, system variable, or global variable, or a host variable (prefixed with a colon) containing the value of one of the foregoing items. In the following example, Oracle Forms passes an item name from a block to your user exit:

...
char     name_buff[20];
VARCHAR  name_fld[20];
 
strcpy(name_fld.arr, "EMP.NAME");
name_fld.len = strlen(name_fld.arr);
EXEC TOOLS GET :name_fld INTO :name_buff;

EXEC TOOLS SET CONTEXT

The EXEC TOOLS SET CONTEXT statement saves context information from a user exit for later use in another user exit. A pointer variable points to a block of memory in which the context information is stored. With SET CONTEXT, you need not declare a global variable to hold the information. To code the EXEC TOOLS SET CONTEXT statement, you use the syntax

EXEC TOOLS SET CONTEXT :host_pointer_variable 
    IDENTIFIED BY context_name; 

where context_name is an undeclared identifier or a character host variable (prefixed with a colon) that names the context area.

... 
char  *context_ptr; 
char  context[20]; 
 
strcpy(context, "context1") 
EXEC TOOLS SET CONTEXT :context IDENTIFIED BY application1; 

EXEC TOOLS GET CONTEXT

The EXEC TOOLS GET CONTEXT statement retrieves context information (saved earlier by SET CONTEXT) into a user exit. A host-language pointer variable points to a block of memory in which the context information is stored. To code the EXEC TOOLS GET CONTEXT statement, you use the syntax

EXEC TOOLS GET CONTEXT context_name 
    INTO :host_pointer_variable; 

where context_name is an undeclared identifier or a character host variable (prefixed with a colon) that names the context area. In the following example, your user exit retrieves context information 1saved earlier:

... 
char  *context_ptr; 
 
EXEC TOOLS GET CONTEXT application1 INTO :context_ptr;  

EXEC TOOLS MESSAGE

The EXEC TOOLS MESSAGE statement passes a message from a user exit to Oracle Forms. The message is displayed on the Oracle Forms message line after the user exit returns control to the form. To code the EXEC TOOLS MESSAGE statement, you use the syntax

EXEC TOOLS MESSAGE message_text [severity_code]; 

where message_text is a quoted string or a character host variable (prefixed with a colon), and the optional severity_code is an integer constant or an integer host variable (prefixed with a colon). The MESSAGE statement does not accept indicator variables. In the following example, your user exit passes an error message to Oracle Forms:

EXEC TOOLS MESSAGE 'Bad field name! Please reenter.'; 

Calling a User Exit

You call a user exit from a SQL*Forms trigger using a packaged procedure named USER_EXIT (supplied with SQL*Forms). The syntax you use is

USER_EXIT(user_exit_string [, error_string]);  

where user_exit_string contains the name of the user exit plus optional parameters and error_string contains an error message issued by SQL*Forms if the user exit fails. For example, the following trigger command calls a user exit named LOOKUP:

USER_EXIT('LOOKUP'); 

Notice that the user exit string is enclosed by single (not double) quotes.

Passing Parameters to a User Exit

When you call a user exit, SQL*Forms passes it the following parameters automatically:

ParametersDescription
Command LineIs the user exit string.
Command Line LengthIs the length (in characters) of the user exit string.
Error MessageIs the error string (failure message) if one is defined.
Error Message LengthIs the length of the error string.
In-QueryIs a Boolean value indicating whether the exit was called in normal or query mode.

However, the user exit string provides the ability to pass additional parameters to the user exit. For example, the following trigger command passes two parameters and an error message to the user exit LOOKUP:

Notice that the user exit string is enclosed by single (not double) quotes.

USER_EXIT('LOOKUP 2025 A', 'Lookup failed');
 

You can use this feature to pass field names to the user exit, as the following example shows:

USER_EXIT('CONCAT firstname, lastname, address');
 

However, it is up to the user exit, not SQL*Forms, to parse the user exit string.

Returning Values to a Form

When a user exit returns control to SQL*Forms, it must also return a code indicating whether it succeeded, failed, or suffered a fatal error. The return code is an integer constant defined by SQL*Forms (see the next section). The three results have the following meanings:

ResultsMeaning
successThe user exit encountered no errors. SQL*Forms proceeds to the success label or the next step, unless the Reverse Return Code switch is set by the calling trigger step.
failureThe user exit detected an error, such as an invalid value in a field. An optional message passed by the exit appears on the message line at the bottom of the SQL*Forms screen and on the Display Error screen. SQL*Forms responds as it does to a SQL statement that affects no rows.
fatal errorThe user exit detected a condition that makes further processing impossible, such as an execution error in a SQL statement. An optional error message passed by the exit appears on the SQL*Forms Display Error screen. SQL*Forms responds as it does to a fatal SQL error. If a user exit changes the value of a field, then returns a failure or fatal error code, SQL*Forms does not discard the change. Nor does SQL*Forms discard changes when the Reverse Return Code switch is set and a success code is returned.

The IAP Constants

SQL*Forms defines three symbolic constants for use as return codes. Depending on the host language, they are prefixed with IAP or SQL. For example, they might be IAPSUCC, IAPFAIL, and IAPFTL.

Using WHENEVER

You can use the WHENEVER statement in an exit to detect invalid datatype conversions (SQLERROR), truncated values PUT into form fields (SQLWARNING), and queries that return no rows (NOT FOUND).

An Example

The following example shows how a user exit that uses the EXEC TOOLS GET and PUT routines, as well as the EXEC TOOLS MESSAGE function, is coded.

int
myexit()
{
    char field1[20], field2[20], value1[20], value2[20];
    char result_value[20];
    char errmsg[80];
    int errlen;

    #include sqlca.h
    EXEC SQL WHENEVER SQLERROR GOTO sql_error;
    /* get field values into form */
    EXEC TOOLS GET :field1, :field2 INTO :value1, :value2;
    /* manipulate the values to obtain result_val */
    ...
    /* put result_val into form field result */
    EXEC TOOLS PUT result VALUES (:result_val);
    return IAPSUCC;   /* trigger step succeeded */

sql_error:
    strcpy(errmsg, CONCAT("MYEXIT", sqlca.sqlerrm.sqlerrmc);
    errlen = strlen(errmsg);
    EXEC TOOLS MESSAGE :errmsg ; /* send error msg to Forms */
    return IAPFAIL;

Precompiling and Compiling a User Exit

User exits are precompiled like standalone host programs. For instructions on compiling a user exit, see the Oracle installation or user's guide for your system.

Example Program: A User Exit

The following example shows a user exit.

/**************************************************************
Sample Program 5:  SQL*Forms User Exit

This user exit concatenates form fields.  To call the user 
exit from a SQL*Forms trigger, use the syntax

   user_exit('CONCAT field1, field2, ..., result_field');

where user_exit is a packaged procedure supplied with SQL*Forms
and CONCAT is the name of the user exit.  A sample form named
CONCAT invokes the user exit.
**************************************************************/

#define min(a, b) ((a < b) ? a : b)
#include <stdio.h>
#include <string.h>

/* Include the SQL Communications Area, a structure through which
 * Oracle makes runtime status information such as error
 * codes, warning flags, and diagnostic text available to the
 * program.
 */
#include <sqlca.h>

/* All host variables used in embedded SQL in this example
 * appear in the Declare Section.
 */
EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR   field[81];
    VARCHAR   value[81];
    VARCHAR   result[241];
EXEC SQL END DECLARE SECTION;


/* Define the user exit, called "concat". */
int concat(cmd, cmdlen, msg, msglen, query)
char *cmd;     /* command line in trigger step ("CONCAT...") */
int  *cmdlen;  /* length of command line */
char *msg;     /* trigger step failure message from form */
int  *msglen;  /* length of failure message */
int  *query;   /* TRUE if invoked by post-query trigger,
                  FALSE otherwise */
{
    char *cp = cmd + 7;    /* pointer to field list in
                              cmd string; 7 characters
                              are needed for "CONCAT " */
    char *fp = (char*)&field.arr[0];  /* pointer to a field name in
                                         cmd string */
    char  errmsg[81];      /* message returned to SQL*Forms
                              on error */
    int   errlen;          /* length of message returned
                              to SQL*Forms */

/* Branch to label sqlerror if an ORACLE error occurs. */
    EXEC SQL WHENEVER SQLERROR GOTO sqlerror;

    result.arr[0] = '\0';

/* Parse field names from cmd string. */
    for (; *cp != '\0'; cp++)
    {
       if (*cp != ',' && *cp != ' ')
           /* Copy a field name into field.arr from cmd. */
       {
           *fp = *cp;
           fp++;
       }
       else
           if (*cp == ' ')
           {   /* Have whole field name now. */
               *fp = '\0';
               field.len = strlen((char *) field.arr);
               /* Get field value from form. */
               EXEC TOOLS GET :field INTO :value;
               value.arr[value.len] = '\0';
               strcat((char *) result.arr, (char *) value.arr);
               fp = (char *)&field.arr[0];  /* Reset field pointer. */
           }
    }

/* Have last field name now. */
    *fp = '\0';
    field.len = strlen((char *) field.arr);
    result.len = strlen((char *) result.arr);

/* Put result into form. */
    EXEC TOOLS PUT :field VALUES (:result);

/* Trigger step succeeded. */
    return(IAPSUCC);

sqlerror:
    strcpy(errmsg, "CONCAT: ");
    strncat(errmsg, sqlca.sqlerrm.sqlerrmc, min(72,
        sqlca.sqlerrm.sqlerrml));
    errlen = strlen(errmsg);
/* Pass error message to SQL*Forms status line. */
     EXEC TOOLS MESSAGE :errmsg ;
    return(IAPFAIL);  /* Trigger step failed. */
}

Using the GENXTB Utility

The IAP program table IAPXTB in module IAPXIT contains an entry for each user exit linked into IAP. IAPXTB tells IAP the name, location, and host language of each user exit. When you add a new user exit to IAP, you must add a corresponding entry to IAPXTB. IAPXTB is derived from a database table, also named IAPXTB. You can modify the database table by running the GENXTB form on the operating system command line, as follows:

RUNFORM GENXTB username/password 

A form is displayed for you to enter the following information for each user exit you define:

After modifying the IAPXTB database table, use the GENXTB utility to read the table and create an Assembler or C source program that defines the module IAPXIT and the IAPXTB program table it contains. The source language used depends on your operating system. The syntax you use to run the GENXTB utility is

GENXTB username/password outfile 

where outfile is the name you give the Assembler or C source program that GENXTB creates.

Linking a User Exit into SQL*Forms

Before running a form that calls a user exit, you must link the user exit into IAP, the SQL*Forms component that runs a form. The user exit can be linked into your standard version of IAP or into a special version for those forms that call the exit.

To produce a new executable copy of IAP, link your user exit object module, the standard IAP modules, the IAPXIT module, and any modules needed from the Oracle and C link libraries.

The details of linking are system-dependent. Check the Oracle installation or user's guide for your system.

Guidelines

The guidelines in this section will help you avoid some common problems.

Naming the Exit

The name of your user exit cannot be an Oracle reserved word. Also avoid using names that conflict with the names of SQL*Forms commands, function codes, and externally defined names used by SQL*Forms. The name of the user exit entry point in the source code becomes the name of the user exit itself. The exit name must be a valid C function name, and a valid filename for your operating system.

SQL*Forms converts the name of a user exit to upper case before searching for the exit. Therefore, the exit name must be in upper case in your source code.

Connecting to Oracle

User exits communicate with Oracle using the connection made by SQL*Forms. However, a user exit can establish additional connections to any database by using SQL*Net.

Issuing I/O Calls

File I/O is supported but screen I/O is not.

Using Host Variables

Restrictions on the use of host variables in a standalone program also apply to user exits. Host variables must be prefixed with a colon in EXEC SQL and EXEC TOOLS statements. The use of host arrays is not allowed in EXEC TOOLS statements.

Updating Tables

Generally, a user exit should not UPDATE database tables associated with a form. For example, suppose an operator updates a record in the SQL*Forms work space, then a user exit UPDATEs the corresponding row in the associated database table. When the transaction is COMMITted, the record in the SQL*Forms work space is applied to the table, overwriting the user exit UPDATE.

Issuing Commands

Avoid issuing a COMMIT or ROLLBACK command from your user exit because Oracle will commit or roll back work begun by the SQL*Forms operator, not just work done by the user exit. Instead, issue the COMMIT or ROLLBACK from the SQL*Forms trigger. This also applies to data definition commands (such as ALTER, CREATE, and GRANT) because they issue an implicit COMMIT before and after executing.

PKh8z3zPK+AOEBPS/pc_15ody.htm Oracle Dynamic SQL: Method 4

15 Oracle Dynamic SQL: Method 4

This chapter shows you how to implement Oracle dynamic SQL Method 4, which lets your program accept or build dynamic SQL statements that contain a varying number of host variables. Use this to support existing applications. Use ANSI Dynamic SQL Method 4 for all new applications.

Oracle Dynamic SQL Method 4 does not support object types, cursor variables, arrays of structs, DML returning clauses, Unicode variables, and LOBs. Use ANSI Dynamic SQL Method 4 instead. This chapter contains the following topics:

Meeting the Special Requirements of Method 4

Before looking into the requirements of Method 4, you should feel comfortable with the terms select-list item and placeholder. Select-list items are the columns or expressions following the keyword SELECT in a query. For example, the following dynamic query contains three select-list items:

SELECT ename, job, sal + comm FROM emp WHERE deptno = 20
 

Placeholders are dummy bind variables that hold places in a SQL statement for actual bind variables. You do not declare placeholders, and can name them anything you like.

Placeholders for bind variables are most often used in the SET, VALUES, and WHERE clauses. For example, the following dynamic SQL statements each contain two placeholders:

INSERT INTO emp (empno, deptno) VALUES (:e, :d) 
DELETE FROM dept WHERE deptno = :num OR loc = :loc 

What Makes Method 4 Special?

Unlike Methods 1, 2, and 3, dynamic SQL Method 4 lets your program

  • Accept or build dynamic SQL statements that contain an unknown number of select-list items or placeholders, and

  • Take explicit control over datatype conversion between Oracle and C types

To add this flexibility to your program, you must give the Oracle runtime library additional information.

What Information Does Oracle Need?

The Pro*C/C++ Precompiler generates calls to Oracle for all executable dynamic SQL statements. If a dynamic SQL statement contains no select-list items or placeholders, Oracle needs no additional information to execute the statement. The following DELETE statement falls into this category:

DELETE FROM emp WHERE deptno = 30 

However, most dynamic SQL statements contain select-list items or placeholders for bind variables, as does the following

UPDATE statement:

UPDATE emp SET comm = :c WHERE empno = :e
 

To execute a dynamic SQL statement that contains placeholders for bind variables or select-list items, Oracle needs information about the program variables that hold the input (bind) values, and that will hold the FETCHed values when a query is executed. The information needed by Oracle is:

  • The number of bind variables and select-list items

  • The length of each bind variable and select-list item

  • The datatype of each bind variable and select-list item

  • The address of each bind variable, and of the output variable that will receive each select-list item

Where Is the Information Stored?

All the information Oracle needs about select-list items or placeholders for bind variables, except their values, is stored in a program data structure called the SQL Descriptor Area (SQLDA). The SQLDA struct is defined in the sqlda.h header file.

Descriptions of select-list items are stored in a select descriptor, and descriptions of placeholders for bind variables are stored in a bind descriptor.

The values of select-list items are stored in output variables; the values of bind variables are stored in input variables. You store the addresses of these variables in the select or bind SQLDA so that Oracle knows where to write output values and read input values.

How do values get stored in these data variables? Output values are FETCHed using a cursor, and input values are typically filled in by the program, usually from information entered interactively by the user.

How is the SQLDA Referenced?

The bind and select descriptors are usually referenced by pointer. A dynamic SQL program should declare a pointer to at least one bind descriptor, and a pointer to at least one select descriptor, in the following way:

#include <sqlda.h>
... 
SQLDA *bind_dp; 
SQLDA *select_dp; 

You can then use the SQLSQLDAAlloc() function to allocate the descriptor, as follows:

bind_dp = SQLSQLDAAlloc(runtime_context, size, name_length, ind_name_length); 

SQLSQLDAAlloc() was known as sqlaldt() before Oracle8.

The constant SQL_SINGLE_RCTX is defined as (dvoid*)0. Use it for runtime_context when your application is single-threaded.


See Also:


How is the Information Obtained?

You use the DESCRIBE statement to help obtain the information Oracle needs.

The DESCRIBE SELECT LIST statement examines each select-list item to determine its name and name length. It then stores this information in the select SQLDA for your use. For example, you might use select-list names as column headings in a printout. The total number of select-list items is also stored in the SQLDA by DESCRIBE.

The DESCRIBE BIND VARIABLES statement examines each placeholder to determine its name and length, then stores this information in an input buffer and bind SQLDA for your use. For example, you might use placeholder names to prompt the user for the values of bind variables.

Understanding the SQLDA

This section describes the SQLDA data structure in detail. You learn how to declare it, what variables it contains, how to initialize them, and how to use them in your program.

Purpose of the SQLDA

Method 4 is required for dynamic SQL statements that contain an unknown number of select-list items or placeholders for bind variables. To process this kind of dynamic SQL statement, your program must explicitly declare SQLDAs, also called descriptors. Each descriptor is a struct which you must copy or code into your program.

A select descriptor holds descriptions of select-list items, and the addresses of output buffers where the names and values of select-list items are stored.


Note:

The "name" of a select-list item can be a column name, a column alias, or the text of an expression such as sal + comm.

A bind descriptor holds descriptions of bind variables and indicator variables, and the addresses of input buffers where the names and values of bind variables and indicator variables are stored.

Multiple SQLDAs

If your program has more than one active dynamic SQL statement, each statement must have its own SQLDA(s). You can declare any number of SQLDAs with different names. For example, you might declare three select SQLDAs named sel_desc1, sel_desc2, and sel_desc3, so that you can FETCH from three concurrently OPEN cursors. However, non-concurrent cursors can reuse SQLDAs.

Declaring a SQLDA

To declare a SQLDA, include the sqlda.h header file. The contents of the SQLDA are:

struct SQLDA 
{ 
    long    N;          /* Descriptor size in number of entries */ 
    char  **V;        Ptr to Arr of addresses of main variables */ 
    long   *L;              /* Ptr to Arr of lengths of buffers */ 
    short  *T;                /* Ptr to Arr of types of buffers */ 
    short **I;      * Ptr to Arr of addresses of indicator vars */ 
    long    F;         /* Number of variables found by DESCRIBE */ 
    char  **S;          /* Ptr to Arr of variable name pointers */ 
    short  *M;       /* Ptr to Arr of max lengths of var. names */ 
    short  *C;    * Ptr to Arr of current lengths of var. names */ 
    char  **X;         /* Ptr to Arr of ind. var. name pointers */ 
    short  *Y;  /* Ptr to Arr of max lengths of ind. var. names */ 
    short  *Z;  /* Ptr to Arr of cur lengths of ind. var. names */ 
}; 

Allocating a SQLDA

After declaring a SQLDA, you allocate storage space for it with the SQLSQLDAAlloc() library function (known as sqlaldt() before Oracle8), using the syntax:

descriptor_name = SQLSQLDAAlloc (runtime_context, max_vars, max_name, max_ind_name); 

where:

SyntaxDescription
runtime_contextpointer to runtime context
max_varsIs the maximum number of select-list items or placeholders that the descriptor can describe.
max_nameIs the maximum length of select-list or placeholder names.
max_ind_nameIs the maximum length of indicator variable names, which are optionally appended to placeholder names. This parameter applies to bind descriptors only, so set it to zero when allocating a select descriptor.

Besides the descriptor, SQLSQLDAAlloc() allocates data buffers to which descriptor variables point.


See Also:


Figure 15-1 shows whether variables are set by SQLSQLDAAlloc() calls, DESCRIBE commands, FETCH commands, or program assignments.

Figure 15-1 How Variables Are Set

How Variables Are Set
Description of "Figure 15-1 How Variables Are Set"

Using the SQLDA Variables

This section explains the purpose and use of each variable in the SQLDA.

The N Variable

N specifies the maximum number of select-list items or placeholders that can be DESCRIBEd. Thus, N determines the number of elements in the descriptor arrays.

Before issuing the optional DESCRIBE command, you must set N to the dimension of the descriptor arrays using the SQLSQLDAAlloc() library function. After the DESCRIBE, you must reset N to the actual number of variables DESCRIBEd, which is stored in the F variable.

The V Variable

V is a pointer to an array of addresses of data buffers that store select-list or bind-variable values.

When you allocate the descriptor, SQLSQLDAAlloc() zeros the elements V[0] through V[N - 1] in the array of addresses.

For select descriptors, you must allocate data buffers and set this array before issuing the FETCH command. The statement

EXEC SQL FETCH ... USING DESCRIPTOR ... 

directs Oracle to store FETCHed select-list values in the data buffers to which V[0] through V[N - 1] point. Oracle stores the ith select-list value in the data buffer to which V[i] points.

For bind descriptors, you must set this array before issuing the OPEN command. The statement

EXEC SQL OPEN ... USING DESCRIPTOR ...
 

directs Oracle to execute the dynamic SQL statement using the bind-variable values to which V[0] through V[N - 1] point. Oracle finds the ith bind-variable value in the data buffer to which V[i] points.

The L Variable

L is a pointer to an array of lengths of select-list or bind-variable values stored in data buffers.

For select descriptors, DESCRIBE SELECT LIST sets the array of lengths to the maximum expected for each select-list item. However, you might want to reset some lengths before issuing a FETCH command. FETCH returns at most n characters, where n is the value of L[i] before the FETCH.

The format of the length differs among Oracle datatypes. For CHAR or VARCHAR2 select-list items, DESCRIBE SELECT LIST sets L[i] to the maximum length of the select-list item. For NUMBER select-list items, scale and precision are returned respectively in the low and next-higher bytes of the variable. You can use the library function SQLNumberPrecV6() to extract precision and scale values from L[i]. See also "Extracting Precision and Scale".

You must reset L[i] to the required length of the data buffer before the FETCH. For example, when coercing a NUMBER to a C char string, set L[i] to the precision of the number plus two for the sign and decimal point. When coercing a NUMBER to a C float, set L[i] to the length of floats on your system. For more information about the lengths of coerced datatypes, see also "Converting Data".

For bind descriptors, you must set the array of lengths before issuing the OPEN command. For example, you can use strlen() to get the lengths of bind-variable character strings entered by the user, then set the appropriate array elements.

Because Oracle accesses a data buffer indirectly, using the address stored in V[i], it does not know the length of the value in that buffer. If you want to change the length Oracle uses for the ith select-list or bind-variable value, reset L[i] to the length you need. Each input or output buffer can have a different length.

The T Variable

T is a pointer to an array of datatype codes of select-list or bind-variable values. These codes determine how Oracle data is converted when stored in the data buffers addressed by elements of the V array.


See Also:

"Converting Data"

For select descriptors, DESCRIBE SELECT LIST sets the array of datatype codes to the internal datatype (CHAR, NUMBER, or DATE, for example) of the items in the select list.

Before FETCHing, you might want to reset some datatypes because the internal format of Oracle datatypes can be difficult to handle. For display purposes, it is usually a good idea to coerce the datatype of select-list values to VARCHAR2 or STRING. For calculations, you might want to coerce numbers from Oracle to C format.

The high bit of T[i] is set to indicate the NULL/not NULL status of the ith select-list item. You must always clear this bit before issuing an OPEN or FETCH command. You use the library function SQLColumnNullCheck() to retrieve the datatype code and clear the NULL/not NULL bit.

You should change the Oracle NUMBER internal datatype to an external datatype compatible with that of the C data buffer to which V[i] points.

For bind descriptors, DESCRIBE BIND VARIABLES sets the array of datatype codes to zeros. You must set the datatype code stored in each element before issuing the OPEN command. The code represents the external (C) datatype of the data buffer to which V[i] points. Often, bind-variable values are stored in character strings, so the datatype array elements are set to 1 (the VARCHAR2 datatype code). You can also use datatype code 5 (STRING).

To change the datatype of the ith select-list or bind-variable value, reset T[i] to the datatype you want.

The I Variable

I is a pointer to an array of addresses of data buffers that store indicator-variable values.

You must set the elements I[0] through I[N - 1] in the array of addresses.

For select descriptors, you must set the array of addresses before issuing the FETCH command. When Oracle executes the statement

EXEC SQL FETCH ... USING DESCRIPTOR ... 

if the ith returned select-list value is NULL, the indicator-variable value to which I[i] points is set to -1. Otherwise, it is set to zero (the value is not NULL) or a positive integer (the value was truncated).

For bind descriptors, you must set the array of addresses and associated indicator variables before issuing the OPEN command. When Oracle executes the statement

EXEC SQL OPEN ... USING DESCRIPTOR ... 

the data buffer to which I[i] points determines whether the ith bind variable has a NULL value. If the value of an indicator variable is -1, the value of its associated bind variable is NULL.

The F Variable

F is the actual number of select-list items or placeholders found by DESCRIBE.

F is set by DESCRIBE. If F is less than zero, DESCRIBE has found too many select-list items or placeholders for the allocated size of the descriptor. For example, if you set N to 10 but DESCRIBE finds 11 select-list items or placeholders, F is set to -11. This feature lets you dynamically reallocate a larger storage area for select-list items or placeholders if necessary.

The S Variable

S is a pointer to an array of addresses of data buffers that store select-list or placeholder names as they appear in dynamic SQL statements.

You use SQLSQLDAAlloc() to allocate the data buffers and store their addresses in the S array.

DESCRIBE directs Oracle to store the name of the ith select-list item or placeholder in the data buffer to which S[i] points.

The M Variable

M is a pointer to an array of maximum lengths of data buffers that store select-list or placeholder names. The buffers are addressed by elements of the S array.

When you allocate the descriptor, SQLSQLDAAlloc() sets the elements M[0] through M[N - 1] in the array of maximum lengths. When stored in the data buffer to which S[i] points, the ith name is truncated to the length in M[i] if necessary.

The C Variable

C is a pointer to an array of current lengths of select-list or placeholder names.

DESCRIBE sets the elements C[0] through C[N - 1] in the array of current lengths. After a DESCRIBE, the array contains the number of characters in each select-list or placeholder name.

The X Variable

X is a pointer to an array of addresses of data buffers that store indicator-variable names. You can associate indicator-variable values with select-list items and bind variables. However, you can associate indicator-variable names only with bind variables. So, X applies only to bind descriptors.

Use SQLSQLDAAlloc() to allocate the data buffers and store their addresses in the X array.

DESCRIBE BIND VARIABLES directs Oracle to store the name of the ith indicator variable in the data buffer to which X[i] points.

The Y Variable

Y is a pointer to an array of maximum lengths of data buffers that store indicator-variable names. Like X, Y applies only to bind descriptors.

You use SQLSQLDAAlloc() to set the elements Y[0] through Y[N - 1] in the array of maximum lengths. When stored in the data buffer to which X[i] points, the ith name is truncated to the length in Y[i] if necessary.

The Z Variable

Z is a pointer to an array of current lengths of indicator-variable names. Like X and Y, Z applies only to bind descriptors.

DESCRIBE BIND VARIABLES sets the elements Z[0] through Z[N - 1] in the array of current lengths. After a DESCRIBE, the array contains the number of characters in each indicator-variable name.

Some Preliminaries

You need a working knowledge of the following subjects to implement dynamic SQL Method 4:

Converting Data

This section provides more detail about the T (datatype) descriptor array. In host programs that use neither datatype equivalencing nor dynamic SQL Method 4, the conversion between Oracle internal and external datatypes is determined at precompile time. By default, the precompiler assigns a specific external datatype to each host variable in the Declare Section. For example, the precompiler assigns the INTEGER external datatype to host variables of type int.

However, Method 4 lets you control data conversion and formatting. You specify conversions by setting datatype codes in the T descriptor array.

Internal Datatypes

Internal datatypes specify the formats used by Oracle to store column values in database tables, as well as the formats used to represent pseudocolumn values.

When you issue a DESCRIBE SELECT LIST command, Oracle returns the internal datatype code for each select-list item to the T descriptor array. For example, the datatype code for the ith select-list item is returned to T[i].

Table 15-1 shows the Oracle internal datatypes and their codes:

Table 15-1 Oracle Internal Datatypes

Oracle Internal DatatypeCode

VARCHAR2

1

NUMBER

2

LONG

8

BINARY_FLOAT

100

BINARY_DOUBLE

101

ROWID

11

DATE

12

RAW

23

LONG RAW

24

CHARACTER (or CHAR)

96

Universal ROWID

104


External Datatypes

External datatypes specify the formats used to store values in input and output host variables.

The DESCRIBE BIND VARIABLES command sets the T array of datatype codes to zeros. So, you must reset the codes before issuing the OPEN command. The codes tell Oracle which external datatypes to expect for the various bind variables. For the ith bind variable, reset T[i] to the external datatype you want.

Table 15-2 shows the Oracle external datatypes and their codes, as well as the C datatype normally used with each external datatype.

Table 15-2 Oracle External Datatypes and Datatype Codes

External DatatypeCodeC Datatype

VARCHAR2

1

char[n]

NUMBER

2

char[n] ( n <= 22)

INTEGER

3

int

FLOAT

4

float

STRING

5

char[n+1]

VARNUM

6

char[n] (n <= 22)

DECIMAL

7

float

LONG

8

char[n]

SQLT_BFLOAT

21

float

SQLT_BDOUBLE

22

double

VARCHAR

9

char[n+2]

ROWID

11

char[n]

DATE

12

char[n]

VARRAW

15

char[n]

RAW

23

unsigned char[n]

LONG RAW

24

unsigned char[n]

UNSIGNED

68

unsigned int

DISPLAY

91

char[n]

LONG VARCHAR

94

char[n+4]

LONG VARRAW

95

unsigned char[n+4]

CHAR

96

char[n]

CHARF

96

char[n]

CHARZ

97

char[n+1]


Coercing Datatypes

For a select descriptor, DESCRIBE SELECT LIST can return any of the Oracle internal datatypes. Often, as in the case of character data, the internal datatype corresponds exactly to the external datatype you want to use. However, a few internal datatypes map to external datatypes that can be difficult to handle. So, you might want to reset some elements in the T descriptor array. For example, you might want to reset NUMBER values to FLOAT values, which correspond to float values in C. Oracle does any necessary conversion between internal and external datatypes at FETCH time. So, be sure to reset the datatypes after the DESCRIBE SELECT LIST but before the FETCH.

For a bind descriptor, DESCRIBE BIND VARIABLES does not return the datatypes of bind variables, only their number and names. Therefore, you must explicitly set the T array of datatype codes to tell Oracle the external datatype of each bind variable. Oracle does any necessary conversion between external and internal datatypes at OPEN time.

When you reset datatype codes in the T descriptor array, you are "coercing datatypes." For example, to coerce the ith select-list value to STRING, you use the following statement:

/* Coerce select-list value to STRING. */ 
select_des->T[i] = 5; 

When coercing a NUMBER select-list value to STRING for display purposes, you must also extract the precision and scale bytes of the value and use them to compute a maximum display length. Then, before the FETCH, you must reset the appropriate element of the L (length) descriptor array to tell Oracle the buffer length to use.

For example, if DESCRIBE SELECT LIST finds that the ith select-list item is of type NUMBER, and you want to store the returned value in a C variable declared as float, simply set T[i] to 4 and L[i] to the length of floats on your system.


Caution:

In some cases, the internal datatypes that DESCRIBE SELECT LIST returns might not suit your purposes. Two examples of this are DATE and NUMBER. When you DESCRIBE a DATE select-list item, Oracle returns the datatype code 12 to the T descriptor array. Unless you reset the code before the FETCH, the date value is returned in its 7-byte internal format. To get the date in character format (DD-MON-YY), you can change the datatype code from 12 to 1 (VARCHAR2) or 5 (STRING), and increase the L value from 7 to 9 or 10.

Similarly, when you DESCRIBE a NUMBER select-list item, Oracle returns the datatype code 2 to the T array. Unless you reset the code before the FETCH, the numeric value is returned in its internal format, which is probably not what you want. So, change the code from 2 to 1 (VARCHAR2), 3 (INTEGER), 4 (FLOAT), 5 (STRING) or some other appropriate datatype.


Extracting Precision and Scale

The library function SQLNumberPrecV6() (previously known as sqlprc()) extracts precision and scale. Normally, it is used after the DESCRIBE SELECT LIST, and its first argument is L[i]. You call SQLNumberPrecV6() using the following syntax:


Note:

See your platform-specific SQLNumberPrecV6 header file for the correct prototype for your platform.

SQLNumberPrecV6(dvoid *runtime_context, int *length, int *precision,
                int *scale); 

where:

SyntaxDescription
runtime_contextIs the pointer to the runtime context
lengthIs a pointer to a long integer variable that stores the length of an Oracle NUMBER value; the length is stored in L[i]. The scale and precision of the value are stored respectively in the low and next-higher bytes.
precisionIs a pointer to an integer variable that returns the precision of the NUMBER value. Precision is the number of significant digits. It is set to zero if the select-list item refers to a NUMBER of unspecified size. In this case, because the size is unspecified, you might want to assume the maximum precision (38).
scaleIs a pointer to an integer variable that returns the scale of the NUMBER value. Scale specifies where rounding will occur. For example, a scale of 2 means the value is rounded to the nearest hundredth (3.456 becomes 3.46); a scale of -3 means the number is rounded to the nearest thousand (3456 becomes 3000).

When the scale is negative, add its absolute value to the length. For example, a precision of 3 and scale of -2 allow for numbers as large as 99900.

The following example shows how SQLNumberPrecV6() is used to compute maximum display lengths for NUMBER values that will be coerced to STRING:

/* Declare variables for the function call. */ 
sqlda         *select_des;  /* pointer to select descriptor */ 
int            prec;        /* precision                    */ 
int            scal;        /* scale                        */ 
extern void SQLNumberPrecV6();  /* Declare library function. */ 
/* Extract precision and scale. */ 
SQLNumberPrecV6(SQL_SINGLE_RCTX, &(select_des->L[i]), &prec, &scal); 
/* Allow for maximum size of NUMBER. */ 
if (prec == 0) 
    prec = 38; 
/* Allow for possible decimal point and sign. */ 
select_des->L[i] = prec + 2; 
/* Allow for negative scale. */ 
if (scal < 0) 
    select_des->L[i] += -scal; 

Notice that the first argument in this function call points to the ith element in the array of lengths, and that all three parameters are addresses.

The SQLNumberPrecV6() function returns zero as the precision and scale values for certain SQL datatypes. The SQLNumberPrecV7() function is similar, having the same argument list, and returning the same values, except in the cases of these SQL datatypes:

Table 15-3 Precision and Scale Values for SQL Datatypes

SQL DatatypeBinary PrecisionScale

FLOAT

126

-127

FLOAT(N)

N (range is 1 to 126)

-127

REAL

63

-127

DOUBLE PRECISION

126

-127


Handling NULL/Not NULL Datatypes

For every select-list column (not expression), DESCRIBE SELECT LIST returns a NULL/not NULL indication in the datatype array T of the select descriptor. If the ith select-list column is constrained to be not NULL, the high-order bit of T[i] is clear; otherwise, it is set.

Before using the datatype in an OPEN or FETCH statement, if the NULL/not NULL bit is set, you must clear it. (Never set the bit.)

You can use the library function SQLColumnNullCheck() (previously was called sqlnul()) to find out if a column allows NULLs, and to clear the datatype's NULL/not NULL bit. You call SQLColumnNullCheck() using the syntax:

SQLColumnNullCheck(dvoid *context, unsigned short *value_type, 
      unsigned short *type_code, int *null_status);

where:

SyntaxDescription
contextIs a pointer to the runtime context
value_typeIs a pointer to an unsigned short integer variable that stores the datatype code of a select-list column; the datatype is stored in T[i].
type_codeIs a pointer to an unsigned short integer variable that returns the datatype code of the select-list column with the high-order bit cleared.
null_statusIs a pointer to an integer variable that returns the null status of the select-list column. 1 means the column allows nulls; 0 means it does not.

The following example shows how to use SQLColumnNullCheck():

/* Declare variables for the function call. */ 
sqlda  *select_des;      /* pointer to select descriptor */ 
unsigned short   dtype;  /* datatype without null bit    */ 
int   nullok;            /* 1 = null, 0 = not null       */ 
extern void SQLColumnNullCheck();    /* Declare library function.    */ 
/* Find out whether column is not null. */ 
SQLColumnNUllCheck(SQL_SINGLE_RCTX, (unsigned short *)&(select_des->T[i]), &dtype, &nullok); 
if (nullok) 
{ 
    /* Nulls are allowed. */ 
    ... 
    /* Clear the null/not null bit. */ 
SQLColumnNullCheck(SQL_SINGLE_RCTX, &(select_des->T[i]), &(select_des->T[i]), &nullok); 
} 

Notice that the first and second arguments in the second call to the SQLColumnNullCheck() function point to the ith element in the array of datatypes, and that all three parameters are addresses.

The Basic Steps

Method 4 can be used to process any dynamic SQL statement. In the coming example, a query is processed so you can see how both input and output host variables are handled.

To process the dynamic query, our example program takes the following steps:

  1. Declare a host string in the Declare Section to hold the query text.

  2. Declare select and bind SQLDAs.

  3. Allocate storage space for the select and bind descriptors.

  4. Set the maximum number of select-list items and placeholders that can be DESCRIBEd.

  5. Put the query text in the host string.

  6. PREPARE the query from the host string.

  7. DECLARE a cursor FOR the query.

  8. DESCRIBE the bind variables INTO the bind descriptor.

  9. Reset the number of placeholders to the number actually found by DESCRIBE.

  10. Get values and allocate storage for the bind variables found by DESCRIBE.

  11. OPEN the cursor USING the bind descriptor.

  12. DESCRIBE the select list INTO the select descriptor.

  13. Reset the number of select-list items to the number actually found by DESCRIBE.

  14. Reset the length and datatype of each select-list item for display purposes.

  15. FETCH a row from the database INTO the allocated data buffers pointed to by the select descriptor.

  16. Process the select-list values returned by FETCH.

  17. Deallocate storage space used for the select-list items, placeholders, indicator variables, and descriptors.

  18. CLOSE the cursor.


Note:

Some of these steps are unnecessary if the dynamic SQL statement contains a known number of select-list items or placeholders.

A Closer Look at Each Step

This section discusses each step in detail. At the end of this chapter is a Commented, full-length program illustrating Method 4.

With Method 4, you use the following sequence of embedded SQL statements:

EXEC SQL PREPARE statement_name 
    FROM { :host_string | string_literal }; 
EXEC SQL DECLARE cursor_name CURSOR FOR statement_name; 
EXEC SQL DESCRIBE BIND VARIABLES FOR statement_name 
    INTO bind_descriptor_name; 
EXEC SQL OPEN cursor_name 
    [USING DESCRIPTOR bind_descriptor_name]; 
EXEC SQL DESCRIBE [SELECT LIST FOR] statement_name 
    INTO select_descriptor_name; 
EXEC SQL FETCH cursor_name 
    USING DESCRIPTOR select_descriptor_name; 
EXEC SQL CLOSE cursor_name; 

Scrollable cursors can also be used with Method 4. The following sequence of embedded SQL statements must be used for scrollable cursors.

 EXEC SQL PREPARE statement_name 
           FROM { :host_string | string_literal }; 
 EXEC SQL DECLARE cursor_name SCROLL CURSOR FOR statement_name; 
 EXEC SQL DESCRIBE BIND VARIABLES  FOR statement_name 
           INTO bind_descriptor_name; 
 EXEC SQL OPEN cusor_name 
           [ USING DESCRIPTOR bind_descriptor_name]; 
 EXEC SQL DESCRIBE [ SELECT LIST FOR] statement_name 
           INTO select_descriptor_name; 
 EXEC SQL FETCH  [ FIRST| PRIOR|NEXT|LAST|CURRENT | RELATIVE fetch_offset 
           |ABSOLUTE fetch_offset ]  cursor_name USING DESCRIPTOR
            select_descriptor_name; 
 EXEC SQL CLOSE cursor_name;

If the number of select-list items in a dynamic query is known, you can omit DESCRIBE SELECT LIST and use the following Method 3 FETCH statement:

EXEC SQL FETCH cursor_name INTO host_variable_list; 

Or, if the number of placeholders for bind variables in a dynamic SQL statement is known, you can omit DESCRIBE BIND VARIABLES and use the following Method 3 OPEN statement:

EXEC SQL OPEN cursor_name [USING host_variable_list];
 

Next, you see how these statements allow your host program to accept and process a dynamic SQL statement using descriptors.


Note:

Several figures accompany the following discussion. To avoid cluttering the figures, it was necessary to do the following:

Declare a Host String

Your program needs a host variable to store the text of the dynamic SQL statement. The host variable (select_stmt in our example) must be declared as a character string.

    ... 
    int      emp_number; 
    VARCHAR  emp_name[10]; 
    VARCHAR  select_stmt[120]; 
    float    bonus; 

Declare the SQLDAs

In our example, instead of hardcoding the SQLDA data structure, you use INCLUDE to copy it into your program, as follows:

#include <sqlda.h>

Then, because the query might contain an unknown number of select-list items or placeholders for bind variables, you declare pointers to select and bind descriptors, as follows:

sqlda  *select_des; 
sqlda  *bind_des; 

Allocate Storage Space for the Descriptors

Recall that you allocate storage space for a descriptor with the SQLSQLDAAlloc() library function. The syntax, using ANSI C notation, is:

SQLDA *SQLSQLDAAlloc(dvoid *context, unsigned int max_vars, unsigned int
max_name, unsigned int max_ind_name);

The SQLSQLDAAlloc() function allocates the descriptor structure and the arrays addressed by the pointer variables V, L, T, and I.

If max_name is nonzero, arrays addressed by the pointer variables S, M, and C are allocated. If max_ind_name is nonzero, arrays addressed by the pointer variables X, Y, and Z are allocated. No space is allocated if max_name and max_ind_name are zero.

If SQLSQLDAAlloc() succeeds, it returns a pointer to the structure. If SQLSQLDAAlloc() fails, it returns a zero.

In our example, you allocate select and bind descriptors, as follows:

select_des = SQLSQLDAAlloc(SQL_SINGLE_RCTX, 3, (size_t) 5, (size_t) 0); 
bind_des = SQLSQLDAAlloc(SQL_SINGLE_RCTX, 3, (size_t) 5, (size_t) 4); 

For select descriptors, always set max_ind_name to zero so that no space is allocated for the array addressed by X.

Set the Maximum Number to DESCRIBE

Next, you set the maximum number of select-list items or placeholders that can be DESCRIBEd, as follows:

select_des->N = 3; 
bind_des->N = 3; 

Figure 15-2 and Figure 15-3 represent the resulting descriptors.


Note:

In the select descriptor (Figure 15-2), the section for indicator-variable names is crossed out to show that it is not used.

Figure 15-2 Initialized Select Descriptor

Initialized Select Descriptor
Description of "Figure 15-2 Initialized Select Descriptor"

Figure 15-3 Initialized Bind Descriptor

Initialized Bind Descriptor
Description of "Figure 15-3 Initialized Bind Descriptor"

Put the Query Text in the Host String

Continuing our example, you prompt the user for a SQL statement, then store the input string in select_stmt, as follows:

printf("\n\nEnter SQL statement: "); 
gets(select_stmt.arr); 
select_stmt.len = strlen(select_stmt.arr); 

We assume the user entered the following string:

"SELECT ename, empno, comm FROM emp WHERE comm < :bonus" 

PREPARE the Query from the Host String

PREPARE parses the SQL statement and gives it a name. In our example, PREPARE parses the host string select_stmt and gives it the name sql_stmt, as follows:

EXEC SQL PREPARE sql_stmt FROM :select_stmt; 

DECLARE a Cursor

DECLARE CURSOR defines a cursor by giving it a name and associating it with a specific SELECT statement.

To declare a cursor for static queries, you use the following syntax:

EXEC SQL DECLARE cursor_name CURSOR FOR SELECT ... 

To declare a cursor for dynamic queries, the statement name given to the dynamic query by PREPARE is substituted for the static query. In our example, DECLARE CURSOR defines a cursor named emp_cursor and associates it with sql_stmt, as follows:

EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; 

Note:

You can declare a cursor for all dynamic SQL statements, not just queries. With non-queries, OPENing the cursor executes the dynamic SQL statement.

DESCRIBE the Bind Variables

DESCRIBE BIND VARIABLES puts descriptions of placeholders into a bind descriptor. In our example, DESCRIBE readies bind_des, as follows:

EXEC SQL DESCRIBE BIND VARIABLES FOR sql_stmt INTO bind_des; 

Note that bind_des must not be prefixed with a colon.

The DESCRIBE BIND VARIABLES statement must follow the PREPARE statement but precede the OPEN statement.

Figure 15-4 shows the bind descriptor in our example after the DESCRIBE. Notice that DESCRIBE has set F to the actual number of placeholders found in the processed SQL statement.

Figure 15-4 Bind Descriptor after the DESCRIBE

Bind Descriptor after the DESCRIBE
Description of "Figure 15-4 Bind Descriptor after the DESCRIBE"

Reset Number of Placeholders

Next, you must reset the maximum number of placeholders to the number actually found by DESCRIBE, as follows:

bind_des->N = bind_des->F; 

Get Values and Allocate Storage for Bind Variables

Your program must get values for the bind variables found in the SQL statement, and allocate memory for them. How the program gets the values is up to you. For example, they can be hardcoded, read from a file, or entered interactively.

In our example, a value must be assigned to the bind variable that replaces the placeholder bonus in the query WHERE clause. So, you choose to prompt the user for the value, then process it as follows:

for (i = 0; i < bind_des->F; i++) 
{ 
    printf("\nEnter value of bind variable %.*s:\n? ", 
        (int) bind_des->C[i], bind_des->S[i]); 
    gets(hostval); 
    /* Set length of value. */ 
    bind_des->L[i] = strlen(hostval); 
    /* Allocate storage for value and null terminator. */ 
    bind_des->V[i] = malloc(bind_des->L[i] + 1); 
    /* Allocate storage for indicator value. */ 
    bind_des->I[i] = (unsigned short *) malloc(sizeof(short)); 
    /* Store value in bind descriptor. */ 
    strcpy(bind_des->V[i], hostval); 
    /* Set value of indicator variable. */ 
    *(bind_des->I[i]) = 0;  /* or -1 if "null" is the value */ 
    /* Set datatype to STRING. */ 
    bind_des->T[i] = 5; 
} 

Assuming that the user supplied a value of 625 for bonus, Figure 15-5 shows the resulting bind descriptor. Notice that the value is null-terminated.

Figure 15-5 Bind Descriptor after Assigning Values

Bind Descriptor after Assigning Values
Description of "Figure 15-5 Bind Descriptor after Assigning Values"

OPEN the Cursor

The OPEN statement used for dynamic queries is like that used for static queries except that the cursor is associated with a bind descriptor. Values determined at run time and stored in buffers addressed by elements of the bind descriptor arrays are used to evaluate the SQL statement. With queries, the values are also used to identify the active set.

In our example, OPEN associates emp_cursor with bind_des, as follows:

EXEC SQL OPEN emp_cursor USING DESCRIPTOR bind_des; 

Remember, bind_des must not be prefixed with a colon.

Then, OPEN executes the SQL statement. With queries, OPEN also identifies the active set and positions the cursor at the first row.

DESCRIBE the Select List

If the dynamic SQL statement is a query, the DESCRIBE SELECT LIST statement must follow the OPEN statement but precede the FETCH statement.

DESCRIBE SELECT LIST puts descriptions of select-list items in a select descriptor. In our example, DESCRIBE readies select_des, as follows:

EXEC SQL DESCRIBE SELECT LIST FOR sql_stmt INTO select_des;
 

Accessing the Oracle data dictionary, DESCRIBE sets the length and datatype of each select-list value.

Figure 15-6 shows the select descriptor in our example after the DESCRIBE. Notice that DESCRIBE has set F to the actual number of items found in the query select list. If the SQL statement is not a query, F is set to zero.

Also notice that the NUMBER lengths are not usable yet. For columns defined as NUMBER, you must use the library function SQLNumberPrecV6() to extract precision and scale.

Figure 15-6 Select Descriptor after the DESCRIBE

Select Descriptor after the DESCRIBE
Description of "Figure 15-6 Select Descriptor after the DESCRIBE"

Reset Number of Select-List Items

Next, you must reset the maximum number of select-list items to the number actually found by DESCRIBE, as follows:

select_des->N = select_des->F; 

Reset Length/Datatype of Each Select-list Item

In our example, before FETCHing the select-list values, you allocate storage space for them using the library function malloc(). You also reset some elements in the length and datatype arrays for display purposes.

for (i=0; i<select_des->F; i++) 
{ 
    /* Clear null bit. */ 
    SQLColumnNullCheck(SQL_SINGLE_RCTX, (unsigned short *)&(select_des->T[i]),
         (unsigned short *)&(select_des->T[i]), &nullok); 
    /* Reset length if necessary. */ 
    switch(select_des->T[i]) 
    { 
        case  1: break; 
        case  2: SQLNumberPrecV6(SQL_SINGLE_RCTX, (unsigned long *)
                      &(select_des->L[i]), &prec, &scal); 
                 if (prec == 0) prec = 40; 
                 select_des->L[i] = prec + 2; 
                 if (scal < 0) select_des->L[i] += -scal; 
                 break; 
        case  8: select_des->L[i] = 240; 
                 break; 
        case 11: select_des->L[i] = 18; 
                 break; 
        case 12: select_des->L[i] = 9; 
                 break; 
        case 23: break; 
        case 24: select_des->L[i] = 240; 
                 break; 
    } 
    /* Allocate storage for select-list value. */ 
    select_des->V[i] = malloc(select_des->L[i]+1); 
    /* Allocate storage for indicator value. */ 
    select_des->I[i] = (short *)malloc(sizeof(short *)); 
    /* Coerce all datatypes except LONG RAW to STRING. */ 
    if (select_des->T[i] != 24) select_des->T[i] = 5; 
} 

Figure 15-7 shows the resulting select descriptor. Notice that the NUMBER lengths are now usable and that all the datatypes are STRING. The lengths in L[1] and L[2] are 6 and 9 because we increased the DESCRIBEd lengths of 4 and 7 by 2 to allow for a possible sign and decimal point.

Figure 15-7 Select Descriptor before the FETCH

Select Descriptor before the FETCH
Description of "Figure 15-7 Select Descriptor before the FETCH"

FETCH Rows from the Active Set

FETCH returns a row from the active set, stores select-list values in the data buffers, and advances the cursor to the next row in the active set. If there are no more rows, FETCH sets sqlca.sqlcode to the "no data found" Oracle error code. In our example, FETCH returns the values of columns ENAME, EMPNO, and COMM to select_des, as follows:

EXEC SQL FETCH emp_cursor USING DESCRIPTOR select_des;
 

Figure 15-8 shows the select descriptor in our example after the FETCH. Notice that Oracle has stored the select-list and indicator values in the data buffers addressed by the elements of V and I.

For output buffers of datatype 1, Oracle, using the lengths stored in the L array, left-justifies CHAR or VARCHAR2 data and right-justifies NUMBER data. For output buffer of type 5 (STRING), Oracle left-justifies and null terminates CHAR, VARCHAR2, and NUMBER data.

The value 'MARTIN' was retrieved from a VARCHAR2(10) column in the EMP table. Using the length in L[0], Oracle left-justifies the value in a 10-byte field, filling the buffer.

The value 7654 was retrieved from a NUMBER(4) column and coerced to '7654'. However, the length in L[1] was increased by 2 to allow for a possible sign and decimal point. So, Oracle left-justifies and null terminates the value in a 6-byte field.

The value 482.50 was retrieved from a NUMBER(7,2) column and coerced to '482.50'. Again, the length in L[2] was increased by 2. So, Oracle left-justifies and null terminates the value in a 9-byte field.

Get and Process Select-List Values

After the FETCH, your program can process the returned values. In our example, values for columns ENAME, EMPNO, and COMM are processed.

Figure 15-8 Selected Descriptor after the FETCH

Selected Descriptor after the FETCH
Description of "Figure 15-8 Selected Descriptor after the FETCH"

Deallocate Storage

You use the free() library function to deallocate the storage space allocated by malloc(). The syntax is as follows:

free(char *pointer); 

In our example, you deallocate storage space for the values of the select-list items, bind variables, and indicator variables, as follows:

for (i = 0; i < select_des->F; i++)   /* for select descriptor */ 
{ 
    free(select_des->V[i]); 
    free(select_des->I[i]); 
} 
for (i = 0; i < bind_des->F; i++)   /* for bind descriptor */ 
{ 
    free(bind_des->V[i]); 
    free(bind_des->I[i]); 
} 

You deallocate storage space for the descriptors themselves with the SQLSQLDAFree() library function, using the following syntax:

SQLSQLDAFree(context, descriptor_name); 

The descriptor must have been allocated using SQLSQLDAAlloc(). Otherwise, the results are unpredictable.

In our example, you deallocate storage space for the select and bind descriptors as follows:

SQLSQLDAFree(SQL_SINGLE_RCTX, select_des); 
SQLSQLDAFree(SQL_SINGLE_RCTX, bind_des); 

CLOSE the Cursor

CLOSE disables the cursor. In our example, CLOSE disables emp_cursor as follows:

EXEC SQL CLOSE emp_cursor; 

Using Host Arrays

To use input or output host arrays with Method 4, you must use the optional FOR clause to tell Oracle the size of your host array.


See Also:

Chapter 8, "Host Arrays" for more information on the FOR clause

You must set descriptor entries for the ith select-list item or bind variable using the syntax

V[i] = array_address; 
L[i] = element_size; 

where array_address is the address of the host array, and element_size is the size of one array element.

Then, you must use a FOR clause in the EXECUTE or FETCH statement (whichever is appropriate) to tell Oracle the number of array elements you want to process. This procedure is necessary because Oracle has no other way of knowing the size of your host array.

In the complete program example later, three input host arrays are used to INSERT rows into the EMP table. EXECUTE can be used for Data Manipulation Language statements other than queries with Method 4.

#include <stdio.h>
#include <sqlcpr.h>
#include <sqlda.h>
#include <sqlca.h>
 
#define NAME_SIZE    10
#define INAME_SIZE   10
#define ARRAY_SIZE    5
 
/* connect string */
char *username = "scott/tiger";
 
char *sql_stmt =
"INSERT INTO emp (empno, ename, deptno) VALUES (:e, :n, :d)";
int  array_size = ARRAY_SIZE;  /* must have a host variable too */
 
SQLDA   *binda;
 
char    names[ARRAY_SIZE][NAME_SIZE];
int     numbers[ARRAY_SIZE], depts[ARRAY_SIZE];

/* Declare and initialize indicator vars. for empno and deptno columns */
short   ind_empno[ARRAY_SIZE] = {0,0,0,0,0};
short   ind_dept[ARRAY_SIZE] = {0,0,0,0,0};
 
main() 
{ 
    EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
 
/* Connect */ 
    EXEC SQL CONNECT :username; 
    printf("Connected.\n"); 
 
/* Allocate the descriptors and set the N component. 
   This must be done before the DESCRIBE. */ 
    binda = SQLSQLDAAlloc(SQL_SINGLE_RCTX, 3, NAME_SIZE, INAME_SIZE); 
    binda->N = 3; 
 
/* Prepare and describe the SQL statement. */ 
    EXEC SQL PREPARE stmt FROM :sql_stmt; 
    EXEC SQL DESCRIBE BIND VARIABLES FOR stmt INTO binda; 
 
/* Initialize the descriptors. */ 
    binda->V[0] = (char *) numbers; 
    binda->L[0] = (long) sizeof (int); 
    binda->T[0] = 3; 
    binda->I[0] = ind_empno; 
 
    binda->V[1] = (char *) names; 
    binda->L[1] = (long) NAME_SIZE; 
    binda->T[1] = 1; 
    binda->I[1] = (short *)0;
 
    binda->V[2] = (char *) depts; 
    binda->L[2] = (long) sizeof (int); 
    binda->T[2] = 3; 
    binda->I[2] = ind_dept; 
 
/* Initialize the data buffers. */ 
    strcpy(&names[0] [0], "ALLISON"); 
    numbers[0] = 1014; 
    depts[0] = 30; 
 
    strcpy(&names[1] [0], "TRUSDALE"); 
    numbers[1] = 1015; 
    depts[1] = 30; 
 
    strcpy(&names[2] [0], "FRAZIER"); 
    numbers[2] = 1016; 
    depts[2] = 30; 
 
    strcpy(&names[3] [0], "CARUSO"); 
    numbers[3] = 1017; 
    ind_dept[3] = -1;       /* set indicator to -1 to insert NULL */
    depts[3] = 30;          /* value in depts[3] is ignored */ 
 
    strcpy(&names[4] [0], "WESTON"); 
    numbers[4] = 1018;
    depts[4] = 30;
 
/* Do the INSERT. */
    printf("Adding to the Sales force...\n");
    
    EXEC SQL FOR :array_size
    EXECUTE stmt USING DESCRIPTOR binda;
 
/*  Print rows-processed count. */
    printf("%d rows inserted.\n\n", sqlca.sqlerrd[2]);
    EXEC SQL COMMIT RELEASE;
    exit(0);
 
sql_error: 
/* Print Oracle error message. */
    printf("\n%.70s", sqlca.sqlerrm.sqlerrmc);
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK RELEASE; 
    exit(1); 
} 

sample12.pc

A simple dynamic SQL example using array fetches is shown in file sample12.pc in the demo directory.

Example Program: Dynamic SQL Method 4

This program shows the basic steps required to use dynamic SQL with Method 4. After connecting to Oracle, the program:

If the input SQL statement is a query, the program FETCHes each row of data, then CLOSEs the cursor. This program is available on-line in the demo directory, in the file sample10.pc.

/*******************************************************************
Sample Program 10:  Dynamic SQL Method 4

This program connects you to ORACLE using your username and
password, then prompts you for a SQL statement.  You can enter
any legal SQL statement.  Use regular SQL syntax, not embedded SQL.
Your statement will be processed.  If it is a query, the rows
fetched are displayed.
You can enter multiline statements.  The limit is 1023 characters.
This sample program only processes up to MAX_ITEMS bind variables and
MAX_ITEMS select-list items.  MAX_ITEMS is #defined to be 40.
*******************************************************************/

#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <sqlda.h>
#include <stdlib.h>
#include <sqlcpr.h>

/* Maximum number of select-list items or bind variables. */
#define MAX_ITEMS         40

/* Maximum lengths of the _names_ of the
   select-list items or indicator variables. */
#define MAX_VNAME_LEN     30
#define MAX_INAME_LEN     30

#ifndef NULL
#define NULL  0
#endif

/* Prototypes */
#if defined(__STDC__)
  void sql_error(void);
  int oracle_connect(void);
  int alloc_descriptors(int, int, int);
  int get_dyn_statement(void);
  void set_bind_variables(void);
  void process_select_list(void);
  void help(void);
#else
  void sql_error(/*_ void _*/);
  int oracle_connect(/*_ void _*/);
  int alloc_descriptors(/*_ int, int, int _*/);
  int get_dyn_statement(/* void _*/);
  void set_bind_variables(/*_ void -*/);
  void process_select_list(/*_ void _*/);
  void help(/*_ void _*/);
#endif

char *dml_commands[] = {"SELECT", "select", "INSERT", "insert",
                        "UPDATE", "update", "DELETE", "delete"};

EXEC SQL INCLUDE sqlda;
EXEC SQL INCLUDE sqlca;

EXEC SQL BEGIN DECLARE SECTION;
    char    dyn_statement[1024];
    EXEC SQL VAR dyn_statement IS STRING(1024);
EXEC SQL END DECLARE SECTION;
 
SQLDA *bind_dp;
SQLDA *select_dp;

/* Define a buffer to hold longjmp state info. */
jmp_buf jmp_continue;

/* A global flag for the error routine. */
int parse_flag = 0;

void main()
{
    int i;

    /* Connect to the database. */
    if (oracle_connect() != 0)
        exit(1);

    /* Allocate memory for the select and bind descriptors. */
    if (alloc_descriptors(MAX_ITEMS, MAX_VNAME_LEN, MAX_INAME_LEN) != 0)
        exit(1);

    /* Process SQL statements. */
    for (;;) 
    {
        (void) setjmp(jmp_continue);

        /* Get the statement.  Break on "exit". */
        if (get_dyn_statement() != 0)
            break;

        /* Prepare the statement and declare a cursor. */
        EXEC SQL WHENEVER SQLERROR DO sql_error();

        parse_flag = 1;     /* Set a flag for sql_error(). */
        EXEC SQL PREPARE S FROM :dyn_statement;
        parse_flag = 0;     /* Unset the flag. */

        EXEC SQL DECLARE C CURSOR FOR S;

        /* Set the bind variables for any placeholders in the
           SQL statement. */
        set_bind_variables();

        /* Open the cursor and execute the statement.
         * If the statement is not a query (SELECT), the
         * statement processing is completed after the
         * OPEN.
         */

        EXEC SQL OPEN C USING DESCRIPTOR bind_dp;

        /* Call the function that processes the select-list.
         * If the statement is not a query, this function
         * just returns, doing nothing.
         */
        process_select_list();

        /* Tell user how many rows processed. */
        for (i = 0; i < 8; i++)
        {
           if (strncmp(dyn_statement, dml_commands[i], 6) == 0)
           {
               printf("\n\n%d row%c processed.\n", sqlca.sqlerrd[2],
                       sqlca.sqlerrd[2] == 1 ? '\0' : 's');
               break;
           }
        }
    }       /* end of for(;;) statement-processing loop */

    /* When done, free the memory allocated for
       pointers in the bind and select descriptors. */
    for (i = 0; i < MAX_ITEMS; i++)
    {    
        if (bind_dp->V[i] != (char *) 0)
            free(bind_dp->V[i]);
        free(bind_dp->I[i]);   /* MAX_ITEMS were allocated. */
        if (select_dp->V[i] != (char *) 0)
            free(select_dp->V[i]);
        free(select_dp->I[i]); /* MAX_ITEMS were allocated. */
    }

    /* Free space used by the descriptors themselves. */
    SQLSQLDAFree( SQL_SINGLE_RCTX, bind_dp);
    SQLSQLDAFree( SQL_SINGLE_RCTX, select_dp);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    /* Close the cursor. */
    EXEC SQLuY CLOSE C;

    EXEC SQL COMMIT WORK RELEASE;
    puts("\nHave a good day!\n");

    EXEC SQL WHENEVER SQLERROR DO sql_error();
    return;
}


int oracle_connect()
{
    EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR  username[128];
        VARCHAR  password[32];
    EXEC SQL END DECLARE SECTION;

    printf("\nusername: ");
    fgets((char *) username.arr, sizeof username.arr, stdin);
    username.arr[strlen((char *) username.arr)-1] = '\0';
    username.len = (unsigned short)strlen((char *) username.arr);

    printf("password: ");
    fgets((char *) password.arr, sizeof password.arr, stdin);
    password.arr[strlen((char *) password.arr) - 1] = '\0';
    password.len = (unsigned short)strlen((char *) password.arr);


    EXEC SQL WHENEVER SQLERROR GOTO connect_error;

    EXEC SQL CONNECT :username IDENTIFIED BY :password;

    printf("\nConnected to ORACLE as user %s.\n", username.arr);

    return 0;

connect_error:
    fprintf(stderr, "Cannot connect to ORACLE as user %s\n", username.arr);
    return -1;
}


/*
 *  Allocate the BIND and SELECT descriptors using SQLSQLDAAlloc().
 *  Also allocate the pointers to indicator variables
 *  in each descriptor.  The pointers to the actual bind
 *  variables and the select-list items are realloc'ed in
 *  the set_bind_variables() or process_select_list()
 *  routines.  This routine allocates 1 byte for select_dp->V[i]
 *  and bind_dp->V[i], so the realloc will work correctly.
 */

alloc_descriptors(size, max_vname_len, max_iname_len)
int size;
int max_vname_len;
int max_iname_len;
{
    int i;

    /*
     * The first SQLSQLDAAlloc parameter is the runtime context.

     * The second parameter determines the maximum number of
     * array elements in each variable in the descriptor. In
     * other words, it determines the maximum number of bind
     * variables or select-list items in the SQL statement.
     *
     * The third parameter determines the maximum length of
     * strings used to hold the names of select-list items
     * or placeholders.  The maximum length of column 
     * names in ORACLE is 30, but you can allocate more or less
     * as needed.
     *
     * The fourth parameter determines the maximum length of
     * strings used to hold the names of any indicator
     * variables.  To follow ORACLE standards, the maximum
     * length of these should be 30.  But, you can allocate
     * more or less as needed.
     */

    if ((bind_dp =
       SQLSQLDAAlloc(SQL_SINGLE_RCTX, size, max_vname_len, max_iname_len)) == 
         (SQLDA *) 0)
    {
        fprintf(stderr,
            "Cannot allocate memory for bind descriptor.");
        return -1;  /* Have to exit in this case. */
    }

    if ((select_dp =
        SQLSQLDAAlloc (SQL_SINGLE_RCTX, size, max_vname_len, max_iname_len)) == 
           (SQLDA *) 0)
    {
        fprintf(stderr,
            "Cannot allocate memory for select descriptor.");
        return -1;
    }
    select_dp->N = MAX_ITEMS;

    /* Allocate the pointers to the indicator variables, and the
       actual data. */
    for (i = 0; i < MAX_ITEMS; i++) {
        bind_dp->I[i] = (short *) malloc(sizeof (short));
        select_dp->I[i] = (short *) malloc(sizeof(short));
        bind_dp->V[i] = (char *) malloc(1);
        select_dp->V[i] = (char *) malloc(1);
    }
       
    return 0;
}


int get_dyn_statement()
{
    char *cp, linebuf[256];
    int iter, plsql;


    for (plsql = 0, iter = 1; ;)
    {
        if (iter == 1)
        {
            printf("\nSQL> ");
            dyn_statement[0] = '\0';
        }
        
        fgets(linebuf, sizeof linebuf, stdin);

        cp = strrchr(linebuf, '\n');
        if (cp && cp != linebuf)
            *cp = ' ';
        else if (cp == linebuf)
            continue;

        if ((strncmp(linebuf, "EXIT", 4) == 0) ||
            (strncmp(linebuf, "exit", 4) == 0))
        {
            return -1;
        }

        else if (linebuf[0] == '?' ||
            (strncmp(linebuf, "HELP", 4) == 0) ||
            (strncmp(linebuf, "help", 4) == 0))
        {
            help();
            iter = 1;
            continue;
        }

        if (strstr(linebuf, "BEGIN") ||
            (strstr(linebuf, "begin")))
        {
            plsql = 1;
        }

        strcat(dyn_statement, linebuf);

        if ((plsql && (cp = strrchr(dyn_statement, '/'))) ||
            (!plsql && (cp = strrchr(dyn_statement, ';'))))
        {
            *cp = '\0';
            break;
        }
        else
        {
            iter++;
            printf("%3d  ", iter);
        }
    }
    return 0;
}



void set_bind_variables()
{
    int i, n;
    char bind_var[64];

    /* Describe any bind variables (input host variables) */
    EXEC SQL WHENEVER SQLERROR DO sql_error();

    bind_dp->N = MAX_ITEMS;  /* Initialize count of array elements. */
    EXEC SQL DESCRIBE BIND VARIABLES FOR S INTO bind_dp;

    /* If F is negative, there were more bind variables
       than originally allocated by SQLSQLDAAlloc(). */
    if (bind_dp->F < 0)
    {
        printf ("\nToo many bind variables (%d), maximum is %d\n.",
                    -bind_dp->F, MAX_ITEMS);
        return;
    }

    /* Set the maximum number of array elements in the
       descriptor to the number found. */
    bind_dp->N = bind_dp->F;
 
    /* Get the value of each bind variable as a
     * character string.
     *   
     * C[i] contains the length of the bind variable
     *      name used in the SQL statement.
     * S[i] contains the actual name of the bind variable
     *      used in the SQL statement.
     *
     * L[i] will contain the length of the data value
     *      entered.
     *
     * V[i] will contain the address of the data value
     *      entered.
     *
     * T[i] is always set to 1 because in this sample program
     *      data values for all bind variables are entered
     *      as character strings.
     *      ORACLE converts to the table value from CHAR.
     *
     * I[i] will point to the indicator value, which is
     *      set to -1 when the bind variable value is "null".
     */
    for (i = 0; i < bind_dp->F; i++)
    {
        printf ("\nEnter value for bind variable %.*s:  ",
               (int)bind_dp->C[i], bind_dp->S[i]);
        fgets(bind_var, sizeof bind_var, stdin);

        /* Get length and remove the new line character. */
        n = strlen(bind_var) - 1;

        /* Set it in the descriptor. */
        bind_dp->L[i] = n;

        /* (re-)allocate the buffer for the value.
           SQLSQLDAAlloc() reserves a pointer location for
           V[i] but does not allocate the full space for
           the pointer. */

         bind_dp->V[i] = (char *) realloc(bind_dp->V[i],
                         (bind_dp->L[i] + 1));            

        /* And copy it in. */
        strncpy(bind_dp->V[i], bind_var, n);

        /* Set the indicator variable's value. */
        if ((strncmp(bind_dp->V[i], "NULL", 4) == 0) ||
                (strncmp(bind_dp->V[i], "null", 4) == 0))
            *bind_dp->I[i] = -1;
        else
            *bind_dp->I[i] = 0;
    
        /* Set the bind datatype to 1 for CHAR. */
        bind_dp->T[i] = 1;
    }
  return;
}



void process_select_list()
{
    int i, null_ok, precision, scale;

    if ((strncmp(dyn_statement, "SELECT", 6) != 0) &&
        (strncmp(dyn_statement, "select", 6) != 0))
    {
        select_dp->F = 0;
        return;
    }

    /* If the SQL statement is a SELECT, describe the
        select-list items.  The DESCRIBE function returns
        their names, datatypes, lengths (including precision
        and scale), and NULL/NOT NULL statuses. */

    select_dp->N = MAX_ITEMS;
    
    EXEC SQL DESCRIBE SELECT LIST FOR S INTO select_dp;

    /* If F is negative, there were more select-list
       items than originally allocated by SQLSQLDAAlloc(). */
    if (select_dp->F < 0)
    {
        printf ("\nToo many select-list items (%d), maximum is %d\n",
                -(select_dp->F), MAX_ITEMS);
        return;
    }

    /* Set the maximum number of array elements in the
       descriptor to the number found. */
    select_dp->N = select_dp->F;

    /* Allocate storage for each select-list item.
  
       SQLNumberPrecV6() is used to extract precision and scale
       from the length (select_dp->L[i]).

       sqlcolumnNullCheck() is used to reset the high-order bit of
       the datatype and to check whether the column
       is NOT NULL.

       CHAR    datatypes have length, but zero precision and
               scale.  The length is defined at CREATE time.

       NUMBER  datatypes have precision and scale only if
               defined at CREATE time.  If the column
               definition was just NUMBER, the precision
               and scale are zero, and you must allocate
               the required maximum length.

       DATE    datatypes return a length of 7 if the default
               format is used.  This should be increased to
               9 to store the actual date character string.
               If you use the TO_CHAR function, the maximum
               length could be 75, but will probably be less
               (you can see the effects of this in SQL*Plus).

       ROWID   datatype always returns a fixed length of 18 if
               coerced to CHAR.

       LONG and
       LONG RAW datatypes return a length of 0 (zero),
               so you need to set a maximum.  In this example,
               it is 240 characters.

       */
    
    printf ("\n");
    for (i = 0; i < select_dp->F; i++)
    {
        char title[MAX_VNAME_LEN]; 
        /* Turn off high-order bit of datatype (in this example,
           it does not matter if the column is NOT NULL). */
        SQLColumnNullCheck ((unsigned short *)&(select_dp->T[i]), 
             (unsigned short *)&(select_dp->T[i]), &null_ok);

        switch (select_dp->T[i])
        {
            case  1 : /* CHAR datatype: no change in length
                         needed, except possibly for TO_CHAR
                         conversions (not handled here). */
                break;
            case  2 : /* NUMBER datatype: use SQLNumberPrecV6() to
                         extract precision and scale. */
                SQLNumberPrecV6( SQL_SINGLE_RCTX, 
                      (unsigned long *)&(select_dp->L[i]), &precision, &scale);
                      /* Allow for maximum size of NUMBER. */
                if (precision == 0) precision = 40;
                      /* Also allow for decimal point and
                         possible sign. */
                /* convert NUMBER datatype to FLOAT if scale > 0,
                   INT otherwise. */
                if (scale > 0)
                    select_dp->L[i] = sizeof(float);
                else
                    select_dp->L[i] = sizeof(int);
                break;

            case  8 : /* LONG datatype */
                select_dp->L[i] = 240;
                break;

            case 11 : /* ROWID datatype */
                select_dp->L[i] = 18;
                break;

            case 12 : /* DATE datatype */
                select_dp->L[i] = 9;
                break;
 
            case 23 : /* RAW datatype */
                break;

            case 24 : /* LONG RAW datatype */
                select_dp->L[i] = 240;
                break;
        }
        /* Allocate space for the select-list data values.
           SQLSQLDAAlloc() reserves a pointer location for
           V[i] but does not allocate the full space for
           the pointer.  */

         if (select_dp->T[i] != 2)
           select_dp->V[i] = (char *) realloc(select_dp->V[i],
                                    select_dp->L[i] + 1);  
         else
           select_dp->V[i] = (char *) realloc(select_dp->V[i],
                                    select_dp->L[i]);  

        /* Print column headings, right-justifying number
            column headings. */
        
        /* Copy to temporary buffer in case name is null-terminated */
        memset(title, ' ', MAX_VNAME_LEN);
        strncpy(title, select_dp->S[i], select_dp->C[i]);
        if (select_dp->T[i] == 2)
           if (scale > 0)
             printf ("%.*s ", select_dp->L[i]+3, title);
           else
             printf ("%.*s ", select_dp->L[i], title);
        else
          printf("%-.*s ", select_dp->L[i], title);

        /* Coerce ALL datatypes except for LONG RAW and NUMBER to
           character. */
        if (select_dp->T[i] != 24 && select_dp->T[i] != 2)
            select_dp->T[i] = 1;

        /* Coerce the datatypes of NUMBERs to float or int depending on
           the scale. */
        if (select_dp->T[i] == 2)
          if (scale > 0)
             select_dp->T[i] = 4;  /* float */
          else
             select_dp->T[i] = 3;  /* int */
    }
    printf ("\n\n");

    /* FETCH each row selected and print the column values. */
    EXEC SQL WHENEVER NOT FOUND GOTO end_select_loop;

    for (;;)
    {
        EXEC SQL FETCH C USING DESCRIPTOR select_dp;

        /* Since each variable returned has been coerced to a
           character string, int, or float very little processing 
           is required here.  This routine just prints out the 
           values on the terminal. */
        for (i = 0; i < select_dp->F; i++)
        {
            if (*select_dp->I[i] < 0)
                if (select_dp->T[i] == 4) 
                  printf ("%-*c ",(int)select_dp->L[i]+3, ' ');
                else
                  printf ("%-*c ",(int)select_dp->L[i], ' ');
            else
                if (select_dp->T[i] == 3)     /* int datatype */
                  printf ("%*d ", (int)select_dp->L[i], 
                                 *(int *)select_dp->V[i]);
                else if (select_dp->T[i] == 4)     /* float datatype */
                  printf ("%*.2f ", (int)select_dp->L[i], 
                                 *(float *)select_dp->V[i]);
                else                          /* character string */
                  printf ("%-*.*s ", (int)select_dp->L[i],
                            (int)select_dp->L[i], select_dp->V[i]);
        }
        printf ("\n");
    }
end_select_loop:
    return;
}



void help()
{
    puts("\n\nEnter a SQL statement or a PL/SQL block at the SQL> prompt.");
    puts("Statements can be continued over several lines, except");
    puts("within string literals.");
    puts("Terminate a SQL statement with a semicolon.");
    puts("Terminate a PL/SQL block (which can contain embedded semicolons)");
    puts("with a slash (/).");
    puts("Typing \"exit\" (no semicolon needed) exits the program.");
    puts("You typed \"?\" or \"help\" to get this message.\n\n");
}


void sql_error()
{
    /* ORACLE error handler */
    printf ("\n\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
    if (parse_flag)
        printf
        ("Parse error at character offset %d in SQL statement.\n",
           sqlca.sqlerrd[4]);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK;
    longjmp(jmp_continue, 1);
}

Sample Program : Dynamic SQL Method 4 using Scrollable Cursors

The following demo program describes the scrollable cursor feature applied with oracle dynamic method 4. This program is available on-line in the file scrolldemo1.pc in your demo directory.

ScrollDemo1.pc

/*
 * This demo program exhibits the scrollable cursor feature
 * used with oracle dynamic method 4. The scrollable cursor
 * feature can also be used with ANSI dynamic method 4.
 * 
 * This program takes as argument the username/passwd. Once
 * logged in, it prompts for a select query.It then prompts
 * for the orientation and prints the results of the query.
 *
 * Before executing this example, make sure that the hr/hr
 * schema exists.
 */

#include <stdio.h> 
#include <sqlca.h> 
#include <sqlda.h> 
 
#include <sqlcpr.h>
#include <stdlib.h>

#include <setjmp.h>


#define MAX_SELECT_ITEMS    200
#define MAX_CHARS           500

/* Maximum size of a select-list item name */
#define MAX_NAME_SIZE       50  
 
SQLDA   *selda; 
SQLDA   *bind_des; 
jmp_buf beginEnv;
jmp_buf loopEnv;

/* Data buffer */
char c_data[MAX_SELECT_ITEMS][MAX_CHARS];
 
char username[60];
char stmt[500];

/* Print the generic error message & exit */

void sql_error()
{
    char msgbuf[512];
    size_t msgbuf_len, msg_len;

    msgbuf_len = sizeof(msgbuf);
    sqlglm(msgbuf, &msgbuf_len, &msg_len);

    printf ("\n\n%.*s\n", msg_len, msgbuf);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK RELEASE;
    exit(EXIT_FAILURE);
}

/* Print the error message and continue to query
   the user */
void sql_loop_error()
{
    char msgbuf[512];
    size_t msgbuf_len, msg_len;
    int code = sqlca.sqlcode;

    msgbuf_len = sizeof(msgbuf);
    sqlglm(msgbuf, &msgbuf_len, &msg_len);

    printf ("\n%.*s\n", msg_len, msgbuf);
    printf("The error code is %d\n", sqlca.sqlcode);
    if (code==-900 || code == -942 || code == -904)
      longjmp(beginEnv, 1);

    longjmp(loopEnv, 1);
}

/* FETCH has returned the "no data found"  error code.
   This means that either we have reached the end of 
   the active set or the offset refers to a row beyond the
   active set */
void no_data_found()
{
  printf("\nNo Data available at the specified offset\n");
  longjmp(loopEnv, 1);
}

void main(int argc, char *argv[]) 
{
    int i, n;
    int sli;     /* select-list item */
    int offset;
    int contFlag;
    char bindVar[20];
    char *u, temp[3];
    char choice;

    /* Error Handler  */
    EXEC SQL WHENEVER SQLERROR DO sql_error();


    if (argc == 1)
    {
      printf("Logging in as default user hr\n");
      strcpy(username, "hr/hr");
    }
    else
      strcpy(username, argv[1]);

    /* Establish a connection to the data base */
    EXEC SQL CONNECT :username;

    u = username;
    while(*++u != '/');
    *u = '\0';

    /* Error Handler */
    EXEC SQL WHENEVER SQLERROR DO sql_loop_error();
    for (;;)
    {

      setjmp(beginEnv);
      printf("[%s] SQL > ", username);
      gets(stmt);
      if (!strlen(stmt))
        continue;

      if (!strcmp(tolower(stmt), "exit"))
        break;

      selda = sqlald(MAX_SELECT_ITEMS, MAX_NAME_SIZE, 0);
      bind_des = sqlald(MAX_SELECT_ITEMS, MAX_NAME_SIZE, 30);

      /* prepare an sql statement for the query*/
      EXEC SQL PREPARE S FROM :stmt;

      /* Declare a cursor as scrollable */
      EXEC SQL DECLARE C SCROLL CURSOR FOR S;

      for (i=0; i<MAX_SELECT_ITEMS; i++)
      {
        bind_des->I[i] = (short *) malloc(sizeof (short));
        bind_des->V[i] = (char *) malloc(1);
      }
      bind_des->N = MAX_SELECT_ITEMS;

      EXEC SQL DESCRIBE BIND VARIABLES FOR S INTO bind_des;

      /* set up the bind variables */
      if (bind_des->F < 0)
      {
        printf("Bind descriptor, value exceeds the limit\n");
        exit(-1);
      }

      bind_des->N = bind_des->F;
      for (i=0; i<bind_des->F; i++)
      {
        printf("Enter the value for bind variable %.*s: ",
               (int)bind_des->C[i], bind_des->S[i]);

        fgets(bindVar, sizeof(bindVar), stdin);
        n = strlen(bindVar) - 1;

        bind_des->L[i] = n;
        bind_des->V[i] = (char *) realloc(bind_des->V[i], 
                         (bind_des->L[i] +1));

        strncpy(bind_des->V[i], bindVar, n);
        if ((strncmp(bind_des->V[i], "NULL", 4) == 0) ||
              (strncmp(bind_des->V[i], "null", 4) == 0))
          *bind_des ->I[i] = -1;
        else
          *bind_des ->I[i] = 0;

        bind_des->T[i] = 1;
      }

      /* open the cursor */
      EXEC SQL OPEN C USING DESCRIPTOR bind_des;
      EXEC SQL DESCRIBE SELECT LIST FOR S INTO selda;

      if (selda->F < 0)
      {
        printf("Select descriptor, value exceeds the limit\n");
        exit(-1);
      }
        
      selda->N = selda->F;
      for (sli = 0; sli < selda->N; sli++)
      {
          /* Set addresses of heads of the arrays 
             in the V element. */
          selda->V[sli] = c_data[sli];
          /* Convert everything to varchar on output. */
          selda->T[sli] = 1;
          /* Set the maximum lengths. */
          selda->L[sli] = MAX_CHARS;
      }

      while(1)
      {

        printf("\n\nEnter the row number to be fetched \n");
        printf("1.ABSOLUTE\n");
        printf("2.RELATIVE\n");
        printf("3.FIRST \n");
        printf("4.NEXT \n");
        printf("5.PREVIOUS \n");
        printf("6.LAST \n");
        printf("7.CURRENT \n");
        printf("Enter your choice --> ");
        scanf("%c",&choice);

        EXEC SQL WHENEVER NOT FOUND DO no_data_found();
        switch(choice)
        {
          case '1': printf("\nEnter Offset :");
                    scanf("%d",&offset);
                    EXEC SQL FETCH ABSOLUTE :offset C USING DESCRIPTOR selda;
                    break;
          case '2': printf("\nEnter Offset :");
                    scanf("%d",&offset);
                    EXEC SQL FETCH RELATIVE :offset C USING DESCRIPTOR selda;
                    break;
          case '3': EXEC SQL FETCH FIRST C USING DESCRIPTOR selda;
                    break;
          case '4': EXEC SQL FETCH NEXT C USING DESCRIPTOR selda;
                    break;
          case '5': EXEC SQL FETCH PRIOR C USING DESCRIPTOR selda;
                    break;
          case '6': EXEC SQL FETCH LAST C USING DESCRIPTOR selda;
                    break;
          case '7': EXEC SQL FETCH CURRENT C USING DESCRIPTOR selda;
                    break;
          default : printf("Invalid choice\n");
                    continue;
        }

        /* print the row */
        for (sli=0; sli<selda->N; sli++)
          printf("%.10s ", c_data[sli]);

        puts("");

        setjmp(loopEnv);
        contFlag = 'x';
        while(contFlag != 'Y' && contFlag != 'N')
        {
          printf("\nContinue with the current fetch? [y/n] : ");
          contFlag = toupper(getchar());
        }

        if (contFlag != 'Y')
          break;
      }

        EXEC SQL CLOSE C;
    }

    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_SUCCESS);
}
PKuPK+AOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPK+AOEBPS/whatsnew.htmD What's New in Pro*C/C++?

What's New in Pro*C/C++?

This section describes new features of Pro*C/C++ releases and provides pointers to additional information. New features information from previous releases is also retained to help those users migrating to the current release.

The following sections describe the new features in Oracle Pro*C/C++:

Oracle 11g Release 2 (11.2) New Features in Pro*C/C++

The following are the new features in the Pro*C/C++ application in Oracle11g Release 2:

Oracle 11g Release 1 (11.1) New Features in Pro*C/C++

The following are the new features in the Pro*C/C++ application in Oracle11g Release 1:

PKmPK+AOEBPS/pc_10opt.htm Precompiler Options

10 Precompiler Options

This chapter tells you how to run the Pro*C/C++ precompiler, and describes the extensive set of precompiler options in detail. This chapter contains the following topics:

The Precompiler Command

The location of the precompiler differs from system to system. The system or database administrator usually defines logicals or aliases, or uses other system-specific means to make the Pro*C/C++ executable accessible.

To run the Pro*C/C++ precompiler, you issue the following command:

proc option=value... 

Note:

The option value is always separated from the option name by an equals sign, with no whitespace around the equals sign.

For example, the command

proc INAME=test_proc

precompiles the file test_proc.pc in the current directory, since the precompiler assumes that the filename extension is pc. The INAME=argument specifies the source file to be precompiled. The INAME option does not have to be the first option on the command line, but if it is, you can omit the option specification. So, the command

proc myfile 

is equivalent to

proc INAME=myfile 

Note:

The option names, and option values that do not name specific operating system objects, such as filenames, are not case-sensitive. In the examples in this guide, option names are written in upper case, and option values are usually in lower case. When you enter filenames, including the name of the Pro*C/C++ precompiler executable itself, always follow the case conventions used by your operating system.

Some platforms, such as UNIX, require "escape characters" before certain characters in value strings. Consult your platform-specific documentation.


Case Sensitivity

In general, you can use either uppercase or lowercase for precompiler option names and values. However, if your operating system is case sensitive, like UNIX, you must specify filename values, including the name of the Pro*C/C++ executable, using the correct combination of uppercase and lowercase letters.

Precompiler Options

Precompiler options enable you to control how resources are used, how errors are reported, how input and output are formatted, and how cursors are managed.

The value of an option is a literal, which represents text or numeric values. For example, for the option

...  INAME=my_test 

the value is a string literal that specifies a filename.

For the option MAXOPENCURSORS

...MAXOPENCURSORS=20 

the value is numeric.

Some options take Boolean values, and you can represent these with the strings yes or no, true or false, or with the integer literals 1 or 0 respectively. For example, the option

...  SELECT_ERROR=yes 

is equivalent to

...  SELECT_ERROR=true

or

...  SELECT_ERROR=1 

all of which mean that SELECT errors should be flagged at run time.

Environment Variables

You can use environment variables in SYS_INCLUDE and INCLUDE precompiler options. Environment variables like ORACLE_HOME can be used in SYS_INCLUDE and INCLUDE directory paths while precompiling a PROC application. SYS_INCLUDE and INCLUDE option values can also come from the config file, pcscfg.cfg. The following usages of environment variables are supported.

In Linux

$ENV_VAR 
sys_include=$ORACLE_HOME/precomp/public
include=$ORACLE_HOME/precomp/public
 
$(ENV_VAR)
sys_include=$(ORACLE_HOME)/precomp/public
include=$(ORACLE_HOME)/precomp/public

${ENV_VAR}
sys_include=${ORACLE_HOME}/precomp/public
include=${ORACLE_HOME}/precomp/public

In Windows

%ENV_VAR% 
sys_include=%ORACLE_HOME%\precomp\public
include=%ORACLE_HOME%\precomp\public
 

Configuration Files

A configuration file is a text file that contains precompiler options. Each record (line) in the file contains only one option, with its associated value or values. Any options entered on a line after the first option are ignored. For example, the following configuration file contains the lines:

FIPS=YES 
MODE=ANSI 
CODE=ANSI_C

to set defaults for the FIPS, MODE, and CODE options.

There is a restriction of 300 characters per line for each entry in pcscfg.cfg. To set a value longer than 300 characters, for example, the SYS_INCLUDE path), create entries in multiple lines. For example,

sys_include=/ade/aime_rdbms_9819/oracle/precomp/public 
sys_include=/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include 
sys_include=/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include
sys_include=/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include
sys_include=/usr/include

Do not use brackets at the end of a line. A bracket at the right hand end of a line nullifies all previous lines. For example, a bracket at the end of the third line,

sys_include=/ade/aime_rdbms_9819/oracle/precomp/public 
sys_include=/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include 
sys_include=/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include)
sys_include=/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include
sys_include=/usr/include

sets SYS_INCLUDE to

/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include, /usr/lib/gcc-lib/i386-redhat-linux7/2.96/include,/usr/include

There is a single system configuration file for each installation. The name of the system configuration file is pcscfg.cfg. The location of the file is system specific.


Note:

In the pcscfg.cfg file, you cannot use spaces. For example, if the file contains the following line:

include="D:\Program Files\Microsoft Visual Studio\VC98\include"

the precompilation will fail. You can replace it with the following:

include=D:\Progra~1\Microa~4\VC98\include


Each Pro*C/C++ user can have one or more private configuration files. The name of the configuration file must be specified using the CONFIG= precompiler option.


Note:

You cannot nest configuration files. This means that CONFIG= is not a valid option inside a configuration file.

Precedence of Option Values

The value of an option is determined, in increasing precedence, by:

  • A value built in to the precompiler

  • A value set in the Pro*C/C++ system configuration file

  • A value set in a Pro*C/C++ user configuration file

  • A value set in the command line

  • A value set inline

For example, the option MAXOPENCURSORS specifies the maximum number of cached open cursors. The built-in precompiler default value for this option is 10. However, if MAXOPENCURSORS=32 is specified in the system configuration file, the default now becomes 32. The user configuration file could set it to yet another value, which then overrides the system configuration value. Finally, an inline specification takes precedence over all preceding defaults.

If a PROC command-line option is used a multiple number of times, the last value assigned in the last occurence is the value used by PROC for precompilation. For example,

$ proc iname=sample.pc ... oname=output1.c ... oname=output2.c ... oname=output3.c

In the example, output3.c is the ONAME value used by PROC and the generated output filename is output3.c.

If an option is specified both inside the config file (system default or user specified) and on the command line, then the value specified in the command line takes precedence.

In the case of SYS_INCLUDE and INCLUDE options, the behavior is as defined in Environment Variables. The values are appended unless interrupted by a bracket at the end of a line.

If you specify a private configuration file with CONFIG=filename, then the first value takes precedence and subsequent occurences in the command line are ignored. This is an exception to command-line last-value precedence.

Some options, such as USERID, do not have a precompiler default value. The built-in default values for options that do have them are listed in Table 10-2.


Note:

Check your system-specific documentation for the precompiler default values; they may have been changed from the values in this chapter for your platform.


See Also:


Determining Current Values

You can interactively determine the current value for one or more options by using a question mark on the command line. For example, if you issue the command

proc ? 

the complete set of options, along with their current values, is printed to your terminal. (On a UNIX system running the C shell, escape the '?' with a backslash.) In this case, the values are those built into the precompiler, overridden by any values in the system configuration file. But if you issue the command

proc config=my_config_file.h ?
 

and there is a file named my_config_file.h in the current directory, all options are listed. Values in the user configuration file supply missing values, and supersede values built-in to the Pro*C/C++ precompiler, or values specified in the system configuration file.

You can also determine the current value of a single option, by simply specifying that option name, followed by =?. For example:

proc maxopencursors=? 

prints the current default value for the MAXOPENCURSORS option.

Entering:

proc

will give a short summary that resembles "Precompiler Options".

Macro and Micro Options

The option MODE controls several options at once. MODE is known as a macro option. Some newer options such as CLOSE_ON_COMMIT, DYNAMIC and TYPE_CODE control only one function and are known as micro options. A macro option has precedence over micro options only if the macro option is at a higher level of precedence. See "Precedence of Option Values".

The following table lists the values of micro options set by the macro option values:

Table 10-1 How Macro Option Values Set Micro Option Values

Macro OptionMicro Option

MODE=ANSI | ISO

CLOSE_ON_COMMIT=YES

DYNAMIC=ANSI

TYPE_CODE=ANSI

MODE=ORACLE

CLOSE_ON_COMMIT=NO

DYNAMIC=ORACLE

TYPE_CODE=ORACLE


If you specify both MODE=ANSI and CLOSE_ON_COMMIT=NO in the user configuration file, then cursors will not be closed after a COMMIT. If you specify MODE=ORACLE in your configuration file and CLOSE_ON_COMMIT=YES on the command line, then the cursors will be closed.

What Occurs During Precompilation?

During precompilation, Pro*C/C++ generates C or C++ code that replaces the SQL statements embedded in your host program. The generated code contains data structures that indicate the datatype, length, and address of host variables, as well as other information required by the runtime library, SQLLIB. The generated code also contains the calls to SQLLIB routines that perform the embedded SQL operations.


Note:

The precompiler does not generate calls to Oracle Call Interface (OCI) routines.

Table 10-2 is a quick reference to the major precompiler options. The options that are accepted, but do not have any affect, are not included in this table.

Scope of Options

A precompilation unit is a file containing C code and one or more embedded SQL statements. The options specified for a given precompilation unit affect only that unit; they have no effect on other units. For example, if you specify HOLD_CURSOR=YES and RELEASE_CURSOR=YES for unit A, but not for unit B, SQL statements in unit A run with these HOLD_CURSOR and RELEASE_CURSOR values, but SQL statements in unit B run with the default values.

Pro*C/C++ Precompiler Issues for Windows Platforms

This section highlights issues related to Pro*C/C++ for Windows platforms.

Configuration File

For this release, the system configuration file is called pcscfg.cfg. This file is located in the ORACLE_HOME\precomp\admin directory.

CODE

The CODE option has a default setting of ANSI_C. Pro*C/C++ for other operating systems may have a default setting of KR_C.

DBMS

DBMS=V6_CHAR is not supported when using CHAR_MAP=VARCHAR2. Instead, use DBMS=V7.

INCLUDE

For sample programs that precompile with PARSE=PARTIAL or PARSE=FULL, an include path of c:\program files\devstudio\vc\include has been added. If Microsoft Visual Studio has been installed in a different location, modify the Include Directories field accordingly for the sample programs to precompile correctly.

PARSE

The PARSE option has a default setting of NONE. Pro*C/C++ for other operating systems may have a default setting of FULL.

Quick Reference

Table 10-2 is a quick reference to the Pro*C/C++ options. Options marked with an asterisk can be entered inline.

Table 10-2 Precompiler Options

SyntaxDefaultSpecifics

AUTO_CONNECT={YES | NO}

NO

Automatic CLUSTER$ account connection before the first executable statement.

CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF} *

CHARZ

Mapping of character arrays and strings.

CINCR

1

Allows the application to set the next increment for physical connections to be opened to the database, if the current number of physical connections is less than CMAX.

CLOSE_ON_COMMIT={YES | NO}

NO

Close all cursors on COMMIT.

CODE={ANSI_C | KR_C | CPP}

KR_C

Kind of C code generated.

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

MULTI_BYTE

The character set type the C/C++ compiler supports.

CONFIG=filename

none

User's private configuration file.

CMIN

2

Specifies the minimum number of physical connections in the connection pool.

CMAX

100

Specifies the maximum number of physical connections that can be opened for the database.

CNOWAIT

0 which means not set.

This attribute determines if the application must repeatedly try for a physical connection when all other physical connections in the pool are busy, and the total number of physical connections has already reached its maximum.

CPOOL

NO

Based on this option, the precompiler generates the appropriate code that directs SQLLIB to enable or disable the connection pool feature.

CPP_SUFFIX=extension

none

Specify the default filename extension for C++ output files.

CTIMEOUT

0 which means not set.

Physical connections that are idle for more than the specified time (in seconds) are terminated to maintain an optimum number of open physical connections.

DBMS={V7 | NATIVE | V8}

NATIVE

Compatibility (Oracle7, Oracle8, Oracle8i, Oracle9i, or the database version to which you are connected at precompile time).

DEF_SQLCODE={YES | NO}

NO

Generate a macro to #define SQLCODE.

DEFINE=name *

none

Define a name for use by the Pro*C/C++ precompiler.

DURATION={TRANSACTION | SESSION}

TRANSACTION

Set pin duration for objects in the cache.

DYNAMIC={ANSI | ORACLE}

ORACLE

Specifies Oracle or ANSI SQL semantics.

ERRORS={YES | NO}

YES

Where to direct error messages (NO means only to listing file, and not to terminal).

ERRTYPE=filename

none

Name of the listing file for intype file error messages.

FIPS={NO | SQL89 | SQL2 | YES} *

none

Whether to flag ANSI/ISO non-compliance.

HEADER=extension

none

Specify file extension for precompiled header files.

HOLD_CURSOR={YES | NO} *

NO

How cursor cache handles SQL statement.

INAME=]filename

none

Name of the input file.

INCLUDE=pathname *

none

Directory path for EXEC SQL INCLUDE or #include statements.

INTYPE=filename

none

Name of the input file for type information.

LINES={YES | NO}

NO

Whether #line directives are generated.

LNAME=filename

none

Name of listing file.

LTYPE={NONE | SHORT | LONG}

none

Type of listing file to be generated, if any.

MAXLITERAL=10..1024

1024

Maximum length (bytes) of string literals in generated C code.

MAXOPENCURSORS=5..255 *

10

Maximum number of concurrent cached open cursors.

MODE={ANSI | ISO | ORACLE}

ORACLE

ANSI/ISO or Oracle behavior.

NATIVE_TYPES

NO

Support for native float/double.

NLS_CHAR=(var1, ..., varn)

none

Specify multibyte character variables.

NLS_LOCAL={YES | NO}

NO

Control multibyte character semantics.

OBJECTS={YES | NO}

YES

Support of object types.

ONAME=]filename

iname.c

Name of the output (code) file.

ORACA={YES | NO} *

NO

Whether to use the ORACA.

PAGELEN=30..256

80

Page length of the listing file.

PARSE={NONE | PARTIAL | FULL}

FULL

Whether Pro*C/C++ parses (with a C parser) the.pc source.

PREFETCH=0..65535

1

Speed up queries by pre-fetching a given number of rows.

RELEASE_CURSOR={YES | NO} *

NO

Control release of cursors from cursor cache.

SELECT_ERROR={YES | NO} *

YES

Flagging of SELECT errors.

SQLCHECK={SEMANTICS | SYNTAX} *

SYNTAX

Amount of precompile time SQL checking.

SYS_INCLUDE=pathname

none

Directory where system header files, such as iostream.h, are found.

THREADS={YES | NO}

NO

Indicates a shared server application.

TYPE_CODE={ORACLE | ANSI}

ORACLE

Use of Oracle or ANSI type codes for dynamic SQL.

UNSAFE_NULL={YES | NO}

NO

UNSAFE_NULL=YES disables the ORA-01405 message.

USERID=username/password[@dbname]

none

Username/password[@dbname] connect string.

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

NCHAR_CHARSET

Specify the character set form used by UNICODE(UTF16).

VARCHAR={YES | NO}

NO

Allow the use of implicit VARCHAR structures.

VERSION={ANY | LATEST | RECENT} *

RECENT

Which version of an object is to be returned.


Entering Options

You can enter any precompiler option in the command line. Many can also be entered inline in the precompiler program source file, using the EXEC ORACLE OPTION statement.

On the Command Line

You enter precompiler options in the command line using the following syntax:

... [OPTION_NAME=value] [OPTION_NAME=value] ... 

Separate each option=value specification with one or more spaces. For example, you might enter the following:

... CODE=ANSI_C MODE=ANSI 

Inline

You enter options inline by coding EXEC ORACLE statements, using the following syntax:

EXEC ORACLE OPTION (OPTION_NAME=value); 

For example, you might code the following:

EXEC ORACLE OPTION (RELEASE_CURSOR=yes); 

Uses for EXEC ORACLE

The EXEC ORACLE feature is especially useful for changing option values during precompilation. For example, you might want to change HOLD_CURSOR and RELEASE_CURSOR on a statement-by-statement basis.


See Also:

Appendix C, " Performance Tuning" shows you how to optimize runtime performance using inline options.

Specifying options inline or in a configuration file is also helpful if your operating system limits the number of characters you can enter on the command line.

Scope of EXEC ORACLE

An EXEC ORACLE statement stays in effect until textually superseded by another EXEC ORACLE statement specifying the same option. In the following example, HOLD_CURSOR=NO stays in effect until superseded by HOLD_CURSOR=YES:

char emp_name[20]; 
int  emp_number, dept_number; 
float salary; 
 
EXEC SQL WHENEVER NOT FOUND DO break; 
EXEC ORACLE OPTION (HOLD_CURSOR=NO); 
 
EXEC SQL DECLARE emp_cursor CURSOR FOR 
SELECT empno, deptno FROM emp; 
 
EXEC SQL OPEN emp_cursor; 
printf( 
"Employee Number  Department\n--------------------------\n"); 
for (;;) 
{ 
   EXEC SQL FETCH emp_cursor INTO :emp_number, :dept_number; 
   printf("%d\t%d\n", emp_number, dept_number); 
} 
 
EXEC SQL WHENEVER NOT FOUND CONTINUE; 
for (;;) 
{ 
   printf("Employee number: "); 
   scanf("%d", &emp_number); 
   if (emp_number == 0) 
      break; 
   EXEC ORACLE OPTION (HOLD_CURSOR=YES); 
   EXEC SQL SELECT ename, sal 
      INTO :emp_name, :salary 
      FROM emp WHERE empno = :emp_number; 
   printf("Salary for %s is %6.2f.\n", emp_name, salary); 

Using the Precompiler Options

This section is organized for easy reference. It lists the precompiler options alphabetically, and for each option gives its purpose, syntax, and default value. Usage notes that help you understand how the option works are also provided.

AUTO_CONNECT

Purpose

Allows automatic connection to the CLUSTER$ account.

Syntax

AUTO_CONNECT={YES | NO}

Default

NO

Usage Notes

Can be entered only on the command line or in a configuration file.

If AUTO_CONNECT=YES, and the application is not already connected to a database when it processes the first executable SQL statement, it attempts to connect using the userid

CLUSTER$username

where username is your current operating system user or task name and CLUSTER$username is a valid Oracle userid.

When AUTO_CONNECT=NO, you must use the CONNECT statement in your program to connect to Oracle.

CHAR_MAP

Purpose

Specifies the default mapping of C host variables of type char or char[n], and pointers to them, into SQL.

Syntax

CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF}

Default

CHARZ

Usage Note

Before release 8.0, you had to declare char or char[n] host variables as CHAR, using the SQL DECLARE statement. The external datatypes VARCHAR2 and CHARZ were the default character mappings of Oracle7.


See Also:


CINCR

Purpose

Allows the application to set the next increment for physical connections to be opened to the database.

Syntax

CINCR = Range is 1 to (CMAX-CMIN).

Default

1

Usage Notes

Initially, all physical connections as specified through CMIN are opened to the server. Subsequently, physical connections are opened only when necessary. Users should set CMIN to the total number of planned or expected concurrent statements to be run by the application to get optimum performance. The default value is set to 2.

CLOSE_ON_COMMIT

Purpose

Specifies whether or not all cursors declared without the WITH HOLD clause are closed on commit.

Syntax

CLOSE_ON_COMMIT={YES | NO}

Default

NO

Usage Notes

Can be used only on the command line or in a configuration file.

This option will only have an effect when a cursor is not coded using the WITH HOLD clause in a DECLARE CURSOR statement, since that will override both the new option and the existing behavior which is associated with the MODE option. If MODE is specified at a higher level than CLOSE_ON_COMMIT, then MODE takes precedence. For example, the defaults are MODE=ORACLE and CLOSE_ON_COMMIT=NO. If the user specifies MODE=ANSI on the command line, then any cursors not using the WITH HOLD clause will be closed on commit.

When CLOSE_ON_COMMIT=NO (when MODE=ORACLE), issuing a COMMIT or ROLLBACK will close only cursors that are declared using the FOR UPDATE clause or are referenced in a CURRENT OF clause. Other cursors that are not affected by the COMMIT or ROLLBACK statement, remain open, if they are open already. However, when CLOSE_ON_COMMIT=YES (when MODE=ANSI), issuing a COMMIT or ROLLBACK closes all cursors.


See Also:


CMAX

Purpose

Specifies the maximum number of physical connections that can be opened for the database.

Syntax

CINCR = Range is 1 to 65535

Default

100

Usage Notes

CMAX value must be at least CMIN+CINCR.Once this value is reached, more physical connections cannot be opened.In a typical application, running 100 concurrent database operations is more than sufficient. The user can set an appropriate value.

CMIN

Purpose

Specifies the minimum number of physical connections that can be opened for the database.

Syntax

CINCR = Range is 1 to (CMAX-CINCR).

Default

2

Usage Notes

CMAX value must be at least CMIN+CINCR.Once this value is reached, more physical connections cannot be opened.In a typical application, running 100 concurrent database operations is more than sufficient. The user can set an appropriate value.

CNOWAIT

Purpose

This attribute determines if the application must repeatedly try for a physical connection when all other physical connections in the pool are busy, and the total number of physical connections has already reached its maximum.

Syntax

CNOWAIT = Range is 1 to 65535.

Default

0 which means not set.

Usage Notes

If physical connections are not available and no more physical connections can be opened, an error is thrown when this attribute is set. Otherwise, the call waits until it acquires another connection. By default, CNOWAIT is not to be set so a thread will wait until it can acquire a free connection, instead of returning an error.

CODE

Purpose

Specifies the format of C function prototypes generated by the Pro*C/C++ precompiler. (A function prototype declares a function and the datatypes of its arguments.) The precompiler generates function prototypes for SQL library routines, so that your C compiler can resolve external references. The CODE option lets you control the prototyping.

Syntax

CODE={ANSI_C | KR_C | CPP}

Default

KR_C

Usage Notes

Can be entered on the command line, but not inline.

ANSI C standard X3.159-1989 provides for function prototyping. When CODE=ANSI_C, Pro*C/C++ generates full function prototypes, which conform to the ANSI C standard. An example follows:

extern void sqlora(long *, void *); 

The precompiler can also generate other ANSI-approved constructs such as the const type qualifier.

When CODE=KR_C (the default), the precompiler comments out the argument lists of generated function prototypes, as shown here:

extern void sqlora(/*_ long *, void * _*/); 

Specify CODE=KR_C if your C compiler is not compliant with the X3.159 standard.

When CODE=CPP, the precompiler generates C++ compatible code.


See Also:

"Code Generation" for all of the consequences of using this option value.

COMMON_PARSER

Purpose

Specifies that the SQL99 syntax for SELECT, INSERT, DELETE, UPDATE and body of the cursor in a DECLARE CURSOR statement will be supported.

Syntax

COMMON_PARSER={YES | NO}

Default

NO

Usage Notes

Can be entered in the command line.

COMP_CHARSET

Purpose

Indicates to the Pro*C/C++ Precompiler whether multibyte character sets are (or are not) supported by the compiler to be used. It is intended for use by developers working in a multibyte client-side environment (for example, when NLS_LANG is set to a multibyte character set).

Syntax

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

Default

MULTI_BYTE

Usage Notes

Can be entered only on the command line.

With COMP_CHARSET=MULTI_BYTE (default), Pro*C/C++ generates C code that is to be compiled by a compiler that supports multibyte character sets.

With COMP_CHARSET=SINGLE_BYTE, Pro*C/C++ generates C code for single-byte compilers that addresses a complication that may arise from the ASCII equivalent of a backslash (\) character in the second byte of a double-byte character in a multibyte string. In this case, the backslash (\) character is "escaped" with another backslash character preceding it.


Note:

The need for this feature is common when developing in a Shift-JIS environment with older C compilers.

This option has no effect when NLS_LANG is set to a single-byte character set.

CONFIG

Purpose

Specifies the name of a user configuration file.

Syntax

CONFIG=filename

Default

None

Usage Notes

Can be entered only on the command line.

This option is the only way you can inform Pro*C/C++ of the name and location of user configuration files.

CPOOL

Purpose

Based on this option, the precompiler generates the appropriate code that directs SQLLIB to enable or disable the connection pool feature.

Syntax

CPOOL = {YES|NO}

Default

NO

Usage Notes

If this option is set to NO, other connection pooling options will be ignored by the precompiler.

CPP_SUFFIX

Purpose

The CPP_SUFFIX option provides the ability to specify the filename extension that the precompiler appends to the C++ output file generated when the CODE=CPP option is specified.

Syntax

CPP_SUFFIX=filename_extension

Default

System-specific.

Usage Notes

Most C compilers expect a default extension of ".c" for their input files. Different C++ compilers, however, can expect different filename extensions. The CPP_SUFFIX option provides the ability to specify the filename extension that the precompiler generates. The value of this option is a string, without the quotes or the period. For example, CPP_SUFFIX=cc, or CPP_SUFFIX=C.

CTIMEOUT

Purpose

Physical connections that are idle for more than the specified time (in seconds) are terminated to maintain an optimum number of open physical connections

Syntax

CTIMEOUT = Range is 1 to 65535.

Default

0 which means not set.

Usage Notes

Physical connections will not be closed until the connection pool is terminated.Creating a new physical connection will cost a round trip to the server.

DB2_ARRAY

Purpose

Based on this option, the precompiler activates the additional array insert/select syntax.

Syntax

DB2_ARRAY={YES |NO}

Default

NO

Usage Notes

If this option is set to NO, the Oracle precompiler syntax is supported, otherwise the DB2 insert/select array syntax is supported.

DBMS

Purpose

Specifies whether Oracle follows the semantic and syntactic rules of Oracle9i, Oracle8i, Oracle8, Oracle7, or the native version of Oracle (that is, the version to which the application is connected).

Syntax

DBMS={NATIVE | V7 | V8}

Default

NATIVE

Usage Notes

Can be entered only on the command line, or in a configuration file.

The DBMS option lets you control the version-specific behavior of Oracle. When DBMS=NATIVE (the default), Oracle follows the semantic and syntactic rules of the database version to which the application is connected.

When DBMS=V8, or DBMS=V7, Oracle follows the respective rules for Oracle9i (which remain the same as for Oracle7, Oracle8, and Oracle8i).

V6_CHAR is not supported in Oracle and its functionality is provided by the precompiler option CHAR_MAP.


See Also:

"CHAR_MAP"

Table 10-3 DBMS and MODE Interaction

SituationDBMS=V7 | V8MODE=ANSIDBMS=V7 | V8MODE=ORACLE

"no data found" warning code

+100

+1403

fetch NULLs without using indicator variables

error -1405

error -1405

fetch truncated values without using indicator variables

no error but sqlwarn[1] is set

no error but sqlwarn[1]) is set

cursors closed by COMMIT or ROLLBACK

all explicit

CURRENT OF only

open an already OPENed cursor

error -2117

no error

close an already CLOSEd cursor

error -2114

no error

SQL group function ignores NULLs

no warning

no warning

when SQL group function in multirow query is called

FETCH time

FETCH time

declare SQLCA structure

optional

required

declare SQLCODE or SQLSTATE status variable

required

optional, but Oracle ignores

integrity constraints

enabled

enabled

PCTINCREASE for rollback segments

not allowed

not allowed

MAXEXTENTS storage parameters

not allowed

not allowed


DEF_SQLCODE

Purpose

Controls whether the Pro*C/C++ precompiler generates #define's for SQLCODE.

Syntax

DEF_SQLCODE={NO | YES}

Default

NO

Usage Notes

Can be used only on the command line or in a configuration file.

When DEF_SQLCODE=YES, the precompiler defines SQLCODE in the generated source code as follows:

#define SQLCODE sqlca.sqlcode

You can then use SQLCODE to check the results of executable SQL statement. The DEF_SQLCODE option is supplied for compliance with standards that require the use of SQLCODE.

In addition, you must also include the SQLCA using one of the following entries in your source code:

#include <sqlca.h>

or

EXEC SQL INCLUDE SQLCA;

If the SQLCA is not included, using this option causes a precompile time error.

DEFINE

Purpose

Defines a name that can be used in #ifdef and #ifndef Pro*C/C++ precompiler directives. The defined name can also be used by the EXEC ORACLE IFDEF and EXEC ORACLE IFNDEF statements.

Syntax

DEFINE=name

Default

None

Usage Notes

Can be entered on the command line or inline. You can only use DEFINE to define a name—you cannot define macros with it. For example, the following use of define is not valid:

proc my_prog DEFINE=LEN=20 

Using DEFINE in the correct way, you could do

proc my_prog DEFINE=XYZZY 

And then in my_prog.pc, code

#ifdef XYZZY 
... 
#else 
... 
#endif 

Or, you could just as well code

EXEC ORACLE IFDEF XYZZY; 
... 
EXEC ORACLE ELSE; 
... 
EXEC ORACLE ENDIF; 

The following example is invalid:

#define XYZZY
...
EXEC ORACLE IFDEF XYZZY
...
EXEC ORACLE ENDIF;

EXEC ORACLE conditional statements are valid only if the macro is defined using EXEC ORACLE DEFINE or the DEFINE option.

If you define a name using DEFINE=, and then conditionally include (or exclude) a code section using the Pro*C/C++ precompiler #ifdef (or #ifndef) directives, you must also make sure that the name is defined when you run the C compiler. For example, for UNIX cc, you must use the -D option to define the name.

DURATION

Purpose

Sets the pin duration used by subsequent EXEC SQL OBJECT CREATE and EXEC SQL OBJECT DEREF statements. Objects in the cache are implicitly unpinned at the end of the duration.

Syntax

DURATION={TRANSACTION | SESSION}

Default

TRANSACTION

Usage Notes

Can be entered inline by use of the EXEC ORACLE OPTION statement.

TRANSACTION means that objects are implicitly unpinned when the transaction completes.

SESSION means that objects are implicitly unpinned when the connection is terminated.

DYNAMIC

Purpose

This micro option specifies the descriptor behavior in dynamic SQL Method 4. The setting of MODE determines the setting of DYNAMIC.

Syntax

DYNAMIC={ORACLE | ANSI}

Default

ORACLE

Usage Notes

Cannot be entered inline by use of the EXEC ORACLE OPTION statement.

See the DYNAMIC option settings in Table 14-2.

ERRORS

Purpose

Specifies whether error messages are sent to the terminal as well as the listing file (YES), or just to the listing file (NO).

Syntax

ERRORS={YES | NO}

Default

YES

Usage Notes

Can be entered only on the command line, or in a configuration file.

ERRTYPE

Purpose

Specifies an output file in which errors generated in processing type files are written. If omitted, errors are output to the screen. See also "INTYPE".

Syntax

ERRTYPE=filename

Default

None

Usage Notes

Only one error file will be produced. If multiple values are entered, the last one is used by the precompiler.

EVENTS

Purpose

Specifies that the application is interested in registering for and receiving notifications.

Syntax

EVENTS={YES | NO}

Default

NO

Usage Notes

Can only be entered in the command line.

FIPS

Purpose

Specifies whether extensions to ANSI SQL are flagged (by the FIPS Flagger). An extension is any SQL element that violates ANSI format or syntax rules, except privilege enforcement rules.

Syntax

FIPS={SQL89 | SQL2 | YES | NO}

Default

None

Usage Notes

Can be entered inline or on the command line.

When FIPS=YES, the FIPS Flagger is enabled, and warning (not error) messages are issued if you use an Oracle extension to ANSI SQL, or use an ANSI SQL feature in a nonconforming manner. Extensions to ANSI SQL that are flagged at precompile time include the following:

  • Array interface including the FOR clause

  • SQLCA, ORACA, and SQLDA data structures

  • Dynamic SQL including the DESCRIBE statement

  • Embedded PL/SQL blocks

  • Automatic datatype conversion

  • DATE, NUMBER, RAW, LONGRAW, VARRAW, ROWID, VARCHAR2, and VARCHAR datatypes

  • Pointer host variables

  • Oracle OPTION statement for specifying runtime options

  • TOOLS statements in user exits

  • CONNECT statement

  • TYPE and VAR datatype equivalence statements

  • AT db_name clause

  • DECLARE...DATABASE, ...STATEMENT, and ...TABLE statements

  • SQLWARNING condition in WHENEVER statement

  • DO function_name() and "do break" and "do continue"actions in WHENEVER statement

  • COMMENT and FORCE TRANSACTION clauses in COMMIT statement

  • FORCE TRANSACTION and TO SAVEPOINT clauses in ROLLBACK statement

  • RELEASE parameter in COMMIT and ROLLBACK statements

  • Optional colon-prefixing of WHENEVER...GOTO labels, and of host variables in the INTO clause

HEADER

Purpose

Permits precompiled header files. Specifies the file extension for precompiled header files.

Syntax

HEADER=extension

Default

NONE

Usage Notes

When precompiling a header file, this option is required and is used to specify the file extension for the output file that is created by precompiling that header file.

When precompiling an ordinary Pro*C/C++ program this option is optional. When given, it enables the use of the precompiled header mechanism during the precompilation of that Pro*C/C++ program.

In both cases, this option also specifies the file extension to use when processing a #include directive. If an #include file exists with the specified extension, Pro*C/C++ assumes the file is a precompiled header file previously generated by Pro*C/C++. Pro*C/C++ will then instantiate the data from that file rather than process the #include directive and precompile the included header file.

This option is only allowed on the command line or in a configuration file. It is not allowed inline. When using this option, specify the file extension only. Do not include any file separators. For example, do not include a period '.' in the extension.

HOLD_CURSOR

Purpose

Specifies how the cursors for SQL statements and PL/SQL blocks are handled in the cursor cache.

Syntax

HOLD_CURSOR={YES | NO}

Default

NO

Usage Notes

Can be entered inline or on the command line.

You can use HOLD_CURSOR to improve the performance of your program. See also Appendix C, " Performance Tuning"

When a SQL data manipulation statement is executed, its associated cursor is linked to an entry in the cursor cache. The cursor cache entry is in turn linked to an Oracle private SQL area, which stores information needed to process the statement. HOLD_CURSOR controls what happens to the link between the cursor and cursor cache.

When HOLD_CURSOR=NO, after Oracle executes the SQL statement and the cursor is closed, the precompiler marks the link as reusable. The link is reused as soon as the cursor cache entry to which it points is needed for another SQL statement. This frees memory allocated to the private SQL area and releases parse locks.

When HOLD_CURSOR=YES, the link is maintained; the precompiler does not reuse it. This is useful for SQL statements that are often executed because it speeds up subsequent executions and there is no need to re-parse the statement or allocate memory for an Oracle private SQL area.

For inline use with implicit cursors, set HOLD_CURSOR before executing the SQL statement. For inline use with explicit cursors, set HOLD_CURSOR before CLOSEing the cursor.

RELEASE_CURSOR=YES overrides HOLD_CURSOR=YES and HOLD_CURSOR=NO overrides RELEASE_CURSOR=NO. For information showing how these two options interact, see Table C-1.

IMPLICIT_SVPT

Purpose

Controls whether an implicit savepoint is taken prior to the start of a new batched insert.

Syntax

implicit_svpt={YES|NO}

Default

NO

Usage Notes

If implict_svpt=yes, a savepoint is taken prior to the start of a new batch of rows. If an error occurs on the insert, an implicit "rollback to savepoint" is executed. This option exists for DB2 compatibility, the obvious downside being the extra round-trip.

If implict_svpt=no, there is no implicit savepoint taken. If an error occurs on the buffered insert, then it is reported back to the application, but no rollback is executed.

INAME

Purpose

Specifies the name of the input file.

Syntax

INAME=path_and_filename

Default

None

Usage Notes

Can be entered only on the command line.

All input file names must be unique at precompilation time.

You can omit the filename extension if it is .pc. If the input filename is the first option on the command line, you can omit the INAME= part of the option. For example:

proc sample1 MODE=ansi 

to precompile the file sample1.pc, using ANSI mode. This command is the same as

proc INAME=sample1 MODE=ansi

Note:

The sqlctx hash value is generated based on the INAME parameter passed to the Pro*C/C++ command. This can cause issues in the applications where files having the same name are stored in different directories containing different functions and the build scripts are sent to the physical directory to precompile the program. As a result, there is no need to place the makefiles at a higher level and precompile files using their pathnames.

INCLUDE

Purpose

Specifies a directory path for files included using the #include or EXEC SQL INCLUDE directives.

Syntax

INCLUDE=pathname or INCLUDE=(path_1,path_2,...,path_n)

Default

Current directory and paths built into Pro*C/C++.

Usage Notes

Can be entered inline or on the command line.

You use INCLUDE to specify a directory path for included files. The precompiler searches directories in the following order:

  1. the current directory

  2. the system directory specified in a SYS_INCLUDE precompiler option

  3. the directories specified by the INCLUDE option, in the order they are entered

  4. the built-in directories for standard header files

You normally do not need to specify a directory path for Oracle-specific header files such as sqlca.h and sqlda.h.


Note:

If you specify an Oracle-specific filename without an extension for inclusion, Pro*C/C++ assumes an extension of .h. So, included files should have an extension, even if it is not .h.

For all other header files, the precompiler does not assume a .h extension.

You must still use INCLUDE to specify directory paths for non-standard files, unless they are stored in the current directory. You can specify more than one path on the command line, as follows:

... INCLUDE=path_1 INCLUDE=path_2 ...

Note:

 If the file you want to include resides in another directory, make sure that there is no file with the same name in the current directory.

The syntax for specifying a directory path using the INCLUDE option is system specific. Follow the conventions used for your operating system


Note:

For the INCLUDE option, the precedence of option values gets reversed. Unlike other options in which the values get overwritten, INCLUDE appends all the directory files that are mentioned in:
  • Precompiler

  • Pro*C/C++ system configuration file

  • Pro*C/C++ user configuration file

  • Command line

  • Inline

However, there is a difference between passing values within or without brackets. If you pass a single value or directory list within brackets, then the existing value of INCLUDE is overwritten. If you pass the list as a simple value without brackets, it will supplement any existing value.


INTYPE

Purpose

Specifies one or more OTT-generated type files (only needed if Object types are used in the application).

Syntax

INTYPE=(file_1,file_2,...,file_n)

Default

None

Usage Notes

There will be one type file for each Object type in the Pro*C/C++ code.

LINES

Purpose

Specifies whether the Pro*C/C++ precompiler adds #line preprocessor directives to its output file.

Syntax

LINES={YES | NO}

Default

NO

Usage Notes

Can be entered only on the command line.

The LINES option helps with debugging.

When LINES=YES, the Pro*C/C++ precompiler adds #line preprocessor directives to its output file.

Normally, your C compiler increments its line count after each input line is processed. The #line directives force the compiler to reset its input line counter so that lines of precompiler-generated code are not counted. Moreover, when the name of the input file changes, the next #line directive specifies the new filename.

The C compiler uses the line numbers and filenames to show the location of errors. Thus, error messages issued by the C compiler always refer to your original source files, not the modified (precompiled) source file. This also enables stepping through the original source code using most debuggers.

When LINES=NO (the default), the precompiler adds no #line directives to its output file.


Note:

The Pro*C/C++ precompiler does not support the #line directive. This means that you cannot directly code #line directives in the precompiler source. But you can still use the LINES= option to have the precompiler insert #line directives for you. See also "Directives Ignored".

LNAME

Purpose

Specifies the name of the listing file.

Syntax

LNAME=filename

Default

None

Usage Notes

Can be entered only on the command line.

The default filename extension for the listing file is .lis.

LTYPE

Purpose

Specifies the type of listing file generated.

Syntax

LTYPE={NONE | SHORT | LONG}

Default

SHORT

Usage Notes

Can be entered on the command line or in a configuration file.

When a listing file is generated, the LONG format is the default. With LTYPE=LONG specified, all of the source code is listed as it is parsed and messages listed as they are generated. In addition, the Pro*C/C++ options currently in effect are listed.

With LTYPE=SHORT specified, only the generated messages are listed—no source code—with line references to the source file to help you locate the code that generated the message condition.

With LTYPE=NONE specified, no list file is produced unless the LNAME option explicitly specifies a name for a list file. Under the latter condition, the list file is generated with LTYPE=LONG assumed.

MAX_ROW_INSERT

Purpose

Controls the number of rows that need to be buffered before executing the INSERT statement.

Syntax

max_row_insert={0...1000}

Default

0

Usage Notes

Any number greater than zero enables buffered insert feature and buffers that many rows before executing the INSERT statement.

MAXLITERAL

Purpose

Specifies the maximum length of string literals generated by the precompiler, so that compiler limits are not exceeded.

Syntax

MAXLITERAL=integer, range is 10 to 1024

Default

1024

Usage Notes

Cannot be entered inline.

The maximum value of MAXLITERAL is compiler dependent. For example, some C compilers cannot handle string literals longer than 512 characters, so you would specify MAXLITERAL=512.

Strings that exceed the length specified by MAXLITERAL are divided during precompilation, then recombined (concatenated) at run time.

You can enter MAXLITERAL inline but your program can set its value only once, and the EXEC ORACLE statement must precede the first EXEC SQL statement. Otherwise, Pro*C/C++ issues a warning message, ignores the extra or misplaced EXEC ORACLE statement, and continues processing.

MAXOPENCURSORS

Purpose

Specifies the number of concurrently open cursors that the precompiler tries to keep cached.

Syntax

MAXOPENCURSORS=integer

Default

10

Usage Notes

Can be entered inline or on the command line.

You can use MAXOPENCURSORS to improve the performance of your program. When precompiling separately, use MAXOPENCURSORS. MAXOPENCURSORS specifies the initial size of the SQLLIB cursor cache.

When an implicit statement is executed and HOLD_CURSOR=NO, or an explicit cursor is closed, the cursor entry is marked as reusable. If this statement is issued again and the cursor entry has not been used for another statement, it is reused.

If a new cursor is needed and the number of cursors allocated is less than MAXOPENCURSORS, then the next one in the cache is allocated. Once MAXOPENCCURSORS has been exceeded Oracle first tries to reuse a previous entry. If there are no free entries, then an additional cache entry will be allocated. Oracle will continue to do this until the program runs out of memory or the database parameter OPEN_CURSORS is exceeded.

During normal processing, when using HOLD_CURSOR=NO and RELEASE_CURSOR=NO (the default), it is advisable to set MAXOPENCURSORS to no more than 6 less than the database parameter OPEN_CURSORS to allow for the cursors used by the data dictionary to process statements.

As your program's need for concurrently open cursors grows, you might want to respecify MAXOPENCURSORS to match the need. A value of 45 to 50 is not uncommon, but remember that each cursor requires another private SQL area in the user process memory space. The default value of 10 is adequate for most programs.

MODE

Purpose

Specifies whether your program observes Oracle practices or complies with the current ANSI/ISO SQL standards.

Syntax

MODE={ANSI | ISO | ORACLE}

Default

ORACLE

Usage Notes

Can be entered only on the command line or in a configuration file.

In the context of this option ISO is equivalent to ANSI.

When MODE=ORACLE (the default), your embedded SQL program observes Oracle practices. For example, a Declare Section is optional, and blanks are stripped.

When MODE=ANSI, your program complies fully with the ANSI SQL standard, and the following changes go into effect:

  • Issuing a COMMIT or ROLLBACK closes all explicit cursors.

  • You cannot OPEN an already open cursor or CLOSE an already closed cursor. (When MODE=ORACLE, you can reOPEN an open cursor to avoid re-parsing.)

  • You must declare a either a long variable named SQLCODE or a char SQLSTATE[6] variable (uppercase is required for both variables) that is in the scope of every EXEC SQL statement. The same SQLCODE or SQLSTATE variable need not be used in each case; that is, the variable need not be global.

  • Declaring the SQLCA is optional. You need not include the SQLCA.

  • The "no data found" Oracle warning code returned to SQLCODE becomes +100 instead of +1403. The message text does not change.

  • You must have a Declare Section for host variables.

NATIVE_TYPES

Purpose

Support for native float/double.

Syntax

NATIVE_TYPES = {YES|NO}

Default

NO

Usage Notes

The native float and native double datatypes represent the single-precision and double-precision floating point values. They are represented natively, that is, in the host system's floating point format.

NLS_CHAR

Purpose

Specifies which C host character variables are treated by the precompiler as multibyte character variables.

Syntax

NLS_CHAR=varname or NLS_CHAR=(var_1,var_2,...,var_n)

Default

None.

Usage Notes

Can be entered only on the command line, or in a configuration file.

This option provides the ability to specify at precompile time a list of the names of one or more host variables that the precompiler must treat as multibyte character variables. You can specify only C char variables or Pro*C/C++ VARCHARs using this option.

If you specify in the option list a variable that is not declared in your program, then the precompiler generates no error.

NLS_LOCAL

Purpose

Determines whether multibyte character set conversions are performed by the precompiler runtime library, SQLLIB, or by the database server.

Syntax

NLS_LOCAL={NO | YES}

Default

NO

Usage Notes

When set to YES, local multibyte support is provided by Pro*C/C++ and the SQLLIB library. The option NLS_CHAR must be used to indicate which C host variables are multibyte.

When set to NO, Pro*C/C++ will use the database server support for multibyte objects. Set NLS_LOCAL to NO for all new applications.

Environment variable NLS_NCHAR must be set to a valid fixed-width National Character Set. Variable-width National Character Sets are not supported.

Can be entered only on the command line, or in a configuration file.

OBJECTS

Purpose

Requests support for object types.

Syntax

OBJECTS={YES | NO}

Default

YES

Usage Notes

Can only be entered in the command line.

ONAME

Purpose

Specifies the name of the output file. The output file is the C code file that the precompiler generates.

Syntax

ONAME=path_and_filename

Default

INAME with a .c extension.

Usage Notes

Can be entered only on the command line. Use this option to specify the full path name of the output file, where the path name differs from that of the input (.pc) file. For example, if you issue the command:

proc iname=my_test 

the default output filename is my_test.c. If you want the output filename to be my_test_1.c, issue the command

proc iname=my_test oname=my_test_1.c 

You should add the .c extension to files specified using ONAME because one is not added by default.


Note:

Oracle recommends that you not let the output filename default, but rather name it explicitly using ONAME. If you specify an ONAME value without an extension, the name of the generated file will not have one.

ORACA

Purpose

Specifies whether a program can use the Oracle Communications Area (ORACA).

Syntax

ORACA={YES | NO}

Default

NO

Usage Notes

Can be entered inline or on the command line.

When ORACA=YES, you must place either the EXEC SQL INCLUDE ORACA or #include oraca.h statement in your program.

OUTLINE

Purpose

Indicates that the outline SQL file needs to be generated for the SQL statements.

Syntax

outline={yes | no | category_name}

Default

no

Usage Notes

The outline SQL file should be in the DEFAULT category if the value is yes and the generated outline format is

DEFAULT_<filename>_<filetype>_<sequence_no>

If the category name is mentioned, then the SQL file should be generated in the category mentioned. The generated outline format for this is

<category_name>_<filename>_<filetype>_<sequence_no>

The outline SQL file is not generated if the value is no.

Semantic check should be full when this option is turned on, which means option sqlcheck=full/semantics. If sqlcheck=syntax/limited/none, then error will be generated.

OUTLNPREFIX

Purpose

Controls the generation of the outline names.

Syntax

outlnprefix={none | prefix_name}

Default

no

Usage Notes

If outlnprefix=prefix_name, then the outline format

<category_name>_<filename>_<filetype>

is replaced with <prefix_name> for the outline names.

If the length of the outline name exceeds 30 bytes, then this option is helpful for the user who can just specify the prefix name.

If outlnprefix=none, then the outline names are generated by the system. The generated format is

<category_name>_<filename>_<filetype>_<sequence_no>

Semantic check should be full when this option is turned on, which means option sqlcheck=full/semantics. If sqlcheck=syntax/limited/none, and/or outline=false, then error will be generated.

PAGELEN

Purpose

Specifies the number of lines for each physical page of the listing file.

Syntax

PAGELEN=integer

Default

80

Usage Notes

Cannot be entered inline. The value range allowed is 30..256..

PARSE

Purpose

Specifies the way that the Pro*C/C++ precompiler parses the source file.

Syntax

PARSE={FULL | PARTIAL | NONE}

Default

FULL

Usage Notes

To generate C++ compatible code, the PARSE option must be either NONE or PARTIAL.

If PARSE=NONE or PARSE=PARTIAL, all host variables must be declared inside a Declare Section.

The variable SQLCODE must also be declared inside a declare section, or it cannot be relied on to detect errors. Check the default value of PARSE for your platform.

If PARSE=FULL, the C parser is used, and it does not understand C++ constructs, such as classes, in your code.

With PARSE=FULL or PARSE=PARTIAL Pro*C/C++ fully supports C preprocessor directives, such as #define, #ifdef, and so on. However, with PARSE=NONE conditional preprocessing is supported by EXEC ORACLE statements.


Note:

Some platforms have the default value of PARSE as other than FULL. See your system-dependent documentation.


See Also:


PREFETCH

Purpose

Use this option to speed up queries by pre-fetching a number of rows.

Syntax

PREFETCH=integer

Default

1

Usage Notes

Can be used in a configuration file or on the command-line. The value of the integer is used for execution of all queries using explicit cursors, subject to the rules of precedence.

When used in-line it must placed before OPEN statements with explicit cursors. Then the number of rows pre-fetched when that OPEN is done is determined by the last in-line PREFETCH option in effect.

The value range allowed is 0.. 65535.

RELEASE_CURSOR

Purpose

Specifies how the cursors for SQL statements and PL/SQL blocks are handled in the cursor cache.

Syntax

RELEASE_CURSOR={YES | NO}

Default

NO

Usage Notes

Can be entered inline or on the command line.

You can use RELEASE_CURSOR to improve the performance of your program.

When a SQL data manipulation statement is executed, its associated cursor is linked to an entry in the cursor cache. The cursor cache entry is in turn linked to an Oracle private SQL area, which stores information needed to process the statement. RELEASE_CURSOR controls what happens to the link between the cursor cache and private SQL area.

When RELEASE_CURSOR=YES, after Oracle executes the SQL statement and the cursor is closed, the precompiler immediately removes the link. This frees memory allocated to the private SQL area and releases parse locks. To make sure that associated resources are freed when you CLOSE a cursor, you must specify RELEASE_CURSOR=YES.

When RELEASE_CURSOR=NO, the link is maintained. The precompiler does not reuse the link unless the number of open cursors exceeds the value of MAXOPENCURSORS. This is useful for SQL statements that are often executed because it speeds up subsequent executions. There is no need to re-parse the statement or allocate memory for an Oracle private SQL area.

For inline use with implicit cursors, set RELEASE_CURSOR before executing the SQL statement. For inline use with explicit cursors, set RELEASE_CURSOR before CLOSEing the cursor.

RELEASE_CURSOR=YES overrides HOLD_CURSOR=YES. For a table showing how these two options interact, see Appendix C, " Performance Tuning".

RUNOUTLINE

Purpose

Provides the developer with the option of executing "create outline" statements either by using precompiler or by the developer manually at a later time.

Syntax

runoutline={yes | no}

Default

no

Usage Notes

If runoutline=yes, then the generated 'create outline' statements are executed by the precompiler/translator at the end of a successful precompilation.

The outline option should be set to true or category_name when runoutline is used. Semantic check should be full when this option is turned on, which means option sqlcheck=full/semantics. If sqlcheck=syntax/limited/none, then error will be generated.

SELECT_ERROR

Purpose

Specifies whether your program generates an error when a SELECT statement returns more than one row, or more rows than a host array can accommodate.

Syntax

SELECT_ERROR={YES | NO}

Default

YES

Usage Notes

Can be entered inline or on the command line.

When SELECT_ERROR=YES, an error is generated when a single-row SELECT returns too many rows, or when an array SELECT returns more rows than the host array can accommodate. The result of the SELECT is indeterminate.

When SELECT_ERROR=NO, no error is generated when a single-row SELECT returns too many rows, or when an array SELECT returns more rows than the host array can accommodate.

Whether you specify YES or NO, a random row is selected from the table. The only way to ensure a specific ordering of rows is to use the ORDER BY clause in your SELECT statement. When SELECT_ERROR=NO and you use ORDER BY, Oracle returns the first row, or the first n rows when you are SELECTing into an array. When SELECT_ERROR=YES, whether or not you use ORDER BY, an error is generated when too many rows are returned.

STMT_CACHE

Purpose

Denotes the Statement cache size for the dynamic SQL statements.

Syntax

STMT_CACHE = Range is 0 to 65535

Default

0

Usage Notes

The stmt_cache option can be set to hold the anticipated number of distinct dynamic SQL statements in the application.

SYS_INCLUDE

Purpose

Specifies the location of system header files.

Syntax

SYS_INCLUDE=pathname | (path1, ..., pathn)

Default

System-specific.

Usage Notes

Pro*C/C++ searches for standard system header files, such as stdio.h, in standard locations that are platform specific. For example, on almost all UNIX systems, the file stdio.h has the full path name /usr/include/stdio.h.

But C++ compilers can have system header files, such as stdio.h, that are not in the standard system locations. You can use the SYS_INCLUDE command line option to specify a list of directory paths that Pro*C/C++ searches to look for system header files. For example:

SYS_INCLUDE=(/usr/lang/SC2.0.1/include,/usr/lang/SC2.1.1/include)

The search path that you specify using SYS_INCLUDE overrides the default header location.

If PARSE=NONE, the value specified in SYS_INCLUDE is irrelevant for the precompilation, since there is no need for Pro*C/C++ to include system header files in the precompilation. (You must, of course, still include Oracle-specific headers, such as sqlca.h. and system header files, with #include directives for pre-processing by the compiler.)

The precompiler searches directories in the following order:

  1. The current directory

  2. The system directory specified in the SYS_INCLUDE precompiler option

  3. The directories specified by the INCLUDE option, in the order entered

  4. The built-in directory for standard header files

Because of step 3, you normally do not need to specify a directory path for standard header files such as sqlca.h and sqlda.h.

The syntax for specifying a directory path using the SYS_INCLUDE option is system specific. Follow the conventions used for your operating system


Note:

For the SYS_INCLUDE option, the precedence of option values gets reversed. Unlike other options in which the values get overwritten, SYS_INCLUDE appends all the directory files that are mentioned in:
  • Precompiler

  • Pro*C/C++ system configuration file

  • Pro*C/C++ user configuration file

  • Command line

  • Inline

However, there is a difference between passing values within or without brackets. If you pass a single value or directory list within brackets, then the existing value of SYS_INCLUDE is overwritten. If you pass the list as a simple value without brackets, it will supplement any existing value.


THREADS

Purpose

When THREADS=YES, the precompiler searches for context declarations.

Syntax

THREADS={YES | NO}

Default

NO

Usage Notes

Cannot be entered inline.

This precompiler option is required for any program that requires multithreading support.

With THREADS=YES, the precompiler generates an error if no EXEC SQL CONTEXT USE directive is encountered before the first context is visible and an executable SQL statement is found.

TYPE_CODE

Purpose

This micro option specifies whether ANSI or Oracle datatype codes are used in dynamic SQL Method 4. Its setting is the same as the setting of MODE option.

Syntax

TYPE_CODE={ORACLE | ANSI}

Default

ORACLE

Usage Notes

Cannot be entered inline.

See the possible option settings in Table 14-3

.

UNSAFE_NULL

Purpose

Specifying UNSAFE_NULL=YES prevents generation of ORA-01405 messages when fetching NULLs without using indicator variables.

Syntax

UNSAFE_NULL={YES | NO}

Default

NO

Usage Notes

Cannot be entered inline.

The UNSAFE_NULL=YES is allowed only when MODE=ORACLE.

The UNSAFE_NULL option has no effect on host variables in an embedded PL/SQL block. You must use indicator variables to avoid ORA-01405 errors.

USERID

Purpose

Specifies an Oracle username and password.

Syntax

USERID=username/password[@dbname]

Default

None

Usage Notes

Can be entered only on the command line.

Do not specify this option when using the automatic connect feature, which accepts your Oracle username prefixed with CLUSTER$. The actual value of the "CLUSTER$" string is set as a parameter in the INIT.ORA file.

When SQLCHECK=SEMANTICS, if you want the precompiler to get needed information by connecting to Oracle and accessing the data dictionary, you must also specify USERID.

UTF16_CHARSET

Purpose

Specify the character set form used by UNICODE(UTF16) variables.

Syntax

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

Default

NCHAR_CHARSET

Usage Notes

Can be used only on the command line or in a configuration file, but not inline.

If UTF16_CHARSET=NCHAR_CHARSET (the default), the UNICODE(UTF16) bind / define buffer is converted according to the server side National Character Set. There may be a performance impact when the target column is CHAR.

If UTF16_CHAR=DB_CHARSET, the UNICODE(UTF16) bind / define buffer is converted according to the database character set.


Caution:

There may be data loss when the target column is NCHAR.


VARCHAR

Purpose

Instructs the Pro*C/C++ precompiler to interpret some structs as VARCHAR host variables.

Syntax

VARCHAR={NO | YES}

Default

NO

Usage Notes

Can be entered only on the command line.

When VARCHAR=YES, a C struct that you code as

struct {
    short len;
    char  arr[n];
} name;

is interpreted by the precompiler as a VARCHAR[n] host variable.

VARCHAR can be used in conjunction with the NLS_CHAR option to designate a multibyte character variable.

VERSION

Purpose

Determines which version of the object will be returned by the EXEC SQL OBJECT DEREF statement.

Syntax

VERSION={RECENT | LATEST | ANY}

Default

RECENT

Usage Notes

Can be entered inline by use of the EXEC ORACLE OPTION statement.

RECENT means that if the object has been selected into the object cache in the current transaction, then that object is returned. For transactions running in serializable mode, this option has the same effect as LATEST without incurring as many network round trips. Most applications should use RECENT.

LATEST means that if the object does not reside in the object cache, it is retrieved from the database. If It does reside in the object cache, it is refreshed from the server. Use LATEST with caution because it incurs the greatest number of network round trips. Use LATEST only when it is imperative that the object cache is kept as coherent as possible with the server buffer cache

ANY means that if the object already resides in the object cache, return that object. If not, retrieve the object from the server. ANY incurs the fewest network round trips. Use in applications that access read-only objects or when a user will have exclusive access to the objects.

PKxQ=$PK+AOEBPS/pc_14ady.htm ANSI Dynamic SQL

14 ANSI Dynamic SQL

This chapter describes Oracle's implementation of ANSI dynamic SQL (also known as SQL standard dynamic SQL) which should be used for new Method 4 applications. It has enhancements over the older Oracle dynamic SQL Method 4, described in the previous chapter.

The ANSI Method 4 supports all Oracle types, while the older Oracle Method 4 does not support object types, cursor variables, arrays of structs, DML returning clauses, Unicode variables, and LOBs.

In ANSI dynamic SQL, descriptors are internally maintained by Oracle, while in the older Oracle dynamic SQL Method 4, descriptors are defined in the user's Pro*C/C++ program. In both cases, Method 4 means that your Pro*C/C++ program accepts or builds SQL statements that contain a varying number of host variables.

This chapter contains the following topics:

Basics of ANSI Dynamic SQL

Consider the SQL statement:

SELECT ename, empno FROM emp WHERE deptno = :deptno_data 

The steps you follow to use ANSI dynamic SQL are:

Precompiler Options

Set the micro precompiler option DYNAMIC to ANSI, or set the macro option MODE to ANSI, which causes the default value of DYNAMIC to be ANSI. The other setting of DYNAMIC is ORACLE.

In order to use ANSI type codes, set the precompiler micro option TYPE_CODE to ANSI, or set the macro option MODE to ANSI which makes the default setting of TYPE_CODE to ANSI. To set TYPE_CODE to ANSI, DYNAMIC must also be ANSI.

Oracle's implementation of the ANSI SQL types in Table 14-1, "ANSI SQL Datatypes" does not exactly match the ANSI standard. For example, a describe of a column declared as INTEGER will return the code for NUMERIC. As Oracle moves closer to the ANSI standard, small changes in behavior may be required. Use the ANSI types with precompiler option TYPE_CODE set to ANSI if you want your application to be portable across database platforms and as ANSI compliant as possible. Do not use TYPE_CODE set to ANSI if such changes are not acceptable.

Overview of ANSI SQL Statements

Allocate a descriptor area first before using it in a dynamic SQL statement.

The ALLOCATE DESCRIPTOR statement syntax is:

EXEC SQL ALLOCATE DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal} 
  [WITH MAX {:occurrences | numeric_literal}];

A global descriptor can be used in any module in the program. A local descriptor can be accessed only in the file in which it is allocated. Local is the default.

The descriptor name, desc_nam, can be a literal in single quotes or a character value stored in a host variable.

occurrences is the maximum number of bind variables or columns that the descriptor can hold. This must be a numeric literal. The default is 100.

When a descriptor is no longer needed, deallocate it to conserve memory. Otherwise, deallocation is done automatically when there are no more active database connections.

The deallocate statement is:

EXEC SQL DEALLOCATE DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal};

Use the DESCRIBE statement to obtain information on a prepared SQL statement. DESCRIBE INPUT describes bind variables for the dynamic statement that has been prepared. DESCRIBE OUTPUT (the default) can give the number, type, and length of the output columns. The simplified syntax is:

EXEC SQL DESCRIBE [INPUT | OUTPUT] sql_statement 
    USING [SQL] DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal};

If your SQL statement has input and output values, you must allocate two descriptors: one for input and one for output values. If there are no input values, for example:

SELECT ename, empno FROM emp ;

then the input descriptor is not needed.

Use the SET DESCRIPTOR statement to specify input values for INSERTS, UPDATES, DELETES and the WHERE clauses of SELECT statements. Use SET DESCRIPTOR to set the number of input bind variables (stored in COUNT) when you have not done a DESCRIBE into your input descriptor:

EXEC SQL SET DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal}
   COUNT = {:kount | numeric_literal};

kount can be a host variable or a numeric literal, such as 5. Use a SET DESCRIPTOR statement for each host variable, giving at least the data source of the variable:

EXEC SQL SET DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal} 
   VALUE item_number DATA = :hv3;

You can also set the type and length of the input host variable:


Note:

When TYPE_CODE=ORACLE, if you do not set TYPE and LENGTH, either explicitly using the SET statement or implicitly by doing a DESCRIBE OUTPUT, the precompiler will use values for them derived from the host variable itself. When TYPE_CODE=ANSI, you must set TYPE using the values in Table 14-1, "ANSI SQL Datatypes". You should also set LENGTH because the ANSI default lengths may not match those of your host variables.

EXEC SQL SET DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal} 
   VALUE item_number TYPE = :hv1, LENGTH = :hv2, DATA = :hv3;

We use the identifiers hv1, hv2, and hv3 to remind us that the values must be supplied by host variables. item_number is the position of the input variable in the SQL statement.

TYPE is the Type Code selected from the following table, if TYPE_CODE is set to ANSI:

Table 14-1 ANSI SQL Datatypes

DatatypeType Code

CHARACTER

1

CHARACTER VARYING

12

DATE

9

DECIMAL

3

DOUBLE PRECISION

8

FLOAT

6

INTEGER

4

NUMERIC

2

REAL

7

SMALLINT

5


DATA is the value of the host variable that is to be input

You can also set other input values such as indicator, precision and scale.


See Also:

"SET DESCRIPTOR" for a complete discussion of all the possible descriptor item names

The numeric values in the SET DESCRIPTOR statement must be declared as either int or short int, except for indicator and returned length values which you must declare as short int.

For example, in the following example, when you want to retrieve an empno, set these values: VALUE = 2, because empno is the second output host variable in the dynamic SQL statement. The host variable empno_typ is set to 3 (Oracle Type for integer). The length of a host integer, empno_len, is set to 4, which is the size of the host variable. The DATA is equated to the host variable empno_data which will receive the value from the database table. The code fragment is as follows:

...
char *dyn_statement = "SELECT ename, empno FROM emp 
   WHERE deptno = :deptno_number" ;
int empno_data ;
int empno_typ = 3 ;
int empno_len = 4 ;
...
EXEC SQL SET DESCRIPTOR 'out' VALUE 2  TYPE = :empno_typ, LENGTH = :empno_len,
   DATA = :empno_data ;

After setting the input values, execute or open your statement using the input descriptor. If there are output values in your statement, set them before doing a FETCH. If you have performed a DESCRIBE OUTPUT, you may have to test the actual type and length of your host variables. The DESCRIBE execution produces internal types and lengths that differ from your host variable external types and length.

After the FETCH of the output descriptor, use GET DESCRIPTOR to access the returned data. Again we show a simplified syntax with details later in this chapter:

EXEC SQL GET DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal}
   VALUE item_number :hv1 = DATA, :hv2 = INDICATOR, :hv3 = RETURNED_LENGTH ;

desc_nam and item_number can be literals or host variables. A descriptor name can be a literal such as 'out'. An item number can be a numeric literal such as 2.

hv1, hv2, and hv3 are host variables. They must be host variables, not literals. Only three are shown in the example.

Use either long, int or short for all numeric values, except for indicator and returned length variables, which must be short.


See Also:

Table 14-4 for a list of all possible items of returned data that you can get

Example Code

The following example demonstrates the use of ANSI Dynamic SQL. It allocates an input descriptor ('in') and an output descriptor ('out') to execute a SELECT statement. Input values are set using the SET DESCRIPTOR statement. The cursor is opened and fetched from and the resulting output values are retrieved using a GET DESCRIPTOR statement.

...
char* dyn_statement = "SELECT ename, empno FROM emp WHERE deptno = :deptno_data" ;
int deptno_type = 3, deptno_len = 2, deptno_data = 10 ;
int ename_type = 97, ename_len = 30 ;
char ename_data[31] ;
int empno_type = 3, empno_len = 4 ;
int empno_data ;
long SQLCODE = 0 ;
...
main ()
{
/* Place preliminary code, including connection, here. */
...
EXEC SQL ALLOCATE DESCRIPTOR 'in' ;
EXEC SQL ALLOCATE DESCRIPTOR 'out' ;
EXEC SQL PREPARE s FROM :dyn_statement ;
EXEC SQL DESCRIBE INPUT s USING DESCRIPTOR 'in' ;
EXEC SQL SET DESCRIPTOR 'in' VALUE 1 TYPE = :deptno_type,
   LENGTH = :deptno_len, DATA = :deptno_data ;
EXEC SQL DECLARE c CURSOR FOR s ;
EXEC SQL OPEN c USING DESCRIPTOR 'in' ;
EXEC SQL DESCRIBE OUTPUT s USING DESCRIPTOR 'out' ;
EXEC SQL SET DESCRIPTOR 'out' VALUE 1 TYPE = :ename_type, 
    LENGTH = :ename_len, DATA = :ename_data ;
EXEC SQL SET DESCRIPTOR 'out' VALUE 2 TYPE = :empno_type, 
    LENGTH = :empno_len, DATA = :empno_data ;

EXEC SQL WHENEVER NOT FOUND DO BREAK ;
while (SQLCODE == 0) 
{
   EXEC SQL FETCH c INTO DESCRIPTOR 'out' ;
   EXEC SQL GET DESCRIPTOR 'out' VALUE 1 :ename_data = DATA ;
   EXEC SQL GET DESCRIPTOR 'out' VALUE 2 :empno_data = DATA ;
   printf("\nEname = %s Empno = %s", ename_data, empno_data) ;
}
EXEC SQL CLOSE c ;
EXEC SQL DEALLOCATE DESCRIPTOR 'in' ;
EXEC SQL DEALLOCATE DESCRIPTOR 'out' ;
...
}

Scrollable cursors can also be used with ANSI Dynamic SQL. In order to use ANSI dynamic SQL with scrollable cursors, we DECLARE the cursor in SCROLL mode. Use the various fetch orientation modes with the FETCH statement to access the result set.

Oracle Extensions

These extensions are described next:

Reference Semantics

The ANSI standard specifies value semantics. To improve performance, Oracle has extended this standard to include reference semantics.

Value semantics makes a copy of your host variables data. Reference semantics uses the addresses of your host variables, avoiding a copy. Thus, reference semantics can provide performance improvements for large amounts of data.

To help speed up fetches, use the REF keyword before the data clauses:

EXEC SQL SET DESCRIPTOR 'out' VALUE 1 TYPE = :ename_type,
   LENGTH = :ename_len, REF DATA = :ename_data ;
EXEC SQL DESCRIPTOR 'out' VALUE 2 TYPE = :empno_type,
   LENGTH = :empno_len, REF DATA = :empno_data ;

Then the host variables receive the results of the retrieves. The GET statement is not needed. The retrieved data is written directly into ename_data and empno_data after each FETCH.

Use of the REF keyword is allowed only before DATA, INDICATOR and RETURNED_LENGTH items (which can vary with each row fetched) as in this fragment of code:

int indi, returnLen ;
...
EXEC SQL SET DESCRIPTOR 'out' VALUE 1 TYPE = :ename_type,
   LENGTH = :ename_len, REF DATA = :ename_data,
      REF INDICATOR = :indi, REF RETURNED_LENGTH = :returnLen ;

After each fetch, returnLen holds the actual retrieved length of the ename field, which is useful for CHAR or VARCHAR2 data.

ename_len will not receive the returned length. It will not be changed by the FETCH statement. Use a DESCRIBE statement, followed by a GET statement to find out the maximum column width before fetching rows of data.

REF keyword is also used for other types of SQL statements than SELECT, to speed them up. With reference semantics, the host variable is used rather than a value copied into the descriptor area. The host variable data at the time of execution of the SQL statement is used, not its data at the time of the SET. Here is an example:

int x = 1 ;
EXEC SQL SET DESCRIPTOR 'value' VALUE 1 DATA = :x ;
EXEC SQL SET DESCRIPTOR 'reference' VALUE 1 REF DATA = :x ;
x = 2 ;
EXEC SQL EXECUTE s USING  DESCRIPTOR 'value' ;    /* Will use  x = 1 */
EXEC SQL EXECUTE s USING DESCRIPTOR 'reference' ; /* Will use x = 2 */

See Also:

"SET DESCRIPTOR" for many more details on the differences

Using Arrays for Bulk Operations

Oracle extends ANSI dynamic SQL by providing bulk operations. To use bulk operations, use the FOR clause with an array size to specify the amount of input data or the number of rows you want to process.

The FOR clause is used in the ALLOCATE statement to give the maximum amount of data or number of rows. For example, to use a maximum array size of 100:

EXEC SQL FOR 100 ALLOCATE DESCRIPTOR 'out' ;

or:

int array_size = 100 ;
...
EXEC SQL FOR :array_size ALLOCATE DESCRIPTOR 'out' ;

The FOR clause is then used in subsequent statements that access the descriptor. In an output descriptor the FETCH statement must have an array size equal to or less than the array size already used in the ALLOCATE statement:

EXEC SQL FOR 20 FETCH c1 USING DESCRIPTOR 'out' ;

Subsequent GET statements for the same descriptor, that get DATA, INDICATOR, or RETURNED_LENGTH values, must use the same array size as the FETCH statement.

int val_data[20] ;
short val_indi[20] ;
...
EXEC SQL FOR 20 GET DESCRIPTOR 'out' VALUE 1 :val_data = DATA,
  :val_indi = INDICATOR ;

However, GET statements that reference other items which do not vary from row to row, such as LENGTH, TYPE and COUNT, must not use the FOR clause:

int cnt, len ;
...
EXEC SQL GET DESCRIPTOR 'out' :cnt = COUNT ;
EXEC SQL GET DESCRIPTOR 'out' VALUE 1 :len = LENGTH ;

The same holds true for SET statements with reference semantics. SET statements which precede the FETCH and employ reference semantics for DATA, INDICATOR, or RETURNED_LENGTH must have the same array size as the FETCH:

int ref_data[20] ;
short ref_indi[20] ;
...
EXEC SQL FOR 20 SET DESCRIPTOR 'out' VALUE 1 REF DATA = :ref_data,
   REF INDICATOR = :ref_indi ;

Similarly, for a descriptor that is used for input, to insert a batch of rows, for instance, the EXECUTE or OPEN statement must use an array size equal to or less than the size used in the ALLOCATE statement. The SET statement, for both value and reference semantics, that accesses DATA, INDICATOR, or RETURNED_LENGTH must use the same array size as in the EXECUTE statement.

The FOR clause is never used on the DEALLOCATE or PREPARE statements.

The following code example illustrates a bulk operation with no output descriptor (there is no output, only input to be inserted into the table emp). The value of COUNT is 2 (there are two host variables, ename_arr and empno_arr, in the INSERT statement). The data array ename_arr holds three character strings: "Tom", "Dick" and "Harry", in that order. The indicator array ename_ind has a value of -1 for the second element; so a NULL will be inserted instead of "Dick". The data array empno_arr contains three employee numbers. A DML returning clause could be used to confirm the actual names inserted.

...
char* dyn_statement = "INSERT INTO emp (ename) VALUES (:ename_arr)" ;
char ename_arr[3][6] = {Tom","Dick","Harry"} ;
short ename_ind[3] = {0,-1,0} ;
int ename_len = 6, ename_type = 97, cnt = 2 ;
int empno_arr[3] = {8001, 8002, 8003} ;
int empno_len = 4 ;
int empno_type = 3 ;
int array_size = 3 ;
EXEC SQL FOR :array_size ALLOCATE DESCRIPTOR 'in' ;
EXEC SQL SET DESCRIPTOR 'in' COUNT = :cnt ;
EXEC SQL SET DESCRIPTOR 'in' VALUE 1 TYPE = :ename_type, LENGTH = :ename_len ;
EXEC SQL SET DESCRIPTOR 'in' VALUE 2 TYPE = :empno_type, LENGTH = :empno_len ;
EXEC SQL FOR :array_size SET DESCRIPTOR 'in' VALUE 1
   DATA = :ename_arr, INDICATOR = :ename_ind ;
EXEC SQL FOR :array_size SET DESCRIPTOR 'in' VALUE 2
   DATA = :empno_arr ;
EXEC SQL PREPARE s FROM :dyn_statement ;
EXEC SQL FOR :array_size EXECUTE s USING DESCRIPTOR 'in' ;
...

The preceding code will insert these values:

EMPNO   ENAME
 8001   Tom
 8002   
 8003   Harry

See Also:


Support for Arrays of Structs

You must set the HOST_STRIDE_LENGTH to the size of the struct, and the INDICATOR_STRIDE_LENGTH to the size of the indicator struct, and the RETURNED_LENGTH_STRIDE to the size of your returned length struct.

Arrays of structs are supported by ANSI dynamic SQL, but are not supported by the older Oracle dynamic SQL.

Support for Object Types

For the object types that you have defined yourself, use Oracle TYPE equal to 108. For an object type column, use a DESCRIBE statement to obtain USER_DEFINED_TYPE_VERSION, USER_DEFINED_TYPE_NAME, USER_DEFINED_TYPE_NAME_LENGTH, USER_DEFINED_TYPE_SCHEMA, and USER_DEFINED_TYPE_SCHEMA_LENGTH.

If you do not employ the DESCRIBE statement to retrieve these values, you have to set them yourself through the SET DESCRIPTOR statement.

ANSI Dynamic SQL Precompiler Options

The macro option MODE sets ANSI compatibility characteristics and controls a number of functions. It can have the values ANSI or ORACLE. For individual functions there are micro options that override the MODE setting. See also "MODE".

The precompiler micro option DYNAMIC specifies the descriptor behavior in dynamic SQL. The precompiler micro option TYPE_CODE specifies whether ANSI or Oracle datatype codes are to be used.

When the macro option MODE is set to ANSI, the micro option DYNAMIC becomes ANSI automatically. When MODE is set to ORACLE, DYNAMIC becomes ORACLE.

DYNAMIC and TYPE_CODE cannot be used inline.

This table describes functionality and how the DYNAMIC setting affects them.

Table 14-2 DYNAMIC Option Settings

FunctionDYNAMIC = ANSIDYNAMIC = ORACLE

Descriptor creation.

Must use ALLOCATE statement.

Must use function SQLSQLDAAlloc(). See"New Names for SQLLIB Public Functions".

Descriptor destruction.

May use DEALLOCATE statement.

May use function SQLLDAFree(). See "New Names for SQLLIB Public Functions".

Retrieving data.

May use both FETCH and GET statements.

Must use only FETCH statement.

Setting input data.

May use DESCRIBE INPUT statement. Must use SET statement.

Must set descriptor values in code. Must use DESCRIBE BIND VARIABLES statement.

Descriptor representation.

Single quoted literal or host identifier which contains the descriptor name.

Host variable, a pointer to SQLDA.

Data types available.

All ANSI types except BIT and all Oracle types.

Oracle types except objects, LOBs, arrays of structs and cursor variables.


The micro option TYPE_CODE is set by the precompiler to the same setting as the macro option MODE. TYPE_CODE can only equal ANSI if DYNAMIC equals ANSI.

Here is the functionality corresponding to the TYPE_CODE settings:

Table 14-3 TYPE_CODE Option Settings

FunctionTYPE_CODE = ANSITYPE_CODE = ORACLE

Data type code numbers input and returned in dynamic SQL.

Use ANSI code numbers when ANSI type exists. Otherwise, use the negative of the Oracle code number.

Only valid when DYNAMIC = ANSI.

Use Oracle code numbers.

May be used regardless of the setting of DYNAMIC.


Full Syntax of the Dynamic SQL Statements


See Also:

Appendix F, " Embedded SQL Statements and Directives" for more details on all these statements

ALLOCATE DESCRIPTOR

Purpose

Use this statement to allocate a SQL descriptor area. Supply a descriptor and the maximum number of occurrences of host bind items, and an array size. This statement is only for the ANSI dynamic SQL.

Syntax

EXEC SQL [FOR [:]array_size] ALLOCATE DESCRIPTOR [GLOBAL | LOCAL]
   {:desc_nam | string_literal} [WITH MAX occurrences] ;

Variables

array_size

This is in an optional clause (it is an Oracle extension) that supports array processing. It tells the precompiler that the descriptor is usable for array processing.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

Descriptor name. Local descriptors must be unique in the module. A runtime error is generated if the descriptor has been allocated, but not deallocated, previously. A global descriptor must be unique for the application, or a runtime error results.

occurrences

The maximum number of host variables possible in the descriptor. It must be an integer constant between 0 and 64K, or an error is returned. Default is 100. The clause is optional. A precompiler error results if it does not conform to these rules.

Examples

EXEC SQL ALLOCATE DESCRIPTOR 'SELDES' WITH MAX 50 ;

EXEC SQL FOR :batch ALLOCATE DESCRIPTOR GLOBAL :binddes WITH MAX 25 ;

DEALLOCATE DESCRIPTOR

Purpose

Use this statement to deallocate a SQL descriptor area that has been previously allocated, to free memory. This statement is only used for the ANSI dynamic SQL.

Syntax

EXEC SQL DEALLOCATE DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal} ;

Variable

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

A runtime error results when a descriptor with the same name and scope has not been allocated, or has been allocated and deallocated already.

Examples

EXEC SQL DEALLOCATE DESCRIPTOR GLOBAL 'SELDES' ;

EXEC SQL DEALLOCATE DESCRIPTOR :binddes ;

GET DESCRIPTOR

Purpose

Use to obtain information from a SQL descriptor area.

Syntax

EXEC SQL [FOR [:]array_size] GET DESCRIPTOR [GLOBAL | LOCAL] 
   {:desc_nam | string_literal} 
   { :hv0  = COUNT | VALUE item_number 
      :hv1 = item_name1 [ {, :hvN = item_nameN}] } ;

Variables

array_size

The FOR array_size is an optional Oracle extension. array_size has to be equal to the field array_size in the FETCH statement.

COUNT

The total number of bind variables.

desc_nam

Descriptor name.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

VALUE item_number

The position of the item in the SQL statement. item_number can be a variable or a constant. If item_number is greater than COUNT, the "no data found" condition is returned. item_number must be greater than 0.

hv1 .. hvN

These are host variables to which values are transferred.

item_name1 .. item_nameN

The descriptor item names corresponding to the host variables. The possible ANSI descriptor item names are:

Table 14-4 Definitions of Descriptor Item Names for GET DESCRIPTOR

Descriptor Item NameMeaning

TYPE

Use the negative value of Oracle type code if the ANSI datatype is not in the table and TYPE_CODE=ANSI.

LENGTH

Length of data in the column: in characters for NCHAR; in bytes otherwise. Set by the DESCRIBE OUTPUT.

OCTET_LENGTH

Length of data in bytes.

RETURNED_LENGTH

The actual data length after a FETCH.

RETURNED_OCTET_LENGTH

Length of the returned data in bytes.

PRECISION

The number of digits.

SCALE

For exact numeric types, the number of digits to the right of the decimal point.

NULLABLE

If 1, the column can have NULL values. If 0,the column cannot have NULL values.

INDICATOR

The associated indicator value.

DATA

The data value.

NAME

Column name.

CHARACTER_SET_NAME

Column's character set.



See Also:


The Oracle additional descriptor item names are:

Table 14-5 Oracle Extensions to Definitions of Descriptor Item Names for GET DESCRIPTOR

Descriptor Item NameMeaning

NATIONAL_CHARACTER

If 2, NCHAR or NVARCHAR2. If 1, character. If 0, non-character.

INTERNAL_LENGTH

The internal length, in bytes.

HOST_STRIDE_LENGTH

The size of the host struct in bytes.

INDICATOR_STRIDE_LENGTH

The size of the indicator struct in bytes.

RETURNED_LENGTH_STRIDE

The size of the returned-length struct in bytes.

USER_DEFINED_TYPE_VERSION

Used for character representation of object type version.

USER_DEFINED_TYPE_NAME

Name of object type.

USER_DEFINED_TYPE_NAME_LENGTH

Length of name of object type.

USER_DEFINED_TYPE_SCHEMA

Used for character representation of the object's schema.

USER_DEFINED_TYPE_SCHEMA_LENGTH

Length of USER_DEFINED_TYPE_SCHEMA.

NATIONAL_CHARACTER

If 2, NCHAR or NVARCHAR2. If 1, character. If 0, non-character.


Usage Notes

Use the FOR clause in GET DESCRIPTOR statements which contain DATA, INDICATOR, and RETURNED_LENGTH items only.

The internal type is provided by the DESCRIBE OUTPUT statement. For both input and output, you must set the type to be the external type of your host variable.

TYPE is the ANSI SQL Datatype code. Use the negative value of the Oracle type code if the ANSI type is not in the table.

LENGTH contains the column length in characters for fields that have fixed-width National Character Sets. It is in bytes for other character columns. It is set in DESCRIBE OUTPUT.

RETURNED_LENGTH is the actual data length set by the FETCH statement. It is in bytes or characters as described for LENGTH. The fields OCTET_LENGTH and RETURNED_OCTET_LENGTH are the lengths in bytes.

NULLABLE = 1 means that the column can have NULLS; NULLABLE = 0 means it cannot.

CHARACTER_SET_NAME only has meaning for character columns. For other types, it is undefined. The DESCRIBE OUTPUT statement obtains the value.

DATA and INDICATOR are the data value and the indicator status for that column. If data = NULL, but the indicator was not requested, an error is generated at runtime ("DATA EXCEPTION, NULL VALUE, NO INDICATOR PARAMETER").

Oracle-Specific Descriptor Item Names 

NATIONAL_CHARACTER = 2 if the column is an NCHAR or NVARCHAR2 column. If the column is a character (but not National Character) column, this item is set to 1. If a non-character column, this item becomes 0 after DESCRIBE OUTPUT is executed.

INTERNAL_LENGTH is for compatibility with Oracle dynamic Method 4. It has the same value as the length member of the Oracle SQL descriptor area.

The following three items are not returned by a DESCRIBE OUTPUT statement.

  • HOST_STRIDE_LENGTH is the size of the struct of host variables.

  • INDICATOR_STRIDE_LENGTH is the size of the struct of indicator variables.

  • RETURNED_LENGTH_STRIDE is the size of the struct of returned-length variables

The following items apply only to object types when the precompiler option OBJECTS has been set to YES.

  • USER_DEFINED_TYPE_VERSION contains the character representation of the type version.

  • USER_DEFINED_TYPE_NAME is the character representation of the name of the type.

  • USER_DEFINED_TYPE_NAME_LENGTH is the length of the type name in bytes.

  • USER_DEFINED_TYPE_SCHEMA is the character representation of the schema name of the type.

  • USER_DEFINED_TYPE_SCHEMA_LENGTH is the length in characters of the type's schema name.

Examples

EXEC SQL GET DESCRIPTOR :binddes :n = COUNT ;

EXEC SQL GET DESCRIPTOR 'SELDES' VALUE 1 :t = TYPE, :l = LENGTH ;

EXEC SQL FOR :batch GET DESCRIPTOR LOCAL 'SELDES'
   VALUE :sel_item_no :i = INDICATOR, :v = DATA ; 

SET DESCRIPTOR

Purpose

Use this statement to set information in the descriptor area from host variables. The SET DESCRIPTOR statement supports only host variables for the item names.

Syntax

EXEC SQL [FOR array_size] SET DESCRIPTOR [GLOBAL | LOCAL] 
   {:desc_nam | string_literal} {COUNT = :hv0 | 
   VALUE item_number
   [REF] item_name1 = :hv1 
   [{, [REF] item_nameN = :hvN}]} ;

Variables

array_size

This optional Oracle clause permits using arrays when setting the descriptor items DATA, INDICATOR, and RETURNED_LENGTH only. You cannot use other items in a SET DESCRIPTOR that contains the FOR clause. All host variable array sizes must match. Use the same array size for the SET statement that you use for the FETCH statement.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

The descriptor name. It follows the rules in ALLOCATE DESCRIPTOR.

COUNT

The number of bind (input) or define (output) variables.

VALUE item_number

Position in the dynamic SQL statement of a host variable.

hv1 .. hvN

The host variables (not constants) that you set.

item_nameI

In a similar way to the GET DESCRIPTOR syntax desc_item_name can take on these values.


See Also:

"GET DESCRIPTOR"

Table 14-6 Descriptor Item Names for SET DESCRIPTOR

Descriptor Item NameMeaning

TYPE

Use negative value of the Oracle type if there is no corresponding ANSI type.

LENGTH

Maximum length of data in the column.

INDICATOR

The associated indicator value. Set for reference semantics.

DATA

Value of the data to be set. Set for reference semantics.

CHARACTER_SET_NAME

Column's character set.

TYPE

Use negative value of the Oracle type if there is no corresponding ANSI type.



See Also:


The Oracle extensions to the descriptor item names are:

Table 14-7 Oracle Extensions to Descriptor Item Names for SET DESCRIPTOR

Descriptor Item NameMeaning

RETURNED_LENGTH

Length returned after a FETCH. Set if reference semantics is being used.

NATIONAL_CHARACTER

Set to 2 when the input host variable is an NCHAR or NVARCHAR2 type.

Set to 0 when the National Character setting is clear.

HOST_STRIDE_LENGTH

Size of the host variable struct in bytes.

INDICATOR_STRIDE_LENGTH

Size of the indicator variable in bytes.

RETURNED_LENGTH_STRIDE

Size of the returned-length struct in bytes.

USER_DEFINED_TYPE_NAME

Name of object type.

USER_DEFINED_TYPE_NAME_LENGTH

Length of name of object type.

USER_DEFINED_TYPE_SCHEMA

Used for character representation of the object's schema.

USER_DEFINED_TYPE_SCHEMA_LENGTH

Length of USER_DEFINED_TYPE_SCHEMA.


Usage Notes

Reference semantics is another optional Oracle extension that speeds performance. Use the keyword REF before these descriptor items names only: DATA, INDICATOR, RETURNED_LENGTH. When you use the REF keyword you do not need to use a GET statement. Complex data types (object and collection types, arrays of structs, and the DML returning clause) all require the REF form of SET DESCRIPTOR.

If the program reuses DESCRIPTOR for another SQL, the old values of DESCRIPTOR remain.

When REF is used the associated host variable itself is used in the SET. The GET is not needed in this case. The RETURNED_LENGTH can only be set when you use the REF semantics, not the value semantics.

Use the same array size for the SET or GET statements that you use in the FETCH.

Set the NATIONAL_CHAR field to 2 for NCHAR host input values.

Set the NATIONAL_CHARACTER field to 0 when DESCRIPTOR is used for NCHAR host input values in the old SQL.

When setting an object type's characteristics, you must set USER_DEFINED_TYPE_NAME and USER_DEFINED_TYPE_NAME_LENGTH.

If omitted, USER_DEFINED_TYPE_SCHEMA and USER_DEFINED_TYPE_SCHEMA_LENGTH default to the current connection.

Set CHARACTER_SET_NAME to UTF16 for client-side Unicode support. The data will be in UCS2 encoding and the RETURNED_LENGTH is in CHARS.

Example

int bindno = 2 ;
short indi = -1 ;
char data = "ignore" ;
int batch = 1 ;

EXEC SQL FOR :batch ALLOCATE DESCRIPTOR 'binddes' ;
EXEC SQL SET DESCRIPTOR GLOBAL :binddes COUNT = 3 ;
EXEC SQL FOR :batch SET DESCRIPTOR :bindes
   VALUE :bindno INDICATOR = :indi, DATA = :data ;
...

See Also:

"Using Arrays for Bulk Operations" for examples of bulk arrays

Use of PREPARE

Purpose

The PREPARE statement used in this method is the same as the PREPARE statement used in the other dynamic SQL methods. An Oracle extension allows a quoted string for the SQL statement, as well as a variable.

Syntax

EXEC SQL PREPARE statement_id FROM :sql_statement ;

Variables

statement_id

This must not be declared; it is a undeclared SQL identifier.

sql_statement

A character string (a constant or a variable) holding the embedded SQL statement.

Example

char* statement = "SELECT ENAME FROM emp WHERE deptno = :d" ;
EXEC SQL PREPARE S1 FROM :statement ;

DESCRIBE INPUT

Purpose

This statement returns information about the bind variables.

Syntax

EXEC SQL DESCRIBE INPUT statement_id USING [SQL] DESCRIPTOR 
   [GLOBAL | LOCAL] {:desc_nam | string_literal} ;

Variables

statement_id

The same as used in PREPARE and DESCRIBE OUTPUT. This must not be declared; it is an undeclared SQL identifier.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

The descriptor name.

Usage Notes

DESCRIBE INPUT only sets COUNT and NAME items.

Examples

EXEC SQL DESCRIBE INPUT S1 USING SQL DESCRIPTOR GLOBAL :binddes ;
EXEC SQL DESCRIBE INPUT S2 USING DESCRIPTOR 'input' ;

DESCRIBE OUTPUT

Purpose

Use this statement to obtain information about the output columns in a PREPAREd statement. The ANSI syntax differs from the older Oracle syntax. The information which is stored in the SQL descriptor area is the number of values returned and associated information such as type, length, and name.

Syntax

EXEC SQL DESCRIBE [OUTPUT] statement_id USING [SQL] DESCRIPTOR
   [GLOBAL | LOCAL] {:desc_nam | string_literal} ;

Variables

statement_id

The same as used in PREPARE. This must not be declared; it is an undeclared SQL identifier.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

The descriptor name.

OUTPUT is the default and can be omitted.

Examples

char* desname = "SELDES" ;
EXEC SQL DESCRIBE S1 USING SQL DESCRIPTOR 'SELDES' ; /* Or, */
EXEC SQL DESCRIBE OUTPUT S1 USING DESCRIPTOR :desname ;

EXECUTE

Purpose

EXECUTE matches input and output variables in a prepared SQL statement and then executes the statement. This ANSI version of EXECUTE differs from the older EXECUTE statement by allowing two descriptors in one statement to support DML returning clause.

Syntax

EXEC SQL [FOR :array_size] EXECUTE statement_id 
    [USING [SQL] DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal}] 
        [INTO [SQL] DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam | string_literal}] ;

Variables

array_size

The number of rows the statement will process.

statement_id

The same as used in PREPARE. This must not be declared; it is an undeclared SQL identifier. It can be a literal.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

The descriptor name.

Usage Notes

The INTO clause implements the DML returning clause for INSERT, UPDATE and DELETE.

Examples

EXEC SQL EXECUTE S1 USING SQL DESCRIPTOR GLOBAL :binddes ;

EXEC SQL EXECUTE S2 USING DESCRIPTOR :bv1 INTO DESCRIPTOR 'SELDES' ;

Use of EXECUTE IMMEDIATE

Purpose

Executes a literal or host variable character string containing the SQL statement.The ANSI SQL form of this statement is the same as in the older Oracle dynamic SQL:

Syntax

EXEC SQL EXECUTE IMMEDIATE {:sql_statement | string_literal}

Variable

sql_statement

The SQL statement or PL/SQL block in a character string.

Example

EXEC SQL EXECUTE IMMEDIATE :statement ;

Use of DYNAMIC DECLARE CURSOR

Purpose

Declares a cursor that is associated with a statement which is a query. This is a form of the generic Declare Cursor statement.

Syntax

EXEC SQL DECLARE cursor_name CURSOR FOR statement_id;

Variables

cursor_name

A cursor variable (a SQL identifier, not a host variable).

statement_id

An undeclared SQL identifier.

Example

EXEC SQL DECLARE C1 CURSOR FOR S1 ; 

OPEN Cursor

Purpose

The OPEN statement associates input parameters with a cursor and then opens the cursor.

Syntax

EXEC SQL [FOR :array_size] OPEN dyn_cursor 
    [[USING [SQL] DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam1 | string_literal}]
    [INTO [SQL] DESCRIPTOR [GLOBAL | LOCAL] {:desc_nam2 | string_literal}]] ;

Variables

array_size

This limit is less than or equal to number specified when the descriptor was allocated.

dyn_cursor

The cursor variable.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

The descriptor name.

Usage Notes

If the prepared statement associated with the cursor contains colons or question marks, a USING clause must be specified, or an error results at runtime. The DML returning clause is supported.

Examples

EXEC SQL OPEN C1 USING SQL DESCRIPTOR :binddes ;

EXEC SQL FOR :limit OPEN C2 USING DESCRIPTOR :b1, :b2 
   INTO SQL DESCRIPTOR :seldes ;

FETCH

Purpose

Fetches a row for a cursor declared with a dynamic DECLARE statement.

Syntax

EXEC SQL [FOR :array_size] FETCH cursor INTO [SQL] DESCRIPTOR 
   [GLOBAL | LOCAL] {:desc_nam | string_literal} ;

Variables

array_size

The number of rows the statement will process.

cursor

The dynamic cursor that was previously declared.

GLOBAL | LOCAL

The optional scope clause defaults to LOCAL if not entered. A local descriptor can be accessed only in the file in which it is allocated. A global descriptor can be used in any module in the compilation unit.

desc_nam

Descriptor name.

Usage Notes

The optional array_size in the FOR clause must be less than or equal to the number specified in the ALLOCATE DESCRIPTOR statement.

Examples

EXEC SQL FETCH FROM C1 INTO DESCRIPTOR 'SELDES' ;

EXEC SQL FOR :arsz FETCH C2 INTO DESCRIPTOR :desc ;

CLOSE a Dynamic Cursor

Purpose

Closes a dynamic cursor. Syntax has not changed from the older Oracle Method 4:

Syntax

EXEC SQL CLOSE cursor ;

Variable

cursor

The dynamic cursor that was previously declared.

Example

EXEC SQL CLOSE C1 ;

Differences From Oracle Dynamic Method 4

The ANSI dynamic SQL interface supports all the datatypes supported by the Oracle dynamic Method 4, with these additions:

  • All datatypes, including object types, result sets, and LOB types are supported by ANSI Dynamic SQL.

  • The ANSI mode uses an internal SQL descriptor area which is an expansion of the external SQLDA used in Oracle older dynamic Method 4 to store its input and output information.

  • New embedded SQL statements are introduced: ALLOCATE DESCRIPTOR, DEALLOCATE DESCRIPTOR, DESCRIBE, GET DESCRIPTOR, and SET DESCRIPTOR.

  • The DESCRIBE statement does not return the names of indicator variables in ANSI Dynamic SQL.

  • ANSI Dynamic SQL does not allow you to specify the maximum size of the returned column name or expression. The default size is set at 128.

  • The descriptor name must be either an identifier in single-quotes or a host variable preceded by a colon.

  • For output, the optional SELECT LIST FOR clause in the DESCRIBE is replaced by the optional keyword OUTPUT. The INTO clause is replaced by the USING DESCRIPTOR clause, which can contain the optional keyword SQL.

  • For input, the optional BIND VARIABLES FOR clause of the DESCRIBE can be replaced by the keyword INPUT. The INTO clause is replaced by the USING DESCRIPTOR clause, which can contain the optional keyword SQL.

  • The optional keyword SQL can come before the keyword DESCRIPTOR in the USING clause of the EXECUTE, FETCH and OPEN statements.

Restrictions

Restrictions in effect on ANSI dynamic SQL are:

  • You cannot mix ANSI and Oracle dynamic SQL methods in the same module.

  • The precompiler option DYNAMIC must be set to ANSI. The precompiler option TYPE_CODE can be set to ANSI only if DYNAMIC is set to ANSI.

  • The SET statement supports only host variables as item names.

Example Programs

The following two programs are in the demo directory.

ansidyn1.pc

This program demonstrates using ANSI Dynamic SQL to process SQL statements which are not known until runtime. It is intended to demonstrate the simplest (though not the most efficient) approach to using ANSI Dynamic SQL. It uses ANSI compatible value semantics and ANSI type codes. ANSI SQLSTATE is used for error numbers. Descriptor names are literals. All input and output is through ANSI varying character type.

The program connects you to ORACLE using your username and password, then prompts you for a SQL statement. Enter legal SQL or PL/SQL statements using regular, not embedded, SQL syntax and terminate each statement with a semicolon. Your statement will be processed. If it is a query, the fetched rows are displayed.

You can enter multiline statements. The limit is 1023 characters. There is a limit on the size of the variables, MAX_VAR_LEN, defined as 255. This program processes up to 40 bind variables and 40 select-list items. DML returning clauses and user defined types are not supported with value semantics.

Precompile the program with mode = ansi, for example:

proc mode=ansi ansidyn1

Using mode=ansi will set dynamic and type_code to ansi.

/*******************************************************************
ANSI Dynamic Demo 1:  ANSI Dynamic SQL with value semantics,
                                   literal descriptor names
                                   and ANSI type codes

This program demonstates using ANSI Dynamic SQL to process SQL
statements which are not known until runtime.  It is intended to
demonstrate the simplest (though not the most efficient) approach
to using ANSI Dynamic SQL.  It uses ANSI compatible value semantics
and ANSI type codes. ANSI Sqlstate is used for error numbers. 
Descriptor names are literals. All input and output is through ANSI the
varying character type.

The program connects you to ORACLE using your username and password,
then prompts you for a SQL statement.  Enter legal SQL or PL/SQL 
statements using regular, not embedded, SQL syntax and terminate each 
statement with a seimcolon.  Your statement will be processed.  If it
is a query, the fetched rows are displayed.  

You can enter multiline statements.  The limit is 1023 characters.
There is a limit on the size of the variables, MAX_VAR_LEN, defined as 255.
This program processes up to 40 bind variables and 40 select-list items.
DML returning statments and user defined types are not supported with 
value semantics.

Precompile the program with mode=ansi, for example:
 
proc mode=ansi ansidyn1

Using mode=ansi will set dynamic and type_code to ansi.

*******************************************************************/

#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <stdlib.h>
#include <sqlcpr.h>

#define MAX_OCCURENCES 40
#define MAX_VAR_LEN    255
#define MAX_NAME_LEN   31

#ifndef NULL
#define NULL  0
#endif


/* Prototypes */
#if defined(__STDC__)
  void sql_error(void);
  int oracle_connect(void);
  int get_dyn_statement(void);
  int process_input(void);
  int process_output(void);
  void help(void);
#else
  void sql_error(/*_ void _*/);
  int oracle_connect(/*_ void _*/);
  int get_dyn_statement(/* void _*/);
  int process_input(/*_ void _*/);
  int process_output(/*_ void _*/);
  void help(/*_ void _*/);
#endif

EXEC SQL INCLUDE sqlca;

char SQLSTATE[6];

/* global variables */
EXEC SQL BEGIN DECLARE SECTION;
 char    dyn_statement[1024];
 char SQLSTATE[6];
EXEC SQL END DECLARE SECTION;




/* Define a buffer to hold longjmp state info. */
jmp_buf jmp_continue;

/* A global flag for the error routine. */
int parse_flag = 0;
/* A global flag to indicate statement is a select */
int select_found;   

void main()
{

    /* Connect to the database. */
    if (oracle_connect() != 0)
        exit(1);

    EXEC SQL WHENEVER SQLERROR DO sql_error();

    /* Allocate the input and output descriptors. */
    EXEC SQL ALLOCATE DESCRIPTOR 'input_descriptor';
    EXEC SQL ALLOCATE DESCRIPTOR 'output_descriptor';

    /* Process SQL statements. */
    for (;;) 
    {
        (void) setjmp(jmp_continue);

        /* Get the statement.  Break on "exit". */
        if (get_dyn_statement() != 0)
            break;

        /* Prepare the statement and declare a cursor. */
        parse_flag = 1;     /* Set a flag for sql_error(). */
        EXEC SQL PREPARE S FROM :dyn_statement;
        parse_flag = 0;     /* Unset the flag. */

        EXEC SQL DECLARE C CURSOR FOR S;

        /* Call the function that processes the input. */
        if (process_input())
            exit(1);
 
        /* Open the cursor and execute the statement. */
        EXEC SQL OPEN C USING DESCRIPTOR 'input_descriptor';

        /* Call the function that processes the output. */
        if (process_output())
            exit(1);

        /* Close the cursor. */
        EXEC SQL CLOSE C;

    }   /* end of for(;;) statement-processing loop */


    /* Deallocate the descriptors */
    EXEC SQL DEALLOCATE DESCRIPTOR 'input_descriptor';
    EXEC SQL DEALLOCATE DESCRIPTOR 'output_descriptor';

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL COMMIT WORK;
    puts("\nHave a good day!\n");

    EXEC SQL WHENEVER SQLERROR DO sql_error();
    return;
}



int get_dyn_statement()
{
    char *cp, linebuf[256];
    int iter, plsql;

    for (plsql = 0, iter = 1; ;)
    {
        if (iter == 1)
        {
            printf("\nSQL> ");
            dyn_statement[0] = '\0';
            select_found = 0;
        }
        
        fgets(linebuf, sizeof linebuf, stdin);

        cp = strrchr(linebuf, '\n');
        if (cp && cp != linebuf)
            *cp = ' ';
        else if (cp == linebuf)
            continue;

        if ((strncmp(linebuf, "SELECT", 6) == 0) ||
            (strncmp(linebuf, "select", 6) == 0))
        {
            select_found=1;;
        }

        if ((strncmp(linebuf, "EXIT", 4) == 0) ||
            (strncmp(linebuf, "exit", 4) == 0))
        {
            return -1;
        }

        else if (linebuf[0] == '?' ||
            (strncmp(linebuf, "HELP", 4) == 0) ||
            (strncmp(linebuf, "help", 4) == 0))
        {
            help();
            iter = 1;
            continue;
        }

        if (strstr(linebuf, "BEGIN") ||
            (strstr(linebuf, "begin")))
        {
            plsql = 1;
        }

        strcat(dyn_statement, linebuf);

        if ((plsql && (cp = strrchr(dyn_statement, '/'))) ||
            (!plsql && (cp = strrchr(dyn_statement, ';'))))
        {
            *cp = '\0';
            break;
        }
        else
        {
            iter++;
            printf("%3d  ", iter);
        }
    }
    return 0;
}


int process_input()
{
    int i;
    EXEC SQL BEGIN DECLARE SECTION;
      char name[31];
      int  input_count, input_len, occurs, ANSI_varchar_type;
      char input_buf[MAX_VAR_LEN];
    EXEC SQL END DECLARE SECTION;

    EXEC SQL DESCRIBE INPUT S USING DESCRIPTOR 'input_descriptor';
    EXEC SQL GET DESCRIPTOR 'input_descriptor' :input_count = COUNT; 
       
    ANSI_varchar_type=12;
    for (i=0; i < input_count; i++)
    {
        occurs = i +1;                       /* occurence is 1 based */
        EXEC SQL GET DESCRIPTOR 'input_descriptor' 
                 VALUE :occurs :name = NAME;
        printf ("\nEnter value for input variable %*.*s:  ", 10,31, name);
        fgets(input_buf, sizeof(input_buf), stdin);
        input_len = strlen(input_buf) - 1;  /* get rid of new line */
        input_buf[input_len] = '\0';        /* null terminate */
        EXEC SQL SET DESCRIPTOR 'input_descriptor'
                 VALUE :occurs TYPE = :ANSI_varchar_type, 
                               LENGTH = :input_len,
                               DATA = :input_buf;
    }
    return(sqlca.sqlcode);
}


int process_output()
{
   int i, j;
   EXEC SQL BEGIN DECLARE SECTION;
     int output_count, occurs, type, len, col_len;
     short indi;
     char data[MAX_VAR_LEN], name[MAX_NAME_LEN];
   EXEC SQL END DECLARE SECTION;
   if (!select_found)
       return(0);   

   EXEC SQL DESCRIBE OUTPUT S USING DESCRIPTOR 'output_descriptor';
   
   EXEC SQL GET DESCRIPTOR 'output_descriptor' :output_count = COUNT;


   printf ("\n");
   type = 12;            /* ANSI VARYING character type */
   len = MAX_VAR_LEN;    /* use the max allocated length */
   for (i = 0; i < output_count; i++)
    {
        occurs = i + 1;
        EXEC SQL GET DESCRIPTOR 'output_descriptor' VALUE :occurs
                 :name = NAME;
        printf("%-*.*s ", 9,9, name);
        EXEC SQL SET DESCRIPTOR 'output_descriptor' VALUE :occurs 
                 TYPE = :type, LENGTH = :len;
    }   
    printf("\n");

    /* FETCH each row selected and print the column values. */
    EXEC SQL WHENEVER NOT FOUND GOTO end_select_loop;

    for (;;)
    {
        EXEC SQL FETCH C INTO DESCRIPTOR 'output_descriptor';
        for (i=0; i < output_count; i++)
          {
            occurs = i + 1;
            EXEC SQL GET DESCRIPTOR 'output_descriptor' VALUE :occurs
                 :data = DATA, :indi = INDICATOR;
            if (indi == -1)       
              printf("%-*.*s ", 9,9, "NULL");
            else
              printf("%-*.*s ", 9,9, data);  /* simplified output formatting */ 
                          /* truncation will occur, but columns will line up */
          }                             
         printf ("\n");
    }
end_select_loop:
    return(0);
}



void help()
{
    puts("\n\nEnter a SQL statement or a PL/SQL block at the SQL> prompt.");
    puts("Statements can be continued over several lines, except");
    puts("within string literals.");
    puts("Terminate a SQL statement with a semicolon.");
    puts("Terminate a PL/SQL block (which can contain embedded semicolons)");
    puts("with a slash (/).");
    puts("Typing \"exit\" (no semicolon needed) exits the program.");
    puts("You typed \"?\" or \"help\" to get this message.\n\n");
}


void sql_error()
{
    /* ORACLE error handler */
    printf("\n\nANSI sqlstate: %s: ", SQLSTATE);
    printf ("\n\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
    if (parse_flag)
        printf
        ("Parse error at character offset %d in SQL statement.\n",
           sqlca.sqlerrd[4]);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK;
    longjmp(jmp_continue, 1);
}


int oracle_connect()
{
    EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR  username[128];
        VARCHAR  password[32];
    EXEC SQL END DECLARE SECTION;

    printf("\nusername: ");
    fgets((char *) username.arr, sizeof username.arr, stdin);
    username.arr[strlen((char *) username.arr)-1] = '\0';
    username.len = (unsigned short)strlen((char *) username.arr);

    printf("password: ");
    fgets((char *) password.arr, sizeof password.arr, stdin);
    password.arr[strlen((char *) password.arr) - 1] = '\0';
    password.len = (unsigned short)strlen((char *) password.arr);


    EXEC SQL WHENEVER SQLERROR GOTO connect_error;

    EXEC SQL CONNECT :username IDENTIFIED BY :password;

    printf("\nConnected to ORACLE as user %s.\n", username.arr);

    return 0;

connect_error:
    fprintf(stderr, "Cannot connect to ORACLE as user %s\n", username.arr);
    return -1;
}

ansidyn2.pc

This program demonstrates using ANSI Dynamic SQL to process SQL statements which are not known until runtime. It uses the Oracle extensions for batch processing and reference semantics.

The program connects you to ORACLE using your username and password, then prompts you for a SQL statement. Enter legal SQL or PL/SQL statement using interactive, not embedded, SQL syntax, terminating the statement with a semicolon. Your statement will be processed. If it is a query, the fetched rows are displayed.

You can enter multiline statements. The limit is 1023 characters. There is a limit on the size of the variables, MAX_VAR_LEN, defined as 255. This program processes up to 40 bind variables and 40 select-list items.

Precompile the program with dynamic = ansi, for example:

proc dynamic=ansi ansidyn2

/*******************************************************************
ANSI Dynamic Demo 2:  ANSI Dynamic SQL with reference semantics,
                           batch processing and global descriptor
                           names in host variables
                           
This program demonstates using ANSI Dynamic SQL to process SQL
statements which are not known until runtime.  It uses the Oracle
extensions for batch processing and reference semantics.

The program connects you to ORACLE using your username and password,
then prompts you for a SQL statement.  Enter legal SQL or PL/SQL 
statement using interactive, not embedded, SQL syntax, terminating the 
statement with a seimcolon.  Your statement will be processed.  If it
is a query, the fetched rows are displayed. 

If your statement has input bind variables (other than in a where clause),
the program will ask for an input array size and then allow you to enter 
that number of input values. If your statment has output, the program will
ask you for an output array size and will do array fetchng using that value.
It will also output the rows fetched in one batch together, so using a small
value for the output array size will improve the look of the output.  
For example, connected as scott/tiger, try select empno, ename from emp
with an output array size of 4;

You can enter multiline statements.  The limit is 1023 characters.
There is a limit on the size of the variables, MAX_VAR_LEN, defined as 255.
This program processes up to 40 bind variables and 40 select-list items.

Precompile with program with dynamic=ansi, for example:
 
proc dynamic=ansi ansidyn2

*******************************************************************/

#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <stdlib.h>
#include <sqlcpr.h>


#define MAX_OCCURENCES  40
#define MAX_ARRSZ      100
#define MAX_VAR_LEN    255
#define MAX_NAME_LEN    31

#ifndef NULL
#define NULL  0
#endif


/* Prototypes */
#if defined(__STDC__)
  void sql_error(void);
  int oracle_connect(void);
  int get_dyn_statement(void);
  int process_input(void);
  int process_output(void);
  void rows_processed(void);
  void help(void);
#else
  void sql_error(/*_ void _*/);
  int oracle_connect(/*_ void _*/);
  int get_dyn_statement(/* void _*/);
  int process_input(/*_ void _*/);
  int process_output(/*_ void _*/);
  void rows_processed(/*_ void _*/);
  void help(/*_ void _*/);
#endif

EXEC SQL INCLUDE sqlca;

/* global variables */
char    dyn_statement[1024];                      /* statement variable     */
EXEC SQL VAR dyn_statement IS STRING(1024);

char  indesc[]="input_descriptor";                /* descriptor names       */
char outdesc[]="output_descriptor";
char   input[MAX_OCCURENCES][MAX_ARRSZ][MAX_VAR_LEN +1 ],    /* data areas */
      output[MAX_OCCURENCES][MAX_ARRSZ][MAX_VAR_LEN + 1];

short outindi[MAX_OCCURENCES][MAX_ARRSZ];        /* output indicators      */
short *iptr;

int   in_array_size;     /* size of input batch, that is, number of rows */
int   out_array_size;    /* size of input batch, that is, number of rows */
int   max_array_size=MAX_ARRSZ;   /* maximum arrays size used for allocates */

char *dml_commands[] = {"SELECT", "select", "INSERT", "insert",
                        "UPDATE", "update", "DELETE", "delete"};

int select_found, cursor_open = 0;

/* Define a buffer to hold longjmp state info. */
jmp_buf jmp_continue;

/* A global flag for the error routine. */
int parse_flag = 0;

void main()
{

    /* Connect to the database. */
    if (oracle_connect() != 0)
        exit(1);

    EXEC SQL WHENEVER SQLERROR DO sql_error();

    /* Allocate the input and output descriptors. */
    EXEC SQL FOR :max_array_size
             ALLOCATE DESCRIPTOR GLOBAL :indesc;
    EXEC SQL FOR :max_array_size
             ALLOCATE DESCRIPTOR GLOBAL :outdesc;

    /* Process SQL statements. */
    for (;;) 
    {
        (void) setjmp(jmp_continue);

        /* Get the statement.  Break on "exit". */
        if (get_dyn_statement() != 0)
            break;

        /* Prepare the statement and declare a cursor. */
        parse_flag = 1;     /* Set a flag for sql_error(). */
        EXEC SQL PREPARE S FROM :dyn_statement;
        parse_flag = 0;     /* Unset the flag. */

        EXEC SQL DECLARE C CURSOR FOR S;

        /* Call the function that processes the input. */
        if (process_input())
            exit(1);

        /* Open the cursor and execute the statement. */
        EXEC SQL FOR :in_array_size
            OPEN C USING DESCRIPTOR GLOBAL :indesc;
        cursor_open = 1;
 
        /* Call the function that processes the output. */
        if (process_output())
            exit(1);

        /* Tell user how many rows were processed. */
        rows_processed();

    }   /* end of for(;;) statement-processing loop */

 
    /* Close the cursor. */
    if (cursor_open)
      EXEC SQL CLOSE C;

    /* Deallocate the descriptors */
    EXEC SQL DEALLOCATE DESCRIPTOR GLOBAL :indesc;
    EXEC SQL DEALLOCATE DESCRIPTOR GLOBAL :outdesc;

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL COMMIT WORK RELEASE;
    puts("\nHave a good day!\n");

    EXEC SQL WHENEVER SQLERROR DO sql_error();
    return;
}



int get_dyn_statement()
{
    char *cp, linebuf[256];
    int iter, plsql;

    for (plsql = 0, iter = 1; ;)
    {
        if (iter == 1)
        {
            printf("\nSQL> ");
            dyn_statement[0] = '\0';
            select_found = 0;
        }
        
        fgets(linebuf, sizeof linebuf, stdin);

        cp = strrchr(linebuf, '\n');
        if (cp && cp != linebuf)
            *cp = ' ';
        else if (cp == linebuf)
            continue;

        if ((strncmp(linebuf, "SELECT", 6) == 0) ||
            (strncmp(linebuf, "select", 6) == 0))
        {
            select_found=1;;
        }

        if ((strncmp(linebuf, "EXIT", 4) == 0) ||
            (strncmp(linebuf, "exit", 4) == 0))
        {
            return -1;
        }

        else if (linebuf[0] == '?' ||
            (strncmp(linebuf, "HELP", 4) == 0) ||
            (strncmp(linebuf, "help", 4) == 0))
        {
            help();
            iter = 1;
            continue;
        }

        if (strstr(linebuf, "BEGIN") ||
            (strstr(linebuf, "begin")))
        {
            plsql = 1;
        }

        strcat(dyn_statement, linebuf);

        if ((plsql && (cp = strrchr(dyn_statement, '/'))) ||
            (!plsql && (cp = strrchr(dyn_statement, ';'))))
        {
            *cp = '\0';
            break;
        }
        else
        {
            iter++;
            printf("%3d  ", iter);
        }
    }
    return 0;
}


int process_input()
{
    int i, j;
    char name[31];
    int  input_count, input_len= MAX_VAR_LEN;
    int  occurs, string_type = 5;
    int  string_len;
    ch$ar arr_size[3];

    EXEC SQL DESCRIBE INPUT S USING DESCRIPTOR GLOBAL :indesc;
    EXEC SQL GET DESCRIPTOR GLOBAL :indesc :input_count = COUNT; 

    if (input_count > 0 && !select_found )
       {     /* get input array size */
          printf ("\nEnter value for input array size (max is %d) :  ", 
                           max_array_size);
        fgets(arr_size, 4, stdin);
        in_array_size = atoi(arr_size); 
       }
    else
       { 
         in_array_size = 1;
       }
    for (i=0; i < input_count; i++)
    {
        occurs = i +1;                       /* occurence is 1 based */
        EXEC SQL GET DESCRIPTOR GLOBAL :indesc 
                 VALUE :occurs :name = NAME;

        for (j=0; j < in_array_size; j++)
        {
          if (in_array_size == 1)
            printf ("\nEnter value for input variable %*.*s:  ",10,31, name);
          else 
            printf ("\nEnter %d%s value for input variable %*.*s:  ",
               j +1, ((j==0) ?  "st" :  (j==1) ? "nd" : (j==2) ? "rd" :"th"),
                      10,31, name);
          fgets(input[i][j], sizeof(input[i][j]), stdin);
          string_len = strlen(input[i][j]);
          input[i][j][string_len - 1 ] = '\0';   /* change \n to \0 */
        }
        EXEC SQL SET DESCRIPTOR GLOBAL :indesc
                 VALUE :occurs TYPE = :string_type, LENGTH = :input_len;
        EXEC SQL FOR :in_array_size
                 SET DESCRIPTOR GLOBAL :indesc
                     VALUE :occurs  REF DATA = :input[i];
    }

    return(sqlca.sqlcode);
}


int process_output()
{
   int i, j;
   int output_count, occurs;
   int type, output_len= MAX_VAR_LEN;
   char name[MAX_OCCURENCES][MAX_NAME_LEN];
   int rows_this_fetch=0, cumulative_rows=0;
   char arr_size[3];
   if (!select_found)
      return(0);   
   EXEC SQL DESCRIBE OUTPUT S USING DESCRIPTOR GLOBAL :outdesc;
   
   EXEC SQL GET DESCRIPTOR GLOBAL :outdesc :output_count = COUNT;
  
   if (output_count > 0 )
      {
        printf ("\nEnter value for output array size (max is %d) :  ", 
                       max_array_size);
        fgets(arr_size, 4, stdin);
        out_array_size = atoi(arr_size); 
      }
   if (out_array_size < 1)    /* must have at least one */
       out_array_size = 1;

   printf ("\n");
   
   for (i = 0; i < output_count; i++)
   {
      occurs = i + 1;
      EXEC SQL GET DESCRIPTOR GLOBAL :outdesc VALUE :occurs
               :type = TYPE, :name[i] = NAME;
      occurs = i + 1;                         /* occurence is one based */
      type = 5;  /* force all data to be null terminated character */
      EXEC SQL SET DESCRIPTOR GLOBAL :outdesc VALUE :occurs 
               TYPE = :type, LENGTH = :output_len;
   
      iptr = (short *)&outindi[i]; /* no mult-dimension non-char host vars */
      EXEC SQL FOR :out_array_size
               SET DESCRIPTOR GLOBAL :outdesc VALUE :occurs 
               REF DATA = :output[i], REF INDICATOR = :iptr;
   }   
   
   
   
   EXEC SQL WHENEVER NOT FOUND GOTO end_select_loop;
   
   /* print the column headings */
   for (j=0; j < out_array_size; j++)
      for (i=0; i < output_count; i++)
         printf("%-*.*s ", 9,9, name[i]);
   printf("\n");
   
   /* FETCH each row selected and print the column values. */
   for (;;)
   {
      EXEC SQL FOR :out_array_size 
              FETCH C INTO DESCRIPTOR GLOBAL :outdesc;
      rows_this_fetch = sqlca.sqlerrd[2] - cumulative_rows;
      cumulative_rows = sqlca.sqlerrd[2];
      if (rows_this_fetch)
      for (j=0; j < out_array_size && j < rows_this_fetch; j++)
      {           /* output by columns using simplified formatting */
         for (i=0; i < output_count; i++)
           {                              
                if (outindi[i][j] == -1)       
                   printf("%-*.*s ", 9, 9, "NULL");
               else
                  printf("%-*.*s ", 9, 9, output[i][j]);  /* simplified */
                              /* output formatting may cause truncation */
                              /* but columns will line up */
           } 
      }
       printf ("\n");
   }

end_select_loop:
   /* print any unprinted rows */
   rows_this_fetch = sqlca.sqlerrd[2] - cumulative_rows;
   cumulative_rows = sqlca.sqlerrd[2];
   if (rows_this_fetch)
     for (j=0; j < out_array_size && j < rows_this_fetch; j++)
       {           /* output by columns using simplified formatting */
         for (i=0; i < output_count; i++)
           {                              
              if (outindi[i][j] == -1)       
                   printf("%-*.*s ",9, 9, "NULL");
               else
                  printf("%-*.*s ", 9, 9, output[i][j]); 
            } 
        }
   return(0);
}

void rows_processed()
{  
   int i;
   for (i = 0; i < 8; i++)
     {
       if (strncmp(dyn_statement, dml_commands[i], 6) == 0)
         {
            printf("\n\n%d row%c processed.\n", sqlca.sqlerrd[2],
                       sqlca.sqlerrd[2] == 1 ? ' ' : 's');
            break;
         }
     }
   return;
}


void help()
{
    puts("\n\nEnter a SQL statement or a PL/SQL block at the SQL> prompt.");
    puts("Statements can be continued over several lines, except");
    puts("within string literals.");
    puts("Terminate a SQL statement with a semicolon.");
    puts("Terminate a PL/SQL block (which can contain embedded semicolons)");
    puts("with a slash (/).");
    puts("Typing \"exit\" (no semicolon needed) exits the program.");
    puts("You typed \"?\" or \"help\" to get this message.\n\n");
}


void sql_error()
{
    /* ORACLE error handler */
    printf ("\n\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
    if (parse_flag)
        printf
        ("Parse error at character offset %d in SQL statement.\n",
           sqlca.sqlerrd[4]);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK;
    longjmp(jmp_continue, 1);
}


int oracle_connect()
{
    EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR  username[128];
        VARCHAR  password[32];
    EXEC SQL END DECLARE SECTION;

    printf("\nusername: ");
    fgets((char *) username.arr, sizeof username.arr, stdin);
    username.arr[strlen((char *) username.arr)-1] = '\0';
    username.len = (unsigned short)strlen((char *) username.arr);

    printf("password: ");
    fgets((char *) password.arr, sizeof password.arr, stdin);
    password.arr[strlen((char *) password.arr) - 1] = '\0';
    password.len = (unsigned short)strlen((char *) password.arr);


    EXEC SQL WHENEVER SQLERROR GOTO connect_error;

    EXEC SQL CONNECT :username IDENTIFIED BY :password;

    printf("\nConnected to ORACLE as user %s.\n", username.arr);

    return 0;

connect_error:
    fprintf(stderr, "Cannot connect to ORACLE as user %s\n", username.arr);
    return -1;
}

PK_> 8$PK+AOEBPS/pc_03dbc.htm Database Concepts

3 Database Concepts

This chapter explains some basic database concepts and how to perform transaction processing. You learn the basic techniques that safeguard the consistency of your database, including how to control if changes to Oracle data are made permanent or undone.

This chapter contains the following topics:

Connect to the Database

The complete syntax of the CONNECT statement will be discussed in the next few sections. Here it is:

EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd | :usr_psw }
   [[ AT { dbname | :host_variable }] USING :connect_string ]
      [ {ALTER AUTHORIZATION :newpswd  |  IN { SYSDBA | SYSOPER } MODE} ] ;

Your Pro*C/C++ program must connect to the database before querying or manipulating data. To log on, simply use the CONNECT statement

EXEC SQL CONNECT :username IDENTIFIED BY :password ; 

where username and password are char or VARCHAR host variables.

Or, you can use the statement

EXEC SQL CONNECT :usr_pwd; 

where the host variable usr_pwd contains your username and password separated by a slash character (/).

These are simplified subsets of the CONNECT statement.

The CONNECT statement must be the first SQL statement executed by the program. That is, other SQL statements can physically but not logically precede the CONNECT statement in the precompilation unit.

To supply the Oracle username and password separately, you define two host variables as character strings or VARCHARs. (If you supply a username containing both username and password, only one host variable is needed.)

Make sure to set the username and password variables before the CONNECT is executed, or it will fail. Your program can prompt for the values, or you can hard-code them as follows:

char *username = "SCOTT"; 
char *password = "TIGER"; 
... 
EXEC SQL WHENEVER SQLERROR ... 
EXEC SQL CONNECT :username IDENTIFIED BY :password; 

However, you cannot hard-code a username and password into the CONNECT statement. You also cannot use quoted literals. For example, both of the following statements are invalid:

EXEC SQL CONNECT SCOTT IDENTIFIED BY TIGER; 
EXEC SQL CONNECT 'SCOTT' IDENTIFIED BY 'TIGER'; 

Hard coding usernames and passwords is not recommended practise.

Using the ALTER AUTHORIZATION Clause to Change Passwords

Pro*C/C++ provides client applications with a convenient way to change a user password at runtime through a simple extension to the EXEC SQL CONNECT statement.

This section describes the possible outcomes of different variations of the ALTER AUTHORIZATION clause.

Standard CONNECT

If an application issues the following statement

EXEC SQL CONNECT ..;   /* No ALTER AUTHORIZATION clause */

it performs a normal connection attempt. The possible results include the following:

  • The application will connect without issue.

  • The application will connect, but will receive a password warning. The warning indicates that the password has expired but is in a grace period which will allow Logons. At this point, the user is encouraged to change the password before the account becomes locked.

  • The application will fail to connect. Possible causes include the following:

    • The password is incorrect.

    • The account has expired, and is possibly in a locked state.

Change Password on CONNECT

The following CONNECT statement

EXEC SQL CONNECT .. ALTER AUTHORIZATION :newpswd;

indicates that the application wants to change the account password to the value indicated by newpswd. After the change is made, an attempt is made to connect as user/newpswd. This can have the following results:

  • The application will connect without issue

  • The application will fail to connect. This could be due to either of the following:

    • Password verification failed for some reason. In this case the password remains unchanged.

    • The account is locked. Changes to the password are not permitted.

Connecting Using Oracle Net

To connect using an Oracle Net driver, substitute a service name, as defined in your tnsnames.ora configuration file or in Oracle Names.

If you are using Oracle Names, the name server obtains the service name from the network definition database.

See Oracle Net Services Administrator's Guide for more information about Oracle Net.

Automatic Connects

You can automatically connect to Oracle with the username

CLUSTER$username 

where username is the current operating system username, and CLUSTER$username is a valid Oracle database username. (The actual value for CLUSTER$ is defined in the INIT.ORA parameter file.) You simply pass to the Pro*C/C++ Precompiler a slash character, as follows:

... 
char  *oracleid = "/"; 
... 
EXEC SQL CONNECT :oracleid; 

This automatically connects you as user CLUSTER$username. For example, if your operating system username is RHILL, and CLUSTER$RHILL is a valid Oracle username, connecting with '/' automatically logs you on to Oracle as user CLUSTER$RHILL.

You can also pass a '/' in a string to the precompiler. However, the string cannot contain trailing blanks. For example, the following CONNECT statement will fail:

... 
char oracleid[10] = "/    ";
... 
EXEC SQL CONNECT :oracleid; 

The AUTO_CONNECT Precompiler Option

If AUTO_CONNECT=YES, and the application is not already connected to a database when it processes the first executable SQL statement, it attempts to connect using the userid

CLUSTER$<username>

where username is your current operating system user or task name and CLUSTER$username is a valid Oracle userid. The default value of AUTO_CONNECT is NO.

When AUTO_CONNECT=NO, you must use the CONNECT statement in your program to connect to Oracle.

SYSDBA or SYSOPER System Privileges

Append the following optional string after all other clauses to log on with either SYSDBA or SYSOPER system privileges:

[IN { SYSDBA | SYSOPER } MODE]

For example:

EXEC SQL CONNECT ... IN SYSDBA MODE ;

Here are the restrictions that apply to this option:

Advanced Connection Options

This section describes the available options for advanced connections.

Some Preliminaries

The communicating points in a network are called nodes. Oracle Net lets you transmit information (SQL statements, data, and status codes) over the network from one node to another.

A protocol is a set of rules for accessing a network. The rules establish such things as procedures for recovering after a failure and formats for transmitting data and checking errors.

The Oracle Net syntax for connecting to the default database in the local domain is simply to use the service name for the database.

If the service name is not in the default (local) domain, you must use a global specification (all domains specified). For example:

HR.US.ORACLE.COM

Concurrent Logons

Pro*C/C++ supports distributed processing through Oracle Net. Your application can concurrently access any combination of local and remote databases or make multiple connections to the same database. In Figure 3-1, an application program communicates with one local and three remote Oracle databases. ORA2, ORA3, and ORA4 are simply logical names used in CONNECT statements.

Figure 3-1 Connecting through Oracle Net

Connecting through Oracle Net
Description of "Figure 3-1 Connecting through Oracle Net"

By eliminating the boundaries in a network between different machines and operating systems, Oracle Net provides a distributed processing environment for Oracle tools. This section shows you how Pro*C/C++ supports distributed processing through Oracle Net. You learn how your application can

  • Directly or indirectly access other databases

  • Concurrently access any combination of local and remote databases

  • Make multiple connections to the same database

For details on installing Oracle Net and identifying available databases, refer to the Oracle Database Net Services Administrator's Guide and your system-specific Oracle documentation.

Default Databases and Connections

Each node has a default database. If you specify a database name, but no domain in your CONNECT statement, you connect to the default database on the named local or remote node.

A default connection is made by a CONNECT statement that has no AT clause. The connection can be to any default or nondefault database at any local or remote node. SQL statements without an AT clause are executed against the default connection. Conversely, a nondefault connection is made by a CONNECT statement that has an AT clause. SQL statements with an AT clause are executed against the nondefault connection.

All database names must be unique, but two or more database names can specify the same connection. That is, you can have multiple connections to any database on any node.

Explicit Connections

Usually, you establish a connection to Oracle as follows:

EXEC SQL CONNECT :username IDENTIFIED BY :password; 

You can also use

EXEC SQL CONNECT :usr_pwd; 

where usr_pwd contains username/password.

You can automatically connect to Oracle with the userid

CLUSTER$username 

where username is your current operating system user or task name and CLUSTER$username is a valid Oracle userid. You simply pass to the precompiler a slash (/) character, as follows:

char oracleid = '/'; 
...
EXEC SQL CONNECT :oracleid; 

This automatically connects you as user CLUSTER$username.

If you do not specify a database and node, you are connected to the default database at the current node. If you want to connect to a different database, you must explicitly identify that database.

With explicit connections, you connect to another database directly, giving the connection a name that will be referenced in SQL statements. You can connect to several databases at the same time and to the same database multiple times.

Single Explicit Connection

In the following example, you connect to a single nondefault database at a remote node:

/* declare needed host variables */
char  username[10]  = "scott"; 
char  password[10]  = "tiger";
char  db_string[20] = "NYNON"; 

/* give the database connection a unique name */ 
EXEC SQL DECLARE DB_NAME DATABASE; 

/* connect to the nondefault database  */
EXEC SQL CONNECT :username IDENTIFIED BY :password 
   AT DB_NAME USING :db_string; 

The identifiers in this example serve the following purposes:

  • The host variables username and password identify a valid user.

  • The host variable db_string contains the Oracle Net syntax for connecting to a nondefault database at a remote node.

  • The undeclared identifier DB_NAME names a nondefault connection; it is an identifier used by Oracle, not a host or program variable.

The USING clause specifies the network, machine, and database associated with DB_NAME. Later, SQL statements using the AT clause (with DB_NAME) are executed at the database specified by db_string.

Alternatively, you can use a character host variable in the AT clause, as the following example shows:

/* declare needed host variables */ 
char  username[10]  = "scott"; 
char  password[10]  = "tiger";
char  db_name[10]   = "oracle1"; 
char  db_string[20] = "NYNON"; 

/* connect to the nondefault database using db_name */
EXEC SQL CONNECT :username IDENTIFIED BY :password 
   AT :db_name USING :db_string; 
... 

If db_name is a host variable, the DECLARE DATABASE statement is not needed. Only if DB_NAME is an undeclared identifier must you execute a DECLARE DB_NAME DATABASE statement before executing a CONNECT ... AT DB_NAME statement.

SQL Operations

If granted the privilege, you can execute any SQL data manipulation statement at the nondefault connection. For example, you might execute the following sequence of statements:

EXEC SQL AT DB_NAME SELECT ... 
EXEC SQL AT DB_NAME INSERT ... 
EXEC SQL AT DB_NAME UPDATE ... 

In the next example, db_name is a host variable:

EXEC SQL AT :db_name DELETE ... 

If db_name is a host variable, all database tables referenced by the SQL statement must be defined in DECLARE TABLE statements. Otherwise, the precompiler issues a warning.

PL/SQL Blocks

You can execute a PL/SQL block using the AT clause. The following example shows the syntax:

EXEC SQL AT :db_name EXECUTE
    begin
        /* PL/SQL block here */
    end;
END-EXEC;
Cursor Control

Cursor control statements such as OPEN, FETCH, and CLOSE are exceptions—they never use an AT clause. If you want to associate a cursor with an explicitly identified database, use the AT clause in the DECLARE CURSOR statement, as follows:

EXEC SQL AT :db_name DECLARE emp_cursor CURSOR FOR ... 
EXEC SQL OPEN emp_cursor ... 
EXEC SQL FETCH emp_cursor ... 
EXEC SQL CLOSE emp_cursor; 

If db_name is a host variable, its declaration must be within the scope of all SQL statements that refer to the DECLAREd cursor. For example, if you OPEN the cursor in one subprogram, then FETCH from it in another subprogram, you must declare db_name globally.

When OPENing, CLOSing, or FETCHing from the cursor, you do not use the AT clause. The SQL statements are executed at the database named in the AT clause of the DECLARE CURSOR statement or at the default database if no AT clause is used in the cursor declaration.

The AT :host_variable clause provides the ability to change the connection associated with a cursor. However, you cannot change the association while the cursor is open. Consider the following example:

EXEC SQL AT :db_name DECLARE emp_cursor CURSOR FOR ... 
strcpy(db_name, "oracle1"); 
EXEC SQL OPEN emp_cursor; 
EXEC SQL FETCH emp_cursor INTO ... 
strcpy(db_name, "oracle2"); 
EXEC SQL OPEN emp_cursor;   /*  illegal, cursor still open */ 
EXEC SQL FETCH emp_cursor INTO ... 

This is illegal because emp_cursor is still open when you try to execute the second OPEN statement. Separate cursors are not maintained for different connections; there is only one emp_cursor, which must be closed before it can be reopened for another connection. To debug the last example, simply close the cursor before reopening it, as follows:

... 
EXEC SQL CLOSE emp_cursor;  -- close cursor first 
strcpy(db_name, "oracle2"); 
EXEC SQL OPEN emp_cursor; 
EXEC SQL FETCH emp_cursor INTO ... 
Dynamic SQL

Dynamic SQL statements are similar to cursor control statements in that some never use the AT clause.

For dynamic SQL Method 1, you must use the AT clause if you want to execute the statement at a nondefault connection. An example follows:

EXEC SQL AT :db_name EXECUTE IMMEDIATE :sql_stmt; 

For Methods 2, 3, and 4, you use the AT clause only in the DECLARE STATEMENT statement if you want to execute the statement at a nondefault connection. All other dynamic SQL statements such as PREPARE, DESCRIBE, OPEN, FETCH, and CLOSE never use the AT clause. The next example shows Method 2:

EXEC SQL AT :db_name DECLARE sql_stmt STATEMENT; 
EXEC SQL PREPARE sql_stmt FROM :sql_string; 
EXEC SQL EXECUTE sql_stmt; 

The following example shows Method 3:

EXEC SQL AT :db_name DECLARE sql_stmt STATEMENT; 
EXEC SQL PREPARE sql_stmt FROM :sql_string; 
EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; 
EXEC SQL OPEN emp_cursor ... 
EXEC SQL FETCH emp_cursor INTO ... 
EXEC SQL CLOSE emp_cursor;

Multiple Explicit Connections

You can use the AT db_name clause for multiple explicit connections, just as you can for a single explicit connection. In the following example, you connect to two nondefault databases concurrently:

/* declare needed host variables */ 
char  username[10]   = "scott"; 
char  password[10]   = "tiger"; 
char  db_string1[20] = "NYNON1"; 
char  db_string2[20] = "CHINON"; 
... 
/* give each database connection a unique name */ 
EXEC SQL DECLARE DB_NAME1 DATABASE; 
EXEC SQL DECLARE DB_NAME2 DATABASE; 
/* connect to the two nondefault databases */ 
EXEC SQL CONNECT :username IDENTIFIED BY :password 
   AT DB_NAME1 USING :db_string1; 
EXEC SQL CONNECT :username IDENTIFIED BY :password 
   AT DB_NAME2 USING :db_string2; 

The identifiers DB_NAME1 and DB_NAME2 are declared and then used to name the default databases at the two nondefault nodes so that later SQL statements can refer to the databases by name.

Alternatively, you can use a host variable in the AT clause, as the following example shows:

/* declare needed host variables */ 
char  username[10]   = "scott";
char  password[10]   = "tiger";
char  db_name[20];
char  db_string[20];
int   n_defs = 3;    /* number of connections to make */
...
for (i = 0; i < n_defs; i++)
{
    /* get next database name and OracleNet string */
    printf("Database name: ");
    gets(db_name);
    printf("OracleNet) string: ");
    gets(db_string);
    /* do the connect */
    EXEC SQL CONNECT :username IDENTIFIED BY :password
        AT :db_name USING :db_string;
}

You can also use this method to make multiple connections to the same database, as the following example shows:

strcpy(db_string, "NYNON");
for (i = 0; i < ndefs; i++)
{
    /* connect to the nondefault database */
    printf("Database name: ");
    gets(db_name);
    EXEC SQL CONNECT :username IDENTIFIED BY :password 
       AT :db_name USING :db_string;
}
... 

You must use different database names for the connections, even though they use the same OracleNet string. However, you can connect twice to the same database using just one database name because that name identifies both the default and nondefault databases.

Ensuring Data Integrity

Your application program must ensure the integrity of transactions that manipulate data at two or more remote databases. That is, the program must commit or roll back all SQL statements in the transactions. This might be impossible if the network fails or one of the systems crashes.

For example, suppose you are working with two accounting databases. You debit an account on one database and credit an account on the other database, then issue a COMMIT at each database. It is up to your program to ensure that both transactions are committed or rolled back.

Implicit Connections

Implicit connections are supported through the Oracle distributed query facility, which does not require explicit connections, but only supports the SELECT statement. A distributed query allows a single SELECT statement to access data on one or more nondefault databases.

The distributed query facility depends on database links, which assign a name to a CONNECT statement rather than to the connection itself. At run time, the embedded SELECT statement is executed by the specified Oracle Server, which implicitly connects to the nondefault database(s) to get the required data.

Single Implicit Connections

In the next example, you connect to a single nondefault database. First, your program executes the following statement to define a database link (database links are usually established interactively by the DBA or user):

EXEC SQL CREATE DATABASE LINK db_link 
    CONNECT TO username IDENTIFIED BY password 
    USING 'NYNON'; 

Then, the program can query the nondefault EMP table using the database link, as follows:

EXEC SQL SELECT ENAME, JOB INTO :emp_name, :job_title 
    FROM emp@db_link 
    WHERE DEPTNO = :dept_number; 

The database link is not related to the database name used in the AT clause of an embedded SQL statement. It simply tells Oracle where the nondefault database is located, the path to it, and what Oracle username and password to use. The database link is stored in the data dictionary until it is explicitly dropped.

In our example, the default Oracle Server logs on to the nondefault database through Oracle Net using the database link db_link. The query is submitted to the default Server, but is "forwarded" to the nondefault database for execution.

To make referencing the database link easier, you can interactively create a synonym as follows:

EXEC SQL CREATE SYNONYM emp FOR emp@db_link; 

Then, your program can query the nondefault EMP table, as follows:

EXEC SQL SELECT ENAME, JOB INTO :emp_name, :job_title 
    FROM emp 
    WHERE DEPTNO = :dept_number; 

This provides location transparency for emp.

Multiple Implicit Connections

In the following example, you connect to two nondefault databases concurrently. First, you execute the following sequence of statements to define two database links and create two synonyms:

EXEC SQL CREATE DATABASE LINK db_link1 
    CONNECT TO username1 IDENTIFIED BY password1 
        USING 'NYNON'; 
EXEC SQL CREATE DATABASE LINK db_link2 
    CONNECT TO username2 IDENTIFIED BY password2 
        USING 'CHINON'; 
EXEC SQL CREATE SYNONYM emp FOR emp@db_link1; 
EXEC SQL CREATE SYNONYM dept FOR dept@db_link2; 

Then, your program can query the nondefault EMP and DEPT tables, as follows:

EXEC SQL SELECT ENAME, JOB, SAL, LOC 
    FROM emp, dept 
    WHERE emp.DEPTNO = dept.DEPTNO AND DEPTNO = :dept_number; 

Oracle executes the query by performing a join between the nondefault EMP table at db_link1 and the nondefault DEPT table at db_link2.

Definitions of Transactions Terms

Before delving into the subject of transactions, you should know the terms defined in this section.

The jobs or tasks that Oracle manages are called sessions. A user session is invoked when you run an application program or a tool such as SQL*Forms, and connect to the database.

Oracle allows user sessions to work simultaneously and share computer resources. To do this, Oracle must control concurrency, the accessing of the same data by many users. Without adequate concurrency controls, there might be a loss of data integrity. That is, changes to data or structures might be made in the wrong order.

Oracle uses locks (sometimes called enqueues) to control concurrent access to data. A lock gives you temporary ownership of a database resource such as a table or row of data. Thus, data cannot be changed by other users until you finish with it.

You need never explicitly lock a resource, because default locking mechanisms protect Oracle data and structures. However, you can request data locks on tables or rows when it is to your advantage to override default locking. You can choose from several modes of locking such as row share and exclusive.

A deadlock can occur when two or more users try to access the same database object. For example, two users updating the same table might wait if each tries to update a row currently locked by the other. Because each user is waiting for resources held by another user, neither can continue until Oracle breaks the deadlock. Oracle signals an error to the participating transaction that had completed the least amount of work, and the "deadlock detected while waiting for resource" Oracle error code is returned to sqlcode in the SQLCA.

When a table is being queried by one user and updated by another at the same time, Oracle generates a read-consistent view of the table's data for the query. That is, once a query begins and as it proceeds, the data read by the query does not change. As update activity continues, Oracle takes snapshots of the table's data and records changes in a rollback segment. Oracle uses information in the rollback segment to build read-consistent query results and to undo changes if necessary.

How Transactions Guard Your Database

Oracle is transaction oriented. That is, Oracle uses transactions to ensure data integrity. A transaction is a series of one or more logically related SQL statements you define to accomplish some task. Oracle treats the series of SQL statements as a unit so that all the changes brought about by the statements are either committed (made permanent) or rolled back (undone) at the same time. If your application program fails in the middle of a transaction, the database is automatically restored to its former (pre-transaction) state.

The coming sections show you how to define and control transactions. Specifically, you learn how to:

For details about the SQL statements discussed in this chapter, see Oracle Database SQL Language Reference.

How to Begin and End Transactions

You begin a transaction with the first executable SQL statement (other than CONNECT) in your program. When one transaction ends, the next executable SQL statement automatically begins another transaction. Thus, every executable statement is part of a transaction. Because they cannot be rolled back and need not be committed, declarative SQL statements are not considered part of a transaction.

You end a transaction in one of the following ways:

A transaction also ends when there is a system failure or your user session stops unexpectedly because of software problems, hardware problems, or a forced interrupt. Oracle rolls back the transaction.

If your program fails in the middle of a transaction, Oracle detects the error and rolls back the transaction. If your operating system fails, Oracle restores the database to its former (pre-transaction) state.

Using the COMMIT Statement

If you do not subdivide your program with the COMMIT or ROLLBACK statement, Oracle treats the whole program as a single transaction (unless the program contains data definition statements, which issue automatic COMMITS).

You use the COMMIT statement to make changes to the database permanent. Until changes are COMMITted, other users cannot access the changed data; they see it as it was before your transaction began. Specifically, the COMMIT statement

The COMMIT statement has no effect on the values of host variables or on the flow of control in your program.

When MODE=ORACLE, explicit cursors that are not referenced in a CURRENT OF clause remain open across COMMITs. This can boost performance.

Because they are part of normal processing, COMMIT statements should be placed inline, on the main path through your program. Before your program terminates, it must explicitly COMMIT pending changes. Otherwise, Oracle rolls them back. In the following example, you commit your transaction and disconnect from Oracle:

EXEC SQL COMMIT WORK RELEASE; 

The optional keyword WORK provides ANSI compatibility. The RELEASE option frees all Oracle resources (locks and cursors) held by your program and logs off the database.

You need not follow a data definition statement with a COMMIT statement because data definition statements issue an automatic COMMIT before and after executing. So, whether they succeed or fail, the prior transaction is committed.

WITH HOLD Clause in DECLARE CURSOR Statements

Any cursor that has been declared with the clause WITH HOLD after the word CURSOR remains open after a COMMIT. The following example shows how to use this clause:

     EXEC SQL 
         DECLARE C1 CURSOR WITH HOLD
         FOR SELECT ENAME FROM EMP
         WHERE EMPNO BETWEEN 7600 AND 7700
     END-EXEC.

The cursor must not be declared for UPDATE. The WITH HOLD clause is used in DB2 to override the default, which is to close all cursors on commit. Pro*COBOL provides this clause in order to ease migrations of applications from DB2 to Oracle. When MODE=ANSI, Oracle uses the DB2 default, but all host variables must be declared in a Declare Section. To avoid having a Declare Section, use the precompiler option CLOSE_ON_COMMIT described next. See "DECLARE CURSOR (Embedded SQL Directive)".

CLOSE_ON_COMMIT Precompiler Option

The precompiler option CLOSE_ON_COMMIT is available to override the default behavior of MODE=ANSI (if you specify MODE=ANSI on the command line, any cursors not declared with the WITH HOLD clause are closed on commit):

CLOSE_ON_COMMIT = {YES | NO} 

The default is NO. This option must be entered only on the command line or in a configuration file.


Note:

Use this option carefully; applications may be slowed if cursors are opened and closed many times because of the need to re-parse for each OPEN statement. See "CLOSE_ON_COMMIT".

Using the SAVEPOINT Statement

You use the SAVEPOINT statement to mark and name the current point in the processing of a transaction. Each marked point is called a savepoint. For example, the following statement marks a savepoint named start_delete:

EXEC SQL SAVEPOINT start_delete; 

Savepoints let you divide long transactions, giving you more control over complex procedures. For example, if a transaction performs several functions, you can mark a savepoint before each function. Then, if a function fails, you can easily restore the Oracle data to its former state, recover, then reexecute the function.

To undo part of a transaction, you use savepoints with the ROLLBACK statement and its TO SAVEPOINT clause. In the following example, you access the table MAIL_LIST to insert new listings, update old listings, and delete (a few) inactive listings. After the delete, you check the third element of sqlerrd in the SQLCA for the number of rows deleted. If the number is unexpectedly large, you roll back to the savepoint start_delete, undoing just the delete.

... 
for (;;) 
{ 
   printf("Customer number? "); 
   gets(temp);
   cust_number = atoi(temp);
   printf("Customer name? "); 
   gets(cust_name); 
  EXEC SQL INSERT INTO mail_list (custno, cname, stat) 
     VALUES (:cust_number, :cust_name, 'ACTIVE'); 
... 
} 
 
for (;;) 
{ 
   printf("Customer number? "); 
   gets(temp);
   cust_number = atoi(temp);
   printf("New status? "); 
   gets(new_status); 
   EXEC SQL UPDATE mail_list 
     SET stat = :new_status 
     WHERE custno = :cust_number; 
} 
/* mark savepoint */ 
EXEC SQL SAVEPOINT start_delete; 
 
EXEC SQL DELETE FROM mail_list 
    WHERE stat = 'INACTIVE'; 
if (sqlca.sqlerrd[2] < 25)  /* check number of rows deleted */ 
    printf("Number of rows deleted is  %d\n", sqlca.sqlerrd[2]); 
else 
{ 
    printf("Undoing deletion of %d rows\n", sqlca.sqlerrd[2]); 
    EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
    EXEC SQL ROLLBACK TO SAVEPOINT start_delete; 
} 
 
EXEC SQL WHENEVER SQLERROR CONTINUE; 
EXEC SQL COMMIT WORK RELEASE; 
exit(0); 
sql_error: 
EXEC SQL WHENEVER SQLERROR CONTINUE; 
EXEC SQL ROLLBACK WORK RELEASE; 
printf("Processing error\n"); 
exit(1); 

Rolling back to a savepoint erases any savepoints marked after that savepoint. The savepoint to which you roll back, however, is not erased. For example, if you mark five savepoints, then roll back to the third, only the fourth and fifth are erased.

If you give two savepoints the same name, the earlier savepoint is erased. A COMMIT or ROLLBACK statement erases all savepoints.

The ROLLBACK Statement

You use the ROLLBACK statement to undo pending changes made to the database. For example, if you make a mistake, such as deleting the wrong row from a table, you can use ROLLBACK to restore the original data. The TO SAVEPOINT clause lets you roll back to an intermediate statement in the current transaction, so you do not have to undo all your changes.

If you start a transaction that does not complete (a SQL statement might not execute successfully, for example), ROLLBACK lets you return to the starting point, so that the database is not left in an inconsistent state. Specifically, the ROLLBACK statement

The ROLLBACK statement has no effect on the values of host variables or on the flow of control in your program.

When MODE=ORACLE, explicit cursors not referenced in a CURRENT OF clause remain open across ROLLBACKs.

Specifically, the ROLLBACK TO SAVEPOINT statement

Because they are part of exception processing, ROLLBACK statements should be placed in error handling routines, off the main path through your program. In the following example, you roll back your transaction and disconnect from Oracle:

EXEC SQL ROLLBACK WORK RELEASE; 

The optional keyword WORK provides ANSI compatibility. The RELEASE option frees all resources held by your program and disconnects from the database.

If a WHENEVER SQLERROR GOTO statement branches to an error handling routine that includes a ROLLBACK statement, your program might enter an infinite loop if the ROLLBACK fails with an error. You can avoid this by coding WHENEVER SQLERROR CONTINUE before the ROLLBACK statement, as shown in the following example:

EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
 
for (;;) 
{ 
   printf("Employee number? "); 
    gets(temp);
    emp_number = atoi(temp);
   printf("Employee name? "); 
   gets(emp_name); 
   EXEC SQL INSERT INTO emp (empno, ename) 
       VALUES (:emp_number, :emp_name); 
... 
} 
... 
sql_error: 
EXEC SQL WHENEVER SQLERROR CONTINUE; 
EXEC SQL ROLLBACK WORK RELEASE; 
printf("Processing error\n"); 
exit(1); 

Oracle automatically rolls back transactions if your program terminates abnormally.

Statement-Level Rollbacks

Before executing any SQL statement, Oracle marks an implicit savepoint (not available to you). Then, if the statement fails, Oracle automatically rolls it back and returns the applicable error code to sqlcode in the SQLCA. For example, if an INSERT statement causes an error by trying to insert a duplicate value in a unique index, the statement is rolled back.

Oracle can also roll back single SQL statements to break deadlocks. Oracle signals an error to one of the participating transactions and rolls back the current statement in that transaction.

Only work started by the failed SQL statement is lost; work done before that statement in the current transaction is saved. Thus, if a data definition statement fails, the automatic commit that precedes it is not undone.

Before executing a SQL statement, Oracle must parse it, that is, examine it to make sure it follows syntax rules and refers to valid database objects. Errors detected while executing a SQL statement cause a rollback, but errors detected while parsing the statement do not.

The RELEASE Option

Oracle automatically rolls back changes if your program terminates abnormally. Abnormal termination occurs when your program does not explicitly commit or roll back work and disconnect from Oracle using the RELEASE option. Normal termination occurs when your program runs its course, closes open cursors, explicitly commits or rolls back work, disconnects from Oracle, and returns control to the user.

Your program will exit gracefully if the last SQL statement it executes is either

EXEC SQL COMMIT WORK RELEASE; 

or

EXEC SQL ROLLBACK WORK RELEASE;
 

where the token WORK is optional. Otherwise, locks and cursors acquired by your user session are held after program termination until Oracle recognizes that the user session is no longer active. This might cause other users in a multiuser environment to wait longer than necessary for the locked resources.

The SET TRANSACTION Statement

You use the SET TRANSACTION statement to begin a read-only transaction. Because they allow "repeatable reads," read-only transactions are useful for running multiple queries against one or more tables while other users update the same tables. An example of the SET TRANSACTION statement follows:

EXEC SQL SET TRANSACTION READ ONLY;
 

The SET TRANSACTION statement must be the first SQL statement in a read-only transaction and can appear only once in a transaction. The READ ONLY parameter is required. Its use does not affect other transactions.

Only the SELECT, COMMIT, and ROLLBACK statements are allowed in a read-only transaction. For example, including an INSERT, DELETE, or SELECT FOR UPDATE OF statement causes an error.

During a read-only transaction, all queries refer to the same snapshot of the database, providing a multitable, multiquery, read-consistent view. Other users can continue to query or update data as usual.

A COMMIT, ROLLBACK, or data definition statement ends a read-only transaction. (Recall that data definition statements issue an implicit COMMIT.)

In the following example, as a store manager, you check sales activity for the day, the past week, and the past month by using a read-only transaction to generate a summary report. The report is unaffected by other users updating the database during the transaction.

EXEC SQL SET TRANSACTION READ ONLY; 
EXEC SQL SELECT sum(saleamt) INTO :daily FROM sales 
    WHERE saledate = SYSDATE; 
EXEC SQL SELECT sum(saleamt) INTO :weekly FROM sales 
    WHERE saledate > SYSDATE - 7; 
EXEC SQL SELECT sum(saleamt) INTO :monthly FROM sales 
    WHERE saledate > SYSDATE - 30; 
EXEC SQL COMMIT WORK; 
    /* simply ends the transaction since there are no changes 
       to make permanent */ 
/* format and print report */ 

Override Default Locking

By default, Oracle automatically locks many data structures for you. However, you can request specific data locks on rows or tables when it is to your advantage to override default locking. Explicit locking lets you share or deny access to a table for the duration of a transaction or ensure multitable and multiquery read consistency.

With the SELECT FOR UPDATE OF statement, you can explicitly lock specific rows of a table to make sure they do not change before an UPDATE or DELETE is executed. However, Oracle automatically obtains row-level locks at UPDATE or DELETE time. So, use the FOR UPDATE OF clause only if you want to lock the rows before the UPDATE or DELETE.

You can explicitly lock entire tables using the LOCK TABLE statement.

Using FOR UPDATE OF

When you DECLARE a cursor that is referenced in the CURRENT OF clause of an UPDATE or DELETE statement, you use the FOR UPDATE OF clause to acquire exclusive row locks. SELECT FOR UPDATE OF identifies the rows that will be updated or deleted, then locks each row in the active set. This is useful, for example, when you want to base an update on the existing values in a row. You must make sure the row is not changed by another user before your update.

The FOR UPDATE OF clause is optional. For example, instead of coding

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, job, sal FROM emp WHERE deptno = 20 
        FOR UPDATE OF sal; 

you can drop the FOR UPDATE OF clause and simply code

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, job, sal FROM emp WHERE deptno = 20; 

The CURRENT OF clause signals the precompiler to add a FOR UPDATE clause if necessary. You use the CURRENT OF clause to refer to the latest row FETCHed from a cursor.

Restrictions

If you use the FOR UPDATE OF clause, you cannot reference multiple tables.

An explicit FOR UPDATE OF or an implicit FOR UPDATE acquires exclusive row locks. All rows are locked at the OPEN, not as they are FETCHed. Row locks are released when you COMMIT or ROLLBACK (except when you ROLLBACK to a savepoint). Therefore, you cannot FETCH from a FOR UPDATE cursor after a COMMIT.

Using LOCK TABLE

You use the LOCK TABLE statement to lock one or more tables in a specified lock mode. For example, the statement in the following section, locks the EMP table in row share mode. Row share locks allow concurrent access to a table; they prevent other users from locking the entire table for exclusive use.

EXEC SQL LOCK TABLE EMP IN ROW SHARE MODE NOWAIT; 

The lock mode determines what other locks can be placed on the table. For example, many users can acquire row share locks on a table at the same time, but only one user at a time can acquire an exclusive lock. While one user has an exclusive lock on a table, no other users can INSERT, UPDATE, or DELETE rows in that table.

For more information about lock modes, see Oracle Database Concepts.

The optional keyword NOWAIT tells Oracle not to wait for a table if it has been locked by another user. Control is immediately returned to your program, so it can do other work before trying again to acquire the lock. (You can check sqlcode in the SQLCA to see if the LOCK TABLE failed.) If you omit NOWAIT, Oracle waits until the table is available; the wait has no set limit.

A table lock never keeps other users from querying a table, and a query never acquires a table lock. So, a query never blocks another query or an update, and an update never blocks a query. Only if two different transactions try to update the same row will one transaction wait for the other to complete.

Any LOCK TABLE statement implicitly closes all cursors.

Table locks are released when your transaction issues a COMMIT or ROLLBACK.

Fetch Across COMMITs

If you want to intermix COMMITs and FETCHes, do not use the CURRENT OF clause. Instead, SELECT the ROWID of each row, then use that value to identify the current row during the update or delete. An example follows:

... 
EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, sal, ROWID FROM emp WHERE job = 'CLERK'; 
... 
EXEC SQL OPEN emp_cursor; 
EXEC SQL WHENEVER NOT FOUND GOTO ... 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor INTO :emp_name, :salary, :row_id; 
    ... 
    EXEC SQL UPDATE emp SET sal = :new_salary 
        WHERE ROWID = :row_id; 
    EXEC SQL COMMIT; 
... 
} 

Note, however, that the FETCHed rows are not locked. So, you might get inconsistent results if another user modifies a row after you read it but before you update or delete it.

Distributed Transactions Handling

A distributed database is a single logical database comprising multiple physical databases at different nodes. A distributed statement is any SQL statement that accesses a remote node using a database link. A distributed transaction includes at least one distributed statement that updates data at multiple nodes of a distributed database. If the update affects only one node, the transaction is non-distributed.

When you issue a COMMIT, changes to each database affected by the distributed transaction are made permanent. If instead you issue a ROLLBACK, all the changes are undone. However, if a network or machine fails during the commit or rollback, the state of the distributed transaction might be unknown or in doubt. In such cases, if you have FORCE TRANSACTION system privileges, you can manually commit or roll back the transaction at your local database by using the FORCE clause. The transaction must be identified by a quoted literal containing the transaction ID, which can be found in the data dictionary view DBA_2PC_PENDING. Some examples follow:

EXEC SQL COMMIT FORCE '22.31.83'; 
... 
EXEC SQL ROLLBACK FORCE '25.33.86'; 

FORCE commits or rolls back only the specified transaction and does not affect your current transaction. You cannot manually roll back in-doubt transactions to a savepoint.

The COMMENT clause in the COMMIT statement lets you specify a Comment to be associated with a distributed transaction. If ever the transaction is in doubt, Oracle stores the text specified by COMMENT in the data dictionary view DBA_2PC_PENDING along with the transaction ID. The text must be a quoted literal 50 characters in length. An example follows:

EXEC SQL COMMIT COMMENT 'In-doubt trans; notify Order Entry'; 

Note:

The COMMENT clause will be deprecated in a future release. Oracle recommends that you use transaction naming instead.

For more information about distributed transactions, see Oracle Database Concepts.

Guidelines

The following guidelines will help you avoid some common problems.

Designing Applications

When designing your application, group logically related actions together in one transaction. A well-designed transaction includes all the steps necessary to accomplish a given task—no more and no less.

Data in the tables you reference must be left in a consistent state. So, the SQL statements in a transaction should change the data in a consistent way. For example, a transfer of funds between two bank accounts should include a debit to one account and a credit to another. Both updates should either succeed or fail together. An unrelated update, su ch as a new deposit to one account, should not be included in the transaction.

Obtaining Locks

If your application programs include SQL locking statements, make sure the Oracle users requesting locks have the privileges needed to obtain the locks. Your DBA can lock any table. Other users can lock tables they own or tables for which they have a privilege, such as ALTER, SELECT, INSERT, UPDATE, or DELETE.

Using PL/SQL

If a PL/SQL block is part of a transaction, COMMITs and ROLLBACKs inside the block affect the whole transaction. In the following example, the ROLLBACK undoes changes made by the UPDATE and the INSERT:

EXEC SQL INSERT INTO EMP ... 
EXEC SQL EXECUTE 
    BEGIN 
        UPDATE emp ... 
        ... 
    EXCEPTION 
        WHEN DUP_VAL_ON_INDEX THEN 
            ROLLBACK; 
        ... 
    END; 
END-EXEC; 
... 
PK &H PK+AOEBPS/title.htm Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2)

Pro*C/C++

Programmer's Guide

11g Release 2 (11.2)

E10825-01

July 2009


Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2)

E10825-01

Copyright © 1996, 2009, Oracle and/or its affiliates. All rights reserved.

Primary Author: Simon Watt 

Contributing Author: Jack Melnick, Neelam Singh, Tim Smith, Paul Lane 

Contributor:  Bill Bailey, Subhranshu Banerjee, Julie Basu, Beethoven Chang, Michael Chiocca, Nancy Ikeda, Alex Keh, Thomas Kurian, Shiao-Yen Lin, Valarie Moore, Vidya Nagaraj, Ajay Popat, Ekkehard Rohwedder, Pamela Rothman, Gael Stevens

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PKUaPK+AOEBPS/pc_afemb.htm Embedded SQL Statements and Directives

F Embedded SQL Statements and Directives

This appendix contains descriptions of both the SQL standard embedded statements and directives, as well as the Oracle embedded SQL extensions.


Note:

Only statements which differ in syntax from non-embedded SQL are described in this appendix. For details of the non-embedded SQL statements, see the Oracle Database SQL Language Reference.

This appendix contains the following topics:

Summary of Precompiler Directives and Embedded SQL Statements

Embedded SQL statements place DDL, DML, and Transaction Control statements within a Pro*C/C++ program. Table F-1 provides a functional summary of the embedded SQL statements and directives.

The Source/Type column in Table F-2 is displayed in the format:

Table F-1 Functional Summary of the Embedded SQL Statements and Directives

Source/TypeDescription

Source

Is either standard SQL (S) or an Oracle extension (O).

Type

Is either an executable (E) statement or a directive (D).


Table F-2 Precompiler Directives and Embedded SQL Statements and Clauses

EXEC SQL StatementSource/TypePurpose

ALLOCATE

O/E

To allocate memory for a cursor variable or an Object type.

ALLOCATE DESCRIPTOR

S/E

Allocate a descriptor for ANSI dynamic SQL.

CACHE FREE ALL

O/E

Frees all allocated object cache memory.

CALL

S/E

Call a stored procedure.

CLOSE

S/E

To disable a cursor, releasing the resources it holds.

COLLECTION APPEND

O/E

To append elements of one collection to the end of another collection.

COLLECTION DESCRIBE

O/E

To obtain information about a collection.

COLLECTION GET

O/E

To retrieve the elements of a collection.

COLLECTION RESET

O/E

To reset the collection slice endpoints back to the beginning of the collection.

COLLECTION SET

O/E

To update values of a collection.

COLLECTION TRIM

O/E

To remove elements from the end of a collection.

COMMIT

S/E

To end the current transaction, making all database change permanent (optionally frees resources and disconnects from the database)

CONNECT

O/E

To log on to an instance.

CONTEXT ALLOCATE

O/E

To allocate memory for a SQLLIB runtime context.

CONTEXT FREE

O/E

To free memory for a SQLLIB runtime context.

CONTEXT OBJECT OPTION GET

O/E

To determine how options are set.

CONTEXT OBJECT OPTION SET

O/E

To set options.

CONTEXT USE

O/D

To specify which SQLLIB runtime context to use for subsequent executable SQL statements.

DEALLOCATE DESCRIPTOR

S/E

To deallocate a descriptor area to free memory.

DECLARE CURSOR

S/D

To declare a cursor, associating it with a query.

DECLARE DATABASE

O/D

To declare an identifier for a nondefault database to be accessed in subsequent embedded SQL statements.

DECLARE STATEMENT

S/D

To assign a SQL variable name to a SQL statement.

DECLARE TABLE

O/D

To declare the table structure for semantic checking of embedded SQL statements by Pro*C/C++.

DECLARE TYPE

O/D

To declare the type structure for semantic checking of embedded SQL statements by Pro*C/C++.

DELETE

S/E

To remove rows from a table or from a view's base table.

DESCRIBE

S/E

To initialize a descriptor, a structure holding host variable descriptions.

DESCRIBE DESCRIPTOR

S/E

Obtain information about the variables in an ANSI SQL statement.

ENABLE THREADS

O/E

To initialize a process that supports multiple threads.

EXECUTE...END-EXEC

O/E

To execute an anonymous PL/SQL block.

EXECUTE

S/E

To execute a prepared dynamic SQL statement.

EXECUTE DESCRIPTOR

S/E

To execute an ANSI Method 4 dynamic SQL statement.

EXECUTE IMMEDIATE

S/E

To prepare and execute a SQL statement with no host variables.

FETCH

S/E

To retrieve rows selected by a query.

FETCH DESCRIPTOR

S/E

To retrieve rows selected using ANSI Method 4 Dynamic SQL.

FREE

O/E

To free memory allocated in the object cache, or cursor.

GET DESCRIPTOR

S/E

To move information from an ANSI SQL descriptor area into host variables.

INSERT

S/E

To add rows to a table or to a view's base table.

LOB APPEND

O/E

To append a LOB to the end of another lOB.

LOB ASSIGN

O/E

To assign a LOB or BFILE locator to another locator.

LOB CLOSE

O/E

To close an open LOB or BFILE.

LOB COPY

O/E

To copy all or part of a LOB value into another LOB.

LOB CREATE TEMPORARY

O/E

To create a temporary LOB.

LOB DESCRIBE

O/E

To retrieve attributes from a LOB.

LOB DISABLE BUFFERING

O/E

To disable LOB buffering.

LOB ENABLE BUFFERING

O/E

To enable LOB buffering.

LOB ERASE

O/E

To erase a given amount of LOB data starting from a given offset.

LOB FILE CLOSE ALL

O/E

To close all open BFILEs.

LOB FILE SET

O/E

To set DIRECTORY and FILENAME in a BFILE locator.

LOB FLUSH BUFFER

O/E

To write the LOB buffers to the database server.

LOB FREE TEMPORARY

O/E

To free temporary space for the LOB locator.

LOB LOAD

O/E

To copy all or part of a BFILE into an internal LOB.

LOB OPEN

O/E

To open a LOB or BFILE to read or read/write access.

LOB READ

O/E

To read all or part of a LOB or BFILE into a buffer.

LOB TRIM

O/E

To truncate a lob value.

LOB WRITE

O/E

To write the contents of a buffer to a LOB.

OBJECT CREATE

O/E

To create a referenceable object in the cache.

OBJECT DELETE

O/E

To mark an object as deleted.

OBJECT DEREF

O/E

To dereference an object.

OBJECT FLUSH

O/E

To transmit persistent objects to server.

OBJECT GET

O/E

To convert an object attribute to a C type.

OBJECT RELEASE

O/E

To "unpin" an object in the cache.

OBJECT SET

O/E

To update object attributes in the cache.

OBJECT UPDATE

O/E

To mark an object in the cache as updated.

OPEN

S/E

To execute the query associated with a cursor.

OPEN DESCRIPTOR

S/E

To execute the query associated with a cursor (ANSI Dynamic SQL Method 4).

PREPARE

S/E

To parse a dynamic SQL statement.

REGISTER CONNECT

O/E

To enable a call to an external procedure.

ROLLBACK

S/E

To end the current transaction, discard all changes in the current transaction, and release all locks (optionally release resources and disconnect from the database).

SAVEPOINT

S/E

To identify a point in a transaction to which you can later roll back.

SELECT

S/E

To retrieve data from one or more tables, views, or snapshots, assigning the selected values to host variables.

SET DESCRIPTOR

S/E

To set information in the descriptor area from host variables.

TYPE

O/D

To assign an external datatype to a whole class of host variables by equivalencing the external datatype to a user-defined datatype.

UPDATE

S/E

To change existing values in a table or in a view's base table.

VAR

O/D

To override the default datatype and assign a specific external datatype to a host variable.

WHENEVER

S/D

To specify handling for error and warning conditions.


About The Statement Descriptions

The directives and statements appear alphabetically. The description of each contains the following sections:

Directives and StatementsDescription
PurposeDescribes the basic uses of the statement.
PrerequisitesLists privileges you must have and steps that you must take before using the statement. Unless otherwise noted, most statements also require that the database be open by your instance.
SyntaxShows the keywords and parameters of the statement.
Keywords and ParametersDescribes the purpose of each keyword and parameter.
Usage NotesDiscusses how and when to use the statement.
ExamplesShows example statements of the statement.
Related TopicsLists related statements, clauses, and sections of this manual.

How to Read Syntax Diagrams

Syntax diagrams are used to illustrate embedded SQL syntax. They are drawings that depict valid syntax paths.

Trace each diagram from left to right, in the direction shown by the arrows.

Statements and other keywords appear in UPPER CASE inside rectangles. Type them exactly as shown in the rectangles. Parameters appear in lower case inside ovals. Substitute variables for the parameters in statements you write. Operators, delimiters, and terminators appear in circles. Following the conventions defined in the Preface, a semicolon terminates statements.

If the syntax diagram has more than one path, you can choose any path to travel. If you have the choice of more than one keyword, operator, or parameter, your options appear in a vertical list. In the following example, you can travel down the vertical line as far as you like, then continue along any horizontal line:

Syntax Diagram
Description of the illustration first.gif

According to the diagram, all of the following statements are valid:

EXEC SQL WHENEVER NOT FOUND ... 
EXEC SQL WHENEVER SQLERROR ... 
EXEC SQL WHENEVER SQLWARNING ... 

Required Keywords and Parameters

Required keywords and parameters can appear singly or in a vertical list of alternatives. Single required keywords and parameters appear on the main path, that is, on the horizontal line you are currently traveling. In the following example, cursor is a required parameter:

Required Keywords and Parameters
Description of the illustration reqp.gif

If there is a cursor named emp_cursor, then, according to the diagram, the following statement is valid:

EXEC SQL CLOSE emp_cursor; 

If any of the keywords or parameters in a vertical list appears on the main path, one of them is required. That is, you must choose one of the keywords or parameters, but not necessarily the one that appears on the main path. In the following example, you must choose one of the four actions:

Required Keywords and Parameters
Description of the illustration reqp1.gif

Optional Keywords and Parameters

If keywords and parameters appear in a vertical list in the main path, they are optional. In the following example, AT :db_name and WORK are optional:

Optional Keywords and Parameters
Description of the illustration optional.gif

If there is a database named oracle2, then, according to the diagram, all of the following statements are valid:

EXEC SQL ROLLBACK; 
EXEC SQL ROLLBACK WORK; 
EXEC SQL AT oracle2 ROLLBACK; 

Syntax Loops

Loops let you repeat the syntax within them as many times as you like. In the following example, column_name is inside a loop. So, after choosing one column name, you can go back repeatedly to choose another, separating the column names by a comma.

Symtax Loops
Description of the illustration syntax.gif

If DEBIT, CREDIT, and BALANCE are column names, then, according to the diagram, all of the following statements are valid:

EXEC SQL SELECT DEBIT INTO ... 
EXEC SQL SELECT CREDIT, BALANCE INTO ... 
EXEC SQL SELECT DEBIT, CREDIT, BALANCE INTO ... 

Multipart Diagrams

Read a multipart diagram as if all the main paths were joined end-to-end. The following example is a two-part diagram:

Multipart Diagrams
Description of the illustration part.gif

According to the diagram, the following statement is valid:

EXEC SQL PREPARE statement_name FROM string_literal; 

Oracle Names

The names of Oracle database objects, such as tables and columns, must not exceed 30 characters in length. The first character must be a letter, but the rest can be any combination of letters, numerals, dollar signs ($), pound signs (#), and underscores (_).

However, if a name is enclosed by quotation marks ("), it can contain any combination of legal characters, including spaces but excluding quotation marks.

Oracle names are not case-sensitive except when enclosed by quotation marks.

Statement Terminator

In all embedded SQL diagrams, each statement is understood to end with the statement terminator ";".

ALLOCATE (Executable Embedded SQL Extension)

Purpose

To allocate a cursor variable to be referenced in a PL/SQL block, or to allocate space in the object cache.

Prerequisites

A cursor variable (see Chapter 4, "Datatypes and Host Variables") of type sql_cursor must be declared before allocating memory for the cursor variable.

Pointers to a host struct and, optionally, an indicator struct must be declared before allocating memory in the object cache.

An active connection to a database is required.

Syntax

ALLOCATE
Description of the illustration allocat.gif

Keywords and Parameters

Keywords and ParametersDescription
db_nameA null-terminated string containing the database connection name, as established previously in a CONNECT statement. If it is omitted, or if it is an empty string, the default database connection is assumed.
host_variableA host variable containing the name of the database connection.
cursor_variableA cursor variable to be allocated.
host_ptrA pointer to a host struct generated by OTT for object types, a context variable of type sql_context, a ROWID variable of type pointer to OCIRowid, or a LOB locator variable corresponding to the type of LOB.
ind_ptrAn optional pointer to an indicator struct.

Usage Notes

While a cursor is static, a cursor variable is dynamic because it is not tied to a specific query. You can open a cursor variable for any type-compatible query.

For more information on this statement, see Oracle Database PL/SQL Language Reference and Oracle Database SQL Language Reference.

Example

This partial example illustrates the use of the ALLOCATE statement in a Pro*C/C++ program:

EXEC SQL BEGIN DECLARE SECTION;
   SQL_CURSOR emp_cv;
   struct{ ... } emp_rec;
EXEC SQL END DECLARE SECTION;
EXEC SQL ALLOCATE :emp_cv;
EXEC SQL EXECUTE
   BEGIN
      OPEN :emp_cv FOR SELECT * FROM emp;
   END;
END-EXEC;
for (;;)
   {
   EXEC SQL FETCH :emp_cv INTO :emp_rec;
   ...
   }

Related Topics

CACHE FREE ALL (Executable Embedded SQL Extension).

CLOSE (Executable Embedded SQL).

EXECUTE (Executable Embedded SQL) .

FETCH (Executable Embedded SQL) .

FETCH DESCRIPTOR (Executable Embedded SQL).

FREE (Executable Embedded SQL Extension).

ALLOCATE DESCRIPTOR (Executable Embedded SQL)

Purpose

An ANSI dynamic SQL statement that allocates a descriptor.

Prerequisites

None.

Syntax

ALLOCATE DESCRIPTOR
Description of the illustration alldesc.gif

Keywords and Parameters

Keywords and ParametersDescription
array_size

integer

Host variable containing number of rows to be processed.

Number of rows to be processed

descriptor_name

descriptor name

Host variable containing the name of the ANSI descriptor.

Name of the ANSI descriptor.

GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
WITH MAX integerMaximum number of host variables. The default is 100.

Usage Notes

Use DYNAMIC=ANSI precompiler option. For information on using this statement, see "ALLOCATE DESCRIPTOR".

Example

EXEC SQL FOR :batch ALLOCATE DESCRIPTOR GLOBAL :binddes WITH MAX 25 ;

Related Topics

DESCRIBE DESCRIPTOR (Executable Embedded SQL).

DEALLOCATE DESCRIPTOR (Embedded SQL Statement)

GET DESCRIPTOR (Executable Embedded SQL).

SET DESCRIPTOR (Executable Embedded SQL).

CACHE FREE ALL (Executable Embedded SQL Extension)

Purpose

To free all memory in the object cache.

Prerequisites

An active database connection must exist.

Syntax

CACHE FREE ALL
Description of the illustration cache.gif

Keywords and Parameters

Keywords and ParametersDescription
db_nameA null-terminated string containing the database connection name, as established previously in a CONNECT statement. If it is omitted, or if it is an empty string, the default database connection is assumed.
host_variableA host variable containing the name of the database connection.

Usage Notes

When the connection count drops to zero, SQLLIB automatically frees all object cache memory. For more information, see "CACHE FREE ALL".

Example

EXEC SQL AT mydb CACHE FREE ALL ;

Related Topics

ALLOCATE (Executable Embedded SQL Extension).

FREE (Executable Embedded SQL Extension).

CALL (Executable Embedded SQL)

Purpose

To call a stored procedure.

Prerequisites

An active database connection must exist.

Syntax

CALL
Description of the illustration call.gif

Keywords and Parameters

Keywords and ParametersDescription
schemaIs the schema containing the procedure. If you omit schema, Oracle assumes the procedure is in your own schema.
pkgThe package where the procedure is stored.
st_procThe stored procedure to be called.
db_linkThe complete or partial name of a database link to a remote database where the procedure is located. For information on referring to database links, see the Oracle Database SQL Language Reference.
exprThe list of expressions that are the parameters of the procedure.
ret_varThe host variable that receives the returned value of a function.
ret_indThe indicator variable for ret_var.

Usage Notes

For more about this statement, see "Calling a Stored PL/SQL or Java Subprogram".

For a complete discussion of stored procedures, see Oracle Database Advanced Application Developer's Guide, "External Routines" chapter.

Example

int emp_no;
char emp_name[10];
float salary;
char dept_name[20];
...
emp_no = 1325;
EXEC SQL CALL get_sal(:emp_no, :emp_name, :salary) INTO :dept_name ;
/* Print emp_name, salary, dept_name */
...

Related Topics

None

CLOSE (Executable Embedded SQL)

Purpose

To disable a cursor, freeing the resources acquired by opening the cursor, and releasing parse locks.

Prerequisites

The cursor or cursor variable be open if MODE=ANSI.

Syntax

CLOSE
Description of the illustration close.gif

Keywords and Parameters

Keywords and ParametersDescription
cursorA cursor to be closed.
cursor_variableA cursor variable to be closed.

Usage Notes

Rows cannot be fetched from a closed cursor. A cursor need not be closed to be reopened. The HOLD_CURSOR and RELEASE_CURSOR precompiler options alter the effect of the CLOSE statement. For information on these options, see Chapter 10, " Precompiler Options".

Example

This example illustrates the use of the CLOSE statement:

EXEC SQL CLOSE emp_cursor;

Related Topics

PREPARE (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive).

OPEN (Executable Embedded SQL).

COLLECTION APPEND (Executable Embedded SQL Extension)

Purpose

To append elements of one collection to the end of another collection.

Prerequisites

You cannot append to a NULL collection, or append beyond the upper bound of a collection.

Syntax

COLLECTION APPEND
Description of the illustration collapp.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COLLECTION APPEND".

Related Topics

See the other COLLECTION statements.

COLLECTION DESCRIBE (Executable Embedded SQL Extension)

Purpose

To obtain information about a collection.

Prerequisites

Use the ALLOCATE and OBJECT GET statements to allocate a descriptor and to store collection attributes in the descriptor.

Syntax

COLLECTION DESCRIBE
Description of the illustration colldes.gif

where attrib is:

attrib
Description of the illustration collatt.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COLLECTION DESCRIBE".

Related Topics

See the other COLLECTION statements.

COLLECTION GET (Executable Embedded SQL Extension)

Purpose

To retrieve the elements of a collection.

Syntax

COLLECTION GET
Description of the illustration collget.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "Collection Statements".

Related Topics

See the other COLLECTION statements.

COLLECTION RESET (Executable Embedded SQL Extension)

Purpose

To reset the collection slice endpoints back to the beginning of the collection.

Syntax

COLLECTION RESET
Description of the illustration collres.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COLLECTION RESET".

Related Topics

See the other COLLECTION statements.

COLLECTION SET (Executable Embedded SQL Extension)

Purpose

To update element values in the current slice of a collection.

Syntax

COLLECTION SET
Description of the illustration collset.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COLLECTION SET".

Related Topics

See the other COLLECTION statements.

COLLECTION TRIM (Executable Embedded SQL Extension)

Purpose

To remove elements from the end of collection.

Syntax

COLLECTION TRIM
Description of the illustration colltr.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COLLECTION TRIM".

Related Topics

See the other COLLECTION statements.

COMMIT (Executable Embedded SQL)

Purpose

To end your current transaction, making permanent all its changes to the database and optionally freeing all resources and disconnecting.

Prerequisites

To commit your current transaction, no privileges are necessary.

To manually commit a distributed in-doubt transaction that you originally committed, you must have FORCE TRANSACTION system privilege. To manually commit a distributed in-doubt transaction that was originally committed by another user, you must have FORCE ANY TRANSACTION system privilege.

Syntax

COMMIT
Description of the illustration commit.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database to which the COMMIT statement is issued. The database can be identified by either:

db_name: is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: is a host variable whose value is a db_name. If you omit this clause, Oracle issues the statement to your default database.

WORKIs supported only for compliance with standard SQL. The statements COMMIT and COMMIT WORK are equivalent.
COMMENTSpecifies a Comment to be associated with the current transaction. The 'text' is a quoted literal of up to 50 characters that Oracle stores in the data dictionary view DBA_2PC_PENDING along with the transaction ID if the transaction becomes in-doubt.
RELEASEFrees all resources and disconnects the application from the server.
FORCEManually commits an in-doubt distributed transaction. The transaction is identified by the 'text' containing its local or global transaction ID. To find the IDs of such transactions, query the data dictionary view DBA_2PC_PENDING. You can also use the optional integer to explicitly assign the transaction a system change number (SCN). If you omit the integer, the transaction is committed using the current SCN.

Usage Notes

Always explicitly commit or rollback the last transaction in your program by using the COMMIT or ROLLBACK statement and the RELEASE option. Oracle automatically rolls back changes if the program terminates abnormally.

The COMMIT statement has no effect on host variables or on the flow of control in the program. For more information on this statement, see Chapter 3, "Database Concepts".

Example

This example illustrates the use of the embedded SQL COMMIT statement:

EXEC SQL AT sales_db COMMIT RELEASE;

Related Topics

ROLLBACK (Executable Embedded SQL).

SAVEPOINT (Executable Embedded SQL).

CONNECT (Executable Embedded SQL Extension)

Purpose

To log on to a database.

Prerequisites

You must have CREATE SESSION system privilege in the specified database.

Syntax

CONNECT
Description of the illustration connect.gif

Keywords and Parameters

Keywords and ParametersDescription
user passwordSpecifies your username and password separately.
user_passwordA single host variable containing the username and password separated by a slash (/).

To allow Oracle to verify your connection through your operating system, specify "/" as the :user_password value.

ATIdentifies the database to which the connection is made. The database can be identified by either:

db_name: is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: is a host variable whose value is a db_name. If you omit this clause, Oracle issues the statement to your default database.

USINGUses the Oracle Net database specification string used to connect to a nondefault database. If you omit this clause, you are connected to your default database.
ALTER AUTHORIZATIONChange password to the following string.
new_passwordThe new password.
IN SYSDBA MODE

IN SYSOPER MODE

Connect with SYSDBA or SYSOPER system privileges. Not allowed when ALTER AUTHORIZATION is used, or precompiler option AUTO_CONNECT is set to YES.

Usage Notes

A program can have multiple connections, but can only connect once to your default database. For more information on this statement, see "Embedded OCI Release 7 Calls".

Example

The following example illustrate the use of CONNECT:

EXEC SQL CONNECT :username 
    IDENTIFIED BY :password ;

You can also use this statement in which the value of userid is the value of username and the value of password separated by a "/", such as 'SCOTT/TIGER':

EXEC SQL CONNECT :userid ;

Related Topics

COMMIT (Executable Embedded SQL).

DECLARE DATABASE (Oracle Embedded SQL Directive).

ROLLBACK (Executable Embedded SQL).

CONTEXT ALLOCATE (Executable Embedded SQL Extension)

Purpose

To initialize a SQLLIB runtime context that is referenced in an EXEC SQL CONTEXT USE statement.

Prerequisites

The runtime context must be declared of type sql_context.

Syntax

CONTEXT ALLOCATE
Description of the illustration conall.gif

Keyword and Parameters

Keywords and ParametersDescription
contextIs the SQLLIB runtime context for which memory is to be allocated.

Usage Notes

In a multithreaded application, execute this function once for each runtime context.

For more information on this statement, see "SQLLIB Extensions for OCI Release 8 Interoperability".

Example

This example illustrates the use of a CONTEXT ALLOCATE statement in a Pro*C/C++ program:

EXEC SQL CONTEXT ALLOCATE :ctx1;

Related Topics

CONTEXT FREE (Executable Embedded SQL Extension).

CONTEXT USE (Oracle Embedded SQL Directive).

ENABLE THREADS (Executable Embedded SQL Extension).

CONTEXT FREE (Executable Embedded SQL Extension)

Purpose

To free all memory associated with a runtime context and place a null pointer in the host program variable.

Prerequisites

The CONTEXT ALLOCATE statement must be used to allocate memory for the specified runtime context before the CONTEXT FREE statement can free the memory allocated for it.

Syntax

CONTEXT FREE
Description of the illustration confree.gif

Keyword and Parameter

Keyword and ParameterDescription
:contextThe allocated runtime context for which the memory is to be deallocated.

Usage Notes

For more information on this statement, see "SQLLIB Extensions for OCI Release 8 Interoperability".

Example

This example illustrates the use of a CONTEXT FREE statement in a Pro*C/C++ program:

EXEC SQL CONTEXT FREE :ctx1;

Related Topics

CONTEXT ALLOCATE (Executable Embedded SQL Extension).

CONTEXT USE (Oracle Embedded SQL Directive).

ENABLE THREADS (Executable Embedded SQL Extension).

CONTEXT OBJECT OPTION GET (Executable Embedded SQL Extension)

Purpose

To determine the values of options set by CONTEXT OBJECT OPTION SET for the context in use.

Prerequisites

Precompiler option OBJECTS must be set to YES.

Syntax

CONTEXT OBJECT OPTION GET
Description of the illustration conobget.gif

Keywords and Parameters

Keywords and ParametersDescription
optionOption values are described in Table 17-1, "Valid Choices for CONTEXT OBJECT OPTION Values".
host_variableOutput variable of type STRING, VARCHAR, or CHARZ, in the same order as the option list.

Usage Notes

See "CONTEXT OBJECT OPTION SET".

Example

char EuroFormat[50];
...
EXEC SQL CONTEXT OBJECT OPTION GET DATEFORMAT INTO :EuroFormat ;
printf("Date format is %s\n", EuroFormat);

Related Topics

CONTEXT ALLOCATE (Executable Embedded SQL Extension).

CONTEXT FREE (Executable Embedded SQL Extension).

CONTEXT OBJECT OPTION SET (Executable Embedded SQL Ext) .

CONTEXT USE (Oracle Embedded SQL Directive).

CONTEXT OBJECT OPTION SET (Executable Embedded SQL Ext)

Purpose

To set options to specified values of Date attributes: DATEFORMAT, DATELANG for the context in use.

Prerequisites

Precompiler option OBJECTS must be set to YES.

Syntax

CONTEXT OBJECT OPTION GET
Description of the illustration conobset.gif

Keywords and Parameters

Keywords and ParametersDescription
optionOption values are described in Table 17-1, "Valid Choices for CONTEXT OBJECT OPTION Values".
host_variableInput variable of type STRING, VARCHAR, or CHARZ. In the same order as the option list.

Usage Notes

See "CONTEXT OBJECT OPTION GET".

Example

char *new_format = "DD-MM-YYY";
char *new_lang = "French";
...
EXEC SQL CONTEXT OBJECT OPTION SET DATEFORMAT, DATELANG TO :new_format, :new_lang;

Related Topics

CONTEXT ALLOCATE (Executable Embedded SQL Extension).

CONTEXT FREE (Executable Embedded SQL Extension).

CONTEXT USE (Oracle Embedded SQL Directive).

CONTEXT OBJECT OPTION SET (Executable Embedded SQL Ext) .

CONTEXT USE (Oracle Embedded SQL Directive)

Purpose

To instruct the precompiler to use the specified SQLLIB runtime context on subsequent executable SQL statements.

Prerequisites

The runtime context specified by the CONTEXT USE directive must be previously declared.

Syntax

CONTEXT USE
Description of the illustration conuse.gif

Keywords and Parameters

Keywords and ParametersDescription
contextThe allocated runtime context to use for subsequent executable SQL statements that follow it. For example, after specifying in your source code which context to use (multiple contexts can be allocated), you can connect to the Oracle Server and perform database operations within the scope of that context. DEFAULT indicates that the global context that you worked with is to be used.
DEFAULTIndicates that the global context is to be used.

Usage Notes

This statement has no effect on declarative statements such as EXEC SQL INCLUDE or EXEC ORACLE OPTION. It works similarly to the EXEC SQL WHENEVER directive in that it affects all executable SQL statements which positionally follow it in a given source file without regard to standard C scope rules.

For more information on this statement, see "SQLLIB Extensions for OCI Release 8 Interoperability".

Example

This example illustrates the use of a CONTEXT USE directive in a Pro*C/C++ embedded SQL program:

EXEC SQL CONTEXT USE :ctx1; 

Related Topics

CONTEXT ALLOCATE (Executable Embedded SQL Extension).

CONTEXT FREE (Executable Embedded SQL Extension).

ENABLE THREADS (Executable Embedded SQL Extension).

DEALLOCATE DESCRIPTOR (Embedded SQL Statement)

Purpose

An ANSI dynamic SQL statement that deallocates a descriptor area to free memory.

Prerequisites

The descriptor specified by the DEALLOCATE DESCRIPTOR statement must be previously allocated using the ALLOCATE DESCRIPTOR statement.

Syntax

DEALLOCATE DESCRIPTOR
Description of the illustration dealdesc.gif

Keywords and Parameters

Keywords and ParametersDescription
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
descriptor_name

'descriptor name'

Host variable containing the name of the allocated ANSI descriptor.

Name of the allocated ANSI descriptor.


Usage Notes

Use DYNAMIC=ANSI precompiler option.

For more information on this statement, see "DEALLOCATE DESCRIPTOR".

Example

EXEC SQL DEALLOCATE DESCRIPTOR GLOBAL 'SELDES' ;

Related Topics

ALLOCATE DESCRIPTOR (Executable Embedded SQL).

DESCRIBE (Executable Embedded SQL Extension).

GET DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

SET DESCRIPTOR (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive)

Purpose

To declare a cursor, giving it a name and associating it with a SQL statement or a PL/SQL block.

Prerequisites

If you associate the cursor with an identifier for a SQL statement or PL/SQL block, you must have declared this identifier in a previous DECLARE STATEMENT statement.

Syntax

DECLARE CURSOR
Description of the illustration dclco.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the cursor is declared. The database can be identified by either:
db_nameDatabase identifier declared in a previous DECLARE DATABASE statement.
host_variableHost variable whose value is a previously declared db_name.

If you omit this clause, Oracle declares the cursor on your default database.

cursorName of the cursor to be declared.
WITH HOLDCursor remains open after a COMMIT. The cursor must not be declared for UPDATE.
SELECT statementIs a SELECT statement to be associated with the cursor. The following statement cannot contain an INTO clause.
statement_nameIdentifies a SQL statement or PL/SQL block to be associated with the cursor. The statement_name or block_name must be previously declared in a DECLARE STATEMENT statement.

Usage Notes

You must declare a cursor before referencing it in other embedded SQL statements. The scope of a cursor declaration is global within its precompilation unit and the name of each cursor must be unique in its scope. You cannot declare two cursors with the same name in a single precompilation unit.

You can reference the cursor in the WHERE clause of an UPDATE or DELETE statement using the CURRENT OF syntax if the cursor has been opened with an OPEN statement and positioned on a row with a FETCH statement. For more information on this statement, see "Cursor Usage in Embedded PL/SQL".

Example

This example illustrates the use of a DECLARE CURSOR statement:

EXEC SQL DECLARE emp_cursor CURSOR 
    FOR SELECT ename, empno, job, sal 
        FROM emp 
        WHERE deptno = :deptno 
        FOR UPDATE OF sal; 

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE DATABASE (Oracle Embedded SQL Directive).

DECLARE STATEMENT (Embedded SQL Directive).

DELETE (Executable Embedded SQL).

FETCH (Executable Embedded SQL).

OPEN DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

SELECT (Executable Embedded SQL).

UPDATE (Executable Embedded SQL).

DECLARE DATABASE (Oracle Embedded SQL Directive)

Purpose

To declare an identifier for a nondefault database to be accessed in subsequent embedded SQL statements.

Prerequisites

You must have access to a username on the nondefaultnondefault database.

Syntax

DECLARE DATABASE
Description of the illustration dcldbase.gif

Keywords and Parameters

Keyword and ParameterDescription
db_nameIs the identifier established for the nondefault database.

Usage Notes

You declare a db_name for a nondefault database so that other embedded SQL statements can refer to that database using the AT clause. Before issuing a CONNECT statement with an AT clause, you must declare a db_name for the nondefault database with a DECLARE DATABASE statement.

For more information on this statement, see "Single Explicit Connection".

Example

This example illustrates the use of a DECLARE DATABASE directive:

EXEC SQL DECLARE oracle3 DATABASE ;

Related Topics

COMMIT (Executable Embedded SQL).

CONNECT (Executable Embedded SQL Extension).

DECLARE CURSOR (Embedded SQL Directive).

DECLARE STATEMENT (Embedded SQL Directive).

DELETE (Executable Embedded SQL).

EXECUTE ... END-EXEC (Executable Embedded SQL Extension).

EXECUTE IMMEDIATE (Executable Embedded SQL).

INSERT (Executable Embedded SQL).

SELECT (Executable Embedded SQL).

UPDATE (Executable Embedded SQL).

DECLARE STATEMENT (Embedded SQL Directive)

Purpose

To declare an identifier for a SQL statement or PL/SQL block to be used in other embedded SQL statements.

Prerequisites

None.

Syntax

DECLARE STATEMENT
Description of the illustration dcl_stmt.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the SQL statement or PL/SQL block is declared. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a db_name. If you omit this clause, Oracle declares the SQL statement or PL/SQL block to your default database.

statement_nameIs the declared identifier for the statement.

Usage Notes

You must declare an identifier for a SQL statement or PL/SQL block with a DECLARE STATEMENT statement only if a DECLARE CURSOR statement referencing the identifier appears physically (not logically) in the embedded SQL program before the PREPARE statement that parses the statement or block and associates it with its identifier.

The scope of a statement declaration is global within its precompilation unit, like a cursor declaration. For more information on this statement, see Chapter 4, "Datatypes and Host Variables" and Chapter 13, "Oracle Dynamic SQL".

Example I

This example illustrates the use of the DECLARE STATEMENT statement:

EXEC SQL AT remote_db DECLARE my_statement STATEMENT; 
EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL EXECUTE my_statement; 

Example II

In this example from a Pro*C/C++ embedded SQL program, the DECLARE STATEMENT statement is required because the DECLARE CURSOR statement precedes the PREPARE statement:

EXEC SQL DECLARE my_statement STATEMENT; 
EXEC SQL DECLARE emp_cursor CURSOR FOR my_statement; 
EXEC SQL PREPARE my_statement FROM :my_string; 
...

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE DATABASE (Oracle Embedded SQL Directive).

FETCH (Executable Embedded SQL).

OPEN DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

DECLARE TABLE (Oracle Embedded SQL Directive)

Purpose

To define the structure of a table or view, including each column's datatype, default value, and NULL or NOT NULL specification for semantic checking by the Oracle Precompilers.

Prerequisites

None.

Syntax

For relational tables, the syntax is:

DECLARE TABLE
Description of the illustration dcltab.gif

For object tables, the syntax is:.

DECLARE TALBE for object tables
Description of the illustration dcltabob.gif

Keywords and Parameters

Keywords and ParametersDescription
tableIs the name of the declared table.
columnIs a column of the table.
datatypeIs the datatype of a column. For information on datatypes, see "Oracle Datatypes".

If the datatype is a user-defined object, a size may be entered in parentheses. The size cannot be a macro or a complex C expression. The size can be omitted. See examples.

NOT NULLSpecifies that a column cannot contain NULLs.
obj_typeIs an object type.

Usage Notes

For information on using this statement, see "Using DECLARE TABLE".

Examples

The following statement declares the PARTS table with the PARTNO, BIN, and QTY columns:

EXEC SQL DECLARE parts TABLE 
     (partno NUMBER  NOT NULL, 
      bin    NUMBER, 
      qty    NUMBER); 

Use of an object type:

EXEC SQL DECLARE person TYPE AS OBJECT (name VARCHAR2(20), age INT);
EXEC SQL DECLARE odjtab1 TABLE OF person;

Related Topics

DECLARE TYPE (Oracle Embedded SQL Directive).

DECLARE TYPE (Oracle Embedded SQL Directive)

Purpose

To define the attributes of a type for a semantics check by the precompiler.

Prerequisites

None.

Syntax

DECLARE TYPE
Description of the illustration dcltype.gif

Keywords and Parameters

Keywords and ParametersDescription
columnName of column.
datatypeThe datatype of the column
sizeNumber of elements in the VARRAY.
element_typeType of element in the VARRAY. It can be an object.
object_typeA previously declared object type.

Usage Notes

For information on using this statement, see "Using DECLARE TYPE".

Example

EXEC SQL DECLARE project_type TYPE AS OBJECT(
              pno           CHAR(5),
              pname         CHAR(20),
              budget        NUMBER);
EXEC SQL DECLARE project_array TYPE as VARRAY(20) OF project_type ;
EXEC SQL DECLARE employees TYPE AS TABLE OF emp_objects ;

Related Topics

DECLARE TABLE (Oracle Embedded SQL Directive).

DELETE (Executable Embedded SQL)

Purpose

To remove rows from a table or from a view's base table.

Prerequisites

For you to delete rows from a table, the table must be in your own schema or you must have DELETE privilege on the table.

For you to delete rows from the base table of a view, the owner of the schema containing the view must have DELETE privilege on the base table. Also, if the view is in a schema other than your own, you must be granted DELETE privilege on the view.

The DELETE ANY TABLE system privilege also provides the ability to delete rows from any table or any view's base table.

Syntax

DELETE
Description of the illustration delete.gif

Where the DML returning clause is:

DML returning clause of DELETE
Description of the illustration return.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database to which the DELETE statement is issued. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a previously declared db_name. If you omit this clause, the DELETE statement is issued to your default database.

FOR :host_integerLimits the number of times the statement is executed if the WHERE clause contains array host variables. If you omit this clause, Oracle executes the statement once for each component of the smallest array.
subqueryIs a subquery that returns new values that are assigned to the corresponding columns. For the syntax of a subquery, see "SELECT" in Oracle Database SQL Language Reference.
schemaIs the schema containing the table or view. If you omit schema, Oracle assumes the table or view is in your own schema.
tableThe name of a table from which the rows are to be deleted.
viewThe name of a view. Oracle deletes rows from the view's base table.
FOR :host_integerLimits the number of times the statement is executed if the WHERE clause contains array host variables. If you omit this clause, Oracle executes the statement once for each component of the smallest array.
subqueryIs a subquery that returns new values that are assigned to the corresponding columns. For the syntax of a subquery, see "SELECT" in Oracle Database SQL Language Reference.
schemaIs the schema containing the table or view. If you omit schema, Oracle assumes the table or view is in your own schema.
tableThe name of a table from which the rows are to be deleted.
viewThe name of a view. Oracle deletes rows from the view's base table.

Usage Notes

The host variables in the WHERE clause must be either all scalars or all arrays. If they are scalars, Oracle executes the DELETE statement only once. If they are arrays, Oracle executes the statement once for each set of array components. Each execution may delete zero, one, or multiple rows.

Array host variables in the WHERE clause can have different sizes. In this case, the number of times Oracle executes the statement is determined by the smaller of the following values:

If no rows satisfy the condition, no rows are deleted and the SQLCODE returns a NOT_FOUND condition.

The cumulative number of rows deleted is returned through the SQLCA. If the WHERE clause contains array host variables, this value reflects the total number of rows deleted for all components of the array processed by the DELETE statement.

If no rows satisfy the condition, Oracle returns an error through the SQLCODE of the SQLCA. If you omit the WHERE clause, Oracle raises a warning flag in the fifth component of SQLWARN in the SQLCA. For more information on this statement and the SQLCA, see Chapter 9, "Handling Runtime Errors".

You can use Comments in a DELETE statement to pass instructions, or hints, to the optimizer. The optimizer uses hints to choose an execution plan for the statement. For more information on hints, see Oracle Database Performance Tuning Guide.

Example

This example illustrates the use of the DELETE statement within a Pro*C/C++ embedded SQL program:

EXEC SQL DELETE FROM emp 
    WHERE deptno = :deptno 
    AND job = :job;

EXEC SQL DECLARE emp_cursor CURSOR 
    FOR SELECT empno, comm 
        FROM emp; 
EXEC SQL OPEN emp_cursor; 
EXEC SQL FETCH c1 
    INTO :emp_number, :commission; 
EXEC SQL DELETE FROM emp 
    WHERE CURRENT OF emp_cursor; 

Related Topics

DECLARE DATABASE (Oracle Embedded SQL Directive) .

DECLARE STATEMENT (Embedded SQL Directive) .

DESCRIBE (Executable Embedded SQL Extension)

Purpose

To populate an Oracle descriptor with information about a dynamic SQL statement or PL/SQL block.

Prerequisites

You must have prepared the SQL statement or PL/SQL block in a previous embedded SQL PREPARE statement.

Syntax

DESCRIBE
Description of the illustration describe.gif

Keywords and Parameters

Keywords and ParametersDescription
BIND VARIABLES FORInitializes the descriptor to hold information about the input variables for the SQL statement or PL/SQL block.
SELECT LIST FORInitializes the descriptor to hold information about the select list of a SELECT statement.

The default is SELECT LIST FOR.

statement_nameIdentifies a SQL statement or PL/SQL block previously prepared with a PREPARE statement.
descriptorIs the name of the descriptor to be populated.

Usage Notes

You must issue a DESCRIBE statement before manipulating the bind or select descriptor within an embedded SQL program.

You cannot describe both input variables and output variables into the same descriptor.

The number of variables found by a DESCRIBE statement is the total number of place-holders in the prepare SQL statement or PL/SQL block, rather than the total number of uniquely named place-holders. For more information on this statement, see Chapter 13, "Oracle Dynamic SQL".

Example

This example illustrates the use of the DESCRIBE statement in a Pro*C/C++ embedded SQL program:

EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL DECLARE emp_cursor 
    FOR SELECT empno, ename, sal, comm 
            FROM emp 
            WHERE deptno = :dept_number;
EXEC SQL DESCRIBE BIND VARIABLES FOR my_statement 
    INTO bind_descriptor; 
EXEC SQL OPEN emp_cursor 
    USING bind_descriptor; 
EXEC SQL DESCRIBE SELECT LIST FOR my_statement 
    INTO select_descriptor; 
EXEC SQL FETCH emp_cursor 
    INTO select_descriptor; 

Related Topics

PREPARE (Executable Embedded SQL).

DESCRIBE DESCRIPTOR (Executable Embedded SQL)

Purpose

An ANSI dynamic SQL statement used to obtain information about a SQL statement, and to store it in a descriptor.

Prerequisites

You must have prepared the SQL statement in a previous embedded SQL PREPARE statement.

Syntax

DESCRIBE DESCRIPTO��R
Description of the illustration descans.gif

Keywords and Parameters

Keywords and ParametersDescription
statement_idThe name of the previously prepared SQL statement or PL/SQL block. OUTPUT is the default.
desc_nameHost variable containing the name of the descriptor that will hold information about the SQL statement.
'descriptor name'The name of the descriptor.
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.

Usage Notes

Use DYNAMIC=ANSI precompiler option.

Only COUNT and NAME are implemented for the INPUT descriptor.

The number of variables found by a DESCRIBE statement is the total number of place-holders in the prepare SQL statement or PL/SQL block, rather than the total number of uniquely named place-holders. For more information on this statement, see "DESCRIBE INPUT" , and "DESCRIBE OUTPUT".

Example

EXEC SQL PREPARE s FROM :my_stament; 
EXEC SQL DESCRIBE INPUT s USING DESCRIPTOR 'in' ;

Related Topics

ALLOCATE DESCRIPTOR (Executable Embedded SQL).

DEALLOCATE DESCRIPTOR (Embedded SQL Statement).

GET DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

SET DESCRIPTOR (Executable Embedded SQL).

ENABLE THREADS (Executable Embedded SQL Extension)

Purpose

To initialize a process that supports multiple threads.

Prerequisites

You must be developing a precompiler application for and compiling it on a platform that supports multithreaded applications, and THREADS=YES must be specified on the command line.


Note:

When using XA with the Pro*C/C++ Precompiler, you must use multithreaded processing provided by XA. Use of multithreaded processing provided by Pro*C/C++ using the statement EXEC SQL ENABLE THREADS will result in an error.

Syntax

ENABLE THREADS
Description of the illustration enable_t.gif

Keywords and Parameters

None.

Usage Notes

The ENABLE THREADS statement must be executed before any other executable SQL statement and before spawning any thread. This statement does not require a host-variable specification.

For more information on this statement, see "SQLLIB Extensions for OCI Release 8 Interoperability".

Example

This example illustrates the use of the ENABLE THREADS statement in a Pro*C/C++ program:

EXEC SQL ENABLE THREADS;

Related Topics

CONTEXT ALLOCATE (Executable Embedded SQL Extension).

CONTEXT FREE (Executable Embedded SQL Extension).

CONTEXT USE (Oracle Embedded SQL Directive).

EXECUTE ... END-EXEC (Executable Embedded SQL Extension)

Purpose

To embed an anonymous PL/SQL block into a Pro*C/C++ program.

Prerequisites

None.

Syntax

EXECUTE...END-EXEC
Description of the illustration execeex.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the PL/SQL block is executed. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a previously declared db_name. If you omit this clause, the PL/SQL block is executed on your default database

pl/sql_blockFor information on PL/SQL, including how to write PL/SQL blocks, see the Oracle Database PL/SQL Language Reference.
END-EXECThis keyword must appear after the embedded PL/SQL block, regardless of which programming language your Oracle Precompiler program uses. The keyword END-EXEC must be followed by the C/C++ statement terminator, ";".

Usage Notes

Since the Pro*C/C++ treats an embedded PL/SQL block like a single embedded SQL statement, you can embed a PL/SQL block anywhere in a program that you can embed a SQL statement. For more information on embedding PL/SQL blocks in Oracle Precompiler programs, see Chapter 7, " Embedded PL/SQL".

Example

Placing this EXECUTE statement in a Pro*C/C++ program embeds a PL/SQL block in the program:

EXEC SQL EXECUTE 
    BEGIN 
        SELECT ename, job, sal 
            INTO :emp_name:ind_name, :job_title, :salary 
            FROM emp 
            WHERE empno = :emp_number; 
        IF :emp_name:ind_name IS NULL 
            THEN RAISE name_missing; 
        END IF; 
    END; 
END-EXEC; 

Related Topics

EXECUTE IMMEDIATE (Executable Embedded SQL).

EXECUTE (Executable Embedded SQL)

Purpose

In Oracle dynamic SQL, to execute a DELETE, INSERT, or UPDATE statement or a PL/SQL block that has been previously prepared with an embedded SQL PREPARE statement. For ANSI Dynamic SQL Method 4 see "EXECUTE DESCRIPTOR (Executable Embedded SQL)".

Prerequisites

You must first prepare the SQL statement or PL/SQL block with an embedded SQL PREPARE statement.

Syntax

EXECUTE
Description of the illustration execo.gif

Keywords and Parameters

Keywords and ParametersDescription
FOR :array_sizeHost variable containing the number of rows to be processed.

Number of rows to be processed.

FOR integerLimits the number of times the statement is executed when the USING clause contains array host variables If you omit this clause, Oracle executes the statement once for each component of the smallest array.
statement_idA precompiler identifier associated with the SQL statement or PL/SQL block to be executed. Use the embedded SQL PREPARE statement to associate the precompiler identifier with the statement or PL/SQL block.
USING DESCRIPTOR SQLDA_descriptorUses an Oracle descriptor. CANNOT be used together with an ANSI descriptor (INTO clause).
USINGSpecifies a list of host variables with optional indicator variables that Oracle substitutes as input variables into the statement to be executed. The host and indicator variables must be either all scalars or all arrays.
host_variableHost variables.
indicator_variableIndicator variables.

Usage Notes

For more information on this statement, see Chapter 13, "Oracle Dynamic SQL" for the Oracle version.

Example

This example illustrates the use of the EXECUTE statement in a Pro*C/C++ program:

EXEC SQL PREPARE my_statement 
    FROM :my_string; 
EXEC SQL EXECUTE my_statement
    USING :my_var; 

Related Topics

DECLARE DATABASE (Oracle Embedded SQL Directive).

PREPARE (Executable Embedded SQL).

EXECUTE DESCRIPTOR (Executable Embedded SQL)

Purpose

In ANSI SQL Method 4, to execute a DELETE, INSERT, or UPDATE statement or a PL/SQL block that has been previously prepared with an embedded SQL PREPARE statement.

Prerequisites

You must first prepare the SQL statement or PL/SQL block with an embedded SQL PREPARE statement.

Syntax

EXECUTE DESCRIPTOR
Description of the illustration execa.gif

Keywords and Parameters

Keywords and ParametersDescription
FOR :array_sizeHost variable containing the number of rows to be processed.

Number of rows to be processed.

FOR integerLimits the number of times the statement is executed. Oracle executes the statement once for each component of the smallest array.
statement_idA precompiler identifier associated with the SQL statement or PL/SQL block to be executed. Use the embedded SQL PREPARE statement to associate the precompiler identifier with the statement or PL/SQL block.
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
USINGAn ANSI descriptor.
descriptor_nameHost variable containing name of the input descriptor.
'descriptor name'Name of the input descriptor.
INTOAn ANSI descriptor.
descriptor_nameHost variable containing name of the output descriptor.
'descriptor name'Name of the output descriptor.
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.

Usage Notes

For more information on this statement, see Chapter 14, " ANSI Dynamic SQL".

Examples

The ANSI dynamic SQL Method 4 allows DML Returning clauses in a SELECT to be supported by the INTO clause in EXECUTE:

EXEC SQL EXECUTE S2 USING DESCRIPTOR :bv1 INTO DESCRIPTOR 'SELDES' ;

Related Topics

DECLARE DATABASE (Oracle Embedded SQL Directive).

PREPARE (Executable Embedded SQL).

EXECUTE IMMEDIATE (Executable Embedded SQL)

Purpose

To prepare and execute a DELETE, INSERT, or UPDATE statement or a PL/SQL block containing no host variables.

EXECUTE IMMEDIATE
Description of the illustration execi.gif

Prerequisites

None.

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the SQL statement or PL/SQL block is executed. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a previously declared db_name. If you omit this clause, the statement or block is executed on your default database.

textIs a quoted text literal (or a text literal without quotes) containing the SQL statement or PL/SQL block to be executed.

The SQL statement can only be a DELETE, INSERT, or UPDATE statement.

host_stringA host variable containing a SQL statement.

Usage Notes

When you issue an EXECUTE IMMEDIATE statement, Oracle parses the specified SQL statement or PL/SQL block, checking for errors, and executes it. If any errors are encountered, they are returned in the SQLCODE component of the SQLCA.

For more information on this statement, see Chapter 13, "Oracle Dynamic SQL" and Chapter 14, " ANSI Dynamic SQL".

Example

This example illustrates the use of the EXECUTE IMMEDIATE statement:

EXEC SQL EXECUTE IMMEDIATE 'DELETE FROM emp WHERE empno = 9460' ;

Related Topics

EXECUTE (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

FETCH (Executable Embedded SQL)

Purpose

In Oracle dynamic SQL, to retrieve one or more rows returned by a query, assigning the select list values to host variables. For ANSI Dynamic SQL Method 4 see "FETCH DESCRIPTOR (Executable Embedded SQL)".

Prerequisites

You must first open the cursor with an OPEN statement.

Syntax

FETCH
Description of the illustration fetcho.gif

Keywords and Parameters

Keywords and ParametersDescription
FOR :array_sizeHost variable containing the number of rows to be processed.

Number of rows to be processed.

FOR integerLimits the number of rows fetched if you are using array host variables. If you omit this clause, Oracle fetches enough rows to fill the smallest array.
cursorA cursor that is declared by a DECLARE CURSOR statement. The FETCH statement returns one of the rows selected by the query associated with the cursor.
cursor_variableA cursor variable is allocated an ALLOCATE statement. The FETCH statement returns one of the rows selected by the query associated with the cursor variable.
INTOSpecifies a list of host variables and optional indicator variables into which data is fetched. These host variables and indicator variables must be declared within the program.
host_variableHost variables to receive data,
indicator_variablesHost indicator variables.
USING SQLDA_variableSpecifies the Oracle descriptor referenced in a previous DESCRIBE statement. Only use this clause with dynamic embedded SQL, method 4. The USING clause does not apply when a cursor variable is used.

Usage Notes

The FETCH statement reads the rows of the active set and names the output variables which contain the results. Indicator values are set to -1 if their associated host variable is NULL. The first FETCH statement for a cursor also sorts the rows of the active set, if necessary.

The number of rows retrieved is specified by the size of the output host variables and the value specified in the FOR clause. The host variables to receive the data must be either all scalars or all arrays. If they are scalars, Oracle fetches only one row. If they are arrays, Oracle fetches enough rows to fill the arrays.

Array host variables can have different sizes. In this case, the number of rows Oracle fetches is determined by the smaller of the following values:

Of course, the number of rows fetched can be further limited by the number of rows that actually satisfy the query.

If a FETCH statement does not retrieve all rows returned by the query, the cursor is positioned on the next returned row. When the last row returned by the query has been retrieved, the next FETCH statement results in an error code returned in the SQLCODE element of the SQLCA.

The FETCH statement does not contain an AT clause. You must specify the database accessed by the cursor in the DECLARE CURSOR statement.

You can only move forward through the active set with FETCH statements. If you want to revisit any of the previously fetched rows, you must reopen the cursor and fetch each row in turn. If you want to change the active set, you must assign new values to the input host variables in the cursor's query and reopen the cursor.

For more information, see "The FETCH Statement" for the Oracle descriptor.

Example

This example illustrates the FETCH statement:

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT job, sal FROM emp WHERE deptno = 30; 
EXEC SQL OPEN emp_cursor;
... 
EXEC SQL WHENEVER NOT FOUND GOTO ... 
for(;;)
    {
    EXEC SQL FETCH emp_cursor INTO :job_title1, :salary1; 
    ... 
    }

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive).

OPEN (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

FETCH DESCRIPTOR (Executable Embedded SQL)

Purpose

To retrieve one or more rows returned by a query, assigning the select list values to host variables. Used in ANSI Dynamic SQL Method 4.

Prerequisites

You must first open the cursor with an the OPEN statement.

Syntax

FETCH DESCRIPTOR
Description of the illustration fetcha.gif

Keywords and Parameters

Keywords and ParametersDescription
array_sizeHost variable containing the number of rows to be processed.

Number of rows to be processed.

integerLimits the number of rows fetched if you are using array host variables. If you omit this clause, Oracle fetches enough rows to fill the smallest array.
cursorA cursor that has been declared by a DECLARE CURSOR statement. The FETCH statement returns one of the rows selected by the query associated with the cursor.
cursor_variableA cursor variable is allocated an ALLOCATE statement. The FETCH statement returns one of the rows selected by the query associated with the cursor variable.
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
INTOSpecifies a list of host variables and optional indicator variables into which data is fetched. These host variables and indicator variables must be declared within the program.
descriptor name'

:descriptor_name

Name of the output ANSI descriptor.

Host variable containing the name of the output descriptor.


Usage Notes

The number of rows retrieved is specified by the size of the output host variables and the value specified in the FOR clause. The host variables to receive the data must be either all scalars or all arrays. If they are scalars, Oracle fetches only one row. If they are arrays, Oracle fetches enough rows to fill the arrays.

Array host variables can have different sizes. In this case, the number of rows Oracle fetches is determined by the smaller of the following values:

Of course, the number of rows fetched can be further limited by the number of rows that actually satisfy the query.

If a FETCH statement does not retrieve all rows returned by the query, the cursor is positioned on the next returned row. When the last row returned by the query has been retrieved, the next FETCH statement results in an error code returned in the SQLCODE element of the SQLCA.

The FETCH statement does not contain an AT clause. You must specify the database accessed by the cursor in the DECLARE CURSOR statement.

You can only move forward through the active set with FETCH statements. If you want to revisit any of the previously fetched rows, you must reopen the cursor and fetch each row in turn. If you want to change the active set, you must assign new values to the input host variables in the cursor's query and reopen the cursor.

Use DYNAMIC=ANSI precompiler option for the ANSI SQL Method 4 application. For more information, see "FETCH" for the ANSI SQL Method 4 application.

Example

...
EXEC SQL ALLOCATE DESCRIPTOR 'output_descriptor' ;
...
EXEC SQL PREPARE S FROM :dyn_statement ;
EXEC SQL DECLARE mycursor CURSOR FOR S ;
...
EXEC SQL FETCH mycursor INTO DESCRIPTOR 'output_descriptor' ;
...

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive).

OPEN DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

FREE (Executable Embedded SQL Extension)

Purpose

To free memory in the object cache.

Prerequisites

The memory has to have been already allocated.

An active database connection must exist.

Syntax

FREE
Description of the illustration free.gif

Keywords and Parameters

Keywords and ParametersDescription
dbnameA null-terminated string containing the database connection name, as established previously in a CONNECT statement. If omitted, or if an empty string, the default database connection is assumed.
host_ptrA host-variable pointer that was previously ALLOCATED.
ind_ptrAn indicator pointer.

Usage Notes

Any memory in the object cache will be freed automatically when the connection is terminated. See "FREE" for more information.

Example

EXEC SQL FREE :ptr ;

Related Topics

ALLOCATE (Executable Embedded SQL Extension).

CACHE FREE ALL (Executable Embedded SQL Extension).

GET DESCRIPTOR (Executable Embedded SQL)

Purpose

To obtain information about host variables from a SQL descriptor area.

Prerequisites

Use only with value semantics.

Syntax

GET DESCRIPTOR
Description of the illustration getdesc.gif

where item_name can be one of these choices:

choices of item_name
Description of the illustration getdnc.gif

Keywords and Parameters

Keywords and ParametersDescription
array_sizeHost variable containing the number of rows to be processed.
integerNumber of rows to be processed.
descriptor_name

'descriptor name'

Host variable containing the name of the allocated ANSI descriptor.

Name of the allocated ANSI descriptor.

GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
host_var = COUNTHost variable containing the total number of input or output variables.
integerTotal number of input or output variables.
VALUE :host_integerHost variable containing the position of the referenced input or output variable.
VALUE integerThe position of the referenced input or output variable.
host_varHost variable which will receive the item's value.
item_nameWhere item_name is found in Table 14-4, "Definitions of Descriptor Item Names for GET DESCRIPTOR", and Table 14-5, "Oracle Extensions to Definitions of Descriptor Item Names for GET DESCRIPTOR".

Usage Notes

Use DYNAMIC=ANSI precompiler option. The array size clause can be used with DATA, RETURNED_LENGTH, and INDICATOR item names. See GET DESCRIPTOR.

Example

EXEC SQL GET DESCRIPTOR GLOBAL 'mydesc' :mydesc_num_vars = COUNT ;

Related Topics

ALLOCATE DESCRIPTOR (Executable Embedded SQL).

DEALLOCATE DESCRIPTOR (Embedded SQL Statement).

SET DESCRIPTOR (Executable Embedded SQL).

INSERT (Executable Embedded SQL)

Purpose

To add rows to a table or to a view's base table.

Prerequisites

For you to insert rows into a table, the table must be in your own schema or you must have INSERT privilege on the table.

For you to insert rows into the base table of a view, the owner of the schema containing the view must have INSERT privilege on the base table. Also, if the view is in a schema other than your own, you must have INSERT privilege on the view.

The INSERT ANY TABLE system privilege also provides the ability to insert rows into any table or any view's base table.

Syntax

INSERT
Description of the illustration insert.gif

Where the DML returning clause is:

DML returning clause of INSERT
Description of the illustration return.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the INSERT statement is executed. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a db_name. If you omit this clause, the INSERT statement is executed on your default database.

FOR :host_integer

integer

Limits the number of times the statement is executed if the VALUES clause contains array host variables.

If you omit this clause, Oracle executes the statement once for each component in the smallest array.

schemaThe schema containing the table or view. If you omit schema, Oracle assumes the table or view is in your own schema.
table

view

The name of the table into which rows are to be inserted.

If you specify view, Oracle inserts rows into the view's base table.

db_linkA complete or partial name of a database link to a remote database where the table or view is located. For information on referring to database links, see the Oracle Database SQL Language Reference.

You can only insert rows into a remote table or view if you are using Oracle with the distributed option.

If you omit dblink, Oracle assumes that the table or view is on the local database.

part_nameIs the name of a partition of the table.
columnIf you omit one of the table's columns from this list, the column's value for the inserted row is the column's default value as specified when the table was created. If you omit the column list altogether, the VALUES clause or query must specify values for all columns in the table.
VALUESSpecifies a row of values to be inserted into the table or view. See the syntax description in Oracle Database SQL Language Reference. The expressions can be host variables with optional indicator variables. You must specify an expression in the VALUES clause for each column in the column list.
subqueryIs a subquery that returns rows that are inserted into the table. The select list of this subquery must have the same number of columns as the column list of the INSERT statement. For the syntax description of a subquery, see "SELECT" in Oracle Database SQL Language Reference.
DML returning clauseSee "The DML Returning Clause".

Usage Notes

Any host variables that appear in the WHERE clause must be either all scalars or all arrays. If they are scalars, Oracle executes the INSERT statement once. If they are arrays, Oracle executes the INSERT statement once for each set of array components, inserting one row each time.

Array host variables in the WHERE clause can have different sizes. In this case, the number of times Oracle executes the statement is determined by the smaller of the following values:

For more information on this statement, see "The INSERT Statement".

Example I

This example illustrates the use of the embedded SQL INSERT statement:

EXEC SQL 
     INSERT INTO emp (ename, empno, sal) 
     VALUES (:ename, :empno, :sal) ; 

Example II

This example shows an embedded SQL INSERT statement with a subquery:

EXEC SQL 
   INSERT INTO new_emp (ename, empno, sal) 
   SELECT ename, empno, sal FROM emp
   WHERE deptno = :deptno ; 

Related Topics

DECLARE DATABASE (Oracle Embedded SQL Directive).

LOB APPEND (Executable Embedded SQL Extension)

Purpose

To append a LOB to the end of another LOB.

Prerequisites

LOB buffering must not be enabled.The destination LOB must have been initialized.

Syntax

LOB APPEND
Description of the illustration lobapp.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "APPEND".

Related Topics

See the other LOB statements.

LOB ASSIGN (Executable Embedded SQL Extension)

Purpose

To assign a LOB or BFILE locator to another locator.

Syntax

LOB ASSIGN
Description of the illustration lobass.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "ASSIGN".

Related Topics

See the other LOB statements.

LOB CLOSE (Executable Embedded SQL Extension)

Purpose

To close an open LOB or BFILE.

Syntax

LOB CLOSE
Description of the illustration lobclose.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "CLOSE".

Related Topics

See the other LOB statements.

LOB COPY (Executable Embedded SQL Extension)

Purpose

To copy all or part of a LOB value into another LOB.

Syntax

LOB COPY
Description of the illustration lobcop.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "COPY".

Related Topics

See the other LOB statements.

LOB CREATE TEMPORARY (Executable Embedded SQL Extension)

Purpose

To create a temporary LOB.

Syntax

LOB CREATE TEMPORARY
Description of the illustration lobcreat.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "CREATE TEMPORARY".

Related Topics

See the other LOB statements.

LOB DESCRIBE (Executable Embedded SQL Extension)

Purpose

To retrieve attributes from a LOB.

Syntax

LOB DESCRIBE
Description of the illustration lobdesc.gif

where attrib is:

attrib
Description of the illustration lobatt.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "DESCRIBE".

Related Topics

See the other LOB statements.

LOB DISABLE BUFFERING (Executable Embedded SQL Extension)

Purpose

To disable LOB buffering.

Syntax

LOB DISABLE BUFFERING
Description of the illustration lobdisab.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "DISABLE BUFFERING".

Related Topics

See the other LOB statements.

LOB ENABLE BUFFERING (Executable Embedded SQL Extension)

Purpose

To enable LOB buffering.

Syntax

LOB ENABLE BUFFERING
Description of the illustration lobenab.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "ENABLE BUFFERING"

Related Topics

See the other LOB statements.

LOB ERASE (Executable Embedded SQL Extension)

Purpose

To erase a given amount of LOB data starting from a given offset.

Syntax

LOB ERASE
Description of the illustration loberas.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "ERASE".

Related Topics

See the other LOB statements.

LOB FILE CLOSE ALL (Executable Embedded SQL Extension)

Purpose

To close all open BFILEs in the current session.

Syntax

LOB FILE CLOSE ALL
Description of the illustration lobficl.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "FILE CLOSE ALL".

Related Topics

See the other LOB statements.

LOB FILE SET (Executable Embedded SQL Extension)

Purpose

To set DIRECTORY and FILENAME in a BFILE locator.

Syntax

LOB FILE SET
Description of the illustration lobfise.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "FILE SET".

Related Topics

See the other LOB statements.

LOB FLUSH BUFFER (Executable Embedded SQL Extension)

Purpose

To write the LOB buffers to the database server.

Syntax

LOB FLUSH BUFFER
Description of the illustration lobflbuf.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "FLUSH BUFFER".

Related Topics

See the other LOB statements.

LOB FREE TEMPORARY (Executable Embedded SQL Extension)

Purpose

To free temporary space for the LOB locator.

Syntax

LOB FREE TEMPORARY
Description of the illustration lobfrtem.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "FREE TEMPORARY".

Related Topics

See the other LOB statements.

LOB LOAD (Executable Embedded SQL Extension)

Purpose

To copy all or part of a BFILE into an internal LOB.

Syntax

LOB LOAD
Description of the illustration loblofr.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "LOAD FROM FILE".

Related Topics

See the other LOB statements.

LOB OPEN (Executable Embedded SQL Extension)

Purpose

To open a LOB or BFILE for read or read/write access.

Syntax


Description of the illustration lobopen.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "OPEN".

Related Topics

See the other LOB statements.

LOB READ (Executable Embedded SQL Extension)

Purpose

To read all or part of a LOB or BFILE into a buffer.

Syntax

LOB READ
Description of the illustration lobread.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "READ".

Related Topics

See the other LOB statements.

LOB TRIM (Executable Embedded SQL Extension)

Purpose

To truncate a LOB value.

Syntax

LOB TRIM
Description of the illustration lobtrim.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "TRIM".

Related Topics

See the other LOB statements.

LOB WRITE (Executable Embedded SQL Extension)

Purpose

To write the contents of a buffer to a LOB.

Syntax

LOB WRITE
Description of the illustration lobwri.gif

Usage Notes

For usage notes as well as keywords, parameters, and examples, see "WRITE".

Related Topics

See the other LOB statements.

OBJECT CREATE (Executable Embedded SQL Extension)

Purpose

To create a referenceable object in the object cache.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT CREATE
Description of the illustration objcrea.gif

where tab is:

tab
Description of the illustration objtab.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT CREATE".

Example

person *pers_p;
person_ind *pers_ind;
person_ref *pers_ref;
...
EXEC SQL OBJECT CREATE :pers_p:pers_ind TABLE PERSON_TAB
          RETURNING REF INTO :pers_ref ;

Related Topics

See all other OBJECT statements in this appendix.

OBJECT DELETE (Executable Embedded SQL Extension)

Purpose

To mark a persistent object or array of objects as deleted in the object cache.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT DELETE
Description of the illustration objdel.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT DELETE".

Example

customer *cust_p;
...
EXEC SQL OBJECT DELETE :cust_p;

Related Topics

See all other OBJECT statements in this Appendix.For persistent objects, this statement marks an object or array of objects as deleted in the object cache.

OBJECT DEREF (Executable Embedded SQL Extension)

Purpose

To pin an object or array of objects in the object cache.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT DEREF
Description of the illustration objder.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT DEREF".

Example

person *pers_p;
person_ref *pers_ref;
...
/* Pin the person REF, returning a pointer to the person object */
EXEC SQL OBJECT DEREF :pers_ref INTO :pers_p;

Related Topics

See all other OBJECT statements in this Appendix. See "ALLOCATE (Executable Embedded SQL Extension)".

OBJECT FLUSH (Executable Embedded SQL Extension)

Purpose

To flush persistent objects that have been marked as updated, deleted, or created, to the server.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT FLUSH
Description of the illustration objflu.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT FLUSH".

Example

person *pers_p;
...
EXEC SQL OBJECT DELETE :pers_p;
/* Flush the changes, effectively deleting the person object */
EXEC SQL OBJECT FLUSH :pers_p;
/* Finally, free all object cache memory and logoff */
EXEC SQL OBJECT CACHE FREE ALL;
EXEC SQL COMMIT WORK RELEASE;

Related Topics

See all other OBJECT statements in this Appendix.

OBJECT GET (Executable Embedded SQL Extension)

Purpose

To convert attributes of an object type to native C types

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT GET
Description of the illustration objget.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT GET".

Example

person *pers_p;
struct { char lname[21], fname[21]; int age; } pers;
...
/* Convert object types to native C types */
EXEC SQL OBJECT GET lastname, firstname, age FROM :pers_p INTO :pers;
printf("Last Name: %s\nFirstName: %s\nAge: %d\n",
        pers.lname, pers.fname, pers.age );

Related Topics

See all other OBJECT statements in this Appendix.

OBJECT RELEASE (Executable Embedded SQL Extension)

Purpose

To unpin an object in the object cache. When an object is not pinned and not updated, it is eligible for implicit freeing.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT RELEASE
Description of the illustration objrel.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT RELEASE".

Example

person *pers_p;
...
EXEC SQL OBJECT RELEASE :pers_p;

Related Topics

See all other OBJECT statements in this Appendix.

OBJECT SET (Executable Embedded SQL Extension)

Purpose

To update attributes of persistent objects, marking them eligible for writing to the server when the object is flushed or the cache is flushed.

To update the attributes of a transient object.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT SET
Description of the illustration objset.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT FLUSH".

Example

person *pers_p;
struct {int num; char street[61], city[31], state[3], zip[11];} addr1;
...
addr1.num = 500;
strcpy((char *)addr1.street , (char *)"Oracle Parkway");
strcpy((char *)addr1.city,    (char *)"Redwood Shores");
strcpy((char *)addr1.state,   (char *)"CA");
strcpy((char *)addr1.zip,     (char *)"94065");

/* Convert native C types to object types */
EXEC SQL OBJECT SET :pers_p->addr TO :addr1;

Related Topics

See all other OBJECT statements in this Appendix.

OBJECT UPDATE (Executable Embedded SQL Extension)

Purpose

To mark a persistent object or array of objects as updated in the object cache.

Prerequisites

Precompiler option OBJECTS must be set to YES. The INTYPE option must specify the OTT-generated type files. Include OTT-generated header files in your program.

Syntax

OBJECT UPDATE
Description of the illustration objupd.gif

Usage Notes

For usage notes as well as keywords and parameters, see "OBJECT UPDATE".

Example

person *pers_p;
...
/* Mark as updated */
EXEC SQL OBJECT UPDATE :pers_p;

Related Topics

See all other OBJECT statements in this Appendix.

OPEN (Executable Embedded SQL)

Purpose

To open a cursor, evaluating the associated query and substituting the host variable names supplied by the USING clause into the WHERE clause of the query. For the ANSI Dynamic SQL Method 4 version, see "OPEN DESCRIPTOR (Executable Embedded SQL)".

Prerequisites

You must declare the cursor with a DECLARE CURSOR embedded SQL statement before opening it.

Syntax

OPEN
Description of the illustration openo.gif

Keywords and Parameters

Keywords and ParametersDescription
array_size

integer

Host variable containing the number of rows to be processed.

Number of rows to be processed.

cursorThe (previously declared) cursor to be opened.
host_variableSpecifies a host variable with an optional indicator variable to be substituted into the statement associated with the cursor.

CANNOT be used together with an ANSI descriptor (INTO clause).

DESCRIPTOR SQLDA_descriptorSpecifies an Oracle descriptor that describes the host variables to be substituted into the WHERE clause of the associated query. The descriptor must be initialized in a previous DESCRIBE statement. The substitution is based on position. The host variable names specified in this statement can be different from the variable names in the associated query.

CANNOT be used together with an ANSI descriptor (INTO clause).


Usage Notes

The OPEN statement defines the active set of rows and initializes the cursor just before the first row of the active set. The values of the host variables at the time of the OPEN are substituted in the statement. This statement does not actually retrieve rows; rows are retrieved by the FETCH statement.

Once you have opened a cursor, its input host variables are not reexamined until you reopen the cursor. To change any input host variables and therefore the active set, you must reopen the cursor.

All cursors in a program are in a closed state when the program is initiated or when they have been explicitly closed using the CLOSE statement.

You can reopen a cursor without first closing it. For more information on this statement, see "The INSERT Statement".

Example

This example illustrates the use of the OPEN statement in a Pro*C/C++ program:

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, empno, job, sal 
    FROM emp 
    WHERE deptno = :deptno; 
EXEC SQL OPEN emp_cursor;

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE STATEMENT (Embedded SQL Directive).

FETCH (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

OPEN DESCRIPTOR (Executable Embedded SQL)

Purpose

To open a cursor (for ANSI Dynamic SQL Method 4), evaluating the associated query and substituting the input host variable names supplied by the USING clause into the WHERE clause of the query. The INTO clause denotes the output descriptor.

Prerequisites

You must declare the cursor with a DECLARE CURSOR embedded SQL statement before opening it.

Syntax

OPEN DESCRIPTOR
Description of the illustration opena.gif

Keywords and Parameters

Keywords and ParametersDescription
array_size

integer

Host variable containing the number of rows to be processed.

Number of rows to be processed.

cursorThe (previously declared) cursor to be opened.
USING DESCRIPTORSpecifies an ANSI input descriptor.
descriptor_nameThe host variable containing the name of the ANSI descriptor,
'descriptor name'The name of the ANSI descriptor.
INTO DESCRIPTORSpecifies an ANSI output descriptor.
descriptor_nameThe host variable containing the name of the ANSI descriptor,
'descriptor name'The name of the ANSI descriptor.
GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.

Usage Notes

Set the precompiler option DYNAMIC to ANSI.

The OPEN statement defines the active set of rows and initializes the cursor just before the first row of the active set. The values of the host variables at the time of the OPEN are substituted in the SQL statement. This statement does not actually retrieve rows; rows are retrieved by the FETCH statement.

Once you have opened a cursor, its input host variables are not reexamined until you reopen the cursor. To change any input host variables and therefore the active set, you must reopen the cursor.

All cursors in a program are in a closed state when the program is initiated or when they have been explicitly closed using the CLOSE statement.

You can reopen a cursor without first closing it. For more information on this statement, see "The INSERT Statement".

Example

char dyn_statement[1024] ;
...
EXEC SQL ALLOCATE DESCRIPTOR 'input_descriptor' ;
EXEC SQL ALLOCATE DESCRIPTOR 'output descriptor'
...
EXEC SQL PREPARE S FROM :dyn_statement ;
EXEC SQL DECLARE C CURSOR FOR S ;
...
EXEC SQL OPEN C USING DESCRIPTOR 'input_descriptor' ;
...

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive).

FETCH DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

PREPARE (Executable Embedded SQL)

Purpose

To parse a SQL statement or PL/SQL block specified by a host variable and associate it with an identifier.

Prerequisites

None.

Syntax

PREPARE
Description of the illustration prepare.gif

Keywords and Parameters

Keywords and ParametersDescription
statement_idIs the identifier to be associated with the prepared SQL statement or PL/SQL block. If this identifier was previously assigned to another statement or block, the prior assignment is superseded.
db_nameA null-terminated string containing the database connection name, as established previously in a CONNECT statement. If it is omitted, or if it is an empty string, the default database connection is assumed.
host_variableA host variable containing the name of the database connection.
textIs a string literal containing a SQL statement or PL/SQL block to be prepared.
select_commandIs a select statement

Usage Notes

Any variables that appear in the host_string or text are placeholders. The actual host variable names are assigned in the USING clause of the OPEN statement (input host variables) or in the INTO clause of the FETCH statement (output host variables).

A SQL statement is prepared only once, but can be executed any number of times. For more information, see "PREPARE".

Example

This example illustrates the use of a PREPARE statement in a Pro*C/C++ embedded SQL program:

EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL EXECUTE my_statement;

Related Topics

CLOSE (Executable Embedded SQL).

DECLARE CURSOR (Embedded SQL Directive).

FETCH DESCRIPTOR (Executable Embedded SQL).

OPEN (Executable Embedded SQL).

REGISTER CONNECT (Executable Embedded SQL Extension)

Purpose

To allow an external C procedure to be called from a Pro*C/C++ application.

Prerequisites

None.

Syntax

REGISTER CONNECT
Description of the illustration regconn.gif

Keywords and Parameters

Keywords and ParametersDescription
ext_proc_ctxtThe external procedure context passed to the procedure by PL/SQL. It is of type pointer to OCIExtProcContext.
contextThe runtime context returned. It is of type sql_context. Currently, it is the default (global) context

Usage Notes

For a complete discussion of how to write an external procedure, and the restrictions that are in effect, see External Procedures.

Example

void myfunction(epctx)
OCIExtProcContext *epctx;
sql_context context;
...
{
EXEC SQL REGISTER CONNECT USING :epctx ;
EXEC SQL USE :context;
...

Related Topics

None

ROLLBACK (Executable Embedded SQL)

Purpose

To undo work done in the current transaction.

You can also use this statement to manually undo the work done by an in-doubt distributed transaction.

Prerequisites

To roll back your current transaction, no privileges are necessary.

To manually roll back an in-doubt distributed transaction that you originally committed, you must have FORCE TRANSACTION system privilege. To manually roll back an in-doubt distributed transaction originally committed by another user, you must have FORCE ANY TRANSACTION system privilege.

Syntax

ROLLBACK
Description of the illustration rollb.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the savepoint is created. The database can be identified by either:

db_name: A null-terminated string containing the database connection name, as established previously in a CONNECT statement. If it is omitted, or if it is an empty string, the default database connection is assumed.

host_variable: A host variable containing the name of the database connection. If you omit this clause, the savepoint is created on your default database.

WORKIs optional and is provided for ANSI compatibility.
TORolls back the current transaction to the specified savepoint. If you omit this clause, the ROLLBACK statement rolls back the entire transaction.
FORCEManually rolls back an in-doubt distributed transaction. The transaction is identified by the text containing its local or global transaction ID. To find the IDs of such transactions, query the data dictionary view DBA_2PC_PENDING.

ROLLBACK statements with the FORCE clause are not supported in PL/SQL.

RELEASEFrees all resources and disconnects the application from the database. The RELEASE clause is not allowed with SAVEPOINT and FORCE clauses.
savepointsavepoint to which you roll back

Usage Notes

A transaction (or a logical unit of work) is a sequence of SQL statements that Oracle treats as a single unit. A transaction begins with the first executable SQL statement after a COMMIT, ROLLBACK or connection to the database. A transaction ends with a COMMIT statement, a ROLLBACK statement, or disconnection (intentional or unintentional) from the database. Oracle issues an implicit COMMIT statement before and after processing any data definition language statement.

Using the ROLLBACK statement without the TO SAVEPOINT clause performs the following operations:

Using the ROLLBACK statement with the TO SAVEPOINT clause performs the following operations:

It is recommended that you explicitly end transactions in application programs using either a COMMIT or ROLLBACK statement. If you do not explicitly commit the transaction and the program terminates abnormally, Oracle rolls back the last uncommitted transaction.

Example 1

The following statement rolls back your entire current transaction:

EXEC SQL ROLLBACK; 

Example 2

The following statement rolls back your current transaction to savepoint SP5:

EXEC SQL ROLLBACK TO SAVEPOINT sp5;

Distributed Transactions

Oracle with the distributed option provides the ability to perform distributed transactions, or transactions that modify data on multiple databases. To commit or roll back a distributed transaction, you need only issue a COMMIT or ROLLBACK statement as you would any other transaction.

If there is a network failure during the commit process for a distributed transaction, the state of the transaction may be unknown, or in-doubt. After consultation with the administrators of the other databases involved in the transaction, you may decide to manually commit or roll back the transaction on your local database. You can manually roll back the transaction on your local database by issuing a ROLLBACK statement with the FORCE clause.

You cannot manually roll back an in-doubt transaction to a savepoint.

A ROLLBACK statement with a FORCE clause only rolls back the specified transaction. Such a statement does not affect your current transaction.

Example III

The following statement manually rolls back an in-doubt distributed transaction:

EXEC SQL
    ROLLBACK WORK
    FORCE '25.32.87' ;

Related Topics

COMMIT (Executable Embedded SQL).

SAVEPOINT (Executable Embedded SQL) .

SAVEPOINT (Executable Embedded SQL)

Purpose

To identify a point in a transaction to which you can later roll back.

Prerequisites

None.

Syntax

SAVEPOINT
Description of the illustration savep.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database on which the savepoint is created. The database can be identified by either:

db_name: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a previously declared db_name.

If you omit this clause, the savepoint is created on your default database.

savepointIs the name of the savepoint to be created.

Usage Notes

For more information on this statement, see "Using the SAVEPOINT Statement".

Example

This example illustrates the use of the embedded SQL SAVEPOINT statement:

EXEC SQL SAVEPOINT save3;

Related Topics

COMMIT (Executable Embedded SQL).

ROLLBACK (Executable Embedded SQL).

SELECT (Executable Embedded SQL)

Purpose

To retrieve data from one or more tables, views, or snapshots, assigning the selected values to host variables.

Prerequisites

For you to select data from a table or snapshot, the table or snapshot must be in your own schema or you must have SELECT privilege on the table or snapshot.

For you to select rows from the base tables of a view, the owner of the schema containing the view must have SELECT privilege on the base tables. Also, if the view is in a schema other than your own, you must have SELECT privilege on the view.

The SELECT ANY TABLE system privilege also provides the ability to select data from any table or any snapshot or any view's base table.

Syntax

SELECT
Description of the illustration select.gif

SELECT
Description of the illustration select_b.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database to which the SELECT statement is issued. The database can be identified by either:

db_name: A database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Host variable whose value is a previously declared db_name. If you omit this clause, the SELECT statement is issued to your default database.

select_listIdentical to the non-embedded SELECT statement except that a host variables can be used in place of literals.
INTOSpecifies output host variables and optional indicator variables to receive the data returned by the SELECT statement. These variables must be either all scalars or all arrays, but arrays need not have the same size.
WHERERestricts the rows returned to those for which the condition is TRUE. See the syntax description of condition in Oracle Database SQL Language Reference. The condition can contain host variables, but cannot contain indicator variables. These host variables can be either scalars or arrays.

All other keywords and parameters are identical to the non-embedded SQL SELECT statement. ASC, ascending, is the default for the ORDER BY clause.


Usage Notes

If no rows meet the WHERE clause condition, no rows are retrieved and Oracle returns an error code through the SQLCODE component of the SQLCA.

You can use Comments in a SELECT statement to pass instructions, or hints, to the optimizer. The optimizer uses hints to choose an execution plan for the statement. For more information on hints, see Oracle Database Performance Tuning Guide.

Example

This example illustrates the use of the embedded SQL SELECT statement:

EXEC SQL SELECT ename, sal + 100, job 
    INTO :ename, :sal, :job 
    FROM emp 
    WHERE empno = :empno; 

Related Topics

DECLARE CURSOR (Embedded SQL Directive).

DECLARE DATABASE (Oracle Embedded SQL Directive).

EXECUTE (Executable Embedded SQL).

FETCH (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

SET DESCRIPTOR (Executable Embedded SQL)

Purpose

Use this ANSI dynamic SQL statement to set information in the descriptor area from host variables.

Prerequisites

Use after a DESCRIBE DESCRIPTOR statement.

Syntax

SET DESCRIPTOR
Description of the illustration setdesc.gif

where item_name can be one of these choices:

item_name
Description of the illustration setdnc.gif

Keywords and Parameters

Kewords and ParametersDescription
array_size

integer

Host variable containing the number of rows to be processed.

Number of rows to be processed. The array size clause can only be used with DATA, RETURNED_LENGTH and INDICATOR item names.

GLOBAL | LOCALLOCAL (the default) means file scope, as opposed to GLOBAL, which means application scope.
descriptor_name

'descriptor name'

Host variable containing the name of the allocated ANSI descriptor.

Name of the allocated ANSI descriptor.

COUNTThe number of input or output variables.
VALUEThe position of the referenced host variable.
item_nameSee Table 14-6, "Descriptor Item Names for SET DESCRIPTOR", and Table 14-7, "Oracle Extensions to Descriptor Item Names for SET DESCRIPTOR" for lists of the item_names, and their descriptions.
host_integer

integer

The host variables used to set the item or the COUNT or VALUE.

An integer used to set the COUNT or VALUE.

host_varThe host variables used to set the descriptor item.
REFReference semantics are to be used. Can be used only with RETURNED_LENGTH, DATA, and INDICATOR item names.

Must be used to set RETURNED_LENGTH.


Usage Notes

Use DYNAMIC=ANSI precompiler option.

Set CHARACTER_SET_NAME to UTF16 for client-side Unicode support.

See "SET DESCRIPTOR" for complete details, including tables of descriptor item names.

Example

EXEC SQL SET DESCRIPTOR GLOBAL :mydescr COUNT = 3 ;

Related Topics

ALLOCATE DESCRIPTOR (Executable Embedded SQL).

DEALLOCATE DESCRIPTOR (Embedded SQL Statement).

DESCRIBE (Executable Embedded SQL Extension).

GET DESCRIPTOR (Executable Embedded SQL).

PREPARE (Executable Embedded SQL).

TYPE (Oracle Embedded SQL Directive)

Purpose

To perform user-defined type equivalencing, or to assign an external datatype to a whole class of host variables by equivalencing the external datatype to a user-defined datatype.

Prerequisites

The user-defined datatype must be previously declared in an embedded SQL program.

Syntax

TYPE
Description of the illustration type.gif

Keywords and Parameters

Keywords and ParametersDescription
typeIs the user-defined datatype to be equivalenced with an external datatype.
datatypeIs an external datatype recognized by the precompiler (not an internal datatype). The datatype may include a length, precision, or scale. This external datatype is equivalenced to the user-defined type and assigned to all host variables assigned the type. For a list of external datatypes, see "Oracle Datatypes".
REFERENCEMakes the equivalenced type a pointer type.

Usage Notes

User-defined type equivalencing is one kind of datatype equivalencing. You can only perform user-defined type equivalencing with the embedded SQL TYPE statement in a Pro*C/C++ program. You may want to use datatype equivalencing for one of the following purposes:

Pro*C/C++ expects VARCHAR and VARRAW arrays to be word-aligned. When you equivalence an array type to the VARCHAR or VARRAW datatype, make sure that length+2 is divisible by 4.

Pro*C/C++ also supports the embedded SQL VAR statement for host variable equivalencing. For more information, see "User-Defined Type Equivalencing".

Example I

This example shows an embedded SQL TYPE statement in a Pro*C/C++ Precompiler program:

struct screen {
    short len; 
    char  buff[4002];
}; 

typedef struct screen graphics; 

    EXEC SQL TYPE graphics IS VARRAW(4002); 
    graphics crt;  -- host variable of type graphics 
    ... 

Related Topics

VAR (Oracle Embedded SQL Directive) .

UPDATE (Executable Embedded SQL)

Purpose

To change existing values in a table or in a view's base table.

Prerequisites

For you to update values in a table or snapshot, the table must be in your own schema or you must have UPDATE privilege on the table.

For you to update values in the base table of a view, the owner of the schema containing the view must have UPDATE privilege on the base table. Also, if the view is in a schema other than your own, you must have UPDATE privilege on the view.

The UPDATE ANY TABLE system privilege also provides the ability to update values in any table or any view's base table.

Syntax

UPDATE
Description of the illustration update.gif

where the DML returning clause is:

DML returning clause of UPDATE
Description of the illustration return.gif

Keywords and Parameters

Keywords and ParametersDescription
ATIdentifies the database to which the UPDATE statement is issued. The database can be identified by either:

dbname: Is a database identifier declared in a previous DECLARE DATABASE statement.

host_variable: Is a host variable whose value is a previously declared db_name.

If you omit this clause, the UPDATE statement is issued to your default database.

FOR :host_integer

integer

Limits the number of times the UPDATE statement is executed if the SET and WHERE clauses contain array host variables. If you omit this clause, Oracle executes the statement once for each component of the smallest array.
schemaIs the schema containing the table or view. If you omit schema, Oracle assumes the table or view is in your own schema.
table, viewIs the name of the table to be updated. If you specify view, Oracle updates the view's base table.
dblinkIs a complete or partial name of a database link to a remote database where the table or view is located. For information on referring to database links, see the Oracle Database SQL Language ReferenceYou can only use a database link to update a remote table or view if you are using Oracle with the distributed option.
part_nameName of a partition of the table.
columnIs the name of a column of the table or view that is to be updated. If you omit a column of the table from the SET clause, that column's value remains unchanged.
exprIs the new value assigned to the corresponding column. This expression can contain host variables and optional indicator variables. See the syntax of expr in the Oracle Database SQL Language Reference.
subquery_1Is a subquery that returns new values that are assigned to the corresponding columns. For the syntax of a subquery, see "SELECT" in Oracle Database SQL Language Reference.
subquery_2Is a subquery that return a new value that is assigned to the corresponding column. For the syntax of a subquery, see "SELECT" in the Oracle Database SQL Language Reference.
WHERESpecifies which rows of the table or view are updated:
condition

CURRENT OF

Updates only rows for which this condition is true. This condition can contain host variables and optional indicator variables. See the syntax of condition in the Oracle Database SQL Language Reference.

Updates only the row most recently fetched by the cursor. The cursor cannot be associated with a SELECT statement that performs a join unless its FOR UPDATE clause explicitly locks only one table.

If you omit this clause entirely, all rows of the table or view are updated.

DML returning clauseSee "The DML Returning Clause".

Usage Notes

Host variables in the SET and WHERE clauses must be either all scalars or all arrays. If they are scalars, Oracle executes the UPDATE statement only once. If they are arrays, Oracle executes the statement once for each set of array components. Each execution may update zero, one, or multiple rows.

Array host variables can have different sizes. In this case, the number of times Oracle executes the statement is determined by the smaller of the following values:

The cumulative number of rows updated is returned through the third element of the SQLERRD component of the SQLCA. When arrays are used as input host variables, this count reflects the total number of updates for all components of the array processed in the UPDATE statement. If no rows satisfy the condition, no rows are updated and Oracle returns an error message through the SQLCODE element of the SQLCA. If you omit the WHERE clause, all rows are updated and Oracle raises a warning flag in the fifth component of the SQLWARN element of the SQLCA.

You can use Comments in an UPDATE statement to pass instructions, or hints, to the optimizer. The optimizer uses hints to choose an execution plan for the statement. For more information on hints, see Oracle Database Performance Tuning Guide.

For more information on this statement, see Chapter 6, "Embedded SQL", and Chapter 3, "Database Concepts".

Examples

The following examples illustrate the use of the embedded SQL UPDATE statement:

EXEC SQL UPDATE emp 
    SET sal = :sal, comm = :comm INDICATOR :comm_ind 
    WHERE ename = :ename; 
 
EXEC SQL UPDATE emp 
    SET (sal, comm) = 
        (SELECT AVG(sal)*1.1, AVG(comm)*1.1 
         FROM emp) 
    WHERE ename = 'JONES'; 

Related Topics

DECLARE DATABASE (Oracle Embedded SQL Directive).

VAR (Oracle Embedded SQL Directive)

Purpose

To perform host variable equivalencing, or to assign a specific external datatype to an individual host variable, overriding the default datatype assignment. Also has an optional CONVBUFSZ clause that specifies the size of a buffer for character set conversion.

Prerequisites

The host variable must be previously declared in the Pro*C/C++ program.

Syntax

VAR
Description of the illustration var.gif

Keywords and Parameters

Keywords and ParametersDescription
host_variableIs an input or output host variable (or host table) declared earlier.

The VARCHAR and VARRAW external datatypes have a 2-byte length field followed by an n-byte data field, where n lies in the range 1 .. 65533. So, if type_name is VARCHAR or VARRAW, host_variable must be at least 3 bytes long.

The LONG VARCHAR and LONG VARRAW external datatypes have a 4-byte length field followed by an n-byte data field, where n lies in the range 1 .. 2147483643. So, if type_name is LONG VARCHAR or LONG VARRAW, host_variable must be at least 5 bytes long.

dtypIs an external datatype recognized by Pro*C/C++ (not an internal datatype). The datatype may include a length, precision, or scale. This external datatype is assigned to the host_variable. For a list of external datatypes, see "External Datatypes".
lengthLength of the datatype. It is a constant expression or a constant integer specifying a valid length in bytes. The value of length must be large enough to accommodate the external datatype.

When type_name is ROWID or DATE, you cannot specify length because it is predefined. For other external datatypes, length is optional. It defaults to the length of host_variable.

When specifying length, if type_name is VARCHAR, VARRAW, LONG VARCHAR, or LONG VARRAW, use the maximum length of the data field. Pro*C/C++ accounts for the length field. If type_name is LONG VARCHAR or LONG VARRAW and the data field exceeds 65533 bytes, put "-1" in the length field.

precision and scaleAre constant expressions or constants that represent, respectively, the number of significant digits and the point at which rounding will occur. For example, a scale of 2 means the value is rounded to the nearest hundredth (3.456 becomes 3.46); a scale of -3 means the number is rounded to the nearest thousand (3456 becomes 3000).

You can specify a precision of 1 .. 99 and a scale of -84 .. 99. However, the maximum precision and scale of a database column are 38 and 127, respectively. So, if precision exceeds 38, you cannot insert the value of host_variable into a database column. On the other hand, if the scale of a column value exceeds 99, you cannot select or fetch the value into host_variable.

sizeThe size, in bytes, of a buffer used to perform conversion of the specified host_variable to another character set. A constant or constant expression.

Is the size in bytes of a buffer in the runtime library used to perform conversion between character sets of the host_variable


Usage Notes

length, precision, scale and size can be constant expressions.

Host variable equivalencing is one kind of datatype equivalencing. Datatype equivalencing is useful for any of the following purposes:

Note that size, length, precision and scale can be any arbitrarily complex C constant expression whose value is known when the precompiler is run.

For example:

#define LENGTH 10
...
char character set is nchar_cs ename[LENGTH+1];
exec sql var ename is string(LENGTH+1) convbufsz is (LENGTH*2);

Note also that macros are permitted in this statement.

When you have not used the CONVBUFSZ clause, the Oracle runtime automatically determines a buffer size based on the ratio of the host variable character size (determined by NLS_LANG) and the character size of the database character set. This can sometimes result in the creation of a buffer of LONG size. Database tables are allowed to have only one LONG column. An error is raised if there is more than one LONG value.

To avoid such errors, you use a length shorter than the size of a LONG. If a character set conversion results in a value longer than the length specified by CONVBUFSZ, then an error is returned at runtime. The Pro*C/C++ Precompiler also supports the precompiler TYPE directive for user-defined type equivalencing. See also "Host Variable Equivalencing".

Example

This example equivalences the host variable DEPT_NAME to the datatype STRING and the host variable BUFFER to the datatype RAW(200):

EXEC SQL BEGIN DECLARE SECTION; 
    ... 
    char dept_name[15];               -- default datatype is CHAR 
    EXEC SQL VAR dept_name IS STRING; -- reset to STRING 
    ... 
    char buffer[200];                 -- default datatype is CHAR 
    EXEC SQL VAR buffer IS RAW(200); -- refer to RAW 
    ...
EXEC SQL END DECLARE SECTION; 

Related Topics

TYPE (Oracle Embedded SQL Directive) .

WHENEVER (Embedded SQL Directive)

Purpose

To specify the action to be taken when an error or warning results from executing an embedded SQL statement.

Prerequisites

None.

Syntax

WHENEVER
Description of the illustration whenevrc.gif

Keywords and Parameters

Keywords and ParametersDescription
NOT FOUNDIdentifies any exception condition that returns an error code of +1403 to SQLCODE (or a +100 code when MODE=ANSI).
SQLERRORIdentifies a condition that results in a negative return code.
SQLWARNINGIdentifies a non-fatal warning condition.
CONTINUEIndicates that the program should progress to the next statement.
GOTO labelIndicates that the program should branch to the statement named by label.
STOPStops program execution.
DO routineIndicates that the program should call a function that is named routine
DO BREAKPerforms a break statement from a loop when the condition is met.
DO CONTINUEPerforms a continue statement from a loop when the condition is met.

Usage Notes

The WHENEVER directive allows your program to transfer control to an error handling routine in the event an embedded SQ

L statement results in an error or warning.

The scope of a WHENEVER directive is positional, rather than logical. A WHENEVER statement applies to all embedded SQL statements that textually follow it in the source file, not in the flow of the program logic. A WHENEVER directive remains in effect until it is superseded by another WHENEVER directive checking for the same condition.

For more information on this directive, see "Using the WHENEVER Directive".

Do not confuse the WHENEVER embedded SQL directive with the WHENEVER SQL*Plus command.

Examples

The following two examples illustrates the uses of the WHENEVER directive in an embedded SQL program:

Example 1:

EXEC SQL WHENEVER NOT FOUND CONTINUE;
... 
EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
... 
sql_error: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK RELEASE;
... 

Example 2:

EXEC SQL WHENEVER SQLERROR GOTO connect_error; 
... 
connect_error: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK RELEASE; 
    printf("\nInvalid username/password\n"); 
    exit(1); 

Related Topics

None

PK\KBvBPK+AOEBPS/pc_13dyn.htm Oracle Dynamic SQL

13 Oracle Dynamic SQL

This chapter shows you how to use Oracle Dynamic SQL, an advanced programming technique that adds flexibility and functionality to your applications. You will learn four methods for writing programs that accept and process SQL statements at run time. This chapter contains the following topics:


Note:

Oracle Dynamic SQL does not support object types, cursor variables, arrays of structs, DML returning clauses, Unicode variables, and LOBs. Use ANSI Dynamic SQL method 4 instead.

What is Dynamic SQL?

Most database applications do a specific job. For example, a simple program might prompt the user for an employee number, then update rows in the EMP and DEPT tables. In this case, you know the makeup of the UPDATE statement at precompile time. That is, you know which tables might be changed, the constraints defined for each table and column, which columns might be updated, and the datatype of each column.

However, some applications must accept (or build) and process a variety of SQL statements at run time. For example, a general-purpose report writer must build different SELECT statements for the various reports it generates. In this case, the statement's makeup is unknown until run time. Such statements can, and probably will, change from execution to execution. They are aptly called dynamic SQL statements.

Unlike static SQL statements, dynamic SQL statements are not embedded in your source program. Instead, they are stored in character strings input to or built by the program at run time. They can be entered interactively or read from a file.

Advantages and Disadvantages of Dynamic SQL

Host programs that accept and process dynamically defined SQL statements are more versatile than plain embedded SQL programs. Dynamic SQL statements can be built interactively with input from users having little or no knowledge of SQL.

For example, your program might simply prompt users for a search condition to be used in the WHERE clause of a SELECT, UPDATE, or DELETE statement. A more complex program might allow users to choose from menus listing SQL operations, table and view names, column names, and so on. Thus, dynamic SQL lets you write highly flexible applications.

However, some dynamic queries require complex coding, the use of special data structures, and more runtime processing. While you might not notice the added processing time, you might find the coding difficult unless you fully understand dynamic SQL concepts and methods.

When to Use Dynamic SQL

In practice, static SQL will meet nearly all your programming needs. Use dynamic SQL only if you need its open-ended flexibility. Its use is suggested when one of the following items is unknown at precompile time:

Requirements for Dynamic SQL Statements

To represent a dynamic SQL statement, a character string must contain the text of a valid SQL statement, but not contain the EXEC SQL clause, or the statement terminator, or any of the following embedded SQL commands:

In most cases, the character string can contain dummy host variables. They hold places in the SQL statement for actual host variables. Because dummy host variables are just placeholders, you do not declare them and can name them anything you like. For example, Oracle makes no distinction between the following two strings:

'DELETE FROM EMP WHERE MGR = :mgr_number AND JOB = :job_title' 
'DELETE FROM EMP WHERE MGR = :m AND JOB = :j' 

How Dynamic SQL Statements are Processed

Typically, an application program prompts the user for the text of a SQL statement and the values of host variables used in the statement. Oracle then parses the SQL statement to ensure it meets syntax rules.

Next, Oracle binds the host variables to the SQL statement. That is, Oracle gets the addresses of the host variables so that it can read or write their values.

Then Oracle executes the SQL statement. That is, Oracle does what the SQL statement requested, such as deleting rows from a table.

The SQL statement can be executed repeatedly using new values for the host variables.

Methods for Using Dynamic SQL

This section introduces four methods you can use to define dynamic SQL statements. It briefly describes the capabilities and limitations of each method, then offers guidelines for choosing the right method. Later sections show you how to use the methods, and include example programs that you can study.

The four methods are increasingly general. That is, Method 2 encompasses Method 1, Method 3 encompasses Methods 1 and 2, and so on. However, each method is most useful for handling a certain kind of SQL statement, as Table 13-1 shows:

Table 13-1 Methods for Using Dynamic SQL

MethodKind of SQL Statement

1

non-query without host variables

2

non-query with known number of input host variables

3

query with known number of select-list items and input host variables

4

query with unknown number of select-list items or input host variables



Note:

The term select-list item includes column names and expressions such as SAL * 1.10 and MAX(SAL).

Method 1

This method lets your program accept or build a dynamic SQL statement, then immediately execute it using the EXECUTE IMMEDIATE command. The SQL statement must not be a query (SELECT statement) and must not contain any placeholders for input host variables. For example, the following host strings qualify:

'DELETE FROM EMP WHERE DEPTNO = 20' 
'GRANT SELECT ON EMP TO scott' 

With Method 1, the SQL statement is parsed every time it is executed.

Method 2

This method lets your program accept or build a dynamic SQL statement, then process it using the PREPARE and EXECUTE commands. The SQL statement must not be a query. The number of placeholders for input host variables and the datatypes of the input host variables must be known at precompile time. For example, the following host strings fall into this category:

'INSERT INTO EMP (ENAME, JOB) VALUES (:emp_name, :job_title)' 
'DELETE FROM EMP WHERE EMPNO = :emp_number' 

With Method 2, the SQL statement is parsed just once, but can be executed many times with different values for the host variables. SQL data definition statements such as CREATE and GRANT are executed when they are PREPAREd.

Method 3

This method lets your program accept or build a dynamic query, then process it using the PREPARE command with the DECLARE, OPEN, FETCH, and CLOSE cursor commands. The number of select-list items, the number of placeholders for input host variables, and the datatypes of the input host variables must be known at precompile time. For example, the following host strings qualify:

'SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP GROUP BY DEPTNO' 
'SELECT ENAME, EMPNO FROM EMP WHERE DEPTNO = :dept_number' 

Method 4

This method lets your program accept or build a dynamic SQL statement, then process it using descriptors. The number of select-list items, the number of placeholders for input host variables, and the datatypes of the input host variables can be unknown until run time. For example, the following host strings fall into this category:

'INSERT INTO EMP (<unknown>) VALUES (<unknown>)' 
'SELECT <unknown> FROM EMP WHERE DEPTNO = 20'
 

Method 4 is required for dynamic SQL statements that contain an unknown number of select-list items or input host variables.


See Also:

"Using Method 4"

Guidelines

With all four methods, you must store the dynamic SQL statement in a character string, which must be a host variable or quoted literal. When you store the SQL statement in the string, omit the keywords EXEC SQL and the ';' statement terminator.

With Methods 2 and 3, the number of placeholders for input host variables and the datatypes of the input host variables must be known at precompile time.

Each succeeding method imposes fewer constraints on your application, but is more difficult to code. As a rule, use the simplest method you can. However, if a dynamic SQL statement will be executed repeatedly by Method 1, use Method 2 instead to avoid reparsing for each execution.

Method 4 provides maximum flexibility, but requires complex coding and a full understanding of dynamic SQL concepts. In general, use Method 4 only if you cannot use Methods 1, 2, or 3.

The decision logic in Figure 13-1 will help you choose the right method.

Avoiding Common Errors

If you precompile using the command-line option DBMS=V6_CHAR, blank-pad the array before storing the SQL statement. That way, you clear extraneous characters. This is especially important when you reuse the array for different SQL statements. As a rule, always initialize (or re-initialize) the host string before storing the SQL statement. Do not null-terminate the host string. Oracle does not recognize the null terminator as an end-of-string sentinel. Instead, Oracle treats it as part of the SQL statement.

If you precompile with the command-line option DBMS=V8, make sure that the string is null terminated before you execute the PREPARE or EXECUTE IMMEDIATE statement.

Regardless of the value of DBMS, if you use a VARCHAR variable to store the dynamic SQL statement, make sure the length of the VARCHAR is set (or reset) correctly before you execute the PREPARE or EXECUTE IMMEDIATE statement.

Figure 13-1 Choosing the Right Method

Choosing the Right Method
Description of "Figure 13-1 Choosing the Right Method"

Using Method 1

The simplest kind of dynamic SQL statement results only in "success" or "failure" and uses no host variables. Some examples follow:

'DELETE FROM table_name WHERE column_name = constant' 
'CREATE TABLE table_name ...' 
'DROP INDEX index_name' 
'UPDATE table_name SET column_name = constant' 
'GRANT SELECT ON table_name TO username' 
'REVOKE RESOURCE FROM username' 

Method 1 parses, then immediately executes the SQL statement using the EXECUTE IMMEDIATE command. The command is followed by a character string (host variable or literal) containing the SQL statement to be executed, which cannot be a query.

The syntax of the EXECUTE IMMEDIATE statement follows:

EXEC SQL EXECUTE IMMEDIATE { :host_string | string_literal }; 

In the following example, you use the host variable dyn_stmt to store SQL statements input by the user:

char dyn_stmt[132]; 
... 
for (;;) 
{ 
    printf("Enter SQL statement: "); 
    gets(dyn_stmt); 
    if (*dyn_stmt == '\0') 
        break; 
    /* dyn_stmt now contains the text of a SQL statement */ 
    EXEC SQL EXECUTE IMMEDIATE :dyn_stmt; 
} 
... 

You can also use string literals, as the following example shows:

EXEC SQL EXECUTE IMMEDIATE 'REVOKE RESOURCE FROM MILLER'; 

Because EXECUTE IMMEDIATE parses the input SQL statement before every execution, Method 1 is best for statements that are executed only once. Data definition language statements usually fall into this category.

Example Program: Dynamic SQL Method 1

The following program uses dynamic SQL Method 1 to create a table, insert a row, commit the insert, then drop the table. This program is available on-line in your demo directory in the file sample6.pc.

/*
 *  sample6.pc: Dynamic SQL Method 1
 *
 *  This program uses dynamic SQL Method 1 to create a table,
 *  insert a row, commit the insert, then drop the table.
 */

#include <stdio.h>
#include <string.h>

/* Include the SQL Communications Area, a structure through
 * which ORACLE makes runtime status information such as error
 * codes, warning flags, and diagnostic text available to the
 * program.
 */
#include <sqlca.h>

/* Include the ORACLE Communications Area, a structure through
 * which ORACLE makes additional runtime status information
 * available to the program.
 */
#include <oraca.h>

/* The ORACA=YES option must be specified to enable you
 * to use the ORACA.
 */

EXEC ORACLE OPTION (ORACA=YES);

/* Specifying the RELEASE_CURSOR=YES option instructs Pro*C
 * to release resources associated with embedded SQL
 * statements after they are executed.  This ensures that
 * ORACLE does not keep parse locks on tables after data
 * manipulation operations, so that subsequent data definition
 * operations on those tables do not result in a parse-lock
 * error.
 */

EXEC ORACLE OPTION (RELEASE_CURSOR=YES);

void dyn_error();


main()
{
/* Declare the program host variables. */
    char    *username = "SCOTT";
    char    *password = "TIGER";
    char    *dynstmt1;
    char     dynstmt2[10];
    VARCHAR  dynstmt3[80];

/* Call routine dyn_error() if an ORACLE error occurs. */

    EXEC SQL WHENEVER SQLERROR DO dyn_error("Oracle error:");

/* Save text of current SQL statement in the ORACA if an
 * error occurs.
 */
    oraca.orastxtf = ORASTFERR;

/* Connect to Oracle. */

    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    puts("\nConnected to ORACLE.\n");

/* Execute a string literal to create the table.  This
 * usage is actually not dynamic because the program does
 * not determine the SQL statement at run time.
 */
    puts("CREATE TABLE dyn1 (col1 VARCHAR2(4))");

    EXEC SQL EXECUTE IMMEDIATE
         "CREATE TABLE dyn1 (col1 VARCHAR2(4))";

/* Execute a string to insert a row.  The string must
 * be null-terminated.  This usage is dynamic because the
 * SQL statement is a string variable whose contents the
 * program can determine at run time.
 */
    dynstmt1 = "INSERT INTO DYN1 values ('TEST')";
    puts(dynstmt1);

    EXEC SQL EXECUTE IMMEDIATE :dynstmt1;

/* Execute a SQL statement in a string to commit the insert.
 * Pad the unused trailing portion of the array with spaces.
 * Do NOT null-terminate it.
 */
    strncpy(dynstmt2, "COMMIT    ", 10);
    printf("%.10s\n", dynstmt2);

    EXEC SQL EXECUTE IMMEDIATE :dynstmt2;

/* Execute a VARCHAR to drop the table.  Set the .len field
 * to the length of the .arr field.
 */
    strcpy(dynstmt3.arr, "DROP TABLE DYN1");
    dynstmt3.len = strlen(dynstmt3.arr);
    puts((char *) dynstmt3.arr);

    EXEC SQL EXECUTE IMMEDIATE :dynstmt3;

/* Commit any outstanding changes and disconnect from Oracle. */
    EXEC SQL COMMIT RELEASE;

    puts("\nHave a good day!\n");

    return 0;
}


void
dyn_error(msg)
char *msg;
{
/* This is the Oracle error handler.
 * Print diagnostic text containing the error message,
 * current SQL statement, and location of error.
 */
    printf("\n%.*s\n",
       sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    printf("in \"%.*s...\'\n",
        oraca.orastxt.orastxtl, oraca.orastxt.orastxtc);
    printf("on line %d of %.*s.\n\n",
        oraca.oraslnr, oraca.orasfnm.orasfnml,
        oraca.orasfnm.orasfnmc);

/* Disable Oracle error checking to avoid an infinite loop
 * should another error occur within this routine as a 
 * result of the rollback.
 */
    EXEC SQL WHENEVER SQLERROR CONTINUE;

/* Roll back any pending changes and disconnect from Oracle. */
    EXEC SQL ROLLBACK RELEASE;

    exit(1);
}

Using Method 2

What Method 1 does in one step, Method 2 does in two. The dynamic SQL statement, which cannot be a query, is first PREPAREd (named and parsed), then EXECUTEd.

With Method 2, the SQL statement can contain placeholders for input host variables and indicator variables. You can PREPARE the SQL statement once, then EXECUTE it repeatedly using different values of the host variables. Furthermore, you need not rePREPARE the SQL statement after a COMMIT or ROLLBACK (unless you log off and reconnect).

You can use EXECUTE for non-queries with Method 4.

The syntax of the PREPARE statement follows:

EXEC SQL PREPARE statement_name 
    FROM { :host_string | string_literal }; 

PREPARE parses the SQL statement and gives it a name.

The statement_name is an identifier used by the precompiler, not a host or program variable, and should not be declared in the Declare Section. It simply designates the PREPAREd statement you want to EXECUTE.

The syntax of the EXECUTE statement is

EXEC SQL EXECUTE statement_name [USING host_variable_list];
 

where host_variable_list stands for the following syntax:

:host_variable1[:indicator1] [, host_variable2[:indicator2], ...] 

EXECUTE executes the parsed SQL statement, using the values supplied for each input host variable.

In the following example, the input SQL statement contains the placeholder n:

... 
int emp_number    INTEGER; 
char delete_stmt[120], search_cond[40];; 
... 
strcpy(delete_stmt, "DELETE FROM EMP WHERE EMPNO = :n AND "); 
printf("Complete the following statement's search condition--\n"); 
printf("%s\n", delete_stmt); 
gets(search_cond); 
strcat(delete_stmt, search_cond); 
 
EXEC SQL PREPARE sql_stmt FROM :delete_stmt; 
for (;;) 
{ 

    printf("Enter employee number: "); 
    gets(temp);
    emp_number = atoi(temp); 
    if (emp_number == 0) 
        break; 
    EXEC SQL EXECUTE sql_stmt USING :emp_number; 
} 
... 

With Method 2, you must know the datatypes of input host variables at precompile time. In the last example, emp_number was declared as an int. It could also have been declared as type float, or even a char, because Oracle supports all these datatype conversions to the internal Oracle NUMBER datatype.

The USING Clause

When the SQL statement is EXECUTEd, input host variables in the USING clause replace corresponding placeholders in the PREPAREd dynamic SQL statement.

Every placeholder in the PREPAREd dynamic SQL statement must correspond to a different host variable in the USING clause. So, if the same placeholder appears two or more times in the PREPAREd statement, each appearance must correspond to a host variable in the USING clause.

The names of the placeholders need not match the names of the host variables. However, the order of the placeholders in the PREPAREd dynamic SQL statement must match the order of corresponding host variables in the USING clause.

If one of the host variables in the USING clause is an array, all must be arrays.

To specify NULLs, you can associate indicator variables with host variables in the USING clause.

Example Program: Dynamic SQL Method 2

The following program uses dynamic SQL Method 2 to insert two rows into the EMP table, then delete them. This program is available on-line in your demo directory, in the file sample7.pc.

/*
 *  sample7.pc: Dynamic SQL Method 2
 *
 *  This program uses dynamic SQL Method 2 to insert two rows into
 *  the EMP table, then delete them.
 */

#include <stdio.h>
#include <string.h>

#define USERNAME "SCOTT"
#define PASSWORD "TIGER"

/* Include the SQL Communications Area, a structure through
 * which ORACLE makes runtime status information such as error
 * codes, warning flags, and diagnostic text available to the
 * program.
 */
#include <sqlca.h>

/* Include the ORACLE Communications Area, a structure through
 * which ORACLE makes additional runtime status information
 * available to the program.
 */
#include <oraca.h>

/* The ORACA=YES option must be specified to enable use of
 * the ORACA.
 */
EXEC ORACLE OPTION (ORACA=YES);

char    *username = USERNAME;
char    *password = PASSWORD;
VARCHAR  dynstmt[80];
int      empno   = 1234;
int      deptno1 = 97;
int      deptno2 = 99;


/* Handle SQL runtime errors. */
void dyn_error();


main()
{
/* Call dyn_error() whenever an error occurs
 * processing an embedded SQL statement.
 */
    EXEC SQL WHENEVER SQLERROR DO dyn_error("Oracle error");

/* Save text of current SQL statement in the ORACA if an
 * error occurs.
 */
    oraca.orastxtf = ORASTFERR;

/* Connect to Oracle. */

    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    puts("\nConnected to Oracle.\n");

/* Assign a SQL statement to the VARCHAR dynstmt.  Both
 * the array and the length parts must be set properly.
 * Note that the statement contains two host-variable
 * placeholders, v1 and v2, for which actual input
 * host variables must be supplied at EXECUTE time.
 */
    strcpy(dynstmt.arr,
        "INSERT INTO EMP (EMPNO, DEPTNO) VALUES (:v1, :v2)");
    dynstmt.len = strlen(dynstmt.arr);

/* Display the SQL statement and its current input host
 * variables.
 */
    puts((char *) dynstmt.arr);
    printf("   v1 = %d,  v2 = %d\n", empno, deptno1);

/* The PREPARE statement associates a statement name with
 * a string containing a SQL statement.  The statement name
 * is a SQL identifier, not a host variable, and therefore
 * does not appear in the Declare Section.

 * A single statement name can be PREPAREd more than once,
 * optionally FROM a different string variable.
 */
    EXEC SQL PREPARE S FROM :dynstmt;

/* The EXECUTE statement executes a PREPAREd SQL statement
 * USING the specified input host variables, which are
 * substituted positionally for placeholders in the
 * PREPAREd statement.  For each occurrence of a
 * placeholder in the statement there must be a variable
 * in the USING clause.  That is, if a placeholder occurs
 * multiple times in the statement, the corresponding
 * variable must appear multiple times in the USING clause.
 * The USING clause can be omitted only if the statement
 * contains no placeholders.
 *
 * A single PREPAREd statement can be EXECUTEd more
 * than once, optionally USING different input host
 * variables.
 */
    EXEC SQL EXECUTE S USING :empno, :deptno1;

/* Increment empno and display new input host variables. */

    empno++;
    printf("   v1 = %d,  v2 = %d\n", empno, deptno2);

/* ReEXECUTE S to insert the new value of empno and a
 * different input host variable, deptno2.
 * A rePREPARE is unnecessary.
 */
    EXEC SQL EXECUTE S USING :empno, :deptno2;

/* Assign a new value to dynstmt. */

    strcpy(dynstmt.arr,
        "DELETE FROM EMP WHERE DEPTNO = :v1 OR DEPTNO = :v2");
    dynstmt.len = strlen(dynstmt.arr);

/* Display the new SQL statement and its current input host
 * variables.
 */
    puts((char *) dynstmt.arr);
    printf("   v1 = %d,    v2 = %d\n", deptno1, deptno2);

/* RePREPARE S FROM the new dynstmt. */

    EXEC SQL PREPARE S FROM :dynstmt;

/* EXECUTE the new S to delete the two rows previously
 * inserted.
 */
    EXEC SQL EXECUTE S USING :deptno1, :deptno2;

/* Commit any pending changes and disconnect from Oracle. */

    EXEC SQL COMMIT RELEASE;
    puts("\nHave a good day!\n");
    exit(0);
}


void 
dyn_error(msg)
char *msg;
{
/* This is the ORACLE error handler.
 * Print diagnostic text containing error message,
 * current SQL statement, and location of error.
 */
    printf("\n%s", msg);
    printf("\n%.*s\n",
        sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    printf("in \"%.*s...\"\n",
        oraca.orastxt.orastxtl, oraca.orastxt.orastxtc);
    printf("on line %d of %.*s.\n\n",
        oraca.oraslnr, oraca.orasfnm.orasfnml,
        oraca.orasfnm.orasfnmc);

/* Disable ORACLE error checking to avoid an infinite loop
 * should another error occur within this routine.
 */
    EXEC SQL WHENEVER SQLERROR CONTINUE;

/* Roll back any pending changes and 
 * disconnect from Oracle.
 */
    EXEC SQL ROLLBACK RELEASE;
    exit(1);
}

Using Method 3

Method 3 is similar to Method 2 but combines the PREPARE statement with the statements needed to define and manipulate a cursor. This allows your program to accept and process queries. In fact, if the dynamic SQL statement is a query, you must use Method 3 or 4.

For Method 3, the number of columns in the query select list and the number of placeholders for input host variables must be known at precompile time. However, the names of database objects such as tables and columns need not be specified until run time. Names of database objects cannot be host variables. Clauses that limit, group, and sort query results (such as WHERE, GROUP BY, and ORDER BY) can also be specified at run time.

With Method 3, you use the following sequence of embedded SQL statements:

PREPARE statement_name FROM { :host_string | string_literal }; 
DECLARE cursor_name CURSOR FOR statement_name; 
OPEN cursor_name [USING host_variable_list]; 
FETCH cursor_name INTO host_variable_list; 
CLOSE cursor_name; 

Scrollable Cursors can also be used with Method 3. The following sequence of embedded SQL statements must be used for scrollable cursors.

PREPARE statement_name FROM { :host_string | string_literal }; 
DECLARE  cursor_name  SCROLL CURSOR FOR statement_name; 
OPEN cursor_name [USING host_variable_list]; 
FETCH  [ FIRST| PRIOR|NEXT|LAST|CURRENT | RELATIVE fetch_offset 
               |ABSOLUTE fetch_offset ]  cursor_name INTO host_variable_list; 
CLOSE cursor_name;

Now we look at what each statement does.

PREPARE

PREPARE parses the dynamic SQL statement and gives it a name. In the following example, PREPARE parses the query stored in the character string select_stmt and gives it the name sql_stmt:

char select_stmt[132] =
     "SELECT MGR, JOB FROM EMP WHERE SAL < :salary"; 
EXEC SQL PREPARE sql_stmt FROM :select_stmt; 

Commonly, the query WHERE clause is input from a terminal at run time or is generated by the application.

The identifier sql_stmt is not a host or program variable, but must be unique. It designates a particular dynamic SQL statement.

The following statement is correct also:

EXEC SQL PREPARE sql_stmt FROM SELECT MGR, JOB FROM EMP WHERE SAL < :salary;

The following prepare statement, which uses the '%' wildcard, is correct also:

EXEC SQL PREPARE S FROM select ename FROM test WHERE ename LIKE 'SMIT%';

DECLARE

DECLARE defines a cursor by giving it a name and associating it with a specific query. Continuing our example, DECLARE defines a cursor named emp_cursor and associates it with sql_stmt, as follows:

EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; 

The identifiers sql_stmt and emp_cursor are not host or program variables, but must be unique. If you declare two cursors using the same statement name, the precompiler considers the two cursor names synonymous.

We can define a scrollable cursor named emp_cursor and associate it with sql_stmt as follows:

EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR sql_stmt;

For example, if you execute the statements

EXEC SQL PREPARE sql_stmt FROM :select_stmt; 
EXEC SQL DECLARE emp_cursor FOR sql_stmt; 
EXEC SQL PREPARE sql_stmt FROM :delete_stmt; 
EXEC SQL DECLARE dept_cursor FOR sql_stmt; 

when you OPEN emp_cursor, you will process the dynamic SQL statement stored in delete_stmt, not the one stored in select_stmt.

OPEN

OPEN allocates an Oracle cursor, binds input host variables, and executes the query, identifying its active set. OPEN also positions the cursor on the first row in the active set and zeroes the rows-processed count kept by the third element of sqlerrd in the SQLCA. Input host variables in the USING clause replace corresponding placeholders in the PREPAREd dynamic SQL statement.

In our example, OPEN allocates emp_cursor and assigns the host variable salary to the WHERE clause, as follows:

EXEC SQL OPEN emp_cursor USING :salary; 

FETCH

FETCH returns a row from the active set, assigns column values in the select list to corresponding host variables in the INTO clause, and advances the cursor to the next row. If there are no more rows, FETCH returns the "no data found" Oracle error code to sqlca.sqlcode.

In our example, FETCH returns a row from the active set and assigns the values of columns MGR and JOB to host variables mgr_number and job_title, as follows:

EXEC SQL FETCH emp_cursor INTO :mgr_number, :job_title; 

If the cursor is declared in SCROLL mode, you can then use the various FETCH orientation modes to randomly access the result set.

CLOSE

CLOSE disables the cursor. Once you CLOSE a cursor, you can no longer FETCH from it.

In our example, CLOSE disables emp_cursor, as follows:

EXEC SQL CLOSE emp_cursor; 

Example Program: Dynamic SQL Method 3

The following program uses dynamic SQL Method 3 to retrieve the names of all employees in a given department from the EMP table. This program is available on-line in your demo directory, in the file sample8.pc

/*
 *  sample8.pc:  Dynamic SQL Method 3
 *
 *  This program uses dynamic SQL Method 3 to retrieve the names
 *  of all employees in a given department from the EMP table.
 */

#include <stdio.h>
#include <string.h>

#define USERNAME "SCOTT"
#define PASSWORD "TIGER"

/* Include the SQL Communications Area, a structure through
 * which ORACLE makes runtime status information such as error
 * codes, warning flags, and diagnostic text available to the
 * program. Also include the ORACA.
 */
#include <sqlca.h>
#include <oraca.h>

/* The ORACA=YES option must be specified to enable use of
 * the ORACA.
 */
EXEC ORACLE OPTION (ORACA=YES);

char    *username = USERNAME;
char    *password = PASSWORD;
VARCHAR  dynstmt[80];
VARCHAR  ename[10];
int      deptno = 10;

void dyn_error();


main()
{
/* Call dyn_error() function on any error in
 * an embedded SQL statement.
 */
    EXEC SQL WHENEVER SQLERROR DO dyn_error("Oracle error");

/* Save text of SQL current statement in the ORACA if an
 * error occurs.
 */
    oraca.orastxtf = ORASTFERR;

/* Connect to Oracle. */

    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    puts("\nConnected to Oracle.\n");

/* Assign a SQL query to the VARCHAR dynstmt.  Both the
 * array and the length parts must be set properly.  Note
 * that the query contains one host-variable placeholder,
 * v1, for which an actual input host variable must be
 * supplied at OPEN time.
 */
    strcpy(dynstmt.arr,
        "SELECT ename FROM emp WHERE deptno = :v1");
    dynstmt.len = strlen(dynstmt.arr);

/* Display the SQL statement and its current input host
 * variable.
 */
    puts((char *) dynstmt.arr);
    printf("   v1 = %d\n", deptno);
    printf("\nEmployee\n");
    printf("--------\n");

/* The PREPARE statement associates a statement name with
 * a string containing a SELECT statement.  The statement
 * name is a SQL identifier, not a host variable, and
 * therefore does not appear in the Declare Section.

 * A single statement name can be PREPAREd more than once,
 * optionally FROM a different string variable.
 */
    EXEC SQL PREPARE S FROM :dynstmt;

/* The DECLARE statement associates a cursor with a
 * PREPAREd statement.  The cursor name, like the statement
 * name, does not appear in the Declare Section.

 * A single cursor name cannot be DECLAREd more than once.
 */
    EXEC SQL DECLARE C CURSOR FOR S;

/* The OPEN statement evaluates the active set of the
 * PREPAREd query USING the specified input host variables,
 * which are substituted positionally for placeholders in
 * the PREPAREd query.  For each occurrence of a
 * placeholder in the statement there must be a variable
 * in the USING clause.  That is, if a placeholder occurs
 * multiple times in the statement, the corresponding
 * variable must appear multiple times in the USING clause.

 * The USING clause can be omitted only if the statement
 * contains no placeholders.  OPEN places the cursor at the
 * first row of the active set in preparation for a FETCH.

 * A single DECLAREd cursor can be OPENed more than once,
 * optionally USING different input host variables.
 */
    EXEC SQL OPEN C USING :deptno;

/* Break the loop when all data have been retrieved. */

    EXEC SQL WHENEVER NOT FOUND DO break;

/* Loop until the NOT FOUND condition is detected. */

    for (;;)
    {
/* The FETCH statement places the select list of the
 * current row into the variables specified by the INTO
 * clause, then advances the cursor to the next row.  If
 * there are more select-list fields than output host
 * variables, the extra fields will not be returned.
 * Specifying more output host variables than select-list
 * fields results in an ORACLE error.
 */
        EXEC SQL FETCH C INTO :ename;

/* Null-terminate the array before output. */
        ename.arr[ename.len] = '\0';
        puts((char *) ename.arr);
        }

/* Print the cumulative number of rows processed by the
 * current SQL statement.
 */
    printf("\nQuery returned %d row%s.\n\n", sqlca.sqlerrd[2],
        (sqlca.sqlerrd[2] == 1) ? "" : "s");

/* The CLOSE statement releases resources associated with
 * the cursor.
 */
    EXEC SQL CLOSE C;

/* Commit any pending changes and disconnect from Oracle. */
    EXEC SQL COMMIT RELEASE;
    puts("Sayonara.\n");
    exit(0);
}

void
dyn_error(msg)
char *msg;
{
    printf("\n%s", msg);
    sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
    oraca.orastxt.orastxtc[oraca.orastxt.orastxtl] = '\0';
    oraca.orasfnm.orasfnmc[oraca.orasfnm.orasfnml] = '\0';
    printf("\n%s\n", sqlca.sqlerrm.sqlerrmc);
    printf("in \"%s...\"\n", oraca.orastxt.orastxtc);
    printf("on line %d of %s.\n\n", oraca.oraslnr,
       oraca.orasfnm.orasfnmc);

/* Disable ORACLE error checking to avoid an infinite loop
 * should another error occur within this routine.
 */
    EXEC SQL WHENEVER SQLERROR CONTINUE;

/* Release resources associated with the cursor. */
    EXEC SQL CLOSE C;

/* Roll back any pending changes and disconnect from Oracle. */  
    EXEC SQL ROLLBACK RELEASE;
    exit(1);
}

Using Method 4

This section gives an overview of Oracle Dynamic SQL Method 4. Oracle Dynamic SQL Method 4 does not support object types, results sets, arrays of structs, or LOBs.

ANSI SQL does support all datatypes. Use ANSI SQL for all new applications.

There is a kind of dynamic SQL statement that your program cannot process using Method 3. When the number of select-list items or placeholders for input host variables is unknown until run time, your program must use a descriptor. A descriptor is an area of memory used by your program and Oracle to hold a complete description of the variables in a dynamic SQL statement.

Recall that for a multirow query, you FETCH selected column values INTO a list of declared output host variables. If the select list is unknown, the host-variable list cannot be established at precompile time by the INTO clause. For example, you know the following query returns two column values:

SELECT ename, empno FROM emp WHERE deptno = :dept_number; 

However, if you let the user define the select list, you might not know how many column values the query will return.

Need for the SQLDA

To process this kind of dynamic query, your program must issue the DESCRIBE SELECT LIST command and declare a data structure called the SQL Descriptor Area (SQLDA). Because it holds descriptions of columns in the query select list, this structure is also called a select descriptor.

Likewise, if a dynamic SQL statement contains an unknown number of placeholders for input host variables, the host-variable list cannot be established at precompile time by the USING clause.

To process the dynamic SQL statement, your program must issue the DESCRIBE BIND VARIABLES command and declare another kind of SQLDA called a bind descriptor to hold descriptions of the placeholders for input host variables. (Input host variables are also called bind variables.)

If your program has more than one active SQL statement (it might have OPENed two or more cursors, for example), each statement must have its own SQLDA(s). However, non-concurrent cursors can reuse SQLDAs. There is no set limit on the number of SQLDAs in a program.

The DESCRIBE Statement

DESCRIBE initializes a descriptor to hold descriptions of select-list items or input host variables.

If you supply a select descriptor, the DESCRIBE SELECT LIST statement examines each select-list item in a PREPAREd dynamic query to determine its name, datatype, constraints, length, scale, and precision. It then stores this information in the select descriptor.

If you supply a bind descriptor, the DESCRIBE BIND VARIABLES statement examines each placeholder in a PREPAREd dynamic SQL statement to determine its name, length, and the datatype of its associated input host variable. It then stores this information in the bind descriptor for your use. For example, you might use placeholder names to prompt the user for the values of input host variables.

What is a SQLDA?

A SQLDA is a host-program data structure that holds descriptions of select-list items or input host variables.

SQLDA variables are not defined in the Declare Section.

The select SQLDA contains the following information about a query select list:

  • Maximum number of columns that can be DESCRIBEd

  • Actual number of columns found by DESCRIBE

  • Addresses of buffers to store column values

  • Lengths of column values

  • Datatypes of column values

  • Addresses of indicator-variable values

  • Addresses of buffers to store column names

  • Sizes of buffers to store column names

  • Current lengths of column names

The bind SQLDA contains the following information about the input host variables in a SQL statement:

  • Maximum number of placeholders that can be DESCRIBEd

  • Actual number of placeholders found by DESCRIBE

  • Addresses of input host variables

  • Lengths of input host variables

  • Datatypes of input host variables

  • Addresses of indicator variables

  • Addresses of buffers to store placeholder names

  • Sizes of buffers to store placeholder names

  • Current lengths of placeholder names

  • Addresses of buffers to store indicator-variable names

  • Sizes of buffers to store indicator-variable names

  • Current lengths of indicator-variable names


    See Also:

    Chapter 15, "Oracle Dynamic SQL: Method 4" for information on the SQLDA structure and variable names.

Implementing Oracle Method 4

With Oracle Method 4, you generally use the following sequence of embedded SQL statements:

EXEC SQL PREPARE statement_name 
    FROM { :host_string | string_literal }; 
EXEC SQL DECLARE cursor_name CURSOR FOR statement_name; 
EXEC SQL DESCRIBE BIND VARIABLES FOR statement_name 
    INTO bind_descriptor_name; 
EXEC SQL OPEN cursor_name 
    [USING DESCRIPTOR bind_descriptor_name]; 
EXEC SQL DESCRIBE [SELECT LIST FOR] statement_name 
    INTO select_descriptor_name; 
EXEC SQL FETCH cursor_name 
    USING DESCRIPTOR select_descriptor_name; 
EXEC SQL CLOSE cursor_name; 

However, select and bind descriptors need not work in tandem. So, if the number of columns in a query select list is known, but the number of placeholders for input host variables is unknown, you can use the Method 4 OPEN statement with the following Method 3 FETCH statement:

EXEC SQL FETCH emp_cursor INTO host_variable_list; 

Conversely, if the number of placeholders for input host variables is known, but the number of columns in the select list is unknown, you can use the Method 3 OPEN statement

EXEC SQL OPEN cursor_name [USING host_variable_list]; 

with the Method 4 FETCH statement.

EXECUTE can be used for nonqueries with Method 4.

Restriction

In Dynamic SQL Method 4, you cannot bind a host array to a PL/SQL procedure with a parameter of type "table."

Using the DECLARE STATEMENT Statement

With Methods 2, 3, and 4, you might need to use the statement

EXEC SQL [AT db_name] DECLARE statement_name STATEMENT; 

where db_name and statement_name are identifiers used by the precompiler, not host or program variables.

DECLARE STATEMENT declares the name of a dynamic SQL statement so that the statement can be referenced by PREPARE, EXECUTE, DECLARE CURSOR, and DESCRIBE. It is required if you want to execute the dynamic SQL statement at a nondefault database. An example using Method 2 follows:

EXEC SQL AT remote_db DECLARE sql_stmt STATEMENT; 
EXEC SQL PREPARE sql_stmt FROM :dyn_string; 
EXEC SQL EXECUTE sql_stmt; 

In the example, remote_db tells Oracle where to EXECUTE the SQL statement.

With Methods 3 and 4, DECLARE STATEMENT is also required if the DECLARE CURSOR statement precedes the PREPARE statement, as shown in the following example:

EXEC SQL DECLARE sql_stmt STATEMENT; 
EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; 
EXEC SQL PREPARE sql_stmt FROM :dyn_string;

The usual sequence of statements is

EXEC SQL PREPARE sql_stmt FROM :dyn_string; 
EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; 

Using Host Arrays

The use of host arrays in static SQL and dynamic SQL is similar. For example, to use input host arrays with dynamic SQL Method 2, simply use the syntax

EXEC SQL EXECUTE statement_name USING host_array_list; 

where host_array_list contains one or more host arrays.

Similarly, to use input host arrays with Method 3, use the following syntax:

OPEN cursor_name USING host_array_list; 

To use output host arrays with Method 3, use the following syntax:

FETCH cursor_name INTO host_array_list; 

With Method 4, you must use the optional FOR clause to tell Oracle the size of your input or output host array.

Using PL/SQL

The Pro*C/C++ Precompiler treats a PL/SQL block like a single SQL statement. So, like a SQL statement, a PL/SQL block can be stored in a string host variable or literal. When you store the PL/SQL block in the string, omit the keywords EXEC SQL EXECUTE, the keyword END-EXEC, and the ';' statement terminator.

However, there are two differences in the way the precompiler handles SQL and PL/SQL:

With Method 1

If the PL/SQL block contains no host variables, you can use Method 1 to EXECUTE the PL/SQL string in the usual way.

With Method 2

If the PL/SQL block contains a known number of input and output host variables, you can use Method 2 to PREPARE and EXECUTE the PL/SQL string in the usual way.

You must put all host variables in the USING clause. When the PL/SQL string is EXECUTEd, host variables in the USING clause replace corresponding placeholders in the PREPAREd string. Though the precompiler treats all PL/SQL host variables as input host variables, values are assigned correctly. Input (program) values are assigned to input host variables, and output (column) values are assigned to output host variables.

Every placeholder in the PREPAREd PL/SQL string must correspond to a host variable in the USING clause. So, if the same placeholder appears two or more times in the PREPAREd string, each appearance must correspond to a host variable in the USING clause.

With Method 3

Methods 2 and 3 are the same except that Method 3 allows FETCHing. Since you cannot FETCH from a PL/SQL block, just use Method 2 instead.

With Oracle Method 4

If the PL/SQL block contains an unknown number of input or output host variables, you must use Method 4.

To use Method 4, you set up one bind descriptor for all the input and output host variables. Executing DESCRIBE BIND VARIABLES stores information about input and output host variables in the bind descriptor. Because the precompiler treats all PL/SQL host variables as input host variables, executing DESCRIBE SELECT LIST has no effect.


Caution:

In dynamic SQL Method 4, you cannot bind a host array to a PL/SQL procedure with a parameter of type "table."



See Also:

Chapter 15, "Oracle Dynamic SQL: Method 4" for information on the use of bind descriptors with method 4.


Caution:

Do not use ANSI-style Comments (- -) in a PL/SQL block that will be processed dynamically because end-of-line characters are ignored. As a result, ANSI-style Comments extend to the end of the block, not just to the end of a line. Instead, use C-style Comments (/* ... */).


Dynamic SQL Statement Caching

Statement caching refers to the feature that provides and manages a cache of statements for each session. In the server, it means that cursors are ready to be used without the statement being parsed again. Statement caching can be enabled in the precompiler applications, which will help in the performance improvement of all applications that rely on the dynamic SQL statements. Performance improvement is achieved by removing the overhead of parsing the dynamic statements on reuse.

You can obtain this performance improvement by using a new command line option, stmt_cache (for the statement cache size), which will enable the statement caching of the dynamic statements. By enabling the new option, the statement cache will be created at session creation time. The caching is only applicable for the dynamic statements and the cursor cache for the static statements co-exists with this feature.

The command line option stmt_cache can be given any value in the range of 0 to 65535. Statement caching is disabled by default (value 0). The stmt_cache option can be set to hold the anticipated number of distinct dynamic SQL statements in the application.

Example 13-1 Using the stmt_cache Option

This example demonstrates the use of the stmt_cache option. In this program, you insert rows into a table and select the inserted rows by using the cursor in the loop. When the stmt_cache option is used to precompile this program, the performance increases compared to a normal precompilation.

/*
 *  stmtcache.pc
 *
 *  NOTE: 
 *  When this program is used to measure the performance with and without
 *  stmt_cache option, do the following changes in the program,
 *  1. Increase ROWSCNT to high value, say 10000.
 *  2. Remove all the print statements, usually which comsumes significant
 *     portion of the total program execution time.
 * 
 *  HINT: In Linux, gettimeofday() can be used to measure time. 
 */
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
#include <oraca.h>
 
#define ROWSCNT 10
 
char    *username = "scott";
char    *password = "tiger";
 
/* Function prototypes */
void sql_error(char *msg);
void selectdata();
void insertdata();
 
int main()
{
  EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error");
 
  /* Connect using the default schema scott/tiger */
  EXEC SQL CONNECT :username IDENTIFIED BY :password;
 
  /* core functions to insert and select the data */
  insertdata();
  selectdata();
 
/* Rollback pll the changes and disconnect from Oracle. */
  EXEC SQL ROLLBACK WORK RELEASE;
 
  exit(0);
}
 
/*Insert the data for ROWSCNT items into tpc2sc01 */
void insertdata()
{
  varchar dynstmt[80];
  int i;
  varchar ename[10];
  float comm;
  char *str;
 
  /* Allocates temporary buffer */
  str = (char *)malloc (11 * sizeof(char));
 
  strcpy ((char *)dynstmt.arr,
          "INSERT INTO bonus (ename, comm) VALUES (:ename, :comm)");
  dynstmt.len = strlen(dynstmt.arr);
  EXEC SQL PREPARE S FROM :dynstmt;
 
  printf ("Inserts %d rows into bonus table using dynamic SQL statement\n",
          ROWSCNT);
  for (i=1; i<=ROWSCNT; i++)
  {
    sprintf (str, "EMP_%05d",i);
    strcpy (ename.arr, str);
    comm = i;
    ename.len = strlen (ename.arr);
    EXEC SQL EXECUTE S USING :ename, :comm;
  }
 
  free(str);
}
 
/* Select the data using the cursor */
void selectdata()
{
  varchar dynstmt[80];
  varchar ename[10];
  float comm;
  int i;
 
  strcpy((char *)dynstmt.arr,
         "SELECT ename, comm FROM bonus WHERE comm = :v1");
  dynstmt.len = (unsigned short)strlen((char *)dynstmt.arr);
 
  printf ("Fetches the inserted rows using using dynamic SQL statement\n\n");
  printf ("  ENAME      COMMISSION\n\n");
 
  for (i=1; i<=ROWSCNT; i++)
  {
    /* Do the prepare in the loop so that the advantage of stmt_caching 
       is visible*/
    EXEC SQL PREPARE S FROM :dynstmt;
 
    EXEC SQL DECLARE C CURSOR FOR S;
    EXEC SQL OPEN C USING :i;
 
    EXEC SQL WHENEVER NOT FOUND DO break;
 
    /* Loop until the NOT FOUND condition is detected. */
    for (;;)
    {
      EXEC SQL FETCH C INTO :ename, :comm;
      ename.arr[ename.len] = '\0';
      printf ("%10s    %7.2f\n", ename.arr, comm);
    }
    /* Close the cursor so that the reparsing is not required for stmt_cache */
    EXEC SQL CLOSE C;
  }
}
 
void sql_error(char *msg)
{
    printf("\n%s", msg);
    sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
    oraca.orastxt.orastxtc[oraca.orastxt.orastxtl] = '\0';
    oraca.orasfnm.orasfnmc[oraca.orasfnm.orasfnml] = '\0';
    printf("\n%s\n", sqlca.sqlerrm.sqlerrmc);
    printf("in \"%s...\"\n", oraca.orastxt.orastxtc);
    printf("on line %d of %s.\n\n",$ oraca.oraslnr,
       oraca.orasfnm.orasfnmc);
 
   /* Disable ORACLE error checking to avoid an infinite loop
    * should another error occur within this routine.
    */
    EXEC SQL WHENEVER SQLERROR CONTINUE;
 
    /* Release resources associated with the cursor. */
    EXEC SQL CLOSE C;
 
    /* Roll back any pending changes and disconnect from Oracle. */  
    EXEC SQL ROLLBACK WORK RELEASE;
    exit(1);
}
PK3$PK+AOEBPS/pc_09err.htm Handling Runtime Errors

9 Handling Runtime Errors

An application program must anticipate runtime errors and attempt to recover from them. This chapter provides an in-depth discussion of error reporting and recovery. You learn how to handle errors and status changes using the SQLSTATE status variable, as well as the SQL Communications Area (SQLCA) and the WHENEVER directive. You also learn how to diagnose problems using the Oracle Communications Area (ORACA). This chapter contains the following topics:

The Need for Error Handling

A significant part of every application program must be devoted to error handling. The main reason for error handling is that it allows your program to continue operating in the presence of errors. Errors arise from design faults, coding mistakes, hardware failures, invalid user input, and many other sources.

You cannot anticipate all possible errors, but you can plan to handle certain kinds of errors that are meaningful to your program. For the Pro*C/C++ Precompiler, error handling means detecting and recovering from SQL statement execution errors. You can also prepare to handle warnings such as "value truncated" and status changes such as "end of data." It is especially important to check for error and warning conditions after every SQL data manipulation statement, because an INSERT, UPDATE, or DELETE statement might fail before processing all eligible rows in a table.

Error Handling Alternatives

There are several alternatives that you can use to detect errors and status changes in the application. This chapter describes these alternatives, however, no specific recommendations are made about what method you should use. The method is, after all, dictated by the design of the application program or tool that you are building.

Status Variables

You can declare a separate status variable, SQLSTATE or SQLCODE, examine its value after each executable SQL statement, and take appropriate action. The action might be calling an error-reporting function, then exiting the program if the error is unrecoverable. Or, you might be able to adjust data or control variables and retry the action.


See Also:


The SQL Communications Area

Another alternative that you can use is to include the SQL Communications Area structure (sqlca) in your program. This structure contains components that are filled in at runtime after the SQL statement is processed by Oracle.


Note:

In this guide, the sqlca structure is commonly referred to using the acronym for SQL Communications Area (SQLCA). When this guide refers to a specific component in the C struct, the structure name (sqlca) is used.

The SQLCA is defined in the header file sqlca.h, which you include in your program using either of the following statements:

  • EXEC SQL INCLUDE SQLCA;

  • #include <sqlca.h>

Oracle updates the SQLCA after every executable SQL statement. (SQLCA values are unchanged after a declarative statement.) By checking Oracle return codes stored in the SQLCA, your program can determine the outcome of a SQL statement. This can be done in the following two ways:

  • Implicit checking with the WHENEVER directive

  • Explicit checking of SQLCA components

You can use WHENEVER directives, code explicit checks on SQLCA components, or do both.

The most frequently-used components in the SQLCA are the status variable (sqlca.sqlcode), and the text associated with the error code (sqlca.sqlerrm.sqlerrmc). Other components contain warning flags and miscellaneous information about the processing of the SQL statement.


Note:

SQLCODE (upper case) always refers to a separate status variable, not a component of the SQLCA. SQLCODE is declared as a integer. When referring to the component of the SQLCA named sqlcode, the fully-qualified name sqlca.sqlcode is always used.

When more information is needed about runtime errors than the SQLCA provides, you can use the ORACA. The ORACA is a C struct that handles Oracle communication. It contains cursor statistics, information about the current SQL statement, option settings, and system statistics.


See Also:


The SQLSTATE Status Variable

The precompiler command line option MODE governs ANSI/ISO compliance. When MODE=ANSI, declaring the SQLCA data structure is optional. However, you must declare a separate status variable named SQLCODE. The SQL standard specifies a similar status variable named SQLSTATE, which you can use with or without SQLCODE.

After executing a SQL statement, the Oracle Server returns a status code to the SQLSTATE variable currently in scope. The status code indicates whether the SQL statement executed successfully or raised an exception (error or warning condition). To promote interoperability (the ability of systems to exchange information easily), the SQL standard predefines all the common SQL exceptions.

Unlike SQLCODE, which stores only error codes, SQLSTATE stores error and warning codes. Furthermore, the SQLSTATE reporting mechanism uses a standardized coding scheme. Thus, SQLSTATE is the preferred status variable. SQLCODE was a deprecated feature of SQL-92 that was retained only for compatibility with SQL-89. SQLCODE has been removed from all editions of the SQL standard subsequent to SQL-92.

Declaring SQLSTATE

When MODE=ANSI, you must declare SQLSTATE or SQLCODE. Declaring the SQLCA is optional. When MODE=ORACLE, if you declare SQLSTATE, it is not used.

Unlike SQLCODE, which stores signed integers and can be declared outside the Declare Section, SQLSTATE stores 5-character null-terminated strings and must be declared inside the Declare Section. You declare SQLSTATE as

char  SQLSTATE[6];  /* Upper case is required. */ 

Note:

SQLSTATE must be declared with a dimension of exactly 6 characters.

SQLSTATE Values

SQLSTATE status codes consist of a 2-character class code immediately followed by a 3-character subclass code. Aside from class code 00 ("successful completion",) the class code denotes a category of exceptions. And, aside from subclass code 000 ("not applicable",) the subclass code denotes a specific exception within that category. For example, the SQLSTATE value '22012' consists of class code 22 ("data exception") and subclass code 012 ("division by zero").

Each of the five characters in a SQLSTATE value is a digit (0..9) or an uppercase Latin letter (A..Z). Class codes that begin with a digit in the range 0..4 or a letter in the range A..H are reserved for predefined conditions (those defined in the SQL standard). All other class codes are reserved for implementation-defined conditions. Within predefined classes, subclass codes that begin with a digit in the range 0..4 or a letter in the range A..H are reserved for predefined subconditions. All other subclass codes are reserved for implementation-defined subconditions. Figure 9-1 shows the coding scheme.

Figure 9-1 SQLSTATE Coding Scheme

SQLSTATE Coding Scheme
Description of "Figure 9-1 SQLSTATE Coding Scheme"

Table 9-1 shows the classes predefined by SQL92.

Table 9-1 Predefined Class Codes

ClassCondition

00

success completion

01

warning

02

no data

07

dynamic SQL error

08

connection exception

09

triggered action exception

0A

feature not supported

0D

invalid target type specification

0E

invalid schema name list specification

0F

locator exception

0L

invalid grantor

0M

invalid SQL-invoked procedure reference

0P

invalid role specification

0S

invalid transform group name specification

0T

target table disagrees with cursor specification

0U

attempt to assign to non-updatable column

0V

attempt to assign to ordering column

0W

prohibited statement encountered during trigger execution

0Z

diagnostics exception

21

cardinality violation

22

data exception

23

integrity constraint violation

24

invalid cursor state

25

invalid transaction state

26

invalid SQL statement name

27

triggered data change violation

28

invalid authorization specification

2A

direct SQL syntax error or access rule violation

2B

dependent privilege descriptors still exist

2C

invalid character set name

2D

invalid transaction termination

2E

invalid connection name

2F

SQL routine exception

2H

invalid collation name

30

invalid SQL statement identifier

33

invalid SQL descriptor name

34

invalid cursor name

35

invalid condition number

36

cursor sensitivity exception

37

dynamic SQL syntax error or access rule violation

38

external routine exception

39

external routine invocation exception

3B

savepoint exception

3C

ambiguous cursor name

3D

invalid catalog name

3F

invalid schema name

40

transaction rollback

42

syntax error or access rule violation

44

with check option violation

HZ

remote database access



Note:

The class code HZ is reserved for conditions defined in International Standard ISO/IEC DIS 9579-2, Remote Database Access.

Table 9-2 shows how SQLSTATE status codes and conditions are mapped to Oracle errors. Status codes in the range 60000 to 99999 are implementation-defined.

Table 9-2 SQLSTATE Status Codes

CodeConditionOracle Error(s)

00000

successful completion

ORA-00000

01000

warning

--

01001

cursor operation conflict

--

01002

disconnect error

--

01003

NULL value eliminated in set function

--

01004

string data-right truncation

--

01005

insufficient item descriptor areas

--

01006

privilege not revoked

--

01007

privilege not granted

--

01008

implicit zero-bit padding

--

01009

search condition too long for info schema

--

0100A

query expression too long for info schema

--

02000

no data

ORA-01095

ORA-01403

07000

dynamic SQL error

--

07001

using clause does not match parameter specs

--

07002

using clause does not match target specs

--

07003

cursor specification cannot be executed

--

07004

using clause required for dynamic parameters

--

07005

prepared statement not a cursor specification

--

07006

restricted datatype attribute violation

--

07007

using clause required for result components invalid descriptor count

--

07008

invalid descriptor count

SQL-02126

07009

invalid descriptor index

--

08000

connection exception

--

08001

SQL-client unable to establish SQL-connection

--

08002

connection name is use

--

08003

connection does not exist

SQL-02121

08004

SQL-server rejected SQL-connection

--

08006

connection failure

--

08007

transaction resolution unknown

--

0A000

feature not supported

ORA-03000..03099

0A001

multiple server transactions

--

21000

cardinality violation

ORA-01427

SQL-02112

22000

data exception

--

22001

string data - right truncation

ORA-01406

22002

NULL value-no indicator parameter

SQL-02124

22003

numeric value out of range

ORA-01426

22005

error in assignment

--

22007

invalid datetime format

--

22008

datetime field overflow

ORA-01800..01899

22009

invalid time zone displacement value

--

22011

substring error

--

22012

division by zero

ORA-01476

22015

interval field overflow

--

22018

invalid character value for cast

--

22019

invalid escape character

ORA-00911

22021

character not in repertoire

--

22022

indicator overflow

ORA-01411

22023

invalid parameter value

ORA-01025

ORA-04000..04019

22024

unterminated C string

ORA-01479

ORA-01480

22025

invalid escape sequence

ORA-01424

ORA-01425

22026

string data-length mismatch

ORA-01401

22027

trim error

-

23000

integrity constraint violation

ORA-02290..02299

24000

invalid cursor state

ORA-001002

ORA-001003

SQL-02114

SQL-02117

25000

invalid transaction state

SQL-02118

26000

invalid SQL statement name

--

27000

triggered data change violation

--

28000

invalid authorization specification

--

2A000

direct SQL syntax error or access rule violation

--

2B000

dependent privilege descriptors still exist

--

2C000

invalid character set name

--

2D000

invalid transaction termination

--

2E000

invalid connection name

--

33000

invalid SQL descriptor name

--

34000

invalid cursor name

--

35000

invalid condition number

--

37000

dynamic SQL syntax error or access rule violation

--

3C000

ambiguous cursor name

--

3D000

invalid catalog name

--

3F000

invalid schema name

--

40000

transaction rollback

ORA-02091

ORA-02092

40001

serialization failure

--

40002

integrity constraint violation

--

40003

statement completion unknown

--

42000

syntax error or access rule violation

ORA-00022

ORA-00251

ORA-00900..00999

ORA-01031

ORA-01490..01493

ORA-01700..01799

ORA-01900..02099

ORA-02140..02289

ORA-02420..02424

ORA-02450..02499

ORA-03276..03299

ORA-04040..04059

ORA-04070..04099

44000

with check option violation

ORA-01402

60000

system error

ORA-00370..00429

ORA-00600..00899

ORA-06430..06449

ORA-07200..07999

ORA-09700..09999

61000

shared server and detached process errors

ORA-00018..00035

ORA-00050..00068

ORA-02376..02399

ORA-04020..04039

62000

shared server and detached process errors

ORA-00100..00120

ORA-00440..00569

63000

Oracle*XA and two-task interface errors

ORA-00150..00159

ORA-02700..02899

ORA-03100..03199

ORA-06200..06249

SQL-02128

64000

control file, database file, and redo file errors; archival and media recovery errors

ORA-00200..00369

ORA-01100..01250

65000

PL/SQL errors

ORA-06500..06599

66000

Oracle Net driver errors

ORA-06000..06149

ORA-06250..06429

ORA-06600..06999

ORA-12100..12299

ORA-12500..12599

67000

licensing errors

ORA-00430..00439

69000

SQL*Connect errors

ORA-00570..00599

ORA-07000..07199

72000

SQL execute phase errors

ORA-00001

ORA-01000..01099

ORA-01400..01489

ORA-01495..01499

ORA-01500..01699

ORA-02400..02419

ORA-02425..02449

ORA-04060..04069

ORA-08000..08190

ORA-12000..12019

ORA-12300..12499

ORA-12700..21999

82100

out of memory (could not allocate)

SQL-02100

82101

inconsistent cursor cache (UCE/CUC mismatch)

SQL-02101

82102

inconsistent cursor cache (no CUC entry for UCE)

SQL-02102

82103

inconsistent cursor cache (out-or-range CUC ref)

SQL-02103

82104

inconsistent cursor cache (no CUC available)

SQL-02104

82105

inconsistent cursor cache (no CUC entry in cache)

SQL-02105

82106

inconsistent cursor cache (invalid cursor number)

SQL-02106

82107

program too old for runtime library; re-precompile

SQL-02107

82108

invalid descriptor passed to runtime library

SQL-02108

82109

inconsistent host cache (out-or-range SIT ref)

SQL-02109

82110

inconsistent host cache (invalid SQL type)

SQL-02110

82111

heap consistency error

SQL-02111

82113

code generation internal consistency failed

SQL-02115

82114

reentrant code generator gave invalid context

SQL-02116

82117

invalid OPEN or PREPARE for this connection

SQL-02122

82118

application context not found

SQL-02123

82119

unable to obtain error message text

SQL-02125

82120

Precompiler/SQLLIB version mismatch

SQL-02127

82121

NCHAR error; fetched number of bytes is odd

SQL-02129

82122

EXEC TOOLS interface not available

SQL-02130

82123

runtime context in use

SQL-02131

82124

unable to allocate runtime context

SQL-02132

82125

unable to initialize process for use with threads

SQL-02133

82126

invalid runtime context

SQL-02134

HZ000

remote database access

--


Using SQLSTATE

The following rules apply to using SQLSTATE with SQLCODE or the SQLCA when you precompile with the option setting MODE=ANSI. SQLSTATE must be declared inside a Declare Section; otherwise, it is ignored.

If You Declare SQLSTATE

  • Declaring SQLCODE is optional. If you declare SQLCODE inside the Declare Section, the Oracle Server returns status codes to SQLSTATE and SQLCODE after every SQL operation. However, if you declare SQLCODE outside of the Declare Section, Oracle returns a status code only to SQLSTATE.

  • Declaring the SQLCA is optional. If you declare the SQLCA, Oracle returns status codes to SQLSTATE and the SQLCA. In this case, to avoid compilation errors, do not declare SQLCODE.

If You Do not Declare SQLSTATE

  • You must declare SQLCODE inside or outside the Declare Section. The Oracle Server returns a status code to SQLCODE after every SQL operation.

  • Declaring the SQLCA is optional. If you declare the SQLCA, Oracle returns status codes to SQLCODE and the SQLCA.

You can learn the outcome of the most recent executable SQL statement by checking SQLSTATE explicitly with your own code or implicitly with the WHENEVER SQLERROR directive. Check SQLSTATE only after executable SQL statements and PL/SQL statements.

Declaring SQLCODE

When MODE=ANSI, and you have not declared a SQLSTATE status variable, you must declare a long integer variable named SQLCODE inside or outside the Declare Section. An example follows:

/* declare host variables */ 
EXEC SQL BEGIN DECLARE SECTION; 
int  emp_number, dept_number; 
char emp_name[20]; 
EXEC SQL END DECLARE SECTION; 
 
/* declare status variable--must be upper case */ 
long SQLCODE; 

When MODE=ORACLE, if you declare SQLCODE, it is not used.

You can declare more than one SQLCODE. Access to a local SQLCODE is limited by its scope within your program.

After every SQL operation, Oracle returns a status code to the SQLCODE currently in scope. So, your program can learn the outcome of the most recent SQL operation by checking SQLCODE explicitly, or implicitly with the WHENEVER directive.

When you declare SQLCODE instead of the SQLCA in a particular compilation unit, the precompiler allocates an internal SQLCA for that unit. Your host program cannot access the internal SQLCA. If you declare the SQLCA and SQLCODE, Oracle returns the same status code to both after every SQL operation.

Key Components of Error Reporting Using the SQLCA

Error reporting depends on variables in the SQLCA. This section highlights the key components of error reporting. The next section takes a close look at the SQLCA.

Status Codes

Every executable SQL statement returns a status code to the SQLCA variable sqlcode, which you can check implicitly with the WHENEVER directive or explicitly with your own code.

A zero status code means that Oracle executed the statement without detecting an error or exception. A positive status code means that Oracle executed the statement but detected an exception. A negative status code means that Oracle did not execute the SQL statement because of an error.

Warning Flags

Warning flags are returned in the SQLCA variables sqlwarn[0] through sqlwarn[7], which you can check implicitly or explicitly. These warning flags are useful for runtime conditions not considered errors by Oracle. If no indicator variable is available, Oracle issues an error message.

Rows-Processed Count

The number of rows processed by the most recently executed SQL statement is returned in the SQLCA variable sqlca.sqlerrd[2], which you can check explicitly.

Strictly speaking, this variable is not for error reporting, but it can help you avoid mistakes. For example, suppose you expect to delete about ten rows from a table. After the deletion, you check sqlca.sqlerrd[2] and find that 75 rows were processed. To be safe, you might want to roll back the deletion and examine your WHERE-clause search condition.

Parse Error Offsets

Before executing a SQL statement, Oracle must parse it to make sure it follows syntax rules and refers to valid database objects. If Oracle finds an error, an offset is stored in the SQLCA variable sqlca.sqlerrd[4], which you can check explicitly. The offset specifies the character position in the SQL statement at which the parse error begins. As in a normal C string, the first character occupies position zero. For example, if the offset is 9, the parse error begins at the 10th character.

The parse error offset is used for situations where a separate prepare/parse is performed. This is typical for dynamic SQL statements.

Parse errors may arise from missing, misplaced, or misspelled keywords, invalid options, and the like. For example, the dynamic SQL statement:

"UPDATE emp SET jib = :job_title WHERE empno = :emp_number" 

causes the parse error

ORA-00904: invalid column name 

because the column name JOB is misspelled. The value of sqlca.sqlerrd[4] is 15 because the erroneous column name JIB begins at the 16th character.

If your SQL statement does not cause a parse error, Oracle sets sqlca.sqlerrd[4] to zero. Oracle also sets sqlca.sqlerrd[4] to zero if a parse error begins at the first character (which occupies position zero). So, check sqlca.sqlerrd[4] only if sqlca.sqlcode is negative, which means that an error has occurred.

Error Message Text

The error code and message for Oracle errors are available in the SQLCA variable SQLERRMC. At most, the first 70 characters of text are stored. To get the full text of messages longer than 70 characters, you use the sqlglm() function.

Using the SQL Communications Area (SQLCA)

The SQLCA is a data structure. Its components contain error, warning, and status information updated by Oracle whenever a SQL statement is executed. Thus, the SQLCA always reflects the outcome of the most recent SQL operation. To determine the outcome, you can check variables in the SQLCA.

Your program can have more than one SQLCA. For example, it might have one global SQLCA and several local ones. Access to a local SQLCA is limited by its scope within the program. Oracle returns information only to the SQLCA that is in scope.


Note:

When your application uses Oracle Net to access a combination of local and remote databases concurrently, all the databases write to one SQLCA. There is not a different SQLCA for each database.

Declaring the SQLCA

When MODE=ORACLE, declaring the SQLCA is required. To declare the SQLCA, you should copy it into your program with the INCLUDE or #include statement, as follows:

EXEC SQL INCLUDE SQLCA; 

or

#include <sqlca.h>

If you use a Declare Section, the SQLCA must be declared outside the Declare Section. Not declaring the SQLCA results in compile-time errors.

When you precompile your program, the INCLUDE SQLCA statement is replaced by several variable declarations that allow Oracle to communicate with the program.

When MODE=ANSI, declaring the SQLCA is optional. But in this case you must declare a SQLCODE or SQLSTATE status variable. The type of SQLCODE (upper case is required) is int. If you declare SQLCODE or SQLSTATE instead of the SQLCA in a particular compilation unit, the precompiler allocates an internal SQLCA for that unit. Your Pro*C/C++ program cannot access the internal SQLCA. If you declare the SQLCA and SQLCODE, Oracle returns the same status code to both after every SQL operation.


Note:

Declaring the SQLCA is optional when MODE=ANSI, but you cannot use the WHENEVER SQLWARNING directive without the SQLCA. So, if you want to use the WHENEVER SQLWARNING directive, you must declare the SQLCA.

This Guide uses SQLCODE when referring to the SQLCODE status variable, and sqlca.sqlcode when explicitly referring to the component of the SQLCA structure.


SQLCA Contents

The SQLCA contains the following runtime information about the outcome of SQL statements:

  • Oracle error codes

  • Warning flags

  • Event information

  • Rows-processed count

  • Diagnostics

The sqlca.h header file is:

/*
NAME
  SQLCA : SQL Communications Area.
FUNCTION
  Contains no code. Oracle fills in the SQLCA with status info
  during the execution of a SQL stmt.
NOTES
  **************************************************************
  ***                                                        ***
  *** This file is SOSD.  Porters must change the data types ***
  *** appropriately on their platform.  See notes/pcport.doc ***
  *** for more information.                                  ***
  ***                                                        ***
  **************************************************************

  If the symbol SQLCA_STORAGE_CLASS is defined, then the SQLCA
  will be defined to have this storage class. For example:
 
    #define SQLCA_STORAGE_CLASS extern
 
  will define the SQLCA as an extern.
 
  If the symbol SQLCA_INIT is defined, then the SQLCA will be
  statically initialized. Although this is not necessary in order
  to use the SQLCA, it is a good programing practice not to have
  unitialized variables. However, some C compilers/operating systems
  don't allow automatic variables to be initialized in this manner.
  Therefore, if you are INCLUDE'ing the SQLCA in a place where it
  would be an automatic AND your C compiler/operating system doesn't
  allow this style of initialization, then SQLCA_INIT should be left
  undefined -- all others can define SQLCA_INIT if they wish.

  If the symbol SQLCA_NONE is defined, then the SQLCA
  variable will not be defined at all.  The symbol SQLCA_NONE
  should not be defined in source modules that have embedded SQL.
  However, source modules that have no embedded SQL, but need to
  manipulate a sqlca struct passed in as a parameter, can set the
  SQLCA_NONE symbol to avoid creation of an extraneous sqlca
  variable. 
*/
#ifndef SQLCA
#define SQLCA 1
struct   sqlca
         {
         /* ub1 */ char    sqlcaid[8];
         /* b4  */ long    sqlabc;
         /* b4  */ long    sqlcode;
         struct
           {
           /* ub2 */ unsigned short sqlerrml;
           /* ub1 */ char           sqlerrmc[70];
           } sqlerrm;
         /* ub1 */ char    sqlerrp[8];
         /* b4  */ long    sqlerrd[6];
         /* ub1 */ char    sqlwarn[8];
         /* ub1 */ char    sqlext[8];
         };
#ifndef SQLCA_NONE 
#ifdef   SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca
#else
         struct sqlca sqlca
#endif
#ifdef  SQLCA_INIT
         = {
         {'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
         sizeof(struct sqlca),
         0,
         { 0, {0}},
         {'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
         {0, 0, 0, 0, 0, 0},
         {0, 0, 0, 0, 0, 0, 0, 0},
         {0, 0, 0, 0, 0, 0, 0, 0}
         }
#endif
         ;
#endif
#endif

SQLCA Structure

This section describes the structure of the SQLCA, its components, and the values they can store.

sqlcaid

This string component is initialized to "SQLCA" to identify the SQL Communications Area.

sqlcabc

This integer component holds the length, in bytes, of the SQLCA structure.

sqlcode

This integer component holds the status code of the most recently executed SQL statement. The status code, which indicates the outcome of the SQL operation, can be any of the following numbers:

Status CodesDescription
0Means that Oracle executed the statement without detecting an error or exception.
>0Means that Oracle executed the statement but detected an exception. This occurs when Oracle cannot find a row that meets your WHERE-clause search condition or when a SELECT INTO or FETCH returns no rows.

When MODE=ANSI, +100 is returned to sqlcode after an INSERT of no rows. This can happen when a subquery returns no rows to process.

  • <0 - Means that Oracle did not execute the statement because of a database, system, network, or application error. Such errors can be fatal. When they occur, the current transaction should, in most cases, be rolled back.

Negative return codes correspond to error codes listed in Oracle Database Error Messages

sqlerrm

This embedded struct contains the following two components:

ComponentsDescription
sqlerrmlThis integer component holds the length of the message text stored in sqlerrmc.
sqlerrmcThis string component holds the message text corresponding to the error code stored in sqlcode. The string is not null terminated. Use the sqlerrml component to determine the length.

This component can store up to 70 characters. To get the full text of messages longer than 70 characters, you must use the sqlglm() function (discussed later).

Make sure sqlcode is negative before you reference sqlerrmc. If you reference sqlerrmc when sqlcode is zero, you get the message text associated with a prior SQL statement.

sqlerrp

This string component is reserved for future use.

sqlerrd

This array of binary integers has six elements. Descriptions of the components in sqlerrd follow:

ComponentsDescription
sqlerrd[0]This component is reserved for future use.
sqlerrd[1]This component is reserved for future use.
sqlerrd[2]This component holds the number of rows processed by the most recently executed SQL statement. However, if the SQL statement failed, the value of sqlca.sqlerrd[2] is undefined, with one exception. If the error occurred during an array operation, processing stops at the row that caused the error, so sqlca.sqlerrd[2] gives the number of rows processed successfully.

The rows-processed count is zeroed after an OPEN statement and incremented after a FETCH statement. For the EXECUTE, INSERT, UPDATE, DELETE, and SELECT INTO statements, the count reflects the number of rows processed successfully. The count does not include rows processed by an UPDATE or DELETE CASCADE. For example, if 20 rows are deleted because they meet WHERE-clause criteria, and 5 more rows are deleted because they now (after the primary delete) violate column constraints, the count is 20 not 25.

ComponentsDescription
sqlerrd[3]This component is reserved for future use.
sqlerrd[4]This component holds an offset that specifies the character position at which a parse error begins in the most recently executed SQL statement. The first character occupies position zero.
sqlerrd[5]This component is reserved for future use.

sqlwarn

This array of single characters has eight elements. They are used as warning flags. Oracle sets a flag by assigning it a "W" (for warning) character value.

The flags warn of exceptional conditions. For example, a warning flag is set when Oracle assigns a truncated column value to an output host variable.

Descriptions of the components in sqlwarn follow:

ComponentsDescription
sqlwarn[0]This flag is set if another warning flag is set.
sqlwarn[1]This flag is set if a truncated column value was assigned to an output host variable. This applies only to character data. Oracle truncates certain numeric data without setting a warning or returning a negative sqlcode.

To find out if a column value was truncated and by how much, check the indicator variable associated with the output host variable. The (positive) integer returned by an indicator variable is the original length of the column value. You can increase the length of the host variable accordingly.

ComponentsDescription
sqlwarn[2]This flag is set if a NULL column is not used in the result of a SQL group function, such as AVG() or SUM().
sqlwarn[3]This flag is set if the number of columns in a query select list does not equal the number of host variables in the INTO clause of the SELECT or FETCH statement. The number of items returned is the lesser of the two.
sqlwarn[4]This flag is no longer in use.
sqlwarn[5]This flag is set when an EXEC SQL CREATE {PROCEDURE | FUNCTION | PACKAGE | PACKAGE BODY} statement fails because of a PL/SQL compilation error.
sqlwarn[6]This flag is no longer in use.
sqlwarn[7]This flag is no longer in use.

sqlext

This string component is reserved for future use.

PL/SQL Considerations

When the precompiler application executes an embedded PL/SQL block, not all components of the SQLCA are set. For example, if the block fetches several rows, the rows-processed count (sqlerrd[2]) is set to only 1. You should depend only on the sqlcode and sqlerrm components of the SQLCA after execution of a PL/SQL block.

Getting the Full Text of Error Messages

The SQLCA can accommodate error messages up to 70 characters long. To get the full text of longer (or nested) error messages, you need to use the sqlglm() function. The syntax is

void sqlglm(char   *message_buffer, 
            size_t *buffer_size,
            size_t *message_length); 

where:

SyntaxDescription
message_bufferIs the text buffer in which you want Oracle to store the error message (Oracle blank-pads to the end of this buffer).
buffer_sizeIs a scalar variable that specifies the maximum size of the buffer in bytes.
message_lengthIs a scalar variable in which Oracle stores the actual length of the error message, if not truncated.


Note:

The types of the last two arguments for the sqlglm() function are shown here generically as size_t pointers. However on your platform they might have a different type. For example, on many UNIX workstation ports, they are unsigned int *.

You should check the file sqlcpr.h, which is in the standard include directory on your system, to determine the datatype of these parameters.


The maximum length of an Oracle error message is 512 characters including the error code, nested messages, and message inserts such as table and column names. The maximum length of an error message returned by sqlglm() depends on the value you specify for buffer_size.

The following example calls sqlglm() to get an error message of up to 200 characters in length:

EXEC SQL WHENEVER SQLERROR DO sql_error(); 
... 
/* other statements */ 
... 
sql_error() 
{ 
    char msg[200]; 
    size_t buf_len, msg_len; 
 
    buf_len = sizeof (msg); 
    sqlglm(msg, &buf_len, &msg_len);   /* note use of pointers */
    if (msg_len > buf_len)
    msg_len = buf_len;
    printf("%.*s\n\n", msg_len, msg); 
    exit(1); 
} 

Notice that sqlglm() is called only when a SQL error has occurred. Always make sure SQLCODE (or sqlca.sqlcode) is nonzero before calling sqlglm. If you call sqlglm() when SQLCODE is zero, you get the message text associated with a prior SQL statement.


Note:

In cases where multiple runtime contexts are used, use the version of sqlglmt() that takes a context to get the correct error message.

Using the WHENEVER Directive

By default, precompiled programs ignore Oracle error and warning conditions and continue processing if possible. To do automatic condition checking and error handling, you need the WHENEVER directive.

With the WHENEVER directive you can specify actions to be taken when Oracle detects an error, warning condition, or "not found" condition. These actions include continuing with the next statement, calling a routine, branching to a labeled statement, or stopping.

You code the WHENEVER directive using the following syntax:

EXEC SQL WHENEVER <condition> <action>; 

WHENEVER Conditions

You can have Oracle automatically check the SQLCA for any of the following conditions.

SQLWARNING

sqlwarn[0] is set because Oracle returned a warning (one of the warning flags, sqlwarn[1] through sqlwarn[7], is also set) or SQLCODE has a positive value other than +1403. For example, sqlwarn[0] is set when Oracle assigns a truncated column value to an output host variable.

Declaring the SQLCA is optional when MODE=ANSI. To use WHENEVER SQLWARNING, however, you must declare the SQLCA.

SQLERROR

SQLCODE has a negative value because Oracle returned an error.

NOT FOUND

SQLCODE has a value of +1403 (+100 when MODE=ANSI) because Oracle could not find a row that meets your WHERE-clause search condition, or a SELECT INTO or FETCH returned no rows.

When MODE=ANSI, +100 is returned to SQLCODE after an INSERT of no rows.

WHENEVER Actions

When Oracle detects one of the preceding conditions, you can have your program take any of the following actions.

CONTINUE

Your program continues to run with the next statement if possible. This is the default action, equivalent to not using the WHENEVER directive. You can use it to turn off condition checking.

DO

Your program transfers control to an error handling function in the program. When the end of the routine is reached, control transfers to the statement that follows the failed SQL statement.

The usual rules for entering and exiting a function apply. You can pass parameters to the error handler invoked by an EXEC SQL WHENEVER ... DO ... directive, and the function can return a value.

DO BREAK

An actual "break" statement is placed in your program. Use this action in loops. When the WHENEVER condition is met, your program exits the loop it is inside.

DO CONTINUE

An actual "continue" statement is placed in your program. Use this action in loops. When the WHENEVER condition is met, your program continues with the next iteration of the loop it is inside.

GOTO label_name

Your program branches to a labeled statement. Label names can be any length, but only the first 31 characters are significant. Your C compiler might require a different maximum length. Check your C compiler user's guide.

STOP

Your program stops running and uncommitted work is rolled back.

STOP in effect just generates an exit() call whenever the condition occurs. Be careful. The STOP action displays no messages before disconnecting from Oracle.

WHENEVER Examples

If you want your program to

  • Go to close_cursor if a "no data found" condition occurs

  • Continue with the next statement if a warning occurs

  • Go to error_handler if an error occurs

you must code the following WHENEVER directives before the first executable SQL statement:

EXEC SQL WHENEVER NOT FOUND GOTO close_cursor; 
EXEC SQL WHENEVER SQLWARNING CONTINUE; 
EXEC SQL WHENEVER SQLERROR GOTO error_handler; 

In the following example, you use WHENEVER...DO directives to handle specific errors:

... 
EXEC SQL WHENEVER SQLERROR DO handle_insert_error("INSERT error"); 
EXEC SQL INSERT INTO emp (empno, ename, deptno) 
    VALUES (:emp_number, :emp_name, :dept_number); 
EXEC SQL WHENEVER SQLERROR DO handle_delete_error("DELETE error"); 
EXEC SQL DELETE FROM dept WHERE deptno = :dept_number; 
... 
handle_insert_error(char *stmt) 
{   switch(sqlca.sqlcode) 
    { 
    case -1: 
    /* duplicate key value */ 
        ... 
        break; 
    case -1401: 
    /* value too large */ 
        ... 
        break; 
    default: 
    /* do something here too */ 
        ... 
        break; 
    } 
} 
 
handle_delete_error(char *stmt) 
{ 
    printf("%s\n\n", stmt); 
    if (sqlca.sqlerrd[2] == 0) 
    { 
        /* no rows deleted */ 
        ... 
    } 
    else 
    {   ...
    } 
    ... 
} 

Notice how the procedures check variables in the SQLCA to determine a course of action.

Use of DO BREAK and DO CONTINUE

This example illustrates how to display employee name, salary, and commission for only those employees who receive commissions:

#include <sqlca.h>
#include <stdio.h>

main()
{
    char *uid = "scott/tiger";
    struct { char ename[12]; float sal; float comm; } emp;

    /* Trap any connection error that might occur. */
    EXEC SQL WHENEVER SQLERROR GOTO whoops;
    EXEC SQL CONNECT :uid;

    EXEC SQL DECLARE c CURSOR FOR
        SELECT ename, sal, comm FROM EMP ORDER BY ENAME ASC;

    EXEC SQL OPEN c;

    /* Set up 'BREAK' condition to exit the loop. */
    EXEC SQL WHENEVER NOT FOUND DO BREAK;
   /* The DO CONTINUE makes the loop start at the next iteration when an error occurs.*/
    EXEC SQL WHENEVER SQLERROR DO CONTINUE;

    while (1)
      {
          EXEC SQL FETCH c INTO :emp;
   /* An ORA-1405 would cause the 'continue' to occur. So only employees with */
   /* non-NULL commissions will be displayed. */
          printf("%s  %7.2f  %9.2f\n", emp.ename, emp.sal, emp.comm);
       }

/* This 'CONTINUE' shuts off the 'DO CONTINUE' allowing the program to 
   proceed if any further errors do occur, specifically, with the CLOSE */
    EXEC SQL WHENEVER SQLERROR CONTINUE;

    EXEC SQL CLOSE c;

    exit(EXIT_SUCCESS);

whoops:
    printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    exit(EXIT_FAILURE);
}

Scope of WHENEVER

Because WHENEVER is a declarative statement, its scope is positional, not logical. That is, it tests all executable SQL statements that physically follow it in the source file, not in the flow of program logic. So, code the WHENEVER directive before the first executable SQL statement you want to test.

A WHENEVER directive stays in effect until superseded by another WHENEVER directive checking for the same condition.

In the following example, the first WHENEVER SQLERROR directive is superseded by a second, and so applies only to the CONNECT statement. The second WHENEVER SQLERROR directive applies to both the UPDATE and DROP statements, despite the flow of control from step1 to step3.

step1: 
    EXEC SQL WHENEVER SQLERROR STOP; 
    EXEC SQL CONNECT :username IDENTIFIED BY :password; 
    ... 
    goto step3; 
step2: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL UPDATE emp SET sal = sal * 1.10; 
    ... 
step3: 
    EXEC SQL DROP INDEX emp_index; 
    ... 

Guidelines for WHENEVER

The following guidelines will help you avoid some common pitfalls.

Placing the Statements

In general, code a WHENEVER directive before the first executable SQL statement in your program. This ensures that all ensuing errors are trapped because WHENEVER directives stay in effect to the end of a file.

Handling End-of-Data Conditions

Your program should be prepared to handle an end-of-data condition when using a cursor to fetch rows. If a FETCH returns no data, the program should exit the fetch loop, as follows:

EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
    EXEC SQL FETCH...
}
EXEC SQL CLOSE my_cursor; 
... 

An INSERT can return NOT FOUND if no rows have been inserted. If you do not want to catch that condition, use the EXEC SQL WHENEVER NOT FOUND CONTINUE statement before the INSERT:

EXEC SQL WHENEVER NOT FOUND DO break;
for(;;)
{
   EXEC SQL FETCH ...
   EXEC SQL WHENEVER NOT FOUND CONTINUE;
   EXEC SQL INSERT INTO ...
}
EXEC SQL CLOSE my_cursor;
...

Avoiding Infinite Loops

If a WHENEVER SQLERROR GOTO directive branches to an error handling routine that includes an executable SQL statement, your program might enter an infinite loop if the SQL statement fails with an error. You can avoid this by coding WHENEVER SQLERROR CONTINUE before the SQL statement, as shown in the following example:

EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
... 
sql_error: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK WORK RELEASE; 
    ... 

Without the WHENEVER SQLERROR CONTINUE statement, a ROLLBACK error would invoke the routine again, starting an infinite loop.

Careless use of WHENEVER can cause problems. For example, the following code enters an infinite loop if the DELETE statement sets NOT FOUND because no rows meet the search condition:

/* improper use of WHENEVER */ 
... 
EXEC SQL WHENEVER NOT FOUND GOTO no_more; 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; 
    ... 
} 
 
no_more: 
    EXEC SQL DELETE FROM emp WHERE empno = :emp_number; 
     ... 

The next example handles the NOT FOUND condition properly by resetting the GOTO target:

/* proper use of WHENEVER */ 
... 
EXEC SQL WHENEVER NOT FOUND GOTO no_more; 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; 
    ... 
} 
no_more: 
    EXEC SQL WHENEVER NOT FOUND GOTO no_match; 
    EXEC SQL DELETE FROM emp WHERE empno = :emp_number; 
    ... 
no_match: 
    ... 

Maintaining Addressability

Make sure all SQL statements governed by a WHENEVER GOTO directive can branch to the GOTO label. The following code results in a compile-time error because labelA in func1 is not within the scope of the INSERT statement in func2:

func1() 
{ 
  
    EXEC SQL WHENEVER SQLERROR GOTO labelA; 
    EXEC SQL DELETE FROM emp WHERE deptno = :dept_number; 
    ... 
labelA: 
... 
} 
func2() 
{ 
  
    EXEC SQL INSERT INTO emp (job) VALUES (:job_title); 
    ... 
} 

The label to which a WHENEVER GOTO directive branches must be in the same precompilation file as the statement.

Returning After an Error

If your program must return after handling an error, use the DO routine_call action. Alternatively, you can test the value of sqlcode, as shown in the following example:

... 
EXEC SQL UPDATE emp SET sal = sal * 1.10; 
if (sqlca.sqlcode < 0) 
{  /* handle error  */ 
 
EXEC SQL DROP INDEX emp_index;

Just make sure no WHENEVER GOTO or WHENEVER STOP directive is active.

Obtaining the Text of SQL Statements

In many precompiler applications it is convenient to know the text of the statement being processed, its length, and the SQL command (such as INSERT or SELECT) that it contains. This is especially true for applications that use dynamic SQL.

The SQLStmtGetText() function (old name:sqlgls() function)—part of the SQLLIB runtime library—returns the following information:

SQLStmtGetText() is thread-safe. You can call SQLStmtGetText() after issuing a static SQL statement. For dynamic SQL Method 1, call SQLStmtGetText() after the SQL statement is executed. For dynamic SQL Methods 2, 3, and 4, you can call SQLStmtGetText() as soon as the statement has been PREPAREd.

For the new names of all the SQLLIB functions, see also "New Names for SQLLIB Public Functions".

The prototype for SQLStmtGetText() is

void SQLStmtGetText(dvoid *context, char *sqlstm, size_t *stmlen, size_t *sqlfc); 

The context parameter is the runtime context. For definition and use of contexts, see "CONTEXT Variables".

The sqlstm parameter is a character buffer that holds the returned text of the SQL statement. Your program must statically declare the buffer or dynamically allocate memory for the buffer.

The stmlen parameter is a size_t variable. Before calling SQLStmtGetText(), set this parameter to the actual size, in bytes, of the sqlstm buffer. When SQLStmtGetText() returns, the sqlstm buffer contains the SQL statement text, blank padded to the length of the buffer. The stmlen parameter returns the actual number of bytes in the returned statement text, not counting blank padding. The maximum value of stmlen is port-specific and generally will be the maximum integer size.

The sqlfc parameter is a size_t variable that returns the SQL function code for the SQL command in the statement. Table 9-3 shows the SQL function codes for the commands.

Table 9-3 SQL Function Codes

CodeSQL FunctionCodeSQL FunctionCodeSQL Function

01

CREATE TABLE

26

ALTER TABLE

51

DROP TABLESPACE

02

SET ROLE

27

EXPLAIN

52

ALTER SESSION

03

INSERT

28

GRANT

53

ALTER USER

04

SELECT

29

REVOKE

54

COMMIT

05

UPDATE

30

CREATE SYNONYM

55

ROLLBACK

06

DROP ROLE

31

DROP SYNONYM

56

SAVEPOINT

07

DROP VIEW

32

ALTER SYSTEM SWITCH LOG

57

CREATE CONTROL FILE

08

DROP TABLE

33

SET TRANSACTION

58

ALTER TRACING

09

DELETE

34

PL/SQL EXECUTE

59

CREATE TRIGGER

10

CREATE VIEW

35

LOCK TABLE

60

ALTER TRIGGER

11

DROP USER

36

(NOT USED)

61

DROP TRIGGER

12

CREATE ROLE

37

RENAME

62

ANALYZE TABLE

13

CREATE SEQUENCE

38

COMMENT

63

ANALYZE INDEX

14

ALTER SEQUENCE

39

AUDIT

64

ANALYZE CLUSTER

15

(NOT USED)

40

NOAUDIT

65

CREATE PROFILE

16

DROP SEQUENCE

41

ALTER INDEX

66

DROP PROFILE

17

CREATE SCHEMA

42

CREATE EXTERNAL DATABASE

67

ALTER PROFILE

18

CREATE CLUSTER

43

DROP EXTERNAL DATABASE

68

DROP PROCEDURE

19

CREATE USER

44

CREATE DATABASE

69

(NOT USED)

20

CREATE INDEX

45

ALTER DATABASE

70

ALTER RESOURCE COST

21

DROP INDEX

46

CREATE ROLLBACK SEGMENT

71

CREATE SNAPSHOT LOG

22

DROP CLUSTER

47

ALTER ROLLBACK SEGMENT

72

ALTER SNAPSHOT LOG

23

VALIDATE INDEX

48

DROP ROLLBACK SEGMENT

73

DROP SNAPSHOT LOG

24

CREATE PROCEDURE

49

CREATE TABLESPACE

74

CREATE SNAPSHOT

25

ALTER PROCEDURE

50

ALTER TABLESPACE

75

ALTER SNAPSHOT

--

--

--

--

76

DROP

SNAPSHOT


The length parameter (stmlen) returns a zero if an error occurred. Possible error conditions are:

Restrictions

SQLStmtGetText() does not return the text for statements that contain the following commands:

  • CONNECT

  • COMMIT

  • ROLLBACK

  • FETCH

There are no SQL function codes for these commands.

Example Program

The example program sqlvcp.pc, is available in the demo directory. It demonstrates how you can use the sqlgls() function.

Using the Oracle Communications Area (ORACA)

The SQLCA handles standard SQL communications The ORACA handles Oracle communications. When you need more information about runtime errors and status changes than the SQLCA provides, use the ORACA. It contains an extended set of diagnostic tools. However, use of the ORACA is optional because it adds to runtime overhead.

Besides helping you to diagnose problems, the ORACA lets you monitor your program's use of Oracle resources such as the SQL Statement Executor and the cursor cache.

Your program can have more than one ORACA. For example, it might have one global ORACA and several local ones. Access to a local ORACA is limited by its scope within the program. Oracle returns information only to the ORACA that is in scope.

Declaring the ORACA

To declare the ORACA, copy it into your program with the INCLUDE statement or the #include preprocessor directive, as follows:

EXEC SQL INCLUDE ORACA; 

or

#include <oraca.h> 

If your ORACA must be of the extern storage class, define ORACA_STORAGE_CLASS in your program as follows:

#define ORACA_STORAGE_CLASS extern

If the program uses a Declare Section, the ORACA must be defined outside it.

Enabling the ORACA

To enable the ORACA, you must specify the ORACA option, either on the command line with

ORACA=YES 

or inline with

EXEC ORACLE OPTION (ORACA=YES); 

Then, you must choose appropriate runtime options by setting flags in the ORACA.

ORACA Contents

The ORACA contains option settings, system statistics, and extended diagnostics such as

  • SQL statement text (you can specify when to save the text)

  • The name of the file in which an error occurred (useful when using subroutines)

  • Location of the error in a file

  • Cursor cache errors and statistics

A partial listing of oraca.h is

/*
NAME
  ORACA : Oracle Communications Area.

  If the symbol ORACA_NONE is defined, then there will be no ORACA
  *variable*, although there will still be a struct defined.  This
  macro should not normally be defined in application code.

  If the symbol ORACA_INIT is defined, then the ORACA will be
  statically initialized. Although this is not necessary in order
  to use the ORACA, it is a good pgming practice not to have
  unitialized variables. However, some C compilers/operating systems
  don't allow automatic variables to be init'd in this manner. Therefore,
  if you are INCLUDE'ing the ORACA in a place where it would be
  an automatic AND your C compiler/operating system doesn't allow this style
  of initialization, then ORACA_INIT should be left undefined --
  all others can define ORACA_INIT if they wish.
*/
 
#ifndef  ORACA
#define  ORACA      1
 
struct    oraca
{
    char oracaid[8];   /* Reserved               */
    long oracabc;      /* Reserved               */
 
/*    Flags which are setable by User. */
 
   long  oracchf;      /* <> 0 if "check cur cache consistncy"*/
   long  oradbgf;      /* <> 0 if "do DEBUG mode checking"    */
   long  orahchf;      /* <> 0 if "do Heap consistency check" */
   long  orastxtf;     /* SQL stmt text flag            */
#define  ORASTFNON 0   /* = don't save text of SQL stmt       */
#define  ORASTFERR 1   /* = only save on SQLERROR         */
#define  ORASTFWRN 2   /* = only save on SQLWARNING/SQLERROR  */
#define  ORASTFANY 3      /* = always save             */
    struct
      {
  unsigned short orastxtl;
  char  orastxtc[70];
      } orastxt;         /* text of last SQL stmt          */
    struct
      {
  unsigned short orasfnml;
  char      orasfnmc[70];
      } orasfnm;        /* name of file containing SQL stmt    */
  long   oraslnr;        /* line nr-within-file of SQL stmt     */
  long   orahoc;         /* highest max open OraCurs requested  */
  long   oramoc;         /* max open OraCursors required         */
  long   oracoc;         /* current OraCursors open         */
  long   oranor;         /* nr of OraCursor re-assignments      */
  long   oranpr;         /* nr of parses               */
  long   oranex;         /* nr of executes            */
    };

#ifndef ORACA_NONE

#ifdef ORACA_STORAGE_CLASS
ORACA_STORAGE_CLASS struct oraca oraca
#else
struct oraca oraca
#endif
#ifdef ORACA_INIT
    =
    {
    {'O','R','A','C','A',' ',' ',' '},
    sizeof(struct oraca),
    0,0,0,0,
    {0,{0}},
    {0,{0}},
    0,
    0,0,0,0,0,0
    }
#endif
    ;

#endif

#endif
/* end oraca.h */

Choosing Runtime Options

The ORACA includes several option flags. Setting these flags by assigning them nonzero values provides the ability to

  • Save the text of SQL statements

  • Enable DEBUG operations

  • Check cursor cache consistency (the cursor cache is a continuously updated area of memory used for cursor management)

  • Check heap consistency (the heap is an area of memory reserved for dynamic variables)

  • Gather cursor statistics

The following descriptions will help you choose the options you need.

Structure of the ORACA

This section describes the structure of the ORACA, its components, and the values they can store.

oracaid

This string component is initialized to "ORACA" to identify the Oracle Communications Area.

oracabc

This integer component holds the length, in bytes, of the ORACA data structure.

oracchf

If the master DEBUG flag (oradbgf) is set, this flag enables the gathering of cursor cache statistics and lets you check the cursor cache for consistency before every cursor operation.

The Oracle runtime library does the consistency checking and might issue error messages, which are listed in the manual Oracle Database Error Messages. They are returned to the SQLCA just like Oracle error messages.

This flag has the following settings:

  • Disable cache consistency checking (the default).

  • Enable cache consistency checking.

oradbgf

This master flag lets you choose all the DEBUG options. It has the following settings:

Disable all DEBUG operations (the default).

Enable all DEBUG operations.

orahchf

If the master DEBUG flag (oradbgf) is set, this flag tells the Oracle runtime library to check the heap for consistency every time the precompiler dynamically allocates or frees memory. This is useful for detecting program bugs that upset memory.

This flag must be set before the CONNECT command is issued and, once set, cannot be cleared; subsequent change requests are ignored. It has the following settings:

  • Disable heap consistency checking (the default).

  • Enable heap consistency checking.

orastxtf

This flag lets you specify when the text of the current SQL statement is saved. It has the following settings:

  • Never save the SQL statement text (the default).

  • Save the SQL statement text on SQLERROR only.

  • Save the SQL statement text on SQLERROR or SQLWARNING.

  • Always save the SQL statement text.

The SQL statement text is saved in the ORACA embedded struct named orastxt.

Diagnostics

The ORACA provides an enhanced set of diagnostics; the following variables help you to locate errors quickly:

orastxt

This embedded struct helps you find faulty SQL statements. It lets you save the text of the last SQL statement parsed by Oracle. It contains the following two components:

ComponentsDescription
orastxtlThis integer component holds the length of the current SQL statement.
orastxtcThis string component holds the text of the current SQL statement. At most, the first 70 characters of text are saved. The string is not null terminated. Use the oratxtl length component when printing the string.

Statements parsed by the precompiler, such as CONNECT, FETCH, and COMMIT, are not saved in the ORACA.

orasfnm

This embedded struct identifies the file containing the current SQL statement and so helps you find errors when multiple files are precompiled for one application. It contains the following two components:

ComponentsDescription
orasfnmlThis integer component holds the length of the filename stored in orasfnmc.
orasfnmcThis string component holds the filename. At most, the first 70 characters are stored.

oraslnr

This integer component identifies the line at (or near) which the current SQL statement can be found.

Cursor Cache Statistics

If the master DEBUG flag (oradbgf) and the cursor cache flag (oracchf) are set, the following variables let you gather cursor cache statistics. They are automatically set by every COMMIT or ROLLBACK command your program issues.

Internally, there is a set of these variables for each CONNECTed database. The current values in the ORACA pertain to the database against which the last COMMIT or ROLLBACK was executed:

orahoc

This integer component records the highest value to which MAXOPENCURSORS was set during program execution.

oramoc

This integer component records the maximum number of open Oracle cursors required by your program. This number can be higher than orahoc if MAXOPENCURSORS was set too low, which forced the precompiler to extend the cursor cache.

oracoc

This integer component records the current number of open Oracle cursors required by your program.

oranor

This integer component records the number of cursor cache reassignments required by your program. This number shows the degree of "thrashing" in the cursor cache and should be kept as low as possible.

oranpr

This integer component records the number of SQL statement parses required by your program.

oranex

This integer component records the number of SQL statement executions required by your program. The ratio of this number to the oranpr number should be kept as high as possible. In other words, avoid unnecessary re-parsing.

ORACA Example

The following program prompts for a department number, inserts the name and salary of each employee in that department into one of two tables, then displays diagnostic information from the ORACA. This program is available online in the demo directory, as oraca.pc.

/* oraca.pc
 * This sample program demonstrates how to
 * use the ORACA to determine various performance
 * parameters at runtime.
 */
#include <stdio.h> 
#include <string.h>
#include <sqlca.h>
#include <oraca.h> 

EXEC SQL BEGIN DECLARE SECTION;
char *userid = "SCOTT/TIGER"; 
char  emp_name[21];
int   dept_number; 
float salary; 
char SQLSTATE[6];
EXEC SQL END DECLARE SECTION;

void sql_error(); 

main() 
{ 
    char temp_buf[32];

    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error");
    EXEC SQL CONNECT :userid; 
    
    EXEC ORACLE OPTION (ORACA=YES);

    oraca.oradbgf  = 1;             /* enable debug operations */ 
    oraca.oracchf  = 1;      /* gather cursor cache statistics */ 
    oraca.orastxtf = 3;       /* always save the SQL statement */ 

    printf("Enter department number: "); 
    gets(temp_buf);
    dept_number = atoi(temp_buf);

    
    EXEC SQL DECLARE emp_cursor CURSOR FOR 
      SELECT ename, sal + NVL(comm,0) AS sal_comm
        FROM emp 
        WHERE deptno = :dept_number
        ORDER BY sal_comm DESC;
    EXEC SQL OPEN emp_cursor; 
    EXEC SQL WHENEVER NOT FOUND DO sql_error("End of data");
    
    for (;;) 
    { 
        EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; 
        printf("%.10s\n", emp_name);
        if (salary < 2500) 
            EXEC SQL INSERT INTO pay1 VALUES (:emp_name, :salary); 
        else 
            EXEC SQL INSERT INTO pay2 VALUES (:emp_name, :salary);    
    } 
} 

void 
sql_error(errmsg)
char *errmsg;
{ 
    char buf[6];

    strcpy(buf, SQLSTATE);
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL COMMIT WORK RELEASE; 
    
    if (strncmp(errmsg, "Oracle error", 12) == 0)
        printf("\n%s, sqlstate is %s\n\n", errmsg, buf);
    else
        printf("\n%s\n\n", errmsg);

    printf("Last SQL statement: %.*s\n", 
    oraca.orastxt.orastxtl, oraca.orastxt.orastxtc); 
    printf("\nAt or near line number %d\n", oraca.oraslnr); 
    printf
("\nCursor Cache Statistics\n------------------------\n"); 
    printf
("Maximum value of MAXOPENCURSORS:    %d\n", oraca.orahoc); 
    printf
("Maximum open cursors required:      %d\n", oraca.oramoc); 
    printf
("Current number of open cursors:     %d\n", oraca.oracoc); 
    printf
("Number of cache reassignments:      %d\n", oraca.oranor); 
    printf
("Number of SQL statement parses:     %d\n", oraca.oranpr); 
    printf
("Number of SQL statement executions: %d\n", oraca.oranex); 
    exit(1); 
} 
PKKrޚ&R RPK+AOEBPS/pc_06sql.htm Embedded SQL

6 Embedded SQL

This chapter helps you to understand and apply the basic techniques of embedded SQL programming. This chapter contains the following topics:

Host Variables

Oracle uses host variables to pass data and status information to your program; your program uses host variables to pass data to Oracle.

Output versus Input Host Variables

Depending on how they are used, host variables are called output or input host variables.

Host variables in the INTO clause of a SELECT or FETCH statement are called output host variables because they hold column values output by Oracle. Oracle assigns the column values to corresponding output host variables in the INTO clause.

All other host variables in a SQL statement are called input host variables because your program inputs their values to Oracle. For example, you use input host variables in the VALUES clause of an INSERT statement and in the SET clause of an UPDATE statement. They are also used in the WHERE, HAVING, and FOR clauses. Input host variables can appear in a SQL statement wherever a value or expression is allowed.


Attention:

In an ORDER BY clause, you can use a host variable, but it is treated as a constant or literal, and hence the contents of the host variable have no effect. For example, the SQL statement
EXEC SQL SELECT ename, empno INTO :name,:number FROM emp ORDER BY :ord;

appears to contain an input host variable :ord. However, the host variable in this case is treated as a constant, and regardless of the value of :ord, no ordering is done.


You cannot use input host variables to supply SQL keywords or the names of database objects. Thus, you cannot use input host variables in data definition statements such as ALTER, CREATE, and DROP. In the following example, the DROP TABLE statement is invalid:

char table_name[30]; 
 
printf("Table name? "); 
gets(table_name); 
 
EXEC SQL DROP TABLE :table_name;  -- host variable not allowed 

If you need to change database object names at runtime, use dynamic SQL. See also Chapter 13, "Oracle Dynamic SQL".

Before Oracle executes a SQL statement containing input host variables, your program must assign values to them. An example follows:

int     emp_number; 
char    temp[20];
VARCHAR emp_name[20]; 

/* get values for input host variables */ 
printf("Employee number? "); 
gets(temp);
emp_number = atoi(temp);
printf("Employee name? "); 
gets(emp_name.arr); 
emp_name.len = strlen(emp_name.arr); 
 
EXEC SQL INSERT INTO EMP (EMPNO, ENAME) 
    VALUES (:emp_number, :emp_name); 

Notice that the input host variables in the VALUES clause of the INSERT statement are prefixed with colons.

Indicator Variables

You can associate any host variable with an optional indicator variable. Each time the host variable is used in a SQL statement, a result code is stored in its associated indicator variable. Thus, indicator variables let you monitor host variables.


Note:

You cannot use multiple indicator variables with a single host variable within PL/SQL blocks. Doing so results in a "not all variables bound" error.

You use indicator variables in the VALUES or SET clauses to assign NULLs to input host variables. Use indicator variables in the INTO clause to detect NULLs or truncated values in output host variables.

On Input

The values your program can assign to an indicator variable have the following meanings:

VariableDescription
-1Oracle will assign a NULL to the column, ignoring the value of the host variable.
>=0Oracle will assign the value of the host variable to the column.

On Output

The values Oracle can assign to an indicator variable have the following meanings:

VariableDescription
-1The column value is NULL, so the value of the host variable is indeterminate.
0Oracle assigned an intact column value to the host variable.
>0Oracle assigned a truncated column value to the host variable. The integer returned by the indicator variable is the original length of the column value, and SQLCODE in SQLCA is set to zero.
-2Oracle assigned a truncated column variable to the host variable, but the original column value could not be determined (a LONG column, for example).

Remember, an indicator variable must be defined as a 2-byte integer and, in SQL statements, must be prefixed with a colon and must immediately follow its host variable.

Insert NULLs

You can use indicator variables to INSERT NULLs. Before the INSERT, for each column you want to be NULL, set the appropriate indicator variable to -1, as shown in the following example:

set ind_comm = -1; 
 
EXEC SQL INSERT INTO emp (empno, comm) 
     VALUES (:emp_number, :commission:ind_comm); 

The indicator variable ind_comm specifies that a NULL is to be stored in the COMM column.

You can hard code the NULL instead, as follows:

EXEC SQL INSERT INTO emp (empno, comm) 
     VALUES (:emp_number, NULL); 

While this is less flexible, it might be more readable. Typically, you insert NULLs conditionally, as the next example shows:

printf("Enter employee number or 0 if not available: "); 
scanf("%d", &emp_number); 
 
if (emp_number == 0) 
    ind_empnum = -1; 
else 
    ind_empnum = 0; 
 
EXEC SQL INSERT INTO emp (empno, sal) 
     VALUES (:emp_number:ind_empnum, :salary); 

Returned NULLs

You can also use indicator variables to manipulate returned NULLs, as the following example shows:

EXEC SQL SELECT ename, sal, comm 
    INTO :emp_name, :salary, :commission:ind_comm 
    FROM emp 
    WHERE empno = :emp_number; 
 if (ind_comm == -1) 
    pay = salary;   /* commission is NULL; ignore it */ 
else 
    pay = salary + commission; 

Fetch NULLs

When DBMS=V7 or DBMS=V8, if you SELECT or FETCH NULLs into a host variable not associated with an indicator variable, Oracle issues the following error message:

ORA-01405: fetched column value is NULL 

See Also:

"DBMS"

Test for NULLs

You can use indicator variables in the WHERE clause to test for NULLs, as the following example shows:

EXEC SQL SELECT ename, sal 
INTO :emp_name, :salary 
FROM emp 
WHERE :commission INDICATOR :ind_comm IS NULL ... 

However, you cannot use a relational operator to compare NULLs with each other or with other values. For example, the following SELECT statement fails if the COMM column contains one or more NULLs:

EXEC SQL SELECT ename, sal 
INTO :emp_name, :salary 
FROM emp 
WHERE comm = :commission; 

The next example shows how to compare values for equality when some of them might be NULLs:

EXEC SQL SELECT ename, sal 
     INTO :emp_name, :salary 
     FROM emp 
     WHERE (comm = :commission) OR ((comm IS NULL) AND 
          (:commission INDICATOR :ind_comm IS NULL)); 

Truncated Values

When DBMS=V7 or V8, if you SELECT or FETCH a truncated column value into a host variable not associated with an indicator variable, a warning is generated instead of an error.

The Basic SQL Statements

Executable SQL statements let you query, manipulate, and control Oracle data and create, define, and maintain Oracle objects such as tables, views, and indexes. This chapter focuses on the statements that query and manipulate data.

When executing a data manipulation statement such as INSERT, UPDATE, or DELETE, your only concern, besides setting the values of any input host variables, is whether the statement succeeds or fails. To find out, you simply check the SQLCA. (Executing any SQL statement sets the SQLCA variables.) You can check in the following two ways:

When executing a SELECT statement (query), however, you must also deal with the rows of data it returns. Queries can be classified as follows:

Queries that return more than one row require explicitly declared cursors or the use of host arrays (host variables declared as arrays).


Note:

Host arrays let you process "batches" of rows.

This chapter assumes the use of scalar host variables.

The following embedded SQL statements let you query and manipulate Oracle data:

Embedded SQL StatementsDescription
SELECTReturns rows from one or more tables.
INSERTAdds new rows to a table.
UPDATEModifies rows in a table.
DELETERemoves unwanted rows from a table.

The following embedded SQL statements let you define and manipulate an explicit cursor:

Embedded SQL StatementsDescription
DECLARENames the cursor and associates it with a query.
OPENExecutes the query and identifies the active set.
FETCHAdvances the cursor and retrieves each row in the active set, one by one.
CLOSEDisables the cursor (the active set becomes undefined).

The following sections, you first learn how to code INSERT, UPDATE, DELETE, and single-row SELECT statements. Then, you progress to multirow SELECT statements.


See Also:


The SELECT Statement

Querying the database is a common SQL operation. To issue a query you use the SELECT statement. In the following example, you query the EMP table:

EXEC SQL SELECT ename, job, sal + 2000 
INTO :emp_name, :job_title, :salary 
FROM emp 
WHERE empno = :emp_number; 

The column names and expressions following the keyword SELECT make up the select list. The select list in our example contains three items. Under the conditions specified in the WHERE clause (and following clauses, if present), Oracle returns column values to the host variables in the INTO clause.

The number of items in the select list should equal the number of host variables in the INTO clause, so there is a place to store every returned value.

In the simplest case, when a query returns one row, its form is that shown in the last example. However, if a query can return more than one row, you must FETCH the rows using a cursor or SELECT them into a host-variable array. Cursors and the FETCH statement are discussed later in this chapter. See also "Host Arrays"for information on array processing.

If a query is written to return only one row but might actually return several rows, the result of the SELECT is indeterminate. Whether this causes an error depends on how you specify the SELECT_ERROR option. The default value, YES, generates an error if more than one row is returned.

Available Clauses

You can use all of the following standard SQL clauses in your

SELECT statements:

  • INTO

  • FROM

  • WHERE

  • CONNECT BY

  • START WITH

  • GROUP BY

  • HAVING

  • ORDER BY

  • FOR UPDATE OF

Except for the INTO clause, the text of embedded SELECT statements can be executed and tested interactively using SQL*Plus. In SQL*Plus, you use substitution variables or constants instead of input host variables.

The INSERT Statement

Use the INSERT statement to add rows to a table or view. In the following example, you add a row to the EMP table:

EXEC SQL INSERT INTO emp (empno, ename, sal, deptno) 
VALUES (:emp_number, :emp_name, :salary, :dept_number); 

Each column you specify in the column list must belong to the table named in the INTO clause. The VALUES clause specifies the row of values to be inserted. The values can be those of constants, host variables, SQL expressions, SQL functions such as USER and SYSDATE, or user-defined PL/SQL functions.

The number of values in the VALUES clause must equal the number of names in the column list. However, you can omit the column list if the VALUES clause contains a value for each column in the table, in the order that they are defined in the table.

Using Subqueries

A subquery is a nested SELECT statement. Subqueries let you conduct multipart searches. They can be used to

  • Supply values for comparison in the WHERE, HAVING, and START WITH clauses of SELECT, UPDATE, and DELETE statements

  • Define the set of rows to be inserted by a CREATE TABLE or INSERT statement

  • Define values for the SET clause of an UPDATE statement

The following example uses a subquery in an INSERT statement to copy rows from one table to another:

EXEC SQL INSERT INTO emp2 (empno, ename, sal, deptno) 
SELECT empno, ename, sal, deptno FROM emp  
WHERE job= :job_title ;

This INSERT statement uses the subquery to obtain intermediate results.

The UPDATE Statement

Use the UPDATE statement to change the values of specified columns in a table or view. In the following example, we update the SAL and COMM columns in the EMP table:

EXEC SQL UPDATE emp 
SET sal = :salary, comm = :commission 
WHERE empno = :emp_number;

Use the optional WHERE clause to specify the conditions under which rows are updated. See also "The WHERE Clause".

The SET clause lists the names of one or more columns for which you must provide values. You can use a subquery to provide the values, as the following example shows:

EXEC SQL UPDATE emp 
SET sal = (SELECT AVG(sal)*1.1 FROM emp WHERE deptno = 20) 
WHERE empno = :emp_number; 

The UPDATE statement has an optional returning clause, like the INSERT and DELETE statements. It is only allowed after the optional WHERE condition.

For more details, see also "UPDATE (Executable Embedded SQL)".

The DELETE Statement

Use the DELETE statement to remove rows from a table or view. In the following example, you delete all employees in a given department from the EMP table:

EXEC SQL DELETE FROM emp 
WHERE deptno = :dept_number ; 

We have used the optional WHERE clause to specify the condition under which rows are deleted.

The returning clause option can be used in DELETE statements also. It is allowed after the optional WHERE condition. In the earlier example, it is good practice to record the field values of each employee that is deleted.

The WHERE Clause

Use the WHERE clause to SELECT, UPDATE, or DELETE only those rows in a table or view that meet your search condition. The WHERE-clause search condition is a Boolean expression, which can include scalar host variables, host arrays (not in SELECT statements), subqueries, and user-defined stored functions.

If you omit the WHERE clause, all rows in the table or view are processed. If you omit the WHERE clause in an UPDATE or DELETE statement, Oracle sets sqlwarn[4] in the SQLCA to 'W' to warn that all rows were processed.

The DML Returning Clause

The INSERT, UPDATE, and DELETE statements can have an optional DML returning clause which returns column value expressions expr, into host variables hv, with host indicator variables iv. The DML returning clause looks like this:

{RETURNING | RETURN} {expr [,expr]}
    INTO {:hv [[INDICATOR]:iv] [, :hv [[INDICATOR]:iv]]}

The number of expressions must equal the number of host variables. This clause eliminates the need for selecting the rows after an INSERT or UPDATE, and before a DELETE when you need to record that information for your application. The returning clause eliminates inefficient network round trips, extra processing, and server memory.

Oracle Dynamic SQL Method 4 does not support the DML returning clause; but ANSI Dynamic SQL Method 4 does. Support for DML statements with a DML returning clause that affects more than a single row is not supported by ANSI DYNAMIC SQL.

Cursors

When a query returns multiple rows, you can explicitly define a cursor to

Or, you can use host arrays.

A cursor identifies the current row in the set of rows returned by the query. This allows your program to process the rows one at a time. The following statements let you define and manipulate a cursor:

First you use the DECLARE CURSOR statement to name the cursor and associate it with a query.

The OPEN statement executes the query and identifies all the rows that meet the query search condition. These rows form a set called the active set of the cursor. After OPENing the cursor, you can use it to retrieve the rows returned by its associated query.

Rows of the active set are retrieved one by one (unless you use host arrays). You use a FETCH statement to retrieve the current row in the active set. You can execute FETCH repeatedly until all rows have been retrieved.

When done FETCHing rows from the active set, you disable the cursor with a CLOSE statement, and the active set becomes undefined.

The following sections show you how to use these cursor control statements in your application program.

The DECLARE CURSOR Statement

You use the DECLARE CURSOR statement to define a cursor by giving it a name and associating it with a query, as the following example shows:

EXEC SQL DECLARE emp_cursor CURSOR FOR 
     SELECT ename, empno, sal 
     FROM emp 
     WHERE deptno = :dept_number; 

The cursor name is an identifier used by the precompiler, not a host or program variable, and should not be defined in the Declare Section. Therefore, cursor names cannot be passed from one precompilation unit to another. Cursor names cannot be hyphenated. They can be any length, but only the first 31 characters are significant. For ANSI compatibility, use cursor names no longer than 18 characters.

The precompiler option CLOSE_ON_COMMIT is provided for use in the command line or in a configuration file. Any cursor not declared with the WITH HOLD clause is closed after a COMMIT or ROLLBACK when CLOSE_ON_COMMIT=YES. See "WITH HOLD Clause in DECLARE CURSOR Statements", and "CLOSE_ON_COMMIT".

If MODE is specified at a higher level than CLOSE_ON_COMMIT, then MODE takes precedence. The defaults are MODE=ORACLE and CLOSE_ON_COMMIT=NO. If you specify MODE=ANSI then any cursors not using the WITH HOLD clause will be closed on COMMIT. The application will run more slowly because cursors are closed and re-opened many times. Setting CLOSE_ON_COMMIT=NO when MODE=ANSI results in performance improvement. To see how macro options such as MODE affect micro options such as CLOSE_ON_COMMIT, see "Precedence of Option Values".

The SELECT statement associated with the cursor cannot include an INTO clause. Rather, the INTO clause and list of output host variables are part of the FETCH statement.

Because it is declarative, the DECLARE CURSOR statement must physically (not just logically) precede all other SQL statements referencing the cursor. That is, forward references to the cursor are not allowed. In the following example, the OPEN statement is misplaced:

... 
EXEC SQL OPEN emp_cursor; 
*    -- MISPLACED OPEN STATEMENT
EXEC SQL DECLARE emp_cursor CURSOR FOR 
SELECT ename, empno, sal 
    FROM emp 
    WHERE ename = :emp_name; 

The cursor control statements (DECLARE, OPEN, FETCH, CLOSE) must all occur within the same precompiled unit. For example, you cannot DECLARE a cursor in file A, then OPEN it in file B.

Your host program can DECLARE as many cursors as it needs. However, in a given file, every DECLARE statement must be unique. That is, you cannot DECLARE two cursors with the same name in one precompilation unit, even across blocks or procedures, because the scope of a cursor is global within a file.

For users of MODE=ANSI or CLOSE_ON_COMMIT=YES, the WITH HOLD clause can be used in a DECLARE section to override the behavior defined by the two options. With these options set, the behavior will be for all cursors to be closed when a COMMIT is issued. This can have performance implications due to the overhead of re-opening the cursor to continue processing. The careful use of WITH HOLD can speed up programs that need to conform to the ANSI standard for precompilers in most respects.

If you will be using many cursors, you might want to specify the MAXOPENCURSORS option.

The OPEN Statement

You use the OPEN statement to execute the query and identify the active set. In the following example, you OPEN a cursor named emp_cursor:

EXEC SQL OPEN emp_cursor;
 

OPEN zeroes the rows-processed count kept by the third element of SQLERRD in the SQLCA. However, none of the rows are visible to the application at this point. That is handled by the FETCH statement.

OPEN positions the cursor just before the first row of the active set. It also zeroes the rows-processed count kept by the third element of SQLERRD in the SQLCA. However, none of the rows is actually retrieved at this point. That will be done by the FETCH statement.

Once you OPEN a cursor, the query's input host variables are not re-examined until you reOPEN the cursor. Thus, the active set does not change. To change the active set, you must reOPEN the cursor.

Generally, you should CLOSE a cursor before reOPENing it. However, if you specify MODE=ORACLE (the default), you need not CLOSE a cursor before reOPENing it. This can increase performance.

The amount of work done by OPEN depends on the values of three precompiler options: HOLD_CURSOR, RELEASE_CURSOR, and MAXOPENCURSORS.

The FETCH Statement

You use the FETCH statement to retrieve rows from the active set and specify the output host variables that will contain the results. Recall that the SELECT statement associated with the cursor cannot include an INTO clause. Rather, the INTO clause and list of output host variables are part of the FETCH statement. In the following example, you FETCH INTO three host variables:

EXEC SQL FETCH emp_cursor 
INTO :emp_name, :emp_number, :salary;
 

The cursor must have been previously DECLAREd and OPENed. The first time you execute FETCH, the cursor moves from before the first row in the active set to the first row. This row becomes the current row. Each subsequent execution of FETCH advances the cursor to the next row in the active set, changing the current row. The cursor can only move forward in the active set. To return to a row that has already been FETCHed, you must reOPEN the cursor, then begin again at the first row of the active set.

If you want to change the active set, you must assign new values to the input host variables in the query associated with the cursor, then reOPEN the cursor. When MODE=ANSI, you must CLOSE the cursor before reOPENing it.

As the next example shows, you can FETCH from the same cursor using different sets of output host variables. However, corresponding host variables in the INTO clause of each FETCH statement must have the same datatype.

EXEC SQL DECLARE emp_cursor CURSOR FOR 
SELECT ename, sal FROM emp WHERE deptno = 20; 
... 
EXEC SQL OPEN emp_cursor; 
 
EXEC SQL WHENEVER NOT FOUND GOTO ... 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor INTO :emp_name1, :salary1; 
    EXEC SQL FETCH emp_cursor INTO :emp_name2, :salary2; 
    EXEC SQL FETCH emp_cursor INTO :emp_name3, :salary3; 
    ... 
} 

If the active set is empty or contains no more rows, FETCH returns the "no data found" error code to sqlcode in the SQLCA, or to the SQLCODE or SQLSTATE status variables. The status of the output host variables is indeterminate. (In a typical program, the WHENEVER NOT FOUND statement detects this error.) To reuse the cursor, you must reOPEN it.

It is an error to FETCH on a cursor under the following conditions:

  • Before OPENing the cursor

  • After a "no data found" condition

  • After CLOSEing it

The CLOSE Statement

When done FETCHing rows from the active set, you CLOSE the cursor to free the resources, such as storage, acquired by OPENing the cursor. When a cursor is closed, parse locks are released. What resources are freed depends on how you specify the HOLD_CURSOR and RELEASE_CURSOR options. In the following example, you CLOSE the cursor named emp_cursor:

EXEC SQL CLOSE emp_cursor; 

You cannot FETCH from a closed cursor because its active set becomes undefined. If necessary, you can reOPEN a cursor (with new values for the input host variables, for example).

When MODE=ORACLE, issuing a COMMIT or ROLLBACK closes cursors referenced in a CURRENT OF clause. Other cursors are unaffected by COMMIT or ROLLBACK and if open, remain open. However, when MODE=ANSI, issuing a COMMIT or ROLLBACK closes all explicit cursors.


See Also:

Chapter 3, "Database Concepts" for more information about COMMIT and ROLLBACK

Scrollable Cursors

A scrollable cursor is a work area where Oracle executes SQL statements and stores information that is processed during execution.

When a cursor is executed, the results of the query are placed into a a set of rows called the result set. The result set can be fetched either sequentially or non-sequentially. Non-sequential result sets are called scrollable cursors.

A scrollable cursor enables users to access the rows of a database result set in a forward, backward, and random manner. This enables the program to fetch any row in the result set. See Oracle Call Interface Programmer's Guide, Release 9.2.0.

Using Scrollable Cursors

The following statements let you define and manipulate a scrollable cursor.

DECLARE SCROLL CURSOR

You can use the DECLARE <cursor name> SCROLL CURSOR statement to name the scrollable cursor and associate it with a query.

OPEN

You can use the OPEN statement in the same way as in the case of a non-scrollable cursor.

FETCH

You can use the FETCH statement to fetch required rows in a random manner. An application can fetch rows up or down, first or last row directly, or fetch any single row in a random manner.

The following options are available with the FETCH statement.

  1. FETCH FIRST

    Fetches the first row from the result set.

  2. FETCH PRIOR

    Fetches the row prior to the current row.

  3. FETCH NEXT

    Fetches the next row from the current position. This is same as the non-scrollable cursor FETCH.

  4. FETCH LAST

    Fetches the last row from the result set.

  5. FETCH CURRENT

    Fetches the current row.

  6. FETCH RELATIVE n

    Fetches the nth row relative to the current row, where n is the offset.

  7. FETCH ABSOLUTE n

    Fetches the nth row, where n is the offset from the start of the result set.

The following example describes how to FETCH the last record from a result set.

EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR
SELECT ename, sal FROM emp WHERE deptno=20;
...
EXEC SQL OPEN emp_cursor;
EXEC SQL FETCH LAST emp_cursor INTO :emp_name, :sal;
EXEC SQL CLOSE emp_cursor;

CLOSE

You can use the CLOSE statement in the same way as in the case of a non-scrollable cursor.


Note:

You cannot use scrollable cursors for REF cursors.

The CLOSE_ON_COMMIT Precompiler Option

The CLOSE_ON_COMMIT micro precompiler option provides the ability to choose whether or not to close all cursors when a COMMIT is executed and the macro option MODE=ANSI. When MODE=ANSI, CLOSE_ON_COMMIT has the default value YES. Explicitly setting CLOSE_ON_COMMIT=NO results in better performance because cursors will not be closed when a COMMIT is executed, removing the need to re-open the cursors and incur extra parsing.


See Also:


The PREFETCH Precompiler Option

The precompiler option PREFETCH allows for more efficient queries by pre-fetching a given number of rows. This decreases the number of server round trips needed and reduces overall memory usage. The number of rows set by the PREFETCH option value is used for all queries involving explicit cursors, subject to the standard precedence rules. When used inline, the PREFETCH option must precede any of these cursor statements:

  • EXEC SQL OPEN cursor

  • EXEC SQL OPEN cursor USING host_var_list

  • EXEC SQL OPEN cursor USING DESCRIPTOR desc_name

When an OPEN is executed, the value of PREFETCH gives the number of rows to be pre-fetched when the query is executed. You can set the value from 0 (no pre-fetching) to 65535. The default value is 1.


Note:

The default value of the PREFETCH option is 1 - return a single row for each round-trip. If you choose not to use the PREFETCH option, using the command line, you must explicitly disable it by setting the PREFETCH option to 0.

PREFETCH is automatically disabled when LONG or LOB columns are being retrieved.



Note:

PREFETCH is used primarily to enhance the performance of single row fetches. PREFETCH has no effect when array fetches are used.


Note:

The PREFETCH option should be used wisely, and on a case-by-case basis. Select an appropriate prefetch value that will optimize performance of a specific FETCH statement. To accomplish this, use the inline prefetch option instead of the command line prefetch option.


Note:

The performance of many large applications can be improved simply by using indicator variables with host variables in FETCH statements.

To enable precompiler applications to obtain the maximum advantage from the use of the PREFETCH option on single row fetches, it is strongly recommended that you use indicator variables.


Optimizer Hints

The Pro*C/C++ Precompiler supports optimizer hints in SQL statements. An optimizer hint is a suggestion to the Oracle SQL optimizer that can override the optimization approach that would normally be taken. You can use hints to specify the

Hints allow you to choose between rule-based and cost-based optimization. With cost-based optimization, you can use further hints to maximize throughput or response time.

Issuing Hints

You can issue an optimizer hint inside a C or C++ style comment, immediately after a SELECT, DELETE, or UPDATE command. You indicate that the comment contains one or more hints by following the comment opener with a plus sign, leaving no space between the opener and the '+'. For example, the following statement uses the ALL_ROWS hint to let the cost-based approach optimize the statement for the goal of best throughput:

EXEC SQL SELECT /*+ ALL_ROWS (cost-based) */ empno, ename, sal, job 
    INTO :emp_rec FROM emp 
    WHERE deptno = :dept_number; 

As shown in this statement, the comment can contain optimizer hints as well as other comments.

For more information about the cost-based optimizer, and optimizer hints, see Oracle Database Advanced Application Developer's Guide.

Fix Execution Plan

In application development environments where modules are developed in one environment, and then integrated and deployed into another, the performance of the applications are affected. At times, the performance of the precompiler applications are affected by changes in the database environment. These may include changes in the optimizer statistics, changes to the optimizer settings, or changes to parameters affecting the sizes of memory structures.

To fix execution plans for SQL's used in Pro*C/C++ in the development environment, you need to use the outline feature of Oracle at the time of precompiling. An outline is implemented as a set of optimizer hints that are associated with the SQL statement. If you enable the use of the outline for the statement, Oracle automatically considers the stored hints and tries to generate an execution plan in accordance with those hints. In this way, you can ensure that the performance is not affected when the modules are integrated or deployed into different environments.

You can use the following SQL statements to create outlines in Pro*C/C++:

If the outline option is set, then the precompiler generates two files, a SQL file and a LOG file at the end of successful precompilation. Command line options outline and outlnprefix control the generation of the outlines.

Each generated outline name is unique. Because the file names used in the application are unique, this information is used in generating the outline name. In addition, the category name is also prefixed.


Caution:

Oracle allows only 30 bytes for the outline name. If you exceed the limit, the precompiler will flag an error. You can restrict the length of the outline name by using the outlnprefix option.

Example 6-1 Generating a SQL File Containing Outlines

You need to precompile the following program by using the outline option to generate SQL files containing the outlines for all the outline-supported SQL statements in this program.

/* 
 * outlndemo.pc 
 *
 * Outlines will be created for the following SQL operations,
 * 1. CREATE ... SELECT
 * 2. INSERT ... SELECT
 * 3. UPDATE
 * 4. DELETE
 * 5. SELECT
 */
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <sqlca.h>
 
/* Error handling function. */
void sql_error(char *msg)
{
  exec sql whenever sqlerror continue;
 
  printf("\n%s\n", msg);
  printf("%.70s\n", sqlca.sqlerrm.sqlerrmc); 
  exec sql rollback release;
 
  exit(EXIT_FAILURE);
}
 
int main()
{
  varchar ename[10];
  varchar job[9];
  float sal, comm;
 
  exec sql begin declare section;
    char *uid = "scott/tiger";
  exec sql end declare section;
 
  exec sql whenever sqlerror do sql_error("ORACLE error--\n");
  exec sql connect :uid;
 
  exec sql insert into bonus 
           select ename, job, sal, comm from emp where job like 'SALESMAN';
 
  exec sql update bonus set sal = sal * 1.1 where sal < 1500;
 
  exec sql declare c1 cursor for
           select ename, job, sal, comm from bonus order by sal;
  exec sql open c1;
  printf ("Contents of updated BONUS table\n\n");
  printf ("ENAME       JOB        SALARY   COMMISSION\n\n");
  exec sql whenever not found do break;
  while (1)
  {
    exec sql fetch c1 into :ename, :job, :sal, :comm;
    ename.arr[ename.len]='\0';
    job.arr[job.len]='\0';
    printf ("%-9s %-9s   %8.2f    %8.2f\n", ename.arr,
            job.arr, sal, comm);
  }
  exec sql close c1;
  exec sql whenever not found do sql_error("ORACLE error--\n");
 
  exec sql delete from bonus;
 
  exec sql create table outlndemo_tab as
           select empno, ename, sal from emp where deptno = 10;
 
  /* Outline will not be created for this DDL statement */
  exec sql drop table outlndemo_tab;
 
  exec sql rollback work release;
  exit(EXIT_SUCCESS);
}

SQL File

The generated file name has the following format:

<filename>_<filetype>.sql

In Pro*C, for the file "abc.pc", the generated SQL file will be abc_pc.sql.

Generated file format

If the outlnprefix option is not used, then the format of the unique identifier used as outline name and comment is:

<category_name>_<filename>_<filetype>_<sequence no.>

If the outlnprefix option is used (outlnprefix=<prefix_name>), then the format of the unique identifier used as outline name and comment is:

<prefix_name>_<sequence no.>

If outline=yes, which is the default category, then <category_name> will be DEFAULT and outline name will be:

DEFAULT_<filename>_<filetype>_<sequence no.>

or

<prefix_name>_<sequence no.>

The allowed range for <sequence no.> is 0000 to 9999.

SQL in the generated precompiled file will have the comment appended to it as it appears in the outline for that SQL.

Examples

Consider the following examples.

Example 1

If abc.pc has the statements

EXEC SQL select * from emp where empno=:var;
EXEC SQL select * from dept;

and if outline=mycat1 and outlnprefix is not used, then:

Contents of abc_pc.sql

create or replace outline mycat1_abc_pc_0000 for category mycat1 on select * from emp where empno=:b1 /* mycat1_abc_pc_0000 */;

create or replace outline mycat1_abc_pc_0001 for category mycat1 on select * from dept /* mycat1_abc_pc_0001 */;

Contents of abc.c

sqlstm.stmt = select * from emp where empno=:b1 /* mycat1_abc_pc_0000 */;

sqlstm.stmt = select * from dept /* mycat1_abc_pc_0001 */;

Example 2

If abc.pc has the statements

EXEC SQL select * from emp where empno=:var;
EXEC SQL select * from dept;

and if outline=mycat1 and outlnprefix=myprefix, then:

Contents of abc_pc.sql

create or replace outline myprefix_0000 for category mycat1 on select * from emp where empno=:b1 /* myprefix_0000 */;

create or replace outline myprefix_0001 for category mycat1 on select * from dept /* myprefix_0001 */;

Contents of abc.c

sqlstm.stmt = select * from emp where empno=:b1 /* myprefix_0000 */;

sqlstm.stmt = select * from dept /* myprefix_0001 */;

Example 3

If abc.pc has the statements

EXEC SQL select * from emp where empno=:var;
EXEC SQL select * from dept;

and if outline=yes and outlnprefix=myprefix, then:

Contents of abc_pc.sql

create or replace outline myprefix_0000 on select * from emp where empno=:b1 /* myprefix_0000 */;

create or replace outline myprefix_0001 on select * from dept /* myprefix_0001 */;

Contents of abc.c

sqlstm.stmt = "select * from emp where empno=:b1 /* myprefix_0000 */;

sqlstm.stmt = "select * from dept /* myprefix_0001 */";

LOG File

The generated file name has the following format:

<filename>_<filetype>.log

In Pro*C, for the file "abc.pc", the generated LOG file will be abc_pc.log.

Consider the following example.

Example 1

If abc.pc has the statements

EXEC SQL select * from emp;

Contents of abc_pc.log

CATEGORY <Category_name> 
     Source SQL_0
        SELECT * FROM emp
     OUTLINE NAME
        abc_pc_0000
     OUTLINE SQL_0
        Select * from emp /* abc_pc_0000 */

The CURRENT OF Clause

You use the CURRENT OF cursor_name clause in a DELETE or UPDATE statement to refer to the latest row FETCHed from the named cursor. The cursor must be open and positioned on a row. If no FETCH has been done or if the cursor is not open, the CURRENT OF clause results in an error and processes no rows.

The FOR UPDATE OF clause is optional when you DECLARE a cursor that is referenced in the CURRENT OF clause of an UPDATE or DELETE statement. The CURRENT OF clause signals the precompiler to add a FOR UPDATE clause if necessary.

In the following example, you use the CURRENT OF clause to refer to the latest row FETCHed from a cursor named emp_cursor:

EXEC SQL DECLARE emp_cursor CURSOR FOR 
     SELECT ename, sal FROM emp WHERE job = 'CLERK' 
     FOR UPDATE OF sal; 
... 
EXEC SQL OPEN emp_cursor; 
EXEC SQL WHENEVER NOT FOUND GOTO ... 
for (;;) {
    EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; 
    ... 
    EXEC SQL UPDATE emp SET sal = :new_salary 
         WHERE CURRENT OF emp_cursor; 
} 

See Also:

"Using FOR UPDATE OF" for more information

Restrictions

You cannot use CURRENT OF clause on an index-organized table.

Explicit FOR UPDATE OF clauses or implicit FOR UPDATE clauses acquire exclusive row locks. All rows are locked at the OPEN, not as they are FETCHed, and are released when you COMMIT or ROLLBACK. Therefore, you cannot FETCH from a FOR UPDATE cursor after a COMMIT. If you try to do this, Oracle returns a 1002 error code.

Also, you cannot use host arrays with the CURRENT OF clause. For an alternative, see also "Mimicking CURRENT OF".

Furthermore, you cannot reference multiple tables in an associated FOR UPDATE OF clause, which means that you cannot do joins with the CURRENT OF clause.

Finally, you cannot use dynamic SQL with the CURRENT OF clause.

The Cursor Statements

The following example shows the typical sequence of cursor control statements in an application program:

   ...
/* define a cursor */ 
   EXEC SQL DECLARE emp_cursor CURSOR FOR 
        SELECT ename, job 
        FROM emp 
        WHERE empno = :emp_number 
        FOR UPDATE OF job; 
 
/* open the cursor and identify the active set */ 
   EXEC SQL OPEN emp_cursor; 
 
/* break if the last row was already fetched */ 
   EXEC SQL WHENEVER NOT FOUND DO break; 
 
/* fetch and process data in a loop */ 
   for (;;) 
   { 
      EXEC SQL FETCH emp_cursor INTO :emp_name, :job_title; 
 
/* optional host-language statements that operate on 
   the FETCHed data */ 
 
      EXEC SQL UPDATE emp 
           SET job = :new_job_title 
           WHERE CURRENT OF emp_cursor; 
   } 
... 
/* disable the cursor */ 
   EXEC SQL CLOSE emp_cursor; 
   EXEC SQL COMMIT WORK RELEASE; 
   ... 

A Complete Example Using Non-Scrollable Cursor

The following complete program illustrates the use of a cursor and the FETCH statement. The program prompts for a department number, then displays the names of all employees in that department.

All FETCHes except the final one return a row and, if no errors were detected during the FETCH, a success status code. The final FETCH fails and returns the "no data found" Oracle error code to sqlca.sqlcode. The cumulative number of rows actually FETCHed is found in sqlerrd[2] in the SQLCA.

#include <stdio.h> 

/* declare host variables */ 
char userid[12] = "SCOTT/TIGER";
char emp_name[10];
int  emp_number;
int  dept_number; 
char temp[32];
void sql_error();
 
/* include the SQL Communications Area */ 
#include <sqlca.h> 
 
main() 
{  emp_number = 7499;
/* handle errors */ 
   EXEC SQL WHENEVER SQLERROR do sql_error("Oracle error");
 
/* connect to Oracle */ 
   EXEC SQL CONNECT :userid; 
   printf("Connected.\n"); 
 
/* declare a cursor */ 
   EXEC SQL DECLARE emp_cursor CURSOR FOR 
   SELECT ename 
      FROM emp 
      WHERE deptno = :dept_number; 
 
   printf("Department number? "); 
   gets(temp);
   dept_number = atoi(temp); 
 
/* open the cursor and identify the active set */ 
   EXEC SQL OPEN emp_cursor; 

   printf("Employee Name\n"); 
   printf("-------------\n");
/* fetch and process data in a loop
   exit when no more data */
   EXEC SQL WHENEVER NOT FOUND DO break;
   while (1) 
   { 
      EXEC SQL FETCH emp_cursor INTO :emp_name; 
      printf("%s\n", emp_name); 
   } 
   EXEC SQL CLOSE emp_cursor; 
   EXEC SQL COMMIT WORK RELEASE; 
   exit(0); 
}

void 
sql_error(msg)
char *msg;
{
   char buf[500];
   int buflen, msglen;

   EXEC SQL WHENEVER SQLERROR CONTINUE; 
   EXEC SQL ROLLBACK WORK RELEASE; 
   buflen = sizeof (buf);
   sqlglm(buf, &buflen, &msglen);
   printf("%s\n", msg); 
   printf("%*.s\n", msglen, buf); 
   exit(1); 
}

A Complete Example Using Scrollable Cursor

The following program illustrates the use of scrollable cursor and the various options used by the FETCH statement.

#include <stdio.h> 

/* declare host variables */ 
char userid[12]="SCOTT/TIGER"; 
char emp_name[10]; 
void sql_error(); 

/*  include the SQL Communications Area */ 
#include<sqlca.h> 

main() 
{ 
/* handle errors */ 
    EXEC SQL WHENEVER SQLERROR do sql_error("Oracle error"); 

/* connect to Oracle */ 
    EXEC SQL CONNECT :userid; 
    printf("Connected.\n"); 

/* declare a scrollable cursor */ 
    EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR 
    SELECT ename FROM emp; 

/* open the cursor and identify the active set */ 
     EXEC SQL OPEN emp_cursor; 

 /* Fetch the last row */ 
     EXEC SQL FETCH LAST emp_cursor INTO :emp_name; 

 /* Fetch row number 5 */ 
      EXEC SQL FETCH ABSOLUTE 5 emp_cursor INTO :emp_name; 

/*  Fetch row number 10 */ 
       EXEC SQL FETCH RELATIVE 5 emp_cursor INTO :emp_name; 

/*  Fetch row number 7 */ 
       EXEC SQl FETCH RELATIVE -3 emp_cursor INTO :emp_name; 

/*  Fetch the first row */ 
       EXEC SQL FETCH FIRST emp_cursor INTO :emp_name; 

/*  Fetch row number 2*/ 
       EXEC SQL FETCH my_cursor INTO :emp_name; 

/*  Fetch row number 3 */ 
       EXEC SQL FETCH NEXT my_cursor INTO :emp_name; 

/*  Fetch row number 3 */ 
       EXEC SQL FETCH CURRENT my_cursor INTO :emp_name; 

/*  Fetch row number 2 */ 
        EXEC SQL FETCH PRIOR my_cursor INTO :emp_name; 
} 

void 
sql_error(msg) 
char *msg; 
{ 
     char buf[500]; 
     int buflen , msglen; 

     EXEC SQL WHENEVER SQLERROR  CONTINUE; 
     EXEC SQL ROLLBACK TRANSACTION; 
     buflen = sizeof (buf); 
     sqlglm(buf, &buflen, &mesglen); 
     printf("%s\n",msg); 
     printf("%*.s\n",msglen,buf); 
     exit(1); 
}

Positioned Update

The following skeletal example demonstrates positioned update using the universal ROWID. See also "Universal ROWIDs":

#include <oci.h>
...
OCIRowid *urowid;
...
EXEC SQL ALLOCATE :urowid;
EXEC SQL DECLARE cur CURSOR FOR
    SELECT rowid, ... FROM my_table FOR UPDATE OF ...;
EXEC SQL OPEN cur;
EXEC SQL FETCH cur INTO :urowid, ...;
/* Process data */
...
EXEC SQL UPDATE my_table SET ... WHERE CURRENT OF cur;
EXEC SQL CLOSE cur;
EXEC SQL FREE :urowid;
...

PKSPK+AOEBPS/partpage1.htm4 Introduction and Concepts

Part I

Introduction and Concepts

Part I contains the following chapters:

PKp94PK+AOEBPS/pc_12cpl.htmya C++ Applications

12 C++ Applications

This chapter describes how you can use the Pro*C/C++ Precompiler to precompile your C++ embedded SQL application, and how Pro*C/C++ generates C++ compatible code. This chapter contains the following topics:

Understanding C++ Support

To understand how Pro*C/C++ supports C++, you must understand the basic functional capabilities of Pro*C/C++. In particular, you must be aware of how Pro*C/C++ differs from Pro*C Version 1.

The basic capabilities of Pro*C/C++ are:

To support its C preprocessor capabilities and to enable host variables to be declared outside a special Declare Section, Pro*C/C++ incorporates a complete C parser. The Pro*C/C++ parser is a C parser; it cannot parse C++ code.

This means that for C++ support, you must be able to disable the C parser, or at least partially disable it. To disable the C parser, the Pro*C/C++ Precompiler includes command-line options to give you control over the extent of C parsing that Pro*C/C++ performs on your source code.

No Special Macro Processing

Using C++ with Pro*C/C++ does not require any special preprocessing or special macro processors that are external to Pro*C/C++. There is no need to run a macro processor on the output of the precompiler to achieve C++ compatibility.

If you are a user of a release of Pro*C/C++ Precompiler before this one, and you did use macro processors on the precompiler output, you should be able to precompile your C++ applications using Pro*C/C++ with no changes to your code.

Precompiling for C++

To control precompilation so that it accommodates C++, there are four considerations:

Code Generation

You must be able to specify what kind of code, C compatible code or C++ compatible code, the precompiler generates. Pro*C/C++ by default generates C code. C++ is not a perfect superset of C. Some changes are required in generated code so that it can be compiled by a C++ compiler.

For example, in addition to emitting your application code, the precompiler interposes calls to its runtime library, SQLLIB. The functions in SQLLIB are C functions. There is no special C++ version of SQLLIB. For this reason, if you want to compile the generated code using a C++ compiler, Pro*C/C++ must declare the functions called in SQLLIB as C functions.

For C output, the precompiler would generate a prototype such as

void sqlora(unsigned long *, void *);

But for C++ compatible code, the precompiler must generate

extern "C" {
void sqlora(unsigned long *, void *);
};

You control the kind of code Pro*C/C++ generates using the precompiler option CODE. There are three values for this option: CPP, KR_C, and ANSI_C. The differences between these options can be illustrated by considering how the declaration of the SQLLIB function sqlora differs among the three values for the CODE option:

void sqlora( /*_ unsigned long *, void * _*/);  /* K&R C */

void sqlora(unsigned long *, void *);           /* ANSI C */

extern "C" {                                    /* CPP */
void sqlora(unsigned long *, void *);
};

When you specify CODE=CPP, the precompiler

  • Generates C++ compilable code.

  • Gives the output file a platform-specific file extension (suffix), such as ".C" or ".cc", rather than the standard ".c" extension. (You can override this by using the CPP_SUFFIX option.)

  • Causes the value of the PARSE option to default to PARTIAL. You can also specify PARSE=NONE. If you specify PARSE=FULL, an error is issued at precompile time.

  • Allows the use of the C++ style // Comments in your code. This style of Commenting is also permitted inside SQL statements and PL/SQL blocks when CODE=CPP.

  • Pro*C/C++ recognizes SQL optimizer hints that begin with //+.

  • Requires that header files generated by OTT (Object Type Translator) must be included inside a declare section.


    See Also:

    "CODE" for information about the KR_C and ANSI_C values for the CODE option.

Parsing Code

You must be able to control the effect of the Pro*C/C++ C parser on your code. You do this by using the PARSE precompiler option, which controls how the precompiler's C parser treats your code.

The values and effects of the PARSE option are:

Table 12-1 Values and Effects of the PARSE Option

ValuesEffects

PARSE=NONE

The value NONE has the following effects:

  • C preprocessor directives are understood only inside a declare section.

  • You must declare all host variables inside a Declare Section.

  • Precompiler release 1.x behavior

PARSE=PARTIAL

The value PARTIAL has the following effects:

  • All preprocessor directives are understood

  • You must declare all host variables inside a Declare Section

This option value is the default if CODE=CPP

PARSE=FULL

The value FULL has the following effects:

  • The precompiler C parser runs on your code.

  • All Preprocessor directives are understood.

  • You can declare host variables at any place that they can be declared legally in C.


This option value is the default if the value of the CODE option is anything other than CPP. It is an error to specify PARSE=FULL when CODE=CPP.

To generate C++ compatible code, the PARSE option must be either NONE or PARTIAL. If PARSE=FULL, the C parser runs, and it does not understand C++ constructs in your code, such as classes.

Output Filename Extension

Most C compilers expect a default extension of ".c" for their input files. Different C++ compilers, however, can expect different filename extensions. The CPP_SUFFIX option provides the ability to specify the filename extension that the precompiler generates. The value of this option is a string, without the quotes or the period. For example, CPP_SUFFIX=cc, or CPP_SUFFIX=C.

System Header Files

Pro*C/C++ searches for standard system header files, such as stdio.h, in standard locations that are platform specific. Pro*C/C++ does not search for header files with extensions such as hpp or h++. For example, on almost all UNIX systems, the file stdio.h has the full path name /usr/include/stdio.h.

But a C++ compiler has its own version of stdio.h that is not in the standard system location. When you are precompiling for C++, you must use the SYS_INCLUDE precompiler option to specify the directory paths that Pro*C/C++ searches to look for system header files. For example:

SYS_INCLUDE=(/usr/lang/SC2.0.1/include,/usr/lang/SC2.1.1/include)

Use the INCLUDE precompiler option to specify the location of non-system header files. The directories specified by the SYS_INCLUDE option are searched before directories specified by the INCLUDE option. See also: "INCLUDE".

If PARSE=NONE, the values specified in SYS_INCLUDE and INCLUDE for system files are not relevant, since there is no need for Pro*C/C++ to include system header files. (You can, of course, still include Pro*C/C++-specific headers, such sqlca.h, using the EXEC SQL INCLUDE statement.)

Example Programs

This section includes three example Pro*C/C++ programs that include C++ constructs. Each of these programs is available on-line, in your demo directory.

cppdemo1.pc

/*  cppdemo1.pc
 *
 *  Prompts the user for an employee number, then queries the 
 *  emp table for the employee's name, salary and commission.
 *  Uses indicator variables (in an indicator struct) to 
 *  determine if the commission is NULL.
 */

#include <iostream.h>
#include <stdio.h>
#include <string.h>

// Parse=partial by default when code=cpp,
// so preprocessor directives are recognized and parsed fully.
#define     UNAME_LEN      20
#define     PWD_LEN        40

// Declare section is required when CODE=CPP or
// PARSE={PARTIAL|NONE} or both.
EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[UNAME_LEN];  // VARCHAR is an ORACLE pseudotype
  varchar password[PWD_LEN];    // can be in lower case also

  // Define a host structure for the output values
  // of a SELECT statement
  struct empdat {
      VARCHAR   emp_name[UNAME_LEN];
      float     salary;
      float     commission;
  } emprec;

  // Define an indicator struct to correspond to the
  // host output struct
  struct empind {
      short     emp_name_ind;
      short     sal_ind;
      short     comm_ind;
  } emprec_ind;


  // Input host variables
  int   emp_number;
  int   total_queried;
EXEC SQL END DECLARE SECTION;

// Define a C++ class object to match the desired
// struct from the preceding declare section.
class emp {
  char  ename[UNAME_LEN];
  float salary;
  float commission;
public:
  // Define a constructor for this C++ object that
  // takes ordinary C objects.
  emp(empdat&, empind&);
  friend ostream& operator<<(ostream&, emp&);
};

emp::emp(empdat& dat, empind& ind)
{
  strncpy(ename, (char *)dat.emp_name.arr, dat.emp_name.len);
  ename[dat.emp_name.len] = '\0';
  this->salary = dat.salary;
  this->commission = (ind.comm_ind < 0) ? 0 : dat.commission;
}

ostream& operator<<(ostream& s, emp& e)
{
  return s << e.ename << " earns " << e.salary << 
              " plus " << e.commission << " commission." 
           << endl << endl;
}

// Include the SQL Communications Area
// You can use #include or EXEC SQL INCLUDE
#include <sqlca.h>

// Declare error handling function
void sql_error(char *msg);

main()
{
  char temp_char[32];

  // Register sql_error() as the error handler
  EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error:");

  // Connect to ORACLE.  Program calls sql_error()
  // if an error occurs
  // when connecting to the default database.
  // Note the (char *) cast when
  // copying into the VARCHAR array buffer.
  username.len = strlen(strcpy((char *)username.arr, "SCOTT"));
  password.len = strlen(strcpy((char *)password.arr, "TIGER"));
  
  EXEC SQL CONNECT :username IDENTIFIED BY :password;

  // Here again, note the (char *) cast when using VARCHARs
  cout << "\nConnected to ORACLE as user: "
       << (char *)username.arr << endl << endl;

  // Loop, selecting individual employee's results
  total_queried = 0;
  while (1)
  {
      emp_number = 0;
      printf("Enter employee number (0 to quit): ");
      gets(temp_char);
      emp_number = atoi(temp_char);
      if (emp_number == 0)
        break;

      // Branch to the notfound label when the 
      // 1403 ("No data found") condition occurs
      EXEC SQL WHENEVER NOT FOUND GOTO notfound;

      EXEC SQL SELECT ename, sal, comm
         INTO :emprec INDICATOR :emprec_ind // You can also use 
                                            // C++ style
         FROM EMP                  // Comments in SQL statemtents.
         WHERE EMPNO = :emp_number;

      {
        // Basic idea is to pass C objects to
        // C++ constructors thus
        // creating equivalent C++ objects used in the
        // usual C++ way
        emp e(emprec, emprec_ind);
        cout << e;
      }

      total_queried++;
      continue;
notfound:
      cout << "Not a valid employee number - try again." 
           << endl << endl;
  } // end while(1)

  cout << endl << "Total rows returned was " 
       << total_queried << endl;
  cout << "Have a nice day!" << endl << endl;

  // Disconnect from ORACLE
  EXEC SQL COMMIT WORK RELEASE;
  exit(0);
}


void sql_error(char *msg)
{
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    cout << endl << msg << endl;
    cout << sqlca.sqlerrm.sqlerrmc << endl;
    EXEC SQL ROLLBACK RELEASE;
    exit(1);
}

cppdemo2.pc

The next application is a simple modular example. First, execute the following SQL script, cppdemo2.sql, in SQL*Plus:

Rem  This is the SQL script that accompanies the cppdemo2 C++ Demo
Rem  Program.  Run this prior to Precompiling the empclass.pc file.
/
CONNECT SCOTT/TIGER
/
CREATE OR REPLACE VIEW emp_view AS SELECT ename, empno FROM EMP
/
CREATE OR REPLACE PACKAGE emp_package AS
  TYPE emp_cursor_type IS REF CURSOR RETURN emp_view%ROWTYPE;
  PROCEDURE open_cursor(curs IN OUT emp_cursor_type);
END emp_package;
/
CREATE OR REPLACE PACKAGE BODY emp_package AS
  PROCEDURE open_cursor(curs IN OUT emp_cursor_type) IS
  BEGIN
    OPEN curs FOR SELECT ename, empno FROM emp_view ORDER BY ename ASC;
  END;
END emp_package;
/
EXIT
/

The header file empclass.h defines the class emp:

// This class definition may be included in a Pro*C/C++ application
// program using the EXEC SQL INCLUDE directive only.  Because it
// contains EXEC SQL syntax, it may not be included using a #include
// directive.  Any program that includes this header must be
// precompiled with the CODE=CPP option.  This emp class definition
// is used when building the cppdemo2 C++ Demo Program.

class emp
{
  public:
    emp();   // Constructor: ALLOCATE Cursor Variable
    ~emp();  // Desctructor: FREE Cursor Variable

    void open();              // Open Cursor
    void fetch() throw (int); // Fetch (throw NOT FOUND condition)
    void close();             // Close Cursor

    void emp_error();         // Error Handler

    EXEC SQL BEGIN DECLARE SECTION;
      // When included using EXEC SQL INCLUDE, class variables have 
      // global scope and are thus basically treated as ordinary
      // global variables by Pro*C/C++ during precompilation.
      char ename[10];
      int empno;
    EXEC SQL END DECLARE SECTION;

  private:
    EXEC SQL BEGIN DECLARE SECTION;
      // Pro*C/C++ treats this as a simple global variable also.
      SQL_CURSOR emp_cursor;
    EXEC SQL END DECLARE SECTION;
};

The code in empclass.pc contains the emp methods:

#include <stdio.h>
#include <stdlib.h>

// This example uses a single (global) SQLCA that is shared by the
// emp class implementation as well as the main program for this
// application.
#define SQLCA_STORAGE_CLASS extern
#include <sqlca.h>

// Include the emp class specification in the implementation of the
// class body as well as the application program that makes use of it.
EXEC SQL INCLUDE empclass.h;

emp::emp()
{
  // The scope of this WHENEVER statement spans the entire module.
  // Note that the error handler function is really a member function
  // of the emp class.
  EXEC SQL WHENEVER SQLERROR DO emp_error();
  EXEC SQL ALLOCATE :emp_cursor;  // Constructor - ALLOCATE Cursor.
}

emp::~emp()
{
  EXEC SQL FREE :emp_cursor;      // Destructor - FREE Cursor.
}

void emp::open()
{
  EXEC SQL EXECUTE
    BEGIN
      emp_package.open_cursor(:emp_cursor);
    END;
  END-EXEC;
}

void emp::close()
{
  EXEC SQL CLOSE :emp_cursor;
}

void emp::fetch() throw (int)
{
  EXEC SQL FETCH :emp_cursor INTO :ename, :empno;
  if (sqlca.sqlcode == 1403)
    throw sqlca.sqlcode;     // Like a WHENEVER NOT FOUND statement.
}

void emp::emp_error()
{
  printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL ROLLBACK WORK RELEASE;
  exit(1);
}

The main program, cppdemo2.pc, uses the cursor variable:

// Pro*C/C++ sample program demonstrating a simple use of Cursor Variables
// implemented within a C++ class framework.  Build this program as follows
//
//   1. Execute the cppdemo2.sql script within SQL*Plus
//   2. Precompile the empclass.pc program as follows
//      > proc code=cpp sqlcheck=full user=scott/tiger lines=yes empclass
//   3. Precompile the cppdemo2.pc program as follows
//      > proc code=cpp lines=yes cppdemo2
//   4. Compile and Link
//
// Note that you may have to specify various include directories using the
// include option when precompiling.

#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>

static void sql_error()
{
  printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL ROLLBACK WORK RELEASE;
  exit(1);  
}

// Physically include the emp class definition in this module.
EXEC SQL INCLUDE empclass.h;

int main()
{
  EXEC SQL BEGIN DECLARE SECTION;
    char *uid = "scott/tiger";
  EXEC SQL END DECLARE SECTION;

  EXEC SQL WHENEVER SQLERROR DO sql_error();
  EXEC SQL CONNECT :uid;

  emp *e = new emp(); // Invoke Constructor - ALLOCATE Cursor Variable.

  e->open();          // Open the Cursor.

  while (1)
    {
      // Fetch from the Cursor, catching the NOT FOUND condition
      // thrown by the fetch() member function.
      try { e->fetch(); } catch (int code)  
        { if (code == 1403) break; }
      printf("Employee:  %s[%d]\n", e->ename, e->empno);
    }

  e->close();         // Close the Cursor.

  delete e;           // Invoke Destructor - FREE Cursor Variable.

  EXEC SQL ROLLBACK WORK RELEASE;
  return (0);
}

cppdemo3.pc

/*
 * cppdemo3.pc : An example of C++ Inheritance
 *
 * This program finds all salesman and prints their names
 * followed by how much they earn in total (ie; including 
 * any commissions).
 */
 
#include <iostream.h>
#include <stdio.h>
#include <sqlca.h>
#include <string.h>

#define NAMELEN 10

class employee {    // Base class is a simple employee
public:
  char ename[NAMELEN];
  int sal;
  employee(char *, int);
};

employee::employee(char *ename, int sal)
{
  strcpy(this->ename, ename);
  this->sal = sal;
}

// A salesman is a kind of employee
class salesman : public employee
{
  int comm;
public:
  salesman(char *, int, int);
  friend ostream& operator<<(ostream&, salesman&);
};

// Inherits employee attributes
salesman::salesman(char *ename, int sal, int comm)
  : employee(ename, sal), comm(comm) {}  

ostream& operator<<(ostream& s, salesman& m)
{
  return s << m.ename << m.sal + m.comm << endl;  
}

void print(char *ename, int sal, int comm)
{
  salesman man(ename, sal, comm);
  cout << man;
}

main()
{
  EXEC SQL BEGIN DECLARE SECTION;
    char *uid = "scott/tiger";
    char  ename[NAMELEN];
    int   sal, comm;
    short comm_ind;
  EXEC SQL END DECLARE SECTION;

  EXEC SQL WHENEVER SQLERROR GOTO error;

  EXEC SQL CONNECT :uid;
  EXEC SQL DECLARE c CURSOR FOR
    SELECT ename, sal, comm FROM emp WHERE job = 'SALESMAN'
      ORDER BY ename;
  EXEC SQL OPEN c;

  cout << "Name    Salary" << endl << "------  ------" << endl;

  EXEC SQL WHENEVER NOT FOUND DO break;
  while(1)
   {
     EXEC SQL FETCH c INTO :ename, :sal, :comm:comm_ind;
     print(ename, sal, (comm_ind < 0) ? 0 : comm);
   }
  EXEC SQL CLOSE c;
  exit(0);

error:
  cout << endl << sqlca.sqlerrm.sqlerrmc << endl;
  exit(1);
}
PKo#~ayaPK+AOEBPS/preface.htm~ Preface

Preface

This document is a comprehensive user's guide and reference to the Pro*C/C++. It shows you how to use the database language SQL and Oracle's procedural extension, PL/SQL, in conjunction with Pro*C/C++ to manipulate data in an Oracle database. It explores a full range of topics, from underlying concepts to advanced programming techniques, and provides code examples.

This Preface contains these topics:

Intended Audience

The Pro*C/C++ Programmer's Guide is intended for programmers, systems analysts, project managers, and other Oracle users who perform, or are interested in learning about, the following tasks:

To use this document, you need a working knowledge of applications programming in C and C++, and familiarity with the use of the Structured Query Language (SQL).

Documentation Accessibility

Our goal is to make Oracle products, services, and supporting documentation accessible to all users, including users that are disabled. To that end, our documentation includes features that make information available to users of assistive technology. This documentation is available in HTML format, and contains markup to facilitate access by the disabled community. Accessibility standards will continue to evolve over time, and Oracle is actively engaged with other market-leading technology vendors to address technical obstacles so that our documentation can be accessible to all of our customers. For more information, visit the Oracle Accessibility Program Web site at http://www.oracle.com/accessibility/.

Accessibility of Code Examples in Documentation

Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.

Accessibility of Links to External Web Sites in Documentation

This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.

Deaf/Hard of Hearing Access to Oracle Support Services

To reach Oracle Support Services, use a telecommunications relay service (TRS) to call Oracle Support at 1.800.223.1711. An Oracle Support Services engineer will handle technical issues and provide customer support according to the Oracle service request process. Information about TRS is available at http://www.fcc.gov/cgb/consumerfacts/trs.html, and a list of phone numbers is available at http://www.fcc.gov/cgb/dro/trsphonebk.html.

Related Documents

For more information, see these Oracle resources:

Many of the examples in this book use the sample schemas of the seed database, which is installed by default when you install Oracle. Refer to Oracle Database Sample Schemas for information on how these schemas were created and how you can use them yourself.

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PKq*PK+AOEBPS/pc_11thr.htm Multithreaded Applications

11 Multithreaded Applications

If your development platform does not support threads, ignore this chapter. This chapter contains the following topics:

What are Threads?

Multithreaded applications have multiple threads executing in a shared address space. Threads are "lightweight" subprocesses that execute within a process. They share code and data segments, but have their own program counters, machine registers and stack. Global and static variables are common to all threads, and a mutual exclusivity mechanism is often required to manage access to these variables from multiple threads within an application. Mutexes are the synchronization mechanism to insure that data integrity is preserved.

For further discussion of mutexes, see texts on multithreading. For more detailed information about multithreaded applications, see the documentation of your threads functions.

Pro*C/C++ supports development of multithreaded Oracle Server applications (on platforms that support multithreaded applications) using the following:

The chapter's topics discuss how to use the preceding features to develop multithreaded Pro*C/C++ applications:

Runtime Contexts in Pro*C/C++

To loosely couple a thread and a connection, Pro*C/C++ introduces the notion of a runtime context. The runtime context includes the following resources and their current states:

Rather than simply supporting a loose coupling between threads and connections, Pro*C/C++ provides the ability to loosely couple threads with runtime contexts. Pro*C/C++ allows your application to define a handle to a runtime context, and pass that handle from one thread to another.

For example, an interactive application spawns a thread, T1, to execute a query and return the first 10 rows to the application. T1 then terminates. After obtaining the necessary user input, another thread, T2, is spawned (or an existing thread is used) and the runtime context for T1 is passed to T2 so it can fetch the next 10 rows by processing the same cursor. See Figure 11-1, "Loosely Coupling Connections and Threads".

Figure 11-1 Loosely Coupling Connections and Threads

Loosely Coupling Connections and Threads
Description of "Figure 11-1 Loosely Coupling Connections and Threads"

Runtime Context Usage Models

Two possible models for using runtime contexts in multithreaded Pro*C/C++ applications are shown here:

Regardless of the model you use for runtime contexts, you cannot share a runtime context between multiple threads at the same time. If two or more threads attempt to use the same runtime context simultaneously, a runtime error occurs.

Multiple Threads Sharing a Single Runtime Context

Figure 11-2 shows an application running in a multithreaded environment. The various threads share a single runtime context to process one or more SQL statements. Again, runtime contexts cannot be shared by multiple threads at the same time. The mutexes in Figure 11-2 show how to prevent concurrent usage.

Figure 11-2 Context Sharing Among Threads

Context Sharing Among Threads
Description of "Figure 11-2 Context Sharing Among Threads"

Multiple Threads Sharing Multiple Runtime Contexts

Figure 11-3 shows an application that executes multiple threads using multiple runtime contexts. In this situation, the application does not require mutexes, because each thread has a dedicated runtime context.

Figure 11-3 No Context Sharing Among Threads

No Context Sharing Among Threads
Description of "Figure 11-3 No Context Sharing Among Threads"

User Interface Features for Multithreaded Applications

The Pro*C/C++ Precompiler provides the following user-interface features to support multithreaded applications:

THREADS Option

With THREADS=YES specified on the command line, the Pro*C/C++ Precompiler ensures that the generated code is thread-safe, given that you follow the guidelines. With THREADS=YES specified, Pro*C/C++ verifies that all SQL statements execute within the scope of a user-defined runtime context. If your program does not meet this requirement, a precompiler error is returned.


See Also:

"Programming Considerations" for guidelines regarding the THREADS option

Embedded SQL Statements and Directives

The following embedded SQL statements and directives support the definition and usage of runtime contexts and threads:

  • EXEC SQL ENABLE THREADS;

  • EXEC SQL CONTEXT ALLOCATE :context_var;

  • EXEC SQL CONTEXT USE { :context_var | DEFAULT};

  • EXEC SQL CONTEXT FREE :context_var;

For these EXEC SQL statements, context_var is the handle to the runtime context and must be declared of type sql_context as follows:

sql_context <context_variable>;

Using DEFAULT means that the default (global) runtime context will be used in all embedded SQL statements that lexically follow until another CONTEXT USE statement overrides it.

EXEC SQL ENABLE THREADS

This executable SQL statement initializes a process that supports multiple threads. This must be the first executable SQL statement in your multithreaded application.


Note:

When using XA with the Pro*C/C++ Precompiler, you must use multithreading provided by XA. Use of multithreading provided by Pro*C using the statement EXEC SQL ENABLE THREADS will result in an error.

EXEC SQL CONTEXT ALLOCATE

This executable SQL statement allocates and initializes memory for the specified runtime context; the runtime-context variable must be declared of type sql_context.

EXEC SQL CONTEXT USE

This directive instructs the precompiler to use the specified runtime context for subsequent executable SQL statements. The runtime context specified must be previously allocated using an EXEC SQL CONTEXT ALLOCATE statement.

The EXEC SQL CONTEXT USE directive works similarly to the EXEC SQL WHENEVER directive in that it affects all executable SQL statements which positionally follow it in a given source file without regard to standard C scope rules. In the following example, the UPDATE statement in function2() uses the global runtime context, ctx1:

sql_context ctx1;            /* declare global context ctx1     */

function1()
{
   sql_context :ctx1;         /* declare local context ctx1      */
   EXEC SQL CONTEXT ALLOCATE :ctx1;
   EXEC SQL CONTEXT USE :ctx1; 
   EXEC SQL INSERT INTO ...  /* local ctx1 used for this stmt   */
   ...
}

function2() 
{
   EXEC SQL UPDATE ...       /* global ctx1 used for this stmt */
}

To use the global context after using a local context, add this code to function1():

function1()
{
   sql_context :ctx1;         /* declare local context ctx1      */
   EXEC SQL CONTEXT ALLOCATE :ctx1;
   EXEC SQL CONTEXT USE :ctx1; 
   EXEC SQL INSERT INTO ...  /* local ctx1 used for this stmt   */
   EXEC SQL CONTEXT USE DEFAULT;
   EXEC SQL INSERT INTO ... /* global ctx1 used for this stmt   */
   ...
}

In the next example, there is no global runtime context. The precompiler refers to the ctx1 runtime context in the generated code for the UPDATE statement. However, there is no context variable in scope for function2(), so errors are generated at compile time.

function1() 
{
   sql_context ctx1;         /* local context variable declared */
   EXEC SQL CONTEXT ALLOCATE :ctx1;
   EXEC SQL CONTEXT USE :ctx1; 
   EXEC SQL INSERT INTO ...     /* ctx1 used for this statement */
   ...
} 
function2() 
{
   EXEC SQL UPDATE ...   /* Error! No context variable in scope */
}

EXEC SQL CONTEXT FREE

This executable SQL statement frees the memory associated with the specified runtime context and places a null pointer in the host program variable.

CONTEXT USE Examples

The following code fragments show how to use embedded SQL statements and precompiler directives for two typical programming models; they use thread_create() to create threads.

The first example showing multiple threads using multiple runtime contexts:

main() 
{
   sql_context ctx1,ctx2;           /* declare runtime contexts */
   EXEC SQL ENABLE THREADS;
   EXEC SQL CONTEXT ALLOCATE :ctx1;
   EXEC SQL CONTEXT ALLOCATE :ctx2;
   ...
/* spawn thread, execute function1 (in the thread) passing ctx1 */
   thread_create(..., function1, ctx1);  
/* spawn thread, execute function2 (in the thread) passing ctx2 */
   thread_create(..., function2, ctx2);
   ...
   EXEC SQL CONTEXT FREE :ctx1;
   EXEC SQL CONTEXT FREE :ctx2;
   ...
}

void function1(sql_context ctx)
{
   EXEC SQL CONTEXT USE :ctx;
/* execute executable SQL statements on runtime context ctx1!!! */
   ...
}
 
void function2(sql_context ctx) 
{
   EXEC SQL CONTEXT USE :ctx;
/* execute executable SQL statements on runtime context ctx2!!! */
   ...
}

The next example shows how to use multiple threads that share a common runtime context. Because the SQL statements executed in function1() and function2() potentially execute at the same time, you must place mutexes around every executable EXEC SQL statement to ensure serial, therefore safe, manipulation of the data.

main() 
{
   sql_context ctx;                  /* declare runtime context */
   EXEC SQL CONTEXT ALLOCATE :ctx;
   ...
/* spawn thread, execute function1 (in the thread) passing ctx  */
   thread_create(..., function1, ctx);  
/* spawn thread, execute function2 (in the thread) passing ctx  */
   thread_create(..., function2, ctx);
   ...
} 
 
void function1(sql_context ctx)
{
   EXEC SQL CONTEXT USE :ctx;
/* Execute SQL statements on runtime context ctx.               */
   ...
}

void function2(sql_context ctx) 
{
   EXEC SQL CONTEXT USE :ctx;
/* Execute SQL statements on runtime context ctx.               */
   ...
}

Programming Considerations

While Oracle ensures that the SQLLIB code is thread-safe, you are responsible for ensuring that your Pro*C/C++ source code is designed to work properly with threads; for example, carefully consider your use of static and global variables.

In addition, multithreaded applications require design decisions regarding the following:

  • Declaring the SQLCA as a thread-safe struct, typically an auto variable and one for each runtime context

  • Declaring the SQLDA as a thread-safe struct, like the SQLCA, typically an auto variable and one for each runtime context

  • Declaring host variables in a thread-safe fashion, in other words, carefully consider your use of static and global host variables.

  • Avoiding simultaneous use of a runtime context in multiple threads

  • Whether or not to use default database connections or to explicitly define them using the AT clause

Also, no more than one executable embedded SQL statement, for example, EXEC SQL UPDATE, may be outstanding on a runtime context at a given time.

Existing requirements for precompiled applications also apply. For example, all references to a given cursor must appear in the same source file.

Multithreaded Example

The following program is one approach to writing a multithreaded embedded SQL application. The program creates as many sessions as there are threads. Each thread executes zero or more transactions, that are specified in a transient structure called "records."


Note:

This program was developed specifically for a Sun workstation running Solaris. Either the DCE or Solaris threads package is usable with this program. See your platform-specific documentation for the availability of threads packages.

/*
 * Name:        Thread_example1.pc
 *
 * Description: This program illustrates how to use threading in
 *      conjunction with precompilers. The program creates as many
 *      sessions as there are threads. Each thread executes zero or
 *      more transactions, that are specified in a transient
 *      structure called 'records'.
 * Requirements:
 *      The program requires a table 'ACCOUNTS' to be in the schema
 *      scott/tiger. The description of ACCOUNTS is:
 *  SQL> desc accounts
 *   Name                            Null?    Type
 *  ------------------------------- -------  ------
 *  ACCOUNT                                  NUMBER(36)
 *  BALANCE                                  NUMBER(36,2)
 *
 *  For proper execution, the table should be filled with the accounts
 *      10001 to 10008.
 *
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>

#define      _EXC_OS_        _EXC__UNIX
#define      _CMA_OS_        _CMA__UNIX

#ifdef DCE_THREADS
  #include <pthread.h>
#else
  #include <thread.h>
#endif

/* Function prototypes */
void   err_report();
#ifdef DCE_THREADS
void   do_transaction();
#else
void   *do_transaction();
#endif
void   get_transaction();
void   logon();
void   logoff();

#define CONNINFO "scott/tiger"
#define THREADS  3 

struct parameters 
{ sql_context * ctx;
  int thread_id;
};
typedef struct parameters parameters;

struct record_log
{  char action;
   unsigned int from_account;
   unsigned int to_account;
   float  amount;
};
typedef struct record_log record_log;

record_log records[]= { { 'M', 10001, 10002, 12.50 },
                        { 'M', 10001, 10003, 25.00 },
                        { 'M', 10001, 10003, 123.00 },
                        { 'M', 10001, 10003, 125.00 },
                        { 'M', 10002, 10006, 12.23 },
                        { 'M', 10007, 10008, 225.23 },
                        { 'M', 10002, 10008, 0.70 },
                        { 'M', 10001, 10003, 11.30 },
                        { 'M', 10003, 10002, 47.50 },
                        { 'M', 10002, 10006, 125.00 },
                        { 'M', 10007, 10008, 225.00 },
                        { 'M', 10002, 10008, 0.70 },
                        { 'M', 10001, 10003, 11.00 },
                        { 'M', 10003, 10002, 47.50 },
                        { 'M', 10002, 10006, 125.00 },
                        { 'M', 10007, 10008, 225.00 },
                        { 'M', 10002, 10008, 0.70 },
                        { 'M', 10001, 10003, 11.00 },
                        { 'M', 10003, 10002, 47.50 },
                        { 'M', 10008, 10001, 1034.54}};

static unsigned int trx_nr=0;
#ifdef DCE_THREADS
pthread_mutex_t mutex;
#else
mutex_t mutex;
#endif



/*********************************************************************
 *  Main
 ********************************************************************/
main()
{
  sql_context ctx[THREADS];
#ifdef DCE_THREADS
  pthread_t thread_id[THREADS];
  pthread_addr_t status;
#else
  thread_t thread_id[THREADS];
  int status;
#endif
  parameters params[THREADS];
  int i;
  
  EXEC SQL ENABLE THREADS;

  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca);

  /* Create THREADS sessions by connecting THREADS times */
  for(i=0;i<THREADS;i++)
  {
    printf("Start Session %d....",i);
    EXEC SQL CONTEXT ALLOCATE :ctx[i];
    logon(ctx[i],CONNINFO);
  }

  /*Create mutex for transaction retrieval */
#ifdef DCE_THREADS
  if (pthread_mutex_init(&mutex,pthread_mutexattr_default))
#else
  if (mutex_init(&mutex, USYNC_THREAD, NULL))
#endif
  {
     printf("Can't initialize mutex\n");
     exit(1);
  }

  /*Spawn threads*/
  for(i=0;i<THREADS;i++)
  {
    params[i].ctx=ctx[i];
    params[i].thread_id=i;

    printf("Thread %d... ",i);
#ifdef DCE_THREADS
    if (pthread_create(&thread_id[i],pthread_attr_default,
        (pthread_startroutine_t)do_transaction,
        (pthread_addr_t) &params[i]))
#else
    if (status = thr_create
    (NULL, 0, do_transaction, &params[i], 0, &thread_id[i]))
#endif
      printf("Cant create thread %d\n",i);
    else
      printf("Created\n");
  }


  /* Logoff sessions....*/
  for(i=0;i<THREADS;i++)
  {
     /*wait for thread to end */
     printf("Thread %d ....",i);
#ifdef DCE_THREADS
     if (pthread_join(thread_id[i],&status))
       printf("Error when waiting for thread % to terminate\n", i);
     else
      printf("stopped\n");

     printf("Detach thread...");
     if (pthread_detach(&thread_id[i]))
       printf("Error detaching thread! \n");
     else
       printf("Detached!\n");
#else
     if (thr_join(thread_id[i], NULL, NULL))
       printf("Error waiting for thread to terminate\n");
#endif
     printf("Stop Session %d....",i);
     logoff(ctx[i]);
     EXEC SQL CONTEXT FREE :ctx[i];
  }


  /*Destroys mutex*/
#ifdef DCE_THREADS
  if (pthread_mutex_destroy(&mutex))
#else
  if (mutex_destroy(&mutex))
#endif
  {
    printf("Can't destroy mutex\n");
    exit(1);
  }
}

/*********************************************************************
 * Function: do_transaction
 *
 * Description:  This functions executes one transaction out of the 
 *               records array. The records array is 'managed' by
 *               the get_transaction function.
 *
 *
 ********************************************************************/
#ifdef DCE_THREADS
void do_transaction(params)
#else
void *do_transaction(params)
#endif
parameters *params;
{
  struct sqlca sqlca;
  record_log *trx;
  sql_context ctx=params->ctx;

  /* Done all transactions ? */
  while (trx_nr < (sizeof(records)/sizeof(record_log)))
  {
    get_transaction(&trx);

    EXEC SQL WHENEVER SQLERROR DO err_report(sqlca);
    EXEC SQL CONTEXT USE :ctx;

    printf("Thread %d executing transaction\n",params->thread_id);
    switch(trx->action)
    {
      case 'M':  EXEC SQL UPDATE ACCOUNTS
                          SET    BALANCE=BALANCE+:trx->amount
                          WHERE  ACCOUNT=:trx->to_account;
                 EXEC SQL UPDATE ACCOUNTS
                          SET    BALANCE=BALANCE-:trx->amount
                          WHERE  ACCOUNT=:trx->from_account;
                 break;
       default:  break;
    }
    EXEC SQL COMMIT;
  }
}


/*****************************************************************
 * Function: err_report
 *
 * Description: This routine prints out the most recent error
 *
 ****************************************************************/
void      err_report(sqlca)
struct sqlca sqlca;
{
  if (sqlca.sqlcode < 0)
   printf("\n%.*s\n\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
  exit(1);
}

/*****************************************************************
 * Function: logon
 *
 * Description: Logs on to the database as USERNAME/PASSWORD
 *
 *****************************************************************/
void      logon(ctx,connect_info)
sql_context ctx;
char * connect_info;
{
    EXEC SQL WHENEVER SQLERROR DO err_report(sqlca);
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL CONNECT :connect_info;
    printf("Connected!\n");

}

/******************************************************************
 * Function: logoff
 *
 * Description: This routine logs off the database
 *
 ******************************************************************/
void      logoff(ctx)
sql_context ctx;
{
    EXEC SQL WHENEVER SQLERROR DO err_report(sqlca);
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL COMMIT WORK RELEASE;
    printf("Logged off!\n");
}


/******************************************************************
 * Function: get_transaction
 *
 * Description: This routine returns the next transaction to process
 *
 ******************************************************************/
void get_transaction(trx)
record_log ** trx;
{
#ifdef DCE_THREADS
  if (pthread_mutex_lock(&mutex))
#else
  if (mutex_lock(&mutex))
#endif
    printf("Can't lock mutex\n");

  *trx=&records[trx_nr];

  trx_nr++;

#ifdef DCE_THREADS
  if (pthread_mutex_unlock(&mutex))
#else
  if (mutex_unlock(&mutex))
#endif
    printf("Can't unlock mutex\n");
}

Connection Pooling

A connection pool is a group of physical connections to a database that can be re-used by several connections. The objective of the connection pooling feature is to improve performance, and reduce resource use by avoiding usage of dedicated connections by each connection.

Figure 11-4 illustrates functionality of the connection pooling feature. In this example, four threads of the application are interacting with the database using the connection pool. The connection pool has two physical connections. The connection pool handle is used by four threads using different runtime contexts.

Figure 11-4 Connection Pooling

Connection Pooling
Description of "Figure 11-4 Connection Pooling"

thread1() 
{ 
EXEC SQL CONTEXT ALLOCATE :ctx1; 
EXEC SQL CONTEXT USE:ctxl;
EXEC SQL CONNECT :uid  AT :TC1 USING :db_string; 
... 

} 

thread2() 
{ 
EXEC SQL CONTEXT ALLOCATE :ctx2; 
EXEC SQL CONNECT :uid  AT :TC2 USING :db_string; 
... 

} 

thread3() 
{ 
EXEC SQL CONTEXT ALLOCATE :ctx3; 
EXEC SQL CONNECT :uid  AT :TC3 USING :db_string; 
EXEC SQL AT :TC3 SELECT count(*) into :count FROM emp; 
... 

} 

thread4() 
{ 
EXEC SQL CONTEXT ALLOCATE :ctx4; 
EXEC SQL CONNECT :uid  AT :TC4 USING :db_string; 
... 

}

In this example, four named connections TC1, TC2, TC3, and TC4 are virtual connections created by threads T1, T2, T3, and T4 respectively. Named connections TC1, TC2, TC3, and TC4 from different runtime contexts share the same connection pool, and share physical database connections available in the connection pool. Two physical connections, C1 and C2, serve four named connections and connect to the same database.

When the first connect request TC1 from thread T1 is received, SQLLIB creates a connection pool with one physical connection C1 to the database. When another connect request TC2 from thread T2 is sent to the same database, C1 serves the TC2 request to the database, if it is free. Otherwise, a new physical connection C2 is created to serve the request. If another connect request from thread T3 named TC3 comes in, TC3 either waits for a specified time or returns an error message, if both physical connections C1 and C2 are busy.

When thread T2 needs to select data using the TC2 named connection, it acquires any free physical connection, C1 or C2. After the request is served, the chosen connection will again be available in the connection pool, so that another named or virtual connection can utilize the same physical connection.

Using the Connection Pooling Feature

This section comprises the following topics:

How to Enable Connection Pooling

To enable connection pooling while precompiling an application, the user must set the command line option CPOOL=YES. Based on CPOOL=YES/NO, the connection pool feature is enabled or disabled.


Note:

  • By default, CPOOL is set to NO and hence the connection pool feature is disabled. This feature cannot be enabled or disabled inline.

  • Connection pool will not be created with external operating system authentication, even if CPOOL is set to YES.


Command Line Options for Connection Pooling

Table 11-1 lists the command line options for connection pooling:

Table 11-1 Command Line Options for Connection Pooling

OptionValid ValuesDefaultRemarks

CPOOL

YES/NO

NO

Based on this option, the precompiler generates the appropriate code that directs SQLLIB to enable or disable the connection pool feature.

Note: If this option is set to NO, other connection pooling options will be ignored by the precompiler.

CMAX

Valid values are 1 to 65535.

100

Specifies the maximum number of physical connections that can be opened for the database. CMAX value must be at least CMIN+CINCR.

Note: Once this value is reached, more physical connections cannot be opened.

In a typical application, running 100 concurrent database operations is more than sufficient. The user can set an appropriate value.

CMIN

Valid values are 1 to (CMAX-CINCR).

2

Specifies the minimum number of physical connections in the connection pool. Initially, all physical connections as specified through CMIN are opened to the server. Subsequently, physical connections are opened only when necessary. Users should set CMIN to the total number of planned or expected concurrent statements to be run by the application to get optimum performance. The default value is set to 2.

CINCR

Valid values are 1 to (CMAX-CMIN).

1

Allows the application to set the next increment for physical connections to be opened to the database, if the current number of physical connections is less than CMAX. To avoid creating unnecessary extra connections, the default value is set to 1.

CTIMEOUT

Valid values are 1 to 65535.

0 which means not set; hence will not time out.

Physical connections that are idle for more than the specified time (in seconds) are terminated to maintain an optimum number of open physical connections. If this attribute is not set, the physical connections are never timed out. Hence, physical connections will not be closed until the connection pool is terminated.

Note: Creating a new physical connection will cost a round trip to the server.

CNOWAIT

Valid values are 1 to 65535.

0 which means not set; hence waits for a free connection.

This attribute determines if the application must repeatedly try for a physical connection when all other physical connections in the pool are busy, and the total number of physical connections has already reached its maximum. If physical connections are not available and no more physical connections can be opened, an error is thrown when this attribute is set. Otherwise, the call waits until it acquires another connection. By default, CNOWAIT is not to be set so a thread will wait until it can acquire a free connection, instead of returning an error.


A typical multithreaded application creates a pool of 'n' physical connections. The 'n' value needs to be specified by providing the CMIN value during precompilation. A minimum number of physical connections (CMIN) to the database are created on the first connect call. For new incoming requests, the mapping from a virtual connection (named connection) to a physical connection is carried out as described in the following section:

Case 1: If a physical connection is available (among the already opened connections), a new request will be served by this connection.

Case 2: If all physical connections are in use then,

Case 2a: If the number of opened connections has not reached the maximum limit (CMAX), new CINCR connections are created, and one of these connections is used to serve the request.

Case 2b: If the number of opened connections has reached the maximum limit (CMAX) without the CNOWAIT being set, the request waits until it acquires a connection. Otherwise, the application displays an error message ORA 24401: cannot open further connections.

Example

Refer to Figure 11-4 for an illustration of the following example.

Let
CMIN be 1,
CMAX be 2, and
CINCR be 1.

Consider the following scenario. When the first request TC1 comes in, SQLLIB creates the connection pool with one physical connection C1. When another request TC2 comes in, the application checks if C1 is free. As C1 is used to serve the first request (Case 1), a new physical connection C2 is created to serve the request (Case 2a). If another request TC3 comes in, and if both C1 and C2 are busy, then TC3 either waits for a specified time or returns with an error message (Case 2b).

Performance Tuning

Users can set the connection pooling parameters to get better performance, based on the application. The Performance Graph in Figure 11-5 illustrates performance gain by changing the CMIN value for the Pro*C/C++ Demo Program:1. Demo Program:2 illustrates performance gain by changing the CMAX parameter.

Demo Program:1

The following connection pool parameters are used while precompiling the Demo Program:1.

CMAX = 40
CINCR = 3
CMIN = varying values between 1 to 40
CPOOL = YES
CTIMEOUT - Do not set 

(indicates that physical connections never time out)

CNOWAIT - Do not set 

(indicates that a thread waits until it gets a free connection; see Table 11-1, "Command Line Options for Connection Pooling", for more details)

Other command line options required for this example are provided in the following section:

threads = yes 

Note:

In this example, there are 40 threads and database operations are performed against the local database.

It was observed that with CPOOL=NO (without connection pooling), the time taken by the application was 6.1 seconds, whereas, with CPOOL=YES (with connection pooling), the minimum time taken by the application was 1.3 seconds (when CMIN was 2).

In both cases, the time taken for database query operations should remain the same since the connection pool only reduces the time taken for CONNECT statements. When CPOOL=NO the application will create 40 dedicated connections. When CPOOL=YES and CMIN=2 it will create 2 connections initially and, only if 2 threads access the connections concurrently, will it create more connections. Otherwise all threads will share those 2 connections. So the application potentially avoids 38 connections which in turn avoids 38 round trips to the server to establish those connections. This is where the three fold performance gain is seen.


Note:

These results were observed on a Sparc Ultra60 single CPU, 256 MB RAM machine, running one Oracle server on a Solaris 2.6 operating system; the server and client were running on the same machine.

Figure 11-5 Performance Graph

Performance Graph
Description of "Figure 11-5 Performance Graph"

The CPOOL=YES curve represents the time taken by the application when connection pooling is enabled. The CPOOL=NO curve represents the time taken by the application when connection pooling is disabled.

Example

/* 
*  cpdemo1.pc 
* 
* Description: 
*            The program creates as many sessions as there are threads. 
*      Each thread connects to the default database, calls COMMIT and
*      executes a simple SELECT statement. Each thread have its own 
*      runtime contexts. 
* 
*/ 

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sqlca.h> 

#define      _EXC_OS_        _EXC__UNIX 
#define      _CMA_OS_        _CMA__UNIX 
#define      MAX_ROWS        256
#define      BUFF_LEN        21

#ifdef DCE_THREADS 
#include <pthread.h> 
#else 
#include <thread.h> 
#endif 

/* Function prototypes */ 
void   err_report(); 
#ifdef DCE_THREADS 
void   do_transaction(); 
#else 
void   *do_transaction(); 
#endif 
void   get_transaction(); 
void   logon(); 
void   logoff(); 

#define CONNINFO "hr/hr" 
#define THREADS  40 

struct parameters 
  { 
   sql_context * ctx; 
   int thread_id; 
  }; 
typedef struct parameters parameters; 

struct timeval tp1;
struct timeval tp2;

/*************************************** 
*  Main 
***************************************/ 

main() 
{ 
  sql_context ctx[THREADS]; 
#ifdef DCE_THREADS 
  pthread_t thread_id[THREADS]; 
  pthread_addr_t status; 
#else 
  thread_t thread_id[THREADS]; 
  int status; 
#endif 
  parameters params[THREADS]; 
  int i; 

  EXEC SQL ENABLE THREADS; 
  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca); 

  if(gettimeofday(&tp1) == -1)
  {
    perror("First: ");
    exit(0);
  }

  /* Create THREADS sessions by connecting THREADS times */ 
  for(i=0;i<THREADS;i++) 
  { 
    printf("Start Session %d....",i); 
    EXEC SQL CONTEXT ALLOCATE :ctx[i]; 
    logon(ctx[i],CONNINFO); 
  } 

  /*Spawn threads*/ 
  for(i=0;i<THREADS;i++) 
  { 
    params[i].ctx=ctx[i]; 
    params[i].thread_id=i; 

#ifdef DCE_THREADS 
    if (pthread_create(&thread_id[i],pthread_attr_default, 
      (pthread_startroutine_t)do_transaction, 
      (pthread_addr_t) &params[i])) 
#else 
    if (status = thr_create 
      (NULL, 0, do_transaction, &params[i], 0, &thread_id[i])) 
#endif 
      printf("Cant create thread %d\n",i); 
    else 
      printf("Created Thread %d\n", i); 
  } 

  /* Logoff sessions....*/ 
  for(i=0;i<THREADS;i++) 
  { 
    /*wait for thread to end */ 
#ifdef DCE_THREADS 
    if (pthread_join(thread_id[i],&status)) 
      printf("Error when waiting for thread % to terminate\n", i); 
    else 
      printf("stopped\n"); 

    printf("Detach thread..."); 
    if (pthread_detach(&thread_id[i])) 
      printf("Error detaching thread! \n"); 
    else 
      printf("Detached!\n"); 
#else 
    if (thr_join(thread_id[i], NULL, NULL)) 
      printf("Error waiting for thread to terminate\n"); 
#endif 
      logoff(ctx[i]); 
      EXEC SQL CONTEXT FREE :ctx[i]; 
  } 

  if(gettimeofday(&tp2) == -1)
  {
    perror("Second: ");
    exit(0);
  }

    printf(" \n\nTHE TOTAL TIME TAKEN FOR THE PROGRAM EXECUTION = %f \n\n",
    (float)(tp2.tv_sec - tp1.tv_sec) + ((float)(tp2.tv_usec -
    tp1.tv_usec)/1000000.0));


} 

/*********************************************************************** 
* Function: do_transaction 
* Description:  This function calls CMMIT and execute a simple SELECT
*  statement. 
***********************************************************************/ 
#ifdef DCE_THREADS 
void do_transaction(params) 
#else 
void *do_transaction(params) 
#endif 
parameters *params; 
{ 
  struct sqlca sqlca; 
  char empName[MAX_ROWS][BUFF_LEN];
  int src_count; 
  sql_context ctx=params->ctx; 

  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca); 
  EXEC SQL CONTEXT USE :ctx; 
  printf("Thread %d executing transaction\n",params->thread_id); 
  EXEC SQL COMMIT; 
  EXEC SQL SELECT FIRST_NAME into empName from EMPLOYEES where JOB_ID=
        (select JOB_ID from EMPLOYEES where EMPLOYEE_ID=205);
} 

/************************************************************** 
* Function: err_report 
* Description: This routine prints out the most recent error 
**************************************************************/ 
void      err_report(sqlca) 
struct sqlca sqlca; 
{ 
  if (sqlca.sqlcode < 0) 
    printf("\n%.*s\n\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc); 
  exit(1); 
} 

/************************************************************ 
* Function: logon 
* Description: Logs on to the database as USERNAME/PASSWORD 
************************************************************/ 
void      logon(ctx,connect_info) 
sql_context ctx; 
char * connect_info; 
{ 
  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca); 
  EXEC SQL CONTEXT USE :ctx; 
  EXEC SQL CONNECT :connect_info; 
  printf("Connected!\n"); 
} 

/*************************************************** 
* Function: logoff 
* Description: This routine logs off the database 
***************************************************/ 
void      logoff(ctx) 
sql_context ctx; 
{ 
  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca); 
  EXEC SQL CONTEXT USE :ctx; 
  EXEC SQL COMMIT WORK RELEASE; 
}

Demo Program:2

The following connection pool parameters are used while precompiling the Demo Program:2.

CMAX = varying values between 5 to 40

CINCR = 3

CMIN = varying values between 1 to 40

CPOOL = YES

CTIMEOUT - Do not set

(indicates that physical connections never time out)

CNOWAIT - Do not set

(indicates that a thread waits until it gets a free connection; see Table 11-1, "Command Line Options for Connection Pooling", for more details)

Other command line options required for this example are provided in the following section:

threads = yes

The following figure illustrates the performance graph for cpdemo2.


Note:

In this example there are 40 threads and database operations are performed against the local database.

In this example the best performance is observed with CMIN=5 and CMAX=14 when the program runs approximately 2.3 times faster compared to using CPOOL=NO.This is less of an improvement than "cpdemo1" though which ran faster with connection pooling enabled.The reason for this is because "cpdemo1" performs only simple SELECT statements whereas "cpdemo2" performs both UPDATE AND SELECT statements.Therefore "cpdemo1" spends more time creating connections than performing database operations.When connection pooling is enabled, time is saved as fewer connections are created. Hence overall performance improves. Since "cpdemo2" spends less time creating connections compared to performing database operations, the overall performance gain is less.

In the following graphs, the CPOOL=YES curve represents the time taken by the application when connection pooling is enabled. The CPOOL=NO curve represents the time taken by the application when connection pooling is disabled. The demo program "cpdemo2" creates 40 threads. With CPOOL=NO option, each thread establishes its own dedicated connection to the server. Hence 40 connections are created. The same demo program, when built with CPOOL=YES and CMAX=14, creates a maximum of 14 connections. These connections are shared across the 40 threads thus saving at least 26 connections and so avoiding 26 round-trips to the server.

The following two graphs show performance against varying CMIN and CMAX values respectively.

Case 1: By varying CMIN

Figure 11-6 Performance Graph Case 1

Performance Graph Case 1
Description of "Figure 11-6 Performance Graph Case 1"

The application takes around 7.5 seconds for execution with CPOOL=NO. With CPOOL=YES, and CMIN=8 and CMAX=14, the execution time reduces to 4.5 seconds. So, the performance improvement is about 1.7 times. The difference in performance is because of different database operations (SELECT vs UPDATE) which is purely a server side activity and beyond the scope of connection pool feature which is a client side feature.

Case 2: By varying CMAX

Figure 11-7 Performance Graph Case 2

Performance Graph Case 2
Description of "Figure 11-7 Performance Graph Case 2"

For the preceding graph the demo program was run with CMIN=5 and CINCR=3. The best performance was observed with CMAX=14. Execution takes around 7.4 seconds with CPOOL=NO. With CPOOL=YES, when CMAX=14 the execution time reduces to around 3.1 seconds, resulting in a 2.3 fold performance gain.

The performance improvement varies with CMAX.Therefore to obtain the best performance for a given application, the user should vary CMIN and CMAX until the optimal performance is achieved.

Example

 /*
  * Program to show the performance improvement when cpool option is used
  * Run this program with cpool=no. Record the time taken for the program to
  * execute
  *
  * Compare the execution time
  *
  * This program also demonstrates the impact of properly tuned CMAX 
  * parameter on the performance
  *
  * Run the program with the following parameter values for best performance
  * 
  * CMIN=5
  * CINCR=2
  * CMAX=14
  *
  */


#include <stdio.h>
#include <sqlca.h>

#ifdef DCE_THREADS 
#include <pthread.h> 
#else 
#include <thread.h> 
#endif 


#define CONNINFO "hr/hr"
#define THREADS 40
#define      MAX_ROWS        256
#define      BUFF_LEN        21

/***** prototypes ************** */
#ifdef DCE_THREADS 
void selectFunction();
void updateFunction();
#else 
void *selectFunction();
void *updateFunction();
#endif 

void err_report(struct sqlca sqlca);
/* ************************* */

/***** parameter to the function selectFunction, updateFunction */
struct parameters 
{
  sql_context ctx;
  char connName[20];
  char dbName[20];
  int thread_id;
};
typedef struct parameters parameters;
/*******************************************/

parameters params[THREADS];

struct timeval tp1;
struct timeval tp2;

int main()
{
  int i, status;
  thread_t thread_id[THREADS];

  int thrNos[THREADS];

  for(i=0; i<THREADS; i++)
    thrNos[i] = i;

  EXEC SQL ENABLE THREADS;

  /* Time before executing the program */
  if(gettimeofday(&tp1) == -1){
    perror("First: ");
    exit(0);
  }

  EXEC SQL WHENEVER SQLERROR DO err_report(sqlca);
  /* connect THREADS times to the data base */
  for(i=0; i<THREADS; i++)
  {
    strcpy(params[i].dbName, "inst1");
    sprintf(params[i].connName,"conn%d", i);
    params[i].thread_id = i;

    /* logon to the data base */
    EXEC SQL CONTEXT ALLOCATE :params[i].ctx;
    EXEC SQL CONTEXT USE :params[i].ctx;
    EXEC SQL CONNECT :CONNINFO
      AT :params[i].connName USING :params[i].dbName;
  }


  /* create THREADS number of threads */
  for(i=0;i<THREADS;i++)
  {
      printf("Creating thread %d \n", i);
      if(i%2)
      {
        /* do a select operation if the thread id is odd */
#ifdef DCE_THREADS 
        if(pthread_create(&thread_id[i],pthread_attr_default, 
            (pthread_startroutine_t)selectFunction, 
            (pthread_addr_t) &params[i])) 
#else 
        if(thr_create(NULL, 0, selectFunction,
              &params[i], 0, &thread_id[i]))
#endif 
          printf("Cant create thread %d \n", i);
      }
      else
      {
        /* othewise do an update operation */
#ifdef DCE_THREADS 
        if(pthread_create(&thread_id[i],pthread_attr_default, 
            (pthread_startroutine_t)updateFunction, 
            (pthread_addr_t) &params[i])) 
#else 
        if(thr_create(NULL, 0, updateFunction,
              &params[i], 0, &thread_id[i]))
#endif 
          printf("Cant create thread %d \n", i);
      }

  }

  for(i=0; i<THREADS; i++)
  {
#ifdef DCE_THREADS 
    if(pthread_join(thread_id[i],&status)) 
      printf("Error when waiting for thread % to terminate\n", i); 

    if(pthread_detach(&thread_id[i])) 
      printf("Error detaching thread! \n"); 
#else 
    if(thr_join(thread_id[i], NULL, NULL)) 
      printf("Error waiting for thread i(%d) to terminate\n", i);
#endif 
  }

  if(gettimeofday(&tp2) == -1){
  perror("Second: ");
        exit(0);
  }

  printf(" \n\nTHE TOTAL TIME TAKEN FOR THE PROGRAM EXECUTION = %f \n\n",
      (float)(tp2.tv_sec - tp1.tv_sec) + ((float)(tp2.tv_usec -
      tp1.tv_usec)/1000000.0));

  /* free the context */
  for(i=0; i<THREADS; i++)
  {
    EXEC SQL CONTEXT USE :params[i].ctx;
    EXEC SQL AT :params[i].connName COMMIT WORK RELEASE;

    EXEC SQL CONTEXT FREE :params[i].ctx;
  }

  return 0;
}

#ifdef DCE_THREADS 
void selectFunction(parameters *params)
#else 
void *selectFunction(parameters *params)
#endif 
{
  char empName[MAX_ROWS][BUFF_LEN];
  printf("Thread %d selecting .... \n", params->thread_id);

  EXEC SQL CONTEXT USE :params->ctx;
  EXEC SQL AT : params->connName
    SELECT FIRST_NAME into empName from EMPLOYEES;
  printf("Thread %d selected ....\n", params->thread_id);
  return 0;
}

#ifdef DCE_THREADS 
void updateFunction(parameters *params)
#else 
void *updateFunction(parameters *params)
#endif 
{
  printf(" Thread %d Updating ... \n", params->thread_id);

  EXEC SQL CONTEXT USE :params->ctx;
  EXEC SQL AT :params->connName update EMPLOYEES
    set SALARY = 4000 where DEPARTMENT_ID = 10;

  /* commit the changes */
  EXEC SQL AT :params->connName COMMIT;

  printf(" Thread %d Updated ... \n", params->thread_id);
  return 0;
}


/*********** Oracle error ***********/
void err_report(struct sqlca sqlca)
{
  if (sqlca.sqlcode < 0)
   printf("\n%.*s\n\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);

  exit(0);
}

PKk[QGPK+AOEBPS/index.htm Index

Index

A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

Symbols

#include
file inclusion, Pro*C compared to C, 5.4.1

A

abnormal termination
automatic rollback, F.15
active set
changing, 6.5.2, 6.5.3
cursor movement through, 6.5.3
definition of, 2.1.9
how identified, 6.5
if empty, 6.5.3
when fetched from, 6.5.3
when no longer defined, 6.5
ALLOCATE
allocating a cursor variable, 4.5.2
ALLOCATE DESCRIPTOR statement, 14.5.1, F.5
ALLOCATE SQL statement, 17.4.2
ALLOCATE SQL statements, F.4
allocating
cursor variables, 4.5.2
cursors, F.4
thread context, 11.4.2.2, F.17
ANSI C Support, E.1.3
ANSI dynamic SQL, A.2.12, G.1
reference semantics, 14.3.1
See also dynamic SQL (ANSI), 14
application development process, 2.2
array of structs, 8.10, A.2.1
ARRAYLEN statement, 7.5.1
arrays
batch fetch, 8.4.1
bulk operations (ANSI dynamic SQL), 14.3.2
chapter discusses how to use, 8
definition of, 4.8.1
host arrays, 2.1.7
operations, 2.1.7
varying length, 18.1.2
associative interface, 17.4
when to use, 17.4.1
AT clause
in CONNECT statement, 3.2.4.1
in DECLARE CURSOR statement, 3.2.4.1.3
in DECLARE STATEMENT statement, 3.2.4.1.4
in EXECUTE IMMEDIATE statement, 3.2.4.1.4
of COMMIT statement, F.15
of DECLARE CURSOR directive, F.23
of EXECUTE IMMEDIATE statement, F.35
of EXECUTE statement, F.32
of INSERT statement, F.40
of SAVEPOINT statement, F.72
of SELECT statement, F.73
of SROLLBACK statement, F.71
of UPDATE statement, F.76
restriction on, 3.2.4.1.3
use of, 3.2.4.1.3
attributes of a collection
descriptions, 18.4.6
AUTO_CONNECT, 10.5.1
precompiler option, 3.1.3.1
AUTO_CONNECT precompiler option, 10.5.1
automatic connections, 3.1.3, 3.2.4

B

batch fetch
advantage of, 8.4.1
example of, 8.4.1
number of rows returned by, 8.4.3
BFILES, 16.1.2
security, 16.1.3
bind descriptor, 13.10.1, 15.2.1, 15.2.1
definition of, 13.10.1
information in, 13.10.2
bind SQLDA
purpose of, 15.1.3
bind variables
input host variables, 13.10.1
binding
definition of, 13.5
BREAK action
of WHENEVER, F.78
Byte Ordering, E.1.6

C

C preprocessor
directives supported by Pro*C, 5.4
how used in Pro*C, 5.4
C structs
generating for a REF, 17.13.1
using, 17.12
C types of collection attributes, 18.4.6
C variable in SQLDA
how value is set, 15.3.9
purpose of, 15.3.9
C++, 1.8.5
C++ applications, 12
cache, 17.3
CACHE FREE ALL SQL statement, 17.4.4
CACHE FREE ALL statement, F.6
CALL SQL statement, F.7
CALL statement, 7.7.2.3, A.2.3
example, 7.7.2.4
Calling Java from PL/SQL, A.3.5
CASE OTT parameter, 19.5.2.10
case sensitivity
in precompiler options, 10.1.1
CHAR datatype, 4.1.2.17
CHAR_MAP precompiler option, 5.1.1, 10.5.2, A.2.6
character data, 5.1
character strings
multibyte, 4.11.4
CHARF datatype, 4.1.2.19, 5.3.3
CHARZ datatype, 4.1.2.18
CLOSE CURSOR statement, 14.5.13
CLOSE SQL statements, F.8
CLOSE statement
dependence on precompiler options, 6.5.4
example, 6.5.4, F.8
purpose of, 6.5, 6.5.4
use in dynamic SQL method 4, 15.6.18
CLOSE_ON_COMMIT
precompiler option, 3.6.2, 6.5.1, 10.5.4, A.3.9
CLOSE_ON_COMMIT precompiler option, 10.5.4
closing
cursors, F.8
CODE
precompiler option, 12.2.1
CODE option, 10.2.7.2
CODE OTT parameter, 19.5.2.4
code page, 4.10
CODE precompiler option, 10.5.8, 10.5.8
coding conventions, 2.3
COLLECT GET statement
example, 18.5.2
COLLECTION APPEND, F.9
COLLECTION APPEND statement, 18.4.4
SQL statements
COLLECTION APPEND, F.9
COLLECTION DESCRIBE
example, 18.5.3
COLLECTION DESCRIBE statement, 18.4.6
SQL statements
COLLECTION DESCRIBE, F.10
COLLECTION GET statement, 18.4.1
SQL statements
COLLECTION GET, F.11
collection object types
handling, 18.2.2
COLLECTION RESET statement, 18.4.3
example, 18.5.4
SQL statements
COLLECTION RESET, F.12
COLLECTION SET statement, 18.4.2
example, 18.5.2
SQL statements
COLLECTION SET, F.13
COLLECTION TRIM statement, 18.4.5
SQL statements
COLLECTION TRIM, F.14
collection types
structs for, 18.2
collections, A.2.13
and C, 18.1.3
autonomous access, 18.2.2.1
descriptors, 18.2
element access, 18.2.2.2
manipulating, 18.2.2
nested tables, 18.1.1
OBJECT GET statement, 18.3
OBJECT SET statement, 18.3
VARRAYs, 18.1.2
column list
in INSERT statements, 6.3.2
when permissible to omit, 6.3.2
COMMENT clause
of COMMIT statement, F.15
Comments
restrictions in PL/SQL block, 13.12.4
comments
ANSI, 2.3.1
which allowed, 2.3.1
commit
automatic, 3.5
explicit versus implicit, 3.5
function of, 3.4
COMMIT SQL statement, F.15
COMMIT statement, 3.6
effect of, 3.6
ending a transaction, F.71
example of, 3.6
examples, F.15
purpose of, 3.6
RELEASE option in, 3.6
using in a PL/SQL block, 3.14.3
where to place, 3.6
committing
transactions, F.15
communicating over a network, 3.2.1
COMP_CHARSET precompiler option, 10.5.9, 10.5.10, 10.5.10
compiling, 2.6
specifying include file locations, 5.4.7
concurrency
definition of, 3.3
concurrent connections, 3.2.2
conditional precompilation, 2.4
defining symbols, 5.6.1
example, 2.4.2, 5.6.2
CONFIG OTT parameter, 19.5.2.8
CONFIG precompiler option, 10.5.3, 10.5.5, 10.5.6, 10.5.7, 10.5.11, 10.5.11, 10.5.12, 10.5.14
configuration files, 10.2.2, 10.2.7.1
and the Object Type Translator, 19.2.2
location, 10.2.2, 10.2.7.1
system, 10.2.3
user, 10.2.3
CONNECT statement, F.16, F.16
AT clause in, 3.2.4.1
connecting to Oracle with, 3.1
examples, F.16
requirements for, 3.1
USING clause in, 3.2.4.1
using to enable a semantic check, D.3.1.1
connecting to Oracle, 3.1
automatic connections, 3.1.3
concurrently, 3.2.2
example of, 3.1
using Oracle Net, 3.2.2
connection pooling, 11.6
demo program1, 11.6.2
demo program2, 11.6.3
example, 11.6.3.3
using, 11.6.1
connections
concurrent, 3.2.4.2
default versus nondefault, 3.2.3
Explicit connections, 3.2.4
implicit, 3.2.5
naming of, 3.2.4
const
declaring constants, 5.7.2
CONTEXT ALLOCATE SQL statement, F.17
CONTEXT ALLOCATE statement, 11.4.2.2
context block
definition of, 20.4.1
CONTEXT FREE statement, 11.4.2.4, F.18
CONTEXT OBJECT OPTION GET SQL statement, 17.7.2
CONTEXT OBJECT OPTION SET SQL statement, 17.7.1
CONTEXT USE directive, 11.4.2.3
CONTEXT USE SQL directive, F.21
CONTEXT USE SQL statement, 11.4.2.3
CONTINUE action
in the WHENEVER statement, 9.8.2.1
of WHENEVER directive, F.78, F.78
result of, 9.8.2.1
CONVBUFSZ clause, 4.11.3
CPP_SUFFIX
precompiler option, 12.2.3
CPP_SUFFIX precompiler option, 10.5.13
CPP_SUFFIX precompiler options, 10.5.13
CREATE PROCEDURE statement
embedded, 7.7.1
creating
savepoints, F.72
creating temporary LOB, 16.4.5
CURRENT OF clause, 8.3.3
example of, 6.9
mimicking with ROWID, 3.12, 8.11
purpose of, 6.9
restrictions on, 6.9.1
current row
definition of, 2.1.9
using FETCH to retrieve, 6.5
cursor cache
definition of, 9.10.4
purpose of, C.9.2.1
cursor control statements
example of typical sequence, 6.10
cursor operations
overview of, 6.5
cursor variables, 4.5, F.4
allocating, 4.5.2
declaring, 4.5.1
restrictions on, 4.5.6
cursors, 2.5.1.1, 4.5
allocating, F.4
allocating a cursor variable, 4.5.2
analogy for, 2.1.9
association with queries, 6.5
closing, F.8
declaring, 6.5.1
definition of, 2.1.9
explicit versus implicit, 2.1.9
fetching rows from, F.36, F.37
for multirow queries, 6.5
how handling affects performance, C.9.1
movement through active set, 6.5.3
opening, F.67, F.68
purpose of, 6.5
reopening, 6.5.2, 6.5.3
restrictions on declaring, 6.5.1
rules for naming, 6.5.1
scope of, 6.5.1
scrollable cursors, 6.6
statements for manipulating, 6.5
types of, 2.1.9
using more than one, 6.5.1

D

data definition language
in transactions, 3.5
data integrity, 3.2.4.3
definition of, 3.3
data locks, 3.3
database link
creating synonym for, 3.2.5.1
defining, 3.2.5.1
example using, 3.2.5.1
using in INSERT statement, F.40
where stored, 3.2.5.1
database types
new, 17.15
databases
naming, 3.2.3
datatype equivalencing, 2.1.8
datatypes
ANSI DATE, 4.1.3.2
codes used in descriptors, 15.4.2
coercing NUMBER to VARCHAR2, 15.4.2
conversions, 5.2, 5.2
dealing with ORACLE internal, 15.4.2
equivalencing, 5.3
equivalencing, purpose of, 2.1.8
internal, 4.1.1
internal versus external, 2.1.6
INTERVAL DAY TO SECOND, 4.1.3.7
INTERVAL YEAR TO MONTH, 4.1.3.6
list of internal, 15.4.1.1
need to coerce, 15.4.2
Oracle, 2.1.6
OTT mappings, 19.2.5
restrictions on using, 17.16
TIMESTAMP, 4.1.3.3
TIMESTAMP WITH LOCAL TIME ZONE, 4.1.3.5
TIMESTAMP WITH TIME ZONE, 4.1.3.4
user-defined type equivalencing, F.75
when to reset, 15.4.2
DATE datatype, 4.1.2.10
DATE, ANSI
datatype, 4.1.3.2
datetime
avoiding unexpected results, 4.1.3.8
DBMS interaction with MODE, 10.5.16
DBMS option, 5.3.3, 10.2.7.3
DBMS precompiler option, 10.5.15, 10.5.16, 10.5.16
deadlock
definition of, 3.3
effect on transactions, 3.8.1
how broken, 3.8.1
DEALLOCATE DESCRIPTOR statement, 14.5.2, F.22
declaration
of cursors, 6.5.1
of host arrays, 8.2
of pointer variables, 4.9.1
of SQLCA, 9.6.1
declarative SQL statements
in transactions, 3.5
DECLARE CURSOR directives
examples, F.23
DECLARE CURSOR statement, 14.5.10
AT clause in, 3.2.4.1.3
use in dynamic SQL method 4, 15.6.7
DECLARE DATABASE SQL directives, F.24
Declare Section
allowable statements, 2.3.3
form, 2.3.3
purpose, 2.3.3
required when MODE=ANSI, 10.5.37
requirements, 2.3.3
rules for defining, 2.3.3
when MODE=ANSI, 5.3.4
when required, 2.3.3, 4.2.1
DECLARE statement, 6.5.1
example of, 6.5.1
purpose of, 6.5
required placement of, 6.5.1
scope of, F.25
use in dynamic SQL method 3, 13.9.2
DECLARE STATEMENT directive, F.25
DECLARE STATEMENT statement
AT clause in, 3.2.4.1.4
example of using, 13.11
using with dynamic SQL, 13.11
when required, 13.11
DECLARE statements
examples, F.25
DECLARE TABLE directive
examples, F.26
using with the SQLCHECK option, D.3.1.2
DECLARE TABLE SQL directive, F.26
DECLARE TABLE statement
need for with AT clause, 3.2.4.1.1
DECLARE TYPE directive, F.27
DEF_SQLCODE precompiler option, 10.5.17
default connections, 3.2.3
default database, 3.2.3
default file name extensions, 19.5.7
DEFINE precompiler option, 10.5.18
used in application migration, 5.4.9
defining symbols, 2.4.1
DELETE SQL statement, F.28
DELETE statement
embedded SQL examples, F.28
example of, 6.3.4
purpose of, 6.3.4
using host arrays in, 8.7
WHERE clause in, 6.3.4
delimiters
C versus SQL, 2.3.4
DEPT table, 2.7
DESCRIBE BIND VARIABLES statement
use in dynamic SQL method 4, 15.6.8
DESCRIBE command
use with PREPARE command, F.29
DESCRIBE DESCRIPTOR statement, F.30
DESCRIBE INPUT statement, 14.5.6
DESCRIBE OUTPUT statement, 14.5.7
DESCRIBE SELECT LIST statement
use in dynamic SQL method 4, 15.6.12
DESCRIBE SQL statement, F.29
DESCRIBE statement
examples, F.29
use in dynamic SQL Method 4, 13.10.1
descriptions of collection attributes, 18.4.6
descriptors, 15.2.1
bind descriptor, 13.10.1
definition of, 13.10
need for, 15.2.1
select descriptor, 13.10.1
using the sqlald() function to allocate, 15.2.4
using the sqlclu() function to deallocate, 15.6.17
determining current value of precompiler options, 10.2.3
directory structures, 1.6
distributed processing
support for, 3.2.2
using Oracle Net for, 3.2.2
distributed transactions, F.71
DML Returning Clause, A.3.6
DML returning clauses, 6.4
DO action
in the WHENEVER statement, 9.8.2.2
of WHENEVER directive, F.78
result of, 9.8.2.2
.dsp files, G.4
DTP model, 5.12
dummy host variables
placeholders, 13.4
DURATION precompiler option, 10.5.20, 17.8.2
Dynamic Link Libraries (DLLs), 1.7
dynamic PL/SQL
rules for, 13.12
versus dynamic SQL, 13.12
dynamic SQL
advantages and disadvantages of, 13.2
cannot use cursor variables with, 4.5.6
choosing the right method, 13.6.5
definition of, 2.1.3
guidelines for, 13.6.5
method 1, G.1
method 2, G.1
method 3, G.1, G.1
method 4, G.1
overview of, 13.1
restriction on, 6.9.1
restrictions on use of datatypes, 17.16
restrictions on using datatypes in, 17.16
use of PL/SQL with, 7.9
uses for, 13.2
using the AT clause in, 3.2.4.1.4
when to use, 13.3
dynamic SQL (ANSI)
basics, 14.1
bulk operations, 14.3.2
differences from Oracle dynamic, 14.5.14
Oracle extensions, 14.3
Overview, 14.2
Precompiler Options, 14.1.1
precompiler options, 14.4
reference semantics, 14.3.1
sample program, 14.6.2
sample programs, 14.6
dynamic SQL method 1
commands used with, 13.6.1
description of, 13.7
example of, 13.7.1
how to use, 13.7
requirements for, 13.6.1
use of EXECUTE IMMEDIATE with, 13.7
use of PL/SQL with, 13.12.1
dynamic SQL method 2
commands used with, 13.6.2
description of, 13.8
example of, 13.8.2
requirements for, 13.6.2
use of DECLARE STATEMENT with, 13.11
use of EXECUTE with, 13.8
use of PL/SQL with, 13.12.2
use of PREPARE with, 13.8
dynamic SQL method 3
commands used with, 13.6.3
compared to method 2, 13.9
example program, 13.9.6
requirements for, 13.6.3
sequence of statements used with, 13.9
use of DECLARE STATEMENT with, 13.11
use of DECLARE with, 13.9.2
use of FETCH with, 13.9.4
use of OPEN with, 13.9.3
use of PL/SQL with, 13.12.3
use of PREPARE with, 13.9.1
dynamic SQL method 4
need for descriptors with, 15.2.1
overview of, 13.10.1
prerequisites for using, 15.4
requirements for, 13.6.4
requirements of, 15.1.1
sample program, 15.7
sequence of statements used with, 13.10.4, 15.6
steps for, 15.5
use of CLOSE statement in, 15.6.18
use of DECLARE CURSOR statement in, 15.6.7
use of DECLARE STATEMENT with, 13.11
use of DESCR, 13.10.1
use of DESCRIBE statement in, 15.6.8, 15.6.12
use of descriptors with, 13.10
use of FETCH statement in, 15.6.15
use of OPEN statement in, 15.6.11
use of PL/SQL with, 13.12.4
use of PREPARE statement in, 15.6.6
use of the SQLDA in, 13.10.1, 15.2.1
using host arrays with, 15.6.19
using the FOR clause with, 13.11.1, 15.6.19
when needed, 13.10
dynamic SQL methods
overview of, 13.6
dynamic SQL statements
binding of host variables in, 13.5
definition of, 13.1
requirements for, 13.4
use of placeholders in, 13.4
using host arrays in, 13.11.1
versus static SQL statements, 13.1

E

embedded PL/SQL
advantages of, 7.1.1
cursor FOR loop, 7.1.3
example of, 7.3.1, 7.3.2
overview of, 2.1.4
packages, 7.1.5
PL/SQL tables, 7.1.6
procedures and functions, 7.1.4
requirements for, 7.2
SQLCHECK option, 7.2
support for SQL, 2.1.4
user-defined records, 7.1.7
using %TYPE, 7.1.2
using the VARCHAR pseudotype with, 7.3.3
using to improve performance, C.4
where allowed, 7.2
embedded SQL, G.1
ALLOCATE statement, F.4
CLOSE statement, F.8
CONTEXT ALLOCATE statement, 11.4.2.2, F.17
CONTEXT FREE statement, 11.4.2.4
definition of, 2.1.1
difference from interactive SQL, 2.1.2
ENABLE THREADS statement, 11.4.2.1
EXEC SQL CACHE FREE ALL, 17.4.4
EXECUTE statement, F.32
key concepts of, 2.1
mixing with host-language statements, 2.1.2
OPEN statement, F.67
overview of, 2.1.1
PREPARE statement, F.69
requirements for, 2.1.2
SAVEPOINT statement, F.72
SELECT statement, F.73
syntax for, 2.1.2
testing with SQL*Plus, 1.3
TYPE directive, F.75
UPDATE statement, F.76
using OCI types in, 17.14.2
using REFs in, 17.13.3
VAR directive, F.77
when to use, 1.3
WHENEVER directive, F.78
embedded SQL statements
labels for, 9.8.2.5
referencing host arrays in, 8.3.1
referencing host variables in, 4.2.2
suffixes and prefixes not allowed, 2.3.2
terminator for, 2.3.13
use of apostrophes in, 2.3.4
use of quotation marks in, 2.3.4
embedding
PL/SQL blocks in precompiler programs, F.32
EMP table, 2.7
ENABLE THREADS SQL statement, F.31
ENABLE THREADS statement, 11.4.2.1
enabling
threads, 11.4.2.1
encoding scheme (character set or code page), 4.10
enqueues
locking, 3.3
entering options, 5.4.4, 10.4
environment variables, 10.2.1
equivalencing
host variable equivalencing, F.77
user-defined type equivalencing, F.75
equivalencing of datatypes
datatype equivalencing, 2.1.8
error detection
error reporting, F.78
error handling, 2.1.11
alternatives, 9.2
need for, 9.1
overview of, 2.1.11
SQLCA versus WHENEVER statement, 9.2.2
use of ROLLBACK statement in, 3.8
error messages
maximum length of, 9.7
use in error reporting, 9.5.5
using the sqlglm() function to get, 9.7
where available in SQLCA, 9.5.5
error reporting
key components of, 9.5
use of error messages in, 9.5.5
use of parse error offset in, 9.5.4
use of rows-processed count in, 9.5.3
use of warning flags in, 9.5.2
WHENEVER directive, F.78
ERRORS precompiler option, 10.5.21
ERRTYPE
precompiler option, 10.5.22
ERRTYPE OTT parameter, 19.5.2.9
ERRTYPE precompiler option, 17.8.5
exception, PL/SQL
definition of, 7.4.1
EXEC ORACLE DEFINE statement, 5.6
EXEC ORACLE ELSE statement, 2.4, 5.6
EXEC ORACLE ENDIF statement, 2.4, 5.6
EXEC ORACLE IFDEF statement, 2.4, 5.6
EXEC ORACLE IFNDEF statement, 2.4, 5.6
EXEC ORACLE OPTION statement
set option values inline, 10.4
EXEC ORACLE statement
scope of, 10.4.2.2
syntax for, 10.4.2
uses for, 10.4.2.1
EXEC ORACLE statements, 2.4
EXEC SQL CACHE FREE statement, 17.4.4
EXEC SQL clause
using to embed SQL, 2.1.2
EXEC SQL INCLUDE
contrasted with #include, 5.4.8
EXEC SQL VAR statement
CONVBUFSZ clause, 4.11.3
EXEC TOOLS
GET CONTEXT statement, 20.5.5
GET statement, 20.5.3
MESSAGE statement, 20.5.6
SET CONTEXT statement, 20.5.4
SET statement, 20.5.2
EXEC TOOLS statements, 20.5
executable SQL statements
purpose of, 6.3
uses for, 2.1.1.1
where allowed, 2.1.1.1
EXECUTE ... END-EXEC SQL statement, F.32
EXECUTE DESCRIPTOR statement
SQL statements
EXECUTE DESCRIPTOR, F.34
EXECUTE IMMEDIATE SQL statement, F.35
EXECUTE IMMEDIATE statement, 14.5.9
AT clause in, 3.2.4.1.4
examples, F.35
use in dynamic SQL method 1, 13.7
EXECUTE optional keyword of ARRAYLEN statement, 7.5.2
EXECUTE SQL statement, F.33
EXECUTE statement, 14.5.8
examples, F.32, F.33
use in dynamic SQL method 2, 13.8
execution of statements, 13.5
execution plan, C.5, C.5.2
EXPLAIN PLAN statement
function of, C.5.2
using to improve performance, C.5.2
explicit connections, 3.2.4
description of, 3.2.4
multiple, 3.2.4.2
single, 3.2.4.1
extensions
default file name, 19.5.7
external datatypes
definition of, 2.1.6
FLOAT, 4.1.2.4
INTEGER, 4.1.2.3
STRING, 4.1.2.5
external procedures, A.3.3
callbacks, 7.8
calling from PL/SQL, 7.8
creating, 7.8.2
error-handling, 7.8.3
restrictions, 7.8.1

F

F variable in SQLDA
how value is set, 15.3.6
purpose of, 15.3.6
FAQs, 1.8
features
new, Preface
features,new, Preface
FETCH DESCRIPTOR SQL statement, F.37
FETCH SQL statement, F.36
FETCH statement, 14.5.12
example of, 6.5.3
examples, F.36
INTO clause in, 6.5.3
purpose of, 6.5, 6.5.3
results of, 6.5.3
use in dynamic SQL method 3, 13.9.4
use in dynamic SQL method 4, 15.6.15
used after OPEN command, F.68
used after OPEN statement, F.67
fetching
rows from cursors, F.36, F.37
fetching in batches
batch fetch, 8.4.1
FIPS flagger
warns of array usage, 8.3.4
warns of missing Declare Section, 4.2.1
warns of use of pointers as host variables, 5.1.3.3
FIPS precompiler option, 10.5.24
flags
warning flags, 9.5.2
FLOAT datatype, 4.1.2.4
FOR clause
example of using, 8.8
of embedded SQL EXECUTE DESCRIPTOR statement, F.34, F.34
of embedded SQL EXECUTE statement, F.33, F.33
purpose of, 8.8
requirements for, 8.8
restrictions on, 8.8.1
using in dynamic SQL method 4, 15.6.19
using with host arrays, 8.8
when variable negative or zero, 8.8
FOR UPDATE OF clause
locking rows with, 3.11
purpose of, 3.11.1
when to use, 3.11
FORCE clause
of COMMIT statement, F.15
of ROLLBACK statement, F.71
forward references
why not allowed, 6.5.1
FREE SQL statement, 17.4.3, F.38
free() function, 15.6.17
example of using, 15.6.17
freeing
thread context, 11.4.2.4, F.18
Frequently Asked Questions, 1.8
full scan
description of, C.7
function prototype
definition of, 10.5.8
functions
cannot serve as host variables, 4.2.2.1

G

generic documentation references
default values for options, 10.2.7
demo directory, 1.6
header files, location of, 5.5.4
linking, 1.7
GENXTB form
how to run, 20.12
use with user exits, 20.12
GENXTB utility
how to run, 20.12
use with user exits, 20.12
GET DESCRIPTOR statement, 14.5.3
Globalization Support, 4.10, A.2.5
GOTO action
in the WHENEVER statement, 9.8.2.5
of WHENEVER directive, F.78
result of, 9.8.2.5
guidelines
for dynamic SQL, 13.6.5
for separate precompilations, 2.5.1
for the WHENEVER statement, 9.8.6
for transactions, 3.14.1

H

header files
location of, 5.5.4
oraca.h, 5.5.4, 5.5.4
sql2oci.h, 5.5.4, 5.5.4
sqlapr.h, 5.5.4, 5.5.4
sqlca.h, 5.5.4
sqlcpr.h, 5.5.4
HEADER precompiler option, 5.5, 10.5.25
heap
definition of, 9.10.4
HFILE OTT parameter, 19.5.2.7
hints
COST, C.5.1
for the ORACLE SQL statement optimizer, 6.7
in DELETE statements, F.28
in SELECT statements, F.73
in UPDATE statements, F.76
HOLD_CURSOR
precompiler option
used to improved performance, C.9.2.4
what it affects, C.9
HOLD_CURSOR option
of ORACLE Precompilers, F.8
HOLD_CURSOR precompiler option, 10.5.25
host arrays
advantages of, 8.1
declaring, 8.2, 8.2
dimensioning, 8.2
in the DELETE statement, 8.7
in the INSERT statement, 8.5
in the SELECT statement, 8.4
in the UPDATE statement, 8.6
in the WHERE clause, 8.9
matching sizes of, 8.3.1
referencing, 8.2.1, 8.3.1
restrictions on, 8.3.3, 8.4.7, 8.5.1, 8.6.1, 8.7.1
used as input host variables, 8.3
used as output host variables, 8.3
using in dynamic SQL method 4, 15.6.19
using in dynamic SQL statements, 13.11.1
using the FOR clause with, 8.8
using to improve performance, C.3
when not allowed, 8.2.1
host language
definition of, 2.1.1, 2.1.1.1
host program
definition of, 2.1.1
host structures
arrays in, 4.8.1
declaring, 4.8
host variables, 6.1.1
assigning values to, 2.1.5
declarations, 18.2.1
declaring, 2.3.3, 18.2.1
definition of, 2.1.5
dummy, 13.4
host variable equivalencing, F.77
in EXECUTE statement, F.33
in OPEN statement, F.67
in user exits, 20.4.1
input versus output, 6.1.1
must resolve to an address, 4.2.2.1
overview of, 2.1.5
purpose of, 6.1
restrictions on, 4.2.2.1
rules for naming, 2.3.8
using in PL/SQL, 7.3

I

I variable in SQLDA
how value is set, 15.3.5
purpose of, 15.3.5
IAP in SQL*Forms
purpose of, 20.13
identifiers, ORACLE
how to form, F.3.5
implicit connections, 3.2.5
multiple, 3.2.5.2
single, 3.2.5.1
IN OUT parameter mode, 7.1.4
IN parameter mode, 7.1.4
INAME precompiler option, 10.5.28
INCLUDE
precompiler option, use of, 5.4.7
using to include the SQLCA, 9.6.1
INCLUDE option, 10.2.7.4
INCLUDE precompiler option, E.1.11
INCLUDE, SYS_INCLUDE Precompiler Options, 10.2.1
indexes
using to improve performance, C.7
indicator arrays, 8.3.2
example of using, 8.3.2
uses for, 8.3.2
INDICATOR keyword, 4.3.1
indicator variables
assigning values to, 6.2
association with host variables, 6.2
declarations, 18.2.1
declaring, 4.3, 18.2.1
definition of, 2.1.5
function of, 6.2
guidelines, 4.3.3
interpreting values of, 6.2
naming of, 4.8.4
referencing, 4.3
requirements for, 6.2
used with multibyte character strings, 4.11.6
using in PL/SQL, 7.4
using to detect NULLs, 6.2
using to detect truncated values, 6.2
using to insert NULLs, 6.2.1
using to return NULLs, 6.2.2
using to test for NULLs, 6.2.4
with structures, 4.8.4
in-doubt transaction, 3.13
INITFILE OTT parameter, 19.5.2.5
INITFUNC OTT parameter, 19.5.2.6
initialization function
calling, 19.3.2
tasks of, 19.3.3
input host variables
assigning values to, 6.1.1
definition of, 6.1.1
restrictions on, 6.1.1
uses for, 6.1.1
where allowed, 6.1.1
INSERT SQL statement, F.40
examples, F.40
INSERT statement
column list in, 6.3.2
example of, 6.3.2
INTO clause in, 6.3.2
purpose of, 6.3.2
requirements for, 6.3.2
using host arrays in, 8.5
VALUES clause in, 6.3.2
inserting
rows into tables and views, F.40
INTEGER datatype, 4.1.2.3
interface
native, 5.12
XA, 5.12
internal datatypes
definition of, 2.1.6
INTERVAL DAY TO SECOND datatype, 4.1.3.7
INTERVAL YEAR TO MONTH datatype, 4.1.3.6
INTO clause
for output host variables, 6.1.1
in FETCH statements, 6.5.3
in INSERT statements, 6.3.2
in SELECT statements, 6.3.1
of FETCH DESCRIPTOR statement, F.37
of FETCH statement, F.36
of SELECT statement, F.73
used with FETCH instead of SELECT, 6.5.1
intype file, 19.5.4
providing when running OTT, 19.2.4
structure of, 19.5.4
INTYPE OTT parameter, 19.5.2.2
INTYPE precompiler option, 10.5.30
invalid use
of precompiler preprocessor, 5.4.5.1

J

joins
restriction on, 6.9.1

L

L variable in SQLDA
how value is set, 15.3.3
purpose of, 15.3.3
label name
maximum length of, 9.8.2.5
large objects, G.1
Large Objects (LOBs), A.2.11
LDA, 5.10
remote and multiple connections, 5.10.2
setup for OCI version 8, 5.10.1
lines
continuation, 2.3.9
maximum length, 2.3.10
LINES precompiler option, 10.5.31
link
database link, 3.2.5.1
linking, 1.7, 2.6
on UNIX, 1.8.11
on VMS, 1.8.11
two-task, 2.6
Linking in an XA Library, E.1.8
LNAME precompiler option, 10.5.32
LNPROC
VMS link script, 1.8.11
LOB APPEND SQL statement, F.41
LOB APPEND statement, 16.4.1
LOB ASSIGN SQL statement, F.42
LOB ASSIGN statement, 16.4.2
LOB CLOSE SQL statement, F.43
LOB CLOSE statement, 16.4.3
LOB COPY SQL statement, F.44
LOB COPY statement, 16.4.4
LOB CREATE TEMPORARY SQL statement, F.45
LOB CREATE temporary statement, 16.4.5
LOB DESCRIBE SQL statement, F.46
LOB DISABLE BUFFERING SQL statement, F.47
LOB DISABLE BUFFERING statement, 16.4.6
LOB ENABLE BUFFERING SQL statement, F.48
LOB ENABLE BUFFERING statement, 16.4.7
LOB ERASE SQL statement, F.49
LOB ERASE statement, 16.4.8
LOB FILE CLOSE ALL SQL statement, F.50
LOB FILE CLOSE ALL statement, 16.4.9
LOB file close all statement, 16.4.9
LOB FILE SET SQL statement, F.51
LOB FILE SET statement, 16.4.10
LOB FLUSH BUFFER SQL statement, F.52
LOB FLUSH BUFFER statement, 16.4.11
LOB FREE TEMPORARY SQL statement, F.53
LOB FREE TEMPORARY statement, 16.4.12
LOB LOAD FROM FILE statement, 16.4.13
LOB LOAD SQL statement, F.54
LOB OPEN SQL statement, F.55
LOB OPEN statement, 16.4.14
LOB READ SQL statement, F.56
LOB READ statement, 16.4.15
LOB TRIM SQL statement, F.57
LOB WRITE SQL statement, F.58
LOBs, G.1
access methods, 16.2.1
BFILES, 16.1.2
buffering system, 16.3.2
external, 16.1.2
initializing, 16.2.3
internal, 16.1.1
locators, 16.1.5
locators in C, 16.2.2
temporary, 16.1.6
Location of Included Files, E.1.2
location of the Pro*C/C++ Executable, E.1.9
location transparency
how provided, 3.2.5.1
lock
released by ROLLBACK statement, F.71
LOCK TABLE statement
closes mall cursors, 3.11.2
example of, 3.11.2
locking tables with, 3.11.2
NOWAIT parameter in, 3.11.2
purpose of, 3.11.2
locking, 3.11
definition of, 3.3
explicit versus implicit, 3.11
modes of, 3.3
overriding default, 3.11
privileges needed to obtain, 3.14.2
table versus row, 3.11
uses for, 3.11
with FOR UPDATE OF, 3.11
with the LOCK TABLE statement, 3.11.2
logon, 3.1
Logon Data Area, 5.10
LONG datatype, 4.1.2.7
LONG RAW datatype, 4.1.2.13
LONG VARCHAR
datatype, 4.1.2.15
LONG VARRAW datatype, 4.1.2.16
LTYPE precompiler option, 10.5.33
lvalue, 4.2

M

M variable in SQLDA
how value is set, 15.3.8
purpose of, 15.3.8
macro precompiler options, 10.2.4
malloc()
example of using, 15.6.14
purpose of, 15.6.14
MAXLITERAL
default value for, 2.3.11
MAXLITERAL precompiler option, 10.5.35
MAXOPENCURSORS
precompiler option
effect on performance, C.9.2.2
for multiple cursors, 6.5.1
specifying for separate precompilation, 2.5.1.2
what it affects, C.9
MAXOPENCURSORS precompiler option, 10.5.36
metadata, 18.4.7
micro precompiler options, 10.2.4
Microsoft Visual Studio
integrating Pro*C/C++ into, H
migration
error message codes, A.3.11
include files, 5.4.10
migration from earlier releases, A.4
MODE interaction with DBMS, 10.5.16
MODE precompiler option, 10.5.37
modes, parameter, 7.1.4
msvcrt.lib runtime library, 1.7
multithreaded applications, G.1
sample program, 11.5
user-interface features
embedded SQL statements and directives, 11.4.2

N

N variable in SQLDA
how value is set, 15.3.1
purpose of, 15.3.1
naming
of cursors, 6.5.1
of database objects, F.3.5
of select-list items, 15.2.1
of SQL*Forms user exits, 20.14.1
NATIVE
value of DBMS option, 10.5.15, 10.5.16
native interface, 5.12
navigational access sample program, 17.11
nested tables, 18.1.1
creation, 18.1.1
network
communicating over, 3.2.1
protocols, 3.2.1
reducing traffic, C.4
new features, Preface
NLS parameters, 4.10
NLS_CURRENCY, 4.10
NLS_DATE_FORMAT, 4.10
NLS_DATE_LANGUAGE, 4.10
NLS_ISO_CURRENCY, 4.10
NLS_LANG, 4.10
NLS_LANGUAGE, 4.10
NLS_NUMERIC_CHARACTERS, 4.10
NLS_TERRITORY, 4.10
NLS_CHAR precompiler option, 10.5.38, 10.5.39
NLS_LOCAL precompiler option, 10.5.40
node
current, 3.2.3
definition of, 3.2.1
NOT FOUND condition
in the WHENEVER statement, 9.8.1.3
meaning of, 9.8.1.3
of WHENEVER directive, F.78
NOWAIT parameter
effect of, 3.11.2
in LOCK TABLE statements, 3.11.2
omitting, 3.11.2
NULLs
definition of, 2.1.5
detecting, 6.2
handling in dynamic SQL method 4, 15.4.3
hardcoding, 6.2.1
inserting, 6.2.1
restrictions on, 6.2.4
returning, 6.2.2
testing for, 6.2.4
using the sqlnul() function to test for, 15.4.3
null-terminated strings, 4.1.2.5.2
NUMBER datatype, 4.1.2.2
using the sqlprc() function with, 15.4.2.1
numeric expressions
cannot serve as host variables, 4.2.2.1

O

object cache, 17.3
OBJECT CREATE SQL statement, 17.5.3, F.59
OBJECT DELETE SQL statement, 17.5.6, F.60
OBJECT DEREF SQL statement, 17.5.4, F.61
OBJECT FLUSH SQL statement, F.62
OBJECT FLUSH SQL statements, 17.5.8
OBJECT GET SQL statement, 17.6.2, F.63
OBJECT RELEASE SQL statement, F.64
OBJECT SET SQL statement, 17.6.1, F.65
Object Type Translator (OTT), A.2.10, G.4
command line, 19.2.3
command line syntax, 19.5.1
creating types in the database, 19.2.1
default name mapping, 19.5.7
outtype file, 19.2.8
parameters, 19.5.2
providing an intype file, 19.2.4
reference, 19.5
restriction, 19.5.8
using, 19, 19.2
using with Pro*C/C++, 19.4
Object Types, A.2.9
OBJECT UPDATE SQL statement, 17.5.7, F.66
objects
accessing with OCI, 19.3.1
demonstration program, G.1
introduction to, 17.1
manipulating with OCI, 19.3.1
persistent, 17.3.1
persistent versus transient copies of, 17.3.1
references to, 17.1.2
support, 17
transient, 17.3.1
types, 17.1.1
using object types in Pro*C/C++, 17.2
OBJECTS precompiler option, 10.5.23, 10.5.41, 17.8.3
OCI applications
using the OTT with, 19.3
OCI calls, 1.8.3
embedding, 5.10
in an X/A environment, 5.12.1.3
OCI onblon() call
not used to connect, 5.10
OCI orlon() call
not used to connect, 5.10
OCI Release 8, 5.8
accessing and manipulating objects, 19.3.1
embedding in Pro*C/C++, 5.9.3
interfacing to, 5.9
parameters in the environment handle, 5.8.2
SQLLIB extensions, 5.8
OCI types
declaring, 17.14.1
manipulating, 17.14.3
OCIDate, 17.14
OCINumber, 17.14
OCIRaw, 17.14
OCIString, 17.14
using in embedded SQL, 17.14.2
OCIDate, 17.14
declaring, 17.14.1
ocidfn.h, 5.10
OCINumber, 17.14
declaring, 17.14.1
OCIRaw, 17.14
declaring, 17.14.1
OCIString, 17.14
declaring, 17.14.1
ONAME precompiler option, 10.5.42
OPEN CURSOR statement, 14.5.11
OPEN DESCRIPTOR SQL statement, F.68
OPEN SQL statement, F.67
OPEN statement, 6.5.2
dependence on precompiler options, 6.5.2
effect of, 6.5.2
example of, 6.5.2
examples, F.67
purpose of, 6.5, 6.5.2
use in dynamic SQL method 3, 13.9.3
use in dynamic SQL method 4, 15.6.11
opening
a cursor variable, 4.5.3
cursors, F.67, F.68
operators
C versus SQL, 2.3.12
restrictions on, 2.3.12
optimization approach, C.5.1
optimizer hints, C.5.1
in C, 6.7
in C++, 6.7.1, 12.2.1
ORACA, 9.2.2
example of using, 9.10.6
using to gather cursor cache statistics, 9.10.5.11
ORACA precompiler option, 10.5.27, 10.5.34, 10.5.43, 10.5.44, 10.5.45, 10.5.50
oraca.h header file, 5.5.4, 5.5.4
ORACAID component, 9.10.5.1
Oracle
datatypes, 2.1.6
Forms Version 4, 20.5
Open Gateway
using the ROWID datatype with, 4.1.2.9
Toolset, 20.5
Oracle Call Interface version 7, 5.10
Oracle Communications Area, 9.10
Oracle names
how to form, F.3.5
Oracle Net
connecting to Oracle through, 3.2.2
connection syntax, 3.2.1
for concurrent connections, 3.2.2
function of, 3.2.1
orasql9.lib, H.2.2
orasql9.lib library file, 1.7
OTT (Object Type Translator), G.4
OTT parameter TRANSITIVE, 19.5.2.12
OTT parameters
CASE, 19.5.2.10
CODE, 19.5.2.4
CONFIG, 19.5.2.8
ERRTYPE, 19.5.2.9
HFILE, 19.5.2.7
INITFILE, 19.5.2.5
INITFUNC, 19.5.2.6
INTYPE, 19.5.2.2
OUTTYPE, 19.5.2.3
SCHEMA_NAMES, 19.5.2.11
USERID, 19.5.2.1
where they appear, 19.5.3
OUT parameter mode, 7.1.4
output host variables
assigning values to, 6.1.1
definition of, 6.1.1
outtype file, 19.5.4
when running OTT, 19.2.8
OUTTYPE OTT parameter, 19.5.2.3
overhead
reducing, C.2

P

PAGELEN
precompiler option, 10.5.46
parameter modes, 7.1.4
PARSE
precompiler option, 10.5.47
parse error offset
how to interpret, 9.5.4
use in error reporting, 9.5.4
PARSE option, 10.2.7.5
parsing dynamic statements
PREPARE statement, F.69
password
defining, 3.1
passwords
changing at runtime, A.2.4
paths
checking, G.4
checking the .pre files, G.5
pcmake.bat, G.3.1
pcscfg.cfg configuration file, 10.2.7.1
performance
eliminating extra parsing to improve, C.9
optimizing SQL statements to improve, C.5
reasons for poor, C.1
using embedded PL/SQL to improve, C.4
using HOLD_CURSOR to improve, C.9.2.4
using host arrays to improve, C.3
using indexes to improve, C.7
using RELEASE_CURSOR to improve, C.9.2.4
using row-level locking to improve, C.8
persistent copies of objects, 17.3.1
persistent objects, 17.3.1
placeholders
duplicate, 13.8.1, 13.12.2
naming, 13.8.1
proper order of, 13.8.1
use in dynamic SQL statements, 13.4
PL/SQL, 1.4
anonymous block
used to open a cursor variable, 4.5.3
cursor FOR loop, 7.1.3
description of, 1.4
difference from SQL, 1.4
executing a block using the AT clause, 3.2.4.1.2
integration with database server, 7.1.2
main advantage of, 1.4
packages, 7.1.5
PL/SQL tables, 7.1.6
procedures and functions, 7.1.4
RECORD type
cannot be bound to a C struct, 4.8.2
relationship with SQL, 1.4
setting SQLCA, 9.6.4
user-defined records, 7.1.7
PL/SQL blocks
embedded in precompiler programs, F.32
pointer
definition of, 4.9
to cursor variables
restrictions on, 4.5.1
pointer variables
declaring, 4.9.1
determining size of referenced value, 4.9.2
referencing, 4.9.2
referencing struct members with, 4.9.2
.pre files
checking the paths, G.5
precedence of precompiler options, 10.2.3, 10.2.3
precision
definition of, 15.4.2.1
using sqlprc() to extract, 15.4.2.1
when not specified, 15.4.2.1
precompilation
conditional, 2.4
separate, 2.5, 2.5
precompilation unit, 3.1, 10.3
precompiled header files, 5.5, A.2.2
C++ restrictions, 5.5.5.2
CODE option, 5.5.5.2, 5.5.5.2
PARSE option, 5.5.5.2
precompiler options
alphabetized list, 10.3, 10.5
AUTO_CONNECT, 10.5.1
case sensitivity, 10.1.1
CHAR_MAP, 5.1.1, 10.5.2, A.2.6
CLOSE_ON_COMMIT, 6.5.1, 6.6.2, 10.5.4
CODE, 10.5.8, 10.5.8
COMP_CHARSET, 10.5.9, 10.5.9, 10.5.10, 10.5.10
CONFIG, 10.5.3, 10.5.5, 10.5.6, 10.5.7, 10.5.11, 10.5.12, 10.5.14
configuration files, 10.2.2
CPP_SUFFIX, 10.5.13, 10.5.13
DBMS, 10.5.15, 10.5.16
DEF_SQLCODE, 10.5.17
DEFINE, 10.5.18
determining current value, 10.2.3
DURATION, 10.5.20
DYNAMIC, 14.4
entering, 10.4
entering on the command line, 10.4.1
ERRORS, 10.5.21
ERRTYPE, 10.5.22
FIPS, 10.5.24
HEADER, 10.5.25
HOLD_CURSOR, 10.5.25, 10.5.26
INAME, 10.5.28
INCLUDE, 10.5.29, 10.5.29
INTYPE, 10.5.30
LINES, 10.5.31
list of, 10.5
LNAME, 10.5.32
LTYPE, 10.5.33
MAXLITERAL, 2.3.11, 10.5.35
MAXOPENCURSORS, 10.5.36
micro and macro, 10.2.4
MODE, 10.5.37, 14.4
NLS_CHAR, 10.5.38, 10.5.39
NLS_LOCAL, 10.5.40
OBJECTS, 10.5.23, 10.5.41
ONAME, 10.5.42
ORACA, 10.5.27, 10.5.34, 10.5.43, 10.5.44, 10.5.45, 10.5.50
PAGELEN, 10.5.46
PARSE, 10.5.47
precedence, 10.2.3
PREFETCH, 10.5.48
RELEASE_CURSOR, 10.5.49
scope, 10.2.6
scope of, 10.3
SELECT_ERROR, 10.5.51, 10.5.52
specifying, 10.4.1
SQLCHECK, 17.8.6
syntax for, 10.4.1
SYS_INCLUDE, 10.5.53
THREADS, 10.5.54, 11.4.1
TYPE_CODE, 10.5.55, 14.4
UNSAFE_NULL, 10.5.56
USERID, 10.5.57
using, 10.5
VARCHAR, 10.5.59
VERSION, 10.5.60
Precompiler Options, SYS_INCLUDE, INCLUDE, 10.2.1
predefined symbols, 2.4.1
PREFETCH precompiler option, 6.6.3, 10.5.48, A.3.3
PREPARE SQL statement, F.69
PREPARE statement, 14.5.5
effect on data definition statements, 13.6.2
examples, F.69
use in dynamic SQL, 13.8, 13.9.1
use in dynamic SQL method 4, 15.6.6
preprocessor
example, 5.6.2
EXEC ORACLE directives, 5.6
preprocessor directives
directives not supported by Pro*C, 5.4.2.1
preprocessor, support of, 4.1
private SQL area
association with cursors, 2.1.9
definition of, 2.1.9
opening of, 2.1.9
purpose of, C.9.2.1
Pro*C/C++
configuration files, 10.2.7.1
integrating into Microsoft Visual Studio, H
library file, H.2.2
linking, 1.7
Pro*C/C++ Precompiler
common uses for, 1.2
Globalization Support, 4.10
new database types, 17.15
new features, A
object support in, 17
runtime context, 5.8.1
use of PL/SQL with, 7.2
using OTT with, 19.4
procedural database extension, 7.1.5
program termination
normal versus abnormal, 3.9
programming guidelines, 2.3
project files, G.4

Q

queries
association with cursors, 6.5
forwarding, 3.2.5.1
incorrectly coded, 6.3.1
kinds of, 6.3
requirements for, 6.3
returning more than one row, 6.3
single-row versus multirow, 6.3.1

R

RAW datatype, 4.1.2.11
READ ONLY parameter
in SET TRANSACTION statement, 3.10
read-only transactions
description of, 3.10
example of, 3.10
how ended, 3.10
record, 7.1.7
REF
structure for, 17.13.1
REF (reference to object), 17.1.2
REFERENCE clause
in TYPE statement, 5.3.2.1
reference semantics (ANSI dynamic SQL), 14.3.1
references to objects (REFs)
declaring, 17.13.2
using, 17.13
using in embedded SQL, 17.13.3
referencing
of host arrays, 8.2.1, 8.3.1
REFs
declaring, 17.13.2, 17.13.2
using, 17.13, 17.13
using in embedded SQL, 17.13.3
REGISTER CONNECT SQL statement, F.70
RELEASE option, 3.9
if omitted, 3.9
in COMMIT statement, 3.6
in ROLLBACK statement, 3.8
purpose of, 3.6
restriction on, 3.8
RELEASE_CURSOR
precompiler option
what it affects, C.9
RELEASE_CURSOR option
of ORACLE Precompilers, F.8
using to improve performance, C.9.2.4
RELEASE_CURSOR precompiler option, 10.5.49
remote database
declaration of, F.24
reserved namespaces, B.2
reserved words and keywords, B.1
resource manager, 5.12
restrictions
on AT clause, 3.2.4.1.3
on Comments, 13.12.4
on CURRENT OF clause, 6.9.1
on declaring cursors, 6.5.1
on FOR clause, 8.8.1
on host arrays, 8.3.3, 8.4.7, 8.5.1, 8.6.1, 8.7.1
on input host variables, 6.1.1
on NULLs, 6.2.4
on separate precompilation, 2.5.1.1
on SET TRANSACTION statement, 3.10
use of CURRENT OF clause, 8.3.3
retrieving rows from a table
embedded SQL, F.73
return codes
user exits, 20.8
returning clause
DELETE, 6.3.4
in INSERT, 6.4
in UPDATE, 6.3.3
returning clauses, 6.4
roll back
to a savepoint, F.72
to the same savepoint multiple times, F.71
ROLLBACK SQL statement, F.71
ROLLBACK statement, 3.8
effect of, 3.8
ending a transaction, F.71
example of, 3.8
examples, F.71
in error handling routines, 3.8
purpose of, 3.8
RELEASE option in, 3.8
TO SAVEPOINT clause in, 3.8
using in a PL/SQL block, 3.14.3
where to place, 3.8
rollbacks
automatic, 3.8
function of, 3.4
statement-level, 3.8.1
row locks
acquiring with FOR UPDATE OF, 3.11.1
advantage of, C.8
using to improve performance, C.8
when acquired, 3.11.1.1
when released, 3.11.1.1
ROWID
logical, 4.1.2.9
pseudocolumn, 3.12
using to mimic CURRENT OF, 3.12, 8.11
universal, 4.1.2.9, 4.1.2.9, A.3.7
ROWID datatype, 4.1.2.9
rows
fetching from cursors, F.36, F.37
inserting into tables and views, F.40
updating, F.76
rows-processed count
use in error reporting, 9.5.3
runtime context
establishing, 5.8.1
terminating, 5.8.1
runtime type checking, 17.8.7

S

S variable in SQLDA
how value is set, 15.3.7
purpose of, 15.3.7
sample database tables
DEPT table, 2.7
EMP table, 2.7
sample object type code, 17.11
sample programs
ANSIDYN1, G.1, G.1
ansidyn1.pc, 14.6.1
ANSIDYN2, G.1, G.1
ansidyn2.pc, 14.6.2
building, G.3
calldemo.sql, with sample9.pc, 7.7.2.1
COLDEMO1, G.1, G.1
coldemo1.pc, 18.5.5
CPPDEMO1, G.1, G.1
cppdemo1.pc, 12.3.1
CPPDEMO2, G.1, G.1
cppdemo2.pc, 12.3.2
CPPDEMO3, G.1, G.1
cppdemo3.pc, 12.3.3
cursor variable demos, 4.5.7
CV_DEMO, G.1, G.1
cv_demo.pc, 4.5.7.2
cv_demo.sql, 4.5.7.1
default drive, G.4
described, G.1
EMPCLASS, G.1, G.1
extp1.pc, 7.8.2
how to precompile, 2.8, 2.9
LOBDEMO1, G.1, G.1
lobdemo1.pc, 16.6.3
location of, 1.6, G.1
MLTTHRD1, G.1, G.1
NAVDEMO1, G.1, G.1
navdemo1.pc, 17.11
OBJDEMO1, G.1, G.1
ORACA, G.1, G.1
oraca.pc, 9.10.6, 9.10.6
PLSSAM, G.1, G.1
SAMPLE, G.1, G.1
SAMPLE1, G.1, G.1
SAMPLE10, G.1, G.1
sample10.pc, 15.7
SAMPLE11, G.1, G.1
sample11.pc, 4.5.7.2
SAMPLE12, G.1, G.1
sample12.pc, 15.6.20
sample1.pc, 2.8
SAMPLE2, G.1, G.1
sample2.pc, 4.8.5
SAMPLE3, G.1, G.1
sample3.pc, 8.4.5
SAMPLE4, G.1, G.1
sample4.pc, 5.3.5
SAMPLE5, G.1, G.1
sample5.pc, 20.11
SAMPLE6, G.1, G.1
sample6.pc, 13.7.1
SAMPLE7, G.1, G.1
sample7.pc, 13.8.2
SAMPLE8, G.1, G.1
sample8.pc, 13.9.6
SAMPLE9, G.1, G.1
sample9.pc, 7.7.2.1
setting the path, G.4
setting the path for the .pre files, G.5
SQLVCP, G.1, G.1
sqlvcp.pc, 4.4.7
WINSAM, G.1, G.1
sample tables
building, G.2
SAVEPOINT SQL statement, F.72
SAVEPOINT statement, F.72
example of, 3.7
examples, F.72
purpose of, 3.7
savepoints
creating, F.72
definition of, 3.7
uses for, 3.7
when erased, 3.7
Scale
using SQLPRC to extract, F.77
scale
definition of, 15.4.2.1, F.77
using sqlprc() to extract, 15.4.2.1
when negative, 15.4.2.1, F.77
SCHEMA_NAMES OTT parameter, 19.5.2.11
usage, 19.5.6
scope
of a cursor variable, 4.5.1
of DECLARE STATEMENT directive, F.25
of precompiler options, 10.3
of the EXEC ORACLE statement, 10.4.2.2
of WHENEVER statement, 9.8.5
search condition
definition of, 6.3.5
in the WHERE clause, 6.3.5
select descriptor, 15.2.1, 15.2.1
information in, 13.10.2
select list
definition of, 6.3.1
number of items in, 6.3.1
using the free() function for, 15.6.17
using the malloc() function for, 15.6.14
SELECT SQL statement, F.73
select SQLDA
purpose of, 15.1.3
SELECT statement, 6.3.1
clauses available for, 6.3.1.1
embedded SQL examples, F.73
example of, 6.3.1
INTO clause in, 6.3.1
purpose of, 6.3.1
testing, 6.3.1.1
using host arrays in, 8.4
WHERE clause in, 6.3.1
SELECT_ERROR
precompiler option, 6.3.1, 10.5.51, 10.5.52
semantic checking
controlling with the SQLCHECK option, D.2
definition of, D.1
enabling, D.3.1
with the SQLCHECK option, D.1
separate precompilation
guidelines for, 2.5.1
referencing cursors for, 2.5.1.1
restrictions on, 2.5.1.1
specifying MAXOPENCURSORS for, 2.5.1.2
using a single SQLCA with, 2.5.1.3
server
integration with PL/SQL, 7.1.2
session
definition of, 3.3
sessions
beginning, F.16
SET clause
in UPDATE statements, 6.3.3
purpose of, 6.3.3
use of subqueries in, 6.3.3
SET DESCRIPTOR statement, 14.5.4, F.74
SET TRANSACTION statement
example of, 3.10
purpose of, 3.10
READ ONLY parameter in, 3.10
requirements for, 3.10
restrictions on, 3.10
Size of an Integer and ROWID, E.1.5
SQL
benefits of, 1.3
Embedded SQL, 1.3
nature of, 1.3
need for, 1.3
SQL Communications Area, 9.2.2
SQLCA, 9.6
SQL Descriptor Area
SQLDA, 13.10.1, 15.2.1
SQL directives
CONTEXT USE, 11.4.2.3, F.21
DECLARE DATABASE, F.24
DECLARE STATEMENT, F.25
DECLARE TABLE, F.26
DECLARE TYPE, F.27
TYPE, F.75
VAR, F.77
WHENEVER, F.78
SQL statements
ALLOCATE, F.4
ALLOCATE DESCRIPTOR TYPE, F.5
CACHE FREE ALL, F.6
CALL, 7.7.2.3, F.7
CLOSE, F.8
COMMIT, F.15
concerns when executing, 6.3
CONNECT, F.16
CONTEXT ALLOCATE, F.17, F.17
CONTEXT FREE, F.18, F.18
CONTEXT OBJECT OPTION GET, F.19
CONTEXT OBJECT OPTION SET, F.20
DEALLOCATE DESCRIPTOR, F.22
DELETE, F.28
DESCRIBE, F.29
DESCRIBE DESCRIPTOR, F.30
ENABLE THREADS, F.31
executable versus directive, 2.1.1.1
EXECUTE, F.33
EXECUTE ... END-EXEC, F.32
EXECUTE IMMEDIATE, F.35
FETCH, F.36
FETCH DESCRIPTOR, F.37
for defining and controlling transactions, 3.4
for manipulating a cursor, 6.3, 6.5
FREE, F.38
INSERT, F.40
LOB APPEND, F.41
LOB ASSIGN, F.42
LOB CLOSE, F.43
LOB COPY, F.44
LOB CREATE, F.45
LOB DESCRIBE, F.46
LOB DISABLE BUFFERING, F.47
LOB ENABLE BUFFERING, F.48
LOB ERASE, F.49
LOB FILE CLOSE, F.50
LOB FILE SET, F.51
LOB FLUSH BUFFER, F.52
LOB FREE TEMPORARY, F.53
LOB LOAD, F.54
LOB OPEN, F.55
LOB READ, F.56
LOB TRIM, F.57
LOB WRITE, F.58
OBJECT CREATE, F.59
OBJECT DELETE, F.60
OBJECT DEREF, F.61
OBJECT FLUSH, F.62
OBJECT GET, F.63
OBJECT RELEASE, F.64
OBJECT SET, F.65
OBJECT UPDATE, F.66
OPEN, F.67
OPEN DESCRIPTOR, F.68
optimizing to improve performance, C.5
PREPARE, F.69
REGISTER CONNECT, F.70
ROLLBACK, F.71
rules for executing, C.5
SAVEPOINT, F.72, F.72
SELECT, F.73
SET DESCRIPTOR, F.74
summary of, F.1
types of, 2.1.1.1
UPDATE, F.76
SQL*Forms
display error screen in, 20.8
IAP constants in, 20.8.1
returning values to, 20.8
reverse return code switch in, 20.8
SQL*Net
connecting using Version 2, 3.1.2
SQL*Plus, 1.3
using to test SELECT statements, 6.3.1.1
versus embedded SQL, 1.3
SQL, dynamic, 2.1.3
SQL_CURSOR, F.4
SQL_SINGLE_RCTX
defined constant, 5.11
definition of, 5.9
sql2oci.h header file, 5.5.4, 5.5.4
sqlald() function
example of using, 15.6.3
purpose of, 15.2.4
syntax for, 15.2.4
sqlaldt() function
see SQLSQLDAAlloc, 5.11
sqlapr.h header file, 5.5.4, 5.5.4
SQLCA, 9.2.2, 9.5
components in, 9.6.3
components set for a PL/SQL block, 9.6.4
declaring, 9.6.1
description of, 9.6
explicit versus implicit checking of, 9.2.2
including multiple times, 5.4.7
overview of, 2.1.11
SQLCABC component in, 9.6.3.2
SQLCAID component in, 9.6.3.1
sqlerrd, 9.6.3.6
sqlerrd[2] component in, 9.6.3.6
sqlerrmc component in, 9.6.3.4
sqlerrml component in, 9.6.3.4
sqlwarn, 9.6.3.7
use in separate precompilations, 2.5.1.3
using more than one, 9.6
using with SQL*Net, 9.6
sqlca.h
listing of, 9.6.2
use of SQLCA_STORAGE_CLASS with, 2.5.1.3
sqlca.h header file, 5.5.4
SQLCAID component, 9.6.3.1
SQLCDAFromResultSetCursor(), 5.11
SQLCDAGetCurrent, 5.11
sqlcdat()
see SQLCDAFromResultSetCursor(), 5.11
SQLCHECK option
restrictions on, D.2
what it affects, D.2
SQLCHECK precompiler option, 17.8.6, D.3.1.1, D.3.1.2
SQLCHECK support for objects, 17.8.6
sqlclu() function
example of using, 15.6.17
purpose of, 15.6.17
syntax for, 15.6.17
sqlclut() function
see SQLSQLDAFree(), 5.11
SQLCODE
with MODE=ANSI, 10.5.37
sqlcode
component in SQLCA, 9.2.2, 9.5.1
SQLCODE status variable
declaring, 9.4
when declared with the SQLCA, 9.4
when used, 9.4
sqlcpr.h, 9.7
sqlcpr.h header file, 5.5.4
sqlcurt() function
see SQLDAToResultSetCursor(), 5.11
SQLDA
bind versus select, 13.10.3
C variable in, 15.3.9
definition of, 13.10.3
F variable in, 15.3.6
I variable in, 15.3.5
information stored in, 13.10.3
L variable in, 15.3.3
M variable in, 15.3.8
N variable in, 15.3.1
purpose of, 13.10.1
S variable in, 15.3.7
struct, contents of, 15.2.3
structure of, 15.3
T variable in, 15.3.4
use in dynamic SQL method 4, 15.2.1
V variable in, 15.3.2
X variable in, 15.3.10
Y variable in, 15.3.11
Z variable in, 15.3.12
sqlda.h, 15.1.3
SQLDAToResultSetCursor(), 5.11
SQLEnvGet function in SQLLIB, 5.9.1
SQLEnvGet(), 5.11
sqlerrd
component, 9.5.4, 9.6.3.6
sqlerrd[2] component, 9.5.3, 9.6.3.6
returns N or rows fetched, 8.4.3
use with data manipulation statements, 8.4.2
sqlerrm
component in the SQLCA, 9.2.2
sqlerrmc component, 9.6.3.4
sqlerrml component, 9.6.3.4
SQLERROR
WHENEVER directive condition, F.78
SQLERROR condition
in the WHENEVER statement, 9.8.1.2
meaning of, 9.8.1.2
SQLErrorGetText(), 5.11
SQLExtProcError(), 5.11, 7.8.3
sqlglm(), 9.7
sqlglm() function, 9.7, 9.7
example of using, 9.7
parameters of, 9.7
sqlglmt()
see SQLErrorGetText, 5.11
sqlgls() function, 9.9
example of use, 4.4.7
sample program for, 9.9.2
see SQLLIB
function SQLStmGetText, 4.4.7
sqlglst() function
see SQLStmtGetText, 5.11
sqlld2() function, 5.12.1.3
sqlld2t() function
see SQLLDAGetName, 5.11
SQLLDAGetName, 5.11
sqlldat() function
see SQLCDAGetCurrent, 5.11
SQLLIB
and embedded SQL, 2.1.2
extensions for OCI interoperability, 5.8
function
SQLCDAFromResultSetCursor, 5.11
function SQLCDAGetCurrent, 5.11
function SQLColumnNullCheck, 5.11
function SQLDAFree, 5.11
function SQLDAToResultSetCursor, 5.11
function SQLEnvGet, 5.9.1, 5.11
function SQLErrorGetText, 5.11
function SQLExtProcError, 5.11, 7.8.3
function SQLLDAGetName, 5.11
function SQLNumberPrecV6, 5.11
function SQLNumberPrecV7, 5.11
function SQLRowidGet, 5.11
function SQLStmtGetText(), 5.11
function SQLSvcCtxGet, 5.9.2, 5.11
function SQLVarcharGetLength, 4.4.6
new names for functions, A.2.7
new names for public functions, 5.11
SQLLIB function
SQLSQLDAAlloc, 5.11
SQLVarcharGetLength, 5.11
sqlnul() function
example of using, 15.4.3
purpose of, 15.4.3
syntax for, 15.4.3
use of with T variable, 15.3.4
sqlnult() function
see SQLColumnNullCheck(), 5.11
SQLNumberPrecV6, 5.11
SQLNumberPrecV7, 5.11
sqlpr2() function, 15.4.2.1
sqlpr2t() function
see SQLNumberPrecV7, 5.11
sqlprc() function, 15.4.2.1, 15.4.2.1
sqlprct() function
see SQLNumberPrecV6, 5.11
SQLRowidGet(), 5.11
SQLSQLDAAlloc, 5.11
SQLSQLDAFree(), 5.11
SQLSTATE
class codes, 9.3.2
declaring, 9.3.1
mapping to Oracle errors, 9.3.2
status codes, 9.3.2
status variable, 9.2.1, 9.3
using, 9.3.3
values, 9.3.2
with MODE=ANSI, 10.5.37
SQLStmtGetText, 5.11
SQLStmtGetText() function, G.1
SQLSvcCtxGet function in SQLLIB, 5.9.2
SQLSvcCtxGet(), 5.11
SQLVarcharGetLength, 5.11
sqlvcp() function, G.1
sqlvcp() function, see SQLLIB
function SQLVarcharGetLength, 4.4.6
sqlvcpt() function
see SQLVarcharGetLength, 5.11
sqlwarn
flag, 9.6.3.7
SQLWARNING
WHENEVER directive condition, F.78
SQLWARNING condition
in the WHENEVER statement, 9.8.1.1
meaning of, 9.8.1.1
Standard Header Files, E.1.1
statement-level rollback
description of, 3.8.1
to break deadlocks, 3.8.1
status codes
meaning of, 9.5.1
status variables, 9.2.1
STOP action
in the WHENEVER statement, 9.8.2.6
of WHENEVER directive, F.78
result of, 9.8.2.6
stored procedures
program example, 7.7.2.1
stored subprograms
calling, 7.7.2.1
creating, 7.7.1
packaged versus standalone, 7.7
stored versus inline, 7.7
STRING datatype, 4.1.2.5
string host variables
declaring, 5.1.4
Struct Component Alignment, E.1.4
structs
array of, 8.10, A.2.1
as host variables, 4.8
C, using, 17.12
for collection object types, 18.2
generating C structs for a REF, 17.13.1
pointers as host variables, 4.9.3
structs (structures)
cannot be nested, 4.8.3
structures (structs)
nesting not permitted for host, 4.8.3
subqueries
definition of, 6.3.2.1
example of, 6.3.2.1, 6.3.3
uses for, 6.3.2.1
using in the SET clause, 6.3.3
using in the VALUES clause, 6.3.2.1
symbols
defining, 2.4.1
syntax checking
controlling with the SQLCHECK option, D.2
definition of, D.1
syntax diagram
description of, F.3
how to read, F.3
how to use, F.3
symbols used in, F.3
syntax, embedded SQL, 2.1.2
SYS_INCLUDE
system header files in C++, 12.2.4
SYS_INCLUDE precompiler option, 10.5.53
SYS_INCLUDE, INCLUDE Precompiler Options, 10.2.1
SYSDBA/SYSOPER Privileges, A.3.8
System Configuration File, E.1.10
system configuration file, 10.2.3
system failure
effect on transactions, 3.5
System Global Area (SGA), 7.7
system header files
specifying the location of, 12.2.4
system-specific Oracle documentation, 1.8.11, 2.6, 3.2.2, 5.4.4, 5.12.1.4, 20
system-specific reference, 4.1.2.3, 10.1.1, 10.2.2, 10.5.29, 10.5.53

T

T variable in SQLDA
how value is set, 15.3.4
purpose of, 15.3.4
table locks
acquiring with LOCK TABLE, 3.11.2
effect of, 3.11.2
row share, 3.11.2
when released, 3.11.2
tables
inserting rows into, F.40
nested, 18.1.1
updating rows in, F.76
terminal
encoding scheme, 4.10
termination, program
normal versus abnormal, 3.9
THREADS
precompiler option, 10.5.54, 11.4.1
threads, F.17
allocating context, 11.4.2.2, F.17
enabling, 11.4.2.1, F.31
freeing context, 11.4.2.4, F.18
use context, 11.4.2.3
TIMESTAMP datatype, 4.1.3.3
TIMESTAMP WITH LOCAL TIME ZONE datatype, 4.1.3.5
TIMESTAMP WITH TIME ZONE datatype, 4.1.3.4
TO clause
of ROLLBACK statement, F.71
TO SAVEPOINT clause
in ROLLBACK statement, 3.8
purpose of, 3.8
restriction on, 3.8
Toolset
Oracle, 20.5
trace facility
function of, C.5.2
using to improve performance, C.5.2
transaction processing
overview of, 2.1.10
statements used for, 2.1.10
transaction processing monitor, 5.12
transactions
committing, F.15
contents of, 2.1.10, 3.5
definition of, 2.1.10
description of, 3.4
distributed, F.71
failure during, 3.5
guarding databases with, 3.4
guidelines for, 3.14.1
how to begin, 3.5
how to end, 3.5
making permanent, 3.6
read-only, 3.10
rolling back, F.71
subdividing with savepoints, 3.7
terminating, 3.6
undoing, 3.8
undoing parts of, 3.7
when rolled back automatically, 3.5, 3.8
transient copies of objects, 17.3.1
transient objects, 17.3.1
TRANSITIVE OTT parameter, 19.5.2.12
truncated values
detecting, 6.2, 7.4.2
truncation error
when generated, 6.2.5
tuning, performance, C.1
two-task
linking, 2.6
type checking at runtime, 17.8.7
TYPE directive
examples, F.75
type inheritance, 17.1.3
example, 17.10
IS OF type operator, 17.1.3
example, 17.1.3, 17.1.3
TREAT operator, 17.1.3
example, 17.1.3, 17.1.3
TYPE SQL directive, F.75
TYPE_CODE
precompiler option, 10.5.55

U

undo a transaction, F.71
Unicode character set, 5.1.5
Unicode variables, A.3.1
unions
cannot be nested in host structures, 4.8.3
not permitted as host structures, 4.8.3
universal ROWID, 4.1.2.9, A.3.7
UNIX
linking a Pro*C application under, 1.8.11
UNSAFE_NULL precompiler option, 10.5.56
UNSIGNED datatype, 4.1.2.14
UPDATE SQL statement, F.76
UPDATE statement
embedded SQL examples, F.76
example of, 6.3.2.1
purpose of, 6.3.2.1
SET clause in, 6.3.3
using host arrays in, 8.6
WHERE clause in, 6.3.3
updating
rows in tables and views, F.76
use
thread context, 11.4.2.3, F.21
user configuration file
to set precompiler options, 10.2.3
User Exits, E.1.13
user exits
calling from a SQL*Forms trigger, 20.6
common uses for, 20.2
example of, 20.9
kinds of statements allowed in, 20.4
linking into IAP, 20.13
meaning of codes returned by, 20.8
naming, 20.14.1
passing parameters to, 20.7
requirements for variables in, 20.4.1
running the GENXTB form, 20.12
running the GENXTB utility for, 20.12
use of WHENEVER statement in, 20.8.2
user session
definition of, 3.3
user-defined record, 7.1.7
user-defined stored function
used in WHERE clause, 6.3.5
user-defined type equivalencing, F.75
USERID option
when required, 10.5.57
USERID OTT parameter, 19.5.2.1
USERID precompiler option, 10.5.57
using with the SQLCHECK option, D.3.1.1
usernames
defining, 3.1
using C structures, 17.12
USING clause
in CONNECT statement, 3.2.4.1
in the EXECUTE statement, 13.8.1
of FETCH statement, F.36
of OPEN statement, F.67
purpose of, 13.8.1
using indicator variables in, 13.8.1
using collection types, 17.13
using dbstring
Oracle Net database specification string, F.16
Using REFs in Embedded SQL, 17.13.3

V

V variable in SQLDA
how value is set, 15.3.2
purpose of, 15.3.2
V7
value of DBMS option, 10.5.15, 10.5.16
VALUES clause
in INS, 6.3.2
of e;mbedded SQL INSERT statement, F.40
of INSERT statement, F.40
use of subqueries in, 6.3.2.1
VAR directive
examples, F.77
VAR SQL directive, F.77
VAR statement
syntax for, 5.3.1, 5.3.2
VARCHAR
arrays of, 8.2
VARCHAR datatype, 4.1.2.8
VARCHAR precompiler option, 10.5.59
VARCHAR pseudotype
requirements for using with PL/SQL, 7.3.3
VARCHAR variables
advantages of, 4.4.1
declaring, 4.4.1
length member in, 4.4.1
must be passed to a function by reference, 4.4.5
specifying the length of, 4.4.1
structure of, 4.4.1
using macros to define length of, 5.4.1
versus character arrays, 5.1.4.2
VARCHAR2 datatype, 4.1.2.1, 5.3.3
variables, 2.1.5
cursor, 4.5
host, 18.2.1
indicator, 18.2.1
VARNUM datatype, 4.1.2.6
VARRAW datatype, 4.1.2.12
varrays
creation, 18.1.2
varying length arrays, 18.1.2
VERSION precompiler option, 10.5.60, 17.8.1
views
inserting rows into, F.40
updating rows in, F.76
VMS
linking a precompiler application, 1.8.11

W

warning flags
use in error reporting, 9.5.2
WHENEVER directive
examples, F.78
WHENEVER SQL directive, F.78
WHENEVER statement
automatic checking of SQLCA with, 9.8.1
CONTINUE action in, 9.8.2.1
DO action in, 9.8.2.2
DO BREAK action in, 9.8.2.3
DO CONTINUE action in, 9.8.2.4
examples of, 9.8.3
GOTO action in, 9.8.2.5
guidelines for, 9.8.6
maintaining addressability for, 9.8.6.4
new actions, A.2.8
NOT FOUND condition in, 9.8.1.3
overview of, 2.1.11
scope of, 9.8.5
SQLERROR condition in, 9.8.1.2
SQLWARNING condition in, 9.8.1.1
STOP action in, 9.8.2.6
use in user exits, 20.8.2
using to avoid infinite loops, 9.8.6.3
using to handle end-of-data conditions, 9.8.6.2
where to place, 9.8.6.1
WHERE clause
host arrays in, 8.9
if omitted, 6.3.5
in DELETE statements, 6.3.4
in SELECT statements, 6.3.1
in UPDATE statements, 6.3.3
purpose of, 6.3.5
search condition in, 6.3.5
WHERE CURRENT OF clause
CURRENT OF clause, 6.9
WITH HOLD
clause of DECLARE CURSOR statement, 6.5.1
WORK option
of COMMIT statement, F.15
of ROLLBACK statement, F.71

X

X variable in SQLDA
how value is set, 15.3.10
purpose of, 15.3.10
XA interface, 5.12
X/Open, 5.12
application development, 5.12

Y

Y variable in SQLDA
how value is set, 15.3.11
purpose of, 15.3.11

Z

Z variable in SQLDA
how value is set, 15.3.12
purpose of, 15.3.12
PK G^;PK+AOEBPS/pc_agsmp.htm Sample Programs

G Sample Programs

This chapter describes how to build Oracle database applications with Pro*C/C++ using the sample programs that are included with this release.

This chapter contains the following topics:

Sample Program Descriptions

When you install Pro*C/C++, Oracle Universal Installer copies a set of Pro*C/C++ sample programs to the ORACLE_BASE\ORACLE_HOME\precomp\demo\proc directory. These sample programs are listed in Table G-1, "Sample Programs" and described in the subsequent section.

When built, the sample programs that Oracle provides produce .exe executables.

For some sample programs, as indicated in the Notes column of the table, you must run the SQL scripts in the sample directory before you precompile and run the sample program. The SQL scripts set up the correct tables and data so that the sample programs run correctly. These SQL scripts are located in the ORACLE_BASE\ORACLE_HOME\precomp\demo\sql directory.

Oracle Corporation recommends that you build and run these sample programs to verify that Pro*C/C++ has been installed successfully and operates correctly. You can delete the programs after you use them.

You can build the sample program by using a batch file called pcmake.bat or by using Microsoft Visual Studio.

Table G-1 Sample Programs

Sample ProgramSource FilesPro*C/C++ GUI Project FileMSVC Compiler Project FileNotes

ANSIDYN1

ansidyn1.pc

ansidyn1.pre

ansidyn1.dsp

-

ANSIDYN2

ansidyn2.pc

ansidyn2.pre

ansidyn2.dsp

-

COLDEMO1

coldemo1.h coldemo1.pc coldemo1.sql coldemo1.typ

coldemo1.pre

coldemo1.dsp

Run coldemo1.sql and the Object Type Translator before building coldemo1.

CPDEMO1

cpdemo1.pc

cpdemo1.pre

cpdemo1.dsp

-

CPDEMO2

cpdemo2.pc

cpdemo2.pre

cpdemo2.dsp

-

CPPDEMO1

cppdemo1.pc

cppdemo1.pre

cppdemo1.dsp

-

CPPDEMO2

cppdemo2.pc empclass.pc cppdemo2.sql empclass.h

cppdemo2.pre

cppdemo2.dsp

Run cppdemo2.sql before building cppdemo2.

CPPDEMO3

cppdemo3.pc

cppdemo3.pre

cppdemo3.dsp

-

CVDEMO

cv_demo.pc cv_demo.sql

cv_demo.pre

cv_demo.dsp

Run cv_demo.sql before building cv_demo.

EMPCLASS

cppdemo2.pc empclass.pc cppdemo2.sql empclass.h

empclass.pre

empclass.dsp

Run cppdemo2.sql before building empclass.

LOBDEMO1

lobdemo1.h lobdemo1.pc lobdemo1.sql

lobdemo1.pre

lobdemo1.dsp

Run lobdemo1.sql before building lobdemo1.

MLTTHRD1

mltthrd1.pc mltthrd1.sql

mltthrd1.pre

mltthrd1.dsp

Run mltthrd1.sql before building mltthrd1.

NAVDEMO1

navdemo1.h navdemo1.pc navdemo1.sql navdemo1.typ

navdemo1.pre

navdemo1.dsp

Run navdemo1.sql and the Object Type Translator before building navdemo1.

OBJDEMO1

objdemo1.h objdemo1.pc objdemo1.sql objdemo1.typ

objdemo1.pre

objdemo1.dsp

Run objdemo1.sql and the Object Type Translator before building objdemo1.

ORACA

oraca.pc oracatst.sql

oraca.pre

oraca.dsp

Run oracatst.sql before building oraca.

PLSSAM

plssam.pc

plssam.pre

plssam.dsp

-

SAMPLE

sample.pc

sample.pre

sample.dsp

-

SAMPLE1

sample1.pc

sample1.pre

sample1.dsp

-

SAMPLE2

sample2.pc

sample2.pre

sample2.dsp

-

SAMPLE3

sample3.pc

sample3.pre

sample3.dsp

-

SAMPLE4

sample4.pc

sample4.pre

sample4.dsp

-

SAMPLE5

sample5.pc exampbld.sql examplod.sql

sample5.pre

sample5.dsp

Run exampbld.sql, then run examplod.sql, before building sample5.

SAMPLE6

sample6.pc

sample6.pre

sample6.dsp

-

SAMPLE7

sample7.pc

sample7.pre

sample7.dsp

-

SAMPLE8

sample8.pc

sample8.pre

sample8.dsp

-

SAMPLE9

sample9.pc calldemo.sql

sample9.pre

sample9.dsp

Run calldemo.sql before building sample9.

SAMPLE10

sample10.pc

sample10.pre

sample10.dsp

-

SAMPLE11

sample11.pc sample11.sql

sample11.pre

sample11.dsp

Run sample11.sql before building sample11.

SAMPLE12

sample12.pc

sample12.pre

sample12.dsp

-

SCDEMO1

scdemo1.pc

scdemo1.pre

scdemo1.dsp

-

SCDEMO2

scdemo2.pc

scdemo2.pre

scdemo2.dsp

-

SQLVCP

sqlvcp.pc

sqlvcp.pre

sqlvcp.dsp

-

WINSAM

resource.h winsam.h winsam.ico winsam.pc winsam.rc

winsam.pre

winsam.dsp

-


The following subsections describe the functionality of the sample programs.

ANSIDYN1

Demonstrates using ANSI dynamic SQL to process SQL statements that are not known until runtime. This program is intended to demonstrate the simplest (though not the most efficient) approach to using ANSI dynamic SQL.

ANSIDYN2

Demonstrates using ANSI dynamic SQL to process SQL statements that are not known until runtime. This program uses the Oracle extensions for batch processing and reference semantics.

COLDEMO1

Fetches census information for California counties. This program demonstrates various ways to navigate through collection-typed database columns.

CPDEMO1

Demonstrates how the connection pool feature can be used. It also shows how different connection pool options can be used to optimize performance.

CPDEMO2

Demonstrates connection pool feature with relatively complex set of SQL statements and shows how performance gain depends on the kind of SQL statements used by the program.

CPPDEMO1

Prompts the user for an employee number, then queries the emp table for the employee's name, salary, and commission. This program uses indicator variables (in an indicator struct) to determine whether the commission is NULL.

CPPDEMO2

Retrieves the names of all employees in a given department from the emp table (dynamic SQL Method 3).

CPPDEMO3

Finds all salespeople and prints their names and total earnings (including commissions). This program is an example of C++ inheritance.

CVDEMO

Declares and opens a ref cursor.

EMPCLASS

The EMPCLASS and CPPDEMO2 files were written to provide an example of how to write Pro*C/C++ programs within a C++ framework. EMPCLASS encapsulates a specific query on the emp table and is implemented using a cursor variable. EMPCLASS instantiates an instance of that query and provides cursor variable functionality (that is: open, fetch, close) through C++ member functions that belong to the emp class. The empclass.pc file is not a standalone demo program. It was written to be used by the cppdemo2 demo program. To use the emp class, you have to write a driver (cppdemo2.pc) which declares an instance of the emp class and issues calls to the member functions of that class.

LOBDEMO1

Fetches and adds crime records to the database based on the person's Social Security Number. This program demonstrates the mechanisms for accessing and storing large objects (LOBs) to tables and manipulating LOBs through the stored procedures available through the DBMS_LOB package.

MLTTHRD1

Shows how to use threading in conjunction with precompilers. The program creates as many sessions as there are threads.

NAVDEMO1

Demonstrates navigational access to objects in the object cache.

OBJDEMO1

Demonstrates the use of objects. This program manipulates the object types person and address.

ORACA

Demonstrates how to use ORACA to determine various performance parameters at runtime.

PLSSAM

Demonstrates the use of embedded PL/SQL blocks. This program prompts you for an employee name that already resides in a database. It then executes a PL/SQL block, which returns the results of four SELECT statements.

SAMPLE

Adds new employee records to the personnel database and checks database integrity. The employee numbers in the database are automatically selected using the current maximum employee number +10.

SAMPLE1

Logs on to an Oracle database, prompts the user for an employee number, queries the database for the employee's name, salary, and commission, and displays the result. The program continues until the user enters 0 as the employee number.

SAMPLE2

Logs on to an Oracle database, declares and opens a cursor, fetches the names, salaries, and commissions of all salespeople, displays the results, and closes the cursor.

SAMPLE3

Logs on to an Oracle database, declares and opens a cursor, fetches in batches using arrays, and prints the results using the print_rows() function.

SAMPLE4

Demonstrates the use of type equivalencies using the LONG VARRAW external datatype.

SAMPLE5

Prompts the user for an account number and a debit amount. The program verifies that the account number is valid and that there are sufficient funds to cover the withdrawal before it debits the account. This program shows the use of embedded SQL.

SAMPLE6

Creates a table, inserts a row, commits insert, and drops the table (dynamic SQL Method 1).

SAMPLE7

Inserts two rows into the emp table and deletes them (dynamic SQL Method 2).

SAMPLE8

Retrieves the names of all employees in a given department from the emp table (dynamic SQL Method 3).

SAMPLE9

Connects to an Oracle database using the scott/tiger account. The program declares several host arrays and calls a PL/SQL stored procedure (GET_EMPLOYEES in the CALLDEMO package). The PL/SQL procedure returns up to ASIZE values. The program keeps calling GET_EMPLOYEES, getting ASIZE arrays each time, and printing the values, until all rows have been retrieved.

SAMPLE10

Connects to an Oracle database using your username and password and prompts for a SQL statement. You can enter any legal SQL statement, but you must use regular SQL syntax, not embedded SQL. Your statement is processed. If the statement is a query, the rows fetched are displayed (dynamic SQL Method 4).

SAMPLE11

Fetches from the emp table, using a cursor variable. The cursor is opened in the stored PL/SQL procedure open_cur, in the EMP_DEMO_PKG package.

SAMPLE12

Demonstrates how to do array fetches using dynamic SQL Method 4.

SCDEMO1

Demonstrates how the scrollable cursor can be used with Oracle dynamic SQL Method 4. Scrollable cursor can also be used with ANSI dynamic SQL Method 4.

SCDEMO2

Demonstrates the use of scrollable cursor with host arrays.

SQLVCP

Demonstrates how you can use the sqlvcp() function to determine the actual size of a VARCHAR struct. The size is then used as an offset to increment a pointer that steps through an array of VARCHA0Rs.

This program also demonstrates how to use the SQLStmtGetText() function to retrieve the text of the last SQL statement that was executed.

WINSAM

Adds new employee records to the personnel database and checks database integrity. You can enter as many employee names as you want and perform the SQL commands by selecting the appropriate buttons in the Employee Record dialog box. This is a GUI version of the sample program.

Building the Demonstration Tables

To run the sample programs, you must have a database account with the username scott and the password tiger. Also, you must have a database with the sample tables emp and dept. This account is included in the starter database for your Oracle Database 10g server. If the account does not exist on your database, create the account before running the sample programs. If your database does not contain emp and dept tables, you can use the demobld.sql script to create them.

To build the sample tables:

  1. Start SQL*Plus

  2. Connect as username scott with the password tiger.

  3. Run the demobld.sql script:

    SQL> @ORACLE_BASE\ORACLE_HOME\sqlplus\demo\demobld.sql;
    

Building the Sample Programs

You can build the sample programs in two ways:

Using pcmake.bat

The pcmake.bat file for compiling Pro*C/C++ demos is found in the following location:

ORACLE_BASE\ORACLE_HOME\precomp\demo\proc

This batch file is designed to illustrate how Pro*C/C++ applications can be built at the command prompt.

In order to use this batch file, Microsoft Visual Studio must be installed. The environment variable MSVCDir must be set. Pro*C/C++ command line options and linker options vary depending on your application.

You can use this file to build a demo, to build sample1 for example:

  1. Navigate to the location of the demo file and enter the following at the command prompt:

    C:\> CD ORACLE_BASE\ORACLE_HOME\precomp\demo\proc\sample1
    
    
  2. Enter the following:

    % pcmake sample1

Using Microsoft Visual Studio

Microsoft Visual Studio project files have an extension of.dsp. The.dsp files in the ORACLE_BASE\ORACLE_HOME\precomp\demo\proc directory guide and control the steps necessary to precompile, compile, and link the sample programs.

Pro*C/C++, SQL*Plus, and the Object Type Translator have been integrated into the Microsoft Visual Studio sample project files. You do not have to run Pro*C/C++, SQL*Plus, and the Object Type Translator separately before compilation.


See Also:


To build a sample program:

  1. Open a Microsoft Visual Studio project file, such as sample1.dsp.

  2. Check the paths in the project file to ensure that they correspond to the configuration of your system. If they do not, change the paths accordingly. Your system may produce error messages if the paths to all components are not correct.


    Note:

    All of the sample programs were created with C:\oracle\ora92 as the default drive.

  1. Select Build > Rebuild All. Microsoft Visual Studio creates the executable.

Setting the Path for the Sample .pre Files

By default the sample .pre files search for their corresponding .pc files in the C:\oracle\ora92 directory where C:\ is the drive that you are using, and oracle\ora92 represents the location of the Oracle home. If the Oracle base and Oracle home directories are different on your computer, you must change the directory path to the correct path.

To change the directory path for a sample .pre file:

  1. In Pro*C/C++, open the .pre file.

  2. Double-click the filename in the Input File area to display the Input File dialog box.

  3. Change the directory path to the correct path.

  4. Click Open.

PKNٛϛPK+AOEBPS/img/insert.gifQbGIF87aX ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X  H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ8`A O@ DPB >|'p 8`A&, <0… :|1ĉ+Z1#B O@ $0@ H*\ȰÇ˗/? O@(? 4x!B O@ DPB >QD-^Ę`|˧QF%w0_| ˧1c|5jԨQF5j1_>ӨQFSOa|5 ̗OF5jԨQFK/Ƅ4jԨQ| %W0_|ӨQF5jԨQF%̗Oc|4jԨQc| !g0| Y̗OF5jԨQF;08_|˗O`|'0_|O@ DPB >x0|g0_|'0_|W0߿|˗/߿| ̗/_/|#F1bĈ#F1bĈ#Fg0_/_>/߿|_ G0_Ĉ#F1|/|˗_|/|_ ̗/߿|_|E1bĈ#F1bĈ#F1|`>/|˗O`>"F1bĈs`| ̗o`|_ ̗o`|o| H*\ȰÇ#JHŋ)˗/|`>˗/߿|`>`> 4xA$XA .da|9O@ /|/_|_>08_> ̗/_>$XA .dC%NXE g0_>`> /|˗O`>2B̗1cFs`/__>_ ̗/| /_|e̘1cƌ3f̘1|O@ /@߿|7?'p "4/a„ &L0a‚;`;O`/_> O`˗O`|˗/| <0… :|1ĉ+Z0 $+` ,X| ,X`,X` 0 s0 S|,h „8 | H*\ȰÇ#JHň;/߿|!70|/^0Ŋ;``xE.^xŋ/^(1߿|o`>3ŋh1߿|˗_'P /8`A&TaÂ:tСC:tСC:l08|?'p H*\ȰaB$8? 4x`>'p|_ O@8`A&Ta Hp ,h „ 2l!Ĉ'RH1_>3/|!G0|-Z0|Y/|+o`| g0|Yh"| gѢE-ZhѢł`>Co`,Zha>/|˗O`70|-Z0E-ZhѢE'[| Yh"|M̧0ńhѢE hѢE-ZhѢ| Yoa> ? 0 <0B$/_+X| W` W| O@  <0| O@ DPB >QDc| %̗`| hQa| A'1|[Oa>Y0|-ZhѢE-Za>-̇0|-:̗0_|-g1a注0E EgѢE-ZhѢ| YoaKϢE拘/b,&̷0|ha,ZhѢE-Za>1W0_>!W0E +a>$拘oa> -w0|h`>,ZhѢE-Z!|,h ` +(0_ $` +|+X| ` H8|,H0_ W` ,X`  <0… :|1ĉ+.gb|g0|̗/| ̗/߿|70߿| ̗_/_|˗/_|M1E w0߿|O7? ? 4xa& <0… :|1ĉ+.gѢ|9G0߿|/_/߿|O`˗_˗/߿|˗O`>棘/b>#`/_|/_|/_|-G1E-ZhѢEYx0_|9W0_70_|/|o`|/_>/_|Y0_|/|'0__>,Z/_|-ZhѢE-ZgѢ|'p@O`|˗/_ /|O` ߿|? HAQDhqa>`>/_3/|'0__|#Ϣ|Y(1| /_|'0_|g0EhѢE-Zhb>;`3O`/_>0@7p|7? 8p8p'p "L`_/_|'0| .\p| .\p… .\p… .\pa .\o|-\pƒ.o| .\` [(0… .\(0… .\p… .\p… .\o… ˷_|-T0 H!D_>C!Ḃ|CX0B"Da| H*\ȰÇ#JH|-20_|-Bg`,Z"|-Z$ϢE-Z`> 4xaB8| ,X` `| W` ,X` ,X| ? 4xaB -\0… .\X0… .\p… .\` .\H0| .\p`-/… .̷p| [p… -\0… .\h0… .\p… .\` .\H0| .\ |O@'p "L? 4x_>C!B"0 <(? 4xaB cȐ!C 2dȐ!C cȐ!ÅcȐ!C 2dȐ!C 1,!C 2dȐ!C 2!C 2dȐ!C 2 |߿| @/_ ? 4xaB 6tbD (QD%J0D%J(QD +O`> `>70| -'QD%J(`>$J(QD%&'QD%J(a> O`3o`|˗0|%J(QD{OD%J(Q|%J(QD `> W0| W0߿| W0D%J(QD+OD%J(Q|I(QD%>̗ |'߿'P o70,h „ 2l!Ĉw0|&N8qĉ'̗`'N8qC$8? _> 7_˗o| 8`> 4xaB 6tbD)VxcF 'p "Lp!ÆBH0_> O`>+/| ̗/߿| 'QD%J(Qb|%J(QD%"'QD%J0߿|80߿#? /_|'P࿁80| H*\ȰÇ#Jtoĉ'N8qb|'N8qĉM8Q`'N8qĉ'N8qĉ'N8qĉ'N -̷0H A $H A c> Ka#`> A $H A |̇0|!g0| A $H A $H ;`>O |70߿|7߿ _>| <0… :|1ĉ+Z1ƍ;z0| 70_|O`|˗/߿|/_>˗/߿| '0|  $H A $H Abw0|g0_>70_/_>_a>@ $H A $H; | O/|70߿|8_@ (?#(`> 4xaB 6tbD)VxA$XA .dC%N4/߿|W0_>O`|˗_| ̗/| ̗`!g0E)RH"E)RH`|(RH"E)270|/| O@G'? _8_>$XA .dC%NXEe̘1cƌ+`c>70|̗1cƌ3f̘1cƌ e̘1cƌ3`>Øa|!W0_>2f̘1cƌ3f̘qa3f̘1#|5̗0_Fk/cƌ3f̘1cƌ˘1cƌ32w0| eOa2f̘1cƌ3f̘a3f̘1#|%0_1̗0_ƌ3f̘1cƌ36̗1cƌ3fd/a0_>˘1cƌ2(2(# <0… :|1D'p`>$XP |,h B H@ <0… :|1ĉ+Za3f̘1#|3f̘1cƌ3f̘1cƌ e̘1cƌ˘1cƌ3f̘1cƌ3f\/cƌ3f0_ƌ3f̘1cƌ3f̘1|3f̘1cF2f̘1cƌ3f̘1cƌ˘1cƌ32̗1cƌ3f̘1cƌ3f̸0_ƌ3f̘a3f̘1cƌ3f̘1cƅ2f̘1cƌ e̘1cƌ3>O| H H H*\ȰÇ 1bĈ#F1b#F1bĈ#FD/_僘/_ 1bĈ#F(0_Ĉ#F1bĈE1bĈ#F1| k/|#F1bĈE1bĈ#F1_Ĉ#F1bĈ#1|#1bĈ#F1bĈ#F1b|#F1bĈ#FX0|3Oa>)/_|E1bĈ!1bĈ#F1b#F1bĈ#F$`̇0_|;a>$XA .dC B"D!B0D!B"D!Bg0@ O|o@/_| G_>$XA .dC B"D!B0D!B"D!BW0_/|g0_/_>/߿|W0D!B|!B"D!B\"D!B"D3_>g0_| /|/|;"D!B`>!B"D!."D!B"D ˗`/A70O |'p |,h „ 2l? 4x`>$XA .dC%B7qĉ'N8qb|3_|˗`̗O`|3_'0|'N8` M8qĉ'Noĉ'N8qD 3_|;`'p@_'0_>8`A&TaÅ:ϡC:tСCСC:tСCW0|;`:TϡC:tX0C9tСC:tСÂ:tСC:tС C/_>s`>8`A8`A&TaÆ:ϡC:tСCСC:tСCw0Ása>:t|СC:tСC СC:tСĊ0CС|:tСC:ϡC:tСC3ϡC:tСC:,/a5!|:tСÄ:ϡC:tСC 'p 8`A&TaC!F8qa>;/_>h0_|)RHa> 8`A$XA .dC ;`>%J(QD%`>'p 'p  'p "Lp!Æ {0|>|Ç>$`>>|Ç>|a>>|Ç>|0CÇ>||{Ç>|Æ{Ç>||{/_>|Ç{(0Ç>|Ç"O@8`A&TaC!F`> O@3h`>$XA .dCE1bĈ#F1"| 3/bĈ#F1bĄ˗a"F1bĈ拘/bĈ#F1bć;/bĈ#F1bĄk/b#F1bć"1bĈ#Fa1bĈ#F1a>拘/bĈ#Fa"2O@ , O| H*\Ȱ|+0 <0B H|O@'p "< O@ H0A G| $/,h „ 2l!ć"拸0_Dg0_#F0_|Ea> 0_0_>%1|E1bĈ#>1_ĄE/_#Fb 1"| %0_Ĉ 1̧0|-1_Ĉ#F1|ED/bĂc/bĄ HA$XA"`>"D|!|"D|CH0|ˇp`>O@ DPB >0_|s/| 11"| qa ;/_|#0+(__߿| /G`>$XA K`>Sx0̧PB *TPB *O| ̧`> ;O!| *L/B)Tx0ƒ ;o`>70| G0߿| ̗O`> ;`)LOBw0|) 3/_>/_>/_˗/_|)$OB)Tx0B)D`/_/|̗`> G08_ /'0_|(?70_|/_(0 /_ o7p@8p| H*\ȰÇ拘/"|'0_|˗/߿| '0|/_> a c`""Q`_| 70| G0__>``|_|`| /_/_>#O`G0_D拘/bĈ#Fa"̗`|'0_| '0߿|+`|E80|̗0_E/߿|˗O`>|߿߿'P`>o|7p|7P`|o`| 7p`>˗_>˗O` _(`>8` g`| H*\ȰÇ拘!|O ߿8߿|| 08 A$ <`|˗_| /_|'0|O` @ (?#/_> $80A$H| H*\ȰÇ拘a3o`|˗O`|O` W0|9̗0_D _|˗_|+/| ;`| 70| G0߿|O`|/|/|70߿|'0߿|'0߿| G0_|!W0_ă拘/bĈ#Fa[`|˗_>˗o`>'p|O G| $H|#/_˗O`>$H A$H|#`>/|'0_|`#80A|0@? `>/߿|'P` 7p|8p7p@8p| H*\ȰÇ拘oa>"F<`>H0_|0@o@ ̗/_8p`8p| H*$` ;` .` [P`̷p… .\p… [h0| [p!|[(0| #`˗O``&̷p| .\`>W0|-0 HAg0_><80A? 4xaB 6t|-0_Ĉ%0_|+` 8߿|'p` 8p 8pO@ DP!|-Oa .4/a-\80| [p… .\p…-4oa-\`[80B [a̷p| .\`>˷0… .,Oa [o| .\p… .\a-̷`| .̗o|-$o|-\h0| [_ .\H0_|[80… ˗o|-\X0| [p… .\p…-4oa˷pa|-,08` ,| 480A ,ϠA4hРA ,`A ˗/_> 4h_|4H`>'p ;H0'p "Lp!ÆB|/b"O@ O@ Dx0_BK`"̗0aA$XA O@ D(`> 4xa>$XA ˷0B.\p… .\p!| So… .\p`%̗o| -4o… .\p… .\p…-̷` .\p… .\0B[p… .o| ˷`|-̷` .\p… .\p… ̷0B.\p… .\p!| Ko… .\`-0 'p ,/,h „ 2l!Ĉ'R*VXbŊİ0_Ŋ+&̇0|+ ̗0_|+VXbŊ+&w0|+VXbE&W0_Ŋ+.̗`>*VOa*VXbŊ+V\`>*VXbŊQO@ DPB :O@ D`> 4xaB 6tbD)Vd  <0… :|a#F1"|E0|#F1bĈ#F1|#F1bĈE1bĈ;/bD1bĈ#F1bĈ1bĈ#F|/bĈ#FQ`1bĈ#F1bĈ#"1bĈ#F0_Ĉ#F1| 8` Hp`>$XA .dC%NXѢ|/^xb|/^xbQ̗oa/^xŋ/*wŋ/6wŋ/C| ]xŋ/^xQa/^xa/^x1| =̗0ŋ/^xŋxŋxŋwq`>.^xŋ/^0ŋ/^0ŋ/^`_|O`>xŋ/^x|/^xb|/^x|̗_>/߿|G0O@ DPB >QD-2wŋ/6wŋ/ G0| ̗/@@  <0… :|1ĉ+Zlŋ/^lŋ/^/_|'`> '?(? 4xaB 6tbD)V0ŋ/^0ŋ/^h0|˗O`˗`/^xŋ/Jwŋ/6wŋ/w0|'0_wŋ/^xʼn.^xņ.^xŃ.wŋ/^xʼn.^xņ.^xŃ.wŋ/^xʼn.^xņ.^xE.wŋ/^xE.^xņ.^xE.wŋ/^xE.^0 <0…8| H*\ȰÇ`|#F1bĈ#F1bĈEb#Fa#F1bĆ"1bĈ#F1bĈ#FH0_Ĉ!1bD1bĈ#Ft0 O@ DPB >QD-^#Ɖ0ba>1bĈ#F1bĈ#FÈqb>o`|'P࿁ |$80,h „ 2l!Ĉ'Rh"ƌ7r0G/_>/߿| 70_|o`3oa>=zѣG=zc>3_| 70߿| ̗O`'0|W0|=zѣG=zc|=/|/| W0|%/߿| '0_|ѣG=zѣG=z<`>3_/_|(@/߿| G_>_|8`A&TaC!F8bE1fԸcG+ϣC$8?'0_7P`8p`70|(`> 4xaB 6tbD)VxcF9v? 4xaB/|70߿| 70_| ̗o`W0| H*\ȰÇ#JHŋ3jȱ>^/| '0_|'P|_>_#/_|? 4xaB 6tbD)VxcF9v/G>~DǏ?~Ǐ?~|?"Ǐ?~Ǐ?~_Ǐ?~Ǐ?~/Ǐ}Ǐ?~Ǐ?~G>~Ǐ?~Ǐ?#|?~Ǐ?~Ǐ'p "LpA$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y`>'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? 1|"E)RH"E)RH"KOH"E)RH"E)R| )RȈ ? 4xaB 6tbD)VxcFk#G9r`|9rȑ#G9rqc8rȑ#Gȑ#G9rȑ#G970G9r0|9rȑ#G9rc>ȑ#Gk#G9rȑ#G9^0_>9rȑa8rȑ#G9rȑ!|,h B H |,h  H*\ȰÇ so`#F1bĈ#F1bĈ#F/bĂ1|"F1bĈ sO`#F1bĈ#F1bĈ#F/bD3O` 1bĈ#Fa|#F1bĈ#F1bĈ#F80_3`1bĈ#*O@8`A$? 4xaB 6tbD)VxcƄ4B0F4jԨb>/a>5jԨQF5jOc| iOF-[`>KOF5jԨQF)1|%ӨQƊ3`4jԨQF5jԨqb>;O|5jX1_| 5̧QF5jԨQFi08`A&OB *TPB SX0 <0… :|1ĉ+Z1|5jOF){Oa4jԨQF5jԨqb>5V̧QFA̗`>4jԨQF5jԨqb>5V̧QFIO| H| H*\ȰÇ#JHŋ3̧QƊ4jԨb>iԨQF5jԨQ|5jOF)1F5jԨQF5ŅQƊ4jԨb>iԨQF5jԨQ| ]O@ O@ D(0_„ &L0a„ &/_|`|AO@ H0,h „ 2l!|!*"D˗"D!BT/_|!B"DKaA|/_|%"D!Bd"D B`>!B|!B"DCOa B|Oa> BL0 <0!A$H0_ +X | +X`| ,X`O@ DPB .Ç>|Pa +/a̗0||>oa|˗| ˗a|{/_|Æ˗/| w`> o|@_߿| o|o`|'P8`A&TaC!"g0|Ca!g0|Ex0_Ĉ %̗`|)q`| =̇0_ O`|/| /| '0|_> /|O` 70|`#F1băg0|̗/| /|/_>+`>W0_ĈE0| 5̗0_Dsoa o` ̗O`˗`o`|_˗߿|_߿|O| 70|7p| H*\ȰÇ!W0|'0_|˗/߿|O`O`|G0|3`>3` G0|(߿(0 /8_O@ w0A 3o`'0_>_O`__|;`| 70| w_>$XA .dÇ'0|/_| /߿|'0߿| G0_|g0| B\`| ̗o`>`>w0|5g0ą c/|A80߿| /_ |(߿߿(߿|/߿'߿?#/߿| 70_|'PO@ DPB >L0 OO@ o|/| /| 08P`>8`A H/| G0|70|g0A ;/_O ߿| o /_'p  O@߿|/߿8_#80| 70|O`>#/| G`>_>/8P ,h „ 2la|1w0|3/߿|/߿| /| '0|C`{0| ̗_>_>3o`>;o`3/|˗/߿|G0_| w0_2̗/_| '0_/| /| '0| ̗_>/|O` /|_>Ç>d`> ;`> ˗O`|`|/߿|/߿߿|O|7p? 4H0/߿|70? |߿`>|_#(0| /A G A Gp`>˗/|O`|'0@߿|7߿'_߿|#?/߿G?/ <0… :T!|w0Ç g0|{0_>0@_? #08_>8` 0@߿ H`A|$H|  <0… :|/|!B" "w0|Ax0|;| /|70߿| /_|#`|W0||߿| o ̗o@/_8p` ̗? 4xaB 6t0|>|Ã*0_|̗0|{H0| G0߿|/_> | o| / o8_|`>? 8p@8_ooO@ DPB :0Ç>|` -̷0Ç)0CG0Ç3`>0| ;`0Ç>|a=|Ç {0_| {p`>paC C`sa̗`> 0Ç>|Pa|=|Ç {0_>a|3a|+Ç0Â.` {(0=|Ç{(0Ç>|! <`>8` H8`  P`>|(0_| =L|&̗0|{Ç>|0Ç>|`>|Ç W0ÇS`|p`|3/_|{Ç>|0Ç>|`>|Ç= |,h „8?O@ 0 O@ 0 H_  <0… :|a#F1|#F1bĈ̇0_Ĉ#F1bĆ3/bĈ#Fa"F1b|E1bĈ#w0|#F1bĈS`#F1bD1bĈ ˗/_Ĉ#F1b|g0_Ĉ#F1bĆ˗/_Ĉ#F1b+/bĈ'p "Lp!ÆB(Q ,h „ 2l!Ĉ 8`A&TaC!F? 4xaB 6װaÆ 6lذaCkذaÆ 6lذaCkذaÆ 6lذaÄ6lذaÆ5lذaÆ 6lPa>6lذaÆ 6lPa6lذaÆ 6l0a 6lذaÆ 6lذaÆ &`> 4x ,h „ 2la>|Ç>|Ç>|Ç>dOa|>,/_>||>|Ç>|Ç>|Ç>|0_|.Ç>LÇ>|Ç>|Ç>|ÇCÆ>|Ç=|Ç>|Ç>|Ç>|!|9a>||>|Ç>|Ç>|Ç>|0|=|/Ç>|`>|C=C=C=C=C=C ? /_>'P_ <0… :,Ç>|Ç>|Ç>|Ç#`>'0_|˗_| ̗/|˗_>|Ç{Ç>|Ç>|Ç>|Ç W0_>70_/_>_>|Ç=|Ç>|Ç>|Ç>|C;/_| ̗o`|'`>/߿| 0 <0… :$ <0… :|1ĉ+Z1ƍ;"W0| ̗/|˗_>_>ѣG=zѣG=z|'`>G@ <0… :|1ĉ+Z1ƍ;zb>g0_Ȑ!C 2dȐ!C 2|5̗`!C 2dȐ!C 2dȌB22dȐ!C 2dȐ!C 1_HB 2dȐ!C 2dȐ!9 y0_!C 2dȐ!C 2dH  <80_|8`A&TaC!F8bE1fԸcGA0 <0,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*K;;PKdKQQPK+AOEBPS/img/lnpcc009.gifGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲa|a0_|˗o`-[lٲe˖ '0|0|o`>Әe˖-[lٲc˗/| '0_|'p`'P` O`˗_|'p`#(߿#8? 4xaB 6tbD)VxcF/|˗O`>`/|/_|70߿|˗_ /|˗O`>#G9rȑ#G9bO'߿_(0߿|O@/_> Gp`|/_|O/߿_8`A&TaC!F8bE1fԸQa'0_| '0߿|'0߿| ̗o`|˗O`>_o`__>9rȑ#G9rx1|˗O`|˗/߿|'0|#/_|8߿70߿ /߿_߿|߿|? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzj>XÊ|˗+ք˗/VXE+/_>X +/_>X~w0_|Xw0_|Xb/_|Ê5_ˇ+֌˗| ˇ+֋˗+|ˇ+VI̗/VI̗/VX#櫘/_>NU̗/VXw1_|*͗b|aŊu!'p  ˗? 4xaB 6tbă$&̗/D%J(QD%J(q`> 'QD%J0ą(QD%J(QD%'a|$J(QD'a|$J(QD%J(Qć$F̗/D%J(Q"|#˗OD%J(QD%Jd/D'QD%JX0_>˗/D%J(QD%J0D'QD%J(0D'QD%J(QD%'Q|I(QD%(`|$J(Q"$H"$H"(_>$XA ˗OB *TPB *̗OB ˗/,h „ 2l!Ĉ'Rh1EgѢE-gb|YhѢE-Zha|-̗/E-Z80_>˗ϢE-ZhѢEY0_|-Zhb>˗ϢE-ZhѢEY0_|-Zhb>˗ϢE-ZhѢEY0_|,Zh"|,Z|/_|-ZhѢE-Ng|YhѢE,Z/_>-ZhѢE#hb|,Zh"|-V̗/E-ZhѢEhѢ@ <0… :l/Ç"̗/Ç>|Ç>|`>\/_>||>|0_|>|Ç>|Á=|a|{Ç̗Ç˗/Ç>|Ç>|0Ç>/_>|a|>|P`|>|Ç>|Æ>|!|=|Ç{ÇÇ>|Ç*̗Ç̗/Ç>|0_>|x0_|>|Ç>|C? 4xaB ̗/_Æ 6lpa 6l`|6lذaÆ 6lذaÆ װaÆ &̗/_ 6lذ|6lذaÄװaÆ 6lذaÆ 6l80_Æ 6l0_| 6lذa6lذaÆkذaÆ 6lذaÆ 6aÆ 6l(0_| 6lذaÁ6lذaÆװaÆ 6lذaÆ 6\/_Æ 6lذ`|6lذaC5̗/_ 5D!|5/_ 6lذaÆ 6lذ! <0… "̗/C:tH0s0Â#/asСC:tСC СC:/_>:t_|#_|˗O`| 'p`> ̗/| '0_|/_|'0_|7p|O@ DPB >Qă(RHb|Q70߿| ̗/EIG0_|˗O`|/_/_>/| /|70߿| 0|70_|)RH"EQH"Ń壘_ /|)71|0@'P`˗o|O @/| 7p@8p/|  <0… :|1|$J(Q'1߿|(߿ H˗0|˗O`70|o` /߿|'0߿|/|%/_| |7? 4xaB 6tbą$J(QĂ勘/|70DI$0@ (0? ߿_7߿|_? ̗/_ 70߿|'p "Lp!ÆB0D%Jx0_|/_|˗OĂI(QD˗0_/_|$J(QD#'1b>$J/_> 0_>!(QD˗`|%J(QD(_>$JO`> 0_>sOD%Jl/_I(QD%JL/D ̗/_|/_|˗_>˗o`|#O"|(a|'Q|(`|I(QD%J@8`A/|G0߿|'0߿|'0|G0_„ ˗/a„ O@ A $H | H K0aBK0a„ &L0a„ &L0| &LX0|/|#o`'p/߿'p O@ DPO@ ̗/| O|#/߿? ߿|G? 0 <8? 4xaB 6t|"F<_o`_> '0|"F40 <0B $/| /| /_>`'0| '0__|8P|O@'p O@ DPB >0_Ĉ˗/_0@ /_|˗_| '0_'p ̗/_>"Dx`>8_> $H0|'0߿|˗O`#/_| G0| ̗/_o` _'p (? 4H0_>$XA .dC 1b|`|E0_| X0_>_>o`>o``>/| /_>/_>{0@ HA'p "Lp!ÆBd/bĈ9̗/bā  <0„.̗/| '0߿|(߿|߿_߿| O|o /߿8 A O@ ̗? 4xaB 6tb|#F1b|1"|#F1b|0_#F1bDE1bĈ (? 4xaB ǐ!C 2d |'p ̗? 4xaB 6t"|#F1B O@ DPB2dȐ!C O@$XA'p "Lp!ÆB/_Ĉ#F0_|"F`|#F1"|1_#F1bĈE1bĈ(? 4xaB cȐ| #|10@ HO@ DPB >q`>%J0_|$J(1a>X0|a|I/_>%J(QĆI(Qą  <0… א`| '0?70߿'߿7߿߿8 |'p "/_„ &L0a„ &L0aB&L0a„ &L0@ H*\a '0| /߿|/|̗O`>_|'0߿| '0B O@ D80_ &L0a„ &L0a„K0a„ &L`|%L0a„ &D/| '0߿|/|(_߿|߿|(_߿O@ <`| &L0a„ &L0a„ K0a„ &Lp |'p "Lp!Æ5'0|'0߿|_#/|/߿|'0߿| ̧`>8`A̗/a„ &L0a„ &L0a&L0a„ &/_| &L0a„ ̗p`>˗/߿|/_|˗/߿|70| ̗/_O`| w`>8`A̗/a„ &L0a„ &L0aB%L0a„ &40@ H*\Ȱ|:tСÁ  <0a| &L0a &L0a„ ̗0a„ &L |'p "Lp!Æ 9tСC(? 4xa)TPB *TPB ̧PB *T80_|*TPB *OB *Tp`|)TP!|*TPB *TPB ˧PB *L0@ H*\Ȱ|:taB O@ D`| *TPB *TPB )TPB 'P ,h „ 2lp`>|(`>8`A&,/B *TPB *TP)TPB ˗/B *TPB ˧PB *$/_| *TP`| *TPB *TPB SPB O@$XA .da|>|`>8`A&D/B *TPB *TPB*TP„˧PB *TPƒ*TP„˧PB ˧PB *TPB *T`| *TPaA O@ DPB :̗Ç 'P ,h „ ˷p… .\p… .\/… .D0@ H*\ȰÇA!|'p "LP`| .\p… .\p…[p…˗o… .\p…[p…˗o… ̗o… .\p .\` .\(`>8`A&TaCbB O@ DPa|.\p… .\p… [p…˷p… .\pB.\pa|-\pƒ-\p… .\p… ̗o… 'P ,h „ 2la| B8`>8`A&T0_ .\p… .\pB.\ |'p "Lp!ÆB"  <0„-\p… .\p… &̷p…˗o… .\p… [p˷p… ˷p… .\p… .\0_ *O@$XA .dC1!|'p "Lp|2dȐ!C 2dȐ!C1dȰ`|1dȐ!C 2dȐ| 2,0@ H*\(0_> 2dȐ!C 2da|2d`>8`A&TaC!.̗/bā  <0…cȐ!C 2dȐ!C .ǐB O@ DPB >0_Ĉ(? 4xaB ǐ!C 2dȐ!C 2d!Äǐ!C 2dȐ!C 1d0_|2dȐ!1dȐ!C 2dȐ!C ˗!  <0… :|1|$.O@$XA .D/C 2dȐ!C 2dȐ| O@$XA .dC 擘`>8`A&T0a| 2dȐ!C 2dȐ!Cc0_|2dȐ!C 2dȐa|2̗/_> 2dȰ`| 2dȐ!C 2dȐ!C1L0@ H*\ȰÇ#.'q |'p "Lp!|2dȐ!C 2dȐ!C cx0_|2dȐ!C 2dȐ| ˗/C 2d0_> 2dȐ!C 2dȐ!C10@ H*\ȰÇ#B̗!|'p "Lp!Á5lذaÆ 6lذaÆ k0@ H*\ȰÇ#J!|'p "Lp!C5lذaÆ 6lذaÆ ˧0_|6lذaÆ 6lذ|˗/_Æ 6lh0_ 6lذaÆ 6l|(? 4xaB 6tbDO@$XA .dx0_ 6lذaÆ 6lذ|˗aÆ 6lذaÆ 2W0_|6lذaÄ5lذaÆ 6lذaÆ `>8`A&TaC!F0_  <0… װaÆ 6lذaÆ 6l`>8`A&TaC!F0߿|M8qb|&N8q'N80_'N8qĉ8qDM8qĉ'N8q`|'N8qĉ#7qĉ8qĉ'N8q|&N8qĉ'F̗oĉ7qĉ'N8qāM8qĉ'N/ĉ':̗oĉ'N8qĉ;/_|7qĉ'N8Q`|˗_|&N(1_'N8qĉ'̗`>oĉ'N8q|/_>'p "Lp!|2dȐ!C 2dȐ!C "̗`> ǐ!C 2dȐ!C ̗`> ǐ!C  ̗!C 2dȐ!C 2dȐ!|/_>2dȐ!C 2dȐ!C'0_|1dȐ!CcȐ!C 2dȐ!C 2d0_/_> 2dȐ!C 2dȰ`| /_| 2dȐ|2dȐ!C 2dȐ!C "̗!C 2dȐ!C 2d0_> 2dȐ|2dȐ!C 2C 1C !P| H*\ȰÇ#J/ĉ':̗oĉ'N8qĉ8qĉ'N1_'Nt/ĉ'N8qĉ7qĉ'N81b|'N0_'N8qĉ'̗oĉ'N8qb|&N8a|'N8qĉ'N/ĉ'N8qĈM8q|&N8qĉ'N08`A&TaC!F`>'p "Lp!Ä5lذaÆ 6lذaÆ  O@$XA .dC%6O@$XA .d0_ 6lذaÆ 6lذaC  <0… :|1ć  <0… װaÆ 6lذaÆ 6l80_|6lذaÆ 6lذaCװaÆ .̗aÆ 6lذaÆ 6lp`|6lذaÆ 6lذaCkذaÆ װaÆ 6lذaÆ 6lH0_Æ 6lذaÆ 6lx0_ 6lؐa| H*\ȰÇ#JHŋ3jܘ1G Ǒ#G9rȑ#G9rQb|9rȑ#dž8rȑ#G8r0_>9rȑ#|Ǒ#G9J/_|9r4/G9rQa|Ǒ#G9:̗`|8rH0_>9rȑc|Ǒ#G92w0_|9r/G9r`| Ǒ#G9&̗/a|q_|9rȑ#G˗#G9r4a|8r/G9rȱ`ȑ#GP>$X0_| H*\Ȱ`| 6lذaÆ 6lذaC5$/_| 6lذaÆ 6l0_˗aÆ 6/_Æ 6lذaÆ 6lp`װaÆ 6lذaÆ 5D/_ 6lP`| 6lذaÆ 6lذa5T/_ 6lذaÆ 6̗/EG"E)RHQa>G"E)RTb|QHa|)RH"EGb|(RH"EH1_|)RT/E)RH"Ń(R/_>)RH"|)̗/EG"E)RH`|)̗/_>)RHb|)̗/_>)̗"E)RH"|)&0_>$XA .dCE0_|#F|/_Ĉ#F1bĈ E1_|#F1bĈ"F/_#:̗/bĈ#F1bąEq`|"F1bĈ k/_| s/_#2̗/bĈ#F1bD"Fh0_|#F1bą/| 1bąE1bĈ#F0_#"̗/_Ĉ#Fa|/_|70_|˗a|E1a|#F1bĈ#1bD1bĈ#|/__߿ ˗/A 4hР'p "Lp!ÆB(`'"̗/ĉ'N0|0 O| 8p@O@ DP|.\p… .\p… [p… ˗/… .\p…[0|/| G0߿| ˗/… ./… .\p… .\a .\`|.\p… .4oB o?7p ̗/,h „ SPB *TPB *T/_> *TP|)TPB *Tp`| *TPSPBSPB *TPB *TOB *Tx0_| *TPB *̧PB * *T(0_> *TPB *TP„*TPB ˧PB *TP!| *TP„SPBSPB *TPB * A̗/D%J$O|˗O`O` /|˗_>$̗/D(QD%J/DH0ā$̗/_>%J/D_>/_|'0|O`>˗ODI(QD%>'`>˗O`|˗`|̗/| ̗/_ ߿|'p AO@ DPB 5l(0_>_>o`>o`akذ|6lذaÆ 6lP` ̗/| /|G0_>_>_|'0_CkذaÆ kؐ`|˗O`>0@߿|(_'p ˗̗? 4xaB 6tbāI4`|8߿_߿_|߿| H|4h0|'0_| 4hРAO@ DPB ˗a˗o`|СC:tС270_|70߿| /|˗O`/|'0CsH0߿|/|:4ϡC:t0_| /_>/a|:tСC6̗aC o߿@/_>0߿| H |4X0߿|(@$XA ˧PB *TPa|S/߿|(߿ H0_>$XA .dCE1bĈ 0_>70_Ĉ E1bĈ ˧0_>o`E1bĈ#>1bĈ#6̗/|'p@$XA %L0_„ &$/aB̗/_|˗/߿|K/_ &L0a„ &L0a‚%L0a„ &L0aK80_ &L0_ K0a„%LH0_ƒw0_ ˗0a„ &L0a„ &LH0_„ &L0a„ &$/_K0a„ %L/|(߿| o_|߿  ߿'p W0_> ̗? 4xaB 6t|"F\/|#F/_#2̗/| '0_/_>'p`߿/߿_ o߿/,H0_| /|8`A&TaC!&1bD {/bĂ1b| O`>70|0@/߿/߿|/߿߿߿/߿| H|4h_|̗? 4xaB 6t"|#:/_|˗/|˗`|˗/|˗/_Ĉ1bă"'0|O`>O`|O`>O`>_|O`> /_Ă HA O@ DPB >x0_O` /|'0_|70߿|#O@ DH? ,/A ˗/|/߿|˗/|'0| /_|_'0_|+/_> 4H`> 4x@$XA .dC E0߿|70߿|W0|/_>"F,0 < ,h_>$XA .dà  O O@ DPB >0_Ĉ '0߿|O` /_>_ ˗/_Ĉh0_Ĉ#F`|E/_E1bĈ#.̗/bD_| ̗/_ _|˗/|# O@$XAK`| &L0a„ &L |'p /,h „ 2l!Ć"F/bĈ˗/bĂEL/bĈ#F0@ HO@ DPB >0_1C O@ DH0_ ˗0a„%LX0_„ &40@ HO@ DPB >1_Ĉ#F`>8`A̗/a„%L0a„̗` O@$XA'p "Lp!ÆB/bĈ#FL/_|#&̗/b|#'`>߿|o ,h |C!B'p "Lp!ÆB/_>3`>哸`>8`A"̗/a„K0!| ̗/| '0|˗O`|˗0aB  $XA .dC(Q|1'0Ą  <0a| &4/a„ '0_O`>o`/a„(? 4xa| H*\ȰÇ#̗O|˗/_'`>߿ O| Hw̗ w '0_|'0| /_> /˗/_<80_>$XA .dC 0_/߿| /_|_|o`>(? 4xa)T`> '0@ o`_7|O@ O@$XAK0a„ &L0a„ &Lx0_„ O`|'0@ _ o'p  ˗/a|˗___70D  <0|*T0_> ̧PB 'P ,h B%L0a„ &L0a„ &L/_„ 0@? 4`>8`A&8`A̗/a„ &L0a„ &L0aB%L0a„ & (? 4xa)TPB *TPB ̧PB *T80_|*TP|*T`> *`> ̧a|)TP!|*TPB *TPB ˧PB *L0@ H*/… ˗o!|˗/_>`>/߿ O|8|'p "LH0_> *TPB *TPB*TPB(? 4xaB[p̗_>'0|˗/_>˗O`| ̷ |'p "LX0_> *TPB *TPBSPB ̗/_> *T_| *T0B/_| `>߿ _>$X_|4hРA ̗? 4xaB 6tbDM8!|'p "L`| .\X0_/| ̗o`|/|[h`>8`A&D/B *TPB *TPB*TP„˧PB O| Ḩ`> _߿ (߿8|+X` ,X`| H*\ȰÇ#J$/ĉ'P ,h „ 'p ,h „SPB 'P ,h „ ˷p… .\p… .\/… .D0@ H*L0 ḨPB O@$XA  ̗o… .\p… .\P` .\h0_|.\p˷p… -\pB˷p… ˷p… .\p… .\80_ .\(`>8`A&TP`|2da| 2d`>8`A&TX0_ .\p… .\p‚.\pa|-\p…[p-\pB O@ DP|.\p… .\p… ˷p…˗o… .\p… ˷p…(? 4xaB[p… .\p… .Do… 'P ,h „ 2l!|!B0@ H*L/… .\p… .\pa| .\80_|.\pBo… ̷p…˗o… .̗o… .\p… .\Pa| .T0@ H*\h0|1dȐ!C1d |'p "Lp|2dȐ!C 2dȐ!C1dȰ |'p "Lp|ǐ!C cȐaA O@ DPB1dȐ!C 2dȐ!C ǐ!Cǐ!C ˇ0_| 2dP`| 2/_| 2dPa| 2dȐ!C 2dȐ!Å2\0@ H*\h0|1dȐ!Á2\0@ H*\X0_> 2dȐ!C 2dȐ!| &̗/_> 2d0_>˗!C  ǐa|cȐ!C ǐ!C 2dȐ!C 2d/_> 'P ,h „ ǰ`|2dȐ|2,0@ H*\0_> 2dȐ!C 2dȐ!Á20@ H*\h0cȐ!C1d8`>8`A&T0a| 2dȐ!C 2dȐ!Cc0_|2dȐ!|&̗/_> 2d(0_> ˗!C 2,/C 2dȐ!C 2dȐ| 'P ,h „ ǐ|1dȐ!Á&O@$XA .d/C 2dȐ!C 2dȐ| ˗/C 2d/Cǐ!C cx0_|2dȐ!C1dȐ!C 2dȐ!C "̗@ O@ DPB2 2d(0_>(? 4xaB ̗aÆ 6lذaÆ 6lx0_C O@ DPB2L/_> 2d80  <0… װaÆ 6lذaÆ 6Doa|5lذaÃ5l0_|6lPaװaÆ ̗aÆ 6lذaÆ 6l0_  <0…1dp`|2dȐ|'P ,h „ 2o… .D/… .\p… .\p… w0|˷p…-\p…˷p… ;O`|-\p…[p… .\pB -B -@ <0B-\p…˗o… w0| ̷p… "̗o… .\p… .\p…[p…-\p… ˷p…;O`[p… ˷p… .\p… .\p-\p-\X0_|.̷p|[p‚-\p…  ̗o… .\p… .\p…[p…. * G0߿| ̗/_> *,/B *TP|*TPB *TPB *TP|*TP| *`|O(0߿| HA;xwQDXa ̗/_>/|W`|*V/_Ŋ+̗bŊ+VXbEUh0_(߿8P ? 4xP`|"D|"D!B"D(0_>$XA .dC%N(0_ Xbņ81_+V4/_Ŋ+VXbŊXq`|+V0_|*F̗bŊ WbŊ+VX|*VbŊ'˗ob˗O`|WbŊXbŊ+VXQ`|+Wb Ul/_/|/_Ŋ+̗bŊ+VXbEU/_ń*NWa|"|߿8`A&T!|6lذaÆ 6lذaÆ װa̗/| ̗/_ ߿|(0|(߿| _'p |$H`| ̗o`'p "Lp!C5lذaÆ 6lذaÆ ̗aC5/| /|/_>`'0_|'0__|8P|O@˗`A O@'? 4xaB 2̗aÆ 6lذaÆ 6lؐ`| .װ`>O`>˗/| G0_|`>/_| /|(߿|O@W| ,/,h „ 2d/_Æ 6lذaÆ 6lذ!|6T|˗O`/|'0|'0_|'0_>_|˗_| _|p`| 6lذ!|6lذaÆ 6lذaÆ װ!|"̗/| '0@/߿|@?˗_> ̗_>˗O`|O`/_| HAUXbŊ+V(0_ XbŊ˗/_ŁUXqb|̗bŊ+VXbEUXbŊ˗|*V8`> <0… :|1ĉWQa+VXq |,h „ 2l? H*\ȰÇ#JHQ`|W"|#bŁ H*\Ȱ <0… :|1ĉWa(0_E*O@$X |QD0_˗O`>'p࿁7?7߿o`߿|'p ˗/ wO` /|U0@ H_>o` /߿__/߿_'p (? 4x_|"D!B"/,h „ 2l!Ĉ'R/_EU$O`>O`'0߿|G0_>#_>'0߿| 7`>8`Aˇ!B"D!B'p "Lp!ÆB(q"EU| ̗/__| ̗/_ ˗o`>_| ̗/_>$'P ,h |"D!B"D(0_>$XA .dC%N(0_UXa˗b|*VX`|+VXbŊ+ ̗bUXa(? 4x`|"D!B"/,h „ 2l!Ĉ'R/_ŊUXbD O@ D/B"D!B <0… :|1ĉW"|*VX!|'p "/_„ &L0a„'p "Lp!ÆB(q"EUh0|3`>k0@ H˗0a„ &L0a| H*\ȰÇ#J8`>'p "L(0B̧Pa|)O`>˗OB ˧PB *T0_> *TPB *TPB *L0 H̗O|/_>/_/_|_|˗/_>˗o`| K0@ H ˗0a„ &L0a| H*\ȰÇ#JH`>8`A&4Oa|'0_#/߿|˗_>/߿|/_>o`  <`| &L0a„  <0… :|1ĉ˗bŅ5'0_˗O`/_| /_||7߿8p`|'p "L/_„ &L0a'p "Lp!ÆB(q"Xa>˗O`|W0_| /|/|_'P ,h „SPB *T/B *TPB *TPB *OB ̧_>˗_| g0@ ߿ _߿80_|8`A&/B *TP|8`A&TaC!F8bExA O@ D`| *TPB O@ DPB >QD-RwE  <0a|*TPB ˧PB *TPB *TPB OB */B *T0_|*TP|*TPB ˧PB *TPB *TPB/_> *TP`> *T |'p "L0_> *TPB)TPB *TPB *TP|˗OB *OB *,/_| *T`| *TPB SPB *TPB *TP‚˗OB */B *T`>8`A&T/_ .\pB-\p… .\p… .\X0_>[p…-\pB  <0B-\p…  ̗o… .\p… .\pB̗/… .4o…  ̗/_ .\H0_ .\pB-\p… .\p… .\80‚[p…[p„  <0‚-\p…  ̗o… .\p… .\p- *̗/_> 2d/Å  <0… cȐ!C ̗!C 2dȐ!C 2dH0C  ̗/C 2/Cǐ!C ̗!C 2dh0_> 2dȐ!C 2dȐ|2dȐ`|2dȐ| 'P ,h „ 2̗!C 2dh0_> 2dȐ!C 2dȐ| 2d0_| 2d_>˗!C 2D/C 2d`| 2dȐ!C 2dȐ!| 2d0_| 2d_| (? 4xaB ̗aÆ 6d/_Æ 6lذaÆ 6L/_Æ "̗/_Æ *̗`>8`A&T!|6lذaC5lذaÆ 6lذaC6lؐa|6l0aװaÆ ̗aÆ 6d/_Æ 6lذaÆ 6 2dȐ!C 2d0C 2dP`|2da| /_>2dȐ!|2dȐ!CcȐ!C 2dȐ!CcȐ!C ̗/C ̗`>!C 2̗!C 2dh0_> 2dȐ!C 2dx0C 2da|2dȰ`| /_>2dȐ!|2dȐ!CcȐ!C 2dȐ!C1dȐ!C ˗!C g0|ǐ!C ˗? 4xaB 2̗aÆ 6lذaÆ aÆ 6,/_| 6\/_Æ 6l0_ 6lؐa| 6lذaÆ 6l80_Æ 6l0a|70߿| ̗/_C5lذaÆ kذaÆ װaÆ 6lذaÆkذaÆ .̗/_Ã/|k/_ 6lPa| 6lذ!|6lذaÆ 6l0_Æ 6lذ|5,_ o ,/,h „ 2T/_Æ 6l0_ 6lذaÆ 2א`O`+aÆ 1̗/_C 70_˗aÆ 6T/_Æ 6l0_ 6lذaÆ *̗a|'0|70_Æ Sa|̗o | O@O@ DPB kذaÆ װaÆ 6lذaÄ"/_|O`˗/|/_/߿|'0_| `>70,/_ W` <0… װaÆ 2̗aÆ 6lذaÆk0߿|'0|/|/|_|'0_|'0| /|̗/|6/_Æ 6l0_ 6lؐa| 6lذaÆ 64|˗/|G0߿| `>7P8? '`>_>$XP`|4h|  <0… װaÆ 2̗aÆ 6lذaÆ5d/_> '0߿|70_>o`˗__>70߿|kh0_| ˗/a| 6lذ|6lذaC5lذaÆ 6lp`| 70|G0߿|˗o`|O/߿? ,/_> 0@ /_>$XA .d0_ 6lؐa| 6lذaÆ 6aÆ 6lذB$X /,h „ 2T/_Æ 6l0_ 6lذaÆ װaÆ 6lذ!|,h A ̗? 4xaB *̗aÆ 6d/_Æ 6lذaÆ װaÆ 6lp!|'p (? <0… װaÆ 2̗aÆ 6lذaÆ5lذaC3/_ ˗/_CK/_Æ 6l0_ 6lؐa| 6lذaÆ 6$aÆ SO`>ka|5l0_ 6lPa| 6lذ!|6lذaÆ 6lX0_ '0_|˗O`|'p`#߿| H(? 4x|&L0a„ ̗/a„ &L0a|&L0a„ &L0a„ K0a'0_|'0|_|/|G0_„ ˗/_„ ̗/a„ &L0|&L0a„ &̗/a„ &L0a„ &L`| &DO |o__>$X  <`| &L0a„ ˗0a„ &L0a| &L0a„ &L0a %L`>˗O`|70߿| ̗/|˗/a„(? 4xa|&L0a„ ̗/a„ &L0a|&L0a„ &L0a„ ˗0aB'p#_#_/,h|C!BC!B"Da|"D!B"/,h „ 2l!Ĉ(q`>`>8`A"̗/a„ &L0|&L0a„ &̗/a„ &L0a„ &L0!| &L(0_„ ˗0a‚˗0a„ ˗0a„ &L`| &L0a„ ˗0a„ &L0a„ &L`| &L0a„ &0@ H ̗OB *Ta| *TPB SPB *TPB *̧PB *T!|'p "L80_> *TPB)TPB *̗OB *TPB *T_> *TPB˗OB ˧PB *T0_> *TPB)TPB *TPB  ̗OB *TP@ O@ D`| *TPBSPB *T/B *TPB *TP!| *TPB ˗OB ̗OB *Ta| *TPB SPB *TPB *,/B *TPA O@ D0a| *TPBSPB *T/B *TPB *TP| *TPB(? 4xaB)TPB "̗OB *TPa| *TPB *TPB)TPB  ̗/_> *Tx0_> *TPB)TPB *̗OB *TPB *T0a| *TPB  <0-\p… ˷p… .\(0_ .\p… .\p| .\p|[p…[p… .̗o… .\P`| .\p… .\pƒ.\pB˷p… ˷p… .\/… .\p|.\p… .\p…[p… 'P ,h „ ˷p… .\/… .\p|.\p… .\p… -\p…˗o… &̗o… .\0_ .\pB-\p… .\p… ˷p… 'P ,h „ ˷p… .\/… .\p|.\p… .\p… [p…(? 4xaB [p… .̗o… .\P`| .\p… .\p…-\p‚˷p…  ̗o… .\0_ .\pB-\p… .\p… ̗o… O@$XA ./C 2dȐ`| 2dȐ!C1dȐ!C 2dȐ!C cȐ!Cǐ!C ǐ!C 2$/C 2d`| 2dȐ!C 2dȐ!Á1dȐ@ O@ DPB1dȐ!C ǐ!C 24/C 2dȐ!C 2dȰ`> 2O@$XA . 2dȐ!|2dȐ!CcȐ!C 2dȐ!C *ǐ!  <0… װaÆ *̗aÆ 6d/_Æ 6lذaÆ 6l0_ 'P ,h „ 2/_Æ 6l0_ 6lؐa| 6lذaÆ 6lذ| ̗/_ 6lؐ`| 6lذ|6lذaC5lذaÆ 6lذaÆ kP |'p "Lp!Â5lذaÆ kذaÆ װaÆ 6lذaÆ 6a|kذaÆ װaÆ *̗aÆ 6d/_Æ 6lذaÆ 6lP` ˗a 6D/_Æ 6l0_ 6lؐa| 6lذaÆ 6lذaÁ5<0@ H*\0a| 6lذ|6lذaC5lذaÆ 6lذaÆ kX0_|6lذaÅ5lذaÆ kذaÆ װaÆ 6lذaÆ 64/_  <0… װaÆ *̗aÆ 6d/_Æ 6lذaÆ 6la>  <0… װaÆ *̗aÆ 6d/_Æ 6lذaÆ 6l0a>װaÆ 6/_Æ 6l0_ 6lؐa| 6lذaÆ 6lذaCO@$XA .dp`|:t!|:tСC9tСC:tСC ̗/_>:ta|:t!|:tСC9tСC:tСC 80,h „ 2lh0_>:t`|:tС|:tСC:tСCСC:̗ϡC:$/C:th0_>:tСC:tС|:tСC9tСCsСC СC:tСC:/C:t0_>:t`|:tС|:tСC:tСCsСCСC̗ϡC:4/C:tСC:tP`|:tС|:tСC9tСCP| H*\ȰÇ#JHQ`|˗_|*VH1_+V$/_Ŋ+̗bŊ+VXbE'0_|UXqb|+VH0_+V4/_Ŋ+VXbŊ;O`|UXqb|+VH0_+V4/_Ŋ+VXbŊ;O`|X|*VX`|+Vh0_+VXbŊw0|WbEUX"|*VX`|+VXbŊ+ ̗bŊWbŊXbEUXbŊUTQE/,h „ 2lx0_>:t`|:tС|:tСC:tСCsСCСC̗ϡC:4/C:tСC:tP`|:tС|:tСC9tСCsСC:tСC ̗ϡC:t/C:tH0_>:t`|:tСC:tC9tСCsСC СC̗ϡC:tСC:t(0_>:ta|:t!|:tСC/,h „ 2l!Ĉ'R/_Ŋ+:̗bŊ WbŊXbŊ+VXQ`|+V0_+V$/_Ŋ+̗bŊ+VXbEUX|*VX`|+Vh0_+VXbŊWbŊXbEUX|*VXbŊ+V/_Ŋ+:̗bŊ WbŊXbŊ+VXQ`|+V0_+V$/_Ŋ+̗bŊ+VXbEUX|*VX`|+Vh0_+VXbEU$@'p "Lp!ÆsСC СC̗ϡC:tСC:t(0_>:ta|:t!|:tСC9tСC:tСCСC:̗ϡC:$/C:th0_>:tСC:tС|:tСC9tСCsСC СC:tСC:/C:t0_>:t`|:tС|:tСC:tСCsСCСC̗ϡC:d@'p "Lp!ÆB(q"EUX|*VX`|+Vh0_+VXbŊWbŊXbEUX|*VXbŊ+V/_Ŋ+:̗bŊ WbŊXbŊ+VXQ`|+V0_+V$/_Ŋ+̗bŊ+VXbEUX|*VX`|+Vh0_+VXbŊWbŊXbEUX|*VXbŊ+V/_Ŋ+:̗bŊ WbŊXbŊ+VTQE/,h „ 2lx0_>:t`|:tС|:tСC:tСCsСCСC̗ϡC:4/C:tСC:tP`|:tС|:tСC9tСCsСC:tСC ̗ϡC:t/C:tH0_>:t`|:tСC:tСC9tСCsСC СC̗ϡC:tСC:l08`A&TaC ? 4xaB O| H*\ |O@ DPB >QD ? 4xaB 60 H*\ |'p "Lp!C  <0… :|1ĉ(? 4xaB 6$0 H*\ |'p "Lp!C  <0… :|1ĉ˗"E!˗/E)/_>)RD/_|)RH"E)*̗/E)F̗/_>)R)RL/_>)RH"EG"EH"EQH|(RH"E)Rd"E'H"E(RHqa>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQ-/|3_>-0|̗O`| 9G0_|5/|̗4|ˇ0|̗g|;o`>/_ ̗a>/߿|h'0_s`|Ij̗/߿|˗O`|˗/| ̗/_>/_ ̗/߿| ̗/_>/|/߿8`A&$/_ ̗/|˗/_>/_| ̗OB  ̗/߿|˗_|˗/| ̗/_SPB *TPB *T(`> '߿|/߿O? ? 4xaB8_߿|'p "LH`> '߿|/߿O? /,h „8/߿_ O|'p "Lp!ÆB(|(߿|/߿/߿'p`>$XA O߿|/߿_> ̗? 4xa‚ o߿|/߿|'p "Lx`> /߿_߿|'_>$XA .dC%/_O`>O` g0ĉv /߿| /| '0|#/ĉ ˗_O`>_| ̗O`/߿| /| '0߿|#0@ H*\ȰÇ#J/_˗o`| 70_g0D/߿|'0_>/|0@ H/_˗o`| 70_G0_| *Tp`'0_|O` ̗/_8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_xqǑ'WysϡG>zuױg׾{wZ?|yѧW}{Ǘ?~}׿ P ,LPl!P ) 1P 9A QI,QL!;;PK[j(vPK+AOEBPS/img/select_b.gif;HķGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɓ(SToʕ+W\rʕ+W̷rʕ+W\rʕ+O[rʕ+WO@ DPB >QD-^ĘQF=~R ,h | H*\ȰÇ#JHŋaĈ#F1bĈ`> aĈ#F1bĈ#|1bĈ#F1b$#|1bĈ#F1bĈ#F1bĈ#Ƈ0̇#F1bĈ#F1bĈ#F1b||1bĈ#F1bĈ#F1bĈ#F0̇#F1b`>8`A&TaC!F8bE1fH1F6nܸqƍ+/ƍ7nܸqƍ7no|7nܸq۸qƍ7nܸqƍmoƍ7nܘoa7nܸqƍ7n1F6nܸqF۸qƍ7nܸqƍmoƍ7nԘa7nܸqƍ7n0F6nܸqF۸qƍ7nܸqƍmoƍ7n̘a>6nܸqƍ7nܸq#|۸qƍ3{/ƍ7nܸqƍ7ڨ!'p ˇ!B"D!B'p "Lp!C H |,h „ 2 <0… :|1ĉ+Z0Ƃ0bĈ1a|1bDa|1b1"̇#F1bĈ#F0̇#FaĈqa> È|1bĈ#F1bc|1bx0Fk#F aĈ#F1bĈ1b>aĈ|1bloa>16̇#F1bĈ#ƈ0̇#FaĈa0b0F1bĈ#F#X0F1̇#F/,h „ 2DaÆ 6lذaÆ 6lذaÆ "װ| 6lذaC6lذaC/_ 6lPa 6lذaÆ 6lذaÆ 6l0_Æ5lذaÆ kذaÆ kذaÆ kذaÆ 6lذaÆ 6lذaÆ5l80_Æ 6lؐa 6lذaÆ 6l_ 6lذaÆ 6lذaÆ 6l0_Æ5lذaÆ kذaÆ 6lذaÆ kذaÆ 6lذaÆ 6lذaÆ5l8`>$XA .dؐa>:tСC:t/C:tСC:tСC|:tСÂ:tСC:t|:tСC:tСC:t/C9tСC sСC:tСC9tСC:tСC:t|СC:,ϡC:tСCСC:tСC:tСC9t/C:t`>:tB$XA H O@ DPB >QD-^,c|1bx0F16̇`>aĈ#F1bĈ1b>aĈ|1b0F0J̇#F1bĈ#ƈ0̇#FaĈc| (1F1bĈ#F#X0F1̇#F !̗o`|˗`>aĈ#F1bĈ1b>aĈ|1b0|O`|3|1bĈ#F1bc|1bx0F16̇0_>̗o`>0J̇#F1b#0| H!D!B"D|"D!B"D`'0_!!B  <0… :|1ĉ+ZX0Ƃ0bĈ`>1bl` ̗/߿|(1F1bĈ#F#X0F1̇#F ˗`|70_|30'p  <0… :|1ĉ+ZX0Ƃ0bĈ`>1bLo`> /_>/| a<#F1bĈ#Fa,#FÈ#F3`70_|-̇`>1bĈ#F1Ḟ`>1b<#F+| a,#F1bĈ#Fa,#FÈ#ƃ h0| È#F1bĈc| È#ƃ0bĈ`00Ƃ0bĈ#F1b1Ƃ0bĈ`>1b<P>  <(0B"DX0,h „ 2l!Ĉ'Rhb| È#ƃ0bĈ`00Ƃ0bĈ#F1b1Ƃ0bĈ`>1b< |,h A$(0_ $? 4xaB 6tbD)Vx`>aĈ|1bx0Fa,#F1bĈ#Fa,#FÈ|a/Ƃ0bĈ#F1b1Ƃ0bĈ`>1bg0Fa,#F1bĈ#Fa,#FÈcD$X? 4xaB H ,? 4xaB 6tbD)Vx`>aĈ|1b|/|a/|È#F1bĈc| È#ƃ0b0|a/| aĈ#F1bĈ1b>aĈ|1btb H'P`/O@ DPB >QD-^,c|1bx0F拘`> 1|1bĈ#F1bc|1bx0F拘`> 1|1bĈ#F1bc|1bx0F H ,h „"W0_„ W0_B  <0… :|1ĉ+ZX0Ƃ0bĈ`>0_|%拘`70_|˗o`|+/b0bĈ#F1b1Ƃ0bĈ`*ˇb 3/|+O`˗`"[#F1bĈ#Fa,#F棘c>E̗`> /_> ̗o`1|1bĈ#F1bc|1bx0|0|̗o`̗O`| '1|1bĈFaFEP>$X"D!B"D`>C|"Dh0B`|O /_ +X_>$XA .dC%NXł0̇#FIg0_| /_|3c|g0_G0| w0_|-̇#F1bĈ#ƈ0̇#FIg0߿|/߿|;c|̗O`>̗O`w0| aĈ#F1bĈ1b>aĈ|̗_|/߿|;c|O o`'p| $Hp`>O@ DPB >QD-^,c|1bx0| 'P??'p 8`A $80A $H $H|  <0… :|1ĉ+ZX0Ƃ0bĈ`> s/|Iw1Ɔ.[#F1bĈ#Fa,#B$XA O@,/_ $/_+X| `+X` W`,/,h „ 2l!Ĉ'Rhb| È0F 1̷0|棘/b06w1|1bĈ#F1bc|È1a>Cc"0 

aĘ0| !̗b>"Èc| aĈ#F1bĈ1b>aDa|˗/|/_|˗`|/| -̧0_廘/b>16̷0F1bĈ#F#X0F/߿|˗/|#/| '0|0| 8`A H`S#ƃ;#F%̇#F1bĈ#F0̇a>˗/|/_> g0_>W0| %̇| ̗#F3#F1bĈ#Fa,#|O|'p |O (07p`>$XA S/_| *TPB 'p ,h „ 2l!Ĉ'Rh"| X0_| #_|˗o`|'0_ ̗O`|8`A8`A&T0 <0… :|1ĉ+Z1Ɖ H ̗`| ̗`>,6 ̷1|'0_ o?(߿(0|8p| H*̇0,h „ 2l!Ĉ'Rh"ƌ˘o|̷q|1O@ O@ DPB >QD-^ĘQ#|mOc6nc>m/_>6nܸqƍ7nܸqc|m/c>6nc>mD/a7nܸqƍ7nX1|˘`Øa !̷qƍ7nܸqƍ+Øo|̷q|'1_9w0ƍ7nܸqƍ7nceg`> 4xaB8`Aw/_| H*\ȰÇ#JHŋ3jce̷qƄ 3/_>/|˗_|+oƍ7nܸqƍ7Ż1F2۸qc|+/߿| /@ 7߿'p|'p "Lp!ÆB(q"Ŋ/b̨b>6 ̗1ƍ`|'0_|˗/߿| ̗/߿| /ƍ7nܸqƍ7nĘce̷qF3/߿| ̗|7߿'p`|8`A&TaC!F8bE1fԨ1|˘oƍ̗_|O |80,h „ 2l!Ĉ'Rh"ƌ7ˇ12ȑ#|˗O`|'p|(@ <0… :|1ĉ+Z1ƍa_8r0_|8Ǒ#G9rȑ#GØ|qȑaq,#G9rȑ#G9Ḃ12ȑc|ȑ#G9rȑ#Ga_8r0DŽ8rȑ#G9rȑc|q/c>9>`|9rȑ#G9rQb>8˗1G!˗/|qȑ#G9rȑ#G0/_|9r0 4 <0… :|1ĉ+Z1ƍ a_8rȑ#G9rȑ#G9rtc>eǑ#G9rȑ#G9rȑ|q/c>9rȑ#G9rȑ#GØ|qȑ#G9rȑ#G9r0|˘#G9rȑ#G9rȑ#G0/_|9rȑ#G9r#G9:̇12ȑ#G9r`>'p "Lp!ÆB(q"ŊY|hѢE-Zhb|hѢE-Zh|x0Ł,ZhѢE-Z1|-ZhѢE-Z4Ϣ|80E-ZhѢE![ϢE-ZhѢEY|hѢE-Zh| YhѢE-Zh`>Y<|-ZhѢE-Z|a>-ZhѢE-gQ`>YϢE-ZhѢE970E-ZhѢEY|? 4xaB 6tbD)V80|]xŋ/^0.wQ`/^xŋ/0_/^xŋ/E. wŋ8`A&TaC!2O@8`A&TaC!O@ DPB 0a=TÇ>|80Ç>|CÇ>|a>||{0C>|Ç=|Ç>l`>{Ç>|Ç>|(0Ä:Pa>||>|Ç3`>|Ç=|Ç{0C*Ç>Ç>|| =|Ç>$Ç>|/Ä:Pa>||>|Ç(? 4xaB 6t"|#F1"|0_D"F1bā"F1bĈ!S/bĈ#F`#Fq`Ed/"|#F1|#F1bĈ;/bĈ#F`#Fq`Ed/"|#F1|#F1bĈ'p`>$XA .dCE1bĈE:t|s_> 9tСCsСC:tСC8`A$XР| 2dP`> 2dȐ!Ä2ǐa| ǐ!C 2d0C 2dȐ!C 2d0|˗/?'? _/,h „ ǐ!C 2d0C2,!2dȐ!C cȐ!C 2dȐ!C g0_> o 08 |'p "Lp| 2dȐ!C 1d!Â2!C 2d0a> 2d |,hA$X|O@ D(0_ /|O'p|G A˗? 4xaB cȐ!C 2L!| ǐ| 2dȐ!C 1dȐ!Cc0a>3/C `/_|/_`>cȐ!C 1dȐ!C &ǐa> c_> 2dȐ!Ä2dȐ!Â2d/| 1d0_| G0| +!C "ǐ!C 2d0C2,!2dȐ!C cȐ!C cȐ| 1ǐ|1dX0| 3!C  <0… :Pa>s0C:t`>:tX0|*̇0_>:`> %0|:t0C:t`> 9t/Å:tСC9tСÂpasP`6̧0|9t|:tСÃ*|ϡC:tx0C:o`> ̗O`| ̗/@ o /|(0,h|C`| C/|"D!B!D!B"D!"D!B!Dh0|"D!B"D_>"D!B3O`|˗_>/?? _? 4xP`>Cp`|W0_>!D!Ḃ!B"D!BCa>̇? <0… :СCg0_>/_|˗/߿|/|sϡC'p 8`A O@ DP2dȐ!C 'p@$XP`> ,ϠA3_>$XA .da>:L08_|̗|8| O@8 ,h0A 4hРA4hРA 4h_>$XA .da9ϡ"'0C:t`>:D` /|/_>/߿| g0_|9̗0C:tPa>:\ϡC:tx0_|9t/| СC:<ϡC;o`/_|/߿|˗_ '0 o 8p'p "Lpa .\_ .\p…)̷P` [/.\p… ̷p… [/… ;o| -s80C$Xp ,8`>8| H*\/C 2dȐa| -ǐa| 1!C 2d0a> 2d(0Á1d0C̗| S/C1`| 1dȐ!Ã2dȐ!C coa> [| 2dȐ!C 1dȐ!CO@ 4 O| H| gP`| $Ϡ| g`> 4hРA  <0… :0|˷0_|:tСÃ:t`>:t`>pa>KϡCsСC0|˷0_|:tСÃ:t`>:t`>̇0_>%0|:t0C:t`>s_sСCСC9tСC9`>0|:t0C:t`>s_sСCСC9tСC9`O`|/߿| 'P8 |O@ DP2dȐ!C coa> [| 2dȐ!C 1dȐ|1dȐ!C C` /__|G0| ;!C ǐ!C 2d0| 1dX0| cȐ!C 2L!C /C 2dpa|W0|'P࿁O|˗o8_>$XA .!C 2d0a>cȰ`ǐ!C 2d0C 'p "Lp!Æ.OO|O (? O@8`A&T0… .\pB˷0…-̷P` .\p…-\p|-\p… .L`/_| ̗_ ˗o| ̗o… ̷p… .\`-̷p| -o… .\p| .\/| .\p… C`>˗_|`>;` [p…-\p… .4o| -\x0| [p… .\h0… [p… .\pa| ? 4x0|;`4`> !0|Aa>!B1a>0| A"D A0D!Ba *̗0|"D B"Ą[b| 5"D!&"|!B"D惈0| %g0D"Dcoa> -0D!B0D A"DKb|ˇ0|Aa>!B1a>0| A"D A0D!Ba>̗? ̗/_˗O`| | ,X` ,? 4xaB 6ta:oa:tСC9tP`>:tСC'p A H<`4"D3"D A"D 1̷0Ćk"D!BL"D B"DA|Aa>!B1a>0| A"D A0D!Ba>!B`>!2"D!&0|>!B1a>"D!:"D"D B"Ą[b| 5"D!&"|!B"D BQ`> B0D!B0| 'p ˇp`>!D!B"D!"D!|"D!B"D!B"D!B3!B"DH0B"D!B"!|Ca|CX0B"D!B"!Ḃ!B"D!B"4@$XA8`A 3hРA 4h0,h „ 2l0| 9t/| 9tСCsС|:tСC%̗ϡC g0CСC::tСCsa|СC9tСCcoa>[a>:t|:ϡC:ta:t(0_|9t!|:tСÃ[ϡkϡC:tx0CsСC:t`> s/_|9t!AO@ DPB coa>[a>:t|:ϡC:ta>:̗/a>g0CСC::tСCg0_>/_>/߿|/_̷0|:tH0C:t`>s_sСCСC:tСC 70|/߿|/߿| ̗/߿| /_>CϡC  <0… :0|˷0_|:tСÃ:t(0C:tСÁg0_>˗O`|/_|/_>g0|%СC9tСCcoa>[a>:t|:ϡC:tС|( '@70O| HP` ,X`  <0… :0|˷0_|:tСÃ:t(0C:tСC /__|'0_|'0߿| sX0CСC::tСCO_>7p <0‚.\p… ̷_.O@ O@'p "Lp!Æ>b| q |,h ` ,`> 4xaB H`| 3X0A g`>O@ DPB 3ϡ| 9tСC:T/C 9L|:̗oa>sa| coa>[a>:t|9Ta>:tСC 8`AO@ w|[b| 5G"E +a|˗/| QH"E)R(0|/|#;o`o`>7`>80(08p| H!a|"D!B"DP`/߿|ˇp`>$XA .dC%Nda>Q`>̗O`| ̗/_ 70_> ̗`>[b| 5G"E +`>˗0|)RH"E) ̷0|˗_|'`>  /߿|/_>'0_>̗0| K(0_„ K(0_B&L0a„ &Da> #/_| W0,h „ 2l!Ĉ':w0| ̗O`/_|'p| /| $H AGP`|/|O'? /A G | G A  $/,h „ 2l0|3 |O|/,h „ 2l!Ĉ'B̗` O |_  `>8`| W| ,X`+Xp`>$XA .d0| 70߿|#aÆ 6lذaÆ 6lpa /|˗_|/_|g0|"w0_> ̗O`'0_> /_>W0_[aÁkaÆ 6\`!̗/|aÆ 6lذaÆ 6lpa>˗_|/_|_|˗`w0߿|/| ̗O`|̗/|3a>kp | H_O@ DPB 5T| 6lذaÆ 6lذaÆ kذa54/a "w0| -װ| 5װaÆ *Pa 5lذaÆ 6lذaÆ 64aC א`>6l0| 1̷0_Æ-0_Æ 6l0_C.װaÆ 6lذaÆ 6l` k80_Ckذ!|-0| ̷0_|8`A&T ` +X`A8`A&TaC!F8|*61_| UX0| 1̷0_Ek`+̷0_Ł*WbŊ+VX"|擘/b>*V,a["| 5g0_Ŋ [|XbŊ+VXb|*̗/|)Wb|-0|[a>*VX0|'p  'p "Lp!ÆB(q"Ŋ8`A8`A<80 HO@ A A $/A$H_>/_|70_|70߿|/_|0@ ߿8| H*\ȰÇ#JHŋ31F-0|[a G0|'0_ ̗/_>'0|'0_ӨQF5jԨQƊ Өa>[O| 9W0|#_|+/|/_| ̗o`|;oa>5jԨQF5ja|5>̗/a80|g0_˗/|/_|˗o`>'0_>70|5jԨQFiF?#(0,h „ ̇0CcȰ`70A߿'p`|80?_|߿_>$XA .dC%NXE;o`|5N̗`80|˗`|/_>̗O`|̗o`>'0_>O@ DPB >QD-^ĘQF 'p ,ϠA 3X0A3/|˗O`| ̗/_> '0_>'0_> <0… :|1ĉ+Z1#|5joa>-G1| ˗O`|̗/_O_(߿_>$XA .dC%NXE1ӨQ| ioa>4jOF5jԨQF5jԨQc| ioa>4jOF5jԨQF5jԨQc| ioa>4jOF5jԨQF5jԨQc| ioa>4jOF5jԨQF5jԨQc| ioa>4jOF5jԨQF5jԨQc| ioa>4jOF5jԨQF5jԨQc| ioa> H*\H? 4xaB 6tbD)VxcF9voaѣG=zѣG=z`>y̧0G=zѣG=zѣG)_>CϣG=zѣG=zѣǃ3/b ѣG=zѣG=z1a>拘/!|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?0 H0A8`A&TaC!F8bE1fԸcGA O@ DPB >QD-^ĘQF=~bD)RH"E)RH"E <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽk4 ;;PK+@H;HPK+A OEBPS/img/connection_pooling.gifGIF89aJJJkkk{{{,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\i˗0cʜI͛8sɲΟ@ JfϣHHTҦ&BQ*ի'bMu+Ǯ^6+Ef݈vmڶn:.]w{w/_~ ,)e#o(C*yrtԥD1?mp鯧/dk_3 ;uߖ=vڙ4^؁3wE};6޼9{kw>0Kf7wl,r꿿_ rF|#z^yg~զUGt M BȠ( `u83ڂڈ""B$jb_wHbU;bbU(`GVׇ)_}Q 77c?NIehBύE™ސl9xp."ZnEai椢_|cZQҁIuJƊeKW杣VzՁlJ&BlWZ륡ykI6r qe2mqrSfoy[ /Vr/T/[0[/R2~F .:LŮA|"I<]bIu0#71!y,/eu2Og,0@7N2):̔ĖY|rer换&}G&Dwqh-tR\5FJ#vu]– -6tjZd7ռJr򸳆<Y=i# y֜|k>奛>u {[W˞7_lb"n0;놻k|:{6|Z'ۡ>_[<ꎍf w促+X#n}ߔh;':HG<,Ct3<~^* lv-^Y0j s犖Yh~8[ h|p$ ^.jąyXhlly=11epj`0> :T*D=53cw h:\bыLdA4,{ԿHQt4EOmI@JpeTS*qIbh=6AX$؀w vb8ssc!fN'`lsqVR:9Iɓb-'KOLԠxo s u'21!3'O[2IIP5CA)s"B2 Pf)6w~F ")ssc;C#MQUE- HEF+ʉw$XG_:Nui=2 K@K2e,PYJQ;n DUcQ%`qzJwetoZ (Pogҙ25SdY7jU~̮J%[uʹr5-=H׹,S$Lzj5l CVV﬎^׺N*~qIդ 9I+&9#jF6bgy[8vd ۺnV>7tMS\pXoBW]^ךTr[^+4x[޷'8^~z^ٕk<AX`o'ZzLVzQ8gq"#gM 'm(l۽^E.Lp/SRqVbWAB*!:q_F{Rl2o{gv+b޾2;>7䩎8~c|v4_%(ʃ>jg~hwZŗo!bZX}< X_z%|zTre5iHӗwOChPT"XM3x6E'aT`TNmvg{,c'|Eglymr?lYz gmVfhvjBqu&  STxwwo=؅"p&V*P(wNXxƇ1Uak!9=.qgTWldLٔFcٓU7KRaCɓ[ɀQC(IyYcYّsǘQqevThе|Z.φS_t.ESA55x莨q0!†ٛC{\GAfnPzH|aי,yHω Cɂ&'Ox&jBIyfB7)əy꩜E T8)p#ydIquziYyѧ Zcb٠&9zˉ@IGZr# %= -ٜ,D*uYsY4JpGj8ڞ {o٣0ʕS386/ ~X*/3դ'XCVIf*'(nʧ>x!虝:B<*rKZ]JUJY}0w7ʥiZ{t;xc i8D*AGT ;lJJ1بVJFZ{f*zZ/x ZEJZgsHZ:ZʝUDjZZNBʮڬII4(Z5Rz7*ZH;㙎j1XL ;Ǩ'){ w z>*{)b*k;x!s9z R )3j[B˱? !H˞k۴8:CCkk5+9U:W[?h:r(\+JۺA1fEL ,{䪰z^˫Oy_;;{uKreʷ뷘O˸۹ ڴ@k sڲ˳;i+Jĺ룳Z۱{V›2ƫʻۼ;PK PK+AOEBPS/img/dcltabob.gifd GIF87a8?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,8 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳO H*, H*'p 8@$XA8`> 4h? O@ 4 <0… :|1ĉQ(1|):̧`>8 A O@,X` +/_ W |'p 'P ,h „ 2l!Ĉ'FG|Q0_|( ̗/_|'3b|Gb|(RH"E)R,"E Ha>Q,/a>G`>Q"E)RH"ł'P|@ O| ̗/o|˗/@ o'P`|(߿(0 8P` (0 0|߿/8P`|O@ 7p|o| HA8`A&TaC!F8a o`#O`| 70|'0_> O` 70| g0_|%w0|#O`|̇0| 70_|)0|)RH"E)w0| G0| ̗`>3`#`> ˗O`˗0|8|? / /_/o|(0|7p`˗_| 7P`|'p(0,h „ 2l!Ĉ'./|#``>#_>`/| ̗0|/߿|/|+`>/߿| '0|/| ̗0|̗_|˗_>_|˗O`>H"E)R1_ 8? 'P o@ ̗o| O@`| O O|o˗o`> 7p`7p|o |߿_> ̗o|/_|/߿|/| _/_>7P`>$XA .dC%:O@8_>70|$/#H`>'p`/`>_'p@Oo@O@ (0@ /߿߿8P | O|o (? ̗o`/߿| O@ O| H*\ȰÇ#JX0_ o`/| ̗/|̗`> W0| ̗o`/a>;/| '0_> #_>70|G0|;o`|%G0߿|/_|g0߿|'0_|W0E)RH"Ň;0?O|0@ @/7`> ߿/߿|o@ 70|O@#'0 7_>'0_|'P߿|'p| |˗/_> /_>'0_|#? 4xaB 6tbDHQb>(Rt`> Gqb>(g0_|a>)RH"EHQb>(Rt`> Gqb>(w0CO'p 8`A&TaC!F8a>%3"Ex0|'3b|Q(0E)RH"EQ(1|):̇0E81| C"|)RH"E)G|Q0_|(̧0ʼn X0_|(FG"E)RH|)Jg0E-̗Ob|81| [/EH"E)RH |,h „ 'p |,h „ 'p H@$H`> 4xaAO@ O@8`A 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvHͫw/߾~,x0†#Nx1ƎC,y2ʖ/cάy3Ξ?-z4ҦONz5֮_Î-{6^;;PKmFi d PK+AOEBPS/img/lnpcc019.gif;PįGIF87ac?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,c H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛,˗O`>˗/|`0_>8qĉ|W0_/_> w0|-̇'N8qo` /| w0|/_|/_|˗_|˗o`| _|'p࿁o|o`7? 4xaB 6tbD)VxcF˗O`˗O`>;O`>_>˗_>O߿'/߿_/߿_߿'p "Lp!ÆB(q"Ŋ/b̨Q` +/߿|'0| '0|(߿ 8߿/߿ _/߿߿|/߿_o@$XA .dC%NXE5 W0|_|'0| '0| ̗O`˗_| /_G0_>O`>O`> '0| ̗/|7nܸqƍ7nܸQ` ߿7P/߿? 7߿@ ̗/| ̗o`0/߿7? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPCU'P ,hp`;80 w04 |'p ,X`'p "Lp!ÆB(q"Ŋ/bĘ/|U̗O`(k` ˘1cƌ3f̘1cF ˗O`|˗o`|'0_|_|/_| ˗_>/_˗_/_/_|˗`>/_>/_/_|80߿#o࿁ H*\ȰÇ#JHŋ''P_ /߿?/߿|O|/_'0_/| ̗/߿|/_>O߿|_/߿_7߿|  <0… :|1ĉ+ZQb>/|(߿|߿/߿(0߿| _|'P|8_߿ /߿_>'0| '0| '0| O߿|  <0… :|1ĉ+ZQb˗_>'0|/| '0_|'0_|/| O_70߿ /߿O| ̗/| '0| '0| '0|˗_| H*\ȰÇ#JHŋ%'P߿'߿| ߿|@o| ̗/|/_ 70߿|˗o`| 0@/߿߿|'߿_/߿ O@ DPB >QD-^Ę`>iԨQF5jԨQF5jO#|8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_(`>8`A&TaC!F8bE1fԸcG 勘/Ǐ?~Ǐ?~a|Ǐ?~Ǐ?̗/c|?~Ǐ?~:Ǐ?~Ǐ=Ǐ?~Ǐ?~|?~Ǐ?~|?~`> 4xaB 'p "Lp!ÆB0 <0…8`A&Oa|˗/| SPB *TP!|)TPB SPB *TPB SPB  ̧PB)70|O|*TPB "̗/*TPB)TPB *TPB )TPB ˧PB)W0_|)OB *TP!B O@8`A&Tpa| 2dȐ!C 2d80C 2d/C [/_> a> 2dȐ!C ?'p "Lp!|2dȐ!C 2dP`> 2d`> 4xa| H` `A H*\Ȱ| ? 4xaB ˗/_Æ 6lذaÆ kذaÆ8`A&_|/A8`A&TaC ? 4xaB ˗/_Æ 6lذaÆ kذaÆkذa| ˗o |? <0… ̗/_>:ta|9tСC:tX0C:/Csa|:tСÆ)СC˗ϡC:tСÂ:tС|:t80CС|:t|:t0a|:tСC:,ϡC ̗ϡC9tx0_>80߿'p "Lpa .\p|-\p… .\pB.\pB-\p| .̗/…[X0_ .\0… .\P`|.\p… .\p| .\p|.\P`| &̗/_ ˷0a| .\` .\p|-\p… .\pB.\pB-\p|.$XA .dC E1"|"F0@ H@  ;x$XA .dC E1"|"F`>'p ̇P`> |"D|;!B"D|'p "Lp!ÆBL/bĈ 1bĈc/_ a'p O@ DPBװaÆ 6lذaC6lذA$XA .dp!,/_|,(`> 4xaB? 4xaB ˗/_Æ 6lذaÆ kذaÆ8`A&TaÅ H0_/_>$0 <0aA  <0… ˗aÆ 6lذaÆ5lذaÃ5lذaÆ S/_|8߿8P`|8`A̗/_&L0a„ ˗/a„ &L0a„ &L_ &L0a|&L0a„ &L/_„ ˗/a„ ˗0_B70| 'P/߿@$X_|8`A&TaC!&1_[O`1bĈE(0_|#FOa '0|O`|/|=̗/_Ĉ#F1b|0_|1bĂ H ,h|"D80_|"D|+_|˗/߿| ̗`>/|'0_A OO@ DPB >0| ̗/_70߿|'`>o8| ,X` $/_W`+X` ˗` ,X`A W0| ̗/|G0߿|/|˗O`˗? 4xaB 6tb|O` '0߿|/߿|_>1b|E/_D">̗/_#̗0_| '`>O|o`>/˗o <0… :|1a /߿/߿ O|O`|'0 <0!|*$/BSPa|)TP‚70_>/_>+o`>_|˗o`K/_> *TPB *T`> /_>O`/| ̗/| ̧_| *T0B)TX0_> ˗/B *4O|O`>˗/߿|˗o`| /_˗/|S/_> *TPB *T`>/_|˗/|O?_߿| H_| ,X`+X`,X`|+X`A  <0B.\p…˷p… .\p… [0| .\/_ .oB.0@ H@ <0.\p…˷p… .\p… [0| .\/_ .o…-\8`>'p A$ <0B.\p…˷p… .\p… [p… ˷p…)̗/|oa 'p 'p "L` .\p|-\p… .\pB.\pB-\pa>o`|-̷pA$Xp ,h „˗0B *T0a|*TPB *TP‚*TPBSPB+`˗OB8@$XA ˗/_.\p…˷p… .\p… [p… ˷p…˗O`[/… .\pBO| H*\_|6lذaÆ 6l(0_Æ 6<0 <0@$H0߿|W@$XA .dС <0… ˗aÆ 6lذaÆ5lذaà H O /_> A H*\ȰC? 4xaB ˗/_Æ 6lذaÆ kذaÆkذa| ˗o |? <0… ̗/_:ta|9tСC:tX0C:/Csa|:tСC%СC˗ϡC:tСÂ:tС|:t(0CС@$ <0…1dȐ!Cǐ!C 2dȐ!C1dȐ!C1d0a> ˗!C˧0_|2dȐa| 2dȐ|1dȐ!C 2dȐ| 2dȐa| 2L!Cc_| ǐ!C cȐ!C ˗!C 2dȐ!C cȐ!C cȐ| "̗/_> c0_> 2d/C 2dx0_| 2dȐ!C 2d/C 2d/C ǐ|c0_> ǐ!C 1dC 1t@'p "Lp!ÆBL/bĈ 1b|".̗/_El/bĈE1|E1bĈ#&1bĈa|"O@$X|$XA .dC E1"|"F|0@ H AO@ w$XA .dC E1"|"Fh`> O@ wp`>  |  <0… ǐ!C 2dȐ!C1dȐ!C H*\ȰB$X0_+XP |,h „80,h „ *̗/C 2dȐ!C  ǐ!C 'p "Lp!Æ 8`|'0_|$H`> 4xa‚ (0_>$XA .40@ H*\ȰÇ'p "LpaB$XA .d0a>'`>?˗? 4x|K(`> 4xaB 'p "Lp!ÆBd0 <0…8`A&TaÄ:D/_>|,h „ O@ DPB >QD-^Ĉ1_ƅe̘1cƌ3f̘1cƌ3f̈0_Ƅ˘1cƌ3f̘1cƌ3f̘1a˗/cƌ3f̘1cƌ3f̘1cƄe,/_|3f̘1cƌ3f̘1cƌ3.̗/|˘1cƌ3f̘1cƌ3f̘a|˗/_ƌ3f̘1cƌ3f̘1cƌ˗"|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ'P ,`>'p "Lp!ÆB(q"Ŋ/b̨q#ǎ 'p#Hp ,h „ 2l!Ĉ'Rh"ƌ7r1!|,X? 4xaB 6tbD)VxcF9v`> O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPE#'p 8`A&TaC!F8bE1fԸcG ˗Ob|}Ǐ?~Ǐ˗Oc|>~Ǐ?~Ǎ/_|?~Ǐ?~|>̗/Ǐ?~Ǐ?~1_ }Ǐ?~Ǐ0_?~Ǐ?~Qa|'Ǐ?~Ǐ?̗|>~Ǐ?~ǁ>nǏ?~Ǐ?c?~Ǐ?~1Ǐ>~Ǐ?裏>| H*L/,h „ 2l!Ĉ'Rh"ƌ7r/_ǎ uرcǎ;vرcǎu0_ǎ;vرcǎ;vرcǁ:vرcǎ;vرcLJ:vcǎ;vرcǎ;vtcLj:vرcǎ;vرcG:v/_ǎ;vرcǎ;v0_ǎuرcǎ;vرcǎ uh1_ǎ;vرcǎ;vx0_ǎuرcǎ;vرcǎu1_ǎ;vرcǎ;vH0|/_|בc|;vرcGuQGuԑ@O@70_> ,X` ,H0,h „ 2l!Ĉ'Rh"C$XA .D <0| ˗_>SPB 'p "Lp!ÆB(q"Ŋ/.̇#|0R0|'0|1&̗#F H*\x? 4xaB 6t|#FH0_s/_'`>8`A&T80… .4o… . o O@,X` ,X0,h „ 2/_ 6lذaÆ  װaÆ װaG0߿| /߿| '0߿| P`| 6l(0_Æ 6l/_| 6lذaÆ 6aÆ ̗aÆ54`|6<`| ̗/|5/_Æ  װaÆ ˗/_Æ 6lذaÆ kذaÆkذ| #aÄO`>|6lP` 6l_|6lذaÆ 6l(0_Æ 6˗|/,/_> 4hР 4hРA 4h|'p "Lp!ÆBL/bĈ 1b|#Fa|#F/bĈ˗/bĈ#F1a#F$/_ĈE1bĆEQ`#F\/_#F1bĄ"F`|#1bĈ1b"Fqa|"F1bĈ1bDEH0_Ĉ#F|/_Ĉ1bą1bĈ#FL/bĈ 1"|#̗/_>'0_|#:̗/bĈE1|E1bĈ#&1bĈ`߿/_'p "LH0_| *T_> *TPa|)TPB *TPB)TPB ˧PB*T0_|'0B &̗/B *OB *T0_| *TPB *TPa| *TPB)Ta> '0߿| '0B ̗OB ˧PB *L/_> *TPB *T`> *TP|*T0B ˗o`| O@$XA ˧PB Sp`|)4`|S_|*TPB *TP‚*TPBSP| *TX0_| *T`| *T_> /‚ OBSPB *TPB SPB  ̗OB)TPB *T(0_> *T/B'0_/_|˗/| ̧P|)TPB *TPB),/BS/|  ̗OB)TPB *T(0| ḨP| G0_|˗/|/߿|  ̗/B *TPB *TX0‚S80B*,/B SPB *TP`| *T_> +O`> @ |'p ˗? 4xaB 6tb|'0_|˗/|˗/@/߿O@+X` W`  8? 4xaB˷pB%̷Pa|__|+_ ˷p… .\p… [80_/| ̗o`'0_o|.\H0B#`>[p…˷pBw0…˗o` o 'p ˗? 4xaB 6tb|(_ _@/|O`̗? 4x| ̗/|/_| &L0|%L0@O| H*\_|6lذaÆ 6l(0_/| /| ̗o`˗O`c0 < ,h0| /| gРA 4h |,h „/,h „ 2/_ 6lذaÆ  0|˗_| '0߿|Oo'p "$ O 7@ H*,0 <0! <0… ˗aÆ 6lذaÆ5<` ̗aÅ6lذaÆ װaC O| H*\_|6lذaÆ 6l(0_Ãkذ|6\aÆ 6l0_| 6̗/| O`'0|70_|k80_| 6lذaÆ 6aÆ ̗aÅ6lذaÆ kذ| 5LO``o`|5/_ 6lذaÆ  װaÆ װ!| 6lذaC5lؐa>_|˗/_>`>+O`װaÆ 6lذaCO@ DPB1dP`> 2dȐ!Â1dȐ| 80߿|߿|G߿| o`|(0|8_|8`A&TaC!&1bĈ`˗/|/_˗/bĈ/_>O`> c/_|A̗/_Ĉ#F1b|#FH0_ q`>'0_Ĉ1b| /| '0|'0_/_> ˗/bĈ#F1a#F$/_ĈEH0_|'0_Ĉ1b| /| '0|˗_'`>? ̗/,h „ 2l!Ą"F`|#1|G0|E0_|#F1bĈ 1bĈ#F0_Ĉ#̗/bĂ"F/_'`>8`A&/_> *T/B *T0a|*TPB *TP‚*TPBSPa| *T80_| *TP`|*TP| *TP„SPB *TPB SPB  ̗OB )TPB *D/_> *T(0B *T0a|*TPB *TP‚*TPBSPa| *TPB ˗OB  ̧PB *L/_> *TPB *T`> *TP|*T0B RH!R  <0| *TP„SPB *TPB SPB  ̗OB )<0@80 ̗/_  <0a|&L0!| &L0a„˗0a„ &L0a„ &L/_„ &L0a| &LH0_„O`>C`&L0|%L0aB&L0a„ ˗/a„ &L0a„ &L_ &L0a|&L`70| ̇0|%L0aK0a„%L0a„ ̗/_„ &L0a„ &L0| &L0a„%L0a| O`>a>&L0|%LPB %P>$XA .d/_| 6lذaÆ 6aÆ ̗aÆ50@o`>/_|˗? 4xa|%L0a„&L0a„ ˗/a„ &L0a„ &L_ &L0a|&L` &L0a„ ˗/_„ &L/a„ &L`|&L0a„ &L0a„ K0a„ &̗/a„ K0a„ &L_|&L0a&L0a ˗/a„ &L0a„ &L_ &L0a|&L` &L0a„ ˗/a„ &/a„ &L`|&L0a„ &L0a„ K0J(ʗ? 4x!| &L0a„ ˗/a„ &/a„ &L`|&L0a„ &L0a„ K0a„ &̗/a„ KX0_|˗/|%L0a„˗/a„ &/a„ &L`|&L0a„ &L0a„ K0a„ &̗/a„ KH0|/a„ &4/_ &L` &L0aBK0a„ &L0a„ &/a„ &L0_ &L/a|G0| &L0a|K0J 'p "Lp|cȐ!C 2dȐ! H*\? 4xa '0߿| '0B *,/_| *TP| *TPB˧PB *TPB O@ DPB H˧P`|˗/@ O@ DPa|*TP˧PB O| H*\ȰÇ#JHE$˗ŇwD$XA .L <0… :|1ĉ+Zŋ ˗E H*\8? 4xaB 6tbD)Vh1ŋ˗/ŋ/^xŋ/^xŋ.^0_|.^xŋ/^xŋ/^wŃwŋ/^xŋ/^x|/^,/_|/^xŋ/^xŋ/^xa|]xŋ/^xŋ/^h0ŋ˗/ŋ/^xŋ/^xŋxb|]xŋ/^xŋ/^0_%'P ,h „ 2l!Ĉ'Rh"ƌ7r/_ǎ(? 4xaB 6tbD)VxcF9Z̗cG  <0… :|1ĉ+Z1ƍ3`>8`A&TaC!F8bE1fԸ|:fO@$XA .dC%NXE5n1_|+'p ,h „ 2l!Ĉ'Rh"ƌ7r80_|8`A&TaC!F8bE1fԸcG1!|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ(? 4x | O@ DPB >QD-^ĘQF#'p ,h |O@ DPB >QD-^ĘQF+'p@$X |O@ DPB >QD-^ĘQF7'p O@ DPB >QD-^ĘQF=O@ O@ DPB >QD-^ĘQF=2O@8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_)F̗"E)Rx0EG"E)RHa>)JG"E)R<"E H"E)R0E'G"E)R4"E H"E)R0E'˗"E)RX0EG"E)RHa>)N̗/E)RH`>)2̗"E)RHb|)R0@$XA .dC E1"|"F1bĈ#Fh0_Ĉ#.̗/_Ĉ#F1b|#FH0_#F1bĈ#1bĈ 1bĈ#F0_Ĉ#̗/bĈ#F1bĈE4/_|̗/| ˗/bĈ#F1a#F$/_Ĉ#F1bĈ X0|3o`1bĈ#F0_Ĉ#̗/bĈ#F1bĈE$`>˗/__|O`1bĈ#F0,h „ ̗!C 2dȐ!C 2d_> '0| /_|˗_|1T/_> 2dȐ!C 2!C 2̗!C 2dȐ!C 2d_> '0@ O@o`8`A <0… :|1a#F$/_Ĉ#F1bĈ H0_ /| /_|/_Ă1bĈ#FL/bĈ 1bĈ#F1bD"̗/_'P࿁70߿ /_>$XA .dC E1"|"F1bĈ#Fh0_Ĉ#.̗/_Ĉ#F1b|#FH0_#F1bĈ#1bĈ 1bĈ#F0_Ĉ#̗/bĈ#F1bĈE1|E1bĈ#&1bĈ1bĈ#F1|#F0_|#F1bĈ E1"|"F1bĈ#Fh0_ā`| g0| ̗/_ ˗/bĈ#F1a9'0|E,/_Ĉ#F1bĈ"2| H;o` o`'0 <0… :|1aka1bĈ#F1| '0߿|/_| /_|W0|1bĈ#F0| ̗/_'0|'`>o8|8`A&TaC!F8q`> __#_> 70_| O`/_| H*\ȰÇs/߿| ̗o`70|/| 0_#F0@ ߿8`A&T|k/߿|O`>+a| p`|6lذaÆ 6l(0_ /߿/߿| O|O`|'0 <0… O`'0_ 6l_|0_ /|W0|/_>|5lذaÆ 6lP` /_>_>/| ̗/| 0_ 6l`_ 6l |'P`/߿|O`>7P`|70_|'p'p O@ DPB >0_|˗/_'0|`>/߿/0 <0… 'p? o`'p@$XA .dX߿'p "Lp!kذaÆ 6lذ| #aÆ8`A&Ta>O`|o`> H*\ȰO@ DPBװaÆ 6lذaCG0_Æ װaÆ '0_> '0_ 6l|'p`>$XA .d/_| 6lذaÆ 6aÆ ̗aÆ 64o`> ˗/_Æ 6l(0_|5lذaÆװaÆ 6lذaC6lذ|6lذaÆ 6lذa| 5lH0_| װ`װaÆ 6lذaC6lذ|6lذaÆ 6lذaÅ6$`kX0_CkذaÆ 6lذ| 6l`| 6lذaÆ 6lذ| ˗/|/_|O 7߿8`AO@ DPB >0_Ĉ#̗/bĈ#F1bĈE/|`|70|/|1bĈ#F0_Ĉ#̗/bĈ#F1bĈA̗/_>70|O` ߿| H|'p "Lp!ÆBL/bĈ 1bĈ#F1bDO`>o`| ̗/|˗O`|拘/_#F1bĄ"F`|#F1bĈ#F4!|߿|߿o`'p  <0… :|1a#F$/_Ĉ#F1bĈ 1bą1bĈ#FL/bĈ 1bĈ#F1bD"Fqa|"F1bĈ1bDE1bĈ#F`#F\/_#F1bĄ"F`|#F1bĈ#F4/bĈ˗/bĈ#F1a#F$/_Ĉ#F1bĈ {/_|1_|#F1bĈ E1"|"F1bĈ#Fh0|E_>/|" ̗/_Ĉ#F1b|#FH0_#F1bĈ#0| ̗ |߿|_ 7? /_>$XA .dC E1"|"F1bĈ#Fh0|˗O`|˗O` /| ̗O`|=̗/_Ĉ#F1b|#FH0_#F1bĈ#0|'0_|˗O`|˗/_'p@$X_|8`A&TaC!&1bĈ1bĈ#F1|#F0_|#F1bĈ E1"|"F1bĈ#Fh0_Ĉ#.̗/_Ĉ#F1b|#FH0_#F1bĈ#1bĈ 1bĈ#F0_Ĉ#̗/bĈ#F1bĈE1|E1bĈ#&1bĈ1bĈ#F1|#F0_|#F1bĈ E1"|"F1bĈ#F0_Ĉ#"̗/_#F1bĄ"F`| H*\ȰÇ#Jh0E'P ,h „ 2l!D H*\? 4xaB 6tbD'p "LpB$XA .dC%NXE5n`> 4xaB 'p "Lp!ÆB(q"Ŋ/b̨q#G H*\8? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳi׶}wnݻyxpÉ7~yr;;PK F@P;PPK+AOEBPS/img/execi.gifKGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCO@ , <0… :|1ĉ+Z1ƍ;b̗/_>ѣG=zѣG=z,ϣ| ߿ ? 4xaB 6tbD)VxcF9v\`>/_˗/߿|/_|g0G=zѣG=z1|˗_|/߿|/߿|/_/_˗O`/_3#|8rȑ#G9rȑ#ǃ;/_>3/? '_8`A <0… :|1ĉ+Z1ƍqb>qȑ#G9rȑE$X A$(0_ ,0@ HA808p|8`A˗/a„  <0… :|1ĉ+Z1ƃG0_k0 <0,h „'p "Lp!ÆB(q"Ŋ/b̨`>G0_;oƍmܸqƍ7nܸqƂ;/_|;`>6n81ƍ7nܸqƍ7n4/|/|̷qƉ6nܸqƍ7nܸ1#|O70_>8@$XA .d0!|,? 4xaB 6tbD)VxcF`| ̗`> ӨQ|iԨQF5jԨQ| g0|;o`4jh1|5jԨQF5j1|-`>8` HO@,X_>$XA .dC%NXE [bW0_>iԘ/_>"ӨQF5jԨQƇ滘oacOƂ拘OF5jԨQFcb̷0|5̇0_|5jԨQF5j0|1g0| ̗O| 70_拘OF5jԨQFc0 $+/_`| W`/_AW`8`A&TaC!F8bE1fO#|g0|˗O`|'0_/_> ̗/߿|/߿|W0|5jԨQF5j0Fs`> /߿|'0߿| /_/_|/߿|_>曘OF5jԨQFӘ1_>+_˗/|/_|/߿|'0_O(0|8p@8`A&TaC!F8bE1fOs080_/߿|˗o|˗_|/_O /_8p| H*\ȰÇ#JHŋ3 ̧Q|/_|˗O`/|_|'0߿|'P808p`>$XA .dC%NXEӨq` #O`˗_|˗/|/_|0 '@7p? 4xaB 6tbD)VxcF4ja4j\c>5jԨQF5j|OFC"|'p ̇!8`A&TaC!F8bE1fOFKOƄ2ӨQF5jh`> 4xaB8| ,X` `| W` ,X`A ,X| H*\ȰÇ#JHŁ.^doaC/|.^L/E.^xŋ/^80ŋ -wb| ̗/|]80_| xŋ/^x|/2̷0ŋ0 <0!A$XA8`A&TaC!F8bE̗/_/_|w0_|70_| ]xŋ xŋ/^x|#O`̗_| '0|˗0|/^xE.^xŋ/^80| '0_> W0_>/_| ]xŋ wŋ/^x|̗`|#/|#/_| g0ŋ/^xa>.^xŋ/^t_>  '? ˗/߿|˗ | ̗? 4xaB 6tbD'QD%J(QD8@̗o|7_| o`|/_'p "Lp!ÆB(q@$XA .dC%NXqa G0|+O`|O`>˗/a>,ZhѢEhѢE-Zhb> 'p`#߿8_| ̗/_ O@ DPB >Q|'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉM8_'N8qĉ'N8qĉ'N8Qb'7qĉ'N8qĉ'N8qĉ'JO@ DPaA$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȑ%O\ ? 0 <0a>$XA .dC%NXE5nH1_>5̗#|:vرcǎ;vرcLj[#|;vرcǎ;vر| %b;vرcǎ;vرa| !W0_9ױcǎ;vرcǎ;60|koa>:vرcǎ;vرcG3o` ˗/| ̗_|/߿|˗O`| رcǎ;vرcǎs` /߿|'0_| /_|˗//_> <0… :|1ĉ+Z1ƍs`|/_>'0_ ̗/_/_|3cǎ;vرcǎ;vD/_|8P /_|0@ /_/_|˗O`|˗/,h „ 2l!Ĉ'Rh"ƌ7r/|/|˗O`˗`>˗/߿|/_>70_ǎ;vرcǎ;v/_|70|/߿|˗/_ ˗/|˗/_˗/_ رcǎ;v`> 4xaB 6tH? W0_` ,X|+/,h „ 2l!Ĉ'Rh"|1bĸ0|5̇0E O@˗/_|O@ DPB >QD-^D#F[`>Èq`0bĈ#F1bH1F1.̷0| -̇|aĈ#F1bĈb'0|˗O`|0O/|/_|˗O`OO ̗ AO@ D0_8`A&TaC!F8bE3/_|˗`|/|/_70_ ̗/_> /_ ̗O`| -̧`>'p 8`A&O@ DPB >QD-^D`|/|/|/_ ߿oO8`>O@ DPB 5lذaÆ 6lذaÆ 6lذaÄ3/|70_ ̗O`|K0@o߿ 'p |? 4xaB 2װaÆ 6lذaÆ 6lذaÆ g`>'߿'P`|/? O@ 7 '߿O(?#| H*\Ȑa 6lذaÆ 6lذaÆ 6\0 'p`|'0_ /_> ̗_|O 7P O8 | <0… 'p H*\ȰÇ#JHň3/_|˗`> '0_>˗/a|˗/_O_ /߿GP`>$XA .d0_Æ 6lذaÆ 6lذaÆ 6DO`> O  ? O|_||G0?_#?| H*\Ȑa 6lذaÆ 6lذaÆ 6l0_Æ 6lذ| 50!| A8`A&TaC!F8bEÈ#ƅS/_僘/_僘/_勘#F1bĈ#FaĈ| !̗`| 勘/|0F1bĈ#F)È#ƅCOa>*[Oa>0bĈ#F1bH1F1.̷0|#/a+/|aĈ#F1bĈb>1b\a+a>+a k#F1bĈ#F8`A&TaC8|`/߿|'0_|+(0_A +Xp`>$XA .dC%NXE5n䘏``|'0_G0| 1Ǒ#G9rȑ#G9B70|g0_|/_W0߿|%̗#G9rȑ#G9r/_|8P 'p` O (? O@8`A&TaC!F8bE1fԸ#|/| '0_G0߿|uرcǎ;vرcǎ5G0|˗/߿|g0|9ױcǎ;vرcǎ;J0|0_ǎ;vرcǎ;v81_|Ø`:vرcǎ;vرcGCbرcǎ;vرcǎ)[Oa[cǎ;vرcǎ;v/a>&c/a;vرcǎ;vc|s/|'p A̗? 4xaB 6tbD)VxcF9nO@$Xp |, O@$XA .dC%NXE5nG!E$YI)UdK1eΤYM9u/OA%ZQI.eSQNZUYnWaŎ%[6l@;;PK PKPK+AOEBPS/img/regconn.gifGIF87aT?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,T H*\ȰÇ#JHŋ3jȱǏ 8`A&Th?8`A&T8?8`A&T(?8`AO@80,`> 4xaB H*\ȰÇ#J'QĂ (Q|I(_>$J$/a|̗/_|I0_|%J(QD(Qb|I(Q`>$J/|%̗0|(Q|$J(QD%'QĂ (Q|I(_>$J$a(Qb|%J(QD ;/_| /_|w0_|'0|̗/_70_| ̗/? 70߿'p|#H0_>o`/_|0@ (0A70߿| /|G|#H| O@ DP| .\p… .\pB+O` `| '0_g0|W0|/| W0|3`>/|/|'0| w0| '0߿|O`|̷P`̷pa|%̷p… .\p… .`> G0|G0߿| 3`g0߿| W0|g0|/|_Oa>߿|80߿|7p o7p|˗/_>(0_|'P'p|˗O`|? 4xaB 6tbą;`|̗0_|/| w0|g0߿|70_|%G0߿|G0|/߿|70| /|˗`/_|0|̗_ W0_ /?'P`|/_>o| H*\ȰÇ#̗`| ̗O`|˷0_|/|w0_|˗/߿|/| 70_|˗/_|3`>_|'p| G_|O`|_ ̗/A˗ A/A/_>70_ |˗O`>#/,h „ 2l!D Hp G_|#`>G0߿| O@ /|G0߿|o`> ̗ A˗o|˗/߿|/|o8P 70|/_|#H`>'p (?˗_| o`| / _| 8|O@ DPB >`|'0߿|/|˗O`|1G0߿| ̗/|_`>!G0߿|/_|O`| ̗_ ̗O`> w0|_>70|0|'0߿|+/|/߿|+/߿|˗O` (QD%Jt_/_>˗/|3/_ o`>o`>'`>(_/߿/߿8P`#80_|˗/|O`|˗_| G|G`|˗o``>8P`#80A|_>˗_>/_>/_>#H_>8`A&TaC!FDOD'QD (Q|IH0| 'q`> (QD%JH0D 3OD'Q (`C!|'p   <0… :|1|%J,`>% g0D3OD[Oa>%'QD%J(`>%g0D3OD'Q"|)0D (QD%Jh0D 3OD'Q (`0D'QD%J(`>%g0D3OD'Q"| 80,/_| 4hРA˗? 4xaB 6tbD H*4 H* H* H 'p "0 <0@$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yi'p "Lp!,h „ 2l!Ĉ'Rh"ƌ7rĘcG:vرcǎ;vرcG:v4cǎ;vرcǎ;vĘcG:vرcǎ;vرcG˗/@/߿#__o ? 4xaB 6tbD)VxcF9bw0|+o`/߿|_|'0_>:vرcǎ;vرcG__'0߿|/|;vرcǎ;vر#| '0_| /|/߿|/_:vرcǎ;vرcG˗/|o`˗/|/߿|˗O`|رcǎ;vرcǎ+˗/|`0߿/_|/_|/̗/_>$XA .dC%NXE5n1_/߿| 70߿|O`|'0_|So`;vرcǎ;va/߿|`|/߿|_>O@$`>$XA .dC%NXE5n0_|;W0_D O@ 'p 'p "Lp!ÆB(q"Ŋ/bx1|52W0|{/FӨQF5jԨQF̧Q#|9̗a>i 4xaB (08p@oo /_>$XA .dC%NXE!Ө1c>3o` '0_> | O@8`A&TaC!F8bE1fD`>3KO`>`|/߿|_|˗O`>4jԨQF5jԨb>4j̘Oa+/| /|˗_ ̇0F5jԨQF5>O@8`A&Tp!|$ 'p@70| /߿|/| O@ H*\ȰÇ#JHŋ#;`3 ̧0߿|/|˗__>'0| e̘1cƌ3f̘1|̗1cF`>`|˗_>/_|ˇ0|3f̘1cƌ3f0|8`A&, g`>3/A 4808`A&TaC!F8bE121|/櫘a0|3f̘1cƌ3f̸0_|ebK/|e̘1cƌ3f̘1|̗bSoa 9̗1cƌ3f̘1cƌ Eg0|0_߿| (0A  A$ A$H A G 8`A&TaC!F8bE1*'1_| ̗__>˗O`>*惘/_>{/_1_ƌ3f̘1cƌ3*'1_| /_| /|a>M̗"|,h ,X0,h „ 2l!Ĉ'Rh"F&#`>+o`O`Cb3:̗1cƌ3f̘1cƌ Q70|/_| 70߿|_擘/_ƌ˘1cƌ3f̘1cF*˗/|`O`|˗/B$X ,h „ 2l/C:tСC:tСC:t(0C/߿| 70߿|O`|9tСCsСC:tСC:tСCs0|/_|̗/|O`|9tСCsСC:tСC:tСCs0C sСC2СC:tСC:tСC Pa>СC:dϡC:tСC:tСC:ϡ|:4? 4xaB 6tX0Ç>|Ç>|Ç*0aÇ>,Ç>|Ç>|Ç{0Ç{ÇÇ>|Ç>|Ç =LÇ=|Ç {Ç>|Ç>|C&O@ D ,h „ 2l`>|Ç>|Ç>TÇ>|Ç {Ç>|Ç>|C>|Ç>|`>|Ç>|Ç>TÇ>|Ç {Ç>|Ç>|C {Ç>|C{Ç>|Ç>|a|=|Ç>|!|=|Ç>|Ç>|0a|=|Ç>||Ç>|C=C=C8`A&TaC!F8bA$XA .dC%NXŇ0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F1bĈ#F1bĈ#F1b\;;PK ;PK+AOEBPS/img/objget.gif7oGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧ8`AO@ DPB >QD-^ĘQF)1a>=zѣG=z|ѣG=zѣG=a>=zѣG=zc>`>=zѣG=zc>`>=zѣG=zQc (?'0_|(߿ /,h „ 2l!Ĉ'Rh"ƌ7r0|˗_|_|˗_|/|=zѣG=zѣ| ̗/_̗_|/߿|˗_|yѣG=zѣG˗`>/_>˗_|/? H 'p "Lp!ÆB(q"Ŋ/b̨q|'0_|G0__|˗/|ql/G9rȑ#G9rh0|'0_|0O࿁ /,h ƒ8`A&TaC!F8bE1fԈ`> 4H? W_ ,X`,X`  <0… :|1ĉ+Z1F.c`  ,? 4xaB 6tbD)VxcF]̷0|#81ƍ7nܸqƍ7n̗`'p "$ <0!| H*\ȰÇ#JHŋ3j<a|;oa7N̷qƍ7nܸqƍ `| ̗`> ۸q|7nܸqƍ7nܸ`/|+`7N̷qƍ7nܸqƍ8 ˗/_0'p "Lp!Æ 8`A$XA .dC%NXE;_> 70_3OF9̧QF5jԨQF'0| ̗`ӨQ|iԨQF5jԨQ| ]̷0_|,'p "LH? W`8`A&TaC!F8bE1f$oaS/_>{/_|/˗oa>4jԨQF5jԨb>.[/a>Ө`| ȨQF5jԨQF1w1|)̷0F!1F5jԨQF5>0| 0_|h0_ ̗/a>"ӨQF5jԨQƇ滘a;`| e̗O`| '1F5jԨQF5>`> 4H? W0_A WP`'0_|/_/_> ̗/?7?#/A  <0… :|1ĉ+Z1|1#a>+/߿| /|'0_|˗_|/__OF5jԨQFӘ1|/_|˗O`| ̗`| ̗_|/߿|'P? o`8P`>$XA .dC%NXEӨ1_|'p@̗_|`>8_|/_˗/߿|'p@̗/_8p`>$XA .dC%NXEӨq`> g0__>;/߿|˗_|/߿|`>4jԨQF5jԨa>;`>+/߿|˗_|w0_/_ @'p| $H`>$XA .dC%NXEӨq`>Өqa>4jԨQF5jԨa>s`>  O@ DPB >QD-^ĘQ`> c/a>˘OF5jԨQFӨ`Ө`>4jԨQF5VO@ DPA$/_ ,X`+80_W` ,X`A ,X| O@ DPB H*\ȰÇ#Joĉ-7qD0_˗ob| M8a'N8qĉM8Q`&NH`>8` HO@ |"D!B'p "Lp!ÆB(_' ̷0ĉ'N8q| M8a'N8qĉ̗/_>/_|W0_|'0| M8qĉ'>̷0| ̗/_|˗o`|'P ˗o`|O@? 4xaB 6tbD̗`>W0_'0|˗a&N8qĉ[`>˗O`>+/߿|W0|3/|'N8qĉ g0_> ̗`| ̗`>co`>&N8qĉ#;O`>/|G0_G0| ˧0|'N8qĉg0_> ̗`|`|#`'N8qĉ`>'0|07p@ //,h „ 2l!Ĉ 30@@'p|G0_| G_|'p "Lp!ÆB(Q`| g0A߿ O`|'P'p |O@ DPB >| /|˗o`˗o| 8p |,h „ 2l!Ĉ'O|/|˗o|/˗/_8p? <0… :|1|̗`>W0|'0|˗a>$J(QD%J$_/| ̗/_|/_|˗`| 'QD%J(Q`> 'P?7P'P`| O 80| H*\ȰÇ#JlO`>0@ 7PO ˗/? @$o`>$XA .dC(Qb|%J(QD%.'QD$J(QD%*'QĂ$J(QD%J\ODI(QD%JTODI(QD%J0D!(QD%J0D (QD%J(qa>%B'QD%J(Qa>%'QD%J(Q|%JOD%J(QB$XA O@ DPB >Q H*\h? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI_O@$XA .dC%NXE5n#| Ǐ?~Ǐ?~/a?~Ǐ?~| }Ǐ?~Ǐ%cǏ?~Ǐ?~1_|?~Ǐ?~GǏ?~Ǐ?>0߿|?~Ǐ?~džǏ?~Ǐ?~408 A <0… :|1ĉ+Z1ƍ;n̗a>3ϣG=zѣG=z0|'0|=zѣG=zѣG)w0| yѣG=zѣG[a=zѣG=zѣ|!0G=zѣG=z`/_=zѣG=zѣ|O@ DPB >QD-^ĘQF+0G=zѣG=z`>yѣG=zѣG 0G=zѣG=z`>yѣG=zѣG 0G=zѣG=z` H`>$/,h „ 2l!Ĉ'Rh"ƌ7rX1|SϣG=zѣG=zh0_|%ѣG=zѣG=z4a>ѣG=zѣG=w0|yѣG=zѣGW0|!g0G=zѣG=za ˗_|/|yѣG=zѣG#`|˗_|70G=zѣG=zq |$/߿|#8`> O@ DPB >QD-^ĘQF ˗a>/߿|;a|QĈ +O`˗/_H"E)RD"E(RH"E)R4/b'0|1E)RH|)RG"E)RHb|"80| 8`AO@ DPB &Ç>|Ç>|| {x0Á{a>|a|70|O`|'`>߿8_>$XA .dC%N|b>([|)RHa>'0_ /_˗o`|O`|/|)RH"E)G_>(˷0E(RH|(7PO ߿@ <0… :|1ĉQa|[`|˗/_>o`|QH"E30@߿80_|/'0'p "Lp!ÆB(q|'p 8`A$`|/|/| O@ DPB "̗`|˗/߿|'P /|`>'p| H*\ȰÇ#J0E[`|/߿|˗/| H"E8 ˗/߿|˗o |/߿O|'p |O@ DPB >Qb|M8`3/| |8`A&TaÆ`| ̗_|˗_>˗O` 70߿|g0_|:tСC:t`>:t`>O@? O| H*\Ȱ!| g0_|`> o/߿7?/,h „ 2l!Ĉ'p H*<0'p`|/߿|/_8`> 'p "Lp!Æ-СC-СC:tСC ;`>:4/a 70_> 70߿|˗/| 9tСC-СC-СC:tСC!w0Ċ0|/|'0_g0|:t| 9t!| 9tСC:t| 0_>̷0C -СC0C0C9D0 $ <0… :| '0_|:̷0Ç-ÇcÇ10_|_|*̗/_>|a%̇0_[C{Ç1Çsa| {P`>|a!̷0Ç -!| =|C'p "L ` `| ,X`| H*\Ȱ|;`|9t0|*̷0C:tX0C:t(0| %̗0_̗a:tСC9`>| 9t0|:ta|:tС| 5̇0_|̗`>:t| +`|9t0C$XA8| H*\pa 6la3` ߿| (0_|˗| H*\Ȱ!| +|&СC9tСÅ sСC ;O`>`>/_|˗_W0C:t_>|"СC 9tСCsСC ;_>/|/_| ˗/߿| ̗`>:t|˗ϡ@$XA8`A&T0… .\`> 4xaB 6t? O@ O`|˗/@/_|8`>'p "Lp!Æ*̗| 6lذaÅ6lذa|kذaÆ 2̗|g0|˗/_/_|3`| 6lذ| k(0_Æ 6lpa 6l0| 6lذaC;`>;/_/_|/߿|̧0_ 6l0a 5aÆ 6l0_Æ 6|pa +/Ç>|_̗a|{Ç>|0_9̗|Ç{`>8`A&TaC9̧0|sÇ>|P |'p 8`A'p 'p "Lp!C6lذaÆ 6la>kx0_| 6lذaÆ 6lذ| 6lذ!| 6lذaÆ 6oa| C/a|+a 6lذaÆ 6lpa 6l`| 6lذaÆ 6oa̧0_>kذaÆ 6lذaÆ kذaÆ װaÆ 6lذaÁ`>`|˗/|g0_Æ 6lذaÆ 6l0| 6lؐ`>6lذaÆ 6lX0|O@'0_|˗_|`>8`A&TaC!F8`|Q`> 4xaB 6tbD8 A˗/߿|8`> 4xaB 6tbD)"O@ DP2dȐ!C 2dȐ| W0_>˗/߿|3`> 2dȐ!C 2dȐ!C1dȐ!C2dȐ!C 2dȐ|1`> _|˗`>2dȐ!C 2dȐ!C ǐ!C cȐ!C 2dȐ!C w0| g0_|/_cȐ!C 2dȐ!C 2dh0C 2dȐ!C 2dȐ!C c(0| W0,h „ 2l!Ĉ'Rh"ƌ7r0_>!0_=zѣG=zѣ| -̗/b>=zѣG=z#| 0| O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-_Ɯ+|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ1W0_?~Ǐ?~c| }Ǐ?~Ǐ'[Ǐ?~Ǐ?~1|?~Ǐ?~LjǏ?~Ǐ?>0Ǐ?~Ǐ?~a>Ǐ?~Ǐ?20_?~Ǐ?BO@ DPB > 'p "Lp!Æ O@ DPB >QD gѢE{/E-ZTϢE-ZhѢņ,Zhb|'0E-ZTϢE-ZhѢE,Zh|gѢEhѢE-ZhQa>-Z0_|-Zha>-ZhѢEhѢE1gѢE!hѢE-Zh1a>-Z1|-Zhb>-ZhѢEhѢE;/E-ZϢE-ZhѢń,Zh|˗ϢE-NgѢE-Z"(,h „ 2l| B"D "D!B"D "D!B"D!BL"D!B"D!B,"D!B"D!B1a>!B"D!B`>!B"D!B"Ą B"D!B"Ă B"D!B"D"D!B"D "D!B"D!BL"D!B"D!B,"D!B"D!B1a>!B"D!B`>!B`> 4xaB8`A&TaC=|Ç>|Ç {Ç{|>|Â>|Ç>|Ç=|Ç=|a>|a|>|Ç>|C>|Á>|0Ç>|`>|Ç>|!|>||70|o`|'`>߿8_>$XA .da|>|Ç>|C>|Á ˗/|'0߿|/_>̗O`>˗O`|=|Ç {Ç>|ÇÇ |O߿| ?_8`A&TaC=|Ç>|Ç {Ç |O@70_˗/_>? 4xaB 6tX0Ç>|Ç>|`>|P`|˗_|70_|+_| |O8`A&TaC=|Ç>|Ç {Ç 8 ˗/߿|˗o`|70߿|/߿|/|O@ H*\Ȱ|:tСC:tСC9tСÆ`| ̗_|˗O`>'0|_|3/a>:tС|:tСC:tСC9tСC`| ̗|߿_o? 8_>$XA .da>:tСC:tСÂ:t| 9t!| 9tСC9tСC:tСCСC[ϡC [ϡC:tϡC:tСC:t`>:t0|:tH0|:ta|:tСC:tСC9tСÅsСCs8`>8` H H'p "Lp!ÆB(q"ʼn*V(1|+J0| 0_W`+VXbŊ'X| 8`A&Tx? W | +XP` ,X_ ,(0,h „ 2l!Ĉ'RbŊUX| -̧0_E*WbŊ+VX|+VbŊca 0_ H0_Ŋ+VXbŊUX1b+VaW0_̗|+VXbŊ+NWbň*VXq`>3`> _>/_GP`> $H0,h „ 2l!Ĉ'RbŊ WbŊ;_>`|`|˗O`|UbŊ+VXbʼn*V0|*VX`=G0߿|/_ ˗/߿|g0_Ł*VXbŊ+VbŊ8`A&TaC 8`A˗/_˗/߿|7p |O@'p "Lp!ÆB(q"ʼn*V(0|+V81߿|/|˗/|/| Ka+VXbŊ'X|UX|g0|̗_|̗/_ $(0AO@ DPB >QDUX1_Ŋ+V\a*B̷0|+VXbŊ+NWb|+VXqas0@ H| 3h0,h „ 2l!Ĉ'RbŊ*VX| %Wa>XbŊ+Vt0 8`A8`A&TaC -̧0Ç9̷0Ç>|Ç | )̗/߿|=/_>P`>|a|0_{oa>|Ç>ÁC/|k|>|Ç ̗/{0_|[Ç>|Ç{p`>[Oa|=Ç>|(0_8`A8`  <0… :|1ąo |o G |#Hp`>#/A$H_>$XA .dC%N̷0ĉ'N8qą /_> ̗o`>0| !W0_>8qĉ'N81|'N8qĉ3/߿|˗O`|g0| 3` ˗/߿|0ĉ'N8qĉ%7qĉ'N8Qa /_|/|+`> so`> /߿|70|'N8qĉ' ̇0|'N8qĉ3/߿|˗O`|̗ | o@ 7p _/_| o|O@ DPB >QD0E)RHq"|˗_|'0O@ 'p (?/߿|0 <0… :|1ĉ%'p "Lp!ÆB1_>˗O`|o`> ca>3/߿|w0_|%J(QD%J80D%J(Qă3/߿|'0_>;`> ;o`> /_G0D%J(QD%'QD%J(Qa>Ia$ 'QD%J(QD%J(QD% 'a>5̇0$J(QD%J(QD%J(QD$>'_擘OD%J(QD%J$DI$DI4@8`A C`>!!8`A&TaC!F8bE1fԸb>U̗0|ȑ#G9rȑ#GX0| 0_| ȑ#G9rȑ#G'p O@ O@$tX |O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV&;;PKK 77PK+AOEBPS/img/ms1.gifVGIF87a4,40I8ͻ`(dihlp,tmxpH,Ȥrl:ШtJZl0 xL.zn|N .ZG}]~ l͒ڷH}Iұa_@@ݍ²:G 烡{?6,?Ǐ S)t(bD%gƀ` 9bhɳg2'JC3ڬI LuPk:]J5jӧRʵ* 'Ol}0Zi*[SZ}ӫݻx 8zB-U.SqV Pkǐbr+ն<8\ƋCϥi`סJƤNѝv|oV6:ȓ+nhsӖKNסνOӫ_ 6zwwϨ(h }& 6Q<(Vha]v`($*b(J0(2ըc4xd&($=qcv0^HirPHKR9_`CCJ%"\i`f!p.i>Q'w(f~{&hyE)<:YoF褌yDQPJCD=B1(&Q*q.T *cb*jꮓ)&Qqqˆf6 kZ뫅{{)Dk߲نVZ"nN!mݖTôh:^$10FDj0IaAe>(q:r[|Bkk&;\-u20,sJ-JOr0K 4KMJ3-Go-^=vw3NSMveWm1Utg&-Ҝ.kxvntHxK-:u m64v\*`[:dw-9#.0Dukgԥo˾{Q.+/ck}ӭV,4 S }3NXG~zj9~q6/{_7?bO{W?~֦v&=u@t˜Ȉ'?yhȫX<2 s`zlN5kfHnM5 68ARDߣjQ2T8}Hr} RThD#U(qb}( lԂ01 qL#q gcxYOwfLڧ@Oi3M(!r$&@ ("13?eO*z<"DA@pU֯z#5п*UZj % Zu7uO Q^ gFaQ*I){LC dgE!Mbd4IEXUFu R4ʉuz35صFprR򬋥?Q{u/ujdٺVkMgF.Yņc]mkS{0[;7$XònGx3l2{ܫ <_Mpt:򎸧aWdZТwqu^lպ7o\0q|ogSe'Oσ^r!?z̗>qo06'6=og\U>r^G˽xnmq]Ezs^tp?9wh1v}w\W;-< vhK~7WTŽzyΛLt=C4 =ګ۬'tw{מes?hy<L[?i'M{׷Cq|>o~<ӟٗawsrwqbwmlo }'}p uC7 Xh|z瀆wvWm.g#H{bhplHwvt>f#8~~w{u?2~7'f|VwuȄXxvN( xppIwyYXyB}H춁fl]b6vpg-sX_krv6WxDXƈ{^H&Fg zƉ%htmFvnynX&與Vuo-hxcz臘拯8wqVin#y׍pȊPHn9xhn<}f(&xkxwUtjx8aw|tuK'Hr?r*8v ِ14(n[nj,q /z}֨0$hؒ$1yz 4牮>3HF: -?єN AD@OYV fFv\ٕ0fԸgfy< Pqh9Cm6qAiv9Dqϐ9IҨwRїyqRq%(Ӗ}闖mњ,5Bix y۰m!YyٜٜkEOCɜ۩)Y y[ym1ٞ0QȔ9KaSy`Z,YZ*b.vI (Ҋ!:.I(*!&Z)ڢ 2 (3z4"*EA֣>nK:zC"35r򖶑lJ1&rfJ"{˷@ ]C"jB=JfFS*[0ʔ(@ZBKO;Jj "+zATʼfc eknH"{wY"嘫xt{ۉ KSqچ!V*cUz9 cK;R˻F <*XVsVaȌNZ ̽U"8 >Il@ײʳܶ,|.̰ +4XU  ya+ı%EJȭK`w$?u?\Twcl.d'L)̶d{C?z@ vzDz&rPr[{G#;KK c`+5)0DJ=(%l[J 0?GL@hˀ˙H¸GܷB[m[\"ej͘<,L䌼]zᔻ`H}@|,,cdiЀmɛ"M(Kͣ@oL=鈨aw~ n|ZkkWn}k%0`,Fҟ l, }0fE3 ^0ZVӺWy< |;/MCL6t|9pl %pr׵;Lz0M_Cɼ=SH?d]Ewh>7pe}UZћ=s?S[] 'MF3k\qǂA}#.a]t\59NMlb m,KʀIs=DC{cpҦ]ۖڬ-32ꛩ!CZ`״͠=ܽ[͡$Ьڗl#Ì bIПF ͜d\ݹA|^0#ALL@ed=I tuƫ"5}ȽI-=_5HbP6>,&+>38BAr}1^BKqL59^tmJLyNYIT> :D7 #=sSA]~6`7E V+KmbumS^^W`uQ'J]'tN5: ۅGg^a.׈s3̥#n[ $_%#^\nCMͬ#.H;,-CĜUR}MB;]D XWӃ3l#7sLXܮľM岍^%C퍽c#ֺ]o=-57ήžƏN/t;~>#NrC@.^3MD84s73,tߎm;8v~7BVf>[Veڜ;m?o \جϬo])%θH_L?]UĿ4n?Ivb͏ߏr$Fݭ%zKDO~_pDZ? 8ͻ`(dihZ -ۡ[N$pH,Ȥ2gT&t^dzxLl*Sj6}H>djO#pZ\{B} SV;i ?mj7lon etr5 ̊ bŭӰ*->>Lm yKfAl*\0#J|lŋTȱG?I2CȒ(Sz|ծ˗0cʜI͛8sɳϟ1JѣH*]ʴӧPJ իXjʵׯ`ÊKٳhӪ]˶۷p#$;PKPK+AOEBPS/img/collres.gifGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ C `> 4xa>$XA .dC%NXE5n"|'p O@$XA .dC%NXE5nQb|<&̗/G=zѣG=z_|ѣG=zѣG=ż0_>yѣG=zѣG%̗c|=zѣG=z#|8P  ̗/| ̗/߿|˗`>$XA .dC%NXE5nؑa˗/_̗_/|˗O`0@0 < ,h „ 2l!Ĉ'Rh"ƌ7f̗_> ̗/| ̗o`_| Ǒa|9rȑ#G9rȑ|308P`> /߿oO@ Dh0,h „ 2l!Ĉ'Rh"ƌ7RW0lj8>Ǒ#G9rȑ#G8`A8|+X |'p  ;xO@ DPB >QD-^ĘQ|1w0F6J̷qƍ7nܸqƍ滘a6F̷qb7nܸqƍ7nx0| !̗o|)۸qƍ7nܸqƍ!̗O |'P`7p'p "/_„ &? 4xaB 6tbD)VxcF!̗`>c0 <0,h „'p "Lp!ÆB(q"Ŋ/b̨`>˗o`>Coƍmܸqƍ7nܸqƂ;/߿|!G0|7noƍ7nܸqƍ7̗`| ̇0_|mܸQb7nܸqƍ7n08|?'p A H*\Ȱ!B$X0,h „ 2l!Ĉ'Rh"ƌ/|a>ӨQc|iԨQF5jԨQ| g0|!70|5jb>5jԨQF5joa[0@ H A$XA 'p A ,(0,h „ 2l!Ĉ'Rh"ƌ-w1| +/|iԘ/|iԨQF5jԨQ#| ]0| 1̧Qc| ȨQF5jԨQF1w1|-̧0F!1F5jԨQF5>0| 0_|iD`;/b>5jԨQF5j|!|,h | WP`|+Xp` ,/_|+/_O@ DPB >QD-^ĘQ`>g0|̗/| O@ 70߿| ̗_/_|˗/ 7pO@ DPB >QD-^ĘQ`>a>;/߿|˗/|̗_>/_/_|/_>#ob>5jԨQF5j|O|=G0߿| ̗o`|;_>'0| /_| '0_>4jԨQF5jԨa>˗!| O70? O/_| `>'? 4/,h „ 2l!Ĉ'Rh"ƌi80|w0|˗/|'0| ̗o`|/_>ØOF5jԨQFӨq` #O`/_>a> /߿_/,hp`>$XA .dC%NXEӨ`Өqa>4jԨQF5jԨa> ka>  QD-^ĘQ`> c/a>˘OF5jԨQE$XA O@,X` ,XP`+X0_ ,X` +X`,(`> 4xaB 'p |,h ƒ H*\ȰÇAQa B0_1̗"D僸0|!BH0|!&"D!Bl"D -"D ̗/|A_| 60D!g0D A"D| Aa| 'p "LH? 4x`>!D!Bg0B"!B"D!B"DX0A ߿ @/_ ? 4xaB 6tbDC/_#`> ߿߿|? `>  8PO@ DPB >,`` /߿| ̗0|!B"D!0|70|W0|/|`>_'0|A"D;`#`W0߿| -"D!B"| G0_#`>`|˗O`> ;o`| O`>"D!*'0|`>``>!B"D GP`>O`># |#/߿|G0|o`˗/|#80| H*\ȰC;0@ H|'P`o|O@ DPB >Qb|g0_| G0AO@G_`>#8`> | _>`>$XA .dС@$H?#(0߿|G0A#/߿| O@ DPB >QD o| '07_ 7_|O`|'p@o`O`>08`A&TaC w0_| W0|_>/a>|Ç>|`_ G0| 70| ̗_>G0߿| /|`{Ç2'0A߿|G?˗o |? ? 4xaB 6tbD w0_|˗/|/_|(|߿70߿߿/߿8_ _>o`>$XA .d B0D!B"D!"D 1a>!Bb|!BT"D!B"DA"|A0D!Ba>!*"D!B"D B`> BL"D!B0D"D!B"|!BH0|!&"D!Bl"D A"D!Bb>!B$`>"D!6"D B"D!B1D!g0D A"D'p "L ,h „ 2l!Ĉ' O@ DPB 0 < ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+X H*< <0… :|1ĉ+Z1ƍ9Q`;vرcǎ;vؑcرcǎ;vرcǎ9Q`;vرcǎ;vؑc_| 70_|0@ <0… :|1ĉ+Z1ƍ9;O`|'0_>O`| 70| ױcǎ;vرcǎ;rw0|o`>#O`|`>'0_ǎ;vرcǎ;v1߿| /߿| '0߿|`> o`:vرcǎ;vرcǍ'0߿|70|̗_>+O |/,h „ 2l!Ĉ'Rh"ƌ7r08_>/|G0? _'P`>08`A&TaC!F8bE1fԸ| w0|O`| 70_| 70|o`>uرcǎ;vرcǎ;__| '0_|#o`>70|Scǎ;vرcǎ;v4Oa[cǎ;vرcǎ;v$oa[cǎ;vرcǎ;v$oaccǎ;vرcǎ;voaccǎ;vرcǎ;voac"|O@'p "L <0… :|1ĉ+Z1c2fTas/|2f̘1cƌ3f̘c H*<+X`+X_ ,X`'p "Lp!ÆB(q"Ŋ/b/cƌ 5̷0|1˘1cƌ3f̘1cƊ2f̸0| !0߿|%70_ƌ3f̘1cƌ3R̗1cƅk`>[/b2f̘1cƌ3f̘a>2f0|g0|̗/߿| /߿| O@/_|˗o| H*\ȰÇ#JHŋ#/cƌ/|g0_/߿|'0߿|˗`˗/߿|˘1cƌ3f̘1cƆ˗1cƈ+/|3o`/_>#`70|3f̘1cƌ3fX`> 4xaB 6t? O@ o`0_>_> G`> 'p "Lp!ÆB(q"Ŋ/Nw0F1/|g0_/߿|'0߿|˗`˗O`>È#F1bĈ#ƂÈ#ƃ3`>;/__/_O`G0|1bĈ#F1b80F1R0|10F1bĈ#F1 ̇#F5̇0ƃ  +XP`>$XA .dC%NXE0bĈbÈ_0bĈ#F1O@$Xp |,h ,H0,h „ 2la-C{Ç>|ÇW0|*̗|>|CsC=Ç>|Ç>La| =t/|>|Ç ? 0 <0!,(0,h „ 2l!Ĉ'RDoa>*.0_Ŋ+VXbE*VXbŊ+V*VXbŊ+FWbŊ+VX| 1߿| ̗oa+VXbŊUXbŊ+Vh0|g0_|'0߿|'0_|G0|+VXbŊ%XbŊ+VXq`#O`˗/_/_|/_ #`+VXbŊ!WbŊ+VXb|`> 7_/_> o|/,h „ 2l!Ĉ'R̗`>)RH"E 8@$H`>'p` /?@ O@ DPB >QD'p "Lp!ÆB(q"|9W0߿|/_|_|˗_|W0E)RH"EH"E)RHq`>3`> ˗O`|_|˗O`H"E)RH|)RH"E)0|!H"E)RH"E)RH"E5̇0E(RH"E)RH"E)RHb| %Ga>)RH"E)RH"E)R81| Qd"E)RH"E)RDEQDEQP>/A#H A  <0… :|1ĉ+Z1ƍ;̗/|A̗/|yѣG=zѣG0  <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵl;;PK"qPK+AOEBPS/img/lobtrim.gif GIF87aXE?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,XE H*\ȰÇ#JHŋ3jȱǏ CII H 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/_2dȐ!C 2dȐ!C 1_ 2dȐ!C 2dȐ!CԘ/|!C 2dȐ!C 2dȐ!̗/|!C 2dȐ!C 2dȐ%̗/|!C 2dȐ!C 2dȐO@ (0_|'0_|/_>8`A&TaC!F8bE1fԸcGAZg0_/_/߿|_ 70_Ȑ!C 2dȐ!C 2| ̗o`/߿|/_> 2dȐ!C 2dȐ!C/_| ̗o`/_| /? |,h ƒ H*\ȰÇ#JHŋ3jȱǏ g0_>`> /|˗O`@*$H A $H A`> (?0__>$XA'p "Lp!ÆB(q"Ŋ/b̨q#ǎ8`A8|+X` ,(0_ ,X|8`A&TaC!F8bE1fԸcǍ.c`  $? 4xaB 6tbD)VxcF9vܘb>0G O@ 7p/,h &L0| H*\ȰÇ#JHŋ3jȱ|#a>'p "$ <0!| H*\ȰÇ#JHŋ3jȱ|70| y1a>=zѣG=zѣ|̗_#`>=&ѣG=zѣG=z\/|a c|=zѣG=zѣǁ H?'P8P |$ <0… "O@8`A&TaC!F8bE1fԸcǁ`| ̇0|y1a>yѣG=zѣG'0| ̇0|y1a>w0_>uԘ/_|uرcǎ;vرcǎ1w1|)̷0_ǎ!1_ǎ;vرcǎ;v1|1g0| ` ;`:vرcǎ;vرcnj滘a>C`>4+`"رcǎ;vرcǎ3c0 $+|+(0_/_> @/_>/_|˗O`/@ 8p@8`A&TaC!F8bE1fԸc|+#a>3/߿|/_>3/߿|˗_|/_|/_| W0|;vرcǎ;vرc|-a3O`˗o`#/߿| ̗/|'0|囘cǎ;vرcǎ;v̘|s080| `>8_˗/߿|O7pO@ O@ DPB >QD-^ĘQFuԘa3O`˗/|'0| ̗o`|/_>Øcǎ;vرcǎ;v̘|G0| '0_|/|(_߿|_>$X| H*\ȰÇ#JHŋ3j1c9w0_ǎaױcǎ;vرcǎ;fqc0 H!D0,h „ 2l!Ĉ'Rh"ƌ7r̘| %ױ|uرcǎ;vرcǎuoa>:vOc;vرcǎ;vd0 <0‚ H_ ,X` W`+X` ,X| ,XP`'p O@$X H|O@'p H|,h O| H?$X H*\ȰÇAQa B0_9̗"D0|3";a|)1a̗a|"D!2"DbC O@'p "L? 4xP`>!D`>"D_>!/"|"a>!!Bˇ!B"D!B"!B"D(08`A&TaC!Fta> 'a>SO|I<`(1D%J0A ߿ @/_ ? 4xaB 6tbD;`|˗/|O_@o8P`8p`8`> A$ A G 8`A&TaC;`>+o`/|%̷0D!B"D[`>O`|̇0|'0_>w0_|A4`>`>;|A"D `>`> /_|%70|!B"D!&w0| W0߿|+o`>#o`|'0_``|/_| '0|g0|g0| 'P| ̗/߿| /߿| ̗/@ ? 4xaB 6t0߿|̗o`>˗O`K`>>|Ç>|h0|70_| g0|!G0| ̗O`|/|g0@'? _o|/߿|(08_|'0_˗_|/߿|(0,h „ 2la|(?8? O@ / /_| H*\ȰÇ#J/_;o`'P (0_`>O|'P`8p ̗o|o ̗o@(0 ̗o(0_/_> ߿߿| o| H*\ȰB$8?#(0߿|G0A#/߿| O@ DPB >QD /|o`>8P  G0| /_O@ H | O /O@ (0|#(`>'p A (?0?80,h „ 2l`+O`> `|'0_|%G0Ç>|Ç/| ̗_ #_>_>/_|0|70_˗`!G0| #_>`>_|/_>`>|Ç w`>/?O|0@O|'p "Lp!ÆB(a>˗/|/_| '0| ̗/|`3`;/_˗`>C`|70|70| /_|/|'0|7qĉ'7q&N8qĉ'No|Mt`80| 3a&N7qĉ'7q&N8qĉ'No|Mt`(0| 3a>&J7qĉ'P>$XA ̷p… .\p… .\` 3o…[Oa!̷p|-/a ̷p… .\p| .\p` .\p… .\p…-\x0| .̗0_|[h0_| ̇0| -\_ .\p… ˷p… [p… .\p… .\X0…̷p| ̷p`)̷p| ̗o|.D/… .\p… 'p "L ,h „ 2l!Ĉ' O@  H8? O@8?$XРA$08` H8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[;;PK0^% PK+AOEBPS/img/setdnc.gifgGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիX'p " <0… :|1ĉ+Z1ƍ;b`>=zѣG=zc| ѣG=zѣG=&`>=zѣG=zc|(_ | /,h „ 2l!Ĉ'Rh"ƌ7r1|/_>˧0G=zѣG=z1a> '0_|˗Oa>=zѣG=zc|#/߿|˗/|=zѣG=zѣDŽG0_ o@? 4xaB 6tbD)VxcF9v/_|#/߿|˧`> 4xaB 6tbD H*\ȰÇ#JHŋ ̇0_>˗`| aĈ#FaĈ#F1bĈ|!̗`|#0@ /,h „ 2l!ĈI(QD%J(QD%̗`>I(QD%B'QD%J(QD%JH0_|#(QD%JOD%J(QD%J(`$F'QD%J1D%J(QD%J(Q|IOD%J(1b>%J(QD%J(Qā 1D%J(Qb|%J(QD%J(QD'1b>%J(QĈ$J(QD%J(QD+0 <0,h „ 2l!ĈI(QD%J(QD%'QD%J(QĂ$J(QD%J(QD(QD%J(Qb|%J(QD%J(QDI(QD%J(`>%J(QD%J(Qā$J(QD%JX0D%J(QD%J(Q|%J(QD%J,OD%J(QD%J(q`>%J(QD%'QD%J(QD%J80_A$XA 'p "Lp!ÆBd/bĈ#F1bĈ#F1|E0_Ĉ#F1"|#F1bĈ#F1bĈ+/bD"F1bĈ1bĈ#F1bĈ#F(0_|̗/_>/_> /߿'p| H*\ȰÇ1bĈ#F1bĈ#F(0_|/|/|/|1bĈ#Fd/bĈ#F1bĈ#F1|̗o`|/_|/|1bĈ#Fd/bĈ#F1bĈ#F1|̗o`|/_˗O`|E1bĈ#21bĈ#F1bĈ#FQ` 7`> 70߿' /,h „ 2l!D"F1bĈ#F1bĈ# O| /|˗_| /|'0_'p "Lp!ÆBt <0… :|1ĉ+Z0_|/|/|/_>̇#F1̇#F1bĈ#Fg`> O? O8`A&TaC!21bĈ#F1bĈ#FQ`"Ft/bĈ#Fa#F1bĈ#F1bĈ1|#F1bĈ E1bĈ#F1bĈ#F`1bĈ#Fd/bĈ#F1bĈ#F1|E0_Ĉ#F1"|#F1bĈ#F1bĈ+/bD"F1bĈ1bĈ#F1bĈ#F(0_|#:1bĈ#F0_Ĉ#F1bĈ#F1bD 'p "LX? 4xaB 6t"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈ1bĈ#F1"|#F1bĈ#F1bĈh`> 4x ,h „ 2l!D"F1bĈ#F1bĈ# ` E1bĈ#21bĈ#F1bĈ#FQ`El/bĈ#Fa#F1bĈ#F1bĈE4/b|#F1bĈ E1bĈ#F1bĈ#F/|˗o`|˗/_"F1bĈ1bĈ#F1bĈ#F(0_D '0_ ̗Oa#F1bD"F1bĈ#F1bĈ# `> ̗_|S? 4xaB 6t"|#F1bĈ#F1bĈH0߿|O`|S/bĈ#Fa#F1bĈ#F1bĈE,/A o8_>$XA .dC E1bĈ#F1bĈ#F!|O|/_ 8|O@ DPB >80_Ĉ#F1bĈ#F1bDw0_> ̗_|Sa|#F1bĈE1bĈ#F1bĈ#Fa>3/|80G| H*\ȰÇ1bĈ#F1bĈ#F(0| ElOa#F1b"F1bĈ#F1bĈ# ̷0|[/bĈ#F1_Ĉ#F1bĈ#F1bD[/b| E1bĈ#1bĈ#F1bĈ#F(0| Eloa#F1b|#F1bĈ#F1bĈ[oa -`> 4xaB8`A&Tx0,h „ 2l!Ĉ'Rh| -̇`Èa>È#F1bĈ#Ɓ[0 ̷0F1w0߿| ̗/_>˗`|(߿70 <0ƒ8`A&TaC!F8bES#F3/_|/|/߿|70_/_>̇|1bĈ#F1b80|1"̷0A ' ߿|?߿|'?'p "L`>$XA .dC%NXŇÈQa30@߿80_|'0'0'p "L`>$XA .dC%NXҡ|g0_|˗_|(?˗O`| 08_>$XA  <0… :|1ĉ+Z`> 4xaB O|/_ Oo`߿@O@ DPaB$XA .dC%NXŇ0bh0_>'0_ /_/_>70|/|1:̇#F1bĈ#FaĈ` ˗/|'P? /߿'߿'߿80,h „ O@ DPB >QD-^|#F ̇#|1:̇#F1bĈ#FaĈ`>Èa>1bĈ#F1b#Fa0FaĈ#F1bĈ|1b<#F0bt#F1bĈ#FÈ|12̇|1bĈ#F1b80FÈa>È#F1bĈ#Ɓ0bx`> 4xaB8`A&Tx0,h „ 2l!Ĉ'Rh|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|8`A 'p "Lp!ÆBd/bĈ#F1bĈ#F1| 0_Ĉ#F1"|#F1bĈ#F1bĈh0_Ć"F1bĈ1bĈ#F1bĈ#F(0_D"61bĈ#F0_Ĉ#F1bĈ#F1bD"w0_|˗/߿|;/bĈ#Fa#F1bĈ#F1bĈE4`|/|1bĈ#Fd/bĈ#F1bĈ#F1| 3/|70_>8`A&TaC!21bĈ#F1bĈ#FQ`g0_>70_>"F1bĈ1bĈ#F1bĈ#F(0_ĂO?O@ DPB >0_Ĉ#F1bĈ#F1bD'p A̗O`|/'p A$XA .dCE1bĈ#F1bĈ#Fa|3/|70_>1bĈ#F(0_Ĉ#F1bĈ#F1bDC_> `>'p |  <0… :|_#F1bĈ#F1bĈ1̧0_Ć1bĈ#F/bĈ#F1bĈ#F1| -a"F1bĈE1bĈ#F1bĈ#Foa"6̷0_Ĉ#F1b#F1bĈ#F1bĈ-̷0_Ć1bĈ#F1bĈ#F1bĈ#FQ`0| 8`AO@ DPB 5lذaÆ 6lذaÆ 6lذaÆ-̷0_Æ-0_Æ 5lذaÆ 5lذaÆ 6lذaÆ 6lذaÆ-̷`> 4x `A ,X`8`A&Ta| 6lذaÆ 6lذaÆ 6lذa| 5lذ| ̗/_ O'p| H*\0a 6lذaÆ 6lذaÆ 6lذ`>6lؐ` '0|70_>6lذaÄ6lذaÆ 6lذaÆ 6lذaÂkذaC3/|#/|kذaÆ kذaÆ 6lذaÆ 6lذaÆ KaÆ ;O`> /_|'0_|kذaÆ kذaÆ 6lذaÆ 6lذaÆ C/_Æ w0߿|_ ̗O`װaÆ 5@8`A&TaC!F8bE'p "Lp!Á /|˗o`|˗o H*\p!,h „ 2l!Ĉ'Rh|1b4/|/|/|aĈa>1bĈ#F1b#Fg`>߿| ߿'p`>$XA .d0_Æ 6lذaÆ 6lذaÆ 6lX0_Æ 6\O` kذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ k0a 6l0a 6lذaÆ 6lذaÆ 6lذ` 6l_ kذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ k0a 6l0a 6lذaÆ 6lذaÆ 6lذ` 6l_ kذaÆ kذaÆ 6lذaÆ 6lذaÆ*| H*\_ kذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ 'p " <0… kذaÆ 6lذaÆ 6lذaÆ kذaÆ 6lذaÆ "װaÆ 6lذaÆ 6lذaÆ װaÆ 6lذaÆ 6DaÆ 6lذaÆ 6lذaÆ 6,aÆ 6lذaÆ 6l0_Æ 6lذaÆ 6lذaÆ 6lX0_Æ 6lذaÆ 6la 6lذaÆ 6lذaÆ 6lذ` 6lذaÆ 6lذ!| 6lذaÆ 6lذaÆ 6lذa| 6lذaÆ 6lPC !P>$XA .dC%NXŇ 'p "Lp!ÆO@ DP…2dȐ!C 2dȐ!C 2dȐ!C +!C 2dȐ| 2dȐa| 2dȐ!C 2dȐ!C 2dȐ!Cǐ!C 2dpa> 2dȰ`> 2dȐ!C 2dȐ!C 2dȐ!Á cȐ!C 2d0C 2dX0C 2dȐ!C 2dȐ!C 2dȐ|!̗/| ̗o`| ̗`|'P?˗O`|O@70|/߿|8_>$XA .\!C 2dȐ!C 2dȐ!C 2dp`/_ ̗O`|/|/_> ̗o`|;O`| g0_> ̗O`|˗Oa> 2dȰ`> 2dȐ!C 2dȐ!C 2dȐ!Á 3/|/|'0_> ̗o`> ̗o`|3/| g0_|/| ̗/_>2dȐ!Â2dȐ!C 2dȐ!C 2dȐ!C + |(0_>˗/_ '0_|7p`|/| ̗O`|7p`|'0_|˗|'p | H*\0C 2dȐ!C 2dȐ!C 2dȐ|̗ |O࿁O? /@$8P'p`|'0߿|˗| O8`A&Tpa> 2dȐ!C 2dȐ!C 2dȐ!Á ?_|/_|/߿|/|/|7p`80_/_>/_|(? 'p "Lp!| H*\ȰÇ#JHŋw0|'0_|/|O`> ̗O`|/|˗`|/߿|/?O@8`A&Tpa> 2dȐ!C 2dȐ!C 2dȐ!Á C/_> ̗/| ̗`>/@߿| `>O '0_˗/߿|80 <0… 1dȐ!C 2dȐ!C 2dȐ!C W0C 2dȐ!Å2dȐ!Â2dȐ!C 2dȐ!C 2dȐ!C +!C O@$XP |'p ̇!B"D`>$XA .dC%NXŇ È#Ƌ0bX0F1bĈ#F1W0F1^̇#Ƃ0bĈ#F1bĈq`0bĈb>1̇#F1bĈ#Ḟ#FaĈ`>1bĈ#F1b |,h „ 2la>$XA .\!C 2dȐ!C 2dȐ!C 2dp`> 2dȐ!C 2dȐ!Å2dȐ!C 2dȐ!C 2dȐ!C cȐ!C 2dȐ!C 2\!C 2dȐ!C 2dȐ!C 2dp`> 2dȐ!C 2dȐ!Å2dȐ!C 2dȐ!C 2dȐ!C cȐ!C 2dȐ!C 2\!C 2dȐ!C 2dȐ!C 2dp`> 2dȐ!C 2dȐ!Å2dȐ!C 2dȐ!C 2dȐ!C| H*\ȰÇ#J0E)RH"E)R0Ł H8`A&TaC!21bĈ#F1bĈ#FQ`El/bĈ#Fa#F1bĈ#F1bĈE4/b|#F1bĈ E1bĈ#F1bĈ#F/|1bĈ#Fd/bĈ#F1bĈ#F1| ;/_|˗_|1bĈ#F0_Ĉ#F1bĈ#F1bD"g0_>˗o`| E1bĈ#21bĈ#F1bĈ#FQ`̗O`|/| H*\ȰÇ1bĈ#F1bĈ#F(0_D3/|/|#F1bĈ E1bĈ#F1bĈ#F/b| 'P'p "Lp!ÆBd/bĈ#F1bĈ#F1|8 '0_ ̗o8 ,h „ 2l!ā"F1bĈ#F1bĈ# 0|̗O`|/| E1bĈ# 1bĈ#F1bĈ#FQ`>`|O| H0A'p "Lp!ÆB/bĈ#F1bĈ#F1| S/b| E1bĈ#1bĈ#F1bĈ#F(0| Eloa#F1b|#F1bĈ#F1bĈ[oa -1bĈ#F/bĈ#F1bĈ#F1| -a'p "Lp!Æ 8`A8`A&TaC!F8bE[oa>-0F1W1F1bĈ#F1̷0| [a>1b,b>1bĈ#F1boa H8|  <0… *`>:tСC:tСC:\oa>6̷0|/_|(_o`/߿?#/_| '0_|(_O$H| H*\ȰÇ#JHŋ)̇#| ̗O`|̗_|/|/_|`|#/|o`|/|aĈ#F1bĈ| aĈ0|/_|/|'`> ߿?//_/_> /80,h „ 2l!Ĉ'Rh| aĨ0|̗O`̗_|/|/_|70_|G0_|K/߿|w0_|1bĈ#F1b80|12w0߿|(@O O࿁߿| /@ '| 'p| $H_>$XA .dC%NXŇ H*\p '0_|̗_|/|0@'߿(0_ /߿|/_>˗O`|O@ O@ DPB >QD-^|#Fg0_>g0_>/_>'0_|'0|G0_>70_>˗O`|U̇#F1bĈ#FaĈ`> 7`>'߿߿ @ 0 O''p| $H_>$XA .dC%NXŇ0bx0F1W1F1bĈ#F1̇#ƃ0b40@ H Kp`>$XA .dC%NXŇ0bx0F1W1F1bĈ#F1̇#ƃ0bĈ`0bĈ#F1bĈq`>1̇#FU̇#F1bĈ#FaĈ`>1b,b>1bĈ#F1b#F8`A&TaC H| H*\ȰÇ#JHŋaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#ƉÈ#F1b\/a>1bĈ#F1*g0F1bĈ| aĈ#F1bh`> $ <0… :|1ĉ 8@$XA .dC%NX|]xŋ/Ņ0ŋ/^xŋ'; |,h „ 2l!,h „ 2/a 6lذaÆ 6lذaÆ 6l0_| 6lذaÆ 5lذaÆ5lذaÆ 6lذaÆ 6laÆװaÆ 6l0_Æ 6l80_Æ 6lذaÆ 6lذaÆ 6lX0_| 6lذaÆ 5lذaÆ5lذaÆ 6lذaÆ 6lذaÆw0|0@o/߿? ˗O`'0_|G0_|(| 'p "Lp!Á6lذaÆ 6lذaÆ 6lذa 3/|70_>'0_ ̗O`|K/߿|/|'0_ ̗_|/|g0_Æ 6l80_Æ 6lذaÆ 6lذaÆ 6lX0_|/_ ̗O`|/_ ̗O`|/_> ̗_|/|/߿|'0_>6lذaÁ6lذaÆ 6lذaÆ 6lذaÂ(0/|/| 0@@/|'`>߿ O|7_| /,h „ 2aÆ 6lذaÆ 6lذaÆ 6,`>˗/|/|̗/__|C/A/߿/?'p`|(@ /,h „ 2aÆ 6lذaÆ 6lذaÆ 6,080_/_|/_˗_|˗/߿|/| ̗O |'߿ _߿ H*\Ȱ ,h „ 2l!Ĉ'Rh|̗O`|O`|o` ̗/_>˗0|/߿|˗O`|O`> ̗_|/|1bL#F1bĈ#F+`|` ̗O`|'0_|8?˗_|`|G0| ̗|߿| ? 4xaB װaÆ 6lذaÆ 6lذaÆ W0_Æ 6lذ| 6lذ| 6lذaÆ 6lذaÆ 6lذa|5lp!|'p "L` .\p!| H*\ȰÇ#JHŋ̇#FaĈ1a>1bĈ#F1b`>1b#F aĈ#F1bĈ|aĈ|1bL#F1bĈ#F+#F'Èc|1bĈ#F1b80_A$XA .d!C$XA .d80_Æ 6lذaÆ 6lذaÆ 6lX0_Æ 6lذaÆ 6la 6lذaÆ 6lذaÆ 6lذ` 6lذaÆ 6lذ!| 6lذaÆ 6laÆ 6lذa| 6lذaÆ 6lذaC6lذaÆ 6lذaÆ 6lذaÂ6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ 6lذaÆj!'p "Lp!ÆB(q"Ŋ/>W`> 4xaB 6t? 4xaB װaÆ 6lذaÆ 6lذaÆ W0_Æ 6lذ| 6lذ!| 6lذaÆ 6lذaÆ 6lذa|5lذaÆ *װaÆ װaÆ 6lذaÆ 6lذaÆ W0| ̗/| O@̗/@ o`߿'p`˗O`˗O |߿80,h „ 2$aÆ 6lذaÆ 6lذaÆ 6,`> ̗O`>'0|o`|0O  ̗o`|/߿| ̗O`|#(0,h „ 2$aÆ 6lذaÆ 6lذaÆ 6,`> ̗_>3/| '0_> ߿|'p|G0_|G`|/A8`A&T!| 6lذaÆ 6lذaÆ 6lذa|̗O`|̗/_̗`|_| /_> ̗`|˗0_> ̗` 6lؐ` 6lذaÆ 6lذaÆ 6lذ` 'p|' O@/@ 70߿(?0@߿ ? 4xaB װaÆ 6lذaÆ 6lذaÆ O| /|/_ ̗o|/|'p/|˗/|'0_>0 <0… 'p "Lp!ÆB(q"Ŋ/>W0|'0| 70_> 70_> O'?70_> ̗_ ̗O`|#(0,h „ 2$aÆ 6lذaÆ 6lذaÆ 6,`> ̗o`|˗/|˗/|7`>G0'p  O80,h „ 2$aÆ 6lذaÆ 6lذaÆ 6,` 6lذaC6lذaC6lذaÆ 6lذaÆ 6lذa kذ |'p O@$XA%L0a„ &? 4xaB 6tbD)Vxa0bĈQb>1*̇#F1bĈ#Ḟ#FaĈQa>1bĈ#F1b`>1b#F aĈ#F1bĈ|aĈ|1bT#F1bĈ#F+0 <0… :\ <0… kذaÆ 6lذaÆ 6lذaÆ kذaÆ 6lذaÆ "װaÆ 6lذaÆ 6lذaÆ װaÆ 6lذaÆ 6DaÆ 6lذaÆ 6lذaÆ 6,aÆ 6lذaÆ 6l0_Æ 6lذaÆ 6lذaÆ 6lX0_Æ 6lذaÆ 6la 6lذaÆ 6lذaÆ 6lذ` 6lذaÆ 6lذ!| 6lذaÆ 6lذaÆ 6lذa| 6lذaÆ 6lPC !P>$XA .dC%NXŇ 'p "Lp!ÆB$ <08`A&TaC!F8bE+#F1J̇|1bĈ#F1b80_|1bĈQb>È#F1bĈ#Ɓ È#FaĨ0F1bĈ#F1W0| /_|/_ Oo`>/_> o`70߿O|˗/| ̗/@ ߿8_>$XA  <0… :|1ĉ+Z0_|/|_|/|'0|'0_>/߿|/_|/|G0_>70|'0_0bT#F1bĈ#F+`|/_|˗_| ̗`|/_>̗`|/߿|_|/|˗/|'0_0bT#F1bĈ#F+`|/_|/߿|(0_|/'0(0_ '0_|////|? 4xaB'p "Lp!ÆB(q"Ŋ/>W0|`>7@ /_7|O@/? o`7P 7`> 70߿' /,h „ O@ DPB >QD-^|080_O '߿ ?_@'0_ ̗_| /_70_/_|'0_ ̗o H*, <0… :|1ĉ+Z0_|/|_| ̗/_>'0|/_|/߿|/_|/|G0_>70_>˗O`|aĨ0F1bĈ#F1W0|'`>߿_o?˗o`||`> O@'?O8_>$XA  <0… :|1ĉ+Z0_|1bĈQb>È#F1bĈ#Ɓ È |'p O@$XA%L0a„'p "Lp!ÆB(q"Ŋ/>W0F1b#F0bĈ#F1bĈq`0bĈ|1*̇#F1bĈ#Ḟ#F%ÈQa>1bĈ#F1b`>1b(1F aĈ#F1bĈ|8`A&TaC!O@ DP| H*\ȰÇ#JHŋaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FO@ DPB >H? 4xaB'p "Lp!ÆB(q"Ŋ/>W0F1b#F0bĈ#F1bĈq`0bĈ|1*̇#F1bĈ#Ḟ#F%ÈQa>1bĈ#F1b`7`>߿/߿G? /|o`0@/˗O |߿ | /,h „ O@ DPB >QD-^|`> ̗_|/|/_|/|3/|'0_>/߿|g0|/|˗/|S#F0bĈ#F1bĈq` '0_̗O`|˗O |O _> ̗o`|/_/߿|7P`|/_>˗/_8p| H*? 4xaB 6tbD)Vxa '0| '0_>'0߿|˗_|`|/_)̗_|3/_|'0|/_>0bT#F1bĈ#F+ |7P 7@/7`>/߿'A /_|0@ ߿8_>$XA  <0… :|1ĉ+Z`>'p`|/@ ̗O`| ̗/_/ 7P`|/߿|7_|/| 70_>˗O`|˗o`|`> 4xaB8`A&TaC!F8bE+`|/_|/_|˗O`|#/|/|'0|/_>̗O`˗O`|˗O`)̇|1bĈ#F1b80_||'߿߿ 7P࿁8`> OO? O|/߿|0'p "Lp`>$XA .dC%NXŇ È#FaĨ0F1bĈ#F1W0F(? 4x |'p "/a„ &$? 4xaB 6tbD)Vxa0bĈ|1*̇#F1bĈ#Ḟ#F%ÈQa>1bĈ#F1b`>1b(1F aĈ#F1bĈ|aĈ#F0bT#F1bĈ#F+0 <0… :| ,h „ O@ DPB >QD-^|#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b |,h „ 2l!D H*? 4xaB 6tbD)Vxa0bĈ|1*̇#F1bĈ#Ḟ#F%ÈQa>1bĈ#F1b`/_>'0_|˗/|/_|70|/_|8߿ | o` 70_7p| H*? 4xaB 6tbD)Vxa '0_>˗`|+/|#/|/߿|'0|_|˗a|/|˗/|1*̇#F1bĈ#Fg0_>˗o`|/_|/|'P?O '0߿|˗/A/|˗O`|$(0,h „ O@ DPB >QD-^|`> ̗O`|#/|_|0@߿?70_> ̗/_>/_>/_|(? O@ DP| H*\ȰÇ#JHŋg0_> O@O|0@o࿁ _>/|'P࿁(0__|`>'p| H*? 4xaB 6tbD)Vx!|O|/| /| ̗o` /|/_ /|˗o`|/_/_|˗_|'P O@ DPaA$XA .dC%NXŇ ;O`|/_> ̗`| ̗`|˗O`|#/|/|ˇ0_>˗O`O@$? 4xaB'p "Lp!ÆB(q"Ŋ/>W0|0 _> O '߿'@ O@ ̗O`|(?/߿|˗_ ?O@ DP| H*\ȰÇ#JHŋ̇#F%ÈQa>1bĈ#F1b`>(? 4x@ O@ O@$X"D!B'p "Lp!ÆB(q"Ŋ/>W0F1b#F0bĈ#F1bĈq`0bĈ|1*̇#F1bĈ#Ḟ#F%ÈQa>1bĈ#F1b`>1b(1F aĈ#F1bĈ|8`A&TaC!O@ DP| H*\ȰÇ#JHŋaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FO@ DPB >QbB$Xp`>$XA .dC%NXŇ È#F1*'1F1bĈ#F1W0F1bĈQa>0bĈ#F1bĈq`0bĈ#F İ#F1bĈ#Fw0|'0_|˗/|/_|˗_/_|˗ |O࿁? 70_/_|o`| 70|O/8p'p "Lp!ÆB(q"Ŋ/>W0|'0|̗O`|O`|/_|/|C/|˗O`!̗O`|/|K/|'0_>/|g0|1bĈ#F1b80_|/߿|G0_>̗o`̗o |O _>/|˗O`|$/_ ̗O`|˗/A/|˗_>/| G A'p "Lp!ÆB(q"Ŋ/>W0|'0_>̗O`> /_> O ?/|˗/A/|/_ /|˗  ̗O`|#H A8`A&TaC!F8bE+`|0 `> 8߿| /_ O'P`|'0߿|˗| O|'P?7p 8p'p "Lp!ÆB(q"Ŋ/>O| /|/_/@ /_/_|/_o ̗O`|7p|˗O`|˗/? O ̗`|/|'0_>0 O@ DPB >QD-^|`/_>#/| '0|70_|/_> ̇0_ ̗`|/߿|/?O ̗`|o`|/| G A'p "Lp!ÆB(q"Ŋ/>W0|0 _> O '߿'@ O@ ̗O`|(?/߿|˗_ ?8p? '? o <0… :|1ĉ+Z0_|1bĈ#F$È#F1bĈ#Ɓ x`>8`A O@$XР@ O@ O@$XA%L? 4xaB 6tbD)Vxa0bĈ#F İ#F1bĈ#Ḟ#F1bTOb>1bĈ#F1b`>1bĈ|aĈ#F1bĈ|aĈ#F擘#F1bĈ#F+0 <0… :|1Ą H| H*\ȰÇ#JHŋaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FO@ DPB >? 4xa8`A&TaC!F8bE+#F1b4|1bĈ#F1b80_|1bĈ|-È#F1bĈ#Ɓ È#F h1F1bĈ#F1W0| ̗/|/_|˗o`| ̗/_O`| ̗/_> ?o`>̗/o`'0|7p| H <0… :|1ĉ+Z0_|/|G0_>̗O`>̗o`| ̗_|a| /_>˗0|/߿|˗/|'0_>0Ż#F1bĈ#Fg0_>˗o`|/_|/|'P?O '0߿|˗/A̗o` ̗/_>/| <0| H*\ȰÇ#JHŋg0_> ̗O`|`|˗`|(O'p|'0_>G|G_|˗`|˗_|? 4xa8`A&TaC!F8bE+`|0 `> 8߿| /_ O'p|˗?$'?O@ D_>$XA .dC%NXŇ ?/߿|7_|(0_7_|˗_|7_| /_ ̗o|o`| /_>7_|˗_| `> 4xa H*\ȰÇ#JHŋw0|'0_|/_|/|˗/|G0_>70_>̗a| '0_ ̗/_>O'p| H <0… :|1ĉ+Z0_|˗o |'߿(`>( (?70_>O@̗/_/@O|_> <0| H*\ȰÇ#JHŋ̇#F1̇b>1bĈ#F1b`>(? 4x@ O@ O@$XA%L0a8`A&TaC!F8bE+#F1b4|1bĈ#F1b80_|1bĈ|-È#F1bĈ#Ɓ È#F h1F1bĈ#F1W0F1bh0F0bĈ#F1bĈq` H*\ȰÇ!'p "L/,h „ 2l!Ĉ'Rh|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|8`A&TaC!F8Q O@ DPB >QD-^|`>1bĈ|aĈ#F1bĈ|aĈ#F-3#F1bĈ#F+`˗O`| ̗/_70_|˗/߿| '0_|˗/A70˗o| 70߿|o`|8P`˗_˗O |߿| o| H*\ȰÇ#JHŋg0_> '0_|/_|/|˗/|G0_>'0|_| '0_˗O`|̗o`|;/|'0_>/߿|g0_|1bĈ#F1bH0_|/߿|G0_>̗o`̗o |O _>/|˗O`|$/|/|#/_> ̗|70_| |'0_>? 4xaB 6tbD)Vx1b> '0_> ̗`|̗o`̗o |O _>/|'0_|/|˗O`|̗/߿|˗/_>/|˗ A˗O`|#? 4xaB 6tbD)Vxqb '0_ (| /|( 7P?/@ 7P ˗/߿|O@ 7_80_ ? O|'p "Lp!ÆB(q"Ŋ/V̗/_> ̗_#/| 70߿|70_|˗_|`|/|/_|˗O`|̗/߿|˗/_> ̗o`|/|/_>̗/_>1bĈ#F1bl`>˗O`|'0_ '0_> ̗/_>˗`|!̗o`|#/|O`|/_|0O|70_> 70_>˗O`|O@ DPB >QD-^H0|0 _> O '߿'@ O@ ̗O`|(?˗o`|'`>/߿?8@ <0… :|1ĉ+Z`3f̘1|3f̘1cƌ3fH0_F  

$XA .dC%NXEe̘1cƌ˘1cƌ3f̘1cF2f̘1cƌe̘1cƌ3f̘1#|3f̘1cƇ2f̘1cƌ3f̘`3f̘1|3f̘1cƌ3fH`> 4xaB 6tbD'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ2 ;;PK3Ix ggPK+AOEBPS/img/lobwri.gif8cGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ C `> 4xa>$XA .dC%NXE5n"|'p O@$XA .dC%NXE5nQb|<&̗/G=zѣG=z_|ѣG=zѣG=zw0_>yѣG=zѣG!̗ϣ|=zѣG=z#|8P ˗/| ̗/߿|˗| H*\ȰÇ#JHŋ3jȱ#|/_|3/߿|˗O`>˗O`/_> ѣG=zѣG3W0|3O`'0|8?8`AO@ DPB >QD-^ĘQƌW0_>`> '0|'0_|Ǒ#G9rȑ#G9̗` (?0/߿|'p`>$XA'p "Lp!ÆB(q"Ŋ/b̨q#|q|9rȑ#G9rx`> 4H? W_ 'p ,h`$XA .dC%NXE5w1|mo|7nܸqƍ7nܸ`;oc|'۸qƍ7nܸqƍ]0|6:̷b7nܸqƍ7nx0|'p 8p|/,h %L0a8`A&TaC!F8bE1fx0|Ca> H'p "LX0,h „ 2l!Ĉ'Rh"ƌ a|Co`>6n(1ƍ7nܸqƍ7n,_70|̷qF6nܸqƍ7nܸq|/|g0ƍ%۸qƍ7nܸqƌ H?'P8P |$ <0… "O@'p "Lp!ÆB(q"Ŋ/b̈0|̗o`>#`>5V0F5jԨQF5Nw0|'0|!̧QƊ ӨQF5jԨQƈ滘a  O@ D `'p "Lp!Æ'p "LX? 4xaB 6tbDX0| +/|I1_>"(QD(a>%J(QD-'`>Ka>%̗0_|%J(Q|%2'QD%J(1| c`(Qb|E'QD%'Q"|%J(QD1'`> c/a>$BW0_|1D%Jx0|˗/|0@/߿'p`>$XA .dCc0 $+/_/_ ` W0_ W`A8`A&TaC ̗o`O` '0| {Ç>|aW0|w0_|'`>(0|'0_˗_| /_|(0? 4xaB 6t0| 70߿| W0_>`>|Ç{a|s`>/_|'0_|O`˗_˗/߿|˗O`{H0Ç>|a /|70|/|Ç>|!|> ̗/|G0_/_˗O``>|a| /|/_|(_/߿'P`>$XA .dC(1b|'p@O`|O@_>/|(߿ ߿8`A(`> 'p "Lp!ÆB/bĈ=G0߿| ̗/߿| ̗`| /|˗O`o`E1bĈ;/_|`> /|+/a#F1bD"FH0|'0|˗/|ˇ0@ ߿/߿? 4808`A C|"D!B"Dx0"D!|O@ DPB >0_Ĉ c/a#*a#F_"Fta#FT0 <0‚ H_ ,X` W| +X` ,X | ,X_'p O@$XA8| W` ,Xp`O@ DPB2dPa2dPa|c/C ̗!ÁcȰ`>2dH0| 1dȐa>2dȐ!C2dPa2dȐa|ǐ`|2d_|2,a> 3!C1̷0C c!C 24!C [!C  ̗B$XA 'p ̇`>g0B"̇`>8`A&,O@ DPB 'P@ O| /_/O@ DPB >a> +/_>w0| 70?  O|? 4xaB cȐ!C +`>+o`>'0|)̷0C 2dȐ!C 2\ao`>g0_|/_o`>[!C 2!C 24``>_Soa> 2dȐ!C 2d0| W0|3`˗/߿|/_Koa> 2dP`| 2dȐ|w0_K/_ Oa cȐ!C 2dȐ!bH 'p|o`> '0|/|70| G08`A&TPa>2dȐ|O H0_|#/߿| G0| H*\ȰÇ#J̗` `> /_> /߿@ o|'p "Lp!|cȐ!C H 8_/_7p H*\ȰÇ#JH? 7P`>8`>'p`|˗O`o|O@ DPB 'p "L0a 3O`> o`| '0_|)W0… .\p… .\p!|G0|`̗O`|_K` .\p.\pa|O@O|`>  <0… :|1Ć+/_|˗o`|G0߿| ̗O` |'P`'p "Lp!Æ6lذ| 6lh0_Æ 6lذaÆ 6l0_Æװa6lذaÆ 6l0a 64aÆ 6lذaÆ 6TaÁ kذ| 6lذaÆ 6l0_Æ װaÆ 6lذaÆ *װ|5l_ 6lذaÆ 6LaÆ kذaÆ 6lذaÆ kp`>6l/_Æ 6lذaÆ &װaÆ5lذaÆ 6lذaÆ 5l80| 6aÆ 6lذaÆ ? 4xaB-\p… .\p… .,oƒ [p| .\p… .\pB$XA O@ DPB >QD H8`> 4xA$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[\$XA8`A&TaC!F8bE1fԸcNJ<"ѣG=zѣG=z4#|=zѣG=zѣG<"ѣG=zѣG=z4 |o 7p O@ DPB >QD-^ĘQF+;`O`|!ѣG=zѣG=z4`/߿| ̇0G=zѣG=z` o`>#a>=zѣG=zѣ|˗O` ߿'p "Lp!ÆB(q"Ŋ/b̨q#ǎ˗``>˗ϣG=zѣG=z/|/|O`>ѣG=zѣG=nG0|70_70|yѣG=zѣGa>=zѣG=zc<"W0G=zѣG=z1_|+ϣG=zѣG=z@(0,h B O@ DPB >QD-^ĘQF+0 < O@ DPB >QD-^ĘQFH1G=zѣG=z1G=zѣG=zc>yѣG=zѣGyϣG=zѣG=zĘ |,h B /,h „ 2l!Ĉ'Rh"ƌ7r0_| ;ϣG=zѣG=zĘ`>ѣG=zѣG=bW0GѣG=zѣG1+`'P|808_>$XA .dC%NXE5n1a'0| 70|yѣG=zѣGw0_>3_;ϣG=zѣG=zĘ`O`>̇0|=zѣG=z#|/߿|(??#80,h „ 2l!Ĉ'Rh"ƌ7r`>'p|| G |O@ DPB >QD-^ĘQF+`> W0|!w0G=zѣG=z1_| '`>/߿8P`>'p "Lp!ÆB(q"Ŋ/b̨q#ǎ `=zѣG=zc<w0G=zѣG=z1_| ;ϣG=zѣG=zĘ |,h B /,h „ 2l!Ĉ'Rh"ƌ7r0G  <0… :|1ĉ+Z1ƍ拘`%1_ǎ;vرcǎ;v(0_|u,/a:vرcǎ;vرcG"+c| Eױcǎ;vرcǎ; 1_|̗`|'pO$H_>$XA .dC%NXE5n(0_|W0_>'0| Eױcǎ;vرcǎ; 1_|̗/| w0_|uرcǎ;vرcǎEW0|o`|;/a:vرcǎ;vرcG"+`>G0_|;/a:vرcǎ;vرcG"'p`> |'p`>0'p 'p "Lp!ÆB(q"Ŋ/b̨q#G"+` /_;/a:vرcǎ;vرcG"+ |__> $H_>$XA .dC%NXE5n(0_|u,/a:vرcǎ;vرcG"+c| Eױcǎ;vرcǎ; 1_| K/b;vرcǎ;vQ` X0_|uرcǎ;vرcǎEW0_ǂ拘cǎ;vرcǎ;v/b:̗0_|;vرcǎ;vر|O@ D$H| H*\ȰÇ#JHŋ3jQ`:V1_ǎ;vرcǎ;v(0_|+拘cǎ;vرcǎ;v/bEױcǎ;vرcǎ; 1_NJ"رcǎ;vرcǎ拘c|uرcǎ;vرcǎEױb:vرcǎ;vرcG"+0 "رcǎ;vرcǎ拘`11_ǎ;vرcǎ;v(0_|ua:vرcǎ;vرcG"+a||'P`7pO@ DPB >QD-^ĘQFEW0| ̗O`c/b;vرcǎ;vQ`>3`> /_| Iױcǎ;vرcǎ; 71|'0߿|˗0|uرcǎ;vرcǎQ̗_> _'P 8P`|8p| H*\ȰÇ#JHŋ3jQ`>W0|/!|O@  <0… :|1ĉ+Z1ƍ滘` '0_/_ǎ;vرcǎ;v(0|˗o`'P O@ ? 4xaB 6tbD)VxcF9 w1_G:ױcǎ;vرcǎ; w1_G:ױcǎ;vرcǎ; w1_G:ױcǎ;vرcǎ; w1_G:71_> H0,0 

A̗/|=̗/_c| /_|G1_|-ZhѢE-Rg_> YDa>擘/|K/|H0E-ZhѢEY0 !|̇_>",a>!/B  <0… :|1ĉ+gѢEc/a>!W`> ߿߿80 8P`7_'0O@ DPB >QD hb| 5̇0|!W0_| 70|g0| !W0|1gѢE-Zh|-Zoa ;`|˗_|G0|70_|˗O`|g0|̗/_>'p _>$XA .dC%N(1_|+Vh0|970|˗_>`>+`+_|3`>O`>˗_>/_>W0|+VXbŊ+:70_Ŋ+̗`#_'0߿|W0߿|˗O |@/߿|(0_o| o`O`|o|O@ DPB >QD8`A&TaC8 A˗_>@@ 70߿|_| 08`AO`'p| 08`A&TaC!F8|+VH1߿|̗`_> +_ O`/_ +/|g0_>_>_> XbŊ+VXqa+VO` #_> /߿//|(0|˗/|o|oo`>̗/_>/|'0 <0… :|1ĉ+Z1c|̗1|;a4"̧QF5jԨQF5̇0_|i\`˧`>5jԨQF5j̘a.CO|5̇0F4jԨQF5jԨ1c泘/a> !̷0| ӨQF5jԨQF%0_Ӹ0_| 1̧_|5jԨQF5jԨq`|{/|Ӹ0| 0_|ӨQF5jԨQF(? $0 'p H'p A  O@ O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXU$XA 0 <0aA$`>'p 8`A8`A&TaC!O@ O@80,`> 4xaA$XA .dPa> 3ϡC%̗`|9d/C:tСC9LOasa>:tС|g0C COa9t/C:tСC&̗0_|s|:tСC:4`>w0| 9tH0C:tСÆ&̇0| 9t`>:ta|߿807|߿|/80_̗o@7p@8p@8`A&TaC! ̇0_> @o8P`8p 7p'p "Lp!Æ̗O`|O`>3`>+/| ̗O`>3`>+oasСC:t0|C`S`>[`>:t0a> /_|O`>3o`> #`|˗`>`;`+/_| /_|˗O`| sСC:t0|70| g0| w0_|'p ˗|o࿁ <0… /|/|70|g0|/߿|70|0|̗_| '0߿| /_ sСC:t0߿|o`>|g0_/_>˗_> ̗/_>#ϡC:\/|/|O@7P`|`>_7߿|7P (0_o|70߿| /_|'0@8`A&TaC!w0_C`|̗``/_ /_|!B |O|˗/| o`8P /@/@/|'p@$H`>'p`O` /߿(`> 'p "Lp!Æ'p A0@O@ (? O@ o` O` 8_> O@ H*\0|̗O`|` #_>+O`| ̗O`>3` G0|_>/_>`2dȐ!C &w0߿|O`>|g0_> ̗`|O`|'0߿|)ǐ!C  w0| ̗O`>`3/_|(_o_O| 7p|o`˗O`| /߿| '0@/,h „ 2lPa3`>o`> #O`/_|̗/|˗/| G0|>|0|g0Ç3a>$a>|!| =D`{!| =|| =|H0|>`| CÁ{Ç"̷0Cka8? 480A4hРA 3hРA gp`|3h_| 4(0_> 3X0A  | gР| ̗Ϡ gР g_>3hРA 3h`> 4hРA g |,h BO@ D 08` HA H| 3hРA| 3h`| g |,h 08` H 'p 4hРA 4h`>$XA .dC%*̷0D[Oa8qĉ8qb|'N8qĉ[`0 O@G | G`>#H| H*\ȰÇ A|!B"D!B4oa>'0| w0| ̗0|1"D!B(0D!"D!B"ă3_| 70_|w0|̗/_> @(0,h „ 2l|!Bt`>!B"D!"̇0߿|/߿| W0|0|̗_| ̗/|"D!BH0|!B4O`|!B"D!BT/| _`> 0_|70߿|3`>A"D!̗`>'p "Lp!ÆB(q"Ł _> 70@O@ H | O| O@O@ DPB >Q ,h „)TPB *TPB *TPa|'0_/|˧`+/| ̗`>*TPB *TPƒ*TP| *TPB *TPB *T_>o`w0|g0|̗/_>`*TPB *TPƒ8`A&TaC!F8bE]T`>泘ŋ/^xŋ/^xb|;a>*xŋ/^xŋ/^1Ec/a>.^xŋ/^xŋ/JwQa>[Ob|/^xŋ/^xŋ%滨0_|c/|/^xŋ/^xŋ)滨0| ̗/|̗/_xŋ/^xŋ/^X`> 4x /_ O H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJ*ŀ;;PK^88PK+AOEBPS/img/lnpcc003.gifdTGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳOI O@? 4xaB 6tbD)VxcF9v/|/_/Ǐ /_ '0߿|/Ǐ?~Ǐ?~1_|/߿|˗_>~0/߿|/߿|_>$XA .dC%NXE5nؑc|/_| /_|=n'`>_/߿8`A&TaC!F8bE1fԸcG '0߿|o`>7/_| '0߿|ѣG=zѣG=zd/_|/_>/_|=n'0_/_|˗_  <0… :|1ĉ+Z1ƍ;z\Ǐ?~Ǐ?~Ǐ 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*ujS$XA . < |,h „ O@ DPB >QD-^ĘQF Qa|:*ױ#|:vرcǎ;vرcG:vt/_DŽ:vd/_ǎ;vرcǎ;v0_ǎ0_ǎ رcǎ;vرcǎa|ؑa|;vرcǎ;vر#|;:̗c|;2̗cǎ;vرcǎ;vDcGuLcGuرcǎ;vرcǎu0_ u0_;vرcǎ;va˧0_ǂuLa|'p "L0_>$XA .dC%NXE5n0|/_>'0_|˗c|g0|˗O`|'0_رcǎ;vرcǎ滘o`|˗O`|_|a̗|#a|/_|˗/߿|x0_;vرcǎ;va'p/߿|O@ ̗'p8 | O| <_| H*\ȰÇ#JHŋ3ja˗`| /|8`A //|G0_ ,X`O@ DPB >QD-^ĘQF]̗/_>0@ ߿| H H/0 HO@ DPB >QD-^ĘQFuTO`u/_ 1_;vرcǎ;va _|;b 8@$XA .dC%NXE5n0_ǎ0_NJ HA$XA .dC%NXE5n0_ǎ0_G H`>$XA .dC%NXE5nX1_ǎ0_G Hp ,h „ 2l!Ĉ'Rh"ƌ7r/G 0ǁ H? 4xaB 6tbD)VxcF9vDϣGyD#| O@ DPB >QD-^ĘQFa|08`A&TaC!F8bE1fԸclj8`A ̗0!| O@ DPB >QD-^ĘQF9'p "LpaA$XA8`A8`A&TaC!F8bE1fԸcG8`A&T? 4xa H`>$XA .dC%NXE5nG $H A $H Ai1_> A $H A $H -$H A $H A |@ $H A $H A/H A $H A $H $H A $H A b| A $H A $H AZ̗$ȍ H* <0… :|1ĉ+Z1ƍ;:̗ϣǍ1c|yѣG=zѣGQc>˗ϣG=zѣG=zO@ DPB$XA ˧PB ˗/,h „ 2l!Ĉ'Rh"ƌ7rd/_˗#|:v̗/_ǎ;vرcǎ;v0_0_ǎرcǎ;vرcǎa|_|;vرcǎ;vر|;:̗#|;˗/_ǎ;vرcǎ;v0_ǎ0|1_;vرcǎ;vbQa ˗_>'P'p  <0… :|1ĉ+Z1ƍ#a|[/_>˗/|˗_˗b|;vرcǎ;vرc|;:̗| o`|/A O@  <0… :|1ĉ+Z1ƍ;Oc|%q`|COa|70_>`uرcǎ;vرcǎ W0_|/_|'0_|/_|1̗/_>/_| ̗/|Y̗cǎ;vرcǎ;vT0@ $`|˗_˗;xA ߿| H*,/,h „ 2l!Ĉ'Rh"ƌ7.O@ 4/,h`'0? O@ O@ D(߿| H*,/,h „ 2l!Ĉ'Rh"ƌ7.O@ ,_>$X |˗o`|w8`A /,h „  <0… :|1ĉ+Z1ƍ ˘/_|i̗/_>/_>ۘ/GG0Gȑ#G9rȑ#G˘/|9B̗| c/_|!Ǒ#G9rȑ#G3DZ`>!Qa>/_0o ,/_>$XA .dC%NXE5n\/ǂ8r/Dž˗/߿|/_|˗`b|9rȑ#G9r1c| b|[`>'0_O`>"ȑ#G9rȑ#GX0G0| 70_> '0߿| 1_>9rȑ#G9r1_>q1_> )G0| ̗/_>/|IǑ#G9rȑ#G1DZ`>!DZ!| H;x'p "Lp!ÆB(q"Ŋ/b̨qc|8Ǒ#|86g1_|ȑ#G9rȑ#Gh0_>˗/G8r$#G9rȑ#G9Z̗A$XA .< <` &L`>$XA .dC%NXE5n9˗/GǑ#G9rȑ#G#Ǒ|8r䘏#Gȑ#G9rȑ#G`> 4xaB8`A&,/B *D/_>$XA .dC%NXE5n4/ǃ  <0B  <a>ˇ0߿|K/aBO@ DPB >QD-^ĘQƃq4#LJ8>̇0|˗O`|/_>/_>qȑ#G9rȑ#Gq,#Gql/a|(| /,H0_>$XA .dC%NXE5nL/ǂ8r/G/߿|'0߿|0O@˗? 4xaB 6tbD)VxcFDZ`>!qa/_ /|#O`>qȑ#G9rȑ#Gq,#Gq\oa/_>O`|'0_|ȑ#G9rȑ#GX0G0Gȑ#G9rȑ#GX0G0Gȑ#G9rȑ#GX0|(0߿|(0| ˗#|8rȑ#G9rȑc|8 _|˗O`|/_|80߿| ̗ϠA ˗`>̗/߿|O O@ ˗? 4xaB 6tbD)VxcFDZ`>/_˗/_/_>˗_|˗_|(`>? ̗/|˗O`/߿|W`O@ DPB >QD-^ĘQƅq,a>'pO?O@'p "_>$H0_'0߿|O@$X`>$XA .dC%NXE5nd/ǂ#O`>/|/߿|('p "_>$/_>/|G0_ ̗? 4xaB 6tbD)VxcFDZ`>/_>/_0@o ,(0_> 4/_|4/_|/_|/_>3h |8`A&TaC!F8bE1fԸqa| 0|8 ̗`>Ǒ#G9rȑ#G3DZ`>q̗|9̗#G9rȑ#G9f̗c|9B̗|9Ǒ#G9rȑ#G3DZ`>!qa1b|9rȑ#G9rc| b|SO`/_> o࿁'p O@ DPB >QD-^ĘQƄq,#Gql/a|˗_|˗_|O`>$Ǒ#G9rȑ#G/DZ`>!a>o`|/_ob|9rȑ#G9rb| b|C`>'0_>O`>(ȑ#G9rȑ#Gh0Ga|70_|˗O`|'0|qȑ#G9rȑ#NJq<0 <0…8`A&̗0a>&L_>$XA .dC%NXE5n4/G H*\H? 4xa)4/_> &̗? 4xaB 6tbD)VxcF Ǒ|8r80_|9˗#G9rȑ#G9B̗#Džqȑ |,h „ 'p "Lp!ÆB(q"Ŋ/b̨qc|76̗oƍ 8`A&TH? 4xaB 6tbD)VxcF۸a|7nܸqƍ7nܸqƍ7n/ƍ ۸qƍ7nܸqƍ7nܸq#|6nl/ƍ7nܸqƍ7nܸqƍ!˷qc|6nܸqƍ7nܸqƍ7n1_˷qƍ7nܸqƍ7nܸqFm0_7nܸqƍ7nܸqƍ7B̗oƆmܸqƍ7nܸqƍ7nܸb|76/ƍ7nܸqƍ7nܸqƍ˷q| <0… :|1ĉ+Z1ƍ;z1_> $H A $H A0_>K/H A $H A |@r̗a| A $H A $H 1_| A $H A $H1_ $H A $H A̗$| $H A $H A̗|2$H A $H A90_>u$H A $H A)0_>/H A $H A H <0!|*TX0_>$XA .dC%NXE5nG򁄘| A $H A $Ȏ9'0߿| ̗b| $H A $H Aܘ/|˗_|擘d| A $H A $H=̗| O@gРA ,/,h „ 2l!Ĉ'Rh"ƌ7r#|/|91H A $H A b|/_0H $H A $H +0| ˗/|=̗$H A $H A91_>̗b>'p࿁_8`A8`A&TaC!F8bE1fԸcGG0_|67`> '|߿8`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?'`>8`A8`A&TaC!F8bE1fԸcG0 /_| 4/,h „ 2l!Ĉ'Rh"ƌ7rc|8`A 'p (߿|/߿? $/_| H*\ȰÇ#JHŋ3jȱǎ̗/|>z̗/_?~Ǐ?~|/_˗Ǐ?~Ǐ?~_|c|}Ǐ?~Ǐ? ̗|>R̗/_?~Ǐ?~G}\/GǏ?~Ǐ?~4/dž}t/_|?~Ǐ?~Ǐ0_|˗/Ǐ?~Ǐ?~c|>B̗#|Ǐ}G}G}B <0!|*TX0_|8`A&TaC!F8bE1fԸcGRb| ˗/H A $H A c| )1_|@ $H A $HY1_ $H A $H A/ȋ]̗/_> A $H A $HĘ/_$H A $H AI0_>勘/_| A $H A $H1_$H A $H Ay0_>[/_| A $H A $Hʗ? 4xaB;/_| H*\ȰÇ#JHŋ3jȱǏ 2_ $H A $H Ad/H/_| A $H A $H  r`| $H A $H A>̗$ȁ $H A $H A/H3/_|$H A $H A90_> g0_/H A $H A |@/|$H A $H A R`| A̗`> $H H H H/,h „ ˗`>˗? 4xaB 6tbD)VxcF9vqb| A̗$H A $H A 2b| A̗$H A $H A 2b| A̗$H H*$ <0… :|1ĉ+Z1ƍqa|9r/_>˗#G9rȑ#G9>̗#C$XA O@ Da| *T`|'p "Lp!ÆB(q"Ŋ/b̨q|8O@$XA O@$XA SPB <0… :|1ĉ+Z1ƍh0Gq/GǑ#G9rȑ#G)DZ`>!a>˗#G9rȑ#G9V̗c|9B̗|9̗#G9rȑ#G9Z̗c|9B̗c|9̗#G9rȑ#G9^̗c|9B̗#|9̗/G9rȑ#G9r/ǂ8r/Dž˗/|-̗1_>9rȑ#G9r1_>q1_> )̗O`|/߿|˗_| /_>$XA .dC%NXE5nT/ǂ(˗/|m̗| /_/߿|'0|8rȑ#G9rȑc|871_> O /߿8`A;xAwp`>/? O|8p'p "Lp!ÆB(q"Ŋ/b̨q|871|'0|/߿|/_|8 ̗/_>'0_/|a̗#G9rȑ#G9f̗c|70|70߿|(? 40 QD-^ĘQƅq,ob|o`>o`0 <(0? 4xaB 6tbD)VxcFDZ`> q,/G0_|8B̗#G9rȑ#G9f̗c|X0_> 1'0߿|˗/@78`'p "Lp!ÆB(q"Ŋ/b̨q|8Ǒ#|8.̷0_|/_/_|'0|ȑ#G9rȑ#GX0G0| 70_> ̗/߿| 1_>9rȑ#G9r1_>q1_> -G0|/|'0|qȑ#G9rȑ#njq,#Gq\oa>˗O`| ̗/_/b|9rȑ#G9rc| b|? 4(0|9rȑ#G9rx1_>q0_|q`>9rȑ#G9rx1_>8`A&T ,h B&L0aB8`A&TaC!F8bE1fԸa|'p "Lp!A$XA K0a„ O@ DPB >QD-^ĘQƃq0_>7Ǒ|9rȑ#G9rȑb|9.̗#GQ`|9rȑ#G9rQb|9.̗#G˗#qȑ#G9rȑ#Gq0_>9O@ DP!B$XA .dC%NXE5n̗oƆmܸq!|,h „ 'p "Lp!ÆB(q"Ŋ/b̨Qc|76̗oƍ7nܸqƍ7nܸqƍ۸a|7nܸqƍ7nܸqƍ7n/ƍ ۸qƍ7nܸqƍ7nܸq#|6nl/ƍ7nܸqƍ7nܸqƍ!˷qc|6nܸqƍ7nܸqƍ7n1_'0_7nܸqƍ7nܸqƍ7:̗oF ۸qƍ7nܸqƍ7nܸqc|6nD/|6nܸqƍ7nܸqƍ7nܸ0_? ̗? 4xaB 6tbD)VxcF9vQc| 70H A $H A d|@f̗Ob| A $H A $H1| A $H A $Hi1_> $H A $H A̗d| $H A $H A̗|<$H A $H A/_>/H A $H A c| !`> A $H A |@:̗$|@ $H A $@|8 |˗/| ,H0_ ,X | H*\ȰÇ#JHŋ3jȱǏ s/߿|˗/|0_> A $H A d|`>'p 4hРA ̗? 4xaB 6tbD)VxcF9v`|`򁬘$H A $H Ai1_ ̗/߿|[/|壘/_ $H A $H )w0|IG`> 7P O@ DPB >QD-^ĘQF=~/_|̗ob|˗_|/? /߿O@ <0… :|1ĉ+Z1ƍ;z/_  ,O`˗/| <0… :|1ĉ+Z1ƍ;z/@$XA HO`w8`A&TaC!F8bE1fԸcG0 ̗c|Ǐ?~Ǐ?~/DŽ}/_|?~Ǐ?~Ǐ0_˗Ǐ?~Ǐ?~`|a|}Ǐ?~Ǐ?̗c|}d/_|?~Ǐ?~Ǐ0_ ˗Ǐ}G}G}G)P| H̗OB˗? 4xaB 6tbD)VxcF9va| #R`| $H A $H ;rb|˗$H A $H A1_>/_| A $H A $H򁴘/| $H A $H A/ȋ嫘/_> A $H A $H̘/| $H A $H A,/ȍ9̗/_> A $H A $ȃ/| $H A $H AD0_>$XA ̗a|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?j̗| ˗/H A $H A |@/| $H A $H Al/H˗$H A $H A a| A̗/H A $H A $|@/H A $H A d|@/|/_> A $H A $ȁ90_>˗/߿|@ $H A $H | /| A $H AH @ <0…3O`|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?J̗$ȁ'0߿| $H A $H A̗$ȁ`> 4xaB8`A&TaC!F8bE1fԸQ`|9.̗#G(? 4xaB <0… :|1ĉ+Z1ƍqa|9r/G˗#G9rȑ#G9B̗#Džq_>˗#G9rȑ#G9J̗#Džq1_>˗#G9rȑ#G9N̗cB$XA . <0| *T0a|8`A&TaC!F8bE1fԸ`| ˗#Džq#ǁȑ#G9rȑ#GX0G0GǑ#G9rȑ#G-DZ`>!DZa>Ǒ#G9rȑ#G/DZ`>!Ǒa>˗#G9rȑ#G9^̗c|9B̗| ˗bk/G9rȑ#G9rĘ/ǂ8r/Dž#O`/߿|˗O |߿ /_| H*\ȰÇ#JHŋ3jܨ0_>q1_> -̗/_>˗_|˗O`>˗_|/_>qȑ#G9rȑ#njq,#GqTaO/߿߿ 'p "Lp!ÆB(q"Ŋ/b̨q|81|q$/Gc`|70|'0_˧0_>9rȑ#G9r1_>q70߿|O`>(0_|1̗/_/_|80߿$/߿8_| H*\ȰÇ#JHŋ3jܸ0_>q70߿|_>(`>? 4xaBO@ DPB >QD-^ĘQƅq,c_|8 O@ D(߿| H*,/,h „ 2l!Ĉ'Rh"ƌ7.̗c| /|Q |,h |˗/_ ,X |8`A&TaC!F8bE1fԸqa| 0@_'p ˗!BW0B/_0o ,/_>$XA .dC%NXE5n\/ǂ8r/G[/_|/߿|/_>O`>qȑ#G9rȑ#njq,#Gq\oa>/|˗_>惘/G9rȑ#G9r̘/ǂ8r/Dž#O` ̗O`>O`qȑ#G9rȑ#Gq,#GqdOa>˗O`| ̗/_Ob>9rȑ#G9r1_>q1| H K`>&Lh0_>$XA .dC%NXE5nL/ǂ8r/dž,˗|9rȑ#G9rb| b|ȑ`>9rȑ#G9rh1_>q1_>qH0G9rȑ#G9r/Gqa|q#G8rȑ#G9rȑ#|8O@ DPƒ H˗0a„  <0… :|1ĉ+Z1ƍ`> 4xaB 8`A&,/_> *T0_>$XA .dC%NXE5n/G ȑ@ O@ DP|8`A&TaC!F8bE1fԸ_|9.̗#G8`A&Tx? 4xaB 6tbD)VxcF۸a|7nl0 <0 H*\ȰÇ#JHŋ3jԘ/ƍ ۸qƍ7nܸqƍ7nܸq#|6nl/ƍ7nܸqƍ7nܸqƍ!˷qc|6nܸqƍ7nܸqƍ7n1_˷qƍ7nܸqƍ7nܸqFm0_7nܸqƍ7nܸqƍ7B̗oƆmܸqƍ7nܸqƍ7nܸb|76̗oƍ7nܸqƍ7nܸqƍ۸a|7nܸqƍ7nܸqƍ7n/ƅ H*L <0… :|1ĉ+Z1ƍ;z/GQ`|}Ǐ?~Ǐ7q`Ǐ?~Ǐ?j̗|?*̗Ǐ?~Ǐ?~1_}0_?~Ǐ?~c|> |>~Ǐ?~Ǐ(0Ǐ Ǐ?~Ǐ?f̗|?*̗Ǐ?~Ǐ?~1_}0_?~Ǐ?~c|> W1_|(O@ ̗? 4xaB 6tbD)VxcF9v1_UG0|'0_/߿|Y̗Ǐ?~Ǐ?~1_U̗/_>˗_|˗O`>/_|>~Ǐ?~Ǐ(0_|0_O@  <0… :|1ĉ+Z1ƍ;z̘/G*+/߿| '0|2Ǐ?~Ǐ?~̘/G*˗/߿|/_> ߿|'p  <0… :|1ĉ+Z1ƍ;z̘/G>~T/Ǐ?~Ǐ?~1c|Qa|?~Ǐ?~nj}G}Ǐ?~Ǐ3Q`Ǐ?~Ǐ?~̘/G>~T/Ǐ?~Ǐ?~1c|Qa|?~Ǐ?~nj}G}Ǐ?~Ǐ3Q`Ǐ?~Ǐ?~/ǁ}x0_|?~G}G}GeP| H8`A&T ,h „ 2l!Ĉ'Rh"ƌ7r1c| 'p "Lp@$XA .dC%NXE5n|>~,/Ǐ?~Ǐ?~G}X0_?~Ǐ?~Ǐ`|?~Ǐ?~Ǐc|>~Ǐ?~Ǐ? ̗ǂ}Ǐ?~Ǐ?~/ǏǏ?~Ǐ?~(0_ Ǐ?~Ǐ?~Q`|?̗Ǐ?~Ǐ?~|>~,/Ǐ?~Ǐ?~Gʗ? 4xaB  <0… :|1ĉ+Z1ƍ;z_|!C/_Ȑ!C 2dȐ!C d|!?W0_!C 2dȐ!C 2|Bz̗0_Ȑ!C 2dȐ!C c|!9˷0_!C 2dȐ!C 2|Bj̗a!C 2dȐ!C 2|Bf'1_!C 2dȐ!C 2$|B^̗b|!C 2dȐ!C 2dH򅴘/c!C 2dȐ!C 2d|BR̗oc|!C 2dȐ!C 2dȉP| H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?F̗| $H A $H A/H,$H A $H A1_>/_>Ua| A $H A $H9̗_|˗O`>\/H A $H A Rc|08` 4hРA'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?&̗a|0_> $H A $H A^̗a|/_|b> A $H A |滘$|@ $H A $Hs/_|"˗/|A$H A $H A/H&0OO@ <0… :|1ĉ+Z1ƍ;z`> 4x@$X |O࿁/߿'p O@ DPB >QD-^ĘQF=zO@ D o`>/|  <0… :|1ĉ+Z1ƍ;z2c| '0|+b|B 2dȐ!C 2dȐ!7`>߿70߿8` <0… :|1ĉ+Z1ƍ;z`|!5˗/_Ȑ!C 2dȐ!C 2$|򅴘/_|!C 2dȐ!C 2dȐ I1_|B 2dȐ!C 2dȐ!b| 2dȐ!C 2dȐ!CJ̗/d| 2dȐ!C 2dȐ!C/_H2dȐ!C 2dȐ!C 1_˗/dȐ!C 2dȐ!C c|! ˗/_Ȑ!C 2dȐ!C 2|̗/_!C 2dȐ!C RH!@'p ̗/,h „ 2l!Ĉ'Rh"ƌ7r#Ȑۘ/_|"E)RH"E)RHØ/_|"E)RH"E)RH嫘/_|"E)RH"E)RH哘/_|"E)RH"E)RH"{/_|"E)RH"E)RH"˗oa|)RH"E)RH"E4/_|)RH"E)RH"ET/_|)RH"E)RH"E0_>'RH"E)RH"E)"@ O@ DPB >QD-^ĘQF=~Rd|D)RH"E)RH"EN̗OH"E)RH"E)R$| ˗/߿|)RH"E)RH"E4/|˗_|"E)RH"E)RH" g0|)RH"E)RH"EY0_>70H"E)RH"E)RȂ'0߿|)RH"E)RH"E$08`A&TaC!F8bE1fԸcGA 08`A&TaC!F8bE1fԸcGA 0@ H*\ȰÇ#JHŋ3jȱǏ CO@$XA .dC%NXE5nG!E˗/ȑ#G9rȑ#G9rH9rȑ#G9rȑ#G90ȑ#G9rȑ#G9rȑ#G9rȑ#G9rȏ HA'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? y`>8`A8p ,h „ 2l!Ĉ'Rh"ƌ7r#Ȏ`|2dȐ!C 2dȐ!C i1_|!'p ,h „ 2l!Ĉ'Rh"ƌ7r#ȇ 91_|B 2dȐ!C 2dȐ!2c| 2dȐ!C 2dȐ!C̗/d| 2dȐ!C 2dȐ!C/_Ȑ 2dȐ!C 2dȐ!C2$|B 2dȐ!C 2dȐ i0_|!C 2dȐ!C 2dHBL/_Ȑ!C 2dȐ!C Rc!2dȐ!C 2dȐ!CԘ`|G0_|˗a 2dȐ!C 2dH!@8_>/߿|/߿| ̗O`|/|˗_|˗_|˗| H*\ȰÇ#JHŋ3jȱǏ̗/|_|/_ W0| '0_|'0|˗/_ $H A $H A̗0__70| /_|/|80 ̗? 4xaB 6tbD)VxcF9vb> /|70|/| G0|'0|C/H A $H A |˗_>/_|˗/|/_|˗O`O`>˗_> $H A $H A'1H $H A $H A"'1Ȍ $H A $H AL$H $H A $H A\$H $@ $@ $@ $(_>$XA ./_>$XA .dC%NXE5nG@/_| A $H A $H1_|@ $H A $H -2#|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?L/_/_|!C 2dȐ!C 2dȐ!|O@ DPB >QD-^ĘQF=~I1_|BO H*\ȰÇ#JHŋ3jȱǏ 7'p ,hp | <0… :|1ĉ+Z1ƍ;z2$A$X H*\ȰÇ#JHŋ3jȱǏ CVO@$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[YiծeH[qΥ[]y_&\aĉ/fcȑ%O\e̙5ogСE&]iԩU;;PKTfQiTdTPK+AOEBPS/img/getdnc.gifGIF87a ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,  H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠS'p "O@ DPB >QD-^ĘQF3H0G=zѣG=zQa>yѣG=zѣGH0G=zѣG=zQa> ?o`> <0… :|1ĉ+Z1ƍ;ḟ0_>/|KϣG=zѣG=z0|_|˗/a>=zѣG=zѣ|/|˗/_|=zѣG=zѣG70_> o@ <0… :|1ĉ+Z1ƍ;Z̗/_> ̗O`|K0 <0… :|1A$XA .dC%NXE ̇0_ ̗`| aĈ#FaĈ#F1bĈ|!̗o`|#0@ ? 4xaB 6tbă$J(QD%J(QD +O"|%J(QD(QD%J(QD%J`>I(QD%F'QD%J(QD%J80|!(QD%JOD%J(QD%J(q`>$B'QD%J1D%J(QD%J(Q|IOD%J(1b>%J(QD%J(Qā 'p "O@ DPB >a>%J(QD%J(Qā$J(QD%JX0D%J(QD%J(Q|%J(QD%J,OD%J(QD%J(q`>%J(QD%'QD%J(QD%J80D%J(QD (QD%J(QD%JOD%J(QDI(QD%J(QD%'QD%J(QĂ$J(QD%J(QD30 <0!A$XA .dC E1bĈ#F1bĈ#F`1bĈ#Fd/bĈ#F1bĈ#F1|E0_Ĉ#F1"|#F1bĈ#F1bĈ3/bĆ"F1bĈ1bĈ#F1bĈ#F(0|̗/_/_ _O| H*\ȰÇ1bĈ#F1bĈ#F(0|/|'0|/| 1bĈ#Fd/bĈ#F1bĈ#F1|̗o`|/_'0_>1bĈ#F0_Ĉ#F1bĈ#F1bD 3/|˗_| /| 1bĈ#Fd/bĈ#F1bĈ#F1|̗o |7_'?80,h „ 2l!D"F1bĈ#F1bĈ# O@ /|/_| /߿|'0_8`A&TaC!:O@ DPB >QD-^|`> ̗o`|o`|/| È#F È#F1bĈ#Ɓ 30'߿'p`>$XA .dC E1bĈ#F1bĈ#F`1bĈ#Fd/bĈ#F1bĈ#F1|E0_Ĉ#F1"|#F1bĈ#F1bĈ3/bĆ"F1bĈ1bĈ#F1bĈ#F(0|#61bĈ#F0_Ĉ#F1bĈ#F1bD a#F1bD"F1bĈ#F1bĈ# g0_Ĉ E1bĈ#21bĈ#F1bĈ#FQ`> HO@ DPB >0_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD"F1bĈ#F1_Ĉ#F1bĈ#F1bD 'p "Lp!C H*\ȰC>|Ç>|Ç>|h0|>|`>|!|>|Ç>|Ç>4`>|x0Ç>|a>|Ç>|Çg0Ç><Ç>|0Ç>|Ç>|Ç 3a|˗O |@ o|o`>0@/ <0… :DÇ>|Ç>|Çw0|/_˗`|/|/|/|{Ç"Ç>|Ç>|C 3`|/߿| g0_̗/߿|!̗_|;Ç>|0Ç>|Ç>|Ç 3`>;/߿| g0_̗/߿|/_>Ç>DÇ>|Ç>|C=d@80˗/0@ O  7p  <0… :DÇ>|Ç>|Ç8P /_| ̗_|7p`|/_7_|/|0 <0… :T <0… :|1ĉ+Z0| /|/_>̗o`|/߿|/߿|w0F1Ḟ#F1bĈ#Ḟ0_|G0_ ? 0 O''p| H*\ȰC>|Ç>|Ç>|h0|>|`>|!|>|Ç>|Ç>4` 'P ,h B&L0a„ &L`>$XA .dC%NXŇ È|1b1F1bĈ#F1g0FÈ#ƈ0bĈ#F1bĈq`>0bĨ0F1Ḟ#F1bĈ#Ḟ#F0bĈ1b>1bĈ#F1b |,h „ 24 <0… :DÇ>|Ç>|Ç=|Ç>|C>|Ç>|Ç>|h0Ç>|Ç>DÇ>|Ç>|Ç=|Ç>|C>|Ç>|Ç>|h0Ç>|Ç>DÇ>|Ç>|Ç=|Ç>|C>|Ç>|Ç>|h0Ç>|Ç>DÇ>|Ç>|ÇO@ DPB 'p "Lp!Æ9tСC:tСC:t|9tСCsСCsСC:tСC:tСÅ sСCСC*СC:tСC:tСC СC:ϡC:TϡC:tСC:tСC3`| ̗/_ /߿߿| ̗/_>/_> /߿'p| H*\Ȱ|:tСC:tСC:t0|/_|/|/߿|˗/|3/|'0_/߿|w0C:t0C:tСC:tСC.g0|˗/|'0_|/_|˗`|̗o`|/_|/|sСCsСC:tСC:tСÅ 3/|3/߿|˗/|/_>_|@ ̗o|˗o˗O`| <0… СC:tСC:tСC g`> ?7p`8P?@ O  7p  <0… СC:tСC:tСC 8P '0_|̗_|˗O`|0@'߿(0_ /߿|/_>˗O`|O@ DPB 'p "Lp!ÆB(q"Ŋ/>g0|˗/|/_|/|#/|/|/|/_>̇#F0bĈ#F1bĈq`> 7`>'߿ _80߿8`> O? O8`A&TaÁ:tСC:tСC:tpa>:tСC9tСC 9tСC:tСC:t|9t!|'p "4/a„ &L0aB8`A&TaC!F8bE3#F È|1bĈ#F1b80|1bX0F-È#F1bĈ#Ɓ È#Ƃ0bh1F1bĈ#F1g`> 4xaB 6d <0… СC:tСC:tСC 9tСC:tСC9tСC:tСC:t|:tСC:t|:tСC:tСC:t0C:tСC:tx0C:tСC:tСC.СC:tСCСC:tСC:tСC 9tСC:tСC9tСC:tСC:t|:tСC:t|:tСC:tC9C9@8`> 4xaB 6tb>$XA  <0… :|1ĉ+Z0|1bĈa>È#F1bĈ#Ɓ È#Fa0F1bĈ#F1g0F1b|#F0bĈ#F1bĈq`>˗/|0@/߿߿ | (0_|`>8p 70_|o`|'P?'p "L`>$XA .dC%NXŇ 3/|3/߿|˗/|'0_|'0|/߿|'0_̗O`|/| ̗O`|3#F0bĈ#F1bĈq`> '0_| /_>'0_/_|`>70|W0_ ̗`|/|'0_>0bd#F1bĈ#F3`|˗`|/_| ̗/߿//_|̗O`|7p|7_|7p|'0_'p "L`>$XA .dC%NXŇ 30@ 80߿ (O|˗/ O'p|'P?7p O@ DPa| H*\ȰÇ#JHŋ8P '0_|̗_|˗O`|0@'߿(070|7P`|˗O`|/_| /߿|'0_8`A&Tx? 4xaB 6tbD)Vxa> '0_| '0|/߿|˗/|;o`>'0_>̗`|#/|/߿|'0_>0bd#F1bĈ#F3`|8߿'߿(?˗`|'`>8p? '? ? 4xaB'p "Lp!ÆB(q"Ŋ/>g0F1b|#F0bĈ#F1bĈq`>0b40@ H(? 4xa| &L0| H*\ȰÇ#JHŋ̇#FÈa>1bĈ#F1b`>1b0F aĈ#F1bĈ|aĈ#Ƈ0bd#F1bĈ#F3#F1>̇#|1bĈ#F1b80A$XA .dC8`A&TX0,h „ 2l!Ĉ'Rh|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|1bĈ#F aĈ#F1bĈ|8`A&T8? 4xaB 6t|#F1bĈ#F1bĈ3/bĈE1bĈ#1bĈ#F1bĈ#FQ`>"FX0_Ĉ#F1|#F1bĈ#F1bĈ3/bĈE1bĈ#1bĈ#F1bĈ#FQ`>_#`|70|3/bĈ#Fq`#F1bĈ#F1bĈg0_>'0_|W0_> /_%1bĈ#F80_Ĉ#F1"("((80_|˗O`| ̗o|'0߿|7p| H*\ȰÇ1bĈ#F1bĈ#F(0|/_|˗/|˗/߿|/|1bĈ#F/bĈ#F1bĈ#F1|̗|70߿_ O O| H*\ȰÇ1bĈ#F1bĈ#F(`>'p`|(߿'߿'߿'?'p "Lp!ÆB, <0… :|1ĉ+Z0|/߿|˗o`|_|˗o`| aĈ#Ɖ0bĈ#F1bĈq`> '0_`> ߿,8`A&TaC!1bĈ#F1bĈ#FQ`>"FX0_Ĉ#F1|#F1bĈ#F1bĈ3/bĈE1bĈ#1bĈ#F1bĈ#FQ`>"FX0_Ĉ#F1|#F1bĈ#F1bĈ3/bĈE1bĈ#1bĈ#F1bĈ#FQ`>"FX0_Ĉ#F1|#F1bĈ#F1bĈ3/bĈE1bĈ#1bĈ#F1bĈ#FQ`> H* <0… :|q`#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈE1bĈ#Fb#F1bĈ#F1bĈO@ DPA$XA .dÇ B"D!B"D!B`>!2"D!Bx0D!B"D!B"D"D B"D"D!B"D!Bq`> B0D!B|!B"D!B"D!g0| /_|/_ O o`>? 4xaB 6ta>!B"D!B"D3`| ̗/_>/_ ̗`| ̗/_>"D!Bx0D!B"D!B"Dg`> ߿|_'p| H*\ȰÇA"D!B"D!B80|(|o`> ̗/_ 7_|8P`>$XA .dÇ B"D!B"D!B`>`>| _|o?O@8`A&TaC"D!B"D!Bq | O|0@o`70߿߿'?'p "Lp!ÆB <0… :|1ĉ+Z0|˗O`| '0_˗/|o`|w0F1b|#F1bĈ#F3`| O| o|?7O8`A&TaC"D!B"D!Bq`> B0D!B|!B"D!B"D!g0D"D!B<"D!B"D!B"ā "|!B"DA"D!B"D!B80|!Bd"D!B`>!B"D!B"D3"D A"D!"D!B"D!B|8`A&Tx? 4xaB 6ta>!B"D!B"D"D!B"ą B"D!B"D!B"D!B"D"D!B"D!Bq`>!B"D!B\"D!B"D!B"ā B"D!Bqa>!B"D!B"D"D!B"ą B"D!B"D!B"D!B"D"D!B"D!Bq`> H'p "Lp!ÆBx0D%J(QD%J(Q|IOD%J(b>%J(QD%J(Qā 1D%J(Q"|%J(QD%J(QD'1b>%J(QD$J(QD%J(QD3`| ̗O |'?O@ DPB >`>%J(QD%J(Qā 3/|#/|(QD%JOD%J(QD%J(q`> 70|70_>$J(QD!(QD%J(QD%J`> /_|'0_|(QD%JOD%J(QD%J(q`> 70߿|/|;OD%J(b>%J(QD%J(Qā (?_| ̗O`| `> 4xaB 6tbĄ H*\ȰÇ#JHŋg0_>'0|'0|1bĈ#|1bĈ#F1b80|(_/O@ DPB >`>%J(QD%J(Qā 1D%J(Q"|%J(QD%J(QD'1b>%J(QD$J(QD%J(QD3Ob|%J(QDI(QD%J(QD%g0Ĉ$J(QD!(QD%J(QD%J`>I(QD%B'QD%J(QD%J80|#(QD%JOD%J(QD%J(q`> H'p "Lp!ÆBx0D%J(QD%J(Q|%J(QD%J,OD%J(QD%J(q`>%J(QD%'QD%J(QD%J80D%J(QD (QD%J(QD%JOD%J(QDI(QD%J(QD%'QD%J(QĂ$J(QD%J(QD(QD%J(Qb|%J(QD%J(QDO@ D8? 4xaB 6tbĂ$J(QD%J(QD3O$J(QD(QD%J(QD%J`>(QD%JtOD%J(QD%J(q`>$JOD%J(a>%J(QD%J(Qā ;o`> 70_w0D%J(Q|%J(QD%J(QDg0_> ̗O`|˗Oa>%J(QD$J(QD%J(QD3`|'0_>0| H0,h „ 2l!ĈI(QD%J(QD%g0|˗_|˗/? O@8`A&TaC!F,OD%J(QD%J(q`> /_|˗_|'p@? 4xaB 6tbĂ$J(QD%J(QD'p@̗_|˗/߿|O@$0 <0… :|1A$XA .dC%NXŇ 3/|_|8? O@ DPB >`>%J(QD%J(Qā 3/|̗/߿|80 <0… :|1b|%J(QD%J(QD'Q|%J(QDI(QD%J(QD%g0DI(QD%:'QD%J(QD%J80|%'QD%J0D%J(QD%J(Q|I/D%J(Q|%J(QD%J(QD'Q|%J(QDI(QD%J(QD%g0DI(QD%:'QD%J(QD%J80A$XA8`A&TaC!F,OD%J(QD%J(q`>%J(QD%'QD%J(QD%J80D%J(QD (QD%J(QD%JOD%J(QDI(QD%J(QD%'QD%J(QĂ$J(QD%J(QD(QD%J(Qb|%J(QD%J(QDI(QD%J(`>%J(QD%J(Qā 'p "Lp!Æ'p "Lp| 2dȐ!C 2dȐ!C 2dȐ!Cǐ!C 2dPa> 2dȰ`> 2dȐ!C 2dȐ!C 2dȐ!Á cȐ!C 2d0C 2dX0C 2dȐ!C 2dȐ!C 2dȐ|1dȐ!C 2T!C 2,!C 2dȐ!C 2dȐ!C 2dp`>˗O`70_|G0_|(| 70_|'P O`| ̗_| /,h „ .ǐ!C 2dȐ!C 2dȐ!C 2d80|/_|/|'0_˗o`|#/| _|3/|'0_˧0C 2dX0C 2dȐ!C 2dȐ!C 2dȐ|̗o`|'0_> ̗O`|o`|#/| G0_>̗/߿|'0_|˗Oa> 2dȰ`> 2dȐ!C 2dȐ!C 2dȐ!Á 3`˗߿|˗/߿|_|˗?/_> Gp`|#(0_>/_/_|(? O@ DP…2dȐ!C 2dȐ!C 2dȐ!C 3`|8_ _ OO'p|O O|˗_˗/?'p "Lp| 2dȐ!C 2dȐ!C 2dȐ!C8P 70_|/_|/߿|/|/ ̗o|˗o|̗_|˗/߿|O@$0 <0… 'p "Lp!ÆB(q"Ŋ/>g0|˗O`| /_>'0|/߿|'0_ /_>̗O`| /_ 'p "Lp| 2dȐ!C 2dȐ!C 2dȐ!Ċ0_|/_>/|G0_ O'p`|O O|˗o|`>'p| H*\0C 2dȐ!C 2dȐ!C 2dȐ|1dȐ!C 2T!C 2,!C 2dȐ!C 2dȐ!C 2dp`>2dȐ!|'p (? 4xp`>"D!B'p "Lp!ÆB(q"Ŋ/>g0F1Ż#Ƃ0bĈ#F1bĈq`>0bĈb>1̇#F1bĈ#Ḟ#FaĈ`>1bĈ#F1b |,h „ 2l!,h „ .ǐ!C 2dȐ!C 2dȐ!C 2d80C 2dȐ!C 2dȐ| 2dȐ!C 2dȐ!C 2dȐ!ÃcȐ!C 2dȐ!C 2\/a> 2dȐ!C 2dȐ!C 2dPa>2dȐ!C 2dȐ!C S!C 2dȐ!C 2dȐ!C .O@'p "Lp!ÆB(qbC$8? 4xaB 6tbD)V81|/^xŋ)wŋ/^xʼnxŋ/^/a/^xŋ/^, |,h „ 2l!,h „ 2aÆ 6lذaÆ 6lذaÆ 6,` 6lذaÅ6lذaC6lذaÆ 6lذaÆ 6lذa kذaÆ 6\aÆ 6aÆ 6lذaÆ 6lذaÆ 6,` 6lذaÅ6lذaC6lذaÆ 6lذaÆ 6lذa ;o`> O7߿|?70|/_|#/_ |O@8`A&T| 6lذaÆ 6lذaÆ 6lذa|̗O`|#/߿|/_|/|/_ ̗O`|/|/_> ̗o`|;aÆ 6aÆ 6lذaÆ 6lذaÆ 6,`>/|/_˗/߿|'0_ /_> ̗O`|/|/|'0_6lذaC6lذaÆ 6lذaÆ 6lذaÂ'p`/_70_7_|˗O`|˗o /|˗/߿|/_|80_> ̗O`O@ DPB5lذaÆ 6lذaÆ 6lذaÆg0__|/߿|/_|˗_|+0oO '`> 'p| H*\P` 6lذaÆ 6lذaÆ 6lذ | O|˗_| ̗_| /_/_|8_|˗O`|˗_|/_|O`|/|0 <0… 'p "Lp!ÆB(q"Ŋ/>g0|˗/|/|'0_ /_>/_>'0߿|˗/| ̗O`|/|È#|1bĈ#F1b80|/_>/_/|#0 /_> ̗//˗o`|80߿'p| H*\P` 6lذaÆ 6lذaÆ 6lذ`>6lذaÆ kذaÆ kذaÆ 6lذaÆ 6lذaÆ 3aÆ (? 4xaB-\p… O@ DPB >QD-^|`>1b#FaĈ#F1bĈ|aĈ|1bD#F1bĈ#F3#F'È#|1bĈ#F1b80|1b81FÈ#F1bĈ#Ɓ 'p "Lp!Æ'p "Lp!C6lذaÆ 6lذaÆ 6lذaÂ6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ 6lذaÆ "װaÆ 6lذaÆ 6lذaÆ װaÆ 6lذaÆ 6DaÆ 6lذaÆ 6lذaÆ 6,aÆ 6lذaÆ 6l0_Æ 6lذaÆ 6lذaÆ 6lX0_Æ 6lذaÆ 6PC? 4xaB 6tbD)Vxa> H*\ȰA$XA .d0a>:tСC:tСC:\`>:tpa>:tС|:tСC:tСC:t0|:t|:tСC:tСC:tСC:tpa>:tСÅ:tСC9tСC:tСC:t|/@o`/߿'߿8p`>/|'`>_> <0… &СC:tСC:tСC g0_|'0_>̗O`| ̗O`|C/|'0_>/߿|g0C:tP`>:tСC:tСC:\`> O߿('?70_/߿| /_>? 4xaB 6LϡC:tСC:tСC3 |O࿁ O@ ̗o`|G|'0_>'p "Lp!Æ 9tСC:tСC:t|̗/_/@ 7P?O? (0_ ? O| H*\Ȱa|:tСC:tC:t`>'p`|˗/|7_|˗_|˗/߿|/|/_| /|'0_8`A&TaÅ H*\ȰÇ#JHŋg0_|'0_>̗O`| ̗/_>ˇ0_ ̗O`| ̗O`|/|1bH0F1bĈ#F1g0|/|'P?8?8@ <0… &СC:tСC:tСC СC.СC:ϡC:tСC:tСC3ϡC(? 4xa| &L0a„ &? 4xaB 6tbD)Vxa>0bx1F1̇#F1bĈ#Ḟ#Ƌ0bĈ`>1bĈ#F1b`>1^̇#FaĈ#F1bĈ|aĈb>1b$#F1bĈ#F30 <0… O@ DPB sСC:tСC:tСÅ:tСC:tСÃ:tСC:tСC:tpa>:tСC:t`>:tСC:tСC:\ϡC:tСC:<ϡC:tСC:tCsСC:tСCsСC:tСC:tСÅ:tСC:tСÃ:tСC:tСC:tpa>:tСC:t`>:tСC:t!r!Z| 0 <0… :T <0… kذaÆ 6lذaÆ 6lذaÆ 3aÆ 6l0a 6lؐ` 6lذaÆ 6lذaÆ 6lذ`>6lذaÆ kذaÆ kذaÆ 6lذaÆ 6lذaÆ 3aÆ 6l0a 6lؐ` 6lذaÆ 6lذaÆ 6lذ`>O`|˗O |'p`|'P࿁| ̗/_/_> /߿'p`>$XA .dH0_Æ 6lذaÆ 6lذaÆ 6lX0|/߿|O`'0|'0_|'0߿|70_ ̗O`/_>װaÆ װaÆ 6lذaÆ 6lذaÆ g0|˗`̗`|/|/|%̗o`|/_/_>װaÆ װaÆ 6lذaÆ 6lذaÆ g0|˗`|+/˗|'0߿|70_| ˗o`|/_>/_>? 4xaB װaÆ 6lذaÆ 6lذaÆ g0A߿? (0_|0@߿80_ ? O| H*\Ȑ` 6lذaÆ 6lذaÆ 6lذ | O|˗o| ̗O`|/|'0_|70_|̗o`|/_˗O`|/ H*\ ,h „ 2l!Ĉ'Rh|̗O`| /_>g0_>/_>/_>˗0_ ̗O`| ̗O`|/|1bT#F1bĈ#F3`|/_70_70_ ̗/? 7P 'p A  '? ? 4xaB װaÆ 6lذaÆ 6lذaÆ g0_Æ 6lذa| 6lذ!| 6lذaÆ 6lذaÆ 6lذa|5lH`>8`A 'P ,h ‚&L0a„  <0… :|1ĉ+Z0|1b1FÈ#F1bĈ#Ɓ È#ƈ0bĨ0F1bĈ#F1g0F1Ḟ#F0bĈ#F1bĈq`> H*\ȰC H*\Ȑ` 6lذaÆ 6lذaÆ 6lذ` 6lذaÆ 6lذ!| 6lذaÆ 6lذaÆ 6lذa| 6lذaÆ 6lذaC6lذaÆ 6lذaÆ 6lذaÂ6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ 6lذaÆ5lذaÆ 6lذaÆ kذaÆ 6lذaÆ 6lذaÆ kذaÆ 6lذaÆ "װaÆ 6lذaÆ 6lذaÆ װaÆ 6lذaÆ 5BO@ DPB >QD-^| |,h „ 2l!ā H*? 4xaB 6tbD)Vxa>0bĈc|1*̇#F1bĈ#Ḟ#F#ÈQa>1bĈ#F1b`>1b1F aĈ#F1bĈ|/|˗o`>/@ O@0@ _o`>o`| 70|O/O@ DP| H*\ȰÇ#JHŋg0_|˗/|/߿|G0_˗/|O`|/_|_| /|'0|/| ÈQa>1bĈ#F1b`> o`70߿'߿߿'?(0_> ̗/_ ̗///߿|˗O`|80,h „ O@ DPB >QD-^|`> o`70˗/|/_| (0_/|/| 80_> /_ 80_> ̗o| H*? 4xaB 6tbD)Vxa> ˗/? _'P` ̗O`8?˗O`|(7p '`> 7_'߿80,h „ O@ DPB >QD-^|080_|'P߿ ?߿ O|/|˗/߿|˗o ̗o|˗_/|7p |,h „ 'p "Lp!ÆB(q"Ŋ/>g0|/_| ̗_>'0|/_>̗O`> ̗O`|˗O`%̗O`|/|/|g0F aĈ#F1bĈ|̗/_> ? ߿'߿߿| /_|'0_0@ O@OG? O O@ DP| H*\ȰÇ#JHŋ̇#F#ÈQa>1bĈ#F1b`> 'P ,h A O@ DX0_„ &LH0,h „ 2l!Ĉ'Rh|aĈ#ƈ0bT#F1bĈ#F3#F1Ḟ|1bĈ#F1b80|1bĈ1b>È#F1bĈ#Ɓ È#FaĨ0F1bĈ#F1g`> 4xaB 6t@$XA  <0… :|1ĉ+Z0F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80A$XA .dC8`A&T(0,h „ 2l!Ĉ'Rh|aĈ#F0bL#F1bĈ#F3#F1J̇c|1bĈ#F1b80|1bĈQb>È#F1bĈ#Ɓ ;/_|˗|߿|_70߿'p|˗O`˗O |߿| /_> |70߿O8`A&T(0,h „ 2l!Ĉ'Rh|̗O`|̗_|˗O`|/_|`|#/|o`|/| ̗O`|8߿| O@8`A&T(0,h „ 2l!Ĉ'Rh|̗O`|̗_|˗O`|/_|70_|G0_|ˇ0_ ̗`|/@_8`>$XA   <0… :|1ĉ+Z0|_|/|O`|˗/|+/|˗_| /| W0_> /_|/|1&̇#F1bĈ#Fg`> ?7p`8P?@ O  7p ˗/|'P࿁@ /,h „ O@ DPB >QD-^|080_>7p`|/_|/? ?@ ̗o|˗/ ̗_|(0|'0_> ߿|'p A$XA O@ DPB >QD-^|`> ̗/_> '0_|/_>G0_> 70_> ̗_ ̗_|+/|/@/߿8`>$XA   <0… :|1ĉ+Z0|0|/? @ 0 O''p`| ̗O`|8P'p| H*? 4xaB 6tbD)Vxa>0bĈ|1&̇#F1bĈ#ḞA O@ D0@ HK0a„ O@ DPB >QD-^|`>1b(1F aĈ#F1bĈ|aĈ#F0bL#F1bĈ#F3#F1J̇c|1bĈ#F1b80|1bĈQb>È#F1bĈ#Ɓ 'p "Lp!ÆB$ <0B8`A&TaC!F8bEÈ#F1b\#F1bĈ#FÈ#F1b\#F1bĈ#FÈ#F1b\#F1bĈ#FÈ#F1b\#F1bĈ#FÈ#F1b\#F1bĈ#FÈ#F1b\#F1bĈ#F30 <0… :|1",h B8`A&TaC!F8bE3#F1b<#|1bĈ#F1b80|1bĈ|)È#F1bĈ#Ɓ È#FH1F1bĈ#F1g0|˗/|/_|˗O`| ̗/__| ̗/_> ?o`>7_/_|˗o`>o`'p "D? 4xaB 6tbD)Vxa> '0_/|W0_>G0_˗O`|̗O`> '0߿|/|˗o`|O`'0_ ̗`>aĈ#F1bĈ|̗O`|̗`|+/|̗o`|/_|70|_|˗Oa>70_>˗`|/_̇b>1bĈ#F1b`> 0߿|/߿_>̗o`|˗o`|/_|˗o`70_> ̗/_'0߿|'0|˗o? '?'p "D? 4xaB 6tbD)Vxa> '0_>0@ O|'p࿁o@/˗o`|(@ /_|'p o7?'p "D? 4xaB 6tbD)Vx!| O|˗o`| /| ̗o`|˗o`|0@'߿8_|/|/|'0_'P'@O@ D0,h „ 2l!Ĉ'Rh|'0_|/|W0_>G0_˗O`|̗O`> ̗O`|[/|'0_ /_/| H1F1bĈ#F1g0|/_|(O@ 7P?O7P  ̗o`|#0@ (0_> ߿#O@ <a>$XA .dC%NXŇ È#FH1F1bĈ#F1g0F  

$XA .dC%NXŇ È#FH1F1bĈ#F1g0F1bx0F0bĈ#F1bĈq`>0bĈ#ƃ0Ṙ#F1bĈ#FO@ DPB >? 4x!| H*\ȰÇ#JHŋaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FaĈ#F1.̇#F1bĈ#FO@ DPB >8? 4xaB'p "Lp!ÆB(q"Ŋ/>g0F1b#F0bĈ#F1bĈq`>0bĈc|1*̇#F1bĈ#Ḟ#F#ÈQa>1bĈ#F1b`/_'0_|˗/|/_| 70߿|/_|8߿ | /|o`|˗| H*? 4xaB 6tbD)Vxa> '0_/|W0_>G0_˗O`|̗O`> '0߿|/_|'0_> ̗/_>0bT#F1bĈ#F3`|˗`|/_|˗`|/_G0_'0|/_| /_> ̗/|S#F0bĈ#F1bĈq`> '0_ ̗`|̗o`||˗_| / /_>/|(P/߿|/_ 'p "Lp`>$XA .dC%NXŇ 3/|˗|(?0O࿁߿| /_ O'p`|/߿|˗| O8`A&T80,h „ 2l!Ĉ'RhC ̗/|/_> /| /|`>O'p|'0_>$/_/_|`>8 |,h „ 'p "Lp!ÆB(q"Ŋ/>g0|˗O`̗O`|_|/߿|˗/|C/|G0_ ̗/_>`>8`>$XA  <0… :|1ĉ+Z0|˗O`|O?(@O? @ (0_ ̗ |'p`|7_|08_>$XA  <0… :|1ĉ+Z0|1bĈ1b>È#F1bĈ#Ɓ h`>8`A O@$XР@ O@ !B"D(0,h „ 2l!Ĉ'Rh|aĈ#ƈ0bT#F1bĈ#F3#F1Ḟ|1bĈ#F1b80|1bĈ1b>È#F1bĈ#Ɓ È#FaĨ0F1bĈ#F1g`> 4xaB 6t@$XA  <0… :|1ĉ+Z0F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80F1bĈ|1bĈ#F1b80A$XA .dC%"O@O@ DPB >QD-^|`>1bĈc|aĈ#F1bĈ|aĈ#F擘#F1bĈ#F3#F1bĘ0|1bĈ#F1b80| /_|˗O`|̗/_>'0_|o`'0_| 'p߿8_70|˗/˗/| ̗/@ ߿80? 4xaB 6tbD)Vxa> '0_/|W0_>G0_˗O`|̗O`> '0߿|/_|'0_> ̗/_ ̗`|o`˗O`|İ#F1bĈ#Fg0_>G0_> ̗`|G0_˗/߿|#/|O` ̗/_/|˗O`|%̗o`|/_|/| 0,h „ 2l!Ĉ'Rh|̗O`|/|3/|̗o`|/_|70|'0_>˗0_|/_|`>8p`|#/_$/_ ̗| $(0,h „ 2l!Ĉ'Rh|̗O`|`>  O' _>/|'P࿁80__|`>'p`|(7߿ 8p| H*\ȰÇ#JHŋ8P '0_|˗o|7P`|7_|/? ?/|G|˗_|˗/? O ̗`|˗`|/| O@ 'p "Lp!ÆB(q"Ŋ/>g0|˗O`̗O`|_|/߿|˗/|C/|G0_ ̗/_>`>8p`|#/|/|'0_>$H| H*\ȰÇ#JHŋw0_|˗/? '߿(`> O /|'P '0_|˗_ ?8? @7pO@ DPB >QD-^|`>1bĈc|aĈ#F1bĈ|a40@ H'P ,hP |'p  'P ,h ‚& <0… :|1ĉ+Z0|1bĈ#Ƅ$È#F1bĈ#Ɓ È#F1&'1F1bĈ#F1g0F1bĈ1a>0bĈ#F1bĈq`>0bĈ#F İ#F1bĈ#FO@ DPB >Q"B$Xp`>$XA .dC%NXŇ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#FÈ#F1bĈ#Ɓ 'p "Lp!ÆB| <0| H*\ȰÇ#JHŋ̇#F1̇b>1bĈ#F1b`>1bĈ`>aĈ#F1bĈ|aĈ#Fa#F1bĈ#F3`˗o`| ̗/_'0_|˗/߿| /_|˗/A70˗/| 70߿|o`|#H0,h „'p "Lp!ÆB(q"Ŋ/>g0|/|#/| '0߿|70_ ̗/_> ̇0_>/|SO`>˗/_>G0_ ̗a>aĈ#F1bĈ|̗O`|̗`|+/|̗o`|/_|70|_|˗/a|/_>G0_|/|-È#F1bĈ#Ɓ 3/|70_>/70_|70_/_|70/|˗/70_/_|˗_|˗/'p "L/,h „ 2l!Ĉ'Rh|̗O`|`>  O' _>/|'P࿁8P`|G`> 7 O8`A&? 4xaB 6tbD)Vx!| O|˗o`| /| ̗o`|˗o`|0@'߿8_|/|o`| ̗/|#/_/_|'p "L8? 4xaB 6tbD)Vxa>/_|˗`|+/|#/|'0_|'0|'0_>%̗O`>˗/|#/?/ <0| H*\ȰÇ#JHŋw0_|˗/? '߿(`> O /|'P ˗/_/@O|_> <0| H*\ȰÇ#JHŋ̇#F1̇b>1bĈ#F1b`>(? 4x@ O@ O@$XA%L0a8`A&TaC!F8bE3#F1b,|1bĈ#F1b80|1bĈc|-È#F1bĈ#Ɓ È#F h1F1bĈ#F1g`> 4xaB 6tC$XA O@ DPB >QD-^|#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b#F1bĈqa>1bĈ#F1b |,h „ 2l!Ĉ' O| H*\ȰÇ#JHŋ̇#F1b`>1bĈ#F1b`>1bĈ|aĈ#F1bĈ|aĈ#F-+#F1bĈ#F3`˗o`| ̗/_'0_|˗/߿| /_|˗/A70˗/| 70߿|o`|#H0|o`>0@/G_>$XA .dC%NXE 3/|_|/_|/|/_>G0_>'0|_| '0_'0_|70_>̗o`|/߿| ̗_|;`>1bĈ#F1b$`> ̗/_>̗O`|/_> ̗_|˗/|;/|˗O`|%̗`|'0_|˗O`|;/|˗|8P`|/ <0… :|1ĉ+Z1|/߿|G0_> 70_|/߿|˗/_> w0_ ̗O`|)̗o`|/_|/_|˗`|#/_%̗_|;`>1bĈ#F1b4/|/|O'p`|8 7p?70_> o@/_O@ 7_80_ O࿁?O <0… :|1ĉ+ZX1_| '0_|˗`|+/|̗o`|0@'߿8_|/|o`| ̗/|#/_/_|70_>˗/_> ̗_|#80_| H*\ȰÇ#JHŋ;O`| /_> ̗`|˗`|/|#/|/|˗0_>/_|˗`|8߿| /|˗O`| ̗O`|/'p "Lp!ÆB(q"Ŋ/b$`| ̗/_ O'P |( '߿(?70_>O@/_|/_>  ߿| 0 O''p| H*\ȰÇ#JHŋ ˘1cƌ3>̗1cƌ3f̘1cƌe,0@ H'P ,hP |'p "0@ H O@ DPB >QD-^H0_ƌ3f̘a3f!̘1cƌ3f$/cƌ3f0_ƌ3f̘1cƌ3̗1cƌ3f|/cƌ3f̘1cƌ ˘1cƌ3>̗1cƌ3f̘1cƌ8`A&TaC!F8Q ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Z ;;PK~?ހPK+AOEBPS/img/conuse.gifZGIF87a@?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,@ H*\ȰÇ#JHŋ3jȱǏ CI2#| O@8`A 'p "Lp!ÆB(q"Ŋ/b̨q#ǎg0_/_>=zѣG=z1b|[/GyѣG=zѣG1̗0GyѣG=zѣG 9w0_| ѣG=zѣG=2w0| g0_|'0_|/_|/_|yѣG=zѣG 9G0߿|/_|/߿|˗O``>=zGyGyG ? W0_70߿|/_>`>$XA .dC%NXE5nx1_|'p@7__ _'P`|'p "Lp!ÆB(q"Ŋ/b̨q#G 0|̗_|˗_>/|/_|رcǎ;vرcǎ+`>`|˗O`>/_/_|uرcǎ;BO@ DPaAO@ DPa>O@ $+`A W` $`>$XA .dC%NX1b>3ϢE 0|c/|;ϢE-ZhѢEY0|-*g0E;a,:̇0E-ZhѢE ha>,ZT`>-̇0| Yd/a>-ZhѢE-w`>_7?˗o`|#H_>$/_>o` H0߿WP'p`O`|'P 8p|̗o|8_| H!? 4xaB 6tbD)V`` /߿| ̗0| '0|o` o`> ;o`'0_| )O| H@$X H_>$XA .dC%NXb O`>+o`|˗0|/_|o`o`> ;o`/a,Z0E-ZhѢE`> G0| W0߿| /|/߿| 70|3o`>_|Ko`,Z0_|-ZhѢE->/A OO@(?7p|7p` _o |OO|o/_|(? o| H*\0| 2dȐ!C 2dȐ!C "O@8_>'0|$/_>G?/@/| /߿| 08_'0A8@$XA .T0'p "Lp!ÆB(q"Ŋw0_| W0|_>/a>;o`>/|`>3`/_K`>,Z0|-ZhѢE-6'0A߿|G?˗o |? '0˗o|o`'P?_>70| ̗/|0@ o`O@ DPBcȐ!C 2dȐ!C 2dȐa| 2d0| 2dh0| ̷0A$XA 'p 'p "Lp!ÆB(q"ŊY0|-*g0E3ϢE hѢE-Zhb|-:g0E ga ha>,ZhѢE-ZX0EgѢ|YDoa>,ZDb>-ZhѢE-gѢ|Y0|[`'`>(߿|o  <0… :|1ĉ+BgѢ|Y0|c`/|#o` ;a>-ZhѢE-O@ DPaAO@ DPa>O@ $+|W_o` +(0_'p "Lp!ÆB(q"Ŋ/b̨q#LJ;o` #/߿| /_|9ױcǎ;vرcǎ;F70|O'__(0 8p| H*\ȰÇ#JHŋ3jqb|70߿|O/߿| o H ,h „ 2l!Ĉ'Rh"ƌ7r`>g0|o` ;cǎ;vرcǎ;vx0|0@_߿ _>? 4xaB 6tbD)VxcF9v<ϣ|=zѣG=zѣ|-ѣG=zѣG-h1G=zѣG=zh1G=zѣG=z"|,h „ 8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWf>kW_;lYgѦUm[oƕ;n]wջo_ 4x!A$XA .dC%NXE5nؑb|<̗/G=zѣG=zQ`|˗ϣG=zѣG=zϣ|=zѣG=zc| X0G=zѣG=z1_|<ѣG=zѣG=jw`>'p| ̗/|˗_| <0… :|1ĉ+Z1ƍ;.g0_/_>/߿|_|#ϣG=zѣG=zԘ` g0|O``>=zѣG=zb|70_ _| '0??$XA8`A&TaC!F8bE1fԸb '0_|'0__|#c|8rȑ#G9rȑ#G;08_> _o O@ Dx0,h „ 2l!Ĉ'Rh"ƌ'p  'p A W` ,XP` ,X`8`A&TaC!F8bE1fԈ0| `>8`A 4x!A$XA O@ DPB >QD-^ĘQ|70| mܸqb7nܸqƍ7nH0|o`>;oƍmܸqƍ7nܸqƂ;/߿|!G0|7noƍ7nܸqƍ3'p A0@O@ Hp ,h „ 2l`> O@ DPB >QD-^Ę1a3/|!G0|5ja>5jԨQF5j`> #O`>;OF=̧QF5jԨQF-w1|'p "L8? W`8`A&TaC!F8bE1f$oaS08`gРA ,/_| 3h`>$XA .dC%NXEcbCa|5̧0_|5jԨQF5j0|-̇0| ih0_|iԨQF5jԨQ| ]0| %G0F 3`>"ӨQF5jԨQƇ滘a>C`>23a"ӨQF5jԨQƇ'p  'p A +(0_ W0_|'0_|W0|/߿|/_|˗/_ +X| H*\ȰÇ#JHŋ3 ̧c>#O`˗/߿| ̗_>/߿|/߿|˗_|`>&ӨQF5jԨQƇ4f70|W0|˗`/߿| ̗/|`M̧QF5jԨQFiԘ/_|8P /|˗__|'0? _ O|8pO@ DPB >QD-^ĘQ`>s`| ̗/߿| /|_> ̗/|`>4jԨQF5jԨa>;`>+O`/_>0@7p|? 8pO@ DPB >QD-^ĘQ`>s`>ØOF5jԨQFӨq`>0 HCa>$XA .dC%NXEӨ`>Ө1a4jԨQF5jԨa> [Oa>ӘOF5jԨQE$XA O@,X` ,Xp`,/_ ,X` W`+X|,h AO@ D8? 'p`>$X|,8? O@ D8? O| H?$X? ϠA 4h | 3hРA 4X0| /A 4h`| 4h`>4hР|4hРA/| ̗Ϡ gРA g`>4(0_>˗Ϡ 4hРA g`> 4hРA80,(`> 4xaB H!!Ḃ!B!̇_>!DH0_>!Da|C/B"̗|"D!B <0… :|1| Id`>;oa>$̗0D!̷0|!+0@/߿7?70_|8p|? 4xaB 6tbD0|%w0| I,a>;a>$FW0_| W0| ̗_Soa>%J(QD-w0| ̗/_> C/_>/_|`>;O|w`> o_> 7p|/'p 70_|70|70_C(0|'p "Lp!ÆB1|70|+o`>O`_>70|70|'0_|/_>`>o`> ̗`3`;/_˗/|g0_>K/_> Oa>(QD%J0|G0_| ̗`>3` o`g0|9G0߿|˗_>`;`+_|@/7_'`> O@ |'߿O@ @8p|˗/,h „ 2l!Ĉ˗`|W0߿|W0_> +_˗`9W0_'0߿|W0__'0_ 0_| 70߿| 8 A 7p`//@8p?$XA .dC%NG_ @ (? o|˗o|O@ H | O/| GP | O`>O|_8P ,08| /_| 70_| ̗o`˗O`> <0… :|1Ć;``>3` `a>3o`O` `>`/_|{` /߿|0|80߿G0? /_|(߿8_8`A&TaC!F0|70_+o`>O`w0| w0| W`>/߿|O|o70|_| o| ooO`|8p8`A&T80… .\p… .\pB˗/|/_|w0_|˗/|g0[p`#o`|˗O`W0| ;o…-\p.\p… .\p… ̷p!|-\`> ̇0…!̷pB[(0| .o… ̷p… .\p… .\` 3o…̷_.a ̇0| -\_ .\80… ZhZhZhZ 'p  g0Ḃ0Ḃa|C!‚ˇP`>!D/ƒ"D!B'p "Lp!ÆB(q|3b| ̗a|Sb| ̗a>{0 <0‚ H*\ȰÇ#J`> 4x 'p "80,`> 'p "'p`>$X|,? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶunܓ HA H`>'p 8`AO@ DPB >l0 $'p`>$X|,h ‚ H*\ȰÇ#*'`̗a> 'QD%J4Ob| 3a|%'QD%J(1ĂH0_>(QD%'`cOăI(QD%B'`KOD$J(QDI,a(Qa>%J(Qć$g0_>!'a>"(QD%'`C/a>{OD%J(a> O@ 7p`o8`A w`8`A&TaCC/@߿| /A#H0A #Hp`>8`A&TaC!Fo`>̇0|g0|̗/߿|˗`|'p@8`A&TaC a|70|70|˗_|˗`|'p߿| H*\ȰÇ# '0| ̇0|9G0߿| O(0_'0_>'0߿|O@ DPB >4_>#`>s` /_|`|O`|˗O` "D!B0߿|o`> 0_| 70߿| /| ̗O` "D!>̗`|w0_|+/|G0_|'0_|_ B"D!O@ /_#H`>'p A (?(_>o`0O@$ <0… :,08_|Gp | O@8P _|7P`|?8 ,h „ 2l!/A / G0߿| `70_˗|/|˗O` G| H*\ȰÁ |/G_$(0|/||/|˗O`G| H*\ȰÇ!'0|a;`+/_˗`|_|˗O`>"D;O`> 70| g0| w0_|˗O`>O`/_>["D!B` #O`> s`>!c"D!BDoa>`C"D"D!B$a>̗a|AO@$X`| ;xa B"Dx0| )| A"D!0ăSoa>{o!|,h /_| ,0'p ,ϠA | 3hРA gР| H*\ȰÇ 1`0_>惘oa>)̗`|˗oa|[| ̗a>0D!B"| 8`A8 |O@'p ", g`> gp`>4ϠA480 HA H|O@'p ",  <0… :|0D!B| ADa80|!B"D B"D "D!Boa>0_| -0D!B|!B"DA"D!˷0Ao Gp`> Gp`| G_>#Hp`>$XA .dC B"D"D!BOa>` 3``>(0O@ DPB >T"D!B0_|!B"D!/|W0|9G0|/_>3` B"D ;"D!B80|!B"D;/|W0_|#_>˗o`> /D!B| "D'p "Lp!ÆBx?|'p@$X`>'p`'P 'p "Lp!ÆB(? 4xaB 6t0Ç>|C!70_|̗a>3/|g0_|>|Ç{Ç"Ç>|a#o`|/|'0|/_ #Ç>||>|Ç>|ÇC`|w0_|=DÇ>|Ç>|Ç>|Ç =L`{h0Ç>|Ç>|Ç>|Ç{0| %  <0… :|1ĉ+Z1ƍØa曘cǎ;vرcǎ;vdc0_uرcǎ;vرcǎ a̧0_|僘/_رcǎ;vرcǎ'p  'p +X` 8? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{i@;;PKqs1""PK+AOEBPS/img/lnpcc017.gifGIF87ah?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,h'p "Lp!ÆB(qC$XA .dC%NXŇ0bĈ#FÈ#F1bĈ#Ɓ0bĈ#F+/|̗/|̗/| ̗/|̗/|̗/|̗/|̗/|̗/|̗/|̗/|̗/|̗/|0bĈa>1bĈ#ƅ0bĈ#F aĈ|'p H*\ȰÇ#'QD%J(QD%J80Ć(QD%Jl`>%J(QD%J(Q|kOD%J(a$J(QD%J(QDIla>%J(QĆ (QD%J(QD%>̗0|W0D%J(Qb|%J(QD#(QDK/߿|/|%J(QD A̗/_|!̗/_>%J(Q|%J(Q| Ob#OD%J(a>$X_> 380|? 4xaB 6t0a>!BaQ`"D!Ba>/_/_>_ O <0… :|1ĉ'K_|!G0_Ŋ+VXQa>˗_>/|_>/߿|˗_+VXbŊ%K_|'0|+VXbE SO`O`|O`_| /_|*VXbŊ+V/a>$3/_>*VXbŊ ̧0߿| '0߿|'0| /߿| /|+VXbŊ+JWQa*VXbŊ ? ˗_| O߿߿70,h „ 2l!Ĉ'R| UXbŊXbŊ+V\bŊ+WQa*VXbŊ UX`|UoaK"|+VX` 8`A$XA .dC (Qb|%&̷0|!W0D$J(Qā$J(QD%JX0D#/߿| ̗/_>0'߿'߿'_O?/߿ /?Gp?O@ DPB .Ç>|Ç+Ç˗_>O`O`>O`>o`> ̗_>_O`/| '0_>>|Ç =|Ç>|C {/| ̗/߿| ̗/_O`>˗|_/߿|߿| /߿? 4xaB 6t`> 4xaB 6tbD'P`>$XA 70|_>O`>O`>/|'0߿|/| '0_>/| .\p… "̷p… .\p… .\pa| .\p|˗`>˗/߿| ̗/_70_| ̗/_'0_|o`˗/߿| /_| '`>߿| H*\ȰC>|Ç>|!|>|Ç>tÇ>|h0Ç>L0 'p "Lp!Æ9tСC:t|:tСÆ:tС| 9tСCs0 <0… :|1",h „ 2l!|!B`> B"Ąkakaka> B"D Ab|c"D!BL`>kacaka>!B"|!B0_c"D!BL`> o`W0_|#0@? o| o|/7p 8p|? 4xaB 6t`>!BDO`>"D+`| 70|+O`> 3`>`>/| 50|!B"D Ba>c"D!BLa| ̗_|̗/| ̗o`> 3`>#`aca>!Ba>!BDO`> 'p "Lp!Æ2'O| o|/7p` O` /| 8p|/7p80,h „ 2l`>d/߿|O@ DPB >T?/˗/|o|807_>7P`| 7p 8p|/8p| H*\ȰC>|a| 1Ç>0_o` 70_|`> 3`>+/_ka{Ç>$Ç&0Ç>|0_|/߿|70| ̗o`> 3`>#`0_| 1Ç>|H0Ç>La>|akakaka>>|Ç {|, sСC6̇0_>0C 1СC:$XA .dС|| =|0|>||50_| 50_|>|Ç>t/a=a>=\a>|a>kaca{Ç>|H0_|=$a>0_| =|Çw0_G0_| +/_+o`0_|&̗Ç>|| `> HA HP`| +XP`>$XA .da˗/|̗_w0| O`| 0_|.̗/_>:tСC )̗a|8`A8 | +`> 4xaB 6t߿|?#/ ̗| '0| G $H A O@$XA .dÇq`1_|8`A&TaC//_|/_| 7P` 7_o 8p| H˗/_„%L0a„ &L0| &$/!| &/a%L0a„ &L`˗`` #O`O`̗` &/_| ̗0a„ &L0a„%L`%L_̗0a„ &L0aBg0| W0|G0_| #_| ̗p`%L0a|%LX0_„ &L0a„ ̗0aB̗0a„%/a„ &L0a„? W_̗/_|+/_A #O`|,(0_,X` ̗? 4xaB 6ta>5| A"D ̇0_| 50_| 5| B"D `> O@ D(0_&L0a„ &Lh0_|%$/!| KH0_B̗` &:tСC9tСCsСC`> 4xaB 6t O@ O@ DPB ÇcÇ>|akaka#/Â>|Ç=|a|cÇ>|akaka#/_=|Ç {Cˇ0|>|| C`W0_>+/_ W0|+a+/_>|C>|a>cÇ>|a|̗`>+`|0|߿߿_|_>$80_,(0_'p "Lp!Æ*"D !g`> 4xaB 6t__> 7_> 7p / O` /|8p8_7p`|8`A&TaC"Ą%g`> 4xaB 6t߿| /_ /@8_˗o|o|'08_o /_>$XA .dÄ Ba| 1"D!&W0|O`>`0|'0|`c`| B"DA"|Ca>!B1a̗/_>`>w0_| W0|#`|#aC/|!B|!B`> B"ĄC`+`|0_| +/_|˗`ca|"D z| H*\`>6lذaÆ k/_| 50_| 50_| %̗/_6lذaÆ kذaÆ caÆ 6l_50_| 50_| 50|6lذaÆ &װaÆ 0_Æ 6lذ|!0_| 50| 50| kذaÆ 6l0_Æ 6lh`> O@ DPB +akakaS/C:tС|:tСC:t|!O@ DPB >8?˗? 4xaB 6t`>!B"D!B\"D!B"D="D!>"D 'p A H*\Ȱ|:tСC:9tСCsСC1СC:<ϡC:tСCP`>:ta|:ta>:tСC9)̗a|1̧0| oa|:tСCСC/|˗_:tСC? 8p| 8P`|O`'07p 8p`o 7p8p|8`A&TaC"DCO`| 70D!B0_| 0_| [_>˧0_| 1̗/|)̗/D!B|!B0| /|A"D 0| -̗a>kOa>[O`S/D!B|!B0| /|A"D A$/߿| )̗a>˗/|)'0| ̧0| H0D!B0D!"̗_>/߿|_>$XA .da>kOa|-̗/_| c/_>˗Oa|˗ϡ|:tСÆ:t|O`|9tСCsСC:tС|СC:lϡC:0C:t`>:tСC˗/C:tСÃ:tС| 9tСC+ϡC:tСÄ9tСC:DϡÁ H ,h B̗0a„ &L0aB K0a„ &L0a„ &$/_ &L0a„ &La ̗` &/| &L0a„ &4` &L0a„ &L0aK0a„ &L0a„ K0!| K0aB H ,h „ 2l0C:tСC s0C:ta0C 1СC:<ϡC:tСCs0C:ta0|cϡC:tx0C:tСC s0C:ta0|9\`|9tСCsСC:ta|:tСCK|8`A8| #/߿|'p "Lp!Æ9tСC:tСC:t| 9< |,hP /_A+(0,h „ 2l0_|:tСC[/_|8p_>$XA .dX0_| 0_|W0D!B0_|!B"D˧0_70|/D!BaQ`/_| G0D!B0_|!B"/|˗/߿| ̗o`| ̗O` ̗"D!B0ć0_| G0D!B0D!B`|/߿|/߿|/_|( (0,h 2l`ka| ̗/|>||>|Æ/_|O | ?O|7p| H*\ȰC>acÇ>|Ç>|0߿|'0|/_>G0_>˗_>%Ç>4 H ,h B̗0a„ &L0aB&L0a„ &L0a|˗/|˗O`|̗/_> ̗/_ ̗/a„ &L0a„ ̗0a„ &Lp`%L0a„ &L`&L0a„ &L0a‚%L0a„ &L0a„ "̗0a„ &Lp |$ <0… :W0C:tСC9tСC:t0C:ta>:t|9tСC:tСC:ta|:ta>:tСC9tСC:t|:tСÆ:t|+/_|:tСÃ:tСC:tpa>:ta|:tP`|!G0_sСCСC:tСC 9tСCsСC ̇0|СC:<ϡC:tC9C9C9BO@ DP„#O`>2dȐ!C cȐ!C 2d!C 2dȐ!C 2!C 2/_|G0C 2dȐa|1dȐ!C 2dȐ!C 2dȐ!C cȐ!C S`>cȐ!C 2L`> 2dȐ!C 2dȐ!C 2dȐa| 2dȐa|!G0_|1dȐ!C &W0C 2dȐ!C 2dȐ!C 2d0a> 2dȐa>2dȐ!C cȐ!C 2dȐ!C  <0 :4Ç&0Ç>|0Ç>|Ç{ÇÇcÇ>|Ç>|Ç=|Ç {Ç 1Ç>Ç>|Ç>|C>|aB$H? 4xaB 6t`>:tСC:tСC:,ϡC:tСC:<`>:tСC:tСC:,ϡC:tСC:<`>:tСC:tСC:,ϡC:O@8`A&TaC:tСC:tpa>:ta|:ta>:tСC9tСC:t|:tСÆ:tС| 9tСCsСC:tСÅ:tСC 9tСÁ%W0_|9tСCsСC:tСC:tСÅ:tС|C`|9tСCsСC:tСC:tСÅ:tС|!G0_>:tСCСC:tСCr!rȡ <0… ̇0|#!C 2d0a2dȐ!C 2dȐ!C 2dȐ!C 1dȐ!CC`>2dȐ!C +!C 2dȐ!C 2dȐ!C 2d0C 2d/߿|'0| 2dȐ!C 1dȐ!C 2dȐ!C 1dȐ!C 2!C 2/_|+!C 2d0a> 2dȐ!C 2dpa> 2dȐ!C1dȐ!C 1ǐ!C 2d0C 2dȐ!C 2d@8`A&TaC=|Ä{Ç{Ç>|Ç>||O@8`A ̗p` &L0a„ W0,h „ 2l!Ĉ'Rhb|kC$H? 4xaB 6t`>:tСC:tСC:,ϡÁsPa>:tСCСC:tСC:tСC!O@$Xp`>3hРA3h0,h „ 2l0C:tСC.СC:lOa>5̧0Æ ˗`>:t|:tСC:t0C:ta>0|9/a>СC:<ϡC:tСCsСC6̧0C 'p 'p A$`|O@ DPB sСC:tСC:tСÅsh0A$XР@$80_A˗/| H*\Ȱ|:tСC:tСC:t0| kOa|˗0|9tСC+ϡC:tСC:tСC Sϡ| )p``>:t|9tСC:tСC:ta|0C+/_|:tСà sСC:tСC:tСÂ:a>cϡC:tx0C:tСC.СC:lϡÁsPa>:tСC? 4xaB 6tbDM8qD&2O@8`A ̗p` &L0a„ ̗0a„ &L0a„ &L0aB&L0a„ &Lp` &L0a„%/a„ &L0a„'p "Lp!ÆB(q"Ŋ/>̇#F H ,h „ 2l0_|:tСC:tСC:tX0C:ta>:t|9tСC:tСC:ta|:ta>:tСCСC:tСC:tСC9tСÁ%W0_|9tСCsСC:tСÅ:tСC 9tСCˇ0| sСCСC:tСC 9tСCsСC ̇0| sСCСC:tСC-P>$XA .dС|>|0|˗`>|ap` ̇0߿|>|Ç>|a|>|0_#Ç>|a=>|Ç>|a|>|0_>`>|a#/| '0߿|O`> ̗`|_|˗/߿|0@ 7'p "Lp!ÆB(qb'>̗/_> W0ĉ'NT`O` '0_>'0߿|o`>_> /߿|_˗_>&N8qĉ'Noĉcoĉ'*W0_| /_|˗/߿|O|߿|/߿| /߿|O8`A&TaC!F8q`>)R$a>)RX0| /_|/߿|70| /| ̗O`/|'0_>H"|)RHqa>)R$a>)RX0|/_|'P࿁80߿ ߿/߿'|70߿ <0… 1dȐ!C 2!C 2d0 'p "Lp!Æ9tСC:t|:tСÆ:tСC:tСÃ:tСC:tСC:tpa>:tСC:t`:tСC:tСC:t`>:tСC:t`:tСC:tСC:t |,h „ 2l!Ĉ'>O| H*\ȰÇ#JHŋ aĈ#F1.̇#F1b\#FÈ#F1b\!|, <0… :|a#F1a#F0 'p "Lp!Æ90_A$X? 4xaB 6tPa>!Ba>!BH0|!Bb|5q`>!B"D!B|!B`> B"Ą3/_|"D!B"D! "D Ka>!B1a+/߿|A"D!B"D!B(0D!"̗_>"D+`|`>A"D!B"D"DC |,h „ 2l߿'p 'p "Lp!ÆB(q"Ŋ Yh`>30 <0… :|__>$X`>$XA .dC B"ć Ba>c"D!BLa| ̗_> "D!B(0D!B0D!"̗_>"Dk/| 80D!B|!B|!B0_"Dsa>A"D!B"D"D1"D!&W0| A"D!B"D!B(0D!B$a>!B1ak|!B"D!B"D <0… caÆ 6l_k| 6lذaÆ 6lذaÆ "װaA$X? 4x@$H? 4xaB 6t!|,  <0… :|0D!B0ć`> B"Ąk|!B"DA"DA|a> c"D!BLa `/_|'P_>$XA .$!C 2dȐ| _>  0C 2dȐa| 3/_| cX0|70_>/_|cȐ!C 2dȐ!C ˗0Äǐ!| 1ǐ!C 2d0̗_>̇0_|/|O` ̗`> /_>1dȐ!C 2dȐ!C Ka| S!|c!C 2d0a˗/|`/߿|/˗/߿˗|'?7p ,h „ 2l!ĈKo| )̗/| O@ DPB >d/߿/,H00@'߿(0_> ̗_| H*\ȰÇ#J\/aO@ O@$?$XA .dC_ g_/߿|_|#/_|/_ <0… :|1ą(0A$XР@$80_A ? 4xaB 6ta|`>̗/_>o`| ̗`>70_>/_>9tС|:tСÆsx0_| _sСC0| sX0C9tСC sСC6̗0ÃSa| 9tСCsa>9\/C:t`>:ta|0C 1СC:kϡCs!rȡ@o8pO@ DPB >QD泘`> O@ D(0_&L0a„ &Lh0_|8`A$X`>$XA .dC%NXqa>-JO@8`A&TaC Ca>9tСC:tСC:$ϡC:0C:t`ka|:tСC sСC6СCcϡC:tx0|+a|:tСC sСC6СC˗0|:tСÃW0_sX0C:tСC:tСC 9tСCˇ0|:tСÃ˗`>sX0C:tСC:tСC:tС|'P@ 0 <0… :|߿|߿| H | H*\ȰÇ#JH|-ZLa> H*\ȰÇ _  <0… :|1ĉ+.gѢŃ%0E-FW0|̗_>&hѢE-Zhb>-̗Oa>,Zh1bg0_&hѢE-Zhb>-̗/_>hѢňkob>-ZH1E-ZϢE1gѢE90|-Zhb>-Z/E%cϢE#sa,Zh"|-Zh_>-J0E-F0_|YhѢE-Zh1E%'p A H*\Ȱ|!O@(`> O@ DPB >QDhѢE-ZX0_|-ZhѢE-ZX1E-ZhѢł hѢE-ZhѢE H*\ȰÇ#J?'p "Lp!ÆB(Q`'N1ĉ'N8qĉ M8qĉ'NDoĉ'B7qĉ'N8qb|'N8qĉ8qĉM8qĉ'N0ĉ'N8qĉ'N8` 8`A$XA .dC (QD%J(QD%JOb| I(QD%6W0D%J(QD%J(a> 5'QD%J0_|%J(QD%J(Qć˗/|'QD%J0_|%J(QD%J(Qć80_|'QD%J0D%J(QĈ$J(Qā80|'QD%J0D%J(QĈ$J(Qā˗/|+OD%J(a>%J(QD"(,h „ 2l`w0_|>|ÇÇ>|Ç>|C{h0|Ç>||)̗/_[a| =|Ç>|!| =4`| {Ç>|`{a`>>|Ç>|`kÇ>|à S`|'0_|'p '߿'߿_'?#8'p "Lp!ÆB0Ć(QD%Jl`>O`|_> '0_>O`>O`|/|o`| /|_>'0D(QD0_|%J(QD A70|O`| '`> _߿@ /_˗/| O| H*o… .\p.L0 'p "Lp!ÆBH0| ̗`>/|#O`>O`>/| 70_o`>'0|(Q|%J(Q|%J(QD%J,b>G0|(߿|7|_7_߿|o`߿|_ ? 4xaB 6tbD$J(QD%JX0D%J(QD%J(Q|%J(QD%J,`>%J(QD%J(QC$XA .dC%N|@8`A&TaC!F8bEÈ#F1b\`>1bĈ#F1V̇#F1bĸ0F1bĈqa>1b|#F 8 A$XA .da>:tСC:\ϡC:t0C:ta>:t|'p "Lp!A$XA .dp`>:ta|:ta>:tСC9aka>:tСC:tPa>:t80_sСCW0_| 50_| 9tСC:tСC 9tСCˇ0|:tСà ;/_>W0|g0_> o`G0C:tСC:t0C:O`>sСCW0|a>+`|70|СCr!r!rH!'p "Lp|!g`> 4xaB 6tp8P`>#/#|70 <0… СC:lϡC '0|8`A&TaCG? O` _ /߿|(0_| <0… СC:lϡC ̗_>sСC0_|!G0|̗/_ /_ ;ϡC:TϡC:t0C:/_| 9tСCk_>#O`'0|/|СC:tСC*СCcϡC:tx0˗/_| W0| W0߿| W0_|sСC:tСCsp |, )RH"E 棸0_|%'p A H*\Ȱ|%0_| 50C:tСC:t0_|9,a>cϡC:tx0 H*\H? 4xaB 6ϡC:t0|`:Ta>:t|ka>kϡC:TϡC:t0|9$a>9da>:t|ka>kϡC:TϡC:t0_|9,a>0_| 9tСCk_>W0|W0_|'0|˗`>:tСC:tPa9$ |,hP /_A ? 4xaB 6t`#a>#`>+O`>/|:tСC:tС|!|8`A8 | +`> 4xaB 6tp8P`>˗`> 70#o`>O@ DPB >QD˗ob1_|8`A&TaCG? /߿|7P`| 7P`>70 <0… :|1ĉQ\a>%0E)R,`#a>˗` +O`>#`>)Rt"E).Gqa("̗0|)RH`#a>` +O`>'0_>(RHa>)R0Ņ(1|)RH`˗/_|/|W0|̗/_(RHa>)R0Ņ(1|)RH`kaH"E)RHAO@ 0 'p "/| &L0a„ &4/| KH0_̗`>$XA .dC%N"E c"E)W0_| 50_| QH"E)Rh0E)O@8`A&TaC Kaka>:tСC:tPa>:t0|:tСà K0 <0…8`A&TaC!F8b>)R$a>)RX0| 50_| QH|)RHqa>)6̗/a>(RHb|50| 5G"EQH"Ņ(R0_c"E)0_|g0|+`+o`H"E(RH|)RdO`>H"E5̗/_+`>G0|70| QH"E)Rh0EC |,h „ 2laCo`>#/߿|#/_ G 8`A&TaC!F8b>)6̗/a> H*\ȰÇ  G0|/|/_$/,h „ 2l!Ĉ'BG"E)0E)R,`/a#`|`|a>)RH"E H"|Ca>)RX0_| ̗O`| ̗O`|̗/߿|̗/߿|5G"EQH"Ņ(RH`>(RHb|̗/_˗/_|/|/| QH|)RHqa>)R$a>)RX0| 50_| QH|)RHq!@8`A&T| 5lذaÆ P`ca6lذaÆ 6lذaÆ 5lذaÆ8 A$XA .da>50| 5СC:tСC*СC:tСCW0_B$XA .$ <0… :|1ĉQH"E)R80_|)RH"E)RHb|)RH"E)W0E)RH"E)RX0E)O@8`A&TaC:tСC:tpa>:ta|:ta>:tСC9tСC:t|:tСÆ:tС| 9tСCsx0_> ka>:tС|:tСÆ:t|+/_>:tСC94/߿| -̗_[/C:tСC:tP`>:t(0_#/|:tСà sO`-'0|-̗ϡC:tСC:t(0CrH ?#/A8`A&TaC sO`>c/|9tСC:tСCsСC ̇0|#ϡC:tx0_| 0|KO`>:tСC:tС|:tP`>;`>:t|9̗_>0| ˗ϡC:t(0C:ta>:t(0_#O`>:tСC9QD-^L| ata>1bL`>1bĈ#F1V̇`0:O@8`A&TaC sСC:tСC:tСÂ/_>5С| 9tСCsСC:tСÅ:tСC %̗_|kϡCsСCСC:tСC 9tСCK/߿|0|2W0_|9tСCsСC:tСÅ:tСC %̗_|kOa|9̗0| sСCСC:tСC:tСC %O@$XP`> HA HP`| #/_8`A&TaC sСC:tСC:tСÂ'P ,(0A$X`>$H0_A˗/| H*\Ȱ|9tСC:tСC:ta| /ÁS/C;`>:t|9tСC:tСC:ta|0C#O`>:tСCСC:tСC9tСCsp`:̗0_| sСCСC:tСC 9tСCsp`:Ta>:t|:tСC:t0C:ta>kϡCsСC9t@8`A&TaC!F8bEx`> O@ D(0_&L0a„ &Lh0,h „ 2l!Ĉ'Rh|1bd0 'p "Lp!ÆСC:tСC:tСC9tСCsСCW0C:tСC:tСCСCcϡC:tx0_|:tСC:tСC:tX0C:/_|G0C:t`>:tСC:\ϡC:t0C:/߿|̗`>:t|:tСC:t0C:ta>:t(0|̗`>:t|:tСC:BO@ DPB Ç!G0_|{Ç{Ç>|Ç>||>|0_#Ç>|Ç>|Ç>|Ç=|!|#O`>>|Ç {Ç>|Ç>|a>d/_|̗`>|a>|Ç>|Ç>|Ç&0Ç>|0_|>|Ç>DÇ>|h0Ç>La>|a>|衇z衇(,h „ 2l`>|0|>||>|Ç>tÇ>|h0Ç>La>|a>|Ç>|ÇÇ'p A H*\Ȱ|:tСC:tСC:t0C:tСC:tx0_|:tСC:tСC:tX0C:tСC:tx0_|:tСC:tСC:tX0C:t0 'p "Lp!ÆСC:tСC:tСC9tСCsСCСC:tСC 9tСCsСC1СC:<ϡC:tСCsСC6СC˗0_|СC:<ϡC:tСCsСC6СC/|3ϡC:tx0C:tСC:tСC.СCa>СC:<ϡC:tСC:C9C ? 4xaB a>G0C 2dȐa|1dȐ!C 2dȐ!C 2dȐ!C cȐ!C ̇0|1dȐ!C &W0C 2dȐ!C 2dȐ!C 2d0a> 2d0_#O`>2dȐ!C +!C 2dȐ!C 2,!C 2dȐ| 2dȐ|+/_| 2dȐ!C 1dȐ!C 2dȐ!C 1dȐ!C 2!C 2da> 2dȐ!Ä2dȐ!C 2dȐ!(,h „ 2l`>|0|>||>|Ç>|Ç>4Ç&0Ç>|0Ç>|Ç>|Ç {|, :tСC:tСC:,/a|9$a>cϡC:tx0C:tСC.СC:l/a>0C ̗/|:tСÃ:tСC:tpa>:ta|p`P`g0C:t`>:tСC:\ϡC:t0|kOa|5̗/a>˗o| H*\Ȱ|:tСC:tСC:t0|30 +H0|#? 4xaB 6tϡC:tСC:tСCC/|g`> 4? W` <0… :W0C:tСC:tСC̗0_|0| ̗0|СC:<`>:tСC:tСC:,ϡÁs0_|+ϡC:tx0_|:tСC:tX0C:ta>kϡCsСCСC:tСC 9tСCsp`:Ta>:t|:tСC:t0C:ta>kϡCsСC? 4xaB 6tbD)Vxa>8`A$XA8 A$XA .da>:tСC:tСC:\ϡC:0C:t`:tСC:tСC:t`>:t0|:tСà sСC:tСC:tСÂ:t|;`>:t|9tСC:tСC:ta|:tP`|!g0_>:tСC9tСC:t|:tСÆ:tС|!g0_>:tСC9tСC:tB'p "Lp!Æ {Ç+_>>|Ç>|Ç>|0Ç>|`>l/_| G0Ç>|0Ç>|Ç>|Ç {C)G0_|{Ç{Ç>|Ç>||>|0_|;`>|a>|Ç>|Ç>|Ç&0Ç>|0_|>|Ç>|Ç>ÇcÇ>|`>C=C!P>$XA .dС|>|0a>>|Ç>|Ç>|0Ç>|`>|0|>||>|Ç>tÇ>|h0Ç>L0 'p "Lp!Æ9tСC:tСC:t|:tСC:t|:tСC:tСC:t`> 4xaB 6tbD'P`>$XA .dC%NXńaĈ#F1&̗`>1bĈ#F1V̗/_>1bĈ#ƂW0F1bĈ#F+/_>1bĈ#Ɓ#F1bĸ0F1>70_|1b40 'p "Lp!Æ70C:tСC.СC:l`|:t| 9tСCG0C:tСC.СC:l`|:ta| 9tСC g0C:tСC:tСC.w0_|:tx0_sСC˗`>:tСC:tСC:\/a|:t`|!0C:t0_| СC:tСC:tСC)̗/C'0| O@ DPB ˗OasСC:tСC:t| СC ̇0|:tС|1W0|9tСC:t0a>:ta| СCC |,h „ 2lB$XA .dC(QD{/_>%/|8`A&TaC'p "Lp!ÆB0D%J80|I(1_(QD僘a|$J(QD%'QD%'1_|%JLa>%Jd/_>(QD%J(QD%'_|$J0|%J0_|+OD%J(QD%J0ā;0 'p "/| &L0a„ ˗0|'p "Lp!ÆB(q"Ŋ/&g1_|5̇a>0bĈ0_|̇#F1bĈ#Ɗ0˗`0:O@8`A&Ta|2ǐ!C 2dȐ!C .ǐ!C 2dp`> 0_|1!C1ǐ!C ̗/C1dȐ!C 2dȐ!C 1dȐ!C 2/a1/_˧0C1ǐ!C ̗/C1dȐ!C 2dȐ!C 1dȐ!C 2/a|̗/_>)̗!CcȐ!C ˗!C2dȐ!C 2dȐ!C 2dȐ!C S/C+0  +H0_'p "Lp|1dh02dȐ!C 2dȐ!C 2dȐ!C)̗|O@ O@+H0_'p "Lpa|1dx0_|ǐ!C 2dȐ!C 2dȐ!C .̗0߿|/_| )̗/_>%g`> 4xaB 6tp!,h „ 2l!Ĉ'Rhb> '1|!̧0_| O@ DPB >d <0… :|1|%J(Q|#/_>$*̗0|%Jd/_>5O@$XA .dC(QD0_|'Qa(Q|I/_|$J(QD% 'QD%'aOD(Qb|I80D%J(QĈ$J(Qā$6̇0_|I(0|%JD/_> (QD%J(QD%JObC$X? 4x| K0a„ ˗/a„ +? 4xaB 6tbD)Vx1a>ˇ!|$ <0B[p|'p "Lp!ÆB(q"Ŋ/&̇b|020F ˇb0bĈ#F1bX1Fø0|1"̗/F0bĈ#F aĈ|1˗b| 1̇|aĘ#F1bĸ0F1>̇|Q̗_>È`|0b#F1bĸ0F1>̇|I'0| a80_|10_|1bĈ#F1b\#F壘a>0b/_> k0@ H*\ȰÇ#JHE.^D/_>%g`> 4xaB 6t!,h „ 2l!Ĉ'Rhqb˗a| O@ DPB >\ <0… :|1ĉ+ZŅc/_|1wb|.^\`xŋ/ wŋ]0_|1wb|.^dŋ/^(1ŋ/Nw|U0ʼnxa/^x|/^81ŋG1|%˗Ň.^xŋ]x|/F̗/| ]/_#xŋ/^xŇ.^/_ H ,h BK0a„ W0,h „ 2l!Ĉ'Rhb|1J̗/Fˇ|aĈ#F1bĈb>'˗#ƇÈqb0bĈ#F1bX1F|aX1F1bĈqa>1b|#F[0 'p ̗/B"D| H*\ȰÇ#JDoĉ'B7qćKa 7qć&N8qĉ'"7qĉ!8q"|!0D8q"|'N8qĉ'N8qD&N`>80@ ? 4h0_|0 ̗/F +#F1bĈ#FaĈ1|70|̇1_|1b4`>1bĈ#F1V̇#| ̗/| G0|aĈ`0bĈ#FaĈ|1b'0_|#O`>*˗#F aĈ#FÈ#Ƈ0bĘ/߿|G0_棘/_>1*̇#F1b\#FÈ|˗o`|IO ,h „ 24aÆ 6lذaÆ *װaÆ 6lx0_Æ 6lh0_|kH0_| 6lذ| 6lذaÆ 6lذaÆ 6lذa| 6lذ|w0_CkذaÆ +aÆ 6lذaÆ 6lذaÆ 2װaÆ 70_|5/_ 6lPa6lذaÆ 6lذaÆ 6lذ!| O@8`A O@8|'p "Lp!C kذaÆ 6lذaÆ 6lذaÆ 5lX0_| 2g0_|-̗/_Æ 6l0_Æ 6lذaÆ 6TaÆ 6l` kaC˗_kذaÆ  װaÆ 6lذaÆ kذaÆ 6<a|5,a +/|C/_ 6lذ| 6lذaÆ 6lPa 6lذaÃ/_ÂS!| ̗_+/_ 6lذa| 6lذaÆ 6PC 5PC 5PC P>/_>  A$(0_| /A'0| ̗/,h „ 2lh0C:tСC:tСC.̗0_| 30 +H0|`>8`A&TaC sСC:tСC:tСÂsh0A$XР@$80_A`>O@ DPB +ϡC:tСC:tСC Sϡ| )̗/#/߿|˗_|:tСC sСC:tСÂ:tСC )`s80_|+/_sСCsСC:tСÅ:tСC 9t80_|*̧0_|СC.СC:tСC 9tСCsp`:T/a|!̗/C:t0C:tСC.СC:l| H!,!B ;/_> ̗/B"D!B O@ DPB >QD-^|A$X? 4x|70_BK0a„ &L_8`A&TaC!F8bEÈ#C$H? ̗/,h „ 2\` 6lذaÆ 6lذaÆ 6l0_Æ 6lh0|_|6lذaC kذaÆ 6lذaÆ 6lذaÆ 5lذaÆ˗/| ˗aÆ 6DaÆ 6lذaÆ *װaÆ 6lx0_Æ 6D/_|/_| ˗aÆ 6ǐ!C *ǐ!C 2dȐ!C 2dȐ!C 2d80C 2d80|G0|1T/_> 2da> 2dȐ!C 2dȐ!C 2dȐ!Á2dȐ!̗/| G0ÅcȐ!C +!C 2dȐ!C 2dȐ!C 2d0C 2d/|G0_c_|2dȐ! cȐ!C 2dȐ!C 2dȐ!C &ǐ!C 'p`> 7P`|O@ ̗/&2̗/ĉ8q'N0ĉ'Noĉ ˷`> O@ $/_>"D!B8`A&TaC!F8bEÈb|0bl/_>)+#F1bĈ#Fa81_|1>̗/Ḟ#F1bĈ#Ɗ0b/_>'˗#ƈ È#F1bĈc|1B̗/_D$H? 4x|%L0a„ K0a„ &L0a„ &L0!| &L0a„ &L80_„ &L0_| ˗p` &$/_ &La &L0a„ &L0a„ "̗0a„ &L0a„%L0a„˗0| K0a‚K0a„ K0a„ &L0a„ &L0!| &L0a„ &L80_„ &LX0_| ˗0_| K0aƒK0a„ O@ DPB >QD-^|#F[/߿|̗_>0R̗/F aĈ#F1bĈ|1"̗/_|!G0|a/_>+#F1bĈ#Fax0_| ̇0|̇b|0b<`>1bĈ#F1V̇c|A'0| G0Fˇc|aĈ#F È#Ƈ0b$/_ˇ0|##FÈ`>1bĈ|1b0FG1_ ̗?'p "Lx0_| *T0B *TPB *TP„*TPB *T/B &̗/B S(0B */_> *LOB *TPB *TPa| *TPB *OB ˗OB)OB ̗/B  <0… :|1ĉ+Z0Fø0|1"̗/F È#F1bĈc|'p 8`A˗p` &L`|&La8`A&TaC!F8bEx0|at0 'p "L`|.\0_| H*\ȰÇ#JHŋ a 4h`>$XA .dC%"7qĉ![/|G0|%G0_8q|Moĉ'N8q"|'N8b>MW0_|)̗/|#O`>&N0_|%8qĉ'N8qĉ'̧0_'p  'p G0|'p "Lp|1d0C 2dȐ!C 2dȐ!C 2dȐ| c0|O@ O@$`>O@ DPBcPa2dȐ!C 2dȐ!C 2dȐ!C !̗a|SOa|̗0|#!C *̗/Cǐ!C 2dȐ!C 2dȐ!C 2L!|'p g`>4X0 W0A 4hРA ˗ϠA W0,h „ 2l!Ĉ8qĉMT/_&N0ĉ!˗o|'N8qĉ8qĉML/_| Ma'F̗/Ą&N8qĉ'"7qĉ!x0_|57qb>&N81_|8qĉ'N0ĉ'No| O@8`A ̗p` &L0a‚K`>$XA .dC%NXŇ.˗#F H ,h „ 2/_ װaÆ 6lذaÆ 6lذaÆ k0_| 6lx0| 6l|5L` 6lذaÆ 6lذaÆ 6l0_ÃkذaÄkذaÆ ˗|5lذaÆ 6lذaÆ 6lذaC̗/_Æ ˗0_| kذaÆ ˗| 6lذaÆ 6lPa 6lذaÃ̗/_Æ /|` 6l`|װaÆ 6lذaÆ kذaC 5PC? /_> 4hР3(0| <0… ˗| 6lذaÆ 6lPa 6lذaÃ˗/_Æ ̇0|װaÆ *̗/_6lذaÆ 6lذaÆ 6lذaÂ˗aÆ ˗0|װaÆ .̗/_| 6lذaÆ 6lذaÆ 6lذa| װaÆS`|װaÆ 6̗/|5lذaÆ 6lذaÆ 6lذaC˗aÆ ˗/|+aÆ 6l/_| װaÆ 6lPC 5PC 5PC 5CO@O@ DPƒcȐ!C *̗/|1dȐ!C 2dȐ!C 2dȐ!C ;/_> 2dP`>2dȐ!C w0C 2dȐ!C 2d0C 2dȐ!Á ˗!C 2$a> 2dȐ!+!C 2dȐ!C 2\!C 2dȐ|ǐ!C O@8`A&TaÃ#ϡC:tСCsСC6'0_|:tСC:tpa|sСC:tСC:tСÅ˗ϡC:tСC6̗/߿|9tСC:tСC:ta|9tСC:tСCW0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_|G0_>O@ DPB O@ DPB >Qć H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf@;;PKHiPK+AOEBPS/img/alldesc.gif*hGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CII H8`A&TaC!F8bE HO@ DPB >QD->̗/łxŋ/^xqbxŋ/^x|]/_|/|,ZhѢE-Z80| W0߿| ̗_>hѢE-ZhѢO`__YhѢE-Zhq`>˗_ 0@ ߿| /,h „ 2l!Ĉ'Rh1a|/|8_ /'p ", <0… :|1ĉ ˗``0@'p|O@ DPB >QD-70| /_|˗O`|`|!xŋ/^/| ̗_>/|_xŋ/^x|3_>/_/_|wQb/^xE ;0o`/߿70߿߿| H*\ȰÇ#J8`> 4x `| ,H0_+X` /,h „ 2l!Ĉ'W0E̗"E)RH"E(.0|&˗/|(R"E)RH"|Qx0_|)RH"E)"GqaGa|)G"E)RHb>(R<`>)RH"E棸0|Gqa|)G"E)RHb>(R<`>)RH"E;0@ @ o 80_| H;xO@ DPB >QD H`(RH"E)RD`o`>[0 <8? 4xa*TPB *TPB *Th0A$XA 'P`>$XA .dC%N`> o`|-G1b>H"E)R1EQH"E)Rh0߿|W0߿|70|)R0E)RH"EHb>)RH"Ew0_|+|'p` ? 4xaB *װaÆ 6lذaÆ g0_Æ "װaÆ 6lذaÆ 6,08_>/|'p H*\P!|, <0… :|1C$X? 4xaB8`A$XA .dC%6̗`|70_3`>&N8a>M8qĉ'6w0|'Na|'N8qĉC_ ˗/|+o`&N8a>&N8qĉ;`'1ĉ'N8qĄ0| ˗o?$XA8| ? 4xaB 6tbĄ 30 < `'p "Lp!ÆB(a&2̷0B 'P ,hA O@$H_>$XA .dC惘`> c/b>%J(QD-'a˗`|˗ODK/b>%J(QD"3OD拘OD%J(Q"| IloaC/_(1a|拘OD%J(b (`>"(QD%J1|[`| K/Ĉw0_|%J(QDEg0|G0_|`>"(QD%J1|c`| ;/,h „3O| *TPB *TPBg0| '0|`>)̗/@ 7? /? 4xaB 6tbă$+` G0| w0|"(QD%J1D#ag0߿|/_/_ /߿|'0|I'QD%J1;o`̗_>[Ob>%J(QDI(`70߿|/|_'0߿|#/|$'QD%J1 w0|;/߿|̗0_>I(QD%J0,h „ ˗/ 8?˗_>˗/| /_|˗|| H| H*\ȰÇ#'q`|70_|0@'p?$  <0… :|1ă&NX0|W0| /|3o`/|H0ĉ'N8q"| ;`70߿|` M8qĉ'N$2'QD%J(b>%"0| 'a>I(QD%B'`> 0D%J(QD$J0_>̗O|'p ,80_>  <0… :|1| (`> I(QD%JODc/|$Jl/D$J(QD!h0DIdOD%J(Q"|%JL/|'Q|$'QD%J1D$J$O"|%J("|,h „ 'p A8`A&T0_>-̗/… ˗oBO@ DP!AO@ DPB H_ $` ,X0_ ,? 4xaB 6t/ÇcÇ ˗`| ˗Äa>>|0|>|0|{Pa=|Ç{a| =|A O@ Dx? 4x_>!D!B3!B"D`>!D`> 4xA$XA"D!B"D|"D!B <0… :|1b| I(q`>$J1|%J(`>%J1A ߿(߿ /_/ 8p`>$XA .dCca|W0_|G0_> oO|˗/_  @70߿߿/? 4xaB 6,ϡC:t0| 70_|'0_a:tСC:t0|`>o`G0|'0_> /߿| 70| 70| 70| 9tСC 9tСC;`#`>W0| w0C:tСC;o`>` G0| G0| w0|70_>/߿| 70| |/@'p "Lp!Æ!СC*/|#``>#`>:tСC2w0|O`>+/|``+/_>O`O`o`>sСC ̇0C:t0_ 8? 'P o@ /_| H*\ȰÇ#>̗/_|̗_>`|o`> ߿| / '`>(?'P ߿@'P'P`|'p "Lp!Æ g0C:d0'p|o`>#H0_> G |,h „ 2l!Ĉ''p? ߿/7_> _8P 70| ˗`>_> G_>0 <0… :|(? 4xaB 6_ o`/| ̗/|СC:tСC g0_#`70߿|``> G0_O``'0|СC:t(0C:t0A߿| ˗/@ o`> 7_>$XA .dC%&'0|˗/_'0_|˗/| G`>߿˗o |߿߿?#/_| ̗O`8`A&TaC =|Ç=|a>|Ç>DÇ Ç =|Ç>|Ç=|a>|Ç>DÇ Ç =|Ç>|Ç=|a>|Ç>DÇ Ç =|Ç>|Ç=|a>|Ç>DÇ Ç =|Ç>|Ç=|a>|Ç>DÇ Ç =|Çz衇z衂'p "L ,h „ 2l!Ĉ#'p "L 'p "LpA$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȐ8`A'p |,h`A$`> 4xP ,h „ 2l!Ĉ'Rh"ƌ7rqb1|˘/_|?~Ǐ?~Lj>g0| 1_|?~Ǐ?NO| H?$XA . <0B.\/| &̇0_  <0… :|1ĉ+Z1|/_| ˗Oƅ˧Q| 70?/߿'P` /70|8_|O@ /,h „ 2l!Ĉ'Rh"F;/_>˘Qb|2fD`|/߿|70_|̗O`|O`>0|2f̘1cƌ3f̘b| K/_ƌ˘`>˗/߿|` 3`|/_3`|˗/߿|˗/|/_>̗/cƌ3f̘1cƌ-˷0_>!'1_FeH0߿|/߿| G0|/|'`|O G0߿| /_/|˗/_>G0_>$XA .dC%NXEk`| e̗a|3̗`O`>'P (0_/߿|o`|7P`|/|˗O`|'0߿| <0… :|1ĉ+Zb|̗`|˗_|˗O`|`> 7? /_>/_ ̗/|8`A&08_|˗O`>?˗_> _8`>'p| /?'P | <0… :|1ĉ+Za| O`>˗/_> ̗/_/_|_|/|_| /߿|/_F`|'0| W0|/_70߿|G0߿| O`'0_|'0߿|K/cƌ3f̘1cƌ{`| /_>`> /߿|w0|O`'0|2Nw0| /߿߿? '0˗_˗/|O`|O`˗O`|˗/|7p8`A&TaC!F8bE1̗/_ (? O_/߿|/߿| /|˗_>0@ 8p'p ,ϠA g0A `| 4Ϡ| O@ DPB >QD-^X0_>5̗` '0_|/_/_>/߿|;O`|'0߿|O`|壘oa ̗`M̗/_>1̗1cƌ3f̘1cƌ̗`> '0|/_>/_'P_>O |_? HA$`|QD-^80_|g0_e/c˘0| C/_0_ƌ3f̘1cƌ3g0|˗`  / ;xp` H8`> 4x 0 4  <0… :|1ĉ+Zq`3/_>˘1b|2 1_ƌ3f/cƌ3f̘1cƌK08 A O@ DPaA O@ !8`A&TaC!*1bĈ#F1bĈ#Fa  O@ DPB$X" <0… :|qa#F1bĈ#F1bĈ1bĈ#Fd/a>"F1bĈ;/bĈ#F1bĈ#Fa>"F1bĈ )70_#F1bD1bĈ#F1bĈ#F0 O@ DPB >\0 <0… :|1D H*\ȰÇ#JHŋ̇#FS#F1b#F1bĈ#Ḟ#FK#F1b#F1bĈ#F kb>1"̗a>1bĈ#F1bĈ#F1.̗`>'p H*\? O@ 80,h „ 2l!Ĉ'Rh"ƌ7rQ`>+/_>_|˗`|Ǐ?~Ǐ? w0_>K/_ ˗/a|w0Ǐ?~Ǐ?~Q`>)̗/a|?̗/a| 3Ǐ?~Ǐ?~(0|̗`|Mqa|+`>>~Ǐ?~Ǐ̗`>̗0| ;/_|+Ǐ?~Ǐ?~80| ;?'P|/_>/_>O'߿7߿7߿߿| o| <0… :|1ĉ+Z1ƍ;z,o`| /_˗/_> ̗/_˗_|/_|/|_| /߿|/|5̗o`?~Ǐ?~|s0(0| ̗/|/|_ 70__| O H`|'p "Lp!ÆB(q"Ŋ/b̨q#ǎs`| 0 O|_|7P`>˗/߿|`>@ 8p| H*\ȰÇ#JHŋ3jȱG5G0߿| '0_|/_'0_|˗/߿|+O`|'0߿|O`|0_?~Ǐ?~|O`|˗_|˗O`|0@7߿| O |_?_>$80_>$XA .dC%NXE5nѣ|w0|;/|>~Ǐ?~Ǐ[/|:0_1Ǐ?~Ǐ?~/||˧0_?~Ǐ?~c|˗/a|>~,/|!̗Ǐ?~Ǐ?~81_|0_|?˗/|̗/Ǐ?~Ǐ?~"| O@8`A&T0,08`A&TaC{!F8bE1fԸcG}(1| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJ;;PKɟ**PK+AOEBPS/img/select.gifGIF87aX`?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X` H*\ȰÇ#JHŋ3jȱǏ CIɁ H 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/_ 2dȐ!C 2dȐ!C/_H 2dȐ!C 2dȐ!Cj̗/|!C 2dȐ!C 2dȐ!̗/|!C 2dȐ!C 2dȐ%̗/|!C 2dȐ!C 2dȐO@ /_|'0_|/_>'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?`|˗_|O`'0߿| W0_Ȑ!C 2dȐ!C 2d| ̗o`>#/߿|˗/|8`AO@ DPB >QD-^ĘQF=~d/_| ̗o`>/_| `>(0,h BO@ DPB >QD-^ĘQF=~D` ̗/| /| /_|2a> A $H A |O@ /|(_o O@ Dx0,h „ 2l!Ĉ'Rh"ƌ7r`> 4H? W_ ,X`,X`  <0… :|1ĉ+Z1ƍ;nw1|9O@$X |ѣG=zѣG=zdb>a>yѣG=zѣGC/@O|o'p "/_„ &? 4xaB 6tbD)VxcF9vܘa|!0B$XA8`A&$? 4xaB 6tbD)VxcF9vܘa|Ca>=&ѣG=zѣG=zT_70|ѣDŽ 'p? / O@8`A&TaC H`>$XA .dC%NXE5nQ`|3/|!W0|=zLa|=zѣG=z|g0|!G0|=zLb>=zѣG=za.ca> HO@,X_| H*\ȰÇ#JHŋ3jQc.cOa|˗b|:R̗/_>"رcǎ;vرcǎ5[b>w0_>uܘ/a:vرcǎ;vرcG滘aSc拘cǎ;vرcǎ;vԘoa;oa> H0_|!w0_|;vرcǎ;vر| ]0| !g0_|̗0|uرcǎ;vرcǎ-O@ O@+|+(0_A/_> @˗/|/_'0߿| o|8p| H*\ȰÇ#JHŋ3jQc0|̗_|˗O`| /߿|/߿|˗/_˗/|'1_ǎ;vرcǎ;v1_NJ 0|'0_`/|70߿| W0|&رcǎ;vرcǎ5x1_|8P '0_'P /߿|O` ߿|O|8pO@ DPB >QD-^ĘQFu̘a>;O`|˗o`|o`70_|˗/|]ױcǎ;vرcǎ;j1cO`/_>a /߿_(08p`>$XA .dC%NXE5n1_G;cǂ0رcǎ;vرcǎ51_|0 H!D0,h „ 2l!Ĉ'Rh"ƌ7rԘ| !ױ|uرcǎ;vرcǎuܘoa>:vOc;vرcǎ;vd0 <0‚ HP` ,X` W`+X` ,X| ,X| O@ Dp 0 < ,h „ 2l!Ĉ'R1E1gѢ| 0_|-"̗Ϣ| Y(0|,NgѢE-ZhѢE,Zta>!'P ,H`> 4xaƒ H!$!Ḃ_>"DH0,h „ 2l!Ĉ'R0E1gѢE-Zda>CϢE,ZhѢE-Z(0A ߿ @/_|  <0… :|1| !̗/@ ߿ o_> A$H|$80,h „ 2l!Ĉ'R0| '0_|'0_`,ZhѢE-w0|+``[` gѢE-Zh|g0߿|G0|+_3ϢE-Z1|70߿|G0|70|/_|˗/|˗/_|O@ 70,h „ 2l!Ĉ'RX0߿|̗o`>˗O`;`>,ZhѢE/| W0|!w0|'0_|˗/|˗_>'0_|gѢE-ZhbA$8?'P7p 0@ _'p "Lp!ÆB(q"A/_|(_8?#8`>'p`|_|7P`˗/|'p@$XA .dC%NXq`|/|̷0_;`>-ZhѢń-/_|G0|̗ | Gp 80߿|(? ? 4xaB 6tbD)V_ O`3/| ̗/߿|gѢE-Z0߿|_+o`#_>'0߿| ̗/߿|3_|3`>-ZhѢE |_#˗o |߿/,h „ 2l!Ĉ`| O(|?O`>/_|˗/| GP`˗_>  <0… :|1ĉ+gѢ|-ZhѢEY(0|-̗ϢE-ZhѢE,ZtϢE-Zhb>;ϢAO@'p "Lp!ÆB(q"Ŋ Y0E-Zh"|- ̇0EYhѢE-ZhQ`>hѢE-ZϢEh1E-ZhѢEha>-Zh"|hQ`>YϢE-ZhѢE8`A&TX? 4xaB 6tbD/_>8`A&'p "4 <0… :|1ĉ+Z1ƍ;v̗`|=zѣG=zѣG=zoa>=zѣG=zѣG=F0G=zѣG=zѣGkϣG=zѣG=zѣG5ѣG=zѣG=zѣLJϣG=zѣG=zѣG s_>=zѣG=z`> 4xaB 6tbD H |,h „ 2l!Ĉ 8`A&TaC!F8bExŋ/ ̗a|/^x]xŋ/^h1ŋ/^x`>ŋ/^(0ŋ/^xŋ]xŋ 3`.^xŋ]xŋ/^81ŋ/^x`.^xŋ]xŋ/^81ŋ/^x`>.^xŋ]xŋ/^1ŋ/^xa.^xŋ]xŋ/^1ŋ/^x1a.^xŋ ]xŋ/袈 <0… :|1| 'QD%J(1a>%J(QD%J0D%J(Qą  <0… :|1D&N8qĉ'N8qb'N8qĉ'N8qĉ8qĉ'N8q&N8qĉ'N8qĉ'NLoĉ'N8qĉ'8qĉ'N8qĉ'N81a'N8qĉ'Noĉ'N8qĉ'N8qĄ&N8qĉ'N8qb'N8qĉ'N8qĉ8qĉ'N8qĉ&N8qĉ'N8qĉ'NLoĉ'N8qĉ'8qĉ'O@ DPA$XA .dCE1bĈ#F1bĈ E1bĈ#1b|#F1bĈE1bĈ#F1bĈ E1bĈ#1b|#F1bĈE1bĈ#F1bĈ E1bĈ#1b|#F1bĈE1bĈ#F1bĈ E1bĈ#;O`˗/|G0_>  ߿8`A&TaC!F1bĈ#F1bĈ#&1bĈ#F`> /|o`G0| G0_Ĉ#F1b|#F1bĈ#F1b|#F1bĈ/| '0_>˗o` o`|E1bĈ#F1bĈ#F1bĈ#&1bĈ#F|__/|o``#F1bĈ"F1bĈ#F1bĄ"F1bĈ;O`/߿/˗_#/? ߿| H*\ȰÇ#1bĈ#F1bĈ1bĈ#"O@ /|o`>'`>߿| _O@ H*\ȰÇ1bĈ#F1bĈ1bĈ#̗`| '0_'0߿|˗o`>/߿|̗0_#F1bD"F1bĈ#F1bĄ"F1bĈ!/| /_|/_|'0_|o`|)1bĈ#Fh0_Ĉ#F1bĈ#F0_Ĉ#F`| E1a"F1bĈ 1bĈ#F1bĈ1bĈ#̷0_Ĉc/bĈEQDP>$XA .dC%NXb>-Z0|-B0E-Z0E-ZhѢE hѢE-g"| Mg`> 4xaB 8`A O@ DPB >QD!hѢE-g"| A̗/߿|A̗/Eg`>-ZhѢE-gѢE[ϢEs/|hѢ|,gѢE-ZhѢł,ZhѢ| 8`A&Tx? W| W`| H*\0C1dȐ!C 2dȐ!C 2dȐ| 2dȐ!C ǐ!C 2| %W0_|1dP` C!2dȐ!C 2dȐ!C 2d`> 2dȐ!C cȐ!C  0cH0| &W0| ǐ!C 2dȐ!C 2dȐ!C1dȐ!C 2d80C 2dP`| g0|˗/|_|˗_|˗O`| ̗/_>/_>˗/߿˗? 8pO@ DPB >QD!hѢEgѢEa;_|/_/_/_˗`|/_/߿|/߿| G0E,ZhѢE-ZX0E-Z-Z/|#_/|3/߿| /| ̗_>˗o``>YhѢE-Zh`>-Z`> 4xaB 6tx? O@ /߿|_|˗_|˗/_0@o8p ,/,h „ 2l!Ĉ'R1E-V̗`>-Z|/|;_>_|70߿|/߿|o`70_|˗/|!̗a>-ZhѢE-gѢEgE g0|w0߿|˗/_'p_>|@ 7p8_>$XA .dC%NXb>-ZϢE-0|-Ztoa>,ZhѢE-ZX0E-JgѢE ka>8? 4x`|CH0,h „ 2l!Ĉ'R1E-JgѢEca>-20|-ZhѢE-Z,ϢE%hѢE-̧0Esoa>-ZhѢE8`A'p  08` H*O@O@ DPB 6̗0|>|a[0 < 0 <0,h „ 2l0C-̗0_>9СÆ СC:tx0_9/C6̗ϡ| -С| s0a>:tС|̷0| -̗ϡCs/C:taB O@ 'p "Lp@$Xp`>,ϠA | 4h |8`A&TaÃ:,oaKϡC sϡC:tСC:tasPa>:t/C:t0| `>$H0$H0_> A $HP`> | ? 4xaB 6tbD)Voa'P࿁7߿/8P`7P` ̗o'p "Lp!Æ/_>#o`>+a s|%̷0C:tСC:ta| 1w0_| 70|W0|W0|СC&'0|o` +o`;`3/_>/_#o`/߿|/_|/_;ϡC:tСC:tPa;`+_|+o` ˗_|˗/|/_#`>$XA .d0߿|/߿| W0_|%70_`|/_|`| /_/߿|/߿| G0|kذaÆ 6lذaÆ 6lP``` ̗`>;O`/_ w0_|`6lذaÅ/߿| 70_|̗0_|W0_70_|/|o`|/_>+/|8`A&TaC!F8bE ? ̗|0@'P`/@ ̗o˗/|o7_ ? 4xaB 'p /߿|o`>0 O@8P '0_˗/߿|O`|'0? _|,h „ 2l!Ĉ'RhQ"G_#/߿|? O7P ˗_|GP |O@ DPB w0߿|`G0_| #O`>˗_|`| /|˗O``>6lذaÆ 6lذaÆ 6lP`+o`>/߿|+`o`|/|70߿|װaÆ &'0| 70_|3o`g0|'0߿| ̗/| O8p`@O@ DPB >QD-2w0_|/_|˗_` 8? (0_|'p "Lp!Æ6:t/C:t0C94Oa9t|:tСC:tСC:4ϡCsa|:tС|`|sϡC 9tСC:tСC:t`>S/C 9tСC'p O@ O| H?$XA 'p "Lp!ÆB(q"Ŋ+'p "$'p " <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4R.]tҥI-]tҞ H*\ȰÇ#JHŋ3'p "Lp!ÆB(q"Ŋ+xŋ/ wŋ/^̗ŋ/^xŋ]xŋ xŋ/wŋ/^xE.^xŋ/^xŃ.^xŋ/^1ŋ/^xŋ/^0ŋ/^xŋxŋ/^xŋxŋ/^x|'p "Lp!A$H`> 4x ,h „ 2l!Ĉ8qĉ'N8qĉ1ĉ[/_ ˗oĉ'N8q"|'N8qĉ'N8q|#8q| 8_'N8qĉM8qĉ'N8qĉMoĉ !7q"|'N8qĉ8qĉ'N8qĉ1|Oo(0|0? (08_7p'p "Lp!ÆB(_'N8qĉ'N8_'0_> 70|!̗O`|70|w0D拘oĉ'N8qb'N8qĉ'N8_70|'0|C/߿|˗/| W0|/_|'0_|˗/߿|/_&N8qĉ'8qĉ'N8qĉ0|G0|o`>_o` O`>/_˗_|/߿|/_߿'p "Lp!ÆB(1D%J(QD%J0DC/_|̗_> _>_o` @/_> /߿| '0|O@ DPB >1b>%J(QD%J(a> 8p O`> /߿?˗_|o`O@ o`/|'0| 7P | O@ DPB >Qa>%J(QD%J(a>;/|o`|70| /_o``|/_˗O`/߿|`I(QD%F'QD%J(QD%>'`>;/_| G0߿|Oa70|70|/_| /_|O`| '0| (QD%J|OD%J(QD%J|O| 'p "Lp|1dPa2dȐ!C 2dȐ| 2dȐ!C 2dȐ!C 2dȐ| [!C "g0_> &0C 2dȐ!C 2!C 2dȐ!C 2dȐ!C 2!| 1dȐ!CcȐ!| cȐ!C 2dȐ!C1dȐ!C 2dȐ!C 2dȐ!C1\a> 2d0| 24| 2dȐ!C 2dP`> 2dȐ!C 2dȐ!C 2dp`> 1ǐ!C ?#H A $H0_> G A$XA .D'p " ? 4xaB 6tbD)V0| ]h1|]d/| ]xq`>.>g1ŋ/^xŋ滘!|,h „ O@8`A'p 4ϠA 4hРAϠA $ϠA'p "Lp!ÆB(q"Ŋ滘ŋ/^Ta/̇0ʼn(xŋ/^x|]xŋ -̇0_|G0| '`> /_|o|7p_8P`8_>$XA .dC%NXѢ|]xŋ -w0| 70_>'0| 70|O`|w_"擘ŋ/^xŋYwŋ/6w0|̗`> /_>#`/߿|+o`>˗_|˗O`|O8p| H*\ȰÇ#JHE*xŋ;_> +O`_#a>/_`|/_˗/߿|_|/_ 擘ŋ/^xŋI̗/ŋ/^1_|3`_O |'p| 'P'p`80|'0__|'0@8p| H*\ȰÇ#JHE'p "Lp!ÆB(? /@/߿|o|o@o@_> /߿|_> O@$H0,h „ 2l!Ĉ'Rha>.^xŋw0| ̗O`>'0_> o`>`>3/߿|˗_>_˗_| W0| ]xŋ/^xa.^xŋ w0_|˗/|70@ 70߿O@G0A|˗/|˗/__||#H`>$XA .dC%NXѢ| ]xŋx|]`| ]xŋ/^xa>.^xŋ ]xq`.Vw0|/^xŋ/^toa/^x"|/^a!̷0ŋ/^xŋ[ŋ/^0ŋKb| -wŋ/^xExŋ/2wŁ0| ]xŋ/^xa.^xŋ 8`A&T!0 

70|̗O`|o`+`> 1ă(QD%*'Qb| 1_>-'QD%J0| G0_| ̗O`˗/߿|o` 3`|˗O`|˗/? 7 o80O@ DPB >"Ć| B̷0D!B"D;/_>/| ̇0߿|'0| W0|̗_|/_/߿|˗/߿|/_|["D!Ba>C"ą >̷0D!B"ĆC/_| ̗_> ߿| (0߿|'0|(? _ 70߿|_70߿| o80O@ DPB >`o`> o'P`8p'0|/,h|O@ DPB >`>'p 0@/߿'p|˗/| 70 (? 70߿|_70߿| 08`  <0… :|1|/_`K`> _>-"D!B`|g0_/| 70|˗O``>3/߿|˗_>_˗_| W0|["D!Ba>˗/߿|O`˗/a>˗_|˗O`| ̗/߿|'0_|Atoa>!B"D'0|O`>O`| (P|'0'_>/| /_O`/߿|˗/| /@ +X_>$XA .dC;_o`> _`|/_˗/߿|'0_|/߿|Atoa>!B"D-"D| 1̷0D!B|_'P(@ o|70| ̗o`> ̗o`(0,h|O@ DPB >0|#F`coa"F1bĈ8 ˗/߿| 70|_>'p@70| o`> ̗o`(`> 'p ,? 4xaB 6t| E1b"FTa1bĈ#̗`|/_>`K` /_|O`|/|˗_> C/_D1bĈ#FTa#Ḟ0_Ĉ9̷0|#F1bDa 70@ ߿O| 7p|˗/|˗/_> /_| 7_ 7p8p|'p "Lp!B$`> 4x@$XP`>4hРA 4hP`>4hРA480  <0… :|X0|!6w0D 1_ "D`>"D"| [oa>!B"| A0|!603"DK"D9`> 4xaB 'p A H8` g`>$XA .dCa> B\a>-g0D!"̇0D 5"D!B`"D!2̷0D !̗"Ą/|!̗/| 70߿| O7p ˗/߿|/ 8po|/ <0… :|a1bĈ#̷0_Ĉ )1b|E̷0| '0|_| W0|!'0_G0|/b>"F1bĈSoa#F1b| E0|E|/_|E̷0|/_|_| G0|!'0_W0|̗/߿| ̗/|/_|˗O`| #`#F1bD[/bĈ#FX0B$XA 'p A H8` ,`|g0_|/߿|'0|3(0|W0|̗_|/_/߿| ̗_|`O@ DPB >1_| E1bĈ 1bĈ#1|g0_|/߿|'`>8P`>(߿80@ o`/|'0| 7p`˗? 4xaB 6tbW0|%J(Q|%J(Q|)O@ o| _>'0_>7_o`O@ o`/|'0| 7p |,h „ 2l!Ĉ'p 8`A&TaC"D!:_> ;o`>/|/| 70| g0|̗_|/| /߿|/߿|W0D!B"D)̗"D!BH0_|!B"DK/a>˗/|o`0@߿| (0_|#(0|/_O`/߿|˗O`>G0,h „ 2l!Ĉ)̧0D%Jo`>%J(Q"|%̇0|%J`>(QD%J0|(QD8`A&TaC!F8?'p "Lp|1da> 2dȐ!C 2d |,h ,h „ 2l0C:tСC9`>:t(0|:ϡC:tСC s0C:t`>:tСCsH0|:tP`:d/C:tСC`>:tСC:tСCg0C:Oa>sСC:tСÄ:tСC:tСC:tpa> H*\? O@ D(? 4xaB 6tbDM8qĉ'N8qĉ 8qĉ'N8qĉ'Noĉ'N8qĉ'Nh0ĉ'N8qĉ'N8q|'N8qĉ'N8qD&N8qĉ'N8qĉ8qĉ'N8qĉ'7qĉ'N8qĉ'N80ĉ'N8qĉ'N8`'N8qĉ'N8qā&N8qĉ'N8qĉM8qĉ'N8qĉ'7qĉ'N8qĉ'N4oĉ'N0_>$XA .dC%J7qĉ'N8qĉ'N4oĉ'J̗/|M8qĉ'N|oĉ'N8qĉ'Nh0ĉ'Na'N8qĉM8qĉ'N8qĉ 8qĉ)7qĉ'N8a'N8qĉ'N8q|'N8a>&N8qĉ'27qĉ'N8qĉ'N4oĉ'>0ĉ'N8qą&N8qĉ'N8qĉM8qD8qĉ'N0ĉ'N8qĉ&h&2| H*\ȰCÇ>|Ç=|Ç>|Ç>|`>|!|Ç>|Ç>|Ç>|Ç>|h0Ç>|`> 'p A H? 4xaB 6tbDM8qĉ'N8qĉ 8qĉKa7!|,h „8@$XA8`A <0… :|1ĉ+Z0F1˷0| ̇0F0V̧0_> 1F1bĈ#F1̇#F;`>0̇b0Ḟa>1bĈ#F1b#F10_| X1|'0F1bĈ#F1̇#Ƌca>70|#_>/_|!w1߿|9̇a>1bĈ#F1b#F=̷0| ;o`> ̗o`'0|O|7po`/,h 8`A&TaC!F8bEÈ|!̗a> w0|'0|/|#`3/_>/_>`> o O@ D? 4xaB 6tbD)Vxa>1^1_"H0߿| /_O`>_>`|˗_|/_/߿|˗_|̇a>1bĈ#F1b#FMO@$Xp`> ,/ O|/߿/߿|oO|7_/|/_o| H'p "Lp!ÆB(q"Ŋ/>̇#Ƌ0JW`> 'p|O߿| ? 080O`|/߿|O`8 ,h`>$XA .dC%NXŇ0bx1F&w0߿| ̗/|O`> 70_>`|˗_| ̗/|/_|O`(0F1bĈ#F1̇#Ƌ0J'1|70_>O`'p_O| ̗/|˗/__|o|? 4H0,h „ 2l!Ĉ'Rh|1b|-̇b0V0|1bĈ#F1b80F/(1_| aa>1̇1F1bĈ#F1̇#Ƌ0J1|+C|]̇#F1bĈ#FO@ D0'p  'p  0 O@,XP`+X` , | ,X`,X0_  <0… :|1ĉ+Z0|)3c'1_>"cc| 0_>.È#F1bĈ#Ɓ H1|-̗0| E`> 4xaB HP |,h B H| ,? 4xaB 6tbD)Vxa>0Rg0| !̇1|aĈ#F.È#F1bĈ#F C/_|(߿߿? o/_7p@? 4X0| <0… :|h0ă B"D!B"D!B$`/| '0| G0| ̗_>0_| .g0 B"DA<"D!B"D!B"D 3/| ̗/_| '0|w0|/| w0_|0@ O|8p'p "Lp!Æ"`>!B"D!B"D #``o`>`>˗`#`|/_|/_|-W0D!B| "D!B"D!B"|3o`|'P| _˗/@ ̗o ߿| (0| ˗O`>O`|#H|O@ DPB >db|!B"D!B"D!.̗/|70߿|70|8P 70| 'p 8`>/߿8`A&TaC!F <0… :|1ĉ+Zq`/| ̗_C`o`>k`|O8p| H*\ȰÇ#JHŋ3jȱc|8_ o` _>o`>̗/_>70A#80_|0@O|8_>$XA .dC%NXE5nb>̇1|1ѣG=zѣG=zĘϣ|a71| yѣG=zѣG30|M̧1G=zѣG=z1c>̇1|yѣG=zѣG50|U̗b|=zѣG=zѣǍ<:g0|0_|=zѣG=zѣǎ HO@$X`A$X`A$H? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV8`AO@ DPB >QD-^ĘQF=~1_ȃB 2dȐ!C 2dȐ!= y0_Ȑ!C 2dȐ!C 2|! 2dȐ!C 2dȐ!C`_o`B 2dȐ!C 2dȐ!=;o`> /| ̗O`B 2dȐ!C 2dȐ!=;o`> /߿|˗O`B 2dȐ!C 2dȐ!=;o`>_ _ 2dȐ!C 2dȐ!C| /|/߿|_#/,h „ 2l!Ĉ'Rh"ƌ7r#ȍw0| ̗_ O`|8`A8`A&TaC!F8bE1fԸcGA70| '0_/߿|+/c!C 2dȐ!C 2$|!̗/|70_|`>B 2dȐ!C 2dȐ`B 2dȐ!C 2dȐ`B 2dȐ!C 2dȐ`B 2dȐ!C 2dȐ`B 2dȐ!C 2dȐ`B 2dȐ!C 2dȐO@ Dh? 4h0,h „ 2l!Ĉ'Rh"ƌ7r#| A*$H A $H A0H  $H A $H A2| A $H A $H 0H A $H A $| A*$H A $H A0H  $H A $H A2W`> 4xaB80,h „ 2l!Ĉ'Rh"ƌ7r#|`> A $H A $H 1| A $H A $H c>@ $H A $H +`_o`G0| $H A $H A2W0| ̗O`O`|̗`>3$H A $H A aO`|/_|`|#`>@ $H A $H @(0 '0߿|/@_o` /8`A&TaC!F8bE1fԸcG9+`_+_3/߿|w0| A $H A $H 8070|_>'0_>(߿|?'p@$XA .dC%NXE5nG ;o`>/|O`|O`>3$H A $H A a˗o`/_| W0|˗_|g0H A $H A $|`> A $H A $H 1| 8`A&'p "4 <0… :|1ĉ+Z1ƍ +cǁ cc| ud/_ǎ;vرcǎ;vH0_|;g0|#K|;vرcǎ;vر|u80| uauرcǎ;vرcǎױ|1̇0_|(_(߿ ߿8_>$XA  <0… :|1ĉ+Z1ƍ+0 <0B o /|(0 70|7p`| H/,h „ 2l!Ĉ'Rh"ƌ7Ṅ0G%'0|W0|70| w0_|'0_|/_ ̗/| ̗/_>8rȑ#G9rȑ#GQb>;/_ #`>#_>˗/߿|_>O`˗_|G0G9rȑ#G9rx0|9J̷0_>`>߿8P`>/A_>O`/|#? 4xaB 6tbD)VxcF'p 8`A&T!|$`>#o`8P o`O`>/_| ̗o`8 ,h „ 2l!Ĉ'Rh"ƌ7w0|9J̧0߿|_+o`#_>˗/߿|_>_/_>K#G9rȑ#G9>w0|9J̗0|˗O |@߿| /|/_O`_ /߿ ߿8`>$XA .dC%N`> 4xaB 6 <0W`> 4xaB (0O@ D_>)TP!| <0… :|1ĉXbE*V/b*V`>*V$` cbŊ+VXbE*VXa!拘`)+a CbEXbŊ+VXa+VDbE"+bE cbEXQ`*VXbŊ+Vl`0_>O OO@#o`70| H*o|'0@`o7A? 8p`>$XA SOB Sh0,h „ 2l!Ĉ'Rl`|/߿|70| g0_g0|_>70_ŊEW0|O`> O`>W0|W0C$XA 'p  H 'p 'p "Lp!ÆB(q"ņ /_|O`>3o`|̗/|W0|`|W"|w0|`/|G0|WbŊ+WbŊ+VXb|/߿| G0| '0_|o` _+/_>*V/b_#`˗o`>;`+VX`+VXbŊ;_O`>  @_O|_80@8`A&T80B ;O` |(߿8?#808`A&TaC"D!B"D ˗`|˗O`>`+0@/(0|o|'p 8`A̗!|O/|o`>G0|08`A&TaC"D!B"D w0_>O`>3o`>70߿|3o`| ̗_> 80DA`/|70߿|`;`>!B"D B"D!B|!70_>#o`>`>/߿8P`| 70߿|| $H0A $H $H_>O`#0@O࿁(|? 4xaB 6tPa>!B"D!B0_|!Ba>AH0 |A"D! "D!B"D+"D!2`> /_|!Bt`>!B"D B"D!Bb|A"D |+"D"D!B(0D!B"D!BD`>!B0D B|Aa B"D"D!B"D"Dh| H!D/_|"D!B C!B"D!B"? 4xaB 6tbD)g0_Ŋ+"W_EW0_ŊWbŊ+WbŊ+VX|8`A&TaÁ H!B"D!B`>!B|!_>!BT"D!BQ`>!B"D!B/|!B"D B|!B0D!B|!B"D!B`> O@ DPB >0 'p ;xp`T"D!B"Dw0_|!B"D`>A|!B"DA"D!B"|"D!BTa>A"D"D!B"D!B"D{"D!B0|/D!*"D!B(0D!B"D!1A$XA .daA7p8p 8p@ O@ Dh? 4h0,h „ 2l|!B"D!Bx0|A"D 1D W0DA\"D!BQ`>!B"D!B4/|A"D _>A`>惸0D!B|!B"D!Bh0"D!2g0 _ BD|!B"DA"D!B|+`0_>/_0@_O| ̗/_ /߿߿(0@8p|8P`(0@o|70| ̗/@8`A'p "Lp!Æ*"D!B"DA`> ̗_| G0| '0|70߿|70| G0߿| ̗O` (0 W0|'0߿|o`>G0ą B"D"D!B"D G0|˗_| G0|'0|G0߿|W0߿| G0_'0_|A|#`|_| 70|߿| H8`A&TaC"D!B"D 70|/|70_| /_|W0_| '0| _ "|80|/|/| ̗/|"D!B$"D!B"D X0_|_ |'P`'P࿁O| o|˗o`(0߿|7P`| 8p 8p@8p@7p|O`O`˗/8p <0… :|0D!B"D!a/_>#o`o` #_>+_>W0߿|+"|x0|O`'0|O@ O@ DPB >"D!B"D 惈0|˗O`>`_>O`/|70_W0D `/| ̗O`70|!B"D"D!B"D "̇0|` ˗/|O/߿'P`| 7p` ̗/_>(08p`(08P`/߿|70| ̗/_'p "Lp!ÆBX0D%J(QDI4OD%J'`$'Q"|%J(QDI(QD%J(1D$J(Q| 拘Ob|%'QD%J0D%J(QDI4OD%J'`$'Q"|%J(QDI(QD%J(1D$J(Q| 拘Ob|%'QD%J0D%J(QDI4OD%J'`$'Q"|%J(QDI(QD%J(1D H*\Ȱ H8`AO@ DPB >`>%J(QD%(QD%Jt/b>%J(QD%J%J(QD (QD%J(QD$J(QD%JOD%J(b$J(QD%J(1a>%J(QD+OD%J(b|'QD%J(QD ;OD%J(QD'QD%J(_'QD%JH"$!'p| H*\ȰÇ#FO@ DPB >QD-^ĘQF8`A&TaC!F0ĉ'N8qĂ&N8qĉ'N8a'N8qĉM8qĉ'N,oĉ'N8qĉO@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~1_ذaÆ 1_ذa'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )? 4xa| H*\ȰÇ#JHŋaĈ#F1bX1_> aĈ#F1bĈ|1bĈ#F1Ża>1bĈ#F1bĈ#F1bĈ|È#F1bĈ#F1bĈ#F1Ḃ`>1bĈ#Fˇ#F1bĈ#F1b$|1bĈ#FG0_>1bĈ#F1bĈ| È#F1b$/a>1bĈ#F1bĈ| È#F1boa>1bĈ#F1bĈc>$XA8`A&TaC!F8`>(RH"E)RH"E)NGQa>)RH"E5G"E)RH"E)RHqb> QH"E)Rta>)RH"E)RH"EQT"E)RH|G"E)RH"E)RHb> QH"E)Rla|)RH"E)RH"E#棨0E)Rl0 <0… 'p H*\Ȑ ,h „ 2l!Ĉ'Rh| È#ƇaĈaaĈ`|1bĈ#F1bd|1b0F3`0bĈ0F1bĈ#Fh0F1:̇#ƅ 3#F aĈ#F1bĈqa>aĈc|1bda>12̇#F1bĈ#F0̇#F aĈa>'p O@ DX0,h „ 2l!Ĉ'Rhb]xb|/^oa>.wQb/^xŋ/Vw`/^ŋCa]ŋ/^xŋ]<ŋ#x|˗a]ŋ/^xŋ]<ŋ#xb|Ė0_>/_.Jwŋ/^xŊ.wŋ]x|O`| g0E.^xŋ/^X1Ń.^x1b/^a|`8`A <0… :|1ĉ+Z|/^1ŋ/Jw0_˗O`.Jwŋ/^xŊ.wŋ]x|o |'p  ,X`O@ DPB >QD-Vw`/^ŋ˗/A O|7p |O@ $? 4xaB 6tbD)VX1Ń.^x1b/^to`> ̗/| g0|."wŋ/^xŊ.wŋ]xb|G0߿|/_|)w`/^xŋ/Vw`/^ŋ+| ]<ŋ/^xŋ]<ŋ#xŅ x0| xŋ/^xb|xň.^xqa>.̷0E.^xŋ/^X1Ń.^x1b/^\0O@ |",? 4xaB 6tbD)VX1Ń.^x1b/^\`-w`/^xŋ/Vw`/^ŋ3| ]4ŋ/^xŋ]<ŋ#xŅ 'p O@,X`A8`A&TaC!F8bE]<ŋ#xŁxq`]xŋ/^xb]xb|/^H0|/w`/^xŋ/Vw`/^ŋ8 A$XA 'p A H| H*\ȰÇ#JHŊ.wŋ]xqb|w| sŋ/^xŋ]<ŋ#x|w|5wŋ/^xŊ.wŋ]x1b>.^b>.^xŋ/^X1Ń.^x1b/F1A$XA(0o'p "Lp!ÆB(q"Ŋ+x0ŋ/FwE"3b|E̷0ŋ/^xŋ+x0ŋ/FwE"3b|E̷0ŋ/^xŋ+x0ŋ/Fw`> , <`̗0a„ K0_B8`A&TaC!F8bE]<ŋ#泘bEg0|0@ @| $/A'p "Lp!ÆB(q"Ŋ+x0ŋ/FW1|#擘`/_|o`> 拘oa/^xŋ/Vw`/^b]Ob_G0|I̷0ŋ/^xŋ+x0ŋ/F71Ł.>71| /_| ̷0|-wŋ/^xŊ.wŋIw`Q̗/߿| `>(? ˗/_ W| H*\ȰÇ#JHŊ.wŋIg0_|_| ̗`]̗`K/|]̷0ŋ/^xŋ+x0ŋ/F'1_|_˗_|]t| ̗_> /|]̷0ŋ/^xŋ+x0ŋ/F'1_|O`3|;/_|(| $H ? 4xaB 6tbD)VX1Ń.^x1b> @ _2/߿| 0 O@ 3hР| 4h`> g`>$XA .dC%NXb|xň#`|˗/߿|`&/ņ.[ŋ/^xŋ]<ŋ#c`>/߿|˗O`>$擘|滘oa/^xŋ/Vw` 8`A&Tx? W| +X`+X| ,(0_ W` `+X_>$XA .dC%NXb|0ŋ1̷0|-G1_|0| ]xŋ/^xb]dE[`U1 H'p ;H0,h „ 2l!Ĉ'Rhb]dE[b|EwExŋ/^xb|0| O@ O|/|8p|o 8p 8p8p'p "Lp!CkذaÆ 6lذaÆ 6lذaÆ5lH0_Æ 70| '0_> `>'0_>[o!|,X? 480QD-Vw` W0߿|o`> /_|/߿|5̧0ŋ AwExŋ/^x|0|70| W0| 70_|̗0_|/&̗0_|/^a/^xŋ/Zw` W0? /߿7P࿁8`>? o? 4xaBOB *TP| <0… :|1ĉ+Z|˗/|70| W0| 70A$X`A$XA 'p "Lp!ÆB(q"Ŋ/b̨!,h`'0|o`>'0_|70|w |'p  'p A8`A&TaC!F8bE1f0|(0_|7̇1|m̗/|7nܸqƍ7nܸa6̷Q`6n4cm4/_|7nܸqƍ7nܸb>6̷Q`6n4c۸qƍ7nܸqƍY̷q`̷q|G1|̷qƍ7nܸqƍ!泘o|+oF0;b>۸qƍ7nܸqƍY̷q`O@ DPA$X| +/_|70_|('p`O@ DPB >QD-^ĘQ#|mo|7n\`˗/_'0_|˗/߿|/_|mܸqƍ7nܸqƈ,80F6n0_ /|_ /| ̗oƍ7nܸqƍ7Jg1Ɓ6 ̷qF3o`| O _O@ DPB >QD-^ĘQ#|mo|7n`|/_/߿|˗_> ۸qƍ7nܸqƍY̷q`mܸ1b'0_|/߿|˗/|̷qƍ7nܸqƍ/泘o|۸qc|mDoƍ7nܸqƍ7^g1Ɓ6 ̷qƈ ۈ0ƍ7nܸqƍ7nbmoƍmdoƍ%۸qƍ7nX0|(0ƍ' <_ &L0a„ &Lx0_| <0… :|1ĉ+:g1E,gѢE YlE-6̗`|-ZhѢE-Zb>Y<ϢEg1a|-Zha,ZhѢE-Zb>Y<ϢE!'p O@ DPB >,oa>!B"D!B| 0Ć B"D!B"Dk"D!B"D!B/D :a>!B"D!B"ā"D!B"D!`>Al"D!B"D!Bq`"D!B"Dh0D 6"D!B"D!B(0_>A"D!B"DA4|"D!O@ DPB >? O@ DPB >h? 4xaB 6D!| |:tСÆ9tСC:tX0_>9tСC:t/C:t0C:ϡ:tСC 9tСC:tx0|СC:t|:t!|sP`>sСC.СC:ta|СC:ta|:t|sP`>sСC*СC:tС| 9tСC:th0C:t0C:ϡ:t!R| H*\ȰÇk/bĈ#FQa#F0_Ă"6a#F`#F1bć1bĈ#F\/bĈ#&` Ed/bĈ#F4/bĈ#Fb"F1bĈ1bĈ E,/b|1bĈ 1bĈ#F`8` H`|'p "Lp!C6lذaÆ5LaC6aÆ 6lؐ` 6lذaÆ .O| H`|4h0_>˗o`| 4hРA 4h`| H*\Ȱ|sP`>sСC*СC:tСC 9L/| 9tСC:tСC"С|СC:TϡC:tСCs0| 9tСÅ:tСC"С|СC:TϡC:tСCc`kϡC*СC*a>s_>:tС|:tСC:t0|̗0| 9tСC:tСC"С@8`AC!B"D!B'p "Lp!ÆB(`/_'0߿|w0_|'NH0ĉ'J7q` MToĉ'67qĉ'N8`>/_|/_> #_&N8q`'No|曨0ĉ'Nloĉ'N8q|̗/|'0_|0ĉ'7qĉMo|8qĉ M8qA$XРA$XA &̗/_'P8?8p $/_| H*\0C 2dPa> 1dh0C1dȐ!C 2ǐ!C ̗/C˗@ <0_ o`|/_> +/_> ̗!B"D|"D!B"4!B"Dh0B C!B"D!B!D!B",/B ̇`>"DP` 0o /߿|7p|O@ DPB2dȐ!C 1T!C2,!C 2dȐa> 2dȐ`> ˷0| &W0C_2dȐ!C2dȐ!C 1T!C2,!C 2dȐa> 2dp`>1d/a>2<`> C|1dȐ!C1dȐ!C c0C1dX0C 2dȐ!| 2dȐ| c_1!Ccp`>;!C 2!C 2d0C24!Â2d!b! <0…̗/|˗/| ̗/߿|˗` ǐ|1d(0| ǐ!C ǐ!C 2T| 0a2dȐ!C cȐ!C W0|/_|'0߿|'0߿|#O`>1dh0_| 0|cȐ!C cȐ!C *Pa> c0| 2dȐ!C 1dȐ!Å+/| ̗/| /| #_>1dh0|1,P> H`|W`>$XA ./߿_?8P $08`A40 O@ ˗Ϡ| 4hРA 4/,h „ 2l(`>'p 4hР| g_>8`A&TaC=|!| g0|˗/| /|70_|s`|=|a|>|!|s| ;`>||>|80|̗/|'0߿| '0߿|(? _808pO@ DP| .\p| .\p…!̷P` [/‚.\p… &̷p… [o…̷p`̷p… [p… [p… .4/a-\0| [p… .\0… .4o| .D`-̷` .\0… .\x0… .\p| -̷p!| -4o… .\pa| .\`-\`˷P`-\p….\pƒ.\p… $80A $HP`>#H 8`A&TaC=||=|0| 5P`>4Ç{Ç Soa-P`>||>|/|>,/| 9P` H`A$XP |O@'p "Lp| 2dȐ!C[!CcX0C 2dȐ!| 2d_>ca>̗| S!| g0_>2dȐ!2dȐ!C )̷0C-ǰ`> 2dȐ!C2dȐ| 'p O@'p`>$X_> 3(0_> ̗ϠA gРA 4hРA'p "Lp!Æ)̷0C-p`>:tС|:tX0C:th0Ás0_| !СCsСCSoa>[|:tСC:t`>:t`>̧00_:t|:tС| -С| 9ϡC:t0CСCp`>:w0|9tСÁ:tСC[ϡCs80C:tPa>*w0C:t0|O|_O`>7_>8P`O@ DPƒ2dȐ!C )̷0C-ǰ`> 2dȐ!C2dȰ`2dȐ!C w0|O`|/_W0߿| ;!C 2!C 2d0| 1dh0| cȐ!C 2d!C /_> 2dȐ!|g0_|'0_|80(0_o8`A&T`> 2dȐ| -ǐ| 1,!C 2dȐa> *O@ DPB >\'`> '?8P $0 O@ DP| .\p…)̷0…-̷` .\p… -\p|-\p… .L`> 70_|˗_|/[o… ̷p… .\h0| -\0| [p… .\0… ;o… .\pa|w0|'0_G0|w0.\pa| .\p…)̷0…-̷` .\p… -\Pa .\p… g0…'p| | ? 4xaB-\p… ̧0| "̷0B.\p… &̷pB.\p… .\X0| ̇0_;o| .\` .\pB[oB[h0… .\p„.\0… .\p… ;oB[/| [p…-\p… ̧0| "̷0B.\p… &̷pB.\p… .\X0|  ̷0| -o… ̷p… .\h0| -\| H_  <0… :Æ>|Ç K/Â5̗`>{|>|!| -a Ç>Æ>|Ç [0 O@'p`>$/_,X` ,X`>$XA .dp`>sP`СC:TϡC9tСC:СC 5СC9tСC )̷0C-p`>:tС|:ϡC:ta>:Ta>:ϡC:TOa:oa>9tСCs|:tСC9tС| 9t|:tС| -С| 9ϡC:t0CsСC:tϡCkϡCsСCSo!| H!!"D!B"D!|"Dp`>"D!B"D|"D!B!,!B"D80B"D!B C(0"Dh0"!B"D!Ḃ!BC!B"D!Ḃ!B"D(0‚"D!B!D!B"D`>!!B!!"D!B"D!|"Dp`>"D!B"D| 'p O@ 3h_> 4hРA'p "Lp!Æ)̷0C-p`>:tС|:ϡC:tas`|0CСC*̧0| ̷0Á:tСC 9t_>:tСCС|0CСC*̧0| ̷0Á:tСC 9t_>:tСCsa>sСÁ:tСC[ϡCs80C:tPa>СC:t0|0_| O@ DP!| .\p…)̷0…-̷` .\p… -\Pa .\p… w0…)G0 ̷p… [p… .4Oa.Doa-\p… .Lo… -\p… .\`|̗/| ̗/߿|/_/_oa| [p…-\p… ̧0| "̷0B.\p… &̷pB.\p… .\h0_| ̗_|_|˗/߿/߿|/߿O@,H0_ ,X` O@ DPB Soa>[|:tСC:t/C:tСC W0_>/_O``>9ϡCsСCSoa>[|:tСC:t/C:tСÁw0_||/߿/߿@ H? ϠA 4h`| H*\Ȱ| -С| 9ϡC:t0CsСC:th0|'0_/|/߿|+|:t80C:t0| 9t(0|sСC*С:tСCg0_| O@ ߿| /߿O@ w<800|"Dqa>!B"D Bd|!B\"D!:̧0|[|!B"|!."D!Bx0D A\"D A"D[| A"D!Bd |,h ? 4xaB 6ta|!"̗"|'p O@,X`8`A&O@3H0 4h`>4X0,h „ 2lp`&0Ç>|C=|x0Ç˗|{P`{(0| =|oa=|Ç+a| =|Ç>$0 <0,h|C!BC!|"Dp`>C(0"Dh0"!B"D!BW0B!$? 4xaB 6tbD#s"|Qd"Ł"Soa> -1E)RD`>0@ o'p "Lp!ÆB(q| =G_(2g0|'0| ̗o` /,(0A gРA,Ϡ8`A&TaCw0|%̷0Ç>|Ç>toa|=<`3/| /_>˗O`| G0C[| =Ç>L/a> +_;Ç>|Ç:̇0|/_|'0߿|˗O`| +|̗O`|/_|/_>#| -a Ç*̗0|/_|Ç>|Ç| (0߿|/_|_>_>G_$H AGP`G__>'0|$H| G| $H A AO@ DPB K/_|/_| +_|:tСC:tСCg0_>_O``|9th0_>/_|/߿|O`s80| 9t(0|sСC'p 'p`7p@$XA .dC%NX o`_>O`80,hP |O|7P`/_> /߿| H`,/_ ,` ,(0,h „ 2l/| 70_#ϡC:tСC:tP` /_|_>_>+`>/|o`|/_ /| ̗a>sP`СCw0|˗O`sСC:tСC:O`/_>˗/߿|'0|!`>3o`>70|#_#a>sP`СC9AO@ w8`A&TaC!F8bE,F̗0| Y`>["| EgѢEYϢ|-ZhѢE-:gb$Sb|-̧0|[/b>-Z|hѢE-Zha>-1|++oa>泈0|O@ DPƒ HP` ` O@ DPB >QD 0|)gbSoa>-1_|-Z,a>YϢE-ZhѢň,&̗aX1_| )̷0E拘`>-0 H H*\ȰÇ#JHA$X H` W |,h „ o 8_  <(0"`>"D!ƒ <0… :|1ĉ+Z1#|iԈ0| -̧`"+ |7߿'p`˗/|/_> oO@'p "Lp!ÆB(q"Ŋ/b̘0_|5"̷0| i$oa ;``_> ̗`>[OF5jԨQF-惘OƄ[oa>-'1|W0߿|+o`>o``ӨQF5jԨQƋӨQa[O#| I̗o`+_ O`O`| G0|̧QF5jԨQF!W0F !0| ? W`+(0_|+|'p`˗/| ̗_OO|O@ DPB >QD-^Ęa| ̗OƆ̗a4̷0_|G0_| g0|70@ /߿O H*\ȰÇ#JHŋ3jȑ#,` ,X`| W``70_`>˗o`>+(0_| H*\ȰÇ#JHŋ3j̧QFH0|g0_|/| W0_|#O`> ߿|? 4xaB 6tbD)VxcF4j0| [b>'ӨQF5jԨQF5jh0| [b>'ӨQF5jԨQF5jh0| [b>'ӨQF5jԨQF5jh0| [b>'ӨQF5jԨQF5jh0| [b>'ӨQF5jԨQF5jh0| [b>'ӨQF5jԨQF5jh0| ["|,h „ O@ DPB >QD-^ĘQFѣG=zѣG=z`<˗0G=zѣG=zѣG%̗b>ѣG=zѣG=z`ka|ѣG=zѣG=za|c!|,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ 8| H*\ȰÇ#JHŋ3jȱǏ Cf̷0H"E)RH"E)RH8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_}"̗/|ӧO>}d/_|70_| /_|'p`? H*\ȰÇ#JHŋ3jȱǏ 5/_>O`>O`˗_O`>B 2dȐ!C 2dȐ!5'P_߿|@/߿|/߿8`A&TaC!F8bE1fԸcGAj70_O`>O`o`O`!C 2dȐ!C 2dȌ ̗_| ̗/_>/@ '߿| _'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? `!C 2dȐ!C 2dȐ! +? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p H*\ȰÇ#JHŋ'p "Lp!ÆB(q"Ŋ/Ṅ#F1bĈ#FaĈ#F1bĈ|1bĈ#F1bH1F1bĈ#F1̇#F1bĈ#Fˇ#F1bĈ#FaĈ#F1bĈ#|aĈ#F1bĈc|1bĈ#F1bH1_|1bĈ#F1bX0F1bĈ#F1R̗/F1bĈ#F1̇#F1bĈ#Fˇ#F1bĈ#FaĈ#F1bĈ#|aĈ#F1bFP>$XA .dC%NXE˗1cƌ3f̘1cF'0_>'P ,h „ 2l!Ĉ'RhQa|.^xŋ/^x1b ̗ob.^xŋ/^0_|/^xŋ/^1|˗O`| '0_|O`|˗o`| ̗/߿|08`A&TaC!F8|UXbŊ+VXbE'p|߿|߿߿O_/߿8`A&TaC!F8|UXbŊ+VXbE/_|(߿|/߿O| /| O_>$XA .dC%N81_|+VXbŊ+VXb/߿| '0|70|O`>O`>*VXbŊ+V/_+VXbŊ+VH1||߿|߿| o|˗/|(_? 4xaB 6tbD)N̗/_Ŋ+VXbŊ+VbE WbŊ+VXbEXbŊ+VXbŊU0_|*VXbŊ+V1_|+VXbŊ+VXb+VXbŊ+VXa|*VXbŊ+VX"|+VXbŊ+VX|UXbŊ+VXbE*VXbŊ+VXbEXbŊ+VXbŊUXbŊ+VXbŊWbŊ+VXbŊ)XbŊ+VX*! O@ DPB >QD-^!|o࿁ ߿ (7P࿁ ߿8`A&TaC!F8|UXbŊ+VXbE O`>70|'0|'0| '0|_| WbŊ+VX|UXbŊ+VXbE o`>O`>#_>O`>O`O`>WbŊ+VX|UXbŊ+VXbE ˗o`>˗/|`|#/_|70_|˗O`>˗bŊ+* O@ DPB >QD-^b>O`>O`>/a>_| /| '0|1bĈ#Fˇ#F1bĈ#F=O'߿7p| (0_|8p?GP'p "Lp!ÆB(q"XbŊ+VXbŊUXbŊ+VXbŊWbŊ+VXbŊ)XbŊ+VXbŊ˗bŊ+VXbŊ+RWbŊ+VXbŊ+:̗/_Ŋ+VXbŊ+VbŊ+VXbŊ+Vt/_+VXbŊ+VH1| ̗/| ̗/_>'0_|(@ H`| H*\ȰÇ#JHb|*VXbŊ+VX"|#` ̗/_>/߿| '0|+VXbŊ+B̗/_Ŋ+VXb+Vb>+o`>'0__ 'p`O@ DPB >QDWbŊ+VXbŊ)惘/_|70| ˗/|1|XbŊ+VXa|*VXbŊ+VX"| 70| ̗/|+O`>a> ˗bŊ+VXbEXbŊ+VXbŊ=̗O`|(@o`(߿8`>/_|'p ,h „ 2l!Ĉ'R4/_+VXbŊ+VH1_Ŋ+VXbŊ+V0_|+VXbŊ+VXb+VXbŊ+VXa|*VXbŊ+VX"|+VXbŊ+VX|UXbŊ+VXbE ˗/_E*VXbŊ+VX`|*VXbŊ+VX"||+VXbŊ+VH0_|+VXbŊ+VXb ˗/|/_|G`>'p "Lp!ÆB(q"Ŋ˗ŋ/^xŋ#{`'0|O_>$XA .dC%NX|]xŋ/^xb|#/| '0|+`/^xŋ/̗/ŋ/^xŋ/F1_|˗/߿|/|˗o`|˗/|wŋ/^x|]xŋ/^xb|/^xŋ/^x1a|.^xŋ/^x1b/^xŋ/^0_|/^xŋ/^1ŋ/^xŋ/^L/_/^xŋ/^ŋ.袋.袋.(! O@ DPB >QD-^#F1bĈ#F)˗#F1bĈ#F È#F1bĈ#FÈ#F1bĈ#Ƃ0bĈ#F1bĈb|0bĈ#F1bĈ`>1bĈ#F1b/_>1bĈ#F1b,#F1bĈ#F)˗#F1bĈ#F 拘`0bĈ#F1b0_|1bĈ#F1bX0F1bĈ#F1R̗/F1bĈ#F1̇#F1bĈ#F̗? 4xaB 6tbD)Vx1b>1bĈ#F1b/_>1bĈ#F1b,!|߿   <0… :|1ĉ+J̗/E-ZhѢE-Z<b>O`>b>-ZhѢE-̗/E-ZhѢE-Z<bO`Oa/_|˗ϢE-ZhѢEhѢE-ZhѢEA̗/| ̗/|=W0|,ZhѢE-Z/_>-ZhѢE-Zx0|˗O`>a ˗ϢE-ZhѢŊhѢE-ZhѢE=O`80߿8p`>'0_|'p ,h „ 2l!Ĉ'R0_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢE-Zh`>-ZhE-Zh1_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢE-Zh`>-ZhѢE-Zh1_|-ZhѢEYdEYt@8`A&TaC!F8bE1"̗/_ƌ3f̘1cƌ%'p "Lp!ÆB(q"Ŋ/bd <0… :|1ĉ+ZH`> 4xaB 6tbD)VxcB$XA .dC%NXʼn H*\ȰÇ#JHŋ'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n…0 <0… 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?zO@'p "L`>$XA .dC%NXE5nG H@$XA ̗/_>$XA .dC%NXE5nǍ H@$XA ̗/_ .\p… .\p… .\`| H*\ȰÇ#JHE H@$XA ̗/_ .\p… .\p… .\`|(? 480| H*\ȰÇ#JH|̗O`|Y1_|,ZhѢE-Zh0_>,gѢE-ZhbD7߿'p "L`|-\p… .\p… .\p…3`|/_/|/| ̗/_ .\p… .\p… .0o`>$XA ̗/_ .\p… ̗/߿|.$oB [p…OO/߿_߿|O@ DPB >QD 8@O@ DP|[p… .\p!| ̷p!| ̷p… g0|O_߿|/߿ <0… :|1ĉ'p࿁  <0B˷p… .\pB̗/_>'0_|˗o`|!̗/_˗O`|˗/_ O'p "4/|/_>_>O`>? 4xaB 6tbD)2O?8_>$XР|/_| H*\ȰÇ'0|˗o` /߿'p| '0|o`0@ H g`> '| ߿߿| H*\ȰÇ#JH!|(| 80| $Hp`> $80_|8`A&TaC O`>o`̗O`O`>3o`/D "D!B"D!B`>  ̗/_>/_/_|$H|O@ DPB >,/_|0#'p|/_|O`| ̗/_ o`>$XAO@ DPB >QD-RO@'p| '0|/? /,hP`|'p "Lp!ÆB(q"Ŋ+0'p "Lp!ÆB(q"Ŋ'p 8p`O |8߿8`A˗? 4xaB 6tbD)V/|-ZhѢE-Z0 OO`> /| G A˗/,h „ 2l!Ĉ'R1_>0 <0… :|1ĉ+>O@'p| '0| O'p ˗/,h „ 2l!Ĉ'R1_>O`>/_>-ZhѢE-gѢŅgѢE-.1|-Z-R̗aO` gѢE-ZhѢŁ,Z0_|,Zh"| ̗/_>/_|˗o`|˗/_̗/_>+ˇ0| '0|YhѢE-Zh`>-.̗/_>-Z0|O`>'P/`|8`A&T0_>$XA .dC%NX"|/^D/_|/^xQa> /|̗`|c`'wŋ/^xE.^0_|.^x| ̗/_ '0_|˗/?70 ̗/_> <0B'p "Lp!ÆB(q"Ŋ)x"|xŋ/^xQb|/^xŋ/^ŋ˗ŋ/^xE]xŋ/^xb/"̗/_/^xŋ%wŋ/^xE.^0_|.^xE˗ŋxŋ/^x"|/^D/_|/^x"| ]xQa|/^xŋ/^ŋ˗ŋ/*̗/_>'0_|˗/| ̗/_>'0_|/_|(? 4xaBO@ DPB >QD-RwEwŋ_| ̗/| O?#/|/߿| H*$/,h „ 2l!Ĉ'Rhb/"̗/_/^0|+`̗O` /|ņ]xŋ/^xb/"̗/_/^0_|'P70߿70 ̗/_>'0_|'p ,h „  <0… :|1ĉ+Zŋ˗ŋ/*wŋwŋ/^xE.^0_|.^xb|]xE]xŋ/^xb 'p 4hРA <0… :|1ĉ+F̗ϢE-ZhѢE3O`>O`>,2̗/_>-ZhѢE-̗ϢE-ZhѢE3O`>/|/_|˗/ŁgѢE-FG0_>!g"|,ZhE-Zh1a>/_>{`>Y$0 <0!B$XA .d0a2̇0CСC:tСC:tСà O`>a ˗!C$XA 'p "Lp|/_|ˇ0_|˗/|/_'0_|˗/|cȐ|2dȐ!C 2dȐ!C 2dȐ!Ä70_|'P G_|˗/?O@ ̗/_$XA  <0… :|1ĉ+Zŋ˗]x`|'0߿|+O`G0|a> wb|/^xŋ/^ŋ˗]x`|˗O`>ˇ0_|'0_'0_|'P'p|/_| H ̗? 4xaB 6tbD)VH1ŋ˗/ŋxŋ/^|/ŋ/^xŋ)+0@ (0AO@ D_|)TP|*TPB *TPB *T0_>$XA .dC%NX"| ̇0|/˗/ŋxŋ/^|/ŋ/^xŋ)3_/_|'0_|.R̗/_wŃwa/.̗ŋ/^xŋ̗/@ /(0| H˗/_„ &/_„ &L0!|%La &L0aB'p "Lp!ÆB(q"Ŋ)3`|W0|)˗/ŋx|/_|˗0_|˗o`|˗/_/&̗ŋ/^xŋ̗/_'0_|˗_|`.̗/_wŃ |'p|O _>$XA .d(0_ 6lذaÆ 6lذaÆ 6laÆ 2̗/_ "̗aÆ .W0|[O`̗/| 6lذ|6lذaÆ 6lذaÆ 6lذa 6l0_|6l0_ 6l0_|'0_w0_>˗/?70,h „ .̗!C 2dȐ!C 2dȐ!C 2L!C 2,/_| 2\/C 2dȐ!C 2dȐ|2dȐ!C 2dȐ!C 2dȐ!Ä2dȐ!Âǐ!Å1dȐ!C 2dȐ!C ̗!C 2dȐ!C 2dȐ!C 2L!C 2,/_| 2\/C 2dȐ!C 2dȐ|2dȐ!C 2dȐ!C 2dȐ!Ä2dȐ!Âǐ!Å1dȐ!C 2dȐ!C ̗? 4xaB 6tbD)VH`> 4xaB O@ DP`| *TPB *TPB *L/,h „ 2l!Ĉ'Rh"|,h „ 2 <0|*TPB *TPB *T0_>$XA .dC%NXE$XA .d? 4xaB)TPB *TPB *T0a| H*\ȰÇ#JHE H*\P ,h B (? 4xaB 6tbD G"E)RH"E)Rd/E)O@ H*\ȰÇ#Jh0_>)RH"E)RH"|(RH |'p "Lp!ÆB(q|(RH"E)RH"E H"E  <0… :|1ĉH"E)RH"E)2̗"E˗/E)RH"EQH"E)RH"EG"E˗"E)RH|(RH"E)RH"E H"EQH"E)R/E)RH"E)RHa|)R0_>)RH"EH"E)RH"E)2̗"E H*\P ,h „ 2l!Ĉ(QD%J(QD%Jh0_>'p 8`A&Tx0… .\p… .\x0_>$XA .dC%NXE x`>  <0ƒ[p… .\p…  <0… :|1ĉ+Za|/'p 8`A&Tx0_| .\p… .\pa|8`A&TaC!F8bE12̗/E$XP ,h „ ˗o… .\p… .,/,h „ 2l!Ĉ'Rh"Fe/_>˗/_ƌ ˗1cƌ3&̗/cƌ3f̘1cƌ˗"|8`A&Tx0_| .\p… .\pa|8`A&TaC!F8bE12̗/E7p࿁ H*O@ wAO@ DPB >`|%J(QD%J(QD 'Q"C'?7p| 8pO@ ̗/,h „ 2l!Ĉ(QD%J(QD%Jh0_>'p 8P`'0_|'0_|˗/A $/_| H*\ȰÇ#̗OD%J(QD%J(Q|$Jd0 O@O`>˗/߿|˗O`> $H_|8`A&TaC!F4/D%J(QD%J(QDI`>  '0|8| $/_>$XA .dC 'QD%J(QD%J(`|%2O@'p| '0|70߿|#H A˗? 4xaB 6tbDI(QD%J(QD%J4/D 8`A (0| 70_|(߿8`A <0… :|1|$J(QD%J(QD%̗OD$J(`|$J(QD'QD%J(QD%J(`|%2'QD'QD%J0_>%J(QD%J(QD(a>%J4/_>%J(QćI(QD%J(QD%J4/D I(Q|I(QD%>̗OD%J(QD%J(Q|$JdOD ˗OD%J(a|%J(QD%J(QD ? 4xa*TPB˧PB *TPB *L/,h „ 2l!Ĉ'Rh"Fe/cƌ˗1cƌ3&̗/cƌ3f̘1cƌ˗b3̗/_ƌ3f̘0_3f̘1cƌ3fd/_Ƌ2f80_|3f̘1c|2f̘1cƌ3f̘a|/˘1|e̘1cƌ ˘1cƌ3f̘1cFe/cƌ˗1cƌ3&̗/cƌ3f̘1cƌ˗b3̗/_ƌ3f̘0_3f̘1cƌ3fd/_Ƌ2f80_|3f̘1c|2f̘1cFeQFe@'p "L80B *Ta|*TPB *TPB O@ DPB >QD-^0_e̘q`|2f̘1cƄe̘1cƌ3f̘1#|2^̗1cƁ˘1cƌ˗1cƌ3f̘1cƌ x1_ƌ˗/cƌ3fL/_ƌ3f̘1cƌ32̗/|3f/_3f̘1a|3f̘1cƌ3f0_O(? ,ϠA ̗/,h „ 2l!Ĉ(QD%J(QD%Jh0_>3O`>O`>I/_>%J(QćI(QD%J(QD%J4/D '0|Oa/_|˗O"B$X ,h B H 'p "L`| H*\ȰÇ#JHŋ˗b>/_>{`>e0 O|80_ ̗o H 'p "L`| H*\ȰÇ#JHŋ˗b>O`>s`(0_|c/|2R̗/cƅe̘1cƌ3f̘1#|2^w0_`>8p`>'0_|'p ,h`|$XA ˗OB *TP|*TP'p "Lp!ÆB(q"Ŋ/bd/_Ƌ a2Z̗/_ƌ+˗1|2f̘1cƌ3f̘a|/3_/_|'0_|2N̗/_ƌ+˗1|2f̘1cƌ3f̘a|/3/_> _> 7P`>8`A"̗/_„ &L0a„K0a„  <0… :|1ĉ+Za|/3`|W0|'˗/cƌ8P ,h „  <0… :|1ĉ+Za|/+/_|˗O`| ̗/߿|'0_|e/_3JO| H*$/,h „ 2l!Ĉ'Rh"Fe/cƌ˗1cƉ  <0B'p "Lp!ÆB(q"Ŋ/bd/_Ƌ2f80_|3f0@ H*,/,h „ 2l!Ĉ'Rh"Fe/cƌ˗1cF˗1|2f̘1cƌ3f̘a|/˘1|e̘b|2f\/_ƌ3f̘1cƌ32̗/|3f/_3V̗/cƅe̘1cƌ3f̘1#|2^̗1cƁ˘1c|32̗/cƌ3f̘1cƌ˗"|,h „ 2$ <0… :|1|$J(QD%J(QD%̗Oć H*\0,h „ 'p "Lp!| HA'p "Lp!ÆB(q"Ŋ/bd/_ƌ H*\P ,h „ 'p 8`A&Th0…O@ DPB >QD-^0_36̗/|3O@'p "L`|-L/,h „ 2l!Ĉ'Rh"Fe̘a|3f0 O@ DP|[0_>$XA .dC%NXE ˘1c|2fh`>  <0B˷0a| H*\ȰÇ#JHŋ˗1cƆe̘b| 'p@$XA ̗/_ O@ DPB >QD-^0_36̗/cƌ8'p "L`|-L/,h „ 2l!Ĉ'Rh"Fe̘a|3f0@$XA ̗/_ O@ DPB >QD-^0_36̗/cƌ8 O@ DP|[0_>$XA .dC%NXE ˘1c|2f/_F o?'p "L`|-L/,h „ 2l!Ĉ'Rh"Fe̘a|3 ̗/D78`A&Th0_|&̗? 4xaB 6tbD)Vx#|2f0_3ZO 7?8_>$XР|/_|̗? 4xaB 6tbD)Vx#|2f0_3ZO@'p|$H $H|#H A'p "Lp!ÆB(q"Ŋ/bd/_ƌ˗1cF H@o`| ̗/߿| ̗/_G A˗/A ̗? 4xaB 6tbD)Vx#|2f0_3ZO@'p| '0|/? /,hP`|$XA .dC%NXE ˘1c|2fh`>  '0|( /_|̗? 4xaB 6tbD)Vx#|2f0_3ZO@'p| '0|o`|#H A˗ A  <0… :|1ĉ+Za|3fl/_ƌ-˘o`>/_> o`>$XР|;x`| H*\ȰÇ#JHŋ˗1cƆe1_e̘Q`|Q̗/cƌ3f̘1cƌ˗1cƆe1_e̘Q`|Q̗/cƌ3f̘1cƌ˗1cƆe̘b3 ̗/_>e̘1cƌ3f̘1#|2f0_3Z̗1cFG1_3f̘1cƌ3fd/_ƌ˗1cF2f(0_|(˗1cƌ3f̘1cƌ ˘1c|2fh1_ƌ˗/|2f̘1cƌ3f̘a>8`A&T|6lذaÆ5lذaC`| 6lذaÆ 6lذaÆ 6lذaÆ5lذaÆ kذaÆ װaÆ ˗/_Ã5lذaÆ 6lذaÆ 6lذaÆ װaÆ *̗aÆ 6lh0_Æ 6d/_| װaÆ 6lذaÆ 6lذaÆ 6l/_Æ 6l0_ 6lذ`| 5lذaC`| 6lذaÆ 6lذaÆ 6lذaÆ5lذaÆ kذaÆ (_>$(0,h „ .̗/_>cȐ!C 2dȐ!C 2dȐ!C 2d0_> 2dȐ!|2dȐ!C cȐ!C ˗/C1dȐ!C 2dȐ!C 2dȐ!C 2d/C 2dȐ`| 2dȐ!C1dȐ!C˗!|2dȐ!C 2dȐ!C 2dȐ!C 2̗!C 2dH0_> 2dȐ!2dȐ!Âa| 2dȐ!C 2dȐ!C 2dȐ!C ǐ!C 2$/C 2dȐ?O@ DP…a| 2dȐ!C 2dȐ!C 2dȐ!C ǐ!C 2$/C 2dȐ| 2dȐa|c0_> 2dȐ!C 2dȐ!C 2dȐ!C cȐ!C ̗!C 2d_> 2dȰ`|1D/C 2dȐ!C 2dȐ!C 2dȐ!C1dȐ!C ǐ!C 2d/C 2dX0_|"̗!C 2dȐ!C 2dȐ!C 2dȐ!|2dȐ!CcȐ!C 2| 0 7P ,X0A $/_| /,h „ 2l!Ĉ'Rh"Fe̘a|3f`>O`>(˘0_|(˗1cƌ3f̘1cƌ ˘1c|2fh1| ̗`+/_70_|2˗/|2f̘1cƌ3f̘a|3fl/_ƌ-3O`/_ 3/_G1_3f̘1cƌ3fd/_ƌ˗1cF O`>a ˗/|壘/_ƌ3f̘1cƌ32̗/cƌ ˘1EO ̗/_ /_>`>8`A˗A'p "Lp!ÆB(q"Ŋ/bd/_ƌ˗1cF2f(0_|(˗1cƌ3f̘1cƌ ˘1c|2fh1_ƌ˗/|2f̘1cƌ3f̘a|3fl/_ƌ-˘1|壘/_ƌ3f̘1cƌ32̗/cƌ ˘1|(?#HP`| H˗/_> O@ DPB >QD-^0_36̗/cƌ'0| e/_|˘1cƌ3f̘1cFe̘a|3f`˗O`|̗/|(1_|(˗1cƌ3f̘1cƌ ˘1c|2fh1| O'P`  <`|%L(0_>$XA .dC%NXE ˘1c|2fh1|+`(1_|(˗1cƌ3f̘1cƌ ˘1c|2fh1_|/_|˗o`|'0_ +/|壘/_ƌ3f̘1cƌ32̗/cƌ ˘1|3f/_|˘1cƌ3f̘1cFe̘a|3f/cƌ˗b|3f̘1cƌ3f0_36̗/cƌe̘Q`|Q̗/cƌ3f̘1cƌ˗1cƆʗ? 4xaB 64ϡC̗/_>sСC:tСC:tСC СC̗ϡC:lϡC̗/_>sСC:tСC:tСC СC̗ϡC:lϡC̗/_>sСC:tСC:tСC СC̗ϡC:l0 <0… 'p O@ DPB >QD-^0_36̗/cƌ8`A&T@$X`| H*\ȰÇ#JHŋ˗1cƆe̘#|,h „ 2 ̗? 4xaB 6tbD)Vx#|2f0_3f̸0_Q̗/cƌ3f̘1cƌ˗1cƆe̘1cƅe̸0_3f̘1cƌ3fd/_ƌ˗1cƌ˗1|2f̘1cƌ3f̘a|3fl/_ƌ3f\/_ƌ ˘1cƌ3f̘1cFe̘a|3f̘qa|3./cƌ3f̘1cƌ˗1cƆe̘1cƅe̸0_3f̘1cƌ3fd/_ƌ˗1cƌ˗1|2f̘12(2ʈ!O@ DPB kذaÆ 6l`| 6l0_ 6lذaÆ 6lذaÆ 6lذa|6lذaC5lذaÆ 6lh0_ 6L/_Æ 6lذaÆ 6lذaÆ 6lذa| 6lذ|6lذaÆ 64/_ &̗aÆ 6lذaÆ 6lذaÆ 6l0_ 6lPa| 6lذaÆ ̗aÆ װaÆ 6lذaÆ 6lذaÆ 6l/_Æ 6l0_ 6lذaÆ װaÆ  <0… :|1ĉ+Za|3fl/_ƌ3f\/_ƌ ˘1cƌ3f̘1cFe̘a|3f̘qa|3.̗/cƌ3f̘1cƌ˗1cƆe̘1cƅe̸0_3f̘1cƌ3fd/_ƌ˗1cƌ˗1|2f̘1cƌ3f̘a|3fl/_ƌ3f\/_ƌ ˘1cƌ3f̘1cFe̘a|3f̘qa|3.̗/cƌ3f̘1cƌ˗1cƆe̘1cƅe̸0_3f̘QFeQF1P| H*\Pa| 6lذaÆ ̗aÆ װaÆ 6lذaÆ 6lذaÆ 6l/_Æ 6l0_ 6lذaÆ װaÆ kذaÆ 6lذaÆ 6lذaÆ 6̗aÆ 6T/_Æ 6lذaÆkذaÄ5lذaÆ 6lذaÆ 6lذaÆ װaÆ *̗aÆ 6lذaC5lذa|6lذaÆ 6lذaÆ 6lذaÆ 8`A&TaC!F8"E$XA ̗? 4xaB 6tbD)Vx#C$XA .dC%NH? 4xaBO@ DPB >QD-^ĘQFرcǎرcǎ;vرcǎ9ױcǎ-ױcǎ;vرcǎ;r̗cǎ;NO H*\ȰÇ#JHŋ3jc|;vq"| O@ DPB >QD-^ĘQFرcǎ80,h „ 2l!Ĉ'Rh"ƌ7r̘/_ǎ;v0 H*\ȰÇ#JHŋ3jQc|;vر"|'p "Lp!ÆB(q"Ŋ/b̨q#GuرcNJױcǎ;vرcǎ;n̗cǎ;Z̗/_ǎ;vرcǎ;v1_;vh1_;vرcǎ;vؑc|;vb;vرcǎ;vؑc|;vرcǎ;vرcǎ;vx1_;vcǎ;vرcǎ;v/_ǎ;vرcǎ;vرcǎ;^̗cǎ;vرcǎ;vرcǎ/ױcǎ;vرcǎ;vرcǎرcǎ;vQGuQGuQGut@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )a|#G9rȑ#G9rȑ#7rȑ#G9rȑ#G9a|#G9rȑ#G9rȑ#7rȑ#G9rȑ#G9a|#G9rȑ#G9rȑ#7rȑ#G9rȑ#G9a|#G9rȑ#G9rȑ#7rȑ#G9rȑ#G9a|#G9rȑ#G9rȑ# 'p@$XA .dC%NXE5nG!E O@ H*\ȰÇ#JHŋ3jȱǏ C08`A&TaC!F8bE1fԸcGAI`>8`A&TaC!F8bE1fԸcGAI`>8`A&TaC!F8bE1fԸcGAi0_|F9rȑ#G9rȑ#G̗/ȑ#G9rȑ#G9rH9rȑ#G9rȑ#GD? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK&O@ D0!,h „ 2l!Ĉ'Rh"ƌ7r#Ȋ򅬘/dȐ!C 2dȐ!C b 2dȐ!C 2dȐ!CJ'`> 4xaBO@ DPB >QD-^ĘQF=~)1|!'/dȐ!C 2dȐ!C Rb>BN/_Ȑ!C 2dȐ!C 2|󅜘_!C 2dȐ!C 2dH 91߿|!C 2dȐ!C 2dȐ rbB 2dȐ!C 2dȐ!%/| 2dȐ!C 2dȐ!CJ'0_ȉ 2dȐ!C 2dȐ!CO`2dȐ!C 2dȐ!C )1|!'/dȐ!C 2dȐ!C )$_>$XA ? 4xaB 6tbD)VxcF9v|󅜘_!C 2dȐ!C 2dH 91߿|!C 2dȐ!C 2dȐ rbB 2dȐ!C 2dȐ!%/| 2dȐ!C 2dȐ!CJ'0_ȉ 2dȐ!C 2dȐ!CO`2dȐ!C 2dȐ!C )1|!'/dȐ!C 2dȐ!C Rb>BJ̗_!C 2dȐ!C 2dH'p "Lh߿8`A&TaC!F8bE1fԸcGAJc!C 2dȐ!C 2dH'p "L_>$XA .dC%NXE5nG rbB 2dȐ!C 2dȐ!%O | Gp?8`A <0… :|1ĉ+Z1ƍ;zRb>3_+OcB 2dȐ!C 2dȐ!%O | Gp?8`A <0… :|1ĉ+Z1ƍ;zRb>BN/_Ȑ!C 2dȐ!C 2|󅜘_!C 2dȐ!C 2dH 91߿|!C 2dȐ!C 2dȐ rbB 2dȐ!C 2dȐ!%/| 2dȐ!C 2dȐ!CJ'0_ȉ 2dȐ!C 2dȐ!CO`2dȐ!C 2dȐ!C )1|!'/dȐ!C 2dȐ!C Rb>BN/_Ȑ!C 2dȐ!C RH߿| H/,h „ 2l!Ĉ'Rh"ƌ7r#H 91߿|!C 2dȐ!C 2dȐ rbB 2dȐ!C 2dȐ!%/| 2dȐ!C 2dȐ!CJ'`> 4xa„'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/$|!C 2dȐ!C 2dȐĘ/dȐ!C 2dȐ!C Rb HA <0… :|1ĉ+Z1ƍ;zRb2/dȐ!C 2dȐ!C Rb HA <0… :|1ĉ+Z1ƍ;zRb 2dȐ!C 2dȐ!CJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!% 1_Ȑ!C 2dȐ!C 2|!1 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐĘ/dȐ!C 2dȐ!C Rb 2dȐ!C 2dȐ!CJc!C 2dȐ!C 2dHBb2dȐ!C RH!RH!$@8`A&T(0,h „ 2l!Ĉ'Rh"ƌ7r#HBb2dȐ!C 2dȐ!C )1@$XA  <0… :|1+Z1ƍ;zRb 2dȐ!C 2dȐ!CJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1@$XA  <0… :|1ĉ+Z1ƍ;zRb 2dȐ!C 2dȐ!CJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1@$XA  <0… :|1ĉ+Z1ƍ;zRb 2dȐ!C 2dȐ!CJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!%0 <0a8`A&TaC!F8bE1fԸcGAJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!%0 <0a8`A&TaC!F8bE1fԸcGAJc!C 2dȐ!C 2dHBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!% 1_Ȑ!C 2dȐ!C 2|8`A&L/,h „ 2l!Ĉ'Rh"ƌ7r#HBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!% 1_Ȑ!C 2dȐ!C 2|8`A&L/,h „ 2l!Ĉ'Rh"ƌ7r#HBb2dȐ!C 2dȐ!C )1_HB 2dȐ!C 2dȐ!' i1_!C 2dȐ!C 2dH H* <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!C^rb!C 2dȐ!C 2dȋBN2dȐ!C 2dȐ!C y1_ȉB 2dȐ!C 2dȐ!/'p "L? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSF̗/_UVZ|ZjժU̗`|'P@$XA .dC%NXE5nG!˗/߿|/|/߿|)RH"E)RH"E)0_ /߿7P| H*\ȰÇ#JHŋ3jȱǏ C>̗o` /| ̗O`D)RH"E)RH"C˗/| G0_? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳi׶}wnݻyxpÉ7~yr˙7wztөW~{v۹w|xɗ7}zٷw~|׷~0 ;;PK6ddPK+AOEBPS/img/rollb.gif+YGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCO@ D <0… :|1ĉ+Z1ƍ;^̗ϣ|yѣG=zѣGqa>=zѣG=z|ѣG=zѣG=;_| ѣG=zѣG9C/_| ѣG=zѣG=jw`>'p`|˗O |7?O@ DPB >QD-^ĘQF3O`|˗`|˗_˗/_;ϣG=zѣG=zԘ`>/_>˗O`|_|˗`>=zѣG=zb|'0_|G0_˗/߿|08`> 4xA$XA .dC%NXE5no`>˗/߿|/_|˗_`> qȑ#G9rȑ#Gw0_|W0_ O|'p "4? 4xaB 6tbD)VxcF 8`A8|+X` ,(0_ ,X| H*\ȰÇ#JHŋ3jDb> {0@ H$XA .dC%NXE5̇0_>̷0|m3/|;`4jh1_|4jԨQF5jԨb3`>G0|5ja>5jԨQF5joaӨQ|iԨQF5jԨQc| ]̷0B O@ DP!`'p "Lp!ÆB(q"Ŋ/b80|-̗0_>9̧Q| ȨQF5jԨQF1w1|)̷0_> K/b>5jԨQF5j|a;a4jDa4jԨQF5jԨa>.c`| C`| W0_%w0_|5jԨQF5j0C$X A$(0_| WP`,80_ ̗o`| +`'p "Lp!ÆB(q"Ŋ/b(0F;`+/_|'0_'0߿| ̗o`|˗/? OG A'p "Lp!ÆB(q"Ŋ/b(0ƌs`> /߿|'0_| ̗/߿|/_|˗| ̗ AO@ DPB >QD-^ĘQ`>˗a̗_|˗/| /|/_>˗|7p <0… :|1ĉ+Z1|5`>'p`|'0_ /_˗_|`>'p`8p| H*\ȰÇ#JHŋ3 ̧Q|'0_|˗O`˗`| /__|˗O`0ӨQF5jԨQƇ4j`>`|/_/|˗/߿|'p $H A8`A&TaC!F8bE1fOƁ;Oƅ0ӨQF5jԨQƇ4j/|0@ H!D_>$XA .dC%NXEӨ`>Өa>4jԨQF5ZO@ DPaA$/_ ,X`+X0_,X` ,Xp` ,(0,h „ 2l!Ĉ'Rhq`[E̗a|/&w`/^xŋ/w"| ]`>'p 8`A&T ˗/a.^xŋ]xŋ/^xq`>̗O`|`|/_xŋ/"wŋ/^x|̗`|#/|#/_| W0_/^xb|]xE]tE9P8`>@'p `|$`>'p "Lp!ÆB(Q`|M8qĉ'N8qbA$8?(0_> /|/_˗o H*\ȰÇ#J8? 4xaB 6tbD)V\_>'0߿| /_|O`|K`>-ZhѢń,ZhѢE-ZO`> ߿|@/_|˗|'p`8`A&TaC!F0ĉ'N8qĉ'J7q&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉ8`A&TX? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qb8`A&T? 4xaB 6tbD)VxcF9jױ#|;vرcǎ;vر|;ױcǎ;vرcǎ;jױ#|;vرcǎ;vر|G0_>/_|˗o`|o |'p`>$XA .dC%NXE5n1| ̗o`>G0_>/_|/|رcǎ;vرcǎ53/|_|/_>/_ ̗`;vرcǎ;vcG0_|_|/_>/_ ̗`;vرcǎ;v1c|'0߿|˗/? 7P|7'p "Lp!ÆB(q"Ŋ/b̨q#lj (? ̗_| ̗O`|7_/_/8p ,h „ 2l!Ĉ'Rh"ƌ7rL/| '0߿|/|W0|˗O`|;a|;vرcǎ;vر|w0_|#O`|(@̗/߿|'0_> /O@ DPB >QD-^ĘQF)ױ#| uرcǎ;vرcǎ-ױ#| uرcǎ;vرcǎ-ױ#| uرcǎ;vرcǎ-ױ#| uرcǎ;vرcE$X`A$(0_'p "L`-40 < ,h 2l!Ĉ'Rh"F0coacb˘1cƌ3f̘1cF0co!|,h „ 'p A $/_ ,X| H*\ȰÇ#JHŋØa320_F2f̘1cƌ3f̘a> ߿ /A'p "Lp!Äk`| 5lذaÆ 6lذaÆ 6lذaÆ C/|3oa 6lPa>6l(0| 6lذaÆ 6lذaÆ 6lذaC'0| w0_Æ 6l0|̗o`|_|˗O`|'P O@ DPB >QD-^x0|#/_|̗/cƌ'0_|˗__˗/|˗_|˘1cƌ3f̘1cF'0| +/_|3f/_+/_|/_|˗_|'p࿁ /,h „ 2l!Ĉ'Rh"Ɓˇ0_>30 <0… :T/_>O|GP࿁ /_|8`A&TaC!F8bE/a| g0|1bĘ0| /|O`˗/|˗_|#F1bĈ#F#a|w0|1bĘ0|˗_| ̗O`|˗/|˗/_3`>1bĈ#F1b<`>0bĈ1b>Yg0F1bĈ#F1W0|1b(1|*;#F1bĈ#F +c>1b|aĈ#F1#02| o80,h „ 2lPa|6̇0Ç>|Ç>|Ç+a|>|C>T/_|>|Ç>|Ç>L |,h ,h „ 2l!|,h B H_>$XA .dC%NXE0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F0bĈ#FÈ#F1bĈ#F 'p "L+X`A H0,h_|*[Oa>1 ̇#F1bĈ#Fw0_|˗O`|̗/|;`̗0| ̗`>1ˇ#F1bĈ#Fg0_˗/|/_|3`3Oa>;0O@ DPƒ2dȐ!C 2dȐ!C 2dȐ!C +`|̗/|70_| w0_|̗_|/_>;`> 2d_> 2dȐ!C 2dȐ!C 2dȐa|g0_>˗O`>̗Oac(0|̗_/_>| 2dȐa> 2dȐ!C 2dȐ!C 2dȐ|g`>߿߿'p|G A|/߿|Gp`>#H| H*\h0C 2dȐ!C 2dȐ!C 2dȰ |,X?//߿|˗o8P $08`>O O@ H |,h „ 2L <0… :|1ĉ+Zl/|g0_˗O`| ̗/_>a>3/_>/_ 0ŋk/ŋ/^xŋw0|̗`|70|O@o`>$(0|_|_>_>  <0…1/C 2dȐ!C 2dȐ!C 2D!|1d`>w0C_> 2d_>1dȐ!C 2dȐ!C 2dȐ!ÃW0C 3|c0| cȐ!C cX0C 2dȐ!C 2dȐ!C 24a|1d`C| 1ǐ!C ǰ`> 2dȐ!C 2dȐ!C 2dh0 cȐ|-̧0C[!C 2a| 2dC 1C 1C 1C 1ĐAO@+ϠA 4/A g`> ˗ϠA4hРA 4h|  <0… :|1ĉ+Z,/b.R̗0_9̗a|+/ŋ拘ŋ/^xŋEW`> 4xaB$`>8` H ,8`>8`A&Ta>1dȐ!C 2dȐ!C 2dȐ!Cǐ!C 2dȐ!C 2d0Â2dȐ!C 2dȐ!C 2dȐ| cȐ!C 2dȐ!C 2Da| 2dȐ!C 2dȐ!C 2d`>1dȐ!C 2dȐ!C "ǰ`> 2dȐ!C 2dȐ!C 2dh0Â2dȐ!C 2dȐ!C cX0C 2dȐ!C 2dȐ!C 24a| 2dȐ!C 2dȐ!C1,!C b!b!b!b!2| H| H*\ȰÇ#J0_|)RH"E'p ", <(0BO@ DP!,h „ 2l!D"1bĈ#F1b 0_|EQ`#F1bD"1bĈ#F1b 0_|EQ`#F1bD"1bĈ#F1b 0_|EQ`#F1bD"1bĈ#F1b>O`|˗/|a ;/_|˗_>70_/_|E1bĈ#1_Ĉ#F1bĈ̗_|'0_ ̗`|O$H A$H|#(0_>˗o`|#(0_/A'p "Lp!ÆB$/b#F1bĈ#3/߿|G0߿|˗/߿|El/|̗O`|/| '0_>)1bĈ#F80_"F1bĈ#F|_'p _'p| $H A$HP`|/|/|˗/_> ̗ A8`A&TaC! ̗/|#F1bĈ#B̗`˗/A  G A  A @ o|(߿|o࿁8_>$XA .dCE/bĈ#F1bD H?˗_|/_>/A H? 4ϠAg0_>˗o`|+/_| ̗/_>8`A&TaC! O@ O@ DPB >Q|w0_> 70߿|˗/|%7_̗O`|/|'0߿|/|'N8qĉM8qĉ'N,`>'0_/| ̗`>&H0|0 ߿W?O@ DPB >`>%J(QD -'Q| I'`>#(QD%JtOD%J(Qb| I80|I,OĈ$J(QD(QD%J0|%0_| (1b>%J(QD$J(Q"C$XA O@,(0_ ,X`+X| ,80_ ,X`'p "Lp!ÆBX0D%JdOD-0D11Ă$JOD%J(a>%J0D [a>c/b>I1D%J(Q|%J(a>%̷0C$XA8| `'p "L? 4xaB 6tbĂ$J(Q"|˗`|#`|G0_| w0|%J\/b>%J(QD%J80D%J\`|O`| ̗o`| ̗o`|˗_|-'Qą (QD%J(QDI(Qą '0_˗o`|o`|/_[OD A'QD%J(QD (QD g0_>#/_ ̗O`>/_> GP`>$XA .| 2dȐ!C 2dȐ!C 2d!C 2dp`|(߿|7߿7P '߿O@#? 4xaB g0| 2d!C 2dȐ!C 2d(0C 2dp | ̗_70_ ̗_|˗o`|8P |,h „ 2l!Ĉ'Rh"ƌ8`A&T| '0_>˗o`|_| '0_|;` 6lؐ` 6lذaÆ 6lذaÆ 6lذaÆ `| ̗/?$X_ <0… kذaÆ 6lذaÆ 6lذaÆ 6l0a 6<? 4xaB 6tbD)VxcF9vױ|;vرcǎ;vرc|;ױcǎ;vرcǎ;vױ|;vرcǎ;vرc|;ױcǎ;vرcǎ;vױ|;vرcǎ;vرcG$XA O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-+ ;;PK|`++PK+AOEBPS/img/dcltab.gif-GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳO H*4 H*O@8`A Hp |,h ‚ H*\ȰÇ#JHŋ aĸ0|1̧`>8 A O@,X` O@ DPB >QD-^d#ƅ È`/_0>̇#F1bĈ#F0b\`> C/|0F1bĈ#F1;0@_7?70_|8p` /_|'P?`> ߿8P`>#(0AGP |߿߿ ߿| H*\ȰÇ#JHŋ g0|70|o`3`>W0|̗`C`> 3/a#/|`>0bĈ#F1bĈ1|'0|70_K``>+/_˗a> 'p࿁@ 7p| 7_|/߿|8P`>$XA .dC%NXE;`|̗0_|'0_| w0|w0|o`O`/_|/_>#O`>/| G0|aĈ#F1bĈQb|(߿7p O@ '0 _|'p|o |(߿_8_O`|#/|$o`| Oo@8`A&TaC!F8bE8@| G0| G_>08_#`>'P_>08_ ߿| @ (?0@_/ O@ H*\ȰÇ#JHŋ;`>+o` /| ̗0|'0_ O` '0|!G0߿|/_>˗O`a> '0|̇0_|1bĈ#F1b_ O(| /_|(߿80| /_|'P࿁7P/߿߿߿| `> /߿ o| (0|/_|˗|_ <0… :|1ĉ+Zx0F ̇c|a4`>aĈ#F1bĈc>3#ƂX0|È#F1bĈ#|1.g0Ḟ`>0>̇#F1bĈ#F0b\`> C| a|#F1bĈ#Faĸ0|1̗0|0F1bĈ#F1Èqa>0b,Oa|&˷0Ƈ0bĈ#F1bĈ`> 4xaB8`> 4xaB Hp |,H? O@ DX? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶuJ O@ DPB >QD-^ĘQF=b̗`|?~Ǐ?~NJǏ?~Ǐ?N̷0Ǐ?~Ǐ?~1b>~Ǐ?~Ǐ5Ǐ?~Ǐ?~a?~Ǐ?~|Ǐ?~Ǐ?~da|?~Ǐ?~`> 4xaB 6 'p "Lp!Æ8`A&TaC!F8bE!Èc|È#|1bĈ#F1b(0F-;`>0bH1F1bĈ#F1È#|̇#F0bĈ#F1bx1F1k#FaĈ#F1bĈb>1boa>1b#F1bĈ#FaĈ| aĈ|1bĈ#F1b#Fw0_>1b#F1bĈ#FaĈc|˗/F1̇#F1bĈ#Ɗ0bĈa>1!'p "Lp!ÆB(q"Ŋ/&̇#F1b1F1bĈ#F+È#F1b#F1bĈ#FaĈ#F1Ḟ#F1bĈ#Ɗ0bĈ#F#È#F1bĈc|1bĈ#FaĈ#F1bĈb>1bĈ#ƈ0bĈ#F1bX1F1b40 <0B H8`A&TaC!F8bEÈ#FaĘ0|1bĈ#F1b#F1̇c|aĈ#F1bĈb>1bh0F ȧ#F1bĈ#Ɗ0bĈ| '0_|8߿_/߿O$H | H*\ȰÇ#JHŋ aĈ#F'0߿|g0_>O`>Ø#F1bĈ#FaĈ#Ɓ;/| `|70|%̇1F1bĈ#F+È#Fw0߿|+o`>_#/a>0bĈ#F1bX1F1^O@ /߿|#/|_`>'p@$XP`>$XA .dC%NXń0bĈb| w0|70|o`>K`|È#F1bĈc|1b81|'0_70|o`>K/a>0bĈ#F1bX1F1J̇0| '0_|3o`>/_|˗`>È#F1bĈc|1b1_0bLoa>0bĈ#F1bX1F1F0F -0F1bĈ#F+È#ƈ+X` ,X| W| H*\ȰÇ#JHE  g?$XA$X |,hA$Xp`>4hРA Ϡ| 3h |'p "Lp!ÆB(q"Ŋ+/| g`|0_>ha>{/_|,ZhѢE-Z/a>泸0_>Ya> H*$+X_ +H0,h „ 2l!Ĉ'R80| !ga>,N0E#[a,ZhѢE-Zd`3b>C| Yh1b>+`>-ZhѢE;` 1_|%g0|1gѢňk`,ZhѢE-ZL`>+`|˗o`| ̗/߿|˗`> ˗/߿|˗/߿|˗/@o 8p| H*\`3/| 6lذaÆ 6lذaÆ `K`>˗/߿|'0|/_ #_>˗_'0߿|˗_˗/_>#` 6la|-/| #aÆ 6lذaÆ 6lذ|;` g0| ̗O`>_> +/| ̗_>/߿| ̗/|'0_ 6lpa|k/B80@8`A&TaC!F8?$8?#8`> ,O`| '0߿| 7P | O|˗/_˗/߿|/@?$XA .dC (0A (? 4xaB 6tbD)*/|0|˗_|O`>O``|__|/_>+bŊ+"̗a>XbŊ+VXqa>;o`>˗_|'P/߿|O| 7p?/?'? O|O@ DPB "/| Ç>|Ç>w0| {0a>.̗O`>|Ç3`>|Ç>|!|+a|"̇0C 0Ç>||3Ç>|Ç>|h0|{`>>dÇ>|p`>>|Ç>|Ç-`|0Ç =|Ç̷0Ç>|Ç>|0a>=TC{`|>|衇z O@8`A&TaC!F8bł/_| ˗|僘/_|˗ϢE-R̗/߿|hѢE-Zhb> 8`A8`A8`A'p "Lp!ÆB <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[~ ;ٴk۾;ݼ{ <ċ?<̛;=;;PK 32-PK+AOEBPS/img/confree.gif GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`Ê{`> 4xaB8`> 4xaB O@˗`8`A8`A&TaC!F8bEÈQa>0bĨ0|0_>ˇ#F1bĈ#F0bT`>1*̇0_>ˇ1a>1bĈ#F1>̇|aĈQaS#|1bĈ#F1bt`|'0|/_#/_3a|˗o` o`@ /_|˗O`| ̗/_8_7p| HO@ DPB >QD-^`| /_˗`>/߿|3`|O`|/|W0|3/|˗/|3a([`|1bĈ#F1bd`|/|+/|˗/a> 70_>˗_|/|g0_> ̗/_>)g0|g0_>/_ ̗/߿|g0F1bĈ#F`|_|/̗o`>G| GP`|OO 7_|7_|˗o|/| 8p|o|_|˗O`/_'p "Lp!ÆB(q"Ŋ+ |'߿ O@/|+H0|/|˗_|`>'߿'p |(@ O A/A/_|˗_|/߿|  <0… :|1ĉ+Z\0'p`|'0_o|7_ 8`>'p`|/߿|˗O`|80_80_/_|7p (? O@ o`>/_|'P?'p | O@ DPB >QD-:/|_| ̗`| '0_%G0߿| ̗_'0_>˗`>g0_> ̗/_>)G0߿|/|_|˗_>/_>.^xŋ/^H1|80߿߿ /_|˗/? O| 7p| ̗/|'0_ O'?/_ o@o`>GP`#(0_|/_'0_| /A8`A&TaC!F8bE]0|/^l`>1ŋ/^xŋ/xa>.^0|wa/^xŋ/^E xb|1̗0ņ.^xŋ/^xQ`3ŋ !̧0|xŋ/^xE.^d`/6̗0| ]L/ŋ/^xŋ/w"|]xa> (? O@$XР|O@ DPB >QD-^,0 <0‚ 0 <0… 'p   O@ O@ DPB >QD-^ĘQF=~RH%Mf ;;PK9rȑ#G9r1G9˗#G9rȑ#G9BǑ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9˗#G9rȑ#G9BǑ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>$XA .dC%NXE5n#GǑ#G9rȑ#G!ȑ#|qȑ#G9rȑ#G8r1_|9rȑ#G9rb>9r̗/G9rȑ#G9r#GǑ#G9rȑ#G!h0_|˗/|(߿/,h BO@ DPB >QD-^ĘQF870_ '0| 70|˗#G9rȑ#G9BDZ`>#/߿|'0|qT/_>9rȑ#G9r1ǂ`#O`>0_|9rȑ#G9rb>/|!G0| Qa|8rȑ#G9rȑ#| +/|!G0| Qa|8rȑ#G9rȑ#| G0߿|'0|'0 (߿7P ߿7P ,h|'p "Lp!ÆB(q"Ŋ/b̨q|%1a|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9˗#G9rȑ#G9BǑ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9˗#G9rȑ#G9BǑ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9O ,h „ 2l!Ĉ'Rh"ƌ7 Ǒ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9˗#G9rȑ#G9BǑ#Gȑ#G9rȑ#Gqȑc|8rȑ#G9rȑ#|9r/_>9rȑ#G9r1G9˗#G9rȑ#G9BO@ DPB .O@ DPB >QD-^ĘQF H*\ȰÄ H*\ȰÇ#JHŋ3jH`> 4xaB 6t? 4xaB 6tbD)VxcF9v/G=zѣG=zѣ|=zѣG=zѣGyѣG=zѣG=:̗_|=zѣG=zѣG8p ,h „ 2l!Ĉ'Rh"ƌ7r"| O@ DPB >QD-^ĘQF=^O| H*\ȰÇ#JHŋ3jȱnj  <0… :|1ĉ+Z1ƍ;z0@ H*\ȰÇ#JHŋ3jȱǍǏ?~Ǐ?~ܘ/_?~Ǐ?~c|?~Ǐ?~Ǐ?~Ǐ?~G H ,h „ 2l!Ĉ'Rh"ƌ7r1!| O@8P ,h „ 2l!Ĉ'Rh"ƌ7r1_|8`A˗/,h „ 2l!Ĉ'Rh"ƌ7r81_|8`A ̗/_>$XA .dC%NXE5nرa| H˗/,h „ 2l!Ĉ'Rh"ƌ7rx0_| H̗? 4xaB 6tbD)VxcF9v/@,h „  <0… :|1ĉ+Z1ƍ;O@ DPa|8`A&TaC!F8bE1fԸc|8`A&T0,h „ 2l!Ĉ'Rh"ƌ7r? 4xaB O@ DPB >QD-^ĘQF'p "Lp|8`A&TaC!F8bE1fԸ| H*\H0_>$XA .dC%NXE5n1@,h „ ̗? 4xaB 6tbD)VxcF9:̗? 4xaB O@ DPB >QD-^ĘQF'p "Lp!|8`A&TaC!F8!|,h ,h „ 2l!Ĉ'П <0…O@ DPB >QD$XA8`A&TaC!F0@,h „ &̗? 4xaB 6tbD 8`A&T <0… :|1D'p "Lpa|8`A&TaC!F`> 4xaB8`A&TaC!FH0_>$XA .D/_>$XA .dC%O@ DP H*\ȰÇ#J/@,h „ "̗/,h „ 2l!Ĉ'p "LpaB$XA .dC!П <0… <0… :|1D$XA .d(? 4xaB 6tbĆO@ DPB <0… :|1"D$XA .dX? 4xaB 6tbDO@ DP‚ <0… :|1C$XA .d? 4xaB 6tbDO@ DPB˗? 4xaB 6tbĆ H*\p!,h „ 2l!Ĉ ̗? 4xaB /_| H*\ȰÇ#2O@ DPB 8`A&TaC!FD`>$XA &̗߿O@ DPB >q!|,h „ 2l(? 4xaB 6tbă П <0B(0_| H*\ȰÇ#*O@ D8߿'p A H8`A&TaC!F4a>$XA ̗? <0… :|a|)O@ D(?  &L8? 4xaB 6tbDП <0a|8P`|8`A&TaC!:O@0 <0߿_&Lp ,h „ 2l!Ĉ-̗/@,h „ <0… :|!|O@$XA# 0a„8`A&TaC!F4a|8`A̗/0 <0… :|1"B O@ D?  &L8? 4xaB 6tbD"˗/@,h|O@'p "Lp!ÆB?8`AG?!B 'p "Lp!ÆBx0ā П 0 H`|'p "Lp!ÆBt0 (`> 4xa7߿%L0@$XA .dC擘`> 4? 4X0_| H*\ȰÇ˗/B$XAK0a| H*\ȰÇ#"'QD'QD%Jh0_> H*\p!,h „ 2l!Ĉ I(Q|I(QD%J40 <0… 'p "Lp!ÆB0D%̗/D%J(QD H*\Ȑ ,h „ 2l!Ĉ I(Q|I(QD%JT0 <0… 8`A&TaC!FtO"B <`|&L0a„ &L0a„ &L8`> 4xaB 'p "Lp!ÆB1DI0_|%J(QD'p "Lpa>$XA .dC% 71a|/߿|/_| ˗oĉ'N8q|'p "L ,h „ 2l!Ĉ 曘0_> '0_˗O`| ˗oĉ'N8q| 'p "Lh? 4xaB 6tbD ML/|O`|/Ă8qĉ'Nx0_ H'p "Lp!ÆB(b /_| ̗|'p ˗? 4xaB 6tbD囸0ĉ'N8qĉML/| ̗_|o|M8qĉ'N0O@/| #(0A $H_|8`A&TaC!Fx0_ 8qĉ'N8a| /|Ml/_|'N8qĉ7qa|'N8qĉ'>/_|'0_|˗O`>'0߿| '0_|˗/|K/_|'N8qĉ7qa|'N8qĉ'>/_|/_>70|/|˗/߿|/_>ˇ0_|&N8qĉ'̗o|&N8qĉ'N|O`> ̗_|˗_> '_/߿|/˗O@'P ,h „ 2l!Ĉ7qa|'N8qĉ'>'0|`>_/߿|__| 0 H*\ȰÇ#JO`˗_| /_>O@$XA .dC%̗o|&N8qĉ'N|`> ߿߿|__/߿70˗_|8`A&TaC!Fx0_ 8qĉ'N8a&Nx0_|7qĉ'N8`|7qĉ'N8q|M8`|˗oĉ8`A&TaC8`A <0… :|1ĉ̗"EG0_|)Rl0 <0… : <(0_>$XA .dC%N|/a>!˗/_|QHa|(RH"EQH"E)RX0|(Rd/_|G"ņH"EG"E)RHb| GA OO@ DPƒcȐ!C 2dȐ|2dȐ!C 2dȐ!C P`|2dh`>8|'p "Lp|1dȐ!C 2dP`| 2dX0| -ǐ!C 2dȐ| ˗/C 80$/_>$XA . 2dȐ!C  ̗!C | 1dȐ!C 2d80C ? 40'p gРA 4hРA <0… :|0_>!/|˗O`|O`>'0_|!B"D "O@  ̗/A 4hРA 'p@$XA .dà 8? 4xa /?__ '߿| H*\ȰC>0 O@ ̗/*TPB *Tx0B *T`|*TPB80,h „ 2laB <0@_@_'P ,h „ 2la>|/_>\0 H*\ȰÇ 8? 4xa_>'0߿| /_>'0B *TPB SPB ̗/B *TP |'p "Lp!Æ.O@$XA o`/_>˗/|/_| *TPB * *TP|)TPB *TPSPB *TPB *TP‚*TPB˧PB */B *TPB *,/B *TPB *TPB ̧PB *,/_>$XA .dC%NXE5n0_ǎױcǎ;vرcǎ;.ױc|qO@ DPB 'p "$0 <0… O@ DH`> 4xaB 6, sСC˗ϡC:tСCsh0C:,/_>9tСC С|:tС|9t0C:t0_| s0_|a|:СC&̗/C 9tСC С|:tС|94!|`> a>:t0a|:TϡC:T/_>$XA%L0a„ &LH0_|  ̗0|'0_|70_|/_| ̗/_„ K0a„ &Lp`|&LP` &L0a„ ˗/a„ K0a„ &L`|&/a̗O`| /_|_|KP`|&L/_„ &L0a„˗0a„%L0a„ &LH0_| &L(0_„ &L0a„˗0| ̗`| ̗/_/_>%L(0|8`A˗/߿| 0 H`|4h | H*\Ȱ|9t0C:t0_|*СC*̗/C"̗O`| '0߿|/߿|sx0_|sСC˗ϡC:tСCsPa>:tPa|0a|70_|˗/|˗|9tϡC:L/_>sСC˗ϡC:tСCsh0C:,/_>%p`>s0_|*|9ϡCsPa>˗`>_>$XA  ̗/„.\p„[`̷p|-\X0_| .,o„[X0… ˗o…-L/|/| .\P`|&̷p… &̗/…%'0_|'0_|/_/_>/_|/_|/߿| ̗/_˷p‚.L`/_'0_|˷p|-\`#/߿| W0_|70|8߿8`Aw|O@$Xp`> 4h0_| 4H0/|/߿| '0_/|O`>O`|/߿| ˗/A 4(0A `|O`˗_| ̗ϠA ˗ϠA ϠA//_| '0|_|4h`| 4(0A/A gРA ˗ϠA 380| '0|'0| /_>O |/߿˗߿_>$80_| ,X` ,X` (߿|'_'߿|O@ /_> ̗/"`#/| '0|̗O`> ˗!B̗O`|'0_|'0_|˗o`| ̗/_>ˇ!B'0| 70?/߿o߿| _/߿˗` ,80_ ,/Ao`@O@ /_> O@ A#(0߿| GP`| '0|G|'p ˗A/|O`/߿|O`>'0_w '0| '0_O`>/| '0߿| '0_| '0A;x 7p ̗o`> ̗O` ̗/| '0߿|/|8p8p8p ̗O`| 70_|/|/_> ̗o˗? 4x0AO`>'0߿|O`>˗/| O@o? ̗/_ ,Xp` ,X_>˗/?70߿? 4xp |,h |? 4/_|˗o`/_'0| ̗/_> ̗/A3hp`|/_| ̗/_'0_|'p A$80_| ,Xp` ? 4xaB ˗!C1dȐ!C 'p "߿8`A&TaÁsh0˗o`>O`˗O`>'0_|s/_>9<ϡC˗/C 9tСC !|O| H*\Ȱ|94? | o`o`o`>$H0_| ,Xp` ,X@ /߿| H˗/B SPB ߿| H˗/aB $H A 0@? 4xaS0B *T`|*DOB!̧PB˧PB*T0| *TH0_| /_| *Da> *4/_> )TPB ˗OB*Tx0| ̗/B ˗/B SP| /_| *T/_> "̧PB O`|*T_|*̧PB *,/_> SP|/_>*T0_| *DOB '0_|)T0a|*T0B 30߿|/,h BKP` &L0aK0| &L`>/?O@ DH0_| &L(0_„ O_>$XA˗0a„%L0@ /߿|? 4x!|%L80_„ &L0|%L_ &`'P ,h BK0aB&L`'p ,h K0aB&LP`>0@ H ˗/a&L0a„ ˗/a„%L0|/_>&L`|&LP` &$`>/a„ ˗/a„ K0aB _|%L0!|%L80_„ &L0|%L_ &`˗/_„ ̗/_„  ̗0a„'0߿|K0aK0aB&LP`>/_| &LH0_| ̗0a„ &L(0_  ̗0a„ &L0|%L0@8`A&TaÁsPa>:tPa|СC˗ϡ:tСÄsPa>:tPa|:TϡC:T/_>9tСÁs_>:t0a|:TϡC:T/_>sСC˗!|:tP`|:ϡC:L/_>sСC˗ϡC:tСCs0C:/_|СC&̗/C 9tСC С|:tС|9LϡC(@$XA"D!B"DX0_|"Dh0B"D!B ˗!B C!B"D|!Dx0B"Da|C|"D!B",/_>"4!B"D!Bˇ!B!D!B"D`|"D!B"D`|"Dx0B"D!B ˗!B C!B"D|!D|"D!B"4/_>ˇ!B"D(0_|"Dx0B"D!B*|8`A ̗0a„ &L0!|%L0| &L0a„ ̗/_„%L0a„ ˗/_„ K0a„ &Lp`|&LP` &L0a„ ˗/a„ K0a„ &L`|&D/a„ &L/_| &4/a„ &L0aK0aB&L0a„ &$/_ &/a„ &L0aBK0a &La|&Lx`> 4xaB 64 

$XA .d0_ 6lذaÆ 6lذaÆ 6T/_Æ 6l`>8`A'p`>$XA .d_|:tСC:tСC:$/C:tx`>8`A H? 4xaB 6/C:tСC:tСC СC*O@` H*\Ȱ|:tСC:tСC:tH0_>:t!|,hP ,h „ 2l0_>:tСC:tСC̗ϡC:tX`> O@ DPB 'p@$XA .dC%NXѢB <0… :|1ĉ 'p@$XA .dC%NXѢB <0… :|1ĉ 'p`>$XA .dC%NX"C <0… :|1ĉ'p ,h „ 2l!Ĉ'Rh!|O@ DPB >QD(? 4xaB 6tbD)V`>8`A&TaC!F8|XbŊ+VXbŇ  <0… :|1ĉ˗bŊ+VXbŊ#˗bŊ+VXbEUXbŊ+VXb|UXbŊ+VXbŊ+VXbŊ+VXC*VXbŊ'p "Lp!ÆBL <0… :|1M8qĉ'p  O@ DPB >`> 4xP ,h „ 2l!Ă1bĈ#FD0 O@ DPB >Qć H A$XA .dC"D!B0'p "Lp!ÆB(q"Ŋ 8 A$XA .dС@O@ DPB 'p | H*\ȰÇ#JHň H? 4xaB 6,П8`A&TaÁ (? 4xaB 6tbD)Vx!| O@ DPB 8P ,h „ 2L0 H*\ȰÇ#JHŋ'p`>$XA .d(? 'p "Lp!Á  <0… :|1ĉ+Z"|'p "LpaB$ <0… ˗? 4xaB 6tbD)VxcƂ˧QD$(? 4xaB ˗/,h „ 2l!Ĉ'Rh"ƌ ˗OF HP ,h „ ̗? 4xaB 6tbD)VxcƊӨQ!@$ <0…O@ DPB >QD-^ĘQc|5"O@8`A&T0_>$XA .dC%NXE5̗oƁ H?$XA " <0… :|1ĉ+Z1F6nП O@ DP| .\p… .\p!|[_.\p… .\p…-\pB$Xp ,h „ [p… .\p… '0_ [p… .\p… p… 8` H*$o… .\p… .L`/_/_|'0_|˷p… .\p… ̷p…8` H*o… .\p… .L`| ̗_>/_/|[p… .\p… ˷p…8` H*o… .\p… .L`O`>_ '0… .\p… .\0_ .,П  <0B.\p… .\p„70| '0|`> <0… :|1b|$J8?8`A&T0… .\p… .\0_>'0| '0|_| ̷p… .\p… "̗o…  O@$XA .̷p… .\p… &̗/_>O`>˗/| ̗/_>.\p… .\pƒ[p…8? 4xaB 6tbD)VϢE-Zh_,ZtП H*\/C 2dȐ!C 2dp`> 2dȐ!C 2da|1dȐBO@ DPB'p "Lp!ÆB(q"Ŋ/b̨`|mX?8`A&Tp`|8`A&TaC!F8bE1f(0_|6n<П H*\X0_|8`A&TaC!F8bE1f0 H*<П H*\x`>8`A&TaC!F8bE1f08`A&T?8`A&T0!|'p "Lp!ÆB(q"Ŋ/b̘`>'p "Lp?O@ DPB80,h „ 2l!Ĉ'Rh"F H? 4xaB 'p ,h „ 2$08`A&TaC!F8bE1.O@8`A&T!@'p "Lp!Ä Hp ,h „ 2l!Ĉ'Rh"E$X? 4xaB O@$XA .dP |,? 4xaB 6tbD)Vx|,H? 4xaB O@$XA .d0!|,h0,h „ 2l!Ĉ'RX`> 4(? 4xaB 6П H*\Ȱ H8`A&TaC!F8A$XA H*\ȰBO@ DPB ̗!|,h B H*\ȰÇ#.O@ D0 ̗? 4xaB 6lП H*\ȰÃ=T0 <0… :8`A&TaC8`A;x40 <0… :|1C$XA ˧PB *TP!AO@ DPB ̗Ç>|x`> 4xaB H*\ȰC=|Ç8? 4xaB 6tx0_>|Ç>|Ç{Ç'p ,h „ 2l`|>|Ç>|ÇÇ:O@$XA .d|>|Ç>|Ç>̗Ç>tП H*\ȰÃ=|Ç>|Ç>|/Ç>|?8`A&TaC{Ç>|Ç>|0_>|!@'p "Lp!ÆÇ>|Ç>|a|>|CO@ DPB ̗Ç>|Ç>||>|C  <0… :|Ç>|Ç=|Ç8? 4xaB 6tx0_>|Ç>|Ç{Ç'p ,h „ 2l`|>|Ç>|ÇÇ:O@$XA .d|>|Ç>|Ç>̗Ç>tП H*\ȰÁ 8? 4xaB 6tbD)V`>'p "Lp!Æ 8? 4xaB 6t8`>'p "Lp!ÆB(q"Ŋ'p@$XA .dP!@'p "Lp!Æ 'p`>$XA .dC%NX"C <0… .O@$XA .d!A <0… :|1ĉ+Zd08`A&TaÅ  <0… :,0@ H*\ȰÇ#JHE  <0… 2O@$XA .daA O@ DPB >QD-:O@$XA .dؐ!@'p "Lp!Æ ˗Ç>|Ç>||=|Ç8? 4xaB 6th0_|>|Ç>|Ç˗Ç>tП H*\ȰÇ#JHŋ3jȱnj  <0B H*\Ȱ!A$XA .dC%O@ DPB 'p "Lp @'p "LPa .\p‚.\p… .\p… [p… .,o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷p… .\X0_| .\p… .\pB.\p… ˗o… O@$XA *̷Pa| W0B /߿8`A˗? 4xaB 6tbDM/_|7`>/,h|!D!B8? 4xaB -L/|-D`>.'0|'0_|-\(`> 4xaB 6O@ DPB 54`˗_|/|W0| pa|6lؐ @'p "LPa/|'0߿|O_>$X@$XA .d? 4xaB &`>_|` /߿ /_8`Aw<П H*Toa|O`|'0߿|`˗O` ˗o… .\0_ .\p| 70|/_>'0|'0_|-\(0_| .\@'p "LPa ˗o`| /_|˗o`|'0߿|[P`|.\p… [p… *̷Pa| ̗/_>˗/| ̗`/_|  ̗/… .П H*To…-\p[p… &̗o… .\0… [p…˷p… 'p ,h „ [pa| .\p`|.\p… [p… *̷p|.\p|-\p  <0B.\p… ˗o… .\0_ .\p| .\p…˷p… 'p ,h „ [p… .,/_ .\pa|.\p… -\p… ̗/… .П H*To… .\`|.\p… [p… *̷p… .\X0_| .\@'p "LPa .\p‚[p… &̗o… .\0… .\pa|-\p  <0B.\p… ˗o… .\0_ .\p| .\p…˷p… 'p ,h „ [p… .,/_ .\pa|.\p… -\p… ̗/… .П H*To… .\`|.\p… [p… *̷p… .\X0_| .\@'p "LPa .\p‚[p… &̗o… .\0… .\pa|-\p  <0B.\p… ˗o… .\0_ .\p| .\p…˷p… 'p ,h „ [p… .,/_ .\pa|.\p… -\p… ̗/… .П H*To… .\`|.\p… [p… *̷p… .\X0_| .\@'p "LPa .\p‚[p… &̗o… .\0… .\pa|-\p  <0B.\p… ˗o… .\0_ .\p| .\p…˷p… 'p ,h „ [p… .,/_ .\pa|.\p… -\p… ̗/… .П H*To… .\`|.\p… [p… *̷p… .\X0_| .\@'p "LPa .\p‚[p… &̗o… .\0… .\pa|-\p  <0B.\p… ˗o… .\0_ .\p| .\p…˷p… 'p ,h „ 'p "Lp!Æ8`A&T!|6lذaÄ H*\ȰA$XA O@$XA .O@ DPB 'p "Lp!C5lذaÆ 8`A&Ta H*П H*\0 <0… O@ DPBkذaÆ 'p "Lp!Æ8`A&T?8`A&TaC!F8bňYhѢEhѢň  <0… :|1ĉ+F̗ϢE-Z/E-FO@$XA .dC%NX1b|-Zh|,Zh1"@'p "Lp!ÆB(q"ŊhѢEgѢE8? 4xaB 6tbD)V/E-Z/_>-ZП H*\ȰÇ#JHb|gѢE)gѢE8? 4xaB 6tbD)Vl08`A&TaC"D!&O@$XA .dC%NX!| O@ DPB >T/D!B?8`A&TaC!F8bE ? 4xaB 6tpa|!BbBO@ DPB >QD'p ,h „ 2l| B"Ą  <0… :|1ĉ+>O@$XA .dCA"D 8? 4xaB 6tbD)V/_|-Zhb|-Z?8`A&TaC!F8bEhѢEgѢE8? 4xaB 6tbD)VϢE-Z/E-FO@$XA .dC%NXE5n,/G+'p ,h „ 2l!Ĉ'Rh"ƌ7̗#G8? 4xaB 8`A&TaC HO@ DPB H*\Ȱa|:tСC8? 4xaB -\p… ̗/… 'p ,h „ O@$XA .dp`|:tСà  <0B.\p… ˗o…[p… ̗/… .\p|.\p… O@$XA *̷p… .\X0_| .4o… .\P` .\pB-\p… .4П H*To… .\`|.\X0_ .\p.\p… ˷p… .\ @'p "LPa .\p‚[pa| .\p…[p… .̗o… .\pAO@ DP| .\p…˷p‚.\p… ˷p… .\/… .\pB  <0B.\p… ˗o…-\p… ̗o… .\0_ .\p…8? 4xaB -\p… ̗/… [p… .$/… .\pa| .\p… 'p ,h „ [p… .,/_ ̷p… .\H0_ .\p|.\p… O@$XA *̷p… .\X0_| .,o… .\`| .\p…-\p… .4П H*To… .\`|.\X0… .\p!|.\p… [p… .\h?8`A&T0… .\pa|-\` .\pB-\p… ˷p… .\ @'p "LPa .\p‚[pa| .\p…[p… .̗o… .\pAO@ DP| .\p…˷p‚.\p… ˷p… .\/… .\pB  <0B.\p… ˗o…-\p… ̗o… .\0_ .\p…8? 4xaB -\p… ̗/… [p… .$/… .\pa| .\p… 'p ,h „ [0_|˗/|'0… ˗/… [p|̷pB-\p… ˷p… .\ @'p "LPa O`|`>.\_|.\X0… [(0… ˷p… .\/… .\pB  <0B"̗`|'0_| ̗/_/_oB[`| -\_˗/| ̗/|-\x0_[p… ˷p… .\ @'p "LPa/|'0_'0|_|  ̗/…˗` W0߿|_> '0_ w`>8`A&TPa| 2dȐ!C 8? 4xaB -D`+_>W0_>o[ |'P`>$XA O`>/|!D`|80,h „ *̗!C 2d0!@'p "LPa/|/|/_| ̗/…˷paA߿| H/|'`> <80_ H*\0!,h „ 2l?8`A&T0„ '0_> W0߿| ̗/| '0_| O@ D8߿| H/|˗_| ̇!ƒO@ DPB8`A&TaC  <0B*̗/_>70_| ̗/_'p| ,0 QD#gѢE-Zh"EO@ DPB >QD#gѢE-Zh"EO@ DPB >QD#gѢE-Zh"EO@ DPB >QD#gѢE-Zh"EO@ DPB >QD'p@$XA .dC%NX @'p "Lp!ÆB(q"Ŋ 8p ,h „ 2l!Ĉ'Rh?8`A&TaC!F8bE ? 4xaB 6tbD)V<П H*\ȰÇ#JHC <0… :|1ĉ+O@$XA .dC%NX!|'p "Lp!ÆB(q"Ŋ8? 4xaB 6tbD)V|0@ H*\ȰÇ#JH"BO@ DPB >QD!˗ϢE-ZhѢE  <0… :|1ĉ+B̗/E-ZhѢE8? 4xaB 6tbD)VxcF9v?8`A&TaC!F8bE1fԸcG8? 4xaB 6tbD)VxcF9v?8`A&TaC!F8!|,h „ 2lX? 4xaB 6tbD 'p ,h „ 2l!Ĉ'"G"EQH"E)RП H*\ȰÇ#J0E):̗"E)RHCO@ DPB >QD(RHa|)RH"E'p ,h „ 2l!Ĉ'"G"EH"E)R?8`A&TaC!F8a>)Rt/E)RH"Ň  <0… :|1ĉQH|(RH"E)>O@$XA .dC%ND"EG"E)RH!@'p "Lp!ÆB(q"|)R0_>)RH"E8? 4xaB 6tbDH"EQH"E)R|П H*\ȰÇ#J0E):̗"E)RHCO@ DPB >QD(RHa|)RH"E'p ,h „ 2l!Ĉ'"G"EH"E)R?8`A&TaC!F8a>)Rt/E)RH"Ň  <0… :|1bD$"'QD 'QD%J(QCO@ DPB >1?I4OD%̗OD%J(Qć  <0… :|1bDO@ w$XA .dC%N,П H*\ȰÇ#FO@ H| ,ϠA 3(0_| 4/_>$XA .dC%N,П H*\ȰÇ#FO@8` 4X0_|/_O`/_'0߿|4hp`| H*\ȰÇ#JX?8`A&TaC!FП 'p A ,Xp`'0_>'0߿| '0|/߿| W`'p "Lp!ÆB(qbAO@ DPB >1"@,? W`(߿_(0| /|˗/|8p|8`A&TaC!F8 @,h „ 2l!Ĉ'O@,X|'`>O| '0_||'p O@ DPB >QĂ H*\ȰÇ#JX?#H A/_> /_>O`O`|'0A ̗? 4xaB 6tbD 'p "Lp!ÆB(qA A O@#AA$X`| H*\ȰÇ#JX? 4xaB 6tbD 'p| H*\Ȱ|:tСC:taC$XA .dC%N$'p "Lp!ÆsСC:tСC 8`A&TaC!F8Q ? 4xaB 6/C:tСC:tСC:tСC8 A$H0,h „ 2l80_>:tСC:tСC:tСC'p A H| H*\Ȱ|:tСC:tСC:tСC:<П'p 'p "Lp!ÆsСC:tСC:tСC:t @O@ O@ DPB СC:tСC:tСC:tA  <0… ̗ϡC:tСC:tСC:tСà  b| (P@1|'0|'0|˧0P@ Tg>˗_|˗o`˗/߿| ̗/|˗`/_>/_>/_>'0_|@ (К/|/߿|'0_| ̗`#`>__|@˗/_˗_| H*\ȰÇ#JHŋ3jȱǏ'0| G0|˗/|'0|˗/| ̗/| ̗o`  <0… :|1ĉ+Z1ƍ;zH0| '0_/_>'0|'0|'0_>/߿|/߿|'0_|'0_> A $H A $| '0_|G0_| O'p`(0_|(| @/_>'0_| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˖b|"棙/_E70_|8? 4xaB 6tbD)VxcF96̗_|X0_|/_1| 拘/_ǎ;vرcǎ;v0|ױ`>/_| ב`uرcǎ;vرcǎ 0߿| ˗/|1_ 'P ,h`| <0… :|1ĉ+Z1ƍa|uDa|u̗_| ב`uرcǎ;vرcǎ!|'p ̗O`> ̗!B(? 70_ ,80_O@ DPB >QD-^ĘQFG0_|u,/_> /_|`#|7`>8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF`> 4xaB 6tbD)*O@ DPB >QD-^ĘQƃ8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE1fԸ`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE5n< ? 4xa„8`A&L ? 4xa„8`A&D? 4xaB 6tbD)VxcFO@ D0a>$XA O@ D0a>$XA O@ DPB >QD-^ĘQƃ8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE1fԸ`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE5n< ? 4xa„8`A&L ? 4xa„8`A&D? 4xaB 6tbD)VxcFO@ D0a>$XA O@ D0a>$XA O@ DPB >QD-^ĘQƃ8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE1fԸ`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE5n< ? 4xa„8`A&L ? 4xa„8`A&D? 4xaB 6tbD)VxcFO@ D0a>$XA O@ D0a>$XA O@ DPB >QD-^ĘQƃ8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE1f(0_|- <0a| H& <0a| H" <0… :|1ĉ+Z1˗a| 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨_˗oa>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE570|- <0a| H& <0a| H" <0… :|1ĉ+Z1k/߿| 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨_|5O@$ ? 4xa„8`A&L ? 4xa„8`A&D? 4xaB 6tbD)VxcFW0|- <0a| H& <0a| H" <0… :|1ĉ+Z1ƍ'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨q| H& <0a| H& <0!| H*\ȰÇ#JHŋ3jx0@~,h „ 'p "L0@~,h „ 'p "L0,h „ 2l!Ĉ'Rh"ƌ7 <0a| H& <0a| H" <0… :|1ĉ+Z1ƍ'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨q| H& <0a| H& <0!| H*\ȰÇ#JHŋ3jx0@~,h „ 'p "L0@~,h „ 'p "L0,h „ 2l!Ĉ'Rh"ƌ7 <0a| H& <0a| H" <0… :|1ĉ+Z1ƍ'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨q| H& <0a| H& <0!| H*\ȰÇ#JHŋ3jx0@~,h „ 'p "L0@~,h „ 'p "L0,h „ 2l!Ĉ'Rh"ƌ7 <0a| H& <0a| H" <0… :|1ĉ+Z1ƍ8`A&TaC!F8B$XA .dC%NXE˗OF4jOF4jO4jԨQF5jԨ!|'p "L0B *$OB ̧PB SPB'p "Lp!ÆB(q"Ŋ/b̘_2f,/cF2f$/cF2f/cƌ3f̘1cƌ3˗_ ˘` ˘`˘1cƌ3f̘1cƌ˗1|3̗1#|3̗1|3f̘1cƌ3f̘1cF2f$/cF2f$/cƁ2f̘1cƌ3f̘"|O@ DPa> *TH0B *$OB ̧PB O@ DPB >QD-^Ę1_>2f,/cF2f$/cF2f/cƌ3f̘1cƌ3/cƂ2f$/cF2f$/cƁ2f̘1cƌ3f̘1c|˘` ˘` ˘q`3f̘1cƌ3f/_|3̗1#|3̗1#|3̗1cƌ3f̘1cƌ˗/cF2f$/cF2f$/cƁ2f̘1cƌ3f̘!|'p`|'p "L0B *$OB ̧PB SPB'p "Lp!ÆB(q"Ŋ/btOa2B̗/|3̗1#|3̗1|3f̘1cƌ3f0|w1_|/_>2f$/cF2f$/cƁ2f̘1cƌ3f̘!|'p|$H A$H0|  <0a| *T`> *TH0B *? 4xaB 6tbD)VxcF˗a|So|7۸1F6nܸqƍ7nܸ1_>6s/_| mܘo|7ۨ1ƍ7nܸqƍ0@'߿8`A|;80 ӨQ`>ӨQ`>ӨQF5jԨQƆ  <0| *T`> *TH0B *$OB  <0… :|1ĉ+Z!|'p`O@ DPa> *TH0B *$OB ̧PB O@ DPB >QD-^0߿|̗/߿|3̗1#|3̗1#|3̗1cƌ3f̘1cƌ/_|2f,/cF2f$/cF2f/cƌ3f̘1cƌ/|eh0_ƌeH0_ƌe80_ƌ3f̘1cƌ3fO@$XA SPB)TPB*TP!| *Tp`>$XA .dC%NXE(?/,h „ 8`A&TaC!F8B$XA .dC%NXE)̗/߿|3 <0a| H& <0a| H" <0… :|1ĉ+ZaeX0@~,h „ 'p "L0@~,h „ 'p "L0,h „ 2l!Ĉ'Rh"F ? 4xaB 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨q| H& <0a| H& <0!| H*\ȰÇ#JHŋ'0A O@ DPa>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE /|˗1c| H& <0a| H& <0!| H*\ȰÇ#JHŋ+`|˘`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE /|˘`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE (?80,h „ 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̨q| H& <0a| H& <0!| H*\ȰÇ#JHŋ3/F'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b̘/߿|2f, ? 4xa„8`A&L ? 4xa„8`A&D? 4xaB 6tbD)Vxc|eX0@~,h „ 'p "L0@~,h „ 'p "L0,h „ 2l!Ĉ'Rh"F3/߿|(1| 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/bl0 /_| $H_|$80|  <0a| H& <0a| H" <0… :|1ĉ+Za 0| 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/b|_>壘/߿|(?  <0a| H& <0a| H" <0… :|1ĉ+Z!|'p`8p˗oo'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/bt_ o"|'p A+XP`>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE/A ̗o`>#o`>'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/btO`|3B <0a| H& <0a| H" <0… :|1ĉ+Za>  <0| H& <0a| H& <0!| H*\ȰÇ#JHŋ'P  <0| H& <0a| H& <0!| H*\ȰÇ#JHŋ3̧Q| H& <0a| H& <0!| H*\ȰÇ#JHŋ3'P ,h „ 'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/bd|'p "Lpa>$XA O@ D0a>$XA O@ Da>$XA .dC%NXE ̗/cF8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE12'0|/_ƌ'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/bdO`/_ƌ'p "L0,h „ 'p "L0,h „'p "Lp!ÆB(q"Ŋ/bdO`/cƂ8`A&L? 4xa„8`A&L? 4xaB8`A&TaC!F8bE12O|G@$XA O@ D0a>$XA O@ D0a>$XA O@ DPB >QD-^Ęq`> O@ D0a>$XA O@ D0a>$XA O@ DPB >QD-^ĘQƃ H*\ȰÇ#JHQ!,h „ 2l!Ĉ'Rh"ƌ7Qc>qԘc|9rȑ#G9rȱb>qԘ|3ȑ#G9rȑ#GqԘ|51G9rȑ#G9r|51nj8rȑ#G9rȑc|51G8fǑ#G9rȑ#G+1G8j1c>9rȑ#G9rX1G8jQc>qȑ#G9rȑ#NJ8jQc>q̘#G9rȑ#G9VQc>qԘ? 4xaB8`A&TaC!F8bE1fԸ`>qԘ|3ȑ#G9rȑ#GqԘ|51G9rȑ#G9r|51nj8rȑ#G9rȑc|51G8fǑ#G9rȑ#G9O@$? 4xa„*TP!| *T`> *T80,h „ 2l!Ĉ'Rh"ƌ拘/|7۸1ƍ6j̷qƍ7nܸqƍ拘/|7۸1ƍ6j̷qƍ7nܸqƍ惘/|7۸1ƍ6j̷qƍ7nܸqƍ{/_|7۸1ƍ6j̷qƍ7nܸqƍs/|7۸1ƍ6j̷qƍ7nܸqƍ+` +X` ,X` ,X` +X` ,X` ,X`O@ DPB >QD-^ĘQƃ8jQc>q̘#G9rȑ#G9VQc>qԘc|9rȑ#G9rȱb>qԘ|3ȑ#G9rȑ#GqԘ|51G9rȑ#G9r|51nj8rȑ#G9rȑc|51G8fǑ#G9rȑ#G+1G8j1c>9rȑ#G9rX1G8jQc>qȑ#G9rȑ#NJ8jQc>'p "L0,h „ 2l!Ĉ'Rh"ƌ7Qc>qԘc|9rȑ#G9rȱb>qԘ|3ȑ#G9rȑ#GqԘ|51G9rȑ#G9r0 <0… :|1ĉ'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#N|`> O@ DPA$(? 4xaB 6tbD)VxcF9vb>$? 4xaB) <0… :|1ĉ+Z1ƍ;zx1@~ <0ƒO@ DPB >QD-^ĘQF=~ ? O@ DP| 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?^'p "L`>8`A&TaC!F8bE1fԸcG/O@80_|8_7p 8p|o|80,h`|g0߿|O@ DPB >QD-^ĘQF 'p | o`7p`(07p7p 8p808_ 8p@8`A&TaC!F8bE1fԸ| H0_|'0_|˗_| ̗/_/_|/80? Gp࿁#(o80_|˗_| ̗/_/_| H*\ȰÇ#JHŋ3jQa>$?˗O`˗/|/߿| '0_|'0_o _>O`|/_| ̗/߿|_|_/|/_|_>˗_| <0… :|1ĉ+Z1ƍO@80@'p_7p`O@,| '0߿|O|_/߿|/߿/߿/,h „ 2l!Ĉ'Rh"ƌ7rT ? O|o`|_/|8p/O` /_ '0__| /߿|'0@70߿| '0_  <0… :|1ĉ+Z1ƍ'p A o|'0_|˗O`_|˗/O@80߿| /_|/__||/߿_>̗/__>/_> <0… :|1ĉ+Z1ƍ;zh1H A $H A $H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#bNx1ƎC,y2ʖ/cάy3Ξ?-z4ҦONz5֮_Î-{6ڶoέ{7޾.|8Ə#O|9ΟC.}:֯cϮ};;;PK4~4PK+AOEBPS/img/lnpcc005.gifN^GIF87a]U?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,]U H*\ȰÇ#JHŋ3jȱǏ CIɓ(S>O@ DPB >Qą H*\ȰÇ#JHC$XA .d8? 4xaB cȐ!C 2dȐ!C 2 2dȰ`> 2dȐ!C 2dȐ!Ã1dȐ!C 2dȐ!C 2dȐ!| 2dȐ|2dȐ!Â2dȐ!C 2dȐ!C ǐ!C 2dȐ!C 2dȐ!C1dȐ!CcȐ!C cȐ!C 2dȐ!b!(_>$XA .dC%NXa>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z0E-ZhѢYhѢE-ZhQ`>-6̗!|߿|? /A  <0… :|1ĉ H"E)RH"E(R81_/_|)G`>)RH"EH"E)RH"E(R81_ ˗`> H߿#o8| H*\ȰÇ#J0_>)RH"E)R$"E勘`| '0߿| '0|'0_|S"E)RH|(RH"E)RH`>)N̗/b+O`>'p@7P  <0… :|1ĉ H"E)RH"E(R81_`>/_>_ ̗/| QH"E)R/E)RH"E)G"ʼnE70_O`˗o`>'P࿁ O@'p "Lp!ÆB(qb|(RH"E)RH`>)N̗"EQH"E)R/E)RH"E)G"ʼnQH1b>˗ab|QH|(RH"E)RH`>)N̗`|)R̗`>˗a&"E G"E)RH"EQHqb|˗"EG0E70_|70߿|'0_|˗_/_| /_|'0_|/_`>'p "L0_>$XA .dC%NXa>-6̗o |'p "L |? 4xaB˗O`>O`/_|O`O`'0|'0| ̗_>SPBO@ DPB >QDhb|'p "Lp8`A&D/߿|O`>_'0| '0|70|o`|'0| *T`| H*\ȰÇ#JHb|-Zl/_A$XA .߿| H"O߿|/߿|߿|/߿|/߿(0@/_>o`? 4xa„'p "Lp!ÆB(q"Ŋ Yha|hb| ha|/_|˗O`˗|'_/߿(0@˗O`| '`>/߿8`A&L/,h „ 2l!Ĉ'R0Eˇ0Eg"|Y0_>,Zh0_>-ZhѢE- gѢņYhqa>!+ϢŅgѢŃYhѢE-ZhQ`>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z0E-ZhѢYhѢE-ZhQ`>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z0E-ZhѢYhѢE-ZhQ @8`A&T|6lذ!| 6lذaÆ 6lذaC5lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6l0_Æ 6lذaÆ 6lؐ`| 6lذaÆ 6lذaÆ *װaÆ ˗aÆ 2װaÆ 6lذaÆ 6$/_Æ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ 5lذaÆ 6lذaÆ װaÆ 6lذaÆ 6lذ| 6lذ|6lذ!| 6lذaÆ 6lذaCO@ DPB >QDhb|,Z0E-ZhѢYhѢE-ZhQ`>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z0E-ZhѢYhѢE-ZhQ`>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z0E-ZhѢYhѢE-ZhQ`>-6̗ϢE YhѢE-Z/E-ZhѢEhb|,Z`> 4xaB 6tbD'p "Lp!ÆB(q"Ŋ Yha|-Zl0 <0… :|1ĉ 8`A&TaC!F8bņ,Z0_>-ZhѢE-ZhѢE-Zhb|-Zl/E-ZhѢE-ZhѢE-Zh1b>-6̗ϢE-ZhѢE-ZhѢE-Z1EgѢEhѢEhѢE-ZhѢŊ,Z0_>-Z/_>-Z0_|-ZhѢE-ZH1EgѢEgѢE˗/E-ZhѢE-RgѢņYhbE O@ DPB >0@ H*\ȰÇ#JHŋaĈ`|1b`>8`A&TaC8? 4xaB 6tbD)Vx`>1̗#F'p`>$XA .dСC <0… :|1ĉ+Zh0Fˇ#FÈ#FÈ#F1bĈc|1b̗#F1̗#F1bĈ#FaĈ`|1b0_>1b80_>1bĈ#F1V̇#ƃaĈ|0bĈ|0bĈ#F1bX1Fˇ#FÈ#FÈ#F1bĈc|1b̗#F1̗#F1bĈ#FaĈ`|1b0_>1b80_>1bĈFaF? 4xaB ˗aÆ 6l`| 6lذaÆ װaÆ 6lذaÆ 6lذaÆ kذaÆ װaÆ 6lx0_ 6lذaÆkذaÆ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ 6QD-^L#FÈ#ƇaĈ#ƁaĈ#F1bĈb>1̗#Fˇ#Fˇ#F1bĈ#Ɗ0bx0_>1b|/F1b/F1b#F+È|0bĈa|1bĈq`|1bĈ#F1b#FÈ#ƇaĈ#ƁaĈ#F1bĈb>1̗#Fˇ#Fˇ#F1bĈ#Ɗ0bx0_>1b|/F1b/F1b#0 <0… װaÆ 6lx0_ 6lذaÆkذaÆ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ 6!B"D!B"D A| B"D"D!.̗"D!B"D!Bb|!B0_>!Ba>!B"| B"D!B"D!6"D"D!B"D"D!B"D!Ba>!B|/D!B"D!B0_>!B"D!B"D5P>$XA .d/_ 6lذaÆ 6lذaÆ װaÆ 6lذaÆ 6lذaÆ kذaÆ װaÆ 'p "Lp!Á H*\Ȑ`| 6lذaÆ 6lذaÆ 6lؐa 6l_| 6la 6l_| 6lذ|6lذaÆ 6lذaÆ 6lذ!| 6lذ|6lذ!| 6lذ|6lذaÁ5lذaÆ 6lذaÆ 6lذaC6lذa5lذaC6lذa5lذaÆkذaÆ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ5lذaÆkذaÆ װaÆ 6lذaÆ 5PC 5PC 1P>$XA .d/_ 6l0_Æ 6l/_ 6lp`| 6lذaÆ 6lذaÆ 6lؐa 6l_| 6la 6l_| 6lذ|6lذaÆ 6lذaÆ 6lذ!| 6lذ|6lذ!| 6lذ|6lذaÁ5lذaÆ 6lذaÆ 6lذaC6lذa5lذaC6lذa5lذaÆkذaÆ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ5lذaÆ(_>$XA .d80_ 6lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6l0_Æ 6l/_ 6lp`| 6lذaÆ 6lذaÆ 6lؐa 6l_| 6la 6l_| 6lذ|6lذaÆ 6lذaÆ 6lذ!| 6lذ|6lذ!| 6lذ|6lذaÁ5lذaÆ 6lذaÆ 6lذaC6lذa5lذaC6lذa5lذaÆkذaÆ 6lذaÆjj(,h „ 2/_Æ 6DaÆ 6/_Æ 6l80_ 6lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6l0_Æ 6l/_ 6lp`| 6lذaÆ 6lذaÆ 6lؐa 6l_| O`|5,/_C6lذa5lذaÆkذaÆ 6lذaÆ 6lذaÆ 5lذaÆk80_g0| 5LaÆ 6/_Æ 6l80_ 6lذaÆ 6lذaÆ 6l`>$XA .d/_70߿| O|G0?7?O@ DPBkذaÆ װaÆ 6lذaÆ 6lذaÆ kذaÆ א`|`>_|'0| ̗/_> kH`>8`A&T(0_ .\p!|8`A&TaC!F8bEÈ|"˗O`|'0|O@7P 8p  <0B-\p…  <0… :|1ĉ+Z0F1| G0|/_>_ ̗/|E70| ̗/| '0߿|˗/|U̗#F È#F1bĈc|1b 4hРA 480_>$XA .dC%NXń0bx0_>11|'P__@ H`| 4hРA 4h|8`A&TaC!F8bEÈ|0b/_|/|_>_>˗/_>(ˇ#ƄaĈ#F1bĈb>1̗#FE'0_>/_|/_| ̗/|U̗#F È#F1bĈc|1b8`A&T0… .\P`| .\pB'p "Lp!ÆB(q"Ŋ/&`>8`A !ƒ O@ DPB H*\_| 6lذ|6lذaÆ 6lذaÆ 6lذ!| k0a 0 <0…8` ̗ϠA 4h`| 4hРA 4hp`| H*\ȰÇ#JHŋ AG0_|˗_| ̗/|/_>_|˗/| ˗/FQ̗O`|1̗#F #F1bĈc|'0|O`> ̗/_ '0߿| '0|ˇ#|/߿|/_|˗O`| ̗/|U̗#F È#F1bĈc|70_|O`|O@'0߿| '0 <0…1D0_'O| HAaĈ_>˗/߿|O`/|(_>$XР|$XA .dC%NXń #O |_( ?_>$(0_>$XA .c0_> 2d0a| 2dȐ!C 2dȐ!C 2dȐ!Ä2dȐ!Ã1dȐ!C1D_|8߿| | /,hP`|0̗#F È#F1bĈc|1b1bĈ#F1Vw1_>a(0_>1ˇ#ƃaĈ1a|1bĈ#F1bb|ÈQ`|1b#FÈc|0bĈ#F1bX1|'0_|˗/|/_|'`> H| 4hРA 4h_> 4hРA 4/_> 4hРA 480_>$XA .dC%NXń.'p| ߿|70߿ '_>$X`| 4hРA 4/A 4hРA /A 4hРA /,h „ 2l!Ĉ'Rhb|˗/_>/|(߿ /,X0_> 4hРA ϠA 4hРA ˗ϠA 4hРA ̗? 4xaB 6tbD)Vx1a/߿|'0߿|'0߿|b|1b#FÈc|0bĈ#F1bX1||_߿O@ gРA 4hРA4hРA 4hР4hРA 4hР'p "Lp!ÆB(q"Ŋ/&̇b|a$/FÈ|0bĘ0_>1bĈ#F1V̇b|a,/FÈ|0bĘ0_>1bĈ#F1V̇#ƃaĈ_>1̗#F È#F1bĈc|1b1bĈ#F1V̇#ƃaĈ_>1̗#F È#F1bĈc|1b1bĈ#F1V̇#ƃO@ DPƒ2dȐ!Ã1dȐ!C cȐ!C 2dȐ!C 2dȐ!C &ǐ!C ̗!C 2!C 2 2dȐ!C 2dȐ!C 2dȐa| 2dȐ|2dȐ!2dȐ!Ã1dȐ!C cȐ!C 2dȐ!C 2dȐ!C &ǐ!C ̗!C 2!C 2 2dȐ!C 2dȐ!C 2dȐa| 2dȐ|2dȐ! H*\Ȑ ,h „ 2/_Æ 6lذaÆ 6lذaÆ 6daÆ 6/_Æ 6L0 <0… 'p "Lp!Á5lذaÆ 6lذaÆ 6lذaC6lذa5lذaÆ ̗aÆ 6lذ|6lذaÆ 6lذaÆ 6lذ!| 6lذ|6lذaÆ װaÆ 6l`| 6lذaÆ 6lذaÆ 6lؐa 6l_| 6lذaÆkذaÆ 6lh0_ 6lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6lذaÃ5lذaÆ 64/_Æ 6lذaÆ 6lذaÆ 6@8`A&T|6lذaÆ װaÆ 6l`| 6lذaÆ 6lذaÆ 6lؐa 6l_| 6lذaÆkذaÆ 6lh0_ 6lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6lذaÃ5lذaÆ 6$08`A&TaC!F8bE È|0bĈa|1bĈ|'p "Lp!ÆB(q"Ŋ/̇#ƃaĈ|0bĈ@ O@ DPB >QD-^<#FÈ#ƇaĈ#Fˇ#F1bĈ#F0bx0_>1b|/F1b/_>1bĈ#F1Ṙ#ƃa|0bĈ|0bĈ#F1bX1Fˇ#FÈ#FaĈ#F1bĈb>1̗#Fˇ#F1bĈ#F1bĈQ`>1̗#Fˇ#F H*\p ,h „ 2l!Ĉ'R0EgѢEgѢE,Z0_>-ZhѢE- gѢņYhѢYhQb>-6̗ϢE-ZhѢEYha|-Zh_|-ZϢE hѢE-ZhѢ|-Zl/E-Z/E%hb|,ZhѢE-Z(0EgѢEgѢE,Z0_>-ZhѢE- gѢņYhѢYhQb>-6̗ϢE-ZhѢEYh!@'p "Lp!Æ Ç{Ç{Ç>|Ç>$Ç̗Ç>|h0_>|0Ç>$/Ç>|Ç>|!|>|`|>|C=|Ä>|!|>|Ç>|Ç {Ç{Ç̗Ç&Ç Ç>|Ç>|H0Ç>$/Ç>|`|>|0a>|H0_>|Ç>|C8`A&T|6lذaÆ װaÆ װaÆ ˗aÆ 6lذaÆ 6lذaC6lذa5lذaÆ ̗aÆ 64aÆ 6/_Æ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ 6'1_>gѢE&ϢŅYhѢE-ZhQ`>-6̗b| ̗`hb|-Zob˗o`|˗o`>'p'p O@ DPB >QDhb|"˗o` 0 ` o ,h „%L0a„ &/a _߿|' O@ <0… :|1ĉ+6gѢņE̗o`|'0|˗O`#/_>'0EYhQb'p`_߿|'P |'p O@ DPB >QDhb|"˗O`|'0|O@7P ,h B%L0a„ &/a˗/|_>O`˗_|%L/,h „ 2l!Ĉ'R0E1| G0|/_>_ ̗/|-gѢE&/߿| ̗/_ ̗/_>˗o`|&gѢE-ZhѢE,Z0_ ̗`>_>O` o8`A&̗/a„ &L0| &L0a„O@ DPB >QDhb|,Zh|,Z(1EgѢE-ZhѢE,Z0_YhѢ|,Z0|-Zl/E-ZhѢEhb| ˗/E-:̗ϢE W0_|g"|,ZhѢE-Z(0E7`>8`A&TaÅ9tСC ߿| H|gРA 4H0_>$XA .dC%NXa>-6̗O |,h „ 2l!Ĉ'/,h0_> ̗/_'0_|˗/| ̗/A <0… :|1ĉ+6gѢņ O@ DPB >Q| O/߿o`O| H'p "Lp!ÆB(q"Ŋ Yha|˗ϢEgѢE+b'0_|O |/߿O@ ˗? 4xaB 6tbD)VlϢE ;/E-:̗ϢE W1߿|o`o`|/|Y̗ϢE-ZhѢEYha|-Zh_|-Zb`>/߿ 'p  <0… :|1ĉ+6gѢņYhѢYhQb>"|,ZhѢE-Z(0EgѢEgѢE,Z̗/_> hѢE-ZhѢ|-Zl/E-Z/E%hb|,ZhѢE-Z(0EgѢEgѢE,Z0_>-ZhѢE- gѢņYhѢYhQb>-6̗ϢE-ZhѢEYha|-Zh_|-ZϢE hѢE-ZhE? 4xaB ˗aÆ 6l`| 6lذ| 6lذ|6lذaÆ 6lذaÆ 6TaÆ 6/_Æ 6lذ|6lذaC6lذa5lذaÆ 6lذaÆ 6l0_Æ 6l/_ 6lذaÃ5lذaÆ5lذaÆkذaÆ 6lذaÆ 6lPa 6l_| 6lذaÆkذaÆ kذaÆ װaÆ 6lذaÆ 6lذ| 6lذ|6lذaÆ  <0… kذaÆ װaÆ 6lذaÆ 6lذ| 6lذ|6lذaÆ װaÆ װaÆ ˗aÆ 6lذaÆ 6lذaC6lذa5lذaÆ ̗aÆ 64aÆ 6/_Æ 6lذaÆ 6lذaÆ 5lذaÆkذaÆ 6̗#F1̗#F1bĈ#FaĈ`|1b0_>1b80_>1bĈ#F1V̇#ƃaĈ|0bĈ|0bĈ#F1bX1Fˇ#FÈ#FÈ#F1bĈc|1b̗#F1̗#F1bĈ#FaĈ`|1b0_>1b80_>1bĈ#F1V̇#ƃaĈ#C <0… :|/_>!B"D!B"D A| B"Ć  <0… :t08`A&TaC!F8bE È|0bĈ!|'p "Lp!ÆO@$XA .dC%NXŃ0bx0_>1bt/_|1bĈ|'p "Lp!ÆB(q"Ŋ/̇#ƃaĈ|aĈ#ƁÈ#F1bĈ#|1b1bĈ#F1bĈ#F1b81Fˇ#F1bĈ#F1bĈ#F'È|0b0 <0… O@ ,0 <0… 'p "Lp!ÆB(q"ŊYha|-ZgѢE峨0EgѢE-ZhѢE,Z0_>-hѢEYTϢE hѢE-ZhѢ|-Zl/EYh"|,*gѢņYhѢE-ZhQ`>-6̗ϢE,Zha|hb|,ZhѢE-Z(0EgѢ|-Z0_> Yha|-ZhѢE-ZϢE hb>-ZD/E,Z0_>-ZhѢE- P> 4xaB O@ DP| .\p…[Pa .\p|.\p… .\p… .\p H*\p ,h „ [p… .D/… -\p…  <0… :|1ĉ+Z1ƍqȑa| b|9rȑ#G9rȑc>92̗#|9^̗#G9rȑ#G9rǑ#Gq$#Njqȑ#G9rȑ#G8r0_>qx1_>9rȑ#G9r1GǑ`>/Ǒ#G9rȑ#G9ȑ#|8Ǒ|8rȑ#G9rȑ#|9rd/G8r/G9rȑ#G9r䘏#G H0Gȑ#G9rGq@8`A&TaÂ9tH0C:L/C:tСC:tСC:tСCsСC!|:t0a|:tСC:tСC:tСC:tϡC:d/C9t/_|ϡC9tСC:tСC:tСC:ta>:ta|a|O`>СC:tСC:tСC:tСC:tСC9tH0C˗/߿|/_> O@ ̗? 4xaB 6tbD)VxcFȑ#|81| '0߿|/qȑ#G9rȑ#G8r0_>qG0߿| `>O@ /,h „ 2l!Ĉ'Rh"ƌ7:1_|"K/_|#Ǒ`> ̗_>/|q/G9rȑ#G9ra|僘/a>q/G8˗/_>'0| _|9rȑ#G9rȑc0__>̗/@ ''p 3hРA4hРA 4hР'p "Lp!ÆB(q"Ŋ/b̨q|'0߿|/߿|/߿|˗/|/|˗_|Y̗#|9^̗#G9rȑ#G9r0| ̗/_ 0@ /? ߿ /,h_|$XA .dC%NXE5nt#G H0|0@/߿/߿߿? /,h „ 2l!Ĉ'Rh"ƌ7:Ǒ#Gq$b>˗O`|O`O`|˗O`|惘/G9rȑ#G9r䘏#G H0|/_G0_>'0| ̗/߿|勘/G9rȑ#G9r䘏#G H0Gȑ#G9rȑ#Gqȑa| b|9rȑ#G9rȑc>92̗#|9^̗#G9rȑ#G9rǑ#Gq$? 4xaB ˗? 4xaB 6tbD)VxcFȑ#|8Ǒ|8rȑ#G9rȑ#|9rd/G8r/G9rȑ#G9r䘏#G H0Gȑ#G9rȑ#Gqȑa| b|9rȑ#G9rȑc>92̗#|9^̗#G9rȑ#G9rǑ#Gq$#Njqȑ#G9rȑ#G8r0_>qx1_>9rȑ#G9r1GǑ`>/Ǒ#G9rȑ#8#'p "Lp!Æs`>:t0_>:tСC:tСC:tСC:СC2̗ϡC:ta|:tСC:tСC:tСC:t0C:t0_> sСC sСC:tСC:tСC:tС|:t!|:$ϡC&̗ϡC:tСC:tСC:tСC9tСC s`>:t0_>:tСC:tСC:tСC:P>$XA .dذ`|СCСC:tСC:tСC:tСC:tСC9tH0C:L/C:tСC:tСC:tСCsСC!|:t0a|:tСC:tСC:tСC:t0 <0… "O@ $0 <0… 'p "Lp!ÆB(q"Ŋ/b̨qC$XA .d ,h`A$XA .d8? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳi׶}wnݻyxpÉ7~yr˙7wztөW~{v۹w|;;PKNNPK+AOEBPS/img/fetcho.gif6tGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ<8`A8`A&TaC!F8bE1fԸcGw1_|>~Ǐ?~GyǏ?~Ǐ?rQ`?~Ǐ?~Qc>uǏ?~Ǐ?b0|?~Ǐ?~|/_>/_>/_|?~Ǐ?~|˗_ /_>/߿|Ǐ?~Ǐ-+/_|˗_|/_|˗`?~Ǐ?裏((_>̗/_`>8p O@ D8? 4xaB 6tbD)VxcF9"̗_>/_|/| /_:&̗cǎ;vرcǎ;v,`/_˗_|˗/߿|0_ǎ;vرcǎ;v80_|9ױa;vرcǎ;v|0 m$/F6nܸqƍ7nܸq|˗O`|˗/| )̗oc|)۸qƍ7nܸqƍ ̗`>˗O`|1`> 4h? 4xaB8`A&TaC!F8bE1fԈ0|` ̗`۸q|7nܸqƍ7nܸ1a 70|`>۸q|7nܸqƍ7nܸQa|8߿| H*\Pa 6lذaÆ 6lذaÆ 6lذaÆ  O@ /|/|O@8`A&TB$X? 4xaB 6tbD)VxcƆ`| /_>G0|5jTa>5jԨQF5jĘ`> W0_|`ӨQ|iԨQF5jԨQ| i$a  O@ DH? W`8`A&TaC!F8bE1fDoa>1̗0_9̗/F-1F5jԨQF5R0FC/a>4N̗/a>4jԨQF5jԨb>40| )̧b>"ӨQ?$X A$XA .dC%N1|c`0_擘bŊH0_+VXbŊc0 _#| 2dȐ| &ǐ!C 2dȐ!C 2dȐ| 2d0_G0߿|/߿|'0߿|/|/|c0C 2d/C 1dȐ!C 2dȐ!C 2dX0C 2/Á (?˗_|/_>$0@7P ˗o/,h „ g0_>/_ ̗/| cȐ!C 2dȐ!C 2dȰ`> 2d(0Á`>/_| ̗`>O`>c0C 2d/_|˗_|_>g0C 2dȐ!C 2dȐ!C1dȐ!Á ;o`> ˗/߿|'p8|7?#H A'p "Lp|̗_|70|3!C 2dȐ!C 2dȐ!Â2dȐ| ;| ǐ| 2d0a|G0_/_˗/A$XA O@ DPB >`>%&0|7`>8` 4h_> 4hРA ̗O`>/߿|'0߿|˗`> 4hРA <0… :|1b|%JToa>$JdO"|%Jl`>0@o? ? 4xaB-\p… 'p "L ? 4xaB -̧0… ̗oB'p "<+` ,? 4xaB-\p… [p…-̷p… w0_[p| ̷0… [/| .o… *̷p… .Do… ̷0… .\/_|˷`|.\X0_| ̷0… [/| .̷p… [p… "̷p… [o… .$oB$XA8`A C80B"!|!D`>"D!B"D!B",`|'0|/_#/_̇p`>$XA .dC[`|˗/_ ߿_>7p? 4x0_%Jl`|/|/|˗oa$J(QD%˷0|g0_> ̗/| c!|,h? 4xaB cȐ!C `|/|70|[o`>2dȐ!C 2dȐa| g0_̗O`|/|ǐ!C 2d0_| 2dȐ|O7P? 80_|̗/_>#o`| H*\ȰÇ#:w0߿|8'߿ O|80,h „ 2lP`>>|P | /|˗o`˗o|8p@$XA .dC%JO|7p`|/_> 0 'p "Lp!Æ'p H*\X0߿|#O`'0_ '0|˷0_| 2dȐ!C 2dȐ!| 70_> '0_|g0_|1dȐ!C .̧0C 2\O`> ߿|@ ̗/_`>8P`>8`A&TaC!F0߿|0@߿ O /'p "Lp!ÆKÇ{a|>|Ç>|x0Ç 1Ç>Ç*Æ>|Ç>|`cO!|O@'p "L!? 4xaB װaÆ5lذaÆ 6lذaÆ5lP`>;| 6l0| 6lذ| 6lh0_Æ 6lذaÆ 6lX0_Æ c`| 1װaÆ %װaÆ װaÆ5lذaÆ 6lذaÆ5lP`>[Oa 6l(0| 6lذ| 6lh0_Æ 6lذaÆ 6lX0_Æ c`kذ| 70_kذaÆ 'p "L ,h „ 2l!Ĉ!'p "<+/_` ,X`A ̗`|'p "Lp!ÆB(q"Ŋ/b̨q|g0|̗_| ̗_|'0_/_> ̗/߿|/߿|W0G9rȑ#G9rԘo``>/_| ̗O`'0_|˗_|/_/߿|Ǒ#G9rȑ#G9˗/| g0|˗/߿|/_|O`|/|`> O| <0… :|1ĉ+Z1ƍ9O o`|˗O`| ̗/_'0_|/߿|˗|O|8`A&TaC!F8bE1fԸb`>/_| ̗O`̗_>/_|˗|?'p "Lp!ÆB(q"Ŋ/b̨q|G0|/_|/_|/_˗/_Oo O@ DPB >QD-^ĘQƋ;#LJ8rȑ#G9rȑ#DŽC? O@ <? 4xaB 6tbD)VxcF3[Oa>ȑ#G9rȑ#G˗0|9&Ǒ#G9rȑ#G9>w0|9Ǒ#G9rȑ#G9FO| H?$XA "O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW@$XA8`> 4xaB 'p A H*\? 4xaB 6tbD)Vxa>̇| È|0bĈ#F1bĈ_>̇| aĈ`|1bĈ#F1b|ah1|1bD#F1bĈ#F70߿| /|w0|˗o`|˗/| ̗/_>˗/? O@GP`|˗O`>G0_>#H A$H| H*\ȰÇ#JHŋ ̗O`| /_|'0|g0_>G0|/߿|'p'߿? /AO`>˗/|#/A#H A$HP`>$XA .dC%NXń '0_|'P?'p  W_|˗o`|_|8? /߿ O GP`>#`|70|̗/_/|7`>@  <0… :|1ĉ+Z0|/_ O ` ˗o`̗o`|_| ̗O`|̗/|O``|70|+O`|/|/߿|/_/_8`A&TaC!F8bE3/|˗_|˗/߿|g0_| 70? o? 0@?߿8P`>#H0_|̗/|_|/_|˗O`>˗/_O`|? 4xaB 6tbD)Vx`|̗O`|'p࿁@ O@ /|o`| /_>  7_|7p?˗o| ̗o`>7P`> ࿁G?'p "Lp!ÆB(qA$XA .dh0_/_|˗/_> 70_ g0_>70_>/߿|'p 70| ̗o/ '0|/|o|'0߿|_|˗_|_|O@ DPB >QD(RHq`>˗/|/_|/_|/A oo7P 7_|70 '0˗o |$_@/_/_|07@ <0… :|1ĉQH|Q`>)*g0E '1E)RH"E(RH1_|'3"E G!|'p w| H*\ȰÇ#J0E'3|QHQa>(RH_>)RH"EQHqb>(Ng0EK"EQH"E)R/E%3|QHQa>(R1_>)RH"EH|Q`>)*̷0_|(R0_|)RH"E)G"E 'p ", H*\h? O@ DP H*\ȰÇ#J1E%H"E)RH"E)RH"E(R(1E)RH"E)RH"E)BG"E(RH"E)RH"E)RHb>)JG"E)RH"E)RH"EQHQb>)RH"E)RH"E)R"EQH"E)RH"E)RH"|)R"E)RH"E80,h „ 2l!Ĉ8qD&N8qĉ'N0_&N8qĉ'27qĉM8qĉ'N8a>&N8qĉ'.7qĉM8qĉ'N8a&N8qĉ'*7qĉM8qĉ'N8a&N8qĉ'&7qĉM8qĉ'N8a&N8qĉ'&7qĉM8qĉ'N8qa>8qĉ'Nh0ĉ' 7qĉ'N8qąoĉ'N8q|'N(`>$XA O@ DPB >Q!,0 <0… :|1B$XP`> 4hРA 4ϠA 4h|'p "Lp!ÆB0|$J(QD#0D%'Q|%J(QD;`>$J(QD%sOD (1b>%J(QDg0D%J(QD(QD$JOD%J(Qb| I(QD%J,a>%J4OD$J(QD%0D%J(QĂ(QD$JOD%J(Q| I(QD%J4/|%Jh0DI(QD%JD/a>%J(QDO@'p "Lp!| 2dH0C 2dȐ!C 2d80| 2dȐ!C 2dȐ| 1dȐ!C1dȐ!| 2dȐ!C 2dȐ!A <0… :|18qD&Ntoĉ'N8qĉ'N8qĄ8qD&Ntoĉ'N8qĉ'N8qĄ8qD&Ntoĉ'N8qĉ'N8qĄ8qD&Ntoĉ'N8qĉ'N8qĄ8qb|M0ĉ'N8qĉ'N8qĉ -̗0ĉ 3oD&N8qĉ'N8qĉ'NLoa>&Nd0 O@ D`> *TPB *Th`> 4xaB8`A&TaC!F̷`> O@ DP!|-\p!| .\p… .\H0… .,o… .\p… *̷0_| .\`.\a .\p… .$o… ̷p… .\p… [a .\p` .Do… .\p… [p…-\p… .\pB[p… ˷p…-\p… .\p!|70|O`|'`>߿8_>$XA .dC-1bĈ E_#F1b|˗O`|_|/|'0|'0_>"F1bĈ#[/bĈ1|#F1bĈ 'P?o/߿'? ? 4xaB 6tb| E1|#F/bĈ#F0|(7P ˗/|/_|8_>$XA .dC-1bĈ E_#F1|̗/_/@ O|/߿|'p`>? 4xaB 6tb| E1|#F/bĈ#F`>'p`|˗/߿|'P70߿߿ O 'p@$XA .dC -1bĈ E_#F1|g0_|/_>/|'0|_|3a|#F1bĈ-1bĈ E_#F1|g0_|`> o/߿7?/,h „ 2l!D1bD"F/_Ĉ#F`"F0|#F1bĈ-1bĈ E_#F1b| E1a"F1bĈ [/bĈ1|#F1bĂ1b| E1bĈ#̷0_Ĉ#*1b"F1bĈ[/bĈ 11bĈ#FH0|#F0_Ĉ1bĈ#0_Ĉc"|O@'p "LpA$Ẋ!B"D`>"D`>"D!B"D| C!Ḃ`>;|"D!B!D`>!D!B"4!B"$!B"D!B"D80B H*<+Xp`,(0,h „ "ǐ| 1dȐ!C1dȐ!| 2dȐ!C ǐ!C 2| )G0_ǐ!̗o`| 1d(0| 2dȐ| 2dH0C 2dȐ!C1dȐ!C c|1/| "̗o`| 1d/| 2dȐ| 2dH0C 2dȐ!C1dȐ!C c`>C/_>70_ _7?80?'p`>$X | ;x`|O |/? O`/_/_|˗_o80O@ DPB2dȐ`> 2dȐ!Cǐ!C 24` W0߿|/_|(?˗_>7P`| ̗_|/_|8@7po'p "Lp!| 2dH0C 2dȐ!Á H*\Ȱà H | O|˗/@ O@ ߿80_/߿|'P࿁'p | O@3X0A 4hРA gРA 4H0,h „ 2l`| {Ç0|̗/߿| OO '0|/_>0@O̗ A$80,h „ 2ǐ!C1dȐ!C 2w0C 2dȐ|g0|̗/߿|˗_|/_|/_̗O`|˗|O࿁ /A$HP`>O@ DPB2dȐ`> 2dȐ!ÅcȐ!C 2 70C 2d0| [!C 24!C cȐ!C 2T!C 2dȐ!| ;!C(? 4x`>!$|"D!B C!B C!B"D!B!D!B"D!B!,a>"D!B!$!|C!B"Dh0B"DH0B"D!B"/B"D!B"DX0 ̇!B"D`>C80"D!Bg`> 4x `  O@ D0!,(0,h „ 2la{C[oa>|80|̷0_| {Ç =Ç>|0|=||˷0|>|p`>>oa>c/Ç0Ç>|? O@ DPB H| 3X0A 4hРA g0A `|3X0A 4hРA g| H*\ȰÇ#JH| -gѢE ;_ ߿ (0A A`| $H A̗o`| G 8`A&TaC!F8bE[ϢEg0_|'0_w0|5̇0_|(0_)0E-ZhѢE )̷0E+ |_> AGp`>|/_>˗| ̗/|˗_|˗_| G| H*\ȰÇ#JH"|-gѢE30@'߿|'? 7p|8p@//| ̗/@/߿|/_/_|o7_>$XA .dC%NX`>-Z|/|˗_|'0| #/a|9W0_>˗/|/_|/߿|/_O80@ <0… :|1ĉ+"̗O`|˗ϢEg0_|˗O`|w`> , 'p@̗_|`>80_/? '8`> 4xaB 6tbD)V? 4xaB 6g0_|'0_;`G0߿|/_>/_> '0߿|'0߿|'P8_>8`A&TaC!F8bE1f̘`| ̗O`|ˇ0|g0|̗_|/_|3/|/? o?'p|'p "Lp!ÆB(q"Ŋ/b̨1ƃ$s`>ӨQF5jԨQFi/_>˷b|mܸqƍ7nܸqƄ H8`A$8`> 4xaB 8`A&TaC!F8bE)ÈQa>0b4oa|1F̗#F1bĈ#F ÈQa>0b4/a|1V̗#F1bĈ#F ÈQa>0b4a>1ˇ#F1bĈ#F̗/_>/_|ˇ0_|70_|̗/_>'0_|˗/|˗/|;`>1 ̇#F1bĈ#F̗`>G0_'0߿|/_|̗O` ̗/_>/߿'?8`>$(0$H| $H A8`A&TaC!F8bE3/|70_ 70|Ko`> '0_|˗/|'0_> ̗/_> ;/߿|˗_|'`>80_|'`>8`A&TaC!F8bE`|/|'0|K` '0_|/|/_|'0߿|O`>˗_|˗_/_|_|˗`|˗_˗/_;`>1bĈ#F1N̗ |OO@˗`|$`|'P࿁ oo'p|GP`|/߿|/_|˗/_/_|˗_|/߿|˗_|#/,h „ 2l!Ĉ'RhQ"| /|707_ 8`>'p`|'0_|˗o|/|8p?(߿/߿?/߿|˗_ ?80,h „ 2l!Ĉ'Rhb|̗`>G0| '0߿|/_|g0_> ̗/_>̗O` ̗/_>`>O`_|˗/|/_|/_>/߿| w0|1bĈ#F1bO`> O @/_|˗|'p`80_0_߿8_#(0_|/_|˗/߿|/߿|˗_|/?'_ OO@ DPB >QD-^L#F È`>0bH0F1bĈ#F1 ̇|ah0|''P ,h`>$XA .dC%NXE0bT`> C#FaĈ#F1bĈ|1*g0F!̗#Ƌ0bĈ#F1bĈ`>3#FÈb>1bĈ#F1b,#F È`Èa|0bĈ#F1bĈ |,h „ 'p |,h „ 'p A H*D <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[/E$XA8`A&TaC!F8bE1fԸ#| ̗/|0_|:vرcǎ;vرcljk|;vرcǎ;vرc| -בb;vرcǎ;va>#/_|رcǎ;vرcǎka5̷0|;vرcǎ;vر#|w0_|/_>˗`|/| ̗/|;vرcǎ;vر#| 70_|O`˗`>˗/߿|/߿|@8`A&TaC!F8bE1fԸ#|/|˗O`| ̗`|˗_|˗/| رcǎ;vرcǎ˗!| O|˗O`|(?/_|˗/߿| ̗o|8`A&TaC!F8bE1fԸ|s`|/_>/_/_|˗_|g0߿|:vرcǎ;vرcǁ;`>3/߿|˗_|W0_|˗_|˗_|G0_;vرcǎ;v1_|1b> رcǎ;vرcG H 'p A +X`,X@ O@˗/|'p "Lp!ÆB(q"Ŋ/b̨Q` -w0| mĘ`7nܸqƍ7n(0ƅ;oa>6bw0ƍ7nܸqƍ7no| !̗a>m/|7nܸqƍ7nܸQ`/_|˗O`̷0|{/F)̷qƍ7nܸqƍ3/|'0|/| -O@$X |,h ƒ HP`>$XA .dC%NXE3`|/߿|˗O`| w0FӨQF5jԨQF g0_ '0|/_3OF iԨQF5jԨQFO@?'p|#/,h „ 2daÆ 6lذaÆ 6lذaÆ 6lذaÁ Hp 70_>7_|˗/8@$XA .d`> O@ DPB >QD-^Ęa 70_> 70_|˗`> ӨQ#|5jԨQF5jԨa> 70_˗_|˗`ӨQ#|5jԨQF5jԨa> -`> 4xaB H'p "Lp!ÆB(q"Ŋ/b̨Q` -̧0_|)˷_7nܸqƍ7n(0ƅKoc|4۸qƍ7nܸqƍm\oa>6ņ1ƍ7nܸqƍ7no| 0_0_>2۸qƍ7nܸqƍ8`AO@̗`| ,/| ̗` $? 4xaB 6tbD)VxcF7+`|/| ̗/|/_|/_w1G9rȑ#G9r0| O/߿(`>'? 8p <0… :|1ĉ+Z1ƍ'0|˗/߿|/_>O@O? o? 4xaB 6tbD)VxcF9̗/A࿁ O@$8߿'p |,h? 4xaB 6tbD)VxcF9&g0@ 70߿ O@_/? ? 4xaB 6tbD)VxcF9vg0_|˗_|˗_|̗/_˗_|˗_|uرcǎ;vرcǎ˘|;vرcǎ;vرcG*˗/? O@  <0… :|1ĉ+Z1ƍ; Qc>=zѣG=zqb>yѣG=zѣGX1G=zѣG=z1_|˗/G=zѣG=z`> 4x!B$XA .dC%NXE5nG!E$YI)UdK1eΤYM`9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/;;PKx|PK+AOEBPS/img/reqp1.gifGIF87ah?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,h H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJ`> 4xaB8`A&TaC!F8bE1fԸcG=zѣG=z1b>yѣG=zѣG!̗/| 7`>/߿߿|O8`A&TaC!F8bE1fԸcG/_/_> ̗_|/_|˗Oa>=zѣG=z1b> ̗`/|/_|˗O`|)ѣG=zѣG=Fg0_>'P? '70 <0… :|1ĉ+Z1ƍ; g0_>˗/߿| ̗_|0@ ?O@ DPB >QD-^ĘQFg0_/_/߿|`>? 'p 8`A&TaC!F8bE1fԸ|w0|_|/߿|'0_˗/|رcǎ;vرcǎ #a|˗O`|/߿|'0_`>8_> $(0,h „ 2l!Ĉ'Rh"ƌ7r`]ױcǎ;vرcǎ;W0_G0رcǎ;vرcǎבc>:vرcǎ;vر#|uc;vرcǎ;v1|9Øcǎ;vرcǎ;rg0_G0رcǎ;vرcǎO@ DP!A$X| H*\ȰÇ#JHŋ3jܸ1G ȑ#G9rȑ#Gȑc|9rȑ#G9rȑc|9r,#G9rȑ#G9rl#Gqȑ#G9rȑ#G qȱ`>9rȑ#G9rȱa>9Ǒ#G9rȑ#G96g`> 4x@$H`> O@ DPB >QD-^ĘQƍ 0|I̗Oa>9rȑ#G9rȱa>8&̧0|ȑ#G9rȑ#G3c| iw0G9rȑ#G9r0|70_|(߿8_>̗|̗`>'p "Lp!ÆB(q"Ŋ/b̨q|70߿|/|3`̗a|Ǒ#G9rȑ#G96g0|70_>3`˗/߿|/_g0G9rȑ#G9r0| ̗O`|̗`>+/_|˗_|/_ ȑ#G9rȑ#G3`>G0_> G0_ `|/߿|/_|Ǒ#G9rGqG5P>'p`/|/ (?/_O 08`A&TaC!F8bE1fԸqc>/_70|/_| /__|Ǒ#G9rȑ#G96g0|/_>̗/| W`>(08`A&TaC!F8bE1fԸqc>8&w0 ȑ#G9rȑ#G3c|qg0G9rȑ#G9r0|Coc8rȑ#G9rȑ#dž 0_|!Ǒ#G9rȑ#G96g0DŽ滘/a>9rȑ#G9rȱa>8&̷0_|˧0G9rȑ#G9r0A$XA8 A$XP ? 4xaB 6tbD)VxcF';#Gqȑ#G9rȑ#GǑ#ǂ8rȑ#G9rȑ#F$Xp ,h „ 2\0'p "Lp!ÆB(q"Ŋ/b̨q#|qȱ`>9rȑ#G9rȱ`8rX0G9rȑ#G9r0G ȑ#G9rȑ#G30 <0,h „'p "Lp!ÆB(q"Ŋ/b̨q|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|̗/?  8`A&? 4xaB 6tbD)VxcF73`>70|'0|%ȑ#G9rȑ#G3`|` ̗`>qȑ#G9rȑ#G w0_> G0_|W0G8rȑ#G9rȑ#dž C/_> G`>'p`>$XA O@ DPB >QD-^ĘQƍ (? ̗_| _|O@ Dp ,h „ 2l!Ĉ'Rh"ƌ7ng0|/|˗/a>qȑ#G9rȑ#G w0_|G0_|K|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|q<|9rȑ#G9rȑc|8`AO@ D_>$XA .dC%NXE5nܘ#Gqȑ#G9rȑ#G qȱ`>9rȑ#G9rȱa>9Ǒ#G9rȑ#G96Ǒ#ǂ8rȑ#G9rȑ#dž8rX0G9rȑ#G9r0G ȑ#G9rȑ#G30 4 'p 'p 'p "Lp!ÆB(q"Ŋ/b̨q|e̷0_|,˗/|9rȑ#G9rȑc|ȩ0G5Ǒ#G9rȑ#G96g0_| q#G9rȑ#G9rl`70_|!71_>ȑ#G9rȑ#G3`| '0_擘/b8rȑ#G9rȑ#G 3/|;`˗/߿|˗`|˗`>8rȑ#G9rȑ#LJ3/|/_ '0'0߿|˗_|'0߿|8p`>$XA .dC%NXE5n(0_ 70_>G0߿|O`|˗/߿|/_|+a;vرcǎ;vر`|̗o`|O@ /߿|˗_|˗/?@ 8? 4xaB 6tbD)VxcF9&g0_>`̗_>/_|˗_|3cǎ;vرcǎ;v |o  G0߿|'0_|/߿|/߿|? 4xaB 6tbD)VxcF9F̗1|رcǎ;vرcǎ#˘`|رcǎ;vرcǎ#˘`uرcǎ;vرcǎė0_ǂ:vرcǎ;vرclj2K|;vرcǎ;vر#|)̗c|;vرcǎ;vرcE$XРA$(`> 4x? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC ;;PK# PK+AOEBPS/img/lobfrtem.gifGIF87aP?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,P H*\ȰÇ'p " <0… :|1ĉ+Z1ƍ;VO@$XA  <0… :|1ĉ+Z1ƍ;J̗ϣ|yѣG=zѣG0_>=zѣG=zc>y,ϣG=zѣG=z/a| ѣG=zѣG9308_|˗O`|'0_|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ ̗_|˗`| /__| ѣG=zѣG=jg0|3O`>'0߿|o`>=zѣG=zb|70_ O`|'0߿|(߿ H 'p "Lp!ÆB(q"Ŋ/b̨q|3/| g0| /|˗O`86Ǒ#G9rȑ#G9G0A `>/߿| ߿| H O@ DPB >QD-^ĘQcB$X A$(0_ ,X` W` ,80,h „ 2l!Ĉ'Rh"ƌ滘a>'p ,h`$XA .dC%NXE5w1|mo|7nܸqƍ7nܸ`C/F6N̷qƍ7nܸqƍC/@O|o'p "$/_„ &? 4xaB 6tbD)VxcF!̗`>[/_h1ƍ7nܸqƍ7n<a|Coa> H8`A&4? 4xaB 6tbD)VxcF w0_Co`6n81ƍ7nܸqƍ7n,_70|̷qƉ6nܸqƍ7nܸq#| O _>0'p "Lp!Æ 8@$XA .dC%NXE˗`|O`> +OF1̗/F5jԨQF5j_>a> ӨQ|iԨQF5jԨQ| ]̷0F-惘OF5jԨQF#[b'p`>$X|,h „ 8| ? 4xaB 6tbD)VxcF滘oa> 0F)1F5jԨQF5>0| %̗0|4j,/a4jԨQF5jԨa>.[/| )̧Q|ȨQF5jԨQF1w1|1̗0_|+`拘OF5jԨQFc0 $+`A W_ +X`Wp` ,80,h „ 2l!Ĉ'Rh"ƌiĘ` o`>/_> @/_>/_|˗O`/@8p| H*\ȰÇ#JHŋ3 ̧1c#O`>/_/_>'0߿|/߿|˗_|'0|M̧QF5jԨQFiԘ/߿|/|70_|/|o`|/_>/_>4jԨQF5jԨa>`>'p|70? O/_| `> ? 4xaB 6tbD)VxcF4ja3O`˗/|'0| ̗o`|/_>ØOF5jԨQFӨq` #O`>/_>a> /߿_/,hp`>$XA .dC%NXEӨq`>Өqa>4jԨQF5jԨa> ka>  QD-^ĘQ`> c/a>ӘOF5jԨQE$XA O@,X` ,XP`,/_ ,X`+X`,`> 4x 'p " H*\H? ̗/_ O@8`A&̗0a„ ̗P` &L`|%$/_„ &L/_„ K(0_„ 3/a„̗0a„ &,/|˗`|̗/a„ K0a„ K(0_„ &Lh`>'p 8`A&T CP`|"D_>"D|O@ DPB >a$2g0Ĉ (Q|-̧0D$J$ |߿| o ˗o| 7p|? 4xaB 6tbD3`|˗/|O@`>7p`8@_ ?(߿| /A$/A  A $H |#/|o`>'0|$/A'p "Lp!ÆB0|70|3`>O`3`> '0_>o`>/| '0_> s`>I80|'0|70߿|˗0|%J(QDS` O`|g0|`> ;` ̗O`/|˗O`˗_ ;`˗_|g0Ĉ;`|̗0_|/_|O| H*\ȰÇ#Fw0߿| W0|70|70|)G0߿|W0_> 70_O`| 70|70|/_|8@ 7_>$X;0@ H0_|#/߿| G0|8`A&TaC!F/| `> /`>(@ o|o? '__> `>/߿_>7_8P`8p`|7p|8p'p /A`>/#H|,h „ 2l!Ĉ'O| O`O@ o| 7P`O@ /|/߿|G_0@/߿O@ 'p@$0@'p@ `>`> w0|˗_> /߿|˗o`#`>s`| ̗_|+` w`>/?O|`> O@ DPB >Q|̗/_>70_|O`>/? 7P /߿|7|O|O|o`|/|80| //˗_>808`A C!B  <0… :|1ĉQT`>G"E s`>Q"E(RH"E).GQa>(>g0E3a>(Gqb>%H"E)R0E 0|)RD`>(0E(R"E)RH|3|QHa>[|)HQb>)RH"E QT`>G"Eˇ0_|H_>%H"E)R0E 0|)RDOa|? ̗/_W` ,8`> 4xaB8`A&TaC!F8|,h AO@ D?8`A&T /_ 0'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎCN;;PK6$PK+AOEBPS/img/colltr.gif!VGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗ 8`AO@ DPB >QD-^ĘQF)0G=zѣG=zq`> yѣG=zѣGC/G=zѣG=zc> (?˗o`|˗_|G0,h „ 2l!Ĉ'Rh"ƌ7r0|˗/߿| /|O`'0|=zѣG=zѣ| ̗o`>#/߿|/_>ѣG=zѣG3g0|3O`>/|O'p "$ <0… :|1ĉ+Z1ƍ`|'0|70߿|/_>0_|9rȑ#G9rȑ#|O@ /|(_ <`>$XA .dC%NXE5n`>q|#G9rȑ#G/'p  'p A W`AO@ w <0… :|1ĉ+Z1F.c`moƍ7nܸqƍ7w1|mo|7nܸqƍ7nܸ`Co|)۸qƍ7nܸqƍ!̗O |'P`7p|8`A̗0a„ O@ DPB >QD-^ĘQ|#a>'p " <0!| H*\ȰÇ#JHŋ3j<a|Co`>6n(1ƍ7nܸqƍ7n,_70|̷qF6nܸqƍ7nܸq|/|g0ƍ%۸qƍ7nܸqƌ H?'P8P |$ <0… "O@8`A&TaC!F8bE1fL` 70|w0F+s/F5jԨQF5Nw0|'0|!̧QƊ ӨQF5jԨQƈ滘a>0 <0A$80_O@ DPB >QD-^Ę`.c/a|0_|3˷0_|5jԨQF5j0|1̇0|Ө`| ȨQF5jԨQF1w1|-̧0F!1F5jԨQF5>0| 0_|iL`;/b>5jԨQF5j|a3a> sOc;/b>5jԨQF5j|!|,h `|˗o`|'p _|/߿|˗/_>˗o|8p'p "Lp!ÆB(q"Ŋ/b(0Fs`> /߿|˗O`| /|/߿|˗/_˗/|71F5jԨQF5>̧1c|9W0߿| /| w0߿|O`_|o`>4jԨQF5jԨa>˗!| Oo` '0_||/߿70,h0,h „ 2l!Ĉ'Rh"ƌi80|g0|/_̗O`/| /_| ̇1F5jԨQF5>̧Q|G0| '0_|/|(_߿|_>$X| H*\ȰÇ#JHŋ3 ̧Q|̧Q|iԨQF5jԨQ|50|8? 4x`> <0… :|1ĉ+Z1|50_|5&̗1F5jԨQF5>̧Qc| )̧Q|iԨQF5j0 <0‚ H_ ,X` Wp`| W` ,X`A ,X| O@ DPB 0 <? 'p`>$XP |,X? 4xaB װaÆ-װaÆ#/_Ckذ!|5l(0| 6lp`>6D/a5̗| 6lذa 64oa 6L/_| 'p "Lh? 4xp`>!D!Bg0B ̇0Ḃ|"D!B +0@_7?70_|8p|? 4xaB 6tbD;/_>`> ߿߿߿/8`> _/8_7p| HA`/߿| wp`'p "Lp!ÆB0| '0|G0| G0| ̗O`> C`/| 3a|ILOD+`#`>W0| -'QD%J(`| G0߿|G0|'0|/_>3a>/߿|g0|w0| '0߿|˗`>%J'0_|``>`>%J(QD!/_|O| o|8_7P`o|8P` '0߿|7p`8p@o|O`o|'p "Lp|O H`>(0|o|O@ DPB >Qb|+`# |/_> |(߿|//߿|(08_>_>808`A&T(`> O|/|/(0|0 <0… :|1ĉ(0(0߿|/@'0(0߿|`>'p| '0߿|@ 'p@O`O` O@ H*\/_| '0_| ̗o`˗O`> [p… .\p… .D/| 70_#`#O`'0_> ˇ0| /߿|3`| +/|'0߿|g0_| .\pa 'P?o'P`| OOO@ DPB >Qb|̗/_>'0_|˗/? o`߿|߿|߿/߿| (0|_GP`>#80A|˗/_|'p "Lpa>.\p|-\p… .\p… "'0… .\(0| .o`>70| 70… .\H0… .o… .\p… .\p!| .\p|-\_>w0…-\p… -\p.\p… .\p… ̷p…  g0… ;o| -\H0… .\0… .o… .\p… .\p!| .\p|-\_˗0…O@ DPB2dPa> 2dȐ!C 2dȐ| 2da>2Ta> c0C 2dX0C *ǐ!C 2dȐ!C 2\!C "g0C %̗`| cx0_> 2d |,h „ 'p "Lp!ÆB(q?$XA .$ H8 |O@'p 8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպU!|,h „ 'p "Lp!ÆB(q"Ŋ/b̨q#G:vcǎ;vرcǎ;v䘯cG:vرcǎ;vرcG:vcǎ;vرcǎ;v`/_| ̗/|'p7P O@ DPB >QD-^ĘQF/_>/| 70_>O` رcǎ;vرcǎ93_| 70|/_+_ױcǎ;vرcǎ;j/|/| ̗`| 70_| W0_ǎ;vرcǎ;v1_>_>/|o`'P O@ DPB >QD-^ĘQF8 O`| '0_ O/o`8 ,h „ 2l!Ĉ'Rh"ƌ7rL/| O`| ̗O`/|70_+/a;vرcǎ;v`>3_˗/|˗O`>+/_| ̗`>:vرcǎ;vرcGQ`:vرcǎ;vرcGQ`>:vرcǎ;vرcǁQ`>:vرcǎ;vرcǁQ`>&0 

w0_4ŅQF5jԨQF -O@ DPA$(0_,/_,X` /,h „ 2l!Ĉ'Rh"F2f̨0_| )0߿|%'0_ƌ3f̘1cƌ3V̗1cƅka>S/b2f̘1cƌ3f̘b3.̗oa> ;`|˗o`7`>80߿| ̗/_8`A&TaC!F8bE16W0_ƌCO`>`|/_>'0߿|˗`˗/߿|˘1cƌ3f̘1cƆ˘1|0|70|˗O`;_> G0_ƌ3f̘1cƌ3O@ DPB O@8P o`>'P|?O`|O H*\ȰÇ#JHŋ3#F0_| /_|_|˗_|O`|#a|1bĈ#F1bh0|1bx0|G0߿|/_|˗/_`/_|)̇#F1bĈ#FaĈ| ̇c| aĈ#F1bĈ|1bH1_|a<0 H`O@ DPB >QD-^t#F)ka>c#F1bĈ#FÈ#ƊS#È#F1 O@ DH? O| H?$XA$XP`>$XA .da| 1=Ç>|Â>D/a|9a=|ÇW0_>{pa|{Ç>|a|"̇0| =|a>|  O@ DX? $? 4xaB 6tbĈ$Ja0|%J(QD%J ̗`;`3/_>_/_#o`(RH"E)R<`>)RH|W0| /| #_>`|˗_|˗/|˗_#/E)RH"E G"E)RP| /_|8? ̗_7P`|(0@(0_|7P` /_| H*\ȰÇ#JHQ`| XbŊ+'p o|(0|o@ 'p@ 7_0(0@ H*\ȰÇ#JHb>$XA .dC`o`|˗_>a+/߿|/߿|'0_|`>$J(QD%J(`>%J(QĆ3`˗/_/| w0| g0_|'0߿|'0_|70D%J(QD%'QD%J1D0|%(QD%J(QD%J(QD I(0| !'b>%J(QD%J(QD$H"(,h BK(0_&LX0,h „ 2l!Ĉ'Rh"ƌ76Qa>c|9rȑ#G9rȑc> %̗`>8ȑ#G9rȑ#G'p "$'p`>$X|,h ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̍2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/.l0Ċ3n1Ȓ'Sl2̚7s3ТG.m4ԪW ;;PKݜ!!PK+AOEBPS/img/colldes.gif4GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ C`> 4x!A$XA .dC%NXE5nqb|<"̗ϣG=zѣG=z(0_> ѣG=zѣG=a>=zѣG=zcy,ϣG=zѣG=zܘOa| ѣG=zѣG7;08_|˗O`|'0_|O@ DPB >QD-^ĘQF3/߿|/|_| /߿|#ϣG=zѣG=zԘ` g0|O`'0|=zѣG=z|3o`|'0߿|O`'P'p "4 <0… :|1ĉ+Z1ƍ`|'0|_>/|ql#G9rȑ#G9r4` (?0_'P`>$XA'p "Lp!ÆB(q"Ŋ/b̨!|,h ` ,X`,X`  <0… :|1ĉ+Z1ƃ0[`  $? 4xaB 6tbD)VxcFa̷0|#(1ƍ7nܸqƍ7n<c0F6nܸqƍ7nܸq|0 o 8_>$XAK0a„'p "Lp!ÆB(q"Ŋ/b̨`>̇0| 8`AO@ D`>$XA .dC%NXE5̇0_|!̷0ƍ'۸qƍ7nܸqƍw0_Co`6n81ƍ7nܸqƍ7n,/|#a> ۸q|7nܸqƍ7nܘ`>'p? _>0'p "Lp!Æ 8`A$XA .dC%NXEw0_> 70|̧QFӨQF5jԨQƉ`>Co`4jh1|5jԨQF5j(1|-0_> HO@,X_>$XA .dC%NXE[c˗O`|˗/F˷0|5jԨQF5j1|-̗0| iH0|iԨQF5jԨQ#| a̷0| -̧Q|拘OF5jԨQF[cc/a4"W0|'1F5jԨQF5>̷0| 0|9̗1|'1F5jԨQF5>̷`> 4X? W0_A WP`'0_|/_| ̗/_>/_|˗o`|W_  <0… :|1ĉ+Z1|1#a;/߿|˗/|3/߿|˗_|/_|'0_>#ob>5jԨQF5j|O#|s`/|w0߿|O`O`|70|5jԨQF5j0F`>'p|_|Gp`˗/߿|Oo? 4? 4xaB 6tbD)VxcF4ja'0_|70߿|o`70_| ̗O`>0ӨQF5jԨQƇ4j`>`>˗O`|C|o`> 7p? 4xaB 6tbD)VxcF4ja4jT/c>5jԨQF5j|OƁC"|'p ̇!8`A&TaC!F8bE1fOFKOF4ӨQF5jԨQƇ4j$oa>4jDOc>5jԨQF8`A&TX? W` ,X`A W| ,X` ,/_ ,(0_8`A&T 'p "L ,h „ 2l`60ÇW0_=|`|[Ç3Ç =|Ç {a| =|!|'p 8`A&< <80"D!B 3!B"D/B"D!B",!B"D(0B8`A&TaC!Ftoa>%:g0D(QD;0@/߿7?70_|8P` <0… :|1| !̗/| G0A ߿|/_|(߿߿o` ߿| H*\ȰC+O` `>70|-Ç>|Á;o`>`> O`>o`| g0|`>70| /|CÇ>|/|/|G0| a{Ç>|!| g0|/|G0|+O`| 70| '0_|#O`/|Co`>|a>'p|G0| ˗/| |? 4xaB 6tbD`> `> ;`| /߿|/| W0_|70| '0|I(QĆO H`>(0| 7P`O@ DPB >Q|̗`> `> /G0_> /߿|/0@ (߿| 7PO| H*\Ȱ!|_# |'0A H*\ȰÇ#JH? _7_ o| /@/@ '0A#O`o`O| H*\Ȱ|W0|70|O`|C`>:tСC:t80߿| '0|#`>`'0|#_'0|o`>_C`>:t|O||'P`| OO|'p "Lp!ÆB(a>˗/|/_|˗|70߿___/˗/_ o`_ | ߿? 4xaB 6tϡCsСC:tСC 9t!|9t|:tСÅ:tP`>:tСC:t0C2g0CСC:\ϡCsСC:tСC 9t!|9t|:tСÅ:tP`>:tСC:t0C2g0CСC:\ϡCsСC:tСC 9t!|9t|:tСÅ H*, <0… :|1ĉ8`A&T 'p "L ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-K`> 4xaB8`A&TaC!F8bE1fԸ#|; ױcǎ;vرcǎ;rױ|;vرcǎ;vر#| 70߿|o`|7`> @? 4xaB 6tbD)VxcF9rw0|O`| 70| o`>#cǎ;vرcǎ;v`> /|G0|'0_| ̗o`;vرcǎ;v1c>_O` /|/|uرcǎ80,h „ 2l!Ĉ'RX0߿| /߿| '0߿|`> 0@? 4xaB 6tbD̗oĉ'N8qĉ'p@O`>70|`>߿| _O@ H*\ȰÇ#JLOa'N8qĉ'F̗`| '0_'0|70| ̗_;/_'N8qĉ-7qĉ'N8qD`>/_| ̗/_`| 70_&N8qĉ':0ĉ'N8qĉ;O`'̷0ĉ'N8qD8qĉ'N8qb| M8q`&N8qĉ' 0|'N8qĉ'NLoa'̷0ĉM4DM4? ? 4xaB 6tbD)&̷0_Ŋ1WbŊ+V|0'p A H? 4xaB 6tbD) ̷0_Ŋ1`>'p 8`AO@ DP…%̗|˗!C 2dȐ!C 2dȐa| 1dȐ!| 1`>cȐ|2dȐ!C3`cȐ!C 2dȐ!C 2dH0B$XA O@,H0_A ` ,X| H*\h0 ;O`>2dȐ!C 2dȐ!C ǐ!C 2| )ǐ!C1dȐ!C _>1dȐ!C 2dȐ!C 2!C 2d(0| C|12dȐ| c/Á2dȐ!C 2dȐ!C ǐ!C 2a>̗|-ǰ`2dȐ!|̷0C2dȐ!C 2dȐ!C cȐ!C ̷0|w0_|'0?˗߿|˗//_>70,h „  ǰ`ǐ!C 2dȐ!C 2dh0C 2dpac80|̗_|/߿| ̗/߿|;_|/_>2dȐ| g0C2dȐ!C 2dȐ!C /_> 2dȐ| p`>3o`/_>w0߿|`> 2dx0à ? $? 4xaB 6tbD'p "Lp!Æ'p (? 70߿|808_70 H? 4xaB-\p| .\p… .\p… ;o… .\p!|-$` /_|_|˗_|/| G0_| .\P` .o… .\p… .\p|-\p… .$O` #O`/_>/_>`/_|)̷p… [p.\p… .\p… ˷p… .\p| ;o… [/… . <0a>$XA .dC%F7qĉ' 0|'p $`A ,X` ,` ,X`>$XA .dC%F7qĉ'̷0|'.0ĉMx0ĉ'N0_|'p 'p 'p "Lp!Æ[oa 0C$XA H_ 'p 8| H*\ȰC/|=D/_=|Çw0_>|a>>̷0|=/|>|Æ0C=Ç>|/_{/_|>||'p " g`> 4`|3hР  <0… :\aa>|Ç>|| !̗/_> H08p|7p7p| <0… :\a/|1Ç>|Ç[`g0| ̷0|!w0Ç>|Pa ;`|˗O`˗O`|˗`>|Ç>|| ̗` Ca> ˗| G0(0,h „ 2la>#O`˗/_/_|/_ #`>|Ç>|0|w0| ̗0|˗_>/_|+`>|Æs` #o`˗O`|W0|>|Ç>|a|g0|O'p|$/_>/߿|'0_70AO@ DPB 'p H | O|_ ? 0 <0… :|1ĉ+O|o| O@ 'p|O`70 H`A$XA .dPa+_˗/_/_|/_ +ϡC:tСC:t0_/|0|'0߿|'0_|sСC'0|'0| ̗/|˗/| W0|:tСC:tСÆ;0 / 70A#(`>/߿| 8p| H*\Ȱ|!|:tСC:tСC9t(0Â:ϡC:tPa>s`>:tСC:tСÃ:a|СC:t0| 9tX0C:tСC:t!| `>9tСC6̧0|СC:tСC:t0C94a|:tСCC/|˗ϡC:tСC:t0a>sx0_> sСC:t80_>˗o˗o80_>$XA .dC%NX`>Y/_>YhѢE˗"|,hp ,h „ 2l!Ĉ'Rh`> 4x ,h |,8? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujJ <0… :|1ĉ+Z1ƍ;z/|?~Ǐ?~NJǏ?~Ǐ?N̷0Ǐ?~Ǐ?~Qb>>~Ǐ?~Ǐ5Ǐ?~Ǐ?~a?~Ǐ?~|Ǐ?~Ǐ?~la|?~Ǐ?~0 <0… :|8? O@ DPB > <0… :|1ĉ+gѢEs_>-Z0E-ZhѢE YhѢņ3O`>-Z0E-ZhѢE YhѢE3ϢE-:gѢE-ZhѢ|-Zha,Zh|-ZhѢE-&gѢE!cϢE->gѢE-Zhb|-Zh1b>,Zh"|-ZhѢE-&gѢE%;/E-ZϢE-ZhѢń,ZhD <0… :|0D!B"D!BX0D!B"D!Bb|!B"D!Bb|!B"D!B"D A"D!B"DA"D!B"D!&"D!B"D!"D!B"D!B0D!B"D!BX0D!B"D!Bb|!B"D!Bb|!B"D!B"D A"D!B"DA"D!B"D!&? 4xaB 6tbD)NWbŊ 8`A&T? 4xaB 6tH0Ç>|Ç>|`>|p`>Ç>|H0Ç>|Ç>|`>|p`>Ç>|H0Ç>|Ç>|`>|p`O`| 70_|0 @? 4xaB 6tH0Ç>|Ç>|`>|p`'0|O`G0| 70|>|C>|Ç>|Ç=|Ç'0_>_/_+_ Ç>$Ç>|Ç>|H0Ç>|/߿| /߿| /߿|o` o`>>|Ç=|Ç>|Ç {Çw0|߿|_>˗_> O'PO@ DPB Ç>|Ç>$Ç2O| /|o`#O |߿(0߿| 08`A&TaC:tСC:tСC sСCW0_/|O`70| ̗_3/_>:tС|:tСC:tСC9tСÆ`>/_| ̗/_>`| 70_sСCСC:tСC:tX0C:d`>:t`>:tСC:tСC:tСC sСC -СC-СCj| H*\ȰÇ#JHqb+J̷0_Ŋ-WbŊ UXbŊ+V81_Ŋ%[bʼnXbņ*VXbŊ+VbŊ-W| AO| H@$XA$X8`A&TaC!F8|+Voa'[a|9̗|XbŊ+VXqb+J̷`> 4xaB8| W`+X`W`O@ DPB >QDUXQb+Va0_E*VXbŊ+VbŊUX| 1̗0_|%70_E*VXbŊ+VbŊUX| 5̇0|#|+VXbŊ+NWbň*VXq`3`>o`>˗O`|Wq`+VXbŊ'X|UXb| 0|̗_|;_|/_>*WbŊ+VX|+V\| <0… ˗`|W0__/|5TaÆ 6lذaÆ 6lذ!| 6lP |,h „ 2l0!$08_>| ̗o`>8 $? 4xaB 6tbD)NWbEWbŊ0|'0߿|O`|+/a*VXbŊ+VbŊ!WbŊ w0| w0|!/|˗`XbŊ+VXqb+WbŊs`1̷0_Ŋ+VXbŊUX1_Ŋ+V\a>'p $` ? 4xaB 6tbD)NWb|+VXa>0_| UXbŊ+>O@ <+XP`|,X | O@ O@ DPB 6̧0| 0|>|Ç>|80Ç-̧0_>=̗/| Ç>t`| =t/| =|Ç>||̷0_|50_>|Ç80,/_| 4H0_| g`>$XA .dC%27aSoa>8qĉ':O@ O@ 3X0,h „ 2l!Ĉ;_'p8_> #(0A$/$ A'p "Lp!ÆB(Qb&N8qĉ'2w0߿|` c`>3a&N8qĉ'Ņ0ĉ'N8qD/| W0_| w0|̗/߿|̷0ĉ'N8qĉ%7qĉ'N8Qa>_`K`>`|/|7qĉ'N8q|)7q'N81߿|/߿| W0_|%70|;O` 70,h „ 2l!Ĉ'W0_>(RH"E8@_> 70O@ 'p A (?_ O@ DPB >QD8`A&TaC!F_/| ̗`>s`| /_ (QD%J(Qā$J(QD%'0| 70_|3o`>3`> O`(QD%J(Qā$J(QD%.'a>;O|%J(QD%J(QD%J(Q|擘a$'QD%J(QD%J(QD%'a>1̗0|%J(QD%J(QD%J(Q| H!DH0Ḃa>$XA .dC%NXE5nc|!0|9rȑ#G9rȑc| 泘/|˗a|8rȑ#G9rȑ#G H8`A˗A (? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶu.;;PKVVH"44PK+AOEBPS/img/conobset.gifvGIF87aL?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,L H*\ȰÇ#JHE (? 4xaB 6t`>'p "Lp!ÆB(q"Ŋ/b̨Qa|˷qƍW0_|7nܸqƍ7nܸa|˷qƍK/ƍ7nܸqƍ7n4/|6nܸq`| ۸qƍ7nܸqƍc/ƍ7 0_7nܸqƍ7nH0|7n(0_|7nܸqƍ7nܸ`>۸qc| ̷qƍ7nܸqƍ9/ƍ5{_7nܸqƍ7n0'p A Hp ,h „ 'p " 'p " <0… :|1ĉ+Z`|s/|2f4/_ =̗/|e̘1cƌ3f̘1c>3_>2f$/|/_F2f̘1cƌ3fx1|'0|3 ̗b> /#|3f̘1cƌ3fb> ˘1_ƈ1_ƌ3f̘1cƌ)拘a|e̘/c| e/cƌ3f̘1cƌI̷0_|2b̗Qb2J̗1cƌ3f̘1cF271_F2N̗0_Ɖ2f̘QFeQFeD@8`A̗ϠA4hРA gРA | 4hР8`A&TaC!F8bE'08`A 4hРA3hРA O| H <0… :|1ĉ+Z81Fa/F1̇#F1bĈ#Fa/FaĈ|1bĈ#F1bx0Fa/F1̇#F1bĈ#Fa/FaĈ|1bĈ#F1bx0Fa/F1̇#F1bĈ#Fa/FaĈ|1:O@ DPaAO@ DPB >Q ` H| H`'p  'p A /_ 0 <0aA$80,h „ [p…̷p… .\p… [/|-\/_[P`%̗/|̗/… ̗/| .\` .\80| .\p… .\Pa%̷p|[oBˇ0|˗o… ˗0… . ߿߿G߿W߿߿G_|o/˗O |8߿'p A W` | W|7?#H`>$H0A A $HP`>|O@ DP|'0| G0|O` ;o`>/| W0|70|O``O`>O`|'0_;o|-4oa|-a>3o|-a>̷p|!g0… .<`>`>_K`>` 70|G0_|'0_#` +_#_̗߿|߿OG GP`|˗/|/_>#/A$ || |#(0̗/| ̗/߿|70߿| ̗_/_|˗/|O@ DPa|g0_K/_ /a3`_3/_|/| G0|/|/_|/| w0|!W0_|˗/߿|/_˗_[_>+`>#o| w0_/_>W0_/߿|_|˗_|`>.\`'P7p ̗/_/A/A G_o` @ 7P`Oo@|/_|/_>˗|/G_>|O` /| A#H0|#/̗O`> G0߿|/|GP`/|70߿| 70|$ A $H@$8?#(0߿|G0A#/߿| O@ o| _> 70/@ /|o|o|o|o| ̗o@8_'p 80|_|'0@ H`Ao`>0 O@8P '0_˗/߿|O`|'0? _? 4xa;`>+o` '0|˗0|70|O`| W0|70_'0| 70|`>/߿|/|w0_| 3/߿|O`/߿|̧`|70_ S(0‚`>/_3/|'0__|O| *T0|80߿#A ̗/_(| o`>/_|˗/| 7`>/߿'p|/_|7`> ߿8_| GP`>˗/|̗/_> ߿| /| |˗/_/_>#/A |˗/A#H|#(0|O`/_>'`>ooO@3hРA $ϠA 4h |'p "Lp!ÆB/| E4/|(0_|Ea#F/bĈ1bĈ#F1_Dh0_D"Q` |'p ̇!B"DX0B"DP`>8`A&TaC!Fq`E/|ka#*1bĈE`>"F1bĈ#H0_D"`-̧0_Ĉ1bā"Fx0|#F1bĈE,/|"`%0_Ĉ 1bD"Fx0|#F1bĈE4/_h0_ă"̗`|˗/bĈ1bĂ H*, H*\ȰÇ# O@ O@ O@ O@ O@ ̗/_ 'p "Lh? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVmzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳi7;;PK_{ΎPK+AOEBPS/img/lobenab.gif}GIF87aK?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,K H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nر"|'p O@$XA .dC%NXE5nQb|˗ϣG=zѣG=z/_> ѣG=zѣG;K/G=zѣG=zqc (?˗O`|˗_|G0,h „ 2l!Ĉ'Rh"ƌ7r0|˗/߿| /߿|O`'0|=zѣG=zѣ| ̗o`>/߿|/_>ѣG=zѣG/˗/|`>˗/߿|`>`> 4xaA$XA .dC%NXE5nĘo`> ̗/| ̗o`_|Ǒa|9rȑ#G9rȑ|O@ /@߿|7?'p "4? 4xaB 6tbD)VxcF'+|!ȑ#G9rȑ#G H HP`,X`>8`A;o|%۸qƍ7nܸqƍa̷0|#81ƍ7nܸqƍ7n4a|8? 8P`O@ DX0_ &L(0,h „ 2l!Ĉ'Rh"ƌ C/_|-̧0_|˷b7nܸqƍ7nh0|̇0| 8`A'p "Lh0,h „ 2l!Ĉ'Rh"ƌ `|̇0|mܸqb7nܸqƍ7nX0_G0|̷qƉ6nܸqƍ7nܸq#|O ߿| (`> O@ DPB 'p H*\ȰÇ#JHŋ3.̗/_| 70|W0F-c/F5jԨQF5Vw0߿|70|̧QFӨQF5jԨQƉcӨQ|iԨQF5jԨQc| a̷0BO@'p "L? W`8`A&TaC!F8bE1foa>K/|i(0|iԨQF5jԨQ#| a̷0| 1̗OF%1_>5jԨQF5j|oa>;oa>4jD`|iԨQF5jԨQ| a̷0| %W0F 3`$ӨQF5jԨQƇ'p  'p A +X``A ,X`| ? 4xaB 6tbD)VxcF4^W0|g0_|'0_|W0|/߿|/_|˗/|M̧QF5jԨQFiĘ`>`|/_|`|/_/߿|/|#c>5jԨQF5j|Oc|s`| ̗o`|;_'0| '0_>/_>4jԨQF5jԨa>˗!| O70߿||˗/_0@@'? 4(0,h „ 2l!Ĉ'Rh"ƌi80|w0|˗/|̗_/| '0_>ØOF5jԨQFӨq` O`/_>a /߿߿(08p`>$XA .dC%NXEӨq`>ӨQa4jԨQF5jԨa>ka>  QD-^ĘQ`> c/a>ӘOF5jԨQcE$XA O@,X` ,XP`,/_ ,X`+X`,`> 4x 'p "L8?8`A&T? ̗/_ O@ H K0a„ K80_„ &LH0| K0a„ K0| K0|%L0a K0a„ K/_Kh0_| ˗/a„ K0a„ K80_„ &LX0_|˗/|K0a„˗/a„%/a„̗0a„ 3/a„ &La|%$/| &L/_„ &LH0_&L0aB&,0 <0@$Ẋ!B C!Ḃ!B"<a>!/B!D!|(_o'p`|˗o| 7p8`A&TaC!Ftoa ˗o`|g0A ߿߿߿ ߿| o'0|(7P|_ ߿8_> #H_> $ A $Hp`>O`70|o`G | H*\ȰÇ#:̷0| '0| 3` '0_>/|w0|O`3o`'0|`H0D3_#`'0| I(QD%J4oa+_>g0|O`|/߿|!g0|o`> #`/|#o`>3`>/߿|'a3/|%̗/@(0| 7_'p "Lp!ÆB1|70_| w0|W0߿|˗_`>`>O`3o`_O`>`>˗/_G0DO H`>(0| 7P`8`A&TaC!F/_>;o`'P /߿|O7P|7P߿|'p? ߿߿ @_߿|'p A||,X|_# |'0A H*\ȰÇ#JH?| GP | O'0_ _߿'p@ /|`> /||8P $08_|/A80,h`|'0| 70_/_>W0,h „ 2l!Ĉw0|o`>`˗/| /|̗`O`3o`/|`+/|/_W0ă;0?O|0@ @ <0… :|1D;/_|˗O`|70|(_ ߿| | ߿|_>/_|70'P7߿|߿|O G0߿|˗O`>#/| $H 8`A&T80… .\p… .\p‚.D` .` .\0| ;o| .o… ̷p… .\p… .\` 3o… 3o… "g0B[0… [p…-\p… .\p… .,oB [pB [p…̷_&̷pB.\p| .\p… .\p… [a>.\P`>.\p!|-̧0B.\80… Zh 'p "Lp!ÆB(q|3"E H|Ca|Q"E(RH"E)2GQa>(R4`>)̧0_>=̗oa|(JO@ DPaA$XA .dC%N0 =zѣG=z|ѣG=zѣG;;_| ѣG=zѣG9C/_| ѣG=zѣG7308_|˗O |7?'p "Lp!ÆB(q"Ŋ/b̨q#ǎ '0_|W0_/߿|˗/߿|ѣG=zѣG=jW0|/_|'0_/_|g0G=zѣG=zx1_| ̗/_̗_|/_'p`>O@ Dh? 4xaB 6tbD)VxcF-70_|˗_|/_>/߿| w0dž8rȑ#G9rȑ#G 3/_>3/?'_ O| HO@ DPB >QD-^ĘQ#B$X A$80_| ,X`+X` $? 4xaB 6tbD)VxcF]0|(? 4h0<(0,h „ 2l!Ĉ'Rh"ƌ滘a6J̷Qb7nܸqƍ7nx0| !̷bmܸqƍ7nܸqƃ'`>808p`| H K0a„'p "Lp!ÆB(q"Ŋ/b̨`>̗`>˗o|X1ƍ7nܸqƍ7n<a|;a> H8`A&<? 4xaB 6tbD)VxcFw0_|w0|mܸQb7nܸqƍ7nh0_70_ 3oƍmܸqƍ7nܸqF˗o`|'p A H*\Ȱ!B$X? 4xaB 6tbD)VxcF̗`| ̗` ӨQc|iԨQF5jԨQ#|`>w0|iԨbiԨQF5jԨQ| ]0F+惘OF5jԨQF#[b>'p`>$X|,h „ 8| ? 4xaB 6tbD)VxcƁ滘as/FK/b>5jԨQF5joaC/a| ih0|iԨQF5jԨQ#| ]0| )̧Q#|ȨQF5jԨQF-w1|5̇0_|4̗`|K`4jԨQF5jԨb HA HP`|,80_ W| ,H0_,| ? 4xaB 6tbD)VxcƁ4^W0| '0|/_>˗`>˗O`|/_|/_|'1F5jԨQF5B̧c>#_>/| ̗/_|˗_ /?_>o`> ? 4xaB 6tbD)VxcƁ4f̗/_ g0_/_|+/߿|/_|/?'?˗o? 4xaB 6tbD)VxcƁ4j!| O|˗O`|(?/_/_|0808P`>$XA .dC%NXEӨq`>`|'0߿|g0_>0@'@O$H| H*\ȰÇ#JHŋ3̧Q|70|/߿|˗/_ '0_|'po 8p <0… :|1ĉ+Z1|50|5*̇1F5jԨQF5B̧Q| !W`>8`AC| H*\ȰÇ#JHŋ3̧Q#| )̧Q#|iԨQF5j0 <0‚ HP` ,X` W`| W` ,X` ,X| O@ DPB H*\ȰÇ#Joĉ17qs/ĉ囈0|'N\oĉ'N8q|'Na' O| H?$XA 'p ˇ`>"D!B8`A&TaC!F80ĉcoĉ'N8a>&N0ĉ'N8qā˗/| ̗/_#/_>oa>&N8qĉ[a|˗`70_|(߿o`'p| H*\ȰÇ#J`| /_˗o`>/߿|[oĉ'N8b/߿|#/_˗O`| /_>%7qĉ'N8q`>̗O`|O`|/_8qĉ'Noa>/|G0_G0_>̗/a'N8qĉg0_> ̗`|`|-G0_|'N8qĉ!/|˗O`>#/A'P`|80_/,h „ 2l!Ĉ30@@'p|G0_||O@ DPB >Q|g0A߿ /_ ? 808`A&TaC!F0'p`|'0_O`/߿|(`> 4xaB 6tbD 'p`˗O`|7_| ̗o|˗o|08`A&TaC!Fd_>'0߿| /|O`|[`>%J(QD `'0߿|W0|G0_>g0_ (QD%J80|((߿o` o@`>$XA .dC%6'0| O(߿'?˗|O G0,h „ 2l!ĈI(`>%J(QD(Q|%J(QD(Q"|%J(QD%2'QD$J(QD%2'QD$J(QD%JdODI(QD%JdODI(QD%J0D(QD%J0D (QD%J(a>%:'QD%J(a>%'QD%J(Q"|%JtOD%J(Q"C$XA O@ DPB >QD H*\H? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳi׶}QO@ DPB >QD-^ĘQF=bg0_?~Ǐ?~c| }Ǐ?~Ǐ'[Ǐ?~Ǐ?~1_|?~Ǐ?~GǏ?~Ǐ?B0Ǐ?~Ǐ?~a>Ǐ?~Ǐ?20_|?~Ǐ?~ǂ 8? O@ H*\ȰÇ#JHŋ3jȱ|9̗/| S/G=zѣG=z`[ϣG=zѣG=zx0| 1ѣG=zѣG=z=zѣG=z|IѣG=zѣG=z˗/_G0G=zѣG=zq |/_|Gp | <0… :|1ĉ+Z1ƍ;̗/| /_|w0|yѣǂ H*< <0… :|1ĉ{`| /߿| 惘bŊ+Vx0_ŊUXbŊ+V0_|拘bŊ+Vh0_ŊUXbŊ+V0|擘!|,h ,h „ 2l0a>Ç>|Ç&`=$a =|Ç;_˗/|G0_>  'p "Lp!ÆB(q"ń&櫘ob>*WbŊ3/_|/|/߿|G0_>/_>WbŊ+VXb|I̗b>*WbŊ30@߿߿O|'p`>$XA .dC%N0_|/|70_| XbŊg`> '߿'p`| ̗_˗O`O@ DPB >QD U0 O@ w`/_'p "Lp!Æg0_|˗_|(?˗o`| 08_>$XA .dC%N0_Ŋ1g0|KbŊ+'p A̗/_/@ _/? O@$ <0… :|1ĉ G"`>˗0E)R$` ˗/|'0߿|/߿|/|˗O`|%G"E)RH|QH_>3 |O| H*\Ȱ!| g0_|`> o/߿7?/,h „ 2l!Ĉ'O@'p "L |$/_'p A$XA .dP`:t`:tСC:ta|СC)/|˗/a:tСCsСCsСC:tСĊ0C̗0|'0_sСC[ϡC [ϡC:tСCp`>s!| 9Toa>:t`>:t`>̗/à H H*\ȰÇ ̧0_{a>&̷0Ç>ta>0| ̗|=\/_>|!|C/|20Ä{Ç1Çsa| {P`>||;oaca| =|C'p "L ` `| ,X`| H*\ȰC w0_| {Pa>&̷0Ç>tÇ.0| %̗o`|C`>|a|3`|=|0|[Ç:Çca>`|=|Ç{(0|3C'p  'p 8`A&T| 6lذ!| w0|O|O@/_|O@ DPB "p`>{aÇ 3Ç6̇0߿|'0|/_| ˗/߿| ̗`>|!| '0|̗Ç=|ÃÇw0_`>/_|˗_|W0Ç>|a˗!|,h B ḨPB *40 <0… :D 'p@'0_|˗o|/_> 08`A&TaÆ&_>:t`>:tH0_:tСCs/|'0_|˗`|˗/| CϡC:tX0ÄСCСCCϡC:tX0߿|G0|/_|+/_|/_>СC:ϡ|9tСC9tСC:tСCs`>s0|:tСÁ*0C:tX0C:ϡC:t`'p|$(`>'p 4? 4xaB 6Lϡ| 9tСC9tСC:tСC c/a>kϡC:t(0ÅsСCsСC9tСC̷0|0C:tP`> %̗ϡC:<@ O@8`8`A&TaC!̗a{Ç>T!|̗Ç>a|5̗a|=|ÇG0_{0_|{Ç{0_|>|ÂSoa9Ç>|(0_|O@ O@ O@ DPB sСC:tH0_| %̗0_0C:tСC:TϡC:t/C:tÂ0| Sa>:tСC:t0C:t0C:tСÂ;` ˗_| W0|:tСC:tpa>:t`>:tСCw0| 70_|˗_|G0|:tСC:ta:t!|9tСC:L`߿@˗/߿|80 <0… :|1ĉ;"E 8`A&TaC!FL 'p@'0_|˗/ H*\ȰÇ#JH!,h „ 2aÆ 6lذaÆk/_| _|˗`6lذaÆ 6lذaÆ kذaÆ kذaÆ 6lذa|g0|̗/|˗`>6lذaÆ 6lذaÆ kذaÆ kذaÆ 6lذa|5o` ̗`>6lذaÆ 6lذaÆ kذaÆ 6lذaÆ 6l0_k(0_8`A&TaC!F8bE1fԸcG1̗a> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎC,y2ʖ/cάy3Ξ?-z4ҦONz5֮_Î-{6m ? 4xaB 6tbD)VxcF9vh1_>~Ǐ?~Ǐ)Ǐ?~Ǐ?~a?~Ǐ?~c| }Ǐ?~ǏsǏ?~Ǐ?~0|}Ǐ?~Ǐs_?~Ǐ?JO@ DPB >O@8`A&TaC'p "Lp!ÆB(q"ŊgѢEs_>-Z0_>-ZhѢEhѢE g0|-Zh1a>-ZhѢEhѢE g0|-Zh1a>-ZhѢEhѢE9gѢEhѢE-ZhQa>-Z0_|-Zha>-ZhѢEhѢE-gѢE!hѢE-Zh1a>-Z1_|-Zh1b>-ZhѢEhѢE̗ϢE-JgѢE-ZdE%P>$XA .dÄ ? 4xaB 6t0a>!B"D!B`>!B"D!B"Ą B"D!B"Ă B"D!B"D"D!B"D "D!B"D!BL"D!B"D!B,"D!B"D!B1a>!B"D!B`>!B"D!B"Ą B"D!B"Ă B"D!B"D"D!B"D "D 8`A&Tx? 4xaB 6tX0Ç>|Ç>|`>|p`>Ç>,Ç>|Ç>|H0Ç>|80Ç{ÇÇ>|Ç>$Ç>Ç=|Ç {Ç>|ÇÇw0߿| ̗/_>˗`|(߿?O@ DPB Ç>|Ç>$Ç>`| ̗_|˗_|/|/߿|g0Ç>|`>|Ç>|!|>||(7PO ߿@ <0… :,Ç>|Ç>|H0Ç>|O`> O?(?˗o`| /_| /,h „ 2l`>|Ç>|!|>||̗/_/@ O|/߿|'p`>? 4xaB 6tX0Ç>|Ç>|`>|`>'p`|˗/߿|'P70߿߿ O 'p@$XA .dpa>:tСC:tÂ:ta| `| ̗_|˗_>˗O` 70߿|g0|:tСC9tСC:tСCСC;O`>'0_ O߿߿ _>7p8`A&TaC:tСC:tСC sСC -СC-СC:СC:tСC:tX0C:\oa>:$oa>:ta>:tСC:tСÂ:t| 9t!| 9tСC9tСC:tСCСCcϡC [/C:t0C:tСC:ta|:tPa>:t`> O| H?$X| H'p "Lp!ÆB(q"ʼn*V1|+J0|k/_E*WbŊ+VX|+V!|,h „ 'p A `| ,X`,X`A8`A&TaC!F8|+VbŊca0_ X0_Ŋ+VXbŊUX1b+Va#/_W`+VXbŊ'Xb|+V(0|w0_|O`>/_|UbŊ+VXbʼn*V0|+VH0|9G0|_> ˗_g0_Ł*VXbŊ+VbŊ WbŊ/|W0_/|/_O|8p8`A&TaC!F8|+V,0 <0… :< 'p@ ̗_|8_|˗O`|'p@$XP`>$XA .dC%N81_Ŋg0_Ŋ+N̗a+/߿|w0_|'0_>0_Ŋ+VXbŊUXQ`*VXqb3`> /_̗/߿|˗`XbŊ+VXqb+w0_Ŋ+N'0| Wb>XbŊ+VXqb+XbŊ 9w0C O@3h0A8`A&TaC!F8|+VWbŊka10_Ŋ+VXbŊUH1_Ŋ+Vloa>*20|+VXbŊ'p  'p A 0@ H@$  <0… :t/a>>a>|Ç>|pa 1̗0_9̗Oa|{Ç>g0_>6̗| =|Ç>||cas/|>|Ç80,`> 4x0,(08`A&TaC!F8_>1w0| E0E)RH"EH"E)R0A o  G |#H| #/_>#H| H*\ȰÇ#JOa'N8qĉC/|;a>;/_|coĉ'N8q| M8qĉ'N(0|#` 3` ˗/߿|̷0ĉ'N8qĉ%7qĉ'N8qb/| #/aO`>/|G0ĉ'N8qĉM7qĉ'N81a|`|̗0_#_>˗/_ +_|'N8qĉMd@'0? 4xaB 6tbć Hp  ̗_>O@ 'p (?/߿|0 <0… :|1ĉ%'p "Lp!ÆB(`'0|0|g0_˗`>&N8qĉ'N0ĉ'N8qăC/|!70|G0|/߿| #oĉ'N8qĉ M8qĉ'N\ob|5w0&N8qĉ'N8qĉ'N8q"| 曘a>&8qĉ'N8qĉ'N8qĉM,o| )1ĉ'N8qĉ'N8qĉ'NLob|[oa8`A&TaC!F8bE1fԸ|U̗`| 5ױcǎ;vرcǎ;̇1|˗/|+/_|;vرcǎ;vرcA$X`A$X`|0@ H*\ȰÇ#JHŋ3jcȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷p7;;PK+77PK+AOEBPS/img/lobread.gif^&GIF87aXt?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Xt H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜY`> 4xaA$XA .dC%NXE5nG`|!C 2dȐ!C 2dȐ 0_!C 2dȐ!C 2dHB22dȐ!C 2dȐ!C 1|B 2dȐ!C 2dȐ!C 1_|B2dȐ!C 2dȐ!C y1A'0_|/_>#? 4xaB 6tbD)VxcF9v|/_|;/߿|˗_>/| 2dȐ!C 2dȐ!CZg0|;O`'0߿| |,h  H*\ȰÇ#JHŋ3jȱǏ ˗` w0|˗_>0@? 4x|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?"G0_|˗O`70߿|/_>0H A $H A b 'p@O |_߿8`A <0… :|1ĉ+Z1ƍ;rO@ O@` ,X| ,X`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ]0|8? 480<80,h „ 2l!Ĉ'Rh"ƌ7r1| a>yѣG=zѣG滘a>y\/GQD-^ĘQF7C/|1̷`> 4x@$XA O@ DPB >QD-^ĘQF7C/_cϣG yѣG=zѣG`| ̇0|y1a>=zѣG=z|/|g0GѣG=zѣG=O@ `>8 A$XA .d!|,? 4xaB 6tbD)VxcF9v` 70|g0Gs/G=zѣG=z0|G0|w0G惘ϣG=zѣG=zloac/_ HO@,X_| H*\ȰÇ#JHŋ3jQc.cOa|僘/_˗Oa:vرcǎ;vرcG滘a>̗a|7K/b;vرcǎ;vQc.c`_>"رcǎ;vرcǎ5[b>[/a>:W0_|1_ǎ;vرcǎ;v1|1g0_|0_|!g0_|;vرcǎ;vر| 8`A8||+(0_|'0_|G0|'0_˗_| /_|W`8`A&TaC!F8bE1fԸ|)#a>;/߿|˗/|+/߿|˗_|/_|/_| W0|;vرcǎ;vر|+'0|w0|˗`>#/߿| ̗/|'0|囘cǎ;vرcǎ;vԘ|{08_> /_|#(0߿|˗_>'P8߿O@ O@ DPB >QD-^ĘQFu̘a>;O`|˗o` '0| ̗o`|/_>滘cǎ;vرcǎ;vԘc|70| /_|'0|(_߿|_>$X| H*\ȰÇ#JHŋ3jQc5w0_ǎaױcǎ;vرcǎ;jQcg`>8`A Ca>$XA .dC%NXE5n1_GCcǁ2رcǎ;vرcǎ51| u/|;vرcǎ;v`> 4xaB8| ,X`  | W` ,X`A ,X| O@  H'p  ? 0 O@8`AO@80,`> O@ DPB >"D 1"D̗a| BH0_> 1a> B$Oa5̗| Ah0|90D!Ba>!*0D'P ,H`> 4xaƒ H!$!Ḃ!B!|C`>!D|C/B"!B"D!B"<!B"D(08`A&TaC!Fta> 'Qb>SO"|I(0| )'_>%J(Qa> /߿(߿ /_708p| H*\ȰÇ#>̷0|70_| 3 |7P708_o@8p /(@߿|? /7p|8p| H*\ȰC +O`> `> 70| -Ç>|Á;`/_|70|O`|0| +` O`'0_k`=|Ç`>`>_So`>>|Ç>|H0|70_| ̗`;o`|̗/|G0|70|'0_|/_>`> 70_|/| 7p`808_|/_|? 4xaB 6tX0߿|̗o`>˗o`S`>>|Ç>|h0_;o``>;o`> /|W0߿|/|O`+`|70߿|˗O`|/|g0@'? ? 4xaB 6<0 'p |'߿'p ||$(`> 4xaB 6tbD 'p||'P | O @_O@ 'p@/߿|'0 (?˗/@ ?˗_ O@ H | O|o (? 4xaB 6t80_> O`>C_S`>|Ç>,/|/|̗`+0@/(0_o|/_| /|(0_(0| _7P`8p ̗o /G_>$XA .d|W0|70|O`|S`>|Ç>,_/߿|G0߿| '0|O`|'0|g0| /|/| '0|/߿|/|g0|/_{Ç'0A߿|G?˗o? 7070,h „ 2l!Ĉ`| ̗/_>g0|70_ ߿ o|70|'P|߿| o`>o|/_|˗_ /7_>/_˗o|'p "Lp!Æ{a|>|Ç>|0C {`C|=|0| a>||>lÇ>|Ç{0|w0_|=L`;a>Ç>dÇ =|Ç>|!|3C[Oa!!|-̧0C>|Ç =|a>|Ç>d|=|h0_| [a| =|0|c|>C=@8`A&T80… .\p… .\p‚.<` ̧0| ˷`>.\X0|-o!| .\p… *O@ DPaA$XA .dC%N0 <8?8`A O@80,`> 'p "$'p`>$X|, <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >88`A8| ,XP |,hA$XA .dC'p "O@$XA 'p ,X@$X ,h „ 2l!Ĉ'Gq`>/_>0_|)RH"ņ(:g0E)̗/|=̗/_>G"E)RHa>%̇0_>Q/_>)RH|3"ECa>QH"E)Rl|-̧0EQH"E0|)"̇0| QT/E)RH"Ņ'`>(0 8p`O@ /'p "Lp!ÆBl`0_> 7p`(`>_ o|@o 80(0߿|/,h „ 2l!Ĉ'ˇ0_>;a>("/|QH"E3/|/| W0|W0_>/| W0| W0|9G"E)RHQa>a>3`>/߿|/? 7߿/,h „ 2l!D /_|O`>+` +/|#O`+` ;`| '0߿|/_>3/bĈ#F1bD;/߿|!70|'0_|/_|+/߿|_>'0߿|E1bĈ#&'0|/|70_|w0_|/| 70_| 0|̗_| '0߿| /_ 1bDEQDE@O70A A_>#_>_70_>#? 4xaB 6t|/߿| '0A O|7p|'P|/߿߿'P`7p _ /|˗/| 7P`>$XA .dC%*O `>8P $080_|o_> 8_#H0,h „ 2l!C/_| G0|'p@|/߿|o`O@ H | O|'0|8_'P |O@ DPB >Qb|3/|!W0_> `/߿| /_o`|`>I(QDw0_ ̗/|70_|;`'0|o` 0_|̗O`_|O`'QD%J(`>3`>#_ #O`>O`|˗O`˗O`|#Oa>%J(Qb>Co`|/@'P|O@˗O |߿| __> 7_o|o|/_|/_| 7P` <0… :|1b| I,o`>;OĆ(QD#SO"|I0|'1b$J(QD%̷0Ăk`>  /A8`A&TaC ["D b>;"D"D!B` w0| A0_|!B"ąQ`> B`>_> B"D!B$a>!̷0|!60D!Bqa B`>!Coa> >0D!B"D1`c"ą[0 4hРA 3hРA gp`>3h0A ̗Ϡ8`A&TaC!FTa>)̗`|(Q`| [O| 0ăA̷0D (a>̗a| 1D%J(Q'p  'p A  O@ D(? $`| 4hp`>380_>4h | g |,h BO@ D /_| $0   <0… :|1|%J(Qā0| )'a$J(QD%JOD%J(Q|%J(Qā;O`'p࿁ /$/AG|$H_> O@ DPB >Q|'N8qĉ M8qĉS`> 70|w0_|̧0߿| 17qĉ'N8qa'N8qā 8qĉ#;O`'0|W0|g0|̗/_>'p࿁ O| ? 4xaB 6tbD 7qĉ'Nt`'N8qb;O`O` #_`|O`/|+`>&N8qĉ'>w0ĉ'N8q |,h „ 2l!Ĉ8_>o`>G| O@8p _>_|7p |,h „ 2l!Ĉ'JO@ DPB >0_Ĉ#F1|O`| W0_|s/_| _>|  <0… :|1ĉ QH"E H"E)/| ̗o`W0|=G0߿|_>_|g0|)RH"E'H"E)G"E)R4O`o`>g0|g0|̗/_>/߿|'0|QH"E)R"E)RH"E)Rb|5w0ņ(RH"E)RH"E)RH"E)GaC"|)RHEQDEQDEQDEQDEQD?O@ ,a>!!B'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?_cc> A $H A | S`>2$H A $H A0 ˗ϣG=zѣG=z(0_|˗ϣG=zѣG=z/džyѣG=zѣG;_>ѣG=zѣG7ˇ0߿| ѣG=zѣG=j̗`|˗/|/_ ߿ ? 4xaB 6tbD)VxcF9v\/_|/߿| /_|˗_>/|=zѣG=zѣ| /| '0__|+/G=zѣG=zh1_| _ 0@߿| O@$XA8`A&TaC!F8bE1fԸb /߿|W0|O`>`> qȑ#G9rȑ#G̗`|˗/|80߿@ <`>$XA .dC%NXE5&O@ O@̗` ,X| ,X`O@ DPB >QD-^ĘQ#|1g0_>  ,/m/F6nܸqƍ7nܸq|-̇0_81ƍ7nܸqƍ7n<a|(? 8P`˗? 4x|%L0aB8`A&TaC!F8bE1fx0|Coa>  <8`>8`A&? 4xaB 6tbD)VxcF!̗`>k0 <? 4xaB8`A&TaC!F8bE1fH0|˗o`>;oƍmܸqƍ7nܸqƂ;_|!G0|7noƍ7nܸqƍ5'p@/_|$0'p "Lp!Æ 8 A$XA .dC%NXEg0߿|o`> +OF5̗OF5jԨQF);O`>a> ӨQ|iԨQF5jԨQ| ]̷0|iԨ0|5jԨQF5j1|-̧`>'p H*+X| H*\ȰÇ#JHŋ30| %̗/_|1̗/F˗0_|5jԨQF5j0|-̇0_>S/Fˇ0_|5jԨQF5j0|1g0_>%̗Oƃ1F5jԨQF5>0| ̗a|#O|̗0_"ӨQF5jԨQƇ'p  'p A W|G0_,X`|,/_| ? 4xaB 6tbD)VxcF4bG0_> o`'0_|/|˗/߿|/_/߿|W0|5jԨQF5j0ƌs/|+/߿|/_>3O`|/߿|_|(_>o`| $80,h „ 2l!Ĉ'Rh"ƌiԘ/_|8p _o|/߿| ̗_/_˗o? 4xaB 6tbD)VxcF4ja+O`/_/_|_|7`>'p`|8p@8`A&TaC!F8bE1fOƁ70߿| _|'0߿|O`O`˗/_>ØOF5jԨQFӨq`|w0_| ̗/|w0_ _@ A  <0… :|1ĉ+Z1|5̗aiԘ0_>4jԨQF5jԨa>0_UO@$XA!D_>$XA .dC%NXEӨ`| K/F˘OF5jԨQE$XA O@,X` ,XP`|˗`| ,X` ,/_| ,X_>$XA .dC%NX|/2̷0ŋ W0_| w|]$ŋ/^xŋ]0|/6O@ H |,h „ 'p  <0… :|1ĉ+ZExb/^dŋ/^xŋ̗/_/_|ˇ0_|70_| ]xŋ xŋ/^x|'0| ̗`>70| -wŋ/^4ŋ/^xŋW0_#`̗_xŋ/"wŋ/^x|W0_[/|˗0|xŋ/&w0ŋ/^xŋ?˗/|˗/߿| ̗/߿| /,h „ 2l!Ĉg0ĉ'N8qĉ'O@8_>`>/#H|,h „ 2l!Ĉ'O@ DPB >QD`>`|+/| ̗O`hѢE-ZLϢE-ZhѢE;0o`O'`>?  <0… :|1D&N8qĉ'N8Qb'7qĉ'N8qĉ'N8qĉ'J7q&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'N0 <0‚ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘U'p "L8? O@ D(? 4xaB 6tbD)VxcF'(1B O@ ,0 H*\ȰÇ#JHŋ3j1G˗#|qȑ#G9rȑ#Gqa|!Ǒ#G9rȑ#G9C/_'0|/_ /A $H A˗? 4xaB 6tbD)VxcF;O`| #`> ̗0|86W0_>9rȑ#G9r1|+`>/a>̗O`|'p A#@̗? 4xaB 6tbD)VxcF;/|G0| '0|˗_|'0_| ̗/߿|_|̗#G9rȑ#G9j̇0_|˗O`>/| /| ̗O`> '0|_>ȑ#G9rȑ#G˷0_#`>'p@70|/|(__>/_>$XA .dC%NX1"|,h „ 'p "Lpa|3/| #`|/a>3/߿|˗/|O`|'0߿|;O`| 2dȐ!C 2dȐ!C 2dh0C 2!C *G0|/_|˗_| ̗/_O`/_/|80߿ ? 4xaB 6tbD)VtϢʼn,Z80_|- g0_> W0E-ZhѢEhqb>-W0E̗ϢEgѢE-ZhѢE O` _O| ̗/|˗/'p "Lp|1dPa1dPa|1dȐ!C 2dȐ!C 2dȐ!|/| G0| /|'0| 2da>2d0|1da|1dȐ!C 2dȐ!C 2dȐa> /_>` /|#o`>2dȐ!|1dPa>cȐ|!ǐ!C 2dȐ!C 2dȐ!Cw0? ߿|߿80| /80,h „  g0C S/_| 2̗/_>2dȐ!C 2dȐ!C 2d`>'p|˗/߿|O@O@ /8`>'p "L`> HO@8`AO@'p "Lp!ÆB(q"ŊW0_/|70|+_>3`|,Z|ϢE-"gѢE-Zh"|`|O`>3o``>̗0EYhѢE,ZhѢE-Z\a>'0_>#o`>/_|˗_|̧0E YhѢE,ZhѢE-Z\oa>'[ϢE,Zh"|-ZhѢE-*0E-g"|-ZdE? 4xaB 6tbD)R0_Ŋ1Wb|+VXa''p "L? O@ O@8`A&<+XP`>$XA "̷_ H8| O@ DPB HK0a„ K0a„%0@ HA O@8`A&,O| SPB S(0*T/˗/B *T(`>8`A˗0a„ ̗0a„ K/_ ˗/a &LX0_BO@ DPB$(0_,X`,/_O@ DPBcȐa> 2d/C ̇0_> ˇ0C  ̷0C 2dȰ`2 2d/|/_|70_|˗/|3a| "̗`>o`G0_|'0_|[!C 2dX0|˗o`|˗/| ̗!C 2/C 1dȐ!O`'0_|/| ̗!Äw0|߿|/߿˗_߿|8_>O@ DPB -w0_|'0_3/|5\aÂ5l0_Æ &w0|G0|o`>;`| /߿|/_+/|/| '0|˗o`kذaÆ S`>˗o`3/|/_|/_  O|/_ @̗? 4x`>"D|70߿|G0_|/|#O`/|O`|˗/|`>O`|`|;o`"D!B"DH0_;` ̗`3`>˗_>/߿|/_/|_|˗_>`|"D/B"D`| /_|;`˗/_g0_|O`| ̗o _ o`7_|(`>8P`> <0… ̗`|˗_ GP`>#(0_'0߿|˗O`>/_>#/|O`>/$H A  <0!A$8?_>`|'0_>0(0o`| ̗o 8? _/ /|0 <0 :TG_|#8`> ,`>o7p`? /_|O |'P |,h „8`A&/|`|o`|'0_>+/_/| '0_|w0_>3/|_>˗o`O`|̧PB *TP|+o`w0|g0|O`O`> /|'0߿|'0|3/B SPB w0_|˗/|0@'߿? O`/_|/_o '0˗o`|O`| ̗/_>8_8`A&TaCw0_|o`;`07__> '0?/߿ O|8`A C!Ḃ!Bw0_>"`>"DP`>"D!B"D_>̇p`>!D!B"!BC!Ḃ!Bw0_>"/|"D|"D!B"D|"<|C!B(? 4X0_4$XA .d!|˷0|>|a|Ç=|a>{0_|=|`>|!|˷0|>|Pa|>,Ç{!| a|{a|>|C>oa{Ã{`>Ç-O@$X |'p  ,X`  <0… :DS0@ H*,0@ HK0a„ 'p "L? O@ O@8`A&< <0… :D0  ̗/_>0 O|8`A&$? 4xaB 6tbD)VxcF70|/_/߿|+/߿|_| ̗/߿|H1G9rȑ#G9r/_| /|˗`>/|/_ HO@ DPB >QD-^ĘQF70߿|#_>/_| '`>(0_>$XA .dC%NXE5n1|/_/߿|'0߿|'0|3/_ǎ;vرcǎ;v1A o/|߿|'p`| H*\ȰÇ#JHŋ3jȱc|9رcǎ;vرcǎ; ̗#|'p   <0… :|1ĉ+Z1ƍ; ̗#|=zѣG=z#|,h „8`A&TaC!F8bE1fԸcG'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~Y;;PK^ ̶((PK+AOEBPS/img/syntax.gifwGIF87a:?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,: H*\ȰÇ#JHŋ3jȱǏ CI |'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/'p A$XA .dC%NXE5n#|Ǐ?~Ǐ?~Oa?~Ǐ?~|Ǐ?~Ǐ?~`>>~Ǐ?~Ǐw0Ǐ?~Ǐ?~a>Ǐ?~Ǐ?60_?~Ǐ?~"|,h@$H`> 4xP ,h „ 2l!Ĉ'Rh"ƌ7r|c>qױcǎ;vرcǎ;6_>㘯cǎ;vرcǎ;v\|ucǎ;vرcǎ;vL| ucǎ;vرcǎ;vL#| u$cǎ;vرcǎ;vDc| u,cǎ;vرcǎ;vD|u4cǎ;vرcǎ;vD|˗|;vرcǎ;vر#|˗|;vرcǎ;vر#|;ZױcGuQGuQGuBO@ DPB'p "Lp!ÆB(q"Ŋ/b̨q#G:vcǎ;vرcǎ;vDcG:vرcǎ;vرcG:vcǎ;vرcǎ;vDcG:vرcǎ;nO@ DPaAO@ Dp ` H*+X|,hA$(`> 'p "Lp!ÆB(q"E*V` cOa˧0|[Oa+VXbŊXb>*V$a*V/a*2̗0_>*VXbŊ+VDbE X`>Xb>0|UXbŊ+Vx0A ߿(߿ /_/ o@0@@ oO@` ,X` WP`+(0|O8_>$H`>$XA .dC%Nh0| 70_|'0_a>/|W0|0|Ux0_| '0_>o`>擘bŊ+VXbE;`#`>W0| '0| W0|70|%W0| ̗/| /_|/_/_>/߿|W0| ̗O`+`擘o`+VXbŊw07_ 80_| O`/߿|˗/ 7_ (07p|(0_/__>/߿|/|O`o` 8P`O`O` o| 8p <0… :|1ĉ;0@ ߿8 |'P`>o|/_|(_8?#(0/_G0|'0߿|'0|`| /_| /_| /_#/˗ A#/,h „ 2l!Ĉ'O@8_>70|$/#H`>'p +`>?$X /|'0߿|'0|O`|'0?(?O`| G_>8P ,H`>'p "Lp!ÆB(q"|W0|70|O`|C`|O`+o` +a˗/_/| /|'0߿|'0߿| 70_|O`| 70_Ob(RH"E)R4O` ߿#A ̗/_ | o| /_|'P࿁ o`7p /_>_|'0߿| 7p`>'P| /o`>g0|'0߿| <0… :|1ĉQ(1|)71E 擘b|IG"E)RH|)Jg0EQG!|'p ;x`,|  <0 :|1ĉ Xb>*V$b+棘"|AWbŊ+VX|+Bg0_ŊUXb*2̗0_Ŋ+VXbŊXb>*V$|*V|S/|*VXbŊ+VD0 <0‚ 0 <0@$X@$XA O@ O@ <'p A$XA .dC%NXE5lnG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[];;PKI͍PK+AOEBPS/img/type.gifGGIF87a<?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,< H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ] 0 <0…8`A&TaC!F8bE1fԸ|;"ױcǎ;vرcǎ;Zױ#|;vرcǎ;vر|;"ױcǎ;vرcǎ;Zw0_|˗/|/_|˗o`|70| ̗/_:vرcǎ;vرcG '0_|70_> ̗_|/|˗/|;vرcǎ;vر|̗O`|̗o`|/߿|˗_|/_>:vرcǎ;ꨣ:" /_/ '0_/߿|˗o'p "Lp!ÆB(q"Ŋ/b̨q#LJ (?(@@ o@08`A&TaC!F8bE1fԸ|̗`|˗`|#/|70_/|)g0_|;vرcǎ;vر|g0_>G0_̗O`|/|/_| %ױcǎ;vرcǎ;w0|0o߿ O? 4xaB 6tbD)VxcF7[#Gȑ#G9rȑ#G[#Gȑ#G9rȑ#Gc#Gȑ#G'p "L 'p "'p 8@$X`>$8`> 4x ,80A 4hРA 4`| H*\ȰÇ#F'QĂ 1|"˷0D'b|1'QD(QD%J0D 3Ob| I/_|SOD9`> 4xaB 'p 8`A&TaC!FOD'1b>$̇0D(`$J(Q|%J(QD;/_| '0_|˗`|˗o` 30o`OG A G`>˗/AGp`> $H A$/,h „ 2l/C:tСCg0_/_|g0| ̗_| ̇0_>/|S`w0|`g0| cϡC:DϡC:tСC3/|G0_ G0|K`> '0߿|˗/|̗/|'0_|g0_|;`|˗/߿|˗_| /_|g0|:ta|:tСC9C _>̗o|7_|/|˗/ '0/|˗/O`'0_|_/߿|/_/|/_|˗/_/|˗_o| <0… СC:tСÆO o8|G0_| G0߿|70_> o@` ̗_/_|#(0/|| '0_>˗O`|_|˗/߿| G_'p "Lp!ÆsСC:t!| /|˗o` ̗/7p@/|G@˗_|80'p@̗/|O@ O`|/_/|`>'p |,h „ 2l!,h „ 2l!Ĉ3/_|˗`>̗O`>/_a|/|#_>˗_|'0|g0_|;` /_>˗O` ̗_|'0|I(QD%J(QDg`> /߿7?˗/|0@ o`>/|7|'p| Gp`˗/_>#80|/߿|#80|/_'`>7? ? 4xaB 6tbD)V1ŋ wa>/_|Qw0Ł0ŋ/^xŋ-xa>.2w0|0|!w_|kŋ/^xŋ]0|;|Q̇0ʼn.^xŋ/^x1ŋ wa>.ˇ0| ]ŋ/^xŋxa>.2̗0_>棘Oa|xŋ/^xE.^l` -̗/_|[b>x|'p "Lp!ÆB(q"Ŋ/O@ DPAO@ D? O@8`A$X`>$X`> 4xP ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*+֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼zV ;;PKlCLGPK+AOEBPS/img/lnpcc001.gifGIF87aXf?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Xf H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ N!G`> 4xaB 6tx? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П < |,hP @,h B8`A&TaC!F8bE1fԸcG'p "08`AП <`>$XA .dC%NXE5n| H8? 4X`>'p " <0… :|1ĉ+Z1ƍ;z? 4x |'p O@$X8`A&TaC!F8bE1fԸcG'p  ̗/_>$XA(? 4xp`>$XA .dC%NXE5n| H <0a|'p  <0… :|1ĉ+Z1ƍ;z? 4X0_|8`A&$/_| HA8`A&TaC!F8bE1fԸcG'p ˗/,h „˗? 4H0,h „ 2l!Ĉ'Rh"ƌ7rb>$XР|'p "LP`|8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ ˗/,h „ ˗? 4(0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`| H*D/@,h_>$XA .dC%NXE5n| H`| H*\/@,h0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA .? ,? 4xaB 6tbD)VxcF9vx1@,80,h „ П  <0… :|1ĉ+Z1ƍ;z? ? 4xaB O@ O@ DPB >QD-^ĘQF=^П  <0…'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@O@ DP„8`A8`A&TaC!F8bE1fԸcG'p 'p "Lpa| H| H*\ȰÇ#JHŋ3jȱNj8`| H*\0@,/,h „ 2l!Ĉ'Rh"ƌ7rb>$X0,h „ .П  <0… :|1ĉ+Z1ƍ;z? G $Hp |'P`8p'p 8`A&TaC!F8bE1fԸcG'p A8 |'p A ,H`>(0߿| 8p|8`| H*\ȰÇ#JHŋ3jȱNj8 | H0|_|˗O`|'p`/߿| ̗o`| ̗?  <0… :|1ĉ+Z1ƍ;z? 70_/_'P࿁@ ߿| @ ̗?  <0… :|1ĉ+Z1ƍ;z? ˗/߿|/_/_ |_?П O@ DPB >QD-^ĘQF=^П O@/_|˗_> /߿߿(0| '0| /_>$H0,h „ 2l!Ĉ'Rh"ƌ7rb>$H0̗o`>#/߿|O`>#/_>O`>#(0_|8| H*\ȰÇ#JHŋ3jȱNj8`| (`>OO?߿|7P࿁/߿?˗?  <0… :|1ĉ+Z1ƍ;z? ˗`|'0_>O`>'P/˗/@? 4xaB 6tbD)VxcF9vx1@,? /A 4hРAПO@ DPB >QD-^ĘQF=^П  W` ,X`П O@ DPB >QD-^ĘQF=^П  +X` ,X |O@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@O@ DPƒ П O@ DPB >QD-^ĘQF=^П  <0…(?  <0… :|1ĉ+Z1ƍ;z? ? 4xaB 'P @,? 4xaB 6tbD)VxcF9vx1@,80_>$XA .0 H`>$XA .dC%NXE5n| H |8`A&T|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ ˗/,h „ 'p@$X_>$XA .dC%NXE5n| H`|O@ DPAП  <0… :|1ĉ+Z1ƍ;z? 40@ H*08`8`A&TaC!F8bE1fԸcG'p 'P ,h „ 8p @,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$XР@O@ D |O@ O@ DPB >QD-^ĘQF=^П 08`A&0'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ H 'p HA8`A&TaC!F8bE1fԸcG'p  'p | H8`A$XР| H*\ȰÇ#JHŋ3jȱNj8`A8`>$X H @,h`>$XA .dC%NXE5n| H8`A$Xp |,X? 4h0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA HO@ ? 4xaB 6tbD)VxcF9vx1@,hA$XA 8`AO@ DPB >QD-^ĘQF=^П <|,h  H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DH`> 4x @,h B8`A&TaC!F8bE1fԸcG'p "D0 П <`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,X`> 4xaB 'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DP8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA ./_>$X`>$XA .dC%NXE5n| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  ̗/A 4h`|8`A8`A&TaC!F8bE1fԸcG'p 'p (? 4xa|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@o`| '0_|/_> ̗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XP`|˗/| ̗/? ̗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$Xp`|'0| 70|˗ϠAП  <0… :|1ĉ+Z1ƍ;z? ,? ,/߿| '0| O@$X`|8`A8`A&TaC!F8bE1fԸcG'p 'p _>O`gРO@ O@ DPB >QD-^ĘQF=^П  O70߿|'p П  <0… :|1ĉ+Z1ƍ;z? ,? /_|/_|̗O`| 4(0_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XP`|4hРA ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,(`>8`A&̗/@,H0o`O` W |,`|˗/| WP` ,/,h „ 2l!Ĉ'Rh"ƌ'p 'p  /_|/_|/_|80/_>$X`>$(0_>˗o`> ,H0_W`>/|,(0_A ,X| H*\ȰÇ#JHŋ3FП  70߿|˗/_ @7p`>$(0_| H | HP`|/_/_|'`>  o`70߿?߿| /_|8߿7p H*\ȰÇ#JHŋ36П  O߿|_> ̗_>8p|'p 'p _|'0_/_/߿|˗/߿|/_|˗/߿|/_> W0|/߿|˗O`|'0_/߿|/| <0… :|1ĉ+Z1#| H`| H|o`>O`/|4/_>$X`>$80߿|'0߿| 70_>_˗O`70_|70_|W0|+o`|'0|/_>O`| H*\ȰÇ#JHŋ3BП  W0|70| /|4/_>$X`>$80_|'0߿| 7`>/߿|o'߿߿| /_|| /_|'p/߿/߿ O@ DPB >QD-^Ęa>$X`>$XP`˗/߿|'0|O`> ̗/@,H0/__>`>o`| ̗o`| 70_#O`/_>W_>`>/,h „ 2l!Ĉ'Rh"ƌ 'p 'p G0_'0@ ߿|O@П ˗O`|'0|_>/߿|_|˗_| /_70߿|˗O` /_> ̗/| /߿|O`>  <0… :|1ĉ+Z1#| H`| H ̇!BO@ O@ ̗O`'0| '0߿|˗O`|˗/߿|/_G0_|'Po/߿| /߿(? 4xaB 6tbD)VxcƆ8`8`A /_>̗/@,H0,h „ 2l80C:tСC:tСC:tСCП  $X`>$XA .dC%NXE5n| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA ./_>$X`>$XA .dC%NXE5n| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`A H*\h? $? 4xaB 6tbD)VxcF9vx1@,h|,h „ O@ O@ DPB >QD-^ĘQF=^П 0 <0…8`A8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0?$X0@,h „'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DH`> 4x0@,h ‚8`A&TaC!F8bE1fԸcG'p "O@ H`AП $XA .dC%NXE5n| H8? 4xp |'p  <0… :|1ĉ+Z1ƍ;z? 4xP |'p "0@ H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ ̗/_>$XA˗? 4xP`>$XA .dC%NXE5n| H <0|O@  <0… :|1ĉ+Z1ƍ;z? 4H0_| H̗/_>$X`| H*\ȰÇ#JHŋ3jȱNj8`A <0O@  <0… :|1ĉ+Z1ƍ;z? 4/_| H*/_>$X| H*\ȰÇ#JHŋ3jȱNj8`AO@ DP|'p O@ DPB >QD-^ĘQF=^П ̗? 4xaB O@  <0… :|1ĉ+Z1ƍ;z? $? ̗/_/_| ̗/_ ? 4? 4xaB 6tbD)VxcF9vx1@,80$0@ H0_|(? O@ П  <0… :|1ĉ+Z1ƍ;z? ? 70߿| ̗o`|/߿|/_ П  <0… :|1ĉ+Z1ƍ;z? ? 70߿|˗/_>W_> W0_'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@O@'P|_> 7p`>o|(0_>$XP`>$XA .dC%NXE5n| H| H|o`> 3O` o@$80@,(0,h „ 2l!Ĉ'Rh"ƌ7rb>$X0,(0_| W0_>/@$H? ̗? ? 4xaB 6tbD)VxcF9vx1@$/,(0_|˗ |߿? 8p'p 8`A&TaC!F8bE1fԸcG'p A8` #/`|+ϠA'p 8`A&TaC!F8bE1fԸcG'p A8`A&Ta|8 | H*\ȰÇ#JHŋ3jȱNj8 | H*\0_| H`>$XA .dC%NXE5n| H`>$XA .d/_>$H0,h „ 2l!Ĉ'Rh"ƌ7rb>$H0,h „ 2/@$? 4xaB 6tbD)VxcF9vx1@$? 4xaB ˗?  <0… :|1ĉ+Z1ƍ;z?  ˗/_ ,XP`> ,H0_|8| H*\ȰÇ#JHŋ3jȱNj8 | H |'p "'0B˗?  <0… :|1ĉ+Z1ƍ;z?  _|˗o`|0߿|7߿8p`|8 | H*\ȰÇ#JHŋ3jȱNj8 |8|O@G/߿7?˗?  <0… :|1ĉ+Z1ƍ;z? 'P| '_߿|߿|/߿O8`|'p A8`A&TaC!F8bE1fԸcG'p 'p A'0@ ? /| '0|8߿| H0_|8 | H*\ȰÇ#JHŋ3jȱNj8`A8| W0| /| '0|+/_A П O@ DPB >QD-^ĘQF=^П +O`|_|˗_>/_| ̗/߿|+H0_|8`| H*\ȰÇ#JHŋ3jȱNj8`A8| ̗/|'0| ̗/_>/_ ̗/_>$X_>$XA .dC%NXE5n| H| HK |'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ D0_„(? ? 4xaB 6tbD)VxcF9vx1@,X0_>$XA%L8`>8`8`A&TaC!F8bE1fԸcG'p O@ DPAП  <0… :|1ĉ+Z1ƍ;z? 4/_| H*$08`A8`A&TaC!F8bE1fԸcG'p ˗? 4xaB8P @,X0,h „ 2l!Ĉ'Rh"ƌ7rb>$XР@ O@ D |O@ O@ DPB >QD-^ĘQF=^П $0@ HO@ HA8`A&TaC!F8bE1fԸcG'p  'p ,h B H? 480,h „ 2l!Ĉ'Rh"ƌ7rb>$XA 

 O@  <0… :|1ĉ+Z1ƍ;z? 4x |O@ O@8`AO@ DPB >QD-^ĘQF=^П   H| H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ D`> 4x@$XA8`A&TaC!F8bE1fԸcG'p "$0 $XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 6tX0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 6tX0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 6tX0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8` H*\8? 4? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA ./_>$X`>$XA .dC%NXE5n| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0$/| O` W` ˗? $? 4xaB 6tbD)VxcF9vx1@,X0$/| O`+X0_П  <0… :|1ĉ+Z1ƍ;z? ,? ̗O`|/_|˗O`/_| ̗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$H0_|/_|(߿|o'p O@ O@ DPB >QD-^ĘQF=^П  'p/߿/߿/߿8`|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@8߿|߿/߿߿8`|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@˗/_>/|70_ W`|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@˗_>`>/߿o@$X0_| H | H*\ȰÇ#JHŋ3jȱNj8`8 |o`|˗O`/_W`|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA ./_>$X`>$XA .dC%NXE5n| H`| H|4hРA ˗? $? 70|'0_W0_|˗o`+(0_ `+X |,80| ,X`O@ DPB >QD-VП  O@$XA П '0_ '0_G0|o`+(0_ `+X |,80| ,X`|'p "Lp!ÆB(q"Ŋ+O@ O@`| '0_|/_> ˗/@,H0/߿|˗_|˗/_| /|#O``>8߿7߿ @˗/߿|_|˗O`|˗/|o`'P /߿|'p "Lp!ÆB(q"Ŋ#O@ O@˗`| '0@`>$Xp`|8`A8|/_/߿|˗_70_|O`|/_>/|_|/߿|/|/_|_/_|˗/߿|/_G0|˗_|˗O`|70_/_>'0_>$XA .dC%NX"| H`| H|O`>O`>/_> ˗? $? /߿| /|/߿|̗/߿| W_'0_| '0߿|_>Wp` ̗o`>˗`|o`/|_> /_+(0_> <0… :|1ĉ+Z? ,? ,/| '0|O@$Xp`|8`A8|˗/| '0|_W0|˗O`'`>_ /߿o 0_߿|_/߿_/߿_> ̗/_>/_>$XA .dC%NXb| H`| H|O`>O`>3h |'p 'p /_>O` /߿|/_>+H0_O`|_ O`/| ̗/|#o`/_>70߿|O`>`| /|8`A&TaC!F8bE'p 'p 8߿߿|'8`O@ O@'0_>O`/߿| /_|˗O`|'0|/_>O`|/_>/|˗/߿|/_ ̗_|+O`|/߿|O`|/_> /_8`A&TaC!F8bE'p 'p ˗`|˗O` ̗/A˗? $? 70_>/|(_o` |7߿(߿/߿_ O|/_|'p࿁ o` ? O |@O ˗|_8`A&TaC!F8bE'p 'p "Lp|'p 'p "Lp` .\_ ̗o‚'p "Lp!ÆB(q"Ŋ/FП  <0…П  <0… :|h0DAd"D!B"D!B"D8`8`A&T_|8`A8`A&TaC `|"D!B"D!B| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@˗` ,X |'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@(? 4xaO@ O@ DPB >QD-^ĘQF=^П  _|70_|˗_|'p`>$X0_| H | H*\ȰÇ#JHŋ3jȱNj8`8 |˗/߿|0@ _O@П  <0… :|1ĉ+Z1ƍ;z? ,? O߿|_> ̗_>8pO@ O@ DPB >QD-^ĘQF=^П  ˗/| /| ̗/_`O@ O@ DPB >QD-^ĘQF=^П  +o`>O`>O`> ,/_>$X`>$XA .dC%NXE5n| H`| H`˗/߿|'0|O`> ,/_>$X`>$XA .dC%NXE5n| H`| H`70_|0@߿| H`|8`A8`A&TaC!F8bE1fԸcG'p 'p ̇!BП  <0… :|1ĉ+Z1ƍ;z? ,? 4x_|C!O@ O@ DPB >QD-^ĘQF=^П  <(0_|"D(0_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,H`> 4xaB 'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DP H | H*\ȰÇ#JHŋ3jȱNj8`A8`A&Tp @,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 6tX0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 6tX0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA .da| H*\ȰÇ#JHŋ3jȱNj8`A&TaC'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ DPB  <0… :|1ĉ+Z1ƍ;z? 4xaB 8? 4xaƒ8`A&TaC!F8bE1fԸcG'p ",0 $П <a>$XA .dC%NXE5n| H'p@$XP |O@ D80,h „ 2l!Ĉ'Rh"ƌ7rb>$X ? 4h`>'p " <0… :|1ĉ+Z1ƍ;z? 4xp |'p O@$XA8`A&TaC!F8bE1fԸcG'p ˗/_>$XA(? 4xp`>$XA .dC%NXE5n| H  <0|O@ ? 4xaB 6tbD)VxcF9vx1@,h`|'p "LX0_| H8`A&TaC!F8bE1fԸcG'p ˗/,h „ П ,? 4xaB 6tbD)VxcF9vx1@,h_|8`A&T(0_| HA8`A&TaC!F8bE1fԸcG'p  <0BO@  <0… :|1ĉ+Z1ƍ;z? ,/,h „ П ? 4xaB 6tbD)VxcF9vx1@,H0,h „ П ? 4xaB 6tbD)VxcF9vx1@,80,h „ П  <0… :|1ĉ+Z1ƍ;z? ? 4xaB O@ O@ DPB >QD-^ĘQF=^П  <0…'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@O@ DPƒ'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@'p "Lpa| H| H*\ȰÇ#JHŋ3jȱNj8`| H*\0_>$XP`>$XA .dC%NXE5n| H`>$X`|4h`> 4hP`| H| H*\ȰÇ#JHŋ3jȱNj8 | H`A O@ '0 П  <0… :|1ĉ+Z1ƍ;z?  ̗O`|0_7߿ H|'p 8`A&TaC!F8bE1fԸcG'p A8` ˗/@`8`A'p 8`A&TaC!F8bE1fԸcG'p 8`A O`>O`/߿|3h|'p A8`A&TaC!F8bE1fԸcG'p 8`A O`>O`0@'p П O@ DPB >QD-^ĘQF=^ПO@ '0_O`>_>+ϠAП O@ DPB >QD-^ĘQF=^ПO@ 'P߿|o`O?'p П O@ DPB >QD-^ĘQF=^П O@ ˗`| '0|O`>ϠAП O@ DPB >QD-^ĘQF=^П O@ Dh0_„ ˗/@$? 4xaB 6tbD)VxcF9vx1@$? 4x| &$XA .dC%NXE5n| H`>$XA%L`|'p A8`A&TaC!F8bE1fԸcG'p 8`A&T0!|'p A8`A&TaC!F8bE1fԸcG'p 8`A&T0a|'p 8`A&TaC!F8bE1fԸcG'p 'p "LpA O@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@O@ DPƒП  <0… :|1ĉ+Z1ƍ;z? ? 4xaB 'P @,/,h „ 2l!Ĉ'Rh"ƌ7rb>$Xp`>$XA .0@ H| H*\ȰÇ#JHŋ3jȱNj8`A8`A&T|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@  <0B ? ? 4xaB 6tbD)VxcF9vx1@,X0_| H*408`A8`A&TaC!F8bE1fԸcG'p ˗? 4xaB8P @,X0,h „ 2l!Ĉ'Rh"ƌ7rb>$XР|O@ DP!| O@ O@ DPB >QD-^ĘQF=^П 0@ HO HA8`A&TaC!F8bE1fԸcG'p  'p ,h „8 @,hP`>$XA .dC%NXE5n| H ? 4xaA$? 4H0,h „ 2l!Ĉ'Rh"ƌ7rb>$XA  O@  <0… :|1ĉ+Z1ƍ;z? 4xP |O@ O@8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ $0'p 8` H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ 40 < @,h`| H*\ȰÇ#JHŋ3jȱNj8`AO@ D? 4xa>$XA .dC%NXE5n| H 'p  O@ D80,h „ 2l!Ĉ'Rh"ƌ7rb>$XA 'p 8`A&? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H*\ȰÂ8`A&TaC!F8bE1fԸcG'p "Lp!Æ O@ DPB >QD-^ĘQF=^П <0… :,? 4xaB 6tbD)VxcF9vx1@,h „ 2l`>$XA .dC%NXE5n| H`A$XA .П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB O@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,h „ ˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XA ./_>$X`>$XA .dC%NXE5n| H`| H*\/_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A&T_|8`A8`A&TaC!F8bE1fԸcG'p 'p "Lp|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ DPO@ O@ DPB >QD-^ĘQF=^П  <0…П  <0… :|1ĉ+Z1ƍ;z? ,? 4xaB ˗? $? 4xaB 6tbD)VxcF9vx1@,X0,80_|+Ϡ 4H0_| H | H*\ȰÇ#JHŋ3jȱNj8`8`A _> 7p 8p˗? $? 4xaB 6tbD)VxcF9vx1@,X0,(0_>˗/|70_>3h|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@#_| `> _>$X|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@#_>/߿|O`> ̗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XP`>O` /8p˗/@,H0,h „ 2l!Ĉ'Rh"ƌ7rb>$X`>$XP`|O`>+O`> 4H0_| H | H*\ȰÇ#JHŋ3jȱNj8`8`'0_|/߿|/| $/_>$X`>$XA .dC%NXE5n| H`| H| ̗/_>˗o`|3h|'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ/O@ O@ !B ˗? $? 4xaB 6l0 <0…8`A&TaC!F8bE1>П  "$/_>$X`>$XA .dذa>:\ϡC:tСC:tСC:<? ,? 4x_|"DH0_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XA ./_>$X`>$XA .dذa>:\/C:tСC:tСC:th0@,X0,h „ ˗/@,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? ,? /_| 4hРAO@ O@ DPB sСÅ9tСC:tСC:tСC'p 'p (? 4xa|'p 'p "Lp!Æ 9t|:tСC:tСC:tСC8`8`A/_> ̗/_> ߿'p AO@ O@ DPB sСÅ9tСC:tСC:tСC'p 'p  /_|˗|70߿80/_>$X`>$XA .dذa>:\/C:tСC:tСC:th0@,X0,(`>_OO_>$(0_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XP`| 70| '0|O`> ̗/@,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? ,? `o`>O`>3h0_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XP`˗/߿|'0߿|O`> ̗/@,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? ,? `> ̗/_>'P_>$(0_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XAC|'p 'p "Lp!Æ 9t|:tСC:tСC:tСC8`8`A /_>̗/@,H0,h „ 2l`> 4xaB3 'p "Lp!ÆB(q"Ŋ/bt? ,? 4x`|"Dx0_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XA ./_>$X`>$XA .dذa>:\/C:tСC:tСC:th0@,X0,h „ ˗/@,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? ,? 4xaB ˗? $? 4xaB 6lϡCСC:tСC:tСCП  <0…П  <0… 6СC sСC:tСC:tСC O@ O@ DPO@ O@ DPB sСÅ9tСC:tСC:tСC'p 'p "Lp|'p 'p "Lp!Æ 9t|:tСC:tСC:tСC8`8`A&T_|8`A8`A&TaÆ:tpa|:tСC:tСC:tС| H`| H*\/_| H | H*\Ȱa|:t0_>:tСC:tСC:t`>$X`>$XA ./_>$X`>$XA .dذa>:\/C:tСC:tСC:th0@,H`> 4xaB 'p 'p "Lp!Æ 9t|:tСC:tСC:tСC8`A8`A&Tp @,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4`> 4xaB 'p 'p "Lp!Æ 8`A&T ,h „ 2l!Ĉ'Rh"F8`A8`A&Tp @,H0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC:4? 4xaB 6tX0,h „ 2l0C.̗ϡC:tСC:tСC 8`A O@ DPB O@ D(? 4xaB cȐ!CcȐ!C 2dȐ!C 2dȐ!C  ̗? 4x`>$XA .dC 'p "Lp| 2d`| 2dȐ!C 2dȐ!C 2dȐ!Á'p "Lp!C$X @,h „ 2? 4xaB cȐ!CcȐ!C 2dȐ!C 2dȐ!C ̗? 4xaB 'p@$X`>'p "Lp!| H*\H0C 2'p 'p`>$XA .$? 4xaB cȐ!CcȐ!C 2dȐ!C 2dȐ!C ̗? 4xaB8? 4x |'p "LPa>$XA .4!C ̗!C 2dȐ!C 2dȐ!C 2dx0_>$XA O@$XA(? 4xaB'p "Lp| 2d`| 2dȐ!C 2dȐ!C 2dȐ!C'p "LP`|'p "L/_| H*$? 4xaB cȐ!CcȐ!C 2dȐ!C 2dȐ!C &̗? 4xa„ <0!|O@ DP| H*\0C 2 2dx0_> 2dȐ!C 2dȐ!C 2dȐ|8`A&$/_>$XA  ̗/@,h „'p "Lp!| 2d`| 2dȐ!C 2dȐ!C 2dȐ!C'p "L(0_| H*$/_>$XA O@ DPB5lذaC5lذaÆ 6lذaÆ 6lذaÆO@ D0_>$XA ̗/@,h „'p "Lp!C6lذ|6lذaÆ 6lذaÆ 6lذaC'p "<? 4xaB O@ D0,h „ 2!|kH0_ÆkذaÆ 6lذaÆ 6lذaÆ ˗? 4x!| H*\(0_>$XA'p "Lp!CO@$XP`> $/,h „ 2l!Ĉ'Rhb|8`A  <0…'p ",? 4xaB p`|/_/|pa| 6lذaÆ 6lذaÆ 6lذ!|8`A <0…'p "? 4xaB p`>'P HA'p "Lp!ÆB(q"Ŋ/N̗? 4x`>$XA .<? 4x| H*\`/_|O`|Pa| 6lذaÆ 6lذaÆ 6lذ|8`A O@ DPB'p ;80,h „ 2D|70_|+0 HA'p "Lp!ÆB(q"Ŋ/V̗? 4x`>$XA .L/@,h_|O@ DPB 5/|o`/_ÆkذaÆ 6lذaÆ 6lذaÆ П <(0,h „ .П ̗/_>'p "Lp!C̗/_>/߿|/_5T/_Æ 6lذaÆ 6lذaÆ 6l0_>$XA8`A&Tpa| H@ O@8`A&T| ˗o`> 7? 480_>$XA .dC%NXE'p O@ W0_|'0_|$/@0 <0… : <0…cȐ!C 2dȐ!C 2dȐ!C 2d80_>$X| H /߿|`> O@ ̗? O@ DPB O@ DP1dȐ!C 2dȐ!C 2dȐ!C 2$/@,hP`>$X`| '0|˗_| 4xaB 6tX? 4xaB ǐ!C 2dȐ!C 2dȐ!C 2dȰ`|8`A8`A'0|`>O@ ̗/@ O@ DPB O@'P o` ,80_>$XA .dC%NXEO@ O@ W0| ̗/߿|QD-^Ĉ0_>$X`>$X`A ߿|/߿ ? 4X0_|8?$XA .d@$X__|˗O` ߿ H`| H*\ȰÇ#JHŋП  $0@߿|''p  ˗/@08`A&TaC 70|˗_>0  <0… :|1ĉ+ZQa| H| H*\0_| H |O@ DPB s(`>__߿|'@$H0_>$XA .dC%NXE O@O@ DPBП O@$XA .d`>(߿|߿|__'p A'p "Lp!ÆB(q"Ŋ/bd/@,(0,h „ &̗/_>$X_ <0… P`> '0߿| 70߿| /C9tСC:tСC:tСCO@O@ DPB П _|8`A&TaC '0_>/| /|˗_|sСC:tСC:tСC П  <0…˗? ̗?O@ DPB s(0|˗_>'0߿| '0_|СC:tСC:tСC̗? ? 4xaB 'P @?O@ DPB sÅ9tСC:tСC:tСCO@O@ DP ПO@ DPB  Ç{Ç>|Ç>|ÇO@O@ DP ПO@ DPB Ç{Ç>|Ç>|ÇO@ <0B ?  <0… :$ÇÇ>|Ç>|Ç ˗? ̗/,h „ 'p`>$(0,h „ 2l`>|Ç>|Ç>4/@$/_>$XA O| HP`>$XA .dС|>|x0_>|Ç>|Ç>|x0_>$H0_|8`A&T08| H*\ȰÃG0|2̗Ç>|Ç>|Ç"̗? O@$XA 'p@$(0,h „ 2la'0Ç {Ç>|Ç>|Ç O@8? 4xaB H?  <0… :L| ̗/|˗/@ /,X0_>$XA .dC%NXEO@8? 4x!B$?  <0… :T| ̗/_> _ ̗? 4xaB 6tbD)Vxc'p (? 4x?$(?  8`A˗A'p "Lp!ÆB(q"Ŋ/b(0_>$X|O@ 0'p A8`AC|"_> C0| '0|o`|!DH0_>$XA .dC%NXEП O@8`A H`>$H0_>$XA˗`|'0_|'0߿|˗`|˗o`˗!B"G0| '0| ̗/BO@ DPB >QD-^Ę`| H@$XA 8`| H/߿|˗/߿| ̗/_/_/|/߿|/|"̗ |70߿7? 4/,h „ 2l!Ĉ'Rh"ƌO@ 'p "П  ˗0| 'p߿? H|8`A&TaC!F8bE1f4/@,hP |,h@$X`>$XA 70|(_8߿(0_|_|8p| H˗0|8`A&TaC!F8bE1f$XA 70|̗/| ̗/_'0| ̗/!| &Lx0_  <0… :|1ĉ+Z1#|'p "Lp| H /߿|/|˗_| ̗_| ̗_|'0߿|K0_„ ̗0a|8`A&TaC!F8bE1fT/@,h „  <`>+O`|˗O`|/|̗/? /߿|'p 4hРA 4h_| H*\ȰÇ#JHŋ3.̗? 4xaB 'p "Lp!Æ"D"D!B"D!B"DO@ DP!| H*\ȰÇAO`|˗/|/_|0_>!B"D!B"D!B(0_>$XA  <0… :|0|(@@ `> <0… :|1ĉ+Z1|8`A&TH0,h „ 2la| '0|'0_|'0_>-̗"D!B"D!B"D!̗? 4xaB'p "Lp!Æ*0| G0|`> <0… :|1ĉ+Z1#|8`A&T? 4xaB 6tpa˗/߿| W0_|(߿8|8`A&TaC!F8bE1f/@,h „O@ DPB >da>G0|/|-̗"D!B"D!B"D!̗? 4xa‚8`A&TaC{O`|˗_|+`oa|!B"D!B"D!Ba| H <0… :|0|'p7P࿁7P8|8`A&TaC!F8bE1f/@,h „'p "Lp!ÆB1|0@ o ? H_| H*\ȰÇ#JHŋ3V̗? 4x!| H*\ȰÇ僘/bā1bĈ#F1bĈ#F1bĈП <`>$XA .dCA̗/b1̗/bĈ#F1bĈ#F1bĈП $XA .dCE1| 1bĈ#F1bĈ#F1bD'p "? 4xaB 6t"|#F/_Ĉ#F1bĈ#F1bĈ#.̗? 4x`>$XA .dCEb|#F1bĈ#F1bĈ#F0_>$X8`A&TaC!1bDE1bĈ#F1bĈ#F1b|8`AO@ DPB >x0_Ĉ!1bĈ#F1bĈ#F1bĈO@ ? 4xaB 6t"|#F/_Ĉ#F1bĈ#F1bĈ#>̗? 4h0,h „ 2l!Ą"F1_#F1bĈ#F1bĈ#F/@,hp`| H*\ȰÇ1"|"F1bĈ#F1bĈ#F1b| HA8`A&TaC!21bDE1bĈ#F1bĈ#F1b'p 'p "Lp!ÆBl/bĈ1bĈ#F1bĈ#F1bĈO@O@ DPB >0_Ĉ!1bĈ#F1bĈ#F1bĈП  <0… :|a#B̗/bĈ#F1bĈ#F1bĈ#̗/@? 4xaB 6t"|#F/_Ĉ#F1bĈ#F1bĈ#F4/@? 4xaB 6tb|#F/_Ĉ#F1bĈ#F1bĈ#FQ`>%6̗OD%J(QD%J(QD П@8`A&TaC!FOD (QD%J(QD%J(Qă/D%J(Qb|%Jl/D%J(QD%J(QD%"̗_>%J(QD$J0_>%J(QD%J(QD%JL/D%J(Q|%Jl/D%J(QD%J(QD%J(QD%JDOD (QD%J(QD%J(QD%J(QD8`A&T ,h „ 2l!Ĉ'Rh"ƌ7r#ȁ H*\8? 4xaB 6tbD)VxcF9v@$XA . <0… :|1ĉ+Z1B$XA .$ <0… :|1ĉ+Z1ƍ;zR`!2dȐ!C 2dȐ!C /_Ȑ 2dȐ!C 2dȐ!C/dH 2dȐ!C 2dȐ!C2|B 2dȐ!C 2dȐ! R`|!C 2dȐ!C 2dȐ )0_!C 2dȐ!C 2dB/_Ȑ!C 2dȐ!C 2|!C ̗/dȐ!C 2dȐ!C _!2dȐ!C 2dȐ!C /_Ȑ 2dȐ!C RH!RH!P>$XA ./,h „ 2l!Ĉ'Rh"ƌ7r#$˗/|B 2dȐ!C 2dȐ!0@ H˗? 4xaB 6tbD)VxcF9v| 70_/_> ̗/_|B 2dȐ!C 2dȐ!勘/_'0|`>'p O@ DPB >QD-^ĘQF=~/|O`>o`>/|B 2dȐ!C 2dȐ!壘/߿| '0| O@$X`| H*\ȰÇ#JHŋ3jȱǏ 僘/| '0| '0_> 2dȐ!C 2dȐ!C`> |_ ̗? 4xaB 6tbD)VxcF9v|˗o`|˗O`> ̗/_|B 2dȐ!C 2dȐ! R`|!C 2dȐ!C 2dȐ )0_!C 2dȐ!C 2dB/_Ȑ!C 2dȐ!C 2|!C ̗/dȐ!C 2dȐ!C _!2dȐ!C 2dȐ!C /_| 0_!C 2dȐ!C 2d"'P ,h „O@ DPB >QD-^ĘQF=~/_|˗/|˗/@8|8`A&TaC!F8bE1fԸcGA1|/_|'P߿'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/"|߿|'߿| Hp`| H*\ȰÇ#JHŋ3jȱǏ 勘/_| '0߿| '0_|O` 2dȐ!C 2dȐ!C1_| /|70| 0_!C 2dȐ!C 2d"+o`|˗_|'0_>a|!C 2dȐ!C 2dȐEW0|˗/|(߿|//,h „ 2l!Ĉ'Rh"ƌ7r#@c|!C 2dȐ!C 2dȐ̗_| 2dȐ!C 2dȐ!C/d|@2dȐ!C 2dȐ!C /_Ȑ 2dȐ!C 2dȐ!C/dH 2dȐ!C 2dȐ!C2|B 2dȐ!C 2dȐ! R`|!C 2dȐ!C 2dȐ )0_!C 2dȐ!C 2dB/_Ȑ!C 2dȐ!C 2|!C ̗? 4xaB 6tbD)VxcF9v|!C ̗/dȐ!C 2dȐ!C _!2dȐ!C 2dȐ!C `> 4xaB 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?0 <0…8`A&TaC!F8bE1fԸcGA O@ DPB H*\ȰÇ#JHŋ3jȱǏ CIˤɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNu;;PKuHPK+AOEBPS/img/lnpcc004.gif`GIF87a]@?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU!,]@ H*\ȰÇ#JHŋ3jǏ4Iɓ(S\ɲ˗0c ̛8sɳϟ@oz94ѣH*]ʴ̎+:JիX S֯`ÊK6*W˪]˶۬gw}KݻxE7߿ӝ볯È+FJoŐ#KWaʘ3k<1˜C׳cӤS^muaЬc~ ۸spS g*pμƲܹO.T;ZzձO][or*0~Kn?gRgf_z9V^F(\Zv tFuP[!D(FFixbE὘⌇VI;&$#@#O ]!ЏA6YאAI}6Nfq%j)fb`$N9_ٕBfCwb'|t!騞EE^f}&JߕQj({{uTCuڗAJ6zv{ 㞏jX!*+C8NI"%꫙ߪ ꒴ #e:lVobmֻ崜fi,`v 3;olvJ\ƺܭǻ\ƘrS|)_K4/:&kXsz|Ҿ^nhHpIGgNkܞ(9R/ [3mMv>=S٫xniqv Mp*wZ6.CUonsƼ6L;uO8'z'CG}Ml.;q8lvN, פ=~b;|МF?bԻK&I?=[}3xO%1O}0/aϯP\zY,'@N_g=9uw[@Pw Xբթ Z-fت`. p /=H#7DCI>"D 6 hD1!q{3X' xc".z/QH6(St1hQp\*DG< O{D 4Peq$R DFr}[yN 2a(= IڑVo!*Gme&1 p\Ɣ0IJeȤd29a29&4!iR&6II~ ()Ђ rM(Pf"WD'Jъ6Ң=ʴ7]GJr<R7-/m*^4%Mo*|<'P9ԠƧ`٩QW,[HeKSzɪT V_zGtV-EuXъ>4ۛ !nq3*D1p6頺&+ڱ+ k-_E,U/s2k,ez ԕuucMX*^*C{:P[%izzdt(}odҳ) ~$/vP#qz}%\Vqt7ظ9޼WZߟ\Z`vlvpqy3^jAP`9cr/x O/#7t!}{x}RW9zV)b(>hAp"?v{ڢvw1X}x5543s4wsrA"p:)~2L1@*Eqfos%Ywyu|xrqssEi0xaXxC6e87{t㒄6X}$(xRhUq)s߷Jw9BcWc~TSfa|y@985 SPׁ䀬Wj艻1FgH;|Ϸ=cXq'~|c芎C9sug5S(+Yh؈X-;G֘IǍ 4Z_x,xhX#~AgX'-0#~Yɋh%&먏I %ISH%!h=hS9jW|#y4{-X${舍Dǐ4Q$p!ׇ:lxOs?rBzs]oA"DŽ4f{Ő]{poX~BpdY{g31mX`Z)pl(X3/i9$psrEH%8pK9%EPى&lEs"fFyX(uؑZs}f#WvUAaؐTٛ9'dw#vu6XYȩUkIfƛd8M$ӗu÷d0yR| b r:xי>)IhuT|%xEl$lyzw칡2cIT3_I!z(: fKnWCtPy'dD8b"ʣUy3@GDn-c%AؤCsiƓuR?B`*8C sXxizctZŤw*|,E_R_okW8(Dʨey %%CJrl%6 jch1zڪ:Zz-ګ:ZzȚʺڬ:Zz;PK6˱PK+AOEBPS/img/enable_t.gif SGIF87a*?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,* H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ])|,h „ 'p |,h „ 2lX? 4xaB 6tbD)VxcƄ4j4`>5B̧QF5jԨQFih0|5jOF5jԨQF-Ө`>4j1F5jԨQF5Zw0_|O`| ̗/|̗/|w0_|o`|70|30@/߿70߿o`'p| H*\ȰÇ#JHŋ3&g0_/_|g0| ̗_|g0_> ̗o`|_|[/߿|/_>g0_> '0|iԨQF5jԨQ|3/|70_|#_|g0_>/|'0߿|˷0_ ̗_|˗`|/_>4jԨQF5jԨb g0_>̗Oa|̗/_>`>/_|`>O'p ˗O`|_|˗_|˗ | H*\ȰÇ#JHŋ3"̗ |O˗_>Wp`0@_'߿'p|'p࿁ _ _'p| H*\ȰÇ#JHŋ-'p / ̗o|(0| _| O@ /˗/@o` O@/|'0_| ˗/߿|70_80,h „ 2l!Ĉ'Rh"ƌ3/_|˗`>̗O`>/_> g0_> ̗_|'0߿|˷0_ ̗_|˗`|˗O` w0F5jԨQF5R/A '߿| @/_|˗|'P`7p |o/|7`>߿?O@ DPB >QD-^Ę1a> 3OFiԨQF5jԨQ|5g0F!ӨQF5jԨQF4j4`>5B̧QF5jԨQFih0|5jOF5jԨQF-Ө`>4j1F5jԨQF5Z̧Q|iԨb>5jԨQF5j0 <0‚ 0 <0… O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVڀ;;PK  PK+AOEBPS/img/lnpcc013.gif~GIF87a ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,  H*\ȰÇ#J߿|'߿          ? 4xaB 6tbD$J(QD%J4OD%J0D%J(Qă$J(QD%J4OD%J0D%J(Qă$&O@8`A&TaC!*70_Ĉ#F1bĈ#F1bć"*̷0_Ĉ#F1|E1bĈ#F1bĈ#F|/| E1bĈ#*70_Ĉ#F1bĈ#F1bć"*̷0_Ĉ#F1|E1bĈ#F1bĈ#F|a>+/|#F1bĈ E1bĈ# 1bĈ#Fb>{`>1bĈ#FTa| C/_>1bĈ E1bĈ#Fa|=w0| H*\ȰÇc_|!/_1bĈ E1bĈ#Fa|=g0|#F1bĈ 1'`>#߿|G0߿ <0… kذaÆ 6lذaÆ/_CaÆ 6lذaÆ ̇0|_>'P@  <0… :|1ĉ+Za=G0|]xŋ ̇0@ |/߿7? 4xaB 6tbD)V/|{`|]xŋ ̇0߿| /߿| '0_>_> '0ŋ/^xŋH0|/^x"|!̗/߿|_| ̗/߿|_>'0_|/^xŋ/^"| ]xŋ]xŋ.^xŋ]$oa/^xa/^x1ŋ/^xa-wŋ/"wŋ/xŋ/"w | <0… :|Qa#F1bD"F1bĈ#B1bĈ#F1"|E1bĈ#F1bĈ#F|/bĈ#F1bD1bĈ#F1bĈ#F`> 4xaB 6tbD? 4xaB 6tbD)Vx#|3f̘1cƅ˘1cƌ3f̘1cF2f̘1cƌ e̘1cƆ2f̘1cƉ2f̘1cƌ e̘1cƆ2f̘1cƉ2f0'p "Lp!Æ 9tСC:dϡC:tСCsСCsСCСC:ta>:tСC:ϡC[ϡC:tX0|:tСC:tСC:tPa>: 'p "Lp!ÆO@ DPB >"D!B"Ą B0|O@ DPB >$ <0… :|H0D!B"D Aa|-"D!̧0_|!B"Ć B"D!BL"D ["D!B!B"D!B"D!"D"D"D!B"D!B"D B` B"ă"D!B"D!Bb> 8@$XȦ!B"D!B  <0… :|1ĉ+Z`-̗ | <0… 2СC:ta>:tСC:a| 9t(0|:tСÂ:tСC2СC:tСC'0_>-С| 9tСC sСC:t0C:tСCw0_9oa>94oa>:ta|:tСCsСC:tСϡ| !̗/_|-СC:,o`>:tСC:tСC:t|P`'P ̗|  <0… 270|9tСC:tСC:tС˗ϡ|8` H0_>$80,h „ 2l0|˗ϡC:tСC:tСCC/_>O@ 'p  +`> 4xaB 6t ,h „ 2l!Ĉ'Rhb| E̷0|5W0A$XA .d H*\ȰÇA"D!B0ą惈0_| A"D)̗/D!Ba>!B"D惸0|+oa>!B`> B"DA"D!B0ą0|!B|!B"D A"D!B0ą0|!B|A"D!B"D!B1ą Hp ,h|C!B"D!ƒO@ DPB >QD-^H0_ƌ8@$XA .dؐa:tСC:tСC:tС|:t0|:tСÂsСC:tСC:tСC 9tС| 9tСC sСC:tСC:tСC9tС| 9tСC sСC:t0C:tСCСC+oa>:ta|:tСCsСC:tС:t`>[ϡC:tX0|:tСCsСC:tС <0B[o… .\p!| ˗? 4xaB 6tbD)VxQb>!+ |,h „ 2laA$XA .dC%NXň0b|`> H*\ȰÇ8`A&TaC!F8bE#ÈaÈ#ƃ3/_|1bĈ#F1bh0F˗`0bĈ`>aĈ#F1bĈ#|1Z̷0F1̇#F%È#F1ˇ| aĈ|1bĈQb>1bĈ|1Z̷0F1̇#F%È#F1ˇ| aĈ|1bĈ#F1bH1F8@$XA .dؐa:tСC:tСC:tС|:tСC:t`:tСC:tСC:tС|:tСC:t`:tСC:tСC:t|:tСC:t`>:tСC:tСC:t0C:O@8`A&TaC:tСC2СC:tСC9tС| 9tСC sСC:t0C:tСCСC-СC:,ϡC:t!|:tСC:t/C̗`:tСC9tСC:tСC:tСC:t`̷0C:t`:tСC:tСC:tС|:th0|-СC:,o`>:tСC:tСCr! <0ƒ#oa .\p…  <0… :|1ĉ+Z``2f̘q`3f̘1cƌ3fD/cF#oa3f/cƌ36̗1cƌ3N̗1c| [/cƌ˘1c e̘1cƌeH1|3f80_ƌ3fl/cƌ3f/cF˘1cƁ2f̘1cƌ3f̘a8@$XȦ!B"D!B  <0… :|1ĉ+Z`-̗`2f̘q`2f̘1cƌ3f̘`-̗ | <0… 270C:tСC:tСC:Ta| 9t(0|:tСÂ:tСC:tСC:tС|9$oa>[ϡC:tX0C:tСC:tСC:t_>̷0|̷0C:t`>:tСC 9tСC:t|9$oa>0_| 9tСC sСC:t0C:tСCˇ0C 'p 8`|#Hp`>$XA .dؐa>:tСC:tСC:t0| +0 O@ 8`A&TaCsСC:tСC:tСC !`˗/|-СC:,o`>:tСC:tСC:t0|9oa>9W0|:tСÂsСC:tСC:tСC 9loa> ̷0C:t`>:tСC:tСC:t0Æs0_| 9tСC sСC:t0C:tСCa:oa>:ta| H*\ȰÇ1bĈ#F1_D0|#F1|#F1bĈE1bĈ#F/B$8? 4xP`>!D!B"D| H*\ȰÇ#JHŋ˘b2f̘q`2f̘1cƌ3f̘`)'p H*\Ȱ!|9tСC:tСC:tСC:ta:tСC СC:tСC:tСCsСCsСCСC:tСC:tСCsСÃ̷0C:t`>:tСC 9tСC:t|:th0|-СC:,ϡC:t!|:tСC:t/C&G0|:tСÂ:tСC2СC:tСC? 4xaB ̷0… .\pB8`A&TaC!F8bE1"̗1c|-̗1cƌ ̗1cƌ3f̘1cƌe0| e̘1|e̘1cƌ3f̘1#|32̗/_>˘1cƁ˘1cƌ3f̘1cF2foa3f/cƌ3f̘1cƌ˘b2f̘q`3f0_ƌ3f81_ƌ-̗1cƌe̘1cƆ2f̘1cƉ2foa3f/cƌ36̗1cƌ3N̗1#E$8? 4xaB 6dϡC:tСC:tСC:СC:tСC ϡC:tСC:tСC*СC:tСC ϡC:tСC:tСC*СC:tСC ϡC:tСC:tСC*СC8,8? 4xaB &װaÆ 6lذaÆ 6lذaÆ 6LaÆ ̷0_C6lذaÄ6lذaÆ 6DaÆ 6lذaÆ kذaÆ-P` 6l0a 6lذaÆ kذaÆ 6lذaÆ6lpa|̗`5lذaÆ 5lذaÆ 6l0_Æ 6lذaÆ 6װaÆ ˗`G0_C6lذaÄ6lذaÆ 6lذaÆ 6lذaÆ 5lذ|70|50,h „ 2Lo` 6lذaÆ 6lذaÆ 6lذa| 6l0| '0| kذaÆ aÆ 6lذaÆ 6lذaÆ 6lX0_Æ *'0| G0_C6lذaÄkذaÆ 6lذaÆ 6lذaÆ װaÆ G0|P` 6l0a 6lذaÆ 6lذaÆ 6lذa| 6l0_W0_C6lذaÄ6lذaÆ 6DaÆ 6lذaÆ kذaC P>$/_'p "Lp!Ä6lذaÆ 6DaÆ 6lذaÆ kذaÆ-P` 6l0a 6lذaÆ kذaÆ 6lذaÆ60'p  ̇p`>!D!B"Dx0,h „ 2l!Ĉ'Rh"F2 ̷0_Ƃ{/cƌ ̗1cƌ3f̘1cƌeoa8@$X0,h „ 2Lo` 6lذaÆ 6lذaÆ 6lذa| ˷0_Æ-P` 6l0a6lذaÆ 6lذaÆ 6lذaÆ̗/_-װ!| 5aÆ 6LaÆ 6lذaÆ 6lذaÆ 6l0_| [a|̷0_CG0_>/_|˗O`|˗/߿|˗_|5LaÆ 6lذaC6lذaÆ 6lذa̷0|c`>P @8 |Wp`|˗o`>/_|'p࿁8`A'p "Lp!ÆB/bĈ#F1"| EW`> ,#/|# A/_ ߿OO ,hp`>$XA .dCE1bĈ#F/a 'p 8`|O`>$80_|˗/߿| O߿o`'p O@ DPB >QD-^Ĉ0_|-̇0_|+o`>{ | ߿|_'0߿|_>O@ 70,h „ 2l!Ĉ'Rh"F拘oa>9W0|0_|˗o`|˗`70_'0߿|˗_>˘o`3f̘1cƌ3f$/| aW0|0| ̗_/_`> o?o@$X|'p "Lp!ÆB(q"Ŋ/b$/| aW0| {b˘1cƌ3f̘1cF2 ̷0_Ƃ{b|36̗1cƌ˘1cƌ'(`> O@ |C!B"D`>"D!B"D!B'p "Lp!ÆB1D![a>%J|OD%J0D%J(Qă$J`> O@'p "Lp!Ä6lذaÆ 6lذaÆ 6lذaÆ 5lذaÂk(0_Æ 6l0| 6lذaÆ 6lذaÆ 6lذaÂ6lذa| 5aÆ 6Lo` 6lذaÆ 6lذaÆ 6lذa| 6lذ` װaÆ &70_Æ 6lذaÆ 6lذaÆ 6lذ` 6\/_|+| 6lذa| 6lذaÆ 6lذaÆ 6lذaÄ6lPa>_|5aÆ 6@8`A&TaC! 1bĈ#Fb#:G0|0_Ĉ#F/bĈ#FQ`#F1bĈEa`"F1|#F1bĈE1bĈ#F/bĈ 70|=1bĈ1bĈ#F1bĈ#FQ`#.w0|0_Ĉ#Fo`#F1bĈ#F1bĈEqa|G0_1bĈ 1bĈ#F1bĈ#Fa#Foa'p "Lp!ÄkذaÆ 6lذaÆ 6lذaÆ װaÆ [| 6lذa| 6lذaÆ 6lذaÆ 6lذaÄ6lذa| 5aÆ 6LaÆ 6lذaC6lذaÆ 6lذa 6lX0| kذaÆ kذaÆ 6la 6lذaÆ 6laÆ O@W@$XA .d0_Æ 6lذaÆ5lذaÆ 6lذa| 6lذaÆ 6lذ!| 6lذaÆ 6lذaÆ 6lذaÄ6lذaÆ 6lذaCkذaÆ 6lذaÆ 6lذaÆ O@ DPB >QbO@ DPB >QD-^H0_ƌ3f̘qa2f̘1cƌ3f̘`3f̘1|3f̘1cƌ3f̈0_ƌ3f̘qa3f0_ƌ3f81_ƌ8@$XA .dؐa>:tСC 9tСC:t|:t0|:tСÂ:tСC2СC:tСC9tС| 9tСC sСC:tСC:tСC9t| [ϡC:tX0|9tСC:tC:tСÁ:t`̷0C:t` ˗ϡC:tСC:tСCСC G0|:tСÂ3/_|:tСCr!r!r!(,h „ `> H*\ȰÇ8`A&TaC!F8bE#Èa>30 <0… :|X? 4xaB 6tp`>!B"D|̷0D!Bx0|A"D"D!B1a>!>̗` B"ă"D!>"D!Bb|!Bh0|!B|!B"D!B"D!B$"D ["D!B!B"D!B"D!"D"D"D!B"D!B"D .O@8`AC80B"D!B70,h „ 2l!Ĉ'Rh"F2 ̷0_Ƃ Hp ,h „ 2l0C:tСC:tСC:ta| 9t(0|:tСÂ:tСC2СC:tСC9loa>[ϡC:tX0C:tСC:tСC:t_> -С| 9tСC SϡC:t|:tСC:t/| [ϡ|-СC:,Oa|:tСC:tСC:tP`̷0|W0|:tСÂ3`|8`A&TaC!F8bE%;ob˗/| 30 <0… :|X? 4xaB 6tbD)Vx1b&[!|'p  +`> 4xaB 6t ,h „ 2l!Ĉ'Rhb|MW`> ,+`8`A&TaC˗ϡC:tСC:tСCw0 'p 8|,/,h „ 2l0|:tСCsСC:tСsX0|0_| 9tСC sСC:t0C:tСCa:oa>:ta|:tСCsСC:tС6̷0C-СC:,ϡC:tСC:tСC:a:oa>:ta|9tСC:tСC:tСC6O@8`A'p H*\Ȱ!|9tСC:tСC:tСC:ta:tСC СC:tСC:tСCsСCsСCСC:tСC:tСCsСCsСCСC:ta>:tСC:ϡCW0|:tСÂСC:t0C:tСCСC G0|:tСÂ˗ϡC:ta>:tСC9?O@ DP|O@ DPB >, <0… :|1ĉ+Z1Fg`> 4xaB 6t ,h „ 2l!Ĉ'Rhb|1>g0|1bx0|˗#F1bĈ#F ÈaÈ#ƃ3/F1bĈ#F1"̇|#oa>1b<#F1bĈ#F)Èb0bĈ`>1b(1F1bĈ_>-[#FÈ#FaĈ#FÈb0bĈ`>1b(1F1bĈ_>-[#FÈ#F1bĈ#F0b0'p "Lp!Æ СC:tСC:tСCsСC:tСC СC:tСC:tСCsСC:tСC СC:tСC:tСC'p "Lp!ÆB(1",h „ 2l!Ĉ'Rh"F2f̘1cƌ e̘1cƆ2f̘1c2f̘1cƌ e̘1cƆ2f̘1cƉ2f̘1cƌ e̘1cƆ2f̘1cƉ2 O@8`A&TaC!*1bĈ#F1bĈ#F1|[/bĈ#FQa"F1bĈ#F1bĈ#>Qa>1bĈ#FTo`#F1bĈ#F1bĈET`|E$o`|˗O`|˗/|˗/_˗/|1bD1bĈ#F1bĈ#F0|AW0_>"̗O`|/߿|_|˗|O ,h „ *ǐ!C 2dȐ!C 2dȐ!C 2da>g0| ˗_|'0_|˗O`|/|#/?? H*\0C 2dȐ!C cȐ!C 2dȐ!C C|_/_˗_`>߿G? H*\0C 2dȐ!C cȐ!C 2dȐ!C C/_>G0 _G0߿߿| /_|/_O`>$XA .\!C 2dȐ!C1dȐ!C 2dȐ!C!`>c80_|'0_G0߿|/߿|_/|1dȐ!C1dȐ!C 2dȐ!C 2dȐ!C 2Da>-0_|O`|˗o`| O@ 'A <0… w0_|2d/| G0C 2dȐ!C 2dȐ!C!`2,!C 2dȐ!|ǐ!Ác`>2dȐ!C 2dȐ!C 24!ÁcȐ`| 2dȐ!C `>˗o`|O?7_O?_>$XA .dC%N| QH"E [0@ ߿| 7_'߿'߿/߿O/߿/,h „ 2l!Ĉ'R,| UXbŊ-70|_|'`> /߿? @ O| @$XA%L0a„ &L0a„ &Lx0_„ 8@$XA .dC -70|/|/|O`| ̗_>˗O`|/߿|/߿|E0_Ĉ#F1bD"F1bĈ#Foa>G0@߿|?o|'O| '_ <` &L0a„ &L0a„ O@ DPB >Q|'F7qĉM8qĉ'F7qĉ'N8a&Nloĉ'N8qĉ'O@ DPB >QbO@ DPB >QD-^H0_ƌ3f̘qa2f̘1cƌ3f̘`3f̘1|e̘1cƌ3f̘1#|3RO@8`A&TaC:tСC2СC:tСC9tС| 9tСC [0 <0B H*\o… .\p… .\H0… .\H0| .\p… [oa[oa .\0… .\p… .\` .\`.\p… ̷0| -̷0| .\pa .\p… .\p!| .\a|-̷p… .\`/_|̗/|o``|[p… .\p… .\p…-\pƒG0| .\p… `>߿|߿߿/߿߿߿߿|? 4xaB 6tbD)V,ϢE#oa>-Z|o`>/| 70|/| 70| hѢE-Zhb>%`> H*\ȰÇ /߿/߿/߿|/߿/߿ <0… :|1ĉ+gѢ|g`> 4xaB 6t/߿/߿/߿߿߿80_8`A&T0… .\p… .\` .\x0|-̷p… .\`>o`/_/| 70| ̷p… [p… .\p… ̷p… W0| .\p… S/|#`|O`|̗/|G0… .\o… .\p… .\H0… .\H0| .\p… [oa[oa .\0… .\p… .\` Zh(? 4xaB 6do`[oasСC:tСC:daC$8? 4xP`>!D!B"D|̇p`>!|O@ DPB >QD X0|[ϢE`[oa,ZhѢE-Zb| YD0'p "Lp!Æ w0| -̷0|:tСC:tСC !̗/CsP`:tСC-O@ DPA$XA .̷p… .\p… .$`>-$oa>-Loa .\p…-̷0| -̷0… .\o… .\p… .\H0|̷0|-Doa .\p…-̷0| -̷0… .\o… .\p… .\H0|-,oa> +`8`A&TaC˷0| -̷0C*СC:tСC)̗|8` H0_>$80,h „ 2l0|˗/a[oa>:tСC:tСC'0 'p 8`|#(`> 4xaB 6t  G| G|  <0… :|1ĉ+̇0_|-̇0_| g`> 4xaB 6t  G| G|  <0… :|1ĉ+g`0_| Yh|̗/_[oa,ZhѢE-Zb| Y`,Zha>-̷0| -gѢ|-ZhѢŇ,̷0E [ϢE[oa[oa>-hѢE->g`,"̷0E->̷0| -̷0|-ZgѢE-Z|bA$8? 4xP`>!D!B"D|C80̇p`>!D!B  <0… :|1"|%Joa>%J0|-̷0| -'QD%J(QD(Q"D$8? 4xaB 6do`[oasСC:tСC:dϡC[ϡC:tX0|8`A&Th? 4xaB 6tbD)V,ϢE-gѢE w0| -̷0|-ZhѢE-BgѢEhѢŇ[oa[ϢE,ZhѢEY81_hѢŇ˷0| -̷0EYhѢEhQb>[ϢES/_>[oa,ZϢE-Z0E̷0E->̧`>8P`>#Hp`>#Hp`>$XA .̷p… .\p… .$o… &W0A$XA .d (0A$80A$80,h „ 2l!Ĉ'RX0Eg`> 4xaB 6t G| G|  <0… :|1ĉ+gѢ|-gѢE g0_| -̷0| YhѢE-Z1E˗`,Zha[oa[ϢE-ZhѢE,ZH0|-Z0| -̷0| Yh1E-Zha>-̷0E->̷0| -̷0|-ZgѢE-Z|ϢE-gѢE-̷0| -̷0EYhѢEh"| Yh| -̷0| -gѢ|-ZhE=P>$XA .$0'p "Lp!Æ w`> 4xaB8`A&TaC!F8bł,ZhѢEϢE-ZhѢE-JgѢE-Z0|-ZhѢE-ZhQb>-ZhѢEhѢE-ZhѢEYh | <0… 2СC:ta>:tСC:ϡC[ϡC:tX0Á-̧0_>-СCsСC:tС:ta:tСC9_| KO`>SϡCСC:tСC9tС| 9tСC s(0| coa>:t|:tСC:t/C̗`>#ϡC:tX0| ̧0| -СC:tСC:t@O@ DP|#o`|-\p… .$o` ̧0| C/_| .\p… .\p… .\0a .\x0| ̗/_| .\p… o|)̗0|)̷p… .\p… .\p… [p… G0|#o… .\p!|-/| ˗/a| -\p… .\p… .\pB.\p|g0| .\p… [p… .\pB.\hZhZhZ 'p "L`>O`>.\p… ̷p… .\p…-\p… .\p… [p…+`|-\p… .$o… .\p… [p… .\p… ̷p… ̷0… .\pB.\p… .\` .\p… .\p!| .\p!| -\p… .$o`>$XA .dC%NXEe0'p  ̇p`>"D!B"$XA .dC%NXEeoa8@$XA .dؐa:tСC:tСC:tС|[ϡCsСC70C:tСC:tСC:Ta>9̷0C-СC:,ϡC:tСC:tСC:̇0_9̷0|̷0C:t`>:tСC 9tСC:t|(? W|˗` #/_>8`A&TaC:tСC2СC:tСC!O@$H0_0@ H0_> ̗| H*\Ȱ!|:tСCsСC:tС˗_> 'p 8`|/_>'p "Lp!Æ 9tСC:tСC:tСC˗_> 'p 8| /_>8`A&TaCsСC:tСC:tСC !̗/߿|-̇0_| g0|:tСÂsСC:tСC:tСC 9loa> 70|9tСC ϡC:tСC:tСC*a*W0| sСCСC:tСC:tСCs0| ̷0C:t`>:tСC 9tСC:t|[ϡCsСC*| H*\ȰÇ1bĈ#F1_D Hp ,h|C!B"D!ƒ"D!B"D!B  <0… :|1"|%Joa>%J0D%J(QD%J(QD$J`> O@ DPB ϡC:tСC:tСC*СC-СC:,o`>:tСC:tСC:t0C:̷0C:t`:tСC:tСC:tС|:t0|:tСÂ:tСC:tСC:tС|:tx0_˗`>:ta|:tСCsСC:tС:t`>/|:tСÂ:tСC2СC:t!r'p "LPa>˗` .\p…-\p… .\p| .\p… .\pB.\pa| /_>.\p…  <0… :|1ĉ+Za3`>2f̘q`2f̘1cƌ3f̘`;o`>˘1cƁ˘1cƌ3f̘1cF2fd/_|̗`3fo`3f̘1cƌ3f$/cF˘1cƁ2f̘1cƌ3f̘a)[/cƌ˘1cƌ e̘1cƌeH1|3f80_ƌ3fl/cƌ3f/cF Hp ,h „ 2l0C:tСC:tСC:t_>:tСC:tH0C:tСC:tСC:tϡC:tСC70C:tСC:tСC:TϡC:tСC70C:tСC:tСC:TϡC'p +Xp ,h „ 2Lo` 6lذaÆ 6lذaÆ 6lذa| 6lذ` װaÆ &װaÆ 6lذaÆ 6lذaÆ 6LaÆ ̷0_C6lذaÄ6lذaÆ 6DaÆ 6laÆ kذaÆ-P` 6l0a 6lذaÆ kذaÆ 6lذaÆ6lpa|̗/| kذaÆ kذaÆ 6la 6lذaÆ 6laÆ /|3| 6lذaBO@ DPB >QD-^Ĉ0_ƌ G0|0_ƌ/cƌ3f̘1cƌ ˘a>_|=̗1cF˘1cƌ3f̘1cF2fdO`> #a3270_ƌ3f̘1cƌ3̗1#|70|=̗1cF2f̘1cƌ3f̘aW0| {/cƌ e̘1cƆ2f̘1cƉ2foa2f0_ƌ3fl/cƌ3f/cF{/cƌ e̘1cƆ2f(2| H*\H0| cȐ!C ǐ!C 2dȐ!C 2dȐ!C 2da> 'p H!|"D!B70,h „ 2l!Ĉ'Rh"F2 ̷0_Ƃ Hp ,? 4xaB &70_Æ 6lذaÆ 6lذaÆ 6lذ` [aCk(0_Æ 6l0| 6lذaÆ 6lذaÆ 6lذaÂ˗| 5lH0| k/|˗/߿|/_>/_|/_0a 6lذaÆ 6lذaÆ 6lذa|/_CC/_ #/_| k/_!̗_| '0߿|˗/?70,hp`>$XA .dCE1bĈ#F`-̇0_| +o`0|O ߿߿8_8`A'p "Lp!ÆB/bĈ#F1"|Eoa> #/|G /߿|#_|O |__? 4/,h „ 2l!D"F1bĈ#Bw0|O@ 'p  O`> ,@߿߿|?˗O`/߿| $? 4xaB 6tbD)Vx#|/|8` H_` +H0_|/߿|#_| ̗_| /߿|O` ,X`8`A&TaC!F8bE1̇0_|-̇0_| 70|=g0_|o`|˗o`|OO࿁(? 4/| H*\ȰÇ#JHŋ (0| 9W0| {b/cƌ3f̘1cƌ (0| [a>e0_ƌ3f̘1cƌ3"̗Q`2̷0|3fd/cƌ36̗1cƌ3N̗Q`2̷0|3fd/cƌ36̗1cƌ3N̗Q | <(0̇!B"D|"D!B"D!BO@ DPB >b>%BO@8`| H*\0a 6lذaÆ 6lذaÆ 6lذa| 6lذ` װaÆ &70_Æ 6lذaÆ 6lذaÆ 6lذ` 6lX0| kذaÆ aÆ 6lذaÆ 6lذaÆ 6lX0_Æ 6,oa5lذaÆ װaÆ 6lذaÆ 6lذaÆ 6,aÆ W0| k(0_Æ 6l0_Æ 6lذaÆ 6lذaÆ 6l0a 6TO`>/| kذaÆ %P>$XA .dCE1bĈ#F/bĈ70|=1bĈ1bĈ#F/bĈ#F1"|#Fl`#a#F(0|Q`|̗a#61bĈ#Fb#2g0|0_Ĉ#Foa [/a#F1bĈ#F0_Ĉ;o`>{/bĈ# 70|/|0 7߿|'|o| H*\ȰÇ#JHqa)˗/|+a+Vo` O࿁'? O`|/|_|/| H*\ȰÇ#JHa+̷0|+V80| '0_/_| O?߿O'p "Lp!ÆB(q"ņ*Vx0|UX| '0_'0_'0_/|'0_'0_'0߿|+VXbŊ+6WbŃ{bŊ[`| '`>/?'߿|o@8`A&4OB *TPB *T0a> *TP!| O@ DPB 5lذaÆ 6l0_Æ 6lذaÆ 6װaÆ "O@8`A&Ta| 6lذaÆ "װaÆ 6lذaÆ 5lذaÆ 6lذaÆ5lذaÆ 6lذaÆ 6lذaÆ 'p "Lp!ÆB(1'p "Lp!ÆB(q"Ŋ/b$/cƌ3f̸0|3f̘1cƌ3fH0_ƌ3f̘qa2f̘1cƌ3f̘`)'p H*\Ȱ!| 8`A&$ <0… :|1ĉ+FgѢEhѢŇ[oah"|-ZhѢŇ,ZH0|-Z0| -̷0|-ZdϢE-Z0E [ϢE[oa[ϢE YhѢEhqb|-gѢE-̷0| -gѢE-ZhѢE,Z_|-gѢE g0_[oa>-ZhѢE-gѢ|̷0E->70|)̷0| YhѢE-ZhAO@ DP|̷0… .\pB30@ (0A$80A'p "Lp!ÆB(q"ŊY(1|O@ DPB >,$80A$80,h „ 2l!Ĉ'R1E G0A$XA .dC 80A$80A'p "Lp!| 2dȐ!C 2dȐ| 2dp`|-ǐ!C 2dx0|)̷0| 1dȐ!C1dȐ!C 2dȐ!C1dȐ!CcȐ!C 2 2d`> 2dȐ!C 2d_> 2d0| 2dȐ!C-̷0| -ǐ!C 2dȐ!C 2dȐ!C1d8`> O@ |"D!B"Dx0|!|C80,h „ 2l!Ĉ'R1ł泈0|-Z0|-̷0| YhѢE-Zh`>-g!| <0… 270A$XA 'p "Lp!ÆB(q"Ŋ̗_>泈0|-Z0| -̷0|-ZhѢE-Z4a [ahѢŇ[oah"|-ZhѢŇ˗b˗ahѢŇ[oah"|-ZhѢŇ1|(? G_>O@ DPB S/| -̷0C:DϡC:tСCC/_>O@ 'p |G| H*\Ȱ!| ˧0| -СC:tСC:tPa>s(0_A$X `O@ DPB `|%̷0| 9tСC:tСC:T`|s/|0_|8`A&TaC 'p| G|  <0… :|1ĉ+Fg`0_|8`A&TaC 'p| G|  <0… :|1ĉ+Fg`, W0|-Z0|)̷0| YhѢE-Zh`>-ga,Zha>-̷0| Yha>-Zh| ["| Yh| -̷0| Yha>-Zh| 'p H!!B"D!BC80̇p`>!D!B"4? 4xaB 6tbD$J1|%J(a[oa$J(QD%J(Q|%J0'p "Lp!Æ w`> 4xaB H*\ȰÇ#JHb|-Z$oa>-Z|o`[oa,ZhѢE-Zh0E [ϢE`[oa>-ZhѢE-gѢEhѢŇ[oahѢE-ZhѢ|-N̗`,Zha[oa,Z0E-Zha>%`,Zha>-̷0| Yha>-Zh|-VG0|-Z0|Koah"|-ZhѢŇO@ DPa|O@ DPB >,$80A$80,h „ 2l!Ĉ'R1Eg`> 4xaB 6t  G| G| H*\ȰÇ#JHb|-Jw0|-Z0|˧0| -gѢE-ZhѢE,Z/_|-gѢE g0_[oa>-ZhѢE-gѢEhѢŇ[oahѢE-ZhѢ|-Z$oa>-Z|oa[oa>-2gѢE-Z|ϢE-gѢE-̷0| -gѢE,ZhѢEYh`,Zha[oa,Z0E-Zha>$XA .$0'p "Lp!Æ -O@ D ,h „ 2l!Ĉ'R1E-ZhѢ|YhѢE-ZhѢE,ZhѢEϢE-ZhѢE-JgѢE-Z0|-ZhѢE-ZhQb>-O@8`A&TaC̗oa>)̗ϡC:tСC:tС:ta:tСC9_| KO`>sСC 9tСC:t|:t0|:tС '0_|[ϡC2СC:tСC9tС| 9tСC s(0| -̷0C:lϡC:tСCsСÃW0_|:tС '0| 5СC:tСC:ta>r ˗߿'P`'p "Lp!Æ 0| %̷0|:tСC:tСCsСC#`:tСC 0_˗/_|:tСC:tСC:ϡC ` sСC70C:tСC:tСC:TϡC `G0C:t`>:tСC:tСC:t0C'0|СC:,ϡC:t!|:tСC:t/CP| o|O@ DPB sСC:t0C:tСCСC-СC:,ϡC:t!|:tСC:t/C:̷0C:t`>:tСC:tСC:t0C:̷0C:t`:tСC:tСC:tС|'p H8@$XA .dؐa:tСC:tСC:tС|[ϡCsСC70C:tСC:tСC:Ta| 9t(0|:tСÂ:tСC:tСC:tС|[ϡCsСCСC:ta>:tСC:`|s/|9` sСCСC:ta>:tСC:a ̷0|1̗` sСCr 'p "Lp!ÆB/bĈ#F1"|1|(? G_>? 4xaB 6dϡC:tСC:tСC:̗0Á 'p 8|W0,h „ 2l0|:tСC:tСC:tPaW`> ,+o`| <0… 270C:tСC:tСC:T/a>-̇0_| W0_|:tСÂsСC:tСC:tСC %p`0_|СC:,ϡC:tСC:tСC:a:oa>:ta|:tСCsСC:tС6̷0C-СC:,ϡC:t!|:tСC:t/ÆsP`:tСC9tC9C1P>$XA .dC!擘`> O@ |"D!B"Dx0,h „ 2l!Ĉ'Rh"F2f0'p "Lp!Æ СC:tСC:tСCsСCsСC70C:tСC:tСC:TϡC[ϡC:tX0|:tСC:tСC:tPa>:toa>:ta|:tСC:tСC:ta>:˗/|3f80|3f̘1cƌ3fH0_ƌ W0_|3f80|3f̘1cƌ3fH0_ƌ ˗` ˘1cƁ˘1cƌ3f̘1cF2foa3f/cƌ3f̘1cƌ˘b2f̘q`3f0_ƌ3f81_ƌ-̗1cƌe̘1cƆ2f̘1cƉ2f0'p "Lp!Æ 9tСC:dϡC:tСCsСC:tСC9tСC:tСC:tСC:tСC:t!|9tСC:tСC:tСC:tСC:t!|9tСC:tСC:tСC:t!|߿'p "Lp!ÄkذaÆ 6lذaÆ 6lذaÆ װaÆ [| 6lذa| 6lذaÆ 6lذaÆ 6lذaÄ6lذa| 5aÆ 6LaÆ 6lذaC6lذaÆ 6lذa 6lX0| kذaÆ kذaÆ 6la 6lذaÆ 6laÆ W0| k(0_Æ 6l0_Æ 6lذaÆ5lذaÆ 6lذa| 6l0߿|_|5aÆ 6@8`A&TaC! 1bĈ#Fb#.'0| G0|#FQ`"F1bĈ#F1bĈ#>1bą#o`>{/bĈ# 70_Ĉ#F1bĈ#F1bć"F0| '0|E1bD1b#F1bĈ#F0_Ĉ`#a#F(0|#F1bĈ#F1bĈ1"| #/_|E1bD"F1bĈ1bĈ#F1_Ĉ#| H_ O@ DPB 5lذaÆ 6l0_Æ 6lذaÆ 6װaÆ [| 6lذa| 6lذaÆ "װaÆ 6lذaÆ 5lذaÂk(0_Æ 6l0_Æ 6lذaÆ5lذaÆ 6lذa| O@8`AC80ƒ"D!B"$XA .dC%NXEeoa8@$X0,h „ 2Lo` 6lذaÆ 6lذaÆ 6lذa| ˷0_Æ-P` 6l0a6lذaÆ 6lذaÆ 6lذaÆ5l/| ̷0_CG0_>/_|˗O`|˗/߿|˗_|5Lo` 6lذaÆ 6lذaÆ 6lذa|˗| 5\`>P`/|˗/|˗_|O'p O@ DPB >(0_Ĉ#F1bD1|0_/|̗/?  O࿁'߿O࿁'? 480,h „ 2l!D"F1bĈ#B̗0_| !̗/_70|=w0߿|˗`o`> o`o` o`>$X| H*\ȰÇ1bĈ#F1|"+0 O@70|,X0_A (߿#߿/˗/|˗_? 4H0,h „ 2l!D"F1bĈ#Ḃ0_ 'p 8| '0| W`|70_G0߿|/߿|_/|,X`|'p "Lp!ÆB(q"Ŋ/b$`|-̇0_|+o`>{`|/|/|0@7 7P ,h_8`A&TaC!F8bE1w0_| [a|G0_滘/cƆ˘1cƌ3f̘1cF2 ̷0_Ƃ{b|3670_ƌ3f̘1cƌ3̗Q`2̷0|3fd/cƌ36̗1cƌ3N̗Q`2̷0|3fd/cƌ36̗1cƌ3N̗Q`2̷0|3fd/cƌ36̗1cƌ3N̗Q | <(`> O@'p "Lp!Ä6lذaÆ 6DaÆ 6lذaÆ kذaÆ-P` 6l0a6lذaÆ 6lذaÆ 6lذaÆ5lذaÂk(0_Æ 6l0| 6lذaÆ 6lذaÆ 6lذaÂ6lذa| 5aÆ 6Lo` 6lذaÆ 6lذaÆ 6lذa| 6l0_W0_C6lذaÄkذaÆ 6laÆ 6lذaÆ װaÆ G0|#| 6PC %P>$XA .dCE1bĈ#F/bĈ70|=1bĈ1bĈ#F/bĈ#F1"|#Fl`#a#F(0_Ĉ#F1|#F1bĈ!1"| '0|E1bD"F1bĈ1bĈ#F1_Ĉ;o`>{/bĈ# 70_Ĉ#F1bĈ#F1bć"F0_|#/_|E1bD1bĈ#F1bĈ#F0_Ĉ# ̷0,? 4xaB &70_Æ 6lذaÆ 6lذaÆ 6lذ` 6lX0| kذaÆ aÆ 6lذaÆ 6lذaÆ 6lX0_Æ 6,oa5lذaÆ 5lذaÆ 6l0_Æ 6lذaÆ 6װaÆ 'p +Xp ,h „ 2LaÆ 6lذaC6lذaÆ 6lذa 6lذaÆ 6lؐ` 6lذaÆ kذaÆ 6lذaÆ6lذaÆ 6lذaC6lذaÆ 6DaÆ 6lذaÆ kذaÆ 6lذaÆ aÆ 6lذaÆ 6lذaÆ 6lX`> 4xaB 6tbD? 4xaB 6tbD)VxcF9v1߿| ̗/| ̗/| ̗/| ̗/| ̗/| ̗/| ̗/| ̗/| ̗/| ̗/|̗`>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y/ڀ;;PKxaN~~PK+AOEBPS/img/insert2.gif1XGIF89aUVXijl౲NLK878݀)&(͋suw򛞡빻CBDabdy{}tvy涸г𝟢lnp~wx{oqt즨|}Öڍdeg҆?=<ר\\_NNP_`bwttGGIghjOML_\\ހ}}HFEױA?>ron /-.312>=?A@B$!!޹311zwxQQSjggТ!,QθQ׃ H~*\ȰÇBHŋIȱǏ An Iɓ(Lɲ˗0dO?5ϟ@;/iF?A"0CիXjʵ׬QÊ)M:1ah@5hݻx˷߿}(CÈ]P3E@?d T[nϠCӨ 7^ͺPz SB?o T<335 &Μy)={Mx 0%@H`?# Z=" @ hゟ>oψ%qC+ @]g7p]| q ( ID xg aiȐ '~KQ !]GЀ]F8h3`Kg<]eIdGM7NruAmx h!P'<+p”h¡G  1+@ +`_M,#h`\P , 20 i!Ԅ+ax]ƞ~1G5ŀ8CN°~8 vG@QY`~y@qe4G,Wlsx@4[ HpdWmtDnHwiaMhh&LG}mPk(3CѮ_iA5(jnO\>$!'klWӀ.n'7x~0o TvI˘f0!@YHZ,`Xꬷ.']ϙB!!{S1!^/56s "<-~Ԑ@{c߃]89\N$qaCA @ ƶv HP@Mpp<· S GHD WBRa!8 – H"HL!  @@A s R 2`B7X&[΃ئgލේ|@vQ8&.QK c܎w`F$`[s8 = e|١Y0 &;8IqSt͋Ԁ f5 **GA Anvр2gE`@7mxV7@`(ۧh СTЁ @ -ƙ^CV]pcCpeMmg9E!m[vjKb5֤5F߃'vɏF$b,&KP`]V@EA^5I Hw G uH0O]Pd $( dM/XAjb'؁/h S3aCh{k@ bahx 6}+I`6vG9,Xr`ba51n`; ";EP Z5Q)l:khQ !6; !?@f`UgA]9 5onFS<4) ,;>@@O kٿ?+Ƥk?K 8  `  X G  (x #%x '؂ǂ4H /1h 3`@ ;=X ?X GL GIH KX SU8 WZy\؅c0QX}whx j(l nȄpor8PaqEoև~8  X/Aш92cG/ H%CyyxY  ؂X è ͘ ȁH׈ X۸ݘx 8  X~_x7}X Sgy 8 } h H ʗ˰ѐhKPwRJiW:0,`D&i hvq&0<uU62v&`RCQ"`R Y 9 ǑW م"yfQp fmKvilH5hurƓ~h.~a/my Eh0Pp5+W#phWn %`fp3fN0y}KNTĚ.0twcѕXwkpiOii\Swp;jp[wqk6va$Q?5rm#/`4a{ Y.bJc; 0p;i2yk̓39m0@5 *70`b#Gi24 -.OP,QH'D9!Ri &`qI`an`[) yP$se1+pinRiJh=5) er2Gv|Z#d )ʄ920|Z(Z9-st9>9 G0i*& 0-b(p~0#R}`MO Wy[?63Ep)wA'fgz. (me5mpQsH a' &Ӡ_\} $Zzj.0$mOݹrq9 *(n0c3HX 'PG`H`HvQڲ.[P@f6{8{5j&6]&cC{ 0cjl6НP8`<=# 2p6<>919[-˒`90r;t[s{ji+0lp;z1 Om5o**"o eX6E592H}pk{q+6 ZKf?șpZk pJ M[H"@^}oc^/Mπɗ&1^^ >$΄#^(ނ',+0^1>4~ō:6>nBA>FE~J.INn⮼1XOTic>g`@\-zubms*g`m`l[tWFl;|wzEBW~8ph6l r;qQk5i>j`wAp!$`fB!Pv~Nq0 )F (;Ş(QӾlgpxer~3I`4˒2b{[~(B4wrh'w5/`/6fśk p\>+s2}ՙ2 pK< +?_`?Y0zSz/o ~؟ڿ/E5pP0'/OkwP?u*N~d[wW~~Co ==G~hiInw~ZRRhYen[BhIow`4|4^w-H6k f'?欸>RRC75(`"&3tId;>t:PDJx{9(ɟ@YBdУ%AʴӧPJJ LXL .\dfml6?\ l#4h xIݻxݱ ?f5k 4 F O҃ΠCR dс M[4sp" NyO%LfVZP{~@ӛ/s+D (hf(Pá3у9<І(4`@P^ JhİA $: ԰da4HM بczŽ@)DiHJ:UXq'^>@ @PIԂl & : 900A͵3, i!Gz4= ~|0]3"$H ?jꩨ*Kz(aGZirc${֩y [#^լ]*b7jf٪4Pb L~DzkhWNCm+s4G.6hA[4qD\[0vedw p6^L;&ߘ0xp Sxȁ@u\X$2/oD73YRbO?]t`-0+=/YQ8pcut2֭ާ|=wj-ڄ'~{p9цsgM5yʒr^.sNz>n;FND!gz_G_"/_BR_k}r跟 ᄚ?²oIŸ;RX$JL *PH| *JbyAE4`,E 7G" WBpi!Spaun谈c顩~ ,Dlz'E)1TLb8(jG=/ڏè1"ft"8^vݖ<ҐICRcXE7 ~QD̆!DŽHFo )I&L&PRM$@iJߍl"*#{e,8 d 0Ibz I4-q ;]4EM sg#3 m-IW#no BQpVnA,6AHo k| XXβL`',70?8> ?%NXr '(pX9`$ ϑAT0!ԀV$a!iHr 4!ನG} !mueoŒo)! 9HP G@™)aD`i7h fO`ja ( h & !p͐Hoj(ۖflcmWFoqy0?A{痬ö@(`Y=qx"mš9:XCTkN?a B\:UZM9Wl\m wA @ )X6.6R"m f;HXÔ cylvlF_(D݃P'| {/X;]b!>;%DpL=B;Q?OԀ*( ew>8'n(iL3/XAp^ڬ^//KԥY/ʜm,>ªI~dL?hw&$.WswAն ؀8XcsX7gIBE$npc<4CR&6(~*hI,($.Y 8TAr858@AXjs3@#b u[m8:ϗG2M?"<o&`) O o0KJ!^q@)`N:pܚ] )#*aj pD8h IKS"(Ыk'q:0prK ~f)@̒ |m]'5]a@*L 8`Ǧ|s)0$˲<˰<o0U~J ?Pwp[WA@̱  0a/!~p p2̹gP[gmp(|t6@r<"T0żw:~03dGp>t 0u7|8 |lFk"{ [m>tPzb.0an'9/Kp4)t9iR=TMձUZpGm?PpO| PjR+r}l,=\(a}\3J$AY/r-+pqj]Ȼ" 0rz+p@g pEhPP@"m'Ql*"7w4irrbWg0wPnt$ l'L}# /0'qyk\ lnpvnC@J%o`PME.0??7)~%FNkM &'+k5Җ)J=R䝼2|7M[m ll wqNnebh / Uu Wgk3`mZW "tv3M{e~P ˔JOo@%>=^h`fJ^&.@kpcfP8Amp^F k @б(va~9N1B0uk9p+Wv\*j0O𒅮s~ww: 1 :`np^:&@gP&@)G]:ppp W> _3MzflPCKl#U#v-N4@gE*pb!`) Kmp TM۲ fKpvG`7Wib+g|kfm2MluP ,LV15|TGo4R}{oFX5OV}~Kb?M=a? ?^" O $!oN(?A/XO4ί!1C?dޯ=Oo$?<$? =(ɴͧѐۤ H}eKH* Ç#JTp39ȱG?(ƒ(Sre&)OI6!D)3ϟ@MdϠH*}4gQGJZϧR՜X=jJï6vk|hkݻҜ.޿ע'Ê#Kxc'k%3CMӨS#hu9bfΰcwʏ۸sv3^ͪ5ײ+gG{U3~ @(C@$(mQʃG>>HM|-'Y hT hpwC 6@"@6 I amDGPZ%68(Ɂk`m(GܶG9 DF ~0ninܠcq<#lN&d$D 6h QQCnFAstenaikpiҴf"&$q ~ÒMڦ'HC .!:` F~`AHpE:Ӥ&{W&J-hޢ~Q2BAl*+lV/`0 70"d Ejm}3X}v b8F0/ l6x BH'`Ck[IƤ!e)P@]6vަKǝ mP|m aqmkgh( x@ Ih0@xlgll[} ~ m1p p [` @Q~2<{fgpw~ڗo"觯⏿/?&oՏ Y')<1tK#H &d̠ z GHk(L1B@A8̡w@ H"HL&:PH*Z1;PKnS11PK+AOEBPS/img/lnpcc071.gif_kGIF87aXH?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,XH H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳσI̗_|/ϟ(? / ̗o@ O@O@ DPB >QD-^ĘQ|勘/߿|oƍ)70_0_ ̗/|6nܸqƍ7nܸq|0O? |'@  <0… :D/_A# ߿| ,h „ 2l!Ĉ'Rh"ƌ /_0O࿁O? o?'p "Lp!ÆW`> 70߿ OO? O@ DPB >QD-^ĘQ|˗_|˗o`|/߿| 'P? ? <0… :D/_|/?$ /80/_  <0… :|1ĉ+Z1Ɓ O '߿'߿'8`A&TaC+/_|/_|3/|'p A̗_|O@ DPB >QD-^ĘQ|'P࿁ ' ( O@ DPB &̗o`|/_|˗O |@ ̗O`|0@' <0… :|1ĉ+Z1FO@ O?GP࿁#?'p "Lp!Æ'P'| ߿ /_|8|O'p "Lp!ÆB(q"Ŋ/b̨qa|۸qƍ˷qƍ7nܸqƍ7nT/_|6nܸqƅO@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uޭ/_|kˇoJ$XA .dC'p ",0 <0… :t <0… :|1ĉ+Z(0F1b1F  <0… :T/_|>|Ç>|ÇÇ>||"̗Ç>|0_|>|Ç>|ÇÇ>||Ç>|X0Ç>|Ç>|Ç=|Ç>|0Ç=|ÇÇ>|Ç>||>|Ç*a|>|Ç =|Ç>|Ç>|(0Ç2̗/|̗/Ç=|H0_>?#H0_|? 4xaB *̗aÆ 6lذaÆ 6lذaÆ kذaÆ)װ| 2װ|'0_>_5lذaÆ5lذaÆ 6lذaÆ 6lذ| ˗O`|˗/߿|/_>w0_|˗o`|!̗O`|˗O`|̗/_>/_|70_װ|'0_/_>+0@ 8`A&Ta| 2dȐ!C 2dȐ!C 2dȐ| /| ̗/|'0| 70| /|)70|%'0 8`A C/? ߿|߿(0_|/߿|O`>$XA .d/_Æ 6lذaÆ 6lذaÆ *0a> ߿| _o@'P'p A0@O@'P8p`>08_> $H |̗/_˗O`#|0 ? 4xaB ˗aÆ 6lذaÆ 6lذaÆ k0_|70_|˗O`|/_/_k/_/_>/_>C/_ 'p@ A $H0_>˗_| /|/_|70_>O@ DPBkذaÆ 6lذaÆ 6lذaÄ&װaÆ 5lؐ`>'p O@ $/| O/߿ o`o8`A&T|6lذaÆ 6lذaÆ 6l0aװaÆ װaCk0 O@ /B"!B"D!BO@ DPB >QD-BwAO@ D`>8`AO@'P࿁ ̗QĂ'0_70| ˗o`|`> H0,h „ 2l!Ć;0 'p 'p "Lp!Æ>"D!B"D/|O`70|_70_|!Bl"D!"̗a H $? 4xaB 6ta>!B"D!B/|˗O``/|G0| Aa>!B0|8`A? 4xaB 6ta>!B"D!B/߿|'0@ o (0߿|/߿|o@8_8p| ̗/|/_|'0_|/| ̗/|8_| <0B O@/,h „ 2l|!B"D!B80_|/_| '0߿|/|G0|5`> 70| 70߿|%'0| '0_|Ab|'p HA/?/_>_|˗ϟ|˗/?/_>_|˗ϟ|˗/?/_> O@ DPB >QĂ/߿|o`>#/|/|̗o`(0@_>/| 7p0@OO@ DP2O@8`8`A&T| HA8`A&TaC!F8`G0߿| '0_> |7P࿁/`˗O`|˗O`| ̗/߿|W| ̗/|/_>8`A&T0…8`A$8? 4xaB  $? 4xaB 6tbD)V1|'櫘`)滘0?$X?'p "Lp!Ã8`A'p "Lp!ÆB(q"Ŋ!櫘/_71_|/^b|8`|O@ DPB8`A'p "Lp!ÆB(q"Ŋ!x"CO@ DPƒ2D!|П <0… 'p  O@ DPB >Qć/_|˗`|8`8`A'p "Lp!ÆBx0D"'p@$XA .dh0,h`>$XA .dC%N|o`>O`|#o`GQ`>)RH"|(0_>$XA .dx0,h`>$XA .dC%N|o`>o`o`(0E)RHb> Q$П <0… 'p  O@ DPB >Qć/_| '0| ̗/_>(0E)RHb> Q$? 4xaB O@  <0… :|1ĉ '0_| ̗/_+o`>QH"E)0E8`A&T| HA8`A&TaC!F8a+O`| ̗O` /E(RH"EQd"A$XA .dx0,h`>$XA .dC%N/_ ˗/| 7`>  W0,h „ 2la|!惈? 4xaB  $? 4xaB 6tbD)V1ŋ/^h1ń.П <0… 'p  O@ DPB >QD-Bwŋ/Zw1a'p "Lp!à HA8`A&TaC!F8bE]xŋ]L| H*\`>$X | H*\ȰÇ#JHE.^xE.&w@,h „ 2<? 4H0,h „ 2l!Ĉ'Rhb/^xb ]/_> ̗/|˗O`|˗O`|˗O`|'0_|/_>/_>/_>(0ŋ/^xň81_E ߿| 70˗/_/A`>7p <0.To… .\p… [p… .\p… .\pB[pa| `oa/a`>`[p…-\0… .\p… ̷p… .\p… .\p…˷p„.̗/|/70| /_| ̗/|-\p‚.To… .\p… [p… .\p… .\pB[pa| _/| (P|/| (0_>_>_| <0‚.ToB/?~/_>~Ǐ_|˗|˗/?~/_>~Ǐ_|˗|˗/?~/_>~/…-\p… .\p… .\p!|-\0a 80?7?˗O`|'P ˗/? 70߿@$XA ̷p|   <0… O@  <0… :|1ĉ˗b|+6̗/_Ŋ+JWqa8`A&T| HA8`A&TaC!F8|UbŊ+V0_Ņ*O@ DPB8`A'p "Lp!ÆB(q"EX1_Ŋ+VXa 1̷0@~,h „ 2< $? 4xaB 6tbD):̗/_Ŋ*VXbŊ U\a|O@ DPB'p  O@ DPB >QDWb+VXb|c0@  ? 4xaB  /,h „ 2l!Ĉ'Rt/_UXbŊ櫸0_ ?8`A&T| H'p "Lp!ÆB(q"EX1_ł˗| <0… O@ DP!'p "Lp!à H'p "Lp!ÆB(q"EX1_EO`/__#/_>/_|70_A$XA .daO@ DPB8`AO@ DPB >QDWb '0_| '0߿| ̗/|o`C0 <0… O@@8`A&T| H'p "Lp!ÆB(q"EX1_E`>˗/| 0@_>O`>8`A'p 4hР$0@  ? 4xaB  /,h „ 2l!Ĉ'R|/_U4/_>/_|/߿|O@`|˗o`|̗/| H*,o…)̗/_B$XA .d? 4(0_>$XA .dC%N0_|+X"|W|˗0| H*\ ,h_| H*\ȰÇ#JHb|*VWbŃ囘/_+ Wa|'p "Lp!C8`AO@ DPB >QDWb+V0 H*\(0C 1L <0… O@ O@ DPB >QDWb+VXb|+>/_>~/_|Ǐ_|˗/|/_>~/_|Ǐ_|˗|/_>~/_|Ǐ_|(XbŊ+VXqb|*VWbŊ+Vl"|*VX|+VXbŊ+R̗/_Ŋ H*\ȰÇ#&O@ D(0_| &L0a„ &L_|'p "Lp!ÆB(q"EXbŊ+VXb|XbŊ˗bŊ+VXbŊWbŊ+VXbŇ H*\ȰC H*\ȰÇ#JH|YhѢE-ZhѢE-ZhѢE-Zhq`|,ZhѢE-ZhѢE-Z`> O@ DPB >1_|#F1bĈ#F1bĈ#F1bĈ80,0 H*\ȰÇ˗/bĈ#F1bĈ#F1bĈ#Fqa|".̗/_Ĉ#F1"|E1bĈ#F1bĈ#F1bĈ#"̗/_Ĉ1bĈ#FH0_|#F1bĈ#F1bĈ#F1bĈ`|#F1bĈ1bĈ#F1bĈ#F1bĈ#FH0_1bĈ#F/_#F1bĈ#F1bĈ#F1bā"Ft/_Ĉ#Fb|"F1bĈ#F1bĈEQDEQDP| ḨPB *TPB ˗OB 'p "Lp!ÆB? 4xA$XA .d!C$XA %L0a„%L0a„ &L0a„˗0a„%L0a„ &L0a„ &70߿|˗/_ 'P|7@$XA .\/C ǐ!C/C 2dȐ!C80,h B&L0a„ &L0a„ ̗0a‚!̗/_ ̗`>+/_ o` <0… c0a1dȐ|cȐ!C 2d!|'p "$/a„ &L0a„ &L0| &,/|/_| 70_|'p@  <0… c0a2d0_1dȐ!C 2d`>8`A̗0a„ &L0a„ &L` ̗a> ̗O`/|/_ '0_„ &L0a|&Lh0|&L`%L0a„ &L0a„˗/a„ K0a„ &L0a„ &Lx0_„ ˇ0A$/߿`7߿O@ DPB2La|2d/_|cȐ!C 2d0a|2dh0C 2dȐ!C 2$!C2d0C 2d`> [/_> ˗/|2dȐ!C 2T/C c0_|1dȐ!C 2dh0C1d`| 2dȐ!C2L|c0_| ǐ!C 2dȐ!C ǐ!C 2dȐ!C ca> 2dȐ!C ǐa| 'p |  ̗? 4xaB 6tbDM8qĉ'"7a'N8q|曨0DM8qĉ'Noĉ'N8a M8qĉ0ĉ7qĉ'N8q`'N8qD&67qĉ'No|'N/ĉ'N8qā&N8qĉ0ĉ'N8Q`M8Q`|'N8qĉ8qĉ'NDob|'N8qD&:7qDM8qĉ'No? /߿70˗/_/A'`>o(? 4xaB-\0… .\p… ̷p| .\`| .\p…˗O`>/_>+/_>/| ̗/@ o 8po|'0o`o`>o`(0߿|'p "Lp` [p… .\p.\o… ̗o… .\`O`>70|o` ̗O`>`>̷Pa|/_>˗_Ko`>#o`|;o… ̷p| .\p… .\80… -\pB-\p… W0| W0|/|'0_>;`>*'0| '0߿|/| g0_>O`| O`| ? 4xaB-\0… .\p… ̷p| .\`| .\p…˗O`>/_|(߿8`>_/߿|o`O|8p@ ''0_|(?˗O |`7? 4xaB-\0… .\p… ̷p| .\`| .\p…G0|o`o`>'0߿|G0_G0… .̗/… .\p.To… .\p… [pa .\H0_ .\p‚ #o` /|_/߿|/|#/|-\p… .\p…-\0… .\p… ̷p| .\`| .\p*| /_|70_|o|o`/|'p࿁ @8`A&TaC!F'QĂI(QD%JdOD%J(b>I(QD0D 'QD%J(a>%J(QD$:'QD%JLO|1| 0_>%J(QD I(QD%B'a>%J(Qb|ko` /_I(QD @ O||7?/߿G0? (0A $(`>  O? H*\ȰC>Ç>|ac`>˗/|/_| /_|>|C``>W0| ̗_;!| W0|'0|'0_|˗`|{C>Ç>|ac`>/߿|/__=|Ç W0_| '0|70| W0|=d/_> O`>/_| HP`> 70_A+(`>8`A&T(0… -\p… .\p| .̷_/_'p࿁O@O@ DPB `'P| @/߿7P G A G0| /| G |8߿8p`>O@8`A&OB)TPB *TP‚&̗O| 70_>_>70_S80_> *TPB W0_| '0|+o``S`|O7?'p|'0_|G`|#0  @o <0… 70_70|̗o` o`|70|:t0Ã[0 < < O@ DPB >|"AO8`A&TH0_ .\pB'P o`> ߿(_ /߿'p| H*L/_˷p@$XA$Xp`> 4(0A '0_>/| ̗/߿| ̗/߿| ̗/|˗O`|'0_|'0_|'0_| 480A'p <0B-\p… .\p… [p… O@$XA8`A8p`> $H | $H`>$XA .dh0,h`8`A? 4xaB[p… .\p… &̷p… .\p…8`A8`A C!@~,h „ 2<? 4H0_A$X`> <0B-\p… .\p… [p… .\p… H H<8 ? 4xaB  0   <0B-\p… .\p… [p… .\p… 8`A8| ˗`8`A&TA$X|,h?˗/A'p "L`| .\p… .\p„.\p… .\pB'p  //_| O@ DPB8P |,h0,/_| 3hРA 4X0_>$XA .dC%7qĉ'N0B$XA O@ ? 4xaB `> 4߿| H`| 3hРA 4X0_>$XA .dÄQa>!B"DA,0 <(?8`A&TA$X0̗ A $H_>$XA ̗o… .\p…˷p„.\p… .\pB.L0 O@$XA .d`>'p 3hРA4hРA ,/,h „ 2la|A0D!B"D B̗ |߿8`A&TA$X| <0… O@ ̗ ;x/,h „ 2la|A0D!B"D B/!|'p@$XA .dx0,hp`4`>$XA .dx? 4/_/_/_/_> ̗/|˗O`|˗O`|˗O`| b|!B,/_>!B"āQ!|,h „ 2l!Ĉ 8`A ̗/a„ &L0a„ ̗/a„ K0a„˗0a„ &L0a„ ̗/,h „ 2l!Ĉ'R`>8`A&TaC ˗Ç>|H0_|>|Ç Ç>|Ç>|X`> 4xaB 6t? 4xa*T`|*TPB *TP!|'p "Lp!ÆB(q"Ŋ˗ϢE'˗/Eh_|YhѢEgѢE-ZhѢE-ZhѢ|+˗ϢE-Z$/_>-ZhѢE-ZhѢE'g1b|YhѢEgѢE-ZhѢE-Zh"|Yl0@ H*\ȰÇ˗/bĈ#F1bĈ#F1bĈ#FQa|":O@$XA .dC1bĈ#F1bĈ#F1bĈ#F0_|""O@$XA .dC1bĈ#F1bĈ#F1bĈ#F`>'p 8? 4xaB 6t"|E1bĈ#F1bĈ#F1bĈ#FO@ O@ DPB >0_|#F1bĈ#F1"B$XA .d!C$XA .0 'p "Lp!ÆB/_'p "Lp!ÆB? 4x@ O@ DPB "O@$XA .dC%NX1_|+XbŊ+6W1b|*VX|UXbŊ+VH1_|+XbŊ+6Wb|+VXQb|+VXbŊ+N̗/_Ŋ*VXbŊ UXbŊ+VXbŊ+V0_|+XbŊ+6Wa+VXq`+VXbŊ#˗b|+VXbņ*6̗bŊ+V/_Ŋ+VXbŊWb+VXb|˗bŊ+V/_Ŋ+VXbŊ 8 ,h B&L0a„ &L0a„ ̗0aB̗/_&L0a„ &L`| H*\ȰÇ#JH!|O@ D80_„ &L0a„ &L0aƒ&Lh0_3/a„ &L0a„  <0… :|1ĉ'p@$XA%L0a„ &L0a„ &/| &L0a„ ̗? 4xaB 6tbD):̗/_UXbŊ櫸0_|˗/|`> <0… СC:tСC:t/_>sСC:tС|СC:t0a>:tСC:tС9t0C:tСC s`>:tСC 9tСC:tСC:tp`>:tСC!|:tСCsСC:tСC:t|G0C:tСC9tH0C:tСÄ:tСC:tСC:t80C:tСC O@ $!B"D!B"D`>$XA .dC%NX"|/^x|/_>~/_|Ǐ_|˗/|/_>~/_|Ǐ_|˗|/_>~/_|Ǐ_|(0ŋ/^xŋ!xŋ-滘08`A&T| HA8`A&TaC!F8bE]xŋ]L?$XA .dx0,h`>$XA .dC%NX"|/^x|/@~,h „ 2< $? 4xaB 6tbD!˗/@ ߿ O o@$X| H*\ȰÇ#'a>'p "Lp!à HA8`A&TaC!F8b+`> '0_(G`>oO/_|#H_|'P8`A&TH0… %̗o| H*\`>$X | H*\ȰÇ#J1|G0| W0E(/|'0| '0_|'0|'0|G|K/_| 8`A&T| HA8`A&TaC!F8"|70߿o`߿? 4(070| w`| '0A/_˗O`> /߿| /_>70|̗O`O`>/_|)R"| 8p O@ DPB8`A'p "Lp!ÆB(q"| W0| ̗/_h0E'p| ̗/@ O0@7P <0‚.T0 O| H*\ ,h`>$XA .dC%No`> o`_7P ,h_ 4xP  <0… O@  <0… :|1ĉ+Zŋ/^/!|,h  'p@$XA .dx0,h`>$XA .dC%NX"|/^x"E$XO@G@$XA .d? 4H0,h „ 2l!Ĉ'Rhb/^x!|,h`A$H0_+X_>$XA .dx? 4H0,h „ 2l!Ĉ'Rhb/^H`> 4x ,h`4 ? 4xaB  $? 4xaB 6tbD)˗o`|'`> H40 |A8`A&T`> 4xO@ $!B H*\`>$X | H*\ȰÇ#J81| ̗o`> /|/|'0_| ̗/|˗0| ̗/|;/_'p O@3hРA4h |/?~/_>~Ǐ_|˗|˗/?~/_>~Ǐ_|˗|˗/?~/_>~gРA'p "Lp!ÆB(q|'0_#`(G_|˗O`_> ̗/|o`;0 <(? 4h0 <0… :|0D!B"D!BW0߿|#O`|ˇ0ą /|'0|˗/_>O`'p'p|0 O@ D80_„ K0a„ &L0a„ O@ DPB >QD o`#`(G1_|8`8P`>/_#H0_|O| ḨPB*TPB *TPa| *TPB *TPB *T0_70_>#/|)Tx0B *T0B̧PB  ̧PB*TPB *TPa| *TPB *TPB *T`> o` 4QD-^ĘQF=:O@ DPB :O@ DPB >QD-^ĘQF=~2d>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծevc>0'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? y1@, <0… :|1ĉ+Z1ƍ;z2| H`>$XA .dC%NXE5nG!/'p 8`A&TaC!F8bE1fԸcGA?  <0… :|1ĉ+Z1ƍ;z2| H 'p ,(0A <0… :|1ĉ+Z1ƍ;z`>$H0G A $/|O@ DPB >QD-^ĘQF=~Y?  ̗_|˗/߿|'0_|8߿/߿ /߿8`A&TaC!F8bE1fԸcG-O@'p|˗_>G0߿|/| GP`>/_|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?ZП O/_>˗/|(_߿|_ _O@ DPB >QD-^ĘQF=~П OO`>'0߿| /| ̗o`˗O`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?^П O0@7P| /߿߿7| O@ DPB >QD-^ĘQF=~? O@ DP|O@ DPB >QD-^ĘQF=~?  <0B <0… :|1ĉ+Z1ƍ;z?  <0… :|1ĉ+Z1ƍ;z2|˗/|˗_>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYf/_|8@$XA .dC%NXE5nG!/O@8`A&TaC!F8bE1fԸcGA ?  <0… :|1ĉ+Z1ƍ;z2E$X0,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ'p A80_|8_>$X`|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? ? 8p8p|/,h „ 2l!Ĉ'Rh"ƌ7r#H H`>70߿| ̗_| ̗/߿|˗O`|˗o`˗/߿|O`>$XA .dC%NXE5nG8 | /_|/߿| /@/߿| 70@˗O`| <0… :|1ĉ+Z1ƍ;zH1@~,O  /߿߿|'߿_8`A&TaC!F8bE1fԸcG)O@'p` /߿|O`> /| ̗o`|'0߿|8`A&TaC!F8bE1fԸcG+'p 80@|߿|߿|߿o`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?V O@ DP!|O@ DPB >QD-^ĘQF=~ ? O@ DP!|O@ DPB >QD-^ĘQF=~ ?  <0… :|1ĉ+Z1ƍ;z2E$X0,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ/_|/_8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_xqǑ'WysϡG>zuױg׾{w?|yѧW}{Ǘ?~}׿;;PKڍZa__PK+AOEBPS/img/objrel.gifjGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ'p " <0… :|1?$X| H*\ȰÇ#JHE  <8`>8`A&TaC!:O@$X? O@ DPB >QD-B̗/Exŋ˗|]xŋ/^xa|.N̗ŋ/^D/_ xŋ/^xb|wa|/^x|w`|/^xŋ/^\/|.2̗ŋ/^4/|xŋ/^x|8P  ̗/| ̗/߿|˗`| H*\ȰÇ3_|˗_|˗/߿| ̗`|#F1bĈ#F1bă̗_|˗`|/__| ̗/bĈ#F`|˗_'0_|˗O`̗/bĈ#F1bĈ#Fx0_70| ̗_>/|1bĈ#F4/| /߿|70_|W0_#F1bĈ#F1b|+o`|'0?߿|(߿8`AO@ DPB 'P O`'p?8`A& <0… :|1ĉ/_|˗O`70߿|/_>Wqb|+V0_>/|˗O`|˗O` W"|*VXbŊ+R̗o`|8P  '`>/߿| ? H K0a„ &L`>/| ̗/|/_> ˗0a„ O@ DPB >QD H`|) G"EG`>Q0E)RHB$X A$(0_,X`>8`A;x;x 'p O@/_ ˗/_+X` ,X0,h „ 2l!ĈI,aI0_>(a> 1g0_|!'Q|%J(QDX0|'Q|$JLOD$20|$>̗Oć$J(QD%̇0_> @80 S(0_B O@ ,0@ H ̧PBW0| w0B'P ,hP |'p "L0B *TPB *TPa|70| S`> 4x@$XA SPB #`g0BO@  <0| *TPB *TPB w0_Co`>*TPB &̧PB W0|70|!̧PB *T`> *TPB *TPƒ;/߿|!G0| *TPB SPB+/_|`>8_> <0… СC:tСC (?'P8P |$ <0… "O@8`A8P /@o H ,h „ 2lH`> O@ DPB >0_>̗o`>+`#F0_|"̗/| +o`| w0_|E1bD1bĈ#F0|G0|w0_Ĉ#Fta W0|o`|w0_Ĉ#FTa#F1bD/|!1bĈ惘/| a1bĈ A1bĈ#FH0| cO!|O@'p "L? W`A ,80_,X` `A O@ D `'p "Lp!ÆBoa1̇0_|0_|"F/_| E_"60|̗/|a|%1_Ĉ#F1| E4a;/_>1b|拘/b>"60|̗/|E_|E1bĈ#F80| c`|ˇ0_|#F$H $H A AO@ DPB >80B$X A$(0_ /_`A ,X` ̗| `,(`> 4x `| WP`|+Xp` +X``'p "Lp!ÆB/bćg0| g0_|'0_|G0|'0_˗_| /_|#/|E`>g0_>̗/| O@/_|8߿ ߿| H| H*\ȰÇb5̗`/_|'0_ /|/߿|˗/_˗/|/|E`5̗o`>/_|'0_|˗_/_˗O` ̗o`E1bĈ#1b|{`| ̗o`|3_>'0| /_| ̗_|拘/bĈa|w0|˗o`_>/߿˗߿|_|O@ O@ DPB >80_Ĉ`>'p|_|GP`˗/߿|O7p'p ;xp` `>8_0|@$X| H*\ȰÇ1|G0߿| ̗/߿| /|_> ̗/|'0|"1_Ĉ0_>;O`|˗o`|'0߿| ̗/|_>E4/bĈ#Fq`#̗`> '0_>/_>`> /߿_O ,hP`;x4/|O`/_>`_|˗/| G0_  <0… :|q`#̗a|1|拘/bĈ k/|"F\aE1bĈ#1bD1̇0_8? 4x`|"̇|"D!ƒ!/|"40 Hp`|,(0_ $? 4xaB 6t|#F$/|1bDED/b#2̗oa|1"|""1bD H*,+X` ,X| ̗`| ,X` ,(0_| ,X0_O@ DPa|˧0_ .L/_ [p… [p…-o…  ̗/_|-/_ .T/_ [h0… .T/_[/_| .\h0_| ̷p… ˷p… [/… .08 A O@ DP |'p ;xp`"D!‚C |,h „8`AC!B" |߿| o ̗/| G`>O@ DPB >a$J(QD%&'QD +O`> `>70|-'QD%J(`>$J(QD%&'QD 3_>#`/| I(QD%J4a>%J(QD I(1a> 3/|1̗/|ˇ0|I(QD%JD`>$J(QD%.w0D |'߿'p @8P`  <0… :|1/ĉ'N8qD8 |/|/7P`0 <0… :|1ĉ+Z1ƍ8`A&L/| '0_|̗o`˗_> SPB *TPB *T`> *TPB *TPB SPBg`>/?O@7`> @ <0… :|1Ć&N8qĉ'F7q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉM8_'N8qĉ'N8qĉ'N8Qb'7qĉ'N8qĉ'N8qĉ'J7q&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(`> 4xaB8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_$XA .dC%NXE33o`>70| '0_| W0|O`|!g0_>̗/a>iԨQF5jԨQƅ +_> '0| ̗0|+`>o`3`̗`|˗/|iԨQF5jԨQF+`#O`>Ko`> #`| ̗/| '0| ̗`|˗_|̗o`>5jԨQF4H#(߿| o|(߿8?#H|7P|7P?o`_ #_| ̗o` G0,h „ 2l!Ĉ'Rh"ƌ8@ 7P`'0|/|70|/@ @8P | O@8P /| 08`A&TaC!F8bE1f/|o`| W0|%70|G0__>a+/߿|_̧QF5jԨQF`| ̗/_0@_>o`|(|߿|o߿|O G0߿| /߿||O@ DPB >QD-^Ęqb>5:g0_| 1_|4jԨQF5jԨQ|5jt`| ;/|˧QF5jԨQFӨQ|c/|(˧QF5jԨQFӨQ|S/_|$˧QF5jԨQFӨQ|C/|9̗/F5jԨQF5jlOF%̗/_>0_|'P ,h „ 2l!Ĉ'Rh"ƌ'p "Lp!Æ8 |O@'p A H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘N3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسk3 ;;PK\QJojPK+AOEBPS/img/opena.gifGGIF87aX4?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X4 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc O@ O@ DPB >QD-^ĘQF=~a|0˗OH"E)RH"E)c|)RH"E)RH"EOd>"E)RH"E)Rȉ 1H"E)RH"E)R| ]'RH"E)RH"E1_B oO O@ DPB >QD-^ĘQF=~ 2|/_>O`|˗/|!C 2dȐ!C 2dȐ ̗/_/߿| ̗/_;/dȐ!C 2dȐ!C c| ˗/߿|O8`AO@ DPB >QD-^ĘQF=~/|˗_|_>/_@$H A $H A90|˗_|˗O`|O@ A $H | H*\ȰÇ#JHŋ3jȱǏw1|  $H A $H ''p O@̗`˗`,X`  <0… :|1ĉ+Z1ƍ;zcX0G>~Ǐ?~Ǐ}̷0|0Ǐ?~Ǐ?~_70_|˗a/G>~Ǐ?~Ǐ̗`>'0_S/_>0Ǐ?~Ǐ?~_>G0_|;oa H H <0… :|1ĉ+Z1ƍ;r'0|#/_>`>9ѣG=zѣG=:/A ߿O@#(0,h „ 2T? 4xaB 6tbD)VxcF9v080_ /_> `> O@ DPB 8@$XA .dC%NXE5nQa| g0_˗O`|W0G1̗/G=zѣG=zX1|̗`|70|#|yѣG=zѣG'0;ϣG ѣG=zѣG#[| -O@$XP |,h B HP`  <0… :|1ĉ+Z1ƍ; ̷0K/|yd/|yѣG=zѣG-_Ka|K/b>=zѣG=zb<˷0| )Qb>"ѣG=zѣG![| 0_|0|yѣG=zѣG-O@ ,+`A W` ,X|,Xp`>$XA .dC%NXE5n_>w0|̗/|/_| g0_'0_|'1G=zѣG=z1Ǎs` /߿|/_`>O` #ob>=zѣG=zb>a!̗_|/|̗O`| ̗_| ̗b>=zѣG=zb>`>'p|˗_|'0_>(_ @8p <0… :|1ĉ+Z1ƍ;ѣ|/|˗_| '0_>˗_3c>=zѣG=zb>;`+/_|/߿|/A$@7p? 4xaB 6tbD)VxcF9vϣG;b>0ѣG=zѣG!Q`櫘/@ O@ 3hР8`A&TaC!F8bE1fԸc%˗_|=̗/_> ˗c| alOa>È#F1bĈc|1*0F]O@ D !D`>$XA .dC%NX|˗O`>˗/|̗/| ̷0|/^xEC/_'0_|`>.*wŋ/^xE W0|#/߿|O`>˗oa.^xŋ-w0|'0߿|'0_>滸0ŋ/^xŋ%3/|70_G0|[oa/^x| G0߿|˗/|˗` '0|˗_|˗/߿'P`>$XA .dC%NXѢ|̗`|/|#/_| W0ŋ/^x`>3`| ̗/_>/| W0|/_O`G0ŋ/^xŋ |OO`|$80O@ DPB >a|3 |G0?'p`80˗/߿|/_|(0,h „ 2l!Ĉ'RX`> O|̗O`|o`/߿|(`> 4xaB 6tbD807_|/_|'p@7_|'0_| ̗/_8P ,h „ 2l!Ĉ'Rh1a|+O`'0_ '0|˷0_|/^xʼn70߿|G0_>W0_>/߿|'0߿|˗`.^xŋ/^0߿|((߿ /_|˗|'p|'p "Lp!ÆB(1a˗O`|('p` 7p`|'P࿁O /,h „ 2l!Ĉ'Rhaxŋ/^|]dŋ/^xŋ]0ŋ/^x|;|.^xŋ/^1ŋ ]xŋ/wa>.*wŋ/^xE.^dŋ/^xq`%wa/^xŋ/Nw"|/^xŋ]tOa]xŋ/^xbxŋ/^| w1_|/^xŋ/^0 <0‚ H*\ȰÇ#J0 

8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[~ ;ٴk۾;]$XA 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/|!C 2dȐ!C 2dȐt/dȐ!C 2dȐ!C b 2dȐ!C 2dȐ!C^̇0_|̗/|̗o`B 2dȐ!C 2dȐ!/;o`|/߿|/| 2dȐ!C 2dȐ!C` G0߿|/| 2dȐ!C 2dȐ!Ca|̗/_>˗/߿| 2dȐ!C 2dȐ!Ct@80@ _80߿ '?O@ DPB >QD-^ĘQF=~I1_| #/_/|˗/߿|˗/dȐ!C 2dȐ!C 2b/_>/|_| 2dȐ!C 2dȐ!C 0|8p#_#(?  <0… :|1ĉ+Z1ƍ;zaB:G0_Ȑ!C 2dȐ!C 2|t`!C 2dȐ!C 2dH 0_|!C 2dȐ!C 2dȐ aB 2dȐ!C 2dȐ!3/| 2dȐ!C 2dȐ!C*g0_H 2dȐ!C 2dȐ!CT |,h „(0,h „ 2l!Ĉ'Rh"ƌ7r#H 1_Ȑ!C 2dȐ!C 2|ܘ/dȐ!C 2dȐ!C `> O@ DPaA$H? 4xaB 6tbD)VxcF9va| 3$|  $H A $H Anw0| 9{$H A $H A1| 9惘$H A $H 8`A'p "Lp!Æ{(0A$XA8| ? 4xaB 6tbD)VxcF moƍEg0Ɔ拘oƍ7nܸqƍ76̷Q`7j1|c/b7nܸqƍ7n0F6nܨ1_|mla6O| H?$XA . <0… :|1ĉ+6w0_|'0_|-Z81_|G0_|G0_>c/b>3a|-Z/E-ZhѢE;O`>˗/_|-Z81_| 3/|/߿|/_拘"| 1gѢł,ZhѢE-ZO`>G0_| Yh|g0_>/|/_| Igq`h|-ZhѢE-N/|#/_,ZhDO@ #`|̗/_> $(0A G A #H| #H0A ˗? 4xaB8`A&TaC!F8bE!̗/߿|˗0E-NG1_|̗O`>g0߿|K`|((0_|!̗Ϣ|%hѢE-Zhq!|O|7_|08`A&TaÃ&̗`|/_'p O@ HA<80| '0|/_> ̗O`|/_>/| ̗/@ o  <0… :|1ĉ%w0߿|O`>˗0_|+V0_Ł 70| ̗_|˗0_ń*0|'0_O`|/_|˗/߿|g0_/߿|˗/߿|WbŊ+VX| w0_|'p@7p8`A&TaÂ*g`> ߿߿80,h|"̇`'0_|˗/|/_|˗_>3/߿|/_˗/߿| O@ DPB >QD-Wa*VXqaUb|˗!| O|80??7?/߿|˗_ ?8`A8`A&TaC!F8a(&̷0E)>G`>QTob|9G0߿| ̗/| ̗O`|˗/߿|O`| /_|˗_`>QH"E)R80|c"EH0E(*'1_|70|'0_|˗|8߿| O'@ A  <0… :|!|,h B H_+X`,(0_8`A&T ` +X` W` +X| +Xp`,X`,X` W`'p "Lp!ÆBd/bDc/"| -1bĈ-` 0_|5̇0_ą5O@$XР|$? 4xaB 6t"|#̷0C$X HP`O@ DPBc`> 4xA$XA"`>!!B"D|"? 4xaB 6t"|#̷0_Ĉ [/bĈ[/bĈ#.1| -1bĈE\/bĈ#Fqa/_O`|[/bĈ-w0_|˗/|̗/|_|Oo`> 8`A&TaÂ̗0|sСÆ:ϡC:tСà '0_/߿|/|-СÆ3/|+O`>˗/_>˗/_>'0|'0_sСCs80B O@ DP H'p "Lp!ÆB\`|˗`|/_| )1bD3/|̗`|'0_'0_>G0߿|w0|#Fa>"F1bĈ E1bĈ#&/|/_˗/߿|`#̇0߿|/_ ̗`| ̗/_> ̗_>'0|1bĈ;`#F1b|#F1bĈ 3/|˗_|/_|70_>$XA ̗`|0O '_80 G0| H*\Ȱ|СC:t`>:tСC 8 '0_|˗_|˗o|O@ DPB80_/|/_>˗/_o|/8`A&TaC'p "Lp!Æ2O@8`A&TaCg0߿| ̗/_>/_>70_>"Ą̗O`̗O`>˗/|˗/|_|;`>!B|A"D!0D!B1a;/_|˗_|/|;o`>!BL_> o| /| ̗o`? 4xaB 6t0|>|Ç =Ç>toa{Ç=||>|Ç5!|,h „ 'p "/| &L0a„ &L_%L0!| &L0a„%L0a„ K0a„ &L0a„ %/_Kx0_|&L0aB˗ |O@$H0,h „ 2la>TÇÇ =|Ç̇0_1̗Ç k/| =Ç>|0|*Ç {C>|Ç ;oa>|X0| !P`>|| =|0Ç>$Ç{Ç>4`̗0|a| ̗`>Ç>\a{Ç=||>|Çw0_|̗|̇`>7P`|8p'p "Lp!Æc0 < ,h „ 20 <0…8`A&TaC W0|g0_|˗O`|/|˗_|70_|'`>|#/A  <0… :\Ç>|Ç>|Ç>``>/߿|'0_|˗|  70߿|'p| G A#H 8`A&TaC =|Ç>|Ç>|Ça+O`|˗/_/_|'PO? '_/ 70(0,h „ 2lpa>|Ç>|Ç>|`|5O O |7_ G| '_'p | O@˗`O@ DPB .Ç>|Ç>|Ç"0_|'0_|'0߿|/_|'P O|?#/_> G A O@ DPB .Ç>|Ç>|Ç"0|̗/|˗/_> oO8 7?#_> G A O@ DPB .Ç>|Ç>|Ç"0|a|90a>||>|Ç>|Ç>|!| a|2̇0_|{Ç.Ç>|Ç>|Ç"0|>|0| {0Ç>|pa>|Ç>|Ç>|0a{C[|>|Å>|Ç>|Ç>|CcÇ+X`  <0… :\Ç>|Ç>|Ç>\/_|Çs`|{Ç.Ç>|Ç>|Ç2O| H@$XA &O@'p`>$X| H*\ȰÅ8`A&TaC!F8bE1fԸcG}b?~Ǐ?~c|?~Ǐ?~Ǐ?~1Ǐ3Ǐ?~Ǐ?~81|?~<`?~Ǐ?~c|}`}Ǐ?~Ǐ/g0Ǐ8`A&TaC!F8bE1fԸcG#'p "Lp!Æ'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?$H@ $H A $H'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,Y HO@ DPB >QD-^ĘQF=~y1_HB 2dȐ!C 2dȐ!/ 0_Ȑ!C 2dȐ!C 2|! 2dȐ!C 2dȐ!Ca|#/_#/| 2dȐ!C 2dȐ!C^w0|O`|o`|K/dȐ!C 2dȐ!C b> '0|o`|K/dȐ!C 2dȐ!C b G0_|/_|K/dȐ!C 2dȐ!C )˗_| 0O? 80,h „ 2l!Ĉ'Rh"ƌ7r#Ȋ3`| G0߿|/_|˗0_!C 2dȐ!C 2dH w0|o` /_>˗0߿|B 2dȐ!C 2dȐ!#a|O(_8?  <0… :|1ĉ+Z1ƍ;zaB:G0_Ȑ!C 2dȐ!C 2$|t`!C 2dȐ!C 2dH 0_|!C 2dȐ!C 2dȐ aB 2dȐ!C 2dȐ!3/| 2dȐ!C 2dȐ!C*g0_H 2dȐ!C 2dȐ!CT |,h „(0,h „ 2l!Ĉ'Rh"ƌ7r#H 1_Ȑ!C 2dȐ!C 2|ܘ/dȐ!C 2dȐ!C `Bn2dȐ!C 2dȐ!C0 'p "L |,? 4xaB 6tbD)VxcF9vqa|c@ $H A $H!w0H  $H A dC$X H*\ȰÁg`> 4xA$(0_O@ DPB >QD-^ĘQc|۸q|̷a>"۸qƍ7nܸqƍ moƍEg0Ɔ拘oƍ7nܸqƍ76̷Q`7j1|c/b˗o"|,h „ 'p "Lp!ÆB(q"Ŋ̗/| ̇0E-N1|̗/|̗o`>拘Ϣ|0_>+˗ϢE-ZhѢE'0|/|-Z81|̗`>˗_|/| Eg`|1̗ϢEYhѢE-Zh1|#_|Yh|g0_˗o` ̗a$80| Yh`>-ZhѢE'`|̗/_>8`A&TaC=$`> G0_|˗_|)̗|c/a̗Ç=|Ç>|ǡ0_|̗/_>>|Ç=,/|`| /߿|C/Â&0|{0Ç {Ç>|ÇO@ o`|/_'p A$XA .d`>g0_˗o`>/_> 8? 4/;` ˗/߿| ̗O`|/_ ̗/| ˗O`|'P8_>$XA .dC%N81|̗O`>/_>Xbņ*g0_>O`|_|UL|'0_|_'0߿|˗_|'0߿| /߿|/߿|_*VXbŊ+V`>˗/|0@ o'p "Lp!Æ9T |7߿߿'P`>$XA"D|3O`|˗/_>/_|˗_>W0_ ̗_|˗/_ <0… :|1ĉ#["| UX|81_ń*˗/C'p`O࿁A ̗_|/_'p`>O@ O@ DPB >Qć棘0|)R0E(RGQa>s`| ̗/| ̗O`˗/߿|O`̗_|/߿|'0|H"E)RH`(&0E):G`>QTob>3`> ˗O`|˗/߿|˗|߿'P`|8 7?#H A'p "Lp!ÆB8`> 4x `A ,X | W?$XA .4+X`A ,X`,X` ,80_| WP` ,80_ ,X`,X | H*\ȰÇ# 'a擸0| I(b$'Q"|擘`>擨0_>  ,'p "Lp!ÆB(0ćcO| -'QDh0DId/bKOD哘0D%J(Q|[!|,h@$(0_'p "Lp!| 1d0 < ,h|ˇ0Ḃ!B"D0BO@ DPB >_|7?#Hp`>$XA S/|/_|70_|˗O``>7߿8P`>O@ DPB s80_|5СC s0C:tСC̗/_> ̗O`>̷0C[`| ̗`>/_ OO70߿8_>O@ DPB s(0| /СCС|:tСC:g`> /G| H*̗Oa> /_> ̗o` O'߿|7? /AO@ DPB s(0_|"O@ DPA$X8`A&TaC!>'0A '߿? o`'p "LP`>3/|+/| '0߿|/|#/_>` .\p…;o… .\p… -\p… .\p„3/_|70_g0|-\pB̗`|O @ o|_8?#o`| H*\Ȱ|СC:t`>:tСC 'p@̗/_/߿|8|,h „ 2 /_ ̗/|0 /|˗O`|O@ DPB >D <0… :|`> O@ DPB >\/| ˗/|'0|"D3/|#/| ̗_|8?o`|7p|O@ DPB &g0Ç>|!| {Ç>Da ˗/|70_|Ç g`>(߿  /_ 7p|'p "Lp!Æ;Ç>|a>|ÇSÁ>|!|>|0Ç>||>|Ç =Ç>|`>ÇÇ =|Ç̧`>'p 8`A&T? 08`>  <0… :|X0|!"DA|!B"D;a>!Ba/D!Bqa| A/D!>"DA"DC/a| A"| Ka>A"Dc" Ba>!B4"D!B0| )"D)̷0|"D!.0DA|!Bh0D!Ba W0|A/D !W0_> /D!BBO@8`A'p "Lp! H*\h? 4xaB 6t`+`AD"D3` "D!B\"D!B"D!B"D +``|˗/߿|'0_/߿| ̗o`|˗O |o o` o|8p`>$XA .dÁ B"D!B"D!B`|9G0߿| ̗_ /|˗/_ _'_'|? _|/|8p8`A&TaC"D!B"D!B"D0_| /_|70|˗/? o` '?O?'P`7p˗o? 4xaB 6tp`>!B"D!B"D!B\!| O|8|?#?O|#?8p ` O@ DPB >"D!B"D!B"Ds` /_> /|˗/_ _'/?? _|/8p`>$XA .dÁ B"D!B"D!Bqa`|'p`GP '߿O|7? 707p? 4xaB 6tp`>!B"D!B"D!B\a 6̗"ąk"|!B"ą B"D!B"D!Bqa0_>Ca>A"D"D!B"D!B"DS"D Soa> A"D"D!B"D!B"Ć˷0D!̷0_ *"D!B\"D!B"D!B"D;a>!Ba . <0… :|80D!B"D!B"D!>O| H?$XA .O@'p`>$X| H*\ȰÇA"D!B"D!B"D!B"ą B"D A"D!B"D!B"D!B"ą B"D A"D!B"D!B"D!B"ą B"D A"D!B"D!B"D!B"Ć B"D"D!B"D!B"D!B"Dw0D!B0| B"D!B"D!B"D!B"D'p`>$XA .dؐ |,h „ 2l!Ĉ'Rh"ƌ7rB$XA .dذa>$XA .dC%NXE5n#|?~\Ǐ?~Ǐ?~1,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/.l0Ċ3n1Ȓ'Sl2̚7s3ТG.m4ԪWn5زg6;;PKUtwGGPK+AOEBPS/img/lnpcc023.gifG9GIF87a]?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,] H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѕ='0|G=zѣ0|G=zѣ70_|70|'0_|/| ̗/_G=z|'0| '0|˗/__| '0ѣG=ztg|O`O`|'0| '0|G=zѝ __7߿|߿|O@ DPB >QD-^ĘQF=~1_˗O`|_|˗/|/_ 2dȐ!C 2dȐ!C )0|!C 2dȐ!C 2dȐ!CG0,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼zm 0 <0… :|1ĉ+Z? 4xaB 6tbD)Vx#|3f̘1cƌ3fd/cƌ3f̘1cƌ!˘1cƌ3f̘1#|3f̘1cƌ3f1_ƌ3f̘1cƌ˘1cƌ3f̘1cF2f̘1cƌ3f0_|2f̘1cƌ3f̘a3f̘1cƌ32̗/_ƌ3f̘1cƌ3:̗1cƌ3f̘1cF˘1cƌ3f̘1cF2f̘1cƌ3f0_|3f̘1cƌ3f0|w0|˘1cƌ3fH1_|3f̘12(2r| H`|+X|'p "Lp!ÆB(q"Ŋ gѢE-ZhѢE-0_/_>˗/_|O  <0… :|1ĉ ˗bŊ+VXbŊ+V!|/߿//߿|_|/_| '0߿| H*\ȰÇ#JH`|*VXbŊ+VXbE'p/߿(0_|o`O`|_>$XA .dC%NH0_|+VXbŊ+VX"|˗__> +_|˗O`>O`>XbŊ+VX`|*VXbŊ+VXbE/߿|˗O`+`>/_|˗/_>bŊ+VXbEXbŊ+VXbŊ)XQa|XbŊ+VXb|*VXbŊ+VXbE*VT/_|+VXbŊ+V̗/_Ŋ+VXbŊ*((,h „ 2l!Ĉ'Rh|aĈ#F1bĈ#F0bĈ#F1bx1_|1bĈ#F1bĈQ`>1bĈ#F1^̗/F1bĈ#F1b#F1bĈ#Fˇ#F1bĈ#FÈ#F1bĈ|aĈ#F1bĈ#F0bĈ#F1bx1_|1bĈ#F1bĈQ`>1bĈ#F1^̗/F1bĈ#F1b#F1bĈ#Fˇ#F1bĈ#Fs0 O'?8|'A?O@ DPB >QDH"E)RH"E):0߿| 70_>`_O`#/|G"E)RHqb|(RH"E)RH"E=̗/| /| G0_| ̗/_>/_O`>QH"E)R/_>)RH"E)RH| /|˗_>_>O`>/|˗O`>"E)R" (@$XA .dC%NXE9O|'?$(?˗_|/_ O70,h „ 2l!Ĉ'̗/E)RH"E)RHa>)RH"E)RH`|(RH"E)RH"EQH"E)RH"EG"E)RH"E)Rt"E)RH"E)R)RH"E)RH|/|˗o`|˗o |(? ? 4xaB 6tbD)˗"E)RH"E)R0|+o`3/|'0߿| ̗/_'0_QH"E)R/_|)RH"E)RH"EO`_#`|O`>QH"E)R(0_|)RH"E)RH"E˗/߿| '0_|˗`| G0| W0_|)RH"E) ̗/E)RH"E)RHa> O߿o'p|˗O`|/_>$XA .dC%N\/_>)RH"E)RH|)RH"E)RH|QH"E)RH"EH"E)RH"E˗"E)RH"E)R0E)RH"E)Rx0_|)RH"E)RH"E(RH"E)RH"ŃH"E)RH"E):0_˗/_   <0… :|1ĉ+̗/E-ZhѢE-Zh0|W0߿| O@ '? 4xaB 6tbD)N̗/_Ŋ+VXbŊ+VH1| ̗o`|_>UXbŊ+VH1_|+VXbŊ+VX"| /| 0_|WbŊ+VX"|UXbŊ+VXbŊA̗O`|O@`|˗/| <0… :|1ĉ'˗bŊ+VXbŊ+VbŊ+VXbŊ+:̗/_Ŋ+VXbŊ+VH1_Ŋ+VXbŊ+Vt/_+VXbŊ+VXb+VXbŊ+V0_|+VXbŊ+VX"|+VXbŊ+VXa|*VXbŊ+VXbE˗/_E*VXbŊ+Vx0_|+VXbŊ+VX"|̗/|/_|'0_|˗/_Ŋ+VXbŊ /,h „ 2l!Ĉ'Rh"F#o`>O`/|e̘1cƌ3fl/_3f̘1cƌ3fta| '0| /_ ˘1cƌ3f0_|3f̘1cƌ3f0|/_>˗/_ ̗/|/_>+/cƌ3f̘b|2f̘1cƌ3f̘a3f̘1cƌ32̗/_ƌ3f̘1cƌ3:̗1cƌ3f̘1cF˘1cƌ3f̘1cF2J̗@'p  <0… :|1ĉ8qĉ'N8qĉ'NTa|Mx`> ? 4xaB 6tbD7qĉ'N8qĉ'N0|G`>o`o`O|'0_|˗/| ̗/|/_| H*\ȰÇ#Jt/_'N8qĉ'N8qD '0|˗O`O`>o`>O`'0_|_|M8qĉ'Nt/_'N8qĉ'N8qD_>_| '0| /|'0|o`#oĉ'N8q|M8qĉ'N8qĉ'*0_|˗O |/߿ 70?70˗/|/_|`>|߿(0,h „ 2l!Ĉ'QD%J(QD%J(a>IOD%J(QD˗OD%J(QD%J(Q"|˗O|$J(QD%J(a|$J(QD%J(QD%"'QD%J(QD%J/_>%J(QD%J(QDI(QD%J(QD#˗OD%J(QD%J(Q"|%J(QD%J(QĈ(QD%J(QD%J0C$ A H | H*\ȰÇ#JH|YhѢE-ZhѢE=/| /|)70_|˗/߿|gѢE-Zh"|YhѢE-ZhѢE=̗/| ̗/|570|hѢE-Zh`|,ZhѢE-ZhѢE#_| /| G0_|-ZhѢE-̗/E-ZhѢE-Zh0|/_ HP 70_|˗_|O@ DPB >QDWbŊ+VXbŊ+RWbŊ+VXbŊ˗bŊ+VXbŊ+VbŊ+VXbŊ+:̗/_Ŋ+VXbŊ+VH1_Ŋ+VXbŊ+Vt/_+VXbŊ+VXb+VXbŊ+V0_|+VXbŊ+VX"|+VXbŊ+VXa|*VXbŊ+VXbE*VXbŊ+VX|UXbŊ+VXbŊUXbŊ+VXbE <0… :|1ĉ+Za3f̘1cƌ32̗/_ƌ3f̘1cƌ3:O@ DPB >QD-^| <0… :|1ĉ+Z"|,h „ 2l!Ĉ'RhbC$XA .dC%NXE8`A&TaC!F8bE'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺB8`A&T0!$0 <0…8`A&40 <0… 8`A&TaC!F8bE1BO@'p "Lp`8`| H*o… 'p 8`A&T(0,h „ 2l!Ĉ'Rh"F H`>$XA ̗/ H`>$XA  ̗/_ .$0 O@ DP|'p "Lp!ÆB(q"Ŋ/bt0 O@ DP|-0 O@ DP|[pB H@$XA  ̗/,h „ 2l!Ĉ'Rh"F H`>$XA ̗/ H`>$XA  ̗/_ .$0 O@ DP|'p "Lp!ÆB(q"Ŋ/bt0 O@ DP|-0GP ,h „ ˗/… O@'p "LP`|8`A&TaC!F8bE1:O| <0[`>@ H*/_| .\H`>  /,h0A˗? 4xaB 6tbD)VxC H*/_80?O@ DP|[pB ߿ O@#H A$H O@ DPB >QD-^`>#8? 4xaB˷|`>$XA  ̗/_ .$0 GP  G0_|'p? 4/_>$XA .dC%NXE8P?8`A&T80_| 'p O@ DP|[pB 'p| '0_|˗/߿|/A /_>$XA .dC%NXE8P?8| gР3h`>#H?80,h_/@`>0@߿| H|'p "Lp!ÆB(q"Ŋ/bt0G A#H AG AO@ O@#H A$H  <0@O?8P`>_ /_>$H|'p "Lp!ÆB(q"Ŋ/bt0 O˗/߿|˗/| ̗/_> $/_| O@'p|˗O`|˗O`|˗/A /_| HO@'p| '0|˗/_>G A˗? 4xaB 6tbD)VxC$X0G0|/߿|_|#H AG A$X0 70|/߿|_|#H A˗? 4xa H@$XA  ̗/,h „ 2l!Ĉ'Rh"F H`>`>0@߿| H|40 O@O`> o| ̗/_> 4hРA$XP ,h „ ˗? 4xaB 6tbD)VxC$X0G0| 70_>'0A /_> 'p 8P`O` /_>$H|O@ Dp |,(? 4xaB <0… :|1ĉ+Za>_/_|˗b|滘o`>/_'0_|*˗/_Ƌ2f/_3f̘1cƌ3ft/cƋc/cF˗b/˗/cƌ3f̘1cƌ˘b|˘b|e/cƋ˘1cƌ3f̘1cF2f/_>2f/_|/˘b|2f̘1cƌ3f̘a/˗a-˗/_Ƌ2f/_3f̘1cƌ3ftP>$XA .2dȐ!|cȐ!| 2dȐ|'p "Lp!ÆB(q"Ŋ/bt/cƋc/cF˗b/˗/cƌ3f̘1cƌ˘b|˘b|e/cƋ˘1cƌ3f̘1cF2f/_>2f/_|/˘b|2f̘1cƌ3f̘a/˗a-˗/_Ƌ2f/_3f̘1cƌ3ft/cƋc/cF˗b/˗/cƌ3f̘1cƌ˘b|˘b|e/cƋ˘1cƌ3f̘1cF8`A&T`|cȐ!C ˗!C 1dȐ!C <0… :|1ĉ+Za/˗a-˗/_Ƌ2f/_3f̘1cƌ3ft/cƋc/cF˗b/˗/cƌ3f̘1cƌ˘b|˘b|)̗oa| K/cƋ˘1cƌ3f̘1cF2f/_>2f/_| [/|˘b|2f̘1cƌ3f̘a˗_|O@$Xp`> 480_| #/߿|˗/? O@3hРA˗ϠA 4h0_|/_|'P ,80A /_>$XA .dC%NXE'0߿|˗0A8`Aw`` 70_|˗/߿|wwg0|/A'p /_>$XA .dC%NXE'0|˗a3/_|1W0|/_>`|˗/| '0_ko` ˗1_|3f̘1cƌ3f0|'0|1W0_|e̗/| '0| ̷0|˗1_|2^g0| '0| W0_|˗1cƌ3f̘1cƌ̗O`|O@`|˗/|G A ˗ A ̗o`|O@o`| ̗/߿|G A ˗/,h „̗O`|O@`|˗/|G A ˗? 4xaB 6tbD)Vx|3^̗/|3Z̗/_ex1_|3f̘1cƌ3f0_ƌ0_ƌ˗/|3^̗/_ƌ3f̘1cƌ3:̗1|1̗1|x1_ƌ˗1cƌ3f̘1cƌex1_| eh1_|2^̗1|e̘1cƌ3f̘1|/|3̗/|/|3̗/_̗O`|eX0_|3f̘1cƌ3f0_|˗_|0߿/_'p ",/_̗O`˗_| ̗/|˗0a„˗/a„ W0_>/߿|/_>˗/a„ ˗? 4xaB 6tbD)Vx|˗/߿| 70_|˗1b|#_|O`G0_˗/|˗/߿| 70_|˗1b|2f̘1cƌ3f̘aO`>W0_|#˗a>O`>W0_|!˗/_Ƌ _>/_|e/_3f̘1cƌ3ft`|80߿8`A̗/_/_|˗O`|˗O`|K0aB˗0a„ +/?'@$XA <0… :|1ĉ+Za/˗a-˗/_2f/_3f̘1cƌ3ft/cƋc/cF˗b/˗/cƌ3f̘1cƌ拘/_ƌ0_ƌ˗/|3^̗/_ƌ3f̘1cƌ3:g0_|s/|171_˗/_Ƌ"˗1#|e̘1cƌ3f̘1|̗/|7`>'p "/_̗_| ;/a„ ˗/_„ &`|!̗` &/_>$XA .dC%NXE̗_|'0_|_0_| ̗/|/_'0_|˗/_Ƌ #/_>˗o | O@ D/_| H*\ȰÇ#JHŋ3O`| /|et/_> O`>_| 70_|2.̗/_̗_|'0_|_˗1cƌ3f̘1cƌ̗/_/_|70_|˗`> 櫘/_> O`>/| ̗/c|x1|g0|+/|e̘1cƌ3f̘1|3^̗/|/_ 8߿ ߿|? 8p˗? 4xa ˗/߿| ̗/_/_|G0_|)T/_| H*\ȰÇ#JHŋ˘b|[/cF˗b/˗/cƌ3f̘1cƌ˘b|S/_˗/_Ƌ2f/_3f̘1cƌ3ft`|3/| 81_| ̗_|/|%˗/_Ƌ2f/_3f̘1cƌ3ft`>˗/߿|˗_|˗O`|/_0_| ̗/_ ̗/߿|˗/| ̗_| ˗/_ƋO|7p`|80,h BO@ DPB >QD-^0|'0߿|/| ̗/_>e4/_> O`>/_o`|̗/c|x1|˗/_ ̗/߿|˗/| ̗_| ˗/cƌ3f̘1cƌ3O`o`o`|˗`|+O`>o`o`|˗`|e`>_O`>˗/|2̗/_ƌ3f(2((˗_|/?'@$XACH0|/_O| o O@ /_|"Da>O`O`>W0_|"$XA .dC%NXEex1_| eh1_|2^w0_˗_|80߿8`A˗? 4xaB 6tbD)Vx|3^̗/|3Z̗/_ex1_|3f̘1cƌ3f0_ƌ0_ƌ˗/|3^̗/_ƌ3f̘1cƌ3:̗1|1̗1|x1_ƌ˗1cƌ3f̘1cƌex1_| eh1_|2^̗1|e̘1cƌ3f̘1|3^̗/|3Z̗/_ex1_|3f̘1cƌ3f0_ƌ0_ƌ˗/|3^̗/_ƌ3f̘1cƌ3:O@ DP… HP |,h „ .O@ Dp |,h „ .O@ DPB >QD-^`> 4xaB 'p A H*\? 4xaB H*\? 4xaB 6tbD)VxcD$XA .D 'p "LpaB$XA 'p "Lp!B$XA .dC%NXE8`A&T0!$0 <0… 8`A&,0 <0… 8`A&TaC!F8bE1fԘ/F˧QFӨQF5jԨQF1˧QFiԨQc|4jԨQF5jԨQFiԨa|5jX1_>5jԨQF5jԨc|5jD/F5V̗OF5jԨQF5jĘ/F˧QFӨQF5jԨQF1˧QFiԨQc|4jԨQF5jԨQFiԨa|5jX1_>5jԨQF5jԨ#|,h „ 2l!Ĉ'R< <0… :|1ĉ+Z1ƍ 8`A&TaC!F8A$XA .dC%NXE5nǁ $H A $H A1_> A $H A $H 7$H A $H A |@ $H A $H Aܘ/H A $H A $H $H A $H A rc| A $H A $H An̗$H A $H A $ȍ $H A $H A1_> A $H A $H 7$H A $H@ $@i#O@ DPB >QD-^ĘQF=~R$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"(_>$XA .dC%NXE5nG!E"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"̗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#GO| H*\ȰÇ#JHŋ3jȱǏ C$0 H*\ȰÇ#JHŋ3jȱǏ C$0@ H*\ȰÇ#JHŋ3jȱǏ C4/_|#G9rȑ#G9rȑ# ˗oȑ#G9rȑ#G9r$|F9rȑ#G9rȑ#G"7rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ#G9rȑ8`A&, <0… :|1ĉ+Z1ƍ;z2c|!# 2dȐ!C 2dȐ!CĘO |,h „ <0… :|1ĉ+Z1ƍ;zbB>'0_Ȑ!C 2dȐ!C 2|򅄘_!C 2dȐ!C 2dH 1߿|!C 2dȐ!C 2dȐbB 2dȐ!C 2dȐ!-/$| 2dȐ!C 2dȐ!CZ/_H 2dȐ!C 2dȐ!C_2dȐ!C 2dȐ!C i1߿|!!/dȐ!C 2dȐ!C bBB/_Ȑ!C 2dȐ!C RH_>$XA ? 4xaB 6tbD)VxcF9v|򅄘_!C 2dȐ!C 2dH 1߿|!C 2dȐ!C 2dȐbB 2dȐ!C 2dȐ!-/$| 2dȐ!C 2dȐ!CZ/_H 2dȐ!C 2dȐ!C_2dȐ!C 2dȐ!C i1߿|!/_Ȑ!C 2dȐ!C 2|8`A&,_>$XA .dC%NXE5nG󅤘/dȐ!C 2dȐ!C b> H_>$XA .dC%NXE5nGa>B 2dȐ!C 2dȐ!-/$| 2dȐ!C 2dȐ!CZ/@'p  ? 4xaB 6tbD)VxcF9v| W0߿|G0_| 2dȐ!C 2dȐ!CZ/@'p  ? 4xaB 6tbD)VxcF9v|򅄘_!C 2dȐ!C 2dH 1߿|!C 2dȐ!C 2dȐbB 2dȐ!C 2dȐ!-/$| 2dȐ!C 2dȐ!CZ/_H 2d!C 2dȐ!C_2dȐ!C 2dȐ!C i1߿|!!/dȐ!C 2dȐ!C bBB/_Ȑ!C 2dȐ!C 2|򅄘_!C 2dȐ!C 2,(߿| H/,h „ 2l!Ĉ'Rh"ƌ7r#H 1߿|!C 2dȐ!C 2dȐ˗/d| 2dȐ!C 2dȐ!CO |,h „? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C#|,h'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?c> 2dȐ!C 2dȐ!C#|,h'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1_HB 2dȐ!C 2dȐ!- I1_Ȑ!C 2dȐ!C 2|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b 2dȐ!CRH!RH!YP>$XA O@ DPB >QD-^QF=~i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1?$XA  <0… :|1ĉ+Z1ƍ;zb 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBN2dȐ!C 2dȐ!C y`> 4xa„ H*\ȰÇ#JHŋ3jȱǏ 3 1_Ȑ!C 2dȐ!C 2|!! 2dȐ!C 2dȐ!CԘ/$|!C 2dȐ!C 2dȐ8`A&4 <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭ ˗+W\rO`|\rʕ+|'`> 7߿ H*\ȰÇ#JHŋ3jȱǏ CB̗/_˗_|/_|/H"E)RH"E)RH (_|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? 1_ /|70߿|"E)RH"E)RH"˗/| G0|  <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[~ ;ٴk۾;ݼ{ <ċ?<̛;=ԫ[=ܻ{>˛?>ۻ?ۿ?`H`` .`>Z;;PKѣGGPK+AOEBPS/img/dcltype.gif$cGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMS <0… :|1ĉ+Z1ƍ;z/|?~Ǐ?~GǏ?~Ǐ?N̷0Ǐ?~Ǐ?~1b>~Ǐ?~Ǐ5Ǐ?~Ǐ?~|a>>~Ǐ?~Ǐ 9̗/Ǐ?~Ǐ?~H`> 4xaA$H`> 4xA$XA .dC%NXE5n/_> 9̗/Džȑ#G9rȑ#Gq|`>ȑ#G9rȑ#G92b c|9rȑ#G9rc>51b>9rȑ#G9r1G1G9rȑ#G9rĘ| q#G9rȑ#G9^Ǒb8RǑ#G9rȑ#G/X1|8VǑ#G9rȑ#G/h`>'p "LX0,h „ 2l!Ĉ'Rh"ƌ7&Ǒ#Nj8rȑ#G9rȑ|9r#G9rȑ#G9^Ǒ#Nj8rȑ#G9rȑ|9r#G9rȑ#G9^Ǒ#Nj8rȑ#G9rȑ|9r#G9rȑ#G HO@˗`,8`> 4h? 40 QD-^<| #/| ˇq`| ˇa|惘/|aĈ#F1bĈb>!̗a|%̇1aal/_|C#F1bĈ#Faa>C| aaÈ#F1bĈ|70_|˗/_0@ / ̗`> Gp`> ̗ A G| #H A  | `>'p "Lp!ÆB(q"Ŋ/w0|'0|̗_|C` c`>Ẏ0| ;ob>3`>1bĈ#F16g0|`|70|3`>+`|/_|0@ O|7p|0@ 7߿|7?#/A#(08`A&TaC!F8bEG0_|#/_>̗a;`>#`>_|˗/_ //|/_|/_˗O`|/߿|7_ / /,h „ 2l!Ĉ'Rhb>'p`#(@̗o@/ o|70@'`> /߿ O|o|/_|/߿|/_|7p`8_|˗o| H*\ȰÇ#JHEg0|/|̗o`>!O@ / H`A7_> o` O 'p@'0_  '8`> ,#(`> , <0… :|1ĉ+Z̗O`/| ̗/_|/|g0_> k`>_|˗/_˗/߿| +_>˗O`|_|/߿| w0_|g0|,ZhѢE-Z0|'`>o @o`>GP`>$(0A/_˗/߿|/_|#/|/_/߿|_|˗O`|G A#80$H`>$XA .dC%NXQb,Z` 曘b|Y$O`|Mg0|YhѢE-Zh`,Z` 棘"|Y/|棘`,hѢE-ZhѢ|Y80| Uga,Rg1|YhѢE-Zh`,Za>,ga,Ng1|hѢE-Zhb|Y80|gQ`> 5̗|, ̗0Ł,ZhѢE-ZX0_|-̧0|/,h`| 4xaB HP`|,X`8`A8`A H8`A ˗!B'p "Lp!ÆB(q"ŊYhѢE-Zh`>-ZhѢE-gѢE-Zhł,ZhѢE-ZX0E-ZhѢE hѢE-Zhb|-ZhѢE-Z,ϢE-ZhѢEYhѢE-Zh`>-ZhѢE-gѢE-ZhѢł$'p "L 'p "L? O@ 'p A H"O@O@ D 08`A H@$XP | O@ HA HP |,h „ 8| ` ,X`` ,X` `,/_ ,X`,(0_| ,X`+X0_A $/_W | ˗ | ,X0_,X` ,H0_,Xp` ,X` W_ ,X`+H0_ /_A ,X` `A +X` ,80_A W| ,/_,| ,X0_A ,X` *$H| H*` .La Ko… [/_| .\H0| )̷p| -` Co… ̇0ƒ˗/߿| ̗/_+/_>oa>˗/|/_> 70_|˗/|-\80|8߿ | /| 8_7P` O`|˗O`| ̗O` o̗o| 7p|8P`/ /70_|o/,h „̧a>'0߿| /_>O`|S/|_|/_|/|S`>*w0|_|˗a| ̗0B ;O` ̗O`| ̗O`| w0|̇0Bg0|'0_)g0|*`> ̧a>̗O`|o`|/_> '0|˗`|W0_> ̗/_>?O`/_ /O` ̗/_'0_7p 7p| ̗O`|˗O`|O`80 //|/_ /o|/߿|/0@7PO ˗O`/_ /'0 /|˗o@ 7_| 8P`7p`|7_|7_|˗O` 8_7p`| ̗/߿|o|o@ ̗O`|˗o'0_ 7_(0 '0_|'0߿|/_|8P`7p|7_'0_| /'0?7p`˗o '0˗/߿|˗_|/߿|//_/ o/  '?˗_>G|GP`|8߿ 7P࿁8_>#(0_>˗_|˗|G`|0@ ߿|o G_>|_|(@'߿8P`>#(0_>/A ̗O`>˗|Gp`|#/_>O| /|/? 70߿|70߿80_˗_|˗o|8`> O| ̗O`|70|7_ 8P | O|˗o|˗o|/|8p? ̗_|80'p@/|G0_>˗_$0 O@ ̗/_ ̗/_>˗/_$080_'p@0@o@ O@ /_>8P /߿|`>'p |/߿O|/_ ?8@$/߿|G0|+O`|O`>˗`|/_|˗o`|˗O`|,` ˗O`|/_> W0߿|70_>̗|/| #|/|/|/_| ̗|W_|#_ ̗/߿| W_+/_̗|˗`|W_>'0߿|/_>/|'p`|/߿| 7p|8p8`>|@70_|'P  70|'P࿁77߿'p| GP`>˗/_>#(0|$/|G`>߿? |#H0_>˗o`|G0|70|#80|0'0o| (0_|8p| 7p? 7 7O/_|˗|#H A8`A&T80| .\0| ̗o|-\p| +o… ;`>[` ;` 3o… /B[x0… .` .L`> ̗o|-\p| +o… ;`>[p`> C` ;o…(? O@`,X` ,Xp`,X` ,80_ ,X`,X` ,/_W` ,Xp`,/_ ,X`,(0_A ,X`'p "L`>̷p… 3o… Ko[pƒW0… ̇0| -\_>[p` .\P`̷p… 3o… S/B)̷p…-` .$/a|[(0B-a./a| .\_>̷p… 3o… [/_| ˗/.\`̷p…-̗/߿|-,/_| ˗oaA$H A$80_|8`A&/_| S`> 4xaB8`> 4xaB H | 'p "L? W`> 4xa‚ H` 0'p "0 4 'p "L8?  <0… :|1ĉ+BgѢE-ZhѢł,ZhѢE-ZX0E-ZhѢE hѢE-Zhb|-ZhѢE-Z,ϢE-ZhѢEYhѢE-Zh`>-ZhѢE-gѢE-ZhѢł,ZhѢE-ZX0E-ZhѢE hѢE-Zhb|8`AO@$X`A$`> 4xa H*\ȰC>|Ç>|Ç+C {0|>/Ç>|P`>|Ç>|à {Pa>&̗0Ç {ÇÇ>|Ç>|x0_|(?߿|70GP`>70_| G`>70_> $H A'p "Lp!Æ 9tСC:tСC:T`> ̗O`|˗o`| w0|˗0| s/| sСCСC:tСC:tPa70_> /_)g0|˗/a ˗_| /_|/_|_|˗`>:ta|:tСC:tСC#a|˗_|˗o`| '0|˗/a3O`/_|˗߿|O|/_/8`A&TaÅ:tСC:tСC670|/? '߿'p|GP`> ? _ ̗/_ O O|/_/_'p "Lp!Æ 9tСC:tСC:t/_|'0_|'0_|˧`>'p`˗o (? ̗/_ 8߿'P`|/? H*\ȰB$XA .dC%NX"|/|_|S`| /_ g0|0@ /? /|/_| /,h „ 2l!Ĉ'Rh"ƌ C/߿|8'p|G`|G|Gp`|˗_|/_|O`|˗O`|  <0… :|1ĉ+Z1ƃ6670| '0|(/_|7nܸqƍ7nܸ` ̇1|[0@@$80,h „ 2l!Ĉ'Rh"ƌ0|̷qc7nܸqƍ7n܈0Ɔ Øamܸqƍ7nܸqƄ66g0| m/ƍ7nܸqƍ7nLoc|a̧0_mܸqƍ7nܸqƅ H 'p |,h 0 <0@$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȑ%O/ ;;PKyGI$$PK+AOEBPS/img/loberas.gifwGIF87aj?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,j H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nؑb|y,/_|=zѣG=zѣGy\/G=zѣG=z_>yѣG=zѣG!̗c|=zѣG=z#| h0G=zѣG=z1A'0_|/_>#? 4xaB 6tbD)VxcF9vd`|˗_|_'0߿|o`>=zѣG=zQc>70| ̗_>/|yѣG=zѣGg0|;O`/|OO@ Dh? 4xaB 6tbD)VxcF-70_|˗O`70߿|/_>0G9rȑ#G9rh0_|8P  '`>/߿| ߿| HO@ DPB >QD-^ĘQ#B$X A$(0_ ,X` W` ,H0,h „ 2l!Ĉ'Rh"ƌ滘a'p ,h`$XA .dC%NXE5w1|mo|7nܸqƍ7nܸ`Co#|'۸qƍ7nܸqƍ!̗O |'P`7p|8`A̗/a„   <0… :|1ĉ+Z1ƃG0| -̗/_˷b7nܸqƍ7nx0| ̇0|8`A 'p "Lx0,h „ 2l!Ĉ'Rh"ƌ `| ̇0|mܸQb7nܸqƍ7nh0_70|̷qF6nܸqƍ7nܸQ#|O _>0 'p "Lp!Æ8`A$XA .dC%NXEw0_> '0|̧QƊ˧QF5jԨQF!/| ̇0|iԨb>4jԨQF5jԨQb>.cOFA̧QF5jԨQF-w1| 80,`> 4xaB H_  <0… :|1ĉ+Z1| ]0_|kOƁ%1F5jԨQF5B̷0| ̗Oa4j4a4jԨQF5jԨb.c`+O#|w0|iԨQF5jԨQ#| ]0| !g0|w0|iԨQF5jԨQ#| 8`A8| +/_ WP`|˗O`|˗`˗O`|˗/߿|_|+/_O@ DPB >QD-^Ęq`>0|̗_|˗O`|̗_>/_/_|/_>+Ob>5jԨQF5jO#|=G0߿| ̗o`|3_>'0| /_|70|5jԨQF5j1ƌ`>'p|_|GP`˗/߿|O7p   <0… :|1ĉ+Z1|5 0_|/__> 70߿|/_>˗O`>.ӨQF5jԨQF4j``>˗O`|;O | ? 4xaB 6tbD)VxcƁ4ja>Өqa>4jԨQF5jԨb>k`|8? 4x`>O@ DPB >QD-^Ęq`>ka>˘OF5jԨQF!Ө`Өa4jԨQF5ZO@ DPaA$(0_ ,X`+H0_,X` ,XP`| ,X_'p O@$XA8? O@'p "Lp!Æ{a| =|aÄ60C {a> 0_=|Ç {a| =|!|O@'p "L? 4x_>!D`>"D|C/!D80_>"D!B"DX0B"DP`>'p "Lp!ÆB0|3OD[Oa>I(QD'P|o O| ̗/|7p@8`A&TaC!F|oa ˗o`|g0A o ߿8_> #H_> $80,h „ 2lp` O`>#O`| '0_| =|Ç>|p`#o`>W0|70|/|0| +Ç>|(0|'0_|70_Koa>|Ç̷0|/| 3`>/_| '0|g0|70_|(߿'p "Lp!Æw0|+/a|+_sСC:tСCw0|'0|w0|˗_>#a>s`> /|/|9tСCw`>߿O@ @8p`˗/,h „ 2l!Ĉ˗`| W0? O|7p? o| ߿(0_o| (0_>_ ? 4xaB *O@8_>'0#H0_>G?$XA .dC%N$ G_#`>'p||'P`>08 A˗O`>@ <0… /| '0| ̗o`˗_sСC:tCw0|o``>˗o`|a>s` O`>`>:tСC;0|O|0@O|'p "Lp!ÆB(a>˗/|/_| '0A /߿_o߿|O G0|'P/߿| o| H*\Ȱ|:t(0C:tСC:Tϡ sa>;|:tСÄ:tP`>:tСC:t0CС|5̇0C:tСC 9tС|:tСC:tPa>3ϡCc/a> 9tСCsСC:tСC:tС|g0C!̧0|sСC.СC9tСC:tСC:`>K/| sH0C9C1P>$XA ̷p… .\p… .\` 3o… -O| H|3H0_|8`A&TaC8`A&TX? 4xaB 6tbD'p O@$XA8`AO@8`A&TaC!F8bE1fcGA9dI'QTeK/aƔ9fM7qԹgO?j`> 4H? O| H?$XA8`A&TaC!F8bE1fԸQbw0|ȑ#G9rȑ#G滘a>0G9rȑ#G9r(0|-̗0G8rȑ#G9rȑ#'`>(0 8p|  <_O@ DPB >QD-^ĘQFG0|9w0c`>9rȑ#G9r1|70| w0| g0_|/_0@O@ DPB >QD-^ĘQƅ;/߿|!G0߿|'0_|/_|+/߿|_>O`>8rȑ#G9rȑ#Eo`>8P $0(0_7p|/߿|'0|'p@$XA .dC%NXE5b̗/_|'P8P`>#H||_>_'p_>̗/_>$XA .dC%NXE5Rw0߿|O`>a>+o`/_˗_/|̧0ƍ7nܸqƍ7n`> #O`>`>`|/__>/_[oƍ7nܸqƍ7B̷0|9w0F۸qƍ7nܸqƍ-w1| !`>8`A4? 4xaB 6tbD)VxcF1w1| )̷Qb>6nܸqƍ7FO@ DH? O@$Xp | g`> gP`>4ϠA 4/A'p "Lp!ÆB(q"Ŋ0|=̗a|1w1_| 0E xŋ/^x|C/| 僘/| 8`A8? O@ DX? ? 4xaB 6tbD)Vx0Ň[Oa>xŋ]xŋ/^x` o_@o 80(0 <0… :|0D!B"D!B"|70߿| ̗O`|0| c"D!B_>!B"D!B"D+o`| ̗O`|w0|̗/|˗` B"D"D!B"D!B_ /_|/_| 0|'0_/_> #/D!B"|A"D!B"Dw0_|'p /߿| o| 8p|7p`|o /_>$XA .dÇ"D!B"D!6O@8_> ̗|˗_>8P $08_|/A8`A&TaC!F <0… :|1ĉ+>/| /|/߿|/|g0|˗_|gѢE->gѢE-ZhѢE;`˗/_/_| w0| g0_| ̗/_|YhѢEYhѢE-Zha>0|YhѢE-ZhѢE-Zx0E s`>,ZhѢE-ZhѢE-Z<"|1̗0|-ZhѢE-ZhѢE-"? 4x|%/| O@ DPB >QD-^ĘQƍ8*̗0| AǑ#G9rȑ#G9:Qa>/_ˇ0_|8rȑ#G9rȑ#LJ H 'p ,X@l <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\;;PKխPK+AOEBPS/img/conall.gif? GIF87a#?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,# H*\ȰÇ#JHŋ3jȱǏ 8`A&TX?8`A&TaC8 | O@8`A 'p "Lp!ÆB(q"Ŋ xa>.^xa>3/_|.̗/ŋ/^xŋxa>.^xa>!̗oa|xŋ/^x|(_7P8_|˗o`>#(0A/_>'p`߿| ?߿(0_|˗o|'p࿁80 8p`O@ D? 4xaB 6tbD)V(0| '0_|'0_Oa> _'0|'0|`>o`G0|5̗`#ŋ/^xŋg0߿|G0_|+_> #`| ̗O`>3_>˗O`>+/|70| w0|̗/| ̗/߿|˗/߿|˗/|/^xŋ/R'0|0߿O@|$(0A#/_>#(0_>/߿|70/߿|G| G A|˗/߿|/߿|_#/| H*\ȰÇ#JH"|Oo@$`>(0߿|o| o|_`>@̗_>70@ /_`>808p@/70߿|/_>o|O@ DPB >QD 'p o| 7_ 80_7p (߿@ '0|// /߿_> ̗o|(߿|? 'p@$H`>'p` /|O?8P ,h „ 2l!Ĉ'R0_> O`#/| ̗/߿| ̗`/|`#`|G0|o` '0| ̗a̗_|˗_>/|/_|YhѢE-Zhq` 'p`G0? /_|(| /|/_|˗o`#0߿(0˗/߿|/_|˗O` 7|'p`7p|/߿|˗/| '0߿|/_(08`A&TaC!F8bEha>,Zh1bso`,F70E-ZhѢEha>,Zh1b>;b|-ZhѢE-Z\ϢE hѢň 0_>,>gѢE-ZhѢE,Zt`>-Z`>0E-ZhѢEha>,Zh1b>,0E-ZhѢEha>,Zh1b̗a|gѢE-ZhѢŇ H*, H*\ȰC H`>'p 8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v#,ٲfϢMv-۶n+w.ݺvͫw/߾~ ;;PKED ? PK+AOEBPS/img/loblofr.gifd%GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nرb|y$/_|=zѣG=zѣG0_>=zѣG=z|ѣG=zѣG=v̗0_>yѣG=zѣGK/ǂ/_ ̗/| H*\ȰÇ#JHŋ3jȱ#|/_|3/߿|˗_>/|yѣG=zѣG70_ o`| /߿|#ϣG=zѣG=z/_| ̗o`>/_| /? ?$XA8`A&TaC!F8bE1fԸb|̗O`|3O`|'0߿|`> qȑ#G9rȑ#Gw`>'p|8_@  <`>$XA .dC%NXE5"O@ O@W` ,XP` ,X`A8`A&TaC!F8bE1fx0| `>8`A;o|%۸qƍ7nܸqƍa̷0|!˷qb7nܸqƍ7nh0| %̗oc|+۸qƍ7nܸqƍa̷0|m(08p@ H8`A&<? 4xaB 6tbD)VxcFˇ0_`7N̷qƍ7nܸqƍ ˇ0_|!G0|7noƍ7nܸqƍ5'p@/߿|$0'p "Lp!Æ 8 A$XA .dC%NXEg0_G0|̧QF˧QF5jԨQF/A _>o`>'p "Lp!Æ 9ϡC:tСC:tСC:t0|o`>sСC _>:tC:tСC:t| G0|-̧`>'p 8`A&T? W`8`A&TaC!F8bE1foa>K`| ӨQ`| A̧QF5jԨQF-̇1|)̷0F%1_>5jԨQF5j|oa>;oa>4jD`|iԨQF5jԨQ| a̷0| !g0F 3`>$ӨQF5jԨQƇ'p  'p A +X``A ,X`| ? 4xaB 6tbD)VxcF4^W0| 70| ̗/|˗/_|˗O`|˗/߿|/_|71F5jԨQF5>̧c>#_˗/߿| ̗_>/߿|/߿|˗_|`(ӨQF5jԨQƇ4fO@$H0_| '0_#| ̗_>˗o`> G0_| ,X_>$XA .dC%NXEӨq`> (?/|˗_>/_||/߿_>$X| H*\ȰÇ#JHŋ3 ̧Q|/|/_|w0_O`|'0|#c>5jԨQF5j|OƁ3o` _|˗O`>'P| 80߿O|8p8`A&TaC!F8bE1fOƁ;OF2ӨQF5jԨQƇ4ja>,'p ,h|"? 4xaB 6tbD)VxcF4j$oa>4jDOc>5jԨQF8`A&TX? W` ,X`A W| ,X` ` W?$XA 0 <00@ H A$H? O@ DH? 4xaB -\p˷p… ;/B-\p|.4oa 3o…)̗`| ˗o|)̷p‚.\p| .\p`-\pB ? 0 <0| H!!Ḃ!B!| C`>!D|"D!B!D!BCH0,h „ 2l!Ĉ-'a>$Ḟ0| I$a>(Q"|(_7P'p`|˗o`7p8`A&TaC!Ftoa> ˗o`|!g0_|W0_w0| !'`$JOD W0|70|o`>[OD%J(Q| G0| ̗`> #o`> '0_>k`|#/|(@ ߿|?'p "Lpa> O`#o`|˧0| .\p… .\pB3o`/|70_|'0|g0|̗/|˗_|3`o` ̗` .\0߿|̗o`˗O`S`.\p… .\p…!/|/| '0_|'0_`>[H0|/_O``/@ ̗O`| 'P`>$XA ̗ |'߿(?7p '0_>$XA .dC%˗`| W0? O|O`| 70A˗ A/AO`#/|#/|GP`>'p "L8`> O|O` o@ _O@ DPB >QD o`708P o|(_O@ 'p@/_| /|'p@̗/_> @/߿|'p@$XA ̗``70߿|/|-\p… .\p… "/| ̗_#_/߿|O`|̗o!|g0| /|̗`W0|`>.\p!|O|`'P`| O'p|'p "Lp!ÆB(a> ˗/|/_| '0_|/_|/_|#O`>O`> /߿//߿|(0| ̗O`7p`8`A&Tx0… .o… .\p… .\pa| "g0… ;o|-\H0|70_70߿|3o… .̷p… [p… .\p… .\X0…̷pB[(0|  w0… [p… -\p.\p… .\p… ̷p!|-\P`>So|-\` .\0… .o… .\p… .\pa| "g0… Coa>'p ;/QH |,h „ 'p "Lp!ÆB(q@$XA 0 <0$`'p A H |,h B H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷p- 0 $˗/_ 'p " <0… :|1!|,h /_| ,0 <0,h „ 2l!ĈI,Oa|0_>˗OD%J1ĂG0_(_|%J(QD I,/a'Q|%J(Qć$̗0|(`|%J(QDI,a(1a>%J(Q| Coa>$JLOD%J(`>!0_|a>%J(Qb|0 o80 (0/߿|8_>$XA .dC !̗O |'P`8p? 4x0| #? 4xaB 6t|#a;/a>aE1bĈ#2̇0_>;` ;/_˗/|O 7߿8`A&TaC! ̇0_|!g0|g0_|'p ˗|o? 4xaB 6t|!̗/|'0| g0@'?/߿|/_|7_>$XA .dÇ;/߿|!G0߿|'0_|/|̗_|/| '0|!B"Dw0_C`|/|/a/_ /_|!B"Dw0_C`|/_|˗o`>_ ̗O`>"D!B\08_| G | O@8P O8p`|?8 ,h „ 2l!|O _>08 A0@ o`0߿ O@ DPB >L/|'P8P`>#H|GP`˗_|/_70_|G_>O@ DPB 2w0߿|O`>a+/| ̗`|_'0|%Ç>|x0|̗o`>#O`>O`O`|˗O`>˗O`|#oa>|| g0|!70|G0|˗O`|;/_>/_`>>|Ç S`>C`{| =|Ç[!|'p A W` ,X`O@ DPB >$oa>0|'p ,h`'p "Lp!Æ[!|5̇0C  `| H*\ȰÇ-`>K"D"D!c|1̗0D51!|,h`A$XA80,h0 4X0A g`> 4h| g |,hA$XA8P ,X0A 4X0A g`> 4h| gРA4hР O@ H |, g`> gp`|3h0_> 4h`>3h0A  A 'p H| 3h`|3(0_>4hРA3hp`> ϠA gp`>4/A4H0 4X0 ̗/AgРA ˗ϠA gРA380A Ϡ480A 4X0A/_>˗ϠA ̗/A4h| 4h_>$`| g| 'p  'p +X` H8`A gРA3(0A gР| g |,h /_ O@ D gРA4hР g`>'0߿|3hP`>$XA .dC;_'p8_>$H0A$ $/,h „ 2la|0| ;`>c"D!BQ`/|70|5̗` +a>!B" &w`>?(? o7p|˗_7p|? 4xaB 6tPa/| W0_|g0|˗_|˗`> B"D`>+_O`>`>'0|"D!BH0|/߿| 70_| '0| W0_/߿|g0D!B|5/|W0_|0|'0߿|3`A"D!w0߿|/߿| W0_| #_ ̗/|#`>$XA .dÆ'`> O/08 A `>8`> 4xaB 6tbā /߿|o`>08 A/_| 0 <0… :|1@$(0_˗O` 'P /߿|(0@ /|o|O@ DPB >0_/| ̗`>s`|/|W0_Ĉ#F1| w0_|̗0|g0|'0߿|;`#F1bą;_+/_| '0|/|/_> +/bĈ#FQa+_3a"1bĈ#F_0| 1bĈ#F0|˗/_> @7p /80_>$XA .dC0|'`>%J(QDIl`>(0D%J(Q|;a$ 'QD%J(`> ̷0|(QD%JdO|-̧0D$J(QD%'a>c/|%J(QD I|a1_>%J(QDIl/a|=̗a|%J(QDI|/a|=̗a|%J(QD'p O@8? 0'p "Lp!ÆBx`> 4x 0 H@$(? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vHlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf̓;;PK38pi%d%PK+AOEBPS/img/ms2.gifGIF89a+KiZZKZiZZZKiKiKidKdiddddZdZKdZidZdZdZddKdidddddKdidddddKdiddddKiZZKZiZZZKiKiKiKiZZKZiZZZKiKiKi߿@@@#vfff̙fff3fffffff3fff3f333f3333f3ffffff3f̙3f3f333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f3333333f3333f3ffffff3f<<<33ff3f3fiii3f3fff3ffffffffffff---KKKZZZxxx3f𠠤,+ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S<˗0cʜI͛8sɳϟ@ Jў ǴӧPJJիXjʵׯ`ÊK٭w۷pʝKݻ2*eK߿ LÈ+^̸ǐ#KLˉ]{ϠCMӨkV;pi԰c˞MmYw׷ Nlm}s9ߜ2 錱C~XNy.zkU0}ky,Ȓz塗={|'!r_q 7܂ރ&OST^5#@׆aGc5!6l hE%F~GȥY&k)OigjQ`Kdi!axc8&ch/Hե䝘fLY垀m"*gcFJfZ(z*֪魸n\#Y%>jq*fʖ#IJJ'Vkmwz%yVo>*};)J^+f5ۡTۛ ߥ 7zODyn?SuOWˋ.ӈUMw3RǗ5;7O/祽XCg>EczBO$)i[q BLzP9A/&8OKTx>Ϋb:D}!A4Ň_bh$!%3WZ9ݻbU0P} 9eNha"D"qsF?&*{"}e HK!sV'>c\ i񕱍 3hh%-7z, QKԟ"'菀 H@u $EF1[{Z >} "N:Ň@f&8M!̊:F8RL*@QslFfϗr#+yNb(<sk>d5 MMfX.;/vDgķQ@VN<<[EFɳż_kphԋ?9MJs6)Bwz.)GJ'a]>|Yv3&u<˃RҳrMk 4+4iӶ>%lh=/d]ЀeHUN']J8LcF6jd4 M*EY:&:"cUdgq,^Hڠ W:UEvO)l7Sѷ؝g*ոkr9мLOז?ٍY5tCd:#-j{k.HKثBy3=ྐMg! %gZ檷yXڨ⚵"%q<}CDWӝZwSdž۞~HNr٫&;Lc2L*LVβs`3N,2̘[6p^|:xγ>πnjHgЈNtW]R9*ѐ4}XJҘ46)mQjӠ|hԨN5I]հXiָ5\ס޵{ bOf8ٌv[hv6Hm{MrN6Mtiw.m|ۚW{vĥ qWOƮ87N}+;5.&OyQ򖣚.a.K6yq? @їߢ3NzNK}Ur{Nuse?ϒ],mZ3|x7Kw+Vv3<#/ySn<ծ͛;Cѓ>?=SK=. 9s}̃/)?>K凼8S_ֿ~ó}s>>x?.˻Wx_9omXv8m րlwG*78r:k 6$k&x*r؂0|28W6|8ҷB}DXwH~JWwf~Np,8VV8iM\c^b`dXuh]jH&n~[8Xvhx |Ȁ~(XGxnm؈F8Dqgdg릈8GFfxx6؊[c48x5S؋Xev ؛i3g0)Ź@s}qȜҹ9)y5Ɍbݙ4虞ꉞd4yӞMECT3c`G_Hd㙛I~}@GG>XecYuV[ 9[<Z3# ɕlSWQ]!V7VF-3/ڏei|Y 㣕E3:u8z>mգT@(ZDDEZJ9GiXkZ[8y[Sj?7OtZ9UE5jPU}zZZI jYtZMfxzVCMQ:71:61ʑjdnKZГ`eUY@VZV#ڪW*58EZJS_vHa7vT[XJqZ9s UvSLDwjUS?5:cFZ̺z(Ҧ[zj| Rz㺯z*"*eLUJRЩ6%O$i2*;PuZz,+*K??&zItA~ɭťzYjݚ:V6W :9;KCz驸tɘڮh=?ڵXj]9C ک>X 6Dw+vxdpڬeJ4*y:Kn*_[|(Sf,fk{egZKHk Qۼºw;gf{ccػșH;){h軾b#*[i3ۿgidkxXR\v,xy+f̸2a{Uo>Qsw<8I'YݒR@)lK. {f*Pj#ɱj–])\H)Z@<:}4ye Kğ;f5 ;v )[e]k7`%Y+_۝gɬ`|OB̴lj|6:= UƢ_G|elYu߿8`A&TaC!"g0?o O O@ DPB >QD-*W0_/__| /߿|#ŋ/^,`_|/_|`/^xŋ/&g0|;O`>O`'P'p " <0… 6w0߿|`>7p| 0 <0!,h „ 2l!Ĉ'R,/_| ̗o`˗O`_>*F̗/_Ŋ+:̗/__/_|U(0_|+VXbŊ+G0_|˗/߿|/| /߿|#"|+V0|'0߿|/_'0߿|UX0_Ŋ+VXbE 308P`> /߿oO@ Dx0_„ &L0a„g0߿|˗_|˗/߿| g0_„ &/a„ &L0a„ &L0aB HA Hp` ,X` W` ,80_ ,X`A H8|,X | W` ,X`>$XA .dC!X0|AO@$X |$XA .dC!X0|I0D I0D;O|1'Q|%J(QDX0|Ix0D I0DCO"|%>'QD%J(`>1̗0D(Qa>0|0_>!(QD%Jx0|'p 8p|/_>$XC!B!D!B'P࿁7P 8p|/_>$X |b>̇0| 8`AO@ D`> *D`> 70|)O?$X| H*̧PB *TPB *T0| ̇0B*T`> *T(0B "w0|'0|S(0B SPB)TPB *TPB /| ̇0|)TPB *LOB ` o`;OB *TPa| *TPB *TPB;/߿|!W0| *TPB SPB;0@ O |'P` ? 4xaB 6$ϡC:tСC8P ˗/_O@8`A&TaC H ,h |O#/|0 'p "Lp!Æ8 A$XA .dC 3/| ̇0_|E1bD`|;o`| 70_|1bĈk/_Ĉ#F1"|g0_C`"F1|El_o`G0|#FQa"F1bĈ ;O`> '0|!1bĈ惘/| w0_|o`| ̇0_Ĉ#FTb#F1bDh0| 80,`> 4xaB H_ W` ` W| 'p`>$X|,h „8| ? 4xaB 6t| E4a/_|˗/_Ĉ˗Oa"˷0_ĆK/_|˗a|E0_|拘/bĈ#Fq`"0| 1̗/bĈ%1_| Ela>c/_ĈK/b#F1bāh0|-̧0_ĈC/b0|-̧0_Ĉ C/b#F1bāh0|-̧0_|#+`拘/b>"60| )@8p8`Aw| H*\ȰÇ[/| 0|9a;/b0|5̇0| 9`>"1bĈ#Fo!|,h | WP`,H0_ W0_ W`A ,(0_8`A 'p A W|+(0_,H0_ W_  <0… :|q`+`>`|˗/|˗/|˗/_`>@8p|8P`>$XA  W0|'0|/_> 'p 7?@8p| H*\ȰÇb#_˗_|/_|_| /߿|/߿| 70|拘/bĈ 0|'0_|'0_|'0߿| ̗/߿|'0߿|Q`#F1bā"F/߿|̗`> ̗/_ o`|O`| `>/? H`| gРA 4h`|4(0_>3/|˗/|O` ߿//(0,h „ 2l!ā"F(0_ (?/|/A/| ̗/|/A$H A$H_>$XA ̗o@ ̗o`>Gp`/|G_>#H A'p "Lp!ÆB/bĈ=G0߿| ̗/߿| /|_> ̗/߿|˗O`>"1_Ĉs/|'0_|70__|˗_|_"1bĈ#F80_Ĉ 3`;O`/_>'`>ooO@ w|"1bĈ#F80_Ĉ k`| 'p ,h|"̇|"D!ƒw0_> 'p /߿| ` O@ DPB >80_Ĉ ka#*a"F0_|E0_| ED/bĈ#Fq`#̷0|#FL/"|Ea1b|1"D$XA O@,X` ,XP`,/_ ,X`+X`,XP`>$XA &̗/a-\p| ̷p… ˷p… [/… .`| [p…-\X0B.\p|-o… ˷pa| .\p| .\p`-\pB ? /_| 4hРgРA4X0A 4hРA'p`>$X_|4hРA˗/A gРA 4hР 4hРA g`> 4hРA(? $0 <0A$XA"!B"D |'p 8`A& <(0B"D|(_7P8p`|˗o`>$H0,h „ 2l!Ĉ E'QD%J(a>%6w0_| W0|/߿|`$J(QD%1D%J(QĄ$J0|'0|;o`|/| I(QD%J4b>%J(QD I(1a>3/|1G0_|70|%J(QD;`>%J(QD 'Q;0@ Hp`|+_ <0… :|1D8qĉ'N0ĉ;`|0_|w0_|8qĉ'N/_7qĉ'N8`|MX`> O /|/A˗`O@ DPB >QD-^ĘQF H"/| '0_|̗o`˗_ SPB *TPB *T`> *TPB *TPB SPBw`>/?˗o |߿_>$XA .dC%67qĉ'N81b'8Qa&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉM8_'N8qĉ'N8qĉ'N8Q"|,h „ 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎO@ DPB8@ O@'p H*\ȰÇ#JHŋ3j|oF'p@$X_|O@$XA .dC%NXE5:̷q| !0_6nܸqƍ7nܸqc|7j̇0|۸qƍ7nܸqƍ !̗/|#O |7߿(`>߿|߿_O@ A|'p "Lp!ÆB(q"Ŋ/b̨qa '0|`C`>/߿|o`COa>6nܸqƍ7nܸq|/߿|O`> 70|70|70|5w0| mܸqƍ7nܸqF +_> '0|!W0| W0|w0|̗/|`7nܸqƍ7nx0߿|/_|0 (0A'0| ̗/@ _/$`> /_˗_O@ DPB >QD-^ĘQ| +_`>+` /|̗a+o``6nܸqƍ7nܸQ"| _ '0 ̗O`(0o`08 Ao` O@ H*\ȰÇ#JHŋ3j/| 70_>+o`+`70߿| W0_> `|/߿|+`7nܸqƍ7n/߿|˗O`| ̗o |7߿'p|˗/| ̗/_>`GP`>#(0_|˗O`> <0… :|1ĉ+Z1۸Qcso`"+o`7nܸqƍ7nX0ƍ0|̷qƍ7nܸqƍ۸QcCa6nܸqƍ7nܸq|7jw0| Q̷qƍ7nܸqƍ۸Qc>80ƍ7nܸqƍ7ndoFCa|mܸqƍ7nܸqƆ6nԘO!| O@˗/ <0… :|1ĉ+Z1F H*\Ȑ 0 H@$8? 4xaB 6{tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{ɀ;;PKEVPK+A OEBPS/img/performgraph_case2.gifwGIF89aJRBBBJJJZZZkkk{{{,J5H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗.8SC͛h洹Ο< JtўH&-ҧL:JuզXfթ̙W:6,ٳfv][-Zj}[s`]x˷߿È+^̘Ɛ#KLe f̹ϠC|,ӨS3޼YװcHz۸snmS-SNμCN:t޼k]|OϾ{˟O_~~YӀwՕ`\yzWRMTACԄvx9a~ٍ򧢆+BaVhblh,~HaT3˜":>hcؠO!BiOW$8bȥl[f)M-enyiЂ.&G(jtia,)#XycVVh+^cT1DRZ)g*Hܙf%kWj&b:뎢*찐JJvk6 F+m`Nk ܆Tm;knEߞnڮ뮻+/kޫo+lp0.착 ?,Olq_qz o챃,ylr}!s2x),sr%8c+a50?Qs\L)uTOmuX_u\ou`-vdm6Uvlvp-wttMeN$~N'7GWN 08[y.z褏nzߚA/V2 PANO'7OGWOgӞDM^~Oo7pvHh #H ZPd`++51BHf>τ$ K0, eڰ8L uC> 8D!DDwJ"(ZqW!d6N>2(4Fэmc:юt3{xB$"GFrT$IJNB@LҺхX eEDR6L%*WyVRf$,_,e-MK^*Q}\̖X2D.әt$4)j.Ɯ_4IMnZ79mq}svЗT.K@HX= /-( pTCgP4ĦY겗HyˑԔ' &mXGLnc,ISq֔8@8}2]O 00Az D0(H `vAT#T1eXwxSsԦh=ZVjO\glJ_vԤ%%<}hh:X,*pؿrаX)ՠ6=]l]Aѱӳy=hCKڽ%JWtllNږS},"T DE+\ %$PapՠW}e6A+V!mm]5#:I+jM Tr? @oIF|TL$W#thʴ-z6xf\-G,Q{V@\n\#6}T:׽=1;^޵ucoT$g2Ld;X&zVEe}Nur_"}-\c2[wGF3flmK_jf#ِ9֮>mo J>%@hTE@VTbT547NzWce2NlE/fMr]=V7nKO0B{޻y>b p;ή^?|MYw2,+󯃽bO7=zwޠ<=?}/O8G?rnXyim~Ͻթff'߶q4nѯK[ A~M~Gɯ~B';O_Շ}}&r%~!{q~W~~8헁x G׀ʗAy7S7+(.H-8ev8À4uwzA{)X8HHzx`AhM(K!(Ẇu&Z\]XFK8|N8VV:>OpIHGp8BR4Xm1(78c煆Ȃ_[xd7zu=qeq7qdXfuȉFHWpEwh!T#/uWnXXsGa44ivQX(}gXᕊC&UȌؘx(|np9WQиCx㘏q|؇Sz%6y`明Ǵ B(4~""h#Eań#yc8a܈.% : *r-϶GQsiDY؏GV ;Y 2ɔr'ha[IՈ>YOOɕfYHJ:5iew&xDĖ,ZY]u(葫!z EVhٓ@+ɎBIi5 XIF|Jl9E)9.(ƚi^LAC9:Woٛn~鏻9љל 7 ig^T/y`i'9d6I޶܉LY ørqYBɛǹ}yJdթ Z9Zgl#FH*4jgƢ*Z$ḢD=fb:Ej|'h$MʤЙEHJj3IHӔұVSY:hznJ.(ʞ4X:&h8dy!ʩJ:Z l**KKʫjz*!dIjwzʕy#1 l8kO 0;V `Z$\ >Pk 0; Xꕕ$N0;eeTgP {>k;PhA$_VAa#k%kL&| кhJ%3u W%b}ŭ$_\1%kߚeZ[_ʧnRYzꁂNO:dY_ k0 KZ6"\H`8KFFT8`,kӊ)%Ye\a8 eeeLVXQ*k)TSV:.)>hK_gbBY&hV &ʹzٷ‰1*XfB@>BPJ^&em۹۽{;Z$t6SڰuB>{eqU i#՜ˤK>W>jz>P`[u[?>lUu"<;J鍚ʨgDjpZznwF !lyP: YRQQCSz;~Z;SK2&ӪħzzLfBbZfʩ|ˇ\{%mžr}~0>ڻߘsm\ᜌ] 9>䗍 ܍":.8N)>&M^D 嫑mOz(=biަF'jW^Q>rwΥ3~0sxd)\.{ZeL}:]^霎m迁NN鲾{븾k~ymx->)a..nΑM(>Ү ,~{>ܮľԒNi ^ZANNڼȁ~_?~ ^ ގ hs33*O:T^2$)o4?N(q9,j(/~8En _~:egnl@oR r5=3s;Pdpjcbr=l?v=uz?א{?ZcwS;b?z\l\7?7?X6_/TS)Sn+[ACcco^W,;Bl91}/?V]+Пj#O3R$XA "p`C %N8C5nQE3$Y$ɑ=dYqʕ-eLkß} tό<[ zӈ1>9UU32jӮK r lٓV%֭Igv$rٺwKzW$׶~+XZbufjcCr|cΜ¯kn*TaBD͘gk[Sw ْצfz^Yۆ^m4psqKM9Mǿ>v _]{ϧ_-@ 4@M?tA#T > +B 3NC;CqDK4NTqE[t,]qFMLFsDwG !1H"4?TrI&I( QD-^ĘQF+'P ,h A O@ DPB >QD-^ĘQF%˗c|yѣG=zѣG0_>=zѣG=zc>y,ϣG=zѣG=z/a| ѣG=zѣG9308_|˗O`|'0_|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ ̗_|˗`| /__| ѣG=zѣG=jg0|3O`>'0߿|o`>=zѣG=zc| /| '0_|_ ?$XA8`A&TaC!F8bE1fԸb|̗O`|3O`O`'0|ȑ#G9rȑ#G# | O0@__>$XA'p "Lp!ÆB(q"Ŋ/b̨q|q|9rȑ#G9rx`> 4H? W_ 'p ,h`$XA .dC%NXE5w1|mo|7nܸqƍ7nܸ`;oc|'۸qƍ7nܸqƍ!̗O |'P`7p|8`A̗0a„ O@ DPB >QD-^ĘQ|#a>˗o#|moƍ7nܸqƍ7̇0_|!0_C$X H <0… :|1ĉ+Z1F;/߿|!70|7noƍ7nܸqƍ7/|a>۸q|7nܸqƍ7nܸ`>'p? / O@8`A&TaC Hp ,h „ 2l!Ĉ'Rh"ƌ 3/|a ӨQc| ˧QF5jԨQF/| ̇0|iԨb4jԨQF5jԨqb滘o`>4jX1|5jԨQF5j1|1̧`>'p 8`A&D+X| H*\ȰÇ#JHŋ3̷0| %g0_>i/_>"ӨQF5jԨQƇ滘a>cOƂ拘OF5jԨQFcb>[Oa>C/b>5jԨQF5j|a3a Ә0_|w0_|5jԨQF5j0C$X A$(0_ |+X` ,/_|+`'p "Lp!ÆB(q"Ŋ/b(0F;` ˗o`|'p _|/߿|˗/_>˗o|8p'p "Lp!ÆB(q"Ŋ/b(0ƌs`> /߿|˗O`| /|/߿|˗/_˗/|71F5jԨQF5>̧Qc|9W0߿| /| w0߿|O`_|_|(ӨQF5jԨQƇ4j/Co` '0_||/߿'? 4(0,h „ 2l!Ĉ'Rh"ƌi80|g0|/_̗O`/| /_| ̇1F5jԨQF5>̧Q|G0| '0_|/|(_߿|_>$X| H*\ȰÇ#JHŋ3 ̧Q|̧Q|iԨQF5jԨQ|50|8? 4x`> <0… :|1ĉ+Z1|50_|5&̗1F5jԨQF H*,+X` ,X| O@ DPB [0 6l80|  װaÆ .װaÆ-װaÆ80,/_| 4hРA˗ϠA 3X0A g0A g0A 4h0| 4H0,h „ 2\aÆ [aÆ 6L0 <0@$Ẋ!B C|!D!B C!|"D!B" |߿| o ˗/| G|  <0… :|1| g0_|˗`>'P|@ o| ̗/|˗o| O/|8p`>$XA .d0| '0_|'0_/a6lذaÆ 6lpa+o`>W0|/| w0|70|a>70| 5lذaÆ g0߿|G0_|+_kذaÆ 6lذaÆ;`/_|W0߿|%g0| 70_| /|!̗/|%װaÆ "'0|`>` | H*\ȰÇ#Fw0߿|W0߿|70|/| /| W0| ̇0|̗_>Ko`>%J\_  'P o70_>$XA .dC%w0_+|'P`7p|_(? /o` ̗/_ ߿(0_/|8p`'p "LpA$8?#(0߿|G0A#/߿| O@ DPB >Qā /|o`>8P G_#H| O|o` _'p@0@_>08`A&T|W0|70|O`|K` 6lذaÆ 6lp`|70_+`+_>+/| G0|70߿|̗`|G0_|5lذaÆ w`>/?O|0@O|'p "Lp!ÆB(a˗/|/_| '0|˗/_ @/˗o`| ̗/_'`>/߿? _|˗/_  <0… kذaC6lذaÆ 6lذaÄ6$` 3aÆװ| 6lذ| 6lh0_Æ 6lذaÆ 6l0_Æװ!|5lp`>6aÆ 6\aÆ kذaÆ 6lذaÆ kؐ`>6$` g0_Æ5lذaÆ 5lذ| 6lذaÆ 6lذa| g0_ÆװaÁ kP` 6lpa 64aÆ 6lذaÆ 6LaC O@ `>"D(0|"$!B"D!B!D!BO@ DPB >Q(*g0E HQ`>("G"E 8`A&TX? 4xaB 6tbD'p O@$XA 0 <!'p  O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]. ;;PKPK+AOEBPS/img/connect.gif:_GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#Jd0 O@8`A&Ta>$`>8`A H'p "Lp!ÆB(q"Ŋ/b\0@ HP |'p 8`A&Tpa H? O@$X  <0… :|1ĉ+Z`|(˗/a3 ̇0_[/_˗1cƌ3f̘1cƌ峘/_|3fa>(1_3f̘1cƌ3f$/|/_|'P|o| /߿ @'0_ 7p|o8`A70,h „ 2l!Ĉ'Rh"Ɓ2ˇ0| ̗O` 70|/_|#O`| ̗`>C/|e̘1cƌ3f̘1| /_|'0_;_+/| '0_|70|/߿|w0|̗/_>/_>O`>'0_G0_ƌ3f̘1cƌ3w0|˗O`G0|70|/| W`(0|o| o`>8P`7p`|_|˗O`|/_|/_|/,h „ 2l!Ĉ'Rh"/_> /|w0߿| O߿߿o߿ ߿| /|$HP`>#(0|˗o`|80߿/߿_>$XA .dC%NXEw0|8P| `>'p| '070|_> G0|08 A/_|˗_|˗_|_ ̗/,h „ 2l!Ĉ'Rh|'0_ /|w0߿|`> 70|W0|`a̗O`|/|/_|_|70F1bĈ#F1G0|/_`>;_| O߿߿| |?˗o|70|7p`7p`|O /߿_ <0… :|1ĉ+Z0_| ;#F0|a`>1bĸ`> 4xaB8`> 4xaB8? g_> Ϡ| 4hРA 4X0| gP` 4hР  <0… :|0D3"D%̗`惨0|!B0| %|A"D! "D |)0|K"DCOa>A0|!B"DO@ O/_| ˗`|O`'P8߿8P`>#H| G A#HP`>$XA .\a|1!C%ǐ!C 2dȐ|'0| W0|O` ;o`>/|_>`0|1$/_2dȐ!ÂG0_>ǐ!|)ǐ!C 2dȐ|/|W0| /a> #_'0|`>3`> c?$X0$0 <0… 'p AW` H8| H*\ȰÇ w0|#Oa|+_`> __ ;`s` B"D!Ba B"Dw`>߿8? O| 8080 /߿| /߿|(_>|G AGP`>$XA .dC%NOa>)Rx`> O /|G|/A8P /߿|O`| ̗_ O`8P ,0'p "Lp!ÆB(qbD$8? 4xaB 6t0_ O`#/| ̗/߿| ̗`/߿|O`|70|̗a> {Ç>|Ç )Ç>d_ ߿ ˗/@ 70/߿|˗/_˗O`|70߿'p`7p|/'p "Lp!ÆB(qb| QH"ňHQbHaso`>(RH"E)R<a>)RH_>%3"Ňka> H*4 <0… :|0D!B|!BT`>!w0_| )̗"D A"D!"D!B(0D3"D!̷0_| Ab|!B"DA"D! "D | %0|!B80D!B|!B"DAQa> Bx0|{`>!B_>!B"D B"D'p "L 'p "LP 08` 3hРA 4h|'p "Lp!Æ&"D!B"D!Bb_|˗O`|˗O`|˗_|O`/߿|"D!B1D!B"D!B"Dw0|˗O`̗_|˗/|˗_|˗_|˗_|A"D"D!B"D!B`|;O`|'0߿| 70_|7`>__O@ DPB >/_>!B"D!B"Dw0|8P| /|˗| '_߿ H*\ȰÇ8`A&TaC!F8bE1;O`|_ ̗o`| /_˗_|˗O`0bĈ#F1bĈ#F1>w0_|˗_|;/_|(O|O@ DPB >QD-^ĘQFuqa;vرcǎ;vqb> ? 4x!| H*\ȰÇ#JHŋ3jqbرcǎ;vرcǎ;v/_ǎ;vرcǎ;vx1_ ױcǎ;vرcǎ;j̗/_ױcǎ;vرcǎ;v0 <0B$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSH8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎh0_|=zѣG=zѣǁy\ϣG=zѣG=z/G=zѣG=zcy,/G=zѣG=z1A'0_|/_#/,h „ 2l!Ĉ'Rh"ƌ7r0|˗/߿| /߿|O``>=zѣG=zQc>70| ̗O`>˗O`>QD-^ĘQƋ3/| g0|O``> qȑ#G9rȑ#Gw`>'p|8߿|@  <`>$XA .dC%NXE5&O@ O@W` ,Xp` ,X`8`A&TaC!F8bE1fԈ0| `>8`As0 ;oƍmܸqƍ7nܸqƂ;/߿|!G0|7noƍ7nܸqƍ5'p@0@O@ Hp ,h „ 2l`> O@ DPB >QD-^ĘQa|g0_C`4jh1_|4jԨQF5jԨb3`>#`>5Z0F5jԨQF5J̷0| iԨb>4jԨQF5jԨ1b.[o!|O@'p "L? W` ,X`A$XA8? O@ 4 <0… :|1ĈH0| 3/_|&NOa&*7q| 3/|8qĉ'N1| [a>8q| E7QaCOaMoĉ'N8q| M$oaKoĉ!1D&Na8_'N8qĉ17`> 0_> 1_|g0|;o`O`˗/|5̇0|=0ĉ'N8qĆ'p  'p A +X``A ,X|` W` +(0| ̗_> /| +/_ |$`'p "Lp!ÆB(a#`>`|˗o |'P`70_'0_|/_ o ,O`o`'0_|70|70|˗_| O7߿/,h „ 2l!Ĉ8a#O`>˗/߿|/_>/߿|/_˗_|'0|囘o"|70| '0߿|[`#O`˗_|'0_|_|/_>&N8qĉ'27q|s`| ̗o` w0߿|O`>70߿| 70_|& 71a| 70_|_ ̗/_|s?80| ̗/| /|/,h „ 2l!Ĉ81b> (?/|(?_| '`>_/,hp` 'p Ao`>'0|? 'p@70߿|O_/߿ 8P ,h „ 2l!Ĉ81b>`>/߿|;/߿| '0|_|ob|/|˗o`/߿|+`#O` /_> ̗O`>/_>Soĉ'N8q|'Fw0| g0|70_|!`>@/߿? 480'0/_| 70?O| 7p|o`˗_| ̗/߿| /|˗o|? 4xaB 6tbD$J/|I(1a>E̷0D0|%G0|$J(QD%"'Q1̗a>8? 4x`>ˇ|C!BCX0|"D/_|!,? 4xaB 6tbĈ$J(0| I(`>E̷0D0_|%0D%J(QD$J80| I(`> E̷0D!̧0|$J0D%J(QD$JH0_>5̗ODIT/b$J$/a|9'b>$J(QD%"'QD ? 0 <0B$X"@$XA8? O@ 4  <0… :|1b|%J(QD 拘OD%J0D%J(QD$J(QD%1D%J(a>%J(QDI(QD%J,b>%J(Qb|%J(QD(QD%Jx0|%J(QD$J(QD#+OD%J(Q"|+OD%J1|%J(QD ̗OD%J(Q| /D%J(Qb|I(QD!'p "Lp!ÆB(q"Ŋ/b̨ ,h „ 2l!ć"F1bĈ#F|/bĈ#F1|#F1bĈE1bĈ#F0_Ĉ#F1bā8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջ7"|,h „ 2l!08` H*< <0… :|1ĉ+Zh0F1Ŗ0|a0_>1bĈ#F1Ḟ#F!̗/a>0b#F1bĈ#FaĈ#|-̧0FaĈ#F1bĈa 7`> o@ ̗o|80߿|߿#?A7߿/8_o@8`A&T0߿| H*\ȰÇ#JHŋ̗o`+o`70| '0| '0|#`/|0|1J'0F1bĈ#F`|+`G0_| '0|W0߿|o`|70| /| '0|'0| ̗/߿| W0_|˗O`|˗/|˗/|˗/|1bĈ#F1bd_>'0_A/o|o`>70߿|o`>/߿| /@_ _o| /_/߿|7P`|_|˗O`|/_|/_|? 4xaB 6tbD)Vx1_>'0_|(@'__@'P` _߿'P`>o|7p(0_/_> ? 70_|'`>__O@ DPB >QD->O@G0߿| o|o? /߿߿/߿| _/ _@/@ (? O /@'@70߿|/_|8_߿ <0… :|1ĉ+Z$/| ̗o` #`70| G0| ̗_`| G0߿|O`|/|w0| /_̗O`|/|˗_|_| ̗0ŋ/^xŋCO`/_|O'߿|߿߿/߿/߿8P/߿o`_> 70|7p` 7p|˗/|7p`|OO? /߿?  <0… :|1ĉ+Zoa/^/| w`1wŋ/^x| ]xka>  <`'p "Lp!ÆB(q"Ŋ1gѢE Coa>,Za>-ZhѢE-*0E-Z4a| 1g"|YhѢE-ZhQa>,ZhѢ| 0E{ϢE-ZhѢE 1O@ DPB 6O@80,`> 4xaB8`8`A&TaC!F8bŊ,ZhѢE-ZϢE-ZhѢE YhѢE-Zh_>-ZhѢE-&gѢE-ZhѢ,ZhѢE-Z0E-ZhѢEhѢE-Zh|-ZhѢE-Z$ϢE-ZhѢEhѢE-ZhѢ|,ZhѢE-Z0 <0… :|1ĉ+ZD <0… :|1ĉ+gѢE-ZhѢʼn,ZhѢE-ZdϢE-ZhѢEYhѢE-Z0E-ZhѢE-gѢE-Zhb|-ZhѢE-Z/E-ZhѢEYhѢE-ZhѢ|-ZhѢE-"g"E$XA 'p "Lp!ÆB/bĈ#F1bĈ#1bĆ"Ft/bĈ#Fb#F1bĈ#Fx0_Ĉa#F1bD"F1bĈ#F1|#Fl/bD"F1bĈ!1bĈ#F1bĈEa>/|'0_|˗/| 1bĈ#F/bĈ#F1bĈ#1bĆ/|O`| ̗O`> ̗`#F1bD"F1bĈ#F1|#F@8_/|70|/_>'p "Lp!ÆB/bĈ#F1bĈ#1bĆ˗`|˗o`O`|1bĈ#F1_Ĉ#F1bĈ#F˗/߿| OO| H*\ȰÇ!1bĈ#F1bĈEa| w0߿| 70? ߿'p "Lp!ÆBD/bĈ#F1bĈ#1bDg0_/| ̗O``>E1bĈ#1bĈ#F1bĈ1b|̗/_˗/|/_|G0|#F1bĈE1bĈ#F1bă"F0|#:̷0_Ĉ#F1"|#F1bĈ#F`8`A8|,X` `A 0 < ,h „ 2LaÆ 6lذaÆ 6lذ| kx0|5l0a>kؐa 6l0a 6lذaÆ 6lذaÆ5\| װaÄcaC6lذaÄ6lذaÆ 6lذaÆ pa1W0_Æ ca kذaÆ kذaÆ 6lذaÆ 6lx0_Åo`>+aÆ 10| ̗/|0@? 4xaB &װaÆ 6lذaÆ 6l` /_> c |,h „8| WP`|o`>'0_8`A&Ta| 6lذaÆ 6lذaÆ a>/| ̇0_Æ 6/a>'0_ o`>kذaÆ kذaÆ 6lذaÆ 6l` w0߿|g0|5lذaC`|`a 6l0a 6lذaÆ 6lذaÆPa|/߿|g0_Æ 6oa|_ o`> ߿8`A&Ta| 6lذaÆ 6lذaÆ8`A$X`> 'p| ̗@$H? 4xaB 'p A /߿|| '0A H? 4xaB 'p 8`A&TaC!F8`|0_;_>G0|)R ̇0_|)Ra>)RH"E!w0| w0߿|70|)R/߿|˗O`| O'p "Lp| cȐ!C 2dȐ!C 2!| -a> 'p "LP 8p| HK(0_„ &L0| O@ DPB >QD"[a>+"Ň c| QHa(RH"E)21| Q0_|)>W0|%["EEG"E)RHacb> Ha(1|)R|/b>)RH"E E̷0|1W0| ̗o`>/_7`> ߿(0O@ D(0_B&L0a„ K0,h „ 2l!Ĉ' 1| 8`A8|O`| ̗_>70| W0|W@$XA8| H*\0Â2dȐ!C 2dȐ!C 1,oa> .G0| ̗_>W0߿| W0|#!C ǐ!C ǰ`> 2dȐ!C 2dȐ!| [!C w0_|'0_|/|70|cȐ!C1dȐ!C1,!C 2dȐ!C 2d0ÂcȐ!ˇ0_|#0@ _| O_8`A&T0… .\0B.\p… .\p… ̷`.\`| w0_3`˷p…  ̷p… &̷` .\p… .\p…-4oa .D`|'0_/߿|70| .\p| .\pa| [p… .\p… .\X0B[pB˗/_|˗o`| g`>O@ DP2dȐ!Áǐ!C 2dȐ!C 2da| 1dȐ!| 2dx0C 2L!C 2a| 2dȐ!C 2dȐ!C̷0C ǐ!C1dȐ!Ä2dȐ!Áǐ!C 2dȐ!C 2da| 1dȐ!| 2dx0C 2L!C 2a| 2dȐ!C 2dȐ!C̷0C ǐ!C1dȐ!Ä2dȐ!Áǐ!C 2dȐ!C 2da| 'p "Lx0B *,OB *LOB *TX0ƒ*TPB *TPB *T(0ƒ˧PB SPB)TPB )TPB Sx0B *TPB *TPB Sx0*TP@$XA  O@ DP2dȐ!Áǐ!C 2dȐ!C 2da| 1dȐ!C 2dȐ!C 1dȐ!C1,!C 2dȐ!C 2d0CcȐ!C 2dȐ!C cȐ!C cX0C 2dȐ!C 2dȐa>%̗!C 2dȐ!C 2\!C 2a| 2dȐ!C 2dȐ!Ċ0C 2dȐ!C 2d_> 2d0C2dȐ!C 2dȐ!C 1D`| 2dȐ!C 2d!| H*\H0Ã2dȐ!C 2dȐ!C 1L0 <0… :|1ĉ+ZD  <0… :|1ĉQH"E)RH"EH"E)R0E)RH"E)RHq`>)RH"E H"E)RH"E)G"E)RHq`>(RH"E)RH"EG"E)R0|(RH"E)RH"EG"E)RH`> 4xaB 6tbD)VxcF H*\ȰÇ#Joĉ'N8qĉ'N81b'N8qĉM8qĉ'N8qĉ'F <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6̀;;PK`j::PK+AOEBPS/img/openo.gif1NGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH 'p  O@ DPB >QD-^ĘQF=1G=zѣG=za>ѣG=zѣG=*`>=zѣG=z#|ϣG=zѣG=z0_|yѣG=zѣGC/_˗/| ̗/| ѣG=zѣG=g0_|/߿|'0_/|=zѣG=zѣG ˗/?7߿ 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ˗`|O@$?'p "$ <0… :|1ĉ+Z1ƍ `|O8`A <0… :|1ĉ+Z1ƍ #`|˗_/_|/_>:2ױcǎ;vرcǎ8`A 'p A W`,H0_ ,X| H*\ȰÇ#JHŋ3jdo| 71_|1ƍ7nܸqƍ7ndo| ̷amܸqƍ7nܸqF60| 1ƍ7nܸqƍ7nd`| ̗/|;am/F6nܸqƍ7nܸq#|#O`|/| )O@  <0| H*\ȰÇ#JHŋ3jd`|/_>0ƍ ۸qƍ7nܸqƍ g0_˗/|w0ƍ ۸qƍ7nܸqƍ g`>o| /  <0… kذaÆ 6lذaÆ 6lذaÆ 6lذ@$ 7_ ̗o@$H? 4xaB &O@'p "Lp!ÆB(q"Ŋ/b0|̗`'0_>;OF 9̗OF5jԨQF1;O`>̗/|3o`>4jԘ0|5jԨQF5jh1| ca> H'p A ,/,h „ 2l!Ĉ'Rh"ƌ1̧`>˗_| ˗O|-1F5jԨQF5R0FC/| 1_"ӨQF5jԨQFH0|)̧Q|ȨQF5jԨQF1̧`> c/a>k`4jԨQF5jԨb>40| !̧c>"ӨQF5jԨQF'p O@WP`| ̗_|/|G0_|˗|+X| H*\ȰÇ#JHŋ3̧Qc|9G0|_|/߿| W0|_ +Ob>5jԨQF5jOFs`/_ ̗O` 70_>/_>曘OF5jԨQF)Ө`|9O@ /_|/| ̗|˗_> 7p  <0… :|1ĉ+Z1|5*0_|'0߿|/|3O`'0|]̧QF5jԨQFiԨ0|'0_|/߿|˗/| ˗/?7? 8pO@ DPB >QD-^Ę`>s`>4 ̇1F5jԨQF5ŖQ| W1_>  gРA8`A&TaC!F8bE1f 'Qa>$JOa> (QD%Jx0D [OD 8? 0 < ,h| C!‚ˇ!B8`A&TaC!F|OD-'QD%J(1|%ˇ0D$J(QD%w0_|O`| ̗/_| ̗/| -'QD%J(_˗o`|˗/_>;`>I(QD%J,`| /_˗`>/߿|[OD%J(Q| '0_ ̗/|w0|#(QD%J/|3/|70|#_| w0D%H"$H 'p|` ̗/|˗| Gp`|O`|/_>`>$XA .dC `|/|'0|co`$J(QD%w0߿|̗/_>#/_70| ̗/߿|O`|˗`>$J(QDg`>'߿ OG0_|$`O@ DPB >b|3 |O࿁ /|o`|˗_| ̗/_>? 4xaB 6tB$8?80_> /| ̗o|8p@$XA .dC%JO|/|˗_|080|˗/|/_|O| H*\ȰÇ#/| _| ̗o`|'0_1G0D%J(QD;o` ̗`|;` /_/|/|I(QD%6'0A '߿| @ ̗/_>`>8p`8`A&TaC!F0|'0_ O8_#80_|/_/_|#(0| H*\ȰÇ#"'QĂ$J(QD%JCO|%J(QD (Qb|%J(QD%'Q| IdOD%J(Q|%J,OD%J(Qă$JOa> (QD%Jx`> 4xaB8`A&TaC!F`> 4x@$`> 4h? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}ujիYvvlٳ'p "LpaA$X`> 4xaB 'p "Lp!ÆB(q"Ŋ/b1F1̗/_>!˗/F5jԨQF5f̧Qc| Өc>5jԨQF5jĘOƈӨQ|5jԨQF5jx1|/_|G0_|˗o``>߿8_>/_>`| ̗ A$H_| $80,h „ 2l!Ĉ'Rh"ƌ ̗O`'0|˗/|˗/|O`|/|'0|/|/|0kOF5jԨQF+3/|̗`|'0_'0_>G0߿|g0|#` ̗o`>!̗/_/|70_|/_̧QF5jԨQF̗o`| 70_> '0_|'`|@O|#/_|_|O`|/|˗_|˗/_˗| H*\ȰÇ#JHŋ3g0_ ߿@ ߿߿'p||G0_|70߿|#(0|/_| ̗_|˗/_˗| H*\ȰÇ#JHŋ3̗`|G0|/_>˗/_>G0߿|g`>'p`/߿|70߿|80@#| O H*\ȰÇ#J? 4xaB 6ta|̗O`̗O`>˗/|˗/|_|3` '0|/|/| ̗/| ̗O`|˗/߿|O`|"D!B"ĄA"D |(߿77070_|o|o|/_|8|?'0_|˗|8߿| 'p "Lp!ÆB(qb|)RH|QH1a(R80_(RH"E)R$"E)R`>)&w0Ň  /O@ DPB >Qć(RH"|QH1a>(RHQ`>)RH"E H"EG"ńH"|)RH"E)G"E)+"E %̗"EQH"E)R0E)R`>)&̷0_>):̗"E)RH"ń(RH"|8`A&T 0 <0…8`A&TaC!F8|+VXa+VXbŊ+VXbŊUXbŇ*VXbŊ+VXbŊ+FWbŊXbŊ+VXbŊ+V1_Ŋ+V|bŊ+VXbŊ+VXb|+VXa+VXbŊ+VXbŊUXbŇ*VXbŊ+VXbŊ+FWbŊXbŊ+V/_|+VXbŊUXbŇ*VXbŊG0_+VXbŇ*VX|+VXbŊ ʗ?O@ DPB >Q|'N8q|'N8qĉ[oĉ'N8q|'N8q|'N8qĉcoĉ'N8qb|'N8q|'N8qĉkoĉ'N8qb|'N8q|'N8qĉsoĉ'N8q"|'N8q|'N8qĉsO`'N8qĉM8qĉM8qĉ'NDa&N8qĉ'7qĉ'`> 4xaB 6tbĆ H |,h „ 2l!Ĉ 8`| H*\ȰÇÇ>||Ç>|!|=|ÇcÇ>|Çg0|>|Ç2̗a>|| =|Ç>|P` {Ç>|| =|Ç[Ç>|Ç5Ç>|Á{Ç>̷0Ç>|ÇcÇ>|Ç-Ç8`AO@,/,h „ 2l!Ĉ-'QD%J(`$J0D1̷0D%J(Qă!'QD%J(a$J0D1̷0D%J(QĄ ̗/D%J(QĄ(Q"|%0|%J(QD˗OD%J(Q"| I(a/_O`|coa>%J(QD%J(QD%"̷0D3/|_| ̗_coa>%J(QD%J(QDI$BO@'p "Lpa> ̗_|(@$(0_,/,h „ 2l!Ĉ'Rh"ƌ-̧Q#|̗O`|0@'p +80_'p "Lp!ÆB(q"Ŋ/b̘1|56̗`|/_/_|˗`>[OF5jԨQF52̷0F8P '0_'p࿁O 'p A H_>$XA .dC%NXE3[0 'p "D/|/߿|/_|o`|g0_B&L0a„ &L0a„8`A&Tx? 4xaB 6t"| 5̗/bă`| ̗/_'0_>w0|-1bĈ#F/bĈ E1bĈ#B̷0|#̧0_Ĉ1̷0_Ĉ#F1b#&1bĈ#F1|E80|#0|#F1bĈ"F0_Ĉ#F1"| E1| Eh0| E1bĈ#;_˗/|70_>  'p "Lp!ÆBoa"Foa coa#F1b|˗O`| '0_˗O`|O`|/|#F1bĈ-1_Ĉ-1| -1bĈ#Flo`> o`70߿'߿߿ O  <0… :|b"Q`"F4a"F1bĈ g`> ߿|O|/߿|˗/|  <0… :|b"Q` H 'p A ? 4xaB 6ta ˗/? _'P` ̗_80  <0… :|b"Q`#:̷0_Ĉ#F!|O|0@o`70߿߿ O O@ H*\ȰÇ[/b1| E1bĈ w0߿|˗O`| '0_˗/|o` ̗`"F1bĈ [/b1| E1bĈ CO`>'`>'߿_o?#HP`>$XA .dC-1_ĈEa"F1bĈ[/bĈ )̗/bĈ#F`"Q`#:̷0_Ĉ#F`>"F0|#F1bĈ-1_ĈEa"F1bĈ11bĄ1bĈ#F$oa"F/bĈ-1bĈ#F$a#&̷0_q |,h „ O@ |ˇ!B!D!Bˇp`>"D!B"D| C!Ḃp`>#/ƒC!B"/_>̇p`>C!B"D!BC80B"D!B"Dp`>8`A&Tx? W | W|8`A&T`> [a| 2ǐ!C [!C 2dȐ!Á2dȐ!C1oa>2dȐ!C2oa>1d0C 2,oa> 2dȐ!C cȐ!C _>#/|cȐa|/_| ˷0Â2d!C ̷0C 2dȐ!C1dȐ!C [|1/| "̗o`| 1doa>1d0C 2,oa> 2dȐ!C cȐ!C ̷0| o/_>70_>/߿| ̗o|˗/|˗_|˗_|7po 8p@8`AC!B"|"D!B"D|!D!B"D_Ch0|̗/_0@ ˗_˗/_/_|o|8p(0? 4xa>"D!̇!B"D!B70B"D!B;_>̗`|˗/@ O|˗O`| /߿|/߿|/_ O 8p7p@8p| H!D!Bˇp`>"D!B"DX`> 4xaB 6t? O@ /_|'`>o࿁ /_˗_|`>'p |O@,/_+X`  <0B[p… .\0| .\p… o|3/_|'`>_O ˗_>/_|˗|? 80 7p@8p| H!D!Bˇp`>"D!B"D80|"D!B"Dx0|G0߿|˗_|/_ ߿|/_|0 '@7p 8p` 7pO@ D!B"D_>!D!B"D!B"D!B"D!w0B"D!ƒ̇`>!D/Ḃ!B"D/"D!B"D|"D!B"D!| C!B 'P ,h| C80"!B C!B"|"D!B"D_>"D!B"D`>!!B"Da| C80"!B C!B"|"DX`> 4xaB H| H*\ȰÆS/Ç>0| =C>|`'p`>$X_|4hРA ˗/A'p "Lp!Æˇ0_|>|0| -P` {ÂC/| {|{Ç>̗o`|˗Ç˗| -P` {Â;Oa>|0Ç>||=40 <0…8`A g`> 3hРA4hРA 4X0 3h0gРAW0_Ϡ8`A&TaC!F8b[/b>YX1|5̇0|(0_%0E-ZhѢE -̷0_|hb 3` ˗/| ̗O`| /_|/_/_3oa|-ZhѢE-6̗0_>Ega>-[`>`|'0߿|˗`>_|˗_˗/_3`>,ZhѢE-Zt/a$0E(o` +_˗/|/_|/߿|'0_O(0@ <0… :|1ĉ+̗`| 囘Ϣ|-Z0 O@8p /_|/_ /|˗_|/_ 8?8`A&TaC!F8bE8`A 4hР| 4hРA 4h`>+_˗/| /_>'0߿|˗O`O'p`'p "Lp!ÆB(q"Ŋ/̇a>1.w0| W0_˗/߿|`|˗_|8߿ <0… :|1ĉ+Zh0F0bĸ0|a0F1bĈ#F/0Fk`>  <0,h „ 2l!Ĉ'Rh|È#| %̇c|1bĈ#F1bĘ#|1bloa>0b\#F1bĈ#F0FKa>È#F1bĈ#F02̇#Ƈ 0_> ˇ#F1bĈ#Fad#F80,(`> 4xaB H*\ȰÇ#JHŋad#F1bĈ#F1bĈ#Fad#F1bĈ#F1bĈ#Fa\#F1bĈ#F1bĈ#Fa`>1bĈ#F1bĈ#F1w0|aĈ#F1bĈ#F1bĈ`&/_>1bĈ#F1bĈ#F1"̗/_|8`A&TaC!F8bE1fԸcG8`A8`A&TaC!F8bE1fԸcG EǏ?~Ǐ?~\? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yy2 ;;PK*Tm11PK+AOEBPS/img/optional.giflGIF87a<?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,< H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJ*`> 4H? O@ D(? 4xaB 6t`> 4xA$XA .dC%NX|-̗|/^X1ň.^xŋ/^0| (1_/^b|/^xŋ/^\b.Vwŋ]ŋ/^xŋ !̗O |'p`8_'p ̇!B"D!B 3o`>˗o`| '0| H*\ȰÇ#JHŅG0_C/_|xň /_>/߿|˗/߿|xŋ/^x|#/|O@ /_|'`>8`A&TaC̗_|G0߿|˗/߿|=|Ç>|Ç><_70_`>/_/_/_|`>||`>߿o`>? 4xaB 6tbD)V0_70_ g0|/_|'0_/_|g0ŋ/>̗`˗_> A? 4xaB 6tbD)V(`> 'p|/ (? ̗/_ /߿|˗_|O| 08`A&TaC/_>/| A$ <0… :|1ĉ+:w0߿|o`|/_|˗_|/_>/߿| w0_|-Z/|'0_/|`,ZhѢE-Z/|G0|#O`>/_>O'@7p@8`A&T!|w0_>̗/|˗O`|)װaÆ 6lذaÆ 6lذ| 5T` "0_Æ 6lh0_>6l/|6lذaÆ 6lذaÆ 64oa !|'p  ;X0kϢE-gQb,ZhѢE8`A&TX? W| ,80_A ,X`+X`'p "L ` ,X`,/,h „ 2l!ĈI(`>X0|$J/| I(`>(`$J(QD%'QD[Ob| ˗O|E0D coa> [OD%J(Q|%J$a HA H |,h`A$X`>4hРA $Ϡ| 'p "4O@ DPB >a'0|˗O`|˗`|Koa>%J1|˗o`|#`|70_| g0|%JTOD%J(Q|+O`̗_| '0|Koa>%J1|/߿|/|'0|/_˗`>$J0D%J(QĂ g0_> ̗o`>G0_| -'QD![`|G0߿|̗߿?/?'p|  <0….\p… .\pB3/|70_ G0_| W0… .\p„`|G0_|70_>'p ˗/ o| H*\(0C 2dȐ!C 2D_> ? ? ̗/߿|W`O@ DPB w0߿|(_߿7P @7p|? 4xaB cȐ!C 2dȐ!Ä Hp 7p`|/|/_7p@$XA .dC /| _|/|'p/O@ DPB 8`A&TaC!F/| _| ̗`| '0_|+OD%Jt_> ̗_70_ /_>/߿|3`>%J(QD%JH0߿|((߿ (0_|'p@7_>$XA .dC3/|'`> ߿'P`'p "Lp!ÆB(q"Ŋ Y0E-ZϢE,ZhѢE-ZH0EYhѢE,ZtϢE-ZhEY0E-ZϢE,ZhѢE-ZH0EYhѢE,ZtϢE-ZhѢEY0E-ZϢE,ZhѢE-ZH0EYhѢE,ZtϢE-ZhѢE8`A&TX? 4xaB 6tP!|,h „ 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢPF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nxh@;;PKؽqlPK+AOEBPS/img/lobatt.gifvGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\R#|,h „ 'p "Lp!ÆB(q"Ŋ/b̨q#nj:v,cǎ;vرcǎ;v̘cǂ:vرcǎ;vرcnj70| /| '0_|O'p| H*\ȰÇ#JHŋ3j1co`>/|˗_|W0߿| uرcǎ;vرcǎG0߿| 70߿|_> #O`:vرcǎ;vرcnj 3o`>_70_| ̗O`:vرcǎ;vرcnj 30@_/߿o`>? 4xaB 6tbD)VxcF9fg0| '0|˗/߿|/|-O@8`A&TaC!F8bE1fԸc|3/|O`/߿|70߿|̷0_|uرcǎ;vرcǎ w0_|o`|/߿| ̗/|(| (0A O@ DPB >QD-^ĘQFױc|uرcǎ;vرcǎױc|uرcǎ;vرcǎ ر`>:vرcǎ;vرc|uX0|;vرcǎ;vرc:v,Ob;vرcǎ;v1_|;'1_ǎ;vرcǎ;v옯 |,h „ 'p 'p "Lp!ÆB(q"Ŋ/b̨q#|9r$#G9rȑ#G9rt#Gqȑ#G9rȑ#Gqȑ`>9rȑ#G9ra>9Ǒ#G9rȑ#G9:Ǒ#G8rȑ#G9rȑ#G8rH0G9rȑ#G9r0_A$XA .O@O@ DPB >QD-^ĘQF a8rȑ#G9rȑ#G a8rȑ#G9rȑ#G a8rȑ#G9rȑ#G ;/_| ̗/_>70_>  /߿'p| $/,h „ 2l!Ĉ'Rh"ƌ7rW0| '0|+O`/|O`>"ȑ#G9rȑ#G+`o`#O`>o`K/b>9rȑ#G9ra_>`#O`>˗/a8rȑ#G9rȑ#G ;o`˗/|`>/_|)1G9rȑ#G9r`>'p|'0|#`>#O`> G@$X ,h „ 2l!Ĉ'Rh"ƌ7rW0| '0|#/|/|/| EǑ#G9rȑ#G9:W0|O`>˗/_>70|O`|)1G9rȑ#G9r0_|9"1G9rȑ#G9r0_|9"1G9rȑ#G9r0_|9"1G9rȑ#G9r0_|9"1G9rȑ#G9r0_|9"1G9rȑ#GqG9P>  <0„ <0… :|1ĉ+Z1ƍO@ DPB$XP`>$XA .dC%NXE5n䘏#Gqȑ#G9rȑ#Gqȑ`>9rȑ#G9ra>9Ǒ#G9rȑ#G9:Ǒ#G8rȑ#G9rȑ#G8rH0G9rȑ#G9r0G ȑ#G9rȑ#G+0 <0„ H | H*\ȰÇ#JHŋ3j1_|971G9rȑ#G9r0_|971G9rȑ#G9r0_|971G9rȑ#G9r0_|˗O`˗/߿|O`>˗O |$H| H*\ȰÇ#JHŋ3j1_|/|'0| 70|Cob>9rȑ#G9ra+_>3/|a8rȑ#G9rȑ#G ;`#`|˗`>Sob>9rȑ#G9ra˗/|̗/_70_˗o`>Cob>9rȑ#G9r!|O/|/_| 'p 8`A&TaC!F8bE1fԸc+_>+O`> 70|!71G9rȑ#G9r0_|/_|˗/߿|/|˗/|˗0|9rȑ#G9rȑ|qh0|9rȑ#G9r|qh0|9rȑ#G9rȑ|qh0|9rȑ#G9rȑ|qh0|9rȑ#G9rȑ|qh0|9rȑ#G9rȑ| ? 4xaB-D? 4xaB 6tbD)VxcF9+0 <0„ H | H*\ȰÇ#JHŋ3j1G ȑ#G9rȑ#Gȑ#|9rȑ#G9rȑ|9r$#G9rȑ#G9rt#Gqȑ#G9rȑ#Gqȑ`>9rȑ#G9ra>9Ǒ#G9rȑ#G9:W`> 4xaB8`A'p "Lp!ÆB(q"Ŋ/b̨q#|q/c>9rȑ#G9ra8r̗1G9rȑ#G9r0_|˗O`˗/߿| ̗O`˗/_>2ȑ#G9rȑ#G+`#`| ̗O`˷0_|9rȑ#G9rȑ|W0߿|̗O` ̗O`|-̗1G9rȑ#G9rX0|W0߿|/߿|˗_|/|O8`A&TaC!F8bE1fԸQa ;/_|G0_|_>/_/_|ȩ0G9rȑ#G9rl0 $_>/_>/_| H'p "Lp!ÆB(q"Ŋ/b̨qc|w0_|G0|'0߿|_2[#G9rȑ#G9Zw0_|/_|˗/߿|o`|_|!̗1|9rȑ#G9rb> 1_| qȑ#G9rȑ#GǑc8rȑ#G9rȑ#G 1_|9rȑ#G9rȑ|q/c>9rȑ#G9ra8r̗1G9rȑ#G9rđCO| H*o8`A&TaC!F8bE1fԸc H* $? 4xaB 6tbD)VxcF9ȑ#|9rȑ#G9rȑ|9r$#G9rȑ#G9rt#Gqȑ#G9rȑ#Gqȑ`>9rȑ#G9ra>9Ǒ#G9rȑ#G9:Ǒ#G8rȑ#G9rȑ#G 'p "L(? 4xa>$XA .dC%NXE5n䘯`>qD#G9rȑ#G9rt`>qD#G9rȑ#G9rt`>qD#G9rȑ#G9rt`˗o`|˗o`|70|ȑ#G9rȑ#G+` /|O`> w0G8rȑ#G9rȑ#G ;_>O`>'0|ȑ#G9rȑ#G+``> |$H A  <0… :|1ĉ+Z1ƍw0|#O`| ̗/_`>qȑ#G9rȑ#G80G_| G_>˗@$XA8`A&TaC!F8bE1fԸco`|'0_| ̗`>qȑ#G9rȑ#Gw0| ̗/_ ˗/߿|;#|9rȑ#G9rȑ|q#|9rȑ#G9rȑ|q#|9rȑ#G9rȑ|q#|9rȑ#G9rȑ|q#|9rȑ#G9rȑ|q#|9rȑ#G9rȑ|q#|9rȑ#G9#8r| 0 <0@$XA8`A&TaC!F8bE1fԸc>9Ǒ#G9rȑ#G9:Ǒ#G8rȑ#G9rȑ#G8rH0G9rȑ#G9r0G ȑ#G9rȑ#Gȑ#|9rȑ#G9rȑ|9r$#G9rȑ#G9rt |,h „ 2O| H*\ȰÇ#JHŋ3j1_|9RW0G9rȑ#G9r0_|9RW0G9rȑ#G9r0_|9RW0G9rȑ#G9r0_| ̗/? o`'߿'߿߿| (08`A&TaC!F8bE1fԸc/|G0|O`> '0_> '0_C`>9rȑ#G9ra`>'0_`>/|/_|qȑ#G9rȑ#Gw0߿|G0|˗_>#O`>/| ̗/_|qȑ#G9rȑ#Gw0| G0_|/߿|˗_>˗/|_|/G_>$XA .dC%NXE5n08_> G0|_>O`|˗O`> G@ <0… :|1ĉ+Z1ƍw0߿| G0|_> ̗O`>'0|Oa8rȑ#G9rȑ#G ;O`|#/_|'0߿|˗o`>/߿|Oa8rȑ#G9rȑ#G ȑb8rȑ#G9rȑ#G ȑb8rȑ#G9rȑ#G ȑb8rȑ#G9rȑ#G ȑb8rȑ#G9rȑ#G O@ DPB O@ DPB >QD-^ĘQF ȑb8rȑ#G9rȑ#G 'p "Lp!C  <0… :|1ĉ+Z1ƍqȑ`>9rȑ#G9ra>9Ǒ#G9rȑ#G9:Ǒ#G8rȑ#G9rȑ#G8rH0G9rȑ#G9r0G ȑ#G9rȑ#Gȑ#|9rȑ#G9rȑ|8`A&, /| w0ǂ8rȑ#G9rȑ#G ;` ̗a;c|9rȑ#G9rȑ|G0_|˗a;#|9rȑ#G9rȑc|G0_|_|70@ O$H A'p "Lp!ÆB(q"Ŋ/b̨q#ǂw0|˗/_>o` H8`A&TaC!F8bE1fԸc|W0|o`;cǎ;vرcǎ;v0|/_| ̗|/߿/ <0… :|1ĉ+Z1ƍ;.Qb>=zѣG=zQc>yѣG=zѣGyϣG=zѣG=zԘϣ|=zѣG=zѣ|%ѣG=zѣG5(1G=zѣG=z`> 4xa‚ H*\ȰÇ#JHŋ3jȱǏ CZIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷p];;PK['{vPK+AOEBPS/img/lnpcc070.giftfGIF87aXf?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Xf H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳυM̗_| /ϟ(? / ̗o@ O@O@ DPB >QD-^ĘQc|哘/߿|oƍ'70_0_ ̗/|6nܸqƍ7nܸqc|0O?o`o O@ DPB ̗ | O?_GAO@ DPB >QD-^ĘQ|'0_|8 o`'߿ '@$XA .d| 'P࿁o߿80_>˗|O8`A&TaC!F8bE1fX0_|/|/߿|˗/_|/|/߿|˷qƍ+/_|080_8_|˗o|˗|'p "Lp!ÆB(q"Ŋ/b̨ |'߿O?߿|O? H*\ȰÃ̗/_˗/_>̗`|80?78`A&TaC!F8bE1fԘ0_˗/?7߿| o '? 4xaB 6t0_˗/߿|˗/_> O(0_>˗O`0@@$XA .dC%NXE5̗`|8 '| o? O? H*\ȰÄ  70߿o ˗/@ o` o`>$XA .dC%NXE5:̗`|7nܸq|6nܸqƍ7nܸqƍ +/ƍ7nܘ0_| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx 0 <0… :|1bB$XA8`A&TaC 8`A&TaC!F8bEÈ#F!1_|0bĈ1b|0bĈ#F1b0F1b1FaĈ#|0bĈ#F1b0F1b1Ɔ0bĈ#|1bĈ#F1b\#F1b#|1bĈ`>1bĈ#F1*̇#F1Ḃqa>1bĈ0F1bĈ#FÈc|0_|è0F1bT#F1bĈ#FaĈ1|0F0bĈ|1bĈ#F1 'p ˗O`|˗/߿|/_>w0_|˗O`|/| ̗/|;/_|'0_|˗o`w0@ Hw7`>'p ̇| H*\ȰÇ#JHE,/| ̗/|'0| '0| /|)70|%'0E.*̇0_| wQ`#| M̗ŋ/^xŋY'`>?70߿| (0@ /$O` _>$o |? A  A $H0_>O@ /߿_o࿁_/߿O/߿| ̗/߿|˗O`|$H|8`A&TaC!F8bEY̗/| ̗/|/_˗`|˗O`|˗o`|˗a|˗O`|˗o`>.&̗a|'0|/_|̗/_˗_/߿| O70߿/?߿'? ,? 4xaB 6tbD)V1|/Jwb>.滘0_>O`|/߿|O ߿/߿/߿//? 7߿/,X0_>$XA .dC%NX"|w"|]/_]L/| '0_|/__70߿| 70|'0߿| ̗O`> ̗o`>]xŋ/^xb'p ,h ƒ  O@$X"D0 _ /? o| /_|˗O`>O |'p|'0_|(_? ,? 4xaB 6tbD)V1ŋ/^h1ń*;/ŋ/.wŋ/^xň.^|ŋ 滘0_|xE.^xŋ/^1ŋ]x|xŋ]xŋ/^x1b>/_/_|˗O`|!̗o`|˗O`|̗/|/Nw1a/^81ŋ/^xŋ#泘O`| 70_| /| '0_KO`/滘0ŋ/^0,h „ 2l!Ĉ'Rh1b>'p'p`O`O |?? 4xaB ca> 2dȐ!C  ǐ!C 2dȐ!C 2dȐ!C Pa|˗o`|˗/|˗_| ˗O`|˗a|cȐ!C1d0C 2dȐ!C cȐ!C 2dȐ!C 2dȐ!C c0C c0_| 2d`> cȐ!C 2dȐ| 2dȐ!C 2dȐ!C 2dȐ| ˗!C`|2dȐ| "ǐ!C 2dȐ!C2dȐ!b!b!b!b! (,h „ 20 H*\x0C1dȐ!C 2dP`> 2dȐ!C 2dȐ!C70_|'P8@ H8`A&TaC!FG0D$J(QD!0D%J(a>%J(QD%.G0|g0_|'Qa>%J(QD$:'QD%JDOD%J(QD O߿|߿'p  O@ DPB >`>I(QD(QD%J(Q| 70߿|˗o`>$*'QD%J1D$̗_|˗O`|'0_>/| ̗/߿| ̗/߿| ̗/|˗O`|'0_>$'QD%J(Qą '0|'0_>擨0D%J(Q"|h0D%2'`>%J(QD%2̗/_0߿|7P ,hp` G0_| H*\ȰÇA"D!Bl"|!B"D!B"DA"D!B"|"D"D!B"D!Bt"D!B"|!惈0D!B0D!B"D!B|!B"D!1D B"|"D!B"D!Bt"D!B"|!"D惈0D!B"D!B|!B"D!1D!B0D B"DADA@ <` &L0a„ &L0a„%L` 80,h „ 2l`>|Ç>||>dA ߿| 70˗/_>/,h „ 2lx0C%O@'p "Lp!C.װaÆ 6lذaÆ 6lذ`| 6a|70߿|-G0|5lذaÆ k` H H*\` 5lذaÆ 6lذaÆ 6,/_Æ k0_|̗/߿| o`6lذaÆ5d0  <0…  Pa>:tСC:tСC9t0C_˗Oa>_>:tСCO@ O@ DPB >4"D!B"D!B/D A,0 G0߿ (0_|`>8`A&TaÂ'p 'p ;x$XA .dh0_Å6lذaÆ 6lذaÆ ̗aÆ5lذaÆ 6lP!|,hp ,/,h „ 2l` =|Ç>|Ç!|>|Ç{X`> 4(? 4H0_̗/߿| ̗/|˗O`|'0_|'0_|'0_|'0_|/_> ̗/|7p$H A  <0… :|0D!B"D!B(0_>惸0_> ̗`|˗/|'P࿁8`A&0 $ gРA <0… :|0_>!B"D!BQ`|!*qa|#`̗/߿|'0߿|̗/| ̗/_ |,8? 4H0 <0… :|0_>!B"D!BQ`|!*qa#`/|0|/a>'p A$X"D_>"D!B"D!B8`A&TaC!F8b|*VW`| '0߿|˗O`| ˗/| 0@_>O`>'p`>$XA"DP`>"D!B"D!8`A&TaC!F8b|*VW`|0o'p|'0_|G`|#Hp`|$H A G A $80,h „ 2la|!B"D!B"| BT"D! `>|!"D!B"D!B"D!B,/D A"80_|!B4"D!B"ā B"D!B"DA0D!B`>8`A&T(0… ˷p… .\pB.\p… .\p… .\pa| .Lo… .\p… .4o…-\p… .\0_ .\p… .\p… .\/_ &̷p… .\p… ̷pƒ˷p… .\p|-\p… .\p… .\p-\0!|,h „ 2l!Ĉ 8`AO@ DPB 2O@ DPB >QD gѢE-ZhѢE-ZhѢE-ZhѢEYhѢE-ZhѢE-ZhѢE-Zh`|-ZhѢE-ZhѢE-ZhѢE-Z$/E-ZhѢE-ZhѢE-ZhѢE gѢE-ZhѢE-ZhѢE-ZhѢEYhѢE-ZhѢE-ZhѢE-Zh`|-ZhѢE-ZhѢE-ZhѢE-Z$/E-ZhѢE-ZhѢE-Z","ʗ? 4xaB 6tbD)VxcF9vdH9rȑ#G9rȑ#G90_#G9rȑ#G9rȑy`> 4xaB 6tbĄ H 'p "Lp!Æ'p "Lp!ÆB(q"ŊH1E-Zh`>˗ϢE-̗/_>-ZhѢEgb>-ZhѢ|!gѢEhѢE-Zha|)hѢE-ga>-Z0_>-ZhѢEgb>-ZhѢ|hѢEYhѢE-Z0_>YhѢE 0E-ZϢE-ZhѢńYϢE-Zh0E,Zh"|-ZhѢE-"̗"|-ZhѢE8`A C!B"D!B"? 4xaB 6tbD)6O@ HK0a„ &L0a„ &Lx0_„ C/_| Kx0_|'P࿁8`A&Tp`| 2dȐ!C 2dȐ!C O@ HK0a„ &L0a„ &Lx0_„ Co`̗0|̗0a„ &L/,h „ 2l!Ĉ'Rl08`A̗0a„ &L0a„ &L` ̗a˗_|'0|/_>#o`> K0a„ &̗? 4xaB 6tbD):O@$XA%LH0_|%L0a„ &L0a„&LX0_>/| ̗/|/|/@ o`O@ DPB2dȐ!C 2dȐ!C 2D0 H K0a„ &L0a„ &Lx0_„ ˇ0|/|˗/|(߿߿| ? 4xaB ǐ!C 2dȐ!C 2dȐ!|cȐa| 2dȐ!C 2dȐ`> ˇ0|'0_>'0| 70|ǐ!C ˗!C 2dȐ!C 2dȐ!Cǐ!Â2dȐ!C 2dȐ!| "̗0_|˗/_'`>o_ ? 4xaB cȐ!C 2dȐ!C 2dPa| 24!C 2dȐ!C ǐ!| cȐ!C 2dh0C 2dȐ!C 2dȐ!C cȐ| 2dȐ!C 2dȐ`> cx0C 2dȐ!C2dȐ!C 2dȐ!C 2dȐ!C2dȐ!C 2dȐ!| "ǐ!C 2dȐ!C2dȐ!C 2dȐ!C 2dȐ!C"O7p'p|/_'p "Lp!Æ9tH0C:tСC:tСC:tСC:tH0Ã+O`[o`sСC!|:tСCsСC:tСC:t!|˗`a| '0C:t_> sСC:t0C:tСC:tСC sx0|'0|SO`| '0C:t0C9tСC:DϡC:tСC:tСCO@ 'P?@/_>0@ H*\Ȱa|СC:ta>:tСC:ta| ̗/|o`> '`>  gРA 4h_|8`A&TaÅ:$ϡC:t!|:tСC:t!|70|70|#`>9tСC:t`> sСC:t0C:tСC:t0| o``|#!|:tСC:4ϡC:tСC"СC:tСC"̗/_ /_| '0| G0_|СC:tСC:$ϡC:t!|:tСCr!B|?7P`/_|/8_>$XA .dC0D%J(a>%J(QD%G0_W0|'0_>H0D%J(Q"|h0_>_|˗ϟ|˗/?/_>/_|˗_|˗/?/_>/_|_|h0D%J(QD +0@O| O_(? ϠA'pG0߿ O@ DPB s`> 'p "Lp!C8`A'p "Lp!ÆB(q"Ŋ#H0| G0߿|/߿|/^0ń. O@ DPB'p ;xO@ 'p "Lp!ÆB(q|'0_|̗/|QH"E(2G @,h „ 2< <0@ H A O@ DPB >QD('0߿| '0߿|˗`>)RH0E(П <0… 'p ;x ˗˗/,h „ 2l!Ĉ#曈0_|(7߿ 80O@ DPB5lh0_Å8`A&T| H4o`>̷0߿|"D!B1D'p A H*\`>$X| A"D!B"D$X`A$XA .dx? 480/$XA .dC˗/߿|/_|˗_>0D!B"D O@ DH? 4xaB O@ w;x <0… :|/A@ /,h`>$XA .dÁ B$ |,h  H`>$XA .dh0߿'p A$ A $H`>$XA ˧PB *TP„70_70_>OB*TPB ̗/B˧PA$XA? 4H? 4xaB ߿ H? #H A ? 4xaB)TPB *T0a'0_|˗/| /B)Tx`> 7P࿁ H ̧PaA O@8`AO@3hР H*\`> O@ H_ ,X` ,X` ˗? 4xaB 6t0Æ6a_ ̇0| ̗/|3/_|'0_|˗` H'p ̇!| H*\ 'p@$ A $HP`>$XA  ̗o… .\pB-\H0_ [`O` '0_Ko`KO` H8| ,X| ,H0@,h „ 24?'p@ A $HP`>$XA ̗/… .\p… .\0a O`'0B'p'p|(߿| 80| 'p 8`A#H0_|08`AC!|"/_>_|˗ϟ|˗/?/_>/_|˗_|˗/?/_>/_|˗_|˗o |@$X"D!B˗? 4xaB 6tbDM8q` +O!|'p ̇!B!D!B"D!B+0 O@ ,/B"D0_|"D!B"D!Bˇ!BC!B̗/B"̗/Bˇ!B!Da|"D!B"D!ƒ (? 4x`|"D|ˇ!B"D!B"D(0_>"D(0B"D!  O@$X`> 4X0A /,h „ 2laB "D(0,h „ 2l!ĈIt/D%J( |O@ O`>"Dp`|ˇ!B"D!B"D(0_>"D(0,h „ 2l!ĈI|/D%J( | O@ 70_O@ DPB >T/D A"D!B"D B"D08`Aw̗`|8`A&TaC|!B"D!Q`>!B"D 'p ,hp`>"D!B!|O@ 3(0_| 4h`|/_>$XA .dCA0D!B"D B$"D!B0B g`|4h |4/_>$XA .dCA0D!B"D B,"D!B0C g@ O@'P ,/_>$XA .dCA0D!B"D B4"D!B0 ? W` H@$X`|8`A&TaC|!B"D!`|!B"ăA$08| ,X` /_>$XA .dCA0D!B"D BL0 H*\ȰC  08| ,X` /_>$XA .dCA`> 4xaB 6tbĄ H 'p "Lp!Æ'p 'p`>? 4xaB˷p… .\p„'p "Lp!ÆB(q"Ŋ/b̨qCO8`A&T80_| .\p… .L/,h „ 2l!Ĉ'Rh"ƌ7FO|? 4xaB˷p… .\p„'p "Lp!ÆB(q"Ŋ/b̨qD_>$XA ̗/… .\p…  <0… :|1ĉ+Z1ƍ8P ,h „ ˗o… .\p… O@ DPB >QD-^ĘQƋ  <0[p… .\pa|8`A&TaC!F8bE1fԸ1c|q(0_|9r(1_>9rȑ#G9rȱa|9 ̗/G9:O@ H*\ȰÇ#JHŋ3j܈1GǑ#G8p ,h „ 2l!Ĉ'Rh"ƌ7bǑ|qȑC <0… :|1ĉ+6̗/_>-Z/_>ha|,ZhѢD <0… :|1ĉ+.O@ DPB :O@ Dh0_‚Kx0| ̗P`|&L0a„ &L0aB  < |,h „ 2l!Ĉ 8`A̗/_ &L0a„ & //_>$XA .dCA0D!B"D B"D!B_> c/|O`/|a| B"DQa>!B"DA(0D!B|!`>oo˗? 4xaB 6tbDM8qĉ'"7a0|7`˗/@ 70O@ <!B"D(0_| H*\ȰÇ#Joĉ'N8a;/a> a>&"'0|W0_|&>7q8qĉ'N80ĉ'N8q"|ˇ0|˗_|˗/|˗/߿|O|7?߿|? @ 70߿|8p`| H!D!B˗? 4xaB 6tbDM8qĉ'"7a|8/߿_߿| '/߿_/߿ _'(| $H A  <0[p… .\0_|'P࿁7P࿁7p|o@$XP`>$XA .dC0_>'P? O`0߿|o|߿o|O/߿(߿/߿| oO@ ,!B"D(0_|"D!B"Dp`>W0|̇0|ˇa| H*\ȰÇ#'a| 70߿|O`/| ̗O` ̗O`_> '0_O`_'a>%̗/D%Jo` O`#o`$W0_|I(QD#0_>˗O`O`_| 'p`G|/?_'P`'P| H0_> $H 8`A&T80_| .\p… _| Oo`> 7|? ? 4xaB 6tbă$:'Qā$2'0_> 1D ˗OD%F70߿| '0_|70߿|(QD%JO|%J/D'Q|!(Q"|I(QĈ/_| W0| /ā$J(QD!0D%J(a>I(`|$J(Qb|0@/߿70? O@O@ DPB >`>I(QD1D ˗OD%J(Q"|%J(QDItOD%J0D$JH0_|%J(QD(`>/߿ ˗O`|G|O (߿'p "L` [P`|_|˗ϟ|/?/_>_|˗ϟ|˗/?/_>_|˗ϟ|[p` ˷p… ˗o… .\pB'`>߿ <#o`;H0|wP``>`;x ;x| H*\`>$X|$XA .d!|g0|pa /߿| ̗/|70߿|̗O`O`>/_|>|/Ç=LП <0… O@ w;x/,h „ 2l!|߿'P`>  ,A 70_|(?˗|@ o ,h „ [Pa O@ DPB8`A$XA .dC0C@ H*\`>$X|$0(0,h „˧PB *TPB *T`> *TPB *TP| *0 ?$XA .dx? 4H0'p`>? 4xaB)TPB *TPB *DOB *TPB *T0 H /@,h „ 24 $ ? O@ D`|*TPB *T0_|8` ߿O@ w$XA .dh0,hp` 'p $/_ ,X` <0… :lo`> ;`{0Â`> 80߿8`A&OB 8`A&T(߿8@ O H*\`>$X| O| H| 4hРA˗? 4xaB 6t0|G0|=d|/|/|%70_|70_|˗/߿| ̗/_;0 <0B HA̗/_8`A&T| HO| H| 4hР|'p "Lp!Æ/_70|(| H/_ ̗o`'0|O` H'p  ,X`A /_8`A&TA$X | 'p`>$X|`|w0|qa> /|'0|='`>? 0@ 7`> $ <80BCa>$XA .dh? 4H0 ? 4h0_|8`A&TaC70_ ;`僸0D`> 7p࿁8p`/_#H0_|70_| ˗? 4xa„*T(0B'p "Lp!C8`A08`A˗/B 'p ,h „ 2laA7P8_>0@ HA8`A80,h „ 2l!Ĉ#8q|M80_|'F7a/_|'0_>/| ̗/߿| ̗/߿| ̗/߿| ̗/|˗O`|'0_| #08`AO| HP |O@ DPB >Q(R`>8`  <0.To… .\p… 0 HO@ O@ DPB >/_G0? o'p O@ DPB >`>I(QD'p`>$XA 'p | H*\ȰÇ O`> /_|/|#F1bĈ0_Ĉ#F!|O@ DPB >QD O`|G0|Q<"E!G"E(2G`|Ǐ_|˗|/?~/_>~Ǐ_|˗|˗/?~/_>~Ǐ_|˗|G`>'p "Lp!ÆB(q|˗/_>˗/߿|Q/_>w0_|%O@$XA "̷p|  O@ DPB'p|O|'p "Lp!ÆB(q"|/|`| G`> '0| 0|/a>'p A$XA ̷p|   <0… 'p| O| <0… :|1ĉ'P@߿| HA'`> G?$XA8`AC!|" <0… 'p@$?'p "Lp!ÆB(q"Ŋ#0o8p`>/_>#H0_|0 <0… $XA .dC%NX"|/^O@$X`| 4hРA 7`> 4xaB H*\ 'p A$/,h „ 2l!Ĉ'Rhb/^$ň.&O@ O@ DPB|O@8`A&TaC!F8bE]xŋ]L/| H*\`>$XР|8`A&TaC!F8bE]xŋ]T/E$XA .dx0,hP`| H*\ȰÇ#JHň.^xE..g ? 4xaB O@  <0… :|1ĉ+Zŋ/^|'p "Lp!C HA8`A&TaC!F8bE]xŋ]db>$XA .dh0,h_>$XA .dC%NX|/^x| <0… O@ O@ DPB >QD-Rwŋ/Zwa/_|˗|˗/?~/_>~/_|˗_|˗/|/_>~/_|Ǐ_|˗/|/^xŋ/^ŋ/^|/^xa/^xŋ/Zwŋ/Zwb|/^x`|/^xŋ/^0 <0… :|1bB$XA8? 4xaB 6t(`>8`A&TaC!F8bE1fԸcG8`A&TaC 8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦU1| 拘e> [vZ ̗`>KO`> [_ o࿁ H*\ȰÇ#JHŃ ̗_|O`|˗O`|˗/|/_|'0_|/_ ̗/_+/_'0߿| O'p "Lp!ÆB(q"|QH"E)RH"|'P|/߿/߿o`8_70|/_˗/߿|˗_|/߿| H*\ȰÇ#JHQb+VXbŊ+VD/_|˗/߿| O'P`>˗O`> O _O |/߿/߿_8`A&TaC!F8|UXbŊ+VX"|/| /| '0|O`|/|70| ̗o`˗O` ̗O`bŊ+VXb|(? 480_| H*\ȰÇ#JHa'p`7߿?/?#߿߿_(0_|˗O`/_˗/? 4xaB 6tbDs`>/E)RH"E)R,O`|)&G"E)RH"EG`>#o߿7 <0… :|1ĉ+N̗/_> gѢE-ZhѢ|̗/__>˗/߿|'0_|˗_>-ZhѢE-ZhѢE-ZhѢŁ(#O`>_`70߿|YhѢE-ZhѢE-ZhѢE-0_| '0߿|_|__|-ZhѢE-ZhѢE-ZhѢEO|'?˗o`|˗/|8`A&TaC!F8bE1fԸcGA0|僘`|!C 2dȐ!C 2dȐ9'1|"#/_Ȑ!C 2dȐ!C 2$|!C 2dȐ!C 2dȐ!/˗_|/_|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪ5k> o H*\ȰÇ#JHŋ3jȱǏ C^П 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? 1@$? 4xaB 6tbD)VxcF9vdȋ H`>$XA .dC%NXE5nG!/O@|'p 4h_|8`A&TaC!F8bE1fԸcGAП 'p| $H A'0_>$XA .dC%NXE5nG'p A80˗/|/_|7`>߿o` <0… :|1ĉ+Z1ƍ;zx? /_/|/|70@˗O`| <0… :|1ĉ+Z1ƍ;zx1@$? O`|/_|O_?߿| <0… :|1ĉ+Z1ƍ;zx1@$? _>/|O`>/|˗O`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?bO@'p`O8߿_o`? H*\ȰÇ#JHŋ3jȱǏ'p A8`A&T/_|8`A&TaC!F8bE1fԸcG1O@8`A&T(0|8`A&TaC!F8bE1fԸcG3O@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? y?  <0… :|1ĉ+Z1ƍ;z2|˗_|˗_>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYf`> 7? 4xaB 6tbD)VxcF9vdȋ8 A$XA .dC%NXE5nG!1O@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? y1@~$? 4xaB 6tbD)VxcF9vdȋ8 A̗/_? 4H0_| H*\ȰÇ#JHŋ3jȱǏ O@'P`8p@80 <0… :|1ĉ+Z1ƍ;zr @~,? /_|/_'P8߿/߿ /߿8`A&TaC!F8bE1fԸcG)O@'P`|˗_|7_/_'0߿| O`|˗/߿| H*\ȰÇ#JHŋ3jȱǏ'p A o? __߿?/߿| H*\ȰÇ#JHŋ3jȱǏ'p A(0_>O`_>/| ̗/|O@ DPB >QD-^ĘQF=~ O|˗O`/߿|O`|_˗o`|˗/|8`A&TaC!F8bE1fԸcG+O@'p "L`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?V 'p "L`>'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?Z O@ DPB >QD-^ĘQF=~"@~,? 4xaB 6tbD)VxcF9vdȋ/߿|˗/߿| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μXУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(V@;;PK=7yftfPK+AOEBPS/img/describe.gifGIF87ak?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,k H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@6O@ DPB O@ DPB >QD-^ĘQƃ8r1G9rȑ#G9r#Gqȑ#G9rȑ#NJ8r1G9rȑ#G9r#Gqȑ#G9rȑ#NJ˗/| '0_|#O`|(_ |߿7߿ o O| H*\ȰÇ#JHŋ3jx0|_| '0_ '0_>o`| ̗_> /| '0|qȑ#G9rȑ#NJ/߿|O`/| 70_|'0|#`#`W0G9rȑ#G9r`>_`>/|'0_O`> ˗`> o`>8rȑ#G9rȑDO /߿|_O| ̗_ /߿oo ߿O|(?˗? 4xaB 6tbD)VxcF`O`| W0_|(߿|/߿߿|_>$o`>/|/,h „ 2l!Ĉ'Rh"ƌ/+`O`| ̗`|O`/| /|o`/|̷qƍ7nܸqƍ/+`| /|˗`>o`|#_| ̗/_ |?˗O` o| H*\ȰÇ#JHŋ3j`7n`7nܸqƍ7nX1|7n/|7nܸqƍ7nܸb>6nܸ_>6nܸqƍ7nܸq#|mܸq|mܸqƍ7nܸqF ۸q ۸qƍ7nܸqƍO@ DPB O| H*\ȰÇ#JHŋ3jd`7n|oƍ7nܸqƍ76g0ƍ7>̷qƍ7nܸqƍ 'p H*\ȰÇ8`A$XA .dC%NXE#;`>5ja>5jԨQF5j(0|iԨQ|iԨQF5jԨQ|iԨQ|iԨQF5jԨQ#|O@ DPB 'p ;xP`>$XA .dC%NXE拘`>5:w1_|5jԨQF5jx1_|iԨa"ӨQF5jԨQƋ"3OF]1F5jԨQF5^1|5jtb>4jԨQF5jԨb> C/_> /߿ _߿@ @ /A  AO@ DPB >QD-^ĘQa> ;O`|G0_| g0| ̗O`> O`櫘ob>5jԨQF5job|70߿|G0|G0| g0|70_>(71F5jԨQF5^W1_|˗o`#a>/_> #`;0 O@ O@ DPB >QD-^ĘQa>˗/? ߿O@ G0|||(?O@ DX0,h „ 2l!Ĉ'Rh"ƌ a̷0߿|G0|G0|G0_| w0Ƈ4jԨQF5jԨb> 70߿|W0|G0߿|`/|i|OF5jԨQF/Ø`| O(|?˗_>70̗/_>7p`>$XA'p "Lp!ÆB(q"Ŋ/b̨0|5jtO|5jԨQF5jx1|5jtO|5jԨQƈ H*, H*$+X`A8`A&Ta:lϡC:tСC:ϡC3ϡC[ϡ|:t!|6СC:tСCСCСC-P!|,h „ 2l8? 4xa| H*\ȰÇ#J0EGb| QH"E'H"E)R81EGb| QH"E'H"E)R81A ߿ @/_  GP`| O /߿7P 8p| H*\ȰÇ#'QD%J(Q+O`> `>70| g0|+O`| /| '0_SOD%J(1b>%J(QD`>`> /_|%G0߿| /_|G0߿|O`>˗0|I(QD%J`>%J(QD`> G0| W0߿| ̗`+/_ O`>/a>/_| H*\ȰÇ#2̗`>%J(QD8@0@ H|'P`080|(߿O@ /߿(?8`A&TaC!F? 4xaB 6tbDw0| G0| +_`K_>O`>/a>&N8qĉ'7qĉ'N8a>+O`> `|'0_|%70| ̗_> '0| '0|˗0|'N8qĉ 8qĉ'N81A߿|G?˗o |? o|0@|߿(0,h „ 2l!Ĉ'Rh"ƌ)۸`>6noƍ7nܸqƍ7R̷q#|m80ƍ7nܸqƍ7noF ۸q`7nܸqƍ7nH1ƍ̷q|7nܸqƍ7nܸb 3oƁ6nܸqƍ7nܸq#E$XA O@$XA O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾ+`> 4xaB 8@$X Hp |,h B H*\ȰÇ#JHŋ3̗/F [O| ˧a|5jԨQF5j0F)̧`4F̗OF5jԨQFӨb4̇0F4jԨQF5jԨ1a>-C`>0'p|#H_>  AO@ DPB >QD-^H1_Ø/|'0_>o`> ˗0_| e̘1cƌ3f̘1|`>8߿7߿'p`|˗O`|'0_|8_ ̗O`(0 o/_|'0_|0@߿| H*\ȰÇ#JHŋ`>/߿|˗O`_|˗_/߿|O`'0| W0|70|70|/_|/_|˗_|/߿|/_>˘1cƌ3f̘1cƅ#/|/_>_ /|'0|_ G0|'0߿| '0_|/|'0_>߿/߿/߿@  <0… :|1ĉ+Z`> O|_| O/߿/߿| /|˗_>0@7p@ '0|o|O@ o |(߿'߿߿O@ <0… :|1ĉ+Z1a_| ̗/| /߿|O`/| /߿|#` O`| 70_`|'0_/_>_˗_ ˘1cƌ3f̘1cƄ+/_> ___ O/߿/߿/o`˗/_O`˗/߿| ̗/|'`>'P`'p "Lp!ÆB(q"Ŋ/bl/cƌ̗a>2'1|3f̘1cƌ3f0_Ɖ  $`,`A8`A&TaC!F8bE1R̗1#|eDae̘1cƌ3f̘1|3Z̗0_FH1_3f̘1cƌ3f/_ƌ)̗ae/cƌ3f̘1cƌ3 ̗/_ƌ ˷0_F˗/|e̘1cƌ3f̘1cF H*D 'p O@8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+wր;;PKwPK+AOEBPS/img/allocat.gif& GIF87a{?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,{ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣE8`AO@ DPB >QD-^ĘQF%˗#|yѣG=zѣGqa|=zѣG=zѣ|H0G=zѣG=z1_|<ѣG=zѣG=rg`>'p| ̗/|˗O`|O@ DPB >QD-^ĘQF3/߿|/|_| /߿|ϣG=zѣG=zԘ` g0|O`'0|=zѣG=zѣ| ̗o`>/_| /? |,h B H*\ȰÇ#JHŋ3jܨ1_| '0_|'0߿|'0߿|o`> Ǒ#G9rȑ#G9"70A `>/߿| ߿| H O@ DPB >QD-^ĘQF 81LJ8rȑ#G9r"|,h | O@$X`| 81F6nܸqƍ7nܸq|1w0ƈ6N̷qƍ7nܸqƍ滘a>6>̷b7nܸqƍ7nx0|'p 8p|̗? 4x| &Lp`>$XA .dC%NXE5̇0_>cO!|,h B H <0… :|1ĉ+Z1ƃ˗o`>۸q|7nܸqƍ7nܸ`/|w0ƍ%۸qƍ7nܸqƍ;/߿|!W0|7noƍ7nܸqƍ3'p A0@O@ H ,h „ 2l`> O@ DPB >QD-^Ę1a3/|!G0|5ja|5jԨQF5j81|G0| ̇0F+惘OF5jԨQF#[b>˗"|,h „8 | ? 4xaB 6tbD)VxcF滘a/|iĘ/_"ӨQF5jԨQƇ滘a>0FK/b>5jԨQF5j|a;oa>4j<a4jԨ"|,h „ 'p "Lp!ÆBta1g0| 1|w0|E1bĈ1bD1bĈ#F\a1g0_|0_Ą ;`"F1bĆEa|#F1bĈ 1O@ O@WP`| ̗/@O|˗/|/_'0߿| o|8p`>$XA .da|>|x0Ç>|Ä>|X0|'0|/߿| ̗/|_|_/_o`>Ç>DÇW0|>|Ç{|s` _`/|70߿| 70| {Ç"C ;Ç>|!|>/|(߿ ߿8`A8`A&TaC̗/߿|˗_|˗O`| /_|_|˗/|G0Ç>|Ã>|0|g0|/_̗O`/| /_| 0a>||/_>˗O`|˗_|O`˗_˗/߿|˗O`>|ÇC3`> O`|˗_>'P| 80߿ ߿| H'0| /_|  <0… :|`#0|#Fd/|#F1|3`>0@//|O` ߿|| H*\ȰÇ1b|  |'p ̗!B"D!B"D!|̗_|_/߿|o`70_|˗/| ̇!B"D!B"DP`>"Da>!!B"DX0BC!B"D!Bw0_|˗_>/_>0@7p|7߿_>$XA .dCE`1"|1bĈ +/bĈ+/bĈ8`A&TX? W` ,X` ̗`A ,X` ,(0_ ` H*,'p`>$XP`4hРAO@ ,/_|"D!B!D!BC80B"Dp`|Cx0_|"D|!D`>!D!BC/_w0B"Da|!D!BC!B ̇p`>"Da|C |,h „8`AC80B"DP`> ̇`>"D!BC!B"D0A ߿ @/_ ? 4xaB 6tbD;/|̗/|̗O |(߿'p| G ? 4xaB %̷p… ;`>+o`/|%̷0… .\p… .\P`70| '0|#`>[(0˗o… ̗/| .\0a O`>+o`|˗0| .\p… .\pB)w0_|G0_|/_C`> [/B H*$O@ DP|g0_S/_> /a [p… .\p… ̇0߿|O`>+/|`>o|̷p… .Da .L_  'P o7_>$XA .dC%C/|`> w0_#0@߿ #| H*\`6l8`> O /|G|/A8`A&TaC!F8q 'P|߿'P`|0@߿| (`>'p Hp ,h „ 2<0'p "Lh0_ O`#/| ̗/߿| ̧PB *TPB *TP!| 70߿|70_/|̇0_|G0| *TPB)̧PB |_#7`>  <0… :|1Ć+`/_|˗/|`>'P߿|'p|#| H*\`6l0| 6lh0| 6lذaÆ 6lذ|5lذ| _kذaÆ CaÆ kذaC6lذaÆ 6lذaÄ6l`c!|,h`A$XA%L0a„ K0a„ O@ DPB >Q(R`S/ņQ"EQ(1E)RH"Ņ(RaKb|#H"|)JG"E)RHqa>%K/a>81E(RH0EQH"E)R\"E;a 0Ň(RH`> 4xaB8`A&TaC!F8|,h „ 'p  ? `>4/A gРA O@ DPB >QD-^ĘQFw0_|'`>(0_|˗_|O@ ,? 4xaB 6tbD)VxcF9G0|˗_|˗`|O`|ucǎ;vرcǎ;vD/| ̗o`|3o`+|:vرcǎ;vرcDž;O`|O@70߿| 0 <8? 4xaB 6tbD)VxcF9>w0|˗/| '0߿|ױcǎ;vرcǎ;v`>˗O`|3/_| W0_ǎ;vرcǎ;vb>رcǎ;vرcǎ;Fg`>8| H*\ȰÇ#JHŋ3jȱ|ѣG=zѣG=ztϣG=zѣG=zx0_>yѣG=zѣG˗/|ѣG H*< <0… :|1ĉ+ZT0 4 <0… :|a#&1bĈ#F1bĈ#F1bĈ#F1a#&1bĈ#F1bĈ#F1bĈ#F1a#&1bĈ#F1bĈ#F1bĈ#F1a>O`| '0_|0 @ ? 4xaB 6tbD)VxcF9rg0߿|O`|70|#o`>+cǎ;vرcǎ;v` '0|#o`|`G0_ǎ;vرcǎ;v1߿|/߿| '0_70|70_|;vرcǎ;vر| _O`|o` 0@ ? 4xaB 6tbD)VxcF9VO@ _> 70|'`>߿| _ O H*\ȰÇ#JHŋ3jqa|3_> '0_>_| G0|`>uرcǎ;vرcǎ/| '0_|/_|'0_|o`|)ױcǎ;vرcǎ;̧0_ǎ-ױcǎ;vرcǎ;̷0_ǎ-ױcǎ;vرcǎ;̷0_ǎ1ױcǎ;vرcǎ;̷0_ǎ1ױcǎ;vرcǎ;̷0_ǎ1`>'p 8`A'p "Lp!ÆB(q"Ŋ/b0|5"0|9̗O|5jԨQF5jԨ_ H*<+X`+X_ ,XP`| H*\ȰÇ#JHŋ32̧Qƃ[Oa>iԨQF5jԨQc|5j5"0_|A̷0|5jԨQF5j0|5jL` ;o`>/_>W0_|˗_|iԨQF5jԨQ|iԨqas`/߿|˗`|O`|iԨQF5jԨQ#|˧QƆ+/|;_>'_>/߿| /,h „ 2l!Ĉ'Rh"F H*\ȰÄ H | O/|_> O@ H*\ȰÇ#JHŋ;/cƌa>;_>`|'0_| e̘1cƌ3f̘1|e̘1|w0|/|˗`| '0_| e̘1cƌ3f̘1c|3f1_|Y0|2f̘1cƌ3f̘`3fa>"'p `8`A&TaC!F8bE1̗1cƌ-̧0_F˘1cƌ3f̘1cF2f̘Qb>x0_>2f̘1cƌ3f̘`3f`| e,b3f̘1cƌ3f$/cƌ)'p`>$X|,h@$XP`>$XA .dC%NXEe̘1cƌ˘1cƌ3f̘1cF2f̘1cƌe̘1cƌ3f̘1|3f̘1cƈ2f̘1cƌ3f̘Q`3f̘1c|3f̘1cƌ3f`3f̘1|e̘1cƌ3f̘a>e̘1cƌ+g0_ƌ3f̘1cƌ8`A&TaC!F8"C$XA .dC%NXń0bĈ#F!È#F1bĈc|1bĈ#F'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t (ѢF"Mj3 ;;PK`FW+ & PK+AOEBPS/img/objcrea.gif[,GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ'p O@ DPB > |,h ,h „ 2l!Ĉ'Rh"|'p O@$XA .dC(? 40@ H*\ȰÇ#JHE]/_/^xQa|.̗/ŋ/^xŋwQb|/^x|.&wŋ/^xEwa/^xa.wŋ/^xņwa/^x`>.xŋ/^x|8P  ̗/| ̗/߿|˗`>$XA .dC/_|/_|˗_|G0_Ĉ#F1bĈ#F1a˗/_̗_/|˗O`"F1bĈ3_|/_>/_|˗`#F1bĈ#F1"| ̗o`/߿|/_>1bĈ#F<`_|/_>3/bĈ#F1bĈ#Fh0_>70|˗/_||,h B H*\Ȱ|O`'p?8`A& <0… :|1ĉ /|˗O`70߿|/_>(1_+Vt/߿|'0߿|/_>_>*V/_Ŋ+VXbŊg`>'p|8_ <` &L0a„ #`O`|˗/߿| g0_„ &? 4xaB 6tbD'+"Ń(R"E+"| Q0E)RHB$X A$(0_ ,`>8`Ab>1w0D I0D Ida$F'Q|%J(QDX0|I0D I0D;Ob|%>'QD%J(`>1̇0_> 'Q|%2'a>'a|%B'QD%J(`> O@ 7p/_>$XAK0a„%L0a'P࿁7P 8p|/,h`c!|,h | ḨPBG0| W0B O@ O@ DPa> *TPB *TPBC/_a> *TPB )TPa|70_| ̗`SPB *TX0B *TPB *TP|̗_#`> *TPB )TP|70_| W0|)TPB *,OB *TPB *Ta|o`> 3OB *TPa| *Tx0_ @'P (08`A&TaC:tСC:th`> 'p? / O@8`A&TaC H`>$X@$ G_>#`> O@ DPB 'p 8`A&TaC!"w0߿|O`>;/bĈ#:0_Ă`>'0|w0_Ĉ#FTa#F1bD3`>a#F0|;O` ˗/|#o`>"F1|E1bĈ#̷0_Dc/_|'p "Lh? W`A ,80_,X` `W` H O@,XP`>$XA .dC-`>˗`|1b|拘/| Ela̗/|"Fl/_>"1bĈ#Foa1̇0_| 1b| E1|ca1b拘/bĈ#Fq`"0| )1bD拘/b>"60| )1bD拘/bĈ#Fq`"0| !g0_Ĉ +`"拘a 1g0_|` 1,h „ 2l!ā'p  'p A W|W_ +X` +80_ ,(0_+XP |,h A$(0_ | W| W``'p "Lp!ÆB/bć 3`˗O`|˗_|_|/߿|˗/_>˗`"1_Ĉ +`>;/_>0 _|'p7?@8p| H*\ȰÇa|970|/_/߿|O`˗_˗/߿|˗O` /_|#F4``|/_|w0߿|/_>/߿|/|E/bĈ#Fq`#a>;O`|G0|̗_>˗o``>E/b#̗O`>/|/_O`/@_(0|8p8`A&TaC!1b{08_> /_|#(0߿|˗_>'P8߿'p 4X0A 4hРA3hP |O70? O|_@8pO@ DPB >80_Ĉ{`/__> 70߿|/_>˗O`>"1_Ĉs/|'0_|70__|˗O` /_| 1bĈ#F/bĈw0|'0߿| ̗/| O8p`߿8`A<80` <0… :|q`#0|#Fd/|Eaa>"1bĈ#F80_Ĉ ka8? 4x`>C_>"D| C!B ˗/_,X | H*\ȰÇ1b| %1bĄ""1_Ĉc/a#a#BO@ DPaA$(0_ ,X`+X_,X` ,X` ,/_O@ DPa| )̷p… -\H0… .\/… .o| .\P`|-/… .o‚̷p… C/-\p!| ̷p… ˷p… [/… .$/|-$/_ .4/_ [h0… .\/_-,/_ ./_ [p… [p…-o… ̗/B HO@ !"D!B ˗!‚ HO@ !B"Dp`>"D| O@ DPB >a$J(QD%"'QĆ$JH0|%J(QD 惘OD%J(Qb|%Jd |߿| o ̗/| G`>O@ DPB >a>$J(QD%&'QĄ3`>+o`/|!70|%J(QD;`>%J(QD 'Q3`#`W0߿|G0D%J(QD#OD%J(Qb|I`> O|7080_| _'p "Lp!ÆB(q"Ŋ/b̨q#A$XA g`>߿8@ O| (0@8`A&TaC!F0ĉ'N8qĈ&N|_> O`>[/_|!G0ĉ'N8qD&N8qĉ'F7q|'0| g0_/_8qĉ'N8qĉ'N8qb|'Ng`>/?O@7`> @8`A&TaC!F8bE1fԸc=zѣG=zb>yѣG=zѣGyϣG=zѣG=z0 <0‚ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊK6"|,h „ 'p "Lp!ÆB(q"Ŋ/b̨q#G:vcǎ;vرcǎ;v䘯cG:vرcǎ;vرcG:vcǎ;vرcǎ;v`/_| ̗/|'p࿁7P O@ DPB >QD-^ĘQF/_>/߿| 70_>o` رcǎ;vرcǎ93_| 70߿|70_| W0|#cǎ;vرcǎ;v̘O`>_>_70| 70_|;vرcǎ;vر|/߿| 70߿|̗_+O |'P`>$XA .dC%NXE5nH`>'p`'0|7_> _'P`>(`>'p "Lp!ÆB(q"Ŋ/b̨q#G̗`'0|o` '0|o`ױcǎ;vرcǎ;̇0߿|70|O`| G0|˗o`̧0_ǎ;vرcǎ;vX0|; ̧0_ǎ;vرcǎ;vX0|; ̷0_ǎ;vرcǎ;vH0|; ̷0_ǎ;vرcǎ;v80|; ̷0_;vرcG H*\p!08` H ,/A 4hРA g`> 'p`>$X|,h@$XA .dC%67qĉ %̗`| s/| M8q`>w0|8qĉ'N0ĉ'.̇0| I0C$XA O@,80_ ` /,h „ 2l!Ĉ8qąc/a57qĉ 5̷0|#8qĉ'N0ĉ'.g0_>!̗0_|17qĉ 10| g0_|M8qĉ'NL`|˗/|(߿O0@ O(߿'p`o/8p| H*\a>;oa װaÆ 6lذaÆ `/|70| '0|̗`O` o`>/_|G0| 6lذ| w0| g0_|˗O`>˗O`|G0_Æ 6lذaÆ 6_ O`| G0|!G0|g0_| ̇0|5`> /_|/|װaÆ 2w0?8 | W0_˗_|_|/_> O@ DPB >Q| +_>`;o` /|!W0_> g0|`7qĉW0_> `_>/|7qĉ'N`> O|0@ /AO/߿@7p@$H`>'p` / H*\Ȱà H |O|70߿|O`| 08`A&TaC!F_ o`| G0|!G0|W`>߿8P`>#H| G_|˗O` G0,h „ 2l0߿|'0_|/_>3_>`:tСC:tP`> /߿|O`/a_> 70| '0| 70|˗/_> #ϡC:tX0|70|'0_|3_>˗/|9tСC:tС|˗O`|˗/@ 70߿'p|o | ߿|?/8p@o7P`>$XA .d| P`=|Ç>|a>|0|ˇ0| {Ç0|8P $? 4xaB 6tbD M8q|1̗0&N8q| )71b'N8qĉ M8q|)̷0|'N8q| 17a|'N8qĉ8qąg0_9̗oĉ'N/|Mdoĉ'N8q"C$XA .d? O| H?$X? 4xaB 6t`>'p 8`A'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~*O@ Dh? O@8`A&0 <0… :L'p`>$X| <0… :|1ĉ81|X`+Vx0_|sa+VXbŊ81_|U80_Ŋ+V<a>0_+VXbŊ 81|U(0_Ŋ+V<a曘bŊ+VXbł*Nw0|U(0_Ŋ+V<`k`+VXbŊ +0o`߿80o| <` o_ /߿_o`>0@ o@/|8߿ o|(0 8p|O@ DPB >QD w0|/|)70|8| ? 4x!|70߿| 70| ̗O`'0߿|3o`> K/߿|`O` o`>˗/߿| <0… :|1ĉ`>O`|̧0|/߿|/|'`;o`/߿|O`|G0|`>'0|70|9G0|˗O` XbŊ+VXq`| ̗_>`> w0| g0_E70߿| 70| /߿| /߿|O`_` 0_|/_8`A&TaC!F8!|O/@ /߿  (?0@ H? 48`> 'P |(߿߿(߿|/߿'߿8`>(| /߿|70|08 AO8`> O@ DPB >QD` /߿߿'p |Gp`|'0A A Gp`70߿|o`>O`| '0_|#(0| A/|o`>#H| GP` /A? 4xaB 6tbD;O`70߿| G0| w`> 'p` 7p 7p| o`o`O`>'0|/o|_> 7_ 70|7p`80| 7p`  <0… :|1ĉ;O`>˗/|0@ o|8p@80o o |_߿|/߿_GP /? ? o`˗/_> G AG A#H`>$XA .dC%J̷0ĉ7Q`$[oĉ'Fw0_|M0ĉ'N8qD8Q`>&0_| M8qĈc/a8qĉ'N1|' ̗0|E0ĉ'Na>0_>&N8qĉ'F0ĉ)0_"coĉ'F̗0_kb'N8qĉ1O@ Dh? O@8`A ,ϠA$XA .daB$`>'p 8@$XP`>$XA .dC%F7qĉ拘oĉ'N8q|'N8qĉ#8qĉA7qĉ'N8qb'N8qĉM8qā 8qĉ'N8_'N8qĉM8qD8qĉ'N8Q`'N8qĉ 7qĉ C`|'N8qĉ'w0ĉ'N8q7qĉw0|'N8qĉ'̗`'N8qD H*\ȰÇ#JHŋ32O@ DPB >b>%J(`>%J(QD%*'QD%J(`>%J(`>%J(QD%* <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4?СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڥ;;PKH`,[,PK+AOEBPS/img/dcldbase.gif' GIF87aD?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,D H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ'p "L 'p "L? O@ D8? O@ DPaA$XA .dC%NXb>3Ϣńg1b,ZtϢE-ZhѢE Y0|-&̗0E%gѢ|-ZhѢE-ZTϢE h1a>,Z̗0EYhѢE-ZhQa/|˗o`|˗`|K`'0_|˗O` ̗/_>w0|˗"|̗/_ Oo O8`A&TaC!F8bŊ G0|+/߿| O`>˗/a> '0߿| /_| '0_>˧0|˗b|̗O`̗o`|o`| ̗/|-ZhѢE-Z̗O`|`|/_`|G0_+/|˗/| g`>'p| ̗/? @7_>̗o`> /|'0|70_ <0… :|1ĉ+N/| '0_>)̗o`>˗0|̗o`|G0_>/_>˧0|'0_|W0_/_|˗O` +_> /_|'0_|'0|/|hѢE-Zhb| 'P(@$/_|̗/_̗|'p?'߿o'p|GP`>/_>/|_|/A˗|_|_|(߿|o@ /,h „ 2l!Ĉ'R`> O| ̗O`|70@˗o|8p | O|˗o|˗o|/|8p?˗/߿| ̗_|(_  (?_| ̗O`|˗O`|˗_8p? <0… :|1ĉ+2/|_| ̗`| '0_%G0߿|_| ̗/_ /_>˧0|'0_|W0_/_/|/|/|/|_|˗O`|hѢE-Zh|O|G0߿'p|/_|(? '0 o 7p /|/_>#(0_ (_'0 /߿O|7p|8_>$XA .dC%NXb>3Ϣńhq`,ZtϢE-ZhѢE Y0|-&̇0C O@ w_CϢha>-ZhѢE-*gѢ|Y0_|)˗0EYhѢE-ZhQa>3Ϣńg1b,ZtϢE-ZhѢE 8`A&TX?8`A&T'p "'p "L ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/.l0Ċ3n1Ȓ'Sl2̚7s3ТG.m4 Wn5;;PKe52, ' PK+AOEBPS/img/lobfise.gif5GIF87ar?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,r H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗ 8`AO@ DPB >QD-^ĘQF)1a|=zѣG=zѣG<6ѣG=zѣG=ż0_>yѣG=zѣG!̗ϣ|=zѣG=z|8P  ̗/| ̗/߿|˗`>$XA .dC%NXE5nؑa˗/_̗_/|˗O`0_|9rȑ#G9rȑ#|O@ (0@߿|7߿'p "4? 4xaB 6tbD)VxcF)+|ȑ#G9rȑ#Nj HA HP`,X|'p  ;xO@ DPB >QD-^ĘQ|1w0F6J̷qƍ7nܸqƍ滘a>6F̷Qb7nܸqƍ7nx0| !̗o|6N̷qƍ7nܸqƍC/@O|o'p "/a„  <0… :|1ĉ+Z1ƃG0| -O@ D8? 4xaB8`A&TaC!F8bE1fx0| ̇0|7noƍ7nܸqƍ7/|a>۸q|7nܸqƍ7nܸ`|o`> 3oƍmܸqƍ7nܸqcF$(߿| (`> O@ DPB 'p 8`A&TaC!F8bE1fD` 70|g0F+{OF5jԨQF';O`>a>ӨQc|iԨQF5jԨQc| ]0|UO@ D `'p "Lp!ÆB(q"Ŋ/b80|1̧0_{/_>˧0_|5jԨQF5j1|1̇0_>˧Q#| ȨQF5jԨQF-w1|-̧0F!1F5jԨQF5B̷0| 0_|5"w0_|5jԨQF5j1|1g0_|̧1a K`4jԨQF5jԨb HA Hp` W_W | ,X_ W0_O@ DPB >QD-^Ęq`>0|̗/| O@ 70߿| ̗_/_|˗/@ 7pO@ DPB >QD-^Ęq`>a>+/߿|/_>3/߿|˗_|/_|/_|'0_4jԨQF5jԨb>`>'P`>/__O`_|(0_|8p@8`A&TaC!F8bE1fOF#_o` '0_||/߿(08P`>$XA .dC%NXEӨq`>O`/߿| ̗`| /|˗O``>4jԨQF5jԨb>k`/_>a> /߿_(08p`>$XA .dC%NXEӨq`ӨQa>4jԨQF5jԨb> c/a>  QD-^Ęq`> [Oa>ӘOF5jԨQE$XA O@,X` ,XP`,(0_ ,X` W`+XP |,h@O@ , H8 | O@'p A H*\pa 64a 64/_k(0_ 2̗/_Æ1װ|5lX0| ̗0| k/_Æ 6l0_Æ 0_Æ &̗/_à HO@ !|",`>g0B C|C_>"D!B;0@/߿7?70_| 80O@ DPB >a>$.g0Ć 擸0| %W0|!'QDW0|70|o`>[OD%J(Q| I\`> 'qa>1̗aKOD;`+`>W0߿| -'QD%J(`+/_g0|(_(`>(0/_> H080 o ̗/߿|˗/8`A&T|g0_ K/_> /a kذaÆ 6lذaÆ'0| '0| O` ``>g0| _3O``>6lذ!|Oo8 |'P`o|O@ DPB >Q|w0|'0_`+/a>;o` C`#_/_> +oĉ 8@| G_>̗|$`> 4xaB 6tbD 'p|_> O@ /#/A8P ˗/|#H`>'p A (?|'P | O@ DPBW0|70|O`|K`> 2dȐ!C 2dȐa|` @ ̗o'0߿|'P (0_˗/? / G_| |'0߿| G_>'p "Lp|O|`'P`| O'p`'p "Lp!ÆB(a`+`+_#_3a>;`>3O`˗`>&N81|'No`'N8qĉ w0|o``+/a3/|̇0|970|oĉ 8q|'N8qĉ' w0_|˗/|3` /_|(? o'`> A A  <0… kذaC6lذaÆ 6lذaC6` 3aÁc/a5lذaÆ5lذ| 6lذaÆ 6lذ| g0_Æװ|1̗0_C6lذaC6l` 6lذaÆ 6lPa 3a kp` p` 6l0a 64aÆ 6lذaÆ 6TaÁ kذ`>6/a|k/_|6lذaC H*, <0… :|1ĉ8`A'p |,h`AO@ 80,(`> O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśWF$XA *O@˗`+X`A H ,hP`|'p "Lp ,/_| ,(0_ O@  <0… :|1|%JLa|˗/|/_>{/_/_$J(0|#/_>/_|˗O|(QD%JdOD )̗oa0_>k/|(Q| -̗a|5'Q|%J(QD I(1a[Oa$̷0|I(Q`[Oa$JOD%J(Qa>'0@ o7p࿁7p`߿| (0A #H_> #H_> A$/A#H0A /߿|7P|?߿(? (0o80 _8`AO@ DPB >1|O`+o`o`/|Ė0_|-0_|g0_|W0_>70_> ̗0|!0| a#F1bD _>/| '0_| ̗/_ ;/|g0|70߿|/_惘`> ` 70_|/| _3`/߿| ̗/|/_|/_>'p "Lp!ÆBlO`>O`#a> o`>+`>" 70|'0|_|O`|'0|g0_|W0߿| ̗_> ̗O`/| 0|/߿| /_/߿|/_>/bĈ#F1a _>  (0|0@ /@ /A#/߿| '0߿|//A #/_>˗O`'P|/߿| @/ /_> G0߿|_|O`>'0߿|`>8`A&TaC'p o`O` o`> '0| 08`A (? O@ /_|0@ ߿ O@'p@7P`7P`> O ߿| 8`>'p 8P $08_'p|o`/߿o@ H*\ȰÇg0|o`> o`'0|W0߿|(?#/_> G_70| /|_> G_|#/߿|O`|_'0A/A /_> G_|_|O`O`'0|O@ DPB >x0߿|˗O`>`> ߿o`'p` 7p7_o|o@ /߿@'0o| o|˗|߿|_ ߿(08p/|7p`7p|/_| `>/߿| O|O@ DPB >0_Ĉ;/| 0|;` 1b|E`>1a#F1bD"F0|Ca".̗`1bĂ/| !1b|#F1bĈEa> Ka"*̗0|E`> Ka"F$J(0|0_=̗O|$J(QD'p "LP!08`A  O@ 'p (? O@ DP@$8`>'p (? $0 t!PK+AOEBPS/img/close.gifGIF87aH?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,H H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠC O@ O@ DPB >QD-^ĘQF=̗c|?~Ǐ?~q̗Ǐ?~Ǐ?~|?~Ǐ?~#|Ǐ?~Ǐ780Ǐ?~Ǐ?~1|/|'0_|3Ǐ?~Ǐ?~Ę`>/_| ̗O`Ǐ?~Ǐ?bg0|˗/߿|/_|}Ǐ?~Ǐ˗`/_|˗/߿8`A&Tx? 4xaB 6tbD)VxcF`>/_| ̗O`Ǒc|9rȑ#G9rqc>˗_|/_|˗_|qh0G9rȑ#LJ H*, H'p A W`  <0B8`A&TaC!F8bE ]0|'c` ](1ŋ/^xŋxa>.N0|xqb/^xŋ/6w"|]oa>.&w"|/^xŋ/^d`| '0|/_>#/_3a|#/_/_|-̗0_xb/^xŋ/2g0_/_|70| ̗_| w0_˗o`> '0߿|'p | G|$H AO@ DP2dȐ!C 2dȐ!C 2dȐ! g0_>̗o`>G0߿|3`|˗O`>G0_>c(`> 4? 4xaB cȐ!C 2dȐ!C 2dȐ!C g0_> ̗`|`|-70|+/|/|`> 2dȐ!C2dȐ!C 2dȐ!C 2dȐ|O o8P`|#/_| G0߿|G_|̗O`|'P G0A8`A&TaC=|Ç>|Ç6O@80_/ '0| _|080_'0/_|0'p "Lp!Æ'p H*\ȰÇ#JHb| W0|+O`|O`>˗oa'0_ 70߿|/|gѢEYhѢE-Zhb 'P?7P|@ (0|$/_> o7P G0A8`A&TaC=|Ç>|Ç>TÇ !| =|Ç{Ç>|Ç>|0Ç3C[08` H*DO@ DPB >QD-2w"|]oa̗a!˧0ŋ/^xŋxa>.N̷0| xqb.^xŋ/^0ŋ wqb[/a-Cŋ/^xŋ ]0|'c`>!wb|/|]xŋ/^x!|,h „ 'p |,h B HP` $| ,X` ̗o`| +/,h „ 2l!Ĉ'Rh"ƌ7.G0| 70|/|/_>'0| ̗o |'@`>$XA .dC%NXE5nlo`>`>`>/߿ O|˗_˗/_/_|7p|'p "Lp!ÆB(q"Ŋ/b̨q|s`|̗|/߿'P`| ̗_|/_|8@/_>$XA .dC%NXE5n/C˗_|˗/߿|˗o|˗_|0@'p "Lp!ÆB(q"Ŋ/b̨qc|'0_|˗|_ '0߿|˗O`|'P8_>$XA .dC%NXE5n`>`|˗|7@̗O`|˗|O࿁ /,h „ 2l!Ĉ'Rh"ƌ7Z0|9:Ǒ#G9rȑ#G9*0|'P ,h| H*\ȰÇ#JHŋ3j܈1| q0G9rȑ#G9r0| q0G9rȑ#G9r0_Ǒ|9rȑ#G9rȑcD O@ DP!B$XA .dC%NXE5nG!E$YI)UdK1eΤYM9u ;;PK PK+AOEBPS/img/collatt.gif-GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ8`A&Th? 4xaB 6tbD)VxcF9vױ|;vرcǎ;vرc|;ױcǎ;vرcǎ;vױ|;vرcǎ;vرc|˗o`|8@$/_> | <0… :|1ĉ+Z1ƍ;;O`|+`| ̗_>;cǎ;vرcǎ;v`˗`>Co`'0|;vرcǎ;vرc| /_/߿|70|ױcǎ;vرcǎ;vw0|`˗0_| |/,h „ 2l!Ĉ'Rh"ƌ7rԘ/_| `>߿'p /|'p O@ DPB >QD-^ĘQF w0|o`> g0_`8ȑ#G9rȑ#G+`|G0|w0_|'p`/,h| H*\ȰÇ#JHŋ3jX1_|9Q`>9rȑ#G9r`8O@$X|<(0,h „ 2l!Ĉ'Rh"ƌ7Ng0Gq#G9rȑ#G9r,`>(0G9rȑ#G9rX0|9Q`>9rȑ#G9rȱ`> H*4 <(0,h „ 2l!Ĉ'Rh"ƌ7NǑ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#GO@ DPA$X8`A&TaC!F8bE1fԸqb>8r$|9rȑ#G9rȑc|qH08rȑ#G9rȑ#ǂ ȑ`>qȑ#G9rȑ#Gg`>/߿#߿7߿G0߿'p  <0… :|1ĉ+Z1ƍ̇0|o` O`/|q#G9rȑ#G9r,`>/|G0|/|_>9rȑ#G9rȱ`>#/_`> o`>/G9rȑ#G9rX0|G0_|'p (0߿| OO@ ? 4xaB 6tbD)VxcF''p@|`>#/߿| Gp |,h@$XA .dC%NXE5n`> #`o`| ̗O`8Ǒ#G9rȑ#G9g0|W`> ߿70߿ _>$X8`A&TaC!F8bE1fԸqb>8r$|9rȑ#G9rȑc|qH08rȑ#G9rȑ#ǂ ȑ`>qȑ#G9rȑ#GǑ#|ȑ#G9rȑ#G 3#G8Ǒ#G9rȑ#G9g0Gq#G9rȑ#G9r, |,h „ 'p  <0… :|1ĉ+Z1ƍqȱa>9rȑ#G9rȱ`>96Ǒ#G9rȑ#G9Ǒ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|8`A&T? 4X0,h „ 2l!Ĉ'Rh"ƌ7Ng0GiǑ#G9rȑ#G9g0GiǑ#G9rȑ#G9g0GiǑ#G9rȑ#G9g0|/@'?'p`/,h`>$XA .dC%NXE5n`'0_˧0|o`Ә#G9rȑ#G9r,`/_>˗/a70|̧1G9rȑ#G9rX0| /_/߿| ̗/|w0|9rȑ#G9rȑc|70߿|#o`|%W0|0@ ,? 4xaB 6tbD)VxcF''p@o` ߿|(?#/|#8`> 4x? 4xaB 6tbD)VxcF'3`>70|a+`>8rȑ#G9rȑ#ǂ ;/_|70|!W0|(߿8`A'p "Lp!ÆB(q"Ŋ/b̨q|qx0|9rȑ#G9rȑc|q0 H 4xaB 8`A'p "Lp!ÆB(q"Ŋ/b̨q|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#Gqȱa>9rȑ#G9rȱ`>96Ǒ#G9rȑ#G9Ǒ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0A$XA .d?'p "Lp!ÆB(q"Ŋ/b̨q|q1_|9rȑ#G9rȑc|q1_|9rȑ#G9rȑc|q1_|9rȑ#G9rȑc|70߿| G0A ?(_@o| _>  <0… :|1ĉ+Z1ƍw0_>O`|;` '0_> '0| ̗O`8rȑ#G9rȑ#ǂ ;/| '0_>W0_|/|O`>`>9rȑ#G9rȱ`>_/|+` ̗O`O`>#`>9rȑ#G9rȱ`>_/߿|O(`> _ _@'0@8`A&TaC!F8bE1fԸq"| O/|˗_>|/߿|O`|$O |O@ DPB >QD-^ĘQƉ ;O`| '0߿|;` /߿|'0_>70|qȑ#G9rȑ#Gw0|70߿|;0@o ߿_|@8`A&TaC!F8bE1fԸqb>8r䘯`>9rȑ#G9rȱ`>6'p ,h „ <0… :|1ĉ+Z1ƍǑ#|qȑ#G9rȑ#GǑ#|qȑ#G9rȑ#GǑ#|qȑ#G9rȑ#GO@ DPB(0,h „ 2l!Ĉ'Rh"ƌ7NǑ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#GO@ DPA$X8`A&TaC!F8bE1fԸqb>8r$|9rȑ#G9rȑc|qH08rȑ#G9rȑ#ǂ ȑ`>qȑ#G9rȑ#Gw0_|'P7߿_ _߿| H'p "Lp!ÆB(q"Ŋ/b̨q|70߿| W0|'0_O`|_>9rȑ#G9rȱ`>_G0|70߿|/_>/G9rȑ#G9rX0| /|w0߿| /_|/|ȑ#G9rȑ#G 3`| OO˗/߿|_# A $/,h „ 2l!Ĉ'Rh"ƌ7NO@ /`>#/߿|_>O@  <0… :|1ĉ+Z1ƍw0_| W0|70߿| ̗_>_>9rȑ#G9rȱ`>+o`|(|o`o`/߿O@ ? 4xaB 6tbD)VxcF'3#G8Ǒ#G9rȑ#G9g0Gq#G9rȑ#G9r,`> /G9rȑ#G9rX0|9_>9rȑ#G9rȱ`>8r$|9rȑ#G9rȑc|qH08rȑ#G9rȑ#ǂ 'p "L ,h| H*\ȰÇ#JHŋ3jܸ0|9rl/a>9rȑ#G9r1|9rlOa>9rȑ#G9r1_|9rloa>9rȑ#G9rH`>  <0… O@8`A&TaC!F8bE1fԸ1|7nOa7nܸqƍ7nܸ1|7n/a7nܸqƍ7nܸ1a> H 'p "LH0,h „ 2l!Ĉ'Rh"ƌ7Ng0G8VǑ#G9rȑ#G9g0G8VǑ#G9rȑ#G9g0G8VǑ#G9rȑ#G9g0| ̗/|#0@? 4xaB8`A&TaC!F8bE1fԸqb>/߿| ̗o`>X1G9rȑ#G9rX0| ̗``>8VǑ#G9rȑ#G9g0| w0_#a>qȑ#G9rȑ#Ġ`>8_| G`>/,h „'p "Lp!ÆB(q"Ŋ/b̨qDG0@ ߿'p@$XA 'p "Lp!ÆB(q"Ŋ/b̨q|̗o`/|̇0NJ8rȑ#G9rȑ#ǂ ;/_|˗O`>˗/? ߿| H <0… :|1ĉ+Z1ƍǑa>qȑ#G9rȑ#GǑa>qȑ#G9rȑ#GǑa>qȑ#G9rȑ#GǑa>qȑ#G9rȑ#GǑa>qȑ#G9rȑ#GǑa>qȑ#G9rȑ#GO@ Dh? 4xaB8`A&TaC!F8bE1fԸqb>96Ǒ#G9rȑ#G9Ǒ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r, |,h „ O@  <0… :|1ĉ+Z1ƍǑc|qȑ#G9rȑ#GǑc|qȑ#G9rȑ#GǑc|qȑ#G9rȑ#Gg`>/߿#? 70_'`>? 480,h „ 2l!Ĉ'Rh"ƌ7Ng0| ̗O`S/|/|;c>9rȑ#G9rȱ`>/߿| /|/_> ̗O`0ȑ#G9rȑ#G 3a>o`_>'0_> w0|9rȑ#G9rȑc|!W0|0@ _/|O |/,hp`>$XA .dC%NXE5n08P`>G_>/@ 8`A8`A&TaC!F8bE1fԸqb>+`/߿|_| w0|9rȑ#G9rȑc|!W0|(? //߿|(߿8`A'p "Lp!ÆB(q"Ŋ/b̨q|q0|9rȑ#G9rȑc|q0 H!D0,h „ 2l!Ĉ'Rh"ƌ7Ng0G aǑ#G9rȑ#G9g0G aǑ#G9rȑ#G9g0G aǑ#G9rȑ#G9g`> 4xaB 'p O@ DPB >QD-^ĘQƉ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#Gqȱa>9rȑ#G9rȱ`> H*\0? 4xaB 6tbD)VxcF'3#NJȑ#G9rȑ#G 3#NJȑ#G9rȑ#G 3#NJȑ#G9rȑ#G 3 |_G0˗/| 70@ ߿OO@'p "Lp!ÆB(q"Ŋ/b̨q|!70|_>/| '0_|70_>ȑ#G9rȑ#G 3a70|)70_>O` ̗o`|c#G9rȑ#G9r,`>˗o`S/_>O` ̗O`| 0G9rȑ#G9rX0|G0_|'P O@0@ O|'_O@'p "Lp!ÆB(q"Ŋ/b̨qD`>$HP`| 70|/߿|(߿ <0… :|1ĉ+Z1ƍ̇0_|̗0_O`+_|˗o`>ȑ#G9rȑ#G 3a+0@ /_|˗o`'P|/߿/? 4xaB 6tbD)VxcF'3#NJȑ#G9rȑ#G 3@O@ DX0_8`A&TaC!F8bE1fԸqb>8ra>9rȑ#G9rȱ`>8ra>9rȑ#G9rȱ`>8ra>9rȑ#G9rȱ`>8ra>9rȑ#G9rȱ`> H*\0? 4xaB 6tbD)VxcF'ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#Gqȱa>9rȑ#G9rȱ`>96Ǒ#G9rȑ#G9Ǒ#dž8rȑ#G9rȑ#ǂ 'p O@ DP| H*\ȰÇ#JHŋ3j81|Q`>9rȑ#G9rȱ`>8Ǒ|9rȑ#G9rȑc|q#G8rȑ#G9rȑ#ǂ C/_> | ? 4xaB'p "Lp!ÆB(q"Ŋ/b̨q|'0_/a>ȑ#G9rȑ#G 3`/| q(0G9rȑ#G9rX0|70|%Ǒ|9rȑ#G9rȑc|!̗/_#0@ ? 4xaB'p "Lp!ÆB(q"Ŋ/b̨qD_|$0 <0‚ H*\ȰÇ#JHŋ3j81|_ K#G8rȑ#G9rȑ#ǂ ;/_|80?(0,h „ O@ DPB >QD-^ĘQƉ 80Gqȑ#G9rȑ#Gq`>ȑ#G9rȑ#G 3|9 Ǒ#G9rȑ#G9g0ǁ8r#G9rȑ#G9r,`>q(0G9rȑ#G9rX0|Q`>9rȑ#G9rȱ`> H8`A&T80,h „ 2l!Ĉ'Rh"ƌ7NǑ#dž8rȑ#G9rȑ#ǂ8r0G9rȑ#G9rX0Gȑ#G9rȑ#G ȑc|9rȑ#G9rȑc|9rl#G9rȑ#G9r,#G qȑ#G9rȑ#GO@ DPB$X | H*\ȰÇ#JHŋ3j81|9"̗1G9rȑ#G9rX0|9"̗1G9rȑ#G9rX0|9"̗1G9rȑ#G9rh0_|8߿|7P ˗/@`O@  <0… :|1ĉ+Z1ƍ̇0|/߿|)'0_>`8rȑ#G9rȑ#G C`|/߿|)70|`>8rȑ#G9rȑ#G ̇0|O`>S/_>`8rȑ#G9rȑ#Džˇ0|0@@ /_| |/,X0_| H*\ȰÇ#JHŋ3j_>'P_ _|0 O@ DPB >QD-^ĘQF!'0__>70|w0_ǎ;vرcǎ;v1|'0_|˗/? O|0߿| H*\ȰÇ#JHŋ3jc رcǎ;vرcǎ1h`>8`A'p "Lp!ÆB(q"Ŋ/b̨q#G:v4cǎ;vرcǎ;vĘcG:vرcǎ;vرcG:v4cǎ;vرcǎ;v0 <0… H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^=5 ;;PKv@--PK+AOEBPS/img/lobdisab.gif/GIF87aE?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,E H*\ȰÇ'p " <0… :|1ĉ+Z1ƍ;ZO@$X  <0… :|1ĉ+Z1ƍ;J̗/DŽѣG=zѣG=˗|=zѣG=zcy<ϣG=zѣG=zܘ | O/_>/|? 4xaB 6tbD)VxcF9vd`|˗_|O`'0߿|`>=zѣG=zqc>70|̗_>/|yѣG=zѣG+o`|'0|O`'P 'p "$ <0… :|1ĉ+Z1ƍ`|'0|70߿|/_> 0_>9rȑ#G9ra> 'p@O` /߿o O@ Dh0_>$XA .dC%NXE5n`>q|#G9rȑ#G/'p  'p A W AO@ w  <0… :|1ĉ+Z1ƃ.c`moƍ7nܸqƍ7w1|mo|7nܸqƍ7nܸ`Ko|6N̷qƍ7nܸqƍ滘a>mT/Ɗ6nܸqƍ7nܸq|0 o 8p |,h | H <0… :|1ĉ+Z1ƃG0|!̷qF6nܸqƍ7nܸqc|!̗/|w0ƍ%۸qƍ7nܸqƍ;/߿|!W0|7noƍ7nܸqƍ3'p A/߿|$0 'p "Lp!Æ8`| H*\ȰÇ#JHŋ3"w0߿|(߿| (0|O@ DPB s/C:tСC:tСC:t0a> 70| ̇0C:t_>9tСC:tСC:tСC[`>Ca  O@ D `'p "Lp!ÆB(q"Ŋ/b80|1̗0_9̗/F)1F5jԨQF5B̷0| !̗0|5̗a4jԨQF5jԨb.c`Ө`>"ӨQF5jԨQF滘a>C`> W0|ȨQF5jԨQF-O@ O@` ̗` +X`W`,XP`>$XA .dC%NXEx1_|w0_| ̗/@O|˗/|/_'0߿| o|8p`>$XA .dC%NXEӈ1| '0_|/߿| ̗/|_|_/_`>I̧QF5jԨQFi̘/߿|/_|70_|/|o`|/_> b>5jԨQF5jO=O@ O`0@ /߿|˗_>'P8?7p <0… :|1ĉ+Z1|5 0|'0߿|˗o`|o`70_|˗/|]̧QF5jԨQFi80| '0_| ̗/|ˇ0@ ߿/߿ o80,h „ 2l!Ĉ'Rh"ƌi80_|iԸ0|5jԨQF5j1F5̇0_EO@ <!B8`A&TaC!F8bE1fOFSOF2ӨQF5jh`> 4xaB8| ,X` ` W` ,X`A ,X| O@  HO@$XA *O@+X`A (? 4x!| &L0!| K0a„ w0_K0a„ K0a%LP`>&L0!|%L0a„ %/_>Kh0_|˗/_„ K0a„ K80_„ &LX0_|˗`|&L0!|K0| K0|%L0aB K0a„ Ka%"D_>"D!B!̇P`>!D(0B g`>_7?˗o`|#HP`> O@ DPB >a> 3/_w0|˗o`>/| |'P` /_| '`> 80߿_o`>7p|o8p@8`A 3`>+o`/|!| H*\ȰÇ#>̷0_| '0| 3`> /|G0|#/a> /߿| W0| '0|o`|0| 0|'0|70_Soa>%J(QD-W0|'0_> 3o`>O`|/߿|%g0|o`> #`'0_>#`>3`>/߿|'qa> 3/@/̗/| A#(0,h „ 2l!Ĉ'0_|/|/| /_|o`>#/a>3O`>`> O`>/| 0|'0_/_>x0߿|(?8? O@ //8`A&TaC!F/|G0_|(? /O`|˗_ /߿ @ ̗o@ ߿߿ o_7? _o|̗o| 808P |/|/(0߿|0 <0… :|1ĉ(0 /|'p@70|0@_/O@ o`o|(0| '0_|(`>'p A (?˗/߿|$`>'p g0_| W0|_>|'p "Lp!ÆB(a +o`| g0_| /| ̗/| /| ̗`O`+o`>/߿|+`+/|/_W0D30|'p`| O'p|'p "Lp!ÆB(a> ˗/|/_|/|_|G0|/_|(? _˗o`|(0 /߿_7p O`8080_| ̗/@  ,$XA .dC%Nb|Q0|)R`>(0E(R"E)RH"|3"ń H|9w0E(2G|)RH"E棘0|)&g0E;a(0EQH"E)Rdb|Q0|)Ra>棘b|)JG"E)RHa> Gb|QHq`c/|(:G|)RH"E棘0|)&g0ES | H`| ̗` ,`> 4xaB8`A&TaC!F8Q |,h@O@ D 'p "LP!0 H@$(? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcI;;PKнc4/PK+AOEBPS/img/lobapp.gif]GIF87aZ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Z H*\ȰÇ'p "O@ DPB >QD-^ĘQF-'P ,h A O@ DPB >QD-^ĘQF%˗#|yѣG=zѣGa|=zѣG=zѣ|ѣG=zѣG;1G=zѣG=z1|y<ϣG=zѣG=zԘa<ѣG=zѣG=jW0_|˗/| ̗/|˗O`| ѣG=zѣG1˗`|/߿| /߿|O`'0_A$XA8`A&TaC!F8bE1fԸc|70߿|'0|_ W0Gqȑ#G9rȑ#GG0| g0|˗_>0@ ? 4x| H*\ȰÇ#JHŋ3j81_|_|'0__ W0LJ8rȑ#G9r"|,h `|˗_|O |_@'p "<? 4xaB 6tbD)VxcF]0|'1ƍ7nܸqƍ7nDbk0 HA(08p|8`A ̗/a„  <0… :|1ĉ+Z1ƃG0| 1O@ D(? 4xa‚8`A&TaC!F8bE1fH0|70|̷qƉ6nܸqƍ7nܸqc|̗_#`7N̷qƍ7nܸqƍ w0_C`6n81ƍ7nܸqƍ7fO@ `>8@$XA .d0!|, <0… :|1ĉ+Z1#|`| ̇0|iԨb>4jԨQF5jԨqb>3`>`>5Z0F5jԨQF5J̷0| 1̗/_ HO@,X_>$XA .dC%NXEcbG0_iԘ/|iԨQF5jԨQ#| ]̷0_|5̧Q#|拘OF5jԨQFcbSoa>C/b>5jԨQF5j|a;a4jL`>4jԨQF5jԨa> HA HP` $|,X`W0_AW`8`A&TaC!F8bE1fO|g0|9̗1_| '1F5jԨQF5>̧c>#O`/_>/_>/_>/_|˗O`3`4jԨQF5jԨa>a̗_|˗O`|̗_>/_/_|/_> /|5jԨQF5j0F`>'p`> ̗//'0| /_| /_8p| H*\ȰÇ#JHŋ3 ̧Q|̗`> /_|3_>/|(߿ @8p'p "Lp!ÆB(q"Ŋ/b(0Fg0|'0_|70߿|o`70_|˗/|a̧QF5jԨQFi80|'0߿| ̗/| O8p`8p'p "Lp!ÆB(q"Ŋ/b(0F9w0F ȩQF5jԨQFiH0| QO@$XA"D(0,h „ 2l!Ĉ'RhQ |,h „ 'p  ,X` ,(0_ ` ,X`,X` 0  ̇p`>C/B!̇P`>!D(0B!D!BC80,h „ 2l!Ĉ-'a>$Jd`>(0|8@| G| #Hp`> ? 4xaB-̷p… .\p… .oa 3o… 3o|-\`>` ̇0|̷` _7P80_|7_8p|8`A&TaC!Ftoa ˗`|g0|˗/|0@_'p` /o| ̗_| 7p| '0@7p`80 /_|/_|8p8_ '0@/|o`o| H*\ȰÇ#B̧0| 70| O`> 70߿|g0_>/_| 0|'0_/_>a> 3o`>#O`˗/|3o`w0߿|G0|+O`/D%J(QĄ` O`|/| 70߿|g0_>`>s` G0߿| /|g0|9W0?(0| o|'p / G0A'0#H|,h „ 2l!Ĉ'O#/|08_| 70߿|GP`o`>8P $08_|/A8P  '0 O@ H | O|˗/_O@$/_(߿7p O@ '0 ? 4xaB 6tbD;o`'P /߿|˗_>'0_|'P_O|o(0_ /߿|7P`8P`7p`8p@ ̗o|70߿|8p@8_O` o@ O`? 4xaB 6tbDw0| 70_| w`>O|80|o| 7p|/߿|˗/|7P`7p|˗/ _8080_|˗O` 8po| 7P`70߿|'0'p "Lp!ÆB(q|70_>+`> /_|'0_W0| 70EH0|GQ`'P?o'P`| OO| H*\ȰÇ#J/|/_|˗`> #_ 'P| o|(0 8p8_8p|8p@o/? 4xaB-\p… .\p… .$oB [pB[/_| CoB[/_| [x0… .$o… .\p… .\p!| "g0… w0| -La Coa>"̷` .\H0… .\p… .\pB.D` .$a˗oa|[P`[/‚-Do… ̷p… .\p… .\` 3o… K/| W| ,H0_ ˗`A,80_ O@ DPA$XA .dC%N0  O@8`A8?O@'p H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺ;;PK\PK+AOEBPS/img/delete.gifNwGIF87a/?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,/ H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC80,`> 4xaB H*\ȰÇ#JHQ"|'p O@$XA .dC ˗O`|9̗/_'P ,h „ 2l!Ĉ'R|/_WbŊ+V/|˗bńXbŊ+VXaXbŊ+[OaXbŊ+VXaU|bŊ+Va/_E*VXbŊ+V\a|!XbŊ%k`s|+VXbŊ+*W`>'p| ̗/|˗_|  <0… :|` ;`|˗O`|˗`0 _>$XA .dC%N0|˗/߿| /߿|O``+VX1b>`|/_|`/_|/_ /_>*VXbŊ+VL` g0|O``+VXb`> ̗/|'0߿| ̗o` /_|+VXbŊ+̗/_70|˗/_>0 0 < ,h „ 2l0_|O@ O`|˗/__>'p`G0߿| /_| H*\ȰÇ#JH_|̗O`|3O`| '0߿| W0_EUX"|=G0߿| ̗/߿| /| /_|'0߿|`UXbŊ+V` (?0/߿|'p`>$XA%L0a„ &LH0|G0| /_|'0| /߿| ̗/_>`&L0a„ &L0a„ &D0 $+` ,X| ,X`,X` $0 'p ,h`(1a>(a> 1g0| I(q`$J(QD%'`>(`>(a> 1w0| I(_>$J(QD%̇0_> @80'p "$/_„ &/a„ w`> ߿(08P`7p'p "Lh0_*TPB *TPB C/|)Oa|)Tp`|*T0a> *D`>o` ̗0_|˧`|*T`|˧PB *TPB *T0| ̇0BO@ , <0| *T0|'0|S(0B)T(`> 4xaB$H0,h „ 2l!Ĉ w0_C`$J(Qb|%&'0|'0| ̇0D%J,OD%J(Qb|̗_+`>%J0D w`>(0@ O|8_>$XA .dؐ`>:tСCO `>8 A$XA .d!|$ 408_'0|'p A H*\Ȱ!A$H? 4xaB 6t|g0_C`>"F1| h0_>;` 70_|1bĈk/_Ĉ#F1|g0|!G0|#Fa"w0|̗/_G0|E1bD1bĈ#F4Oa11bĈ惘/| Ela#F0|#F1bĈ-`>'p`>$X|,h „ 8| `,/_ ,`A O@  <0| SPB *TPB )O ̗0| SPB)̧`>)OB ̗0_> ˧PB Sx0B *TPB *LO| ̧P`%̧P`> *Tx0_>̧`>)T0BSP| *TP`>)TPB *TP„˧P| ;O| )TPBSx0ƒ ̧P| ;OB)TP̧PB *TPB O@,X| W_+80| ,X`|Wp`,XP` W| ,X`+(0_| ,X` ,X`+X| H*\ȰÇ[0 $+/_` +X`W`,XP` W@$XA HP`,80_ W` ,X`  <0… :|q`#`>`|˗o |'P`70_˗_| /_|(0o  <0B 3_|˗_|˗/߿| ̗` .,o| .\p… .\x0… 70B`|/_˗`|/_>/߿|/߿| G0| [h0… .o`/߿|/_'0߿| [p"̷p… .\p…-\p|[H0_| /|`'0|70߿| W0_|&? ϠA 4h`|3/߿|/_> ̗/|gРA /_>  <0… :|q`#`>'P`> '`>8_˗/|O7p 8p 7pO@ DP|'0߿|8߿ H'p O@ DPB >80_Ĉ{` /_70_70|/_>˗O`>"1_Ĉ;_>/| ̗/|1bD"F1bĈ1|G0| /_|/|(߿| 80߿ O|8p8p| H*D`O`|˗/߿| W0… .\(0… .\p… ̷p… -` .\0…-4o… "̷p| [p… [p… .\pƒ.\pa!̷P!|'p ̇!"!B"D0B˗!|"D!B!D!B"D!B"!B"D|C!Ḃ!"!B"D0Ḃ!B"DX0B"D@$XA O@,X` ,X_| +XP` ,X` ̗` W`A8`A&T0… -\p…-\p…-\p˷p… ;o| .\0…-4o… .̗oƒ-\p…-\p…-\p˷p… 'p`>$X|,h „ 8`AC_>"D! H8`A&T`> 2dx0C *̷0_> 2dȐ!C 2d0Â2dȐ!C 2dȐ!C2dȐ|(_7P8_|˗o`>#Hp`>$XA .dC拘OD%J(Q"|%Jl`` /߿| ̗0|%J(QD 惘OD%J(Qb|%Jd`>`> /_|%̧0D%J(Qă(QD%J0D`> G0| W0߿| W0D%J(QD+OD%J(Q"|I(_'P7p 0@ _(0|8`A&TaC!F/_>7qĉ'N8`|Mh`> O /|G|/A8`A&TaC!F8bE1fԸ ,h „w0_| W0|_>/a>*TPB *TPB *,OB *TPB *TPB*TP|O|`80_|'P࿁80| H*\ȰÇ#Jtoĉ'N8qb|'N7q&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉ8`A&TX? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{A$XA8`A&TaC!F8bE1fԸcNJ<"ѣG=zѣG=z4#|=zѣG=zѣG<"ѣG=zѣG=z4 |(߿߿'P`>$XA .dC%NXE5nرb _'0_-ѣG=zѣG=2̷0GѣG=zѣG HO@,/_ ,Xp`O@ DPB >QD-^ĘQc|'coa -̷qƍ7nܸqƍ+81| 8`AO@'p "Lp!ÆB(q"Ŋ/b̨b-̗oF6nܸqƍ7nܸqc|˗O |߿(@ o'p "L0a>$XA .dC%NXE5Rg0|3`>Koa۸qƍ7nܸqƍ70߿|g0| )̷q|7nܸqƍ7nܸQb _>3`+oF۸qƍ7nܸqƍ 3o` _(߿|7P (0߿|'p "Lp| O@ DPB >QD-^Ę#|o|800 <0… 'p "Lp!ÆB(q"Ŋ/b̨` /߿|g0| ̷q|7nܸqƍ7nܸ`> ˗/@ o`߿ O|'p "Lp!Á6lذaÆ 6lذaÆ 6lذaÆ 6l0_Æ O@ DPB >QD-^ĘQF1G=zѣG=z1G=zѣG=zc>yѣG=zѣG8`A& <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlq0 0_|ױcǎ;vرcǎ9[oa Soa;vرcǎ;v1|%0_| w0_ǎ;vرcǎ;v̘`>{|g0_ǎ;vرcǎ;v̘`3/_>'P_O@ ̗| H*\ȰÇ#JHŋ3jh1| 70_|O`|˗/߿|/_>˗/߿| '0| ȑ#G9rȑ#G;`>3/|/| ̗/| /_|ˇ0|9rȑ#G9rȑ|;08_|'0_ /@߿|'P | O@ O@ DPB >QD-^x? 4xaB 6̗_+/|'0_|/_˗O`g0_|3aÆ 6lذaÆ 6lذaÆ 6lx0_ 6l0a|w0|̗/@ /߿808_O@ DPB >QD-^Ĉ0_ƌ+`Øa|w0|3f̘1cƌ3f̘0_ƌ3`>Øa|!W0_>2f̘1cƌ3f̘qa3"g0_| e/a2f̘1cƌ3f̘qa3"w0| eOa2f̘1cƌ3f̘a3"̇0_| 0_>˘1cƌ3f̘1cƆ2f̈0_| 0_ {/_|2f̘1cƌ3f̘a3"̷`>8`A H8`A  <0… :|1ĉ+Zb3"̗1cƌ3f̘1cƌ3f̸0_ƌ˘1cƌ3f̘1cƌ3f\/cƌe̘1cƌ3f̘1cƌ3.̗1cF2f̘1cƌ3f̘1cƌ˘1#|3f̘1cƌ3f̘1cƌ e̘a3f̘1cƌ3f̘1cƅ2f̈0_ƌ3f̘1C O@ O@ DPB >H0_Ĉ#>1bĈ#F1bĈK/|".̗/bĈ#FQ`#F|/bĈ#F1bĈ 0_>E|/_Ĉ#F1b#F|/bĈ#F1bĈ 惘Oa1bĈ#F1bĈE1bĈ#F1b|˗`>˷0_> 1bĈ#B1bĈE1bĈ#F1"| ̗`>˷0|E1bĈ1bć"F1bĈ#F`>'P o`8P  ̗_|`>$XA .dC B|!B"D!B1_|/߿|/|˗/߿|/_/|!B"DA"ā B"D!Ba>/߿|̗` w0_/_> B"D "DA"D!B"|3_>g`>'p` 7p|_| 0 <0… *O@ ,!B"D!8`A&TaC!F8a|/_g0|̗O`|;/߿|'0_|)RH1_> QH|)RH"E) W0|/| g`>'p|_>  <0… 2С|:ta>:tСC:t` 70|9t0C:t`>sСC 9tСC:tСĊ0_|!|'p 'p "Lp!Æ 9t/C:$a>:tСC:t`̧0C9tСCs_>:tX0|:tСC:ta|9/|СC:Dϡ:tС|9tСC:tСC%0|СC:Lϡ:t!|,? 4xaB 6tbDS/_|1_|(̗/_>)R0ń H`>$XA ;`> *TPB *TPB *O!AO@ O@ O@ DPB a>|X0|=|Ç>|a|=|Ç>|a=Ç=Ç>|Ç3Ç>|Ç=t|>|(0C>|Ç>|!|$ <0… :|1D H ,/A4hРA 3h`>$XA .dC%>̗`>&N8qĉ'"0_>"81a&N8qĉ'6̗`&N8qĉ'"0_|M0_|'N8qĉ惘oĉ'N8q"|11ĉ E7Q!|,h`A$XP |O@ DPB s80_A$XA O@80,`> 4xaB$X| O@$H_>#H 8`A&O| ̗OBS80_>)TPB *4O|)TP„w0B*T`>3/_| S/ƒ*T`>)Th0B S/| *TPB Sx0_| *T0a> )OB ˧_>Sx0̧PB)ˇ`>C/B!D!|"4!B!D/_|˗o`|8`߿߿|?#80 <0| w0| S/ƒ*T`>)TH0‚*,`>)T0a> S`>w0|#o`>o`>/|w0|S0B ;`> ˧`>)/_/_ ̗/| ̧`> "̧P| ̧a>O`|/߿| 70߿|˗O`>`>`| OO| ̗/|˗_|7_>/@ 7p8p|8P`>$XA Sx0B W0|/_|˗O`O`G0߿| SP!| +/a> S0| /_O`>__>``|_|`| /_/_> +_G0„˧`> *˗_>˗O` / /_|8p|o  <0| SH`> 'p? ߿|7P|߿o@ H |O@ W0_|/_|/_><80; |߿߿߿O| ̗o?0/߿G_'p`>˗/߿|O@ O (0A$H| G A'p "L(0ƒw0| ̗/߿| /_>_#`̗0B'0߿|/߿| W0B)T80|O`#o`/߿|#`;`'0߿|'0|70߿|˗/|/|)TH0̧PB)$H A$H|#`>/| 70_|`#80A`| O0@_808_ 8p8p|8P`>$XA Sx0 ̧PB̧`>)T/_|0@o@ ̗/_8p`8p| H*$` ;/| .\H0|̷p| -4o… [h0| [p|[/_&G0| ̗/|'0_|-Lo.\p!|W0|-$0 H W0_><80A,w`̷`>. Ϡ| gР H*4'p`>$X|,h „ H? < |ww| ;x*VXbŊ+V4oa*V,/b>*VX`'p 'p  ,/,h „ 2l!Ĉ'R4oa*V,Ob*VXa>*Vb+VXbŊKOb 擘/|+V0_XQ` XbŊ+VX1a&X`> ̗bŊg0|+ ̧0|*VXbŊ+V\/|(X`8`A&TaC 8`A"O@ DPB >QD'p ;x O@ DPB >\`>S"D!B"D!B0DA"D! w0D %"D!B"D!Bl"ć B"Ds0 'p 'p "Lp!ÆB(q"Ŋx_/^x1|s/_| ]xŋ/^xQaxŋ%g1|/^xŋ/^T.^x|]Oa/^xŋ/*w|/^xb{/a/^xŋ/*w|/^xb>.w0ŋ/^xŋx_/^x1_ _O`>;ŋ/^xŋ ]/ŋ/^/_|O`|/߿|'P`>O@ DPB >QD-2w|/^x|;_>0808`A&TaC!F8bE ]/ŋ/^80_|O |O 'P ,h „ 2l!Ĉ'Rhaxŋ ;/| /_wŋ/^xE.^ŋ/^<`˗O`|+ŋ/^xŋ]/ŋ/^x0ł.^xŋ/^81ŋ]xŋ],ŋ/^xŋ]/ŋ/^0Ł.^xŋ/^H1ŋ]xŋ ]ŋ/^xŋ]/ŋ/^0_>]xŋ/^xbxE]@'p O@ DPB >QD-^w|/^xbC$Xp ,h „ 2l!Ĉ'Rh|/È#F1bĈ#F1bĈa>aĈ#F1bĈ#F1b1F0bĈ#F1bĈ#F1b/Ɔ È#F1bĈ#F1bĈQb0G0F1bĈ#F1bĈ#Ḟ`|aĈ#F1bĈ#F1bh1_|MO@ DPB >QD-^ĘQF=6O@  <0… :|1ĉ+Z1ƍ;zoc?~Ǐ?~| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶[ H'p "Lp!ÆB(q"Ŋ/b̨q#ǎyDϣG=zѣG=zX0G+ϣG=zѣG=z`|/_˗/߿|'0_|/߿|yѣG=zѣG70| ̗o`>/_߿|? 4xaB 6tbD)VxcF9vL0@ o`/|/| 7|,h „ "O@ DPB >QD-^ĘQ|̗_|/| '0_>/߿|̷q|7nܸqƍ7nܸ1b˗_|_| ̗O`O`>6noƍ7nܸqƍ 8`A&W0_ ,X`8`A&Ta| 2dȐ!C 2dȐ!C 2dȐ!C cȐa| ǐ!C2dȐ!C2dȐ!C 2dȐ!C 2dȐ!C ǐ!ÄC!C1dȐ!C1dȐ!C 2dȐ!C 2dȐ!C 2  ǐ!C ǐ!C 2dȐ!C 2dȐ!C 2d`>_'P࿁(߿'p  0 

`C`>6lذaÆ 2װaÆ 6lذaÆ 6lذaÆ 2O@ /߿|'`>(@ ߿? 4xaB 6t0!|, <0… :|1ĉ+Zx0|̗/߿| 70| '0|̇#Fs/F1bĈ#F!;O` ̗/| W0|!70|1bĈ1a>0bĈ#F1&O@8`A̗P`>'0|(_ 7PO@0 <0…8`A$X $`,X` 'p "Lp!Æ'p "Lpa|c(0_|2\oa> &̷0| 2dpa0a|cX0C ǐ!C 2d0_|2dȐ| cPa2d0|1dȐ!ÅcȐ`| 1,!Ä1dȐ!C 24!C "ǐa> c!C -g0C 2\/a> Ca| "ǐ!C 2d0a> 2dh0_|1!ÃcȐa| g0_| '`> @/߿o @? 4x`"!B ̗/_ |7p@/߿߿|߿70˗o`o`0 H*LOa-\0.\_ +o`>o``| g0|%w0… ;o| &70|'0_O`>_'0|O`70|o`>/_| .\a_/_>.Do?$XA 'p G0| '0| ̗_ 70_| W`/_>/߿| ̗/|+/_+X`70|/_A/__˗O`>'0߿|`> ˗O`_ ,X` ,H0|/߿|/_|+/_ $? 4xaB +`o```K`> /_/_>/_W0C2O`>/|;o`> #o`__K`>'0|70_| 2d0߿|_˗0C1dȐ!C G0| O7P|߿| o|˗o|o|_ 70߿|//,h`O`|/A o_7P߿|/߿|߿| /|o``> <0!B/߿|˗_| 08`A 4hРA 4hP`|G0| 70߿| W0|+`> O@ o|'`>_>̗/808|߿|_?O`>70߿| '0_>/߿|`>'P|8`>'p "D/| _ ̗o`>˗0| &L0a„70| 70߿| W0|3o`|%W0_>˗_>o`|/_| ̗0| `> /_;o`> #o`O`|'0_>G0| ̗o`/|w0_ &,a 'P|7?#HP`> ? 4xaB +/_|70| ̗|߿|˗o`>#O`>'0_|/_>| $H`> |̗/_/߿|_O'P`|/߿| /|8_@߿߿#H A $80A$H A$80A  <0… 1dȐ!Åcpa> 14oa> 2dȐ!C [!C1ǐ!| 1,!C 2,!C .w0C 1d| cȐ!C 2d0| 2|  _>1dȐ!C1dȐ!Åc0a> cX02dȐ!C ._> _> c/Â2dȐ!Â2dȐ| 1dx0C1,| 2dȐ!C c/C 1/C1a| 2dC? 4xaB K/C1d80Âǐ!C 2d`| cȐa>ch0_>1,!C 2,!C .̷0_> ǐ!| cH0_> 2dȐ!CcH0C 1<0 O@3h`> 4hРA ,0 <0…8@$X A$XA"!B H*\ȰC H| 4h`> 4hРA3h`>$XA .dC%N0_|+VXb|Xa>*VXbŊ+VD/b+VX|Xa>*VXbŊ+VLa|+VXb*g0_Ŋg0_Ŋ+VXbŊ !g0_Ŋ+VXq`&#bE#bŊ+VXbE#bŊ+VX0|˗bE+/_|+VXbŊ+:̗/_WbŊ+V 4x!,h „ 2l!Ĉ'Rh"ƌ7rh`>8`A'P ,h „ 2l!Ĉ'Rh"ƌ7r81_> ѣG=zѣG=z/G=zѣG=zcy,ϣG=zѣG=zܘ | O/_>/| <0… :|1ĉ+Z1ƍ;2g0_/_>/߿|_ G0G=zѣG=z1|`>/|˗O`>/|q\/_>9rȑ#G9r`>'p@O |_@8`A <0… :|1ĉ+Z1ƍqb>qȑ#G9rȑE$X`A$/_ ,`>8`A;o|%۸qƍ7nܸqƍa̷0|#(1ƍ7nܸqƍ7n<c0_mܸqƍ7nܸqƃ7`>(08p|8`A˗/a„  <0… :|1ĉ+Z1ƃW0| 1O@ D? 4xa‚8`A&TaC!F8bE1fH0|G0|!̷qF6nܸqƍ7nܸqc|̗_>`7J̷qƍ7nܸqƍ w0_C`>6n(1ƍ7nܸqƍ7fO@ `>?'p H*\Ȱ!B$X0,h „ 2l!Ĉ'Rh"ƌ/|a> ӨQc|iԨQF5jԨQ| g0|!70|5jb>5jԨQF5joa>c/_|8`A&<+X| H*\ȰÇ#JHŋ3̷0| %̗/|˧Qc| ȨQF5jԨQF-̇1|%0_> ˇ0_|5jԨQF5j1|-w0| iԈ0|iԨQF5jԨQ#| a̷0| %W0F +`"ӨQF5jԨQF'p  'p  W|+/_,X`|| ? 4xaB 6tbD)VxcƁ4^W0|g0_|'0_|G0|'0_˗_| /_|'1F5jԨQF5B̧c>#_˗/߿| ̗_'0߿|/߿|˗_|'0|I̧QF5jԨQFi̘/|̗`> ̗/|G0_/_˗O`>71F5jԨQF5B̧Q|9O@ /|/_|_>/|(߿ ߿8`A8`A&TaC!F8bE1fOƁ#_˗_|`| /|˗O``4jԨQF5jԨb>;`;O`/_>0@7p|7? 8pO@ DPB >QD-^Ęq`>s`>ØOF5jԨQF!Өq`0 H!D0,h „ 2l!Ĉ'Rh"ƌiH0| iԈ0_|5jԨQF-'p "L ` ,X`,/_,X` ,Xp` ,/_8`A'p |,h „ 'p A ,XP |O@ DPB sСCsС!0Cs0|g0C˷0_|P`|˗ϡC:t/C 0C̗/|9/_>"̗/Cs_>:t_̗a|sСCsСCsСC9<0 <0aA$Ẋ!‚ C!Bˇ0 ̇|"D!B"D0B"DP`>'p "Lp!ÆB0|3OD!̷0|(QDI(`>$J(QD%̷0ą (Q|5̇0ā$J(Qb|(_7P8_|˗o`>#Hp`>$XA .dC[`/_|g0_|'P7߿| @o|8_˗_|7p`>$XA .d0|'0| W0|O`>+aÆ 6lذaÆ w0|70|3` /| ̗_O`/_| _>3O |@ <0… `>`> /_|)W0|6lذaÆ 6lذ|g0|'0_> g0|70_>/߿| ̗_|g0_K` 6l`> O|70/_| _O@ DPB >QD o`'08P O`'0 '0߿| 7p@ 'p@0@'p@ <0… g`>߿8? O| 8_'p "Lp!ÆB(a| W0? O|7p`'P'p? /߿ @ ̗o/߿|/߿|7P`'p "Lp!C3`#`/|5lذaÆ 6lذaÆg0|70|g0|%̗`>_K`3`>˗_>3` 6lpa> O`#/| ̗/߿| 5lذaÆ 6lذaÆ g0|o`> 3O`|̗o`o`>_k` 5lذaÆ 30|'p`| O'p| H*\ȰÇ#J(0|/_|˗`> ˗/@ 70߿/߿o` O|7p /_8p`| H*\Ȱ|:t(0C:tСC:Tϡ sСka>9tСC 9tС|:tСC:tPa>3ϡCCoa>СC2СC9tСC:tСC:`>:/as80C:t0C СC:tСCs_>:t_>̗a| sСC'p "L ,h „ 2l!Ĉ' O@  H*$'P ,8`> O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^C۷n|˗o߾p;/_߾}[o߾l-׷oߵ۷| Wm>۷|ۗ-|,h „ 2la>$X`> 4xaB 6t0,h „ 2l!Ĉ'Rh0_>-Z0|,Zhb|,ZhѢE-ZtϢE-2w0|YhѢE,ZhѢE-ZdϢE-:g0|-Zha>-ZhѢEhѢE5gѢEhѢE-Zh1a>-Z0_|-Zha>-ZhѢEhѢE-gѢE!hѢE-Zh1a>-Z1_|-Zh1b>-ZhѢEhѢE+/E-ZϢE-ZhѢE ? 4xaB 6tP!|'p "Lp!Æ*"D!B"D!"D!B"D!B0D!B"D!BX0D!B"D!Bb|!B"D!Bb|!B"D!B"D A"D!B"DA"D!B"D!&"D!B"D!"D!B"D!B0D!B"D!BX0D!B"D!Bb|!B"D!Bb|!B!|,h „ 'p "Lp!Æ {Ç>|ÇÇÇ>|Ç=|Ç>|Ç {Ç{|>|Â>|Ç>|Ç=|Ç=|a>|a|>|Ç>|C>|Á>|0Ç>|`>|Ç>|!|>||70|O`|'`>߿(0,h „ 2l`>|Ç ˗ÇÇg0߿|O`|70|#o`>+Ç>|X0Ç>|Ä̗Ç Ç/|O`G0| 70_| ̗`>|a|>|ǡ0Ç>Ç>/|/| ̗`| 70_| W0Ç>|`>|Ç)Ç=|C O@ _o`> /_o|(?8 ,h „ 2l0C:tСC1СC sСC ;/| ̗O`G0@ /߿'P`(0'p "Lp!Æ 9tСC:ta>:t80C:da O`| ̗O`/|70_+Oa>:t|:tСCsϡCСCS`/_|˗/_>`| 70_>sCsСC:t0|9tС|:tpa:t`:tСC:tСC:0߿|:t_>:t0|:tH0|:C5P>$XA .dC Hp $0'p "L` .\p!| -\p‚˷a 'p 'p ̇!B"D!B"!D!B CH0B/_>˗!BCa|"D!B"D!Bw0|!!B"D80B"D!B!!B"DH0B̗`| Ca|"D80B"D!B"D`>g0‚"D!B!D!B"D/ H*<+Xp`+X0_ ,XP` ,/,h „ 2la|90D"DA"Ă[OaKo`> A"D{a B0D!B"D ca> 惈0|"D!61|AQa>!B"D!̗oa> ;`|`/_|AD"D!B0/D"Ą "D!'0| w0_`˗/߿|惈0D!B!@8`/_> 3hРA 4H0A 4hРA 70,h „ 2d/| G0߿| /߿|'0_k0_Æ 6lذaC"̗!| 6lh0_Æ 60 <0… :< 'p@O`#80߿| |O@O@ DPB >,"D B0D! ̗`>!B`|/|˗a˗O`>0D!Ba>|!B/|!B|w0|'0|'0߿|#Oa B"D A0D"|!B"ā;"Ăc"D!B0D AQa>!>"D!B$a=O@$X0_,/,h „ 2la|!2"D B0D!B`q`"D!6"|!BT"DA"D [Oa>soa>!B`> 4x ` H| H_'p O@,08` Hp ,(0,h „ 2la{_{Ç=|a>̧0|̷0_| 0_=Ç>|0_9̗!|˷0Ç>4| !̗a|cÁCOa{Ç>||'p 8`A8` gРA 4hРA3hРA g_> $| 3hРA,| 3H0A4(0,h „ 2l!Ĉ%[oĉ 書0|I̗a0|5̇0| 17qĉ'N8qb&N8`'`> O|o|O` 8080@|$H0$/A G |? 4xaB 6tbDK/ĉ' '0|`K`>0 7p(0|o`o`(0 o`̗/߿| o`'p "Lp!ÆB(q| QHb G0߿|%G0_|/_/߿|˗`>`> 70|G0|9G0߿|/_ #`>)RH"E̷0EW0|%W0_|K/߿|'0_ ˗/| _` C/_+/|/|˗"E)RH"|˗/_|)JO@(0|O'p@$X ˗/_O`|0 O|/| o H`A$H`>'p|/A H*\ȰÇ#JHQ",h „ /_|g0_|1`_>`>W0|O`#| #_/|1dȐ!C 2dȐ!C 2dH0C 2/| p` /߿o@7po| ̗o`7p| 8p|7p`8_>8_8`A&TaC!F8|+VD |(߿| 80A G A  A#/| G0_|G A$HP`>$H | H*\ȰÇ#JHŋa4b>Q̇1a>Cob>1bĈ#F1bL|a$b> M̷0|aĈ#F1bĈ| 櫘|aLb>{#F1bĈ#Fh0|,g1Ƅ*;/_|È#F1bĈ#F H8`A8`A8`A8`A'p 'p`>$X| <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 92ހ;;PKX>(9(PK+AOEBPS/img/cache.gif'GIF87ax?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,x H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCO@ D8? 4xaB 6tbD)VxcF9vc|=zѣG=zѣǁy\/G=zѣG=z1LJ0@ O| H*\ȰÇ#JHŋ3jȱ#| ̗/_̗_/_/߿|yѣG=zѣG'0_|W0_ ̗_|˗/_ѣG=zѣG=Z̗/_>˗/߿| /_/߿|80'p "4 <0… :|1ĉ+Z1ƍW0|/_|˗O`/_|a>9rȑ#G9r` ˗O`| `> 80,h ƒ8`A&TaC!F8bE1fԈ`> 4H? W_ ,X`,X`  <0… :|1ĉ+Z1ƃ.c`>  ,? 4xaB 6tbD)VxcF]0|%(1ƍ7nܸqƍ7n1Ɖ6nܸqƍ7nܸq|0@ o 80_>$XAK0a„'p "Lp!ÆB(q"Ŋ/b̨`>̗`>'p " <0!| H*\ȰÇ#JHŋ3j<a|;a7J̷qƍ7nܸqƍ `| ̗`>۸q|7nܸqƍ7nܸ`|˗o`|g0ƍ%۸qƍ7nܸqƌ H?˗/|O@8`A&TaC H`>$XA .dC%NXEw0_> 70_ 3OF9̗OF5jԨQF'C_>/|̧QƊ ӨQF5jԨQF滘a.'p "L8? W` ,X` HO@ DPB >QD'[| )̗/߿|A̗/_> ˗oa,"gѢ|-ZhѢE-ZDoa>1̇0_5g|拘"|- gѢE-ZhѢE/|-̷0E!1E,ZϢE-ZhѢE-g_>[Oa>YL/_|˗0|YDa|˗`>70_|(?'p "Lp!ÆB(q"Ŋ-g_> ka5gQ`|K`,"w0|'0|+/߿|w0E-ZhѢE[0 $W0_ WP`˗O`|'0_/_> ̗/߿|/߿|| ` W_>'0|#/|+(0,h „ 2l!Ĉ'R81E0|̗_'0߿| /_/_|/߿|_> 擘b|G0_|/_|3/|-ZhѢE-ZDϢE{` /_|70_'0_˗O`|0'P` 8p'p `> ߿ /,h „ 2l!Ĉ'R81E˗!| O|˗O | ̗/߿|/_|080_|8p@8p8P /߿|'0_|˗o`> `>'p "Lp!ÆB(q"Ŋ Y0|3/߿| ̗O`̗_>/_|˗|?#H A$H |//|/'0_>/_>$XA .dC%NX1a>;`>3/߿|'p`'p`|˗_|8߿8p 8p (0߿| ̗/@ '߿7߿8_>$XA .dC%NXqb>k`>'(0| Y(0|-ZhѢE-Jg| ̗"|'p "̇!| ̇p`>"Dh08`A&TaC!F8bŃ,Z\a>,Z|-gѢ| YhѢE-Z(1E -̧0EY/b>,Za>-ZhB$XA O@,X` ,XP`,(0_ ,X`W`+X| W` ,X_+X|,h „ O@$XA HK0a„ K80_„ &LH0| ˗0a„ K0| K80_„ &/| K0a„ "g0_„ K0a„&L0aB̗0a„ O| H@$XA 'p ˇ| 'p "L8? W| H*\X0| ǐ!Ä2dPa>2dȐ!C 2dȐ| cȐ!C -ǐ!C 3!C2d0|O`>'0_|G0_|-̷0C 2dȐ!C 2d!| 2dȐa˗`|70|˗`| ̗/_>'0_|3a|̗0C 3/_|˗`|#O`>/_cȐ!C 2dȐ!C 1$!C 2̷0A? ' O|˗O`| /80/|? 4x|̗`|/|#`%o`>&L0a„ &L0a„ &<a>&L0a„ ;O`> 70_ /_>g0_> ̗/_>%o`>'0_%̗0a„g0_> ̗o`|`|%`>&L0a„ &L0a„ &La>&L0a„ ;_>O@ ̗O`| / /_8p|o/_ 80| H g`>'߿'p|G0_||O@ DPB >Q|̗/_'N/_̗`W`> _W?#/_>˗_|#H_>$H A Hp 7p`|/| ̗/7p@ H*\ȰÇ#JHŋ80_'p| / ̗/_8p@˗_|#H|O@ D/߿|+O`'0_ '0|˗P`>8`A&TaC!F0ĉ'6/|/| ̗_|˗`|/_|c` '0߿|˗0|% |_7?˗o`|O@o`>$XA .dC%:7qĉ ̇0_|/_|0'߿'p| GP`> H0? 4xa| &L0!| H*\ȰÇ#JHŋax1| X1F aĈ#F1bĈQb>/3#|+ÈQa>1bĈ#F1J̇|a$c|1*̇#F1bĈ#F0b`>a#F0bĈ#F1b(1Ḟ`>8`A&TX? 4xaB 6tbD)Vx |,h „ O@$XA H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mmݾ 8_۷70_|/_|G0_|'0_>;;PKCPK+AOEBPS/img/prepare.gif!GIF87aXh?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Xh H*\ȰÇ'p " <0… :|1ĉ+Z1ƍ;z#|'p O@$XA .dC%NXE5nG`|B 2dȐ!C 2dȐ!7 0_Ȑ!C 2dȐ!C 2| 90_Ȑ!C 2dȐ!C 2$| I0_Ȑ!C 2dȐ!C 2|8P ˗/| ̗/߿|˗| H*\ȰÇ#JHŋ3jȱǏ /#/߿|/|_| /߿|#/dȐ!C 2dȐ!C b>70|̗_>/| 2dȐ!C 2dȐ!CN̗/_|`>˗/߿|`>(`> 4xA$XA .dC%NXE5nG G0_>`>_>/|D/H A $H A b 'p@O` /߿o O@ Dx0,h „ 2l!Ĉ'Rh"ƌ7r`> 4H? W0_ ,X`A ,X`O@ DPB >QD-^ĘQF9滘a'p ,h`$XA .dC%NXE5nqc;|ѣG=zѣG=2w1|yl#|=zѣLj,'p "$ <0… :|1&0_|&NoĄ&N8qĉ'N0_|1_|' ̗/ĉ'N8qb| coa|&:̗/_8qĉ'N8qb|0ĉ8qĉ'N|a|8? 8p`0 ;bŊXbŊ+VXqa>#|UXbŊ!a|C`>*VXa+VXbŊkacob+VXBo`>8 A$XA .d!|$ <0… :|1ĉg0|'0_|8?`>7߿(0,h „ 2l!Ĉ3/|a (QD 5̗OD%J(QD970|/_/_>/߿|/߿|˗`>%J(QĄ/A / G08`A&TaC˗ϡC:tСC:4|g0|˗o`>/| ̗o`:tСC:lOa> '0| 9tСCs(0C:tСC:tX0_>8P /|(?˗/߿| /|#(0_| H*\ȰÇ[`>Ca> ? 0 <0B$/_O@ DPB >QD0_| /_/|/| ̗/| ̗"E)Rx0|c/aHa| EG"E)RH1b> ;` _|˗__>_|W0E)RH`(0| ["E拘"E)RH"|9g0Eg0E)RH`(0| )G"|EG"E)RHa>$H   ˗/_>  <0… :|a"0| !G0_ĈW0|E1bĈ#F1bDca#ˇ0_Ĉ#F1"| 8`A8|+Xp`#`A ,X|$| ? 4xaB 6tbD ;oa>(RT/a>)RH"|)&W0|'0_| ̗/@O|˗/|/_'0߿| o|8p`>$XA .dC%N,aG| QH"E HQa#_/_/_>'0߿|/߿|˗_|'0|MG"E)RHa̗a|)̗oa>)RH"|).̗/_ W0| ̗/|G0_/_˗O`G1E)RH"Ň'P ,H`> 4xA$80,h „ 2l!D"F80C@o` '0_||/߿(08P`>$XA .dC%N,"EH"E)G|/_|˗_|w0_>O`|'0߿| G0E(RH"E)>G"E QH"E Ha>O`/_>a> /߿_(08p`>$XA .dC%N,"EH"E)G| ̗"EQ$"E)RH|)R0E)RH`>ka>8? 4x`> <0… :|1ĉQH|)RH"E(Roa>(Rb|)RH"EH"Ņ(R`> 4xaB8| ,X`  | ` ,X`,X` 0 <0| Hp |,h „8@$XA8| O@$Xp |, O@$X`> 4hРA gРA 4h`>4hРA $| gРA 4h_| 480A 4hРA 3H0_| 4hРA3X0A 4/A ̗`| ̗Ϡ4(0_4X0A 4hРA 3hРA 4H0A 4hРA O| H?$XA 'p ˇ`>"D`>!D!B!!B CH0|CH0B!$|C!B"D!B"D(0B8`A&TaC!Fla>%COD%'Q| ̷0|Soa$J(1A ߿ ߿ /_o(0,h „ 2l!Ĉ-W0_|'P࿁߿7P'P`O@ D`>C |(߿߿'p`7p` o8p (0@7p'p "Lp|'0| G0|O`cȐ!C 2dȐ!C -W0| /| ̗o`K`| ǐ| w0_| '0|/| W0|0|+`>1dȐ!C3_> #`/_| 1dȐ!C 2dȐ!C+o`>˗`˗O`˗0|`> 7߿7߿'p`7_(0@˗o|/80 7p|7P`|˗_|˗/o|7p'p "Lp!|g0_ K/_> /a> cȐ!C 2dȐ!C ;O`o` _| 70| '0|_/_>_ /_;/_G0|70߿|˗O`|w0| #O`>'0߿| W0|1| 1dȐ!Oo8 |'P`o|O@ DPB >Q| `| O70߿o O|o|70_'0߿|/_>_70@/@'`>O|_ o|8p@ /'0| o|8P`o'p "LH`> O /|# |/A8`A&TaC!F8 80| o@ ߿8P ˗/߿|˗_ /߿7P|?70 (? o` /߿|8`> , 'p@|߿(`>'p A H H*_ O`>/| ̗/߿| ̷p… .\p… .\0߿|70߿|̗o`/a>#o` /߿|O`'0߿|w0_|W0߿|70|_|W0|-` /|'0_|[80[p… w`>/?#@7`>  <0… :|1Ć+` ߿|߿?O| 7P`|'p| /߿o//_|#O`>o`|˗O`GP`>GP`> G0|/_'0 A$HP`>O@ DP| .\p` .\p… .\p…-\p|-\pB[p!| 3o|-\80| [80… .\h0… .o… .\p… .\pa| .\0| .\0 H0$H A G |#H| #H A$ A$HP`>$XA .4!C cȐ!C 2dȐ!C 2ǐ!Cǐ!C !ǐ!;oa.̗0| cȐ!C 1dȐ| 2dȐ!C 2dȐ!C2d`>2d0a2d/|-̧0Ä[| 2dȐa> 2T!C 2dȐ!C 2d0C ̗0_> 24Oa> 0|0_>c/|ǐ!C cȐ!C2dȐ!C 2dȐ!C 1dȐA'p +X` ,(0_| ` ,(0_,/|,X_| /_ ˗/߿|,Xp`>$XA .40 <0‚ H*\ȰÇ#J(`> 4xaB8 A$XA 'p H'p A /_ O@8`A 7 $H A $H An| A $H A $ȍ@ܘ$H A $H A1B$XA .O@ DPB >QD-^ĘQF=~\Oa> S$H A $H A1_| A̗0H A $H A rc>@La> A $H A |92c> $H A $H Ang0| lo` $H A $H 9+`|˗O`/_+/_>/_ ̗/߿|˗O`|˗/| $H A $H =#`>̗߿|_|//_|/| '0߿|˗_|/_ <0… :|1ĉ+Z1ƍ;z1_|̗o`|˗/| +`_>`| ̗o`˗$H A $H A ` 8 o|_>O`˗/߿|o`>$XA .dC%NXE5nnj/_>˗O`|/_|˗/߿|_>_/_> $H A $H AL`|˗O`/_> ˗O`|_>|_/,h „ 2l!Ĉ'Rh"ƌ7rc| A6$H A $H A0FO@ Dh0,h „ 2l!Ĉ'Rh"ƌ7r| A*$H A $H A0H $H A $H ABd| A $H A $H8`A&Tp ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/.l0Ċ3n1Ȓ'Sl2̚7sm@;;PK_/: !!PK+AOEBPS/img/ms3.gif&dGIF89aFzKiZZKZiZZZKiKiKidKdiddddZdZKdZidZdZdZddKdidddddKdidddddKdiddddKiZZKZiZZZKiKiKiKiZZKZiZZZKiKiKi߿@@@#vfff̙fff3fffffff3fff3f333f3333f3ffffff3f̙3f3f333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f3333333f3333f3ffffff3f<<<33ff3f3fiii3f3fff3ffffffffffff---KKKZZZxxx3f𠠤,Fz H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ ZѣH*]ʴӧPJJիXjʵׯ`ÊKT[˶۷pʝKݻx˷߿ LÈ+-Af#KL˘3k̹i @ӨS^ͺװc˞M۸sͻ Ǣ+_μУKNu|Oj'"h&k9fɥ6(VjvZQ8&'J(婆ڪ^*무:駝)Y堩jNh&F_Pָ)~ 营跤 nj覫oʧ{ڈ{ۦbZ y`il0l&=Wlř.pSӱy$CԢ^0;X4LZ8Wr-@SpAmgL7PG-T_Ug\w`k3amhWp-fMxh߀.uM'~/8>.bbg؝~2]7~٤^޷ZnמK^dwn;Բ6QėdHюf#{3|Wogw}҇E_vc>`gR?|wwQK]>w<ُ2)~XU Z-·{2¥X] TX ZiBLWV]g,T@)4 ɶ ф0l Br@ rDِ-WG G"CnЀNbBĪ15J=1)32hJi\%[l ""F4rdtE%pz`&55EqqGy%rS',d VG;Z# X8R@d!0Eq-^bB0xHIXZ o)]6y\Җڴ[;&#.lF3V Lxf0gK|g>Ec-“2xMZQQ61(.y]dIєӜeipMħ/)́gM9.45 \)HJeF*Տ$Ռ ;ΔTUjH _T=MO*S}9jPNЩJͽz``ɨҪ}HI)uHbr"@Y8 -hٲtk)QW=l:4>V߄F!ZD򖎌9k[7R\L"w WV%sڹvwufX:+Tf+TM+P*mg[]JmӸ˵~w,&N[\׮1a uOBZ"uy0_vz)z{ή5,S[\nd]}1ٱn$@3sw.<ݿTW=oLKl|KYOKV *>&3nd ? X{~tj5TȖ59nWY9ߔ,$Fw+oś.E;Xv]n gost&/ݡnmV2eTkY˒=l i&Xߴ"ڞ OotY͖g%&9'd_Nr󄝻F!`aF>󚟻yw4B:t6իz+Khoއ1~djg)8yoӶ߷W|}MN{wIwnQOG9qswq88odfzʷH58mg&xaZs&Xv(Ȃ6d9ǶV7qq&Wq8h:LlRxmh5tFtHLgjK8mne;2h=(@hFs!oYU~].k0cl i8E'_zp׆tb\9vHxk!>+vojE]mY^HtfMpq"rffnaLu7H&WW׈[ngVi0Um\EplX(>懋d@Uv؊ʘ[Hz8o^HS$j|X#x6ƏWw/(=rox]7ųQo*x"ىInYef*,ْأCY8 18g6)j0tȐƱ&Y5:I֓sXmuH(QIZ W{Xos'45'Jke\dysIaky^ (y1W&草i]ٖW+kȊsrAk Cl~L mq>E_ĘX阏9-rEii7eLo~\9xA&Vr̕ɇG{Iuwy'wOg^h)P^_IhVxɚuxJ>@lADkn^j9)hй[V~هrxXtڨ\\xiZ)9]tٔ&8XT5 z}'[UzǥFjZ5Sdv6ס ypqrѥɉ.J}Gf9R݈ ' ژ٠ɤћSy^٦ϩOX [|ŧ9*v= kʡ#A)`^z*7rFDw vԀ6jɟFso홦WP|HJ:Ah]ӌ$9ZAٚp?a)B>3Tdۺy)iI4;7:Ex=;8ydf)4)17'+n{ߺAmFxO/*9&HR"tR1$[lR O"dke20h+6\e^۲QOxM"j)򷩑'(skduˋIwjC>˷۷Skkm˶2kc{CJuyK(2O&n+2kR[A7?nH xdKik{۴J?RK*{kȫ03~Q+{+Kokxkx#;㻼8m2b~@KeTd ;ۼ_K xF H:0汽Iz{68<,\EvlQ4H<3W{;ºbI- V#7qIKI|b)ʼhTs\|WsA%XJclU/,19BAes xt p`U!ƢQhRtQSL~[Ā|4wWLQ~:>+zhsJ!Ɓ%N Yhjfyb%}~z:#lZɝ<\lnTHUzʼdX3j4:9@K̜q|IbPOȧh?;YZφuܜ< ;O',m5PE{lw1Dл<8%4^幢~;i[H4U}B4$΀<$m\ VjV驛8L^}$XZ(ԳUw`<9GFlO0̲xW(pEir} JӜ6U+o<ePS0SʠZYhr*i=CL;%}H׏-vjl׈b}}mc8 A:=w]ʉٷۅտz؞M՚ܔ3 = ڪL{!]-QΛ=]Aފc8+ 4]DٲmGݜ3`H2&. ~=FC#H1km|~ ΨlŗJMg <>@BD>F^<ݬv*56y㩡MJnLҍHκC^m'啝mRɟezz.&h娡K"l.n_ȽV Jh5^_~k$^q=zM|}Je|lhqB~9ގfj^q8.vH5XA0Ⱦ^R uv>Țݨ:"E#2$.:~3NNn3n9^p2/.~.b O/)L{"#_$&.r H/o1/FCn7l -/eoL0NOLQ?jA_XP5`ϛ__)=Ohovg=^Np/u4`^׮E}UM/vOSoko -(_ńOZWV_?<7i7 +>ᾯi_B?_/o_Ohӟ_GO:@?# znO9 $X>"װ #.E5nG!E$YI)3B,DUΤYM9uRa˄ :%PI.e4уA DUY&ӥPDRSViծ]iVjٟQΥ[׮ʮ`%ٻ^‰/^~2\Y߷[3GPrϩU|jر /Y̲um no \tfqO&|uq7;^=%M/GmݻbSW^|G죁*{"_|zQKn?V4#?O;@ ϵ&C*$D:EqE{{jԑ#Q<w"H$TrI&tI(rJ*RF$1FR"_rL29.1LüM8sN:,L ٤M<tPB 5T3HC#tRJ+3ѡòQGQKCuTR+Ŵ7!-UXcSSVQtuV^{Zu\7WdUV`5b?["i-fzDasSz-j6jhkZH |a28kưAl.L𸐳;m:jm? I¥\v6[κ޲[ 2tt$)˗$p'7|/#>i'uUO]Ӵ}܆rn{w1~{ؿwV/\*g|t(ؕWvuwIno[wo~AY 25~_\6*Qz`:)9覦5x`O3`㚷?-qCcebY ЁKL BpJQLs=*χ 4#6Mۚ '3Ҏk"H,J1N@zц"q|f70}i\E&MqTHqC^GR!ߓ(JrP%9MJm`GImHDT rdVD _FW2R,5EXKb@47I*ozglyNxJ*f(Wݳ[ɤe=mOMe%hA zP&T ͇hE-zQfThG=QTP%JF`iK]RT3iMmzST;iO}Sե%U:×RˬTKejSTFUM%j?RvF0UckYzVkUkZVU3*9R)י%layZW!3yX&Sv~le-+YV󪌅V_J5%mio*M^YӾmm{Zu~kWBu%nqc[zn cc:\uѥnp.2utS~Wnղp/N^#\-z^74e~޵_Mo)T fS p g8V_UmqI|kXTmyỀx3[L802q}| g:1wKdpXXE2�r"Q+/V]rXy?Je3oNZpv2WDg1Ƥ`3Zˀʟ KAzOR扡)-9L9{Ӎ5ARөVMJ=gYߺյqj_WսvM]C:lFurlaڞ˳lu>ɱci?!=V7m0vΑ]ۛHweEF ό\ Vx^eywj=ӛ4#}KKGqY).8c694#>76С}&-Otg<9ág eǩqy]kwv ]j;v]XOquwqw'N}G55x?8yω93y&m؝GtD# 'jqDzD77$dCs{ÖCUCA\gTE%;[ĈO?FK.E_r#($5*q\%DYjFjFk(E31 hE"#BIv\HHlITG!3YC==È0X9DTnH.eHÃJtŪDjìLd TԹlzMY>؜͆MڼMc\lͺ) Nܨ,NLXG&x@ NӛNN綠ϧђ4Ͻ+OlONOˌOcOlOϘMP-P MP]PmДP-RN P P PC PPP堊O-+>MQ?]Q}s(QQQ}QQ%Q!҃Q"=R$LR&}X'&RJB>+%أR.5,A(KR2-/e0}1-S6œ3 ,S)mS:7/UY4c8>MT)RITH9UTKuFm!1JK 'T]|V,I#aT1tTTQUӜ$2lT*2EIeΪU`%I5G[5YEPt4IP Vh=am^HMs\k\hVRj}Ga-G|HWcom?Tk QVGWWjWY;S5U~TmI̜DXcUXE-X WV]؀=؋X (X؎]:َؒmY[RăYٹYٮYYnR' ZZ-Z=ZMZ'mZ}ZZZZUZZZZZ [[-[ڀ;PKl"&&PK+AOEBPS/img/lnpcc011.gifGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɓ+/_|˗`|̗/_W0_| ˗/_|+/_|˗`|̗/_W0_| ˗/_|+/_|˗`|̗/_W0_|C0 <0… :|1ĉ+ZH? 4xaB 6tbD#C"E)RH"E)JG"E)RH"|)RH"E)RHQb>)RH"E!H|,H? 4xaB 6tbD)"W0_Ŋ+VXbŊ*R1_Ŋ+VXbŊWbŊ+VXbEWbŊ+VX"|UXbŊ+V"|;"|*̗`|/_+VXa+VXbŊ!0_>U`W_|H0_̗o`UXbŊ UXbŊ+Va> ̗|`>'0_|˗`|˗O`|˗O |o`(߿| O@ DPB >(0_  O@/|8`A&TaC!̇0|˗/| ̗0_>/_#/_'0|/|/߿|/_>˗O`|#F1bĈE/|[/|/bĈ#Fa>˗_| K/| ˗O`|(?/_|/_|'0_|˗/߿|'0_ ̗? 4xaB 6t|'0_>/_3/|/_|/_|˗_|E1bĈ#0_h0| S/_|(@ ̗O |'p`|˗O`|O O? O@ DPB >(0_ ̗O`>O` _߿ O?O ,h „ 2l!| /_>̗O`>0@@˗O`| '`> 70߿ '? 4xaB 6t|1̗O`|˗O`>W0_> 70߿|˗O`| ̗/_Ĉ#F1| /_D˗/| ˗O`| ̗`| ̗`| O߿| 8`A&TaC!W0|'0_|/_|/|70?߿O@ DPB >a|x0 Bb| /D!B"|1̗_| '0|̗O`| ̗_'0|/D!B"|!&_>˗b| ˗"D!Ba>(߿'| 0@(_o`o`>$XA .dC1a>A"D!B"D B"D!Ba> BL|!B"D!BQa>!B"D!B|a>/D!B"D!BT"D!B"DC"Ą H A$XA .dC%N0_Ŋ+VXbŊUXbŊ+VXbł*VXbŊ+V4bŊ+VXbŊ+W0_Ŋ+VXbŊ H*\ȰÇ#JHŋ(0,h „ 2l!Ĉ'RG"E)RH"E%+"E)RH"E(RH"E)RH|)RH"E)̇0E)RH"E)R"E)RH"ŃH"E8`A H*\ȰÇ#'QD%J(QĄ(QDE'QD%J0D%J(QD%(QDE'QD%J0D%J(QD%(QDE'QD%J0_|%J(QD%JdOD%̗/|I(QD%*W0D%J(QD(QD g0_|%J(QD 'QD%J(QD$J(Q"|3/b>%J(QD K/_|%J(QD%F'QDPO|8P`>$XA .dC{0 H*\ȰÇ#J|a'No`>'p "Lp!ÆB(",h „ 2l!ĈCoĉ%` H*\ȰÇ#J| <0… :|1D8qD g0_|'N8qĉ=O@$XA .dC%N,"E˗`(RH"E=̗/_>)RH"EQH"ł"H"E):W0_|)RH"E)H"EEG"E)Rt`>)RH"EH"EEG"E)Rt`>)RH"EH|,H? 4xa| K0a„ &L0a„ &L/_| H*\ȰÇ#JH1EEGbA$X ,h „ 2l!ĈI(QD%J(1a>$J,/b>拘OD%J(Qa>%J(QD%&̇0|'`$JL/b>%J(QD$J(QD%J0| /Ă"(1a$J(QD(QD%J(Q| /D"c/_|;/b>%J(QD$J(QD%J(1|'`'P ,80_>4X0,h „ 2l!Ĉ̗0_>%J(QD%0߿|$w`> 4xp ,/_,XP`>$XA .dC+/!|'p "Lp!ÆB(q| G` H8`A g`| H*\ȰÇ#W0_B <0… :|1ĉ5̗/ł"k0 H|38`> 4xaB 6tbD8`A&TaC!F0|h0_| ˗o|%O@ DPB >QC$XA .dC%:̇0ĉE0D拘oĉ'N8Q`  <0… :|1D8q`&Jw0_|'N8qĉ=̗/ĉ'N8qD8q`&NQD(RHbA$X ,h „ 2l!Ĉ'QD%J(QD$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%>1D%J(Q|%J(QD%JLa>%JX0_|E'QD%J0D%J(QDCOD%'0|I(QD%*0_|%J(QD%J'QD '0|I(QD%*`>8`A&TaC!F8`>)R`(RH"E̗`>'p "Lp!ÆB(q"|)R1| 8`A&TaC!F? 4xaB 6tbDH"Ň!̗`> 4xaB 6tbD8`A&TaC!F8`>)R|/a(RH"E=O@$XA .dC%Ḃ0ĉ'JO@7pO@ DPB >_I(QD%J0|%J(a$J(QD(QD%J(Qb|I(Qć"(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%J'QD拘OD%J(Qa>%J(QD%J'QD'p 8`A&TaC!F`>%J(QD%2'QD%J(QD%JD`>%J(QD%2'QD%J(QD%JD`>%J(QD%2'QD%J(QD%JDOD%J(QD !'QD'p 8`A&TaC!FOD%J(QD !'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(a$J(QD(QD%J(Q|%J(`|拘OD%J(Qa>%J(QD%J'QD `$J(QD+OD%J(QD I(QD g0_|%J(QD 'QD%J(QD$J(Q"| 'P| H| H*\ȰÇ#W0D%J(QD(QD g0_|%J(QD I(QD%J(1a>$J(Q"|1D%J(Q|%J(QD%JLa>%JH0_> 拘OD%J(Qa>%J(QD%&̇0D%J,/_"(QD%JTOD%J(QDI(Qć"(QD%JTOD%J(QDI(Qć"(QD%JT`>%J(QD%2'QbA$X ,h „"̗0a„ &L0a„ &L_8`A&TaC!F8b>勘"ł"H"E):W0E)RH"E Q/_|)O@ 'p "Lp!ÆB/_|%J(QD%JdOĂ"(1a$J(QD(QD%J(Qb|1̗Ob|I0_|%J(QD I(QD%J(1a>'1a˗O"|I(QD%*'QD%J(QĄc/Ą"k/_|;/b>%J(QD$J(QD%J(1|$&1_CO@g_> O@ DPB >_>%J(QD%J0_> O@  ˗| ? 4xaB 6tb (QD%J(Q"| 哘0A$X H|3h`>$XA .dC+OD%J(QD 1̗Ob|5̗/_>1D%J(Q|I(QD%J(a>  ̗w| H*\ȰÇ#W0D%J(QD(`$J`$J(QD(QD%J(Qb|IX0_|%w0_|%J(QD I(QD%J(1a>$J,/b>拘OD%J(Qa>%J(QD%&̇0DE'Qb|I(QD%*'QD%J(QD$J,0 O@ D0_B&L0a„ &L0a„  <0… :|1ĉ XbŊ"XbŊ+W0_Ŋ+VXbŊ*VX"|,H? 4xaB 6tb (QD%J(Q"|%J(a$J(QD+OD%J(QD I(Qć"(QD%JT`>%J(QD%̇0D%J|/b>%J(QD$J(QD%J0|%J(`|拘OD%J(Qa>%J(QD%&̇0D%J,O`>"(QD%JTOD%J(QD !'QD '0|I(QD%*'QD%J(QD$J(Q"8p| H*\ȰÇ#'QD%J(QD$J(Q|E'QD%J0_|%J(QD%JdOD%̗a$J(QD+OD%J(QD I(QĂ拘OD%J(Qa$J(QD%J0D%J$0@ o  <0… :|1|%J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%>1D%J(Q|%J(QD%JOD%>O@ 'p "Lp!ÆB/D%J(QD%(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QD(QD8`A H*\ȰÇ#'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%>1D%J(Q|%J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(Qb|1D%J(Q|%J(QD%JOD%'0|I(QD%*'QD%J(QD$J(Q"|3/b>%J(QD (QD%J(Q"|%J(`>(P`>$XP`>$XA .dC+OD%J(QD I(QD3/b>%J(QD (QD%J(Q"|%J(` 拘OD%J(Qa>%J(QD%&̇0D%J$/|E'QD%J0D%J(QDCOD%̗/|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QD%(QDE'QD%J0D%J(QD%( |,H? 4xa| K0a„ &L0a„ &L/_| H*\ȰÇ#JH1EEGb|QH"E+"E)RH"E(R/b> 'p 8`A&TaC!F`>%J(QD%2̷`>'p ;xp`_$J(QD%J0_|$"1D E'QD%J0D%J(QDCa|拘a|I`$J(QD(QD%J(Qb|5̗O"|5O@$Xp`|3h`>$XA .dC(QD%J(Qb|5̗O"|8`A'p +(0_O@ DPB >_>%J(QD%J0_>O@  g_> O@ DPB >_>%J(QD%J0_>E`>8`A g`| H*\ȰÇ#W0D%J(QDk/D"k/_>1D%J(Q|I(QD%J(a> 拘a>1D%J(Q|I(QD%J(a> 拘O拘OD%J(Qa$J(QD%J0DE'Qb|I(QD%*'QD%J(QĄ(`$JL/b>%J(QD$J(QD%J0|%O@ 'p "L/!| &L0a„ &L0a„ O@ DPB >QĈH"EEG"E)Rt"E)RH"E(RHb|QH"EH"E)RHb>)RX`> $ <0… :|1|I(QD%J(a>%J0_|%J(QD 'QD%J(QD$J(Q|I(QD%*W0D%J(QD(QDw0_|%J(QD 'QD%J(Qā(QD g0_|%J(QD I(QD%J(1a>$J(Q"|3/b>%J(QD$J(QD%J0|%J(a>"(QD%JTOD%J(QD !? 4xaB 64`>9tСC:t0C:tСC:t`>:tpa|9ϡC:tСC:tC:tСC9tСC %p`>:tСC+ϡC:tСC:tϡC:T0@ o  <0… :|1|I(QD%J(a>%J0_|%J(QD 'QD%J(QD$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%>1D%J(Q|%J(QD%JLa>%J`> $ <0… :|1|%J(QD%JLa>%J(QD%J(Q"|%J(QD%JOD%J(QD%J0D%J(QD%(QD%J(QD%"W0D%J(QD'p "Lp!ÆB(q"Ŋ/O| H*\ȰÇ#JH1E)RH"E)R`>)RH"EH"E)RH"EQH"E)Rx0|)RH"E)RHQb>)RH"EC"E)O@ 'p "Lp!ÆB/D%J(QDCOD%>1D%J(Q|%J(QD%JLa>%J0_|%J(QD I(QD%J(Qb>%J0_|%J(QD I(QD%J(Qb>%JX0_|E'QD%J0_| (QD%J(Q|%J(`> 拘OD%J(Qa˗/D%J(QDI(QD g0_|%J(QD ̗`>'p "Lp!ÆB(q"|)R0|%O@ DPB >Q"D$XA .dC%6̇0ĉ'J70| 8`A&TaC!F? 4xaB 6tbD!7qĉ g0_|'N8qĉ=O@$XA .dC%Ḃ0ĉ'J̗O`>"8qĉ'Na|&N8qĉ'NDoĉ'˗`&N8qĉ8qĉ'N8q|'N8Qa&N8qĉ8qĉ'N8q|'N8Qa&N8qĉ+oĉ'N8qĉM8qD"8qĉ'N`'N8qĉ'7q@$X ,h „"̗0a„ &L0a„ &L_8`A&TaC!F8b>勘"ł H A$XA .dC(QD%J(Qb|IX0_|%&1D%J(Q|%J(QD%JLa> 拘OĄ"(QD%JTOD%J(QD !'Qb|I/|I(QD%*'QD%J(QD'Qa$J̗`$J(QD{/_>%J(QD%[/D"kO|1D%J(Q|%O@$XA .dC%N4oa|拘a|Q` H*\ȰÇ#J| <0… :|1ĉ-̗"|5O@$Xp`>0 <0… :|1D H*\ȰÇ#J80|("w`> 4xp ,(0 ,? 4xaB 6tb K0 H*\ȰÇ#JX0|("w`> 4xp ,(0 ,? 4xaB 6tb˗/D%J(QD!̷0_> E`>8`A g`| H*\ȰÇ#0D%J(QD !̷0_> E0_|拘OD%J(Qa>%J(QD%&̇0DE0Ć"(QD%JTOD%J(QDIX0_|%&1D%J(Q|%J(QD%JOĂ"(1a$J(QD+OD%J(QD IX`> $ <0a%L0a„ &L0a„ &`>$XA .dC%N"E)O@ 'p "Lp!ÆB/_|%J(QD%JdOD%>1D%J(Q|I(QD%J(a>%J0_|%J(QD I(QD%J(1a>$J(Qb|1D%J(Q|%J(QD%JLa>%JX0|E'QD%J0|I(QD%J0|%J(`|1D%J(Q|8? 4xaB 6tbD H"E K0 <0… :|1D H*\ȰÇ#J80E)Fw0_B$XA .dC%>O@ DPB >QD(RHa|EG"E)Rt`  <0… :|1ĉQH| EG"E)Rt`G"E)RH1b>)Rt0@ o  <0… :|1|%'QD%J(Q|I(Qć"(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(a$J(QD(QD%J(Q|%J(a$J(QD(QD%J(Q|%J(!|,H? 4xaB 6tb (QD%J(Q"|%J(QD%J(QD (QD%J(Q"|%J(QD%J(QD (QD%J(Q"C$XA .dC%NXE H*\ȰÇ#J1|)RH"E)RHQb>)RH"EC"E)RH"E)JG"E)RH|QH"E)RH"E(RH"E)R<a>'p 8`A&TaC!F8"|+VXbŊ+Wb*VXbŊ+VDbŊ+VXbE*R1_Ŋ+VXbŊWbŊ+VXbEWbŊ+VX"|UXbŊ+V!|'p ;xp`>$XA .dC%N0_|+VXbŊ+c/_E"c/_Ŋ+VXbŇ*VXbŊ+J̇0|*1_|XbŊ+V0_Ŋ+VXbEc0@ HAO@ DPB >QĄ(RH"E)R<a>Q< |,h@$XA .dC%ND"E)RH"Ńc/Ń'p O@ DPB >QD(RH"E)Ra|拘!|'p "Lp!ÆB(q|(? 4xaB)̧a>̧PB *T0B)Tx0ƒ̗/B *TPB *TPB  W0B*TPa| S0SPB *LOB Sx0B *TPB *TPB *D`>̗/|̗/_>/_/_+/_>#/_|˗/| ̗/| ̗/|˗O`|˗_|SPB ˧PB)/|_> ̗O`> ̗_|'0߿|˗O`>/_>˗_|O`| ̗? 4xaB cȐa| cȐ!C 2dȐ!C 2dP`>8߿/_>_|˗o| 7P`/߿|'0|70|/| ̗? 4xaB C!C1,!C 2dȐ!C 2dȐ!CG0|'0|O`>'P/߿? /߿|o? /߿_/߿߿8`A&T0| .D0 O@ DPB >QDIG0_>3O`O`>'0߿| ̗O`> /߿|/| '0|O`|/| 70_ŊCbŊ+VXbŊ+'1_| g0|8_߿@o|0 G?'p "Lpa| 2dȐ!C 2dȐ!C 2dȐ!C2dȐ!C2dȐ!C 2\!C 2dȐ!C 2dȐ!C 2d(0_| 2dȐ| 2dȐ!C .O@ DPB >QD-^$@8`A&TaC!F8"|,h „ 2l!Ĉ'Rh"A  <0… :|1ĉQH"E)RH"E H"E)RHQa>)RH"E)R(1E)RH"E!G"E 'p 8`A&TaC!FOD%J(QD !'QD拘OD%J(Qa> H*\Ȑ!,h „ 2l0|:tСÃСC:tС| s80Cp`>9tСCsСCp`>:tСCsH0Á p`>9ϡC:t0C:t0_|9ϡC:tСC c|s80ÁСC:TϡC:\O`>СC:tС|%̗/_>9|s80C:tPa>:tPa|p`>:tСC9@(0(? ϠA ,Ϡ ,? 4xaB 6t80Ç>|H0|%O@ DPB >QC$H0_+X| `'p "Lp!Æ{Ç ` H*\ȰÇ#J+X| `,XP`>$XA .da>:tСC3|:tСC:|'p ,/_+X| ? 4xaB 6Da>:tPa|p`>:tСCs/_|P`>9|:tСsСC˗`>9tСC:t0p`>9|sСC*СC:<|:tСC:`>9|s80C:tPa>:t|sСC:tas80Cp`>9tСCs!|,H? 4xa| K0a„ &L0a &L/_| K0_ƒ"̗a%L0a„ &L0a &,/!| &L0_B&L0a„ &L0a„ W0_"̗`%D/!| &L0a„ &L/a„ K0_„ &O@ 'p "Lp!ÆB/_| E1_|E'QDC!|'p ;xp`_> H*\Ȑ!,h „ 2l0| /_> 9ϡC9ϡC:tСCp`>9|sСCˇ0|s0Á˗/C9ϡC:tСCp`>9|sСCˇ0B O@ w| 'P ,H0 ,? 4xaB 6tb/_|E1_|%J(Qb   |,h@$X_|3h`>$XA .dC{/_|A1_|I(QD '` H8`|`'p "Lp!ÆB/_| 8? W` ,(0_+X| H*\ȰÁ70_=!|'p @$XA .dC%BO@,X_ W`A ,(0,h „ 2lp`>  ̗/wP |,h „ 2l!Ĉ'p A ,/_+X| ? 4xaB 6t80Ç =aP`>|Ç {0@ H| g`| g`| H*\Ȱ!|9t0Á:L`>9tСC:t0p`>9|sСCˇ0C 9ϡÄs80C:tСC9$|s80ÁСC:a>s80Cs80C:tСC9$|s80ÁСC:a>s80Cs80C:tСC9$|s80ÁСC:TϡÆ H A$XA %D/a„ &L0a„ &L0| K0_ƒ"̗a%L0a„ &L0a &L0a„ ̗a &L0a„ &L0a„̗p`%%J0_|%J(QD `> 4xaB 2O@ DPB Ç>P`>|Ç {80CP`=Ç>La>|a=|Ç>|H0Á _=|>|a|=|Çw0C>|Ç>$a|=|{(0C>|Ä{Ç `=|Ç>|H0|{(0 P`=|Ç !Ç̗O`> Ç>|衇(,08 | `,XP`  <0… :Ç>D` H*\ȰÇ#J+X| `,XP`>$XA .d|>||%O@ DPB >QC$H0_+X| `'p "Lp!Æ{Ç ˇ0C>|Ç>$`  g | g`|  <0… :Ç>,/a=|Ç>|H0_| ˗|{(0C Ç>Ç>$0@ o  <0… :|1|E1_|E'QDCOD%>1D%J(Q|E1_|E'QDCOD%>1D%J(Q|E1_|E'QDCOD%>1D%J(Q|E1_|E'QD%(QDE'QD%J0|A1_|I(QD$J(QC$X ,h „ 2l!Ĉ0_|E1_|%J(Qb>%J(QD%J(Q"|1O@ DPB 8`A&TaC=|Ç>|Ç>|0_|>|Ç>|a>|Ç>|Ç+Ç>|Ç>Ç>O@ 'p |,H? 4xaB 6t0a>!B"D!B|a>!B1a>AD"D!B_>!B"D!B|a>!B1a>AD"D!B_> _僘/D B"D"D/D B"D僘0|{O`>1_>!B|!Ba|3/_|AD"D!B_>a|'0_|{/_>!B|!Ba> 30G A O@ DPB >L`> 1D 0_ B"DA"D g0| AD"D!B_ 70|/_>"D!"D`ˇ0D B"D+|A0_>c0 H*\ȰÄ>|C3`>{0Ç>|a|=/|{|{(0Ç>|Pa>|` K` =|Ç&Pa| `>8 |+X| H*\Ȱ{Ç '0|` =|Ç&Ç>|ÇCÇ>,/_ ˗a =|Ç&Ç>|ÇCÇ>||{Ç>LÇ>|Ç>4Ç>||{Ç>LÇ>|Ç>4Å H A$XA %D/aB&L0a„ &L0a O@ DPB >QD(R/b> 拘"|)RHb|QH"E)R0EEGbA$X ,hp`>$XA .dÄ "D!B"DA0 Bl|"D!B`>!B"D!B(0|`>A0 "a|w0_˗_>! "D!B"D!0_|`>1̗|僈0Ă̗|G0_>" B"D!Ba>˗_| _` ˗/|K/_|˗|(0_|'0_˗O |'| 7P| <0!| *TPB *TPB *Tx0| ˗_|*O| 'p ,(0_>g`> gP`|˗_|G0_|˗O`> /_>˗_|/߿|˗/| 4hРAO@ DPB >QD1̗/߿|U |,h@$X0_|+/_ ,X`˗O`|(?/_|/_|'0_ ̗/_˗O`| ̗? 4xaB*TPB *TPB *TP| 'p`>$X|8`A'p `|ϠA/_|(@ ̗O |'p`|˗O`|0@| <0!|)TPB *TPB *TP| 'p`>$X|w |'p `> gРA '`> '?/| O || ' _>$XA +OB *TPB *TPB S(0_˧P| S80_| w0_|)TH0|/_|+/_|3/_|(߿| _ '? HW0B *TPB *TPB *̧PB)S`> ̧`| '0B *`> *TPB *TPB *a> *O| *<`>COB*T(0_| ˧Pa|)TPB*TPB *TPB *T`>*T_>)TPa| S`> *TPB *LOB *TPB *TPB COB Sx0B )T@8`A 4h0,h „ 2la|!B"D!B0|!&O@ 'p "L/!| ̗0a„ &L0a„  <0… :|1ĉ XbŊ"80_Ŋ+V80_Ŋ+VXbŊUXbE$X ,hp`>$XA .dÄ "D!B"DA"D A"|!B"D"D!B"D"D/D B"D+"D!B"D! "D!&_>A"D!"D!B"D!"D˗`>w0D B"D"D!B"ć"D g0| AD"D!B_>!B"D!B|a>!B0|O|8p|8p8`A&TaC"D!B"ć"D3`|!a>!B" B"D!B"|!B|'0|"D!B"D!B"D!""Dˇ0_|AD"D!B_ B"D!B|!Ba '0|"D!B`>!B"D!B(0D!Bt0@ o| (08p`>$XA .dÄ "D!B"DA"D A"|!B"DA"D!B|A"D A"|!B"DA"D!B|A"D A"|!B"DA"D!B|A"D A"|!B"DA"D!B|A"D 8`A 0 O@ DPB >L"D!B"D!""D!B"D!B`>!B"D!B0D!B"D!B"D "D!B"DA"D!B"D!B4`>!B"D!B(0D!B`> $ <0… :|1|I(QD%J(a>%J0_|%J(QD I(QD%J(1a>$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%̗/|I(QD%*'QD%J(QD$J(Qb|1D%J(Q|'QD%J(Q|%J(`|1D%J(Q|%O@$XA .dC%N4"E`(RH"E̗`>'p "Lp!ÆB(q"|)R0|%O@ DPB >Q"D$XA .dC%N"E` H*\ȰÇ#J| <0… :|1ĉQH|3/b>)RH|(? 4xaB 6tbD!7qĉw0_|'N8qĉ=̗oĉ'N8q|M8qD"8qĉ'Noĉ'N8qĈ8qĉ E7qĉ'N(0ĉ'N8qĉ8qĉ E7qĉ'N(0ĉ'N8qĉ8q |,H? 4xa| K0a„ &L0a„ &L/_| H*\ȰÇ#JH1EEGbA$X ,h „ 2l!Ĉ'QD%J(QD$J,/b>拘OD%J(Qa$J(QD%J0DE'Qb|I(QD%*W0D%J(QDk/_| 拘OĄ"(QD%JTOD%J(QD !0_>I,/b>I,`$J(QD(QD%J(Qb|-̗`>E0_|$˗`$J(QD{/_|%J(QD%"̇0|$*`>$8`>8`3/A'p "Lp!ÆB/CO@ DPB >QĂGa H8`A gp |,h „ 2l!Ĉ!'p "Lp!ÆB(q| #|8`A'p @$XA .dC%>O@ DPB >QD'0_>E`>8`A g`| H*\ȰÇ#W0_BO@ DPB >QĂ˗/E"k/_>1E)RHa˗/E)RH"ň(R/b>1E)RHaH"E)R0|)1EEG"E)Rt"E)RH"ŃH_(R,/b>)RH|)RH"E)̇0EEGb|QH"EH"E)RH`>(R0 O@ D0_B&L0a„ &L0a„  <0… :|1ĉ XbŊ H A$XA .dC(QD%J(Q|%J(a$J(QD+OD%J(QD I(Qć"(QD%JT`>%J(QD%2'QD拘OD%J(Qa$J(QD%J0D%J,/_"(QD%JTa|%J(QD%*̇0D%J,O`>"(QD%JTa|I(QD%J0|%J(`|1D%J(Q|8? 4xaB 6tbD!7qĉ3/!|,h „ 2l!Ĉ!'p "Lp!ÆB(a>&N8q|%O@ DPB >QC$XA .dC%N$"Eˇ0_|)RH"E'p ,h „ 2l!Ĉ'G"E%1E)RHa˗"E)RH|)R`>80? 4xaB 6tb KOD%J(QDI(Qć"(QD%JT`>%J(QD%2'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(a$J(QD(QD%J(Qb|I(Qć H A$XA .dC(QD%J(Qb|I(QD%J(QD(QD%J(Q|%J(QD%J(QD$J(QD%J(`> 4xaB 6tbD)Vx O@ DPB >QDG"E)RH"E˗/_|)RH"E)*O@$XA .dC%NX"|`/^xŋ ̗/_/^xŋ/2̗/_.^xŋ/C`|]xbA$X ,h „ 2l!ĄW0_Ĉ#F1bĈ#̇0|1bĈ E1bĈ#F0_| 1bĈ#F1bā;/_|#F1a"F1bĈ ˗/|#F1bĈ#F0_|1bD;/b#F1bD˧0_Ĉ#F1bĈ#2̷0_|"Fa> 拘/bĈ#Fq`|+/bĈ#F1bĈ k/_|#F0_> 拘/bĈ#F_|5W`>/_>$XA .dC%NDa|QHb 拘"E)R|/_|̗`>8`A&TaC!F8`>G"E3/b>)RHa|EW0_B <0… :|1ĉI̗/_>)270| 8`A&TaC!F? 4xaB 6tbD !7_|M8a|̗`> 4xaB 6tbD8`A&TaC!F0|˗/ĉ˗`&N8qD7q`7qĉ'N81b>&̗/_'N/b'N8a|M,a|'N8qĉ'&7`|M8qb&N8qą7`'N8qĉ'7a|)O@ 'p "L/!| &L0a„ &L`|%L0_| H*\ȰÇ#JH1E˗0_|)1E)R/_|(&W0E)RH"E QT/_|EGbA$X ,h „ 2la|=|/_|>|Ç>|a˗/_|{a=|Ç˗/ÇÇ>|Çc/|˗/_ |{Ç.̗/_ {Ç>|Ç !0_=/_|=a|>P`>|a|{`>|Ç>|0| ˗aA O@3h_|4hP`>4X0,h „ 2l`|=|0Ç>|Ç>da{0_|`>8`AϠ8`A&TaC˗ÄÇ>|Ç k/_ ˗ |,h@$X0_|+X| H*\ȰC|˗Ç>|Ç 0_|&O'p O@3/A'p "Lp!Æ˗/Ç ̗`>8`A&TaC!F8`>˗"|˗oa  g_>8`A&TaC!F? 4xaB 6tbD[/|(G0_|k/EK0 <0… :|1ć H*\ȰÇ#JH0E̗/_(Fw0_|)RHQ`|Q0_| 8? 4xaB 6tbD!7q|˗`1ĉ'N,/_|'20_|'N8qĉ%Coā˗/|'1ĉ'N/_|':7qĉ'N8qb|M80|oă"8qĉ˗oć&N8qĉ'Na'p 8`A&̗a &L0a„ ˗/_„ &L/,h „ 2l!Ĉ'R4bEW|UXb|Xa+VXbŊ Xb|U`> $ <0… ˗/_Æ W0_Æ 6lذaÆ 6lذ| 6l0_|6l(0_C6lذaCװaÆװaÆ 6lذaÆ 6l(0_Æ *̗/_Æ kH0_Æ 6l0_|6lPa6lذaÆ 6lذaÆ kذaÅװ!| kذaÆ ˗/_Æ 2װaÆ 6lذaÆ 6da 6l/_| ˗`5lذaÆ˗aÆ װaÆ 6lذaÆ 6dP>? 4xaB ˗/C3a| 2dȐ|cȐ!C1/C 2dȐ!C 2dPa>2dȐa|1T/|1,!C 2L/_| 2d0a>˗!C 2dȐ!C 2d0| 2dPa|1d`>1dȐ!C˗!C .p |'p "Lp!ÆB(qb|)Rd/_|;/!|,h „ 2l!Ĉ!'p "Lp!ÆB(q|)Rt/_|C/!|,h „ 2l!Ĉ'p "Lp!ÆB(q"|)R/_>拘"E˗"E̗`>8`A&TaC!F8`>)F̗/_ 8p| H*\h0_|2dȐ!C K/_> 2dȐ!C 2dȐ!C2dȐ!ÃPa>1dȐ!ÅcȐ!C cȐ!C 2dȐ!C 2d80| 2dȐa|c0Â2dȐa|cȐ!C cȐ!C 2dȐ!C 2d80| 2dȐ|cx0Â2dȐ|cȐ!C cȐ!C 2dȐ!C 2d80| 2dȐ!|cX0Â2dȐa|cȐ!C ǐ!C 1C 1C 1C P>? 4xaB "̗/_8`A H*L/_ .\p| .\p… .\p… .$XA .dؐ`|O@ 'p "L0_|*TPB ̧PB *TPB *TPB!̧PB *T`|̧`> *T80_|*TPB ̧PB *TPB *TPB!̧PB *Ta| ̧`> *T/_|*TPB &̧PB *TPB *TPB!̧PB *TPa|˧`> *T/_| *TPB SPB *TPB *TPƒSPB *TX0_|?7p| H̗/_> *TPB SPB *TPB *TPB)TPB *,O`>W0|)TP|SPB *T`> *TPB *TPB *Th0B *TPB g0_|'0| *TH0_|*TPB *4`> *TPB *TPB *TOB *TP!|`>?O@ Dx0_|&L0a„ &L0_| H*\ȰÇ#JH1E):70|˗O`(R/_|)RH1a(RH"E)RT"E`>/|'˗/E)R\"E)RH"ŃH"E g0_A O$H A ˗/_>$XA .d!|>|Ç>|a>>|Â; |'P`>$XAˇ!B"D!B  <0… :|1ĉ!G"E S/_|Qt/_|)RHb>)RH"E!H"E-̗/_>(2̗/_>)R(1E)RH"EQH"ł'P ,h|C!B"D!B+? 4xaB 6tbD)H|,H? 4xa| ˗/_„ ˗/_„ &L0a„ &$`>$XA .dC%N""H |,h0,hp`|'p "Lp!ÆW0D!B"D!B"Ą b|'P ,h0_|8`A&TaC +"D!B"D! b|a> ̗/_>˗"D!B0D!B"D!>̇0|`>A0˗/|"D!B"D!B"D!0_x0` ˗a>˧0_| B"D"D!B"ćk_|/_|80_ `w0_| B"D "D!" "˗/_ W`A 0 H|`||/_| H*\ȰÇA"D!B"D1a H8`A W0|3X`>'p "Lp!Æ>W0D!B"D!Ba|;0 <8? | g_>˗/,h „ 2l! 1bĈ#F1bDa'P ,H0 | 'p`>$XA .dC "D!B"D9̗b|k/_>W0_>K/_|˗"D!B` B"D!B|!&_> ;`|C/_|˗"D!B`>!B"D!B|a>/D A`|)̗/_>!B"D B"D!Ba> BL|!6_>0_| B"D"D!B"ć1!| H| 4hР ,o`| ,/_| H*\ȰÇA"D!B"D BL0 O@ D0_B˗/_„˗/a„ &L0a„ " <0… :|1ĉ XbŊ H| H <0… :|80_|!B"D!BQ`>!B1aqa|A"D+"D!B"D! "D!&0_| :̗/_>!B"|A"D!B"D B|g0_|˗_>˗"D!Bh0_|!B"D!B0|!Ba> 3O |/,h|C!B"D!B O@ DPB >QĈH"E g0_|˗/_|˗/E)R|"E)RH"ŃH"E +_|G1b|QH"ņ(RH"E)R<a>)R` $H A /_| H*\ȰC>|Ç>|C>|Â!70_|;ÅÇ>$Ç>|Ç>4Ç>,/a _>? 4x|K0a„ &L0a|'p "Lp!ÆB(q"|)R`>8`>'p "D/_| &L0a„ &<`>$XA .dC%N"E)̗/_(R4/_|)RH`(RH"E)RT"E) ̗/_(RD/_|)RHQ`>)RH"EC"E)˗/߿|Q0_|(RH|)RH"E)̇0E)N̗/_>"Hqa|QH|)RH"E)̇0E)F̗/_>"Ha|QHb|)RH"E)̇0E)>̗/_> H A$XA ˗/B *TP‚*TPB *TPB *TP| *TPB ˗/B *TP|SPB *TH0B *TPB *TPB *4OB *TP|SPB *4/_| *TPB +OB *TPB *TPB SPB *T/_| *TPB ˗OB *TPa*TPB *TPB *TPa> *TPB˧p |,H? 4xaB˗o… .\0_| .\p… .\p… .o… .\0_|̷` .\0_|.\p… -\p… .\p… .\0| .\pB˷`-\pB˷p… .Do… .\p… .\p„[p… ̗/_-4o… ./_| .\pB.\p… .\p… .La .\p!|S/_ ˗a .\p O@ DPB5lذaÆ 6lذaÆ CaÆ 6/_| g0|װaÆ ˗/_Æ 6l(0_Æ 6lذaÆ 6lذ!| 6lذa|1̗O`> '0| 6l`|5lذaÆ6lذaÆ 6lذaÆ kذaÆ ˗|W0|5lذaÄ װaÆ +aÆ 6lذaÆ 6lP` 6l0_|70| w0_Æ 6\/_ 6l0_| 6ljjjH 'p "Lp|ch0|70| 2dȐa|cȐ!C +!C 2dȐ!C 2dȐ| 2dpa|1 2d0a|1dȐ!Ä2dȐ!C 2dȐ!C ̇0C 2 2dpa|2dȐ!| 2dȐ!C 2dȐ!C C!C P>8`AC_>"D!B ˗/B"D| H*\ȰÇ#JH`+˗/_EWbŊ˗bŊUXbŊ+Vh0_E H 'p "/!| &L0a„ ˗/_„ &L0_| H*\ȰÇ#JH1EEO@$XA8`A H*\pa|5lذa|5lذaÆ 6lذaÆ  װaC̗/_Æ kH0_Æ 6l0_|6l`6lذaÆ 6lذaÆ kذ| ˗/_Æ kH0_Æ 6lP`|5lذa|5lذaÆ 6laÆ  ̷`>8`A40@ HK0_„ &L0a„˗/a„ &? 4xaB 6tbD#Ca| [/_|1̗/E3/_>(RHb|Q0E)RH"E!0_| S/_>˗/|3O`(RHQb|Q0E)RH"E!0_| C/_|5O@$X_| W0_>  <0… &̗/_>"СC:tСC:4a|30 $XA .dpa|9t`>:tСC:tС| s0A$XA H|+o`>'p "Lp!Æ ˗ϡCСC:tСC:̷0_|/_| 5̗/_>W0|9tСC˗/C+ϡC:tСC:to!|'p /_| ;h0_w0_|;QD(R/_|Q`>C"E)&̗/_>+"E)RH"E(N̗/_>(R,/b>)R0_|(RG"E)RH|Q/_|QX0_|)RHa|Q"E)RH"Ń1_|勘"ł"H"E˗"|)RH"E)̇0E7`> $ <0a%L0a„ &L0!|K0| H*\ȰÇ#JH` ˗bŊ8`A H*\ȰC|>|Ç>||˗/_>T|>|C|=|Ç>|Ç:̗/_>d|>|Ç˗|=|Ç>|Ç2̗/_>$/_ ˗a>|Áa>|Ç>||˗/Ç'0| w0Ç>|!|{0_|>|Ç>|`>&̗/_>$XA .̗O`> '0| .\p… .,/_|  ̷p… .\p… .\pa|-\/_| .\p|70| .\p… .&̗/_ .\` ` .\p… &̗/_ -\p… .\p… .\0| ˗/… .\x0_> ` .\p… *̗/_-\p… .\p… .\ | H|3hРA 4hРA W0_>  <0… :|0_| "D!B"D{/_|!B`>808P`>$XA .dÇ0_|!B"D!BQ`"D/D!Bb|k`>!B"D!B(0|"D A"D!BQa|1W0D!B"D!BOa|A"ą "D!B0_|"D!B"ćC/_|!Ba>A"D!:̗/_> B"D!Ba> ˗/D!B||!B"D˗ | H*\ȰÇ#J1|˗"E#'p 8`A&TaC!&̗/_"F1bĈ#Fq`>˗/_Ĉ#F1bĈ#F1a| 1bĈ#F1bĈ ˗/_#F1bĈ#F1b|/bĈ#F1bĈ˗/_Ĉ#F1bĈ#F1b|1bĈ#F1bĈ8`A&TaC!F8bE 'P`>7P`| /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7P`| /_7p`|̗/'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0;;PK=xPK+AOEBPS/img/lnpcc010.gif&tًGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@˗o |@ @_ (߿ 70߿ 'P |?O|@@7P|_ Oo` ̗? 4xaB 6tbD)Vh1|'P| 0@ 7p O7߿o(@ 'P |  ߿(@ ߿'? O(?'0|˗O`| H*\ȰÇ#JHE'0_|̗O`|g0_>˗o`|a/|'0_ '0_>/߿|˗_+o`>3/|_| ̗O`|O`'0_/^xŋ/Z̗ |@ /GP |7_߿(߿/߿߿8?(_o| @/߿@ _7__>/_|'p "Lp!ÆB(q"Ŋ-˗/@ ?(_>@ /߿|'7P o_'P |8߿o࿁ @ o(߿(_/߿ _/߿8? 4xaB 6tbD)Vx_|+`3`0@ / G|߿8? 0 @/_>o@ / GP |70߿ /߿O˗O`'p ,h „ 2l!Ĉ'Rhb| W0_|/|'0_> _?#/|'0_//_#H0_|'0|O`|$|O`> ̗O`|#80|_ <0… :|1ĉ+Z/|'P࿁ oO@ /߿ _/߿//@ /?'P |O|O@/_>0@'߿o/߿(0|'P࿁ 8`A&TaC!F8bE˗o |(@ ߿| 0@_'_7PO|/_/@ /??/_0@'߿o/߿(0|7p| ̗/|? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujT5w4_>RJ/_|F'UT˗i>*UT4|*UԊ4_Q O@ DPB >QD-^Ę"|'p "Lpa| 2d0!|'p "Lp!ÆB(q"Ŋ/bh`>8`A&T0a> 2d`>'p "Lp!ÆB(q"Ŋ/bX`>'p "Lp!| 2d!|O@ DPB >QD-^Ę"| O@ DPB2dȐ!B <0… :|1ĉ+Z1#|4j̘OƉiԨQF5jԨQƆiԘ1FӨQF5jԨQF Ө1c>'˧QF5jԨQF˧Qc|5N̗OF5jԨQF56̗Oƌ4j/F5jԨQF5jl/Fi81_>5jԨQF5j0_>3Өqb|5jԨQF5jԨa|5f̧Q|4jԨQF5jԨQc|4j̘OƉiԨQF5jԨQƆiԘ@8`A&T`| H*\ȰÇ#JHŋ3j̗Oƌ4j/F5jԨQF5jl/Fi81_>5jԨQF5j0_>3Өqb|5jԨQF5jԨa|5f̧Q|4jԨQF5jԨQc|4j̘OƉiԨQF5jԨQƆiԘ1FӨQF5jԨQF Ө1c>'˧QF5jԨQF˧Qc|5N̗OF5jԨQF56̗Oƌ4j/F5jԨQF5jl/F? 4xaB  <0… :|1ĉ+Z1|4j̘OƉiԨQF5jԨQƆiԘ1FӨQF5jԨQF Ө1c>'˧QF5jԨQF˧Qc|5N̗OF5jԨQF5jԨa>5jԨQF5jԨQF5&̧QF5jQF5jԨQƄ4jԨQF5jԨQF5jԘ0F5jԨQF5jԨQFӨQF5jԨQF5jԨQc|5jԨQF5jԨQF5jLP>$XA .dC%NXE5nǃ@ $H A $H $H A $H / $H A $H*a˗O`1H"[`˗/߿| $H A ``>曘O`>W0|/bsO |@8`A&TaC!F8bE˗O`|/_>`>˗o`>/_>/| ̗_ˇ`>70߿| ̗/| ̗/|/_|'0_| 70߿|/|aĈ#F1bĈ1a/_/_|/_| /߿|˗o` O࿁_> '0_>$X|/|˗/_>O@ DPB >QD-R'0_|_|70| /|'0߿|/|70_|+o`],/_|/|/߿| '0|/߿|+o |߿߿|O@ DPB >QD-Z̗/? |_߿@߿|?/@O@ w|'P |_?o(0|o| '0,h „ 2l!Ĉ'Rhb|/|'0| G0|'0| ̗o` b| O`|W0_| '0|`3`>ŋ/^xŋ/_/_/_>/_>#O`˗_>#/߿|`>O ,h`̗/_> ̗/_˗_| '0߿|˗_|/߿|`| /_>8`A&TaC!F8bE'0_| ̗/| ̗`>˗o`| ̗_|O`˗/@ ߿| H!D`| O7߿|70߿(0@70,h „ 2l!Ĉ'Rh"ƌȨq`>i80|5jԨQF5jԨb|80F4j/|4jԨQF5jԨQ#|i$O|5g0F5jԨQF5jԨb>5jԨQF5jԨQF5&̧QF5jԨQF5jԨQƄ4jԨQF5jԨQF5jԘ0F Sob[_| ̗o`|4jԨQF5jԨQFi`>&;`>'P? ? 4xaB 6tbD)VxcF'/_˗o`| ̗_|'0_|˗/| '0_| '0_>/_>9rȑ#G9rȑ`>'0߿|/߿|/_ /_|'0|_|/@ O?'p "Lp!ÆB(q"Ŋ/b̨q| '0߿|70|/| ̗o`>_|o |'_O@ DPB >QD-^ĘQF8O`o`>/_| /_|_ ߿|߿|߿| H*\ȰÇ#JHŋ3j(1| /| G0_|_O`>`/_8rȑ#G9rȑ#G8˗/| /_̗/|o`|/_|˗_|0@? H*\ȰÇ#JHŋ3j(1| /|˗`|(_ 7? ̗/_? 4xaB 6tbD)VxcF'ȑc|qȑ#G9rȑ#Gqȱ`| ȑ#G9rȑ#G ȑ| qȑ#G9rȑ#Gqȑ#G9rȑ#G9rܘ#G9rȑ#G9rȑ|9rȑ#G9rȑ#G7ȑ#G9rȑ#G9r1G9rȑ#G9rȑ#Ǎ8rȑ#G9rȑ#G9nǑ#G9rȑ#G9rqc>9rȑ#G9rȑ#Gqȑ#8#8#8#6(,h „ 2l!Ĉ'Rh"ƌ5˗a/_> ˗/|m0FCob|˗`>G0_|7nܸqƍ7F'0_+O`|(߿(`> <0….4O`|-`>O߿7? 4xaB 6tbD)Vxqa> ̗/|'0_|'0_ ̗O`'0_|1J̇`> ̗/|70_|'0_ ̗O`>70_|1bĈ#F1b/|/߿|˗/? ?߿? '0߿| H*\oB̗_|/_O߿/߿/߿/߿| H*\ȰÇ#JHŋ ˗O`|_|70߿|˗O`>+o`˗#ƈ0̗/_>˗_|/|̗/_>`/_>1bĈ#F1b̗/? oo| o`  <0B.D/_ o(0//|(? 4xaB 6tbD)Vx1a|W0߿|G0_/_|'0_  <0B.,/|̗`70߿|˗O`>'`>8`A&TaC!F8bŅs|/_/_/_'0_ @߿| H*To‚ ̗_|/_˗_|̗O`|8߿'߿8`A&TaC!F8bEw0_>,̗/_O`|˗O`|˗o |7P࿁ @$XA &̷p|/_>˗o`|G0_|'PO'p "Lp!ÆB(q"Ŋ_|70_|'0E-Z0E-ZhѢE-Zh1_|/߿| O|'? 4xaB 6tb|#F1bĈ#F1bĈ#FD/_|/߿|/_|/bĈ#F`#F1bĈ#F1bĈ#*O@'p "Lp!ÆBT/bĈ#F1bĈ#F1bĈ ̗/_|0@ H*\ȰÇ1bĈ#F1bĈ#F1|˗/|/_˗o`|#F1bĈE1bĈ#F1bĈ#F`| ̗/|'P࿁ <0… :|`#F1bĈ#F1bĈ#Ft/bĈ#Fa#F1bĈ#F1bĈ#Fd/_#F1bD"F1bĈ#F1bĈ#Fa|#F1bĈ E1bĈ#F1bĈ#F1bĈ#F1bD"F1bĈ#F1bĈ#F1bĈ#F1|#F1bĈ#F1bĈ#F1bĈ#FQa#F1bĈ#F1bć/_> ˗`|+/_|߿_'p w0|4/| G0 wp`|;x`/|7߿߿| HG0 #O`|wO`;xW0 #O`|<(0O@ DPB >`>˗O`|'0_> ̗_70_|'0|/_3`> 70|IdOa>$'qa| +Ob| 'a>(QD%J/| G0_``O`|˗_|70_|˗/߿|˗O | O|˗/| 7_˗O`|O|o|'? W` O`| ̗/_˗/߿|/_|/_| G0_|˗/@o _߿8`A&TaC!>̗/_>`| G0߿| '0_ ̗_| '0| 0_/_>/_>`>W0_|G0|O`'0|/| /_>k/|O`| ̗_ ̗`/|+O` '0߿|o`|O`˗O`>"F1bĈ#˗/߿| g0_|/_| '`>(_߿|'p ˗O` /? 7@ 70߿|˗O` O`>/|O_/߿ /` ̗/_o`'p'P`/ /_|_ ߿|/߿o'p "Lp!ÆB|/|/_>70|˗_'`>(_߿|'p  ̗_ /߿|'0_>`#`>'0߿|/O``>3hРA˗o`_> ̗`#Ϡ|'0|/O`g0,h „ 2l!ć ̗|7p8@ '߿ __ '? ̗o`˗/_/_>/|/߿|O`>_>'0߿|o`|_| /_>+Xp` ,(0_/߿|/߿|'0߿|̗_|Wp`> ̗O`>/|/߿|O`|? 4xaB 6t"|0@ 8߿ 7P࿁߿7߿|߿ H`| ̗/_/| ̗/߿|̗/|˗o`|G0|(_߿/߿+X`_| ̗/_˗O`|˗`|#|8߿|߿70߿_? 4xaB 6tbD)VxcFmܸqƍ7nܸqƍ7n1ƍ7nܸqƍ7nܸqƍmܸqƍ7nܸqƍ7n1ƍ7nܸqƍ7nܸqƍmܸqƍ7nܸqƍ7n1ƍ7nܸqƍ7nܸqƍmܸqƍ7nܸqƍ7n1ƍ7nܸqƍ7nܸqƍmܸqƍ7nܸqƍ7n1ƍ7nܸqƍ7nܸqƍmܸqƍ7nܸqƍ7n1ƍ7nܸq6h6h6| H*\ȰÇ#JHŋ3jȱǏ $H A $H / $H A r`|򁔘/|m̗`|#a>/_:g0_|/_|0| /H A0@ H̗`>*<`> G0B̧0|  ̧Pa| +Oƒ/߿|)$O!| ̧PB *TPB *TPB/_> ̗/_/_>/B3`> #o`>SH0BOB*L/_ S`>/|̧`>SPB *TPB *TP|˗/߿|0@ /߿'p 70_|˗/߿|˗O | O|˗/| 7_/_|O`>/_|0 O ` /|/_|/_/_| ˗_|O`>/߿|O`>˗`| '`>@$XA .dC%2O߿|/߿_? /߿| ̗/|/| g_>W0_|70_/߿|˗O`˗_>_|gР| 4H0_/߿|_|#|`| ̗_>G0_/_>/_O` /,h „ 2l!Ĉ˗/| /| ̗/_b| 70_0@@o 7_'0_|O` ߿|/߿/߿O@,X`/| /?@ 70߿|O` /|O`> ߿|/߿/߿O@ DPB >Qb| '0߿|'0_>O`>/|_ ̗`#o`>#_ /߿|w0| /|0Ą˗o`_> ̗`#o`>+_ /|;o`O` 8qĉ'N0_|˗_|O`>'0|_|˗_|˗O`'0|̗_ ___/?߿ OO@,X`A ̗/߿|/_'0_>`|`W_| ̗_>˗/|/߿|O` /,h „ 2l!Ĉ+`|˗_> /߿ 70|/_| ̗/|˗/_| G0_|˗/߿| O ߿/߿ +X`_| ̗/_˗O`|˗`|#/_|O ||| /߿_>$XA .dC%Nl"E)RH1E)RH"E)RH|G"E)R"E)RH"E)RHqb|(RH"EH"E)RH"E)RH"E)R80E)RH"E)RH"E)RH"Ł(RH"E)RH"E)RH"E)G"E)RH"E)RH"E)RHq`>)RH"E)RH"E)RH"EQH"E)RH"E)RH"E)R"E("("("("("(h 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?$H A $H A$H A $H Ay1H A $H A b> A $H˗o |7߿70߿70߿'p 4h`>+/_>3hРA 4hР| 4H0A 3h0_ <0… :|1ĉ+"O ? o7P࿁8` 480߿| +O`|gРA 4hРA 4h`> '0A/,h „ 2l!Ĉ'Rx0|+O`|/߿| '0|壘b+o`hѢ| 棘O`>ϢE-ZhѢE0@_>70|(@ H|'0_|˗/?߿ ?߿'P`|˗/_ @$XA Sa>/_|80?7_#7? 4xaB 6tbD) 70@ 70߿8`>@ O@#/| ̗/߿|O`/| G0_| ̗_>/| 4hР 4h` '0|˗_>O`|̗/_#/߿|/_>8`A&TaC!F8| w0_|O߿O@ #0@'߿/߿߿O@G0/_| /? O@ D0_„ 0@O_/߿߿8P`>˗/߿|`>8`A&TaC!F8|`|˗O`| ̗O`>b> /|'0|W0|W0| /|W|`> /| 70߿|!'0߿|O`XbŊ+VX |7p`(߿| /߿(? `|'0_|_>/_70߿|'0_>'0߿|ϠA 480A 70_>/_'0|/߿|O`/|˗O`>$XA .dC%N/_|'P࿁7߿_o@$X_| ̗/|˗/_>`|+/_|˗_'p|߿ H˧P!|/_/_|O`>`>0@_'p "Lp!ÆB(q"Ŋ/J̇#F a#F1bĈ#F1b/F1bĈ#F1bĈ0_|1b0FÈ#F1bĈ#F1bĈc>1bĈ#F1bĈ#F1b#F1bĈ#F1bĈ#F/È#F1bĈ#F1bĈ#Ƌ0bĈ#F1bĈ#F1bĈb>1bĈ#F1bĈ#F1b#F1bĈ#F1bĈ#F/È#F1bFaFaFat@8`A&TaC!F8bE1fԸcG $H A $H A^$H A $H A$H A $H Ay1H A $Ȍ7`>߿߿߿8`gРA ̗ϠA ,_>4hРA8`A&TaC!F8bE16O ? o7P࿁8`gP`> 4h_>3X0_|3ϠA O@ DPB >QD-^0|+O`|/߿| '0|壘o`> ˘a `>X0_ƌ3f̘1cƌ3670@ '߿'p`0@ O@O`|O@+(@ ̗/߿| ̗/__|˗_|`> |7p ,(0,h „ 2l!Ĉ'Rh"Ɔ0@/'P(@ H|̗O`/_/_|O`|70_>˗O`|/_|+`'0߿|g`| H*\ȰÇ#JHŋO` |߿|/,X0|˗O`/|7`>߿߿ o| _|˗/_/? ߿|'p 'p "Lp!ÆB(q"Ŋ/blO`|̗o` ̗_> '0|Q70߿|/_>/_w0|̗/|+`'0|W0|E̗1cƌ3f̘1cƌ (߿'@O(@ H|O`|/߿|/߿|o`|`>O`|˗_|/_>#_ /|4X0,h „ 2l!Ĉ'Rh"Ɔ7`> ߿70߿'p ˗O |7p?70߿(0_| /__|˗O`|_|70߿|˗O`>8p'p "Lp!ÆB(q"Ŋ/b̨qc|ȑ|9rȑ#G9rȑ|qa>9rȑ#G9r`|qa>9rȑ#G9rȑ#Gqȑ#G9rȑ#G9rܘ#G9rȑ#G9rȑ|9rȑ#G9rȑ#G7ȑ#G9rȑ#G9r1G9rȑ#G9rȑ#Ǎ8rȑ#G9rȑ#G9nǑ#G9rȑ#G9rqc>9rȑ#G9rȑ#GO@ DPB >QD-^ĘQF=~<$H A $H Ay1H A | ̗/|G0_|̗/_>#/_>ۘb>̗/|y̷0_|4b> ̗/_/_> AY0|'P_7P(`>7߿߿| HA<_'0_;xA/ ;x|'0/ wp`>8`A&TaC!FlO`|/| ̗O`|`> ̗/| '0|˗b>0_|G0DOb|(0| 70DOD%J(Q"|#O`>G0߿| 70߿|'0|˗_|{`|˗/߿|0o࿁'߿_> ̗/_`>߿߿| 7? H| 4H0| ̗/_ o/߿?߿'? 4xaB 6tbD'0|̗/_`/_>˗_>_#/| ̗/߿|O`/| G0_| ̗_>/|/߿| /߿|O|/| ̗/߿|O`/|+O`>'0߿|o`|O`/|I(QD%B̗/߿| g0_|/_| O ߿|/߿| H |(_/߿/߿/߿| (0_#/|˗_>0@߿|߿|(_>$X`> $o |?/߿߿|/߿O@/_| /? _߿|@'p "Lp!ÆBH0_/_| ̗o`>˗/߿| ̗O |7P|/߿O@ #`> '0߿| 70߿| /| ̗/| /߿|_>_ 4/A 70|_>o`3(0|_>|'0߿|W0,h „ 2l!Ĉ/?o7p࿁ O߿|߿|O ,`|'0_|_>/_70߿|'0_>'0߿|o`|_|/_>+X | ,Xp` '0|˗_>/߿|#|'0__| ̗_|˗_>'0߿| H*\ȰÇ#̗/_ o?߿? ˗/_>O`'0_|̗/|˗O`|W0@߿|7߿o`'p 4h |/_/_|O`>`> `>/߿| ߿_7߿| H*\ȰÇ#JHE.^xaxŋ/^xŋ+/_/^|"|wŋ/^xŋ/Z̗/ŋ/Bwb|.^xŋ/^xŋ/^81ŋ/^xŋ/^xŋ/^ŋ/^xŋ/^xŋ/Rwŋ/^xŋ/^xŋ)xŋ/^xŋ/^xŋ]xŋ/^xŋ/^xE.^xŋ/^xŋ/^x"E8`A&TaC!F8bE1fԸcG $H A $H A^$H A $H A$H A $H Ay1H A $H A b> A $H ˗/Ȉ.c/_| G0| )̗_|qw1|˗/|9̧0|$H AO@$XA S_ W0|#Oa| SO`> Sa> ̧P`>'0| SO|)TPB *TPB *TPa˗O`|O |o? H| _>70߿|480A$O`> $ϠA 3hР|4`> '0_>3H0O@ DPB >QD/_`>߿| ? W0_|˗_|O|7߿/߿_#8'p 4h |70_|'p`o࿁_/߿__@$XA .dC%N0@/߿ '߿|/߿_>$X0|O`|'0߿| '0_ ˗/|̗_ /| 70_'0߿|˗O` ,X0_ o`| '0_|O`>/߿|˗o`|̗_ /| ̗/߿|_>_>$XA .dC%N/_| '0߿| '0_|O`'P| ___8P`|G_˗/| O_/߿ /,X0A 7`>߿|_߿/߿@/_|'`>/߿/߿ <0… :|1ĉ70| '0߿|O`>#`> '0߿| 70߿| /|˗/|'0_O``>("70|_>o`o`| /_>O`| '0| ̗`>)RH"E 70߿|/_>/| 0|O`|'0߿| ̗_|̗o`+/߿|_˗/|/_/|_>$X`> $o`| '0_|O`>/_o`|O`|/_|˗_|˗_>_>$XA .dC%N`> ̗/_>'P_>$X0_|˗O`>˗/| G0_|̗/_>/_'P o |߿O@ 3hРA/_| /_|/|'0|+|(߿|7|__>$XA .dC%No`>H"EQx0E)RH"E)R0_Q0_QH"Ń(R/߿|(RH"E)RH"ŅHQa|(RH"|)̗/E)RH"E)RH"E)R1E)RH"E)RH"E)RH"Ł(RH"E)RH"E)RH"E)G"E)RH"E)RH"E)RHq`>)RH"E)RH"E)RH"EQH"E("("("("( <0… :|1ĉ+Z1ƍ;zx0H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A90_|@F̗/_> +/_>{a>˗Ob>Ra|˗O`>koa| $H  <0|C`> +O`|̧`>)'0„*DO`|̧Pa| ̗O`̧p`>˧PB *TPB *TPa|˗/|/߿|˗/|˗O|!g0B70߿|),O| ̧0a> `*,`> '0_>)O|)TPB *TPB *T0|/_|'P࿁o| H| ̗/_ H0߿7?/_|7_ O |_߿߿@$ A $o`> A@ ̗/߿| '0| O |_߿߿| 7? H*\ȰÇ#JL0@/߿ '_/߿|/,/|o`|˗_˗/| ̗_>`>70_>/_>/_O` / 4h`/|/߿| ̗/_>/߿|˗o`|̗_ /| 70_'0|˗O`8`A&TaC!F0_|O`o`|'0| '0_|/_| /߿|8߿_>/߿|_'0߿|8߿__+X` '0_|/_| /߿|8߿_߿|/_| /@_߿|@'p "Lp!ÆB(Qa_/| '0|˗O`>_>o`| /_|G0_|'0| ̗`_>+oa /_>/| ̗/߿|;o`o`| /_>O`| /|/_|'N8qĉ+o`˗_| '0_b>'0_> ̗_> ̗_|/߿/߿|/߿߿(0_'0߿|˗O`˗_'0߿|o'p /߿|_>'0_>˗/_>/_o`|O`|/_|/߿|/|˗O`8`A&TaC!F0_|/_| O_>$X_| O'o ˗O`˗O`|7p` _߿70߿|o8| ,Xp`| O'o ˗O`˗o|`>o`o`/߿| /,h „ 2l!Ĉ'70E"E'Hqa|QH"E)RH"E/E G"EQ0|)RH"E)RH|Q1_(RHqb>70E)RH"E)RH"E)Rx0E)RH"E)RH"E)RH"Ł(RH"E)RH"E)RH"E)G"E)RH"E)RH"E)RHq`>)RH"E)RH"E)RH"EQH"EQDEQDEQDEQDEQDE? 4xaB 6tbD)VxcF9v`> A $H A | A $H A $ȋ@ $H A $H $H A $H / $H A $H A^$H A $H A$H A $H Ay1H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A $H / $H A $H A^ <0… :|1ĉ+Z1ƍ;zx0H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A $H / $H A $H A^$H A $H A$H A $H Ay1H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A $H /O@ DPB >QD-^ĘQF=~<$H A $H Ay1H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A $H / $H A $H A^$H A $H A$H A $H Ay1H A $H 3˗c|%̗_| A.1_|K/߿|@ $H ABO@ A0@ (0| H*\0C1< |'p|'p "Lp!ÆB(q"Ŋ/b,/|O`>O` /| '0| ̗/߿|e0_Ɓ˗o`|O`'0| '0_|/_|3f̘1cƌ3f`>/_'0|#0@/߿o|'p "L` /߿|˗_>˗ |߿|O࿁ <0… :|1ĉ+Z0| '0| '0߿|(߿|/߿ '_/,h „ [`>O` |߿|/?߿|O@ DPB >QD-^t`>O`>_O`>0@o ,h „ [`>O``O`>'P| <0… :|1ĉ+Z0_> '0| '0|70| '0߿|̗/F a$O`>_>+o`>O` #/_>1bĈ#F1b0@߿| |'P |70߿O?'߿| H*4oBO`|˗/_> 'P߿|/߿ <0… :|1ĉ+Z0_|˗O`|70_|G0_|˗/| ̗/|ˇ| O`>/_|#/_|˗O`>˗O`È#F1bĈ#F0bĈa> aĈ#F1bĈ#FaĈc|È#F1bĈ#F'È#Ɔ06̇#F1bĈ#F1bĈ#Ƅ0bĈ#F1bĈ#F1bĈb>1bĈ#F1bĈ#F1bP>$XA .dC%NXE5nǃ@ $H A $H $H A $H / $H A $H A^$H A $H A$H A $H Ay1H A $H A b> A $H A | A $H A $ȋ@ $H A $H $H A $H / $H A $H A^$H A $H A$H A $H Ay1,h „ 2l!Ĉ'Rh"Ɔ7`>߿߿߿8`3hР4/Ag`> 4h| 4H0| 4H0_>4H0AO@ DPB >QĈ @'@ _ 7P ,/_> 4h`>3X0_|3ϠA 4/A ̗O`> $ | g`>8`A&TaC!F81b> W0|'0_O`>G1_>(&0|g0|Q80E Ga> S`>)RH"EO |߿80| O'p /|0'P`|˗O`| ̗/|'0_|7_ o7߿8`AC!|'0_|'p(0_|70_|/_|'0_|˗O`|/_|7`>8`A&TaC!F8`'P࿁ _ 7P ,/߿|̗O`>˗O`'0|_|˗_|/__|'0߿| 4h0A /߿|O`'0|`>70_|˗/| /|'0_|_>$XA .dC%N˗_> _/߿| H`|'0_||/߿߿((0|/_| _ /߿O@ !B/|O`'P/߿|߿7P /߿_7p O@ DPB >QĂ'0|/|/| /|/| /_`|̗` O`|/߿| /E("'0_ /|w0|70߿| ̗`o` ̗`QH"E)Rt0@ ? /߿@ O@/߿|O`o`|o`>'0߿| ̗/߿|+_| G0߿|_>3hРA 4h`>'0__| ̗_|̗_|/_|˗O`/߿|˗_| '0߿|'p "Lp!ÆB(q"|0@O߿8`0@/߿|'P`|/_|'0߿| ̗/|/߿| ̗o`˗/| <(0B |_@o|07߿|o o7? 4xaB 6tbD)VxcF Qa>9rȑ#G9rȑ#|9*Ǒ#G9rȑ#G9r#G8rȑ#G9rȑ#Gqȑ#G9rȑ#G9rܘ#G9rȑ#G9rȑ|9rȑ#G9rȑ#G7ȑ#G9rȑ#G9r1G9rȑ#G9rȑ#Ǎ8rȑ#G9rȑ#G9nǑ#G9rȑ#G9rqc>9rȑ#G9rȑ#Gqȑ#G9rȑ#8#6(,h „ 2l!Ĉ'Rh"ƌ7r| A $H A $ȋ@ $H AT0@(߿߿| H`> W`,80_` ,X` W`#| $/|$``>$XA .dC%Nx`> 8P࿁߿| H|ϠA4(0 3(0| 4hРA 4h` gР3hp`> W0,h „ 2l!Ĉ'R<`>'0_惘O`|Q0|g0|U(0_Ńw0|̗0_|WbŊ+VX|0@߿| 0@ H| ̗/__| ˗O`|˗/| /_|/_|O70߿  <80B O`| /|W0_|70_|/_|˗o`>˗/_/_|˗/|/_|8`A&TaC!F8Q"|(߿|?(? /߿|_>o`> 70|/_>/߿|˗`>/| /A ϠA /|O`|O`|̗_|'0_> ̗_>'0|/_/,h „ 2l!Ĉ'R`>3o`/_|'`>߿߿ o| O`|˗/_/? ߿|'p ̇!‚/_|'`>߿߿|/߿| _/߿_߿| <0… :|1ĉg0|/|'0_>O`| '0_|+/|/|#_ _> QL/_ '0߿|;o`_70|˗O`˗O`/|(RH"E)RD |߿ /߿'p O`|/_|/߿|O` /_|/_ /|/߿|O` 4h| 4X0_>'0߿|˗O`˗_>˗_˗_|O`| ̗O`|/߿| ̗O`>$XA .dC%N |?70|8p` /߿ O| 7_|˗O`/_> _/|/_>? 4xp`>'`>o`(0_| /_|'0߿|(0@ ߿ _ <0… :|1ĉ+Z1ƍ'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0 †#Nx;;PK +t&tPK+AOEBPS/img/conobget.gifGGIF87a8?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,8 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sl 08`A&TaC 'p@$XA .dC%NXE5˗/_|mܸq|̗oƍ7nܸqƍ7ˇ0_7nt/|6nܸqƍ7nܸ1c6nܸa6nܸqƍ7nܸc6nܸqa6nܸqƍ7nܸb6nܸqa>6nܸqƍ7nܸb>۸qƃoƍ7nܸqƍ's_7nDa6nܸqƍ7nܸb>mܸqc|۸qƍ7nܸqƃ H $0 'p "L0!|,h ‚ H |,h B H*\ȰÇ#JHŋ90߿| a0Fc|1bĈ#F1b(0|'0|12̇1b c|1bĈ#F1bĘb 拘#ƅ0Fw0|#È#F1bĈ|51F aa>aĈ#F1bĈb>擘#F0N̷0Ɖ0bĈ#F1bh1| İ|)S#|1bĈ#F1bbṀ|+;/Ɗ0bĈ#FaF? 408`A 4hРA gA $08`A&? 4xaB 6tbD)Vx1a>ÈQa>1b$#F1bĈ#Fa/F aĈ#|1bĈ#F1b#0bT#F È#F1bĈc|1ˇ|1bH0F1bĈ#F+È_>È#F0bĈ#F1bX1FaĨ0F1̇@$XA O@$XA .dC 'p  $0 O@,(`> 4x `,X@$XA 'p ,X` ` ,X`? 4xaB 6tbD[/_>˷0|[Oa|˗a|I0_|(a>%g0D%J(Q| )'1a| 1'aˇ0_|%JOa>(Q"|I(QD%.̷0|$2̇0|[a>(Q"| I0A ߿(߿ /_/ o| ̗/0߿| ߿#߿+ ߿#`7߿?˗O |8?#Hp`>$H| | Gp`0 O| G|#H A |#808`A&<``/߿| ̇0| /|o` `>O`| W0|70| G0| ̗O`>/| )`>)4`>/_>#o`>g03O!| W0|)TPB3_#`'0|G0_'0|/|/|`>+``'P` 70_7p|o o/_|/߿| ̗/@ ̗o /߿|o` o o7p|˗O`|˗_| 70_|/߿|˗/_>˗o|O@ D`3/|%̗/| ̇0|W0_|/|̗` O`>#a o`>`o`So`3/߿|/߿|/_G0_| w0߿|70|70_|)$o`>/_|'0_ /߿|/߿|˗/_˗/|̧0B ˗ |'߿O@ @8P`/@ '0߿| 7`>@ 7P` ߿| |˗o`>#/߿|70|OO@#H_ 70_/| G0|$_>/߿| G_>G`|$HP`>#80|˗`>70_/_˗O`>#H`> $H?$8?#(0߿|G0AO`>8P? O`> 70/@ /|o|o|o|o| ̗o`7p|0 O|_> /|'p 8_70|#`> , 'p@O`|˗/_/߿|O` ߿|߿8P ,h BW0|70|O`|C`| /|/|'0| ̗_ '0_| g0|3`>/|/߿|%`̗_| /|˗_>K0߿|'0_/_|%$/a|;O`|˗o`/| ̗o`|/_>K0_„  /A߿| ˗/@ o`> 7_ ̗/_70| O|߿| /_|˗/߿| O_>/_|`'0|8@G ̗/߿|O`O`>$H0|o`˗/_> G AGP`>#80|'0_|$|@ 7pO@ DX0_„ &LH0| &L0a„ &L0a„ K0_B&,/a&Lh0_„w0_„ &L0_„ &LX0_„ &LH0| &L0a„ &L0a„ K_%LX0_„%L` %$a 'p ,h|"D!"D!B <0… :|1|0D$>'_>(Q|%J4OD'QD%J0D$6'q`>Ioa>$Jh0D (Q"|I(QD%.'q`|H0ć$ ̗0|$J(0_>%'QD (QD%J\Ob|$̗Ob|80_=̗ODI(1!|,h „ 'p |,h „ 2l!Ĉ8`A8`A8`A8`A'p 'P ,H`> 4xaƒ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ+@ JѣH*]ʴӧPJJիXjʵׯ`Ê3 ;;PK&vLGPK+AOEBPS/img/objtab.gif/GIF87aL?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,L H*\ȰÇ#JHŋ3jȱǏ8? 0'p "Lp!ÆB(q"Ŋ/b̨q#ǎ3a| yѣG=zѣGK/|ѣG=zѣG=̷0|[ϣG=zѣG=z80_>+/|=zѣG=zѣǁ;`| yѣG=zѣG;`30@O| H*\ȰÇ#JHŋ3jȱc|/|'0|=zѣG=zѣ9O@ /߿|8P |,h „ 2l0,h „ 2l!Ĉ'Rh"ƌ/|3/߿|COF˗OF5jԨQF5w0|g0_w0F5̧QF5jԨQF0|Q̧QFiԨQF5jԨQ|5w0_4jԨ`>5jԨQF5j`>擘OFӨQF5jԨQƊ[Oa>4jԨ1a>5jԨQF5ja|10F5*̧QF5jԨQF)̗?8p@8p`| H*\ȰC>|Ç>|Ç>|Á˗/C 8? 4xaB 6t0Ç>|Ç>|Ç>|80Ç>|Ç =|Ç>|Ç>|Ç=|Ç>|0Ç>|Ç>|Ç>|80Ç>|Ç =|Ç>|Ç>|Ç=|Ç>|0Ç>|Ç>|Ç>|80Ç>|Ç =|Ç>|Ç>|Ç=|Ç>|0Ç>|Ç>|Ç>|8| H8`A 'p 80,h „ * <0… :|1ĉ+Z1c2̗a>˘1c3f̘1cƌ3f/|˗Qa%̗1#| e̘1cƌ3f̘1c|e0_[/cƋ˘1cƌ3f̘1cƂ H@$X | ww`ew0_|3Z̧0_ƌ3f̘1cƌ3:w0_|̗/@7? oO@ DPBO@ DPB >QD-^x1|̗o`>_|/_|3`˘b3f̘1cƌ3f̈0Do`|8P? O@ 'p@$XA * <0… :|1ĉ+Z1#|3_>/_/_/|̗aӨQa>5jԨQF5ja+/_|(| o| //,h „ O@ DPB >QD-^Ęa>0| -Q#|5jԨQF5jX1| it/| -̧Q#|5jԨQF5jX1| ila>Өa>5jԨQF5joa>4.̧0| ix0F5jԨQF5V̷0|ca|AO@ O@ O@ DPB >QD-^Ęa ˗O|9̗/| {b>4jԨQF5jԨb&'p O@ ˗ϠA ϠA4h_>$XA .dC%NXESOF 5̷0_!'1F5jԨQF5Z̧0Fc` ̗/a4jԨQF5jԨbiԨqa> W0_)0_>5jԨQF5ja>56w0|/_/_3`>4jԨQF5jԨ1ciԨa3/|_|g0_|ӨQF5jԨQF8`A&TaC80_/߿|80'p A H*\ȰÇ#JHŋ3jȱ| ˗O`/_|W0G=zѣG=z`'P 7? ? 4xaB 6tbD)VxcF9vO`>=zѣG=zc|yѣG=zѣG'g1_>=zѣG=zѣ|A̗/G=zѣG=zq#|,? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|k@;;PK&4/PK+AOEBPS/img/commit.gif))GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8K'p ", <0… :|1ĉ+Z1ƍ;N̗/GѣG=zѣG=˗|=zѣG=zcy,ϣG=zѣG=zܘ | O/_>/| <0… :|1ĉ+Z1ƍ;2g0_/_>/߿|_ G0G=zѣG=z1|`>/|˗O`>QD-^ĘQƌ`|'0|_>/|q\/G9rȑ#G9r0|8P '`>/߿| O| H O@ DPB >QD-^ĘQF 81LJ8rȑ#G9r"|,h | 0 HA O@ 7p@/,h %L0aB8`A&TaC!F8bE1fx0| Coa H'p "LH0,h „ 2l!Ĉ'Rh"ƌC/_>[oƍmܸqƍ7nܸqƂ;/߿|!70|7noƍ7nܸqƍ7̗`|̇0|mܸQb7nܸqƍ7n08|/ O@8`A&TaC H`>$XA .dC%NXEC/|a> ӨQc|iԨQF5jԨQ|g0|!70|5jb>5jԨQF5j/|-0_|8`A&,+X| H*\ȰÇ#JHŋ3̷0| )̗o`|˗O#|)1F5jԨQF5B̷0| !̗a>iH0_|iԨQF5jԨQ#| a̷0| )̧Q|拘OF5jԨQF![cc/a>4"W0_|1F5jԨQF5B̷0| 0|9̗1_| 1F5jԨQF5B̷`> 4X? W0_A WP`/_>/_>/_>/_|˗O`+| ? 4xaB 6tbD)VxcƁ4bG0| g0_/_>W0_/߿|_|˗_|+`>4jԨQF5jԨb> 0|'0_#`/|70߿| W0|&ӨQF5jԨQF4j̗/_> (? ̗o`//_| `> /_|8p| H*\ȰÇ#JHŋ3̧Q|/|/_|g0_>O`|'0߿| W0|5jԨQF5j1Fg0|'0߿| ̗/| O8p`8p'p "Lp!ÆB(q"Ŋ/b80F9w0F a̧QF5jԨQFi80_|UO@$X"D? 4xaB 6tbD)VxcƁ4j$a4jD/c>5jԨQF5jOFSOF2ӨQF5jh`> 4xaB8| ,X` /_ /_ ,X`W`+XP |,h „8`A&TaC!F8`>%c"ʼn ̗/|Q0_|c"Ń(RH"E)>G| QH_|(O@ D ,h| C!B'p "Lp!ÆB(qb|(_7P8_|˗o`>#H`>$XA .dC[`|˗`>#O` ߿8`A&TaC!F8`> O`+O`| '0| QH"E)̷0|70|/_> 70|)RH"E3`#`W0߿| -G"E)R0|̗`> ̗_|o`(RH"E)2'0|`>`S"E)RHQa+`'0_ ̗O`#"E)RH"|Oo@$`>(0߿|o| <0… :|1|W0_| ̗_/߿| w0_|%J(QD'p o| 7_ 80_7p H*\ȰÇ#JH? /@/߿|˗_>8| O@ DPB >Q"| +O`> `|'0_|)W0ĉ'N8qD70߿|_|/_`&N8qĉ'B/A߿|G?˗o |?#? 4xaB 6tbDg0_|˗/|_'0|7qĉ'N8b>&N/ĉ'N8qD81a&N8qĉ'NoĉM8qĉ'N(0ĉ M8qĉ'NX0ĉ8qĉ'N8Q`8qĉ'N8`'7qĉ'N8q|'&7qĉ'N8qb|'Noĉ'N8qD&NLoĉ'N8qĂ&N/ĉ'N8qĉM| H*\ȰÇ#JX`> 4xaB8`A&TaC!F8Q |,h „8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦU |,h „ 'p ,X@$? 4/A 4h?$XA 'p "Lp!ÆB(q"Ŋxqa>/_˷0_|'0_|/x`/^xŋ/*w| !0| !wb xŋ/^x|/.̇0| Q̗Oa>.Vw|/^xŋ/^Ta|˗o`>#O |߿/G_>$/A  GP`>$XAO ߿ O ˗O |/,h „ 2l!Ĉ'RhQao`> ̗O`|`| g0|̇0| ̇0_|]`+`>'0_xŋ/^x|/_|/|'0_|`> ;` _>|O@ Dh0|`> ˗o`;? 4xaB 6tbD)Vx0|W0߿|'0_> W0߿| g0|970|'0|g0|9wb>O`+/߿|70|/^xŋ/^D_> +_|'0_0@/߿808p@/'0| o| 8p| H |7P|7P?| _>$XA .dC%NXѢ@/@/߿|˗_> '0_>O@ H | O ߿|O@ 'p@$X`A '0#`>80߿|O H*\ȰÇ#JH|w0| ̗_'0߿|`> g0_|+/| '0_|W0_>g1_70|G0_70߿|!̗ϢE-ZhѢE`|̗/_>/|O |߿|O|o/߿|/_|_ _o 8p (0|70_ o`_oO@8`A&TaC!F8bńha>o`>0|)g"| YhѢE-Z81|-6w0_|Ya擘oa>[ϢE-ZhѢʼnhaKbcOb,ZDa>-ZhѢE#cϢņSOa>Saha>,ZhѢE-Za>Ka>I̗a>拘oa>cϢE-ZhѢňha>0_>O@+`,XP`+X` ,XP`O@ DPB >QD c0 <0B HP |'p 8 A$X |'p 4X0 H&O@'p "Lp!ÆB(q"ŊYhѢE惘/EhѢE-Zh1b>-Zh|Yha>-ZhѢE#hѢE-1EhѢE-Zhb>-Zhb|gѢE,ZhѢE-ZtϢE-Z0|Yhb>-ZhѢE˗ϢE-Z0_|˗ϢEgѢE-Zh"A$XA .dC%NXE$XA .dC%N0_Ŋ+VX"|+V0_Ŋ+VXbŊUXbŊ+2WbŊ UXbŊ+VX0_Ŋ+VXbŊ+V4bŊ+VXbł*VXbŊ+VX|+VXbŊ+WbŊ+VXbŊXbŊ+VXq`+VXB O@ 'p  'p "Lp| 2dȐ!C 2dȐ!C cȐ!C 2dȐ!C̗|2/C 2T!C 2dȐ!C 2dȐa| 2dȐ!C 2d0_| c`> 2d0C 2dȐ!C 2dȐ!Ä2dȐ!C 2dPacPa> 2d0C 2dȐ!C 2dȐ!Ä2dȐ!C 2dPa>+!Â2dȐ| 2dȐ!C 2dȐ!C cȐ!C 2dȐ!ġ08`A/_ ߿ OO@ DP| .\p… .\p… "g0… .\p… ./_>+o… .̷p… .\p… .\p?$X? 4xaB 6t"B 'p@_>'p|8_>O H*0 'p "Lp!ÆB(a 8qĉ'&̗`|/| /_|˗O`|`M1|'N8qĉ;`'N8q"| g0| w0߿|/_|˗_|+oa!{oĉ'N8qb|M8qĉ[`X0| M1|'N8qĉ惘oĉ'Nx0| !7_|10ĉE7qĉ'N8`>&N8qĉO@,(0_A ,X` ` ,X` ,(0,h „ 2lP |,h ‚ H!D/A$XA 8| ,(`> O@ w`| ;H0̧0| =$/C H H`| 4hРA4X0,h „ 2lP`>O`|'P|8`ACP`'P7P7P 8_ o8p 80@ 7p'p "Lp!C6l_5lذaÆ G0_>˗__>kp`w0_| 70|˗0|̇0_| ̇0|1װaÆ &װaÆװaÆ 6l80|˗_| o`|CaÁW0|/|/_|g0|/_|_|;`>װaÆ &װaCװaÆ 6lO`_(0|˗/'p ˇ|G0_| /|O`>'0|_+`>G0|"D!B"!B"!"D!B"D|/߿|W0@ 7?#H A G A Gp`|G_ /'P /_|/@80߿|o` _o|O@ DPB 5la| kذaÆ "O /_o| /|O@ H'p|(߿| (? O@ DPB >? 4? 4xaB 64/|̗O`|/|'0|`> W0|O`K`|+_>'0߿| W0_|5W0C:tСCsСC;O`>70_|/_ S!|;`| 70_'`>(0| 8p|o|/_(08p <0… :|1b|%J(`$JOa>$'Q|5w0ăkOD%J(Qb|%J(`$Joa$'Q|5w0ăkOD%J(Qb|%J(`>$Joa$'Q|5̇0ĂcOD%J(Qb|%J(`>$Joa$'Q|-̧0ā[OD%J(Q|%J(`>$Joa$'Q|%0KOD%J(D ? 4xaB 6a>[|s| +/|˗a|sСC:tСC:tСC'p ",+X| ,H`> 4xaB$`>8` H ,8`>8`A&TaC!FX0ĉ'J7qăA7qĉ'N8qĉ'N0ĉ'J7qD 8qĉ'N8qĉ'Nloĉ%8q"|M8qĉ'N8qĉ'67qĉ 7qD3oĉ'N8qĉ'N8a'NT`'2w0|'N8qĉ'N8qĉ7qĉ˗oĉW0_|&N8qĉ'N8qĉ'˗`'&O@ DPB >QD-^ĘQF8`A&T0a> 2dPa>$XA .dC%NXEӨc>5 <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵ lۺ} 7ܹt;;PK>.)))PK+AOEBPS/img/ms5.gifQGIF87aA,A 0I8ͻ`(diRCp,tmx|pH,3@J:9ШtJZWj1xL.zn|NXev|K+w:__[Mo]J~^`0k-b f̼ԇ Ŀۚ}ɳiڌ\̴˶\48Н!^7y5Ws/^ CО@⹗c3ț8s)2Ó,zQ&ƙZɴiȒ|vġ*5qkR`ò 4/ڬ~z4ߋ3j)]\dH6;w ~*T}ɡ8["G6,rb3k_>I(ͨSnUׁYB۸sl N8Ɠ+_μsΣKNֳkν9Ë?;ӫvÛO>$o,H>߾ r91p  >(a NB) |V%("V"x'^1"sJ֠m2@#p7'L%hX[x܎8"#XXAN0ڔTo8YY(܁YA ~eӞy0mf rFPgwu^tdϡI h( ( {&Zizآ*u)tzr0I^jgsYPu*ʗiTX *:⥽"ƪF+곸:kIBkblf,fq9(h(8"N[:*ig" p|o.*\hۮjҼ 1 ǻ(U˃^ T n*mn"7jq,m2L2 s4zD'D1IHauD}$KK$ PW4Q.n m4ԑEwALK~W_bю|NEGLJD"idnh*yR4c,DR򔨴P֔JTXä,gI˶ug.wW 2 0KQoLn `*T"3ajZ%nbqq8)7"1L:gsns'A=|Ck'?U (>j'.=%6(*dJm.Z9QGY51cHI&H̀*)T4*_fJ@}}Y1j?W7-vM󰖾),zAKj»W ְzKYsV9/D%[RTvrCjߑuU q!ES* ,߂Aݴw$TZ]6--_;PV7-hު4pwW %:ЍtK]jͮvR7u'KMz +|K…d̯~Ehpk_m c`CDc ne/lzb6!Nq)Gb1xK*G~T[0{GO[71/ݸGIg^ WlzC^܏` y~Z)ϽŠ#?|0 K׼b`߀w)ć}V7DBTG|`~]%h52<w4Bu1=RT ͷ/łp}YCU68! 8S/{x-.e7RU XXNAԂpt}7:cU ȄW=XTXvLJ8SeU8_U=dI7'VX|8 P>%Z}T%A}u<"xhxt)ȈeC(1|A;zѷ,y(E|fh20M2X'~7X1X،G0uؘڸ؍H%txdFlHgj2W-re]Gf'ExDuGjBqqg9ǏwWnfu3dm47sWs2{`|+~뤨{Pm(9&kںjj5(gqɻN˲- oCi*jHkkyI.{ֻJ+K EJ6爽 uJW{ ƨ}赳*&I rjˋ ei˛ͫn[ ­*xk,¥+{%iz:*,t(RI0;TY;,ukAL;IKY+RܣKU`KMkگeFT<[{#<^,?{rpse̼[ӛǁzi}l<[oh+Ią ȉLJʌ2E 䬭\\{[,a@L ^iuCm h::=G.RG`1ף@M8JBB -Vv~5;:>{},F篐,׽.ӥNCL l^ 1 v6ؔ Nwʞ 絬b@gWr|٢k N]>n)~03垩] ZF e,ELs0AO,?'3 _t* /@,aNM0"O3-\/Oo]?9E?J/9hN_ޛN/RT_CXZ^`8d/fLj?lp|r?ZҘz|~?_vR?U/HV"MV)[f̣O$QZ"oN_TLd?|ÿ?D3O+xWAC u>OO`7+Lo5qhU"C?OHFxϐN聐#BhT۳%0.%T 1"`lp,tm_hM0FZHZجv.yJ-faPB{~?F4q~ bk S&U|gWMJL93GNNc.u8rCP_sT/̶Žt܅ҳ߻ʒ}t) ybi°Ç#Jtxhŋ'"sJǏ C^uPɓ(LɲKy+_ʜIl5s@ JѣH*]ʴ{3JJիXjʵׯ`B|JٳhӪ]˶۷pʝK.;PK4\ PK+AOEBPS/img/dcl_stmt.gifyGIF87aO?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,O H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nؑ"|'p O@$XA .dC%NXE5n1b|<&̗/G=zѣG=z1_> ѣG=zѣG;w0߿| ѣG=zѣG=n̗a<̗ϣG=zѣG=zܘ`|˗/_/_>/|̗ϣG=zѣG=zԘ`|/߿| /߿|O`'0| /| /߿|/dž8rȑ#G9rȑ#G 3/_|˗`> /߿o O@ Dh0,h „ 2l!Ĉ'Rh"ƌ'p  'p +X` ,(0_ ,X`8`A&TaC!F8bE1fx0| ̗!|'p w  <0… :|1ĉ+Z1ƃ.c`|#˷1b7nܸqƍ7nx0| ̗/F(1ƍ7nܸqƍ7n˗o#|moƍ7nܸqƍ7w1| (? 4xp |'p "L(0,h „ 2l!Ĉ'Rh"ƌC/@߿| HP`'p " <0a| H*\ȰÇ#JHŋ3j,_>w0|mܸQb7nܸqƍ7nh0_>#` ۸q|7nܸqƍ7nܸ`>'p|#@$H? 4xaB 6D0 'p "Lp!ÆB(q"Ŋ/b̨0_>̗_>+`>5V0_>5jԨQF5j`'P'p|? 4xaB 6Dϡ|:tСC:tСC:tСC3/|0_|:t|sСC:tСC:tСC̷0| w0| 8P ,0 <0| H0A  <0… :|1ĉ+Z1| ]0|̗/|i/_| ȨQF5jԨQF-w1|ˇ0_>Ө`|拘OF5jԨQF![b> ˗Oa|˧Q|拘OF5jԨQF![b> 0| ӈ0_|̗`4jԨQF5jԨb HA HP`|,80_+/_,X`|/_| ? 4xaB 6tbD)VxcƁ4^G0_> 70| ˗O`|˗_|_|/߿|˗/_>˗`|I̧QF5jԨQFiĘo`|/_>˗/߿| ̗_'0߿|/߿|˗_|'0|曘OF5jԨQF!Ә1_|+/|/_> `| 70_|˗/|(? ,? 4xaB 6tbD)VxcƁ4j!| O70߿|| ̗/_0@o ? 4xaB 6tbD)VxcƁ4j/|˗`>/_3/|'0__|/|5jԨQF5j1F3`| ̗`>˗O`|;O | ? 4xaB 6tbD)VxcƁ4ja|ӨQa|iԨQF5jԨQ#|5̗a|0 HCa>$XA .dC%NXEӨq`|ˇ0_>˗1F5jԨQF H*,+X` ,X|/_+X` ,X|,X`| O@ DP!0 <0…8?$XA . <80B"DP`>!D!B˗`|̗/B"DX0_|"D(0B"D!‚ O@$XA ̗/_>.\p| &̷p… [/… .$08`A$XA O@ w`$XA .dC[`| O /7|(? /_>$XA . ߿7P|oO@ ``/߿| ̇_>'p "Lp!ÆB0| ̗_>`| /_|S`>Id/| ̗O`G0_|'0_|`> g0߿|G0|+_(QD%Jh0| /_|W0_| ̗/_|3/_ o࿁ '߿ 7?'0_|/_>/70|˗o` /|(0_>80,h|g0_>C/_|/+? 4xaB 6tbĈ`+`>70|%G0߿| /߿|˗_ /|˗O`/|_| /߿|` ˗`>70|/|/|'`|(?7p O@ / O`| H*\ȰÇ#J/| |˗_ o@ 7P`| ̗o|_|'0߿|_>8_>/|˗O`> /˗O`o`(o߿80@8|_# |/A8`A&TaC!F8 _ _(߿|/O /_|˗/_'P|@_>O`/|O G`>߿(0߿|o|o@ _ o`/| ̗/߿|+? 4xaB 6tbD g0|3o`70|˗0_|70߿|_|'0߿|_>;O`|'0߿|O`̗o`>70|/_+O`|W0ā;0?O|0@O|O@ DPB >Qb|̗/_> | ߿߿'P`˗o| O__>O |_߿|_>̗/_/|'P|@/߿'p`'p  ;x? 4xaB 6tbDHa(R0_>(RX0Ņ(R"E)RH"|)6w0_> 'p ,hP`|QHa|QH`> Q(1E)RH"E(Rla|(R0_>(RX0Ņ(R"E)RH"|)6̗0_|)R8`A&TX`>8`>$XA *̷paB$XA O@ DPB >QD H*O@8`A&T? O@ DP| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲj˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ;;PKfPK+AOEBPS/img/objdel.gifGIF87ap?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,p H*\ȰÇ'p " <0… :|1?$X| H*\ȰÇ#JHEwQ!|'p "Lp!ÆBt0@ HA  <0… :|1ĉ+Z/_wŋ/*̗/Ń]xŋ/^xa]xŋ ]T/ŋ/^xŋC/E.^xE h0ŋ/^xŋK/ņ.^xE滘ŋ/^xŋ O@ (0_|'0_|/_>8`A&TaC!"g0߿|˗/߿| ̗/_/|#F1bĈ#F1bĄ /_|w0_/߿|/_>1bĈ#FD`/߿|˗_| /_"F1bĈ#F1bĈ70_o`| /߿|#/bĈ#F`_ ̗o`|`#F1bĈ#F1b|70__|'0߿|'P'p "4 <0… ̗/__ ߿O@$XA 'p "Lp!ÆB(q" W0_>`> /|˗O`>*N̗bŊ'0| /߿|˗O`|` WbŊ+VXb 'p@O |_߿8`A̗0a„ &L0!|/| ̗/|/_> K0a„%L0a„ &L0a„ &L`> 4H? W0_ ,X`A ,X`+X` ,H`> 4x ` $`A ,X`  <0… :|1b| c`>  $4;X0|̗/_b>1w0D I0D Ida$F'Q|%J(QDX0|Ix0D I0DCO|$J|OD%J(Q|0 o 80,h ‚&L0| &Lp` o @80'p ̇!B <0… :|1"|#a>˗Ob|I0D G0| W0| '`|$JOD%J(Q|70| 5O@ < <0| *T0|'0|S(0 HA H*o… .\p… .\H0|a>[p… .\o… ` o`Co… .\` .\p… .\p|̗_+` .\p….\P`'P 0@ o| <0… СC:tСC (?'P8P |$ <0… "O@8`A8P 70?$H? 4xaB 6$0 'p "Lp!ÆB\/| 70|g0_Ĉ#Fta| ˗`|70_>+`>"F1| 1bĈ#FD` #O`>;/bĈ#:0_Ć;`| 70_>;/bĈ#*0_Ĉ#F1| E4a#F0|[/b| E1bD 1bĈ#F$oa1̧`>'p 8`A&T+X| ` ,X`| W |O@'p "Lh? W`A8`A&TaC!̷0_DK`>Eq`>"/|c/a1"| E1bĈ#F80| ca1|拘/b>"60| 11bD!1_Ĉ#F1| E4aS/bĈ 1_| ElaS/bĈ1_Ĉ#F1| E4a>C`W0|E1|c`3/"|;/b#F1bā'p  HA HP`,80_A`A ,X` W_ W`A 0 $XA .dCE0_|G0|'0_|/_| /_|_|˗/|G0_|勘/bĈg0| w0_|'`>80߿|Oo? 8p8`A&TaC!1"|=G0߿|/_/߿|O`˗_˗/߿|˗O`(0_|#F/߿|/|E/bĈ#Fq`#˗/|;O`|G0|̗_>˗o``|E/b#"̗/_>̗`> ̗/|'0߿| ̗o`/߿| /_|8p| H*\ȰÇ1|8P '0_˗/߿|O`|'0? __>$XР|w` <0… :|q`#0|#Fd/|Eaa>"1bĈ#F80_Ĉ ka8? 4x`>ˇ|"D!ƒ̇0B8? ̗/_+X`8`A&TaC!1bĂS/bĈ ED/b#6̷0|#F,/"|#F0 <0‚ HP` ,X` ˗`| W` ,X` ,X| ? 4xaB )̗oa .ToB.\p.\p| [p…̗o| .\0_ [h0… .T/| [pƒ-\X0… .\/… .o| .\ |O@'p "L? 4x_>C!B"08` HO@ !B"Dp`>"D| O@ DPB >a$J(QD%"'QĆ'P|o'p| ̗/|#Hp`>$XA .dC惘OD%J(Qb|%Jd``/߿| w0|%J(QD 惘OD%J(Qb|%Jd`>`>/_|̷0D%J(QD(QD%J0D`> G0| W0߿|W0D%J(QD3OD%J(Q|I(Q`|(?8? O@ / O`| H*\ȰÇ#J/|8qĉ'NH0_>&N40'p|O`>#Hp`|@$XA .dC%NXE5n$ <0!|W0|70|O`|;`> *TPB *TPB SPB *TPB *Ta> *T80|80߿#A/_|(|߿'p "Lp!ÆB(a'N8qĉM81ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8q|'Noĉ'N8qĉ'N8qĉ'NoĉM8qĉ'N8qĉ'N8qĉM8_'N8qĉ'N8qĉ'N8Qb'7qĉ'N8qĉ'N8qĉ'JO@ DPaA$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fc H*\0!$`'p@$XA .dC%NXE52̷qF˗_| ˗/|mܸqƍ7nܸqƄ6nH0_|0|6nܸqƍ7nܸq|7n$a'1ƍ7nܸqƍ7n4a|˗/|(߿ @7`>߿ 7P8P`>#HP`>#/| H*\ȰÇ#JHŋ3j,`/|70| ̗O`3`>ka>۸qƍ7nܸqƍW0߿|O`>a+`>3`> ;`|˗/|mܸqƍ7nܸq3`#O`>Co`> #`> #O`>`|˗_|G0ƍ7nܸqƍ7b/|Oo@ | Oo@O|8p`7p` /@  <0… :|1ĉ+Z1#C$8? _ '070 '0@7p` 08`A70߿|'p@$XA .dC%NXE-w0|/|70| ̗O`3`> 0_| /_|`4jԨQF5jԨQc|!̗/_>/_|(|?˗/@ 70߿߿߿? /8_|˗/|/,h „ 2l!Ĉ'Rh"ƌiԨ`;/b4jԨQF5jԨQc|5j<`0_4jԨQF5jԨQc|5j<`櫘OF5jԨQF5J̧Qƃ[Oa4jԨQF5jԨQ|5j5̗OF5jԨQF5VO@ DPB 8@ O@'p H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxC;;PKrv PK+AOEBPS/img/update.gif(jוGIF87aXl?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,Xl H*\ȰÇ'p "L? 4xaB 6tbD O@ 'p "L8? 4xaB 6tbD)VxcF4J̧QF+'p@$H`>8`AO@$XA .dC%NXE(1F5j/|˧1c|4jԨQF5jԨa>iԨQƉ%̗Oa|5˗OF5jԨQFS/F4jԨQ| )W0_|ӨQF5jԨQF˧`>5j(1_|0|iԨQF5jԨQ|8P߿8`A&TaC!2g0|̗/| O@/_|8߿ OO@ DPB >QD-^x1|˗/߿|/߿|O``3fh1| w0_/_>;_|˗/|˗/_>G0_ƌ3f̘1cƌ3^g0|O` '0߿| W0_ƌ3fa|w0|˗o`_|70_|g0_ƌ3f̘1cƌ3V̗` /|˗O`>'p 'p "L <0… .̗!|O70? O|A'p`|8`A&TaC!F8bE1F̗_> ̗/| ̗o`>/_> 81_3^̗_>/|/_|;_>˗O`|˗O` /cƌ3f̘1cƌ | /߿߿|8`A&/B *TPB w0| w0|'0_|/|˗/|/_> #/,h „ 2l!Ĉ'Rh"F81_F2f81_| ̗b> ˘1cƌ3f̘#|,h ` ,X`A ,X` W` ,Xp |,h A$(0_ | ,XP |'p W|O@ DPB >QD-Rw1|]E.^| 0|/.w0ŋ/^xŋ)滘a.Vw|/ w`>[OaCŋ/^xŋ]0_|+xQ`x0|%0ŋCŋ/^xŋ!̗O |'P`7P`>$XA%L0a&L0|((? 8p`7P`|(0_| H̗Oa>$XA .dC%NX"|#a> 'p "L? 4xa*Tao` S(0  O@ Dp ? 4xaB 6tbD)V1|70|!wŋ]O`+O`0ŋ/wŋ/^xE;/߿|!G0|/^x0ŋ;o``>xŁ.^xŋ/^`>'p| A$H? 4xaB 6D0'p O@ `>(0@ O@$H? 4xaB 6$0'p "Lp!ÆB(q"ŊW0_ _>|O@ DPB c/_> W0_+O` +`>:tpa>sСC:tСC:t0|̗o`>#`>:t|s0|G0|`>sСCs/C:tСC:tСC`>Co`>:tСC9ϡ| w0_|o`|1СC.P`>:tСC:tСC-0a>'P ,H`> 4xaƒ HP` W` ` W| O@ O@ DP| [p… .\p… .\p… [o˗0_-/_ .D/| [x0| "̷_>-\X0_ .To| .\p… .\p… .\p| -\/Ko| .\P`|-4o| [a!̗o„-\p!| [p… .\p… .\p… [ow0| -\pB[h0B˷p!| Co…'p "Lh0ƒ8`A&TaC!F8bE/|5̇0|+`>拘/b>,"0|Y<ϢŃ"hѢE-Zh| 8`A8|+Xp`+/_,X`|$| `,(`> 4x | W`,X` ,`'p "Lp!ÆB(q"Ŋ YX0_|w0| ̗/@O|˗O`|˗/߿|_| 7P`80? 4xaBg0߿|˗/߿| ̗/_/| .\X0ƒ.\p… .\p… .\p.\`70|/_/_>/߿|/߿|˗_|'0|[x0B.\p|3_|/_>/_|˗` ./ƒ.\p… .\p… .\p.\`|-$`/| w0߿|0߿/_/_'P` 8p 8p@8`A&TH0_O`'0__>.\_| [p… .\p… .\p… [p„-$08_> `>8_˗/߿|O7p 7po  <0B/|O /'p "L? 4/,h „ 2l!Ĉ'R0E =G0߿| ̗/߿| ̗`| /|˗O``>EgѢ|'0߿|/_>_>,Z/E-ZhѢEhqa>O`/_>a /߿_(08p`(0,h „ 3_>/_>/_|̷p… ˷p… .\p… .\p… ˷p… -` .\0…-4o… "̷p| [p… [p… .\p… .\p… [p… ̇0…   ˗/‚"D!B O@ DPB >QDhahb>Eg"|h|-ZhѢň H*,+X` ,X| W`| ,X` ` W`A8`A&T0… -\p…-\p… .\p… [p…-o…  ̗`| [p…-\X0B.\p| &̷p… ̷p… .\p… .4o… ̷_ .\H0_|˷`|.\`|-\h0B.\p˷p|[p… [p… .\p… ̷p… [/… . 2dȐ!C 2dp`> /߿(߿ (0_|70A$? 4xaB 6tbĆ"(QD%J0D%J(QĄ +O`> `> 70|-'QD%J(`>$J(QD%&'QD%J(a> O`>3o` a$J(QD%0D%J(QD$J(QD%'0|``#`>%J(QDg0D%J(Qą(QD%J|_>  ˗/߿|Wp`O@ DPB >Q| ̗oĉ'N8q"|M8qĉ'p o| 7_ 8_ /8`A&TaC!F8bE1fԸ ,h „ 2l!Ĉ3`>+o` '0|ˇ0_|%J(QD%'QD%J(Q"|%J(QDg`>/?OG`> @ <0… :|1Ć&N8qĉ'F7qĉ'N0ĉ8qĉ'N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N8qĉ'"7q&N8qĉ'N8qĉ'N8qĉ'N8a'7qĉ'N8qĉ'N8qĉ'N8qĉM8_'N8qĉ'N8qĉ'N8qĉ'NDoĉM8qĉ'N8qĉ'N8qĉ'N8q"B$XA O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~)|'p 8`AO@'p ,h „ 2l!Ĉ'Rh"ƌ7rc| {/Ȃ9̗`> A $H A | [/ȄK$H A $H A1| \Oa@ $H A $HW0_|ẏ0_| $H A $H 53`/|$H A $H A̘`3/_>'P_/A8`A&TaC!F8bE1fԸcG3`>+O`| ̗/߿|/߿|'0߿|`>3/| A $H A $H;` G0|70߿|'0߿|W0_|3$H A $H Ai1_|O@ /_|/|O |_(`>'p|'p "Lp!ÆB(q"Ŋ/bL <0… :|1ĉ` `/_>/߿|'0߿|3`|G"E)RH"E)RD"E)RH|w0|̗/@ /߿8080'p "Lp!ÆB(q"Ŋ/bL/cƌ3f0_ ;`>g0|̗1cƌ3f̘1cƌ e̘1cƌ3`>滘a|!W0_>e̘1cƌ3f̘1|3f̘1cFc/a)0_ƌ3f̘1cƌ3.̗1cƌ3fda>1| e̘1cƌ3f̘1#|3f̘1cFCa|sa3f̘1cƌ3fl/cƌ3f0B ˗/A /_| ̗/߿|O@ DPB >QD-^0_ƌ3f̘a 8`A 'p O@ DPB >QD-^(1_ƌ3f̘a3f̘1cƌ3f̘1cƅ2f̘1cƌ e̘1cƌ3f̘1cƌ3.̗1cƌ3fd/cƌ3f̘1cƌ3f̘qa3f̘1#|3f̘1cƌ3f̘1cƌ e̘1cƌ˘1cƌ3f̘1cƌ3f\/cƌ3f0_ƌ3f̘1cƌ3f̘1|3f̘1cF2f̘1cƌ'p A H@$X H*\ȰÇ1bĈ#F1b#F1bĈ#FDa>El/_Ĉ#F1|#F1bĈ#F1bĈ#F1bĈ90_Ĉ"F1bĈE1bĈ#F1_Ĉ#F1bĈ#w0_| Sa| W0|#F1bD"F1bĈ#F/bĈ#F1bĈ 3o`|%̇0_>C/bĈ#F0_Ĉ#F1bĈE1bĈ#F1"| O@7p|'p@_O`>'p "Lp!Æ:"D!B"ą B"D!Bb/_ o`˗/_/߿|/_> B"D "D!B|!B"D!B1_| ̗_>` g0߿| ̗/_ B"D "D!B|!B"D!B0_/߿|8P /|_>  H*\Ȱ!B$X8`A&TaC!F1ĉ'N8qĉ/_|/_|̗`|'0|'0_> 8qĉ7a'N8qĉM8qĉ'N0|˗_|'0A/|G_>$XA .dPa>sСC:tСC9tСC:tСCg0_;ϡÅ:tСC9t(0C:tСC:,ϡC:tСC:,`>K`>8? ? 4xaB 6lϡ:tСC:ta|:tСC:ta|9$/a>sСC|:tСC:t0|:tСC:ta|9Oa>sСC|:tСC:t0|:tСC:ta| 90_> sСC"|:tСC:tX`> O@ DPB >Qą[/|G"E棘`> O@ DPB >` (QD%J(Q| 8@$XP |,h@$XA .d|s/Ç>|Çw0Ç>|Ç>4Ç>|Ç=t|>|Ç_>|Ç>l`>|Ç:a=|Ç>|(0C>|Ç>|a>>|Ç>|0C Ç>||{Ç>|à H ,h „ 2l!Ĉ'p 8 | ? 4xaB 6t|E1bĈ#F0_ 1bĈ#F1a拘/bĈ#Fa"F1bĈ#Fta"F1bĈ#FLb>"1bĈ#F|/b8`A'p  <0… "̗ϡ|8`A&Th? ̗/_ O@ DH? 4/_>4X0 ,? 4xaB 6t|Ed/_D{/_E1bD"+/bĈ-̗o`|˗/bD{/_)1|E1bĈ#>1_DE/|1bĈ EW0_ĈK/| E0_|C/b"1bĈ#F|/b EH0| E`>  !/B"D|;!̇| H*\ȰÇ拘/"|E"FL/_>0_|̗/_> O@/߿߿(0 /@? 4xa‚+`̧_>)TPB *TPB Sx0B)$O‚S80B ˧P|*#_'0_|g0| SP|3`>̧_>)TPB *TPB Sx0B̗/|˗/| ̗/߿|˗`̧P„*4OB"G0| ̗/|`>W0߿|+0GP`>|/_> @/_>/߿| o/@ 7p8p|8P`>$XA .dCE`> /_|˗_ /|/_a c`""Q`O`| 70| G0__``|_|`| /_/_>#O`G0_拘/bĈ#Fa"/_|#O` /| ̗`91"|W0_|80|˗o |O|߿|? _(0@ / _ 70_80|/|'0@/ O`|8p|o  <0… :|a'p@0@߿| ߿|?8P $08`A̗/߿|˗/_>˗`w|g`>__@ /| O@ / (? /_|o| ̗/_0 08P`>˗ A #Hp`> ? 4xaB 6t|9w0߿| ̗/߿| /_>_|W0_>拨0|˗/_˗/|Eo`| ̗`w0_| '0_`>_>˗O`a>"̷0_|#F1bĈE0|̗/|'0| '0?O|o7p8`AG0_|˗/|'0|/|/|0@? `>/߿|'P` 7p|7po 8p@8`A&TaC!>1| Ex0|-`|'`> /_|8p|8p@8`A&TH0|w0_| .\(0|̷p| -4o… .\p… "̷`˷pB[(0&70| ̗/|'0_|-Lo.\p!|W0|-0 H3/| | <0… :|ak/bĂcag0?_808p8p'p "L` ̗0… ̗0.oa-\p… .\pB̷0.\X0| -o|-\0_| [_ .\H0| )̷p…-̷0…-̷` .\p… .\0B[H0… ˷_>-o|-\h0_>̷p| .\`[/_ .o| -\H0| [p… .\p…-4oa˷p!|̗`| ? | 4H0 ,ϠA4hРA , |̗Ϡ4hРAg|˗ϠA3X0A'p "Lp!ÆB|/b" O@  ̗/_> 3h`>4hР|3h`> O@ DPA$80_| ,H`> 4xaA$X`|4hР| 3h`>$XA .dCE̷0_Ĉ#F,/b"̗0_|#F1bĈ#F0|E1bĈ#>1|#F`˗/|)1_Ĉ#F1bĈ#2̧0_|#F1bĈE̗/a#Fh0_>'p 8| ? 4xaB 6tbD)̧0_|+VXbE$KbŊC`K`+VXbŊCOb+VX"|̗bŊw0|+ ̧0|*VXbŊ+VT`*VXbŊQO@ DPB :O@ D`> 4xaB 6tbD)Vl  <0… :|a#F1"|E0|#F1bĈ#F1|#F1bĈE1bĈ;/bD1bĈ#F1bĈ1bĈ#F|/bĈ#F0|#*̇0_Ĉ#F1bĈ#F1_Ĉ#F1|#F1bĈ1O@ 'p 8`A&TaC!F8bE ]xŋ ]xŋ71|/^xŋ/^Tŋ/^lŋ/^̗0|xŋ/^x|/^xb|/^xb>. ̗0ŋ/^xŋxŋxŋ̧0| ]xŋ/^xQa/^xa/^x1| Cŋ/^xŋ ]xŋ ]xŋW0|˗/߿| G0|/^xŋ/^\ŋ/!'p "Lp!ÆB$`'0_|/߿| +/b#F1bĈ#F0_Ĉ#F1|#F1bĈ`˗O |O|O@ DPB >QD-6wŋ/6wŋ//| O O|O@ DPB >QD->wŋ/6wŋ/g0__|3ŋ/^xŋ]xŋ ]xŋ70߿| ̗_|]xŋ/^xQb/^xa/^x`]xŋ/^xqb/^xa/^xa]xŋ/^xqb/^xa/^xa]xŋ/^xb/VO@ D ? 4xaB 6tbDM8qĉ'N8qĉM8q|'&0ĉ'N8a|8qĉ'N8qĉ8qD&NLa'N8qb|9̗/_'N8qĉ'N8Qa'NtoĄ8qĉ'N0 'p "Lp!ÆB(q"Ŋ/̇#F _| ̗/_> O'P` <0… :|1ĉ+Z1ƍ;2ѣ| /| ̗o`|̗0|=zѣG=z#|=vg0| /|70| -ѣG=zѣG=vѣ|70߿|70|`+ϣG=zѣG=z/|=J/|˗/_>/߿|O@ 7P`8`A&TaC!F8bE1fԸcG |o| O_>0 <0… :|1ĉ+Z1ƍ;zL <0… 3o` /߿|` O@ DPB >QD-^ĘQF=1b˗O`'0|O@ 7_>$XA .dC%NXE5nc>)1G=zѣG=zѣG yϣG=zѣG=zѣDžyѣG=zѣG=z0Lj4iҤI&M4i:0M4iҤI&M4k&M4iҤI&M 9'0M4iҤI&M4{/M4iҤIfI$XA .dC H |,h „ 2lB$XA .dC%NXE˗1cƌ {/_ƌ3f/_ƌ3f̘1cƌ3N̗1cƌ;`>2f̘1#|3f̘1cƌ3f(1_ƌ3f<`>2f̘1#|3f̘1cƌ3f1_ƌ3fLa3f̘0_ƌ3f̘1cƌ3>̗1cƌc/cƌ3*̗1cƌ3f̘1cƌ˘1cƌ -̗1cƌ˘1cƌ3f̘1cF2f̘1#| e̘1cƅ2f̘1cƌ3f̘a3f0| /,h „ 2l!"F1bĈ#F1bĈ#FD/bĈ#F |'p "Lp!ÆB/bĈ#F1bĈ#F1bD"F1bĈ#F1bĈ1bĈ#F1bĈ#Fa#F1bĈ#F1bD"F1bĈ#F1bĈ#FD/bĈ#F1bĈ#Fa#F1bĈ#F1bĈ1bĈ#F1bĈ#Fd/bĈ#F1bĈ#F1bD"F1bĈ#F1bĈ1bĈ#F1bĈ#Fa#F1bĈ#F1bD"F1bĈ#FQDEQDE@8`A&TaC8`A H*\ȰÇ#'QD%J(QD%J(a>%J(1_(QD%JTOD%J(QD%J(Q"|%J(1b>I(QD%&'QD%J(QD%J(a>%J1D$J(QD(QD%J(QD%J0D%J|O"|%J(QDI(QD%J(QD%JDOD%:'1a|%J(QDI(QD%J(QD%JDOD%:g0_|_>/_>  <0… :|a#F1bĈ#F1bĈ1bĈ+/|/_˗`#F1bD"F1bĈ#F1bĈ#FD/bĈ#F`| '0|1bĈ#F0_Ĉ#F1bĈ#F1bĈE1bćg`>_?8`A&Ta>$XA .4? 4xaB 6tbD)Vx|3fĘ/|_|'0߿|e̘Q`|3V̗1cƌ3f̘1cƌe̘b ˗_|˗/_> ˘1#|3R̗1cƌ3f̘1cƌe0  w| ;xQD-^0|Ø/_|˗_|Eg0| e̘`'˘1cƌ3f̘1cF,x0| Aw0_|3f棘OaKb|3fD/cƉ2f̘1cƌ3f̘a 櫘aS/_˘1|3N̗1cƌ3f̘1cƌMg0_|'0_>'O|7p8p|`> O@ DPB 5lذaC6lذaÆ 6lذaÆ 6lذaÆ kX0|˗/߿|'0߿|'0_ ;|װaÆ 6l0_Æ 6$aÆ 6lذaÆ 6lذaÆ 6lP`G0|_>O` |'p` ? 4xaB 6t0Ç&Ç>|Ç>|Ç=/| /_>_>+08`A H ,h „ 2lp!|,h „ 8`8`A&TaC!F8bE1:0_|̗_|˗_|'0߿| W0_| 'P (08`A&TaC =|a|=|Ç>|Ç>|| w0_|'`>/߿|//|8_ /,h „ 2lpa*0Ç>|Ç>|Ç:0_|&w0{Ç.Å{Ç>|Ç>|C3C{/| 80,(`> 4xaB H?'p "LP`8`A&TaC!F8bE1:0|Ka;/|/0| ex0|3f̘1cƌ3f0|˸0| 9̇0|2fa˘`2f̘1cƌ3f̘a˗a>)0| %̗1#| -w0_ƌ-̗1cƌ3f̘1cƌ-̷0_{/| 3`s/|̗0_|̗1| e̘1cƌ3f̘1| 5O@  O@$Xp`> 3/ ϠA /_> g_> 3hРA 4808`A&TaC!F8bE1:̷0_ƌ+``|0@ /߿ o/߿__>/ <0O@ DPB >QD-^0|3fdo`#O`/|˗/_'0_|˗/_+`g0|3&̷0_ƌ3f̘1cƌ3:̷0_ƌ˗/|̗`| ̗o`|'0_|'0߿|3`|̗/_[/cƌ3f̘1cƌ[/cƌw`>'p|O`|_> /߿O|08P`>'p "La8`A&TaC!F8bE1:̷0_ƌ!;`>3o`˗O`|/| /|C`3/cƆ˘1cƌ3f̘1cF˘1c|70|'`>G@O߿? 4xaB- <0… :|1ĉ+Za2f1|̇1|;`>2ftoa3f̘1cƌ3ftoa3Fw0_|滘a|8?#H0? 4xaB - <0… :|1ĉ+Za2f(1| eH0| e0|3f̘1cƌ3f0|3fOa2foa>e0|3f̘1cƌ3f0|3f`| x1_̗1c| e̘1cƌ3f̘1| e̘"|O@'p "LH? 08`A&TP`2dȐ!C 2dȐ!C 2dȐ!C H8|  <0… :|1ĉ+Z$XA .dC%NX| ]xŋ/^xqb/|1̧0ŋ/^xŋ[ŋ/^xŋ70߿|!0|/Bwŋ/^0|/^xŋ/^O``>K/a˗/߿|]xŋ/*̧0|/^xŋ/^<_>`>G| <0B[p… .\p… .\h0|˷p… .\p… .\p… O@8|@$X A$XA ˧0… .\p… .\p‚ HA H*\ȰÇ#JHE̗o` C`.^La/^xŃ,xŋ/^x|̗/_> _>`> ? 4xa„̧PB *TPB *TP|  <0… :|1ĉ+ZL|]0|/^xŋ]xŋ/^x"| 滘Eŋ/^xq`/^xŋ/^D|]0|]xŋ/wŋ/^xŋ]4b8`A$H`> O@ DPB >Qb|'N8qĉ'N8q|H0Dsa| 7qĉ'N8Q`'N8qĉ'N8Qb M$ob|g0߿|M8qĉ'Noĉ'N8qĉ'N0 <8? 4(0w |w | H*\ȰÇ#J'QD%J(QD%J(Q|#擘a>$J(QD%&'QD%J(QD%J(Q|#/|(QD%J0D%J(QD%J(QDIO| IOD%J(Q"|%J(QD%J(QD%:'b>!'`>%J(QDI(QD%J(QD%J0D$g0Ă$J(QD%"'QD%J(QD%J(Q|!h`>8`A'p "Lp!ÆB1D%J(QD%J(QDIOD$J(QD%"'QD%J(QD%J(Q|!(Qb>%J(QDI(QD%J(QD%J0D$JOD%J(Q"|%J(QD%J(QD%:'b>%(QD%J0D%J(QD%J(QDIOD$J(QD%"'QD%J(QD%J(Q|!(Qb>%J(QDI(QD%J$DI$DI$CO@(? Ϡ H Hp` O@$X |'p (? $0 <0a>$X`|4? 4xaB 6tbD)VxcƆW0_˧Q`| =̗`|+/| 0_>{/|ӨQF5jԨQFKai4/_|%0_1̗0|4b0|ӨQF5jԨQF̷0_|iTaSa>SO[`>5jԨQF5j/|0|Uw0_|̗0_| W0_|il/a ;OF5jԨQ#4H7p`o|808_ 8p|80 8p| 7p` (0 w0|w0|'0@ o`o@ o/@  <0… :|1ĉ+Z1#|w0|g0_/߿| /| ̗_[_G0߿|/|/|O`|˗/߿|/_>˗/߿|G0|+`>5jԨQF5jX0_>;`> g0|/| /|'0_!g0_| 'P (0_8_80_ ̗o`|'0_|'0߿|7p|o@'0,h „ 2l!Ĉ'Rh"ƌw0A$X o`_>O`8` (0A (? 08_>8P ˗/_70_0_>@/_>$XA .dC%NXE1;`>3/߿|˗_O``>C`>30@ o|o/O`|˗_| ̗/| ̗o@o| (08`A&TaC!F8bE1fԘ`s`|˗O`/| '0_| w0| 1|w0|̗/@ /߿8P`>'0  <0… :|1ĉ+Z13b Qg0|=̇0|̇1|;`>6nܸqƍ7nܸq|G1ƅ(+/|=̇0|!̇1_|'p  Gp`>#(0,h „ 2l!'Rh"ƌkb U0_| %0_|7Ka7nܸqƍ7nH0|x0_>S/| -̷0ƌ[oƍ7nܸqƍ7̇0_6̗1_>K/|ko| !̗oƍ7nܸqƍ7̗/|6˗/|m/|=̗/|A̗o`|˗oc|=̗/|mܸqƍ7nܸqFh`> 4X? 4x`|",/_> ˗!‚ H'p O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVڄ H8`A&TaC!F8bE1fԸcGA/H)RH"E)RH"E>'`>"E)RH"E)RȆD"'RH"E)RH"E0| 0H"E)RH"E)Rd| 1H"E)RH"E)R$|/_|'0_|'P࿁ O| H*\ȰÇ#JHŋ3jȱǏ 13/߿|˗_|/_/_˗_B 2dȐ!C 2dȐ!13o`/|/_`!C 2dȐ!C 2dȊg0|'0__|'0_A$XA .d? 4xaB 6tbD)VxcF9vĘ/|/_'0_|/߿|˗_> qc|=zѣG=zѣǃ ;/_O`/߿|˗/|c|=zѣG=z |,h „8|,X` ? 4xaB .̗? 4xaB 6tbD)VxcF%1|q#Gqȑ#G9rȑ#Gqoa8BǑ#ǃ8rȑ#G9rȑ#G8F̷0G9r$#G9rȑ#G9r$`70@ 7P'p` 7p|8`A ̗/a„ &L0a8`A&TaC!F8bE1fԸQb ̗_|`SoaH0_|9r\#G9rȑ#G9r$`|/_| W0|Soa> H8`A&TaÃ:tСC:tСC:tСC:t_> _O`OasСC:t`>:tСC:tСC:tСC:_>_ @ o@7_'p "Lp!ÆBD/bĈ#F1bĈ#F1bĈ#Ft080_|/| o`>`> O@ DPB >`> O@ DPB >QD-^ĘQc|g0_>o`> O`>3oƍ7&0ƍ7nܸqƍ7na/߿| O'@ o`O@ DPB >0|"F1bĈ#F1bĈ#F1| E0|#F1bĈA1bĈ#F1bĈ#F1bĈ[/bą30 <0| 0 ,'p  'p  ,(0_ ,X`> 4xaB 6t? 4xaB 6tbD)̷0_Ŋ-g0_Ŋ Wq`*̗/a*6WbŊWbŊ+VXb| U80|U0|Sb|EWa+V0_Ŋ+VXbŊ1W| ̇0_| '`> @/߿? (0_|(? (0,h`|!D/B/_|/A 7P࿁/߿߿|߿70˗O`/|'`> <0… :|1ĉcbŁ3`O`O` 70|70| !Wa"櫨0|/|;o`o`>/|˗O`>G0|̗`/߿|UXbŊ+V(0C$XA 'p A +/| '0| ̗_ 70_ W_+H0_A ˗/|˗_|˗O`|`,X`O`||WP`o`| '0߿|/|/_| 70߿|WP`>$XA .dC%N(0_Ŋ+`>o```3`#O`˗_>˗O`|/_ 擘|70|/|w0| 70߿|'0߿|/_|̗_/_XbŊ+VX_+&̗o`> O |(߿_O|o|/_|(0߿|(0|˗O`808p8`AG0|_'P࿁߿߿_/߿|o'p`o`˗/? ߿| H*\ȰÇ#JH_+.̗/_>o`>o`> /|8P (0߿|O o|'0_|o7p 7p0/߿O| '0| ̗O`/#_> _O| (`>'p "Lp!ÆB(q|)R`O`O`70|;o`|%W0߿|/߿|/|/|棘/_>'0_>/߿| /| '0| ̗O`'0|_ '0| /|G"E)RH|)R`| ̗/|70_ /߿//߿| ̗/_>o| /_>/|˗/|8p7p7p| /_|˗_/|80߿/߿|AG?/߿G?/ <0… :|1ĉ QH1b>O`> 70Ň('1|QH"E)G"E)RHb>)FG|Q$`>Q$ObQH"EH"E)R81E#Ha>(̇0ņ('1|)RHb>(RH"E)NG"ň(Rt`>%Ga>E0E)Ra|)RH"E%Hb|):g0E棘0_>E0E)Ra>)RHEQ$@8`A&Tpa> 24`> -ǐ| ǰ`>cȐ!C 2dH0_>1dȐ!C 2dȐ!C ǐ!C O@ DPa>O@ O@8`A8`AC_>'p "Lp!Æ'p 'p "Lp!ÆB(q"|)RH"E)Rl/b>)RH"|)RH"E%H"E)RHb|QH"EH"E)R(1E)RH"E惘"E)R0E)RH"ň(RH"E)R0|)RH"E(RH"E)*G0E)RH"E#;`>)RH"|QH"E)R_|)RH"E)R/_G"E)Rt/|)RH"E 8`A&TaC!F8bE1fԸcF$XA .dC%"7qĉ'N8qĉ 8qĉ'Nloĉ'N8qb|'N8qĉ'N8`'N8qĆ8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jU Wfպk;;PK -j(jPK+AOEBPS/img/lnpcc068.gifGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\R |,h „ 2l0!,h`> 4xaB 6, < |,h „ 2lX? 4xaB 6t0a>!Bb>A"D BD"D!:"D!B/D!B1_|"D|!Ba| B"DA"Dq`>!B0_|!"D˗"D!B0D!B1_|"D|!Ba| B"DA"Dq`>!B0_|!"D˗"D!B0D!B1_|"D 8|˗`AW` ̗/,h „ 2l|!B"|A"D!:̗/DAo`| /| #/| B/_>!B|!B"|A"D!:̗/DA`/_ G0_||A"D"D!˗|!Ba| B4|/߿|3/a+|A"D"D!˗|!Ba| B4@ /߿? 80@o|8pO@ DPB ><"D!B/_>A"D`>'0|G0_|O@8`O@ DPB ><"D!B/_>A"D`>'0_> '0_ '0_> h0_|!B"ć B"D80D8? 4xaBSP!| 3o`|˗/|˗`*/_> *TPB * "̧PB ˗OB)TPB *$/_> *TPB *7P'p "/_ K0aB_| ̗/_„ ˗/_„  ̗0a„ &L0!|%L0a„ &L0a„%L`˗o`>o`K0aBK_ &`˗_| ̗0a„K0aB&L0a„ &$/_ &L0a„ &L_ G0_|a>#O` &/_ K0aBO`/a„ ˗0a„%L`|O@ DP!|-\p… .\` ˗o`>C`>o…˷a G0_| O@$XAC!B"Dh0|"D!Bˇ!B"D!B"<!B˗_>C`>!B ˗!"D`>O`| ̇!Bˇ!B!D`>˗o`>'p'p ̗/B"D!B"D`>"W0_>C`>!B ˗!"D`˗/|C!BC!B"Dh0_|O`>˗/|!Bˇ!B"D!B"<!B#_|ao`>"4/_>C!B ̇!B ˗!B C!|70| /_|C!|!D!B"D!B? 4x |o ߿7P O@ 4/_>C!B#!B̗/Ḃ!‚ 70| /_A O@ $/_>"D!B"D|"D`>"D!Cp`>"0@?#/A $H|$H A  A $/_>O`>/| A $H0_| H*\ȰÇA"Dq`>C/a> B/_> `>߿  /|"D/_|"Dh0B"D!B ˗!B"D!B"Dx0B"D!B"D/_>C! _ /߿ O| Hˇ!B!DA /߿| H˗/B *TPB ̧PB *TPBS0B 3_ _ /,h`|!D|"Dh0|"D`|"D!B"D!B!D!B"D!BCp`>"`'0| '0B˗/Ḃ!B/|!D!C!B"D!Ḃ!B"D!B˗!"D_>/_| ̗/|"D_|"D`>"4`'0B"̗/B"D!B"D`>"D!B!B!P> H | 4hРAϠA ̗/A 4(0A 4(`>/?O@ DH0_| &L0a„ &L0| &L0a„ &LH0_| ˗0a„ 3/a„˗0a„%L0|`>8`A̗/_„ &L0a„ &L/_„ &L0a„ ̗/_„%L0a„ &LH0_| &L(0_„  g0߿|/a„ ˗/a„ &L0a„ &/a„ &L0a„ ˗/a&L0a„ &$/_ &/a„ 3_>˗0a„˗0a„ &L0a„ ˗0a„ &L0a„˗0| &L0a„ ̗/_„  ̗0a„ &L0!|%L0a„ &L0a„ <0… :|!|=|ÇÇ>|!|=|ÇÇ>|!|=|ÇÇ>|!|=|ÇÇ>|!|=|ÇÇ><P> H | H*\Ȱ|9t0C:t0_|:tСC'p "Lp!Æ'p 8`A&Taà H'p "Lp!Æ8`A&TaC'p "Lp!Æ'p 8`A&Ta H 'p "Lp!Æ8`A&TaC!F0_'N0 <0… O@ D8`> 4xaB 6, <0… :|1DM8qĉ8q`|M8q|&N8qĉ'N8`|'N8q|7q"|8qDM8qĉ'N8q"|&N8qā-̗oĂ7qĉ8qĉ'N8qDM8qĉ˗Oa|'̗/_'N$/ĉ'N8qĉ'̗oĉ'N/_| 8`|M8q|&N8qĉ'N8`|'N8q?O'p "L/_|*TPBO@ DPB >QDgѢE 'p ̗? 4xaB˧PB *-ZH`>'p|8`A&/_| *TPB'p "Lp!ÆB(q"ŊhѢE8P  ̗? 4xaB˧PB *,/,h „ 2l!Ĉ'R/_>-Z8`> 'p|8`A&,/_| *TPB'p "Lp!ÆB(q"ŊhѢE[/E˗ϢEhѢE-Zha|-Zh`| ha|Yh`|-ZhѢE-2̗ϢE-̗oa|-&̗/_>-̗ϢE-ZhѢE H? 4xaB 6t0_=|0a|=||>|Ç>|Ç8P ,h 2l0a| {|{Ä=|Ç>|Ç 'p@$XA .da|ÅÇ{Ç>|ÇO@$XA .dС|CÇ{Ç>|ÇO@$XA .dС|ÆÇ{Ç>|Ç̗/_>||CÇ{Ç>|Ç̗/_>||ÇÇ{Ç>|Ç̗Ç>|0_=||{Á=|Ç>|ÇÇ>d/|>|P`|=||>|Ç>|Ç>|Ç[/,h „ ˗/… .4/… .\p… .\p…  O@ O@ DPB  ̗oa|>|H0_|>|0_>|Ç>| |'p 'p ,h „ 2l0_9ta|sСÁ9tСC:tСC˗/@,h|O@ DPB ˷0_>:T/_|:t(0_>:tСC:ta|8`A̗/,h 2l80_ H? 4xaB˗o…  ̗o… .\p… .\pBO@ Dp`|8`A&Ta|'p@$XA &̗/_ .D08`A&TaC!F8qa| H&̗? 4xaB .̗!| O@ DP|[pB (? 4xaB 6tbDП <0'p "Lp!Ä%O| H*\/_|2dp |O@ DPB >QĄ8`A&Tx0_>$XA .dx0_  <0…˗!C 'p ,h „ 2l!Ĉ'"П <0„'p "Lp!C)O@$XA .$/_| 2d(`>8`A&TaC!F8`| H*\/,h „ 2,/|kذaÆ˗aÆ ˗aÆ 6lذaÆ 6l/@,h „  <0… ˷0_| 6la|5lPa|6lذaÆ 6lذaÆ'p "Lpa| H*\p`| kذaÆ ˗aÆ kذaÆ 6lذa П <0…O@ DPBkذaÆ ˗/|6lX0_Æ 6lذaÆ 6l_>$XA .D/,h „ 2/_Æ 6l`>'p O@ O@ DPB >Qb| H*\0_>$XA .0 

$X A 08`A&TaC!FH0@,h „ "̗/,h „ 'p "LX? 4xaB8? $0 H 'p ,h „ 2l!Ĉ'p "Lpa|8`A&T(`> 4xaB8`A&T08`|+X` ,XP`|'p "Lp!ÆB0_>$XA .L/,h „8`A&T0,h „8p ̗/_>$XA ̗/_ .\p… .\`| H*\0_| HO@ DPB HO| (0_>$XA ./_> 2dȐ!C 2d/_>$XA .D/_>$XA 'p "Lp!C$XA ˗/_|)TPB ˧PB *TPB *,/_>$XA .$XA 'p "Lp!C H̗O`| *TPB)TPB *TPB ? 4xaB ˗/,h B H*\ ,h „SPB */B *TPB *T_>8`A&T`O@ Dx`> 4xaB *O@ Dp`> *TPB*TPB *TPBO@ DPB˗/,h B H*\Ȑ!,h „)TPB "̧PB *TPB &G0@,h „ _|8`Aˇ|,h |'? O@ <G A $ A'P o`|,80_| ,X`| H*\ȰÇ+/@,h „ ߿|'p  ̗/_> H'߿/a„ 'p |'p ̇|C80_> ̗`> ̗!B'p "Lp!ÆB\`>$XA ̗? <(`>`> 4x_"DO@ !B/_/|G0|"<? 4xaB 6t|O@ DP|8|,h ‚&L0߿_&Lp&Lp ,H0|/_> 3H0_|+ϠAO@ DPB >0|'p "LX0_| 8`> 4xaB +_Æ 6l8? $0@/߿'p`7P`(080_>$XA .dC 5̗/@,h „'p A+X`80߿ $H AG?A $H #H? 4xp`>3O` #`'p H |8`A&TaC!&1_| H˗/$/_ ,X`>(`> 4xa7߿%L0@ O@$X"`> g0_>g0_> W0B <0… :|1a˗? 4xP`|'p gРAg|,h BG߿%L0@/_| Hg0|!̗/_˗/|)T/_> *TPB *T`> 'p@$(`>'p ˗;8`> 4xaB 6+X`O@ DPB װaÆ 6lذaÁ640'p ̗/B"0 <0… 'p "L/B *TP!|)TPB *TPB)TPB ˗OB 'p "Lp!Ä H̗OB *T`|)TPB *TPB)TPB ˗OB 'p "Lp!C H̗/B *TP!|'p "Lp!ÆBl/bĈ˗/bĆ H*\P ,h „ ˧PB *40@ H*\ȰÇ拘`>'p "4/_ &LH`> 4xaB 'p "L`|-\p…8? 4xaB 6t"|1|E|,h „ O@ DPaB O@ DPaB <0… :|1|'0_>˗/_'`|$J`> 4xaB8`A&T |'p "LP | O@ DPB >`> /|/߿|'`|$JX`> 4xaB8`A&Tp!| O@ DP |O@ DPB >`> /_| ̗_|h0_|%J\0 <!,h „ 2L08`A 'p H*\ȰÇ#.'Qa|˗O`>O@$X| 4x? 4xaB 6D0 <0@$XA .dC!擨0_/߿|'0ă(QĆI(QD 8`A'p "Lp!ÆB(` #/|/_| ˗oĉ7qĉ'N0@ H*\Ç#J/E Ga|(RH`|)RH|(RH"E):̗"|0_|)RX0_>)RHa|)RH"EG"EH"łQH"EH"E)R0_>  |#H A ˗/,h „ 2!P` ˗/_Æ 6lx0_ 6lذaÆ װaÆ 6lذaÆ 2̗Oa|/_|'0|_|/_|˗o`|%̗/_ 6l`| 6lذaÆ ̗aÆ 6lذaÆ 6d_ ̗_|o`>˗_>/_˗_| ̗a|5lذaÆkذaC 5PC 5D@'p "Lp!ÆB(q"|%̗O`|/߿| 70߿| /_O`|'P ,h „ 20@ H*\`| 6lذaÆ ̗aÆ 6lذaÆ 6dO`>˗O`| 70|'0|/_/| 'p ,h „ 2$XA .dx0_ 6lذaÆ װaÆ 6lذaÆ 2G0_Æ 6̗/_kذaÆ װaÆ 6lذ!|6lذaÆ 6lذaC kذaÅ'0_| 6lذ|6lذaÆ 6$/_Æ 6lذaÆ 6l0|6la|˗aÆ 6 *TPB *TH0_> *TPB *TPB ̧_| *T`>8P`|8`A&T|6lذaÆ 6$/_Æ 6lذaÆ 6l0_|5lذ |'p |'p "Lp!Ã5lذaÆ 6lH0_ 6lذaÆ 6lؐa˗aÅ ? ̗/,h „ 2O`| ̗/B ̗OB *TPB *TPB)Tx`> 48? 480_|Q(R0_|)R(`>'p "L(0_|O` O`/| *T8`>'p "Lp!ÆB(q|)R|/_>)R08`A&0_(0|70? O@ Dx`>'p "Lp!ÆB(q|)R|/_>)R0 H/| /_>O` /_>*T |'p "Lp!ÆB(q|)R|/_>)R0@ H/| '0_| ̗/_>'0_|*T |'p "Lp!ÆB(q|)R|/_>)R$/_|)RH"|H"E)R0E˗"E ˗"E)Rl/_>)RH"EQHa|(RH`|)RH|)RH"EH|QH"E)RH_>)RH"EQHa|(RH"E)RH"E)RH1b>)>̗/E H*\ȰaA$XA8`A&Ta H*\ȰÇ1bă`#F0_|#1bĈ˗/bĈ#F1a#F$XA .dC E̗`|/_|˗O`>/|{/_ 1bĈ 1"|#F1a|"F1bĈ拘/|'0|/_'0_|/|EH0_Ĉ#FL/_ 1bĈ 1bĈ#F0_|/|/_|/߿|/|EH0_Ĉ#FL/_ 1bĈ 1bĈ#F0_|/|/0? H|4hРA'p "Lp!ÆС|:tС|9tСC:tX0C ̗O`/|/|O`|˗ϡC:`>9t0_|*̷0_|˗/Â|9tСC:tX0Â70|/_| ̗/_>|9t0CP`>˗ϡC'0_>'0_> ̗ϡCsСC:t`>:tX0_|*|/_˗߿_|/_>$XC!B G0|̇|˗/| O O@ <0… :|1a#F+a˗o`| '0|_|1̗/_Ĉ#F1b|#Fx0_|#!| /߿ ߿ /߿8`A˗!B;|+a˗/߿| '0|̗O`> <0… :|1a(? 4xaSP!| * |70߿|o'p ̗/B ˗/_|#`'p ?O`>o@ O@ <0… :|1a/_˗/bD":G0_|70߿|/|Et/_ 8߿8`|#|70 ̗`|O`>'0߿|#H`|8`A&TaC!&`| ̗/_> 7? ,/_> 4hP`> 4/|˗|߿ <8`> 4x!8|+|#`(߿߿| | HP`|8`A&TaC!& |O '߿|'@$X`| 4hРA8`A&TaÁ H 'p "Lp!ÆСC:ta|'P? ߿8`Aw;x 0o` /_<80:tСC sx0_˗O`>˗O`| a|:TϡC /߿8`A"̗/_„ ˗` &0@? 4xaSPB *TPB SP |o` _>$X|˗/bD` 3_>`|"F1bĈ1bă` +O`|`|"F$/bD _|Eh0_|#F1bĈ E1|EH0_Ĉ(_? 4x|%L0| &L(`>/?O@ DH0_| &L0a„ &L0a„%L0a„  ̗/_„  ̗0a„'`>8`A̗/_„  ̗0a„/? O@ DH0_| &L0a„ &L0a„%L0a„  ̗/_„  ̗0a„'0_|%L0|%L0| &L(0|˗O` &$/_ &L0a„ &L0aB&L0a„ ˗0a„%L0!| /_|&Lp`|&LP` &`˗/_„ ̗/_„ &L0a„ &L0| &L0a„K0a&L0a„ &$/_ &/a„ &L0aB <0… :|Qa#F,/_ 1bĈ 1"|#F1a|"F1bĈ1bD`#F0_|#1bĈ˗/bĈ#Fqa#F$/_ 1bĈ 1"|#F1a|"F1bĈ1bD`#F0_|#1bĈ˗/bĈ#Fa#F/_ 1bĈ 1"|#F1a|"F1bĈ1b`#F@'p "/a„ &L0aBK0a„ &L0a„ &,/a„ &LX0_| &LX0_„ &L0a„˗0a„%L0a„ &LH0_| &L0a„ &L0a„%L0a„ ˗/a„ K0a„ &L`|&LP` &L0a„ ˗/a„ &L0a„ &L` &L0|%L0| &L0a„ ̗/_„  ̗0a„ &L0!|%L0a„ &L0a„ "̗0a„ "P>8`A̗0a„ &L0!|%L0| &L0a„ ̗/_„ &L0a„ &L0!|&L0aB˗0a„8`A&Taà H'p "Lp!Æ8`A&TaC!FOD˗Oą H*\ȰaA$XA8`A&Ta H*\ȰÇ# 'QD'QD%J(QD (QD%J(Q|%FO@$XA .dC%NH1_+VXbŊX!|'p "Lp!ÆB(q"ŊUXbŊ+V/_ 'P ,h „ 2l!Ĉ'R(0_>-ZhѢE X`>8`A&TaC!F8bŁYhѢE-Zl/_>8? 4xaB 6tbD)V,/E-ZhѢE  'p "Lp!ÆB(q"Ŋ8 ,h „ 2l!Ĉ'R0@ H (? 4xaB 6tbD)V408`A&TaC!F8"A O@ H*\ȰÇ#JHbB <0… :|1ĉ'p 'p "Lp!ÆB(q"Ŋ 8? 4xaB 6tbD)6O@ 'p "Lp!ÆB(q"Ŋ8? 4xaB 6tbD)VxcF9v1_|>~Ǐ?~Ǐ˗Ǐ?~Ǐ?~1_?~Ǐ?~c|>~Ǐ?~Ǐ?~Ǐ?~Ǐ?~Ǐ?~Ǐ8`A 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ80,h A <0… :|1ĉH"E)RHC O@ D|'p "Lp!ÆB(qbC(RH"E)R0_|(R/_|)RH"E%E)RH"E˗"EG"E)RH?QH"E)RH`|(R0_|)RH"E'p ,h „ 2l!Ĉ'R\/_ŊWbŊ+VX?8`A&TaC!F8b|*V1_+VXbE (? 4xaB 6tbD)̗bŊXbŊ+VП8`A&TaC!F8b|+VH0_Ŋ+VXC$ <0… :|1ĉXbE*VXbŊ'p A$XA .dC%NX1a|Y_> YhѢE-O@8`A&TaC!F8| '0_Ut/_Ŋ+VXB$(? 4xaB 6tbD)W`>˗o`|˗O`| /| ̗/_E*VXbŊ'p A H*\ȰÇ#J81Ń '0|O`|_ '0_>H"E)R|П 'p "Lp!ÆB(q|+o`>O`_| G`|)RH"E8`A H*\ȰÇ#J81E70| '0|`> 4/,h „ 2l!Ĉ'p 8`A&TaC!F8Qb>/_| '0| ̗_'0| ˗"E)RH!@,8? 4xaB 6tbD'h0_|˗o`>/_|'0_|X0_|)RH"E8` H*\ȰÇ#J81EQ/_|(RH"E'p 8`A&TaC!F8b> H1_|(RH"E'p 'p "Lp!ÆB(q"|(RHQ |'p "Lp!ÆB(!@'p "Lp!ÆB(q"ńX"|XbŊ+VП H*\ȰÇ#JHqa|*V`>8`A&TaC!F?8`A&TaC!F8b|XbA <0… :|1Ĉ  <0… :|1ĉ'p ,h „ 'p`>$XA .dC%NП H*\ȰÇ#JHQ"|O@ D!| O@ DPB >QD  <0… :|1ĉ+O H 'p | H*\ȰÇ#Jx?8`A&TaC!F8bE H ,hP |,? 4xaB 6tbD'p ,h „ 2l!Ĉ'R`> 4xA$XA .dC%NП H*\ȰÇ#JHD$X@$XA .dC%Nh?8`A&TaC!F8bExŋ/^h?8`A&TaC!F8bExŋ/^h?8`A&TaC!F8bExŋ/^h?8`A&TaC!F8bExŋ/^h?8`A&TaC!F8bExŋ/^h?8`A&TaC!F8bE8p ,h „ 2l!Ĉ'RП H*\ȰÇ#JHŁ (? 4xaB 6tbD)BO@$XA .dC%NX@ <0… :|1ĉ#'p ,h „ 2l!Ĉ'Rh |'p "Lp!ÆB(q"ň  <0… :|1ĉ+Z$0@ H*\ȰÇ#JHQ"@'p "Lp!ÆB(q"Ŋ ˗/ŋ/^xŊ  <0… :|1ĉ+Z,/_/^xŋ8? 4xaB 6tbD)Vh0_/^xŋ8? 4xaB 6tbD)Vh0ŋ/^xŋ  <0… :|1ĉ+Z1ƍ;zП H*\ȰÇ#JHŋ3jȱnj  <0… :|1ĉ'p "Lp!Æ8`A&TaC!F?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) WbŊ WbŊ+V?8`A&TaC!F8|+V0_|+VXbŊ 8? 4xaB 6tbD) Wqa|W0_ŊWbŊ+V?8`A&TaC!F8|70|Ul/_+VXbE  <0… :|1ĉ櫘0_> ̗/_>˗o`|˗"|UXbŊ+2O@$XA .dC%N(0_ń /߿|˗O` /_ņXbŊ+VdП H*\ȰÇ#JHQ` '0|'0߿|Ul/_+VXbE  <0… :|1ĉ櫘0| `>O| H <0… :|1Ą  <0… :|1ĉ櫨0_/߿| /_>0_|+VXbŊ 8? 4xaB 6tbD) Wqa|̗/_>˗/| ̗"|UXbŊ+2O@$XA .dC%N(0_ŊUX0_|+VXbŊ 8? 4xaB 6tbD) W|*V,/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`(߿|'p "L/_| *TPB *TPB 'p ,h „ 2l!Ĉ'Rb|UH0_|+VXbŊ 8? 4xaB 6tbD) W1b>/_WbŊ+V?8`A&TaC!F8|#3_ Wqb|*VXbŊ'p ,h „ 2l!Ĉ'RbD /߿|? 4x!|%L0a„ &L0a„ &L0!@'p "Lp!ÆB(q"E*Fg0߿|(? 4x!|%L0a„ &L0a„ &L0!@'p "Lp!ÆB(q"E*Fg0߿||UXbŊ+2O@$XA .dC%N(0_ň O`|U/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`+VT/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`+VT/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`+VT/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`+VT/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ`+VT/_+VXbE  <0… :|1ĉXbEXbŊ+VdП H*\ȰÇ#JHQ |,h „ 2lx? 4xaB 6tbD 8? 4xaB 6tbD)O@ DPB 'p "Lp!ÆB(1!@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ'p@$XA .dC%N?8`A&TaC!F8bE8p ,h „ 2l!Ĉ'RП H*\ȰÇ#JHŁ ? 4xaB 6tbD)FO@$XA .dC%NX@ <0… :|1ĉ#'p ,h „ 2l!Ĉ'Rh |'p "Lp!ÆB(q"E  <0… :|1ĉ+Z$0@ H*\ȰÇ#JHQ"@'p "Lp!ÆB(q"Ŋ ˗ŋ/^xEO@ DPB >QD-̗/ŋ/^xE  <0… :|1ĉ+Z4ŋ/^xEO@ DPB >QD-^ĘQF=fO@$XA .T0 <0… O@ DP@$XA O@ DPB >QĄ  <0… 1dȐ!C cȐ!C <0ƒ 8? 4xaB 6tbD8? 4xaB cȐ!C *̗/C ˗/C 2d0_| 2dȐ!C 2dȐ!à  <0… 1dȐ!C ˗!C1dȐ!C ǐ!C 2dȐ!C 2,П H*\0C 2dPa|2d80_> 2dȐ| 2dȐ!C 2dȐ!C  <0… 1dȐ!C ˗!C1dȐ!C ǐ!C 2dȐ!C 2П H*\0C 2dPa|2d80C 2d`|2dȐ!C 2dȐ!C8? 4xaB cȐ!C *̗/C cȐ!C ̗/C 2dȐ!C 2dP @'p "Lp| 2dȐ!CcȐ| 2dȐ!ÃcȐ!C 2dȐ!C  O@$XA .T!C 2d0_| 2!C 2dx0_| 2dȐ!C 2dȐ!C  <0… 1dȐ!C ˗!C1dȐ!C ˗!C 2dȐ!C 2d(?8`A&TPa> 2dȐ|1dp`> 2dȐ|1dȐ!C 2dȐ!C 'p ,h „ *ǐ!C 2T/_> ǐ!C 2 2dȐ!C 2dȐ@O@ DPB2dȐ!C ǐ!Á2dȐ!Cǐ!C 2dȐ!C 2П H*\0C 2dPa|2d80C 2d`|2dȐ!C 2dȐ!C8? 4xaB cX0_|˗/|(? ϠA ˗ϠA ? 4xaB 6̗/_Æ 6lذaÆ 6lП H*\0C/_C`>1d0_| 2!C 2dx0_| 2dȐ!C 2dȐ!C  <0… 1$`|/| '0|/_˗_|˗a|1dp`> 2dȐ|1dȐ!C 2dȐ!C 'p ,h „ *ǐ`|3_>O`>'0|O` ǐ`|2,/a> +`> ̗/C 2dȐ!C 2dP @'p "Lp| ˗_>C0@_߿|߿|'߿| H|4h`|ϠA g| 4hР|'p "Lp!ÆB(q!@'p "Lp| +/|!70_>O`>O`>'P ,/_| 4X`>(0,h|˗/_>/_>Ca|'p "Lp!ÆB(q!@'p "Lp| G0߿|'0|O`>O`_|1$/_> 'p`O@ 4`'0߿|_|"4/_>$XA .dC%.O@$XA .T!A @ ߿/߿߿| _߿8` H  ̗/,h „ 2l!Ĉ'p ,h „ *ǐa| 2dȐ |,h ‚'p W0߿| ̗/@ ? 4xp`|8`A&TaC!F?8`A&TPa> 2dȐ|1dX`>/,h|'0|/|!D`|8`A&TaC!F?8`A&TPa> +_> 2,/_> 'P O@ 40@_߿O@ /_>$XA .dC%.O@$XA .T!CcȐ!ÂcȰ`|cȐ!C ̗/C 2dȐ!C 2dP @'p "Lp| "W0߿|/_/_2 K!C 2dx0_| 2dȐ!C 2dȐ!C  <0… 1d0_|/߿|O`|˗!ÃcȐ| 2dȐ!ÃcȐ!C 2dȐ!C  O@$XA .T!C o` '0|1d0_| 2!C 2dx0_| 2dȐ!C 2dȐ!C  <0… 1d0_| /|O`|2D/_> ǐ!C 2 2dȐ!C 2dȐ@O@ DPB2D`/| '0_| "̗/C cȐ!C ̗/C 2dȐ!C 2dP @'p "Lp| "O _߿8`A ˗!BC!B"D|'p "Lp!ÆB(q!@'p "Lp| 2d0C ǐ!Á2dȐ!Cǐ!C 2dȐ!C 2П H*\0C *̗!CcȐ| 2dȐ!ÃcȐ!C 2dȐ!C  O@$XA .T!C 2d0_| 2!C 2dx0_| 2dȐ!C 2dȐ!C  <0… 1dȐ!C ˗!C1dȐ!C ˗!C 2dȐ!C 2d(?8`A&TPa> 2dȐ|1dp`> 2dȐ|1dȐ!C 2dȐ!C 'p ,h „ *ǐ!C 2T/_> ǐ!C 2 2dȐ!C 2dȐ@O@ DPB2dȐ!C ǐ!Á2dȐ!Cǐ!C 2dȐ!C 2П H*\0C 2dPa|2d80C 2d`|2dȐ!C 2dȐ!C8? 4xaB cȐ!C *̗/C cȐ!C ̗/C 2dȐ!C 2dP @'p "Lp| 2dȐ!CcȐa|2dȐ!C(? 4xaB 6tbD 8? 4xaB cȐ!C *̗/C ˗/C 2dx`>'p "Lp!ÆB(!@'p "LpB$XA .d ,h ƒ H ,h „ 'p 8`A&TaC!F?8`A&T!|,h „ 2lX? 4xaB$XA .dh? 4xaB 6tbD8? 4xaB 'p "Lp!Æ8`A&40 <0…8`A&TaC!F8Q @'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ wŋ/^x"@'p "Lp!ÆB(q"Ŋ'p A$XA .dC%N?8`A&TaC!F8bE8p ,h „ 2l!Ĉ'RП H*\ȰÇ#JHŁ (? 4xaB 6tbD)BO@$XA .dC%NX@ <0… :|1ĉ#'p ,h „ 2l!Ĉ'Rh |'p "Lp!ÆB(q"ň  <0… :|1ĉ+Z$0@ H*\ȰÇ#JHQ"@'p "Lp!ÆB(q"Ŋ ˗/ŋ/^xŊ  <0… :|1ĉ+Z,/_/^xŋ8? 4xaB 6tbD)Vh0ŋ/^xŋ  <0… :|1ĉ+Z4ŋ/^xEO@ DPB >QD8`A&Ta H*\ȰÇ#JTП H*\ȰÇ#JHq`+VTbŊ+VX!@'p "Lp!ÆB(q"Ł*VXQa|+VXbŊ 8? 4xaB 6tbD)WbŊ XbŊ+VdП H*\ȰÇ#JHq`+VT/_Ŋ+VX"CO@ DPB >QDUX|*VXbŊ'p ,h „ 2l!Ĉ'RbŊWbŊ+V?8`A&TaC!F8|+V0_+VXbE  <0… :|1ĉXbEUXbŊ+2O@$XA .dC%N80_Ŋ+*̗bŊ+VX!@'p "Lp!ÆB(q"Ł*VXQa|+VXbŊ 8? 4xaB 6tbD)WbŊ XbŊ+VdП H*\ȰÇ#JHq`+VT/_Ŋ+VX"CO@ DPB >QDUX|*VXbŊ'p ,h „ 2l!Ĉ7`'N/ĉ'N8qĄ  <0… :|1ć7`'N/ĉ'N8qĄ  <0… :|1ć   <0… ̗ϡC:tСC'p ,h „ 2l!Ĉ'p@$X`> O@$X C|8`A&TaC!F?8`A&TaC!F?'p 4h`> $Ϡ|4h|8`A&TaC!F?8`A&TaC!F? O@3hР|_|˗O`>˗_|˗/|gРA'p "Lp!ÆB(1!@'p "Lp!ÆB(!@ +X`A /߿|/| '0| ̗_|˗O` ̗? 4xaB 6tbD 8? 4xaB 6tbD8`A$(0_ O '߿|'P`>/_>_| 8pO@ DPB >QbB$XA .dC%N$H A̗|@O`| 70߿|(? $/,h „ 2l!Ĉ'p "Lp!ÆB(q"E (0A $|˗O` /|70|_|$H|8`A&TaC!F? 4xaB 6tbD) O$H A_G߿|O@  <0… :|1Ą H*\ȰÇ#JH  <0… ̗ϡC:tСC'p "Lp!ÆB(qD$? 4xaB 6/C:tСC2O@ DPB >QD H_>$XA .dp`|:tСC:tСC:tСC"O@8| H*\Ȱ|:tСC:tСC:tСC:DП'p 8`A&TaÁ9tСC:tСC:tСC:t? 'p 'p "Lp!ÆsСC:tСC:tСC:t!@ O@ O@ DPB СC:tСC:tСC:t!BO@ O@ DPB СC:tСC:tСC:t!Bs0C:t0_>:tСC:tСC:tСCpa>:tPa|:tСC:tСC:tСC"a>:tPa|:tСC:tСC:tСC:tx0C:t0_>:tСC:tСC:tСC:<ϡC:T/C:tСC:tСC:tСCСC*(_>$XA .dC%NXE5n#G ȑ#G9rȑ#Gȑ|8rȑ#G9rȑ#ǃ8r0_>9rȑ#G9r`>9*̗#G9rȑ#G9r<#G ȑ#G9rȑ#G'p "Lp!Æ8`A&TaC!F8bE1fԸ"|,h „ 2lH? 4xaB 6tbD)VxcF/'p "Lp!Æ8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_2 ;;PKU-)PK+AOEBPS/img/lobclose.gifbGIF87aF?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,F H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nؑb|y,/_|=zѣG=zѣGy\/G=zѣG=z_>yѣG=zѣG!̗c|=zѣG=z#| h0G=zѣG=z1A'0_|/_>#? 4xaB 6tbD)VxcF9vd`|˗_|_'0߿|o`>=zѣG=zQc>70| ̗_>/|yѣG=zѣGg0|;O`/|OO@ Dh? 4xaB 6tbD)VxcF-70_|˗O`70߿|/_>0G9rȑ#G9rh0_|8P  '`>/߿| ߿| HO@ DPB >QD-^ĘQ#B$X A$(0_ ,X` W` ,H0,h „ 2l!Ĉ'Rh"ƌ滘a'p ,h`$XA .dC%NXE5w1|mo|7nܸqƍ7nܸ`Co#|'۸qƍ7nܸqƍ!̗O |'P`7p|8`A̗/a„   <0… :|1ĉ+Z1ƃG0| -̗/_˷b7nܸqƍ7nx0| ̇0|8`A 'p "Lx0,h „ 2l!Ĉ'Rh"ƌ `| ̇0|mܸQb7nܸqƍ7nh0_70|̷qF6nܸqƍ7nܸQ#|O _>0 'p "Lp!Æ8`A$XA .dC%NXEw0_> '0|̧QƊ˧QF5jԨQF!/| ̇0|iԨb>4jԨQF5jԨQb>.cOFA̧QF5jԨQF-w1| 80,`> 4xaB H_  <0… :|1ĉ+Z1| ]0_|kOƁ%1F5jԨQF5B̷0| ̗Oa4j4a4jԨQF5jԨb.c`+O#|w0|iԨQF5jԨQ#| ]0| !g0|w0|iԨQF5jԨQ#| 8`A8| +/_ WP`|˗O`|˗`˗O`|˗/߿|_|+/_O@ DPB >QD-^Ęq`>0|̗_|˗O`|̗_>/_/_|/_>+Ob>5jԨQF5jO#|=G0߿| ̗o`|3_>'0| /_|70|5jԨQF5j1ƌ`>'p|_|GP`˗/߿|O7p   <0… :|1ĉ+Z1|5 0_|/__> 70߿|/_>˗O`>.ӨQF5jԨQF4j``>˗O`|;O | ? 4xaB 6tbD)VxcƁ4ja>Өqa>4jԨQF5jԨb>k`|8? 4x`>O@ DPB >QD-^Ęq`>ka>˘OF5jԨQF!Ө`Өa4jԨQF5ZO@ DPaA$(0_ ,X`+H0_,X` ,XP`| ,X_'p O@$XA8? O@8`A&TaC =|a>>|0|{a|c|=|0|s/_|>|Ç=|a>>|`>'p 8`A&T !|"!B"D!B"̇!B"!| H*\ȰÇ#60ą (`>SO|%J(Q|(_7P'p`|˗o`8p| H*\ȰÇ#>̷0|70_| 3a|+/_>0@?#H`>#H A8`A&TaCW0|70|o`>[Ç>|Ç-w0| '0_ ;o`>O`> ̇0|`>|a|/|G0| /a>|Ç>|80| W0߿|+`>o`O`>`>3/_>˗/_|>|Á;`|̗0_|/_|=|Ç>|a|O#/߿|` Gp`/_|$`$(0|O`|˗_|#? 4xaB 6d/A O ? 'P o /_| H*\ȰÇ#J/_>70_|(? /o` ̗/_> ߿(0_o| /8p`'p "Lp!Æ Hp GP`#/| G_0 <0… :|1ĉ8_/|'p@7_>(0@8P | O@8P ˗/_#H| O@ DPB ``70߿|/_|9tСC:tСÁ;`70_|w0|70_|a>s` _˗`>:tСC w`>/?#@7`> O@ DPB >Q|̗/_>'0_| O`70_|˗/|0@߿`> ̗/|GP`8`A&TaC:tP`>:tСC:t0CС|9w0C:tСC 9tС|:tСC:tPa>3ϡCka>9tСCsСC:tСC:tС|g0C0_| sСC6СC9tСC:tСC:`>COaСC:tϡCsСC:tСC 9t/|:̗0__>r!r'p "Lp` .\p… .\p…-\x0| .Lo!|O@˗/ <0… :L0 <0‚ H*\ȰÇ#J(`> 4xp 'p "D <| O@ DPB >QD-^ĘQF=~RH%MDFRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VX;;PK&gbPK+AOEBPS/img/fetcha.gif^.GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ<8`A8`A&TaC!F8bE1fԸcGˇ1_|?~Ǐ?~|Ǐ?~Ǐ7Q`?~Ǐ?~Qc>uǏ?~Ǐ?b0|?~Ǐ?~#|/_/_>/_|?~Ǐ?~|˗_/߿|_Ǐ?~Ǐ?Zg0_|'p࿁ o`> <0… :|1ĉ+Z1ƍ;N̗/|0#H0O@ D(? 4xaB 6tbD)VxcF9"̗O`>`>/߿O O@ D(0_>$XA .dC%NXE5nX0|˗_|˗/|/_qa;vرcǎ;vq`.s#|;vرcǎ;v`> 4x | $/_| W` ,(0,h „ 2l!Ĉ'Rh"ƌH0|mDo#|7nܸqƍ7nܸqa-̇0ƃ6F̷qƍ7nܸqƍH0| H0F6nܸqƍ7nܸq|˗o`|˗/| -̗oc|'۸qƍ7nܸqƍ ̗`>˗O`|-`> 4h? 4xa8`A&TaC!F8bE1fԈ0|#` ̗`۸q|7nܸqƍ7nܸ1a G0|`> ۸q|7nܸqƍ7nܸQa|(_80G_>'p "Lp!C6lذaÆ 6lذaÆ 6lذaÆ 6l(`> 'p`|/߿|7p | <0… 'p 8`A&TaC!F8bE1fd` W0|/|̧QFӨQF5jԨQƋ`|'0_ `>5*1F5jԨQF5V̗Oa>-0_|&'p ",+X| H*\ȰÇ#JHŋ3̷0ƂS/|˧a| ȨQF5jԨQF-̧`C/|'K/b>5jԨQF5joa>-̇0| ia4j(`> 48? 4xaB 6tbD)J̷0_E3a*2̗a"X|*̗bŊ+VXbE'p O@W |+X` ,X_,XP`>$XA .T/CcȐ!C 2dȐ!C 2da> 2D` ;`|/_O`> ̗/_>3`>1dȐ!C1d0C 2dȐ!C 2dȐ!C1dȐa|1`> /߿|/_`>O` #| 2dȐ| &ǐ!C 2dȐ!C 2dȐ| 2d0_> W0_>˗_|_ ̗O`>˗ | gРA 4hРA4hРA8`A&TaC!F8"|+J̗/C/_ ̗/|O7P 7p? 4xaB ;/߿|/߿|˗O`|1dȐ!C 2dȐ!C 2dX0C 2|W0|/߿| ̗`>o`> c0C 2d/|/_|/|;!C 2dȐ!C 2dȐ!Â2dȐ|G0|˗_|/_|308p'p "Lp| ̗_|˗O`>w0C 2dȐ!C 2dȐ!C1dȐ!C w0C2$!| 2dPa|70_'0_|˗/A$XA O@ DPB >`>%&0|'`>8` 4h_> 4hРA 70|/_|/|3/A 4hРA'p "Lp!ÆBh0Dc/a>x0D#`|˗_|˗_|w0D(QD H*,O@ DPa| -̷p…-\H0 H'p A +X` O@ DPa| .\pB.\p| [p… !̷P` .̗o‚˷pBg0… [p… -\p… [p…-o… .̗/|-$/_| .$/_ [/… [a [p… -\p… [p…-o… ./… H'p ̇`>"D/C|"D!BC!B"D`'0|˗o`| ˗o`|C80B8`A&TaC!FLa/_|'P߿| /A$/_> $H`>$XA .!C 2d`| /_˗`>/߿|c!C 2dȐ!C ̷0|g0_>˗/_>̷0|1T/_> 2d0C 2d0| '0_> 70_/| 1dȐ!C 2dȐ!C3/| /_/| 10  <0…1dȐ!C g0_> ̗`|`|-G0_| 2dȐ!C 2dPa3/| /_> ̗`cȐ!C 2da> 2dP`|(߿(@/_|˗ 70_>$XA .dC;_> H߿ ?8_>  <0… :/a>0'p`|'0_o` _|0 <0… :|1ĉ /|̗_|'0_'p H*\ȰÁ Hp ,h „ ̗`| /_70_>/߿|+!C 2dȐ!C 2d_> ̗`| ̗/_>G0| 2dȐ!C )ǐ!C  |_o ˗/|0@ (0| H*\ȰÇ#JLO`> O  Gp`>$XA .d| =||>lÇ>|Ç{pa>|Ç=|Ä>|0Ç>|Ç"| -O| H?$XA "O@'p "Lp!C6l` 6lذaÆ 6l`  ̷0_| 0_ 6T/| 6lذ| 6lh0_Æ 6lذaÆ 6lh0_Æ [a>kذaÆ%װaÆ װaÆ5lذaÆ 6lذaÆ5lP`c/a 6l80|6lذaC6l` 6lذaÆ 6l`  0_|ˇ0_Æ G0_)g0_Æ 6lx`> 4xaB8`A&TaC!F`> 4xA$(0_| WP` ,X`70_? 4xaB 6tbD)VxcF#`>`|_|/_>'0| ̗O`|˗/߿|˗`>8rȑ#G9rȑ|9G0| /_O`/_|˗_˗/߿|/_|w0|9rȑ#G9rȑ|s`|̗_|70|+/߿|/߿|/_ O ˗/,h „ 2l!Ĉ'Rh"ƌ7N`>'p`/_>O`| /|˗|o ? 4xaB 6tbD)VxcF-s`> _|/| /_> '0߿|'0߿|'P8_>$XA .dC%NXE5n`>`|'P࿁O '0_|`>O࿁ /,h „ 2l!Ĉ'Rh"ƌ7Z0|9:Ǒ#G9rȑ#G9&̗a|q0@ H'p "Lp!ÆB(q"Ŋ/b̨q#| %Ǒ#|9rȑ#G9rȑ#| -Ǒ|9rȑ#G9rȑ| 0_> Ǒ#G9rȑ#G9FO| H?$XA "O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-_,`> 4xaB H*\ȰÇ#JHŋ3jȱ#|#ѣG=zѣG71G=zѣG=z1Lj ̗0G=zѣG=z1|˗`>'0|˗0G=zѣG=z1|`|/|ѣG=zѣG7k/|'0|/_|=zѣG=z| ̗/߿|#0'@? 4xaB 6tbD)VxcF9vL/_|̗/_˗O`|˗_| ˗ϣG=zѣG=zo`˗/|'0߿|/_|yѣG=zѣĠ0_|'P /߿  <0… :|1ĉ+Z1ƍ;W0Lj ѣG=zѣG+c|yѣG=zѣG1b=zѣG=za>$XA .dC%NXE5nH1|; ױcǎ;vرcǎ;Vg0_ǎuرcǎ;vرcǎ8 A$XA O@8`A&TaC!F8bE1fԸqc|Ǒ#|ȑ#G9rȑ#GC`> 惘#G9rȑ#G9rDb> 拘#G9rȑ#B$XA H*\ȰCg`> 4xA$/_O@ DPB >QD-w`/^|b>.J̷0_|/^xŋ/^<|/^0_|]oa.^xŋ/^x0|̗/| ]x|w0_|̗/|Koa.O| H?$XA . <0… :|`O`|K/bĈ#F$/|̗`> ̗_|/_| EQa|5̗/bĈE1bĈ#g0_>/_|#F1"|+`|/_'0_拘/b| -1bĈE1bĈ!`|̗/_"F1bD" G0|#/_|˗_| )_1̗0|1"|#F1bćC/_/_>? 4xaB 6t/Â3/|˗`˗/aPa;/C>LÇ>|P!|O|7_ 8`>'p "Lp!Æ 9 'p 4h`>g_>/_|/|˗_|'0_>/_ ߿ ? 4xaB 6t`| g0_>/߿|3/_>!B_>̗`/_|˗/a> ADa+O`|/| ̗/߿|0@'?_|/_|o| H*\ȰÇ/|/_|(? 80,h „ 2lX0C 'Po|7p O@ !BG0| ̗/_70|˗/? o`>̗_|˗_˗_|O@ DPB >$`> :̧0D!B|"|!&a>9O@ O |7_ G|O|`>'@ 0 O@ DPB [ϡCsСCs0C 9t/Ã0_|'0_|'0߿|/_|'P O|˗O`|/߿| o/_>$XA .d0a:oa>:tPa> 9t0C94o` #O`>/_'`> _ O|'p o 8p  <0… "̷0C-СC*Pa>s_>0|9t/_>Pa>&O@ <+X_ ,X0_,(`> 4xaB 'p  ,X` ,X` ,X | ` +(0_ $/_(? 4h0 ;xw, |<(0Aw!!B"Da>̇!B ̇!B!$!B"4!|"D!B!!B"D!BC0B!/B"D|"$!B"`>'p8P`>O@ DPa>̗/_>'0_|'0_|/_|(߿?#Hp`>$XA .d`>%̗`|9t!|СC /_> ̗O`>̷0C[`|˗`>/_|˗/߿|/|/| [ϡC:lϡ| 80,`> 4xaB 'p  ̇!B g0_/|#`>!D!B!`|G0_> ̗/|/|/|/|C!B"D!̇!B"D!B"DH0B"D_>˗/߿|/| #!B"D0|̗o`| 70_> /_ ̗O`|̗/_>#`>"D!B"DX0|"D!B"D!BO$H A ̗|/_|`|#/߿|'p "L`|g0_ ߿@(߿߿'p|/,h „ 2l0_|СC:t`>6O@80_˗/|/8`A&T!A̗o`|70_|˗O`|˗o|/߿|7p |,h „ 2l!B$XA .dC Hp ,h |̗_|/|G0B"D!3/|#/| ̗/_>/_> 70߿|g0|"D!B"D|!D!B"D!ḂP`>"$O`>˗O`|/_>C!B"D/|(@ ߿o? /| ̗o`  <0… :L`>|C{Pa{Ç=|a|>|Ç5̗A$XA O@ ˗Ϡ| 4hРA4h 4hРA 4hР| 4hРA ? 4xaB 6t`>/_b|=̗o`| AQ`>"D B`>!B| !0D!0_!"D B"D!"Ă B"D!̧0| B`>;"DA/D!B"DA"D3`|%w0A0_|#`>! |!B1D!"D!B|`> Ca|`>+0O@ D |,hA$XA .d(`> 4xaB 'p "Lp!ÆW0|g0_|˗O`|/|˗O`|G0_|`>7? / o| H*\ȰÇ#JHŋ3jt`>`>/߿|/_/_|/_>/_/_|g0|5W0ƍ7nܸqƍ7n|o`>`>/_|/߿|/_| ̗/|'0_|/߿|W0_|5̗O`|7nܸqƍ7nܸ1b|9O@ O |G߿G_/?O@˗/,h „ 2l!Ĉ'Rh"ƌ-s`| ̗/| ̗O`|˗/߿|O`|/_|/߿|`k/ƍ7nܸqƍ7nĘa>;/_>/_|(oo@@7_>8_>$XA .dC%NXE5f0|˷b۸qƍ7nܸqƍ5̇0m`6nܸqƍ7nܸq| %̷qc| 1̷qƍ7nܸqƍ7SOa!Soa7nܸqƍ7nܸQ`>˷qc| %̷qƍ7nܸqƍ7̗`|۸a|˗`|7nܸqƍ7nܸq|0 <0ƒ H`|O@ BDPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=};;PKT|c.^.PK+AOEBPS/img/objder.gif.cGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӔ H'p "Lp!ÆB`> 4x0,h „ 2l!Ĉ'Rhqb|!wŋ/2̗|.^xŋ/^1E.^xE.*wŋ/^xE/Ņ.^xEw`/^xŋ/6w0_|..wŋ/0|/^xŋ/^\ | O/_> @ <0… :|a>/߿| ̗/| ̗`#F1bĈ#F1b| ̗/_̗_/_/߿|E1bĈ#"W0_|/߿|'0_/|#F1bĈ#F1bĄ /_|+/߿|/_˗/߿| 1bĈ#F<`|O| /,h „ 2l!Ĉ'Rha| ̗/_̗_|/_'p`>O@ D8? 4xaB 6d/|0#H0O@ D(? 4xaB 6tbD)2̗_>˗/߿| /_|˗_`WbŊ`|O$H A /,h „ 2l!Ĉ'RL`>/_>O'@ <` &L0a„ `|˗_/_|/_&Lp`>$XA .dC%Nx0_|+W|+V0_|s"|+VXbŊ 8`A8|+X |'p  ;x;x 'p O@`˗`A ,X`O@ DPB >Q| c`8`書0|MoĂ&N8qĉ'7`>8`8Qa 1w0D&N,oĉ'N8q| ca|'̗oD&NTo| !̗o"|&N4oĉ'N8q|0@ o 8_>$XA%L0a&L0|˗O`|˗/| K/_„ K0a„%L0a„ &L0a„ &L`>̗`%0 

 4x0,h „)TPB *TPB *<a|;O| *TPB SPB 70|/|!̧PB *Tx0B *TPB *TP‚;/_|;`*TPB &̧PB g0_˗/|w0B *TP| *TPB *TPB w0߿|w0_|)TPB *LOB |8_>? 4xaB &װaÆ 6lذaÆ 8 ˗/_0 'p "Lp!Æ8`| H H?o|/ H ,h „ 2L0 O@ DPB >1|̗O`G0|#Fa"̗` G0|/|1bĈ{/bĈ#Fa3`>0_Ĉ#Ftb'0| ˗O`|70|#FQ`>"F1bĈ[/| 1̗/_ā HO@,X_| ` ,X`| W|,X |,h  Hp`  <0… :|qa"0_| ̗/|"F/_>"/|c/a|1_ ˗Oa"F1bĈ[/| !̗0|"FX0_|E0_ĆCa| Qa"1bĈ#F\oa1w0| Ea>"拘a 1w0| E0|E1bĈ#.̷0_D3a a|/_|E1|c`>1_O@O@ DPB >0| c`+/_|70_> 拘/b>"60| !1"|E1bĈ#F0B$X A$80_|+/_A ˗/_>/| _|70_|˗_|W_ ,80_+XP |,h A$80_|+/_A ̗/߿|/_| W_|˗_| W0_O@ DPB >0_Ĉ0|̗_'0߿| /_/_|/߿|_> /_|#F4`>`|/_/| /_`"1bĈ#F0_Ĉa>3/߿| ̗/| /|/_>˗|@7p7pO@ DP|[80_>C/_|/|̗o`|˗_| ̗o!| .\p… .\` .̗_|˗|7808p`(0,h „ ;`>30? /_|8@7p? 4xaB 6t|#F$a"F0_ă"1"| ` E"Fl/b|#Fx`> 4xaB8| ,X`  | ̗` ,X`,X`A ,(0,h „ C/.\_ [p… [p…-o… ̗/|-$/… ̗/…-4o… .̗/|̗/… ˗oB.\p„.\p| [p…˷0!|,h „8`AC_>"D!‚C |,h  H!D!B"`| '0|/_#/_̇p`>$XA .dC拘OD%J(Q|%J(0| _|/| '0_-̷0D%J(QD (QD%J/D% g0_> ̗o`| ̗`>˷0|%J(QD {/D%J(Q$J1|3/|ˇ0_˗/|'QD%J(a (QD%J80|%JL_> ? ?˗_>G| <0… :|1|#OD%J(Qb|I`> O|̗O`|o`/߿|(`> 4xaB 6tbD)VxcF8`A&Tx0_>'0߿|/|O`|[` .\p… .\p„.\p… .\p… [p…g`> /߿@70_|'P  G0,h „ 2l!Ĉ8qĉ'N0ĉ oĉ 7qĉ'N8a'N8qĉ M8a'7qĉ'N8qĉ'N8qĉ'J7q&N8qĉ'N8qĉ'N8qD&N/ĉ'N8qĉ'N8qĉ'N(1ĉ8qĉ'N8qĉ'N8qĉ%8q|'N8qĉ'N8qĉ'N8qD$XA O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-_ƜYfΝ=ZhҥMFZj֭]oO@ DPB8`AO@$X|,hA$H0_ O| H*\ȰÇ#JHE.^0B ˗/|3h0A `|˗/A˗|O@ DPB >QD-JwECa| Sb| ̗a]xŋ/^xb/2̇0| ]$b|Soa/^xŋ/^\a|˗`70_|(߿o`o`OG | G G`>7`>7?#H0A$(0A/| H*\ȰÇ#JHE/߿|#/_˗O`|_|/_|c`| !0_|̗/_> ̗o`>w0_|)̗/a/^xŋ/:g0|`|70|70_|/_|c` ;`|/_>30@'߿|? /7p|˗/߿|o| H*\ȰÇ#JHE3`| G0_|3/|˗`|˗`| '0| W0_>/| g`> OO /|(0| O`˗/_ ? 4xaB 6tbD)Vh0߿|O|GP? / O(@ 80|$HP`>G_|/_|#/߿|˗/߿| ̗O`>|$80|O`|˗/_>? 4xaB 6tbD)V0'p`˗O`|7_| ̗o|˗o|˗/ 8p | O@8P `>'p |O|/_> 7_8P ,080|/_|'p@$XA .dC%NXb|_|'0_| ̗O`|_|/_|c`|̗`| /_> `| ̗O`| g0_|+/|˗_|W0ŋ/^xŋ a|'P ߿߿( O ` W_>+/|˗| W_| ̗O`|WP`>+/_A| ̗/߿| #? 4xaB 6tbD)V0ŋ3a*;b|9g0| xŋ/^xb|/^d`>櫘` 0|+ŋ/^xŋ ]xaKob>.&w0_|Uwŋ/^xE.^0| )1_|Coa>&xŋ/^x|/^d/a0|K/a>"xŋ/^x"|/^dOa>90_.&̧0_> <0… :|1ĉ+Z0 <0… 'p  ? 0'p H8? O@8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_%J(QD%J\Oą$J(QD(Q|%J(QD%J0D I(QD%:'QD$J(QD%J(qa>(QD%Jt`/_| ̗/|'P70 <0… :|1ĉ#;o`o`>7`>80,h „ 2l!Ĉ̗/_>˗O`˗_|#/|/| (QD%J(Qą '0_>/_ '0_> ̗`>%J(Qą30@߿߿O|'p`>$XA .dC%N0|/_/߿|/|w0_Ŋ+VX1a 'P?o@̗/_7_| 7p| H*\ȰÇ#JHa ˗_|̗_ o`'p "Lp!ÆBH0_>/_|0@ _|o?'p "Lp!ÆB(q"E̗_|#/߿|˗/߿|/|XbŊ+ O@ /_|/_ ߿| ?_ H? 4xaB 6tbD''p A̗_|/|˗O`|˗O`|O@ H*\ȰÇ;_>'0_ /_/_>'0|/| E1bĈ#F1|g0_> 70|/_>'0_1bĈ#F`> ˗/|'P? /߿O'߿80O@ DPB >Qć`|/_ ̗_>/| QH"E-G"| QH"E)R80_>(R)RHa(Roa>)RH"E["ŃH"Ec"EH"E)RHq`(R)RHa>(Roa>G`> 4h? 4xa‚ H*\h? W| ,X`+XP`>$XA .dC"| A̗`|qa| B|"D coa>c"D!B`> H*<+X`+XP` ,Xp` ,X`'p "Lp!| -O@ D ? 4xaB 6ta>!BX0| )|!6"D1"DA"D!"D ca70_!W0D ̗/_>/_| /_|˗/|'P࿁8p`> O@ DPB2dȐ!C 2d!C 2d(0| ;Oa| W0C 3/|/|'0_|/|#/߿|[!C 2!C 2dȐ!Å2dȐ!C-w0|̗/߿|a|˗/_| 2<`|/_> ̗O`| ̗/_G0_1̷0C 2d(0C 2dȐ!Cǐ!C 2$a G0| /_̗?˗_7P`>$XA g0_˗/|/_|˗o`70_%`&L0a„ K0a„ &L0a„ ̗/a„ &L0a|˗`+O`|˗/_/_|+/a„ |O'߿'߿ O`| H*\0C 2dȐ!à H*\ȰÄ H | O|˗_| /_|'0_8p ,h |O|/߿|70_>7_|˗/_˗o8`A&TaC H*\Ȱ!|9tСC a+O`˗/_/_|+/a|;_>70߿|G0|#/|o`|c`>:tPa>:t|9tСC `>`|˗_|˗_|g0| ;O`>̗/|#/_|#0@_(?#? 4xaB 6,ϡC:t/C:t|_|[a| 9tС|:tСC:tСC:tСC ka> ? Ϡ ,Ϡ| 4hРA $? 4xaB 6dϡC:lϡC:t`>s0a0C:СC:,ϡC:dϡC:t`>s`>0C:СC:,ϡC:dϡC:t`>1a|s80|:t0C:t`>:ta>:tСC/_>˗|s(0ÁsСC:tСC9tСC 9tСC.̗!B$X A$X`> 3h`> 4xaB 'p "Lp!Æ 9tСC 9tСC:tСCСC:tСC sСCsСC:tСC 9ϡC:tСCСC2СC:tСCs/_>:tСC:tX0_>:tp`>:tСC:ta|СC:tСCCϡC&G0C:tСC:t/|sСC:tСC ;ϡC'p "Lp!ÆB(q"Ŋ/b̨q#Nj H*\0C 2dȐ!C 2dȐ!Â2dȐ!C 2dȐ!C ǐ!C ǐ!C 2dȐ!C 2dȰ`> 2dȐ!C 2dȐ!C'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> ;;PKW Xn..PK+AOEBPS/img/execa.giftGGIF87aX ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X  H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװcO@ O@ DPB >QD-^ĘQF=~Ra|)RH"E)RH"E/|D)RH"E)RH"+OH"E)RH"E)rb>u'RH"E)RH"E)1_|)RH"E)RH"EḞ0_|/_/_>'RH"E)RH"E1_|_|˗O`|/_D)RH"E)RH"3/_|˗_|/_|̗/ <0… :|1ĉ+Z1ƍ;zc|̗/_`>8p O@ DH? 4xaB 6tbD)VxcF9vb|̗/_/|˗O``> A $H A $H +/_|O`|˗/߿|˗`> $H A $H8`A 'p AW`,H0_ ,X| H*\ȰÇ#JHŋ3jȱG0Dž>~Ǐ?~Ǐy0| 0Ǐ?~Ǐ?~Q`>C|Ǐ?~Ǐ?w0_|˗o`|0_|<0Ǐ?~Ǐ?~_>'0_ ̗`>˗b|}Ǐ?~Ǐ?~/|#_|3a> HA H <0… :|1ĉ+Z1ƍ;r'0|#/_|G0|=rѣG=zѣG=zt_> ߿OGP`>$XA .d0,h „ 2l!Ĉ'Rh"ƌ7rx`>'p`| _|8`> O@ DPB 8 A$XA .dC%NXE5na|g0_>/| +`>9k/G=zѣG=zH1|̗`|70|#|yѣG=zѣG-1|=r1G=zѣG=z1|1̧`>'p 8`A"O@,X_>$XA .dC%NXE5nQ` ѣG=zѣG!cc>˗0_ ka>s`>_b;vرcǎ;vرc˗/C/߿|'0߿|'0_>/_>˗ A  <0… :|1ĉ+Z1ƍ;ؑ` w0_|/߿| ̗!|@ o80,h „ 2l!Ĉ'Rh"ƌ7r옯cG#_>/߿| '0_˗_>;c;vرcǎ;vرc 3`>3/_|0 O H@ A  <0… :|1ĉ+Z1ƍ;ر`泘c:vرcǎ;vرcǎ:v,a>(7`>8` 4h_>$XA .dC%NXE5n1_ǎ-̧0_lj4رcǎ;vرcG H*,O@ DP| -o… [` H*O@8`A&4 <0… :|1ĉ+gѢ| Yh1|Y/Eh1aYx0_>-ZhѢEha,Z`>'p 8`A"O@ |"Da|C!BO@ DPB >QDU1|+VXbEXqa*V|bŊ+VXbE˗/߿| ̗/_+/_>oa*VXbŊ-w0_|O`| ̗/|8߿80'p "L80_ O@ DPB >QD̗`>W0_'0|/| UXbŊ![`| /_˗/_> ̗O`| ̷0|[/_|+VXbŊ+Jg0_ ̗`| ̗`>˷0|+VXbE3/|G0_/|˗0|/߿|˗_|'PO ̗/_>'p "Lp!ÆB(q"Ň3/_|G0_> G0_|#`|+VXbE/| '0_>̗O`|/_| W0|˗_/߿|˗/|/߿| ˗O`|WbŊ+VX|O7P? 80_|̗/_>#/߿|8`A&TaC!F/| 'P7P?'? o@7P` ̗o`|/_|˗_˗_|˗//@  <0… :|1ĉ8@̗o|7_| 70_|/'p "Lp!ÆB(Q"7p`|/_/|7p@/_0'A'p`|7P | O@ DPB >QD g0_>/_|/| ̗_| WbŊ+V0߿|+O`'0_'0_>%W0߿| /_|˗/|_| ̗/߿|3/_>W0_Ŋ+VXbŊ g`>|@70_|'P  70,h „ 2l!Ĉ |_oO'p` 7P`| OO|7P?'p`|7p`'p "Lp!ÆB(q"ņ*VbŊ+VXqb;bʼn*VXbŊ+VbE*VXbŊ'Xqa>*V0@ H_>$XA .dC%N81_ŊUXbŊ+NW|U1_Ŋ+VXbŊU1_Ŋ+VX|+.̗0_ŊUXbŊ+VH1_ŊUXbŊ+NW| Xqa|+VXbŊ+VW"|+VXbŊU0|UX0_|+VXbŊ+V0 <0‚ H*\ȰÇ#J0 <0B$X`> 4xaB H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^͚ |,h „8`A&TaC!F8bE1fԸcGA^a!C 2dȐ!C 2dȋB:2dȐ!C 2dȐ!C y1_HB 2dȐ!C 2dȐ!/C/_ ˗o`|70_|!C 2dȐ!C 2dȐ70߿|/߿|/| 2dȐ!C 2dȐ!C`> G0߿|/| 2dȐ!C 2dȐ!Ca|̗/_>˗/߿| 2dȐ!C 2dȐ!C "'p`>/|'p` '?O@ DPB >QD-^ĘQF=~I1_| #/_|/_> O ̗/_>$XA .dC%NXE5nG w0|#o` ̗/|Ko`!C 2dȐ!C 2dHC/_|(߿ ߿'p`'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?d`2dȐ!C 2dȐ!C 0_|!+/dȐ!C 2dȐ!C raB:g0_Ȑ!C 2dȐ!C 2|t`!C 2dȐ!C 2dH 0|!C 2dȐ!C 2dȐ a>B 2dȐ!C 2dȐ!+0 <0!A <0… :|1ĉ+Z1ƍ;zR`Bn2dȐ!C 2dȐ!C 90|!7 2dȐ!C 2dȐ!CvO@8`A&TX`> O@ DPB >QD-^ĘQF=~l/|䘯a| A $H A $H;$| $H A $H 3惘$| $H A !|,h A$XA .dС|+0 < `'p "Lp!ÆB(q"Ŋ/b̨amܸQc 0|mܸqƍ7nܸqƆ6̷qF"+o| E̷qƍ7nܸqƍ;/_>/a7j1_|̗/| ̗o`拘o? O@ DPB H*\ȰÇ#JHb| '0|˗0E-N1_|#O`|/|˗0|Y$/|YhQ`|-ZhѢE-Zg0_>/_|-Z81_|̗o`>70|˗0|YOa>,ZX0E-ZhѢE w0_˗/_|-Z81|̗o`>W0_|˗0|Yoa>拘/EYhѢE-Z(1߿|/AO8`A&TaC=$o`> G0_| /߿|Ka|ka>=LÄ>|Ç>|Ç 80/_˗o ? 4xaB 6Tϡ|3/|˗o`/_ H? 4ϠAg0 O| o?'?'0_|(߿ ? 4xaB 6tbD)R̗/_| '0|/_|WbŊU`| '0|_| UL|'0|/߿|'0_|˗|@̗_/_/߿|O@ DPB >QD/|/_|(? 80,h „ 2lh0Ä 'Po|7p O@ !ƒG0߿| ̗/߿|o`|˗|70/_>˗_/_'p "Lp!ÆB(q"Eb| UX"|H1_ń* `>'p`> o|o`70/_/߿|80'p 8`A&TaC!F81b(*̷0E)>Gq`>壨0|{`| ̗O`O`|˗/? /? /߿| /_˗O`8p˗? 4xaB 6tbD[| QH|H_> M70|/|˗/߿|0@/߿'p`|8 7? 8pO@ DPB >QĆ棨0|)R0Ł(R|0|QL/EQ$"E)R`> 4xaA$(0_,X` `A H*\X? W`,X` W` +X|+Xp`,X`A,8`>8`A$XA .dC EX0| Eloa>"F_>"1|拘`1bD"&1bĈ#F0_Ĉ1̷`> 4x `A8`A&Tp`>.O@ Dx? 4xP`>;|C!B"D/BO@ DPB >0_Ĉ11bā1b1bĈ Ė0_| E1|"*1bĈ#F0|˗/| 70_|11bD;/_|˗O`|˗O`| '0_|'P70G| H*\Ȱ|K`>:ta>sСC:ta> ̗_>˗/|`:t0|_| '0_'0_|'0|/߿|g0|:ta|S08` H*\(? 4xP`>$XA .dC ̗O`|OO@,/_ ,X`+X_/_>̗o`|˗/߿|'0_/| W| H*\Ȱ|sСC:tX0C:tСC g0_>˗o |#`>$XA ._> ̗/_|G0_>/_> ̗_>'0|1dȐ!C *w0| 2dȐ!C .ǐ!C 2dȐ!Cg0_> ̗/߿|/_˗`ǐ!C g0_> O '߿ '@/߿ ?#/߿|'p "Lp!Æ 3`>:tСC9tСC:l080_>0߿(`> 4xaB O|˗o|˗o`|˗/߿|̗_˗O`|'p "Lp!Æ&O@ DPB >\0 O@ DPB >/|'0_|/_|o`|"Dg0_>G0_>/_|˗_|o` ̗`> B"D"D!B80|!B"Ą`| ̗/_'0_g0|!B0|(@ ߿o? /| ̗o`  <0… :La>|ÅÇ>toa{Ç=|a|>|Ç1̗A$XA O@ g`> O@ DPB 6̷0Ç =|Â>|0a>|Ã˗O`|˗Ç˗a|˗/a=|ÇcÄ>|a|>|0Ç>||!0Ç0|=Ç>|0|&Ç {Ä>|Ç;Oa>|0a;|>|C{0a>|X0Ç&Ç>|x0|+/a̗Æ@ o|8P`>$XA .d!| =|0Ç>,Ç{Ç><`> ;a|{a+`=|Çc0 < ,h „ 20 <0…8`A&TaC+`>3/_|'0_> ̗O`|'0_|/_>0@ O|7p|(0? 4xaB 6t0Ç>|Ç>|Ç>|(0|'0_|_'0߿|˗_|'0߿|/߿|/߿|_>a>Ç>dÇ>|Ç>|Ç>/|̗`>/_|#/߿|˗/_˗/|'0_/_|g0|9'0_=|Ç{Ç>|Ç>|z  'p@'`>#߿ G_O?/?8`>'p AW`8`A&TaC =|Ç>|Ç>|Ç9W0_>˗O`'0߿|˗_|'0߿|/_|˗_`>s!|>|C>|Ç>|Ç>|Ã#O`>/_/_|0@o?o'@7_>8P`8p| H*\ȰC>|Ç>|Ç>|C;a|>l`&Ç>dÇ>|Ç>|Ç>Da6̗Æka|>|C>|Ç>|Ç>|CKÇKa =|Ç{Ç>|Ç>|ÇSOa>Toa>*Ç>dÇ>|Ç>|Ç>Ta>=|A8|+X`'p "Lp!Æ{Ç>|Ç>|ÇG0_=||G0_ =|Ç{Ç>|Ç>|Ç˗/C H*D ̗/_> ,? 4xaB 6t0,h „ 2l!Ĉ'Rh"ƌ7rb?bǏ?~Ǐ?~Ǐ}Ǐ?~Ǐ#|}Ǐ?~Ǐ';ǏǏ?~Ǐ?~`7'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?BO@ DPB O@ DPB >QD-^ĘQF=~$H $H A $H ' | A $H A $ȉ8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_<+|,h „8`A&TaC!F8bE1fԸcGA^a!C 2dȐ!C 2dȋB:2dȐ!C 2dȐ!C y1_HB 2dȐ!C 2dȐ!/C/_ ˗o`|'0_|!C 2dȐ!C 2dȐ70|/߿|/߿| 2dȐ!C 2dȐ!C`> G0߿|/߿| 2dȐ!C 2dȐ!Ca|̗/_>'p  <0… :|1ĉ+Z1ƍ;zb>˗_|O|G?O@ DPB >QD-^ĘQF=~I1_| #/_|/_>O@/_| H*\ȰÇ#JHŋ3jȱǏ !`G0|_|˗0|!C 2dȐ!C 2dȐ̇0_|'P(_(? ? 4xaB 6tbD)VxcF9v$|t`!C 2dȐ!C 2dȅ 0_|!C 2dȐ!C 2dȐ a>B 2dȐ!C 2dȐ!+/| 2dȐ!C 2dȐ!C*W0_H 2dȐ!C 2dȐ!CT |,h „80,h „ 2l!Ĉ'Rh"ƌ7r#HBn2dȐ!C 2dȐ!C )0|!7 2dȐ!C 2dȐ!C` 2dȐ!C 2dȐ!9'p 8`A&TX`> O@ DPB >QD-^ĘQF=~d/|a> A $H A |c@ $H A`> 4x ,h „ 2lp`O@ Dx? W`8`A&TaC!F8bE1f0Ɓ6nܨ1_|mta>6nܸqƍ7nܸqc|۸q|̷a>"۸qƍ7nܸqƍ moƍEW0F拘o#|8`A&Tx? 4xaB 6tbD)V`|˗o`,Zhqb ;`|˗o`|%0_| ˗_| ˗ϢEgѢE-ZhѢO`>˗/a>-Z/b G0|/_> ̗/a$H0_1̗ϢEYhѢE-Zh1|#_| Yh|#`|/_'0_擘| )gѢE,ZhѢE-Z_ 7p| H*\ȰCG0|#/_|˗_| )` -̧0|>|Ç>|ÇC/_˗/_|>|C̗O`> G0_| /߿|Ka|ka>=LC>|Ç>|Ç8P /_˗o (? 4xaB 6Lϡ|3/|˗o`/_ H? 4ϠAg0 ˗/_/|70_|/_>̗/| O'p`>$XA .dC%NH1_>̗O`>/_WbŊU`| '0|_| UL|'0|_|'0_|˗|@̗_/_/߿|O@ DPB >QD/|/_|(? 80_>$XA .dذ`> Oo@ <(0B!<` /_|70|˗/? o`>̗_|/߿|˗_|O@ DPB >QD)W1a>*VXaUb|`>'p`> H_ G|O|/_||O@$X ,h „ 2l!Ĉ'B̷0EH"Ň(G|棘/߿|/|'0_>/_`>O /_|˗_o8p@'p "Lp!ÆB(q| QToa>)R||)GQa> w0| w0_|80߿#(߿|O'@7p/,h „ 2l!Ĉ'2̷0EH"Ň(G|擘`棘0_> H0E)RH!|,hA$(0_,X` `A H*\X? W`,X` W` +X|+Xp`+X`+Xp |'p  ;x | H*\ȰÇ#'a>0| I(a>$'Qb|拘`(QD$"'QD%J0ć[0 !D!B"̇!8`A&TaC!FO| I(1|%J|a>%Jh0_|%0D!'1a>%J(QDo |o G | H*̧_'0_|˗`|˗/|˗|7߿'p|  <0… p`̗a|:t0_>sСC:ta>˗O`|O`|-СC3/|+O`>˗/_>/_>'0|'0_>sСCs80B O@'p "Lp!,h| H*\ȰÇ#g0_/|#`(Q| g0_#/|˗O`|˗O`|` ̗`>$J(Qb|!'QD%J,OD%J(a /_|/|+`$JX0|̗o`| 70_> /_ ̗O`|̗/_>#`>%J0|I(QD (QD%JL/|/_|`>(0@  <0B+/|'p߿o ߿/_| H*\Ȱ!|g0C:tСÂ:tСC:,080_˗/|/ H*\Ȑ 70_|/_|'0_|7p`| _|8`> 4xaB 6t0!,h „ 2lB$X0,h „ 2la|3/߿|'0_3`>!BL_> /_> '0|/_|3/|˗O`|"D!B`>!B"ā"D!>̇0߿|/|G0_| "D g`> |O ̗/|80,h „ 2la>>|Ç{/Ç>|a|{p`>|X0Ç&Ç>|x0B O@'p "L!,8`>8| ? 4xaB 6t` B"D!"Ă B"D%̗`Aa|̗/a>A"D[" Bb>!B,"D!B0|1̗"D0|A"D!B0|!"DAb|!B"ć[/a>!B/D!Ba B"D!"Ă B"DW0_;| B\/ag0 B" b| H|,hA$XA .d(`> 4xaB 'p "Lp!Æg0|̇0_>Ah0|g0 B"D A"D!B"D!Bb|g0|˗_|'0_ ̗/߿|˗O`|'0_|(߿ o| /@ 7pO@ DPB >$"D!B"D!B"D 70| W0|_> /_/_| /_/_/_|`so`|"D!2"D!B"D!B"D 0_| /_|˗O`>˗/߿|O`| ̗_|/߿|˗_|̗a> "D!Bd"D!B"D!B"D'? O@ O |G߿| '_'p | O@W`'p "Lp!Æ"D!B"D!B"D 9W0_>˗O`'0߿|˗_|'0߿|/_|˗_`>s|!B"D B"D!B"D!BQa>`|˗_|˗/߿|'PO8 7? O`o(0,h „ 2l!|!B"D!B"D!B0_|Ad/D 0D B"D A"D!B"D!B| a|!.w0_|"D!2"D!B"D!B"D 1̗0D!̗0|"D!2"D!B"D!B"D )̷0D!̷0|"D!2"D!B"D!B"D !0D!0|"DACO@ DPB >QD-^Ę1a|˗a|ix0_|˗O`|4˧QFiԨQF5jԨQc|,'p "L ,h_|<(0,h „ 2l!|!B"D!B"D!B"D!BQa>!B"|!B"D!B"D!B"D!Bqa>!B| B"D!B"D!B"D!B|!B"ā "D!B"D!B"D!B"D "D!.70_>!B"D!B"D!B"D!B0|!B!|,h „ 2l!Ĉ'Rh"ƌ7rB$XA .da>$XA .dC%NXE5n|?~dǏ?~Ǐ?~1,h „X 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRR2 ;;PKaҋyGtGPK+AOEBPS/img/lobopen.gifSGIF87aXH?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,XH H*\ȰÇ#JHŋ3jȱǏ CIɁ H 'p "Lp!ÆB(q"Ŋ8`A O@$XA8`A&TaC!F8b|U/_Ŋ+VXbŊ0|XbŊ+VXb|)WbŊ+VXbE*>g0_Ň*VXbŊ+VbŁ*VXbŊ+V0_Ň 0_Ŋ+VXbŊ!̗|+VXbŊ+V\ |7P70807_/_ <0… :|1ĉ%K/_Ň*VXbŊ+V0| g0_W0| 70_>+O`|UXbŊ+V(1A'0_|/_>#? 4xaB 6tbD)VT`g0_| W0|W0|`|gѢE-Zh"|/_|;/߿|˗_>/|YhѢE-ZH1| W0_`>3`>_>+ϢE-ZhѢŃ /| 70__|O@ D8? 4xaB 6tbD;0@ O|_> O@ o|/߿|7p |'p "Lp!ÆB(q"ńg0|;O`/|O H1_Ŋ+VXbł;o`>70߿|+`/|`>XbŊ+VXq` 'p@O |_߿8`A <0… :|1ĉw0|'p70O`˗/|˗/_ o8`A&TaC!F8`> 4H? W_ ,X`,X`  <0… :|1ĉ 1|#Soĉ'N8q| c`  ? 4xaB 6tbD71b>&F̧0ĉ'N8qD&0|'7q|'N8qĉ'+ob|MOa'N8qĉM$a>MH0ĉM8qĉ'N`71b>&N8qĉ' ̇0_> @80O@ D80_ &L(0,h „ 2l!Ĉ'+ob|MOa'N8qĉ!̗`>[0 

 4x@$? 4xaB 6tbD!̗/|17qĉ 8qĉ'N81ĉ'Noĉ'N8qb/|w0ĉ'N$oĉ'N8q|M8qD&N8qĉ'˗`| ̇0_|M8qD&N8qĉ'2g0ĉ'Noĉ'N8!|O _>0 'p "Lp!Æ8`| H*\ȰÇ#O@'p "Lp!Æ8`A$XA .dC 3_> '0|1bĈs/_Ĉ#F1bĂ;/bĈ#20_#F1bD3`>#`#F0|#F1bĈ;a#F0|#F1bĈ-`> |,h „8 | ? 4xaB 6tb"+0 

A̗/_Ĉ˗Oa"F1bĈ#1_|# g0_Ĉ1_Ĉ#F1| E4a>̗a|#F,/a"F1bĈ#1_|# g0_Ĉ1_Ĉ#F1| E4aS/bĈ!1_Ĉ#F1b"+/bD `"1bĈ#F(?? o| `>o(0@8p| H*\ȰÇ[/| 0|9a3/b#F1bĈEW0| g0_W0|/߿|O`K`"F1bĈ[0 $+|+(0_A/_>/_>/_>/_|˗O`#`  <0… :|1|w0|3/_>+`>˗/߿|/߿| ̗0|I(QD#(aO`˗/߿| ̗_'0߿|/߿|˗_|'0|I'QD%J0|70|O` #__>o`#Ob>%J(Qb|%:̗O``> ̗/|G0_/_/߿/߿'p 'p "Lp!ÆB/ w`>(߿| o|_0@_ @7p <0… :|`#˗/C ̗o`/A/_| `>70,X0,h „ 2l!ĈI/_| '0_A ߿(`>'p|˗/| 70| ˗/A ? 4xaB 6t|#Fa>;O`|˗o` '0| ̗o`|/_>h0_Ĉ#F1b"w0|̗o`W0_|'0_| '0|%`#F1bă"F80| '0|˗/| w0@ ߿/߿? 480,h „ 2l!ĈI,`Oo`>7_o`| ̗_'P 8p  <0… :|`#0|#Fd/|#F1bĈh0_Ĉ1| 1bĈ#FO@ DPB >_>I`> X0D%J(1b>%0|%J 4x@$`>'p 8`A$XP`> gРA 3ϠA ,ϠA4hРA 4h`> 4hРA4ϠA 4h | g| 4hРA gРA4A 3ϠA | gР| g | ,ϠA g0A 4X0A 3hРA 4h`| 4hРA 3h0A 4hРA  O@ D ,h| Ca|!Da|!!|ˇ`>'p " H'p ;xCoa>$0D%J(`>%Fg`>_7?˗o`|#HP`>O@ DPB >a+/_g0|G0_|'P|@o8P`8p` <0… :|0D!g0_| W0| ̗_Soa>!B"D[`>O`|w0| /_|+`h0|!B"DA|g0߿|G0_|+_>"D!BQa;o`/_| g0_| /_|+o`>3`>˗_|g0|A"D!"̇0D`> ߿'p | G_`>8`A&TaC!F/|70_| g0|W0|W0߿|G0߿|/|8@ 7_'p "Lp!ÆB/|#:O@8`>߿8? O| 8|,h „ 2l!Ĉ'O#/? O@ '0_|'P|@ (? O /| 8`> 4xaB 6tbă H*/|'0|%̗`+o… .\p… .\0a| W0߿|W0_> `W0_|̗`'P| 808`A&TaC!B1bD3`>+o`> /|˧0|#F1bĈ#>/| ̗_ #_'0_| ̗`>s`> /߿|W0|#F1bĈE`> 'p`G0? /_|(| /,h „ 2l!Ĉ%`| ̗/_>g0|!̗/_ 'P|@o70|˗/߿|7p`8`A&TaC!B1bD"Fx0_Ĉ#F1bĈ 0|#w0_|E,/bĈ#F1bĈ1|#F1bĈ#F,/"|E80| !`#F1bĈ#F|/bĈE1bĈ#F` 1|-̧0_D"F1bĈ#Fb#1bĈ#F1bĂ"2g0_Ĉ!̗/a>"1bĈ#F1bĈ"Fx0_Ĉ#F1bĈ 0|#̧0| H`  <0… :|1ĉ'p "L ,h „ 2l!Ĉ' O@  H'p  ? 0 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB7*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~;;PK'~XSPK+AOEBPS/img/descans.gif (GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#J0 < ,h „ 2l!Ĉ'Rh"ƌ7rX1GQD-^ĘQF+3_| 70߿| ̇0G=zѣG=z`>'0|70|yѣG=zѣG g0߿|'0| 70B$(? 4xaB 6tbD)VxcF9v4/_ _˗/| ̇0|{ϣG=zѣG=zt`>=ѣG=zѣG=6g0GѣG=zѣG3#|yѣG=zѣG  QD-^ĘQFױ|;vرcǎ;vر#|u80_ǎ;vرcǎ;vX1_|;ױcǎ;vرcǎ;6O@8`A&Th`>  <0… :|1ĉ+Z1ƍg0G=Ǒ#G9rȑ#G9&w0|91G9rȑ#G9rx0|8`A&,@8p| H*\ȰÇ#JHŋ3jH1|q`8rȑ#G9rȑ#G 3#|EǑ#G9rȑ#G91|)+/b>9rȑ#G9rȱ`> H1_|qȑ#G9rȑ#GIW0| 70?$_GP (0? 4xaB 6tbD)VxcF'擘`>o`_C`>8rȑ#G9rȑ#ǂ&#`o`o`#Ob>9rȑ#G9rȱ`> W0_| 70|70| ̗ob>9rȑ#G9rȱ`>+`o`| 70|W1G9rȑ#G9rX0|/| W0|!w1G9rȑ#G9rX| H /߿| 70_| w_  <0… :|1ĉ+Z1ƍaw0_|˗` ˗`>.ȑ#G9rȑ#G Ø#|qȑ#G9rȑ#GaǑb8rȑ#G9&O@ DPaAO@ DP!A$/_ W` ,Xp` `'p "L? 4xaB 6tbD HQb>(Roa>Q0Ł"˗/E˗"E)RH|)Jg0E-G`>80|):G"E)RH1a>%3"ňH`> 4xa‚ HA&N/ĉ'N8qD&N/|'N̷0ĉ'Na'7qĉ'N8a> /߿(߿ /_|70A|0@  /߿7P 8p| H*\Ȱ| 9t0a>sСC:tСC g0_| W0| ̗_So`> /| ̗__>/_|СC:`>;ϡ| G0C:tСC./|'0|70_S` O`G0|'0|K`>:tСC/A7 '߿ 7?˗/_ ? 4xaB 6tbć Hp 80_7po| 8| O| 7P`|8_O`>0 <0… :|H? ̗/|/_>_ /_8_|7P |O@ DPB >Q| 'P7p 0@ _7P`|O |7P O(@ o| H*\ȰC̗o`>˗/| /߿|O`70_|=|Ç>|a 3_>#/a|˧0|70| #O`o`#Ç>|0߿|(߿ /߿7P|?70O@ DPB >Qb|'0| G0_/_3`> G0_O`o`8qĉ+o`| /_|'0߿|_>;/_>8qĉ'N0A߿|G?˗o |?#(0A7`> |߿ @ ? 4xaB 6tp`|o/߿_8_G0,h „ 2l!Ĉ8q|M81ĉ'N0ĉ8qĉ'N1ĉ3oĉ&N8qD&N,0 80,h „ 2l!Ĉ!8q|M81ĉ'N0ĉ8qĉ'N1ĉ3oĉ&N8qDM0ĉ'N8qĉ H*, H*$ <0… :|`> 4xaƒ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKW*|,h „8`A&TaC!F8bE1fԸcG=zѣG=zqc>yѣG=zѣGyϣG=zѣG=zܘ`| g0_|˗o`|%ѣG=zѣG=nW0|+o`>'0_ѣG=zѣG7#/|W0߿|/_>ѣG=zѣG7#`> O`>'0_|=zѣG=#<|_ ߿'P` O|O <0… :|1ĉ+Z1ƍ;G0|G0_| `>OO@ DPB >QD-^ĘQF+`W0|/_K`>=zѣG=za|Oo`߿? /,h „ 2l!Ĉ'Rh"ƌ7r`ױcǎ;vرcǎ;rg0_G رcǎ;vرcǎ93|uرcǎ;vرcǎQb:vرcǎ;vرcG 'p "LH?'p "Lp!ÆB(q"Ŋ/b̨q#G:vcǎ;vرcǎ;v`رcǎ;vرcǎ+3cG:vرcǎ;vرcG H ,h „ 'p H*\ȰÇ#JHŋ3jܨ1_ ȑ`>qȑ#G9rȑ#G w0GAǑ#G9r1!|,h@$XA .d|30 < `'p "Lp!ÆB(q"Ŋh0ŋ/>1|#c/b/^xŋ/w`/^|/b>.F0_|/^xŋ/^<|/^0_|]a."w`> 4xaB8`A&TaC!a#F` `>"拸0_|˗a|Eqa|"F1bĈ 0_Ĉ#FX0_|Eh0|EL/| E1|#F1bĈ̗/| ̗0_Ĉ#FX0_| +`| ˗o`|!̷0_"&̧0|"Fq`|#F1bć+O`| '0_|#F1b|+`>o`>̇0|勈0| E1b| H*\ȰÇW0|/_|!B|70_|/|70| 80DC"D"D!BO /_ /8p ,h „ 2l0ÃW0|g0_C08`A 4h0 3/A 4ϠA 4X0,h „ 2l| `|W0߿| !̗"D!B"| W0߿|o`> :a>/a> A0D!BaK_KOa>!B1D `0@O@$H A$H A$(0|/_|'0_|/_ o࿁ O| ̗/|˗O`|  <0… :|80|O`>/a B|+` 70_| ̇0D ̗/C@˗/_> ̗/_/_|_|//߿|_ 7|,h0,h „ 2l0|˗ |? 8P`>$XA .dؐ`> ̗/_>70_|#O`|С| '0|+o`|˗o`>70߿| /| ̗_>/|9:oa>:tpa> 9t0C9,` #_'p࿁/߿__>O`/|O /|˗/| /߿|/|_>/|O |߿O'p|߿? 4H0<(0, | ;xw`̇ |'p ;x|/_o`|w` 4xaB 8`A C!B3o`'0߿|o`| g0B"D_3O`|'0_o`O`>o` ̇!B"D!B!w0B"D!B"D!|!Da _/|#`>C!Bw0߿| '0_|#O`o`>+_70_|"D!B"DH0|!D!B"D!B"| 80A $H`|_|_#H`>˗? 4xaBW0_>`|;o`O` o`/_ .\p…g0_| .\p… .\Oa 8@70|_o`|O@ DPB80|(߿8||߿| |'P |,h „ 2l!B$XA .dC Hp ,h|70_|'0_ 3`>"D!B3o`>˗`>O`>+_ #!B"D!B"`>"D!B"D!Bˇ!B3o`|_> 70_>C!B"DO`>'0|o`>O`>/߿|70B"D!B"D(0|"D!B"D!B!̇!B̗/|||'p`>$XA .d/|0@o`'p`˗O` ? 4xaB 6t`  O@ DP!B$X |'p  ,X`+X`  <0… kذaÆ5lذaÆ 6L/a|k/_ 6\/_Ç0_Æ kذ| 6lذ| 6lذ` 6lذaÆ !̗0| 6lP`| !̗0_Æ kذ| 6lذ| 6lذ` 6lذaÆ ̷0| 6lذ`>CaÆ5l_ 6l_ 6lX0_Æ 6lذaÄ ;`6lذ|W0| 6,0 < ,h „ 20 <0…8`A&TaC 3`C|!2̇0|"D!B"D!B"D!2W0|̇0D B4` +"D!B"D!B"D!Bl``|˗/| ̗/|'P࿁߿@/ 7_>$XA .dC%NXE5B̗O` `|˗O`|˗_|/_˗/߿|G0_/߿|/_>+/|۸qƍ7nܸqƍ`>'P`/_ '0_70߿|o`| /߿|`>'p AO@ DPB >QD-^ĘQ| /|8@ O`|˗o` '0߿|O`'PO|8P`>$XA .dC%NXE5f0|̗O`|70_|O`|/_W0|O`'0|0ƍ7nܸqƍ7n̘a ˗/߿| ̗/| '`>o(0@߿|7? / <0… :|1ĉ+Z1ƌCo|!Ca7nܸqƍ7nܨ1| mo| 1̷qƍ7nܸqƍ7[Oa˧0|7nܸqƍ7nܸq|0_ka7nܸqƍ7nܸ`|˗b|6n4/_/_7nܸqƍ7nܸ1a> H*, ̗? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{U;;PK( (PK+AOEBPS/img/first.gif%GIF87ap?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,p H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCCO@ DPB H*\ȰÇ#JHŋ3jbرcǎ;vرcǎ-a;vرcǎ;vbرcǎ;vرcǎ-;o`>0@ /_|70| /_|? 4xaB 6tbD)VxcF9Zg0_>'0_̗`>˗O`|/_|ױcǎ;vرcǎ;Zg0_|G0| 70|/߿|˗/_ رcǎ;vرcǎ-3/_#/| 70|/߿|˗/_ رcǎ;vرcǎ-3/߿|#/| 'p  ߿| ? 4xaB 6tbD)VxcF9N̗/_>˗/_>g0_/|`>?8p ,h „ 2l!Ĉ'Rh"ƌ7rTo`> ̗_g0_>O`|/_|̇0_ǎ;vرcǎ;v0|/|̗`|70_|'`>'p|  <0… :|1ĉ+Z1ƍ +cGرcǎ;vرcǎ +cGرcǎ;vرcǎ3cGرcǎ;vرcǎ3cGرcǎ;vرcǎ3cGرcǎ;vرcǎ3cGرcǎ;vرcǎ30 <0…8| H*\ȰÇ#JHŋ3jq`7رcǎ;vرcǎqc;vرcǎ;vq`7رcǎ;vرcǎqc;vرcǎ;vq`7رcǎ;vرcǎqc;vرcǎ8`A&TX?8`A&T? W|,h „ 'p 'p "Lp!ÆB(q"Ŋxa>.^oa>.^|b/^xŋ/:w"|]1|]0|/^xŋ/^tE x1b xa>.^xŋ/^0|O`>'0_|G0_|%g0| /|˗O`˗/߿|˗/_ˇ0|̗/| G0_|˗/|#/_>ˇ0|/^xŋ/^t`|/߿|/_'p| '0_||/_>/߿|'0_|'0߿|'0_>$80A'0|˗o`|/_|O`| ̗| $? 4xaB 6tbD)V0|3/|70|#/_ 3/߿|˗O`|#/_W0|/|[`>G0_|#/|/߿|'0_ xŋ/^x"|̗`|/|#/_` ?(0|/| 7_ o 7_|7_|˗O`>˗/| 7pO@ DPB >QD-6̗ |OO@/|$`||G0??'p|#/A̗/߿|7`> o (0A O@ DPB >QD- O@80_/|80| /_'p@/_˗O`|#/? O|70_> `> ,˗o| ̗o|˗/|/_|8|,h@$XA .dC%NXb W0|#O`|O`>˗0|̗O`|/߿|'0_| '0_ ̗`> 3`| '0_|G0_>'0_>˗O`|AgѢE-ZhѢE30@@ O@7`>'p` /_>˗O`|(? ߿8_GP`>˗o |$O/߿߿| /A O@ DPB >QD-:w"|]1|]0|/^xŋ/^tE x1b xa>.^xŋ/^0ŋ wb| w|]xŋ/^xa3ň3Ň xŋ/^x|/2g0ŋ-g0ŋAwŋ/^xE.^d`#[`惘ŋ/^xŋ8`A&TX?8`A&T? W|,h „ 'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǁ:vܘcǎ;vرcǎ;vcǍ:vرcǎ;vرcǁ:vܘcǎ;vرcǎ;vcǍ:vرcǎ;vرcǁ:vܘcǎ;vرcǎ;vcǍ:vرcǎ;vرcǁ 'p "LpA <0… :|1ĉ+Z1ƍ3cdž رcǎ;vرcǎ3cdž رcǎ;vرcǎ3`|˗O`O`|˗o`o`;`;vرcǎ;vؑ`O`>70_ '0_> ̗_|8?_>7p`>$XA .dC%NXE5nH0_|#`|/_>'0_>˗/?O| H_'p "Lp!ÆB(q"Ŋ/b̨q#ǂ;/|G0? 70?o࿁+? 4xaB 6tbD)VxcF9̗o`>`|_|/? O࿁/߿80|8`A&TaC!F8bE1fԸc|3o`|˗`|'0_|'0_O|߿(0_|8`A&TaC!F8bE1fԸ|O`>G0_>˗O` ̗_|8?@  <0… :|1ĉ+Z1ƍ#;/_|8p? ߿/?O| H*\ȰÇ#JHŋ3j1bرcǎ;vرcǎ#رa;vرcǎ;v1bرcǎ;vرcǎ#رa;vرcǎ;v1bرcǎ;vرcǎ#رa;vرcǎ;v1"|,h „ O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X `… V;;PK2Rp*%PK+AOEBPS/img/reqp.gifL GIF87a+?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,+ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ'p "L 'p "D'p  'p "Lp!ÆB(q"Ŋ/bh1F̧b>iOF5jԨQF5"̧Q|i/a>iԨQF5jԨQƃ˗/| ̗/_;/_>a>˗o`/_w0| ӨQF5jԨQF̗`>W0_'0|/|̗_|#O`| /_>ӈ0F5jԨQF5j,`|/|+/|/ GP`>_|̗/||'0_/_/8`A&TaC!F8bE1ftO`>̗O`|S/|˗a>3/_|#/_|So` _|/| /_>4jԨQF5jԨQ|O o8|G0_| W0_+/|/_ /A/_|O`|? 4xaB 6tbD)VxcƂ Hp 7p`|/_ 70_|/8P 70߿|/_7p (? /߿| ̗/߿|˗o@ <0… :|1ĉ+Z1c| W0|+O`|O`>˗a'0_70_|˗Oa'0߿|˗_>_|iԨQF5jԨQF30@@˗o`|O@ 7_/_> 7P G0߿|˗O |߿'p`>$XA .dC%NXEOFO#| ̧1a>5jԨQF5jH0F̧b4&̧QF5jԨQF Ө`>4Ḃ0ƃ4jԨQF5jԨQc|5g0Fh0F5jԨQF5j4OF 1_|4̧QF5jԨQFӨ`>4B̷0|4jԨQF5jԨQ#B$XA O@$XA8@$X`A$XA .dC%NXE5nG!E$YI0)UdK1eΤYM9uOA%ZQI.eSG;;PKW5OQ L PK+AOEBPS/img/execeex.gif#GIF87a^?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,^ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ8`AO@ DPB >QD-^ĘQF)1a|=zѣG=zѣGQD-^ĘQF+O`|˗`|˗_|˗/|ѣG=zѣG=jg0|/_|'0_|/߿|W0G=zѣG=z1_>˗/߿| /_ /? O@$XA8`A&TaC!F8bE1fԸQc|'0_|W0_/_/|q\/_>9rȑ#G9ra˗O`| `>O80,h B8`A&TaC!F8bE1fԸb8Na>9rȑ#G9r0 $+/_(? 4h0<(0,h „ 2l!Ĉ'Rh"ƌ滘a6J̷Qb7nܸqƍ7nx0| ̷1bmܸqƍ7nܸqƃ.camoƍ7nܸqƍ7̇0_> 80O@ D80_„ &? 4xaB 6tbD)VxcF!̗`|1̷`> 4x@$XA O@ DPB >QD-^ĘQ|#/| mܸQb7nܸqƍ7nX0߿|˗o`|w0ƍ%۸qƍ7nܸqƍ;_|;`>6n(1ƍ7nܸqƍ7fO@ /_|Gp |$ <0… "O@8`A&TaC!F8bE1fl` '0|#`>5V̧0_>5jԨQF5j`> #O`| ̇0F+cOF5jԨQF+[b>˗"|,h „8| ̗? 4xaB 6tbD)Vxcƃ滘a/|i̘/_>ӨQF5jԨQF滘a>0F%0F5jԨQF5N0| ̷0|5̇0_|5jԨQF5j81|1g0| ̗O| 70_kOF5jԨQF'cb> ka>9̇1_%w0_|5jԨQF5j81C$X A$(0_|+/_A ˗/| ̗O`| /_|/_/_+/_|  <0… :|1ĉ+Z1|1#a>+/߿| /|+O`|/߿|_|˗_ #a>5jԨQF5jOc|s` /_|˗o`|O`|/|`> O| 8p8`A&TaC!F8bE1f4O|s080_/߿|˗o|˗_|/_O /_|8P`>$XA .dC%NXE Өq`> `|'0߿|˗`| /__|(߿| o? 4xaB 6tbD)VxcF4j`>`|/_'0|˗/߿|'p 7? 8p'p "Lp!ÆB(q"Ŋ/bh0F9w0F Q̧QF5jԨQFiH0_|UO@$X",? 4xaB 6tbD)VxcF4j$a4jLb>5jԨQF5jOƂSOƃ,ӨQF5jԨq"|,h ‚ H_ ,X` Wp`| W` ,X`A ,Xp`'p "L00 <0!A$`> 4xaB8`A&TaC-C/|=|`|&̷0ÇSÇKÇ=|Ç[Ç˗aA$XA 'p  ;H0˗/| 70? 70G`>G|˗o`| ˗|#H_| 70߿|#/_|O`| ̗/A8`A&T|/| '0_%̷0_Æ 6lذaÆ ̷0| _|/_|/߿|;Oa|%̗`|K/|!̗`|˗O`>'0߿| /_6lذa70_|#_| -װaÆ 6lذaÆS`|/|˗O`|/|̗/߿|/|˗`|˗_|/_ 3a| /_70|̗O`|70'p "Lp!˧0_˗/_|װaÆ 6lذaÆ !/| '0_>̗O`|/| g0_/_> ̗/_O@ o| (0_/_|/ ̗o|(0,h „ 2/_|[/_˗/_|װaÆ 6lذaÆ ;/A  '߿'߿ /A˗/_O`|/? o'p|G |o@@'p 8`A&T|`#_| 8`A&TaC!F(?80_> /| ̗o`|8p?Oo`> ̗|7߿8| O@̗|o@̗O`|7080,h „ W0| '0|/_|1dȐ!C 2dȐ!C 3/_|˗`>'0_˗Oa̗|O|'Po| o|/ ̗/_>˗o|˗o|8_>$XA .d/_|˗`| ̗/_  <0… :|1Ą30@@|'@ /|/_|/_|'p ˗_|'`>O|o@ O߿ /߿7?O@ DPB :70Ç>|ÇÇ '0|| Ç>|Ç=|Ç>||>L`|s/@ O@ g0|Ç>|`&w0Ç;Ç=|Ç{Ç>|Ã>|0|>Da>Ç>tÇ>|Ç{a| =|`>|0Ç>|a>|Ç><Ç )̗Ç)Ç>|!A$XA8`A&TaC!F`> 4xaB8@$XA 'p  H*< <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :i;;PK/PK+AOEBPS/img/lnpcc002.gif)/GIF89a66{{{JJJ:::)))fff挌ZZZsss̙BBBRRR޴fff333!,66@$h@*\ȰÇ#JH`ŋ3&Dc >l0!I.@8ɲ˗0cʜ S4sܹϟ@bp ѣ3\Pв>IJXbP4מA!IGV' Wg:*ѪqsB` @ ÌuR A&KZᰀǀK0 'PPZP09sI)wk!4VÑe7Q[oMyow͸W?[d @rSkPcVИA~hW.4] @]

AוǃALlϖ.%y{`+R2ju^(G24etWJ2g5S:\=dx3JSIK% ,4yK<5` u+\ңm1 0Jvư)quIҀ,Dz D-:$ /l0fR\b׺z8;@,5h,%/L`5Q)eOyZ fL͗BPf\;yjܞ T&INU0$!}`:Ҕp8mW٥U8-DGG!됔dQj9(,͖ ~P?0FFhWBZWHXkψRnM#6!{|.h#jي=@Rmy'Np47mj@Tڝ5{&/-``$8py,yMdh;Cn%0tma%՚܇RrlAw\^@˓扴"0錑{BH ?9F4@94s=?ys۟@ sRg3Ih IL҃R"̤3v(-F@PBuP,`N(a9Ĩ+s3BF^hWL(}<'C2pU]鑢ٿd{s<Esi?)t, KVs;?/%ypGS+Ɍ&Sٶ/~dEc7b8 ?B&If߀D^S|Σw{PX12X6W(2Hfv',$LBIP[Sb.\u?AuRtal4qRi7`*=>'HR7"}zkv!tO'9?(@G!,usjBNӖuSE?'#iXoe2ɔhJ~=c A"Asf'y)$3_1;#WnS$.qVjJnXupj'3v?QwaTH2Y&.CeO"qpw"SRO*#WAv{],iᥛ┃gBnQZT#`LAo|ՃiYXLeSaզG@U7j2,Vo5Xd'fS*Q%" w.Z1Ѥ1/dvԄF1-Q*`l k&#W6RT+V+2j2*܅v2RL-H+I,4jʂQhO.9ю.F !x"&1"u ҍ'B*" !POκ!JDO#RXv¬챭hrOARwBl"z{'v(':iq礩IweQ\v陔9Xs A:cthfTc_CYUvqT6AUAY$N{|𚢧sjj)8ibT3I?i!!ArƱn`g4cfXT别KzD1]Q⚯n'qt}JLlAd$~dHLJ$q@ЉH-:iG0,҆E?=\$Fj!W+4"T*Q!o݃AJ|9pa^w|衉2qZ5bxjO\FMVn6gqf8x ɼ0c0 tZgj\[1A23`%?5"Q=1KzY4#Bu='u^sK^z")l4.>wڔ="DCsU!ïBm,-MgQ-ג-X .4.;t:Q*<,?iYss4r+SN Ȃ^,!.2yq`DjmGq, *9!7rڂ穑}q;'0qloQ"3NGH(ڄ,A1㚗rYonuYA:Tl1X ;6k6.sqsza}5C[蜅)LHu[wRB%y XeIMJ K1fFJ#>y^6QL BLf ![1B3^Ʈ$NN_5 ^CWNlC809"(~!{׀ lk",|":":"P="u?r{嫢R ?9h(9wbf p3V1Mk z:,Vx<6tYt,4 fw! s$2X6JW5&aJ'ge[9#B!4q&b$5LU|dZfAh3`V@!^f7DӁ<\t{RڔĔL18fan&vJ!GvdsGyJL2)&1Ze/)ψ=ۺ}I9YwVҰ4SjwG?WENȏecX sBTRC2T'ASC .q2 MQS+W%Z!ul x^"|N4yN#l1i>*2/ih<̋Y> &Ŏ$}ZQg|L{b%$4N /̧FԚ@XB-'ЛzԴÜKr(F39aFgDJJ>!6@D'@ ŀ.ԓ fU==T".ͩjRB)9TreX=J`H 6+oER89BX(UBrmSJ+- 逊EI$MtUefV~ҳc ;p=pPm,b^1ȣ v&R% ث0`p0haS vJ!1:/hsgR5 L=*ĹnL!LGz^䨖mht1i^:6>0 8pYcҲXy.dePQLx PIҰ A%Tr秬.k=9bVL@(Fի垐FJGQ*ZL8Ko'M^4 Ȁԥ&7K#.#y-[Z4Ӏ $@i-3=ajij+ZyvXo @JD-x hJ@E;k*@촲iHE~|)j 53Tb|e"ich+?Q>Vdxi]ǫ d8Ic\+(&: ./ 05Ft)|rg8*kU?) (9НBZD7C~PP)؍v]&6e`u@H6tꈦ3T0ȧ||ѕ+S`9)|YrC'ԥD[uRJċq|Y!4z/՞L%mQCz%Àz'`<M8 &aD x6ODHWB#lYF٠ Fp{jۖ1oyoQ ,q X ۈax*̙ ,*h1Puv`yyK󙪊rʑ B 2  ±qh K=+`` ٝ Dx?(Z?C?<?ܑ-b, Kؽt SF(@eԿB A.Ppl9 H8ٱ ԱQ4ƍL3:pF1 A+sq8D:< LHd[H)\ D 8l1yp/yI _l!"qAWʣ4 |ʊHJ"JJJtZEL Ô z rJ܈D ys+ ) ڑȓ¤@ x˹,ź<  LΤH1  !Ѭ$iA+ȜLVLL C^M Ȍqs2\NlN|NNNԲŧNNN쌫4ΙM,NLLOHP*j yBl6OhOhLsKK*TLIο8Ls,I$IMNdى8 YOKtlR̻<ͼP̻lQL  MO   ́Ot҉PUK8R<Щ2?!.l L9"5Nm$%N 5ɕlYd (G1,F!R]L0τ QF@cY\' _A 9B!KeELUe1R9H3o"=O Gs U] hER7*HrJStTi6pٓP pGR s bJ;;CȟHX]XMX倆eXĈUXNuX؆eDJJd}IO-*->02(Bnܛ$T«‰*BX^6A8UIМU5s. ; @=B* 32  DLKQ)@1 AU$4<} V#۠9y4?9 <處)5qŎf%$¾QmZ\ZtFC?E͖*<RSA+p>I>~JrPۍF ɽZq] L #^X<`ڵD&5Ù˾޸黿 4<}%c yLk 8k#_:܅_H筚X0+ߨ{!kL&kݡ'9?s:#{`Cۊ˵\޾ȔJI ᧀ ia @Ү_[93#f}m!{&86+N+:N[(~uK 0^`!4}{6icb;(>KдEp5 5]KH ZS@V9bLxdNSdx`K9XZˌFYK GRRFbb36+dW>4\ cf7sV1ZCQi 3@^YAyUEZ]lF!tlu{@xY痈T-BT I:Lfg 4ӋBkdz ɅGȉK> 34 dZ;2e3,ªfh&\mIMCJȒ4+ofEzư^X>hi6@ jn26p'x # fDܙ>_ƯfgC`1t=Q ʕ>k(i6BD RPf:&(h3.FCDGfgi\}/C>%{Rm)R+kmK pVxtf@ޡ W@h~m&k!B.~vxR$ '4InٕYTnn#%p': x:SV)3Es:  /h)%R;*nؓ׊9k mBq{&~9r9>"qRuښߚ*5$'7Qcsр(rMPZ !*rRp*/(:3 _C;Yۉ!VBG{ߧtrcC`xHR&UMU#,w~ X8oYqNj!7aPRb6o##O_d;]< R;lvjZU ߛTs1cgwC/ ;]FXJIQ936s*,A2e)VVGyd[?@CYoGw}%xxɗUps@{+nEypyq`*I! *RyX*%_'zme7[N]ƚ곎69߈T ";]!_Бr5V IwÛۈ/zɱXy4lH;a{@KwH7S'gCc~XӪ4ޙ^Q u~V\/-1mvƦ&),\,$bYu\aɡ0`8@\pAqFa $ AK  p„20 1`B̤JP$S``T7rU $+ږ.u-[bdҫz^PԪW0bh&n֭QljkL^. փ!t &,vcc7@=4zL-.Y*gRk5󇱫g}dLt˾W0a@},L : J8!VxAj!ā!bx"*-18#5x#92#=#A 9$E) $M:$QJ9%UZy%Yj%]z%T;PKcm./)/PK+AOEBPS/img/lnpcc069.gifGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jє嫘/|*wt(|O ˗ A /_| $80_>$XA .dC%NXE˗/|1_>iԨQƃ ? /_> ̗@O@ <0… :|1ĉ+Z1|壘/|OF5̗/|w0_| ˗O`|"˧QF5jԨQF(߿o'߿7P߿(? 4xaB 6t0_|0o| / O ߿(? 4xaB 6tbD)VxcF˗/@A'߿'? 4xaB 6t0_>O| '?8_|`>8'p "Lp!ÆB(q"Ŋ/b/_> ̗O`|'0_|/߿|`>O? O@ DPB :̗`|/_> '@̗o@ (߿ <0… :|1ĉ+Z1#| '߿ O? 0 O?''p "Lp!Æg0_ ̗O |'?80_ O@ /_>O| H*\ȰÇ#JHŋ3'pO?O '? <0… :t/_|/_ ̗/_> ̗_|70_ O O O@ DPB >QD-^Ę`|/_/_/|˗O`| ̗/|/_|/|4jԨ"| o?#?'@0 '?'? 4xaB 6tbD)Vx#|̗O |7p@ 70߿'? 4xaB 6t|oo @/_|8@ O@ DPB >QD-^Ęqa|H0F5j80_4jԨQF5jԨQF̗OF5jx0_|5jԨQF5jԨQF̗OF5jx0_>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_ H*\ȰÇ#O@ D |,h „ 2lC$XA .dC%NX|/^x|/O@ H*\ȰÇ80,h „ 2l!Ĉ'Rh1E-Zhq`>'P ,h „ 2lC O@ DPB >QD)hѢE-gb|YhѢEgѢE-ZhѢE,ZhѢEY/_|-Zh|hѢE-ZhѢ|-ZhѢŁ,R̗/E-Z0_|-ZhѢE-Z,ϢE-Z80ʼnYhѢEhѢE-Zhb|-ZhѢŁ,J̗/E-Z(1_>-ZhѢE-g"|-Z0EYhѢEgѢE-ZhѢŁ,ZϢE QDx0_| ˗Ob>-*g1b|'P ,h |'p "LPa ˷p… .\p… .\p…  ̷P`| ̗/_ o`| H0_'0_|'P  ̗/_>8`A&T80… ˷p| So`| .\0| ̗o… .\p… .\p… .o|80߿'P`|/| 8p|80߿'p O@ DP| .,/…̗/߿| ̗/_70|˗/|˗/| ̗/_/_/_>/_˷p!|.\p… .\p… .\pB 70_|/_o!|w0| ̷p… [pa|.`| '0_'0߿|/_| ̗_>'0|#/|/| '0߿|/߿|.$|8`A&TaC!F8bņ˗/|/_|˗O`| ̗/߿|˗/|/_| ˗o`>1_>(߿|/߿_@ O_߿'P`> 7_|˗O`O@ ̗? 4xaB 6tbD)Vda> 80|->gb|3O`>_>+ |߿_߿'P`> |7P| 4/,h „ 2l!Ĉ'R0|YH0_|˗ϢŊ,>̗"| '0|O`| +/| 70_| '0|O`|70|_|Y,/E-ZhѢEh"D <0…1dP`> 'p|/߿'߿| o|o`|˗o`> ̗/|˗|o`O@  <0… :|1ĉ+2gѢE-Z"|)KϢE#hѢE-Zh|-ZhѢŁ,BgbYhѢ|-ZhѢE'`>7P  <80,h „ 2l!ĈI(0D%J(Q|%J(QD'0_`| #Ob|%J(QD I(0D%J(Q|%J(QD#_>;/_1D%J(Qb|% 'QD%J0D%J(QĄ #O`G0|#(QD%JlOD$J(QD(QD%J0A @ '߿@ H'p "Lp!ÆBH0DI(QD%:'QD%J(1a>/|(߿_>$X8`A&TaC!F$OD$J(QD(QD%J0_>70_> /|IOD%J(a>(QD%JtOD%J(Q|`> (߿/߿ <(0ƒ 3!B"D!B"D0B <0… :|1b|%J(QD%J(1a>%J(QĆ$JOD%J(a>%J(QD%J0D%J(Qb|% 'QD%J0D%J(QD%JLOD%J(a>(QD%JtOD%J(QD%&'QD%J0DI(QD%:'QD%J(QD(QD%JlOD$J(QD(QD%J(QD I(QD%6'Q|%J(QDI(DI$DI@'p "Lh0B (? G0̗/|/_>$XA .dذ`>s0_>/_/_>/_>/_/_>/_>/_/_>/_> sСC:tСCСÄ_>/__|ϡC:lϡC:СC:С|:tСC:t`|:t0_|̗`|k/_>ϡC:lϡC:tСCС|:tСCr!:|8`A&4O|̗`Sh0߿| ̧PB *T`> "̧PB *TPB)T0B *TPB *TPB ˧PB S80| 70|)O`| 70| *TPB SP!| "̧PB *TPB )TPB *TPB *T0_| *T_>8P ̗/_>7`>8`A&Ta:Tϡ|:tСCsСC:tСCСÄ:t0_|:tСC9t0C:tСC:ϡC:tСC̗/CsСC:t|*a|:tС:ϡC:tСC̗/CsСC:t|*̷`>  <0… "С|:tСC:t`|:t0C:tСCs |,h A$XA .dC B"D!B0_|!B"D!B`|X`> 4xaB H*\ȰÇ A"D!Ba| B80D!B|x0A$XA 'p A8`A&TaÃ:ϡC:tСC̗/CsСC:t(`>8`A$XA 'p ;x/_7`> 'p "Lp |0 <0@$H0,h „ 2l|"D!Bb|Aq`>+` ̗_| ̗o`>o`>AL0 < ,h|"D!B"D!ƒ"Dh0,h „ 2l!Ĉ%˗oĆ&G0_|/_| ̗/|˗o`| O@/_|0 <(߿'p "/a„%L0a„ &L0a„'p "Lp!ÆB(Qb|&Nlob|W0|g0_| _>0O@ W |$ gРA gРA'p "Lp!Æ&"D!B"Ć|o`>/_>˗`o`>/| '0B w oo`|O@˗/|/_| ˗/_$0@ HA!B"D!6̗/D"DAL`>x0DAl/_>'0_|'0_|˗O`|˗/| ̗/|/_>/_|'0_|˗O`|˗b| B"D!B0_|!B"D! ̗/h0ă B4/D!B"DA"D!Ba| B80D!BX`>'p "LH0B ˧PB *TPB *,/B *TPB *TPB ˧PB SPB *TPB ̧PB)TPB *TPB ˧PB *TPB *TP|)TP*TPB *TPB)Ta| *TPB *TP‚)TPB *TPB *T0_| *T_> *TPB *TP| *LOB *TPB *TX0_> *TPB *B )B O ,h „)TPB *TPB SPa|*TPB *TPB˧PB *TPB *TP|)TP*TPB *TPB)T0a|*TPB *TPB˧PB *TPB *TPSPB)TPB *TPB SP|)TPB *TPB SPB *TPB *TP|)TP*TPB *TPB)TP|*TPB )B )B O ,h „ 2l!Ĉ' ̗/E QH"E#H_|(RH"EG"E)RHa|(R\"E)R1E˗"E)RH0_|)RH"E˗"Ņ(RH"EQ80_|(RH"E˗"E)RH|Q0E)RH1b> ˗/E)R(1_|)RH"E#˗"Ņ(RH"EQh`>'p "Lp!Æ&O| H*\ȰÇ#J0_|).O@ DPB > ,h „8`A&TaC! O@ DPB >QDH"E)RH"E)RH"E)RH"EG"E)RH"E)RH"E)RH"E#˗"E)RH"E)RH"E)RH"E)F̗/E)RH"E)RH"E)RH"E)R/_>)RH"E)RH"E)RH"E)R1_|)RH"E)RH"E)RH"E)RH1b|(RH"E)RH"E)RH"E)RHb|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )R`|F9rȑ#G9rȑ#G ̗/ȑ#G9rȑ#G9rH9rȑ#G9rȑ#G)0_|#G9rȑ#G9rȑ#˗oȑ#G9rȑ#G9r|0 <0… :|1A$XA 'p "Lp!Æ>O@ DPB >QDHqa>)RHb|)O@ H*\ȰÇ80,h „ 2l!Ĉ'&̗/E QH"E#H |'p "Lp!Æ>O@$XA .dC%NH"E)FG"|H"E)˗"E)RH"|Q0E)RH1b>˗/E)RHq`|QH"E)Rt/_>H"E)FG|QH"E ˗"E)RHbB$? 4xaB*TPB *TPB)TP|*TPB *TP„)TPB *TPB *T`> 'p "L(0B *TPB *T`> *̗/B *TPB *T0_> *TPB *TPB 'p@$XA SX0_|)TPB *TPa| *T/B *TPB *T_|*TPB *TPB *L08`A&OB *TPB *Tx0B ˧PB *TPB */B *TPB *TPB 80,h „)TPB *TPB SPa|*$0@ H`| Ϡ3X0A 4h`|8`A&TaC!F(`>8`A&$OB *TPB *Tx0B ˧Pa|S0| SX0| COB ˧PB *TPB *TPaB O@ D`> *TPB *TP| *D/B/_|˗O`>/_>/_G0|/_|˗`| ̗/|˗/B PB *TPB *TP|SPB*TPB *TPB)Ta| 70_|/߿|O`_|˗_|/߿|'0_/_>O`>*T0_> *TPB *TH!RH!'? 4xaB*TPB *TPB)Ta| O߿|/߿?'߿|/߿ '___?? H <0… :|1ĉM0ĉ'N8qb|'7`o`_| `>_> ̗_|O`>70|O`|'p "/,h „ 2l!Ĉ'8a> (?'0_|˗? 4xaB 6<ϡÄ9d`| '0_/|˗O` W0_ /|̗O`_:\/C:tСC:tСÂ_>/__|ϡC:t/C 9d`|˗/|0 G? /߿|/߿| /_|88`A <0… :|1ĉ+20_|/_>˗O`>hѢŅ,Bg1b>-Z0E-ZhѢEk_> /|G0|-Z0E,FgѢEhѢE-Zh| /| ̗/|˗o`>hѢE,BgѢE-Z$ϢE-ZhѢE1O@$ ̗/_>'`>8`A&TaÂ:TϡC:tСC9tСC:tСC:,ϡC ˗ϡC:tH0C 9tСC:t`>:tСC:tСC9tСC:tp`>sСC:t!|:tСC:tСC sСC:t|*СC:tСC:tСC:t`>70߿ /߿/7`>  $? 4xaB 6tbD$JOD%J(a>%J(QD ̗_| 70_`| O|%J(QD I(0D%J(Q|%J(QD#/_>G0߿| g0_| 'qa>%J(QĆ$JOD%J(a>%J(QD ̗/| ̗_>3_| 'qa>%J(QĆ$JOD%J(a>%J(QD(_>`>߿@˗o|(? 4H0`> (? 4X0_|'`># <0a| *DOB *TPB *T0B *TPB *TP!|/| W`>/߿'p ˇ| 70| ̗/|!B 70_>˗O`|",!ƒ"D`>$XA .dC (QD%J(0|`|` 70ą$˗/|W0_|!'aO`>/_|˗O |'p|#HP`> $H A'p "Lp!ÆBX0D%J(QD˗/|˗o |߿|?8`A#`;/ 70߿| '0|0 | ,X`8`A&TaC!F,OD%J(QD%&'_>70| 70_|Ido`> '0_>970_|-70_|% 'Qa|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|0D%J(QD%JLO|0 7p࿁? #/A˗/߿|˗_| ̗/_>/_|˗O`|$/_| A $H| $H | H*\Ȱ!| H'p "Lp!ÆB(q"Ŋ YhѢE, 0E,O@ DPB O@ !B"Dp |$ <0… :|1b|%J(Qb|I$/_>$JOB$XA .da>$X"D!B80$08`A&TaC!FOD%J`>'p A ,X`,X`A H*\ȰaB$X"D!Bˇ!Bˇ!B"D|˗/|ˇ!B'p "Lp!ÆBH0DIT?8`A&TBO@ !B",/_>"$/_>"D!B 70_'0B <0… :|1"|% 'Qa>$XA .da>$X"D!BC!Bˇ!B"D`>/_˗o`|˗_>"!B"D!B˗!B"!B C!| H*\Ȱ!| H!D!B!D!B!D!B"O`|'0|_|'0Ḃ@$? _>$XA S(0B *̧PB*L <0… " "D!B˗_| /_>+O`>"!o`|'0|"4!ˇ`>"DP`>"4!B8`A&TaC8`AC!BC!Bˇ!B"Dh0߿|8߿| ?  O` /_>!BCp`˗O`>_'p`'P`|/߿| (0@70| H˧PB*D? 4xaB 6L "D!'P߿8`ACp`/|`3`> /|̗O`C!B!D|"$? 4xaB 6D߿8@$80_ ,X| H*L/… .\oB.\(0ƒ'0_|˗/_> ̗`| ̗/_>'0_|˗/߿|˗`|O O@ DP`> "̧PaB$XA .da> O@8| ,X`8`A&T0_ .\0_ ˷pB.\` .\p…-\` 'p "Lp!Æ'p |O@,X`  <0…-\p… .\p| .\X0_| .\p… [pa| П@ H*\p!@'p |O@,X` O@ DPB1dȐ!C 2d_> 2dȐ@ <0„.\X0…'p "Lp!Æ 8|O@,X` O@ DPBcȐ!C 2dȐa> 2dȐ!C 2d/C cȐ`>$XA .da>0'p | $H AO@ DPBcȐ!C ˗!C cȐ!C 2dȐ!C1dP`> 'p "Lp!Æ'p|08_> $H A'p "Lp|1dȐ!Cǐ!C1dȐ!C 2dȐ!2d/_> ˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/| O@'? 4x| &L0a‚K0a„ &4/_ &Lh0_„ &L0a„ &L0aB&LP` &L0a„ &L0!|O@ O@ D80_„ &L`|&L0a„ ˗/a„ ̗0a|( o@$XA .d|"̗Ç>|!|8 ,h %L0a„ /_„ &L0|%L0aB&'0߿| '0| /| &L0a„ &L/a„ ˗0a„ &L0a„ &Lh`>'p "_ &L0|K0a„ &4/_ &Lh0_„/߿|/_>/_| &L0a„ &L(0_„  ̗/a„ &L0a„ &L!| O@ D/߿|&L0aB ̗/a„ &L`|&L0| ˗/߿| '0߿|70߿| &L0a„ &L(0_„  ̗/a„ &L0a„ &L0@ ˗| 7?8p`>? 4xaB "װa|6lذaÆ 6l0_|8P ,h|C!B g0_>"D!Bˇ!B <0… :|1"|%̗/D%J(Q|O@ Hw/ (? 4X0A$XA .dC (`|%J(QD˧`>'p ;H0_|%J(Qāk08`A'p 4h`>8`  ̗ϠA 4hРA ˗ϠA 4hp`>$XA .dC (`|I(QD˗/D ? ϠA8` HA 2!C 2dȐ!C ǐ!C ? 4xaB 6t0!|O@ O@ Hp`>$XA ./C 2dh0_| 2d8`> 4xaB 6tbD HO@ DPB >(? 4xp | O@'p "Lp|2dȐ!CO@ DPB >QD-^ĘQF8P  <0…cȐ!C ˗? 4xaB 6tbD)VxcF9jO@ /,h „ ̗!C 24/_>$XA .dC%NXE5n`>'P`>$XA ./C 2dh0_| H*\ȰÇ#JHŋ3jȱ?߿| H*\80_> 2d`|8`A&TaC!F8bE1fԸcG _>$XA ./C 2dh0_| H*\ȰÇ#JHŋ3jȱA <0…cȐ!C ˗? 4xaB 6tbD)VxcF9vD0@ H*\80_> 2d`|8`A&TaC!F8bE1fԸcG1a|=J̗/G=zѣG=z1G Qb|=zѣG=zqc>ѣ|yѣG=zѣGy0_>%˗cE$XA .dC 'p "LX`> 4xaB 6t!,h „)4/_| C/_>̗OB *T0_| *T_> *TPB *TP| *Tx`>'p "Lp!ÆO| Ḩ`|)<`|)D/B *Ta|*TP| *TPB *TPƒ*T |'p "Lp!Æ>O@$XA SH0_> O /߿߿|  <0… ǐ!C1dȐ!C 2dȐ!2d0_|2dȐ!C 2d0_| 2T| ̗_>'0߿|_P`| 2dȐ|1dȐ| 2dȐ!C 2d_> ̗/_> 2dȐ!C .̗/_> "P`>#/߿|˗O`˗O`| ǐ!C ̗/C ǐ!C 2dȐ!C cȐ|1dȐ!C 2dȐ|1d`>߿|˗/߿| |70߿8`|8`A&Ta|2dp`> 2dȐ!C 2d/C ǐ!C 2dȐ!CcȐ| 70| /_>/|˗O`>cȐ!C ˗!C cȐ!C 2dȐ!C1dȐ`|2dȐ!C 2d`| 24!|#|_o'p 'p "Lp!|1dȐ| +`> 2dȐ!C cȐ!|2dȐ!C 2d`|2dX0C 2L/C 2dh0_| 2d80C 2dȐ!C 2!CcȐ!C 2dȐ!Ä1dȰ`> 2d0_> 2d`|2dp`> 2dȐ!C 2d/C ǐ|cȐ!| cȐ!Å1d8`> ? 4xaB ǐ!C ̗/C ǐ!C 2dȐ!C cȐ|2o`| 2<a2dpa| O@O@ DP1dȐ!Cǐ!C1dȐ!C 2dȐ!2d(0_> #_|˗/|70_| '0_|˗/| ̗/߿| ̗/_> 2\/C88`A&Tp`| 2dȐ|1dȐ| 2dȐ!C 2d_>  ̗!/|/| '0_>/߿|/| /_>/_> 2\/C8p'p "Lp|2dȐ!CcȐ!Á2dȐ!C 2dȐ| 2/C/_>_ '0_| 70_'0߿|o`> 2d/C8pO@ DP1dȐ!Cǐ!C1407p'p| ̗/_>O@ DPB 5l0_ O/߿| /O` '0_|0@/,h „ ˷p@$@8`A&Tp`| 2dȐ|1dȐ| O`>/_O`|!C 2dx0C ǐ|˗O`>˗_| W0| ̗/_>O` /_>2dȐa| 'p ? 4xaB ǐ!C  O@8`A&Oa|̗o`|S80_|'0B *TP*T0B(߿߿70߿(0_|˗/|0߿8`A&Th0B (? ? 4xaB ǐ!C O@ H ̧0a 70߿|)4O`>SPB *T/B SPB SPB *T/ƒ (߿'p| H*\80_> 2dp |O@ Dp`> '0| ̗/B/_OB *Ta> "̧PB ̧PB *T_>8P G`>$XA ./C 2dH`>'p "LH0B O 70̗/_'`>8`A&T| 2װaÆ 6lذaÆ5O@ H| 4hРA /A 4hРA O| ḨPB ˗/B *TPB*T0B *TPB *Ta>8P ,X0A 4hРAgРA 4hРA(? 4xa‚*TPB *TPB)Ta> *TPB *TP!| 80,hP` "̧PB *TPB *D |O@ w$XA .dC (Q`>%J(QD'p@$X!D!B̗!B"D!|"D!| H*\ȰÇ#'Q|%J(QD8p ,h |"D!BC!B"D!B",? 4xaB 6tbD$JOD%J(!| O@ <!B"D_|"D!B"D!B Cp`| ̗O`|`> o@$XA .dPa>sСC:t? <_ &L0|%L0a„ &L0a„%L80|'0| 70_>K0a„ &L0| &L(0_„ &L0a„ &L0aB <` &L0a|&L0a„ &L0aB&`˗o`|/| &L0a„ &$/a„ K0a„ &L0a„ &<08`A̗0a„ "̗/_„ &L0a„ &L0_„/߿| /|̗0a„ &L0aB&LP` &L0a„ &L0a‚ ߿| HK0a„ ˗/_„ &L0a„ &L0_„'0_/| G0_„ &L0a„ K0aB&L0a„ &L0a„ 'p <a &L`|%L0a„ #|7P 0  <80B˗O`|/_|'p࿁70,h „ 2l0C 9t/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/?/_|˗/|'p@ <0a &LP`|%L0a„ #_70|G0_„ K0a„ &L0a„ &LH0_„  ̗0a8`A&TaÃ8 A'p "L/_> *T80_|*TPB`/_SPa| *TPB *TPƒ*T0B8`A&TaC8@'p "L(0_> *T/_|*TPƒo`|70߿|#OB)TPB *TPB SP!| "O@ DPB O@ (? W` ,X` ,X`˗? 4xaB #|߿'߿'p  <0… :|1"|% 'Qa>$XA .d! O@ H` ,X`+X` $0@ H*\H0|G0@ ߿|? 4x`>$XA .dC (Q`> 'P |,h „ 2\П@ 08` 4hРA˗ϠA $0 H*\X0_>g0| ̗o`>2\!C 2dȐ!C ǐ!C2$? 4xaB 6<߿80,H0A 4h`|3hРA8? 4xaB ˗/|(?߿o@$XA"D!B"D!|"D|"Dh0B 'p "Lp!ÆO@ H| 4hРA'P ,h? <0… :|qa˗O`|8P? H&̧P`> *0_D/|'0_Ȩ0|#61"|O@$XA .d?(? 4H070_|'P࿁70߿'p@ o`  <a &/a„'p "Lp!Æ 4Qa>'0_'0_>/| ̗o`K`| 70DI(0D H*\Ȱ!| H'p "Lp!ÆB(q"Ŋ M̗/_>/߿|/_| ˗o`| ̗/_>70_|˗_|˗|7P ,h B&LP` O@ DPB O@ ? 4xaB 6tbD7qb|'67qĉ81Ą 0 <0… 'P ,h| H*\ȰÇ#J/_8a|&N8qb|'曘0@,h „ 2l? 4xP`>$XA .dC%J̗/ĉ M8qbC <0B.\X0…'p "Lp!Æ'p   <0… :|1D8a'N8qĂ&N71a>$XA .d`>$XA8`A&TaC!F(1_|'67qĉ'NX0ĉ&&O@ DPB O@ ? 4xaB 6tbD7qb|'N8qĉM/Ą_|/_>_|/_>_|/_>_|/_>_|/_>_|/_>7Qa|'N8qĉ%˗oĆ$'0_>/_>/?o ? 4xaB .װ!| 6lذaÆ 6l/_ 6lذaÆ 6l`|6l0_C/| '0| ̷0_ 5aÆ5l0_ 6lذaÆ 6̗aÆ 6lذaÆ 6 `˗o`|+`| ̗/_ ˗`>$H A  A $H|8`A&TaC!F/D%J(QD 'Q|o`| G0|g0| O| 70,h „)Ta| *TPB *TP‚)TPB *TPB *T0_| *T_> #o`>o`>O`| )70_|)70|)TPa> "̗OB *TPB *TX0_> *TPB *TPB ˗OB ˧Pa|/? o? ˗`>'0_|˗/_G0_| ,X` ,X`'p "Lp!ÆB(0_>%J(QD˗Oć$J0_| 3`> (q`|%J(QD 'QD%J(Q|I0D%̗/D(1b>˗OD%J(`|$J(QD%J\/_>(QD80,h „ )TPa|*TPB *TPB)TPB *TPB *TP`|*TP| *TPB *TPƒ*T_| *TPB *TPa|)TPB *TPB *TP`|*TP| *TPB *TPƒ*T_|*TPB *TPƒSPB *TPB *TP|)TP*TPB *TPB)TP|SPB *TPB ˗? 4xaB 6tbD ˗"Ņ(RH"EQ80_|(RH"E˗"E)RH|Q0E)RH1b> ˗/E)R(1_|)RH"E#˗"Ņ(RH"EQh`>'p "Lp!Æ&O| H*\ȰÇ#J0_|).O@ DPB > ,h „8`A&TaC! O@ DPB >QDH"E)RH"E)RH"E)RH"EG"E)RH"E)RH"E)RH"E#˗"E)RH"E)RH"E)RH"E)F̗/E)RH"E)RH"E)RH"E)R/_>)RH"E)RH"E)RH"E)R1_|)RH"E)RH"E)RH"E)RH1b|(RH"E)RH"E)RH"E)RHb|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )R`|F9rȑ#G9rȑ#G ̗/ȑ#G9rȑ#G9rH9rȑ#G9rȑ#G)0_|#G9rȑ#G9rȑ#˗oȑ#G9rȑ#G9r|0 <0… :|1A$XA 'p "Lp!Æ>O@ DPB >QDHqa>)RHb|)O@ H*\ȰÇ80,h „ 2l!Ĉ'&̗/E QH"E#H |'p "Lp!Æ>O@$XA .dC%NH"E)FG"|H"E)˗"E)RH"|Q0E)RH1b>˗/E)RHq`|QH"E)Rt/_>H"E)FG|QH"E ˗"E)RHb|Q0E)RH1b>G"E)RL/E)RH"ņHqa>)RHb|)˗"E)R0_>)RH"E G|)RH"ň(R̗"E("(@$XA .dC%N/_>H"E)FGqb|)RH"ņQH"E)R\/_>H"E)FGqb| ˗/|MO@$X`> 4hРA ̗? 4xaB 6tbD7qb|'N8qĉM/D '0|M,oĉ 8qĉ'N81_|'67qĉ'NX0ĉM,/|˗/|70_|G0_|˗/| ̗/_'6̗oĉ'N8qC$? 4xaB*TPB *TPB)Ta| g0߿|/߿|/|W0_ /_>/_> *TPa| *TPB *TPB O@ H ̧PB *TPB *_ /_|(_߿| H*\X0_> 2dȐ!C 2dȐA <0| +`> *TPB *DOBS`>_ /(0@'P࿁_>$XA .,/C 2dȐ!C 2d |O@ D`> *TPB *TP| */_>'0߿|'0_>'0߿|SPB ˗OB *TPB *TPƒ ? 4xaB*TPB *TPB)Ta> ˗/|O`| ̗/|+o`| ̗/_>˧PB *OB *TPB *TPB  <0a| *TPB *TPƒ*T0B SPB *TP| *TPB *TPB "O@$XA SPB *TPB ̧PB*T0_> *TPB ̧PB *TPB *TPa|)TP*TPB *TPB)Ta> *TPB *TP!| *TPB *TPB &̗/B *OB *TPB *Tx0B SPB *TPB "̧PB *TPB *TP| *TP`>8o@/_'0_| H*\Ȑa kذaÆ 6lذaC6lذaÆ 6lذaÆ 6L| '0|70| ̗O`|5lذaÆ 5l0_Æ 6lذaÆ  װaÆ 6lذaÆ 6lذa| ˗`|'0_| G0| 6lذa| 2װaÆ 6lذaÆ5lذaÆ 6lذaÆ 6l0_C+/| p`>aÆ 6laC6lذaÆ 6lP` 6lذaÆ 5PC 5PC %P>$X`O`3h0|70|'p "Lp!C6daÆ 6lذaÆ kذaÆ 6lذaÆ 6l0a8o`>/_|˗O |'p "Lp!C6daÆ 6lذaÆ kذaÆ 6lذaÆ 6l0a 6(߿(? 4x| &L0a„ &L0a„ K0aB&L0a„ &L0a„ ̗0a„ &L0a„ &L0aƒ #_>&L` &L0a„ &L0a„%L0| &L0a„ &L0a„ K0a„ &L0a„ &L0|/| &Lx0_„ &L0a„ &L0aB&LP` &L0a„ &L0a„%L0a„ &L0a„ &L`>` &DÇ>|C>|Ç>|0|`{0| /| a>|/Ç=|Ç>|0Ç>|Ç3` o@$XA%L0_| ̗_|˗/|˗O`| O@/_|'p "Lp` ̷p… .\p… ̷p… .\p… .\p… ˷p!| ̗/|/‚'p`O@  <0ƒ.\X0… .\p… .\H0… .\p… .\p… .\/…'0| 70˗`o… ̷p‚.\p .\pB.\p… .\p… .\p./_|'`>#(? /_|˗o`|$/_|O@ DP!| .,o… .\p… .$o… .\p… .\p… .o… &̷p|-\pB.\X0… .\p… .\H0… .\p… .\p… .\/… .D/_ ˗o… *̷p‚.\p… .\pB.\p… .\p… .\p.\p…80,h „  ǐ!C2dȐ!C 2dȐ| 2dȐ!C 2dȐ!C 2d80C 2dȐ!C 2!C1dȐ!C 2dȐ!C2dȐ!C 2dȐ!C 2dp`> 2dȐ!C 2d/C cȐ!C 2dȐ!C1dȐ!C 2dȐ!C 2d| 2dȐ!C 2d_>  ǐ!C 2dȐ!C cȐ!C 2dȐ!C 2dȐ!Á2dȐ!C 2dȐ| 2!C 2dȐ!C 1Đ@O@ DPB >QDhѢE-gb>-Zh"|-ZhѢE-ZϢE-Z80E,ZhѢEYhѢE-Zh_>-Zh|!hѢE-gѢE-ZhѢ,ZhѢEYϢE-ZH0E-ZhѢEhѢE-gb>-Zh|,ZhѢE-Z/E-Zhq`>YhѢEgѢE-ZhѢ,ZhѢEY/E-ZhQ`|-Z",",| H*\ȰÇ#'Q|$J(QD'QD%J(QD(QD%JlODI(QD%.̗OD%J(QD%*'QD%J0D(QD%J\/D%J(QD%JTOD%J(a>(QD%J\/D%J(QD%JTOD%J(a>'QD%J0_|%J(QD%J(Qa>%J(QĆ$J/_>%J(Qă(QD%J(QD ? 4xaB 6tbD$J$/_>%J(QDI(QD%J(QD$J(QD(`|%J(QD'QD%J(QD(QD%JlOĂ(QD%J/_>%J(QD%J0D%J(Qb|%̗/_>%J(Q|I(QD%J(QD$J(QD(`|I(QD˗/D%J(QD%J|OD%J(a>˗/D%J(a|$J(Q"$H"$H <0… :|1"|%*O| H*\ȰÇ 80,h „ 2l!Ĉ'RX`> 4xaB 6tbD HO@ DPB >(? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛9wthѣI6}uj˗_|'0_|UFOjYVZm>ժUgͧZj.'P ,h|O@ DPB >QD-^ĘQF=~0|-̗O`|!C 2dȐ!C 2dȐg0_|'0_|˗/|/_|˗_B 2dȐ!C 2dȐ!3`| '0_'0߿| +/|/߿| 2dȐ!C 2dȐ!Cb1A /߿_߿|'p` '0| <0… :|1ĉ+Z1ƍ;z1| '0|'0_|̗o`>/_> A $H A $H 3`>O`| ̗/|˗/| ̗_|@ $H A $H 330߿| 'p|/_70,h „ 2l!Ĉ'Rh"ƌ7rc|Y̗0| $H A $H A&`UG0_> A $H A $H@ $H A $H A0H A $H A $H/_|'0_>8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYg5/_>/_>ˇ-Zh}O@'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? Y? ? 4xaB 6tbD)VxcF9vdȊ H| H*\ȰÇ#JHŋ3jȱǏ CVП  <0… :|1ĉ+Z1ƍ;z2d| H@ O@$XР|̗/_>$XA .dC%NXE5nǍ8`A8P`> $H A/|8`A&TaC!F8bE1fԸcG5'p 'p|8߿7߿ |_o߿8`A&TaC!F8bE1fԸcGO@O@/|_> ̗/|O`>/|/߿|O@ DPB >QD-^ĘQF=~L? G0_>/O`>#/$o`O@ DPB >QD-^ĘQF=~T? '0_|o`|'p_> 7_| 70߿|'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?*O@O@o`>o`>O`>#/_>'0|/_>$XA .dC%NXE5nG H| (0|8_7߿ _'?˗O`|˗/| H*\ȰÇ#JHŋ3jȱǏ 'p 8`A&T_>8`A&TaC!F8bE1fԸcGO@'p "Lp|O@ DPB >QD-^ĘQF=~dП  <0… :|1ĉ+Z1ƍ;z2dE$XP`>$XA .dC%NXE5nG!+˗_|˗ϟ| <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9,;;PK.$PK+AOEBPS/img/lobflbuf.gifgGIF87aXH?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,XH H*\ȰÇ#JHŋ3jȱǏ CII H 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/_2dȐ!C 2dȐ!C 1_ 2dȐ!C 2dȐ!CԘ/|!C 2dȐ!C 2dȐ%̗/|!C 2dȐ!C 2dȐ%̗/|!C 2dȐ!C 2dȐO@ /_|'0_|/_>8`A&TaC!F8bE1fԸcGAZg0_/_>'0߿|_ 70_Ȑ!C 2dȐ!C 2| ̗o`>#/߿|/_> 2dȐ!C 2dȐ!C/_| ̗o`>/_| /? |,h ƒ H*\ȰÇ#JHŋ3jȱǏ g0_>`>_>/|T$H A $H Ai1_|8P '0? ߿|7߿'p "<? 4xaB 6tbD)VxcF9v0 $+/_ ,X`A ,X`O@ DPB >QD-^ĘQF9滘a>'p ,h`$XA .dC%NXE5nqc;ϣ|!ѣG=zѣG=2w1|ydc|=zѣG=zѣG'`>(08p`| HK0a„'p "Lp!ÆB(q"Ŋ/b̨q#ǎ!̗`>S0 < ,h „'p "Lp!ÆB(q"Ŋ/b̨q#ǎ!̗/|1ѣDŽ8 A$XA .d!|, <0… :|1ĉ+Z1ƍ;w0߿|O`>;ϣG 9̗ϣG=zѣG=z|`> #O`>CϣG =ѣG=zѣG=:̷0| 1̗"|,h „8 | ? 4xaB 6tbD)BO@ D? 4xaB 6tbĈX0| '0_|'Qb|-1D%J(QD%&'1b>%J(QD-'`>C/|$J/_"(QD%J(QĄ$F'QD%J(`>$0| -'QĂ拘OD%J(QD1D%J(QăX0|1̗0_|#+`拘OD%J(QD;0#| ? 4xaB 6tbDX0|5̇0_|ID`拘OD%J(QD;`+/a>%J(QD1O@ O@WP`| ̗/@O|˗/|/_'0߿| o|8p`>$XA .dC%N0| ̗_XbŊ+VbEs`> /߿|˗O`| /|/߿|˗/_˗/|71_Ŋ+VXbŊ w0| W0_|+VXbŊU0|/|70_|/|o`|/_>/|+VXbŊ+6/|0@ o@  <0… :|1"|%B̗/_> (?_'P /|O` ߿|| H| H*\ȰÇ#JH |OO`>$`>'p "Lp!ÆB0Ds` _|70_ 70߿|/_>˗O`$'QD%J(QĈ/| '0_| !̗OD%J(a>%w0| g0|'0_|!'`>ooO@  <0… :|1ĉ ;O`/? 7P 8p| H*\ȰÇ#'Q;OD I4OD%J(QD-'1b>$J(QD(Q| ' |'p ̇!| H*\ȰÇ#JHq`*:̷0_Ŋ+VXQac/a'H0_Ŋ+VXbŊ1Wa*VXbŊ U0| U1_ł*VXbŊ+Va-̗bŊ'p "L ` ,X`$`A ,X` ,(0_ ` H8`> 4xAO@ D O| H?$X? Ϡ| 4h`>'p "Lp!Ã6l`6l`|k/_ 6/_Æ-װ!|5lP`>6l0_| 0_5a caÆ 6 4xaB H!!Ḃ!B3!Ḃ0Ḃ|̇ |,h | HP`>$XA .dx0_Æ ̷0_Æ 6lذaÆ .̷0_ÆװaC kذ!|-̧0_ÃkذaÄ6lذaÃ'P|o'p| ̗/| G| H*\ȰÇ#:̷0|70_| 3 |߿߿߿| o|˗/_>0`> 7p`o@8p8_>$XA ̷p… .D`` /߿| ̗0| .\p… .\pB)w0_| '0_ ;`>O`| W0| ̗_#`+`̷pa-\pB.\p… w0| G0| ̗`` .\p… .\p!| w0|'0_`O``;O`| '0(0@7_8_ 70/߿| o|O@ DP!|-\p…w0|#Oa|+_#o… .\p… .\h0|G0_| g0|W0| ̗/|G0߿| '0|W0_|G0߿| #_>/_|G0_|-\pB[p… w`>߿8? O| 80@ <0… :|1D+/|`>(0@ /_|/|˗|'P`8|߿| o` 7P (0_o|̗o| 80@ <0…W0C 20'p|O`>#H_|  H*\ȰÇ#J8?#| G| OG0|o`>8P 70߿| G070 (? O@ /_|  H*\0!,h „ /| '0_|̗o`˗_cȐ!C 2dȐ!C /| ̗_ #_ #o` /|/|70|W0|/C`/߿|+!C 24!C 2'0A߿|G?˗o |?  <0… :|1Ć;/_|˗O`|70|̗/_>/_| W0|̗/_` /߿_/GP`#(0_| ̗/O@ DPB2dȐ!C2dPa> 2dȐ!C 2dȐ| g0C 3!C P`*ǐ!C 2dȐ!C cȐ!C2dȐ!C 2dȐ!C 1dh0| 2,`> .g0c0C 2dȐ!C 2,!C cȐ!C 2dȐ!C .ǐ|1dȰ`>2d0| %a> 2dȐ!C 2dX0C *ǐ!C 2dȐ!C 2\!C cȐa|'p "L(0| )O!| *TPB *TPB)TPB*TPB *TPB *T/B ̧PB̧PB%w0_>SH0_> *TPB *TP H*, <0… :|1ĉ8`A 'p |,h ƒ 0 <0!A$08` H ,h „ 2l!Ĉ|'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z4 ;;PK" PK+AOEBPS/img/lnpcc014.gifGIF87aW?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,W H*\ȰÇ#JHŋ3jȱǏ H*\ȰÇ#JHŋ(0_˗o|(0_| ̗/_˗o|(0_| ̗/_˗o|(0_| ̗/_˗o|(0_| ̗/_˗o|(0_| ̗/_˗o|o@8`A&TaC!F8bEÈ#F1b|a>1bĈ#F1:̇#F1bĈ1F1bĈ#FÈ#F1bĘcD$X ,h „ 2l!Ĉ'RDbŊ+VXbE*R1_Ŋ+VXbŊWbŊ+VXbEWbŊ+VX"|UXbŊ+V"|U/_Ŋ+VXb|UXbŊ+Va|(0_|U\/_|*VXbŊXbŊ+V(1| /_Ew0|˗/_>'0_|˗`|˗O`|˗o`|˗o`| ̗/߿|/_|XbEIP>$Xp |'p (?/_>$XA .dC !0_|h0|̗`> '߿|o 70߿o??'o? H*\ȰÇAo`/|A"D!Ba>/ă;/a|0`> ̗O`|˗o|/_> ̗/_>˗o`|˗_|O@ DPB >| ̗/|˗/_|O |7߿ O@ DPB >X0|˗/| ̗0_> | '?0 /|'0_>'0_ O O ,h „ 2l|#O`>O`>O`/|O`|!B"D 1̗_| ̗0| /_'`> '?/| /߿|'0_˗_|/|/_'p "Lp!ÆW0|̗O`>O/߿|'߿|O ,h „ 2l!ă'0_%w0_|˗/|/_|+/_|+0@| O?'p "Lp!ÆW0| ̗/_>˗/| '0߿|O@$XA .dC1O`| K`3/_DE1bĈ#W0| 70| G0| /|O`>1bĈ#F$/bă"1a| `>8`A&TaC!"W0C o @_70߿7? 4xaB 6ta> BL|!B"D!BQa>!B"D!B|a>/D!B"D!BT"D!B"DC"Ą "D!B"D"D!B"ć1!|,H? 4xaB 6tbD)"WbŊ+VX|+VXbŊ+VX`+VXbŊ XbŊ+VXbŊWbŊ+VXb+VXbŊ+VX0_|+VXbŊ+'p "Lp!ÆB(q"Ŋ/O| H*\ȰÇ#JH1E)RH"E)R`>)RH"EC"E)RH"E)JG"E)RH|QH"E)RH"E(RH"E)R<a>)RX`> $ <0… :|1|%J(QD%JLa>%J0_|%J(QD IO@ DPB H*\ȰÇA"D A"D!B|/|/D!Ba>!B0_|A"D!B|1_> _>!B|!Ba> /D!B"D c|A|"D! "D'0|"D!B0_| ˗`|̗/|˗`˗`>#/D!B(0D!Bto`> "DAD)P> 7p@ O| /80 80@o| ̗/_>/_|˗/|70_|˗O`|˗/_/_|˗_| H!̇!B"D!B3?$XA .dC%>/߿'p|'0AG|/|/|/߿| ̗/߿|'0|˗_|'0_>'p 7@$XAC!B"D|̇|,h „ 2l!Ĉ!o G|#(0_|GP`#|/? ? ' O? O? ߿ '? H!̇!B"D!B g0B'p "Lp!ÆB/C'p`8_o|o` (0_|'P?'?? '? '߿( 3`#`> O?' ?'?' O? <a &L0a„ ̗a &L0a„ &L0a„%4/߿|`>3/|̗/|̗/_>'0_>G0_> ? ߿ o`O ,h B&L0a„ &Lh0_B&L0a„ &L0a„ W0_ ˗/|(? /_|7p|7P`>$X ˇ!|"D!B!D!B"D!"? 4xaB 6tb c/b>"拘Ob|̗"|'p "L0a "O@ 'p "L/!| &L0a„ &L0a„ +/| Kx0_B"̗0a„ &L0a„ K0a‚"̗0a„ %D/a„ &L0a„ &L0| K0_ƒ"̗a &L0a„ &La &,/!| &L`> $ <0… :|1|E1_|I(QD !'Qb|I0_|%J(QD IO@ DPB H*\ȰC[/|"P`{(0Ç>|Ç=|Ç>|Ç-̗o`|{(0|=<`=|Ç>|H0Ç>|Ç>|h0|0a5̗/_;|>|Ç0_>|Ç>|H0|0a5O@$X_| g`| H*\ȰÇ#W0_|(QD%J(1b'` H8`A g`| H*\ȰÇ#W0_BO@ DPB >QĂ˗b|8`A'p @$XA .dC%BO@ DPB >Qā˗b|5̗/_>K0 <0… :|1ć H*\ȰÇ#Jta>M4/bM`&N8qĉ{0 H*\ȰÇ#J|a拘o|E7qĉ'N(0|M8qĉ'Na拘oă"8qĉ'Noĉ'N8qĉM80_|'1ĉ'N8q|'N8qĉ'N1D%J(Q|%J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(Qb|1D%J(Q|%J(QD%JLa>%JX0|E'QD%J0|$J(QD%J/D%J$/|E'QD%J0|(QD%J(1b>$XA .d`>СC:tС|'p ,h „ 2l!Ĉ'G"E̗`> 4xaB 6tbD8`A&TaC!F8q`>)R|/| 8`A&TaC!F? 4xaB 6tbD H"Ň拘"E)R0_| (? 4xaB 6tbD!7qĉ(? 8p@8`A&TaC!Fa|$J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QD%(QDE'QD%J0D%J(QD%(QD8`A H*\ȰÇ#W0D%J(QD(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QDCOD%J(QD%J0D%J(QDCOD%>O@ 'p "Lp!ÆB/D%J(QDCOD%>1D%J(Q|˗/b僘/D%J1|%J(a$J(QDx0|{O`>'QD%Ja|'0_|(QD%'QD `>w0DI(QD'1|I1D%J(`>%JH0_> +/|I/_|8`A&TaC +|A_>"D!B,"D!:70| ̗0_|˗/߿|̗/_ ̗`| ̗/| ̗/_>/_|˗_|!Bh0_|bA/D!B"|!Ba C/|_|/_>/_|̗/߿|˗/߿|O`|8 '? 4xaB +|cH0Á̗O`> 2dȐ!C C!C 2d0|%̗`>'0_ @ ̗/_ /|'0_>'0_ ̗/_˗O`| H*\80Cǰ`>(? ̗/_>$XA .dC"D` w0_|0@'P`|8?/߿|'0_|/_> O? O@ DP2dȐ!C 2dȐ!C ̇0C 2dpa|3/_|!'`> '?/| /߿|'0_˗_|/|/_'p "Lp!| 2dȐ!C 2dȐ!C C!C 2d0a>!̗/_>'0_70_ ? @ o`O ,h „ ǐ!C 2dȐ!C 2dȐa> 2dȐ!Äǐ|cx0_> 2dȐ| 2dȐ!C 2dȐ!C cȐaA$X ,h „"̗0a‚3/_B  <0… +aÆ 6lذaÆ 6lP`  א` א` 6lذaÆ .W0_Æ 6lذaÆ 6lذ| 6!| 64!| 6lذaÆ 6\` 6laÆ 6lذaC6l(0_C6lh`> $ <0… :|1|I(QD%J(q`>'1a$JL/b>%J(QD$J(QD%J0| 哘0_| Il/b>%J(QD$J(QD%J0| 哘0_| ˗O|E'QD%J0D%J(QDCa|拘!|'p 3/A'p "Lp!ÆB/D%J(QD%c/Ą'p O@WP`  <0… :|1|%J(QD%Ja|;0 <8? |  <0… :|1|I(QD%J(a>IL/b  g_> O@ DPB >_$J(QD%J0C O@ w| ˗;xp`>$XA .dC+OD%J(QD IX0_|%w0_|%J(QD I(QD%J(1a>$J,/b>;/b>%J(QD$J(QD%J0|%1D E'QD%J0D%J(QDCOĂ"(1a$J(QD(QD%J(Q|%O@ 'p "L/!| &L0a„ &L0a„ O@ DPB >QDUXb|UXbŊXbŊ+VX`+V0 O@ DPB >_$J(QD%J0D%J|/b>%J(QD (QD%J(Q"|%J(a$J(QD+OD%J(QD I(Qć"(QD%JTOD%J(QD !'QD ˗`$J(QD(QD%J(Qb|I(QĂ3/b>%J(QD$J(QD%J0|%J(`|1D%J(Q|%J(QD%JOD%"(8p'p "Lp!ÆB/D%J(QD%(QD1D%J(Q|%J(QD%JOD%̗a$J(QD+OD%J(QD I(QĂ拘OD%J(Qa$J(QD%J0D%J$0@ o  <0… :|1|I(QD%J(a>%J0_|%J(QD I(QD%J(1a>$J(Q|I(QD%*'QD%J(QĄ(QDE'QD%J0D%J(QDCOD%>1D%J(Q|%J(QD%JOD%>O@ 'p "Lp!ÆB/D%J(QD%(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QD(QD%J(QD%"W0D%J(QD(QD8`A H*\ȰÇ#W0D%J(QDCOD%>1D%J(Q|%J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(Q|I(QD%*'QD%J(QĄ(QDw0|I(QD%*'QD%J(QD$J(Qb|w0_>$J(QD(QD%J(Q|%J(`|g0_|I(QD%*W0D%J(QD1P>$XA .dp` Ca>:tСC+ϡC:tСC:tϡC:To`>CϡC:tСC sСC:tСCsСC`>sСC:ta:tСC:tСÂsСC'0|!СC:tС|:tСC:t|9tСC w0|9tСC:t0C:tСC:t0|:tСÃСCr!r!'p "Lp!ÆB(qb|QH"ł"H"E):G"E)RH"|)O@ 'p "L/!| &L0a„ &L0a„ O@ DPB >QDU/b拘bŊ+Vx0_|+VXbŊ+H1_|+O@ 'p "Lp!ÆB/_|%J(QD%JdOĂ"(1a$J(QD+OD%J(QD -O| HA8`A&TaC!F`>%J(QD%̇0_|$"1|Id/b>'QD%'QD%J(QĄk/D"k0@ H |3/_>4hР̗? 4xaB 6t0Ç>|Ç>da=\ |,h@$X_|3O`>/_>/_|˗/߿|̗/_ ̗`| ̗/| ̗/_>/_|˗_| 4hРA O@ DPB >QĈk/E'p O@WP` WP`˗_|˗O`˗_|˗_| G0_|/_| ̗_>O 7@$XA ̷p… .\p… .\pƒ ̗oB̷P |'p ` gP`|0 7P '0_|7_|/|˗/|70_|/_>'p "L` .\p… .\p… ̷P`| ̷`˗oa|70|0@7P? /@O|/_> ̗/_>˗O |O8`A&TH0_| .\p… .\p… .o|.$o| ˷pa `> ̗/߿| O O|'0_|/_> ̗_|/|'0_˗_| H*,` .\p… .\p… ˷pB̷pB+/|!̗o`|˗/_>'0_70_ ? @ o`O ,h „ +o… .\p… .\p…-\a-\` ˗a .g0_[p… ̷p… .\p… .\pa|-\a-\p| [pa|̗o!A O@ DPB5lذaÆ 6lذaÆ CaÆ5$aÆ5$aÆ 6lذaÆ 5lذaÆ 6lذaÆ CaÆ8`A HK0_„ &L0a„ &L0a8`A&TaC!F8|+VX1_|+VXbŃ*VXbŊ+V4bŊ+'p 8`A&TaC!FOD%J(QDI(Qć"(QD%JT`>%J(QD%2'QD拘OD%J(Qa$J(QD%J0D%J|/b>%J(QD (QD%J(Q"|%J(`|3/_>$J(QD(QD%J(Qb|I(QĂ3`>(QD%JTOD%J(QD !'QD '0|`>%J(QD$J(QD%H'p "Lp!ÆW0|9tСC:t0C:tСC:t`>:ta `>:tСCs8`>8`A_$2'1a$[`>%JOD%̗0_|;OD%J(Qa3/_o`>_>˗o`| ˗O`|˗/|70_|'0_|70|/_ _>$XA .808P`>$XA .dC+oa '0_ '0|'0߿|O`|O`˗_/|_|˗O`>/_ '0_|(Qā$J(Q|I(QD%*W0B ߿@(0_>_|˗o| 7P`/߿|'0߿|70| /_>/,h „ 2ǐ!C 2d0Â2dȐ!C 2dPa>70|70_|O` ߿߿|O|/_|(`>/߿|_@@$XA .̇0… .\pB̷p… .\p… [h0_|`|O`/| 70_>+O`|_|˗O`/|˗O` '0߿|-\p…[p… .\h0B.\p… .\p| 3/_ 0߿@o|0 'p "L0a>.\p… O@ 'p "Lp!ÆB/D%*'QD%J(RHbA$X ,h „ 2l!ĈEO@ 'p "Lp!ÆB(1|%J(a$J(QD拘/b>%J(QD !'QD拘OD%J(Qa"(QD%J(1D%J|/b>%J(QD";/_$"̗OD%J(a>%JX0_|E'QD%J0_| '0|G0_>%J(QD$J(Qb|1D%J(Q|%̗/_ g0|/_|G0_|'0_>'0_|߿?(@$XA .d`>:tPa|p`>:tСC+/!|/߿'p`'0߿|/_|/_ 7_|'p| /߿O? <0… СC*70| 8`A&TaC!F_O|˗/_>O ? |70?'? 4xaB &̇0_ 6lp` K0 <0… :|1ć_>7p|0@?/_|/߿|˗/@ ''p "Lp!ÄkذaÆ 70| kذaÆ 6lذ| 'p? /@ 'O'P`|/|'0_˗O`|/߿| <0… CaÆ 6l80_> kH0_Æ 6lذaÆ k(0_| ˗`'0_|G0_|W`>|(  O@ DPB !װaÆ 6$/_װaÆ 6lذaÅ /_C6<`| װaÆ 6l0_Æ 6lذ| kذaÆ 6lذ| kH0_Æg0_(? 4xaB 6t0Ç>|0C>|Ç>$` Ç>|Ç>|Ç Ç>|!|-P`>|Ç>B$X ,h „"̗0a„ &L0a„ &L_ ̗a &L0a„ &L0a„ &̗0a„%D/a„ 'p 8`A&TaC!F` H A$XA .dC%COĂ"(1a$J(QD(QD%J(Qb|IX0_|%&1D%J(Q|%J(QD%JLa> 拘OĄ"(QD%JTOD%J(QD !̷0_> E'Q|E'QD%J0|I(QD%J(1|$*1D1D%J(Q|(? 4xaB 6tbD [/E"c/_|w0_|)RH"E K08`A&TaC!F8`QD/b  g_>8`A&TaC!F? 4xaB 6tbD[/E'p O@3/ H*\ȰÇ#J| <0… :|1ĉ-̗"|8`A'p Ϡ8`A&TaC!F`  <0… :|1D[/Ą"k0 H|3h`>$XA .dC{/D%J(QD !̷0_> E0_|$ w0_|%J(QD I(QD%J(1a>$J,/b$61D%J(Q|%J(QD%JOĂ"(1a$J(QD(QD%J(Q|%1D E'QD%J0D%J(QD%( |,H? 4xa| K0a„ &L0a„ &L/_| H*\ȰÇ#JH1E)R,0 O@ DPB >_$J(QD%J0D%J|/b>%J(QD (QD%J(Q"|%J(a$J(QD(QD%J(Qb|I(Qć"(QD%JTOD%J(QD !'QD ˗`$J(QD{/_>%J(QDCOD%'0|I(QD%*`>8`A&TaC!F8`>)Rt/|EG"E)Rt!|O@ DPB >QD(RHQb>'p "Lp!ÆB(",h „ 2l!Ĉ'G"E̗`> 4xaB 6tbD8`A&TaC!F8`>)R|/|QH"E+/a|QH"E)R"EK/b>)RH|%̗"E)RH|)R`>80? 4xaB 6tb$J(QD%J0|%J(a$J(QD(QD%J(Qb|I(Qć"(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%J'QD拘OD%J(Qa>%J(QD%J'QD'p 8`A&TaC!FOD%J(QDI(QD%J(QD+OD%J(QD I(QD%J(QD+OD%J(QD I(QD%J(QD+OD%J(QD 8`A&TaC!F8bE 'p "Lp!ÆB(qb|QH"E)RH"E(RH"E)R<a>)RH"E)R(1E)RH"E!G"E)RH"E%H"E)RHb>'p 8`A&TaC!F8"|+VXbŊ+Wb*VXbŊ+VD`+VXbŊU/a*VXbŊ+VD`+VXbŊ1O@$X|w0,h „ 2l!Ĉ'RD`+VXbŊ1̗|w0_Ŋ+VXbŊWbŊ+VXa>W`XbŊ+VXa+VXbŊ!`>8`A`>$XA .dC%N0_Ŋ+VXbEc/_E;b+VXbE*VXbŊ+J̇0|*̗0|+VXbŊ+"WbŊ+VX| h0_|UXbŊ+V0D O@ DPa| )DO|)TPB &̧P`| ̧`> *TPB *TPB *T0_| SPB )O!| #OB *T0a> *O| *TPB *TPB *Ta W0_|G0_|˗o`|˗O`|˗`|˗`| /_|'0_|70_|˗/_>/_OB *T/B ˧`> *TPB *TH!RH!R!'P`7_| ̗o|O`>'0߿|O`|O`/߿| /_>O`|˗O`>/߿|/|O@ DPƒ2dX0Â2dȐ!C 2dȐ!C 2`> ߿|O| /| /_>7p`(0| ̗_O`>O`|˗O`> <0…!ǐ!Âǐ!C 2dȐ!C 2dȐ| #o`> O`| '0|(߿߿@_|7|߿|/߿@߿ H*La "O@ 'p "Lp!ÆB(q"E$#/|'0߿| '0|_'0| ̗_|˗O`|O` '0_|˗O`>bŊ!WbŊ+VXbŊ 擘`|3O` /߿| O| 7P`| O|G߿|o#o8`A&Tx0| H*\ȰÇ#JHŋaĈa>1bĸ0F1bĈ#FÈ#|1bĈqa>1bĈ#F1:W0F1bĈD$XA .dC%NXE ? 4xaB 6tbD)H"E)RH"EG"E)RH|)RH"E)RHQb(RH"E)Ra>)RX`> $ <0… :|1|%J(QD%JLa>%J0_|%J(QD IO@ DPB 8`A&TaCsСCp`>:tСCsH0Á p`>9ϡC:t/|:tСÃСC:tС| s80Cp`>9tСCsСC˗`>9tСC:t0C 'P GP`||||#(0,h „ 2lp`>|`> {(0Ç>|Ç̗0_ /|`> W0|g0| {ÇÇ̗O`> Ç>|!|%O? o|˗o|˗O` o|80  <0… :Ç>$o`> Ç>|!|%O|_>`>GP`#/A#/A#H0,h „ 2lp`>|` K0 <0… :|1D 'p|`> / G0̗/A8`A&TaCsСC` H*\ȰÇ#J|_7p` O` 7p` o|(0,h „ 2l0|:tС|3|:tСC:|_ ̗o` o`|80_> o|7P`>$XA .da>:tСÅ;|:tСC:_|O@|#(0AG_>˗|'P O@ DPB Ç>P`>|Ç {80CP`=Ç>|80Ç>|0C>|Ç>$|{/C P`>||.O@ 'p "L/!| &L0a„ &L0a„ +/| Kx0_B"̗a &L0a„ &̗0a„%D/a„ K0_„ &L0a„ &L0a K80_B̗a%D/a„ &L0a„ %L0a| K0a„ H A$XA .dC+a 拘/b$J(Q|%1D E'QD%J0D$XA .d? 4xaB 6Da>  E0_|$ w0_|%J(QD I1|E1D%Jo!|'p  ;xp`80,/_>4X0,h „ 2l!Ĉ=̗/_ 拘/b$J(Q| (? 4(0A$X H`| W`A8`A&TaC!F!|'p ,/_+X| ? 4xaB 6t80=D |,h@$Xp`>0 <0… :|1D Hp` W`A ,(0_O@ DPB ̷0_=D| ˗a|%O@ DPB >Q"D$80_+X| `'p "Lp!Æc0@ H||`P`=|{ÇCÅ |=Ç>|C|{(0C Ç&̇0Ç =Ç Ç>|!|{(0 P`=|Ç !|{a=|Ç>|H0Á _=|>|Á>\0 O@ D0_B&L0a„ &L0a„ ˗0a%||{Ç>|`{(0 P`=|Ç !Ç>P`>|Ç {80CP`=Ç>La>|`|{(0Ç>|Ç=̗_=|{(0Ç>|0|>|a|P`>|Ç {/_|{/C P`>|0a>>|C g0C>|Çz! 'p ,`,XP` W`A8`A&TaC=|Ç̗`> 4xaB 6tbD8| `,XP`  <0… :Ç><` H*\ȰÇ#J| +X| `,XP`>$XA .d|>|a|{(0Ç>|Ç̗`>8`| `,XP`  <0… :Ç>,/a=|Ç>|H0_| ˗|{(0C Ç>Ç>$0@ o  <0… :|1|%'0_|E1_|%J(1a>$J(Q|I(QD%*'1_|E1_|%J(1a>$J(Q|I(QD%*'1_|E1_|%J(1a>$J(Q|I(QD%*'1_|E1_|%J(1a>$J(Q|I(QD%*'1_|E1_|%J(Qb>%J`> $ <0… :|1|E1_|E'QD%(QD%J(QD%"W0C$XA .d? 4xaB 6t80Ç>|Ç>|ÇÇ>|Ç{Ç>|Ç>|a>|Ç>||>|Ç>|Ç"W0Ç>|Ç>4a>|!|,H? 4xaB 6tb$J(QD%J0|%J(a$J(QDx0_|=̗/|$(QD!'QD拘OD%J(Qa> 0_s_|(QD!'QD ˗`>w0D%J(Q| '0|9̗O` 0_|%J(Q|%J(`> 3Oa>%J(QD$70|E0_$J(Qă$J(Q"|3`>$J(Q"$H!'P`80|8_(0/ '0,h „ 2lPa>|` +/_|=|Ç>|H0_||{H0_>  <0… :LÇ>$o`> `>|Ç +|{/|'0C>|Ç =|Ç g0_|=|Ç>|H0C{(0C O@˗`'p "Lp!ÆCÇ>$/|̗O`>|Ç>$Ç>|Ç2̇0Ç>|X0_|̗/|>|ÇÇ>|ÇCÇ>||>|ÇÇ>|ÇÇ>P`>|Ç {Ç>|Ç {Ç{(0Ç>|Ç=|Ç>|Ç=|`> $ <0a%L0a„ &L0a„ &`>$XA .dC%N""H`(RH"EG"E)RH|)1E8`A H*\ȰÇ#W0D%J(QDc/|$1D E'QD%J0D%J(QDCa|˗O"|I0_|%J(QD I(QD%J(1a>˗_|$1|80|˗`>%J(QD$J(QD%J0| /_| 拘!|'p 3/| O@ DPB >_>%J(QD%J0_|'` H8`|| O@ DPB >_>%J(QD%J`>'p ;0 <8? |˗Ϡ| H*\ȰÇ#'QD%J(QD'p`>$X|w |'p `>  <0… :|1|I(QD%J(a>/_>E0_|;/a$J(QD+OD%J(QD IX0_| I,` w0D%J(Q|I(QD%J(a> O3/_>$J(QD(QD%J(Qb|IX0_|%&1D%J(Q|%J(QD%JLa> 拘OĄ"(QD%JTOD%J(QD !'QbA$X ,h „"̗0a„ &L0a„ &L_>$XA .dC%Nh0_Ŋ+V1_Ŋ+VX`+VXbŊ XbŊ"XbŊ+WbŊ+VX|+VX`> $ <0… :|1|I(QD%J(a>%J0_|%J(QD 'QD%J(QD$J(Q|I(QD%*W0D%J(QD(QDw0|;OD%J(Qa>%J(QD%&̇0D%J,O`> SOD%J(Qa>%J(QD%&̇0D%J$/|̧0D%J(Q|%J(QD%JLa>%J0|˗a>%J(QD$J(DI$DI$@8`A&TaC3O`:tСC:tϡC:tСC:th0C:t0_>;ϡC:tСC sСC:tСCsСCK`|СC:tС|9tСC:tСC9tСC (? /_O@ DPB >_$J(QD%J0D%J|/b>%J(QD (QD%J(Q|I(Qć"(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(!|,H? 4xaB 6tb$J(QD%J(1D%J(QD%J(a>%J(QD%J'QD%J(QD%JD`>%J(QD%2'QD%J(QD%JD`>%J(QD%2'QD%J(QD%JD`>%J(QD%2'QD'p 8`A&TaC!F`>%J(QD%̇0D%J|/b>%J(QD$J(QD%J0|%J(a$J(QD(QD%J(Qb|I(QĂ;`|'QD%J0D%J(QDCOD%'0|)'QD%J0D%J(QD%(QD`>(QD%JTOD%J(QDI(QD3`|!'QD%J0_| H*\ȰÇ#JH1E):70| w0E)RHa(RH"E)RT"E`H"E):W0E)RH"E QH|3`|G"E)Rt`>)RH"EC"E˗`>C"E)R0E)RH"E!G"E 拘"E)R0E)RH"E!G"E 拘"E)R0E)RH"E!G"E 拘"EQDE? 4xaB 6tbD)WbŊEWbŊ+V_$J(QD%J0DE'Qb|I(QD%*W0D%J(QDk/_| 拘OĄ"(QD%JTOD%J(QD !0_>I,/b>;`|(QD%JTOD%J(QD !̷0_>$1|(0_ `>%J(QD$J(QD%J0| 哨0_| (? /_>̗O`>'p "Lp!ÆB/D%J(QD%[/D'p O@3/_|? 4xaB 6tb$J(QD%J(1|X0A$X H|+o`>'p "Lp!ÆB/D%J(QD%c/|$1_CO@3/_|? 4xaB 6tb (QD%J(Q"| ˗O|5̗/ā+/|I(QD%*W0D%J(QD(`X0|ˇ0D%J(Q|I(QD%J(a> 拘OĄ"(QD%JTOD%J(QD !'Qb|I0_|%J(QD I(QD%J(1a>$J,/b>拘OD%J(Qa>%J(QD%&̇0DE'Qb|I(Q"$H" <0… :|1ĉ H`> $ <0!|,H? 4xaB 6tb$J(QD%J(1D%J|/b>%J(QD$J(QD%J(1D%J|/b>%J(QD (QD%J(Q"|%J(a$J(QD+OD%J(QD I(QĂ;`|(QD%JT`>%J(QD%2'QD `>;OD%J(Qa>%J(QD%&̇0D%J$/|̗O`$J(QD(QD%J(Q'p "Lp!ÆW0|9tСC:t0C:tСC:t0|:ta|70|:tСC:p |'p "L0_>OB *TPB)TPB *,/| w0B *TPB *T`>)TP„̧`> *TPB SPB *TX0_|`> *TPB *TP!|)`|˗o`| ̗/|˗/| ̗/_| ̗/|˗_| '0_|'0_|7`>? 4xaB "װaÆ 60@ o| (0,h „ 2l!Ĉ̷0_|/|O`>'0߿|O`|O`/_|_|'0|O`|'QDI(Qć"(QD%JT` /߿? 7_| '0߿|/o| ̗o`>8_|70|O@ DPB sСCp`>:tСC+oa`>˗/| `>7߿߿| O`> '0߿|˗/| '0|'p "Lp!CkذaÆ 6!| 6lذaÆ 6\!|O`o`>_|70|`>˗O`>'0_/|70_Æ 6l(0| 6lذaÆ5$aÆ 6lذaÆ 5$`|+O` /߿| O| 7P`>/_| ̗/?'o'p "Lp|1dȐ!C &O@ 'p "Lp!ÆB/D%J(QDCOD%J(QD%J0D%J(QD%(QD%J(QD%"'QD%J(QD H*\ȰÇ#JHŋ(0,h „ 2l!Ĉ'RG"E)RH"E%+"E)RH"E(RH"E)RH|QH"E)R0E)RH"E)R`>)RH"EC"E)O@ 'p "Lp!ÆB/_D$XA .< <0… :da>|a=|Ç>|H0C P`=Ç>|0|>||{Ç>|`=|{(0Ç>|a>>|Ç Ç>|!|{(0C P`>|C>|Â;|>|ÇP`=|{Ç>4Ç>,O`> Ç>|!|%̗/C ? Ϡ8`A&TaC "D`>A"D!BT`1 _>!B|!Ba /D!B"D K08| `,XP`>$XA .dC B|̗`> 4xaB 6tbD8| `,XP`>$XA .d!|=|Ç g0_B$XA .dC%>O@,XP` W`A8`A&TaC !Ç̗O`> Ç>|!|(? W`A ,(0_O@ DPB 2̇0Ç>|X0_|=Ç>|C˗|{(0C>|Ç !Ç>P`>|Ç {(0C P`=|ÇÇ>P`>|Ç {(0C P`=|ÇB$X ,h „"̗0a„ &L0a„ &L_ ̗a%D/!| &L0a„ &L0a &,/!| &L0_B&L0a„ &L0a„ W0_B"̗a%D/a„ &L0a„ &̗0a„%D/a„ 'p 8`A&TaC!F` H*\x? 4xaB 6t`> ̗|a>A"D!BT|/ "D!B,a>˗"|a>A"D!BT|/ "D!B,aa>1̗/_>_>!B"D A|/ B"D!0_|/_C O@g_> O@ DPB >_"拘/b$J(QD˗O|8`A'p +(0_O@ DPB >_勘/b"(QD%k/_| ;0 <8? |  <0… :|1|(? W`A ,(0_O@ DPB >4a|僈0'P ,H0 O@ DPB >QC$80_+X| ? 4xaB 6t` ̗|k/_>̗`> 4xaB 6tbD8| `,XP`>$XA .dC BL| A<`>A"D!BT`  +X| `'p "Lp!Æb|` "D!BQa1 _>!Bb|A0 Bl|!B"D{_>A|"D!̇0D A"Ć "D!BQa>A|/D!B`> BL0 O@ D0_B&L0a„ &L0a„ ˗a%D/!| K0a„ &L0a„ %L0a„ &L`%L0a„ &L0a„ &/!| K0_B"̗0a„ &L0a„ K0a„ &L0| K0a„ &L0a„ &L/_B"̗a%D/a„ &L0a„ &̗0a„ &L0aB H A$XA .dC+o!|,h „ O@ DPB >4"D!BL|!B"D+oa>A|"D!:"D!&_>!B"D ̷0 _>A"D"Dw0 B"D!*_>A|"D!̇0D!B|O`> "D!BQa>A|/D!B`> B|3|!B"D{/_>A| <0… :da>|a> Ç>|!|8? W`A ,(0_O@ DPB >4"D!B` H*\ȰÇ#J+X| `'p "Lp!Æ"Dˇ0_B$XA .dC%BO@,XP` W`A8`A&TaC "D%_>!B"D ̗`>8 | `,XP`>$XA .dC BC O|8P`>$XA .dC+/a|A1_|I(QDI(Qć"(QD%JT`勘/b"(QDCOD%>1D%J(Q|E1_|I(QD !'QD拘OD%J(Qa"拘/b$J(QĄ(QDE'QD%J0_|E1_|%J(Qb|I(Qć"(QD%JT/b"拘/b>%J(Qb>%J`> $ <0… :|1|8`A&T ,h „ 2l|!B"D!B"D +"D!B"D! "D!B"D!B` B"D!B|!B"D!B"D +"D!B"D! "D!&O@ 'p "Lp!ÆB/_|˗/b僘/D%J1|%J(a$J(QDx0|{O`>'QD%Ḃ0D%J|/b>%J(QD$̗O`>s/| OD%Ja>%J0_|%J(QD I4o`>$拘OD%Ja>%JX0_|%w0D%J(Q| b"'QD%J_>$X_>gР'p "Lp!Æ2"D'0|w0D!B"D (0_> {b|A"D!"D`>w0D!B"D 80_|s0@ H`|'p "Lp!Æ6b"D`>;"D!B|A"D!B"D B|W`>80,h „ 2l!Ĉ'QD%J(Qā(QD`(QD%JTOD%J(QD !'QD ˗`(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J(1D%J|/b>%J(QD$J(QD%J(1D%J|/b>%J(QD (QD%J(Q"|%O@ 'p "L0 O@ DPB >_$J(QD%J0DE'Qb|I(QD%*W0D%J(QD(`$JL/b>%J(QD (QD%J(Q|-̗o`| 拘OĄ"(QD%JTOD%J(QD !0_X0_|%w0_|I(QD%*'QD%J(QĄk_| 拘a|I/|;OD%J(Qa>%J(QD%&̇0_| O@$XP`| g_|  <0… :|1|%J(QD%Ja|;0 <8? || H*\ȰÇ#'QD%J(QD'` H8`A g0|O@ DPB >_$J(QD%J0|$1_C O@ 3/_AO| H*\ȰÇ#W0D%J(QDs/ă"k/_>̗0|%J(QD 'QD%J(QD$J,/b$w0_|I(QD%*'QD%J(QĄ(`$JL/b>%J(QD$J(QD%J0|%1D E'QD%J0D%J(QDCOĂ"(1a$J(QD(QD%J(Q|%O@ 'p "L/!| &L0a„ &L0a„ O@ DPB >QDUXbE$X ,h „ 2l!ĈI(QD%J(Qb>%J0_|%J(QD 'QD%J(QD$J(Q|I(QD%*W0D%J(QD(QDE'QD%J0_|%J(QD%JdOD%̗/| 'QD%J0D%J(QDCOD%'0|;OD%J(Qa>%J(QD%&̇0D%J$/|̗/|%J(QD I(QD%J(1!@8P`>$XA .d`> /|:tСC:СC:tСC:4ϡC:l`>;ϡC:tСC:tСC:tСC9tСC C |'p`>$XA .dC(QD%J(Q|%J(`;OD%J(Qa$J(QD%J0D%J$0@ o? 4xaB 6tb (QD%J(Q"|%J(a$J(QD+OD%J(QD I(Qć"(QD%JTOD%J(QD !'QD拘OD%J(Qa>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(!|,H? 4xaB 6tb$J(QD%J(1D%J(QD%J(a>%J(QD%J'QD%J(QD%JD`>%J(QD%2'QD%J(QD%JD`>%J(QD%2'QD'p 8`A&TaC!F`>%J(QD%2'QD拘OD%J(Qa$J(QD%J80|%J(a$J(QD(QD%J(Qb|I(Qć"(QD%JTOD%J(QD !'QD ˗`>COD%J(Qa>%J(QD%&̇0D%J,O`> `>%J(QD$J(QD%J(1D%J$/|̗O`$J(QD(QD%H"$| H*\Ȱ|W0|9tСC:t0_|:tСC:tС|:tС|W0|9tСC:t0_|:tСC:tС|:tС|W0|9tСC:t0_|:tСC:tС|:tС|3`|СC:tС|9tСC:tСC!СC.̗/|ˇ0C:tСC9tСC:tСC !СC9AO@O@ DPB >_>%J(QD%&̇0D%J|/b>%J(QD$J(QD%J0|%J(a$J(QD(QD%J(Q|%O@ 'p "L/!| &L0a„ &L0a„ O@ DPB >QDU/b'p 8`A&TaC!F`>%J(QD%2'Qb|I0_|%J(QD 'QD%J(QD$J,/b>拘OD%J(Qa$J(QD%J0BO@ w|'`X0|ˇ0D%J(Q|%J(QD%JLa>h0_| ˗O|3O`$J(QD(QD%J(Qb|5̗/ă"k0 H|`|? 4xaB 6tb$J(QD%J0| 哈0A$X H|+o`>'p "Lp!ÆB/D%J(QD%c/Ą'p O@3/_|? 4xaB 6tb$J(QD%J(1|IL/b  g_3/,h „ 2l!Ĉ'QD%J(QD'p ,hp`;h0_|w0_|;? 4xaB 6tb (QD%J(Q"|%1_| ;`|(QD%JT`>%J(QD%2'Qb|I0_|%J(QD I(QD%J(1a>$J,/b>拘OD%J(Qa>%J(QD%&̇0DE'Qb|I(QD%*'QD%J(QĄ( |,H? 4xa| K0a„ &L0a„ &L/,h „ 2l!Ĉ'R4bŊ+'p 8`A&TaC!FOD%J(QDI(Qć"(QD%JTOD%J(QDI(Qć"(QD%JT`>%J(QD%2'QD拘OD%J(Qa$J(QD%J0D%J,/_ ˗a>%J(QD (QD%J(Q"|%J(`> 3O`$J(QD(QD%J(Qb|I(QD g0_|;OD%J(Qa>%J(QD%J| (0,h „ 2lx0| w0C:tСC9tСC:tСC !СC6w0_|СC:tС|:tСC:tСC:tСÅ!W0|9tСC:t0C:tСC:t`>:tpa '0|:tСC:СC:tСC:4ϡC:T0@ o| (0,h „ 2l!Ĉ'QD%J(QD$J(Q|I(QD%*W0D%J(QD(QDE'QD%J0_|%J(QD%JdOD%>1D%J(Q|%J(QD%JLa>%J0_|%J(QD I(QD%J(1a>$J(QC$X ,h „ 2l!ĈI(QD%J(1a>$J(QD%J(QDI(QD%J(Qb>%J(QD%J(Q"|%J(QD%JOD%J(QD%J0_|%J(QD%Jd0 <0… :|1ĉ+ZH?'p "Lp!ÆB(q"Ŋ/b̨q#ǎ=/_|˗`|̗/_W0_| ˗/_|+/_|˗`|̗/_W0_| ˗/_|+/_|˗`|̗/_W0_|  <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4FСD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| ;;PK6>lbPK+A OEBPS/img/performgraph_case1.gif4GIF87a, H *\ȰC#J"ŋZȱƎ )~ IȒ( LyK/c \)3$͚q#Ϟ")4"Ѣ&T (ӄN*u Ղjʵׯ`ÊKٳhӪ]˶۷pʝK.ZU˷߿È+^q0Anj#KL吐f̹ϠnӨS3װ'Mۂ ͻ Nvȓ+||;@tس@}uo{6OϾOϿuWy5fwYa Z%UaM X^衈衃 [HHiK`+RXB5Nc6=i#9h-ӏ8Q~'卤a)dJ8e!dM)SU"_~ e qRɈ'f ~ye}6hu$;g iJhBR"Ghک(i$I'ڦ[N-6ک}꒪*dvZYW+a>ĺ jmr(*- Q,Hv-"qgѹR'ȢG,qOlz^1o챓,2!l2~%r|)2z-,sx1lu5߬r93q=,toAmmEkU-T]qXӖt\Wu`3ud6vhuvl3kp{vt 5wxsxu|uw߀w+wOt8'ok8Mc.MyߐOlu\ ꬷ.n/įV7G/Wogw/ p<7//N1 HJCFW":'@FLY7z 0h8(L 'Q0F+ gHCP=/L w}7P"H|^įh0PSD5WF.|$E j:g,W՘5JO[cؽ*#V8ˍ QL$i=;rN #IB"IAj#/eQ=%ݨV2+W'WTr[VhY2& Mֲ2 @‡!rDC/)Lage,_)d*Sk&=vs&"ű<' @&C֒k%5K~F˜8˙.94D'=pXJQzBhBaD]x&HWJQF) @Ӛ8ͩNwӞ@ PJԢHMRT2&=8Ҫҥ 3t|Ys*qR`M+*CVrJWҳnj*D*dц10sb)(X$L`KY޵dS]ew2lųuhXvMlwYiVqmlg[֖\(VfpGЭ-K+پRWk]ծZPb_ɛ!UeoܻRvV˭W+Q2o~'nvs_.WWtExvu8 r!YMV\,/Dnջ8|c>J@ލ?ceřuZcH%,ԝسLg9SdqD[Α֜H,e4'1~,ma &e_ Ln^%fs\/8껗n;5٘QV/u_5 ACtwA䤘Q[Z7N77U.c]EպuDu:KeUi7a'~b3}gԯ]Q:S~f40Mmg_[~ҝ mt~):=?zFwmn="{o׸6+C1Ȗr/(ᘍ-+c88%-ۣm7X!WA{[dr=cs}1bϋڣo޷ԧNu3N3u<DINx=oUl; э]x/ݫWB4ﴰ=o$Y+:_ă?Qϼ5 .~k=|{don3k‹}<}RCN3 a}7+ϸ"З{֧jTf_Mӎ}}^wEg09]<\Sr}jW~"pG>g't t'{`u`ӒEGru'8*ǀr3~X/Xur4oV5(}) H~:XaA}%zFh;.ՄvpRHmǃ8WnyW\}]HvVAXjlTh|oHsH@LvxƇJXfvQXvtELňa膐6(vXxhKR&DX~d X&e`Y>HŊƋi苵x'(ØƨX(H_͈QmzH](Xh7zd8Xxh؆7{,!yxOn~AhɐXZi7 )N11ّI&)YE:.)2 86I1y:n/?>7@u3D7F)"Yw2)7.= vhr D89\Ky&F!iV9؏cJ/Τ5O!'^)F Mi -&%5yw9qtIzy}yu6wɔ(F׸YW)6dj3@233,b,B6Fj.-iS9 7S!H*V4s>y"/XZ"Ӥ9jd(d1f3WJm1oʣh*b:,hs;c}7I:s(SBJE9zm㧚1ک:1:S/B*]Zj:Y+10:ZڧǺpڬ!jxؚںڭWQ*Zj@A=a:8521;PKYdPK+AOEBPS/img/lobcreat.gifVGIF87aR?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,R H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nؑb|y,/_|=zѣG=zѣGyT/_>=zѣG=zc|ѣG=zѣG=;/G=zѣG=zqc (?˗O`|˗_|GP`>$XA .dC%NXE5nqa˗/_̗_/|˗O` /| /߿|+c|8rȑ#G9rȑ#G308_> /߿o O@ Dx0,h „ 2l!Ĉ'Rh"ƌ'p  'p A W` ,XP` ,X`8`A&TaC!F8bE1fԈ0| `>8`A"D_>$XA .dC%NXE5̇0_>c!|,h A$XA O@ DPB >QD-^ĘQ#|!̗/| ̇0ƍ%۸qƍ7nܸqƍw0_C`6n(1ƍ7nܸqƍ7jO /_#H`> O@ DPB 'p H*\ȰÇ#JHŋ3&̗`'P8P`>? 4xaB 6Da>:tСC:tСC:tС| g0_C`:tСC9ϡC:tC:tСC:t0|'0|!СC:ϡ|:tСC:tСC:tСÃs0| 80,`> 4xaB H_  <0… :|1ĉ+Z1| ]0|k/F)1F5jԨQF5>0| ̧0F%1F5jԨQF5>0| 0_|iD`>C/b>5jԨQF5j|a3a>s/c>;/b>5jԨQF5j|!|,h `|'0_|/_| ̗/_>/_|˗o`+`  <0… :|1ĉ+Z1|1#a>+/߿|˗/|3/߿|˗_|/_|'0_|W0|5jԨQF5j0ƌs` /|w0߿|O`O`|#o`|iԨQF5jԨQ|5˗/C@70߿|o/_| `>߿o`>$X`>$XA .dC%NXEӨq`> `>/_;/߿|'0_O`|#c>5jԨQF5j|OƁ3`> _|˗O`>'P| 80߿@8p'p "Lp!ÆB(q"Ŋ/b(0F970|5.̇1F5jԨQF5>̧Q#| W`>8`ACa>$XA .dC%NXEӨ`>Ө1a4jԨQF5jԨa> [Oa>ӘOF5jԨQE$XA O@,X` ,Xp`,(0_ ,X`+X`,`> 4x 'p "LH?8`A&T 08` H ,h|"D!Ḃ!B"`| C!BC!|C|!D!ƒ C!B"$|Ch0B"D_>"D|C!BO| H?$XA 'p ˇp`>g0B"<`>"D!Bˇa|"̗!B!D!BC80,h „ 2l!Ĉ-'a>$J\`>%:w0| IO"|%J$oa>%J(QD-g0_|̗/_ ;/_> @ 'P` 0 ߿70߿o @/߿O$ $H`> $H|'P|o'p| ̗/| G| H*\ȰÇ#:̷0| 70| 3`O`>70_|G0_|'0| '0|o`>G0|'`> W0|70_|o`>SOD%J(Q| 70_| ̗`+`/|70_|G0_|'0| o`|'0|/_| w0|̗/|˗`> w0A/߿߿| o`|o7_>$XA .dC%;_>+O`>#_ O`G0| /|̗O`| ̗`/߿| 70_|/| W0|˗/߿| #O|g0_S/_> /a'QD%J(qa|3o`'P (0_ 0@ O|߿'P`8_(o`(0? O| ߿80@ 8p|7p`|o 7p Hp Oo@$`>(0߿|O@ DPB >Qā o` 70 (? _(`>߿8p | O#/߿|`>70@ ߿/'p@$H`>'p|_>'p`>$X` g0߿|G0/O@ DPB >Q| #o`| g0|70߿| G0_/aG0_|O`/|_3`#O`_|+` w0_| W0|_>/a&N8qĉ':/|/_|˗`3/_| ̗|_@ o| / /??˗O`/߿|o| 7p|o`'0| o|8p0|'p`| O'p`>$XA .dC%N|Qx0|)RD`>(0ń(R"E)RH|3"Ń H"|ka>QL"E(RH"E).GQa>(R<`>)"w0| QGQa>%H"E)R0E H`>(R0| -'1Ņ(R"E)RH|3"Ń H"| !0_(2G|)RH"E棨0|)g0ES08`3(0_| 4h@$XA O@ DPB >Q H8`> 4xaB 0 <0…8`AO@ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`Ê:KٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#K3 ;;PKx%[VPK+AOEBPS/img/return.gif$GIF87aX`?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X` H*\ȰÇ#JHŋ3j08`A&TaC!F8bE1fԸcGA/_|˗OH"E)RH"E)R|'RH"E)RH"E)RaD)RH"E)RH"E"0H"E)RH"E)Rȃ)RH"E)RH"Ey0_|"E)RH"E)RH"s_>"E)RH"E)RH=̗OH"E)RH"+'p "Lp!ÆB? O@ DPB >Q ,h „ 2l!Ĉ'Rhb|/^x|xŋwŋ/^xE.^xň ;_/^xa/^xŋ/Jwŋ/Jg0|/^x|/^xŋ/^ŋ/^a/^xqb/^xŋ/Bwŋ/R0ŋ/^81ŋ/^xŋ!xŋ)[ŋ/^ŋ/^xŋ]xŋ;/ŋ/^X1ŋ/^xŋ!xE]t@'? 4xaB 6tbD$J(QD%J(QĈ$J(QD% ̗OD%J(Q|%J(QD%J(Qb|%J(QD%J(QD%'QD%J(QD%F'QD%J(QD%J(Qb|%J(QD%J(Qb|%J(QD%J(QD%'QD%J(QD%F'QD%J(QD%J(Qb|%J(QD%J(Qb|%J(QD%J(QD%'QD%J(QD%F <0… :|1ĉ+Z1#|5jԨQF5&̧QF 'p "L ,h „ 2l|!B"D!B"D A"D!""D B"D"D!B"D!Bl"D!Ba>!2"D!B80D!B"D!Bb|!B"DAa>!B"ā B"D!B"D"D!BD`>/_| ̗/|'p࿁7P O@ DPB >\"D!B"D!Ba>!B"D/| ̗_>/_| 70|A"D!"D!B"D ? 4xaB cȐ!C 2dȐ|'0_>_/_>+O`ǐ!C 2dȐ| 2dȐ!C 2dȐ!C̗!C 2!C 2dȐ!CG0|'0|g0_`>3!C 2dȐ!Å2dȐ!C 2d!C)ǐ!C  ǐ!C 2dȐ!Á'0߿| 70߿|̗_>+O |'p`>$XA .dÅ B"D!Bh0|!B0D!B!|߿|O_/?߿| O`O@ H*\ȰÇA"D!B`>A"|!B"D`>'0|o`|o` 70| A"D"D!Bb|A"|!B"Ć`>/_| ̗/_`| 70_"D!""D!B"Ă"D "D!2̷0D["D!Bx0D!B"D s_>!B4"DAD ? W` ,X` ? 4xaB 6t0Ç>|Ç0_>\Ç>|`>|0|>|C>|Ç>|h`> O@8@$XA ̷p… .\pB˷p… [/B  O@ Dp ,h| H*\ȰÇ#B̗Oa>KODI(QD1'QD{/_|'Q"|$*'QD%J(`>3O`$JX0D%J0C$XA O@,H0_A ` ,X`A ,X| H*\`> 4xa‚ H K80|%$/a„ &$/a„ &L0a„ ̗0a„ &L`%/| &L0a K0a„ &4/a„ ̗0a„%,/|̗0a„ ̗0a„ &L0a„ K0a„ &LX0_̗0| %L/_|!̗0| &L0a„%L0a&Lp`%/a| &L0!| &L0a„ &L` &L0a„%/!|%4/aƒ K/aBO@ DPB2d0C c80| cȐ!C2dȐ!C 2!C 2dH0|w0_|'0_| /_|_|˗/|3!| 2dȐ|(߿ ߿(_O| HKx0_̗0a„ ̗0a„ &L0a„̗0a„ &L`>KX0|/_/|_|_/_> W0_„%L0a„ W0|G0| /_> K0a&O| H| 4hРA O@ DPB 2'0_>|0_=G0߿|'0_o`| 70_| ̗O`&Ç+o`|G0| ̗/_> {0a{a|>|C H*\ȰÄ H | O| ̗o`_|'0? _ O@$ O@ DPB O`>O`_>2d80C cȐ!C2dȐ!C ;!C 2d`G0߿|'0_|̗_/| '0_> K/2dȐ!C 'P߿/߿/߿| ? 4x| &Lh0_„ &LH0_„ &L0a„ ;/a„ &L0a„ w0| W0߿|˗/_>'P| 80߿O|o'p "Lpa|+o`> #o`>O`|8`A H| 4hР| 4hРA O@ DPB Ç>\a>|0| =||70|70|'0_>̗!|2Æ>|Ç=|Çka   /? /˗o`o|8p|8p`>$XA%L0a„%L0a„ &L` &L0a„ &D/| %L0a„%$/| &L0a„ K0a„%L(0_„O@8 | O@ <+Xp` 0 <0@$X`>$XA .da| )Ä[Ç+Ç=4| 0_| 1| )̗/߿|{/_|>/_|{Ç:̇0_>=|`{Å {| {(0_|̗/a>>oa>!0Ç{Ç>|0_|_|>t/_|[Ç3Ç=4|=La>>oa>[Ç 9Ç>|80| H H'p ,ϠA 4hРAgРA 4ϠA4X0 4hP`>4| `>$80$ #H A |#H0AO@ DPB >QD-WbE X`";b|1w0߿|` [`+a̗0|+VXbŊ+ ̧0_Ŋ30 <0aA$X`> +|˗|OO|80˗O`(0@80@o|7P`|˗O`|˗o|˗/|/_'0߿| o'p "Lp!ÆB(q"EWb|UXa#`|/_|/|)'0|/|W0| 0|̗_|˗O`|̗_>/_/_|/_> `+VXbŊ COa3bŊ)̇0_ '0| '0_|c__+`>70|g0|˗`>#/߿|_|_|@7_>$XA .dC%Nh0_|X|,8? 4xaB 'p  'p |_/'p 8_70|#`> , 'p@'0_˗/߿|O`|'0? _'P |,h „ 2l!Ĉ'R(? 4xaƒ SPB ̧0 '0? /߿(0_O`| o`|/7p /˗_|o|_> ̗/|'0@  <0… :|1ĉ+&g"|Yhqa;/_OO|8_>_(0_|70 7p|/߿|_|˗O`0@7p|7? ? 4xaB 6tbD)VLϢň,Z0Ecob> I0|-JgѢE-ZhѢE-30 <0… o80_o 8p'p ̇| C!‚  c/_ƌ˘1cƌ3f̘1cF #0@ 8P|o/߿_  A $/A ̗ A G A $/A /$Hp`| H̗? 4xaB 6tbD)Vxc|70|70߿| ̗O`>'0|3`8` HA H8`A(? $0 <0A$XA .dC%NXEG0|3`/߿|_|˗`>˘1cƌ3f̘1cƌ3f̘1cF#o`> #o`__co`3f̘1cƌ3f̘1cƌ3f`>o /߿__/߿|߿ /_| H*\ȰÇ#JHŋ3jȱǏ #o`> #o`O`|'0_ 3/dȐ!C 2dȐ!C `>`>o`>'0߿|o`| 2dȐ!C 2dȐ!CG0|'P(0_| ̗_o`> 8`A&TaC!F8bE1fԸcGAc!C 2dȐ!C 2dHB~2dȐ!C 2dȐ!C i0_ȏB 2dȐ!C 2dȐ! 1_Ȑ!C 2dȐ!C 2|!? 2dȐ!C 2dȐ!C40 <0… H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷p ;;PKPK+AOEBPS/img/getdesc.gif:&GIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#O@  <0… :|1ĉ'p "LH? 4xaB 6tbD)Vx"|'p ˗/,h „ 2l!Ĉ'Rdbł*VXbŊ+VXb嫘0_|+VXbŊ+*Wb|+VXbŊ+VX|*.̗/_Ŋ+VXbŊ UX0_Ŋ+VXbŊ+V/_|WbŊ+VXb|+WbŊ+VXbŊ)0_UXbŊ+V0|`|˗/|CbŊ+VXbŊ+R̗`0 _>$XA .dC%N0_|`/|CbŊ+VXbŊ+Rw0߿|/_>/߿|/|+VXbŊ+"G0_>`'0_|!WbŊ+VXbŊ);_>˗O`|˗O` WbŊ+VX|!70_| '0_CbŊ+VXbŊ+F̗/_|_@ H 'p "Lp!ÆB(`|70_| W0? '_O@ <0… :|1ĉ+Z0|'0߿| ̗/|_at#F1bh0|'0|70? / '0_>$XA .dC%NXE;_>/_>'0_|̇b>1bĈ#|70_>/߿|70|̇#F1bĈ"|,h`A$(0_| ,Xp`W` ,/,h „ 2l!ĈW`>߿_| o| H*\ȰÇ#JH|c`|˗a|)hѢE->W0EgѢE-Zh"|[`|gb>-ZhѢ|Y80_|-ZhѢE-Bg1agQa|-hѢE-:g0EgѢE-Zh"|(߿(?#Hp`>˗ A $/_| HK0a„ &L0a„ &L`>&L0|'p "Lp!ÆB(q"ŊW0| w0| (? 4`>8`A&OB *TPB *Ta>*T`8`A&TaC!F8bł #`g0| 8`A8`A&OB *TPB *Ta> HO| H*\ȰÇ#JH|G0_| w0|Yhb>-ZhѢ|Y1E-ZhѢEg0_|+|'p|? 4xaB *װaÆ 6lذaÆװaÆ5lذaÆ 6lذaÆ 6D080 /|O@8`A&TB$H? 4xaB 6tA$8? 4xaB8 A$XA .dC%NH0_>W0|`> XbEWbŊ+2̗/|U(1_|*VXbŊ+V` 3/_| ̗`XbEXbŊ'3bEXbŊ+VH1|[bŊ 惘bŊ+VDb%惘bŊ+VX| UToa> (? O@ D? W`8`A&TaC惘 |,h B HP`  <0… :|1ĉ-Gqa˗`|˗"K/b>)RHa> H1|QH"E)Rh0|[`|˷0_> ˗a(RH"E"3"| EG"E)RH| Q\oa)̗/a|)̗`(RH"E"3"| EG"E)RH| Q\oa>1̗`|![/_>"H"E擘`>11E)RH"E-O@ ,+/_+(0_ ,X`W`8`A&TaC(0_|̗/|̗o`>/D!B"D!:"D ;`g0_|/߿|'0_>0@'P` 8p8`A&TaC(0_|70| ̗o`>(0D!B"D!:"Ą0|3_|/߿|˗_>/| G0|"D!B$"|G0_|/_>S|!B"D!B0D˗_> ˗a| G0_3/|˗O`>   <0… :|0ĂW0|;/߿|!w0_| "D!B"D B0_> 8?˗_>˗/߿| /_|/? ? HA8`A&TaCx0_+/|!| O@  <0… :|1ĉQH_|/_O`/|/|#"|)RH"| +`'`>O@$H A'p "Lp!ÆB(q"|)R`>/_A ߿| '?˗O |O|8p8`A&TaC惈0_| ̗_70߿|At"D!B"D| 3/DAT/D B"D 惈0_|/_|˗O`>˗/_|"D!B"D B0_>̗"|'p ,80_>  <0… :|0D BD|!B"D!B0D˧0_A0_> A"D!a>0D!BA$XA O@'p "La|˗/a|.\_| ̷`> 4x 'p "LpA$/_ W` ,`  <0… :|0Dc"Dg0_| |A\oa>"D-a>0D!B|!BTa>!B08`A$XA 8`A$3"D!B"̇!B"D!B"Dh0B"DP`>'p "Lp!ÆB0|˗O |8? ? 4xaB [!C 2d0C 2dȐ!C 30@/߿70_|$(0A'p "Lp!ÆB0| ̗_3`| Oo /߿  @(0,h „ 2lh0C:tСà +O`> `>70| -СC:tСC+/|̇0| ̗O`/| '0߿| G0| W0|:tС|:tСC `>`> /_|)G0_|:tСC:d` ;`>`+o`| 70_O` o`| g0C:t_:tСC9@'p`o|/_> /(0|8`A&TaC!F|`| ̗/? _>| 70|˗O`> '0߿| 70| ̗? 4xaB 6T/|:tСÆ Hp 'P7p 0@ _O@ DPB >QD 7P`o@ (? '`>(?'P ߿|@'P 'p "Lp!Æ O@ DPB >/|'0|%̗`+Ç>|Ç3o`|̇0_| O`'0|g0|70_|=|Ç{Ç>'0| '0_|̗o`˗_>{Ç>||O/ G0߿|/|_O` G0||'p "Lp!Æ{Ç>$ |_#7`> 'p "Lp!ÆB(b g0_|'P࿁߿'_80@'0| <0… :|1ĉ+2gѢ|-ZhѢE YD`>-gѢE-ZhѢ,ZtϢE-Zhqa>gѢE,ZhѢE-Z/EYhѢE-.ga>,ZH0E-ZhѢEha>-ZhѢŅ,"g0E hѢE-Zh|-:gѢE-Z0E h"|-ZhѢE-Z0 <0‚ H*\ȰÇ#J0 'RH"E)RH"E)r`>)RH"E)RH"A'p "LpaB$H`> 4xaB 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ:va|:vt/_ǎ;vرcǎ;v1_ǎg0|;:ױcǎ;vرcG ? 0 <0aA$XA"D!B̗`>"D!B <0… :|1ĉ+Z1#|O@(? 4x!B O@ w0_|Ø/cƌ8p ,h „ 2aÆ 6lذaÆ 6lذaÆ 6la|̗`|'0_|/_|˗/߿|˗/|/_> ̗| 6lذ|5lذaÆ5lذaÆ 6lذaÆ 6lذaÆ "̗a| ̗`|/_|`/߿|˗_| /_5TaÆ 6lذaÆ װaÆ 6lذaÆ 6lذaÆ 6l0_/|`|?'0߿|/| / 8pO@ DPB >1b>%J(QD%J(QD `>'p|_|GP`|o(0_|8p@8`A&TaC!FOD%J(QD%J(Q|s`/__>_ ̗/| /|'_>%J(QDI(QD%J(QD%JTo`|̗o`>'0߿| ̗/|'0߿|'0_|˗O`>'1D%J(QD$J(QD%J(QD%&G0_̗ODW0_|80D%'Qb|%J(QD%H"$B|,h B HP`,80_+X`A  ˗/_+/_+X`>'p A H'p 8p ,`> 4xa H0,h „ 2l!Ĉ'Rh`1g0_!̗E1|̗/|]d/_>;/_>h1_| ]xŋ/^x`1w0_)̗E1|˗Oa|˗Oa|˗Oa|.^/|/^xŋ/^<`>70| O+(0_|˗`+X` ,X0_|+X|W`| G0_ ,X0_+Xp`| G0_ ,X`|  <0… :|1ĉ+Z<`| ̗o`>a>˗/߿|s0@ H'P G A/A#80_>$HP`> $/_>#H|̗| H˗` &L0a„ &L0| &L0a„ &L`'0_|70|%/? O@ D `̗|+(0_/_> @/_> ̗o|8p`|7p |8_|˗O`|'0_|#/,h „ 2laC O@ DP H'0|`C`"D!B"Dx0G0_>'0|/߿| ̗/|_|/|Cx0_g0߿| '0|̗_/|˗O`C!B"D!B",/_CH0_|"D!Bˇ!B!/|`'PO|O@ DPB S/aG0_| /| w0߿|`|˗ |'P`|/˗O`>o/߿|/_>/,h „ 2l!|˗Oa| B`|!ˇ0_|(_߿|O@ H ,h „ 2lH`> 4X? O O`0@ /߿|˗_>8P ,(`>'p|8߿|?_|'0߿|(߿(? 4xaB 6tp`| C/D!"̗"|ˇ0_> /| ̇0_|A"ćca3O`˗/|'0|W0_>  ̗o˗O`>o70߿|/_>8pO@ DPB >̗oa|ˇ0Á>|/ÅKO`>˗/| O߿8_>$XA .dؐ`>;`|˗`>˗O`|CO |߿/? H`|˗|˗/|WP`> /߿oO@O@ DPB 6̗a%PaPa>To`>>|Âs/_| |/|/ÇP`>|!| 3/|̗/_/_/? 7'p`|˗O`|'0_|8p7P`>$XA%/@$XA H&̧P!|w0_> 'p ,| ,/_,X@O@ ̗8`A&TaC k/|̗_| ̗O`|/_/߿|/߿| /߿|O`'0|"g0Ç 1̗0_|.̗/Ç{0_>̗C!̗a|{|Ç>\a70_|'0_|_`>/|˗O`>=D`ca|>̗/Ç {0_>%̗C)̗oa| H0_>$XA ˧0a> *TPB ̗/_>8P 0O|_o/_| /? o@$X`> 4hРA g_| 4hp`| 4hРA4hР| ̗/A3hРA˗ |/_>gРA ,/_>  <0… : ̗/|/_˗O`/_/| /߿|/| 3C3/_|Â2̗/_|1̗/_˗/|̗/|{a|=4Ç>|h0| 3/|̗/_/_O |߿O'p|߿߿8` 'p "4+/_+X`,X` $` O@ H?$XA8` 8? 0 <0@$XР|=O@$XР| ;xp`)R0|ˇ0_>)2̗`(R8`>80߿|/_> ̗/| ? 4xa|8`A&TaC!F8a>)R0|˗Oa|(R0_>"H| O`'p?8`A& <0… :|1ĉQH"E˗`|˗"E˗0_|)R4/| /߿|˗O`|`>)RH"E)RT"E)*̗`>'p A H*\H? #H 8`A&T_>_>/_|'0_|2dȐ!C 2dȐ!C 2dPa> 2dȐ!C1!C 2\| cȐ!Cc0|2dȐ!C 2dȐ!C 2dPa> 2dȐ!CcȐ!C 2dH0_|1dȐ!Ã1 2dȐ!C 2dȐ!C 2d0'p "Lp!Æ kذaÆ 6DOa>6lذa|5l(0_| 6lذaÆ 6lذaÆ 64Oa 6lذa6lذaÆ K` 6lh`>8`A  <0… :|1ĉ+Z/a/^D!|,h „ O@ ,!"D!B O@ O@ DPB >QD-wŋ)O@$XA O@$X"? 4xaB 6tbD)VxcFmܸq|˷q|m/b7nܸqƍ7nh0ƍ7 w0_|7F̗/"۸qƍ7nܸqƍmܸq|۸qb|勘oƍ7nܸqƍ7̷qƍ̗oƊm1ƍ7nܸqƍ7n4oƍ+/|M̷a41|mܸqƍ7nܸb7n`|̧1ƃ ˗1| 8P ,0 

)R0_>/_|˗O`|˗O`|(߿ o? ?8p ̗oo@80_|/_>$XCX0_|ˇ_>"D80,h „ 2l!Ĉ'>G"E'P /_ ̗O`|/_/߿|/߿|/߿|O`'0 H H`|˗Ϡ|/_> 4hP`| ̗ |ϠA 4/,h „ 2l!Ĉ'>G"E!W0|/_> /|70߿| 70__|̗"E˧0_Ga| c/|)G"E)RHb|)RHb| `> @70߿| //_| /? O|8`A&W0_;/_| Kp`|˗`|%L0| H*\ȰÇ#J0E)R/_|/|/_˗O`/_/| /߿|3"E ;`|̗/| ̗/߿|70_|G0|;`|˗o`|'P`>$XA .dC%Nt"E)J̗`| ̗/|˗/|(߿| /߿o/߿80_>$XA #O!| ̗`|/_|`|/_̗o`>̗o`> O`O`| ̇0B *TPB *TPB ̧PB *TP„)T0B ̗OB '0_>/_>70_|/|+/|O@ ̗o| o| _'0|  <0… :|1ĉ H"E壈0EHQa|9O O`|˗/__/@ 8? 0/(0߿| /߿| (`> 4xaB 6tbD'p "Lp!Æ̗/D!̗/D s`| /__70߿|+/A O| ̗o|(0߿| /߿| (0,h „ 2l!Ĉ'Rh"ƌ˗OF  <0|G0߿| _|˗O`>'P| /8p/߿|/߿|o`>70'p "Lp!ÆB(q"Ŋ/b8`> 4xaB 'p "LP` '0_ .G0|̗o`> O`70|a>$XA .dC%NXE5nqb| ;/EO@+(0_ WP`G0_|˗o`+80,h „ 2l!Ĉ'Rh"ƌ7r81_>̗#|0_<6ѣG=zѣG=z,/|Qa| c/|ѣG=zѣG=̗a| `|˗/a| ylϣG=zѣG=zx0_k/_|˗/_|#/_| ylϣG=zѣG=z`>'p 8`A'p 8P 0 <0!,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/.l0Ċ3;;PK\gr::PK+AOEBPS/img/execo.gif/3GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӮO@  <0… :|1ĉ+Z1ƍ;z1_>=zѣG=z#|ѣG=zѣG=*G0_/߿| ̗/| ̗`>=zѣG=zѣ|˗_/߿|_ѣG=zѣG=z4`|O| ? 4xaB 6tbD)VxcF9v/|0#H0O@ D(? 4xaB 6tbD)VxcF9&̗_>`>/߿O G A $H_| H*\ȰÇ#JHŋ3j` ˗/߿|/_>/_|3|;vرcǎ;vر#|Y0_G:vرcǎ;v"|,h A$(0_ ,H0_| $` ,XP`>$XA .dC%NXE52̷q`>ۈ0F6nܸqƍ7nܸq#|[/|1ƍ7nܸqƍ7ndo| %̷`|#۸qƍ7nܸqƍ ̗/_>/_|-̧0_moƍ7nܸqƍ72g0_>/_>̷0C$X| H  <0… :|1ĉ+Z1F 70|/| mܸ`7nܸqƍ7nܘ0|`| w0|mܸ`7nܸqƍ7nܨ0߿|8߿| H*\Pa 6lذaÆ 6lذaÆ 6lذaÆ O@ /|/|O@8`A&TB$X0,h „ 2l!Ĉ'Rh"ƌ ;_>70߿|g0|iԨQa4jԨQF5jԨb>3/_| ̗o`>;OF A̧QF5jԨQF-̧`˗"|,h  Hp`  <0… :|1ĉ+Z1| i$oa>/|il/_>"ӨQF5jԨQFH0| !̗a>%1F5jԨQF5R0FCoa>4V̇0_|5jԨQF5jH1| c`>ӈ0_拘OF5jԨQF)cO#| 0|13/b>5jԨQF5j!|,h A$(0_|+/_A ˗/|/_| W_|˗_| W0_O@ DPB >QD-^Ę`> #a>+/߿|/߿|O`/|g0_|iԨQF5jԨQ#|5̗O`> `|/|`|_|3O`|iԨQF5jԨQ#|5̗/_> (?˗_|/_>/_'`>80_|8p@8`A&TaC!F8bE1f;`>+/_|/߿|/|0'p`8p| H*\ȰÇ#JHŋ3̧Q|g1F0ӨQF5jԨQF4j\a*'`>8`A 4h0,h „ 2l!Ĉ'Rh"ƌiԸ0| i/c>5jԨQF5jOFSOc|iԨQF5j0 <0B H_>$XA *̇0_-\p| ̷|,h „ 8?$XA 'p "Lp!Æ""ą"D/|Ax0_|c"D)̗"DA"D| Ab|A$0 

)OB *TPB *Tp`>̗`>+/߿|'0_>˗Oa;OW0B *TPB g0_> ̗`| ̗o`>˧P`>)TPB *TPB ̧_>̗_|_|/߿|;`|/_˗/@ o O@G_>$XA .dC3/|G0_> G0_|`>!B"D ;O`>̗_|+/|/_>`>/߿|_˗/_/߿|+/_>70D!B`|(߿(@/_|˗ A/,h „ 2l!Ĉ/A @ ̗O`|(?#_>/|˗/߿|_|˗/_G_|GP`>8`A&TaC8@̗o|7_| 70_˗o8`A&TaC!F(?80_ /|/|7p (?'P 8_70˗O`|'p@$XA .dС| W0|+O`|_>˗a>>|Ç>|_|+O`| /|/߿|+/|/|'0߿|/_>/_| ˗O`|Ç>T_> O ߿ /_|˗|'p|'p "Lp!ÆB(Qa 'P? ߿߿ /A/߿|_|/߿|˗_||˗|'p "Lp!Æ{|=|Ç>||=|a{{Ç:C>|Ç>|`"w0Ç (?  <0… :|H0D"D!B|!B,a>!."D!Bd"D A"D!Bqa>!̇0D"D!6"ą B"D!B0D K/D"D!:"ą B"D!B0D ["D"D!>O@ DPA$XA .dC%BO@ DP!0 <0A$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fܘ.|,h „ O@8`A&T!,h „ 2l!Ĉ'Rh"ƌ i1|4j/F5jԨQF5b̧Qc| iԨ1F5jԨQF5^̧Qc| iԨQ`>5jԨQF5j`| ̗/_>#/_>70߿|0@ | /A˗/| G0_|G| $/_> $? 4xaB 6tbD)VxcF '0߿| O`|˗O`|˗O` '0_ ̗` O`>˗o`| ̗Oa|5̗OF5jԨQF)3/|̗`|'0_'0_>G0߿|g0|#` ̗o`>!̗/_/|70_|/_̧QF5jԨQF̗o`| 70_> '0_|߿|(0_|(P|O@ O|/_>˗/_>/߿|'0_>/_|˗_>(P| H*\ȰÇ#JHŋ3g0_ ߿@ ߿߿'p||G0_|70߿|#(0|/_| ̗_|˗/_˗| H*\ȰÇ#JHŋ3̗/_> ̗/|˗o`|/_| /|/A˗o|/|˗o|80??7?'p "Lp!ÆB(qbC$XA .dC3/|#/| ̗/_>˗/_> 70߿|g0_|̗O`>/_ /_> /_>/|˗/_/|"D!B"D "D!.G0A 7Po?o`>̗o`|70'070_|'p /˗O`|˗/? 7p(?O@ DPB >QD(RH" Hb|QHq`|QH"E)RH0_>)RH1_|)RLa>(? 4(0_ O@ DPB >QD(RH"|QH1a>(RH_>)RH"EH"EG"ńH"|)RH"E)G"E)+"E )̗"EH"E)RHa>)RH1_|)RLa|(R0_|)RH"E)*G"E)+0 <0…8`A$XA .$ <0… :|1ĉXbŊUXbŊ+VXbŊ+VbŊ+>WbŊ+VXbŊ+VX1b+V0_Ŋ+VXbŊ+VXbň*VX|+VXbŊ+VXbŊ#XbŊUXbŊ+VXbŊ+VbŊ+>WbŊ+VXbŊ+VX1b+V0_Ŋ+VXC <0… :|1Ć&N8qD&N8qĉ'.w0_'N8qĉ M8qĉM8qĉ'NTOa'N8qĉ M8qĉM8qĉ'NLa'N8qĉ M8qĉM8qĉ'NDa'N8qĉ M8qĉM8qĉ'NDa'N8qĉM8qĉM8qĉ'NDa>&N8qĉ'7qĉ'7qĉ'N8a>8qĉ'Nh0ĉ'Nh@8`A H*\ȰÇ#*O@8`A&TaC!FT  <0… :|a|>|Ç>da|>|Ç.̗/|>|Ç{Ç>|a>{Ç>|a>|Ç1Ç>|3O`>|ÇcÇ>|0|>|Ç>`>>|Ç>|(0|>|Ç{Ç>|| =|Ç>|p`>|Ç-Ç>|Á{Ç>|C?  <0… H 'p A ? 4xaB 6tbD(QD%Jx0|%JdOD[OD%J(Q"| 'QD%J(a$J0D1̷0D%J(QĄ ? 4xaB 6tbD-7qĄ&Na&N8qĉ'N8qĉ'NDoa'&w0|70߿| ̗/| -7qĉ'N8qĉ'N8q"| M81a> ̗O`>˗/|`>8qĉ'N8qĉ'N8a&N0|/_> o `A ? 4xaB 6tbD)VxcƌӨa '0_> O8|`8`A&TaC!F8bE1f̘oa>g0_> ̗/߿|/_|w0_|-̧QF5jԨQF[OF 8?/߿|8|'?8 A$/,h „ 2lC$XA "O@ DPB >1B$X? 4x|w0|'0߿|/߿|3` ̗0a„ &L0a„ &̗0a„ ̗0a„ &L0a„ &L0_B̗/a„ C_70_|˗/|˗/|!̗P` &L0a„ &L0a &L` &L0a„ &L0aB ̗` &/_&L`%/a„ &L0a„ &L/a„ &$XȦ!B!$|"D!B"D!B'0|˗o`>/@ oO@8`A&TaC!B̷0_|# ̷0_Ĉ1̷0_Ĉ#Fb>˗O`| '0_˗O`|O`|/|#F1bĈ-1_Ĉ-1| -1bĈ#F`|/_|/_| ̗`|/_>1bĈ#F1|E(0|#0|#F1bD3/߿|˗/_˗/_|/߿|˗O`>"F1bĈ![/b(` ,X0_,/,h „ 2l| /_ ߿|O|/߿|'p`>? 4xaB 6t"| E1| 8`AO@,/,h „ 2l!B˗|/߿|/߿'? `>'p "Lp!ÆBLoa"F/b-1bĈ#F'0|/_| ̗O`'0_1bĈ#Fx0|E(0_Ĉ[/bĈ#Fh0|̗_|80߿/߿O'߿8_>O@ DPB >h0|E(0_Ĉ[/bĈ#FX0|#FTOa#F1bĂ拘/bD"F0|#F1bD1| E1bĈ#̷0_|# 1bD1bĈ#̷0_Ĉ[/bĈ#F`"Q`#:̷0_Ĉ#F`"F0|#F1bĈ-1_ĈEa"F1bĈ-1bD08` H*\h? 4x_>!D/Ḃ!B"D/"D!B"D!B!!B"DX0w0_>C!B"<!B!!"D`>"D!̇!B"D!B"@$XA "O@,H0_ ? 4xaB cp`ǐ!| 2dȰ`2dȐ!C 2!C 2d/K!C 2,!cX0C 1dȐ!ÂcȐ!C 2dp`> 2dȐ| 1a!/_> W0_%ǐ| 1,!C2dȐa| 1dȐ!C 2d(0_> 2dȐ| 1`>c!C ̗Oa> -ǰ`> cȐ!C-ǐ!C 2d`>2dȐ!C!߿| O@'_> ̗/|/_>/߿| ̗O/_> /_/_(P`>$X| ;xp`|0_s` ˗/߿| Oo O|/߿|˗/߿|/_|7p`8p|o  <0B"D|C!B"D!B8`A&TaC8 A/_|(?/_>7p`| ̗_|/߿|'p? 08`A g`| 4h`> 4hРA 3X0,h „ 2lp`| {Ç0_| ˗/߿| Oo'p|˗_|/_O o8p@(0? 4xa>"D!̇!B"D!B;!B"D!B|g0_|˗O |'߿|@/߿|˗_|/? /8p|/8p'p "̇!B"D/"D!B"D|!D!B"D!|g0|̗/_˗/߿|'p`O ˗_|˗|7808p|o  <0B"D|C!B"D!BC!B"D!BCh0|"D!BCH0̇|"DH0B"D|C!B"D!B!D!B"D!B!,a>"40@ H!,|C_>"$!B"D_>!D!B"D!"D!B"D!‚̇P`>"D!B!4|C_>"$!B"D_>!0@ H@$XA 'p 'p "Lp!ÆSoa>ta{(0Ç=|a| %̗`|{!|Ç>t/|Ç =oa |>|X0|%0Ç{Ç>|`>'p 8`A&T ,(0 g`| 4h`> 4hРA 3X0 g`> 4hРA4(0,h „ 2l!Ĉ'R/| Ega>+[`>#/E̗o`| 5gѢE-Zh"| -1E,Zoa>;`|Y/|cϢE-ZhѢņ[/b>Yh1|g0|˗O`|'0_/_> ̗/߿|/߿|̷0E-ZhѢE%̷0|hbs`> /߿|'0߿| /_`>'|7P`>$XA .dC%NX`曘Ϣ|-Z/_a+/߿| ̗/_̗_>˗_|/?'? O`| H*\ȰÇ#JH|˧0_>,:gѢE H $0(0_/߿|˗o|˗_|/_O 0 <0… :|1ĉ+Zl w_|O`˗/|0@O|O@ DPB >QD-^,#|1b\`>`|/_'0|˗/߿|'p 7? ? 4xaB 6tbD)Vx`> aĈqa>Èa>1bĈ#F1^̇a>120|(? 4x`>$XA .dC%NXE02̇#FK#Ɔ0bĈ#F1bĈ1F0b0| aĸ0F1bĈ#F1ˇa>1:̇0_>ax0_>1bĈ#F1b#|1b|/_|1_|1˗/F1bĈ#F1̇a>1Ng`> 4xaB H*\ȰÇ#JHŋad#F1bĈ#F1bĈ#Fa\#F1bĈ#F1bĈ#Fa\#F1bĈ#F1bĈ#Fa`>1bĈ#F1bĈ#F1w0|aĈ#F1bĈ#F1bĈa'p "Lp!ÆB(q"Ŋ/b̨q#ǎ3'p 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ拘Ǐ?~Ǐ?~0Ǐ?~Ǐ?~Ǐ?~Ǐ?~?~Ǐ?~#€;;PK$43/3PK+AOEBPS/img/objupd.gifGIF87ak?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,k H*\ȰÇ#Jd0 8`A&TaC!BO@$X |'p "Lp!ÆB(q"Ŋ%wb|.^xŅ]4/_/^xŋ/>̗|.^xE]Lŋ/^xŋ!̗"|/^x"|]4ŋ/^xŋ !̗b|/^x| ]wŋ/^xŅ 'p@/_>/_˗/8`A&TaC!"g0߿|˗/߿| ̗/_/|#F1bĈ#F1bĄ /_|w0_/߿|˗/|E1bĈ#"g0߿|_|/_|/_|#F1bĈ#F1bD /| 70_/_> 1bĈ#F<`_|/_>3/bĈ#F1bĈ#Fh0_>70|˗/_0 0 < ,h „ 2l0__ ߿O@$XA 'p "Lp!ÆB(q"E W0_>`> /|'0_|%WbŊ`_|'0_|g0_ŊXbŊ+VX_> 'p@O |_ O| H K0a„ &L`> O`˗O`|˗/|%L0aB8`A&TaC!F8qb(R<"Ł(RHa(0E QH"E)*O@ O@`  ,40 (QD%Jx0ĂCOD$JLOD$20|!(a>%J(QDI,a>IX0_>(a> 1̇0_> (b>%J(QD!̗O |'P`7p'p "/a„ ̗0a„ ;0@@ o 8_| H H'p "LH0B "w0| 70_| S(`> 4x? 4xaB*TPB *TPB a|Co`>*TPB &̧PB w0| 70_>COB *TPa| *TPB *TPBw0_C`*TPB &̧PBw0| 70_|̧PB *T`> *TPB *TPB̗_+`> *TPB )TP|'P 0@ o|O@ DPB sСC:tСA$(߿| (`> O@ DPB 'p 8`A8 70?$H? 4xaB 6$0 O@ DPB >0|̗o`>#`#F0| ;_/|G0|#FQa"F1bĈ ;O`>a1bĈAq`;`| 70_>C/bĈ#*1_Ĉ#F1"| E4a>Q |,h „8| `,/_ ,`A /_ O@ DP `'p "Lp!ÆBoa1̗0_|{/_Ĉ˧0_|[/b| %̗/|=̗/bĆS/b#F1bāh0|%0_#̗0_|1a>Ka|#F/a"F1bĈ[/| ̷0|#FDa"c/b| ̷0|#F$a"F1bĈ[/| 0_|E`;/b0|5̇0| 拸0|O@ DPB >80B$X A$(0_ |+Xp` ,``,XP`'p O@` ̗| W | ,(0_ ,(0,h „ 2l!ā"F|`> ;`|˗O |'P`'0_˗_| /_|(0o  <0B 3`˗O`|'p /_ |'߿'P`80,h „ 2l!ā"F`>`|/_|g0_/߿|_|˗_|#`E1bD 0|̗_|˗O`|/߿|'0_|˗O`W0_"F1bĈ1b>#_70_|/|o`|/_> /_D"1"|k/|'0_`/_> ̗`7p <0… :|q`#˗/C ̗o` /_||/߿(0_|8p|8P`>$XA ̗/_8p '0_'P /|80߿ ?7p <0… :|q`#0|'0_|70_70߿|/_>˗O`"1_Ĉ0_>;O`|˗o`|'0߿| ̗/| /| 1bĈ#F/bĈw0|'0߿| ̗/߿|O8p`@8p 8p@8`A&Tx0| '0|˗/|w0߿|/_|˗_|+oB.\p… .\` .\o|-\pB.o| .\a̷p…-oB.\p… .\` .\o|-\0 H!D0B!D!BCX0|O@$80_| ` O@ DPB >80_Ĉ c/a#&a"F0| E`Et0 <(?8`A&TX? W` ,X` `| ,X` $` W`A8`A&T0| -\p| ̷pa| g0… .o| .\P`|-/… .o‚̷p… w0_[pB.,o„.4` .\80.\p!|˗o!|-\p|-\h0B.\p ̗oa|-\p|-\h0… -\h0| .\p`-\pB[`> 4xa‚ H!D/B"Da|!DX`> 4xa| H!D`> +` /߿(߿ 80_|70$? 4xaB 6tbĆ"(QD%J0D$W0|'0| w0|O`(QD%Jh0|%J(QD0|O`>˗/_|g0߿|G0|+_(QD%Jh0|%J(QD擘0|/_˗/_70|̗o`>˗O`;o`>$J(QD%"w0|%J(QD;O|@/߿'P`7p? OO@(?7p|/,h „ 2l!Ĉ;`'N8qĉ̇`> O|˗_| 7P | O /|G|/ H*\ȰÇ#JHŋ3jH? /|/߿|'0_|3/_| W0|_>|'p "Lp!ÆB(a'N8qĉE/|/߿|˗/_|w`>/?O@7`> ߿/,h „ 2l!Ĉ8qĉ'N1 (0|'Noĉ'N8qĉ'N8qĉ'g0D 8q|'N8qĉ'N8qĉ'N8_ 7q&N8qĉ'N8qĉ'N8q|3oĉM8qĉ'N8qĉ'N8q&&g0ĉ8qĉ'N8qĉ'N8qĉML`'7qĉ'N8qĉ'N8qĉ'p  O@$XA O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`68`A&TB$XA8P ,h „ 2l!Ĉ'Rh"ƌ۸q| 8P ,/_|˗/,h „ 2l!Ĉ'Rh"ƌ۸q| !0_6nܸqƍ7nܸq|7n4a>擘oƍ7nܸqƍ7̇0_|˗`> O| ̗/_>70_> oO$ |'p "Lp!ÆB(q"Ŋ/b̨`O`| W0|!70|'0_>G0|ka۸qƍ7nܸqƍW0߿|O`>a_˗o`>3`>3/_'0_|7nܸqƍ7nܸ1|/| G0| '0| /_#`so` /_|/_|mܸqƍ7nܸq|O|0@ (0A/_| /_#0@߿O@'0_|_ <0… :|1ĉ+Z1B$8? _ '070 '0@0@߿| `>'p A (? ̗o`O| H*\ȰÇ#JHŋ3V̗`70_>+o`O`˗/|w0_|+/|˗/|W0F5jԨQF5j<_>'0_|˗o |߿'p| G_|G0|(߿/߿| /A|˗/_> G0,h „ 2l!Ĉ'Rh"ƌiԨ1a>;b4jԨQF5jԨQ#|5jL`>{/_|5jԨQF5jԨb>5&w0| Q̧QF5jԨQF#ӨQc|-̗0|5jԨQF5jԨ1b>5&̗0_| ˧QF5jԨQF%ӨQc| ̗a| iԨQF5jԨQF H*\p!08`A Hp ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײmԀ;;PK@5 PK+AOEBPS/img/free.gifcGIF87a}?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,} H*\ȰÇ#JHŋ3jȱǏ C9`> 4x? 4xaB 6tbD)VxcF9v(0_|,˗/Ǐ?~Ǐ?~1_>}Ǐ?~Ǐ}Ǐ?~Ǐ?~̘`>~Ǐ?~G泘Ǐ?~Ǐ?~`0 o_>$XA .dC%NXE5nرb/߿| ̗/߿|O`|yѣG=zѣG ;_>˗O`|'0|yѣG=zѣG˗/| `>'P |,h B H*\ȰÇ#JHŋ3j`O`/_>O`:*ױcǎ;vرcǎ;G0| /߿| ̗/_` uرcǎ;vرcǎ̇1_|رcǎ;vرcLJ H8|+X |+Xp` ,X`A8`A&TaC!F8bE1f0F;oc|!۸qƍ7nܸqƍ m$oa>6̷1b7nܸqƍ7nܸ0A o O|o'p  ̗!B <0… :|1ĉ+Z1ƅ+o`>3oai̗o#|7nܸqƍ7nܸqa+_̷0_C$X`A$XA O@ DPB >QD-^ĘQ#|G0_| g0|mܸ`7nܸqƍ7nܘ0߿|˗_'P /8`A&T| 6lذaÆ 6lذaÆ 6lذaÆ 6$08_>/|'p H*\P!| <0… :|1ĉ+Z1#| w0_|o`>3OF 1̗/F5jԨQF5fw0߿|̗/_>W0|iԨQa4jԨQF5jԨbX0|5jTb>5jԨQF5joa>-̧`>'p 8`AO@,X_ ,X`> 4xaB H*\ȰÇ#JH滈0| 3aS/b]/ŋ/^xŋ["| !̗0|.Z̗0_| x_/^xŋ/˷0E;oa>.^a.w|/^xŋ/^oa-w0| ]la"h0ŋ]xŋ/^x_ H8|,H0_A ,X` ` W` +(0_|˗` O| H*\ȰÇ#JH.^T` ;`|/_O`|'`> O|8p'p g0| ̗` o`>8`A&TaC!F8bE]0|/|/߿|/_|'0_˗O`>曘"|W0߿|#_>a/^xŋ/w"|0_|/|_>'0߿|#_|(X0_ O`#a>.^xŋ/^/ŋs08_|'0|_>˗_O  8? |_'p| 'p A$XA .dC%NXa>%s` _>_| /߿|`>M̗`|/| /| ̇0_|-ZhѢE-ZϢE3o` 'P|7P? (0_|8p 8p7p8P`70_O` 70| 7p8`A&TaC!F8bE,Za,g`>E̗Oa'0_|˗O |߿'p|  <0… :|1ĉ+.gѢ| !W1_  gРA4X0 4hРA,? 4xaB 6tbD)V\ϢʼnKϢE,1|-̷0E-Zh"|,h „ 'p A8`A&T0| -\p| ̷`.\p`O@ D? ̗/_ 'p  O@ DPa> *T0B*TP‚˧p`> *$OB̧_> *SPa|*TP| *Ta>)TPB80,/_| 4hР|3hР ,`| 4hР g`> 4X0 ̗Ϡ| 4h`| 4hРA3hРA 4H0A8`A&TaC H8`A C_>8`A&$+XP` ,X`,/_ ,X`,X` $` ,X`,/,h „ 2l!Ĉ E'QD1| %g0ć$Jl |߿| o ˗/| G|  <0… :|1|I(Q| O@`>7p|/ o8p| <0|'0| W0|O`>˧PB *TPB *TH0‚*TPB)`>`>3`˗O`|˗_|˗/߿|˗`> *$O`> O`>+o`|˧0|)TPB *TPB ̗`*TPB'0| ̗_#_>'0|˗_|/_|/|#OB ? /|8p| 7P`/@O@ DPB >a(QĂ`>`> 0|'0_#``$.O@8`>߿8? O| 8|,h „ 2l!Ĉ'Rh"A̗/_ @ O@ 'p@O`|˗/_70߿|08`A̗`>`>W0߿| +/a„ &L0a„ &L0a„ %L0a„ &D_>O`W0_/|/_|W0_>`&Lp` +O`> `|'0_|%` &L0a„ &L0a„ &̗0a„ &La> #o`> K/|g0|'0߿| ̗/|˗O`> #/a„ 30|'p`| O'p| H*\ȰÇ#JHŋG0|'P࿁80 8p| <|aĨ0F1bĈ#Fø0| )̇a>ÈQa>1bĈ#F1:̇qac/ƅa(0F aĈ#F1bĈa> )̗/|=̗|0b$0 <0‚ H*\ȰÇ#JHŋ8`AO@W` H8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[o 0 <0ƒ H*\ȰÇ#JHŋ3jȑcرcǎ;vرcǎ9Q`;vرcǎ;vؑcرcǎ;vرcǎ9Q`;vرcǎ;vؑc>O`| '0_|0 @ ? 4xaB 6tbD)VxcF9f'0|O`> /|#``;vرcǎ;vQc /| '0_>˗o` o`|uرcǎ;vرcǎ3_o`>̗_+_ رcǎ;vرcǎ''p A/߿| 70|/߿| 7P` @ H? 4xaB 6tbD)VxcF9&w0߿|'0_>/|(߿|@o| <0… :|1ĉ+Z1ƍ;O`>/|_70| ̗_ Scǎ;vرcǎ;v,oa>O`| /_|#O`'0|[cǎ;vرcǎ;v$oa[cǎ;vرcǎ;v$oaccǎ;vرcǎ;voacOb|('p  'p "Lp!ÆB(q"Ŋ/b1|5"0| ̗b|ӨQF5jԨQF-O@ DPA$(0_/_+X`O@ DPB >QD-^Ęa>50| iDOF5jԨQF1ӨQ#| 1̗0| M̧QF5jԨQFiԨa>CbӨQF5jԨQƋ4jԘ0|g0|˗/|+/_|/_>4jԨQF5jԨa4jԨ0|9G0|˗_|W0_'0_>4jԨQF5jԨb>iԨa|{`O`|'P`o| H*\ȰÇ#JHŋ)'p "Lp!Æ'p (?O`|o`#`> 'p "Lp!ÆB(q"Ŋ/bT/|3f80_`˗O` /|%̗1cƌ3f̘1cƌ!̗1cƌw0| w0߿|˗/_'0|)̗1cƌ3f̘1cƌe̘1#|5w0|-̗1cƌ3f̘1cƌe̘1#| !`>8|  <0… :|1ĉ+Z`3fa2.0_ƌ3f̘1cƌ3̗1cƌ-̧0_Ƅ˘1cƌ3f̘1cF2f̘Qb>1̗/c|˘1cƌ3f̘1cF2f̘qb|1_勘/cƌ3f̘1cƌ ˘1cF0 ,  <0… :|1ĉ+Zq`3f̘1#|3f̘1cƌ3f80_ƌ3f̘b3f̘1cƌ3f/cƌ3f1_3f̘1cƌ3Ng0_ƌ3f̘Qb>2f̘1cƌ3f̸0|3f̘1cF˘1cƌ3f̘1#|,h „ 2l!Ĉ'Rd <0… :|1ĉ+Z0F1bĈ#|1bĈ#F1b#F1bĈb>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[j@;;PKnfPK+AOEBPS/img/fetch2.gif.GIF89aijl冃979*'(԰rsuJJLQRSCCDZZ]߹y{}|~bcelnptvxг`]]⼾oqsQNNdeh~ҿÎFFHvx{]^`UUWNNO_`c汮~~ڈghjzww/--YVVgeepmm@>=ŧ 312A@B==>$!"XY[кRPP󿽽HHJB@@Ȣ311c``!,ISSIкҬ HAX*\ȰÇEHŋ%ȱǏ Cn Iɓ(Lɲ˗0|A7mɳώ3]#?as"PJJիXjʵӦ`/=?1 aȝKݻx=߿ LÈ+^oz#KLepc'O"@c YpS3~lװc˞Mu̥sm[ 7A p`D`_?)p47@*D4_QRDIDEc6u 4 B~PF 6!)P9TdAfk~pF 6cЮ)L hPlp,`A$_) $p~0a@}01~]*q 9HK-QEkp p ~50 yB`t? ]t@ְn`е ULACncf(e dTe0cA_p,"(Dxˬ}mxM` 6ķIuV1_ E` FC0`)gekP )#f(apT 92ȡk~utG$A!U!BCp / PI(Q r$~p0p X-i~ TeBXWhCY̊B+ GU!00#L .K 2/ IH@sx_4`d0_# GI 0# cq~"i05/\4Uf R : $@P_tp{4&Ϭ4Cq8 pD:!J&:qLkcņ KBh1+43Vyz HGJd 0P ]Zڃ\/sc8/dHMRԦ6 t (w6K{"42z`zPz Gp ɿlLHA=`pH[`/̠ Aإ&Ti0s`3\*QEj8M-SP-])pvRvPW`H²FN/ v( h~@*9`)@rU@K_6A|;7\c ZT 33 R(;xP T d؍)kyL4}6.H0gL? R=@2^@ztpd{7E,10 3 x@+ PD PPD%ä Ј1LJ[`l(ts @:&Ndg*\J .Xd@z50ɀ'$N Z GxEW(K'a3ȈeXbX(rpK936j 0xC[@@bjK?Mn!а4 R D:7%K!` Ӝh9a $v  u/{C Mx'Wp]6`gsq0^4ĬO I\co[0l{^`BX(bMO`V (0t!T%i-?0ΉƂ"x<  ~뤆@0/4x~DpPU`F]&pkNEP9 QrSm_<x7Zx$x$(008Mw%V P< &ryy*`a3 07KgD5Yd@- 0/8 ا}ܧ ae:'AMOh,&P2@,P`$cP*0,u~G0":Gd34!~`N4 =685:1 Ti:U5%6 It" .~A ?E"uhwp:j`d@B:D=z,. PND3aQV zSʥ^Y["Adz.1h fڦpZjjlbv1Qz:|J~:Qq*Z1کp : zP␪jZ p԰Ыzʺ Īƺ萬:ЬԪx ֊ Z 亮 jЮZz`jJۭ;{` K  Z۱q0[ [š&@( Ų2 'J6; 8˳F˪>cApLbGЇ0rE[~C+ Ed;KGmP 0/p2U[0N05 c{+i~ )U"p: [Ga ^X&~pЙ 3jf4'60!4[Q`˨F#1;K ]ur%BW&(3g 07dIeG@ /{Ջ/мKE0\|,'$R!x&V~3k:0'P:GF$,` ̛ &$~s<01@.̸Dz=`~WGgIr\4ڊI;#0+"PmY{FsB p  -e~@?9HH>pR77o<2῎LYH ǖ< bɞb0" ɤ|ʨ\ʩʬ ʰʯ˴|ʳ\˸ȷ˼<Ļ̿Ĝ\lṵ̈̀̌|\lלܜବ䜫\̪ܩ̨\ ]]  }m ]}ѯz =!$}a(ҭ, 60ӕ :D .; v~g]puרXVmrmd|f:x @e0k biUt~bm`PQJm;m0P|kQtz+H ٠ {PcxqՇ{ @:l`F1Ɓ0z۸ۺ۾P5m(%ZQul uG=]n`ڽ=]}՝GM]}-mnΝQu_t`_q`0^NH@  ">$^&~(*,.^H/NH0S4^:<>@._n_'lK2a]= H`!yL/bj>EɠxwQUpN{ `~ppLKz 5VtYiXm0FP@/}艾n]Ȑp@`q:m Ҥn (UKc]P+ ӻҽ^ ~1K~+y^$0݌^ ]R .7>~N[~A1 ώ 0~Ҟ0 ?_ ?.} ? / ؼ& 0-_p^ 24 6_.0_ AC EOG 3"FRT/V_XZ:_OaQOIO KM Ocegikom/]y/{}wO su/ oq̇o ѕ oS ?*`Ƞɜ_fP ֏o _ @PrA M0,D/a@0nv!?rM?,aaCaL#2aF B9$/ 2>D6.($$)}& #B :a% ~ba q/\,L:R1ƹ ,(!0C gN[P9vA` chaH)}xŌ2-~#3!*qº c0X8 J6@瀡]dҨ l!#( `Ns #as&4CϹBt6A?8(\<9t`1ڜ>3p8Qs:p#abm "p=? VasܜP& "ǖ1AQESh d!cQyp"8hp eN QC@tN^BɌ_F28DxBdh` U$2DhYՔC9udCd'j0$>*S\ j@!hgXc9?@H!8ͩNwS!T@SC{=:)(6OJUPXBUPXI-#@l~A.pSCv Qd~0R0\A cd́UDrX* `ucA A 0Cj T RL:X*LNG sC;. #N[JM9^IxF6qOG$-{xD `Sx҄pw[.qH daҰhx\4 !oa]e['V0gloH |9;@@t B8:{p99恃@H`3s| G$l@- ~rvv:|&ad|;Yw.@p&aMmlL `@Hꕒg 6=h 9g;瀚a saZ@\^ˊcH  Jv}_}da(~bG!(~v wl%Ѓj#vr  AfAc,G~ QFT@X8p[f/p(k@A`"7p3Ip}@ ,fArVLp=I q-LzUPJ-pB `e`j&xNb8dXbRxd_W mYD(>.J~`M . y !b,(ca.c. M@PeU| -F >h5g,PlheH_GahXhHBjІ&؇ a،g|C=~uxԸ،<(@Ōؠ؍0(N([2h<(@efנAH H yhm7 2E"9 $*,ْ -94ِ2$5<ٓ>>i8 i YIHi<1NRyYG9Xi)M^b UɑW9 h]MnXYyr9jywіz6ؗt)vyǗ"Ę))͐yٙ k89y陥ٚ̀yxٙ`‰ Yȩ YxępYdIaٜ Iy9iyrIɞ6Yy㙟imɘʚ*Zy٠:[jjj١29Y&ʚ(N* ,.*09{T}yɹ<>G@BDFz$w٤RJT  P*qh8b Zv z h$0*%B5` &rdP @TKee`8$P@ TA@𐭷zz 1RayP/05 p2@ٴF@"r .-UBP1a`G7pȪGJ p@~Q }34&L9 *vV; JP3000L/ 7p~0`,0`3.pe),kk70Pl;Zd$:i0CP\5M1j{b^ stQFz+g; 'd.bꩆ b5)ƅX`  `6PG )q/e*C`kP!PJpd0hPk+U$!)0Y$Rk@pS`p`g\*c>J03iQUEd["@B:A:QD@7g0ʽw%GIP֬#ChQݻQ mjWlp =ZA03U?ufЉj ]n*CBKXDpBgp>Opnc:,cڜg=5A}ӌ/kM7V7,MpM$"@--J}L݇weJı4 Km*`.. `\#& `hs&gR.t| Sh{nD`{9pb)F&P>ɲw$~4#,zPMْv/66  g'kA$`ACmӽԄ˱#0GPG*H9P"~G } @i9dC(5@S]iu-|U0N7s 6^іvc鳬;iw47D Pq.`(ݕf#"'R>i ":`~u.-P30GL .OP߾Mct |(<0B [7K=(0z,`* a{!ڴx ` ev-(L TpeQ&Y:,e &\NQ.or~C6 0sDP mRK%% `QX8ApFp{ p6 e G@M2v$!JZjw03".@ {nOa~~k~~aMkak>>k>aFFk%>¡a>kÐ~ HAa)\(Ç#JHŋȱǏ %HÒ(S\ɲK!cʜIsH8 ɳϟ@sVJѣH*]ʴӧP: r'իXjʵׯKٳhӒ۷pʝPݻx7%۾ Lxˆ+^̘Ɛ#KLyʘ3k,2ϠCyӨS,װH2%۸sͻ Nȓ+_μУKN؃OI;PK*..PK+AOEBPS/img/var.gif*)GIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^0|,h „ 'p |,h A$H`> 4xa‚ H*\ȰÇ#JHŋ3jȱ|93cH1_|=zѣG=z|93c>C/_>/a> #O`|˗`>Q`|/_|=zѣG=z#|+O`̗_| '0|K`/|g0|k/c>˗? O@ DPB >QD-^ĘQF̗`|/|#`|3`>'0_>w0_|/_>˗`>˗O`|`> O8`A&TaC!F8bE1fԸc|̗`|/|#/_`>˗/߿|;`> /߿|'0_| ̗/߿|/_|˗_|`>:vرcǎ;vرcLj30@8|G0_| +/_A'0߿|'P G_|/_|˗O`|/|/_>˗|  <0… :|1ĉ+Z1ƍ 'p / ̗o`| o`|˗/8P  ̗o`|˗O`|'p@̗_|`>8_|/_˗/߿|'p@O@ H*\ȰÇ#JHŋ3ja W0|#O`|O`>˗0_|'0_>'0_> g0__>;/߿|˗_|/߿|`:vرcǎ;vرcLJ30@@ O@7`>'p`7p|/_| o| /߿|˗_|7p|˗/߿|'p <0… :|1ĉ+Z1ƍ'1|;cǂ:vرcǎ;vرcG:vg0_0@ H'p "Lp!ÆB(q"Ŋ/b̨q#nj:vg0_Q`;vرcǎ;vQc_:vcǎ;vرcǎ;vԘc|uOaرcǎ;vرcǎ71|[/_رcǎ;vرcǎ;'p "L 'p O@8`A&4 <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:5B$XРA$XA .dC%NXE5nG!Ә/H"E)RH"E)Rd|:)RH"E)RH"EĘc>"E)RH"E)RH1_>D)RH"E)RH")+/|!̗OH"E)RH"E)rb˗/| ̗/?O8`A&TaC!F8bE1fԸcGA`|/_0'p| H*\ȰÇ#JHŋ3jȱǏ C W0_|˗/߿| O80,h „ 2l!Ĉ'Rh"ƌ7r#ȏg`>A'p |,h „ 2O@ DPB >!|,h0,h „ 2l!Ĉ'Rhb|̗/|/_> O O@ DP…2dȐ!C 2dȐa| cȐ!C 2dȐ!C 2dȐ!C 2$`˗/߿|/_|˗_|1dȐ!C1dȐ!C 2dȐ!C"ǐ!C 2dȐ!C 2dȐ!C ̗/_>+!| cȐ!C cx0_|2dȐ!C 2d0C2dȐ!C 2dȐ!C 2dȐ!Á̗!|1$/_| cȐ!C cH0_|cȐ!C 2dȐ|/_>? 4xaB 6tbD)V0_>9w0ń.^0| ]xE /|]xŋ/^xqaC|/^ta.^xb|˗Oa/^xŋ/.W0_K/E.^0|wŋ%`|Kŋ/^xŋ w0| 8`A8`A&T| w0_Æ 6lذaÆ3/|װaÆ 6lذaÆ 6lذaÆw0| 6lذaÆ c`6lذaÆ "O@ /_ 08`A&TaC!F8bE3`>hѢE %/|YhѢE̗`| w0_|-ZhѢE-ZL/|+`>-Z0|g0E-Zla /_|SϢE-ZhѢE8p 7p?$H? 4xaB 6tp |#(`> 'p "Lp!Æ[a| =|Ç>|Çw0_|;`>>|ÇS/| KÇ>|x0| [Ç>|Ç>|0|w0|=|Ç̗0߿|̧0Ç>|`0Ç>|Ç>|a ;a> H8`Acoa|$6̗/_>/_>1_|c`0Dcoa>1`>'p g`| ,/_O@ DPB >Q`k/a|% 0_5'`>ca> I(a>(0|!0_>5̗`>%J(QDSa>$J,oa擈0_| -0ą$J0| 8`A8| W`+X`A `|8`A&TaC!B0_>;/"| 0| )1_s/|Eda|˗o`#/_| '0_|˗O |'p`  <0| +/_| %̗O| g0B *TPB *TP`>'0_| ;OB CO|)D/|) '0_|˗O`|#O` S/B ̧P`> ˇ0B̗`>*TPB *TPB)L/„g0_|/_>̗`|˗`w0|7`> OG AG A$H A#(0_/_|O`|/|70_> 8`A&/ ;`>̗/_3` SPB *TPB ˧PBW0_'0߿| ̗/_>˗O`g0|)$o`> /|/_;`> *OB3/|(7߿|'@ /|O@ Dp`>3` _|/| w0| *TPB *TP*TP`|̗_|˗_|˗/| ̗/_W0_>/|30'p`8`A̗0a|̗`>/_|8p? G0߿?#`>$XA w0_>G0߿|/|/|w0_>*TPB *TPB*T`| /_|'po@ (? O@ /_|O@ /_| HK | O|7_˗/|'0_|/_/8`A&T 7p?/_'P 'p@/A (? 4xaB 6t|#6W0_/| ̗/_>˗O`˗`=W0_>'0߿|˗O`"Fl/| w0|_|/߿|O`|/|%W0_Ĉg0_ g0|O`>+/| ;/_Ĉ#F1b|#6W0_|'0_|8p?O /߿|7p|o|/_ o  <0| ;_>/_> ̗o`|(߿߿(? ? 4xaB g0| W0_|'p࿁ o| / 80,h „ 2l!D"Fl`|#w0|'0_ć"Fl/| Ea#F`拘0|̷0_Ĉ#F1|#6W0_ w0_|0_拘oa#>1bĈw0|;`1bĈ#F/bD"FTa0_ĈE̷0_Ĉ1bāK/| 50_Ĉ#F1|#>1"| -̧0_ą"F|/b"F0_Ĉ#̷`>$ A G| G 8`A&TP |,h00 O@3hРA /A 4H0A g`> ϠA 4hP`> 3X0A 4hРA4hРA 4h|3h0_> ̗Ϡ|3hP`> 4hРA gРA ̗ϠA4H0A 4h| 4hР| /| ̗ϠA3hРA Ϡ gРA 4hР| 4hРA 4(0_> /A3hp`>480A 4hРA gp`> g| 4hРA8`A'p 80,(`> 4? 4xaB̧|,h „  O@ DPB  O@'p 8? ϠA 4hРA4hP`>4h`>O@ DPB >Qć"H"E)RH"|)RD`C`>"k"E)RH"ł H"E)RHb|)RD`| w0|aQH"E)RX0|)RH"E)R"E̗/_> |/߿80| <0… :|1ĉg0E)RH"E'H|/_|g0@ /?'P` ? 4xaB 6tbD';`>)RH"E)R"E̗O`|+/|˗_/_ /_>)RH"E˗`QH"E)RH|QH1_| ˗o`|8P /_|/߿| O@ DPB >QD-^ĘQF=NO@ D0a|̗/_>#_>˗/߿|/_ O@ DPB >QD UXbŊ+VX|+.G0|˗/| w0_|˗O`|G0_Ŋ+VXbŊ UXbŊ+VX"|+&W0|570_>*VXbŊ+VXbŊ+VXbŊUx0|0_WbŊ+VXbŊ+VXbŊ+VbŃ 棘aUXbŊ+VXbŊ+VXbŊ X`>(K|+VXbŊ+VXbŊ+V**| Hg0BS0,h „ 2l!Ĉ'Rh"ƌ7rcO@ O@8` H*\ȰÇ#JHŋ3jȱnj>JǏ?~Ǐ?~b}Ǐ?~Ǐ?~|?~Ǐ?~Ǐ-(1Ǐ?~Ǐ?~G>JǏ?~Ǐ?~b}Ǐ?~Ǐ?~|?~,0  <0… :|1ĉ+Z1ƍ/H1_ǎ棘cǎ;vرcǎ;v#|uqa>:vرcǎ;vرcNj80|;v\b;vرcǎ;vb>:W0_ǎ;_|رcǎ;vرcǎ/["|,8? 4xaB 6<`| w0,h „ 2l!Ĉ'Rh"ƌ7r0'p  g0B"D!B g0_|  <0… :|1ĉ+Z1ƍ/S|ua> /_:vرcǎ;vرcNj0_ǎ`|w0_ǎ;vرcǎ;vx1_G:vH`>'p`|7p | O@ DPB >QD-^ĘQFucǎW0߿|˗O`ױcǎ;vرcǎ;:בb;;O`>˗/_رcǎ;vرcǎH1_ǎ-G1|;vرcǎ;vر#|)ؑc([cǎ;vرcǎ;v\#|;n0| uرcǎ;vرcǎ ucǍ棘oa;vرcǎ;vqaO@ DPB H_+X`| W`A ? 0 O@'p`>$XA .dC%NXEx1|5:̷0|-1|勘/| ˧QF5jԨQFi`>[!|,h0` W| ,/_'p "Lp!ÆB(q"Ŋ/b(1Ƌ Өa4N0| ]̧0|5jԨQF5j81Ƌ C/_o`|˗/|˗/_0@ /A'p "L/B W0| SH0| <0… :|1ĉ+Z1|1+`|O`|/߿|˗O` ̗/_>+`4R̷0|̗Oc ;OF5jԨQF%ӈ1_|/|/_/|/_|;a>h1|g0|̗o`|˗/| g0|5jԨQF5j1F3/|(O o`@ (0|O@ D`;`>3O`|_`8`A&TaC!F8bE1fOF`|̗/_/_|(O/_>$XA g0_>W0_> ̗O`˗`̗`>$XA .dC%NXE˗1#| 70_>/_|/|/_| ̗_> H*\h?8| O /߿'p | O0 <0… :|1ĉ+Z1c>$XA w0|_|/|O`| ̗O`>#o… "/|#_>˗_>;`g0,h „ 2l!Ĉ'Rh"ƌ7&̇0_|'0_> ̗O |70?70߿8_8`A&T0|G0|8࿁ /|| H*\ȰÇ#JHŋ3jܘ0G q0|̷1|Ǒ#G9rȑ#G/Qa>3`>2C`qȑ#G9rȑ#Nj8rT#LJSb>ȑ#G9rȑ#Gq0G)̗oaS#G9rȑ#G9fǑ|9F̗`>&s`|9rȑ#G9rQ#|,h „  O@ DP„ ? 0 O@'p`>$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȑ%O\e̊;;PK@B **PK+AOEBPS/img/lnpcc016.gifGIF87ah?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,hO@ DPB >QD-^ĘQF=zO@ DPB >QD-^X?7P`| /_|˗/7p`| /_|˗/7P |'P |'P |'P |'P`| /_|˗/7p`| /_|O@ DPB >QD-^(0_ƌ3f̘1b3f̘1cƌ3f/cƌ3f1_ƌ3f̘1cƌ3 ̗1cƌ3f/cƌ3f̘1cƌ3/cƌ3f̨0_F H`A$XA .dC%NX`>,ZhѢEh_>,ZhѢE-Z`>-ZhѢń,ZOb>-ZhѢE#3ϢE-Zh1a>哘Ϣ|hѢE-Z"|'p  0 H0_| <0… :|a|{0|a| Ç>|Ç =,/|˷0_%̗O`|>|Ç1̗/|.w0| [/_|'0_|˗_|O?(߿ ߿8P <0… :|0D ̗O`| O@ /|'`> #8`A&TaÆ˗O`|3/|-̗/|/|/_̗|@˗/߿|˗_|/_O`|/_'p "Lp!Æ.`|/|˗/| 'p'O࿁'? 4xaB 6da|˗!| 3Oa|0(0_>/߿|'`>O O <0… :|0D ̗o`| ̗O`|̗o`|/߿|/_>˗O |'p "Lp!Æ 1̗_9d/a|)̗o |(80_> ̗/_/߿|'0_> ̗_|8 <0… :|0| /?o@ /|'0_ ̗|߿8`A&TaC'0_|[`> ̗O`˗O`|˗`|/_> ̗_|/|/_ ̗O`|/C:tСC k/|'0_>'0_ ̗O`|/_>˗O`|/|:tСC1̗O`|2g0_ S/|0@ @ O O  ߿ o@$XA .dC k0@8߿'P |o| | H*\Ȱa| /C˗/|:D/|'0_>:tСC3ϡC:tСCСÁСC;/Á  <0… :|1|%J(QD%2'Qb|I0D%J(QDI(QbBO@ DPa|[0|-\p| [p… .\p… .\p…-\p… [p… -̷p`>[p̷p… .\p… .\p… [p… g0_|˗`| ̗/_/_|˗O`| ˗/|̗/|˗O`|˗/_| ̗/| .\`> , <0… :|1ĉ+gѢŇ O@ /|/_>'0_/_> 7P`>/|/߿|O`>O@ DPa| .\p… .\p… .\`>.\pB #O`>/_>_|˗`>+/|/| '0_8`A&TaC!F8bE1 g0_ƌG0| `>_7p/߿/˗O` ? ̗/߿| ̗/߿| H*\ȰÇ#JHŋ3/cF '0_> /| 70߿|˗O`> ̗O`> '0߿|˗O`|'0߿|'p "Lp!ÆB(q"Ŋ/b<@8`A&Ta>70|80߿߿| ˗/|˗/|˗O`| ̗o| ̗/_8`A&TaC!F8bE1 ̗1cƌ3f/cƌ3f̘1cƌ˘1cƌ3F̗1cƌ 8` H*\ȰÇ#F'QD%J(Q"|%J(Q"|I(QD%JDO@$XA .dC% <0… :<|>|Ç>,a|{H0Cp`=$|=|Ç{80Ç>|Ç 3a=$!| {80Cp`>>|C+|>|Ç>,``=$| {H0Á{Ç/_>Ç>| S/_|{H0Cp`=$|=|Ç G0Á>|C=C=T@80'P ,/A3h| ϠA 4/A3h`>O@ DPB `>9tСC:tС| 'p`>$H0_ +X | $`,X` W` $? 4xaB 6do`>'p "Lp!ÆB(q"D$80_ +X | $`,X` W` $? 4xaB 6do`>'p "Lp!ÆB(qC$H0_ +X | $`,X` W` $? 4xaB 6dO`|9$ϡC:tСCsH`>8` 4/A3h| gР 4/A4(0,h „ 2l0_|9$ϡC:tСCsH0_| sX0Â`>9,!|9tСCsH0C:tСC g0_| sX0Â`>9,!|9tСCsH0C:tСC g0_| sX0Â`>9,!|9tp |,X? 4xaB"̧PB *TPB *T0| S0„&̧0a>)LOa| SH0B ̧a> *)LOa| S0„&̧a>)TPa| SPƒ H`A$XA .dC#(0|/$/$sOĄ$(qa>$J(QD%"'Q |,h „ 2l!ĈO@#/_ `,X` `'p "Lp!ÆB1D$/$'1$'1| /Ą${Ob|I(QD%JDO|IO|哘O|哘a> ̗Ob|9̗/_>'1D%J(QD$ '1$'_>$'_>c/|擘!|O@g0A'p "Lp!ÆB1| ˗Ob>IO|IO|90_|$*̇`> 4x ,/_|4h0,h „ 2l!Ĉ̷`>8` 4/A3h| gР 4/A4(0A˗ϠA 3(`> 4x ,80| 'p "Lp!ÆB(qC$H0_ +X | $`,X` W` $`+X`,Xp` 'p`>$X`> O@ DPB >QD Hp` W`A ,H0_+X | $`,H0_+X`,Xp` ˗/_ W_  <0… :|1b|80$`,X` W` ,H0_ +X| W` ,X0_+X` ,| ? 4xaB 6tbĈ$˗/_|/$/$sOĄ$(`>$(QD%J0|I'_>IOb>IOb>$JLOb>擘OD%J(Q"|擘O|/|/|I0|%.'1D%J(QD$ '1$'_>$'_>(1a>$J\Ob>%J(QD0|/$/$sOĄ H`A$XA S0B *TPB *TP|)O!| S0„"̧0a> )DO!| *TPB *0 O@ DPB >1b>擘O|/|/|I(QDI'QD%J(a>'p "Lp!ÆB(_>$XA .d|{Ç>|a| {80C`=$!|sÇ>|x0Á>|Ç>|X0Â`=$| {H0Á{Ç˗`=|Ç>|`=!| {H0Á`9Ç6'0_>Ç>| ̗/_=$!| {80Cp`>>|C G0Á>|Çz衇 (,8`>8` 4/A3h| gР 4/A4(0,h „ 2lP`>Ç>| [08 | $`,X` W`A ,H0_+X`>$XA .da|)O@ DPB >QD Hp` W`A ,H0_+X | $`,H0,h „ 2l0_'p "Lp!ÆB(qC$H0_ +X | $`,X` W` $? 4xaB 6da>9tСC:tС|-̗/_>9,a| sH0Â`>:tСC8߿'p 'p "Lp!ÆB1|I'_>IOb>IOb>$J(QD$(QD%J0D$/$'1$'1|%J(Q"|I(QD%JDO|IO|哘O|哘a>%J(`>$J(QD%"'Q`>$'_>I'_>I0D%JH0|%J(QD(0|/$/$sOD%J$0 O@ DPB >1b>擘O|/|/|I(QD%J(QD%:g0_|IO|哘O|哘a>%J(QD%J(QD k0 <0… :|18`A&TaC!F8bE1 g0_ƌ3f̘Qa3fd0 O@ DPB >1b>%J(QD(QD 擘OD%J(Q"|%J(QD%2'QD%'1D%J(QD$.̗/|1_|0@ H`| ,0 H|  <0… :<|>|Ç>,a|_|/|{(0_=/߿|0|{Ç˗`˗`>|Ça˗a|9̗o`_=<|Ç>l/߿|#/|G0Ç>|Ç 3|=a|0_˗/_p`|˗/|>|a|70_| ߿'p "Lp!ÆB1|/b>I̗b> /|1_|OD%670| 70|%J(QD3O|E1_>9O@$X`>ϠA4H0_O@ DPB ``>:tСC:`> ̗|sH0__|970C̗o`:tСC G0_| G0C:tСC |9$?O@˗`,X_|,X_| ,(0_˗/| H*\Ȱ!|#`G0C:tСC СC:tСCsСC̗/_|̗/_|:tСC:t(0C:tСC:TϡC:t0C:tСC:tP`>:tСC:t0C:ta>9tСC:tС|9tСC:tСÁ:t8`> , <0| SPB *TPB *T`> *TPB *TPB SP‚"̧PB)DOB *TPB *TPa>*TPB *TPB *,OB S0B ̧a HA$XA .dC1bĈ#F1|#._'p 8`A'p "Lp!ÆB4`#F1bĈc/_D"1b|勨0_Ĉ#F1|#F1bĈ#F,a|/_Ĉ E/|#F1bĈE1bĈ#F`>Et/|˗/b|!̗/|1bĈ#F4/bĈ#F1bĈ1̗/|s0 H | 3/_gРA'p "Lp!ÆB4/bĈ#F1bĈ1̗/|8`A 'p g0 gРA'p "Lp!ÆB4`#F1bĈc/_D'p O@3|3/A  <0… :|`>"F1bĈ#F|a|/C g0˗`> ? 4xaB 6t|E1bĈ#F0CO@ w |˗/3` ;x| H*\ȰÇ 3/bĈ#F1bć"F\/|ED`3/|#F1bĈE1bĈ#F`/_Ĉ̇0_|ET/bĈ#F`#F1bĈ#1|aET/bĈ#F`#F1bĈ#1|aET/bĈ#F`#F1bĈ#1|aET/bD 1bĈ1bĈ#F1b|#.O@ 'p "L(0B* *TPB  ̧a> S/_|˗o`| ̗/|#0@/'P70߿ 70߿8P ,h B O@ DPB >Q|'N81"|,X? 4h0A/߿|/߿|'0_O(0_/_>˗O`|/_| ̗_|/_>$XA <0… :|1D&N8qb|MDOa|/߿|/|G0_>/߿|0@@ '?8? O@ D/| H*\ȰÇ#Jtoĉ'F'1D'`>8p(0_> ̗/_/߿|'0_ ̗_|8P O@ D/,h „ 2l!Ĉ' G"E擘| /|/߿|/_|'0_|/߿|'0_ ̗_|/߿|/_>QH"E)Rd"E)̗/_|˗`>)̗O`| Oo ? `>߿7p?( $XA .dC%N"E)'0_> '0_>(Gb| '1|(R"E)RH"|)RHQ`|g0|Q<"Ń;/_D O@ DP| .\p… .\p… [p… .\0|` [pB.\p… 3o… .\p… .\0a .\p…+ |'p`>$XР| H*\ȰÇ 3/bĈ#F1bć"F1b̷0|1bĈ#F4`#F1bĈ1bĈC`>Qa#F1bD 1bĈ#Fa#F`>/˗/_>$H A'p "Lp!ÆB4/bĈ#F1bĈE1bĈ E/|#F1bĈE1bĈ#F`#FQaET/bĈ#F`#F1bĈ#1bĈ#*_ E1bĈ#1bĈ#F1bĂ"F1bD"Qa#F1bD"F1bĈ#FX0_Ĉ#F`> ,8`A H*\ȰÇ 3/bĈ#F1bć"F1bĈ#1bĈ#Fh0|#F1bĈ#>1bĈ#F1bĈ#Fa>"F1bĈ#F|/bĈ#FT/bĈ#F1bĈ1bĈ#F1|#F1B$X O@ 'p "Lp!ÆB4/bĈ#F1bĈE1bĈ E/|#F1bĈE1bĈ#F`#FQaET/bĈ#F`#F1bĈ#1bĈ#*_ E1bĈ#1bĈ#F1bĂ"F1bD+ |'p`>$XР| H*\ȰÇ 1bĈ#F1b|#F1|G0| ET/bĈ#F`>"F1bĈ#F|/bĈ#Fo`>S/|#F1bĈ1bĈ#F1|#F1|w0_|拨0_Ĉ#F1|E1bĈ#F0_Ĉ#F/|'0_>"*1bĈ#Fh0|#F1bĈ#>1bĈ#70| Qa#F1bD"F1bĈ#FX0_ĈEQD߿|/708`A'p "Lp!ÆB4/bĈ#F1bĈE1bĈW0|;/|#F1bĈE1bĈ#F`#FQaET/bĈ#F`#F1bĈ#1|#F|/|1bĈ#F4/bĈ#F1bĈE`> , <0| S`> *TPB *TP`>*TPB *TPB *,OB S0B ̧a> SPB *TPB 3OB *TPB *TP‚*T`>)TPA$X ,h`>$XA .dC1bĈ#F1| 80,h` ;x ;x` <0… :|`>"F1bĈ#F|a|/_Ĉ E/|#F1bĈE1bĈ#F`>Ed/|aET/bD 1bĈ1bĈ#F1b|0_'p ,X0|˗| 480A ,/_|8`A&TaÃ:tСC:tС|s_> H8`Ag_>gРA,/_|70_|˗O`|O?(߿߿| (? 4x| H*\ȰÇ#J(0|(&̇`> 4x ,/_|̗o`> 4hp`>/_ '0_˗O`|0'P`|/_|/|˗_|/߿|˗_| HO@ DPB >QDG1a>'p`>$X`> g0A g`|/߿|/|G0_>/߿|0@@ '?8? O@ D/| H*\ȰÇ#Jta|擘!|'p gp`|3hР ̗O |7p@'P`|/_|'0_ ̗O`|/߿|'p <_>8`A&TaC!F0ĉI0_w0_&"̧0_> '0_˗O`>̗O`|g0_>˗o`|/|'0_>˗O`|81|'N8qĉ8`>&N`曈0|˗/@ 70߿@(?70߿߿ '? H3? 4xaB 6tbDMx0|' g0AO| HA8`A&Th0… .\p… .\p‚.\_-\p| [` .$o… .\` .\p… .\p…-\p?$X ,h „)DOƒ*TPB *TPB*TPB *TPB *T(0B *TPB S0B)TPB *TPB)TPB *TPB *TP`> *TPB  O@ 'p  O@ DPB >h0|#F1bĈ#>1bĈ#*_ E1bĈ#g0_Ĉ#F1bĈE1bĈ E/|#F1bĈ1bĈ#F1|#F1|勨0_Ĉ#F1|E1bĈ#F0_Ĉ#F(0_|!̗/|1bĈ#F4/bĈ#F1bĈE1bĈ ̗`g0_D"F1b 1bĈ#F1b|#F1b|g0_  4? 4xaB 6t|#F1bĈ#F,/bĈ#F,` 拨0_Ĉ#F1|#F1bĈ#F,/bĈ#F/_| ;/|#F1bĈE0 HAaE1bĈE1bĈ!w0|1bĈ#F4` ˗/| 70_'0|˗/_3/_|G0|0@70߿7|o8`A&,OB *TPB ߿8`>80,h`>$XA .dC`> O(0| ̗_>˗O`| 7_|o|/_> ̗/|/|/|? 4xaƒ*TPB *T(0B*G0| G0_| 70_| ̗`>+O`'0_>_>/B *$OB *TPB)DOƒ*TPB *TPB*W0|̗/@ ߿|80߿__> '0|'0_(߿|_@$XA SPB *TP| S`> *TPB *TP`> ̗O`|̗O`>O`| /_>'0_> o`|'0_|G0|/|OB  ̧PB *TPB"̧P| *TPB *TP| 3/_|̗O |@| /_| O`'P o߿70߿| ḨPB *TPB H`A$XР| H*\ȰÇ 1bĈ#F1b|#F1bĈ8`A H*\ȰÇ 1bĈ#F1b|#F1bĈ#F1bĈ3/bĈ#F1bć"F1bĈ#F1bĈ#6g0_Ĉ#F1bĈ8`A&TaC!F8bE1O| H*\ȰÇ#Jtoĉ'N8qĉ'N1|'N8qĉ8qĉ'N8qĉ'F7qĉ'N8q|'N81b'N8qĉM0 O@ DPB >1_Ĉ#F`> , <0… :|1b|擘OD%J(a>%J(`>$J(QD%"'Q`>$J(QD(QDW0|%J(QD(0|%J(QDI(QĆ˗`>$J(QD%"g0_|I(QD%"'QD`>$J(QD%"g0|哘OD%J(a>%J0|I'QD%J(a>'P ,/,h „ 2l!D"F1b#/|#F1bĈ#3o!|O@'p "Lp!ÆB/bĈ#Fo`>'p "Lp!ÆB(q"D$80,h „ 2l!D"F1bG0B$XA .dC%N| O@ DPB >1_Ĉ#F(0_|E/bĈ#F1b|˗/_|#F1bĈE1bĈ E/bĈ#F1b|˗/|#F1bĈE1bĈ E/bĈ#F1b|/_Ĉ#F1"|#F1|1bĈ#F1| E/bĈ#Fb#FQaE1bĈ#F`"1bĈ#F1_Ĉ#F0_"F1bĈ#Fg0_|1bĈ#F| H'p 8`A&O!| *TPB *TPB ̧p |,X? 4xaB 6t"|#._'p 8`A&TaC!FO|I(QD%"'Qb|I0|%J(QD(0|%J(QDI0|%g0|%J(QD(0|%J(QDI0|%̗`>$J(QD%"'Q`>$J(QDc/Ć$(Q`| 擘OD%J(Q"|˗Ob>%J(QD'a>'`>$(QD%J0| (? ? 4xaB 6t"| 0_˗/_Ă S0 <0… :|1ĉ8 | H*\ȰÇ!c/_D"`>'p g |,h „ 2l!Ĉ'BO@'p "Lp!ÆBa|C0  O@ DPB >1b>'p ,? 4xaB 6t"| 0B$X H|4h0,h „ 2l!ĈI̗/_$J(QDc/Ć$s0 HA$? 4xaB 6tbĈ$Ob>%J(QD'a>˗/ą$(QD%J0D$(QD%JDOĄ$sO|I(QD%JDO|I(QD%"'Qb|I0|%J(QD(0|%J(QDI0|%.'1D%J(QD kOb>%J(QD$JL0 O@ DP`>)TPB *TPB *g0 H`A$XA .dCE1bĈ 8` H*\ȰÇ#Fg0_|I(QD%"'QD%'1D%J(QD kOb>%J(QD$J(Q|'1D%J(QD$ '1D%J(Q"|%J(a>'1D%J(QD$ '1D%J(Q"|%J(a|'1D%J(QD"˗/|%J(QDI(QĈ擘OD%J(Q"|(? ? 4xaB 6t"|#F1| S0 <0… :|1ĉ8 | H*\ȰÇ!1bĈw0B$XA .dC%NO@ DPB >1_Ĉ#F/|1bĈ#F1| 80$? 4xaB 6t"|#F1"|_>$Xp`>$XA .dC#3oa|E'QD%J0D%JH0|%J(QD3oa|$(QD%JDOD%J$Ob>%J(QDIOb>%J(QD$J(QD$(QD%J0D$(QD%JDOD%J$Ob>%J(QDIOb>%J(QD$J(QD$(QD%J0D$(QD%JDOD%J$Ob>%J(QDI0 O@ DPB >1_Ĉ#F`> , <0… :|1b|ItOD%J(a>%J(QD%J(QD (QD%J(`>%J(QD%J(QD (QD%J(`>%J(QD%J(QD (QD%J( |,h „ 2l!Ĉ'Rh"F H*\ȰÇ#J/E)RH"E)RHQ`>)RH"E QH"E)RH"EH"E)R0EQH"E)RH"|)RH"EH |,X? 4xaB 6tbD)V4ϢE-Zhb>哘ϢE-ZhѢň hѢE-ZLϢ˗`>-ZhѢE#3ϢE-Zh1a>;O`|YhѢE-Z1|-ZhѢE 1O@$XР|`>$XA .dC%NX`>,ZhѢEc/ńg0E-ZhѢEYhѢE-B0_> %̗`>-ZhѢE#hѢE-Z!|'p  ;H0| H*\ȰÇ#JH|-ZhѢE1̗b|`>-ZhѢE#hѢE-Za|;/_|YhѢE-Z1E-Zh"| 峘0|-ZhѢE-Fg0_CO@ DP|̷pa̷p…-/… -70_|˗/߿| ̗/_3/_|G0_|˗O`>7`>'p`˗O`|/_|˗o`|˗/| 7pO@ D0_„8`A&TaC!F8bE k0@ O? /| ̗_|_|O`/|_|_|/| /߿| '0@/|/_>o? 4xa| O@ DPB >QD 棘`>3o`>O`70| #O` ̗o`70߿|/|+O` '0| ̗b>哘ϢE-ZhѢň(3` O |_7p__>̗/?'P`>_o|O߿7? ,ϠA 48`> , <0… :|1ĉ+G1|/|G0߿| /_'0|'0|/|˗o` ̗/|˗O`> _| '0|b>-ZhѢE-Z1|˗O`>0߿߿'P`| 7P`| ̗/_>˗/|//_|/|˗/| '0_|8p'p "Lp!ÆB(q"Ŋ/b/cƌ3f1_ƌ3f̘1cƌ3 g0_ƌ3f̘1!|,h „ 2l!Ĉ'Rh"F ? 4xaB 6tbDM8qĉ'N8qĉ#3oĉ'N8q|'N8qĉ'N8qĈ 8qĉ'N0ĉ'N8qĉ'N81b'N8qĉ8qĉ8` H*\ȰÇ#F'Q`>IO|I(QD$J(QD$(QD%J0D H*\ȰaB$XA .4!C 2dȐ!| cȐ!C 2dȐ!C c0Ã`>11dȐ!C 2dȐ!C1D| cx0Cǐ!C cȐ!C 2D/_ǐ!C 2dȐ!C  g0'p 8_|(08P`/_ 0 /,h „ ǐ!C 2dx0_`> 2dȐ!C 2dP`>˗/| ̗`ˇ0_|W0| 1dȐ!C2dȐ!C `>1dȐ!C 2dȐ!C̷`>/| W0_WP` ̗/_|+XP`>$XA .4!C 2d`S0 <0… :|1ĉ3_| o@8_'0߿|8`>8_>$XA .4!C 2d`S0 <0… :|1ĉ+(0|+|W__ W| H*\h0C 2dȐ|`> 2dȐ!C 2dP`>8߿'p  '0_ +(`>80@˗/߿|80O@ DPB2dȐ!C /| cȐ!C 2dȐ!C ch0_| [`+`> +O`|g0| 2dȐa> 2dȐ!C+| 2dȐ!C 2dȐ| |'p`/_ / o|o|'p  <0…1dȐ!C 2$| 2dȐ!C 2dȐ| cx0Ã`>1dȐ!C2d0C 24| 2dȐ!C 2dȐ|1| cx0Cǐ!C cȐaB$X ,h „)DOB *TPB *TPa>̧0a> )LO!| SPB  ̧PB)DOB S0B *TPB *TP|)Oa| S0B&̧PB *OB S0B O@ 'p "Lp!ÆB1| IO|哘O|%J!|'p  ;x`1b>8`A&TaÄ H*\h0| ̗/C14!C 14!C 2dȐ!C 2!| cx0Ã`> 2d0|cp`>1/_| `> 2dȐ!C 2dP`>1<| ch0Ã2dȐ!| 8? 4x0<0 H`|4h0,h „ 2l!ĈE̗_>IO|IOD5O@$X`|'p O@g0A'p "Lp!ÆB1_D O@O|7_|8`>8P`>#|'P  <0…1,/C!O@ , ˗/|  <0… :|1b|-O+/_>W_> W0_> WP`? 4xaB [/_>cP`>108`A 3H`> 4xaB 6tbD!? W_|W0_+(0_| W_̗`>$XA .4!|'p  ;x`(? 4`>8`A&TaC!F880_ o`|7P` 7p` o| H*\h0C ch0C1d`>1dȐ!C 2dȐ!C̷`>(080߿|7P`(?#/|#(0A G_>$XA .4!C 14!C`> 2dȐ!C 2dP`>w0|˗/_ 3a/|W0C 2d!C 14!C`> 2dȐ!C 2dP`>̷0|`>+o`| ;o`|1dȐ!C2d0C2d0C2dȐ!C 2dȐ!C"w`>80'0@7p 7_|8P`| /,h „ ǐ!Äǐ!Åǐ!C 2dȐ!C  a>1<| cx0C 2d!C 8` H ̧a> *TPB *TPB*̧0a> )LO!| SPB  ̧PB *TPB"̧PB *TPB *T0| S0„&̧a> )TPB SPB *TP@$X ,h „ 2l!Ĉ0$'_>$'QD$J(QD$(QD%J0| 8`A&TaÄ H*\h0C 2dȐ!Cǐ!C 2dȐ!C  g0`>14| 2dȐa> 2dȐ!C14!C 2dȐ!C 2!| cx0Ã`> 2d0C 2dȐ!|`> 2dȐ!C 2dP`>`>1<| cȐ!C 1dȐ!C '0_>ǐ!C 2dȐ!C  ǰ |'p`| (0(?#/|G_|#/A  <0…1dȐ!C ̗o`>ǐ!C 2dȐ!C  |_O70_>̗`|#/_> AO@ DPB2dȐ!C #O!|,h „ 2l!Ĉ'B? o|7P`/_(0_(0/,h „ ǐ!C 2d0_'p "Lp!ÆB(q"8|+/_|'0߿|+_>+`'p "Lp| 2dȐ!C;| 2dȐ!C 2dȐ|-OO@|/|``  <0…1dȐ!C ̇0C2dȐ!C 2dȐ!C [/_> 3`> #_|w0_|˗_ǐ!C cȐ!C 240? ? 4xaB 6tbĈ [_;`G0|;`> W0$J(1D%JH0|%J(QD(0|Ca|G0|;`> W0$J(1D%JH0|%J(QD(0$'_>$'QD$J(QD$(QD%J0D$'_>I'_>%J'QD%'1D%J(QD$ '_>IOb>I(Q"'p "Lp!Æ'p 8`A&TaC!FO|/$/D%(QD%J(QD%Jt` H*\ȰaB$XA .4!C 2dȐ!C 2dȐ!C 2dȐ|1dȐ!C 2dȐ!C cȐ!C 2dȐ!C 2dȐ!C 2d(0| 2dȐ!C 2dȐ!Â2dȐ!C 2dȐ!C 2dȐ!C  g0C 2dȐ!C 2dȰ`> 2dȐ!C8` H*\ȰÇ#F'QD%J(Q"|%J(Q"|I(QD%JDO|I'1_|'_>%JTOD%J$Ob>%J(QDIL/߿| 1|/_|$J(Qa>%J(`>$J(QD%"'1a˗b|5̗o`>(QD$J(Q|w`>80,h „ 2l!ĈILo`$1_'QD I(QĆ˗`(QD%J0|/b>勘/|I(Q|%J(a;Oa>%J(QD'Q`"拘/ā'p ,h „ 2aÆ 6l0|̗/_6lذaÆ 6lذ|56lذaÆ 6lذ| 6lذaÆ 6lذ| 6lذaCG0|3aÆ 6lذaÆ װaÆ 6lذaÆ *װaÆ 6l/_˗/| 6lذaÆ 6l_ 6lذaÆ 6lPa 6lذaCװaÆ 6lذaÆ kذaÆ 6lذaÆ kذaÆ 6Da| 6lذaÆ 6l_ 6lذaÆ 6lPa 2|,X? 4xaB"̧PB *TPB *T0| *TPB *TPB ̧PB)DOB S0B *TPB *TP|)TPB *TPB *TX0B ̧a> *<0 O@ DPB >1b>$J(QD%J,OĄ$(qa>$J(QD%"g0D%J(QD1̗/|I擘OD%J(Q"|%J(QD%20_|'`>˗O"|I(QD%JDOD%J(QD˗O`|$'1C O@ 3? O| H*\ȰÇ#F'QD%J(Q"| /_|$'1C ̗`>$? 4xaB 6tbĈ$J(QD%Jd!| O@ w|,h`A$X_| 3/A8`A&TaC!FOD%J(QD'p@$X |'p O@3|3/,h „ 2l!Ĉ'QD%J(Qb| /߿|$'1C O@ 3|3? 4xaB 6tbĈ (QD%J(`>˗_|擘a|$g0|I(QD%JD`>%J(QD (1a>$J$`> g0D%J(QD (QD%J(`>擘OD ;/_|I(QD%JDOD%J(QD$JLOb>擘OD%J(Q"|%J(QD%2'Qb|I0|%J(QD(QD%J(a>'p 8`A&O!| *TPB *TPB )TPB *TPB *TP`> *TPB  ̧a> *TPB *TPB*TPB *TPB *T(0B *TPB 'p 8`A&TaC!F`>%J(QD (QD 擘OD%J(Q"|I(QD%JX0D%JH0|%J(QD3OD%J(QĂ$J(QD$(QD%J0|%J(QD%'QD˗` 8`A&TaC!FOD%J(QD$J(Qb|#`>$J(QD%"'QD%J(Q"|%J(a|w0|%J(QD(QD%J(a>%J1|˗`>%J(QDI(QD%J0D%J|/_| ̗`>%J(QDI(QD%J0D%Jl/| 'QD%J(a>$J(QD%J,OD%6̇0|3OD%J(Q"| ? 4xaB 6tbDM8qă ߿8_|? 4xaB 6tbĈ (QD%J(`>%J(`>$J(QD%"g0D%J(QDI(QDI'QD%J(a>%J(QD(QD 擘OD%J(Q"|%J(QD%2'QD%'1D%J(QD$J(QD%JdOD%J$0 O@ DPB >1b>%J(QD(QD%'QD%J(a>%J(QD(QD%J(QD%Jt`>%J(QD (QD%J(QD%Jt`>%J(QD (QD (QD%J(1a>$J(QD%J,OD%J$0 O@ DPB >1b>$J(QD%J,OD%J$Ob>%J(QDI(QD%J0D%JH0|%J(QD(QD%J(a>%J0_|O@ <0… :|1b|%J(QD%2'QD/_>SOD%J(Q"|%J(QD%2'QD`(QD%J0|%J(QD%'QD`w0D%J(QD (QD%J(`>%J0|'0_>$J(QD%"g0D%J(QDI(QĆ#oa>$J(QD%"g0D%J(QDI(QĆG0|O| H*\ȰÇ#F'QD%J(Q"|%J(a| ;/_|I(QD%JDOD%J(QD$J(QD$(QD%J0D%J(QD I(QDI'QD%J(a>%J(QD(QD 擘OD%J(Q"|%J(QD%2'QD%'1D%J(QD (QD%J(`>'p 8`A&O!| *TPB *TPB ̧PB *TPB *TPa| *TX0B*T |,X? 4xaB 6tbĈ (QD%J(`>擘Oą$(QD%J0|%J(QD%'Qb|I0|%J(QD(QD%J(a  4A'P O@ DPB >1b>%J(QD[/|$"'1CO@ g0  <0… :|1b|%J(QD%2̷0_>I`>'p g0  <0… :|1b|%J(QD%2̷0_>!O@ , g0g_>$XA .dC#3OD%J(QĂG0_>!O@ $ g0g0,h „ 2l!Ĉ'QD%J(Qb| /D$s0@ H|,`>$XA .dC#3OD%J(QĂ'P ,h` ;x0_g0|3? 4xaB 6tbĈ (QD%J(`>擘OD ;/_|I(QD%JDOD%J(QD$JLOb>擘OD%J(Q"|%J(QD%2'Qb|I0|%J(QD(QD%J(a>擘Oą$(QD%J0D%J(QD I`> , <0| SPB *TPB *TOB *TPB *TPB)TPB *TP |,X? 4xaB 6tbĈ (QD%J(`>%J(`>$J(QD%"g0D%J(QDI(QDI'QD%J(a>$J(QD%J,OD%J$Ob>%J(QD'QD%J(Qb|%J(a| S`>%J(QDI(QD%J0D%JlO`|%̗`>%J(QDI(QD%J0D%Jd/|!/|%J(QD(QD%J(!'p "Lp!Æ#`|Ç>|Â>|Ç>|a>|a|'0|>|Ç>,Ç>|Ç{Çw0AO| H*\ȰÇ#Fg0D%J(QDI(QĆS`>%J(QD'QD%J(Qb|%J(!|_>$| H*\ȰÇ#Fg0D%J(QDI(QDI'QD%J(a>$J(QD%J,OD%J$Ob>%J(QDI(QD%J0D%JH0|%J(QD(QD%J(a>%J(`>$J(QD%"'QD%J(Q"|%J(Q"A$X ,h „ 2l!ĈI(QD%J0D%J(QD%J(Q|%J(QD%.̗OD%J(QD%J(a|I(QD%JH`> 4xaB 6tbD)VxA  <0… :|1D  <0… :|1ĉ+Z(`>80,h „ 2l!Ĉ0@ H*\ȰÇ#JHŋ(_> <0… :|1D˗/ĉ'N8qĉ'N8Q |/,h „ 2l!Ĉ' W0_|(RH@$X ,h „ 2l!Ĉ˗`>%J(QD;/_|%J(qa>$J(QD˗/|%J(QD%2̗0_|$J(Qb|I(QD%6̗/_$J(QD%Jdoa|I(Qă$(QD%J\/_| I(QD%J0_|(Qć+Ob>%J(QĄ0|%J(QD%`>8`A&T|G0_Â6lذaÆ 6l0_| g0_Æ 6lذaÆ 6l80_ÁװaÆ 70| kذaÆ 6lذA O@3 |O@ DPB >Qb>'QD G0|%J(QD˗Ob>'P ,h „ 2l!ĈI/_|%Jx0|)O@ DPB >Qć H*\ȰÇ#:'`|I(Qb|̧`> 4xaB 6tbD!'p "Lp!ÆB0D'QD ̗`>$J(QD˗O|8? 4xaB 6tbć$"̗/_>%J/_$(QD%:̗/_>I̗/_>%J(QDIL0@ H*\P`5lذaÆ 6l0_|6a|6lذaÆ 6lذ| O@$XA .d| 2dȐ!C 2$0@ H <0… :|1D&2̗/_> H`A$XA S0B *TPB *$0@ H <0… :|1D&:̗/_>$81a>&N8qĉ7a>&N8qĉ':7b|'1 8` H*\ȰÇ ˗"ā "D!Bb|!̗/_> |"D!B/_|!"D!B"D'0_>˗O`>A0D B"D˗"ă B"D!B1| |'p 4(0_> 4/A'p "Lp!Æ̗/_>"D!B"| ˗bB O@3hP |'p gР| H*\ȰÇ(? 4x| H*\ȰÇ#J(0|("̗/_>'p`>$Xp`|4h0,h „ 2l? O@ D0,h „ 2l!Ĉ' 0_> (߿8`A 'p g0A'p "Lp!Æ˗/Ç3Oa|=|Ç>|`a>'`> 4x ,80|  <0… :l/_|>`  <0… :|1| /Ą˗/|8? ,`>8`A&TaC!F8",h „ 2l!Ĉ -̗/|$&g0_|s/_| 3O!|,h „ 2l!Ĉ'BO@ DPB >a>;0@ ? 4x!|%L/a„ &L0a„ ˗/_„ &L/aBO@ DPB >a>K0@? 4x!|%L/a„ &L0a„ ˗/_„ &L(0_„K0a„ &L0a„ &L0a &L%'/|/a„  ̗0a &L0a„ &O@$XA  ̷` .\p… .\p!| .\/B/… ̷` .\p…(? 4xaB-\p… .\p… .,o… 'p 8`A&O!| *TPB ̗/_> *T_> *TPB *TPB  ̧PB ̗/_> *,O!| *TPB ̗/_> *Tp`>*TPB *TPB *,OB *,/_| *T80B*TPB */_| *TPa|)TPB *TPB *TX0B *Tx0_|*T|,X? 4xaB 6D/_|:t0|:tСC:tp`>:d0@ HK0_„ &L0a„˗/a„ &Lh0| H*\ȰÇ#Jto ˗o|M8qD O@ DPB2dȐ!C 2dȐ!C 1dȐ!Cǐ!|`> 2dȐaB O@ DPB2dȐ!C 2dȐ!C 1dȐ!C˗!G0C2dȐ!C˗!C 2!C 2dȐ!C 2d0C 2dH0_|*̗o`>ǐ!C 24/_| 2dȐ!| ˗/C 2dȐ!C 2d80C 2dh0_|2`>1dȐ!C ˗/C 2dh0C  <0… :|1|%J0_|$̗`> H*\ȰÇ#J? 4xaB 6tbĆ$J(1!|'p 3/A H*\ȰÇ#J? 4xaB 6tbĆ$J(q!|'p W`8`A&T!|kذaÆ 3o!|'p "Lp!ÆB0D%6̗/_ ߿8` 4hРA 4hР@ O@ DPB̷0_|6lذaÆ 6lذ| 6lذa|k0_Â6lذaװaÆ &װ` 6lذaÆ 6lH0_Æ 6l0_|װ` 6l0_|6lذaÅ6lذa 6lذaC6lذaÆא`5lذaCװaÆ 6װaÆ 6lذaÆ *װaÆ 6/_| kX0_Æ 6D/_| 6lذaC6lذaÆ 6lذaC6lذaÆ(? W`8`A&T`|1dȐ!C cȐ!C 2dȐ!C 2ǐ!C 2d0@ H|,X? 4xaB ˗/C 2dȐ|1dȐ!C 2dȐ!C cȐ!C 2/_| 2dȐ!C(? 4xaB 6<`>:tСC:t80C:tP`|9tСC (? 4xaB 6L`>:tСC:t80C:t`|9tСC˗ϡC:tH0|:tСC:tp`>:tС|#0 O@ DP|[p… .\X0… .\p… .\p‚.\p… ̗/_>̷p… ˗/… .\pƒ.\p… .\p… ̷p… .\!|'p 4hРA $/_| H*\ȰÁ>|Ç>|a>|!A O@3hРA 4(0_|8`A&TaC=|Ç>|!|>||̗/_>;Ç (? 4xaB 6th0Ç>|Ç2Ç6̗_|(߿ O| HO@$XA .d!|=|Ç>|a|>|a|'0_|`̗/_>||=|Ç>|a|>|a|G0_|3Ç˗Ç>|0|>|Ç>|X0Ç>|0|̗/_ {|{Ç:g0Ç>|ÇÇ670|(?'p "L/_| &L0a„ &L`>$XA .dC%N"E)'0_>0@? 4x|K0a„ &L0a„'p "Lp!ÆB(q|)RH`| C0? 4xa|K0a„ &L0a„'p "Lp!ÆB(q|)RHa/ʼn  <0… :|h0D!B"D!"D!{/_|!O@$XA .dC B"D!B1D!B1|"D!B`>!B"D!&"D!BQ |'p  ̗/_>"D!B"D!B O@ DPB >Q|'O@ 'p "L(0B˗/B˗OB *TPB g0B *TPB *TPB)TPa| SPƒ H`O@ ˗/_>$XA .dC "D!Bb|!6Q`>(0_A O@˗/,h „ 2l!D"F1bĈ#FX0_Ĉ E/bĆ"w0_|'P ,h „ 2l!ā"F1bĈ#FX0|QaEh0|w0_|[0@ H*\ȰÇ 1bĈ#F1b| /_D"0_| g0|g0|C/_|#F1bĈE1bĈ#F`qa9O@$X`| 3/|4/_|˗/,h „ 2l!Ą"F1bĈ#FX0_|勸0_'p@$Xp`> 70| O@ H*\ȰÇ3/bĈ#F1bća> H8` 3/|4H`>8`A&TaC!6g0_Ĉ#F1bĈ9̗/"|8`A 'p g_ 3hp | O@ DPB >0|#F1bĈ#>0_ E!|'p g_>g? o`>$XA .dC 1bĈ#F1|0_˗/|!̗/| (?˗? 4xaB 6t"|#F1bĈ#F,/bą"1b|S/_| ˗/bĈ#F`#F1bĈ#1|a!̗/_>1bĈ#FH0_Ĉ#F1bĈ qaE0_ ˗/_1bĈ#F(0_Ĉ#F1bĈ qaE0_˗/_D  <0… :|1D!B"D!!|,X? 4xaB"'0_|*,0@ H*\Ç"D!B"Ą B"D H H˗!B"D!B"D`>8`A&TaC!F0ĉ'N/"|'p ̗/_>"D!B"D! O@ DPB >Q|'N81b  <0_|"D!B"D!B3? 4xaB 6tbDM8q'P ,h ˗0a„ &L0a„  <0… :|1ĉQH"E+a|˗/|)˗/_>)RH`>)RH"E QH"ŁG0|˗/|)̗/_>)RHq`>)RH"E QH"E G0A O| H'P ,h „ 2l|!B"D!B"D!B\`>/|!:̗/_>!B"|!B"D!B"D!BL/_|(߿| ? 4xa˧PB *TPB SPB *TPB *T`> *TPB w0@_> <0a|SPB *TP|)TPB *TPB *TX0B *TPB!/_|/| *TP`|)TPB *T`>*TPB *TPB *,OB *TPB ߿'P`|? 4xa„˧PB *TPB SPB *TPB *T`> *TPB ˗/ƒ*TP|SPB *TPa> *TPB *TPB  ̧PB *TP!B O@3hРA 48`>8`A&TaC=|Ç>|!|>|'0Á>|`>8`A&TaC=|Ç>|!|>||#|>|/_|>|Ç>|Ç>|a>|!|'P |,X? 4xaB˗o… .\p!| .\p… .\p… [p… .\(0_|.\p… ˗/… .\pB [p… .\p… .Lo… .\pa|-\p… "̗/_ .\p… [p… .\p… .Lo… .\0a|-\p… ./_| .\p… ̷p… .\p… .\0… .\p|[(`> , <0…(? 4xaB 6$`>:tСC:t80C:t0_|`>:t(`>8`A&TaC:tСC:tС|:t|s80C:t!|sСCsСC:tСC 9tСC(? ϠA 4hРA 4h`|'p "Lp!C6lذaÆ 6lذaC6lذaÄ ˗`WP`>$XA .d/_| 2dȐ!C2dȐ!C 2dȐ!C 1dȐ!C ˗/˗`˗`> 2da|1dȐ!C cȐ!C 2dȐ!C 2ǐ!C 2̗/_> G0|ǐ!C *̗/_> 2dȐa>2dȐ!C 2dȐ!C1dȐ!C ˗a|w0|1dȐ!C (? 4xaB g0_Æ 6lذaÆ 6l80_Æ 6l(0_|70| g0_Æ 6lx`>8`A&T|5lذaÆ 6lذaÆ5lذaÆa;o`>6lذaÄװaÆ g0_Æ 6lذaÆ 6l80_Æ 6\0@ HG0|3)6̗/_>IG"E ˗"E QH"E)Rd"E ˗b|QH|H|)RH"EHb|81|)R1_|(R0E)RH"E(R,|H_>(RHQ"|'p "Lp|1dȐ!C 2dȐ!C cȐaB$X@$XA8` H*\Ȱa|sСC sСC:tСC9tp`>˗ϡC9$ϡC:tH0_|:ta>:tСC:t|:? O@ D_>)TPB *TH0_|*TPB SPB *TPB *T`>80,h`8? 4xaB"̧PB *TP|SPB )TPB *TPB *TP`>˧P| ˗/| *T`>;OB *TPB˧PB SPB *TPB *TP| ˗OB˗/| ˗/B3`|3OB *TPB˧PB SPB *TPB *TP| ˧Pa|˗`>8? /_> 70| H*\ȰC  <0a| *TPB *TPB *O|*T |,hA$Xp`> 70| H*\ȰC  <0| *TPB *TPB *O|)T0A$XA8` 3/|'p "Lp!Æ˗/Ç 3Ç>|Ç [/_0@ H_ 'p`>$X`> 70| H*\ȰCC {Ç>|Â'p`>$XРAO@,H0_| ,XP`O`|O@ DPB :̗/_ g0Ç>|Ç|{a|3a|{Ç>/_|>g0Ç>|Ça|{(0Ç{80Ç>||{a>|Ç>dÅ  gРA ,ϠA8`A&TaC 'P ,h ‚8`A&TaC!F8Q`>˗O`>(R)RH |'p "? 4xaB 6tbD1_|擘"Ń$H"E˗/E(RH"E)2Ga|O@ 'p "L(`> , <0… :|0_| B$"D!B"DA`>8`A&Ta>1dȐ!C 2d0_|2T`> 2dȐ!C 2dȐa| "̗/_> 2dȐ`>1dȐ!C 2dP`|1d0| 2dȐ!C 2dȐ!Â24/_| 2dȐ| cȐ!C 2dȐ!|c`>2dȐ!C 2dȐ!C1dH0_|2dȐ!|̇0_|1dȐ!C 2d`|1dH0| 2dȐ!C 2dȐ!Â2/_| 2dȐ|#`|8`A&TaC!O@$X`| H*\ȰÇ#J(0EG"E G0|G"E)R/_| H"E)R0EG"Ew0|QH"E˗/Ł(RH"E)2G`>8`A&T| ;o`>6lذaÆ 6l(0_|"װaÆ 6lذaÆ *װ |'p "Lp!Cw0|5lذaÆ 6lؐ`|54aÆ 6lذaÆ 6T!|kذaÆ C`>װaÆ 6lذaCא`>6lذaÆ 6laÁ ̗/_ 6lذ |_>/_>'p "Lp!ÆB|/_|1bĈ#F1| ˗/bĈ#*_#F1bD +/,h „ 2l!Ĉ[/_|'N8Q`>&N8qĉ'P | H*\ȰÇ#Jt/a|M8qD$8qĉ'N$/_| M8q'N(0A O@ DPB sH0C:tСC ˗/|:tСC:tPa  <0… .O@ 'p "Lp!ÆBx0_| (QD%J(a>'QD%>'QD%J(1_|(QD%J(a>'QD%J(QD%J(0_|(QD%J(!|'p "Lp!ÆB(q"Ŋ/FO@ <0… :|1D8qĉ'N8qĉ'2̗/_> 7p`| /_|˗/7p`| /_˗o|80_|̗/_˗o|80_|̗/_˗o|(`>'p "Lp!ÆB(q"Ŋ/b4 <0… :|1ĉ+Z1ƍ;z? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{p` 6|qbŋ7vrdɓ)W|sf͛ ;;PKإPK+AOEBPS/img/setdesc.gif;GIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3jȱǏ CIɅ H8`A&TaC!F8"C$XA 'p "Lp!ÆB(q"Ŋ/V̗/_>˗#F1bĈ#|/È#F1bĈ#Fh0_|1bĈ#Fx1F1bĈ#F1"̇Qa>1bĈ#Fa#F1bĈ#F3c|1bĈ#FC/_|̗/|/|aĈ#F1bĈ|]̇#F1bĈ_/| '0_>w0F1bĈ#F1w0߿|O7? ? 4xaB 6tbD)g0_>`'0_|WbŊ+VXbŊ+;_|˗/|˗/_>W0_Ŋ+VXbŊw0|'0|`+VXbŊ+VX1| /_|/_>3bŊ+VXbŃ /_+|/߿'p| H*\ȰÇ#JHŋ˗`0GP| 0 < ,h „ 2l!Ĉ ˗/|70_| `>˗? 4xaB 6tbD)VxQa|/|'0_|'0߿|a|/F1bĈ`/߿| ̗_O`È#F1bĈc|/|˗/|/_> 1F1bĈQ`>'p࿁߿߿| ߿/,h „ 2l!Ĉ'Rx`> 4x ` $` ,X`O@ DPB >b$J\`>%J(QD%J80Ć;O|kOă$J(QD%W0D 'QD%J(QD0|IOD$J(QD%g0D 'QD%J(QD0| ItOĄ$J(QD%g0D 'QD%J(QD;0@ @ o 8_>$XA"D| H*\ȰÇ#:g0D 'QD%J(QD;``˗/D'Q|%J(QD 3Oą (QD%J(QDG0_| ̗`'p 'p "Lh0B *TPB *TP|8`A&$@8`A&TaC!F8bE;``hѢ|-ZhѢłhb>-ZhѢE!w0_|+|'p` ? 4xaB *װaÆ 6lذaÆװaÆ5lذaÆ 6lذaÆ 6<08_>/|'p H*\P!|, <0… :|q |, <0‚ H`>$XA .dC%N(0_W0|`> XbEXbŊ;`%s/_Ŋ+VXbŊ`>'0| `+V$a+VX1aXQb>*VXbŊ+Ŗ0_EXbE XbŊ惘bE XbŊ+V81|[O!|O@'p "D+X| H*\ȰÇ Ag`> 4xA$(0_O@ DPB >QĈ棸0| ̗a|)̧0_|)RH|Gb>"H"E)RH`(.̷0| -G| EG"E).1|)c/b>)RH"E[| 0_|ca(RH"Ņ"3`#/_> w0|QH"E)Rx0|[`HQa"H"E擘`O`70| EG"E)R"(0 $XA .dÅ W0|̗``> "D!B"DAao`>/_/_|3O`|/|Q`>!B"ā G0|̗`| w0|"D!B"ć B0_#_'0|`| '0_>/ā B"DH0| W0_'0| A"D!B"D z| H*$/_| 'p@/_| '0_|@ '߿o`>$X`>$XA .dÅ ̗/_+/|(_>0'p 'p "Lp!ÆB(qb|)Ra70߿|70߿|/߿|`>QH"E Q$`>/|_(*G"E)RH|)R`> |_`> O|8p8`A&TaC惈0|/_|˗O`>˗/|"D!B"ć B0| `|惈0D!B|a>A"D!B|!Bta ̗o |'p 4h`>$XA .dÅ ""|"D!B"ć B0| A_> A"D!a>0D!B"D!>"ćS"D *"D!B80D BD|!B"D8`A&TX?  <0„[/…  ̷pa| 8`A'p |,h „ O@,X | ,X` ,X`| H*\ȰÇAQa> B_|9̗"DAdoa> "D-a>0D!B|!BTa>!B08`A H 'p  ̇p`>g0B"D|C!|,h B H!D!B"D!Ḃ!B"!| H*\ȰÇ#&̷0ą (Q"| I(QD$J(QD O@ O/_G| H*\ȰÇ#*̷0| O@/8_| Oo /߿  ߿8| H*\Ȱ|:tСC;`>+o`/|̷0C:tСC[`> g0|'0_> /߿| 70| '0| 70| 9tСC 9tСC:D`>`>/_|̷0C:tСCS`3`>O`G0|_`70|:tС|:tСC `>̗o` 8p`|(0߿|7_>$XA .dC%w0߿|G0|/| W0_|70| '0|70|7qĉ8qĉw`>߿8@ O| /@˗? 4xaB 6tbć̗a| O'p|Gp`'P'p? /߿߿(0? ߿| _| H*\Ȱ|СC:l0'p|O`>#Hp`|@$XA .dC%JO@ W_8P 70| ˗`>_> G_#0 <0… :|(? 4xaB 6t_+O`> `|'0_|G0D!B"D g0_3`'0_>70߿| 70|G0|`> B"DA"D |_#˗o |߿/,h „ 2l!Ĉ`| O'p|Gp`| O70߿O|'p`˗O` 70,h „ 2l0a>|Â>|0Ç>|Ça>>|Pa>|Ç>|C>|0Ç>|Ça>>|Pa>|Ç>|C>|0Ç>|Ça>>|Pa>|Ç>|C>|0Ç>|Ça>>|Pa>|Ç>|C>|0Ç>|Ça>>|Pa>|C=C=C? 4xaB-\p… .\p… .̷p|-\p…-\p… .\p… .\p…8`A&TX? 4xaB 6tbD8`A'p |,h „ O@ DPB >QD-^ĘQF=~RHG$I$I$I$I$I$)1_>$I$I$I$I$I$I>̇0I$I$I$I$I$Id| $I$I$I$I$I$I.0I$I$I$I$I$Id|$I$I$I$I$I$I"0I$I$I$I$I$I$| G$I$I$I$I$I$I0_>#I$I$I$I$I$ 'p "LpaB$H`> 4xaB 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ:v|/|u0_;vرcǎ;vqc#;`>:vtcǎ;vرcǎ;v̘cG3cG:vرcǎ;vx`>'p 8`A&4 <(0B"D!Ḃ!B"D`>$XA .dC%NXE;a˗q`3 0_ƌ˘1cƌ3f̘1cƋ˷0_ƌe/cƌ)̗1cF2f̘1cƌ3f̘b+be̗1cƂ˘1c|3f̘1cƌ3fX1_|0|e̗1cF̗/cƌe̘1cƌ3f̘1c|w0| ̗/@O|`>߿ _>$X| `>8_0|'P`|8p8`A&TaC!FOD%J(QD%J(Q|{`| ̗/߿| ̗`/_>_|W0߿|$ 'QD%J(a>%J(QD%J(QD w0|w0|'0_|/|˗/|/_>#O|%J(QD(QD%J(QD%J0_| '0D 1W0|%J(QD(QD%J(QD'p "4+/_`'p /_| W_ W@$XA 8` ? 08`A H8| H*\ȰÇ#JHŃ.F0| !w|Ȩ0_{`|̗a|˧0ŋ/^xŋ1|-̧0ŋ 1_|/0_>Ka%wŋ/^xŃ.F0| 1w|拘a Sa>S|]xŋ/^x`>/| '`>/ |+X`| ,X` +X0_+/_ ,X` W` +80_| ,X`  <0… :|1ĉ+ZD`| ̗o`>a>'p`>$XP |,h „8| `|+X` $| Wp`+(0_A `+/,h „ 2l!Ĉ'Rha'0_|70|1wŋIW0A8_|˗O`|'0_|#80A #(0 Gp`>'0_|8? ̗/_ o| H*\ȰÇ#JHEO`| G0|!G0|/^80| /_|'0߿|_'0߿|`>勘`#O`˗/߿| ̗/|_|#ŋ/^xŋ!/|`'PO|O@ DPB [a|;_|O`o`| /߿|#`|(? /7_O`|7070_> /_| H*\ȰÇ#JHѡ0_|(_߿|O@ H ,h „ 2lH`> 4X?0_>O`/|O8P ,(`>'p (?/|(?_| G|,? 4xaB 6tbD)V/|/|70|w0E-̧0_|˗/| /|_>/|/A O|o/߿|'0_|70_/| oO@ DPB >QD+/a>/_|7`>/߿'p| H*\Ȱ!| 9w0߿|'0|'`>/߿| O| 7pO`808_>˗O`|8P` _> 7pO@ DPB >,/_>8`A&T? 4x`"Da>!,0 $ <0B.o… Co!|-` .̷` .\p… ˗o`| ˗o… &̗/…̷pƒ˧0_| ̗/… *̷p| 'p ,h`̇0_>>|Pa | %|>D|>4Oa[Oa{H0Ç>|a{C.g0Ç 1̇0Ç{|{!| -̷0| =|0C>|Ç 1̗0| {a | W0C>|h0Æ>|(0| 5̗`>><|>|C;/a =|0C {Pa> k!|>,| H˗!B˗/B/_|"O| H|3hРgР8`A&TaC g0|˗O`|_|`> @̗/| ̗/߿|˗o|8pO@ Dh? W0_˗_|˗O`|˗/|+X` ,H0_ ,H`> 4x@$X|/߿|_ 70Ä>|_ /߿|˗O`|˗/|+Ç=|Ç>|C>|Ç 9W0߿| /_>`> /_;O`'0߿|o` =||;_>/|˗O` {|>|Çz衇:| H*\ȰC`>'p`'P࿁(0|/| /|˗_>0@7? 4ϠA 4hРg_|o8`> 4xa H*\ȰÇ#J0E)Rd/|/_|/|/_˗O`/߿| ̗o`_| 70|)R4`_|'0_|g0E)RH"E)*G"E#`>`| ̗/|˗/|(߿|?0__ gРA 4hР O`˗O`|˗/|'p "Lp!ÆB(q"ŊYhѢ|9w0E,Z`>,Z/EhѢE-Zhb|-Zh1| ga>  `;x-ga>-ZhѢE-*gѢE%̇0_>,ZH0_|Yh`> hѢE-Zh|-ZX1|0_|-R̗/|Yh`|,̗/E-ZhѢEhѢŊ˗/E$XA &O@,XP`>$XA .D0 $ <0… :|1ĉ+Z,ŋ;ŋ+K`/^xŋ/^x"|]x|]xb| wŋ/^xŋ/^d/a/6O@'p "Lp!Æ'p 8`A&TaC!F8bE1fh`> O@ DPB װaÆ 6l0|5lذaÆ 6lذaÆ 6lذaÆ 6l`>6lذaÆ kذaÆ 6L/a6lذaÆ 6lذaÆ 6lذaÆ 6lh0_| 6lذa|5lذaÆ &א` 6lذaÆ 6lذaÆ 6lذaÆ ̇0_Æ 6l0a> H*\(? 4x`>C!B"D!B ? 0 <0aA$XA .dC%:7qĉS/ĉ7a&N8q| 0ĉ 8qĉ'N0ĉ'Nt/a'>7qa&N8qĂM0ĉ'N8qą&N8q|8qb|拘oĉ'c/a%8qĉ'N0ĉ'N|`擘oD曘0_|'N81| 7Q` M8qĉ'NLoĉ'>g0|M4o"|MD/b'Na s!| H'p "Lp!ÆB(a'N1_|˗/_/_>/? 7oO߿| H$/_|˗_|˗_|/߿|˗_>/|M4ob'Na>3/߿|˗/|3_|/_>/_|˗`'N8qĉM8qDˇ0| ̗/| ̗o`_>/߿|/_> 80_|8qD+/|/_> /|˗/| /,h „ 2l!Ĉ8qĉˇ0@7PO/߿߿o`/߿8`> 4? 4(0_7qĉ'N8q`'N8Q`/_|'0_| O7߿|߿/߿| O| HK0a„ &L0|w0|˗/| g0߿|'0_|˗_|+` &L0a„ &L0a„ ̗0a„ &L0a„ %L` &L/a„ 30 <0!/_| ,` +(0_ ,X` `>$XA .dC% 7qĉ'7a 8a>&N,oa|1_| ;o@O@˗`A  <0… :|1D&N8qD&N(1ĉ7qb| KaKoD8qĉ'N/ĉ'NX0ĉ'Nx0|'̇0|!̧0|'B̗0ĉ'N8q&N8qD&N0_3a|˗o`|_> A$H_>#H0A <0| )TPB *TPB *OB *TPB ˗/B *T(0_|*TPa>_O`| w0| S(0B ˗/A 4hP`|,? 4xaB 6tbD$J(QD H*< <0|G0_O`| w0| S(0B 'p "D O@ DPB >Qb>%J(QD%J0|W0߿| /߿|70|w0D%J4OD%J(Q"|%J(QD%J(a +`_;` 'P /8`A&TaÂ:tСC:t_>:tСC:tСC ˗`>/| ̗o` (? 0'p "Lp!Æ8`A&TaC!F <0… :|1ĉ+Vw0| ̗_/|/A O|80,h „ 2lX0,h „ 2l!Ĉ'Rh"ƌ7r|`| ̗/_o`O`>;cǎ uرc;vرcǎut`>رc|;vرcǎ;vر|;a>'p  O@ DPa>$XA .dC%NXE5n0_Gsa>:˗#|;vرcǎ;vر|Ca>ؑc;vرcǎ;va%̗/a+cuرcǎ;vرcǎutoa|1| Yױb;vرcǎ;v"|,h „ Hp`|,X` /_|8߿ O O@ D`>$XA .dC%NXE5nDŽ;_|˗/|˗/_>W0H@ $H A $H w0߿|˗/|˗O` 0_> A $H A $|;_>'p`/'p "L8? 4xaB 6tbD)VxcF9v1b_|˗O`|`> A $H A $H/|˗/|/_>  $H A $H A 1|  $H A $H A/|s$H A $H A d|  $H A $H A91H@ $H A $Hѐ AV2H A $H A $ȋu$H A $H A R# H8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n]wջo_x;;PK W;;PK+AOEBPS/img/dealdesc.gifDGIF87aV?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,V H*\ȰÇ#JHŅ HO@ DPB >QD-^ĘQF1G=zѣG=z1Lj ѣG=zѣG7;o`|70|/|yѣG=zѣG̗`>+_> ̗/|yѣG=zѣĠ0|'0|`>=zѣG=zqc>˗O` `> ߿80,h „ 2l!Ĉ'Rh"ƌ7r0_|'0|70? /˗/,h „ 2l!Ĉ'Rh"ƌ7rX0_>/| ̗_O`>ѣG=zѣG=FG0Ao`o`/߿/߿O@ DPB >QD-^ĘQF#c|yѣG=zѣG1b>=zѣG=za ȑ`qȑ#G9rȑ#G w0G=Ǒ#G9rȑ#G9&1GAǑ#G9rȑ#G91_A$XA8| ? 4xaB 6tbD)VxcF+拘`> 11G9rȑ#G9rh0_|qla8rȑ#G9rȑ#G"+c| E`>'p 8`A&Tp ,h „ 2l!Ĉ'Rh|w0|̗/|;a0w0|0b/F1bĈ#F拘` O`70| İQ`-̇|1bĈ#F1bdOb>#`| ̗/|-'1S#FaĈ#F1bĈqa;`̗_>Sob>Ca>0^̇#F1bĈ#F(˗/|̗`| w0|Q̇`>$80_ W`,X` O@ DPB >QD-Vw1|̗`> /O@ HA<80| '0|/_>/_>O O ˗O`|˗_|7_>$XA .dC%NXb|W0|_|w0Ń.0|̗_| ̗O`|/_/߿|/߿| /߿|O`'0|/^xŋ/^b70_|˗/|˗/_>.w1|+o`|˗O`70߿| /| ̗_>/|]xŋ/^xb.Jw`>`>'P` o`> '0_o`O`/|O8p O@ DPB >QD)/ʼn,"71|/_|˗O`|/߿|'0߿|/߿| ̗o`_|g1E-ZhѢE/ʼn,"'1_|70|˗_|˗_|0@o8_> /߿oO@ w H*, H*\h?8`A&T `+X` ` W`AW|+X`,X` ` +X` ,X` ,80_8`A&T`>2dȐa| 1\!C1dh0 c/| p |'p  ;x |w<(0|"D!B!DP`> C!B g0B"D|!D!Ḃ`>"D!B"̇|!/"D!BC!|g`>_7?˗o`|#HP`>/_|(?߿(0_|˗o`|8`̗/_> ߿߿o`7߿_>$(0,h „ 2lX0Á;a|:t0_>sh0| '0_|'0_Oa> /|`>o`>70|'0_ /߿| 70߿| '0| 70| 9tСC 9O!|O@'p "Lp@$XA"$`>`> /_|!`>`|#o`#O`|a> _>G0|'0| W0߿||"D!B"D(0B"D!B"D!B CP` 3/|!/_> |g0|̗_>` /|!G0߿| /| w0| 70|/|W0,h „ 2l0|9tСC:4a| 'P7p 0@ _7P`|O |/߿/߿'P`̗_ O@ o` ߿8||߿| |_> '0_>$XA .dpa|СC:t`> Hp 80߿| o|̗o| 8| O| 7P |߿?7_ ߿|8P _˗o| /|o| 7|,h „ 2laB$XA .dC (? /_ O`#/| ̗/߿| +/_'0|`>'0| 70|#_ ̗_ /| /|#o`| G0_| H*\ȰÄ {Ç>d|O|`80_|'P࿁8_>#(0_|'p70߿߿߿߿_/˗/@ o`_ /(0_|/|O@ DPB &w0Ç>|!| {a|=||=|a|>|Ç5 |,h „ 'p w` ;x`$XA .dÃ˗_| ˗"D ˗a|˗Oa>AQa> B`> B`>!B|;/| BQ`K"|!BT`>!B4`>!B,"D!B0| -"DSOa> "D "D "Ă B"DG0| q`>K`> X0D3"D 3"D "D!>g0_|!w0,h`<(0 3`'p "L 'p "LpAO@ DP‚ H*\ȰÇ+`+/_|'0_|'0_'`>߿߿8_>| H*\ȰÇ#JHŋ3jl``|˗O`|˗_|/߿|˗_|#/߿|˗_>/| '0|mܸqƍ7nܸqƇ 0_|70_|70_| '0_+O`'0߿|`>so`7nܸqƍ7n(1_|8P 0 O| '0_(0|˗_>0@7p@$H0_|8`A&TaC!F8bE1fX1|G0_>/|˗_> '0_|`> /|˗O`> 0ƍ7nܸqƍ7n̘a>+/_|'0_|'0|_|+O |_@/  <0… :|1ĉ+Z1ƌ;o|##O`>6nܸqƍ7nܸqc| ̷_!0ƍ7nܸqƍ7n̘a6n/a>6nܸqƍ7nܸq| )̷q#| )̷qƍ7nܸqƍ7 ̗0|76̗a>6nܸqƍ7nܸqF̗a|7&̗a>6nܸqƍ7nܸqƃ  O@ DP!B$Xp |'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVb(ͪu+׮^ +v,ٲfϢMv-۶n+w.ݺv4 ;;PK1SIDPK+AOEBPS/img/savep.gifpGIF87aJ?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,J H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXj0 ѣG=zѣG=z$|=zѣG=zѣG<6ѣG=zѣG=zw0߿|<ѣG=zѣG=ṙ0_|<ѣG=zѣG=ng`>'p| ̗/@ o O@ DPB >QD-^ĘQF+O`|˗`|˗_˗/_3ϣG=zѣG=zܘ`>/_˗O`|_|˗`>=zѣG=zb| /_|+/߿|˗_|O| 0 < ,h „ 2l!Ĉ'Rh"ƌ7b70_|˗_|/_>/߿| w0Gqȑ#G9rȑ#G#`|˗`|8 7?'p "<? 4xaB 6tbD)VxcF'+|ȑ#G9rȑ#Nj HA HP`,X`>8`A̗`>'p O@ D`>$XA .dC%NXE5'0|/|!̷qF6nܸqƍ7nܸqc|/_G0|7noƍ7nܸqƍ7'p@/_|#8`> O@ DPB 'p H*\ȰÇ#JHŋ32̗`|o`|g0F+c/_>5jԨQF5j` #O`|w0F+{OF5jԨQF';O`COFA̧QF5jԨQF-w1| 80,(`> 4xa„ H_  <0… :|1ĉ+Z1| ]0_| s/F)1F5jԨQF5B̷0| !̗0|5̗a4jԨQF5jԨb.c`Өa"ӨQF5jԨQF滘a>C`| W0_%w0_|5jԨQF5j1B$X A$(0_ | W| ,H0_,| ? 4xaB 6tbD)VxcƁ4^W0|g0_|˗O`|+O`>/|˗/_˗/|I̧QF5jԨQFiĘo``|'0߿|W0|/_/߿|˗/߿|G0|5jԨQF5j1ƌ0_| /_|˗O`|o`|˗O`|0'p` 8p'p "Lp!ÆB(q"Ŋ/b80F{080_/? O|'P?o /8_>$XA .dC%NXEӨQ``|'0߿|g0_>˗_|/? /G AO@ DPB >QD-^Ęq`>3`3/߿|˗_|g0_> oo 8p <0… :|1ĉ+Z1|50|5.̇1F5jԨQF5B̧Q| !W`>8`ACa>$XA .dC%NXEӨ`Өa4jԨQF5ZO@ DPaA$(0_ ,X`+X_+X` ,X| ,X_'p "L0!$0 !*0Dw0_ Bx0_> 1"D˗"ā"D!B"D|˗/|b| 60DK/D "D!:"D|'p "L8? 4x`>!D!B C!Ḃ!B"D!B",`| '0|/_>#/_>ˇp`>$XA .dCc`|/|˗O`| ̗/| `>80'p ̗!|"D!B"D!B W0|#/߿|O`>ˇ_>'p "Lp!ÆB0| 70_>/|O`|˗O`|;`> +OD%J`|/|3/|˗0|%J(QD [`|O`̗O`|0@O GP`>/_/_>/_>/A8`A&TaC g0_> ̗o`| `|#`>|Çw0|#/_| /_> ̗/AO'p| GP`>_>_|'0߿|_|O@ DPB >_> ? ? ̗/߿|W`O@ DPB >Q|ˇ0_|˗_|O߿? /|/|/_|˗_|'p࿁80,h „ 2l | /|70˗o| 8`> 4xaB 6tbD 'p`˗/_> ̗o|7_/_|8| O/_>O|GP? 08`A&TaC 3/_|˗`>̗O`>˗/_|=|Ç>|!|̗O` '0_>̗`˗/|w0|'0_>/|/_>˗/߿|3Ç>|_ 'P?7P8P`| O o| H*\ȰÇ#JlO`/|0@'p`|˗/|7p| 7p | Oo?8`A&TaC Æ>|Ç>|a>` {0Ç>||>lÇ>|Ç{C{0_=|ÇÆ>|Ç>|a>aÇ>|H0Ç{Ç>|C>|P`>>|Ç>|`6Ç>|Ç =|| {pa|>|Ç=|a>|Ç>dÇ(/_ ,XP`| H*\ȰÇ8`A&TX? 4xaB 6tbD'p "L0!s0 <0,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRR;;PK*I_PK+AOEBPS/img/collapp.gif/GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣG8`AO@ DPB >|,h@$XA .dC%NX|廸0_|.^xņw_|]xŋ/^xb|.F̗ŋ/^T/_xŋ/^x|.N̗ŋ/^L|.^xŋ/^0_|..wŋ/"g0E.^xŋ/^0_]dŋ/^4/_|xŋ/^x|8P ˗/| ̗/߿|˗| H*\ȰÇ;/_|8߿  <0… :|1ĉ+ZT`|˗_|_'0߿|`/^x`O`|˗_| '0_>.^xŋ/^0|`>/|˗O`>.^xł'0| ̗o`|`/^xŋ/̗/_>70|˗/_||,h B H*\Ȱ!|;/|80߿ /'p 8`A&TaC!F8bE3/| g0|O`'0|'hѢE w0_>˗O`|˗O`> 惘ϢE-ZhѢŊ;08_> /߿o O@ Dh0_„ &L0a„w0_>/_>/_|̗a>$XA .dC%N\0 ,+` ,X| ,X`,X` 0 -̇0EQX0EQ\oa(>G1E)RH"E(̷0|)̗"E(R<| !Ga>(RH"E)Ṙ0_ @(0O@ DH0_„ &/a„  w`>߿808p`| HC`>$XA .dC%NTa|!̷0|Qt/_>H` O` [oa|(̗/Ł(RH"E)Ṙ0_|!̷0C$XA ḨPBG0_| ̗`>)$0  ,? 4xaB 6tbD`|̇0|QH"|)'0|/| w0E H"E)R81_G0|G"EQX0߿|˗_'P /8`A&T0… .\p… .\pB (?'P'p@$8? 4xaB 6L0 'p  'p@`>70A Hp ,h „ 'p H*\ȰÇ#J4/| 70|g0ĉ'N,a| g0_ /߿|G0|'Na8qĉ=7_|w0|o`| w0ĉ惘oĉ'N8q| M,oa'NX0|)7a&Nx0|'N8qĉ-7`'p`>$X|,h „ 'p  ,/_+X_ ,X_+X`>'p 8`A H0A  <0… :|1b| I4oa̗a|%J̗Oa>$[Ob| %w0_I/_|I(QD%JDoa>-̇0| I(`"拘oa> -̇0| I,aI(QD%J-w0| I(`>"拘oa> -w0| I<`>$J(QD%̷0D3/| 'b ;`>"[Ob| 0|3Ob>%J(QD-O@ O@W |+/_,X`|+(0_ ,80_+X|,h`A$(0_| Wp` ,(0_ ,80,h „ 2l!ĈI0_|70|'0_|/_| ̗/_>/_|˗o`#`>E'QD ;`;/_>/_W0$J(QD%'Q|s`/_|'0_ /߿|/߿|˗/_ ̗/| 'Q`$J80|/|O``$ 'QD%J(`>!˗`>$H0_| '0_#| ̗_>˗o`>o`|,X| ` ,X`/_̗|'0߿|W_|,X| H*\ȰÇ#B'Q'p@O`|˗/_/߿|O` ߿| ߿| Hb>%0|'0_|70߿|o`70_| ̗/|I4/b>%"0|'0߿|'0߿|I4OD%J(Q|%J`>`>˗O`|C|/߿? 480+'p "Lp!ÆB1Ds`>%"'`$J0|ILO|%J(QD(Q|CO"AO@ 4!B!D/B"D`>!̇!"D/,h „ 2l!ĈI(Q`>(Q|拘OD -̧0ă$"'QD'p "L ` ,X`,` ,X` ,80_ `'p "L0a>[_ [p… .Lo… ̷_ .\80_>-/… *̗oB̷p… ;/B-D/…-\p… &̷p… [/… .$08` H* 'p "Lp!ÆB0_|%J(QĆ$J(Q|(߿|o'p| ̗/|#H`>$XA .dC惘OD%J0D%J<`>`/߿| g0|%J(QD 惘OD%J0D%J<``>/_|̷0D%J(Qă(QD%>'QD ` G0| W0߿|W0D%J(QD+OD%J1|%J0_ ?8? O@ / '0_>$XA .dC%˗`>M8qĉw0ĉ#'p /`>/#(`> 4xaB 6tbD)VxcF8`A&T|3O`> `|'0_|W0_Æ 6lذaÆ 6l(0_Æ 6lذaÆ װaÆ /A '߿ o`>/_|(|߿8`A&TaC!F0ĉ'N8qb|'N0ĉ8qĉ'N8qĉ'N8qĉ%`>8`8`A&TaC!F8bE1fԸc=zѣG=zb>yѣG=zѣGyϣG=zѣG=z0 <0‚ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴS H*< <0… :|1ĉ+Z1ƍ9Q`;vرcǎ;vؑcرcǎ;vرcǎ9Q`;vرcǎ;vؑc_| '0_|0 @? 4xaB 6tbD)VxcF9rw0|O`|70|#o`>#cǎ;vرcǎ;v̘O`'0߿| ̗`o`/|;vرcǎ;vر|'0߿|70|/|/|uرcǎ;vرcǎ;O`o`>̗_+|_>$XA .dC%NXE5n8`> 'p| ̗_G0@ /߿'P``> 'p "Lp!ÆB(q"Ŋ/b̨q#DŽ`>/|o` '0|o`>رcǎ;vرcǎ;O`_| /_|#O`'0|Scǎ;vرcǎ;v,oa[cǎ;vرcǎ;v$oa[cǎ;vرcǎ;v$oaccǎ;vرcǎ;voac/"|'p 8`A8`A&TaC!F8bE1f|oa>ca|s/_>ӨQF5jԨQF'p "L `A W| ,X| H*\ȰÇ#JHŋ32̧Qƃ[Oa> iԨQF5jԨQ|5jDa>滘/a4jԨQF5jԨb>5"0_|x0|5jԨQF5j0|5jLoa> ;`|/_|˗/|#OF5jԨQF+OF !/| g0@'?˗_|7_>$XA .dC%NXE/Fw0_`|˧0߿|`>5jԨQF5j40 <0… :L 'p@0@'p | ̗o`>8 ,h „ 2l!Ĉ'Rh"F˘1cF=G0߿| ̗_|3_>`>e̘1cƌ3f̘1|e̘1#|g0|̗/߿|w0߿|˗/_>˘1cƌ3f̘1cF2f̘b0|3f̘1cƌ3fH0_ƌ3B0|8? W| H*\ȰÇ#JHŋ˘1cFK/#| e̘1B$XA .$ HO@,X@  <0… :doa>>,a>||>|0|>Oa|˗/C/_|{Ç6̇0_>=|(0|>|C>|a>>|80_|5̗a=|Ç˗O`|˗/C_>||>|0|>a>{80|>|Ç{x`> 4H? ,? 4xaB 6th0|̗/|O 7p|߿|߿| o@ ̗/_>7`>_O|7pooO@ DPB >QD(RH| '0|G0| G0| ̗O` C/|70|O`>w0_|Qa>)RH"E QH"E #_#`` /|̇0_| /|̗O`>#` ;`|/_|1G"E)RHa>)Rx0|W0߿|W0|W0߿|70|'p|o`|'0| '0A#O`> ̗_|˗|? 4xaB 6tbD ;"E'`> `> /G0߿|_#_>O`| ̗/_ /߿|߿/߿? W0߿|#_G0,h „ 2l!Ĉ'w0E)"O@80(0߿|/@'0(0߿|08|@7P`> 70 (? O@ /_|  H*\ȰÇ#JH!,h „ 2lx0_o`|G0| G0|O`|̗`|W0| ̗O`>W0_> `/߿| +ϡC:tСC:lϡC:t_G0_|˗/߿|0@ ߿|߿߿߿/@O߿(08_ O`'0| o| H*\ȰÇ#J81E)R"EG"|9w0E(RH"E)RH"EQHa>(RD`>(0E)RH"E)RH1b>)"g0E0_|QH"E)RH"E%H"|Q0| )71E)RH"E)RHQb>)"g0E%̗0|H"E)RH"E)NG"E Ha> 0_>QH"E)RH"E)O@ DPB 0 <0aA$`>8` HP ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z{`> 4xaB8`A&TaC!F8bE1fԸ|;ױcǎ;vرcǎ;nױ|;vرcǎ;vر|;ױcǎ;vرcǎ;nw0| ̗/_>˗`|8߿(߿'p "Lp!ÆB(q"Ŋ/b̨q#Ǎ/| ̗_>/| '0|uرcǎ;vرcǎ w0|o`#o`|`70_ǎ;vرcǎ;v1߿| /߿| /߿|o` o`>:vرcǎ;vرcG'0߿| 70߿|̗_+|_>$XA .dC%NXE5n(`> 'p| ̗O``> _O| 7|O@ DPB >QD-^ĘQF!̗`>'0|o` '0|o`>رcǎ;vرcǎ C_O`| '0_|#O`'0|Scǎ;vرcǎ;v$/|;̧0_;vرcǎ;vq`:voa;vرcǎ;vq`:voa;vرcǎ;vq`:voa>7`> 4xaA$XA .dC%NXE[OƄ惘/|˧a|4jԨQF5jԨa H*D+X`|+XP`| ,X`O@ DPB >QD-^x1_ƌkoa>2b̗1cƌ3f̘1cƌe̘QaKa$Ko`3f̘1cƌ3f/cƌ 10|˧0_|˘1cƌ3f̘1cƉ2f0|w0| ̗/|˗/@O|'0_| <0… :|1ĉ+Za2f0|9G0߿|/_|_|˗_|/߿|˗`3f̘1cƌ3flO`|3f/|9W0_>_/|'0_˘1cƌ3f̘1cF H*\ȰÄ H | O|_ ߿'p| ̗o`> H? 4xaB 6tbD)Vxqb|aĈ|9G0߿|/_|_|˗_|O`|#/a>1bĈ#F1b,a>1b/_>`/_|)̇#F1bĈ#FaĈ|̇#| aĈ#F1bĈ|1bH1_|a<0 H`O@ DPB >QD-^t#F+c/a>s#F1b`> 4X? W`8`A8`8`A&TaC )̧0_0Ç>|Ç0a/_`| Ç>l/| =|0_>|Ç>|` %̗`| {0_>|Ç'0_|a|=Ç>|Ç {0| )|=|Ç̗A$XA8`8`A&TaC!F0Ao G`>#HP`> /A #H| H*\ȰÇ#J0E)RH"E#o`>ka[`(RH"E)R,"E)RH"| W0_|g0|/_|/_|/_|-G"E)RH|(RH"E)a +`#O`>˗/߿|/_>/߿|g0E)RH"E!G"E)R0߿| W0_|{` o`˗O`>(0@ 70_>$XA .dC%N/|)RH"E8@o`>08`A_ ? 0 <0… :|1ĉ+O@ DPB >Qb|70_ 0|̗_|/߿| ̗/߿|+`>%J(QD%J/_>`>$J(QD%J(`>%J(QD I4`(1D%J(QD%J(QD%Jx0Dk`|#(QD%J(QD%J(QDh0| !'b>%JH"$H"$H"$H"$H" | ;80 <0… :|1ĉ+Z1ƍa̗0_| q#G9rȑ#G9rtc>Ņ̗a|ȑ#G9rȑ#G'p  'p A  O@ O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾK1 ;;PK//PK+AOEBPS/img/lnpcc022.gif$YۦGIF87a]?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,] H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ'|a>>}ӧO 0|>}ӧO>˗o`|˗o`˗O`|˗_>/_|>}ӧO=o`>O`/_|O`˗_>|ӧO>{/_>O`>`|_ϧO>}'|߿|߿|o_/߿8`A&TaC!F8bE1fԸcGAr̗o`>/_/_'0_˗O`>B 2dȐ!C 2dȐ!CG0_Ȑ!C 2dȐ!C 2dȐ <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8S$XA .dC%NXŅ H*\ȰÇ#JHŋ%˘1cƌ3f̘1|3f̘1cƌ3f(1_ƌ3f̘1cƌ˘1cƌ3f̘1cF2f̘1cƌ3f̨0_|3f̘1cƌ3f1_ƌ3f̘1cƌ˗/cƌ3f̘1cƌ!˘1cƌ3f̘1|e̘1cƌ3f̘1#|3f̘1cƌ3fT/_3f̘1cƌ3f/cƌ3f̘1cƌ ˗1cƌ3f̘1cƌ9̗O`|%̗/_3f̘1cƌ˗1cƌeQFeQF? ̗O`| o`>$XA .dC%NXa|,ZhѢE-ZhѢE/_|70߿|#o`/_/_|'`>8`A&TaC!F8|UXbŊ+VXbŊs0_߿O?O?_ <0… :|1ĉ˗bŊ+VXbŊ+V/|_|O`>'0|70߿|'0|UXbŊ+V(0_|+VXbŊ+VXb/߿|_>+O`|˗O`O`>XbŊ+VXQ`|*VXbŊ+VXbŊ9/_ ߿|߿'P`/_| ̗/_>? 4xaB 6tbD) ̗/_Ŋ+VXbŊ+VX_/_+VXbŊ%˗bŊ+VXbŊ+V/_Ŋ ˗bŊ+VXbʼnXbŊ+VXbŊ+WbŊ+VXbŊ˗bŊ+VXbŊ+V/_Ŋ+VXbŊ+Vd/_+VXbŊ+VX|+VXbŊ+VXa|*VXbŊ+VXbŊUXbŊ+VXbEXbŊ+VXbŊ+ <0… :|1ĉ+Z0_|1bĈ#F1bĈ`>1bĈ#F1V̗/F1bĈ#F1b$#F1bĈ#Fˇ#F1bĈ#F k0@O '߿'p |o| '߿70,h „ 2l!Ĉ'̗/E)RH"E)RHb>O`O` `O`_>O`(RH"E)J̗/E)RH"E)RHb>O`/_> ˗/a>/_|'0߿| '0_>)RH"EG"E)RH"E)Ra>_| '0߿| '0| /߿|_| '0߿|QH"EQDEO ,h „ 2l!Ĉ'Rh"F'P? '(?˗O`|( 70߿8`A&TaC!F8`|(RH"E)RH"EQH"E)RH"EG"E)RH"E)R"E)RH"E)R,/_>)RH"E)RH"|)RH"E)RHb|QH"E)RH"E!H"Ń(RH"E)F̗/E)RH"E)RHb>̗o`|'0_|'`>  g`>$XA .dC%N)RH"E)RH"|70| ̗`|_>K | O?O@ DPB >QăH"E)RH"E)B0߿|G0| o`>ko` 70E)RH"ňH"E)RH"E)B0_|_>'0_|˗O`>c`"E)RHb|QH"E)RH"E!k/߿|'p 7?| (0|/_>˗_|'p "Lp!ÆB(qb|QH"E)RH"E!H"E)RH"E ˗"E)RH"E)R1E)RH"E)RX0_|)RH"E)RH"E(RH`|(RH"E)B̗/E)RH"E)RHb>̗o`|'0_|'`>  g`>8`A&TaC!F8`|(RH"E)RH"E9̗/|70_>_/a> (?O ,h „ 2l!Ĉ'̗/E)RH"E)RHb>`>g0߿|̗/_|g0_>)RH"E˗"E)RH"E)R1|O`/|̗/_>a ˗"E)RH"H"E)RH"E)B0_O@ o 7?8P`>/_|/߿|O@ DPB >QĂH"E)RH"E)BG"E)RH"E)̗/E)RH"E)RHb>)RH"E)RH`|(RH"E)RH"EQH"E)RH"EG"E)RH"E)R"E)RH"E)R,/_>)RH"E)RH"|)RH"E)RHb|QH"E)RH"E!H"E)RH"E ˗"E)RH"E)R1E)R"("( O@ DPB >QD-^1_ƌ3f̘1cƌ˗/cƌ3f̘1cƌ!{`>2f̘1cƌ3fD/_3f̘1cƌ3f/cƌ3f̘1cƌ ˗1cƌ3f̘1cƌe̘1cƌ3f̘Qa|2f̘1cƌ3f̘b3f̘1cƌ3*̗/_ƌ3f̘1cƌ3B̗1cƌ3f̘1cF˘1cƌ3f̘1cFG0_̗/|/@ 7P ,80,h „ 2l!Ĉ'N̗/E)RH"E)RHb>`>g0_|/|%G`>'8`A&TaC!F8`|(RH"E)RH"E9/|70_>`|_> '0E)RH"ŇH"E)RH"E)B0_|_>'0_|˗O`>c`O`>)RH"EG"E)RH"E)Ra|0o'p|˗_|/_| <0… :|1ĉG"E)RH"E)R"E)RH"E)R,/_>)RH"E)RH"|)RH"E)RHb|QH"E)RH"E!H"E)RH"E ˗"E)RH"E)R1E)RH"E)RX0_|)RH"E)RH"E(RH"E)RH"łH"E)RH"E)BG"E)RH"E)̗/E)RH"E)RHb>)RHEQDEQDQA <0… :|1ĉ+Zb3f̘1cƌ3*̗/_ƌ3f̘1cƌ3B0_|e̘1cƌ3f̈0_|3f̘1cƌ3f1_ƌ3f̘1cƌ˗/cƌ3f̘1cƌ!˘1cƌ3f̘1|e̘1cƌ3f̘1#|3f̘1cƌ3fT/_3f̘1cƌ3f/|廘/_ƌ3f̘a|2f̘1cƌ3f̘b>˗"|? 480,h „ 2l!Ĉ%˗oĉ'N8qĉ'N8a> ˗o`|/_'0_'0_| _>/_|˗o`|˗/߿|8qĉ'N0_|'N8qĉ'N8qĉ =̗o`>˗/|'0| /|'0|˗O`|70߿|M8qĉ'Nt/_'N8qĉ'N8qDO`> '0_|o`? (0@O|/߿|(0,h „ 2l!Ĉ˗oĉ'N8qĉ'N8a>/_ _ '߿ o`>/_>˗_|˗|70߿߿'P`>$XA .dC!˗OD%J(QD%J(Q|1D%J(QD%2̗/D%J(QD%J(QD$˗/Ć(QD%J(QĆ(QD%J(QD%J0D%J(QD%J(a|$J(QD%J(QD%*'QD%J(QD%J|/_>%J(QD%J(QD I(QD%J(QD˗OD%J(QD%J(Q|%J(QD%J(Qć'? 4xaB 6tbD)Vx#|3f̘1cƌ3fT/_3f̘1cƌ3fa˘1cƌ3f̘a|2f̘1cƌ3f̘b3f̘1cƌ3*̗/_ƌ3f̘1cƌ3B̗1cƌ3f̘1cF˘1cƌ3f̘1cF2f̘1cƌ3f̨0_|3f̘1cƌ3f1_ƌe̘1cƌ3N̗/_ƌ3f̘1cƌ3B`> 80߿8`  <0… :|1ĉ˗bŊ+VXbŊ+V/| '0߿| /_|8P /,h „ 2l!Ĉ'RL/_+VXbŊ+VX|70_|70_| /|XbŊ+VX1a|*VXbŊ+VXbŊ9W0߿|O`>+`|XbŊ+VX1a|*VXbŊ+VXbŊ5̗/_>0 O@˗/߿| ̗_|˗? 4xaB 6tbD)̗/_Ŋ+VXbŊ+VX_+VXbŊ+V0_|+VXbŊ+VXb*VXbŊ+VX"|UXbŊ+VXbXbŊ+VXbŊ WbŊ+VXbŊ+VbŊWbŊ+VX"|UXbŊ+VXbŊk0@@ H| ? 4xaB 6tbD)̗/_Ŋ+VXbŊ+VX_>O`_'p? H*\ȰÇ#JH`|*VXbŊ+VXbŊ9̗/| ̗/|570߿|XbŊ+VXa|*VXbŊ+VXbŊ9W0߿|O`>+`|*VXbŊ+Vl/_+VXbŊ+VX| ˗O`|'p࿁8P`>/_|/߿|O@ DPB >QDWbŊ+VXbŊ+VbŊ+VXbŊ+2̗/_Ŋ+VXbŊ+VX_+VXbŊ+V0_|+VXbŊ+VXb*VXbŊ+VX"|UXbŊ+VXbŊXbŊ+VXbŊ WbŊ+VXbŊ+VbŊ+VXbŊ+2̗/_Ŋ+VXbŊ+VX_+VXbŊ+V0_|+VXbŊ+VXb*VXbŊ+V(@$XA .dC%NXEe̘1cƌ3f̘Qa|2f1cƌ3f̘b #/cƌ3f̘1cF˘1cƌ3f̘1cF2f̘1cƌ3f̨0_|3f̘1cƌ3f1_ƌ3f̘1cƌ˗/cƌ3f̘1cƌ!˘1cƌ3f̘1|e̘1cƌ3f̘1#|3f̘1cƌ3fT/_3f̘1cƌ3f!|8p`'p 'p "Lp!ÆB(q"ŊXbŊ+VXbŊ+0| /߿|˗0AO@ DPB >QDWbŊ+VXbŊ+Va|˗O`|˗a3/|UXbŊ+Vx0_|+VXbŊ+VXb+_| '0| W0_| WbŊ+VX|UXbŊ+VXbŊk/_|`> ̗/_/߿|/,h „ 2l!Ĉ'R$XA .dC%NXE8`| H*/_8`| H*/_ .$0 O@ DP|'p "Lp!ÆB(q"Ŋ/b0 O@ DP|-0GP ,h „ ˗o… 'p 8`A&T/_| H*\ȰÇ#JHŋ#'p`O@ DP|-0o@$XA  ̗/… O@'p "L_|8`A&TaC!F8bE1FO| <0B[`>o@$XA  ̗/… O@'p | gРAO@ DPB >QD-^`>#8? 4xaB˷|GP ,h „ ˗o… 'p`#(?# A G A <0… :|1ĉ+Z1"| Gp ,h „ ˗o?@$XA  ̗/… O|#(?#/_|/_|'0_|$H`|8`A&TaC!F8bE1FO@O ? 4/w |G 'p`>$X|̗/@`>/_/߿|G A <0… :|1ĉ+Z1"| Gp 70A  A ˗ A @  G A#H A <0@O?8P`>O |/߿'p  <0… :|1ĉ+Z1"|,?/_|/_|'0_|$H`|$0 O@˗/@O@ ˗ϠA 4h`>@`>O`|/| $H0_| H*\ȰÇ#JHŋ#'p 8p`/߿|˗/߿|/A ̗/A8`| (0| ̗/_˗_˗ A ˗/,h „8`A (0|70_|˗O`|$H |'p "Lp!ÆB(q"Ŋ/b0 OO`> o| ̗/A H`>o`>0@ ߿8`A3hРA O@'p "L_|8`A&TaC!F8bE1FO@'p| '0|'0߿|#H A#H |,?O`>/߿|˗O`> $/_| HO@'p "L_|8`A&TaC!F8bE1FO@'p| '0|˗/_>G AG A$X0 70| ̗/|/_| $H_|8`A&0 O@ DP|'p "Lp!ÆB(q"Ŋ/b/cFc/cFx1_ƌ˗1cƌ3f̘1cƌeh1_| eh1_|/˘b|2f̘1cƌ3f̘1b-˗a-˗/|3Z̗/_ƌ3f̘1cƌ3F̗1|1̗1|e/cF˘1cƌ3f̘1cƈ2f/_>2f/_eh1_|3f̘1cƌ3f1_ƌ0_ƌ˗b-˗/cƌ3f̘1cƌ#˘b|8| H*\h0_| 2d!C 2̗/,h „ 2l!Ĉ'Rh"ƈ2f/_>2f/_eh1_|3f̘1cƌ3f1_ƌ0_ƌ˗b-˗/cƌ3f̘1cƌ#˘b|˘b|2^̗1|e̘1cƌ3f̘1c|3Z̗/|3Z̗/_Ƌ2f/_3f̘1cƌ3f/cFc/cFx1_ƌ˗1cƌ3f̘1cƌeh1_| eh1_|/˘b|2f̘1cƌ3f̘1b-˗?  <0…ǐ!C2dȐ!|'p "Lp!ÆB(q"Ŋ/b/cFc/cFS/|˗0_ƌ˗1cƌ3f̘1cƌe/|1̗1c|&˗Oa| [/_|3Z̗/_ƌ3f̘1cƌ3FW0_˗/_  g`> ̗/A/_> 8? $ |4h0_| 4hРA /_`>8` 4hР|'p "Lp!ÆB(q"Ŋ/b`>+_˗/߿|/߿|棘/_> O`>So`|˗/_˗`|˗b>`/_|˗_|/_|˗1cƌ3f̘1cƌ'0|˗a+/|0_| ̗O`|O`e̗/_Ƌ O`|0|̗o`>$˗/cƌ3f̘1cƌ#3O`O`> (P| 'P`|  ̗/A O`>Ϡ|̗/A ˗/A 4h`>O`>3X0|70| ̗/,h „ 2l!Ĉ'Rh"ƈ ˗O`|'P  70_|˗_|/_| $(0_| G_|˗|'p|˗O`|/_>G A <0|'0_|(?/_|/_˗_| $(0_| H*\ȰÇ#JHŋ#˘b|˘b|2^̗1|e̘1cƌ3f̘1c|3Z̗/|3Z̗/_Ƌ2f/_3f̘1cƌ3f/cFc/cFx1_ƌ˗1cƌ3f̘1cƌeh1_| eh1_|/˘b|2f̘1cƌ3f̘1b>˗q`0_|H0_Fx1|H0_ƃ˘1cƌ3f̘1cƈ +/_/_|˗O | O@ /_>g0_|˗O`|˗/@ <80_|"Da ˗o`|˗/_>/_|˗!B <0… :|1ĉ+Z1bO`>_|70߿|˗a> _>0@_8`A ˗!B"W0| '0߿|˗/_!B <0… :|1ĉ+Z1b 70|'0߿|̗a|#/|'0|+`˗b 70|'0߿|̗`|2f̘1cƌ3f̘1b>/_>˗/_ ̗/|/_>+a|+/_/߿|/_/_|G0|=̗/_Ƌ ˗O`|/_|'0_|˗O`|+`O@ DPB >QD-^1_ƌ0_ƌ˗b-˗/cƌ3f̘1cƌ#˘b|˘b|2^̗1|e̘1cƌ3f̘1c|3Z̗/|3Z̗/_Ƌ2f/_3f̘1cƌ3f/b|3̗/|˘Q`|2^1_˗/cƌ3f̘1cƌ#3/_|9̗a|#/߿|;/|e`|!0_Ɔ˘1cƌ3f̘1cƈ #/_>'߿  <0_| +O`>/_|80߿'p "̗/B"D`>#o`|'p@$XAO@ DPB >QD-^1|˗/|˗O`0_| '0|O`|G0_|2.̗/_Ƌ/_|/_| /_Ɔ˘1cƌ3f̘1cƈ /|W0_Ɔc`>/| /|˗/| ̗`> +/c|e̘1cƌ3f̘1c|'0_|˗_|˗/߿| W0|0_| ̗/|`> O|8p˗? 4xa ˗O`|˗/| ̗/_#`*̗/,h „ 2l!Ĉ'Rh"ƈ2f/_>˘Qa|2^̗1|e̘1cƌ3f̘1c|3Z̗/| ˗1c|e/cF˘1cƌ3f̘1cƈ2f/_>2f/_eh1_|3f̘1cƌ3f1_ƌ0_ƌ˗b-˗/cƌ3f̘1cƌ#˘b|˘b|2^̗1|e̘1cƌ3f̘1cD$XA .T'p "LpB$XA 'p "LpB$XA .dC%NXE8`A&T!$0 <0…8`A&40 <0…8`A&TaC!F8bE1NO@ DPB H |,h „ "O@ D |,h „ O@ DPB >QD-^8`> 4xaB 'p A H*\? 4xa‚ H*\? 4xaB 6tbD)VxcF۸q#|6nܸa|7nܸqƍ7nܸqc|6nH0_7n|/ƍ7nܸqƍ7n0_7̗oƍ˷qƍ7nܸqƍ76̗oƍ۸qƇmܸqƍ7nܸqƍ ۸q#|6nܸa|7nܸqƍ7nܸqc|6nH0_7n|/ƍ7nܸqƍ7n0_7̗oƍ˷qƍ7nܸqƍ76̗oƍ۸qƇmܸq6h6h6j|8`A&T|6lذaÆ ̗? 4xaB 6tbD)VxcFǑ#qȑ|8rȑ#G9rȑ|8r/_>9r\/G9rȑ#G9rܘ/GǑ#G ȑ#G9rȑ#Gȑ|8rqa|9rȑ#G9rqc|9r/G9.̗#G9rȑ#G9n̗#Gȑ#Džqȑ#G9rȑ#Ǎq_|9r0_>9rȑ#G9r1_>9˗#GǑ#G9rȑ#8h#O@ DPBkذaÆ 6lh0_>$XA .dC%NXE5nl/GǑ#G ȑ#G9rȑ#Gȑ|8rqa|9rȑ#G9rqc|9r/G9.̗#G9rȑ#G9n̗#Gȑ#Džqȑ#G9rȑ#Ǎq_|9r0_>9rȑ#G9r1_>9˗#GǑ#G9rȑ#G7Ǒ#qȑ|8rȑ#G9rȑ|8r/_>9r\/G9rȑ#G8∣ʗ? 4xaB ̗aÆ 6lذ|8`A&TaC!F8bE1fԸa|9r/G9.̗#G9rȑ#G9n̗#Gȑ#Džqȑ#G9rȑ#Ǎq_|9r0_>9rȑ#G9r1_>9˗#GǑ#G9rȑ#G7Ǒ#qȑ|8rȑ#G9rȑ|8r/_>9r\/G9rȑ#G9rܘ/GǑ#G ȑ#G9rȑ#Gȑ|8rqa|9rȑ#G9#6(_>$XA .dx0_ 6lذaÆO@ DPB >QD-^ĘQƆq_|9r0_>9rȑ#G9r1_>9˗#GǑ#G9rȑ#G7Ǒ#qȑ|8rȑ#G9rȑ|8r/_>9r\/G9rȑ#G9rܘ/GǑ#G ȑ#G9rȑ#Gȑ|8rqa|9rȑ#G9rqc|9r/G9.̗#G9rȑ#G9n̗#Gȑ#Džqȑ#G9r#8|8`A&T|6lذaÆ ̗? 4xaB 6tbD)VxcFǑ#qȑ|8rȑ#G9rȑ|q1_>9r\/G9rȑ#G9r/_>7Ǒ#G ȑ#G9rȑ#G˗#Gqȑ|8rȑ#G9rȑ#G1#|,hP ,h „ 2l0_>:tСC:tСC:tСC:/_>:t`> 4(? 4xaB 6\/C:tСC:tСC:tСC̗/C:tP`|:tСC9tСC:tСC:tСC:ta|9tСCСC:/_>:tСC:tСC:tСC:4/_>:ta|:tСCsСC:tСC:tСC:tСCsСCСC:/_>:tСC:tСC:tСC:T0@$XA .dذ`|:tС|9tСC:tСC:tСC:t!|9tСC sСC˗ϡC:tСC:tСC:tСC˗ϡC:T/C:t0_|:tСC:tСC:tСC:tP`|:tСÄ9tСC СC:tСC:tСC:tСC ˗ϡC:D/C:t0_|:tСC:tСC:tСCr!2|8`A&Ta|6lذaÆ <0… :|1ĉ+Z1ƍ˗cǎرc|uرcǎ;vرcǎ ױcGuؑ`|:vرcǎ;vرcGر|:v80_|;vرcǎ;vر|u1_; ̗/_ǎ;vرcǎ;v1_|;r̗cǎױcǎ;vرcǎ;J̗/_ǎرc|:vرcǎ;vرcGQc|;r̗/_ǎ;vرcǎ;vh1_|;f̗cǍO@ DPB >QD-^ĘQFױ#|:vԘ/_;vرcǎ;vQc|:v/_ǎױcǎ;vرcǎ;r̗/_ǎc|:vرcǎ;vرcǎױc|:v/_;vرcǎ;vر|uH1_-˗cǎ;vرcǎ;vX0_|;N̗cNJرcǎ;vرcǎ;̗/_ǎؑb|:vرcǎ;vرcǎ ױc|:v/_;v쨣:ꨣ:ꨣ(@$XA .D/C 2dH0_| H*\ȰÇ#JHŋ3jȱc|y0_>˗ϣG=zѣG=z/_>ѣ|yѣG=zѣG˗ϣDžy0_|=zѣG=zѣGQa|=2̗/G=zѣG=z`| 'p`>$XA ./_>$XA .dC%NXE5n1c|8`A&T0_| H*\ȰÇ#JHŋ3jȱc|yH0_|=zѣG=z#|yH0_|=̗/G=zѣG=zQb|`|=z$/_>=zѣG=zѣ|yѣ|yѣG=zѣG9˗ϣG<̗/G=zѣGyGyP> H8`A&D QD-^ĘQF=~4/_>1߿|$H A $H AĘ/_1߿|$H A $H AԘ/_>1߿|$H A $H A/_1߿|$H A $H A/_>1߿|$H A $H A/_1߿|$H A $H A)0_|2b˗$H A $H A $'? /_ ,X`W |'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?Z̗/|8`A&$_>$80_| H*\ȰÇ#JHŋ3jȱǏ˷0Ȋ˗$H A $H A Ra|0 <0'p O@ DPB >QD-^ĘQF=~/_'0H;O`|@ $H A $H 'P o |GP?8`Ag`>8`A&TaC!F8bE1fԸcGA'P o`7_ 7p_(? 4xaB 6tbD)VxcF9v$|'P`'p`#8? 480߿|8? 4xaB 6tbD)VxcF9v#|O|'p "LH0߿|80,h „ 2l!Ĉ'Rh"ƌ7rG߿O@ D` 'p`>$XA .dC%NXE5nG`BB/A O@ DPB >QD-^ĘQF=~0|򅄘_> 2dȐ!C 2dȐ!CB/_H 2dȐ!C 2dȐ!C_2dȐ!C 2dȐ!C i1߿|!!/dȐ!C 2dȐ!C bBB/_Ȑ!C 2dȐ!C 2|򅄘_!C 2dȐ!C 2dH 1߿|!C 2dȐ!C 2dȐbB 2dȐ!C 2dȐ!-/$| 2dȐ!C )B ),(߿ H/,h „ 2l!Ĉ'Rh"ƌ7r#HBR2dȐ!C 2dȐ!C i1_F$X O@ DPB >QD-^ĘQF=~i1_| 2dȐ!C 2dȐ!C i1_F$X O@ DPB >QD-^ĘQF=~i1_HB 2dȐ!C 2dȐ!- I1_Ȑ!C 2dȐ!C 2|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b 2dȐ!C 2dȐ!CZb!C 2dȐ!C 2dHBR2dȐ!C 2dȐ!C i1_HB 2dȐ!C 2dȐ!- I1_Ȑ!C 2dȐ!C 2|!) 2dȐ!C )B )B| H" <0… :|1ĉ+Z1ƍ;zb H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b H? 4xaB 6tbD)VxcF9v|!) 2dȐ!C 2dȐ!C/$|!C 2dȐ!C 2dȐ󅤘/dȐ!C 2dȐ!C b 2dȐ!C 2dȐ!CZ`> 4xaB'p "Lp!ÆB(q"Ŋ/b̨q#ǎ?/$|!C 2dȐ!C 2dȐ󅜘/dȐ!C 2dȐ!C "|,h „8`A&TaC!F8bE1fԸcGAfb!C 2dȐ!C 2dHBB2dȐ!C 2dȐ!C 1_HB 2dȐ!C 2dȐ!5 1_Ȑ!C 2dȐ!C 2F$XA 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ՊWjժUV5O`|UVZjՂ ˗o`|˗_|˗jժUV/_|/|/_|/_ժUVj`>߿|#_>$XA .dC%NXE5nG!#70_> '0_| ̗_>"E)RH"E)RH˗O`|o`|O@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-_ƜYfΝ=ZhҥMFZj֭][lڵmƝ[n޽}\pōG\r͝?]tխ_Ǟ]vݽ^x͟G^zݿ_|ǟ_~0@$@D0AdA0B 'B /0C 7C?1DG$DOD1EWdE_1F ;;PKH)Y$YPK+AOEBPS/img/collset.gif)GIF87a~?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,~ H*\ȰÇ'p " <0… :|1@$XA$XA .dC%NX"E O@ $0@ H*\ȰÇ'P ,h|'p "Lp!ÆB(q"Ŋ#˗"|]xŋ w`|.^xŋ/^0_xŋwQa/^xŋ/:̇0_ ]xŋw`/^xŋ/2̗0_ ]xŋ5w1ŋ/^xŋ308_|˗O`|'0_|'p "Lp!ÆBD`0_>$XA .dC%NXѢ|/_|3/߿|˗_>/|]xŋ/_˗O`˗/_>G0ŋ/^xŋ3o`|'0|_ 70ŋ/^X0| /_|70_|W0ŋ/^xŋ˗/|`>˗/߿|`>0 < ,h „ 2l0_|O` /߿?8`| H*\ȰÇ#JH"|3/| g0| /|˗O`,NgѢE `/_>'0_|W0|-ZhѢE-VG0A `>/߿| ߿| H K0a„ &L`>O`˗o`|˗/|%D? 4xaB 6tbD)VD`>X1E-g0E擘ϢE-Zh@$X A$(0_ ,0 HA(RH"E)RGq`>H`> H`> -̇0E(G"E)RHb> O@ 7p/,h ‚&L0| &LP`  (0O@ !B8`A&TaC!F8Qa>̇0| Ga|(RD"Ń+o`>3oaQ4/_>QH"E)Ra|Ca H8`A&4OB ;`/_| S8`> 4X? 4X0,h „ 2l!Ĉ''0|aH"ʼn(R,_+_ `>)G"E)RHQb/|w0E)NG|˗/߿|O@7_'p "LPa .\p… .\p…8P O'p@$H? 4xaB 6D0'p O| /|o`>8@$XA *O@8`A&TaC!F0_>̗o`>+`'NH0|M$/_W0|` 8q"| 7qĉ'N8`3`>#`'NH0|;_ ˗/|+`>&N0|'N8qĉCO` ̇0ĉ'N$bo"|7qD 8qĉ'Noa1̧`>'p 8`A&D+X| ` ,X` ` ? 0 O@,X_>$XA .dC%[Ob| %g0_>I1_>"拘oa> -̧0|/_>"(QD%Jx0| ca(Q| E1|[/a'`"(QD%Jx0| c`(Qb|E1|[ah0|I(QD%J1g0| '1b ;`"[Ob| 0_|;/b>%J(QD1O@ O@` W_ +X`Wp` ,80_+X|,h`A$(0_| WP` ,(0_ ,80,h „ 2l!ĈI0|w0| ̗/@O|˗/|/_'0߿| o|8p`(0,h „ #`>3/_>/_W0ƒ.\p… .\p…-\p|-`> /߿|˗O`| /|/߿|˗/_˗/|̷a-\p[80|̗_O` #o!| .\p… .\pB.\a|-` _`/|70߿| 70߿|-Lo| .\ @ +/_AO`>`+X`| H*\ȰÇ#B'Q|'p@'0߿|O@_>/|(߿ ? HAh0_|%JDa3O`O` h0D%J(Qă$J/|'0| ̗/|ˇ0@ ߿/߿? 480+'p "Lp!ÆB1Ds`>%&'`$J0|ITO|%J(QD(Q| !' |'p ̇!"!B"Dx0‚C|"? 4xaB 6tbD$J(0| I(`>E'QĄKO|(QD8`A&TX? W` ,X`A  <0… p`>:DOa&a H*\H? ϠA 4h | 3hРA 4H0_>4/_> 4hРA3hР ,ϠA 4hРϠ4hP`> $`| 4hРA Ϡ 4hРA g`> 4hРA80,/_| 4hРA˗ϠA 3h`> 4hРA O| H|3h0_| 4h`>4hРA 4hP`> 3hРA 4H08`A&TaB$XA 'p ̇|"D!B",0'p ̇p`>"D!B" |߿| o ˗/| G|  <0… :|1|I(QD[`|˗o`>'P8__߿| H|+O`> `>70|3X0,h „ 2l!ĈE'QD%Jloa>o`>#`#_'0|g0߿|G0_|+_(QD%Jx0|%J(Qć+` `> #O`>'0_>sO` 70| '0_|%70|%J(QD;`>%J(Q"|W0|G0|G0__> |'߿'p  @8p` ̗? 4xaB 6tbD70ĉ'N8qa|+`# |̗|/|8 A| G0| ˗|$`> 4xaB 6tbD)VxcF o| _ o|o| '0|˗// O`> 70 /|7p|O@ DPB >Q|'N8qĉ3o`>/|70|70_>G0|O|`80_|'P࿁80| H*\ȰÇ#Jtoĉ'N8` ˗/|/_|˗|70߿__߿| H| 4hРA O@ DPB >QD-^Ęc>!拘OF4jԨQF5jԨQ|5B1FiԨQF5jԨQƅ4j/b> ӨQF5jԨQF i1_|5̧QF5jԨQFӨb4j4OF5jԨQF5.̧Q#|8`A&TX? 4xaB 6tbD)VxcF H*\H? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mڄ H*< <0… :|1ĉ+>O@ DPA$XA .dC B0D!B"D!B`>!2"D!Bt"D A"D!B"D "|!B"D B0D!B"D!B`>!2"D!Bt`/_| ̗/|'p7PO@ DPB >QD;_˗/|G0_>  ߿8`A&TaC ;_| '0_>o`|70|"D!B"D!B4` '0|o`G0| G0D!Ba'0| ̗`o`/|!B"D!B"D/| /߿| ̗/|/|"D!.'0|/| ̗`| 70_| G0D!B"D!Bq`>'p|/|/70|o`>8`A&TaC `O`w0_` ߿8`A&TaC!F8bņ;_o`;/߿| W0? ߿| H*\ȰC H?O`| '0_>'P?70 H? 4xaB 6tbD)JO@ /߿|o`#O |߿(0߿| 08`A&TaC3_/|_70| ̗_C/Ç>|Ç>|_;_> '0__| G0|`>>|Ç'0| '0_|/_|'0_|o`|)Ç>|Ç:w0|70|O`| G0|˗O` ̗0Ç>|0|>|oa>|Çz衇(` ,X`'p "Lp!Æ[Ç-Ç>|Ç.0Ç{Ç&̷0Ç[Ç>|Ç>\a>Ç>Da>̷0Ç>|Ç>|0|>|Ç>|0|>|oa80,`> 4x!B$XA .dC11bĄ"F1bą1b| =̗`E0_#F1"| E1a#Fqa> H*<+X`,/_ ,X`8`A&TaCc0 <0ƒ H*\ȰC>|| 1̗0|=/a>>|Ç{Ç>|Ã>|| 5̇0|)P`>>|Ç{Ç>|Ã>|| g0|'0_|/_|8?˗/|(0,h „ 2l| B"D!B80|!Bas`>/_|/߿| ̗/߿|/_/_|!B"D "D!Bb|A"Da#`/_>w0߿|`>!Bb|"D!B?$XA .dA$H`>'P` /?߿8_70A ? 4xaB 6t`> 4xaB 64 <0… g0_Æ 6lؐa| +_>˗/_/_|/_|'0_|g0_| 6lذaÆW0_Æ 6lذaÆ 6T` 6lذ!|g0|̗/| /߿| ̗/߿|'0߿|+Oa 6lذakذaÆ 6lذaÆ װaÆ 6dO`װaÆkذaÆ 2w0_Æ 6lذaÆ 6TaÆ 6lpa? 4xP |'p 4? 4xaB 6\ϡC:tСCСC:tH0| 9ta:tСC9tСC:tСÂ:tСC [Oa>0C:tp`>:tСà ? 0 4  <0… :t/a=|_|1O@ O@80,`> O@O@ DPB 6̗`2_>||sC0Ä3/| {/Ç>|aa|=|ÇO| H?$XA8`A gРA gp`>3hP`>O@ DPB .̷0|0Ç>|Ç>Ta !̷0|sÇ>|0| =/| =|Ç>|C30'p|#H`>#/A$H_>$XA .dС|_+a>|Ç>|0| 70|9w0| 1Ç>T`>3/_>_0?  <0… :|1ĉ-̇0|g0|g0_| W0|)RHa>#_>˗/_/_|/_|G0E)RH"E !/|g0|9G0|/_ #`>)R0߿|̗`>_|G0|˗"E)RH"Ņ3/|g0_|G0__> /_>)Rh`> O@8P /|O|?8`A&TaC!F8b| (0|#(`>'p A (?_ O@ DPB .O@W |W_|˗_|˗/|˗/_O@ DPB >QD ˇ0|3`70| /_ XbŊ w0| g0_|'0߿|'0_|G0_Ŋ+VXbŊ ̇0|;o`>3o` O`XbŊ9w0_E*VXbŊ+V|9w0|+VX| !Wa+VXbŊ+80|COb+VX`>0_Ŋ+VXbŊ80| 'p| $(0,h „ 2l| -a>!B"D!B1a>!̧0|!B"D ;/_|"D!B"D!*ak/| B"D'p`>$X_|4hp`|8`A&TaC!F8bł, ̧`>'p ˗`|'p "Lp!ÆB`> 4 <0… :|1ĉ+"O@ O@ D`>8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiS;;PK&))PK+AOEBPS/img/collget.gif)GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ C`> 4xaA$XA .dC8`A'p "Lp!ÆB(q"Ŋ%wb|/^x"|.̗/ŋ/^xŋwQb|/^x|."̗ŋ/^xŋ!̗"|/^x"|]4ŋ/^xŋ !̗b|/^x| ]wŋ/^xŅ 'p@/_>/_ ̗/| H*\ȰÇ3_|˗_|˗/߿| ̗`#F1bĈ#F1b|/_|;/߿|˗_>/|E1bĈ#"g0߿|_|/_|/_|#F1bĈ#F1bD /| 70__|1bĈ#Fx0| /߿|70_|g0_Ĉ#F1bĈ#F`>70|˗/_||,h B H*\Ȱ!|'0߿|8߿ H ,h „ 2l!Ĉ'R0_| '0_|'0__ G0ňYhѢ|;_>/| ̗/|0_|-ZhѢE-ZG0A O/߿/,h B&L0a„ &4`>_>/_|'0| O@ DPB >QD+ϢŁ,VgѢEgQ`>$hѢE-Z8`> 4H? W_ O@$X |QD(0|)Gb|)"GQa>0|)RH"E)80|QH0EQ0E;|QH"E)R| !̗"Qh0EQTa>Qd|)RH"E)C/@O|o'p "/a„ ̗0a„ ;0@@ o 8_>$X!Dh0,h „ 2l!Ĉ'*̇0_>co!|,h  ḨPBG0| W0BO@  ? 4xaB 6tbDC/_c"E'Ha+O`0E H"E)R(1߿|o`>;"E'H``>+`(RH0E)RH"ʼn̗_+`>)R"ŃO@ '`>(0@ <0„.\p… .\p… O@ `>8 A$XA .d!|,? 48`> 'p|O`O@8`A&T`>  <0… :|1D`| ̇0_|M8qD80|G0|`>8q|M8qĉ'N`> #O`>;oĉ'1`70|a'1ĉ'N8q| M$a>(`> 4xa‚ Hp` W` ` W| ̗/_ 'p 8| /,h „ 2l!Ĉ-'`>70_|'Q|)1| Ida/_A̗/|I(QD%JDoa>1̇0_>'QD拘/b>$20| 1̗O| E'QD%J(a$0| )'QĂ拘/b>$20| )'`>"(QD%J0| c`>+O"|w0|E0D3a$"w0_|%J(QDI@8| ,80_` W_ +X` +80_ ,(0_+XP` ,X0_` W`+/_O@ DPB >1b HA Hp` W_/_>/_#o`/߿|/_|/_> +X| `A H8||+(0_| /_|+`  <0… :|1b|%6W0| w0_/_>W0_/߿|_|˗_|`>"(Q|9G0|_>_ 擘OD%J(Q"|%:̗O``> ̗/|G0_/_˗O`>'_$JH0_>#_O``IOD%J(Q"|%B̗/C ̗o`/A/_| `>70,X0A4hРA ,/_| O@ /| /|/_| $H0,h „ 2l!ĈI(1|w0|˗/|̗O`/| /_|'`$J0|w0| /|'`>%J(QDI(_>O`/_>`> /߿_/,hp`;x4``>˗/߿|W0O@ DPB >1b>%0|%JLO|I(1a擨0D$J(QD%"'QCO"AO@ 4!B"!B"Dx0‚C|" <0… :|1b|%Ja$Jh0ă"(Qb| %'a>I(QD%JDOD-̧0D 擈0_|%JToa>$'a>%J`> 4xaB8| ,X`  | ̗` ,X`,X`A ,(0,h „ Ko|*̷pa| 'p "Lp!A$X_> 4hРA4ϠA 4h | ̗/A3hРA /_> $Ϡ 4hРA 4/_3hp`| ̗/A g`> 4hРA g | 4hРA 3h0A 4hРAgРA HO@ !"D!B ˗!B H`>$Ẋ!B"DH0B'P|o O| ̗/|7p8`A&TaC!Fl/b>%J(Qb| !̗/|G0A o_ g_`/߿| gp`>'p "Lp!ÆB0|%J(QD;o``> o`>O`|1|'0_|70_Koa>%J(QDA'QD%Jtoa>W0|G0|̗` G0_|g0_ K/_> /a (QD%J0|I(QD!;O`> +O`>#a>/߿|70|Oo8 |'P`o|O@ DPB >Q|7qĉ'NT/|W0_|G`>8P`>_# |_>G0A_>'p "Lp!ÆB(q"Ŋ/b̨1/_ 7_ o| /@/ WP`| ̗o`˗_ <0… :|1D&N8qĉ w0| ̗O`>+o`o`| ̗`>;0|O|0@O|O@ DPB >Q|'N8qĉw0_|˗/|/_|(|߿70߿߿/'0,h „ o… .\p… .\0a .\p… .\p`>.\pB[(0… .? 4xaB 6tbD)Vxcƌ4jb> ӨQF5jԨQF i1|5̧QF5jԨQFӨb>4j4OF5jԨQF52̧Q#|ih0F5jԨQF5jdOF 'p "L ,h „ 2l!Ĉ'Rh"ƌ8`A&T ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײm-ܸrҭk.޼z/G'p "L ,h „ 2l!Ĉ'RX`> 4xaB8`A&TaC=|a>|Ç>|C>|0Ç>|a>Ç>|Ç>|0Ç{Ç>Ç>|Ç>|Ç{|>|Ço`>70|̗O |7߿_>$XA .dC%NXbO`| '0_|0 @? 4xaB 6t0|O`> /|#``>|Ç>|C/| ̗O`/| '0|=|Ç` '0|#o`|`70Ç>|Ç>|a|/_>O`| ̗/|/|{Ç6/|/| ̗`| 70_| G0Ç>|Ç>|!//߿| 70|̗_#/߿| <0… :t/|/| ̗`| 70_|(߿'p "Lp!ÆB(q"Ŋ;_o`>̗_+|_>$XA .dСA$'0_>/|(߿|@o?$ <0… :|1ĉ+O@ /߿|o`>'`>߿| _O| H*\Ȱa|w0߿|O`|70߿|`70| 9tСC:tСC̗`O`| ̗O`/|70_#ϡC:t0|/|˗o`'0|̗/_>70|:tСC:tСC!'0| '0_|/_|'0_|o`|9tСC[ϡC [ϡC:tСC9CP>$/_ ,X` O@ DPB ̷0Ç[Ç>|Ç>|(0|>|Ç>|(0|>|oa>|Ç>|| =|a>|| =|aO@$Xp |,h B H*\ȰÇc/bĈ E1bĈ11bĄ惘/_|a|#F1bĈ11bĄ"F1bĂ'p "L ` ̗`A ,X`  <0… :|`> H*< <0… :Ç*̗a{|>|Ç {Ç>|>|| 1̗0|=/a>|ÇÇ>|Ç=|Åk`˷0{Ç>|80Ç>|Ç{Ç -w0|̗/| /߿| ̗/߿|/_|˗`>|Ç=|Ç>|Pa>=|Æa>O|˗/߿|/_>/߿|/߿|˗o| H*\ȰÇ "D!B""D ;/|W0|/_|+`70_|!B"D ̗"D!B"D H*\ȰÄ H | O|_ ? _> 7P |O@ DPB 2O@ DPB 'p "Lp!CװaÆ 6d_/_|˗/߿|/_>/߿|'0_|w0_Æ 6lذ|5lذaÆ 6lذaC kذaÆ 2'0|'0| ̗/|˗/| g0߿|˗/_>kذaÆ 6L` 6lذaÆ 6lH0_Æ 6lذ| ;aÆ %װaÆ 6lx0_Æ 6lذaÆ 6laÆ 6lpakؐ |'p  <0… :,Ç>|Ç{Ç*0_|>,Oa>|a|>|C=<0   <0… :\Oa>|80| 8`A'p ,X@O@ O@ DPB &̗/|=/_P`>|!|c/Ç5̷0Ç)̗/|=/_>{(0Ç>|a>a=|Ç˗O`|˗/Ç˗a>/a>0_>|Ç)̷0ÇsÇ>|_|'p " g`> 480A g`> 3hP`>$XA .dС| %0߿|9Ç>|Ç [`>'p`'p|#H`>#/A$H_>$XA .dС| !0߿| 0Ç>|Ç>|Ç̷0|O` +` ;`|`=|Ça>+/߿|/߿|'0_|`> {Ç>|Ç '0|/|W0  #O`_|G0_8`A&TaC0_|G0|˗/| +`>|Ç>||w0|'0|G0߿|/| /_| ̗Ç>T0'p A (? o`'p`> 7P |,h „ 2l!Ĉ'R '0_>#/ (? O@ /|GP |,h „ 2l /_/_|˗/߿|/_>/߿| <0… :|1ĉw0|`W0_> `>g0_|+VXQa3`> ˗O`|_|˗O`XbŊ+VX1ao`> ˗/|w0| g0|G0_Ŋ+Vla*>WbŊ+VX"|3a(XbŊ5w0_EUXbŊ+V1_Ek`>*VX| %Wa+VXbŊ#O@ ,`>!!B"D!B"D!B!|"D? 4xaB 6tbD)JWa>Sb+VXQ`櫘0_Ŋ+VXbŊUd/asbŊ+V$/_|W`|*VXbŊ+V"| +/|WbŊ+O@$Xp |,h ,h „ 2l!Ĉ'R(`> 4x 0@ H@$ <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽|;;PK)&t))PK+AOEBPS/img/performance_graph.gif+GIF89aj999JJJRRRZZZccckkksss{{{,j1H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8)ɳϟ@ JѣH*]ʴӧPJJիX$ ׯ`ÊKfׁg˪]˶۷6b ݻxEu߿ ^)È+^,0ǐ#K^x˘3ϠrMịO^pְc.z۸ͻ N\ȓ+?>wƒCo@A`A 0@;0N)0P`u !y`^vuwP  O巟 v h\!P5x*7P+c N}Ǣ(?8WIANJӉHf#NɐTMU`yXP(`A(),)*w'WiiɥZtDfhA1P #}J}0 )| d&~n2T]Qh^JfꬡvҊ*ؓOᵠ-*@jjWcA멹Xf%CUK(Pd@ANxv1l{tĭ @lB<džYYRo ;5|05AI2ABc0sڝ-{b) じw5m2zj !J\ :AG>gDkdp>A>i>'K\);,+onyoVxy>)wnw(A05'!هC @$AĢ_OWnЃK> Os.i! gHÃU8n#2%H\HD.PHENX4`tHF猱h,F߬pHG̱xd챏IH |!H,t#II<%3I <2:IJP FJʼPMtZI˻y]S-wj /j;Ll<3IͳP=f5ɒ`'8[B- @@NP? g;iC(.>Gܧ@7RN  p+:"ԒOЊ*q7E7j{^n i=VҖ4ɦK]KPt&N0 8a;EiDTiQzI.uM%SzԤNբCU+ӟ6t5hw(p{VƕOuhU浚Y Hͮ髄e'(Ķa1FXqR=]a[+kW$E+gTvOWzZQLmmgÐxUmnjZ nHvvm7z>v">:OĀQ7H47-Ln\ &}1%iͯ~ XKUd)O;'L [ΰ7{ GLn #b VȺ^,1G71w>2,"FN2&3N2,*SV2e)gNe!Ҽ/hN6psobr"3>~4-BІN4:wi*`9[Ҙδ7NOXǎgcR3ԦN5WVծpUQ]lεw^Z>5F.Ȏuf3nCbeIԯn{ۺ2ME>u;UҐhηo Y٣omw?X[Bϸsd 7[N򑛼(ϰǭiml0GO@95lsx3.̗\Ew.[X:9u N]"UVNUv]NIrEY;.wXwX:EP><\Z1`Uw;c4 )-{'Sz"Ȼowe˷}gpMg0~OcO8hKܖ'f' }ԓ=a]vNM̠֌{̑OLu5b®=Գ]gfѝں]ֱ<bL'C) ߾+ɭػrƬ\L6ݰR akA܋ڸ据-ⴊ e}8OM ň Nn\m΀̬T޼=԰#/*Wci +uT*-dҍڊ/>^*BK'y{Ǒш;F>~.^^^bIF ,ѐ<<4U]=uNΞ-<[ NlxsrεVnۨ-n|ŀ! ۅ~- i<]>}܆K ЬЭw~ n.~NQdխZȾ[fMvֹ.nA/-? Hϻ;(n⬘V$ٺn-yNnz~ӽoXnAǍ?>M,&x j]njΎ*{|'+D}버ۘ~3>^yOa@!џ3}[v{//\ B@/YUB2oO.v$80H(! <Đ0nG!E8I&KfܸreG-Yj9fM7uRdN;ӦєF#$%ҧK:(JO2kGŎ%[`؁h6hقKD(.#oB +7¤ ܎K2CmڰJ>+"hρx >l31ƒ\.1-{\T:0S7SN:' 5?bKNMMRV\LFEWL4"US>ʋJ`S[jTA5i0G\g=#6u2aTx\qمPi*q]RXS; *Գf\f+lc8״~ 0֩Xog~;r͍tTo\#bEQBMމŘSRIϒB@7hs^dyO9gm̥v`5%;E~1jF~㘹f}.qpb3kFݥʻs+׶.7t\5ױq.|ӺX̙r_őrt?O̅LZL ``#f6rz[@ HuC@_qQo(\usgY_e.'^CW-+c\tnE8  4@  6D CX0EĂH<!\^7evaڶ &b#xhTP,ڶ!D0sgÓ̄X9oN] P}˞55Q^gw6QXW4c-VbH&$D$1yEjxJQ (Q&WÈB>F2F\\sGnrd_(<`8ĞZ-t3])@5 jH7trM@%ecjLs1U?VVsm$ dDT+>Z)"()‰r$`GXB^yH1=QE+fo9RhKtIq[N!fD5-Cܵ"$*$.JmgEPzۈr'Rm.Vpz˧ƪO.-%-iPs8hj*{m.j=CWQxJJW8\J;+[>GHn:xSZLT0I̟%wM ]B*qhj-ߊja[KX'&;++Ⴄ{LC(celnYݝ78dyinZpX]KDuw$=Dje~׶ϪYlMkfzAcg1vFld?oZs`O[,i9nu,KDKGgN1֣%o┙dK|wƵIe}*ZȊV]]N$, /Rse晪Tsh˪Wf@揗f(c( [N+>;Z Z:λ4CsL2w|մ2o"ҊqOj,X)ܙi 0=w9HWrܸ˃ZGy!&t]luS9e-+Cfu ^׼02}'H[z`?2f:f,y/^sxù?]>Khk; K:ϫ499 8`[<O;2*?j(w=k6#8k)Y{^Aۿ UY G8+%c/{I695"S/S2-5pBf: H2j#m6K5 C!B1$ӸBľ;`$J+ E'$*y0A+!CB2OZd[óۼC3=5JBh {>T >X r?/?bL&DA$4[nFQFR;{ ѓ"4ĩu<<J:׌8 SgX  Ѝ`ƀɧBMc-R^Hgc5^;R B^eK;aS^Dn۷dF;9I~B +~)<UdE-R^`ۈ`\Wƹe~>EZ_fd(if0οr?gierfܚr߰^5Ib:g19 ibSL62iV 9H_9f߆vz.n h;+T.h8 ngy^bvÐ܉Ff^Hc&< bvfcf]h(CޛV'd-fꠎcjjj$ejjk{e>kNkjnk~kYk&ޗk~XkdV.l>l$DEln~vlɞlkʾl̮llllmѾ>maNmn`׎mm۾mmnmn.!mNn^n~mnο"@@-+noNKa$&&oo#*M eUFVaBJbomp<x  n) `7vj٘ taf&q/ q_r9(H^2W񁨀sr q./ @oAh4Kh/ os8s:/9s<;s>=s@o?tB&/tDWAOtFEotH_GtJ_CtLGItN'MtPOuR7/uTKOuVgSouXp/uZru\Uu^ǹQu`]vb?Y/vd_OvfaovhcvjWvld_vnvpw]=wtOwu_wvowwwxwy &w{w|;PK13,+PK+AOEBPS/img/lnpcc020.gifXGIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗˗/c|)&L0a„ sb|廘/| &L0a„91| O߿|70߿ o ,h „ 2l!Ĉ'Rh"ƌ7r0| /_| '0|/|˗/_>=zѣG=zc| /|˗O`>'0_>_ѣG=zѣG=n̗/_>_|˗/|8P߿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJի<8`A&TaC8`A&TaC!F8bE1fԸa>9bǑ#G9rȑ#G-ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ8r1_>9rȑ#G9rX1G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9"'p "L(0_|O`> *D/,h „ 2l!Ĉ'Rha|'0߿|/_/_|̗/|'0_|'p@$Xp`> g0A 4h`70A 4h`|gР $/_> $? 4xaB 6tbD /|o`/߿|'0߿|W0|I̗/Ă#oĄo`W0_|&̗/_|[/aM8qĉ'Nd`|w0_|/|_|+O`> 'P ,hp |? 4xaB/|)TP|'p ,hP |'p  O|G߿8`A&TaC!F/_|/_|%̗/_>3/߿| ̗/߿|/_|AO@ 4_>$XA #o`*T`|8`A'p |/|(@ o ,h „ 2l!Ĉ/|o`/߿|/߿|W0|I̗/D#Oą/_>(qa|˗Ob|c/| ̗O`>̗O` ̗O`'QD%J(1!|| ߿(߿| o`߿| O`o808`A&D`> *'p "Lp!ÆB(q"Ŋ/>̇c|aĘ/F1bĈ#F1bĈ|1b0_>1bĈ#F1bĈ#0bĈa|1bĈ#F1bX0_|1b#Fˇ#F1bĈ#F#FaĈ#|0bĈ#F1bĈ`'p'p "Lp| 2dȐ!C cȐ!C 2dȐ!C 2dȐ!C 2$`> ̗O`>1dȐ!Å2dȐ!C ǐ!C 2dȐ!C 2dȐ!C 2dH0_>/| ̗!C .ǐ!C 2d0_> 2dȐ!C 2dȐ!C 2dȐ!Â`>| H*\X0C 2dȐ!|8`A&TaC!F8bE1fԸ`>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ H*\ȰC H*\ȰÇ#JHŋ3jx0G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ8r1_>9rȑ#G9rX1G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|'˗/|#E'p "Lp!ÆB(q"Ŋ˗/|˗/_+/_'0| ̗/_>'p8` 4h0| 4hР '0| 4hР/A 3h`| 4h`>$XA .dC%.W0߿| ̗O`/|3O` `&˗ob| 81a>oĄ̗/_0_>K`|'N8qĉ3/|̗/|g0|70_|EO@$X|,/_| 70˗/|˗O`G A H <0|˗`> *` Ob|I4/_|I0_|'p8`A&/_|Sp`|̗O`'0|'0|'0|SPB *TPB *L/_|_|˗/_>0@o࿁߿/߿|'p|$H | <0!|)TP|˧P| ˗/|O`/_/@ <0… :|1ĉ+Z0Ḟc|1bĈ#F1bĈ#FaĈ#|0bĈ#F1bĈ#FÈ#FaĈ#F1bĈ#F1ˇ#F È#F1bĈ#ƂÈc|1b0_>1bĈ#F1b$/|1b#Fˇ#F1bĈ#F'0?@$XA .!C 2dȐa| 2dȐ!C 2dȐ!C 2dȐ!C'0߿|O`| 2dpa> 2dȐ!C1dȐ!C 2dȐ!C 2dȐ!C ̗O`|G0_|cȐ!C 1dȐ!C 2!C 2dȐ!C 2dȐ!C 2dȰ | ?'p "Lpa| 2dȐ!C O@ DPB >QD-^ĘQƃ8r1_>9rȑ#G9rX`> 4xaB 6th? 4xaB 6tbD)VxcFȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9^Ǒc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>qԘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#.(,h „ 2aÆ 6lؐ`| H*\ȰÇ#JHŋ3jx0G1#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9rc|5Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rb>3ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#GqGUP>$XA SPBO@ DPB >QD-^ĘQƃ8r1_>9rȑ#G9rX1G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ8r1_>9rȑ#G9rX`> 4xaB 6th? 4xaB 6tbD)VxcFȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ8r1_>9rȑ#G9rX1G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|˗O`|o`>˗/| ̗/_ _|߿|˗/߿/_|˗/_//,h „ 2l!Ĉ'Rh"ƌ7̇0_| ̗o`|'0_>'0߿|/_>O`>/_>'0߿|˷0_>9rȑ#G9rX1|˗/߿|o`|/|/߿| O`>˗O`>_|[/G9rȑ#G9ra|/߿|/_|`/_|/_>/_|˗`7`>'p 'p "Lp!ÆB(q"Ŋ/b̨q|/߿|/|'0_>G0|˗O`>O`˗O`| /|-̗#G9rȑ#G9V̇0_|˗O`/_>˗/|˗_˗/|O`>/_| '0_|-̗#G9rȑ#G9V0G-̗#G9rȑ#G9V0G1̗#G9rȑ#G9VǑ#GO@ DPB >QD-^ĘQƃ8r1_>9rȑ#G9rX1G1Ǒ#G9rȑ#G+ȑ#|8rȑ#G9rȑc|9rĘ/G9rȑ#G9r#Gȑ#G9rȑ#Gqc|9rȑ#G9rȱb>9b̗#G9rȑ#G9VǑ#Gqȑ#G9rȑ#NJ H*\ȰC H*\ȰÇ#JHŋ3jܘ`> 4xaB 6tH? 4xaB 6tbD)VxcF'p "Lp!Æ 'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎC,y2ʖ/cάy3Ξ?-z4ҦONz5֮_Î-{6ڶoέ{7޾.|8<Ə#O|9ΟC.}:֯cϮ};޿/~<ϣO~=Ï/>W;;PK]XPK+AOEBPS/img/lobass.gifiGIF87aB?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,B H*\ȰÇ#JHŋ3jȱǏ C`> 4x@$XA .dC%NXE5nؑb|y,/_|=zѣG=zѣGyT/_>=zѣG=zc|ѣG=zѣG=C/ǂ=zѣG=zqc> (?˗o`|˗_|G0,h „ 2l!Ĉ'Rh"ƌ7r0|˗/߿| /|O`'0|=zѣG=zѣ| ̗o`>#/߿|/_>ѣG=zѣG/˗/|`>˗/߿|`>0 < ,h „ 2l!Ĉ'Rh"ƌ7^70|˗O`>o`_| DZa|9rȑ#G9rȑ|O@ /|(_ <`>$XA .dC%NXE5"O@ O@` ,X| ,X`'p "Lp!ÆB(q"Ŋ/b̨a3!|'p  ;xO@ DPB >QD-^ĘQ|1w0F6J̷qƍ7nܸqƍ滘a>6nܘ0ƍ7nܸqƍ7n<a|8? 8p`O@ DH0_ &L(0,h „ 2l!Ĉ'Rh"ƌC/|1̧0_|6̗/_mܸqƍ7nܸqƃ˗o`>s0 Coƍmܸqƍ7nܸqƂ;/߿|!G0|7noƍ7nܸqƍ5'p@0@O@ H ,h „ 2l`> O@ DPB >QD-^Ę1a|g0_C`>4jX1|5jԨQF5jH1|G0|w0F+{OF5jԨQF%[b>4jX1|5jԨQF5j1|1̧`>'p 8`A&T+X| H*\ȰÇ#JHŋ3̷0| !̗`i80|iԨQF5jԨQ| ]0| i(1_|iԨQF5jԨQ| ]0| %W0Ƅ +`>"ӨQF5jԨQƇ滘a>C`>4+`"ӨQF5jԨQƇ'p  'p A +(0_ W_|˗O |'P`˗O`|˗/߿|_|7P`80,h „ 2l!Ĉ'Rh"ƌiĘ`>`|˗_|˗`| /_/߿|/߿| 70_|iԨQF5jԨQ|3a3O`˗o`#/߿| ̗/|'0|囘OF5jԨQFӨ1_|'p@'0߿|O@_>/|(߿ ߿8`A8`A&TaC!F8bE1fOƁ+_>/߿| ̗`| /|˗O`o`>4jԨQF5jԨa>;`>3O`>/_0@7p|7߿'p O@ DPB >QD-^ĘQ`>so`4j\c>5jԨQF5j|OF;"|'p ̇!| H*\ȰÇ#JHŋ3 ̧Q#| %̧Qc|iԨQF5jԨQ|5̷0|5̧1F5jԨQF H*,+X` ,X| +XP` ,X` W`+X|,h AO@ DP 08`A Hp 0 ,'p`>$XP | , 4xaB H!!Ḃ!B C/̇|Ca>!!|ˇ|"D!B <0… :|1| Id`>Coa>$ˇ0D[Oa>I$ |߿| o ˗/| G|  <0… :|1| g0_|˗`>G0_|70|o`c/a>g`> A$  A Gp`> '0#/|O`>#Hp`>$XA .dC[`O`|̇0_/|o`|`;O"|!G0|0|+`|;`#`W0߿| )'QD%J(`>#`W0|'0| '0_|˗O` ;` ˗O`|g0| W0_|g0|˗|'P`(0|7p`| o'0@8p` ? 4xaB 6tbD`> O`>`| ̗/|̗`+`#O`/_|W0|!70_|/| g0_/_>k_  'P o /_>$XA .dC% ̗`|W0? O|7p|/_|˗O`|/߿| o|8P`7P`|o ̗o@(0@ ̗o/߿|/_7P`> Hp GP`#`>G_0 <0… :|1ĉ8_>/|'p@0@ o|(0߿|(`>'p A (?˗/߿|$`>'p|? 'p@70? O@| '0_|̗o`˗_ <0… :|1DW0|`>3/| ̗/|70_W0|9W0߿| /߿|W0|!G0| #_`|/|-'0A߿|G?˗o |?  <0… :|1D;/_|˗O`|70|/_|˗/|8_O| 7p|/|˗O`>80| (0@7p`8_ O`˗/߿|7p` 8p| H*o… .\p… .\p!| "g0… g0[0|  w0B[_ -\p.\p… .\p… ̷p!|-\p|-a ̷p|-a -To… ̷p… .\p… .\` 3o… ;o| -La Coa>"̷pa .\80… .\p… .\pB.D` .a>.D/a>$X|;H0A K/| {Oa>%̗`| =G`>%H"E)R0E H` ? /_|˗/ 4h0/_> ˗/gРA8`A&TX? 4xaB 6tbD'p O@$XA 'p "0z8`A$X`A$H0_ O| H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]Th@;;PKʕPK+AOEBPS/img/call.gif#dGIF87ax?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,x H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXje0 $XA .d`> O@'p O@ DPB >QĄQl/_|H`|5̗`>)RL/|棸0E)RH"ň(F̷0|) G1| QH|1Ga>)RH"E5̗"| 1Gb-̧0|)RX0|̧0|;/_|;"E)RHb| X0| QOa| !0E)w0|%̇0_|w0_(RH"E)2g0_˗/_>0@ O|7p'p "`|/߿|̇0_B&L0a„  g0? O| 7p | O|˗_| ? 4xaB 6tbD W0| ̗/߿|/_ /70|  A $HP`˗|O O`? 4xaB '0|˗/| g0|/A| ? 4xaB 6tbD W0_/_|˗/߿|/|0D3/? ? o| 8p| H*\_ /߿|3` /_|#0 O8`A&TaC!F`>'p|70_ 8_ O (? O@$XРAO (? ̗? 4xaB 'P /߿| `>'p`>/_8@ /_| H*\ȰÇ#JD/_'0߿|/_|˗_`9G0_|˗`|/_|/|{_|&N0_|3_|w0_| /_|#0? ̗? 4xaB 6tbD'0_|0@O|O|#80A Gp` ̗/_/_| G0߿|#80| H*\(0_|/_|#_/_ o`808`A&TaC!F80|M80|9̇0_| W0_>O`> 8qb| w0_>#O`3oĉ'N8qb>&N`>{a̗/_>k`'"̗0|Ca  g0,h „ 2l!Ĉ5'Q"|1̗/aX0| !'QĄ擘/a>;OD%J(Qb|I(0| )0_| Soa$J0|)'1b$JX`> 4xaB(`> 4x!G A$H A G | G|  A$H | G| G H8` gР| gРA3H0A 4hР 4hРA W0A $ | gРAgР|3h0A480_> g|3X0A4hР| $Ϡ,Ϡ4hР| 3hРA 4X0A 4hРA 3hРA$Ϡ H8` ? W`| 0 O@'p`>$(0_+X`W | O@8`A H8| ,X` $` ,X`W` W`>$XA .d0_C6lذ!| 5l0_6lذaC6l`'0|˗O`| ˗`|[`>/|%̧0_Æ 6l0_| 6lذ`6\a 6la 6<`| /_>˗`>/߿|+`|/|˗0_| 6lذ| 5lذaCSaCkذaÆ kذaà g0_> ̗o`G0߿|+ |? @ 8`A&T| 5lذaÃ;/߿|˗_|'0_kذaÆ kذaC3/|70_> G0_|_>̗/_ ̗/a> kذaÆ װaÆ W0߿| ̗/|˗_>`> kذaÆ 3aÆ 30@8p`|#/_| G0_>#/߿|70_>O`| H*\Ȱ| /_|:t`|3/| /_| ̗/_| ̗ϡC:D/_|6O / ̗o`| 70_|/'p`>̗o`/_ 8`> 4xaB 6tbD 'p? O|˗_>8p?$XA .daA$XA `| /_>70_>/߿|70߿| ̗/_>70_SPB *TP`> *TP‚3O`| /_| /|̧PB *TP| *Tx0|((߿ /_|˗|'p| G`|#0'p`>8`A&TaÅ:tС3/_|O7? ? 4xaB 6\ϡC 9tС|9th0C:tСC:l|СC:tСÂ:tP`:4ϡC:tСC6`>'p 'p "Lp!ÆBx0D +O"|%J(QD%B'Q|%J(QDI(`$B'QD%J(Qb|#(QD%JOD'b>%J(QD%0_>%J(QD$JH0_|!(QD%J(Q|x0_|%J(QD'p "L 'p "O@ DPB >QĆ HA H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JA$XA "O@ DPB >QD-^ĘQFu80_ǎ;vرcǎ;v1_ǎuرcǎ;vرcǎu80_ǎ;vرcǎ;v1| /_|/_ Oo`>? 4xaB 6tbD)VxcF9ng0_ ̗/_>'0_ ̗`| ̗_|;cǎ;vرcǎ;vܘ`|/_|˗_| ̗`|/_>ױcǎ;vرcǎ;f/|˗_| ̗/߿| ˗/|#/_|!ױcǎ;vرcǎ;j̗`|0@O /|`>'p| H*\ȰÇ#JHŋ3jȑ"| O|`>770߿߿ O O@$XA .dC%NXE5n0| /_>'0߿|/_| ̗O`'0_ױcǎ;vرcǎ;2g0߿|/@O߿߿ _>| H*\ȰÇ#JHŋ3jQa:v`;vرcǎ;vQa:v`;vرcǎ;va>:v`;vرcǎ;va>:v`.'p 'p "Lp!ÆB(q"Ŋ/bx1|5&w0|˗/_w1_|5jԨQF5jԨ`>4jL`>!0FiԨQF5jԨQƂ'p "L!G A A$H A  <0… :|1ĉ+Z1c|5ja>曘/|iԨQF5jԨQƁ4j(0| !0|ӨQFiԨQF-˧QF-w0|̗_|ˇ0_|˗`>5j/_|˧QF5jd`>5̇0| '0|_|˗_W0F5f̗`|5jԨQƅ˧QF/|g0_˗/_/_|O| H*\ȰÇ-"D!B"D H*\Ȱ| H | O|'p`> ̗/_/O@ DPB >,oa>!B"D!&̗/|!B|9W0_>'0߿| ˗/߿| ̗`>A"Dk"D!B"D"D! '0|/|˗O`/_3`>!Bb| A"D!B`>!Ba> `> B"D9'0D!B"D"Dka  g0,h „ 2la=|Ç>|a>|a| %a|=|Ç 'p A$X`>'p "Lp!ÆB(Q`'N0| M|/a'N0_w0_|'BO@ 4'p`>$X|,h@$XP`>$XA .dС| 1̗{Ç˷0|˗0Ç{P`>s/C=Ç>|x0_=̗!|{Çk`>{!| ̗0_|{p`>|Ç (? $0 4O@ DPB ka:t0C!̷0|0_>:tСC:TϡC:tx0_| 5СCo |o Gp`> G`> $H A$H0,h „ 2l!Ĉ8qĉ =̷0|':g0_|'0_g0| !0ā8qĉ'N0ĉ'NLb8qa> 'P? /߿O| 7p`O`/_|(0|'0_ 7p`>$XA .dC%*7qĉ拘/_| 8a 'P? /߿ O|o/߿|'0߿|(0|/_/8`A&TaC!F0ĉ'N'p`|˗/|/ (? O@ /? ̗/߿|0 <0… :|1ĉ 8`A&TaC:tϡC/|/|`>s/|̗_>g0_/|9tСC:tСC:tСC:tϡC `| ̗O`|w0|w0|̗O`|3/߿|/|9tСC:tСC9tСC 9t0C )!|5̇0C 9tСC:tСC9tСC9t0C )!| /A#H0A'P ,(0,h „ 2l!Ĉ':G"E Q(0E0| )Ga>)RH"E HB O@30 <8? 8p  g`> 4(0 ̗`| 4hp`>$XA .dC%N"E+/|QL`>̗a(2̧0|壘0_>)RH"EH| 9g0ń {/a>'p O@80,`> 4xp ,h „ 2l!Ĉ'NG"łk`> 0| QH"E)RH"E'H"|+a(&W0_|0E)RH"E)RHqb>)g0| G1a3`>(RH"E)RH"EQHq`c`O`/|)'0|-G"E)RH"E)R/Ew0|!G0| ̗_|˗`>`3? 4xaB 6tbD)Vxc|e(0_>W0|3/߿|/_w0|w0_>/_ƌ3f̘1cƌ3^̗`8@̗o H`AO 70O@ 'p| O@ DPB >QD-^Ę",h „g0_S80| ̗_|˗`>w0_>O@ DPB >QD-^Ęqa> w0|9w0_| O8_> '070,h „ 2l!Ĉ'Rh"ƌ i(0|M0_>$;`>5jԨQF5jԨQ|71|曘`4jԨQF5jԨQF571Ɓ&cOF5jԨQF5jԘ0|ib4jԨQF5jԨQF ;/_|櫘a|5jԨQF5jԨQƆ/_4g1_|˧QF5jԨQF5jO#|,h@$X |8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_+0 ;;PKZSҠ##PK+AOEBPS/img/lnpcc015.gifGIF87ax?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,x'p "Lp!ÆB(q"Ŋ/b̨q#ǎ)K0 <0… :|1ĉ+Z@ /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7_| /_|˗/@ 'p "Lp!ÆB(q"Ŋ)xŋ/^H0_|/^xŋ/^ŋ/^x|/^xŋ/^ŋ/^x|#'p 8`A&TaC!F8"|UXbŊ+VX0_ʼn"XbŊ+VX`*VXbŊ+V,|UXbŊ+VH0_|+VXbŊ+Wqb*VXbŊ+V$`+VXbŊ%̷0_>U`|XbŊ+VX`+VXbŊKoa|(0_|;bŊ+VXbE*VXbŊ+V/a/_E `+VXbŊ 0@ 80A(?/_>$XA .dC %̷0_|h0|1bĈ#F1bĈ E/|[/|/bĈ#Fa/_| C/|#F1bĈ#F0_ ̗O`|˗/߿|+/|O |70߿  <0… :|`˗/_Dg0_Ĉ#F1bĈ#*_|O`> |߿|_' <0… :|` ̗/|`#F1bĈ#FT`> ̗o`|/_ ̗_>O |߿8`A&TaC!̷0_>E4`|1bĈ#F1bD c/|˗/|˗`|O``>1bĈ#FX0_ĈE1bĈ#F1bĈ 0_ '0| W0_>'0| ̗O`>'0_#F1bĂ"F4/b#F1bĈ#FT/? | 70'P/߿70߿70,h „ 2l!| A0 B"D!B|!B"D!Bq` BD|!B"D!B`>!B"D!B80_|!"_>!B"D!Bh0D!B"D!B/a>'p 8`A&TaC!F8"|+VXbŊ+.WbŊ+VXbŊUXbŊ+V0_Ŋ+VXbŊ+VW0_Ŋ+VXbŊUXbŊ+VXb|UXbŊ+VX`> 4xaB 6tbD)Vh?'p "Lp!ÆB(q"ł*VXbŊ+VXb*VXbŊ+B̗0_Ŋ+VXbŊ+VWbŊ+VX| UXbŊ+VXb|+VXbŊ+˗0_Ŋ+NO@ 'p "Lp!ÆB|/bĈ#F1bĈK/bĈ#F/b#F1bć"F1bĈ#F1b#F_"F1bĈ1bĈ#F1bĈ"F1b"1bĈ#F|`#F1bĈ#F\/bĈ#"̗/|E1bĈ#>W0_Ĉ#F1bĈ#.1bĈ`"F1bĈ+Oa#F1bĈ#F1bĈ`"F1bĈ+/a|E1bĈ#FQD? 4xaB 6o`>СC:t|'p ,h „ 2l!Ĉ'Koĉ!` H*\ȰÇ#Jl <0… :|1Ĉ8qD3/!|,h „ 2l!Ĉ'p "Lp!ÆB(1b&N8b|3/b'N8q|8? 4xaB 6tbD%7qĉw0_|'N8qD˗/ĉ'N8qĉ M8qD"8qĉ'J0_'N8qĉ8qĉE7qĉ'N`'N8qĉ'7qĉ拘oĉ'N(1_|'N8qĉ'N4oD H A$XA%D/a„ &L0a„ &L`8`A&TaC!F8b|'拘bE"XbŊ+WbŊ+VX| U/b'p 8`A&TaC!>1bĈ#F1bĈ%1|E0_|#F1bĈE1bĈ#F1| Eh0_|#*1_Ĉ#F1|#F1bĈ#Fx0_| /_D"k/b|E1bĈ#>1bĈ#F1bĈ-70_ă"c/_|;/b#F1bć"F1bĈ#F1b˗/|1O@$X_| g`| H*\ȰÇ+/a|"F1bĈ#F1|`> H8`|`'p "Lp!ÆB|`  <0… :|1ĉ 1/_>!O@  g_> O@ DPB >0_| 80,h „ 2l!Ĉ'&0_| 拘!|'p @$XA .dC%6O@ DPB >Qb| 1̗/D"c/_|;/!|,h „ 2l!Ĉ'p "Lp!ÆB(Qbx0_| 80|M8qĉ%{0@ H*\ȰÇ#J/_|)拘"|EG"E)R\a|(RH"E)6̗0E"H`(RH"E QH"E)RH_>EG"|QH"EH"E)RH|)拘"E"H"E).W0E)RH"EQ0 O@ D0_B&L0a„ &L0a„ +? 4xaB 6tbD)WbŊEWbŊ+V$`+VXbŊ Xbʼn H A$XA .dC1bĈ#F1bĈ E1bĈE1bĈ#F0_Ĉ#F1bĈ#̗0_Ĉ#F/_|#F1bĈE1bĈ#F1| E1bĈE1bĈ#F0_Ĉ#F1bĈ#̗0_Ĉ#FD/_"1bĈ#F|/bĈ#F1bĈK/bĈ#"'0|E1bĈ#>0_|#F1bĈ#F/bĈ#70|E1bĈ#>`>8`A&TaC!F8Qa>)R` H*\ȰÇ#Jd <0… :|1ĉ QH|K0 <0… :|1Ć H*\ȰÇ#J0E)6̗a(RH"E ̗`>'p "Lp!ÆB(qb|)R0_|QH"E{0@ H*\ȰÇ#J/_|)R`>80? 4xaB 6t|1bĈ#F1bD1bĈ勘/bĈ#Fa#F1bĈ#F<"D!B"D!̗0D!Bx0 "D!B|"D!B"D!̗0D!Bx0 "D!B|"D!B"D!6"D!_>A"D"D!B"D A"Ć;`>3|!B"ć "D!B"DA"Ć3o`|`>A"D+"D!B"D!"D߿| o`|o|8p@8`A&TaC+"D!B"D!"D``>A"D+"D!B"D!"D``>A"D"D!B"D%"D``>A"D"D!B"D%"D/_> /߿| x0D!Ba>!B"D!B80_|!Ba|+O`| x0D!"(,h „ 2l!Ĉ'R/a+V/bUXbŊUXbŊ+V0_Ŋ+N1_E*VXb*VXbŊ+V\D$X ,h B"̗0a| &L0a„ &L0|'p "Lp!ÆB(q"ł*N1_ŊEWQ`+VX_*VXbŊ+V,|U(0_|XbŊ+bŊ+VXbł*N1_Ŋ8`A HA8`A&TaC"D!B"D%"|a>A<"D!B0D!B"D!B/aA\|!2_>A"D"D!B"D%̷0_> Aa| 6_>A4/|'Po` o8 H'p "Lp!ÆB(q"[/_E"c0@ H |3_>4h`> ̗`| ˗O`|+/|'0_ ̗O`|/߿| 4h`| H*\ȰÇ#JHqaU4/b> ? ̗/_A /_ ,Xp`˗O`|˗/@ '?'? ? o|/|'0_'p  <0… :|1ĉ[/_E'p  O@WP`> $H /|/߿| ̗O`| G_|0@ @̗O`> O O@ $`>$XA .dC%NX0|*̇`> 4x0,(0 ˗/A 4X0'`> ? O 8_|˗?O?? 4xa8`A&TaC!F8b| h0_| (? $|˗Ϡ| , |/|'`>(0_7P`˗o`| ̗_|/_| H <0… :|1ĉ [0@ H`|˗? 4xa8`A&TaC!F8a(R1E+_(̗0_|˗/|˗/| 'P7PO@   $ <a%LX0_„ &L0a„ &L/,h „ 2l!Ĉ'R\bŊ'拘|+VX|UXbŊ+VX0_Ŋ+N1_E*VXb XbŊ+VX`+V0 O@  <0… :|x0_|!B"D!B`>!B`>A<"D!B0_|!B"D!B`>!B`>A<"D!B0D!B"D!B/a>!B`>A<"D!B0D!B"D!B/a>!B0_|/|"D!>"D!B"DK"D!6'0|ˇ0ă B"DA"D!B"ā"D ? 0 /A ? 4xaB 6t`>!B"D!B0D!B`ˇ0ă B"DA"D!B"Ć B|+/_|A<"D!B0_|!B"D!B`>!B0_>'P  G AO@ DPB ><`>!B"D!Bx0D!Bl/aK|!B"ć "D!B"DA"D  / 8pO@ DPB ><"D!B"D!̗0D!Bx0 "D!B|"D!B"D!̗0D!Bx0 "D!B|"D!B"D!̗0D!Bx0 0߿|;/DAT/DA"D!B"ā"D/ă˗/| "̗| BD"D!B"D!6"D!O@ 'p ;H0߿|/_|'0_|˗_| ̗/_>̗/_>'`>#? O@  <0… :|1ĉXbŊ'p 8p |'p`|0@o/?'߿O࿁o`  4`>$XA .dC%NX0_Ŋ+VX1aO o` '? 70?'߿O? O@ `>$XA .dC%NX0_Ŋ+VX |'p|'0_|G0_> O|?OO ,h|'p "Lp!ÆB(q"ł*VXq"|,H? 4x`| O 'O O? '@'? 4x_8`A&TaC!F8a(RH|O@ 'p|$/_˗_|˗O`|/? '߿o'70߿8`AO@ DPB >QD%WbŊEWQ`+VX_+VXbŊKbŊ'拘|+VX|+VXbŊ+˗0_Ŋ+N1_E*VXb*VXbŊ+V/a+VL/_K|+VX|+VXbŊ+.WbŊ g0_|%WQ`+VX_*VXbŊ+V,bŊ`K|+VX|UXbŊ+VX0_Ŋ+"70|'p| $Hp`>$XA .dà "D!B"DA"D3` "D!B|`>!B"D!Bx0D!Bdo`>K|!B"ć B"D!B| A"D˗`x0D!Ba>!B"D!B80_|!Ba|;/a>A"D"D!B"D%"D!_>A"D"D!B"D%"D 'p 4h`>$XA .dà B"D!Bb|!"O@ 'p "D/!| ̗0a„ &L0a„  <0… :|1ĉ81_|+ 1_E*VXb XbŊ+VX`EW@$X ,hP`>$XA .dà "D!B"DA0 Bd|"D!>W0D!B"D!BA|!B"ć B"D!B| 1|c/_| ;`|x0D̗!|o@O࿁  <80,h „ 2l!Ĉ'R/a>U,/b> ? ̗/_A | ,80_ ̗`| ̗O`|+/|'0_ ̗O`|/߿| ,X`8`A&TaC!F8| 1̗b|8`A'p A+(0|`+X0_|˗/߿| O߿/_> ̗_|/,h| H*\ȰÇ#JHqa>U,!|,h@$X_>Ϡ| ,|/߿|˗o`|˗O` ̗O |70߿80_>'`>(? 4x`>$XA .dC%N0|*1CO@3/| gР ̗/_> O o`O˗_|'p | H <0… :|1ĉ c/_ł"c/_|W0_>* ̧0_|G0_> O@ o`> o`|/_|/߿|˗/,h |'p "Lp!ÆB(q"ł*N1|;`* ̗0@ ?''P`|/@ ̗_|/|/_>˗? 4xa8`A&TaC!F8b|'拘|O@ A G|/_|#/_|#(`>7p࿁70߿_ o@$XA O@ DPB >QćH1_|)1Ł(:G"E QH"E)R0_|)拘"E"80EH"E(RH"E)R\/a>EG"|Qb|)R0E)RH"E %G"|,H? 4x!| K` &L0a„ &L_>$XA .dC%N/_|+V81_|XbŊXbŊ+VXqa+V0 O@  <0… :|x0D!B"D!Bl"D!B<|"D!>W0D!B"D!B<"D!B<|"D!>W0D!B"D!B<"D!B<|"D!>W0D!B"D!B<"D!6̗/|˗0ă B"DA"D!B"ā"D g0_|!`>!B|!B"D!Bq` B"|߿/ G AO@ DPB ><"D!B"D!̗0D!B`>x0D!Ba>!B"D!B80_|!Ba|̗/a>A"D"D!B"D A"Ć!W0_> "D!B|"D!B"D!6"DK` "D!B|`>!B"D!Bx0D!Bd0@ o? O@$H| H*\ȰÇ"D!B"D"D/ă B"D"D!B"D"D/ă B"D"D!B"D %"D!_>A"D"D!B"D%"D!_>A"D"D!B"D%"D!_>A"D"D!B"D%"D!O@ 'P |,H? 4xaB 6t`>!B"D!B0D!B"D!B" B"D!Bb|!B"D!B"D+"D!B"D!"D!B"D!B_ B"D!BA$XA .dC%NXѢE  <0… :|1ĉ XbŊ+VXbŊ XbŊ+V1_|+VXbŊ+VX1_Ŋ+VXbŊ%WbŊ+VXbŊUXbŊ+V/_|+V8`> $ <0… :|a#F1bĈ#F'p "Lp!ÆB(qb|)R0|%O@ DPB >QbC$XA .dC%F̗0ĉ'B70| 8`A&TaC!F? 4xaB 6tbD%7qĉ g0_|'N8qD'p ,h „ 2l!Ĉ'Koĉ!/_>"8qĉ'J0_|&N8qĉ'N/a'N/_"8qĉ'J0ĉ'N8qĉM8qD"8qĉ'J7qĉ'N8qD&N8q"|M8qĉ%+oĉ'N8qĉM8qD"8qĉ'JW0ĉ'N8qĉ 8qĉE7qĉ'N`'N8qĉ'7q@$X ,h B H A$XA .dC1bĈ#F1bĈ%1|E0_|#F1bĈE1bĈ#F1| Eh0_|#*1_Ĉ#F1|#F1bĈ#Fx0_|#1_Ĉ E1bĈ#F0_Ĉ#F1bĈ#̗0_ĈE1|E1bĈ#>1bĈ#F1bĈ)̗/|E(0|E1bĈ#>0_|"F1bĈ#F0|".1|"̗/|E1bĈ"!'P`'p ,h „ 2l!Ĉ'*̧0_>E0_|$˗` H*\ȰÇ#Jl <0… :|1ĉ)̗"|1O@$Xp`>0 <0… :|1Ć H*\ȰÇ#J0|("̇`> 4xP ,/ ,? 4xaB 6t|%O| H*\ȰÇ#J0|("̇`> 4xP ,/ ,? 4xaB 6t|˗/bĈ#F1bĈ%̧0_ E`>8` g`| H*\ȰÇ{/_Ĉ#F1bĈKOa|拘a|E`"F1bĈ1bĈ#F1bă`a"F1bĈ1bĈ#F1bă`"FT/b#F1bć"F1bĈ#F1b 拘/bD"1bĈ#F|/bĈ#F1bĈ# |,H? 4x!| K0a„ &L0a„ &<`>$XA .dC%NX0_Ŋ+NO@ 'p "Lp!ÆB|`#F1bĈ#F\/bĈ#F/b#F1bć 1bĈ#F1bą"F1b"1bĈ#F|/bĈ#F1bĈK/bĈ#F/b#F1bć"F1bĈ#F`"F1"|1_Ĉ#F1|1bĈ#F1| E1bD3/b#F1bć˗/_Ĉ#F1bĈ K/bĈ#70|E1bĈ#>`>8`A&TaC!F8Qa>)R` H*\ȰÇ#Jl <0… :|1ĉQH|K0 <0… :|1Ć H*\ȰÇ#J0E)6̗a(RH"E ̗`>8`A&TaC!F8Qa>)Rl/a(RH"E ̗0_|(RH"E)R"E'P 8p'p "Lp!ÆB|`"F1bĈ#F0_|#F1|E1bĈ#>1bĈ#F1bĈ%1bĈ#1_Ĉ#F1|#F1bĈ#Fx0_|#F1|E1bĈ#>1bĈ#F1bĈ%1bĈ#1_Ĉ#F1|#F1bĈ#F1_Ĉ#F/_|#F1bĈE1bĈ#F1b|#F1?$X ,h „ 2l!ć 1bĈ#F1bą"F1bĈ#F1bĈ+/bĈ#F1bĈ1bĈ#F1bĈ#F`#F1bĈ#F\/bĈ#F1bĈ#F_"F1bĈ#Fq!|,h „ 2l!Ĉ'Rh",h „ 2l!Ĉ'R/a+VXbŊ+VbŊ+VXbXbŊ+VXbŊ*VXbŊ+V/a+VXbŊ+VbŊ+VXb8`> $ <0… :|1ĉ XbŊ+VXqaEWbŊ+VX"|+VXbŊ+.Wqb*VXbŊ+V$`+VXbŊ 81|UXbŊ+VH0_|+VXbŊ+̷`>8`A/_>8߿7PoO@ DPB W0Ç>|Ç>|X0|2̇0_|=|/_>9̗O`|+/|'0_> ̗_|/|>|Ç=|Ç>|Ç%̷0_ )g0C'0_|˗o |'?'?@7_> ̗_|/|8`A&TaC=|Ç>|Ç%̷`>8`A` '0߿|/_|/߿|+/|'P'?'0߿|'P O@ DPB Ç>|Ç˗0|2̧0|˗/@ '߿'OO/_>8'@$XA .d!|>|Ç>|| -̗!| `|˗`|/߿|+/|+o`|/߿|˗/߿|/_>|!|>|Ç>|| {0|=O |O'P`|/@ ̗_|/|/_> ̗? 4xaB 6t0Ç>|Ç>|0|2P`˗O`| ̗`|̗ |7p࿁70߿'_ H*\ȰC c0@ H&̗Oa>)`> *TPB)TPa>)TP!| *TPB *TPB ̧P`> *T0"̧_>*TPB ̧PB̧PB˧PB *TPB *T0_| 3/_>̗/_>`>7߿(0_|7_|/_|'0_|˗O`|/_|70_? 4xaB cȐ!| cȐ| 2dȐ!C 2dȐ|1OO /|'0|_'0|O`/| '0|O`|/_>˗o`>$XA .$/a> ǰ`> 2dȐ!C 2dȐ!C 14`3O`O`>'0߿|70| '0|G0_>_70߿|_|2dȐ!| 1dȐ`>1dȐ!C 2dȐ!C 2T| /|O_70߿/߿(0|8_(߿|߿߿| /߿'p "Lp!| 1dȐ |,H? 4xaB 6tbD)'1_|/|70߿| /_>o`|`>70߿|˗O`>/߿|˗O` '0߿|UX`*VXbŊ+VXb> ˗O`>0@߿| @ ̗/|˗o |7߿_/߿߿| /,h „ 2ǐ!C 2dȐ!C 2dȐ!C &ǐ!C .ǐ!C 2dȐ!Â2dȐ!C 2dȐ!C 2dȐ!Ä cȐ!C cȐ!C 2dȐa| 2dȐ!C 2dȐ!C 2dȐa|1dȐ!C 2dȐ!C 2\0 <0… :|1ĉ+Z@8`A&TaC!F8b|+VXbŊ+VX1_|+VXbŊ+WbŊ+VXbŊUXbŊ+V/_|+V8`> $ <0… :|a#F1bĈ#F 4xaB .O@ DPB KϡC:tX0Á:tСC:\!|s80Á p`>:tС| 9tСC s80C:tСC 9$ϡ|s80CСC:t(0C:t`>9tСC:t0C p`>9|:tСC9tСC w0Á:tСC:\`W`>807P`8_ /O@ <0… :LÇ>O`> Ç>||%̗/_3/|!̗/|/|)Ç>LÇ>o`> Ç>||%OO@ ̗/|#H0߿|#/_GP`>O@ DPB &Ç 70| 8`A&TaC!F_A7p`(0˗o|'0߿|8`>80,h „ 2l0_|:t!|̗`> 4xaB 6tbD O@ '0߿|#80_|/|#HP`>$XA .dذa:tСC3|:tСC.|/GP`>#/ @ /߿| o|? 4xaB 6l/a>:ta|3|:tСC._|̧0|+`W0߿|G0| 9tСC KϡC:L/_СC:t| |'P` ̗o|70_ _| o@O| H*\ȰÄ>|Æ Ç>||{/C _=|Ç{Ç{(0Ç>|Ç0 P`=Ç>|0Ç 8`A HK0_„ &L0a„ &L0|%/| K0_ƒ"̗0a„ &L0a„%L0!| K0aB"̗0a„ &L0a„ &Lx0_| Kx0_B"̗`%L0a„ &L0| &LH0_B&L!|,H? 4xaB 6t|11_|A1_Ĉ#F(0_|#1_Ĉ E1bĈ#F0_ H*\p!,h „ 2l0_| ˗ϡ|sС|sСC:tpa>9|s(0Á:tСC%̷0|9L| |sСC:tpa>9|s(0Á:tСC%̷0|s80C O@ 3/A'p "Lp!ÆB|/|E1|E1bĈ -O@$X|w |O@WP`  <0… :|aW`>80˗o|'P (0 7p|80(0_8p ߿߿8?7p ,X0A  ?$XA H`| W`A8`A&TaC!>W0_B_>$|G0A#(0 G_>G_> $/|$/_> ̗|/_>˗O`|/|G A #Hp`$H O@  g_>8`A&TaC!F߿| H0A ̗`> GP`>'0GP`>̗/_>/_|('߿'p`˗O`|/|7po/8P`(0'P ,H0 O@ DPB >Qb80 /70 /|(07p|/߿|˗o`|˗O`/@ o`'p`| ̗O |7P ,h0  ̗/w| H*\ȰÇ+/!|/GP``>˗|_>|/_|(| '?˗/߿|O߿8`A$|/|#HP`> ̗/˗|$/_|#/|'p 70| 70_ ̗/_˗_|˗o8p`>$XA%D/a„ ̗a &L0a„ &L0aƒ̗/_g0߿|G0| +o`|̗o`0@'߿@ ̗O`|(0_>˗O`|/|'0_ 8p| <`%L0!| K0a„ &L0a„ &'0_˗o`|'P7PO@ +H0_ ,X` W` ,H0_O@ DPB >0_ 拘/b>"0_Ĉ#̗0_ĈE1|E1bĈ#>_>"拘b"6̗/_Ĉ#61A$X ,h B"̗0a„ &L0a„ &Lx0_„̗a%W0C$XA .d? 4xaB 6t0Ç>|0C>|Ç>|{(0CP`>|a>|Æ Ç>||{/C _=|Ç%Ç̗/|{Ç>|__=|{ÇKÇ>O`> Ç>||˗`|w0_| +`|G0_> Ç:̗0Ç>|(|8p| H*\ȰÇ{0@ 7p` o|7P`/8p| H*\ȰÄ>|C K0 <0… :|1Ć'p |#(0|70_>/|#H 8`A&TaC =|Ç;/!|,h „ 2l!Ĉ|/||`> ? 4xaB 6t0Ç>|80_> Ç>||%OO@GP`>/߿||/| $/,h „ 2l0a>|p` Ç>||%̗/_+`|W0߿|W0_|/|{Ç&Ç O@7pO@ DPB >0_| `|+`|W0߿|W0_|/|E1bĈ%1bĈ#1_Ĉ#F1|3/_|̗/_> /|/_>拘/bĈ#F/a#F_"F1bĈ/|E1_|#F1| E1bĈE1bĈ#F0_ 拘/b>"1bĈK/bĈ#F/b#F1bć"1_|'p 4X0,h „ 2l0_|:tСÂСC:t| s(0ÁP`>9tСC СC:,0 O@ DPB >0_| A1_|E1bĈ#21bĈ#F1bĈ#F/_| 8`A&TB$XA .da|>|Ç>|ÇW0Ç>|Ç>|X0Ç>|Ç>|ÇÇ>|ÇÇ>|Ç>||>|Ç>|| =|Ç 8`A H*\ȰÇ1bĈ#F1bă1bĈ勘/bĈ#Fa#F1bĈ#FsO` 1_Ĉ#F`#F0_|̗/_>"F1bĈh0|0| 0_#F1"|#Fa> +oa#F1bć 拘o`>$X_> 3hp`| _>$XA .dÁ B"|W0|!B"D+|A0_>k/߿|!B"ą B"|G0_|"D!Bx0_|b>A/CO@ DPB >"D!270|!"D!B`>/|A̗O`> B"D%"D`>"D!Bx0D/_C O@W`A8`A&TaC%Ç ̗_|̗O`>>|Ç>Ç>|Ç>/a>|p`|+/_>|Ç>Ç>|Ç>/a>|a=|Ç>|/Ç>|Ç>|0Ç>|0C>|Ç>Ç>|Ç>\C H A$XA%D/a„ &L0a„ &L`8`A&TaC!F8b|'拘bE"XbŊ+W0_Ŋ+VXbŊU/b拘bŊ+VH0_|+VXbŊ+Wqb*V0 O@ DPB >0_|#F1bĈ#F/_|#1_Ĉ E1bĈ#F0_Ĉ#F1bĈ#̗0| /b|E0_|#F1bĈE1bĈ#F1| )̗/_X0_| ˗/|E1bĈ#>1bĈ#F1bĈ%̧0_|˗/b|1O@$Xp`>̗/_>'p "Lp!ÆB|/bĈ#F1bĈKOa|˗/_Ă'p O@WP` ? 4xaB 6t|#F1bĈ#F1|/_!O@  ˗|,/,h „ 2l!ć"F1bĈ#F1b>O@$X|w |O@3/|380,h „ 2l!ć 1bĈ#F1bą`>8`A<80  g_>? 4xaB 6t|E1bĈ#F1| 0@ H`|$XA .d_ +oa>:tСCsСC:tСC.СC2g0|KϡC:tСÅ:tСC:tСC 9tСC ;a>:tСC:\`>:tСC:ta|:ta|Ca>:tСC+ϡC:tСC:tX0C:t0_|a>:tСC+ϡC:tСC:tX0C:t`>80@8p`>$XA .dC1bĈ#F1bĈ%1bĈ#1_Ĉ#F1|#F1bĈ#Fx0_|#F1|E1bĈ#>1bĈ#F1bĈ%1bĈ#1_Ĉ#F1|#F1bĈ#Fx0_|#F1|E1bĈ#>1bĈ#F1bĈ%1bĈ#O@ 'p "Lp!ÆB|/bĈ#F1bĈ#1bĈ#F1bĈ#F/bĈ#F1bĈ#1bĈ#F1bĈ#F`#F1bĈ#F\/bĈ#F1bĈ#F_"F1bĈ#Fqa#F1bĈ#F1b 1bĈ#F1bą"F1b H A O@ 'p "Lp!Æ"D!B"DK"D!B<|"D!>"D!B"DK"D!B<|"D!>"D!B"DK"D!B<|"D!>"D!B"DK"D!6̗/|˗a>A"D"D!B"D A"Ć3` "D!B|"D!B"D!6"D`8| ,80,h „ 2l|A"D!B"ă B"|G0_|x0D!Ba B"D!B|!Ba Ca>A"D+"D!B"D!"D`>x0D!Ba B"D!Ba B"|g0|C|!B"ć B"D!B| A"Ć;`|x0D!Ba>!B"DAD P>? 4xaB 6d|sСC:t/C:tСC:t_:tСC9a|:tСCsСC:tСC.СC:,|sСC:t/C:tСC:tpa>'p 8`A"̗a K0a„ &L0a„ +? 4xaB 6tbD)Wqb*V0 O@  <0… :|x0_|!B"D!B`>/D A|!B"ć "D!B"DA0 Bd|"D!>W0D!B"D!B<"D "|x0D!Ba>!B"D!B80_| ˗"|a>A<|`>7po'O@ ? 4xaB 6tbD)˗0|WQ`˗b ˗/|/_>5̗O`|+/|'0_ ̗O`|/߿|*:WbŊ+VX| )̗`E`>8`3/_| 3h`| ˗/|/_ OO߿80'0_>˗O`|O@ <? 4xaB 6tbD)˗0|*̇`> 4x0,/_W| ,80_A /_˗/|˗/|/@ o`'p`| ̗O |7P ,h | H*\ȰÇ#JHqa>U<!|,h@$X_>̗/_>4h`>˗O |߿?'p|/ 70,h | H*\ȰÇ#JHqa>WQ`'p`>$XP`>Ϡ| , |/|'`>(0_7P`˗o`| ̗_|/_| H <0… :|1ĉ [/|* 1C O@ 3/A gР '`>O '߿ /|7P`|/|'0_>˗O`|O@ D`>$XA .dC%NX0|80_| W1|a%̗/_>'0_>70_> ߿ ߿7P'p W0,h „ 2l!Ĉ'R,|U|`K|XbE*VXbŊ+V/aEW|U|UX"|+VXbŊ+˗0_ʼn"XQ`* Wa+VLbŊ+VXb81_|+ 1_E*VXb*VXbŊ+V/a8`A HK0_„%L0a„ &L0a'p "Lp!ÆB(q"Ņ*VXq"|,H? 4(0,h „ 2l|!B"D!Ba>!B`>A<"D!B0_|!B"D!B`>!B`>A<"D!B0_|!B"D!B`>!B`>A<"D!B0_|!B"D!B`>!B0_|̗0ă B"D"D!B"D %"D`x0D!Ba>!B"D!B80_|!Ba 3`> A  <0… :|x0D!B"D!B/a>!B1|˗0ă B"DA"D!B"ā"D;`|%`>!B|!B"D!Ba>!B0_>'p G AO@ DPB ><@ O@ Da|)'0*TPB *TOB *TP| ̗0B)TPB *TP|)OB ̧`>)TPB *T0B *TPB o8p'p "Lp!ÆW0|70_>'0_|'p`7?/_|/_|˗O`>/_|/_|/_>8`A&TaC:tСC9a|:tСC+!|/߿O|/߿_߿|'߿|'P`>˗/߿|/| '0߿|/߿|'p "Lp!Æ9tСC s80Ä:tСCW0| '0_| ̗/| /_>g0|'0|_>_/_>:ta>:ta|s0C:tСG0|'0? /߿o_? '0_o? /߿|/߿O@ DPB%װaÆ 6d!| kذaÆ 6l0_Â/_> _O` ̗o`>˗_/_>/|_|O`6lذaÃkذaÆ 2א` 5lذaÆ 6Ta|70_|O߿| o ˗O` '0߿|O`|'P /߿? 4xaB ̗0_Æ 6lؐ!|,H?8`A H*\ȰÇA"D!B"ā"D!B"D!B/D!B"D!Bl"D!B"D!B|!B"D!B!|,h „ 2l!Ĉ'Rh"O@ DPB >QD˗bŊ+VXbŊ˗/_|+VXbŊ+/_|*VXbŊ+VX!|'P`>$XA .dC%NX0|UXbŊ+VXb|bŊ+VXb#/_|+V`> $ <0… :|a|0 <0…8`A&TaCK`|A"Ć "D!B0_| / / B"D %w0_| B"|"D!Bd/_|A|A|!B"DK/_|!BQa>A"D!.̗/_> _> _>!B"D˗/D!:̗/|"D!BL/_| A|A|!B"D1̗/_>!BlO`>'p 'p "Lp!Æ>̗/_> S/ / B"D s/_|!B0|A"D!B`|5W0_|僘b>A"D!B`>"Ą3|!B"D˗a'p $`,XP`  <0… :|0"D g0_B$XA .dC%6O@,X_ W`A8`A&TaCK|"Ă3/!|,h „ 2l!Ĉ'p A ,/_+X| H*\ȰÇ%`|A"|g0 B"D˗"|8? W` ,(0_O@ DPB >/a>˗"D˗`>A"D˗/Ă˗/|A|!B"D惈0_|!B0 B"D ˗|_> _>!B"D &̗/_>!BT|!B"D1a>Ab>A"D!B`> ˗/!|,H? 4x!| K0a„ &L0a„˗/aB K(0_B̗a%L0a„ &L0a„%L_|!̗a &D/!| &L0a„ &LP`|%L_ ̗a%D/!| &L0a„ &L0| &/_|%D/a„ K0_„ &L0a„ &/_ W0_B"̗`%D/a„ &L0a„ &4/a„˗`%L0!B$X ,h „ 2lpa|=|/_| 8`A&T ,h „ 2l!|!˗/_ "|"D! ̗/_>/ / B"D %̷0_>A/_|A"D "D!B/_|! _>A_>A"DKoa|X0_| 0_| 2_>!Ba|AH0 1 "D!BT/a>x0_| c0 H|3h`>$XA .da|=|0C _=Ç>|P`˗|+0 <? ̗/_A ,(0,h „ 2lp`|=|0|=|{(0Ç>|!| P!||,h@$H0_|+X| H*\Ȱ|(? W` ,(0_O@ DPB >da|ADO`|-`>'p 'pϠ8`A&TaCs|%O| Hp` W`A ,(0,h „ 2l!| /D˗/_| (? $|'p "Lp!ÆB(!`,XP`  <0… :|0|`ˇ0| w0_B$XA .dC%2O@,X_ W`A8`A&TaCag0D_>!B`|A0C O@,X_ W`A8`A&TaCK"D˗`> ;|!B||_> _>!B| A0|"D "D!˗/D/ / B"D %"| ˗_>/D!B|/_|!B$|僘|"D!*̗0D8`A HK0_„ &L0a„˗/a„ &̗a%A"ă"D [|A|!B"DAa| B,|!B`|Aa/|/D!BQa B1_| B|!B`| B1 1 "D!BT/a>!B/_|˗`>A"D"DA|A|!B"D"ā`>'p`(0,h „ 2/_| 6lP`א`5$!| 6lذaÆ KaÆ ̗/_ g0_C6lذaװaÆ k(`>8`| `,XP`>$XA .dC B`| g0 Ba|A|80`,XP`  <0… :|0D!"̗/_>;/!|,h „ 2l!Ĉ'p A ,/_+X| H*\ȰÇ A|{/| 8`A&TaC!F? W` ,(0_O@ DPB >d"D˗/| A"D˗/D!.W0_B O@,X_ W`A8`A&TaC"Ć˷`>80? 4xaB ˗!C 2,`cX0Cǰ`> 2dȐ!C cȐ!C ˗/Cǐ!C ˗/C 2dh0Âǐ`>1,!C 2dȐ!CcȐ!C ˗/Ãǐ!C ˗/C 2d0Âǐ`>1,!C 2dȐ!CcȐ!C ˗/Âǐ!C ˗/C 2d0Âǐ`>1,!C 2dȐ!CcȐ!C 0,/A4hРA 4H0_| 4hРA 4h`| g`| g`|  <0… :|(0_|!B`|9O@ 'p "L`|-\p… [h`> 4xaB 'p "Lp!Æ2"D˗/D!Bd/_|!B`>!B"D!B0D!BD/_|!B1a|A"D "D!B"DA"D"D ˗"D!*W0D!B"D!B<"D!2̗/_>!B(0_| B|A"D!B"ă Bb|30 O@ D0a|)TPB *OB *TPB *TPB ˗0B *TP‚G0ƒ*TP|SPB *TH0B *TPB *TPB */a> *TPB70ƒ*TP|SPB *Th0B˧`>˧`|*TPB *TP| )TPB *D/_|)˧`> ̗O`> *TH!RH!R'p| H*\Ȱa|s80C ˗/C:t_> 0_| 0|:tСCСC&̗/_|#/_:tH0_|:tСC9Lo`>9$a|:tСC:ϡC:LO`>'0|9tp`|:tСCp`P`|СC:t|:t!|/_|CϡC˗ϡC:th0_||`>8`A&TaC!1bĈ`>'0|#̗/_#F`"/_{/|#F1bĈE1bă3 |'p| $H A ˗/,h „ 2lP`̗/'P /_>$XA .dC"D g0|ˇ0D˗"D!Bl"D!B"D!̗0D!Bd/߿| #/߿|3"D"D!>"D!B"DK"D!6̗/|/_|q`|A"DA"D!B"ā"DS/_|A/_| B"DA"D!B"ā"Dc/_|A/_>!B"A'p "Lp!ÆB(q"Ņ*VXqb>W1a|UXbE XbŊ+VX`8`A HKh0_|&L/_| &L0a„ &LP`8`A&TaC!F8b|'拘bE H| H <0… :|`>|Ç>|`{(0Ç=0@ H|O@ DPB >`>!B"D!Bx0DA"D '0_| ˗/_>!B"|!B"D!Bq` BD|!2_>0_| B"D A"D!B"āS/| _> ;`|+/_| ˗"D!B0D!B"D!B/a˗"|c/_>w0_|!w0_|˗"D!B_>!B"D!Bh 'p| ̗/_> $H0A G A O@˗| gP`>W0_|8`A&TaC"D!B"D 1̗/_>A!|O@3/| |/_| H*\ȰÇ A"D!B"Ć1a> H8` G0|3h`>8`A&TaC+"D!B"D!0_> !O@  g_>3(0A  <0… :|0_|!B"D!B`AL| (? $|/A ̗/_ <0… :|0_|!B"D!B`AL| ` ˗/aG0_| B"D"D!B"D%"|a>̗/_"D!B/D!B"D!B/a>/D A`|˗/D!Ba>!B"D!B80_|!"_>/|s/_>!B|!B"D!Bq` BD|!2? O`|4X0_|8`A&TaC "D!B"D A`> $ <a˗/_ ˗/_„ &L0a„ &,? 4xaB 6tbD).Wb8`A8`A˗? 4xaB 6t_ B"D!B|!B|˗|"D!W0D!B"D!B<"D!B̗/_>!B"|A"D!Bb| A"Ć;`|˗o`>˗/D!BQ`>!B"D!B80_|!Ba> +O |_>$XC!B"D!BO@ DPB >QD%WbŊ g0|˗`˗bŊ+WbŊ+VX| UX"|/_|1_|*VX"|+VXbŊ+˗0_Ŋ+*̗`> $H A /_| H*\ȰÁ>|Ç>|Å>|Á!'0_|CÅÇ>Ç>|Ç>\Ç>/a O   <`|&L0a„ &Lh0_| H*\ȰÇ#JH`+VD0@ /_|7p| H˗/_„ &L0a„ +? 4xaB 6tbD)WbŊ1_Ŋ˗bŊ#+bŊ+VXbł*VXb|EWb|XbE*VXbŊ+V/a+Vt/_|EW|XbE*VXbŊ+V/a+Vl/_|EWb|XbE*VXbŊ+V/a+V\/_|EW|XbŅ*VXbŊ+V/a+VL/_|8`A H&̗/_> *TPB'p "Lp!ÆB(q"Ņ*VXa|UXqb|*VXa+VXbŊXbEWbŊ˗bŊ +bŊ+VXbł*VX`|*VX`|UX"|UXbŊ+VX0_Ŋ+̗/_> H A$XA ̗/_ .\p|-\p… .\p… .\` .\p!|[80B.\p|[p… "W0… .\p… .\p…%̷p… .CaÆ ̗/_ 6l0_| 6lذaÆ 6lذaÆ5lذaÄ_ #o`>6lذ!|kذaÆ װaÆ 6PC 5PC 5AO@ DPBǐ` #o`>2dȐ!Áǐ!C +!C 2dȐ!C 2dȐ| 2dpa|1,o`>a> 2dȰ`|1dȐ!C cȐ!C 2dȐ!C 2d/_| 2d0a|1QD%0_)̗/_˗/|W0|UX"|X1a+VXbŊKa| K/_'p ,/_|#o`>'p "Lp!Æ˗ϡC9tСC:tСCKa|.w`> 4xP ,(0Ϡ| H*\Ȱ!|sС|:tСC:tСÅa H8` G0|O@ DPB ˗/C sСC:tСC.̷0_> ̗/_'p`>$XP`>70A8`A&TaCs|9tСC:tСC S/_> ̗/_˗/C#/߿|sСC̗/_>W0C:tСC:t`>  _|w`|`;(0QDU/_|U(0_|+VXQ`|U`+VXbŊ%W1b|AW|UXbEW1b+VXbŊK"|勘bE"XbŊ˗|+VXbŊ+˗0_E/_|+ 1_Ŋ+VQD U\/_|+V$0 O@ DPB .̗/Ç=|Ç>|Ç =|/_|>|0C>|Ç ˗|=|Ç>|Ç=t/_>\|>|Ca>|Ç>|Â2̗/_>d|>|Ça>|Ç>|Â*̗/_>$/_ ˗/a>|CPa>|Ç>|Â&̗/_>,O`> _>? 4xaB 6t`|A<"D!B"D!̗0D"D g0|!"D!Bl/_| "D!B"D%`|A"|70|!B"ć`>!B"D!B80_|˗/D!̗`>C"D!B_| "D!B"DK|"D!G0|A"D! ̗/_>A"D!B"Ć 0,h „ "̗0|ˇ0C 2dȐ!C ˗| 2dȐ!C 2dȐ!C P`|1dȐ!C(? /_O@ DPB >l/_|"D!B"Dc/_|!B`>A"D!̗/_> "D!B"D-̗/_>!B0 B"D˗oa B"D!B| ˗"D!*_>!B"D˗0D!B"D!B/a"D/D!B"|;"D!B"D!̗0|"D A"D!Ba|'p`>$XA .dC%N/_|˗bŊ'p 8`A&TaC!̗/_>"F1bĈ#F`˗/bĈ#F1bĈ#Fh0_|1bĈ#F1bĈ˗/_Ĉ#F1bĈ#Fa|1bĈ#F1bĈ˗/bĈ#F1bĈ#F0_| 1bĈ#F1bą H*\ȰÇ#JHE 0@ /_|˗/7P`| /_|˗/@7P`| /_|˗/@7P`| /_|˗/@7_| /_|˗/@7P`| /_|˗/O@ DPB >QD-^l? 4xaB 6tbD)VxcFs9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^{b@;;PKσ-PK+AOEBPS/img/whenevrc.gif)?GIF87a?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k`> 4xaB8`A&TaC!F8bE1fԸc=zѣG=zb>/_0@߿|_'p| H*\ȰÇ#JHŋ3jȱ|/߿|/|/_|/_>˧0G=zѣG=z1|G0߿|˗o`|(? O@ DPB >QD-^ĘQF3/|( 7P?70 <0… :|1ĉ+Z1ƍ;g0_>˗/߿| ̗_|˗/߿|'p`>? 4xaB 6tbD)VxcF9v̗`|#_|70_/_|/_| 8` H*\ȰÇ#JHŋ3ja|'0_/|/_|'0|Sob|:vرcǎ;vرcGC/_/|/_|'0_|'P G AO@ DPB >QD-^ĘQFױc:vرcǎ;vرc|ub;vرcǎ;v1_|;Øcǎ;vرcǎ;rW0_ǎ0رcǎ;vرcǎױc>:vرcǎ;vر#|uc;vرcǎ;v1_A$XA O@  <0… :|1ĉ+Z1ƍqȱ`>9rȑ#G9rȱa>9Ǒ#G9rȑ#G96Ǒ#ǂ8rȑ#G9rȑ#dž8rX0G9rȑ#G9r0G ȑ#G9rȑ#Gȑc|9rȑ#G9rȑc|8`AO@8`A Hp`>$XA .dC%NXE5nܘ`> -̗/_|ȑ#G9rȑ#G+| 峘/_|9rȑ#G9rȑc|qTa>ȑ#G9rȑ#G+a|˗O |7?#H0|˗|Gp`>$XA .dC%NXE5nܘ`O`|O`|W0_̗`8rȑ#G9rȑ#dž 3`>/|W0_/_|(? ? 4xaB 6tbD)VxcF7+a> ̗_>70|˗_˗_3`>9rȑ#G9rȱa /_'0_g0|̗O`|/_|g0|9rȑ#G9rȑcC˗//080_/? (? 4xaB 6tbD)VxcF7+`70|`>3/_>/_|g0|9rȑ#G9rȑc|!̗/_#/|!70|8߿  <0… :|1ĉ+Z1ƍQa8g0G9rȑ#G8`A&Tp ,h|!D|!D`8`A&TaC!F8bE1̗1c| +/c|e`3f̘1cƌ3fG AG| H*\ȰÇ#JHŋ3/|/|G0|'0_|˗/|e$` -̗Ob| e̘1cƌ3f̘1|/_/|#_|(|$H A#`> 4x!A$8`> O@ DPB >QD-^x0|˗_>˗`|̗/_> o`O$H A'p "Lp!Å6lذaÆ 6lذaÆ 6lذaÆ̗_|#/߿|'p | _> A $/,h „ 2\aÆ 6lذaÆ 6lذaÆ 6l0|˗_>w0_/|0@80,hP`˗/|a>U̗1cF2f̘1cƌ3f̘q` '0_/| ˗o`|˗O |O@G A'p "Lp!Å6lذaÆ 6lذaÆ 6lذaÆװaÆ K| 6lذ| 6lذaÆ 6lذaÆ 6lذaC kذaÆ)װ` H'p "L/,h „ 2l!Ĉ'Rh" ˘1b>$+/|+˘1cƌ3f̘1c ˘1b"+/|+˘1cƌ3f̘1c ˘1b"+/|+˘1cƌ3f̘1c ˘1b"+`|'P70 <0| H*\ȰÇ#JHŋ+0 <0…8| ` 70_>/_> W` ,X_>$XA .dC%NXEe̘Qa 3/|#_|3/c|3f̘1cƌ3f/_ƌ拘`̗_>'0_>2V̗1cƌ3f̘1cƌe̘Qa C/_G`>'p| H <0… :|1ĉ+Z_3*`>'p` ̗_˗o8`A& <0… :|1ĉ+Z_3*1_|o`| /_>2V̗1cƌ3f̘1cƌe̘Qa ;/_|/_>)̗b3f̘1!|,h „ 'p |,h „ 'p A 'p "L!,(0AgРA 3hРA  <0… :|1|%J$`>%"0_|%J'QD (Q"| 'Qă"拘`>I0D%J(Q|%J$`>%"0_|%Jw0_|O`| ̗/|̗/| g0|70߿|o`> ߿ | /A|̗/|˗O`| ̗/_/_|#H $H_>$H A  <0| *TPB *TP„ G0|+/߿| O`>˗/a> /_>/_|/߿|_|/| +`>/߿|G0_>'0_/_>̧`>̧PB*T`> *TPB *TPa|+/|70_|#_| g0_ ̗/|#/_˗`>G0_>̧P` ߿_/_˗߿|/_|_|8p|8P`8`A O@ D_> *TPB *TP|̗`|#/|#/_| '0|80߿o?_߿Gp`>/|˗o`|_|G0_|#80A G|O@ DPB %װaÆ 6lذaC30@ o8|G0_| G0߿||$O࿁ #࿂ / G_>/|0@ 7P|7p`> A#HP`>'p "Lp!ÅkذaÆ 6l | /|˗o` ̗/7p@/_ ̗/_>˗/߿|˗O`|/A H`A70_|/|˗O`| ̗/'0_8`AO@ DPB 8@$XA .dC g0_>/_|+/| ̗_| /|/_>G0_>˗`|#/| +` '0|/|'0_|/|/|)g0_Ĉ#F$Oa#F1bĄ30` O70_|'P O`'0_ O|'| `? o 7p|/_|8?߿| O'p`(0 /,h „ 2\/a 6lذaÆ װaÆװaÆ 1W0_Æ &א`5lذaÆ 5lذaÆ 6lذ| 6lh0| 6l0|5lذa| kH0_A$XРA$(`> 4xP ,? 4xaB 6tbD$JH0|%JDa$Jx0_|'`>Ida>%J(Qć$JH0|%JDa$Jx0_|'`$>0D%J(Q|%J$`>%"0_|%J$J0|I(`"+`| '0_擘/b$J(QD'p "L 'p "L0! |,h „ 'p 4X0_|/|3/|˗_|˗o`|˗`>'p "Lp!ÆB(q"Ŋ/b/cƌ EW0|G0_>`| /_ (_$(0,h „ 2l!Ĉ'Rh"2f̨0_|̗o`|3`> /|0'? 8_>$XA .dC%NXEe̘Qa ?/080_˗/?@O@8`A&TaC!F8bE1˗1cF"+`| 70|3/߿|˗| 7߿| /A'p "Lp!ÆB(q"Ŋ/b/cƌ EW0A @`>˗O`|˗O |o G| H*\ȰÇ#JHŋ˘1|̗1|edoa3f̘1cƌ3f |,h „ "O|8P`'p  ; w`>$XA .dC%NXE̗1|EW0_|e\oa3f̘1cƌ3f`-3/b2C/| e̘1cƌ3f̘1|eh1|̗1_|20_ƌ3f̘1cƌ3W0|̗/| '0|˗/| /|ˇ0_|̗1| 0_ƌ3f̘1cƌ3W0| '0_ ̗_| ̗O`|˗O`|˗O`| w08p 0 4'p O@O@ DPB >QD-^(0|#` ̗_| ̗O`|(+`'p "Lp!Å6lذaÆ 6lذaÆ 6lذaÆ w0_˗/|(| O ` O@ DPB 5lذaÆ 6lذaÆ 6lذaÆ /|G0_|_|/? '߿ /߿|$H | H*\pa 6lذaÆ 6lذaÆ 6lذ| /_>G0_|/_|/_|/_|˗/| Pa 6lpa 6lذaÆ 6lذaÆ 6lذ!|O`>˗`|/|/_|/_|o`|5\aÆ 6\aÆ 6lذaÆ 6lذaÆ 6l0|/_|(߿7?O'p| $H`>$XA .d0_Æ 6lذaÆ 6lذaÆ 6la 6lx0_Å 'p "L ,h_>$XA .dC%NXEeh1|ę0|3f̘1cƌ3fx0_ƌaW0_ƌ Y̗1cƌ3f̘1cƌeh1|ę0|3f̘1cƌ3fx0_ƌaW0|/_>/_|˗o`| w0|3f̘1cƌ3fx0_ƌaW0|O`|_|˗`|/|e̘1cƌ3f̘1A$XA .D `> ̗`> /_>g0_>w_ <0… :|1ĉ+Z1ƍg0_̗`|˗O`̗/_ˇ0|9rȑ#G9rȑc|̗o`|+0@ 7P 70 G AO@ DPB >QD-^ĘQƍ ?/̗O`| ̗/_˗_| (`> 48? 4xaB 6tbD)VxcF7+`| 70|/|#/|`>8rȑ#G9rȑ#dž 30@( /߿ O 8p <0… :|1ĉ+Z1ƍǑ#|qȑ#G9rȑ#G Ǒ#|qȑ#G9rȑ#G Ǒ#|qȑ#G9rȑ#G Ǒ#|qȑ#G9rȑ#G Ǒ#|qȑ#G9rȑ#G Ǒ#|qȑ#G9rȑ#G O@ DPA$X| H*\ȰÇ#JHŋ3jܸ1G ȑ#G9rȑ#Gȑc|9rȑ#G9rȑc|9r,#G9rȑ#G9rl#Gqȑ#G9rȑ#G qȱ`>9rȑ#G9rȱa>9Ǒ#G9rȑ#G96W`> 4xaB 'p`>$XA .dC%NXE5nܘ`>)3#G9rȑ#G9rl`>)3#G9rȑ#G9rl`>)3#G9rȑ#G9rl`70_| 70_| `>߿߿|O  <0… :|1ĉ+Z1ƍg0_>/|/|'0_˗/_>˗O`|)W0G9rȑ#G9r0|/|/|/_O o`>$| H*\ȰÇ#JHŋ3jQ` 70_>̗`> O(? #? 4xaB 6tbD)VxcF9̗_> ̗`|#`|˗/|˗/߿|˗O |O˗? 4xaB 6tbD)VxcF9̗`|#`|#_|70_/_|/_| رcǎ;vرcǎ3/| w0|_|/߿|/|˗Oa;vرcǎ;vؑa> ߿ 80_|'0_> ̗_| ̗O`|O@? 4xaB 6tbD)VxcF92ױ|;vرcǎ;vر#|;Jױcǎ;vرcǎ;2ױ|;vرcǎ;vر#|;Jױcǎ;vرcǎ;2ױ|;vرcǎ;vر#|;Jױcǎ;vرcǎ;2O@ DPB H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKg@;;PK݇D))PK+AOEBPS/img/lnpcc012.gif}8GIF87a6?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,6 H*\ȰÇ#JH| ˗`|˗/|̗/_|̗/|̗/|̗/_|̗/|̗/|̗/_|̗/|#/_>ϢE'p "Lp!ÆB(q"ʼn H*\ȰÇ#B'QD(QD%J(Qą$J(QD%J(Qć$J(QD%J(qa>%J(QD%J(a>8`| H*\ȰÇ#J ˗`>80|˗_'N(1ĉ'N8qb|'N8Q`> '1_|'1|& ̗`|O`'N(1ĉ'N8qb|'N8Q`>Ob>| ˗O`|˗O`| ̗_|'`> O࿁ <0… :Da|̗0_|/_>||>|| /ÁW0|_|/߿|/|˗O`|˗O`|{Ç"0| KO`| Ç>|Ç̧0߿|=a|!̗/߿|/|/_|/|/_|'0_|=|Ç{o |80߿O|7p7? 4xaB 6tbDSO`|'0_> /_|/|'0_|/_|_|/_'0_>)R0| /_| ̗/A ߿|o|@$XA .dC%NlOa>Ig0_|̗/| ̗O`| ̗`|'p 7p8`A&TaC ̷0@ /߿/߿_7P7? 4xaB 6tbD0|0_>H"E ̷0| '0߿|70߿| '0_>O`>)RH"E0|0_>H"E=̗/_'`>o`/߿ /߿'p "Lp!Æ 9tСC 9tX0|:tСC:t0C:tСCСC6a|9tСC:tС|:tСC:t/C:t0C8`| H*\ȰÇ#J 4xaB 6tbD)N_>$XA .dC%NXѢ|/^xŋ)xŋ/"wŋ]xŋ/^ŋ/^0ŋ/wE H`>$XA .dC B"D!BL"D!B"D!0D!Ba>!B"D"D"D9"D!Bt"D!B"D!Bqa>!BX0|!B"D"D!B"D!B<"D!0D!Ba B"D!B"D"Ć+a>!B|!̗"D!B"D!B0D!2̗_|9"D!Bto | (0_|8`A&TaC!F8bE,Z0|9gѢE!c0@ H*\ȰÇ!1bĈ E1"|̇`> 4xaB 6t"D$XA .dCE1bD"FaC0 <0… :|",h „ 2l!ć"F1"|#F0_0_Ĉ#F`>1bĈ#F1bĈ#61bĈ W0|#F1bă1bĈ#F1bĈ#>1bĈ91bĈ#F!D!B"D!B ? 4xaB 6tbD)V0E0|/^xqa/^x"|/^X0E`>  <0… :|h0D!B"D A"DA/|!0D!Ba>!B"D"DK/| 0D9"D!Bt"D!B"D!Bqa>80| 僈0|!B"D B"D!B"DS_|sOa|=g0|!B"DC/D!B"D!Ba>q`> HA HP`|+X`>$XA .dCC/_|!B"D!B"ą˗"|8`A8|+X`>$XA .dCC0 H*\ȰÇ#JH| 壘a>  +/_ H*\ȰÇ!'p "Lp!ÆB|/bĈ#2̷0_9̧0_|̇`> 4xaB 6t"D$XA .dCE1bD"B0|3a#F1| ˗/bĈ#F1b#F0_D0|E1bĈc/_Ĉ#F1bD"F1"|!s/bD1bĈ#1bĈ#F1bĈ#Fd/"|E(0|#F1bă"F1bĈ#F1bĈ E0 O@ D|"D!B"D!BO@ DPB >QD-*wExŋ wŋ/^xE.^`>  <0… :|h0|!B"D!B"DA"Ă"D!:"D!Bb|!B|!B`> B"DA"D!B0D!B/D!B,a>!B|!B"D!&"D!"D W0|!B"D"D!B"D!Bl"D'0|A"Dc/_|!B"D!B"ą Bb>"D!:߿8P |'p "Lp!ÆB(q"ŊYha|!O@ DPB >? 4xaB 6tbD)VϢE 3!|,h „ 2l!D H*\ȰÇ#JH|-ZT/|YhѢE˗/E-ZX1E-&gѢE ߿8 | H*\ȰÇ1̗"D!B|!B|!B`> B"DA"D!B0D!B/D!B,a>!B|!B"D!B"D A"Ă"D!:"D!B"D!B0D!B,a>!B|A"D!B"D!"D 'p 8`A&TaC "D!B"D!B`>!B"D!Bq` B"D!B"D"D!B"D"D!B"Ă B" B"D!B"ā B"D!BL"D!B"D!O@'p "Lp!Æ"D!Bb|!B|!B`> B"DA"D!B0D!B/D!B,a>!B|!B"D!B"D A"Ă"D!:"D!B"D!B0D!6̗/_|A"D"D!B"D!B`>!Bd/߿|s"D!B0|!B"D!B"DA"|0D!Ba8`A&TaC!F8bE ]x`sŋ/.wŋ/^Dŋ x|0ŋ/^\ŋ/^0ŋ/wŃ˗`>.^x|/^xE.^x`/"̗/_|]xŅ.^xŋ/^0ŋ!sŋ/.wŋ/^xE.^1|/^xqa.^xŋ/^0E H`>$XȦ!B"D!B"4o`>$XA .dC%NXѢ|sb|]xŅxŋ/^x|sbC$X0,h „ 2l|!B"D!&"D!|AH0|!B"D B"D!BL"D!BOa>9"|A"D"D!B1a>!B_> 0|A!B|!B"D!&"D!˧0DS0@ H`,H0,h „ 2l|!B"D!B"D )`> HA HP`|+X`>$XA .dC"D!B"D!BO@ O@`A8`A&TaC "D!B"D!B`> 0|{`> B"D "D!B"D!Bx0|80| /|A"D"D!B"D!B`>sb|9"D!Bt"D!B"Ą B" Ba> 0D!Ba>!B"D"D_> B$a>!B|!B"D!&"D!| H!4!B Ch0B"D!B"D`>$XA .dC%NXѢ|'p 8`ACh0B"D!B"D`>$XA .dC%NXѢ|/^a/^0|/^xŋ/^Tŋ8`| H*\ȰÇ "D!B"D!Bx0D!B,a>!B|A"D!B"D!"D s"D!B0D!B"D A"DA"Ă"D!:"D!Bb|!B|!B0_|9"D!Bt"D!B"Ą B" Ba|0D!Ba>!B"D!B"ą Bb>"D!:"DADADAD ? 4xaB W0C2dȐ!C 24o`> 2dȐ!C 2dȐ!C 2d0C 2dX0_> ǐ!C 2dȐ|1dȐ!C 2dȐ!C 2dȐ!Å2dȐ!CP`> 2dȐ!C !C 2dȐ!C 2dȐ!C .ǐ!C O O@ DPB >4o`>!B"D "D"D9"D!Bt"D!B"Ą B" Bb|A"D"D!B1a>!B_>!BX0|!B"D B"D!BL"D!B"D!0D!Ba>!B"D!B"ą BbA$X0,h „ 2l|!B"D!B"D A"D!B"D "D!B"D!Bx0D!B"D!B80|!B"D!B"DA"D!B"D "D!B"D!Bx0D!B,0 O@ DPB >4"D!B"Ą B" Bb|A"D"D!B1a>!B_>!BX0|!B"D B"D!BL"D!B"D!0D!Ba>!B"D!B"ą Ba| s"D!B0D!B"D!B|!B0_0D!Ba B"D!B"D"D#a>!B|'p "Lp!ÆB(q"Ŋx|0ŋ/^\o`/^xŋ/*wŃ#a/^0ŋ/^xa/^,ŋ/|]xŅ.^xŋ]xb|/^D/_xŋ ]xŋxł.^1|/^xqa/^x"|/^X0ŋ!sŋ/.wŋ/^xE.*O@'p "̇`>"D!B"D|'p "Lp!ÆB(q"Ŋ滨0|sŋ/.70ŋ/^xŋ滨0|'p 8`A&TaC "D!B"D!B`>s"D"D!:70D!B"D!B| (? $ϠA ̗ϠA4(0,h „ 2l|!B"D!&"D!˷0ĂS/_| s"D!B0D!B"D A"D-`>'p |  <0… :|h0D!B"D A"D-`> HA HP`|+X`>$XA .dC B"D!B"D[b|8`A8|+X`>$XA .dC B"D!B"D[b|)̗/_ s"D!B0|!B"D!B"D-`>_>"D!:70D!B"D!B|!0Ć s"D!B0|!B"D!B"DA/|3a>!B|!B"D!&"D!|AH0|!B"D B"D!BL"D!B" +X` W | H*\ȰÇA"D!B0D!B/D8`| H!4!B"D!B"Dh0,h „ 2l!Ĉ'Rha/B0ŋ/^\ŋ/^xŋ]x"|,? 4xaB 6t` B"D!B"D"D9"D!Bto`>!B"D!B"ă Bb|A"D"D!B"D!B`>!BX0|!B"D B"D!BL"D!B"D˗`> B"DA"D!B0D!B/D!2̗O`>"D!:"D!Bb|!B|!B1|A"D" " (!'p "Lp!Æ9tСC0C:tС|:tСC:tСC:ϡC̗`>:tСCϡC:tСC:tСÅ:tС|sϡC:ta:tСC:tСC:\ϡCO O@ DPB >4o`>!B"D!B"ă Bb|A"D"D!B"D!B`>!BX0|!B"D B"D!BL"D!B"D!0D!Ba>!B"D"D"D9"D!Bt"D!B"Ą B" BbA$X0,h „ 2l|!B"D!B"D A"D!B"DA"D!B"D!."D!B"D!70D!B"D!BA$XA .dC%N8߿8`A&TaC!F8bE ]xŋ/^o`/^xŋ/*wŋ/^xb/^x"|/^X0ŋ/^xE.^xŋ]xb|/^0 O@ DPB >4"D!B"Ą B" Bb|A"D"D!B"D!B\"D!0D!Ba>!B"D!B"ą Bb|A"D"D!B"D!B`>!Bl/_"D!:70|A"D!B"D"D˗`> B"D ̇`>8`A&TaC!F8bʼn,Z0|!O@ DPB >? 4xaB 6t|#Fa#FDo`>'p "Lp!ÆB <0 :|a#F0_Ĉ#"70|E1bĈc0@ H*\ȰÇ!1bĈ E1"|G0|#F1bă˗/bĈ#F1|#Fa#FL/_1bĈ#1bĈ#F1bĈ#Fd/bĈ#s/bĈ#Fx0_Ĉ#F1bĈ#Fa#Fa#F1|E1bĈ#F1bĈ1bĈ1bĈ#70_Ĉ#F1bĈ#Fa8`| H!4!B"D!B"Dh0| H*\ȰÇ#JHE.*0ņ H`>$XA .dC B"D!BL"D!B"`> B"DA"D!B0D!B/D9"|A"D"D!B1a>!B_>s"D"D!:0D!B"D!Ba> 0Ć s"D!B0|A"D!B"DS|)̗b|9"D!Bto`>  <0… :|1ĉ+Ņ0|)̗/_ C0 <0… :|",h „ 2l!Ĉ'R(1|9̧`>8|+8`> 4xaB 6t"D$XA .dC%NXQb>,30 $+/_'p "Lp!Æ0_| B"D!&"D!˧0D 'p  'p W | H*\ȰÇ1̗"D!B|!B| A4a>0|A"D"D!B1a>!B_>sOa|s"D!B0D!B"D A"DA/|!0D!Ba>!B"D!B"ą Ba> s"D!B0|!B"D!B"DA`>  <0B"D!B"D!B  <0… :|1ĉ+ZTŋ8`| H*\ȰÇ "D!B"D!Bx0D!B,a>!B|A"D!B"D!"D s"D!B0D!B"D A"DA"Ă"D!:"D!Bb|!B|!B0_|9"D!Bta| B"D!*"D!"D `> B"D1O@$XA .dC%NXqb>-:G0B$XA .dC8`A&TaC!F8bE,Z0_'p "Lp!ÆB <0… :|1ĉ+JgѢŅ0E-Zo`>  <0… :|1ĉ+NgѢE0E-Zo`>hѢE-ZhѢ|-ZT0@?  <0… :|h0D!B"D A"DA"Ă"D!:"D!Bb|!B|!B`> B"DA"D!B0D!B/D!B,a>!B|!B"D!B"D A"Ă"D!:"D!B"D!B0D!B,0 O@ DPB >4o`>!B"D!B"ă B"D!B"ā"D!B"D!B<"D!B"D!Bo`>!B"D!B"ă H*\ȰÇ#JHq'p "Lp!ÆB0D%J&N8qĉ'70ĉ'N8qĉ'NOa|M0ĉ'N8qă8qĉ'N8qĉ)7q`>7qĉ'N0ĉ'N8qb|'N8Q`>&0|8qĉ'Ndoĉ'N81b'N(0|囘?8`A8`A&TaC!FLOD%J(Q|%J(`>$g`> 4H? 4xaB 6tbĄ$J(QD%J(QćH0| (? 4xaB 6tbD$J0D%J(QD SO"|)̗/D%J(Qā[/_|%&w0| 'QD%J(_>9̧0D%J(QĂ[OD{/a>$J(QD%'a>$J(QD%B70|/_|˗O`|'p࿁߿o7߿7_7O@ DPB >0_D1bĈ#Fa __o /߿| ̗o| /_ /|'0߿|˗O`>$XA SPB *Tx0B SH0B *TPB *TPB70|O`|O |߿|/߿/߿߿/߿_o ,h „)TPB *O`'0߿| ̗O`'0߿|'0߿|_|/߿| /|M0ĉ'Noĉ'N8qĉ=G0_|'0? _o`_ o߿| ߿ ߿O@ DPB >0_Ĉ#F1bĈ#F4/bĈE1bĈ#Fqa#F1bĈ#Fh0|#Fl/bĈ#F1bĈ 8`A&TaC!F8O@ DPB >QD-*wŋ/^xb.^xŋ/^0ŋ/^xExŋ/wŋ]xŋ/^ŋ/^0ŋ/wE H`>$XA .dC'p "Lp!B$XA .d80_Æ 6l` 6l`5lذaÆ 6L| k| kaÆ 6aÆ 6lh0_Æ 6lx0_6lذaÆ &_5_5װaÆ 6lذaÆ kذaÆ k/_Æ 6lذaÄ__6lذaÆ 6lذ| 6lؐa| k/_Æ 6lذaÄC/_5_5װaÆ 6lذaÆ kذaÆ /8p@8`A&TaC a|50|5"D!B"ā Bas"D!B0|8? W| W |  <0… :|1D&N81|!O@ DPB >? W| W |  <0… kذaÆ װaÆ `> H*\ȰÇ!'p  `A $`8`A&T| 6lذaC6lذ|G0_6lذaÆ &0_|k| kaÆ 6aÆ 6lh0_Æ 6d/_װaÆ 6l0a>k/_| k/_| 6lذaÆ 6lPa 6l`5lذaÆ 6L| k| kaÆ 6lذaÆ *װaÆ _ 6lذaÆ ̧0_k/_kذaÆ 6lذaÆ 5lx`>  <0B"D!B"D!B ̇P`>!,| CX0,h „ 2l!Ĉ0|#soĉ'Ndo`>ka>8qĉ'N0D`>  <0… :|h0|50| A" B" Ba> s"D!B0C$XA .D <0… kذaÆ ̧0_| k/|._ 6lذaÆ 5| 5| 5lذaÆ5lذaÆ SO`5Oa|5L| 6lذaÆ k/_k/_kذaÆ kذaÆ ̧0_5O!|'p A W | H*\ȰÇ1̗/| 90_|!B"D!Boa| g`> 4H? ̗|  <0… :|h0|(? W| W |  <0… :|1D曘 |,h |'p "Lp!ÆB+Xp` +X`O@ DPB >Q"| ob>˗/|!O@ DPB >? W| W |  <0… :|1D˗o|)̗/b>8qĉ!|'p A `A $`8`A&TaC!F0D曨0|M8qĉ 1̗/| 90_|'NX0ĉ'No|MT`>&N8qDasa'N,oĉ' 7a>&F0ĉ'N0|50| M8qb|'N8Q`971b>&N8qDsa>koĉ'N8q"|'p 8`ACh0B"D!B"D`>!4a| Ch0‚8`A&TaC!F0ĉ'&0ĉ'N0| 90|57qĉ'N8a'NL0 O@ DPB >4o`>ka>"D!B|!B`> B"D ̧`> 4xaB 'p "Lp!ÆB(a'NLa'N8a>ka>8qĂ&N8q|'N0|'N8q"|90|57qĉM8qD&N8_| soĉ'Nda|ka>8qĂ&N8q|'N/|97qĉ'2`>8| W | W| H*\ȰÇ#JDoĉ #!|,h „ 2l!D H_+X` +Xp`>$XA .dC%"7qĉ+!|,h „ 2l!D H_+X` +Xp`>$XA .dC%"7qĉ3a'N8a'P ` $`A ? 4xaB 6tbDM8qb|97qĉ'270|90|57qĉ'N8a'NO O@ DPB >4o`>sa>k"D!"D!"D s"D!B0|50| A" B" Bb|A"Dsasa>!B/D!B/D!B,a>!B|90|5"D"D"D9"D!Bta>sa B"D!B80D!B,0 O@ DPB >4a>sa B"D!B80D!B"D!B80| 8`A&T!,h „ 2l!Ĉ8q'N8q|M8qĉ'N8qD&N8qĉ'N(1|'N8qĉ'N8b'NL0 O@$X? 4xaB 6t/Ç>|Ç {Ç{Ç 9`>||>|Ç>$Ç><Ç*0C>|Ç=4/_>˗a|Ç{Ç{Ç 9`>|| /_>1̗O`>c/Ç>|ÇÇ˗`>G0C>|Ç=,o`0|=|Ç>|a|>|'߿'p`8pO@ DPB 70[a| S/߿|>|Ç>|X0Ç>o`> ˗/_| {Ç70[a|K0@ H*\ȰÇ#Jloĉ G0_|#ob'N0|/| kO`| M8qĉ'Ntoĉ G0_|M7qĉ(0_| 1O@$/_|  <0… kذaÆ װaÆ /_> `5lذaÆ  װaÆ 6lذaÆ 5lذaÆ kذaÆ W0|` 6lذaC6lذaÆ 6lذa 6lذ| 6lذ| kh0_Æ 6lذ| 6lذaÆ 6lذaÆ 6lx0_Æ 6lx0_װaÆ 6l(0_Æ 6lذaÆ 6lذaÆ װA$X0,h | Cp`>"D!B"D(0| H*\ȰÇ#JHE.*0ņ曘ŋŋ/^xŋ ]Ta 8`| H | H*\Ȱ{Ç>|Ç>|0Ç9|=$Ç>|/|>|Ç>Ç|=|h0| {ÇÇ>|C>|Ã'0_9̧0_ 9``/_{Ç>|!|>|| /_9̧0_|0CG0_3/|Å>|Ç>|H0Ç=C? /_| $/A#HP |'p W_|W`A ̗/@|߿ o` O| H O@ DPB >QD-:̧0_勘 |,h /_ WP` Wp`| ̗/|˗/߿|O`| ̗/߿| ̗_> ,X`O@ DPB >QD-:̧0_|勘 |,h |˗` W`|'p 7P ˗_>/_|˗O`|  <`8`A&TaC!F8bE )̗/_"sOa|=g0_|#ob˗/_70_|˗/|˗/߿|/߿|˗_|/Exŋ/^x| ˗_S/_|%G0|'0_|/_|+/_>  O| H ? 4xaB 6tbD)V0Eh0| G0| 0_81ŋ/^xa/^,|]4`>+obk/_|.Rwŋ/^Dŋ 滨0|sob/^tŋ/^0ŋ/wQ!|,? 4xa>!D80B"D!B"? 4xaB 6tbD)V0ŋ!sob/^tŋ/^xŋ]x"|,? $? 4xaB 6t/|>|Ç>|Ç{Ç 9`>||=|Ç>|Ç>DÇ*0C>|Ç Ç>|Ç>|a>|0| {ÇÇ>|C>|Ã>||=$Ç>|/Ç>|Ç {Ç{ÇW0|#!|>|>|Ç>|H0Ç>|x| H*\0_>3`>1dȐ!C *ǐ!C 2dȐ!C ǐ!C 2d/C 2d0|˗`>1dȐ!C *ǐ!C 2dȐ!C 2dȐ!C ǐ!C ̗`G0Ã2dȐ!C !C 2dȐ!C 2dȐ!C .ǐ!C ̗`cx0C 2dȐ|1dȐ!C 2dȐ!C 2d!Å2dȐ!CW0|1O@ DPB >QD-*wŃ ߿80_|8pO@ DPB 70Ç>|Ç>|C>||=$Ç>|/Ç>|Ç {Ç{Ç 9`>||>|Ç>$Ç><Ç*0C>|Ç=|Ç>|`>|`>|0|8`A$XA .d|>|Ç>|Ç{Ç 8`| H*\ȰÇA"D!B"D!."D!B"D!70D!B"D!B|!B"D!B|A"D!B"D!"D!B"D!70D!B"D!B|!B |,? 4xaB 6t`>!B"D"D"D9"D!Bt"D!B"Ą B" Bb|A"D"D!B1a>!B_>!BX0|!B"D B"D!B"D"Ć+a>!B|!B"D!B"D A"|G0|!B"D"D!B"D!B<"D`> B"D  <0… :|1ĉ+ZTŋ G0|/^xqa.^xŋ/^0ŋ`>.^x|]xŋ xł.^x0_0ŋ/^\ŋ/^0ŋ/wE+a/^0ŋ/^xa/^,ŋ9wxŋ/"wŋ]xb>.^x|/^xŋ/^tŋ9wŋxŋ/^x|'p 8`ACh0B"D!B"D`8`A&TaC!F8bE ]Ta 8`| H*\ȰÇ "D!B"D!Bx0D9"|A"D"D!B"D!B`>s"D"D!:"D!Bb|!B| q`>惘0|!B"D B"D!BL"D!BOa|(0| 1|A"D"D!B1a>!B_> 0B O@+/_'p "Lp!Æ"D!B"D!B0| 30 $+/_'p "Lp!Æ"D!B"D!B0|A |,h |  <0… :|h0|!B"D!B"D)̗_|sOa|=g0|!B"D"D!B"D!B!B_>s"D"D!:"D!Bb|!B|!0D9"D!Bt"D!B"Ą BDP>$Ẋ!B!4!B"D!B"Dh0,h „ 2l!Ĉ'Rha 8`| H!4!B"D!B"Dh0,h „ 2l!Ĉ'Rha/BO@'p "Lp!Æ70D!B"D!B|!B`> B"D "D!B"D!Bx0D!B,a>!B|A"D!B"D!"D s"D!B0|!B"D!B"DAb|0D!Ba>!B"D"D"D G0|!B"D B"D!BL"D!B"D!#a>!B|!B@8`A&TaC:tСÆ:t!| sϡC:ta>СÁK_:tСC:t`>:tx0_>sСC:ta>0_|:tСC:tx0C:4/|9tСC:70|8߿7 70߿|o| 7 _>$XA .dC(QD ߿8 | H*\ȰÇ ̧0_|/_|/߿|˗_| /߿|'0߿|/| ̗O`|"D!B`>!BX0|!B"DS` O`|O` o_߿|_o'߿8`A&TaC!FTODsOD%Ja> W0| /߿|'0߿| ̗O`O`/߿|O`|'0|%J\OD%'QD 9'QD%J0_|+O` /߿o` /߿_7_? 4xaB-\p… &̷p… .Do| .\p… .,o… .\p… .\H0… .\pa| .\pB H`>$XA .dC B"D!B"D"D!B"D"D!B"D!B\0 <0… :|1ĉ'/,h „ 2l!Ĉ'RhQ!|,h „ 2l!Ĉ'R߿| H*\ȰÇ#JHE.^xŋ/R70ŋ/^xŋxŋ/^H1ŋ/^xa/^,ŋ8`| H*\ȰÇ9O@ DP!A$XA .dذ`>:ta>:t_>:tСCsa>kϡC:dϡC:lϡC:a>:tСCka>sСCsСCsСCsϡC:ta>sa:tСC:t!|:t`| sϡC:taka>sСC:tСC 9tСC˗`>:tСCa|sa:tСCr!r!'p "Lp|P`> 2dȐ!C !|'p  $`A ? 4xaB 6tbD H"|̇`> 4xaB 6t"D$ A$HP`>  <0… :|1ĉQHbC0 <0… :|"G A$(0AO@ DPB sСCsСC/|9tСC:`>8| W |  <0… СC6СC˗`>:tСCc/_sa>:ta>:ta>:t_>:tСCc_sa>:tСC:t0C:t/|:tСC90|5СC:tСCs |,? 4xa>!D!B"D!B | Ch0B <0… :|1ĉQla>9G"E)70| 90_|)RH"E0|!'p 8`A&TaC O!|,h „ 'p "Lp!ÆB(q"|s"|QH"E90|5G"EQHb| ob>(B0E)Rh0| 90_|)R1E)F̧0_|&sOa|(0E)Rh0| 90_|)R1E)F̷0_>S0@ H`,H0,h „ 2l|50| A"D!B| H0A$X A$(0_,H0,h „ 2l| 0|5"D!B"D)̗/D 'p  'p W | H*\ȰÇ ̇`>8| W |  <0… :|1ĉ)̗/_S/_|̇`> 4xaB 6t"D$ A$HP`>  <0… :|1ĉ%̗O`|9̧0_ C0 <0… :|"G A$(0AO@ DPB >QD(60ń s"E)R4o`> +X` +Xp`>$XA .dذ`>:ta> sϡ sϡC:ta>ka>sСCsСCs`>:Da>:tСCka>sСCsСCs`>:Da>:tСCka>sСCsСCs |,? 4xa>!D!B"D!B Ch0‚̇`>'p "Lp!ÆB(q"|)RX0|)RH|50| QH"E)Rt"E 'p 8`A&TaC O!|,h „ 'p "Lp!ÆB(q"|)RX0|)RH|)0|5G"E)RHa>)R,a>)RH`ka>H"E)R0E)0E)Rh0| 90_|)R1E)FG"ň+a>)RH`>sa(RHb>)R"E`>(RH"E˗a>k"E!H"ň(RH1|QH"E1O@$/_,H0_'p "Lp!ÆB(q"|)R/_|8`A&TaC!BO@$(0A#H| H*\ȰÇ#JH0E#g0B$XA .dC8`> G A$/,h „ 2l!Ĉ'G"E0E)Rh0|(? W | W| H*\ȰÇ#JH0E!'PO@'p "Lp!Æ70|50| A"D!B|!B`> B"D90|5"D!"D"D9"D!Btasa>!B1D!B/D!B,a>!B|50| A"D B" Bb|A"Dsa>k"D!B"D!"D 'p 8`A&TaC s0 <0B H*\ȰÇ#JH0E)RH"E"E)RH"E)G"E)RH"ŃH"E)RH"EQH"E)RH`(RH"E)RH|)RH"E)R)RH"E)R80E)O@'p "Lp!Æ`|k/_"D "D"D9"D!Bt|˷0_> ̗0|!B|!B|!B`> B"DAo`> c"D!B4"D!B"D!0D!Ba> 0|"D!B"DAb|w0_ B"DAo`>0_>!B"D!B<"D/_>8_|O@ DPB >4o`˗a>1'0_>!B"D!B<"D`>+"D!B0|0C O@O@ DPB >QD(R1|̗_(RH"EH"E)RH"EQHb+0@? 4xaB 6t`>!B"D"D"D˗`> "D!:"D!Bb|!B|!B0_|!W0D!Ba>!B"D"D"D9"D!Bt"D!B"D!Bqa>!BX0|!B"D B"D!B"D"D9"D!Bto`>!B"D!B"ă B0 O@ D|"D!B"D!BO@ DPB >QD-*wQa>.6O@'p "Lp!Æ70D!B"D!B|!0D9"D!Bt"D!B"Ą B" Ba> s"D!B0D!B"D A"D%̗O`>9"|A"D"D!B1a>!B_>q`>˗b>W0D!Ba>!B"D"DS/_>9̧`>8| WP`|'p "Lp!Æ"D!B"D!B0| g`> 4H? W_W0,h „ 2l|!B"D!B"D -`> HA Hp`̗_8`A&TaC "D!B"D!B` 0B O@ |_>$XA .dC"D!B"D!B9̧0_|̇0_|!B"D"D!B"D!B<"0|"D!Bt"D!B"Ą B" Ba> s"D!B0D!B"D A"DA/|!0D!Ba>!B"D"D_> B$a>!B|!B"D!B"D A`>  <0B"D!B"D!B'p "Lp!ÆB(q"Ŋx"D$X0,h „ 2l|A"D!B"D!"D s"D!B0|!B"D!B"DA"Ă"D!:70D!B"D!B|!B`> B"DA"D!B0D!B/D!6̗/_|+"D!B0D!B"D A"DA"|#`|A"D"D!B1a>!B_>!B`>+? 4xaB 6t`>!B"D!B"ą Ba|̗_ B"DA"D!B"D!."D 3 |_>$XA .dC"D!B"D!B<"Dw0|A"D"D!B"D!B`>!Bd0@?#/,h „ 2l|A"D!B"D!"D s"D!B0|!B"D!"D!"D s"D!B0D!B"D A"DA"Ă"D!:"D!Bb|!B|!B`> B"DA"D!B0D!B/D!B,0 O@ DPB >4"D!B"D!Bqa>!B"D!Bq`>!B"D!B"ą B"D!B"ā"D!B"D!B<"D!B"D!Bo`>!B"D!B"ă BbA$X0,h „ 2l|A"D!B"D!"D s"D!B0D!B"D A"DA"Ă"D!:"D!Bb|!B|!B`> B"DA"D!B0D!B/D!6̗/_|A"D"D!B"D!B\"D/_>"D!:"D!B"D!B0D!270|A"D? 4xaB 6tbD)V0ŋ`>.^x|]xŋ/^xQa/70|]xŅxŋ/^x|/^"D!B"D|'p "Lp!ÆB(q"Ŋ滨0|'p 8`A&TaC "D!B"D!B`>s"D"D!:70D!B"D!B|!0D9"D!Bto`>!B"D!B"ă'P ,H0A4hРA ? 4xaB 6t`>!B"D"Dc/āS/ s"D!B0D!B"D A"D-̗"|)̗/_>0D!Ba>!B"D"D[b|8`A8|+X`>$XA .dC B"D!B"DS/Ă 'p  'p W | H*\ȰÇA"D!B"D!.̗0_>9̧`>8 |+X`>$XA .dC"D!B"D!B ? 4xaB 6t` B"D!B"D_>(0|A"D"D!B"D!B`>s"D"D!:"D!Bb|!B|!0D9"D!Bt"D!B"Ą B" Ba> s"D!B0D!B"D A"DA`>  <0B"D!B"D!B'p "Lp!ÆB(q"Ŋx"D$X0,h „ 2l|!B"D!B"D A"Ă"D!:70D!B"D!B|!B`> B"D "D!B"D!Bx0D!B,a>!B|A"D!B"D!"D W0|!B"D"D!B`>!B_>!Bd/|9"D!Bt"D!B"Ą B" Bb>"D!:"DADAQBO@ DPB sСC+a>:tСC:tСC:t_>:ta>:tx0_>sСC:tϡC:tСC:tСC9tСC0C:tС|:tСC:tСC:ϡCO O@ DPB >4o`>!B"D!B"ă Bb|A"D"D!B"D!B`>!BX0|!B"D"D!B"D!B<"D!0D!Ba>!B"D"D"D9"D!Bt"D!B"Ą B" BbA$X0,h „ 2l|!B"D!&"D!"D!B"D!"D!B"D!B0D!B"D!B80D!B"D!B|!B"D!B|A"D!B"D!O@ DPB >QD߿ /_7_| /_7_| /_7P`|˗/(0_|˗o| /_7_| ̗//_|˗/'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫWd@;;PK,}}PK+AOEBPS/pc_adchk.htm"0 Syntactic and Semantic Checking

D Syntactic and Semantic Checking

By checking the syntax and semantics of embedded SQL statements and PL/SQL blocks, the Pro*C/C++ Precompiler helps you quickly find and fix coding mistakes. This appendix shows you how to use the SQLCHECK option to control the type and extent of checking. This appendix contains the following topics:

What Is Syntactic and Semantic Checking?

Rules of syntax specify how language elements are sequenced to form valid statements. Thus, syntactic checking verifies that keywords, object names, operators, delimiters, and so on are placed correctly in your SQL statement. For example, the following embedded SQL statements contain syntax errors:

EXEC SQL DELETE FROM EMP WHER DEPTNO = 20; 
    -- misspelled keyword WHERE 
EXEC SQL INSERT INTO EMP COMM, SAL VALUES (NULL, 1500); 
    -- missing parentheses around column names COMM and SAL

Rules of semantics specify how valid external references are made. Thus, semantic checking verifies that references to database objects and host variables are valid and that host variable datatypes are correct. For example, the following embedded SQL statements contain semantic errors:

EXEC SQL DELETE FROM empp WHERE deptno = 20; 
    -- nonexistent table, EMPP 
EXEC SQL SELECT * FROM emp WHERE ename = :emp_name; 
    -- undeclared host variable, emp_name 

The rules of SQL syntax and semantics are defined in Oracle Database SQL Language Reference.

Controlling the Type and Extent of Checking

You control the type and extent of checking by specifying the SQLCHECK option on the command line. With SQLCHECK, the type of checking can be syntactic, semantic, or both. The extent of checking can include the following:

  • Data definition statements (such as CREATE and GRANT)

  • Data manipulation statements (such as SELECT and INSERT)

  • PL/SQL blocks

However, SQLCHECK cannot check dynamic SQL statements because they are not fully defined until run time.

You can specify the following values for SQLCHECK:

  • SEMANTICS or FULL

  • SYNTAX

The default value is SYNTAX.

The use of SQLCHECK does not affect the normal syntax checking done on data control, cursor control, and dynamic SQL statements.

Specifying SQLCHECK=SEMANTICS

When SQLCHECK=SEMANTICS, the precompiler checks the syntax and semantics of

  • Data manipulation statements (INSERT, UPDATE, and so on)

  • PL/SQL blocks

  • Host variable datatypes

as well as the syntax of

  • Data definition statements (CREATE, ALTER, and so on)

However, only syntactic checking is done on data manipulation statements that use the AT db_name clause.

When SQLCHECK=SEMANTICS, the precompiler gets information needed for a semantic check by using embedded DECLARE TABLE statements or if you specify the USERID option on the command line, by connecting to the Oracle server and accessing the data dictionary. You need not connect to the Oracle server if every table referenced in a data manipulation statement or PL/SQL block is defined in a DECLARE TABLE statement.

If you connect to the Oracle server, but some needed information cannot be found in the data dictionary, you must use DECLARE TABLE statements to supply the missing information. A DECLARE TABLE definition overrides a data dictionary definition if they conflict.

If you embed PL/SQL blocks in a host program, you must specify SQLCHECK=SEMANTICS.

When checking data manipulation statements, the precompiler uses the syntax rules found in the Oracle Database SQL Language Reference, but uses a stricter set of semantic rules. In particular, stricter datatype checking is done. As a result, existing applications written for earlier versions of Oracle might not precompile successfully when SQLCHECK=SEMANTICS.

Specify SQLCHECK=SEMANTICS when you precompile new programs or want stricter datatype checking.

Enabling a Semantic Check

When SQLCHECK=SEMANTICS, the precompiler can get information needed for a semantic check in either of the following ways:

  • Connect to the Oracle server and access the data dictionary.

  • Use embedded DECLARE TABLE and DECLARE TYPE statements.

Connecting to the Oracle server

To do a semantic check, the precompiler can connect to an Oracle database that maintains definitions of tables, types, and views referenced in your host program.

After connecting to the Oracle server, the precompiler accesses the data dictionary for needed information. The data dictionary stores table and column names, table and column constraints, column lengths, column datatypes, and so on.

If some of the needed information cannot be found in the data dictionary (because your program refers to a table not yet created, for example), you must supply the missing information using the DECLARE TABLE statement (discussed later in this appendix).

To connect to the Oracle server, specify the USERID option on the command line, using the syntax:

USERID=username/password 

where username and password comprise a valid Oracle userid. If you omit the password, you are prompted for it.

If, instead of a username and password, you specify

USERID=/ 

the precompiler attempts to automatically connect to the Oracle server. The attempt succeeds only if an existing Oracle username matches your operating system ID prefixed with "CLUSTER$", or whatever value the parameter OS_AUTHENT_PREFIX is set to in the INIT.ORA file. For example, if your operating system ID is MBLAKE, an automatic connect only succeeds if CLUSTER$MBLAKE is a valid Oracle username.

If you omit the USERID option, the precompiler must get needed information from embedded DECLARE TABLE statements.

If you try connecting to the Oracle server but cannot (because the database is unavailable, for example), an error message is issued and your program is not precompiled.

Using DECLARE TABLE

The precompiler can do a semantic check without connecting to the Oracle server. To do the check, the precompiler must get information about tables and views from embedded DECLARE TABLE statements. Thus, every table referenced in a data manipulation statement or PL/SQL block must be defined in a DECLARE TABLE statement.

The syntax of the DECLARE TABLE statement is:

EXEC SQL DECLARE table_name TABLE 
    (col_name col_datatype [DEFAULT expr] [NULL|NOT NULL], ...); 

where expr is an integer that can be used as a default column value in the CREATE TABLE statement.

For user-defined object datatypes, the size is optional because it is not used.

If you use DECLARE TABLE to define a database table that already exists, the precompiler uses your definition, ignoring the one in the data dictionary.

Using DECLARE TYPE

Similarly, for TYPE, there is a DECLARE TYPE statement whose syntax is:

EXEC SQL DECLARE type TYPE 
[AS OBJECT (col_name col_datatype, ...)] |
[AS VARRAY(size) OF element_type ]|
[AS TABLE OF object_type ] ;

This allows for better type-checking for user-defined types when SQLCHECK=SEMANTICS at precompile-time. When SQLCHECK=SYNTAX, the DECLARE TYPE statements serve as documentation only and are commented out and ignored.

Specifying SQLCHECK=SYNTAX

When SQLCHECK=SYNTAX, the precompiler checks the syntax of SQL statements documented in Oracle Database SQL Language Reference:

  • Data manipulation statements

  • Host-variable expressions

No semantic check is done, and the following restrictions apply:

  • No connection to the Oracle server is attempted and USERID becomes an invalid option. If you specify USERID, a warning message is issued.

  • DECLARE TABLE and DECLARE TYPE statements are ignored; they serve only as documentation.

  • PL/SQL blocks are not allowed. If the precompiler finds a PL/SQL block, an error message is issued.

When checking data manipulation statements, the precompiler uses Oracle syntax rules. These rules are downwardly compatible, so specify SQLCHECK=SYNTAX when migrating your precompiled programs.

Entering the SQLCHECK Option

You can enter the SQLCHECK option inline or on the command line. However, the level of checking you specify inline cannot be higher than the level you specify (or accept by default) on the command line. For example, if you specify SQLCHECK=SYNTAX on the command line, you cannot specify SQLCHECK=SEMANTICS inline.

PKp'0"0PK+AOEBPS/img_text/objset.htmE Description of the illustration objset.eps

This figure shows the syntax diagram for OBJECT SET.

PK;j0PK+AOEBPS/img_text/setdnc.htm Description of the illustration setdnc.eps

This figure shows the syntax diagram for choices of item_name, with respect to the previous diagram.

PKD^PK+A%OEBPS/img_text/performgraph_case2.htm4 Description of the illustration performgraph_case2.gif

This graph shows performance against varying CMAX values.

PKxB6vPK+AOEBPS/img_text/lobenab.htm: Description of the illustration lobenab.eps

This figure shows the syntax diagram for LOB ENABLE BUFFERING.

PK}IeHPK+AOEBPS/img_text/objupd.htmB Description of the illustration objupd.eps

This figure shows the syntax diagram for OBJECT UPDATE.

PKBPK+AOEBPS/img_text/execeex.htm< Description of the illustration execeex.eps

This figure shows the syntax diagram for EXECUTE...END-EXEC.

PKPK+AOEBPS/img_text/reqp1.htmZ Description of the illustration reqp1.eps

If any of the keywords or parameters in a vertical list appears on the main path, one of them is required. That is, you must choose one of the keywords or parameters, but not necessarily the one that appears on the main path. In the given example, you must choose one of the four actions.

PK|~,wPK+AOEBPS/img_text/lobclose.htmD Description of the illustration lobclose.eps

This figure shows the syntax diagram for LOB CLOSE.

PKBtPK+AOEBPS/img_text/collget.htm@ Description of the illustration collget.eps

This figure shows the syntax diagram for COLLECTION GET.

PKPK+AOEBPS/img_text/openo.htmL Description of the illustration openo.eps

This figure shows the syntax diagram for OPEN.

PKhPK+AOEBPS/img_text/lnpcc071.htmD Description of the illustration lnpcc071.eps

This figure illustrates the navigational interface.

PK*PK+AOEBPS/img_text/opena.htmA Description of the illustration opena.eps

This figure shows the syntax diagram for OPEN DESCRIPTOR.

PKwPK+AOEBPS/img_text/rollb.htmH Description of the illustration rollb.eps

This figure shows the syntax diagram for ROLLBACK.

PKjPK+AOEBPS/img_text/regconn.htm> Description of the illustration regconn.eps

This figure shows the syntax diagram for REGISTER CONNECT.

PKDPK+AOEBPS/img_text/savep.htmG Description of the illustration savep.eps

This figure shows the syntax diagram for SAVEPOINT.

PK1/PK+AOEBPS/img_text/lnpcc013.htm: Description of the illustration lnpcc013.eps

This figure shows the bind descriptor in our example after the DESCRIBE. Notice that DESCRIBE has set F to the actual number of placeholders found in the processed SQL statement.

PKmb?:PK+AOEBPS/img_text/part.htm Description of the illustration part.eps

Read a multipart diagram as if all the main paths were joined end-to-end. The given example is a two-part diagram.

PK0PK+AOEBPS/img_text/commit.htmI Description of the illustration commit.eps

This figure shows the syntax diagram for COMMIT.

PKE[\PK+AOEBPS/img_text/lnpcc014.htm Description of the illustration lnpcc014.eps

This figure shows the resulting bind descriptor for the values mentioned in the example.

PKFPK+AOEBPS/img_text/ms3.htm Description of the illustration ms3.gif

This figure displays the Custom Build tab in the Project Settings dialog. Here you can specify the custom build options.

PKuPK+AOEBPS/img_text/lnpcc070.htmD Description of the illustration lnpcc070.eps

This figure illustrates the navigational interface.

PKvTPK+AOEBPS/img_text/lnpcc008.htmF Description of the illustration lnpcc008.eps

This figure shows the coding scheme for SQLSTATE.

PK"pҾPK+AOEBPS/img_text/call.htmM Description of the illustration call.eps

This figure shows the syntax diagram for CALL.

PKkEkPK+AOEBPS/img_text/collatt.htm Description of the illustration collatt.eps

This figure shows the syntax diagram for attrib, with reference to the previous diagram.

PK,lPK+AOEBPS/img_text/objrel.htmA Description of the illustration objrel.eps

This figure shows the syntax diagram for OBJECT RELEASE.

PK PK+AOEBPS/img_text/objtab.htm Description of the illustration objtab.eps

This figure shows the syntax diagram for tab, with respect to the previous diagram.

PKRPK+AOEBPS/img_text/lobass.htmE Description of the illustration lobass.eps

This figure shows the syntax diagram for LOB ASSIGN.

PK11PK+AOEBPS/img_text/objder.htmC Description of the illustration objder.eps

This figure shows the syntax diagram for OBJECT DEREF.

PK8Q$PK+AOEBPS/img_text/lnpcc022.htm Description of the illustration lnpcc022.eps

This figure shows an application that executes multiple threads using multiple runtime contexts.

PKz~PK+AOEBPS/img_text/getdnc.htm Description of the illustration getdnc.eps

This figure shows the syntax diagram for the choices of item_name, with reference to the previous diagram.

PK+f PK+AOEBPS/img_text/var.htmO Description of the illustration var.eps

This figure shows the syntax diagram for VAR.

PKZiwPK+AOEBPS/img_text/connect.htmG Description of the illustration connect.eps

This figure shows the syntax diagram for CONNECT.

PK}[PK+AOEBPS/img_text/update.htmI Description of the illustration update.eps

This figure shows the syntax diagram for UPDATE.

PKSƻPK+AOEBPS/img_text/conobset.htm4 Description of the illustration conobset.eps

This figure shows the syntax diagram for CONTEXT OBJECT OPTION SET.

PK4*GPK+AOEBPS/img_text/lobdisab.htm8 Description of the illustration lobdisab.eps

This figure shows the syntax diagram for LOB DISABLE BUFFERING.

PKPK+A$OEBPS/img_text/performance_graph.htm~ Description of the illustration performance_graph.gif

This figure shows a performance graph. The CPOOL=YES curve represents the time taken by the application when connection pooling is enabled. The CPOOL=NO curve represents the time taken by the application when connection pooling is disabled.

PK S.PK+AOEBPS/img_text/enable_t.htm? Description of the illustration enable_t.eps

This figure shows the syntax diagram for ENABLE THREADS.

PK~PK+AOEBPS/img_text/execa.htm> Description of the illustration execa.eps

This figure shows the syntax diagram for EXECUTE DESCRIPTOR.

PKҗɿPK+AOEBPS/img_text/lobfrtem.htm; Description of the illustration lobfrtem.eps

This figure shows the syntax diagram for LOB FREE TEMPORARY.

PKծjPK+AOEBPS/img_text/ms5.htm Description of the illustration ms5.gif

This figure displays the Directories tab in the Options dialog. Here you can select the Pro*C/C++ executable files from the Show Directories For list.

PKNGPK+AOEBPS/img_text/allocat.htmF Description of the illustration allocat.eps

This figure shows the syntax diagram for ALLOCATE.

PKzPK+AOEBPS/img_text/prepare.htmG Description of the illustration prepare.eps

This figure shows the syntax diagram for PREPARE.

PKهPK+AOEBPS/img_text/alldesc.htm; Description of the illustration alldesc.eps

This figure shows the syntax diagram for ALLOCATE DESCRIPTOR.

PKPK+AOEBPS/img_text/whenevrc.htmE Description of the illustration whenevrc.eps

This figure shows the syntax diagram for WHENEVER.

PKPK+AOEBPS/img_text/return.htm- Description of the illustration return.eps

This figure shows the syntax diagram for the DML returning clause of UPDATE.

PKOPK+AOEBPS/img_text/delete.htmI Description of the illustration delete.eps

This figure shows the syntax diagram for DELETE.

PK IKDPK+AOEBPS/img_text/dcltab.htmB Description of the illustration dcltab.eps

This figure shows the syntax diagram for DECLARE TABLE.

PKRA$PK+AOEBPS/img_text/lobatt.htm Description of the illustration lobatt.eps

This figure shows the syntax diagram for attrib, with respect to the previous diagram.

PK'UPK+AOEBPS/img_text/dcltabob.htm/ Description of the illustration dcltabob.eps

This figure shows the syntax diagram of DECLARE TALBE for object tables.

PK3PK+AOEBPS/img_text/objflu.htmC Description of the illustration objflu.eps

This figure shows the syntax diagram for OBJECT FLUSH.

PK\(PK+AOEBPS/img_text/execi.htm? Description of the illustration execi.eps

This figure shows the syntax diagram for EXECUTE IMMEDIATE.

PK1PK+AOEBPS/img_text/lnpcc012.htm1 Description of the illustration lnpcc012.eps

This figure shows the descriptors resulting from the mentioned values.

PKjPK+AOEBPS/img_text/loblofr.htmF Description of the illustration loblofr.eps

This figure shows the syntax diagram for LOB LOAD.

PK߰oPK+AOEBPS/img_text/lnpcc003.htm1 Description of the illustration lnpcc003.eps

This figure shows the process of embedded SQL application development.

PK݈PK+AOEBPS/img_text/conuse.htmD Description of the illustration conuse.eps

This figure shows the syntax diagram for CONTEXT USE.

PKlᬰPK+AOEBPS/img_text/lobapp.htmE Description of the illustration lobapp.eps

This figure shows the syntax diagram for LOB APPEND.

PKKMXPK+AOEBPS/img_text/select.htmI Description of the illustration select.eps

This figure shows the syntax diagram for SELECT.

PKh7PK+AOEBPS/img_text/dclco.htmB Description of the illustration dclco.eps

This figure shows the syntax diagram for DECLARE CURSOR.

PKҎPK+AOEBPS/img_text/setdesc.htm@ Description of the illustration setdesc.eps

This figure shows the syntax diagram for SET DESCRIPTOR.

PK'sPK+AOEBPS/img_text/dealdesc.htm8 Description of the illustration dealdesc.eps

This figure shows the syntax diagram for DEALLOCATE DESCRIPTOR.

PKPK+AOEBPS/img_text/type.htmM Description of the illustration type.eps

This figure shows the syntax diagram for TYPE.

PKpJEPK+AOEBPS/img_text/lnpcc017.htmL Description of the illustration lnpcc017.eps

This figure shows the select descriptor in our example after the FETCH. Notice that Oracle has stored the select-list and indicator values in the data buffers addressed by the elements of V and I.

PK^QLPK+AOEBPS/img_text/cache.htmB Description of the illustration cache.eps

This figure shows the syntax diagram for CACHE FREE ALL.

PK)qPK+AOEBPS/img_text/conobget.htm4 Description of the illustration conobget.eps

This figure shows the syntax diagram for CONTEXT OBJECT OPTION GET.

PKPK+AOEBPS/img_text/lobfise.htmB Description of the illustration lobfise.eps

This figure shows the syntax diagram for LOB FILE SET.

PKUe˕PK+AOEBPS/img_text/lobficl.htm< Description of the illustration lobficl.eps

This figure shows the syntax diagram for LOB FILE CLOSE ALL.

PKĤPK+AOEBPS/img_text/lnpcc011.htm1 Description of the illustration lnpcc011.eps

This figure shows the descriptors resulting from the mentioned values.

PKh̓PK+AOEBPS/img_text/fetch2.htmK Description of the illustration fetch2.eps

This figure shows the additional fetch syntax.

PKyPK+AOEBPS/img_text/lnpcc004.htm Description of the illustration lnpcc004.eps PKrPK+AOEBPS/img_text/objget.htmE Description of the illustration objget.eps

This figure shows the syntax diagram for OBJECT GET.

PK=JPK+A%OEBPS/img_text/performgraph_case1.htm4 Description of the illustration performgraph_case1.gif

This graph shows performance against varying CMIN values.

PK“PK+AOEBPS/img_text/lobcop.htmG Description of the illustration lobcop.eps

This figure shows the syntax diagram for LOB COPY.

PKoʽPK+AOEBPS/img_text/lnpcc001.htm4 Description of the illustration lnpcc001.eps

This figure shows the development cycle of an embedded SQL program.

PKɗPK+AOEBPS/img_text/optional.htm Description of the illustration optional.eps

If keywords and parameters appear in a vertical list above the main path, they are optional. In the given example, AT :db_name and WORK are optional.

PKjZ"PK+AOEBPS/img_text/insert.htmI Description of the illustration insert.eps

This figure shows the syntax diagram for INSERT.

PK- PK+AOEBPS/img_text/lobopen.htmF Description of the illustration lobopen.eps

This figure shows the syntax diagram for LOB OPEN.

PK4?PK+AOEBPS/img_text/lobcreat.htm9 Description of the illustration lobcreat.eps

This figure shows the syntax diagram for LOB CREATE TEMPORARY.

PK2PK+AOEBPS/img_text/syntax.htm~ Description of the illustration syntax.eps

Loops let you repeat the syntax within them as many times as you like. In the following example, column_name is inside a loop. So, after choosing one column name, you can go back repeatedly to choose another, separating the column names by a comma.

PK:ڃ~PK+AOEBPS/img_text/descans.htm; Description of the illustration descans.eps

This figure shows the syntax diagram for DESCRIBE DESCRIPTOR.

PKQ^PK+AOEBPS/img_text/reqp.htmo Description of the illustration reqp.eps

Required keywords and parameters can appear singly or in a vertical list of alternatives. Single required keywords and parameters appear on the main path, that is, on the horizontal line you are currently traveling. In the given example, cursor is a required parameter

PKPK+AOEBPS/img_text/lobtrim.htmF Description of the illustration lobtrim.eps

This figure shows the syntax diagram for LOB TRIM.

PK7PK+AOEBPS/img_text/dcldbase.htm= Description of the illustration dcldbase.eps

This figure shows the syntax diagram for DECLARE DATABASE.

PKlSPK+AOEBPS/img_text/lobread.htmF Description of the illustration lobread.eps

This figure shows the syntax diagram for LOB READ.

PKOPK+AOEBPS/img_text/fetcho.htmJ Description of the illustration fetcho.eps

This figure shows the syntax diagram for FETCH.

PKbHPK+AOEBPS/img_text/objdel.htmB Description of the illustration objdel.eps

This figure shows the syntax diagram for OBJECT DELETE.

PK[VPK+AOEBPS/img_text/colldes.htm; Description of the illustration colldes.eps

This figure shows the syntax diagram for COLLECTION DESCRIBE.

PK-PK+AOEBPS/img_text/lnpcc015.htmf Description of the illustration lnpcc015.eps

This figure shows the select descriptor in our example after the DESCRIBE. Notice that DESCRIBE has set F to the actual number of items found in the query select list. If the SQL statement is not a query, F is set to zero.

PKM kfPK+AOEBPS/img_text/free.htmM Description of the illustration free.eps

This figure shows the syntax diagram for FREE.

PKmkPK+AOEBPS/img_text/lnpcc023.htm, Description of the illustration lnpcc023.eps

This figure shows how to prevent concurrent usage with the help of mutexes.

PKLPK+AOEBPS/img_text/lobwri.htmF Description of the illustration lobwri.eps

This figure shows the syntax diagram for LOB WRITE.

PK?,PK+AOEBPS/img_text/select_b.htmG Description of the illustration select_b.eps

This figure shows the syntax diagram for SELECT.

PK2OPK+AOEBPS/img_text/dcltype.htmB Description of the illustration dcltype.eps

This figure shows the syntax diagram for DECLARE TYPE.

PK/FPK+AOEBPS/img_text/getdesc.htm@ Description of the illustration getdesc.eps

This figure shows the syntax diagram for GET DESCRIPTOR.

PK@(=PK+AOEBPS/img_text/describe.htmE Description of the illustration describe.eps

This figure shows the syntax diagram for DESCRIBE.

PKUPK+AOEBPS/img_text/ms2.htm Description of the illustration ms2.gif

This figure displays the Insert Files into Project dialog. Here you can select the .pc files and add them to a project.

PKPK+AOEBPS/img_text/dcl_stmt.htm< Description of the illustration dcl_stmt.eps

This figure shows the syntax diagram for DECLARE STATEMENT.

PK7/PK+AOEBPS/img_text/collset.htm@ Description of the illustration collset.eps

This figure shows the syntax diagram for COLLECTION SET.

PK]ܥPK+AOEBPS/img_text/lnpcc002.htm> Description of the illustration lnpcc002.gif

This figure shows the features and benefits of Pro*C/C++.

PK :PK+AOEBPS/img_text/confree.htmB Description of the illustration confree.eps

This figure shows the syntax diagram for CONTEXT FREE.

PK}PK+AOEBPS/img_text/insert2.htmI Description of the illustration insert2.eps

This figure shows the additional insert syntax.

PK2PK+AOEBPS/img_text/conall.htm? Description of the illustration conall.eps

This figure shows the syntax diagram for CONTEXT ALLOCATE.

PK8LPK+AOEBPS/img_text/lnpcc020.htm Description of the illustration lnpcc020.eps

This figure represents the cursor cache after your program has done an INSERT and a DELETE.

PK}gePK+A%OEBPS/img_text/connection_pooling.htm% Description of the illustration connection_pooling.gif

This figure illustrates functionality of the connection pooling feature.

PK1PK+AOEBPS/img_text/lnpcc021.htm< Description of the illustration lnpcc021.eps

This figure shows loosely coupling connections and threads.

PKQ8PK+AOEBPS/img_text/ms1.htm Description of the illustration ms1.gif

This figure displays the Tools tab in the Customize dialog. Here you can include Pro*C/C++ as a choice in the Tools menu.

PKEPK+AOEBPS/img_text/objcrea.htmA Description of the illustration objcrea.eps

This figure shows the syntax diagram for OBJECT CREATE.

PKiPK+AOEBPS/img_text/close.htmK Description of the illustration close.eps

This figure shows the syntax diagram for CLOSE.

PKD PK+AOEBPS/img_text/first.htm Description of the illustration first.eps

This figure shows a syntax diagram. If the syntax diagram has more than one path, you can choose any path to travel. If you have the choice of more than one keyword, operator, or parameter, your options appear in a vertical list. In the following example, you can travel down the vertical line as far as you like, then continue along any horizontal line.

PKfQPK+AOEBPS/img_text/lobdesc.htmB Description of the illustration lobdesc.eps

This figure shows the syntax diagram for LOB DESCRIBE.

PKO\PK+AOEBPS/img_text/execo.htmI Description of the illustration execo.eps

This figure shows the syntax diagram for EXECUTE.

PKu&PK+AOEBPS/img_text/lnpcc005.htm  Description of the illustration lnpcc005.eps

This figure shows one way that components of the DTP model can interact to provide efficient access to data in an Oracle database.

PK PK+AOEBPS/img_text/fetcha.htm? Description of the illustration fetcha.eps

This figure shows the syntax diagram for FETCH DESCRIPTOR.

PK!PK+AOEBPS/img_text/collres.htm> Description of the illustration collres.eps

This figure shows the syntax diagram for COLLECTION RESET.

PKSRPK+AOEBPS/img_text/lobflbuf.htm= Description of the illustration lobflbuf.eps

This figure shows the syntax diagram for LOB FLUSH BUFFER.

PK BPK+AOEBPS/img_text/lnpcc072.htm< Description of the illustration lnpcc072.eps

This figure shows the steps involved in using OTT with OCI.

PK%FPK+AOEBPS/img_text/lnpcc016.htm\ Description of the illustration lnpcc016.eps

This figure shows the resulting select descriptor. Notice that the NUMBER lengths are now usable and that all the datatypes are STRING. The lengths in L[1] and L[2] are 6 and 9 because we increased the DESCRIBEd lengths of 4 and 7 by 2 to allow for a possible sign and decimal point.

PKGDcPK+AOEBPS/img_text/loberas.htmE Description of the illustration loberas.eps

This figure shows the syntax diagram for LOB ERASE.

PKjPK+AOEBPS/img_text/lnpcc010.htm Description of the illustration lnpcc010.eps

This figure shows whether variables are set by SQLSQLDAAlloc() calls, DESCRIBE commands, FETCH commands, or program assignments.

PK Description of the illustration colltr.eps

This figure shows the syntax diagram for COLLECTION TRIM.

PKBPK+AOEBPS/img_text/lnpcc069.htmw Description of the illustration lnpcc069.eps

This figure shows the following scenario:

You allocate memory in the cache for a transient copy of the persistent object with the ALLOCATE statement. The allocated object does not contain data, but it has the form of the struct generated by the OTT.

PKݍPK+AOEBPS/img_text/lnpcc019.htmK Description of the illustration lnpcc019.eps

This figure shows that if your application is database-intensive, then you can use control structures to group SQL statements in a PL/SQL block, then send the entire block to the database server.

PKPKPK+AOEBPS/img_text/lnpcc068.htm6 Description of the illustration lnpcc068.eps

This figure shows the steps involved in using OTT with Pro*C/C++.

PKT@jPK+AOEBPS/img_text/lnpcc009.htm Description of the illustration lnpcc009.eps

This figure shows the decision logic that will help you choose the right method for using dynamic SQL.

PKiwPK+AOEBPS/img_text/collapp.htm= Description of the illustration collapp.eps

This figure shows the syntax diagram for COLLECTION APPEND.

PKSPK+AOEBPS/pc_05adv.htm Advanced Topics

5 Advanced Topics

This chapter discusses advanced techniques in Pro*C/C++ and contains the following topics:

Character Data

This section explains how the Pro*C/C++ Precompiler handles character host variables. There are four host variable character types:

  • Character arrays

  • Pointers to strings

  • VARCHAR variables

  • Pointers to VARCHARs

Do not confuse VARCHAR (a host variable data structure supplied by the precompiler) with VARCHAR2 (an Oracle internal datatype for variable-length character strings).

Precompiler Option CHAR_MAP

The CHAR_MAP precompiler command line option is available to specify the default mapping of char[n] and char host variables. Oracle maps them to CHARZ. CHARZ implements the ANSI Fixed Character format. Strings are fixed-length, blank-padded and null-terminated. VARCHAR2 values (including nulls) are always fixed-length and blank-padded. Table 5-1 shows the possible settings of CHAR_MAP:

Table 5-1 CHAR_MAP Settings

CHAR_MAP SettingIs Default forDescription

VARCHAR2

-

All values (including null) are fixed-length blank-padded.

CHARZ

DBMS=V7, DBMS=V8

Fixed-length blank-padded, then null-terminated. Conforms to the ANSI Fixed Character type.

STRING

New format

null-terminated. Conforms to ASCII format used in C programs.

CHARF

Previously, only through VAR or TYPE declarations.

Fixed-length blank-padded. null is left unpadded.


The default mapping is CHAR_MAP=CHARZ, which was the case in previous versions of Pro*C/C++.

Use CHAR_MAP=VARCHAR2 instead of the old DBMS=V6_CHAR, which is obsolete.

Inline Usage of the CHAR_MAP Option

Unless you declared a char or char[n] variable otherwise, the inline CHAR_MAP option determines its mapping. The following code fragment illustrates the results of setting this option inline in Pro*C/C++:

char ch_array[5];

strncpy(ch_array, "12345", 5);
/* char_map=charz is the default in Oracle7 and Oracle8 */
EXEC ORACLE OPTION (char_map=charz);
/* Select retrieves a string "AB" from the database */
SQL SELECT ... INTO :ch_array FROM ... WHERE ... ;
/* ch_array == { 'A', 'B', ' ', ' ', '\0' } */

strncpy (ch_array, "12345", 5);
EXEC ORACLE OPTION (char_map=string) ;
/* Select retrieves a string "AB" from the database */
EXEC SQL SELECT ... INTO :ch_array FROM ... WHERE ... ;
/* ch_array == { 'A', 'B', '\0', '4', '5' } */

strncpy( ch_array, "12345", 5);
EXEC ORACLE OPTION (char_map=charf);
/* Select retrieves a string "AB" from the database */
EXEC SQL SELECT ... INTO :ch_array FROM ... WHERE ... ;
/* ch_array == { 'A', 'B', ' ', ' ', ' ' } */ 

Effect of the DBMS and CHAR_MAP Options

The DBMS and CHAR_MAP options determine how Pro*C/C++ treats data in character arrays and strings. These options allow your program to observe compatibility with ANSI fixed-length strings, or to maintain compatibility with previous releases of Oracle and Pro*C/C++ that use variable-length strings. See Chapter 10, " Precompiler Options" for a complete description of the DBMS and CHAR_MAP options.

The DBMS option affects character data both on input (from your host variables to the Oracle table) and on output (from an Oracle table to your host variables).

Character Array and the CHAR_MAP Option

The mapping of character arrays can also be set by the CHAR_MAP option independent of the DBMS option. DBMS=V7 or DBMS=V8 both use CHAR_MAP=CHARZ, which can be overridden by specifying either CHAR_MAP=VARCHAR2 or STRING or CHARF.

On Input

Character Array On input, the DBMS option determines the format that a host variable character array must have in your program. When the CHAR_MAP=VARCHAR2, host variable character arrays must be blank padded, and should not be null-terminated. When the DBMS=V7 or V8, character arrays must be null-terminated ('\0').

When the CHAR_MAP option is set to VARCHAR2 trailing blanks are removed up to the first non-blank character before the value is sent to the database. An un-initialized character array can contain null characters. To make sure that the nulls are not inserted into the table, you must blank-pad the character array to its length. For example, if you execute the statements:

char emp_name[10]; 
... 
strcpy(emp_name, "MILLER");     /* WRONG! Note no blank-padding */ 
EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES 
    (1234, :emp_name, 20); 

you will find that the string "MILLER" was inserted as "MILLER\0\0\0\0" (with four null bytes appended to it). This value does not meet the following search condition:

. . . WHERE ename = 'MILLER'; 

To INSERT the character array when CHAR_MAP is set to VARCHAR2, you should execute the statements

strncpy(emp_name, "MILLER    ", 10); /* 4 trailing blanks */ 
EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES 
    (1234, :emp_name, 20); 

When DBMS=V7 or V8, input data in a character array must be null-terminated. So, make sure that your data ends with a null.

char emp_name[11];  /* Note: one greater than column size of 10 */ 
... 
strcpy(emp_name, "MILLER");        /* No blank-padding required */ 
EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES 
    (1234, :emp_name, 20); 

Character Pointer The pointer must address a null-terminated buffer that is large enough to hold the input data. Your program must allocate enough memory to do this.

On Input

The following example illustrates all possible combinations of the effects of the CHAR_MAP option settings on the value retrieved from a database into a character array.

Assume a database

TABLE strdbase ( ..., strval VARCHAR2(6));

which contains the following strings in the column strval:

""        -- string of length 0
"AB"      -- string of length 2
"KING"    -- string of length 4
"QUEEN"   -- string of length 5
"MILLER"  -- string of length 6

In a Pro*C/C++ program, initialize the 5-character host array str with 'X' characters and use for the retrieval of all the values in column strval:

char  str[5] = {'X', 'X', 'X','X', 'X'} ;
short str_ind;
...
EXEC SQL SELECT strval INTO :str:str_ind WHERE ... ;

with the following results for the array, str, and the indicator variable, str_ind, as CHAR_MAP is set to VARCHAR2, CHARF, CHARZ and STRING:

strval = ""         "AB"       "KING"     "QUEEN"    "MILLER"
---------------------------------------------------------------
VARCHAR2 "     " -1 "AB   " 0  "KING "  0 "QUEEN"  0 "MILLE"  6
CHARF    "XXXXX" -1 "AB   " 0  "KING "  0 "QUEEN"  0 "MILLE"  6
CHARZ    "    0" -1 "AB  0" 0  "KING0"  0 "QUEE0"  5 "MILL0"  6
STRING   "0XXXX" -1 "AB0XX" 0  "KING0"  0 "QUEE0"  5 "MILL0"  6

where 0 stands for the null character, '\0'.

On Output

Character Array On output, the DBMS and CHAR_MAP options determines the format that a host variable character array will have in your program. When CHAR_MAP=VARCHAR2, host variable character arrays are blank padded up to the length of the array, but never null-terminated. When DBMS=V7 or V8 (or CHAR_MAP=CHARZ), character arrays are blank padded, then null-terminated in the final position in the array.

Consider the following example of character output:

CREATE TABLE test_char (C_col CHAR(10), V_col VARCHAR2(10)); 
 
INSERT INTO test_char VALUES ('MILLER', 'KING'); 

A precompiler program to select from this table contains the following embedded SQL:

... 
char name1[10]; 
char name2[10]; 
... 
EXEC SQL SELECT C_col, V_col INTO :name1, :name2 
    FROM test_char; 

If you precompile the program with CHAR_MAP=VARCHAR2, name1 will contain:

"MILLER####" 

that is, the name "MILLER" followed by 4 blanks, with no null-termination. (If name1 had been declared with a size of 15, there are 9 blanks following the name.)

name2 will contain:

"KING######"      /* 6 trailing blanks */ 

If you precompile the program with DBMS=V7 or V8, name1 will contain:

"MILLER###\0" /* 3 trailing blanks, then a null-terminator */ 

that is, a string containing the name, blank-padded to the length of the column, followed by a null terminator. name2 will contain:

"KING#####\0" 

In summary, if CHAR_MAP=VARCHAR2, the output from either a CHARACTER column or a VARCHAR2 column is blank-padded to the length of the host variable array. If DBMS=V7 or V8, the output string is always null-terminated.

Character Pointer The DBMS and CHAR_MAP options do not affect the way character data are output to a pointer host variable.

When you output data to a character pointer host variable, the pointer must point to a buffer large enough to hold the output from the table, plus one extra byte to hold a null terminator.

The precompiler runtime environment calls strlen() to determine the size of the output buffer, so make sure that the buffer does not contain any embedded nulls ('\0'). Fill allocated buffers with some value other than '\0', then null-terminate the buffer, before fetching the data.


Note:

C pointers can be used in a Pro*C/C++ program that is precompiled with DBMS=V7 or V8 and MODE=ANSI. However, pointers are not legal host variable types in a SQL standard compliant program. The FIPS flagger warns you if you use pointers as host variables.

The following code fragment uses the columns and table defined in the previous section, and shows how to declare and SELECT into character pointer host variables:

... 
char *p_name1; 
char *p_name2; 
... 
p_name1 = (char *) malloc(11); 
p_name2 = (char *) malloc(11); 
strcpy(p_name1, "          "); 
strcpy(p_name2, "0123456789"); 
 
EXEC SQL SELECT C_col, V_col INTO :p_name1, :p_name2 
    FROM test_char; 

When the SELECT statement mentioned earlier is executed with any DBMS or CHAR_MAP setting, the value fetched is:

"MILLER####\0"     /* 4 trailing blanks and a null terminator */ 
 
"KING######\0"    /* 6 blanks and null */ 

VARCHAR Variables and Pointers

The following example shows how VARCHAR host variables are declared:

VARCHAR   emp_name1[10];   /* VARCHAR variable   */ 
VARCHAR  *emp_name2;       /* pointer to VARCHAR */

On Input

VARCHAR Variables When you use a VARCHAR variable as an input host variable, your program need only place the desired string in the array member of the expanded VARCHAR declaration (emp_name1.arr in our example) and set the length member (emp_name1.len). There is no need to blank-pad the array. Exactly emp_name1.len characters are sent to Oracle, counting any blanks and nulls. In the following example, you set emp_name1.len to 8:

strcpy((char *)emp_name1.arr, "VAN HORN"); 
emp_name1.len = strlen((char *)emp_name1.arr); 

Pointer to a VARCHAR When you use a pointer to a VARCHAR as an input host variable, you must allocate enough memory for the expanded VARCHAR declaration. Then, you must place the desired string in the array member and set the length member, as shown in the following example:

emp_name2 = malloc(sizeof(short) + 10)   /* len + arr */ 
strcpy((char *)emp_name2->arr, "MILLER"); 
emp_name2->len = strlen((char *)emp_name2->arr); 

Or, to make emp_name2 point to an existing VARCHAR (emp_name1 in this case), you could code the assignment

emp_name2 = &emp_name1;
 

then use the VARCHAR pointer in the usual way, as in

EXEC SQL INSERT INTO EMP (EMPNO, ENAME, DEPTNO) 
    VALUES (:emp_number, :emp_name2, :dept_number); 

On Output

VARCHAR Variables When you use a VARCHAR variable as an output host variable, the program interface sets the length member but does not null-terminate the array member. As with character arrays, your program can null-terminate the arr member of a VARCHAR variable before passing it to a function such as printf() or strlen(). An example follows:

emp_name1.arr[emp_name1.len] = '\0'; 
printf("%s", emp_name1.arr); 

Or, you can use the length member to limit the printing of the string, as in:

printf("%.*s", emp_name1.len, emp_name1.arr); 

An advantage of VARCHAR variables over character arrays is that the length of the value returned by Oracle is available immediately. With character arrays, you might need to strip the trailing blanks yourself to get the actual length of the character string.

VARCHAR Pointers When you use a pointer to a VARCHAR as an output host variable, the program interface determines the variable's maximum length by checking the length member (emp_name2->len in our example). So, your program must set this member before every fetch. The fetch then sets the length member to the actual number of characters returned, as the following example shows:

emp_name2->len = 10;  /* Set maximum length of buffer. */ 
EXEC SQL SELECT ENAME INTO :emp_name2 WHERE EMPNO = 7934; 
printf("%d characters returned to emp_name2", emp_name2->len);

Unicode Variables

Pro*C/C++ allows fixed-width Unicode data (character set Unicode Standard Version 3.0, known simply as UCS-16) in host char variables. UCS-16 uses 2 bytes for each character, so it is an unsigned 2-byte datatype. SQL statement text in UCS-16 is not supported yet.

In the following example code a host variable, employee, of the Unicode type utext is declared to be 20 Unicode characters long. A table emp is created containing the column ename, which is 60 bytes long, so that database character sets in Asian languages, where multibyte characters are up to three bytes long, will be supported.

utext employee[20] ;                               /* Unicode host variable   */
EXEC SQL CREATE TABLE emp (ename CHAR(60));
/* ename is in the current database character set  */                                        
EXEC SQL INSERT INTO emp (ename) VALUES ('test') ; 
/* 'test' in NLS_LANG encoding converted to database character set */
EXEC SQL SELECT * INTO :employee FROM emp ;       
/* Database character set converted to Unicode */

A public header file, sqlucs2.h, must be included in your application code. It does the following:

  • Contains the statement:

    #include <oratypes.h>
  • Defines a "Unicode varchar", uvarchar, as:

    struct uvarchar
    {
       ub2 len;
       utext arr[1] ;
    };
    typedef struct uvarchar uvarchar ;
  • Defines a "Unicode long varchar", ulong_varchar, as:

    struct ulong_varchar
    {
       ub4 len ;
       utext arr[1] ;
    }
    typedef struct ulong_varchar ulong_varchar ;

The default datatype of utext is the same as the default for any character variables, CHARZ, which is blank-padded and null-terminated.

Use the CHAR_MAP precompiler option to change the default datatype, as follows:

#include <sqlca.h>
#include <sqlucs2.h>

main()
{
   utext employee1[20] ;

/* Change to STRING datatype:    */
   EXEC ORACLE OPTION (CHAR_MAP=STRING) ;
   utext employee2[20] ;

   EXEC SQL CREATE TABLE emp (ename CHAR(60)) ;
   ...
/***********************************************************  
  Initializing employee1 or employee2 is compiler-dependent.   
 **********************************************************/
   EXEC SQL INSERT INTO emp (ename) VALUES (:employee1) ;
   ...
   EXEC SQL SELECT ename INTO :employee2 FROM emp;
/* employee2 is now not blank-padded and is null-terminated  */
   ...

Restrictions on Unicode Variable Usage

  • Static and dynamic SQL cannot contain Unicode in the SQL statement text. The following is not permitted:

#include oratypes.h
utext sqlstmt[100] ;
...
/* If sqlstmt contains a SQL statement: */
EXEC SQL PREPARE s1 FROM :sqlstmt ;
EXEC SQL EXECUTE IMMEDIATE :sqlstmt ;
...
  • You cannot use type equivalencing for utext variables. The following code is not permitted:

    typedef utext utext_5 ;
    EXEC SQL TYPE utext_5 IS STRING ;

Datatype Conversion

At precompile time, a default external datatype is assigned to each host variable. For example, the precompiler assigns the INTEGER external datatype to host variables of type short int and int.

At run time, the datatype code of every host variable used in a SQL statement is passed to Oracle. Oracle uses the codes to convert between internal and external datatypes.

Before assigning a SELECTed column (or pseudocolumn) value to an output host variable, Oracle must convert the internal datatype of the source column to the datatype of the host variable. Likewise, before assigning or comparing the value of an input host variable to a column, Oracle must convert the external datatype of the host variable to the internal datatype of the target column.

Conversions between internal and external datatypes follow the usual data conversion rules. For example, you can convert a CHAR value of "1234" to a C short value. You cannot convert a CHAR value of "65543" (number too large) or "10F" (number not decimal) to a C short value. Likewise, you cannot convert a char[n] value that contains any alphabetic characters to a NUMBER value.

Datatype Equivalencing

Datatype equivalencing lets you control the way Oracle interprets input data, and the way Oracle formats output data. It provides the ability to override the default external datatypes that the precompiler assigns. On a variable-by-variable basis, you can map (or make equivalent) supported C host variable datatypes to Oracle external datatypes. You can also map user-defined datatypes to Oracle external datatypes.

Host Variable Equivalencing

By default, the Pro*C/C++ Precompiler assigns a specific external datatype to every host variable.

Table 5-2 lists the default assignments:

Table 5-2 Default Type Assignments

C Type, or PseudotypeOracle External TypeNotes

char

char[n]

char*

VARCHAR2

CHARZ

STRING

CHARF

(CHAR_MAP=VARCHAR2)

(DBMS=V7, V8 default)

(CHAR_MAP=STRING)

(CHAR_MAP=CHARF)

int, int*

INTEGER

-

short, short*

INTEGER

-

long, long*

INTEGER

-

long long, long long*

INTEGER

-

float, float*

FLOAT

-

double, double*

FLOAT

-

VARCHAR*, VARCHAR[n]

VARCHAR

-


With the VAR statement, you can override the default assignments by equivalencing host variables to Oracle external datatypes. The syntax you use is

EXEC SQL VAR host_variable IS type_name [ (length) ]; 

where host_variable is an input or output host variable (or host array) declared earlier, type_name is the name of a valid external datatype, and length is an integer literal specifying a valid length in bytes.

Host variable equivalencing is useful in several ways. For example, suppose you want to SELECT employee names from the EMP table, then pass them to a routine that expects null-terminated strings. You need not explicitly null-terminate the names. Simply equivalence a host variable to the STRING external datatype, as follows:

... 
char  emp_name[11]; 
EXEC SQL VAR emp_name IS STRING(11); 

The length of the ENAME column in the EMP table is 10 characters, so you allot the new emp_name 11 characters to accommodate the null terminator. When you SELECT a value from the ENAME column into emp_name, the program interface null-terminates the value for you.

You can use any external datatypes except NUMBER (for example, VARNUM).

User-Defined Type Equivalencing

You can also map (or make equivalent) user-defined datatypes to Oracle external datatypes. First, define a new datatype structured like the external datatype that suits your needs. Then, map your new datatype to the external datatype using the TYPE statement.

With the TYPE statement, you can assign an Oracle external datatype to a whole class of host variables. The syntax you use is:

EXEC SQL TYPE user_type IS type_name [ (length) ] [REFERENCE]; 

Suppose you need a variable-length string datatype to hold graphics characters. First, declare a struct with a short length component followed by a 65533-byte data component. Second, use typedef to define a new datatype based on the struct. Then, equivalence your new user-defined datatype to the VARRAW external datatype, as shown in the following example:

struct  screen 
{ 
    short  len; 
    char   buff[4000]; 
}; 
typedef struct screen graphics; 

EXEC SQL TYPE graphics IS VARRAW(4000); 
graphics  crt;  — host variable of type graphics 
    ... 

You specify a length of 4000 bytes for the new graphics type because that is the maximum length of the data component in your struct. The precompiler allows for the len component (and any padding) when it sends the length to the Oracle server.

REFERENCE Clause

You can declare a user-defined type to be a pointer, either explicitly, as a pointer to a scalar or struct type, or implicitly, as an array, and use this type in an EXEC SQL TYPE statement. In this case, you must use the REFERENCE clause at the end of the statement, as shown in the following example:

typedef unsigned char *my_raw; 
 
EXEC SQL TYPE my_raw IS VARRAW(4000) REFERENCE; 
my_raw    graphics_buffer; 
... 
graphics_buffer = (my_raw) malloc(4004); 

In this example, you allocated additional memory over the type length (4000). This is necessary because the precompiler also returns the length (the size of a short), and can add padding after the length due to word alignment restrictions on your system. If you do not know the alignment practices on your system, make sure to allocate sufficient extra bytes for the length and padding (9 should usually be sufficient).

CHARF External Datatype

CHARF is a fixed-length character string. You can use this datatype in VAR and TYPE statements to equivalence C datatypes to the fixed-length SQL standard datatype CHAR, regardless of the setting of the DBMS or CHAR_MAP option.

When DBMS=V7 or V8, specifying the external datatype CHARACTER in a VAR or TYPE statement equivalences the C datatype to the fixed-length datatype CHAR (datatype code 96). However, when CHAR_MAP=VARCHAR2, the C datatype is equivalenced to the variable-length datatype VARCHAR2 (code 1).

Now, you can always equivalence C datatypes to the fixed-length SQL standard type CHARACTER by using the CHARF datatype in the VAR or TYPE statement. When you use CHARF, the equivalence is always made to the fixed-length character type, regardless of the setting of the DBMS or CHAR_MAP option.

The EXEC SQL VAR and TYPE Directives

You can code an EXEC SQL VAR ... or EXEC SQL TYPE ... statement anywhere in your program. These statements are treated as executable statements that change the datatype of any variable affected by them from the point that the TYPE or VAR statement was made to the end of the scope of the variable. If you precompile with MODE=ANSI, you must use Declare Sections. In this case, the TYPE or VAR statement must be in a Declare Section.

Example: Datatype Equivalencing (sample4.pc):

The demonstration program in this section shows you how you can use datatype equivalencing in your Pro*C/C++ programs. This program is available as sample4.pc in the demo directory.It demonstrates the use of type equivalencing using the LONG VARRAW external datatype. In order to provide a useful example that is portable across different systems, the program inserts binary files into and retrieves them from the database.

This program uses LOB embedded SQL statements. See also Chapter 16, "LOBs".

Please read the introductory comments for an explanation of the program's purpose.

/***************************************************************
sample4.pc
This program demonstrates the use of type equivalencing using the
LONG VARRAW external datatype. In order to provide a useful example
that is portable across different systems, the program inserts
binary files into and retrieves them from the database.  For
example, suppose you have a file called 'hello' in the current
directory.  You can create this file by compiling the following
source code:

#include <stdio.h>

int main()
{
  printf("Hello World!\n");
}

When this program is run, we get:

$hello
Hello World!

Here is some sample output from a run of sample4:

$sample4
Connected.
Do you want to create (or re-create) the EXECUTABLES table (y/n)? y
EXECUTABLES table successfully dropped.  Now creating new table...
EXECUTABLES table created.

Sample 4 Menu.  Would you like to:
(I)nsert a new executable into the database
(R)etrieve an executable from the database
(L)ist the executables stored in the database
(D)elete an executable from the database
(Q)uit the program

Enter i, r, l, or q: l

Executables           Length (bytes)
--------------------  --------------

Total Executables: 0

Sample 4 Menu.  Would you like to:
(I)nsert a new executable into the database
(R)etrieve an executable from the database
(L)ist the executables stored in the database
(D)elete an executable from the database
(Q)uit the program

Enter i, r, l, or q: i
Enter the key under which you will insert this executable: hello
Enter the filename to insert under key 'hello'.
If the file is not in the current directory, enter the full
path: hello
Inserting file 'hello' under key 'hello'...
Inserted.

Sample 4 Menu.  Would you like to:
(I)nsert a new executable into the database
(R)etrieve an executable from the database
(L)ist the executables stored in the database
(D)elete an executable from the database
(Q)uit the program

Enter i, r, l, or q: l

Executables           Length (bytes)
--------------------  --------------
hello                           5508

Total Executables: 1

Sample 4 Menu.  Would you like to:
(I)nsert a new executable into the database
(R)etrieve an executable from the database
(L)ist the executables stored in the database
(D)elete an executable from the database
(Q)uit the program

Enter i, r, l, or q: r
Enter the key for the executable you wish to retrieve: hello
Enter the file to write the executable stored under key hello into.  If you
don't want the file in the current directory, enter the
full path: h1
Retrieving executable stored under key 'hello' to file 'h1'...
Retrieved.

Sample 4 Menu.  Would you like to:
(I)nsert a new executable into the database
(R)etrieve an executable from the database
(L)ist the executables stored in the database
(D)elete an executable from the database
(Q)uit the program

Enter i, r, l, or q: q

We now have the binary file 'h1' created, and we can run it:

$h1
Hello World!
***************************************************************/

#include <oci.h>
#include <string.h>
#include <stdio.h>
#include <sqlca.h>
#include <stdlib.h>
#include <sqlcpr.h>

/* Oracle error code for 'table or view does not exist'. */
#define NON_EXISTENT  -942
#define NOT_FOUND     1403

/* This is the definition of the long varraw structure.
 * Note that the first field, len, is a long instead
 * of a short.  This is becuase the first 4
 * bytes contain the length, not the first 2 bytes.
 */
typedef struct long_varraw {
  ub4  len;
  text buf[1];
} long_varraw;


/* Type Equivalence long_varraw to LONG VARRAW.
 * All variables of type long_varraw from this point
 * on in the file will have external type 95 (LONG VARRAW)
 * associated with them.
 */
EXEC SQL TYPE long_varraw IS LONG VARRAW REFERENCE;


/* This program's functions declared. */
#if defined(__STDC__)
  void do_connect(void);
  void create_table(void);
  void sql_error(char *);
  void list_executables(void);
  void print_menu(void);
  void do_insert(varchar *, char *);
  void do_retrieve(varchar *, char *);
  void do_delete(varchar *);
  ub4  read_file(char *, OCIBlobLocator *);
  void write_file(char *, OCIBlobLocator *);
#else
  void do_connect(/*_ void _*/);
  void create_table(/*_ void _*/);
  void sql_error(/*_ char * _*/);
  void list_executables(/*_ void _*/);
  void print_menu(/*_ void _*/);
  void do_insert(/*_ varchar *, char * _*/);
  void do_retrieve(/*_ varchar *, char * _*/);
  void do_delete(/*_ varchar * _*/);
  ub4  read_file(/*_ char *, OCIBlobLocator * _*/);
  void write_file(/*_ char *, OCIBlobLocator * _*/);
#endif

void main()
{
  char reply[20], filename[100];
  varchar key[20];
  short ok = 1;

  /* Connect to the database. */
  do_connect();

  printf("Do you want to create (or re-create) the EXECUTABLES table (y/n)? ");
  gets(reply);

  if ((reply[0] == 'y') || (reply[0] == 'Y'))
    create_table();

  /* Print the menu, and read in the user's selection. */
  print_menu();
  gets(reply);

  while (ok)
  {
    switch(reply[0]) {
    case 'I': case 'i':
      /* User selected insert - get the key and file name. */
      printf("Enter the key under which you will insert this executable: ");
      key.len = strlen(gets((char *)key.arr));
      printf("Enter the filename to insert under key '%.*s'.\n",
             key.len, key.arr);
      printf("If the file is not in the current directory, enter the full\n");
      printf("path: ");
      gets(filename);
      do_insert((varchar *)&key, filename);
      break;
    case 'R': case 'r':
      /* User selected retrieve - get the key and file name. */
      printf("Enter the key for the executable you wish to retrieve: ");
      key.len = strlen(gets((char *)key.arr));
      printf("Enter the file to write the executable stored under key ");
      printf("%.*s into.  If you\n", key.len, key.arr);
      printf("don't want the file in the current directory, enter the\n");
      printf("full path: ");
      gets(filename);
      do_retrieve((varchar *)&key, filename);
      break;
    case 'L': case 'l':
      /* User selected list - just call the list routine. */
      list_executables();
      break;
    case 'D': case 'd':
      /* User selected delete - get the key for the executable to delete. */
      printf("Enter the key for the executable you wish to delete: ");
      key.len = strlen(gets((char *)key.arr));
      do_delete((varchar *)&key);
      break;
    case 'Q': case 'q':
      /* User selected quit - just end the loop. */
      ok = 0;
      break;
    default:
      /* Invalid selection. */
      printf("Invalid selection.\n");
      break;
    }

    if (ok)
    {
      /* Print the menu again. */
      print_menu();
      gets(reply);
    }
  }

  EXEC SQL COMMIT WORK RELEASE;
}


/* Connect to the database. */
void do_connect()
{
  /* Note this declaration: uid is a char * pointer, so Oracle
     will do a strlen() on it at runtime to determine the length.
   */
  char *uid = "scott/tiger";

  EXEC SQL WHENEVER SQLERROR DO sql_error("do_connect():CONNECT");
  EXEC SQL CONNECT :uid;

  printf("Connected.\n");
}


/* Creates the executables table. */
void create_table()
{
  /* We are going to check for errors ourselves for this statement. */
  EXEC SQL WHENEVER SQLERROR CONTINUE;

  EXEC SQL DROP TABLE EXECUTABLES;
  if (sqlca.sqlcode == 0)
    {
      printf("EXECUTABLES table successfully dropped.  ");
      printf("Now creating new table...\n");
    }
  else if (sqlca.sqlcode == NON_EXISTENT)
    {
      printf("EXECUTABLES table does not exist.  ");
      printf("Now creating new table...\n");
    }
  else
    sql_error("create_table()"); 

  /* Reset error handler. */
  EXEC SQL WHENEVER SQLERROR DO sql_error("create_table():CREATE TABLE");

  EXEC SQL CREATE TABLE EXECUTABLES
    ( name VARCHAR2(30), length NUMBER(10), binary BLOB ) ;

  printf("EXECUTABLES table created.\n");
}

/* Opens the binary file identified by 'filename' for reading, and writes
   it into into a Binary LOB.  Returns the actual length of the file read.
 */
ub4 read_file(filename, blob)
  char *filename;
  OCIBlobLocator *blob;
{
  long_varraw *lvr;
  ub4      bufsize;
  ub4      amt;
  ub4      filelen, remainder, nbytes;
  ub4      offset = 1;
  boolean  last = FALSE;
  FILE    *in_fd;

  /* Open the file for reading. */
  in_fd = fopen(filename, "r");
  if (in_fd == (FILE *)0)
    return (ub4)0;

  /* Determine Total File Length - Total Amount to Write to BLOB */
  (void) fseek(in_fd, 0L, SEEK_END);
  amt = filelen = (ub4)ftell(in_fd);

  /* Determine the Buffer Size and Allocate the LONG VARRAW Object */
  bufsize = 2048;
  lvr = (long_varraw *)malloc(sizeof(ub4) + bufsize);

  nbytes = (filelen > bufsize) ? bufsize : filelen;
      
  /* Reset the File Pointer and Perform the Initial Read */
  (void) fseek(in_fd, 0L, SEEK_SET);
  lvr->len = fread((void *)lvr->buf, (size_t)1, (size_t)nbytes, in_fd);
  remainder = filelen - nbytes;

  EXEC SQL WHENEVER SQLERROR DO sql_error("read_file():WRITE");

  if (remainder == 0)
    {
      /* Write the BLOB in a Single Piece */
      EXEC SQL LOB WRITE ONE :amt
         FROM :lvr WITH LENGTH :nbytes INTO :blob AT :offset;
    }
  else
    {
      /* Write the BLOB in Multiple Pieces using Standard Polling */
      EXEC SQL LOB WRITE FIRST :amt
         FROM :lvr WITH LENGTH :nbytes INTO :blob AT :offset;

      do {

        if (remainder > bufsize)
          nbytes = bufsize;
        else
          {
            nbytes = remainder;
            last = TRUE;
          }

        if ((lvr->len = fread(
              (void *)lvr->buf, (size_t)1, (size_t)nbytes, in_fd)) != nbytes)
          last = TRUE;

        if (last)
          {
            /* Write the Final Piece */
            EXEC SQL LOB WRITE LAST :amt
               FROM :lvr WITH LENGTH :nbytes INTO :blob;
          }
        else
          {
            /* Write an Interim Piece - Still More to Write */
            EXEC SQL LOB WRITE NEXT :amt
               FROM :lvr WITH LENGTH :nbytes INTO :blob;  
          }

        remainder -= nbytes;

      } while (!last && !feof(in_fd));
    }

  /* Close the file, and return the total file size. */
  fclose(in_fd);
  free(lvr);
  return filelen;
}


/* Generic error handler.  The 'routine' parameter should contain the name
   of the routine executing when the error occured.  This would be specified
   in the 'EXEC SQL WHENEVER SQLERROR DO sql_error()' statement.
 */
void sql_error(routine)
  char *routine;
{
  char message_buffer[512];
  size_t buffer_size;
  size_t message_length;

  /* Turn off the call to sql_error() to avoid a possible infinite loop */
  EXEC SQL WHENEVER SQLERROR CONTINUE;

  printf("\nOracle error while executing %s!\n", routine);

  /* Use sqlglm() to get the full text of the error message. */
  buffer_size = sizeof(message_buffer);
  sqlglm(message_buffer, &buffer_size, &message_length);
  printf("%.*s\n", message_length, message_buffer);

  EXEC SQL ROLLBACK WORK RELEASE;
  exit(1);
}


/* Opens the binary file identified by 'filename' for writing, and copies
   the contents of the Binary LOB into it.
 */
void write_file(filename, blob)
  char *filename;
  OCIBlobLocator *blob;
{
  FILE        *out_fd;       /* File descriptor for the output file */
  ub4          amt;
  ub4          bufsize;
  long_varraw *lvr;

  /* Determine the Buffer Size and Allocate the LONG VARRAW Object */
  bufsize = 2048;
  lvr = (long_varraw *)malloc(sizeof(ub4) + bufsize);

  /* Open the output file for Writing */
  out_fd = fopen(filename, "w");
  if (out_fd == (FILE *)0)
    return;

  amt = 0;             /* Initialize for Standard Polling (Possibly) */
  lvr->len = bufsize;                       /* Set the Buffer Length */

  EXEC SQL WHENEVER SQLERROR DO sql_error("write_file():READ");

  /* READ the BLOB using a Standard Polling Loop */
  EXEC SQL WHENEVER NOT FOUND DO break;
  while (TRUE)
    {
      EXEC SQL LOB READ :amt FROM :blob INTO :lvr WITH LENGTH :bufsize;
      (void) fwrite((void *)lvr->buf, (size_t)1, (size_t)lvr->len, out_fd);
    }
  
  EXEC SQL WHENEVER NOT FOUND CONTINUE;

  /* Write the Final Piece (or First and Only Piece if not Polling) */
  (void) fwrite((void *)lvr->buf, (size_t)lvr->len, (size_t)1, out_fd);

  /* Close the Output File and Return */
  fclose(out_fd);
  free(lvr);
  return;
}



/* Inserts the binary file identified by file into the
 * executables table identified by key.
 */
void do_insert(key, file)
  varchar *key;
  char *file;
{
  OCIBlobLocator *blob;
  ub4 loblen, fillen;

  EXEC SQL ALLOCATE :blob;

  EXEC SQL WHENEVER SQLERROR DO sql_error("do_insert():INSERT/SELECT");

  EXEC SQL SAVEPOINT PREINSERT;
  EXEC SQL INSERT
    INTO executables (name, length, binary) VALUES (:key, 0, empty_blob());

  EXEC SQL SELECT binary INTO :blob 
             FROM executables WHERE name = :key FOR UPDATE;

  printf(
    "Inserting file '%s' under key '%.*s'...\n", file, key->len, key->arr); 

  fillen = read_file(file, blob);
  EXEC SQL LOB DESCRIBE :blob GET LENGTH INTO :loblen;

  if ((fillen == 0) || (fillen != loblen))
    {
      printf("Problem reading file '%s'\n", file);
      EXEC SQL ROLLBACK TO SAVEPOINT PREINSERT;
      EXEC SQL FREE :blob;
      return;
    }

  EXEC SQL WHENEVER SQLERROR DO sql_error("do_insert():UPDATE");
  EXEC SQL UPDATE executables
    SET length = :loblen, binary = :blob WHERE name = :key;

  EXEC SQL COMMIT WORK;

  EXEC SQL FREE :blob;
  EXEC SQL COMMIT;
  printf("Inserted.\n");
}


/* Retrieves the executable identified by key into file */
void do_retrieve(key, file)
  varchar *key;
  char *file;
{
  OCIBlobLocator *blob;

  printf("Retrieving executable stored under key '%.*s' to file '%s'...\n",
         key->len, key->arr, file);

  EXEC SQL ALLOCATE :blob;

  EXEC SQL WHENEVER NOT FOUND continue;
  EXEC SQL SELECT binary INTO :blob FROM executables WHERE name = :key;

  if (sqlca.sqlcode == NOT_FOUND)
    printf("Key '%.*s' not found!\n", key->len, key->arr);
  else 
    {
      write_file(file, blob);
      printf("Retrieved.\n");
    }
 
  EXEC SQL FREE :blob;
}


/* Delete an executable from the database */
void do_delete(key)
  varchar *key;
{
  EXEC SQL WHENEVER SQLERROR DO sql_error("do_delete():DELETE");
  EXEC SQL DELETE FROM executables WHERE name = :key;

  if (sqlca.sqlcode == NOT_FOUND)
    printf("Key '%.*s' not found!\n", key->len, key->arr);
  else
    printf("Deleted.\n");
}


/* List all executables currently stored in the database */
void list_executables()
{
  char key[21];
  ub4  length;

  EXEC SQL WHENEVER SQLERROR DO sql_error("list_executables");

  EXEC SQL DECLARE key_cursor CURSOR FOR
    SELECT name, length FROM executables;

  EXEC SQL OPEN key_cursor;

  printf("\nExecutables           Length (bytes)\n");
  printf("--------------------  --------------\n");

  EXEC SQL WHENEVER NOT FOUND DO break;
  while (1)
  {
    EXEC SQL FETCH key_cursor INTO :key, :length;
    printf("%s      %10d\n", key, length);
  }

  EXEC SQL WHENEVER NOT FOUND CONTINUE;
  EXEC SQL CLOSE key_cursor;

  printf("\nTotal Executables: %d\n", sqlca.sqlerrd[2]);  
}


/* Prints the menu selections. */
void print_menu()
{
  printf("\nSample 4 Menu.  Would you like to:\n");
  printf("(I)nsert a new executable into the database\n");
  printf("(R)etrieve an executable from the database\n");
  printf("(L)ist the executables stored in the database\n");
  printf("(D)elete an executable from the database\n");
  printf("(Q)uit the program\n\n");
  printf("Enter i, r, l, or q: ");
}

The C Preprocessor

Pro*C/C++ supports most C preprocessor directives. Some of the things that you can do using the Pro*C/C++ preprocessor are:

  • Define constants and macros using the #define directive, and use the defined entities to parameterize Pro*C/C++ datatype declarations, such as VARCHAR

  • Read files required by the precompiler, such as sqlca.h, using the #include directive

  • Define constants and macros in a separate file, and have the precompiler read this file using the #include directive

How the Pro*C/C++ Preprocessor Works

The Pro*C/C++ preprocessor recognizes most C preprocessor commands, and effectively performs the required macro substitutions, file inclusions, and conditional source text inclusions or exclusions. The Pro*C/C++ preprocessor uses the values obtained from preprocessing, and alters the source output text (the generated .c output file).

An example should clarify this point. Consider the following program fragment:

#include "my_header.h" 
... 
VARCHAR name[VC_LEN];              /* a Pro*C-supplied datatype */ 
char    another_name[VC_LEN];              /* a pure C datatype */
... 

Suppose the file my_header.h in the current directory contains, among other things, the line

#define VC_LEN   20 

The precompiler reads the file my_header.h, and uses the defined value of VC_LEN (20), declares the structure of name as VARCHAR[20].

char is a native type. The precompiler does not substitute 20 in the declaration of another_name[VC_LEN].

This does not matter, since the precompiler does not need to process declarations of C datatypes, even when they are used as host variables. It is left up to the C compiler's preprocessor to actually include the file my_header.h, and perform the substitution of 20 for VC_LEN in the declaration of another_name.

Preprocessor Directives

The preprocessor directives that Pro*C/C++ supports are:

  • #define, to create macros for use by the precompiler and the C or C++ compiler

  • #include, to read other source files for use by the precompiler

  • #if, to precompile and compile source text based on evaluation of a constant expression to 0

  • #ifdef, to precompile and compile source text conditionally, depending on the existence of a defined constant

  • #ifndef, to exclude source text conditionally

  • #endif, to end an #if or #ifdef or #ifndef command

  • #else, to select an alternative body of source text to be precompiled and compiled, in case an #if or #ifdef or #ifndef condition is not satisfied

  • #elif, to select an alternative body of source text to be precompiled and compiled, depending on the value of a constant or a macro argument

Directives Ignored

Some C preprocessor directives are not used by the Pro*C/C++ preprocessor. Most of these directives are not relevant for the precompiler. For example, #pragma is a directive for the C compiler—the precompiler does not process it. The C preprocessor directives not processed by the precompiler are:

  • #, to convert a preprocessor macro parameter to a string constant

  • ##, to merge two preprocessor tokens in a macro definition

  • #error, to produce a compile-time error message

  • #pragma, to pass implementation-dependent information to the C compiler

  • #line, to supply a line number for C compiler messages

While your C compiler preprocessor may support these directives, Pro*C/C++ does not use them. Most of these directives are not used by the precompiler. You can use these directives in your Pro*C/C++ program if your compiler supports them, but only in C or C++ code, not in embedded SQL statements or declarations of variables using datatypes supplied by the precompiler, such as VARCHAR.

ORA_PROC Macro

Pro*C/C++ predefines a C preprocessor macro called ORA_PROC that you can use to avoid having the precompiler process unnecessary or irrelevant sections of code. Some applications include large header files, which provide information that is unnecessary when precompiling. By conditionally excluding such header files based on the ORA_PROC macro, the precompiler never reads the file.

The following example uses the ORA_PROC macro to exclude the irrelevant.h file:

#ifndef  ORA_PROC
#include <irrelevant.h>
#endif

Because ORA_PROC is defined during precompilation, the irrelevant.h file is never included.

The ORA_PROC macro is available only for C preprocessor directives, such as #ifdef or #ifndef. The EXEC ORACLE conditional statements do not share the same namespaces as the C preprocessor macros. Therefore, the condition in the following example does not use the predefined ORA_PROC macro:

EXEC ORACLE IFNDEF ORA_PROC;
   <section of code to be ignored>
EXEC ORACLE ENDIF;

ORA_PROC, in this case, must be set using either the DEFINE option or an EXEC ORACLE DEFINE statement for this conditional code fragment to work properly.

Location of Header File Specification

The Pro*C/C++ Precompiler for each system assumes a standard location for header files to be read by the preprocessor, such as sqlca.h, oraca.h, and sqlda.h. For example, on most UNIX systems, the standard location is $ORACLE_HOME/precomp/public. For the default location on your system, see your system-specific Oracle documentation. If header files that you need to include are not in the default location, you must use the INCLUDE= option, on the command line or as an EXEC ORACLE option.

To specify the location of system header files, such as stdio.h or iostream.h, where the location might be different from that hard-coded into Pro*C/C++ use the SYS_INCLUDE precompiler option.


See Also:

Chapter 10, " Precompiler Options" for information on the precompiler options, and about the EXEC ORACLE options.

Some Preprocessor Examples

You can use the #define command to create named constants, and use them in place of "magic numbers" in your source code. You can use #defined constants for declarations that the precompiler requires, such as VARCHAR[const]. For example, instead of code with bugs, such as:

... 
VARCHAR  emp_name[10]; 
VARCHAR  dept_loc[14]; 
... 
... 
/* much later in the code ... */ 
f42() 
{ 
    /* did you remember the correct size? */
    VARCHAR new_dept_loc[10]; 
   ... 
} 

you can code:

#define ENAME_LEN     10 
#define LOCATION_LEN  14 
VARCHAR  new_emp_name[ENAME_LEN]; 
   ... 
/* much later in the code ... */ 
f42() 
{ 
    VARCHAR new_dept_loc[LOCATION_LEN]; 
   ... 
} 

You can use preprocessor macros with arguments for objects that the precompiler must process, just as you can for C objects. For example:

#define ENAME_LEN    10 
#define LOCATION_LEN 14 
#define MAX(A,B)  ((A) > (B) ? (A) : (B)) 
 
   ... 
f43() 
{ 
    /* need to declare a temporary variable to hold either an 
       employee name or a department location */ 
    VARCHAR  name_loc_temp[MAX(ENAME_LEN, LOCATION_LEN)]; 
   ... 
} 

You can use the #include, #ifdef and #endif preprocessor directives to conditionally include a file that the precompiler requires. For example:

#ifdef ORACLE_MODE 
#include <sqlca.h> 
#else 
    long SQLCODE; 
#endif 

Using #define

There are restrictions on the use of the #define preprocessor directive in Pro*C/C++ You cannot use the #define directive to create symbolic constants for use in executable SQL statements. The following invalid example demonstrates this:

#define RESEARCH_DEPT   40 
... 
EXEC SQL SELECT empno, sal 
    INTO :emp_number, :salary /* host arrays */
    FROM emp 
    WHERE deptno = RESEARCH_DEPT;  /* INVALID! */

The only declarative SQL statements where you can legally use a #defined macro are TYPE and VAR statements. So, for example, the following uses of a macro are legal in Pro*C/C++

#define STR_LEN      40
...
typedef char asciiz[STR_LEN];
...
EXEC SQL TYPE asciiz IS STRING(STR_LEN) REFERENCE;
...
EXEC SQL VAR password IS STRING(STR_LEN);

Other Preprocessor Restrictions

The preprocessor ignores directives # and ## to create tokens that the precompiler must recognize. You can use these commands (if your compiler supports them) in pure C code that the precompiler does not have to process. Using the preprocessor command ## is not valid in this example:

#define MAKE_COL_NAME(A)    col ## A 
... 
EXEC SQL SELECT MAKE_COL_NAME(1), MAKE_COL_NAME(2) 
    INTO :x, :y 
    FROM table1; 

The example is incorrect because the precompiler ignores ##.

SQL Statements Not Allowed in #include

Because of the way the Pro*C/C++ preprocessor handles the #include directive, as described in the previous section, you cannot use the #include directive to include files that contain embedded SQL statements. You use #include to include files that contain purely declarative statements and directives; for example, #defines, and declarations of variables and structures required by the precompiler, such as in sqlca.h.

Include the SQLCA, ORACA, and SQLDA

You can include the sqlca.h, oraca.h, and sqlda.h declaration header files in your Pro*C/C++ program using either the C/C++ preprocessor #include command, or the precompiler EXEC SQL INCLUDE command. For example, you use the following statement to include the SQL Communications Area structure (SQLCA) in your program with the EXEC SQL option:

EXEC SQL INCLUDE sqlca; 

To include the SQLCA using the C/C++ preprocessor directive, add the following code:

#include <sqlca.h> 

See Also:

Chapter 9, "Handling Runtime Errors" for complete information on the content of the sqlca.h, oraca.h, and the sqlda.h header files.

When you use the preprocessor #include directive, you must specify the file extension (such as .h).


Note:

If you need to include the SQLCA in multiple places, using the #include directive, you should precede the #include with the directive #undef SQLCA. This is because sqlca.h starts with the lines
      #ifndef SQLCA
      #define SQLCA 1

and then declares the SQLCA struct only in the case that SQLCA is not defined.


When you precompile a file that contains a #include directive or an EXEC SQL INCLUDE statement, you have to tell the precompiler the location of all files to be included. You can use the INCLUDE= option, either in the command line, or in the system configuration file, or in the user configuration file.


See Also:

Chapter 10, " Precompiler Options" for more information about the INCLUDE precompiler option, the precedence of searches for included files, and configuration files.

The default location for standard preprocessor header files, such as sqlca.h, oraca.h, and sqlda.h, is preset in the precompiler. The location varies from system to system. See your system-specific Oracle documentation for the default location on your system.

When you compile the .c output file that Pro*C/C++ generates, you must use the option provided by your compiler and operating system to identify the location of included files.

For example, on most UNIX systems, you can compile the generated C source file using the command

cc -o progname -I$ORACLE_HOME/sqllib/public ... filename.c ... 

On VAX/OPENVMS systems, you pre-pend the include directory path to the value in the logical VAXC$INCLUDE.

EXEC SQL INCLUDE and #include Summary

When you use an EXEC SQL INCLUDE statement in your program, the precompiler includes the source text in the output (.c) file. Therefore, you can have declarative and executable embedded SQL statements in a file that is included using EXEC SQL INCLUDE.

When you include a file using #include, the precompiler merely reads the file, and keeps track of #defined macros.


Caution:

VARCHAR declarations and SQL statements are not allowed in included (#include) files. For this reason, you cannot use SQL statements in files included using the Pro*C/C++ preprocessor #include directive.

Defined Macros

If you define macros on the C compiler's command line, you might also have to define these macros on the precompiler command line, depending on the requirements of your application. For example, if you compile with a UNIX command line such as

cc -DDEBUG ...

you should precompile using the DEFINE= option, namely

proc DEFINE=DEBUG ...

Include Files

The location of all included files that need to be precompiled must be specified on the command line, or in a configuration file.

For example, if you are developing under UNIX, and your application includes files in the directory /home/project42/include, you must specify this directory both on the Pro*C/C++ command line and on the cc command line. You use commands like these:

proc iname=my_app.pc include=/home/project42/include ...
cc -I/home/project42/include ... my_app.c

or you include the appropriate macros in a makefile. For complete information about compiling and linking your Pro*C/C++ application, see your system-specific Oracle documentation.


See Also:

"INCLUDE", for complete information about precompiler options and configuration files.

Precompiled Header Files

Precompiled header files save time and resources by precompiling header files that contain many #include statements. The two steps in using this feature are:

  • The precompiled header file is created first,

  • The precompiled header is then automatically used in subsequent precompilation of your application.

Use this capability with large applications that have many modules.

The precompiler option, HEADER=hdr, specifies

  • That precompiled headers are to be used,

  • That the file extension for the output file to be generated is hdr.

This option can only be entered in a configuration file or on the command line. There is no default value for HEADER, but the input header must have a .h extension.

Precompiled Header File Creation

Assume that you have a header file called top.h.Then you can precompile it, specifying that HEADER=hdr:

proc HEADER=hdr INAME=top.h

Note:

You must provide the '.h' extension. You cannot use an absolute path element or relative path elements such as '/', '..', and so on., in the INAME value.

Pro*C/C++ precompiles the given input file, top.h, and generates a new precompiled header file, top.hdr, in the same directory. The output file, top.hdr, can be moved to a directory that the #include statement will cause to be searched.


Note:

Do not use the ONAME option to name the output file; it is ignored when used with HEADER.

Use of the Precompiled Header Files

Use the same value of the HEADER option with an application file that is to be precompiled. If simple.pc contains:

#include <top.h>
...

and top.h contains:

#include <a.h>
#include <b.h>
#include <c.h>
...

then precompile this way:

proc HEADER=hdr INAME=simple.pc

When Pro*C/C++ reads the #include top.h statement, it will search for a corresponding 'top.hdr' file and instantiate the data from that file instead of precompiling 'top.h' again.


Note:

A precompiled header file will always be used instead of its input header file even if the input (.h) file appears first in the standard search hierarchy of the include directories.

Examples

This section includes examples demonstrating several different cases.

Redundant File Inclusion

The following two cases illustrate two possibilities for redundant file inclusion.

Case 1: Top-Level Header File Inclusion

A precompiled header file will only be instantiated once regardless of how many times the file is included using a #include directive.

Suppose we precompile a top-level header file, top.h, with the value of HEADER set to 'hdr' as before. Next, we code multiple #include directives for that header file in a program:

#include <top.h>
#include <top.h>
main(){}

When the first #include for top.h is encountered, the precompiled header file, top.hdr, will be instantiated. The second inclusion of that same header file will be redundant and thus, will be ignored.

Case 2: Nested Header File Inclusion

Suppose the file a.h contains the following statement:

#include <b.h>

and that we precompile that header file specifying HEADER as before. Pro*C/C++ will precompile both a.h and b.h generating a.hdr as a result.

Now suppose we precompile this Pro*C/C++ program:

#include <a.h>
#include <b.h>
main(){}

When the #include for a.h is encountered, the a.hdr precompiled header file will be instantiated instead of precompiling a.h again. This instantiation will also contain the entire contents of b.h.

Now, because b.h was included in the precompilation of a.h, and a.hdr was instantiated, the subsequent #include of b.h in our program is redundant and thus, will be ignored.

Multiple Precompiled Header Files

Pro*C/C++ is capable of instantiating more than one different precompiled header file in a single precompilation. However, one pitfall to avoid occurs when two or more precompiled header files share common header files.

For example, suppose topA.h contains the following lines:

#include <a.h>
#include <c.h>

and that topB.h contains the following lines:

#include <b.h>
#include <c.h>

Notice how topA.h and topB.h both include the same common header file, c.h. Precompiling topA.h and topB.h with the same HEADER value will yield topA.hdr and topB.hdr. Both, however, will contain the entire contents of c.h.

Now suppose we have a Pro*C/C++ program:

#include <topA.h>
#include <topB.h>
main(){}

Both precompiled header files, topA.hdr and topB.hdr will be instantiated as before. However, because each shares the common header file, c.h, the contents of that file will be instantiated twice.

Pro*C/C++ cannot determine when such commonality is occurring among precompiled header files. Try to have each precompiled header file contain a unique set of included headers. Sharing headers should be avoided as much as possible because it will ultimately slow down precompilation and utilize more memory, thus undermining the basic intent of using precompiled header files.

List of Header Files

The ORACLE_BASE\ORACLE_HOME\precomp\public directory contains the Pro*C/C++ header files. Table 5-3 lists and describes the header files.

Table 5-3 Header Files

Header FilesDescription

oraca.h

Contains the Oracle Communications Area (ORACA), which helps you to diagnose runtime errors and to monitor your program's use of various Oracle Database 10g resources.

sql2oci.h

Contains SQLLIB functions that enable the Oracle Call Interface (OCI) environment handle and OCI service context to be obtained in a Pro*C/C++ application.

sqlapr.h

Contains ANSI prototypes for externalized functions that can be used in conjunction with OCI.

sqlca.h

Contains the SQL Communications Area (SQLCA), which helps you to diagnose runtime errors. The SQLCA is updated after every executable SQL statement.

sqlcpr.h

Contains platform-specific ANSI prototypes for SQLLIB functions that are generated by Pro*C/C++. By default, Pro*C/C++ does not support full-function prototyping of SQL programming calls. If you need this feature, include sqlcpr.h before any EXEC SQL statements in your application source file.

oraca.h

Contains the Oracle Communications Area (ORACA), which helps you to diagnose runtime errors and to monitor your program's use of various Oracle Database 10g resources.

sql2oci.h

Contains SQLLIB functions that enable the Oracle Call Interface (OCI) environment handle and OCI service context to be obtained in a Pro*C/C++ application.

sqlapr.h

Contains ANSI prototypes for externalized functions that can be used in conjunction with OCI.


Effects of Options

The following precompiler options are used with the precompilation of the application.

DEFINE and INCLUDE Options

During any precompilation using precompiled headers, you must use the same values for DEFINE and INCLUDE as when you created the precompiled header files. If the values of DEFINE or INCLUDE change, you must re-create the precompiled header files.

If development environments change, you must also re-create the precompiled header files.

Single User Scenario

Consider a single user. If the values of either the DEFINE or the INCLUDE options were to change, then the contents of the precompiled header files may no longer be suitable for use in subsequent Pro*C/C++ precompilations.

Because the values of the DEFINE and INCLUDE; DEFINE or INCLUDE options have changed, the contents of the precompiled header file may no longer be consistent with what a standard precompilation would result in had the corresponding .h file in the #include directive been processed normally.

In short, if the values of the DEFINE and INCLUDE; DEFINE or INCLUDE options change, any precompiled header files must be re-created and Pro*C/C++ programs which use them re-precompiled.


See Also:


Multiple User Scenario

Consider two users, A and B, who develop in totally separate environments, thus having completely different values for their DEFINE and INCLUDE options.

User A precompiles a common header file, common.h, creating a precompiled header file common.hdrA. User B also precompiles the same header file creating common.hdrB. However, given that the two environments are different, specifically with respect to the values of the DEFINE and INCLUDE options used by both users, it is not guaranteed that both user A's and B's versions of common.hdr will be the same.

To summarize

A> proc HEADER=hdrA DEFINE=<A macros> INCLUDE=<A dirs> common.h

B> proc HEADER=hdrB DEFINE=<B macros> INCLUDE=<B dirs> common.h

The generated precompiled header files common.hdrA may not equal common.hdrB because of the different environments in which they where created. This means that neither user A nor user B would be guaranteed that using the common.hdr created by the other user would result in correct precompilation of the Pro*C/C++ programs in their respective development environments.

Therefore, care should be taken when sharing or exchanging precompiled header files between different users and different users' development environments.

CODE and PARSE Options

Pro*C/C++ does not search for C++ header files with extensions such as hpp or h++. So do not use CODE=CPP when precompiling header files. You may use the CPP value when precompiling the application, as long as the source code only includes .h header files.

You can only use the values FULL or PARTIAL for the option PARSE when creating the precompiled header files, or when precompiling the modules. The value FULL is considered to be of higher value than PARTIAL. The value of PARSE used should be the same or lower when precompiling modules as when you created the precompiled header files.


Note:

Precompiling the precompiled header file with PARSE=FULL and then precompiling modules with PARSE=PARTIAL requires that the host variables be declared inside a Declare Section. C++ code will only be understood when PARSE=PARTIAL.

Suppose we precompile a header file with PARSE set to PARTIAL as follows:

proc HEADER=hdr PARSE=PARTIAL file.h

and then try to precompile a program that includes that header file using PARSE set to FULL:

proc HEADER=hdr PARSE=FULL program.pc

Because file.h was precompiled using a PARTIAL setting for the PARSE option, not all of the header file would have been processed. It would therefore be possible for an error to occur during the precompilation of the Pro*C/C++ program if a reference was made to something in the unprocessed portion.

To illustrate, suppose that file.h contained the following code:

#define LENGTH 10
typedef int myint;

and that our program.pc contained the following short program:

#include <file.h>
main()
{
     VARCHAR ename[LENGTH];
     myint empno = ...;
     EXEC SQL SELECT ename INTO :ename WHERE JOB = :empno;
}

Because PARSE was set to PARTIAL when precompiling file.h, only the LENGTH macro would have been processed leaving the typedef unseen.

The VARCHAR declaration and subsequent use as a host variable would succeed. However, the use of the empno host variable would not because the myint type declaration would never have been processed by Pro*C/C++.

Precompiling the header file with the PARSE option set to FULL and then precompiling the program with PARSE set to PARTIAL would work. However, the host variables would have to be declared inside an explicit DECLARE SECTION.

Usage Notes

The file format of the generated output file of a precompiled header is not guaranteed to remain fixed from one release to the next. Pro*C/C++ has no way of determining which version of the precompiler was used to generate the precompiled header file output.

Because of this, it is strongly recommended that, in order to avoid the possibility of errors or other strange behavior during a precompilation that uses precompiled header files, those files be regenerated by re-precompiling the corresponding header files when upgrading to newer releases of Pro*C/C++.

The generated output from the precompilation of a header file is completely non-portable. This means that you cannot transfer the output file from the precompilation of a header file from one platform to another and use that file during the subsequent precompilation of another header file or Pro*C/C++ program.

The Oracle Preprocessor

Conditional sections of code are marked by EXEC ORACLE directives that define the environment and actions to take. You can code C statements as well as embedded SQL statements and directives in these sections. The following EXEC ORACLE directives let you exercise conditional control over precompilation:

EXEC ORACLE DEFINE symbol;    -- define a symbol 
EXEC ORACLE IFDEF symbol;     -- if symbol is defined 
EXEC ORACLE IFNDEF symbol;    -- if symbol is not defined 
EXEC ORACLE ELSE;             -- otherwise 
EXEC ORACLE ENDIF;            -- end this block 

All EXEC ORACLE statements must be terminated with a semi-colon.

Symbol Definition

You can define a symbol in two ways. Either include the statement:

EXEC ORACLE DEFINE symbol;

in your host program or define the symbol on the command line using the syntax

... INAME=filename ... DEFINE=symbol 

where symbol is not case-sensitive.


Note:

The #define preprocessor directive is not the same as the EXEC ORACLE DEFINE command.

Some port-specific symbols are predefined for you when the Pro*C/C++ precompiler is installed on your system.

An Oracle Preprocessor Example

In the following example, the SELECT statement is precompiled only when the symbol site2 is defined:

EXEC ORACLE IFDEF site2; 
    EXEC SQL SELECT DNAME 
        INTO :dept_name 
        FROM DEPT 
        WHERE DEPTNO = :dept_number; 
EXEC ORACLE ENDIF; 

Blocks of conditions can be nested as shown in the following example:

EXEC ORACLE IFDEF outer; 
    EXEC ORACLE IFDEF inner; 
    ... 
    EXEC ORACLE ENDIF; 
EXEC ORACLE ENDIF;

You can "Comment out" C or embedded SQL code by placing it between IFDEF and ENDIF and not defining the symbol.

Evaluation of Numeric Constants

Previously, Pro*C/C++ allowed only numeric literals and simple constant expressions involving numeric literals to be used when declaring the sizes of host variables (such as char or VARCHAR), as in the following examples:

   #define LENGTH 10
   VARCHAR v[LENGTH];
   char c[LENGTH + 1];

You can now also use numeric constant declarations such as:

   const int length = 10;
   VARCHAR v[length];
   char c[length + 1];

This is highly desirable, especially for programmers who use ANSI or C++ compilers that support such constant declarations.

Pro*C/C++ has always determined the values of constant expressions that can be evaluated, but it has never allowed the use of a numeric constant declaration in any constant expression.

Pro*C/C++ supports the use of numeric constant declarations anywhere that an ordinary numeric literal or macro is used, given the macro expands to some numeric literal.

This is used primarily for declaring the sizes of arrays for bind variables to be used in a SQL statement.

Numeric Constants in Pro*C/C++

In Pro*C/C++, normal C scoping rules are used to find and locate the declaration of a numeric constant declaration.

     const int g = 30;     /* Global declaration to both function_1()
                                                  and function_2() */
     void function_1()
     {
       const int a = 10;  /* Local declaration only to function_1() */
       char x[a];
       exec sql select ename into :x from emp where job = 'PRESIDENT';
     }

     void function_2()
     {
       const int a = 20;  /* Local declaration only to function_2() */
       VARCHAR v[a];
       exec sql select ename into :v from emp where job = 'PRESIDENT';
     }

     void main()
     {
       char m[g];                                   /* The global g */
       exec sql select ename into :m from emp where job = 'PRESIDENT';
     }

Numeric Constant Rules and Examples

Variables which are of specific static types need to be defined with static and initialized. The following rules must be kept in mind when declaring numeric constants in Pro*C/C++:

  • The const qualifier must be used when declaring the constant

  • An initializer must be used to initialize the value of the constant. This initializer must be precompile-time evaluable.

Any attempt to use an identifier that does not resolve to a constant declaration with a valid initializer is considered an error.

The following shows examples of what is not permitted and why:

int a;
int b = 10;
volatile c;
volatile d = 10;
const e;
const f = b;

VARCHAR v1[a]; /* No const qualifier, missing initializer */
VARCHAR v2[b];                      /* No const qualifier */
VARCHAR v3[c];     /* Not a constant, missing initializer */
VARCHAR v4[d];                          /* Not a constant */
VARCHAR v5[e];                     /* Missing initializer */
VARCHAR v6[f];   /* Bad initializer.. b is not a constant */

SQLLIB Extensions for OCI Release 8 Interoperability

An OCI environment handle will be tied to the Pro*C/C++ runtime context, which is of the sql_context type. That is, one Pro*C/C++ runtime context maintained by SQLLIB during application execution will be associated with at most one OCI environment handle. Multiple database connections are allowed for each Pro*C/C++ runtime context, which will be associated to the OCI environment handle for the runtime context.


Note:

Precompiler applications can extract OCI handles and call OCI functions directly. However, non-blocking mode is not supported because the precompilers are unable to handle the "still executing" error that might be returned.

Runtime Context in the OCI Release 8 Environment

An EXEC SQL CONTEXT USE statement specifies a runtime context to be used in a Pro*C/C++ program. This context applies to all executable SQL statements that positionally follow it in a given Pro*C/C++ file until another EXEC SQL CONTEXT USE statement occurs. If no EXEC SQL CONTEXT USE appears in a source file, the default "global" context is assumed. Thus, the current runtime context, and therefore the current OCI environment handle, is known at any point in the program.

The runtime context and its associated OCI environment handle are initialized when a database logon is performed using EXEC SQL CONNECT in Pro*C/C++.

When a Pro*C/C++ runtime context is freed using the EXEC SQL CONTEXT FREE statement, the associated OCI environment handle is terminated and all of its resources, such as space allocated for the various OCI handles and LOB locators, are de-allocated. This command releases all other memory associated with the Pro*C/C++ runtime context. An OCI environment handle that is established for the default "global" runtime remains allocated until the Pro*C/C++ program terminates.

Parameters in the OCI Release 8 Environment Handle

An OCI environment established through Pro*C/C++ will use the following parameters:

  • The callback functions used by the environment for allocating memory, freeing memory, writing to a text file, and flushing the output buffer will be trivial functions that call malloc(), free(), fprintf(stderr, ...), and fflush(stderr) respectively.

  • The language will be obtained from the Globalization Support variable NLS_LANG.

  • The error message buffer will be allocated in thread-specific storage.

Interface to OCI Release 8

SQLLIB library provides routines to obtain the OCI environment and service context handles for database connections established through a Pro*C/C++ program. Once the OCI handles are obtained, the user can call various OCI routines, for example, to perform client-side DATE arithmetic, execute navigational operations on objects and so on. These SQLLIB functions are described later, and their prototypes are available in the public header file sql2oci.h.

A Pro*C/C++ user who mixes embedded SQL and calls in the other Oracle programmatic interfaces must exercise reasonable care. For example, if a user terminates a connection directly using the OCI interface, SQLLIB state is out-of-sync; the behavior for subsequent SQL statements in the Pro*C/C++ program is undefined in such cases.


Note:

Pro*C/C++, the Oracle Call Interface (OCI) release 8, and XA are not compatible.

The new SQLLIB functions that provide interoperability with the Oracle OCI are declared in header file sql2oci.h:

  • SQLEnvGet(), to return a pointer to an OCI environment handle associated with a given SQLLIB runtime context. Used for both single and shared server environments.

  • SQLSvcCtxGet(), to return an OCI service context handle for a Pro*C/C++ database connection. Used for both single and shared server environments.

  • Pass the constant SQL_SINGLE_RCTX, defined as (dvoid *)0, when you include sql2oci.h, as the first parameter in either function, when using single threaded runtime contexts.

SQLEnvGet()

The SQLLIB library function SQLEnvGet() (SQLLIB OCI Environment Get) returns the pointer to the OCI environment handle associated with a given SQLLIB runtime context. The prototype for this function is:

sword SQLEnvGet(dvoid *rctx, OCIEnv **oeh);

where:

TermsDescription
DescriptionSets oeh to the OCIEnv corresponding to the runtime context
Parametersrctx (IN) pointer to a SQLLIB runtime context

oeh (OUT) pointer to OCIEnv

ReturnsSQL_SUCCESS on success

SQL_ERROR on failure

NotesThe usual error status variables in Pro*C/C++ such as SQLCA and SQLSTATE will not be affected by a call to this function

SQLSvcCtxGet()

The SQLLIB library function SQLSvcCtxGet() (SQLLIB OCI Service Context Get) returns the OCI service context for the Pro*C/C++ database connection. The OCI service context can then be used in direct calls to OCI functions. The prototype for this function is:

sword SQLSvcCtxGet(dvoid *rctx, text *dbname,
       sb4 dbnamelen, OCISvcCtx **svc);

where:

TermsDescription
DescriptionSets svc to the OCI Service Context corresponding to the runtime context
Parametersrctx (IN) = pointer to a SQLLIB runtime context

dbname (IN) = buffer containing the "logical" name for this connection

dbnamelen (IN) = length of the dbname buffer

svc (OUT) = address of an OCISvcCtx pointer

ReturnsSQL_SUCCESS on success

SQL_ERROR on failure

Notes1. The usual error status variables in Pro*C/C++ such as SQLCA and SQLSTATE will not be affected by a call to this function

2. dbname is the same identifier used in an AT clause in an embedded SQL statement.

3. If dbname is a null pointer or dbnamelen is 0, then the default database connection is assumed, as in a SQL statement with no AT clause.

4. A value of -1 for dbnamelen is used to indicate that dbname is a zero-terminated string.


Embedded OCI Release 8 Calls

To embed OCI release 8 calls in your Pro*C/C++ program:

1. Include the public header sql2oci.h

2. Declare an environment handle (type OCIEnv *) in your Pro*C/C++ program:

OCIEnv *oeh;

3. Optionally, declare a service context handle (type OCISvcCtx *) in your Pro*C/C++ program if the OCI function you wish to call requires the Service Context handle.

OCISvcCtx *svc;

4. Declare an error handle (type OCIError *) in your Pro*C/C++ program:

OCIError *err;

5. Connect to Oracle using the embedded SQL statement CONNECT. Do not connect using OCI.

EXEC SQL CONNECT ...

6. Obtain the OCI Environment handle that is associated with the desired runtime context using the SQLEnvGet function.

For single threaded applications:

retcode = SQLEnvGet(SQL_SINGLE_RCTX, &oeh);

or for shared server applications:

sql_context ctx1;
...
EXEC SQL CONTEXT ALLOCATE :ctx1;
EXEC SQL CONTEXT USE :ctx1;
...
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
...
retcode = SQLEnvGet(ctx1, &oeh);

7. Allocate an OCI error handle using the retrieved environment handle:

retcode = OCIHandleAlloc((dvoid *)oeh, (dvoid **)&err, 
                    (ub4)OCI_HTYPE_ERROR, (ub4)0, (dvoid **)0);

8. Optionally, if needed by the OCI call you use, obtain the OCIServiceContext handle using the SQLSvcCtxGet call:

For single threaded applications:

retcode = SQLSvcCtxGet(SQL_SINGLE_RCTX, (text *)dbname, (ub4)dbnlen, &svc);

or, for shared server environment applications:

sql_context ctx1;
...
EXEC SQL ALLOCATE :ctx1;
EXEC SQL CONTEXT USE :ctx1;
...
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd AT :dbname
     USING :hst;
...
retcode = SQLSvcCtxGet(ctx1, (text *)dbname, (ub4)strlen(dbname), &svc);

Note:

A null pointer may be passed as the dbname if the Pro*C/C++ connection is not named with an AT clause.

Embedded OCI Release 7 Calls


Note:

The Logon Data Area (LDA) is no longer supported. The ability to embed OCI Release 7 calls in your Pro*C/C++ program is not supported.

To embed OCI release 7 calls in your Pro*C/C++ program, take the following steps:

  • Declare an OCI Logon Data Area (LDA) in your Pro*C/C++ program (outside the Declare Section if you precompile with MODE=ANSI). The LDA is a structure defined in the OCI header file oci.h. For details, see the Oracle Call Interface programmer's Guide for Release 7.

  • Connect to Oracle using the embedded SQL statement CONNECT, not the OCI orlon() or onblon() calls.

  • Call the SQLLIB runtime library function sqllda() to set up the LDA.SQLLIB function

That way, the Pro*C/C++ Precompiler and the OCI "know" that they are working together. However, there is no sharing of Oracle cursors.

You need not worry about declaring the OCI Host Data Area (HDA) because the Oracle runtime library manages connections and maintains the HDA for you.

Set Up the LDA

You set up the LDA by issuing the OCI call

sqllda(&lda); 

where lda identifies the LDA data structure.

If the setup fails, the lda_rc field in the lda is set to 1012 to indicate the error.

Remote and Multiple Connections

A call to sqllda() sets up an LDA for the connection used by the most recently executed SQL statement. To set up the different LDAs needed for additional connections, you must call sqllda() with a different LDA immediately after each CONNECT. In the following example, you connect to two nondefault databases concurrently:

#include <ocidfn.h>
Lda_Def lda1;
Lda_Def lda2;

char username[10], password[10], db_string1[20], dbstring2[20];
...
strcpy(username, "scott");
strcpy(password, "tiger");
strcpy(db_string1, "NYNON");
strcpy(db_string2, "CHINON");
/* give each database connection a unique name */
EXEC SQL DECLARE DB_NAME1 DATABASE;
EXEC SQL DECLARE DB_NAME2 DATABASE;
/* connect to first nondefault database */
EXEC SQL CONNECT :username IDENTIFIED BY :password;
    AT DB_NAME1 USING :db_string1;
/* set up first LDA */
sqllda(&lda1);
/* connect to second nondefault database */
EXEC SQL CONNECT :username IDENTIFIED BY :password;
    AT DB_NAME2 USING :db_string2;
/* set up second LDA */
sqllda(&lda2);

DB_NAME1 and DB_NAME2 are not C variables; they are SQL identifiers. You use them only to name the default databases at the two nondefault nodes, so that later SQL statements can refer to the databases by name.

New Names for SQLLIB Public Functions

The names of SQLLIB functions are listed in Table 5-4. You can use these SQLLIB functions for both threaded and nonthreaded applications. Previously, for example, sqlglm() was documented as the nonthreaded or default context version of this function, while sqlglmt() was the threaded or nondefault context version, with context as the first argument. The names sqlglm() and sqlglmt() are still available. The new function SQLErrorGetText() requires the same arguments as sqlglmt(). For nonthreaded or default context applications, pass the defined constant SQL_SINGLE_RCTX as the context.

Each standard SQLLIB public function is thread-safe and accepts the runtime context as the first argument. For example, the syntax for SQLErrorGetText() is:

void SQLErrorGetText(dvoid *context,  char   *message_buffer, 
            size_t *buffer_size,
            size_t *message_length);

In summary, the old function names will continue to work in your existing applications. You can use the new function names in the new applications that you will write.

Table 5-4 lists all the SQLLIB public functions and their corresponding syntax. Cross-references to the nonthreaded or default-context usages are provided to help you find more complete descriptions.

Table 5-4 SQLLIB Public Functions -- New Names

Old NameNew Function PrototypeCross-reference

sqlaldt()

struct SQLDA *SQLSQLDAAlloc(dvoid *context,
unsigned int     maximum_variables,
unsigned int     maximum_name_length,
unsigned int     maximum_ind_name_length);

See also "Allocating a SQLDA" .

sqlcdat()

void SQLCDAFromResultSetCursor(dvoid *context,
Cda_Def *cda,
void    *cursor,
sword   *return_value);

See also "Cursor Variables with the OCI (Release 7 Only)".

sqlclut()

void SQLSQLDAFree(dvoid  *context, 
struct SQLDA             *descriptor_name);

See also"Deallocate Storage" .

sqlcurt()

void SQLCDAToResultSetCursor(dvoid  *context,
void    *cursor, 
Cda_Def *cda, 
sword   *return_value)

See also "Cursor Variables with the OCI (Release 7 Only)" .

sqlglmt()

void SQLErrorGetText(dvoid  *context,
unsigned char *message_buffer, 
size_t  *buffer_size,
size_t  *message_length);

See also "Getting the Full Text of Error Messages".

sqlglst()

void SQLStmtGetText(dvoid   *context, 
char    *statement_buffer, 
size_t  *statement_length, 
size_t  *sqlfc);

See also "Obtaining the Text of SQL Statements".

sqlld2t()

void SQLLDAGetName(dvoid   *context, 
Lda_Def *lda,
text    *cname,
int     *cname_length);

See also "OCI Calls (Release 7 Only)"

sqlldat()

void SQLLDAGetCurrent(dvoid *context, 
Lda_Def   *lda);

See also "Remote and Multiple Connections".

sqlnult()

void SQLColumnNullCheck(dvoid *context, 
unsigned short *value_type, 
unsigned short *type_code, 
int            *null_status);

See also "Handling NULL/Not NULL Datatypes".

sqlprct()

void SQLNumberPrecV6(dvoid  *context, 
unsigned long   *length, 
int             *precision, 
int             *scale);

See also "Extracting Precision and Scale".

sqlpr2t()

void SQLNumberPrecV7(dvoid  *context, 
unsigned long   *length, 
int             *precision, 
int             *scale);

See also "Extracting Precision and Scale".

sqlvcpt()

void SQLVarcharGetLength(dvoid  *context, 
unsigned long   *data_length, 
unsigned long   *total_length);

See also "Find the Length of the VARCHAR Array Component".

N/A

sword SQLEnvGet(dvoid *context,
OCIEnv          **oeh);

See "SQLEnvGet()".

N/A

sword SQLSvcCtxGet(dvoid *context,
text            *dbname,
int             dbnamelen,
OCISvcCtx       **svc);

See "SQLSvcCtxGet()".

N/A

void SQLRowidGet(dvoid *context,
OCIRowid        **urid);

See "SQLRowidGet()".

N/A

void SQLExtProcError(dvoid *context,
char            *msg,
size_t          msglen);

See "SQLExtProcError()" for a discussion of its use in external procedures.



Note:

For the specific datatypes used in the argument lists for these functions, refer to your platform-specific version of the sqlcpr.h header file.

X/Open Application Development

X/Open applications run in a distributed transaction processing (DTP) environment. In an abstract model, an X/Open application calls on resource managers (RMs) to provide a variety of services. For example, a database resource manager provides access to data in a database. Resource managers interact with a transaction manager (TM), which controls all transactions for the application.

Figure 5-1 Hypothetical DTP Model

Hypothetical DTP Model
Description of "Figure 5-1 Hypothetical DTP Model"

Figure 5-1 shows one way that components of the DTP model can interact to provide efficient access to data in an Oracle database. The DTP model specifies the XA interface between resource managers and the transaction manager. Oracle supplies an XA-compliant library, which you must link to your X/Open application. Also, you must specify the native interface between your application program and the resource managers.

The DTP model that specifies how a transaction manager and resource managers interact with an application program is described in the X/Open guide Distributed Transaction Processing Reference Model and related publications, which you can obtain by writing to

The Open Group
1010 El Camino Real, Suite > 380
Menlo Park, CA 94025-4345 USA
http://www.opennc.org/

For instructions on using the XA interface, see your Transaction Processing (TP) Monitor user's guide.

Oracle-Specific Issues

You can use the precompiler to develop applications that comply with the X/Open standards. However, you must meet the following requirements.

Connecting to Oracle

The X/Open application does not establish and maintain connections to a database. Instead, the transaction manager and the XA interface, which is supplied by Oracle, handle database connections and disconnections transparently. So, normally an X/Open-compliant application does not execute CONNECT statements.

Transaction Control

The X/Open application must not execute statements such as COMMIT, ROLLBACK, SAVEPOINT, and SET TRANSACTION that affect the state of global transactions. For example, the application must not execute the COMMIT statement because the transaction manager handles commits. Also, the application must not execute SQL data definition statements such as CREATE, ALTER, and RENAME because they issue an implicit COMMIT.

The application can execute an internal ROLLBACK statement if it detects an error that prevents further SQL operations. However, this might change in later releases of the XA interface.

OCI Calls (Release 7 Only)


Note:

The Logon Data Area (LDA) is no longer supported in Oracle9i. The ability to embed OCI Release 7 calls in your Pro*C/C++ program will be phased out by the next major Oracle release.

If you want your X/Open application to issue OCI calls, you must use the runtime library routine sqlld2(), which sets up an LDA for a specified connection established through the XA interface. For a description of the sqlld2() call, see the Oracle Call Interface Programmer's Guide for Release 7.

The following OCI calls cannot be issued by an X/Open application: OCOM, OCON, OCOF, ONBLON, ORLON, OLON, OLOGOF.

For a discussion of how to use OCI Release 8 calls in Pro*C/C++, see also "Interface to OCI Release 8".

Linking

To get XA functionality, you must link the XA library to your X/Open application object modules. For instructions, see your system-specific Oracle documentation.

PKCM7!W > PK+AOEBPS/pc_ahintegrat.htmL+ Integrating Pro*C/C++ into Microsoft Visual Studio .NET 2002/2003

H Integrating Pro*C/C++ into Microsoft Visual Studio .NET 2002/2003

This appendix describes how to integrate Pro*C/C++ into the Microsoft Visual Studio .NET 2002/2003 integrated development environment.

This appendix contains the following topics:

Integrating Pro*C/C++ within Microsoft Visual Studio .NET 2002/2003 Projects

This section describes how to fully integrate Pro*C/C++ within Microsoft Visual Studio .NET 2002/2003 projects.

All the precompiler errors and warnings are displayed in the output box where Microsoft Visual Studio .NET 2002/2003 displays compiler and linker messages. You do not have to precompile a file separately from the Microsoft Visual Studio .NET 2002/2003 build environment. More importantly, Microsoft Visual Studio .NET 2002/2003 maintains the dependencies between .c and .pc files. Microsoft Visual Studio .NET 2002/2003 maintains the dependency and precompile files, if needed.

All of the procedures in this section are performed within Microsoft Visual Studio .NET 2002/2003.

Specifying the Location of the Pro*C/C++ Executable

For Microsoft Visual Studio .NET 2002/2003 to run Pro*C/C++, it must know the location of the Pro*C/C++ executable. If Microsoft Visual Studio .NET 2002/2003 was installed before any Oracle release 9.2 products were installed, then you must add the directory path.

To specify the location of the Pro*C/C++ executable:

  1. Select Options from the Tools menu.

    The Options dialog appears.

  2. Click the Directories tab.

  3. Select Executable files from Show directories For.

  4. Scroll to the bottom of the Directories box and click the dotted rectangle.

  5. Enter the ORACLE_BASE\ORACLE_HOME\bin directory. For example:

    C:\oracle\ora92\bin

  6. Click OK.

Options
Description of the illustration ms5.gif

Specifying the Location of the Pro*C/C++ Header Files

To specify the location of the Pro*C/C++ header files:

  1. Select Options from the Tools menu. The Options dialog appears.

  2. Click the Directories tab.

  3. Select Include Files from the Show Directories For list.

  4. Scroll to the bottom of the Directories box and click the dotted rectangle.

  5. Enter the ORACLE_BASE\ORACLE_HOME\precomp\public directory. For example:

    C:\oracle\ora92\precomp\public

  6. Click OK.

Adding .pc Files to a Project

After you create a project, you need to add the .pc files.

To add a .pc file to a project:

  1. Select Add To Project from the Project menu and then select Files. The Insert Files into Project dialog appears.

    insert files
    Description of the illustration ms2.gif

  2. Select All Files from the Files list.

  3. Select the .pc file.

  4. Click OK.

Adding References to .c Files to a Project

For each .pc file, you need to add a reference to the .c file that will result from precompiling.

To add a reference to a .c file to a project:

  1. Select Add To Project from the Project menu, and then select Files. The Insert Files into Project dialog appears.

  2. Type the name of the .c file in the File Name box.

  3. Click OK. Because the .c file has not been created yet, Microsoft Visual Studio .NET 2002/2003 displays the following message: "The specified file does not exist. Do you want to add a reference to the project anyway?"

  4. Click Yes.

Adding the Pro*C/C++ Library to a Project

Pro*C/C++ applications must link with the library file orasql11.lib.

To add the Pro*C/C++ library to a project:

  1. Select Add To Project from the Project menu, and then select Files. The Insert Files into Project dialog appears.

  2. Select All Files from the Files list.

  3. Select orasql11.lib from the ORACLE_BASE\ORACLE_HOME\precomp\lib\msvc directory.

  4. Click OK.

Specifying Custom Build Options

project settings
Description of the illustration ms3.gif

To specify Custom Build options:

  1. In FileView, right-click a .pc file and select Settings. The Project Settings dialog appears with the Custom Build tab displayed.

  2. In the Build commands box, on one line, set the build to use the same hardcoded path as that of the $ORACLE_HOME setting.

  3. In the Output files box, enter one of the following:

    • If you are generating .c files, then enter $(ProjDir)\$(InputName).c.

    • If you are generating .cpp files, then enter $(ProjDir)\$(InputName).cpp.

    $(ProjDir) and $MSDEVDIR are macros for custom build commands in Microsoft Visual Studio .NET 2002/2003. When the project is built, Microsoft Visual Studio .NET 2002/2003 checks the date of the output files to determine whether they need to be rebuilt for any new modifications made to the source code.

  4. Click OK.


    See Also:

    Microsoft Visual Studio .NET 2002/2003 documentation

Adding Pro*C/C++ to the Tools Menu

Graphic
Description of the illustration ms1.gif

You can include Pro*C/C++ as a choice in the Tools menu of Microsoft Visual Studio .NET 2002/2003.

To add Pro*C/C++ to the Tools menu:

  1. From within Microsoft Visual Studio .NET 2002/2003, select Customize from the Tools menu. The Customize dialog appears.

  2. Click the Tools tab.

  3. Scroll to the bottom of the Menu contents box and click the dotted rectangle.

  4. Enter the following text:

    Pro*C/C++

  5. In the Command box, type the path and filename of the graphical Pro*C/C++ executable, or use the Browse button to the right of the box to select the file name. For example:

    C:\oracle\ora92\bin\procui.exe

  6. In the Arguments box, enter the following text:

    $(TargetName)

    When you select Pro*C/C++ from the Tools menu, Microsoft Visual Studio .NET 2002/2003 uses the $(TargetName) argument to pass the name of the current development project to Pro*C/C++. Pro*C/C++ then opens a precompile project with the same name as the opened project, but with a .pre extension in the project directory.

  7. In the Initial directory box, enter the following text:

    $(WkspDir)

    The Customize dialog should now look like the following graphic (although the Oracle home directory may be different on your computer).

  8. Click Close. Microsoft Visual Studio .NET 2002/2003 adds Pro*C/C++ to the Tools menu.

PKjPQ+L+PK+AOEBPS/pc_02prc.htm Precompiler Concepts

2 Precompiler Concepts

This chapter explains how embedded SQL programs do their work. You examine the special environment in which they operate and the impact of this environment on the design of your applications. After covering the key concepts of embedded SQL programming and the steps you take in developing an application, this chapter uses a simple program to illustrate the main points.

This chapter contains the following topics:

Key Concepts of Embedded SQL Programming

This section lays the conceptual foundation on which later chapters build. This section contains these topics:

Embedded SQL Statements

The term embedded SQL refers to SQL statements placed within an application program. Because it houses the SQL statements, the application program is called a host program, and the language in which it is written is called the host language. For example, Pro*C/C++ provides the ability to embed certain SQL statements in a C or C++ host program.

To manipulate and query Oracle data, you use the INSERT, UPDATE, DELETE, and SELECT statements. INSERT adds rows of data to database tables, UPDATE modifies rows, DELETE removes unwanted rows, and SELECT retrieves rows that meet your search condition.

The powerful SET ROLE statement lets you dynamically manage database privileges. A role is a named group of related system and object privileges, or a named group of related system or object privileges granted to users or other roles. Role definitions are stored in the Oracle data dictionary. Your applications can use the SET ROLE statement to enable and disable roles as needed.

Only SQL statements—not SQL*Plus statements—are valid in an application program. (SQL*Plus has additional statements for setting environment parameters, editing, and report formatting.)

Executable Statements and Directives

Embedded SQL includes all the interactive SQL statements plus others that allow you to transfer data between Oracle and a host program. There are two types of embedded SQL statements: executable statements and directives. Executable statements result in calls to the runtime library SQLLIB. You use them to connect to Oracle, to define, query, and manipulate Oracle data, to control access to Oracle data, and to process transactions. They can be placed wherever C or C++ language executable statements can be placed.

Directives, on the other hand, do not result in calls to SQLLIB and do not operate on Oracle data. You use them to declare Oracle objects, communications areas, and SQL variables. They can be placed wherever C or C++ variable declarations can be placed.

Table 2-1 groups the various embedded SQL statements (not a complete list):

Table 2-1 Embedded SQL Statements

DIRECTIVEPURPOSE

ARRAYLEN*

To use host arrays with PL/SQL

BEGIN DECLARE SECTION*

END DECLARE SECTION*

To declare host variables (optional)

DECLARE*

To name Oracle schema objects

INCLUDE*

To copy in files

TYPE*

To equivalence datatypes

VAR*

To equivalence variables

WHENEVER*

To handle runtime errors


Table 2-2 Embedded SQL Statements

EXECUTABLE STATEMENTPURPOSE

ALLOCATE*

To define and control Oracle data

ALTER

-

ANALYZE

-

DELETE

DML

INSERT

-

SELECT

-

UPDATE

-

COMMIT

To process transactions

ROLLBACK

-

SAVEPOINT

-

SET TRANSACTION

-

DESCRIBE*

To use dynamic SQL

EXECUTE*

-

PREPARE*

-

ALTER SESSION

To control sessions

SET ROLE

-

*Has no interactive counterpart



Embedded SQL Syntax

In your application program, you can freely mix complete SQL statements with complete C statements and use C variables or structures in SQL statements. The only special requirement for building SQL statements into your host program is that you begin them with the keywords EXEC SQL and end them with a semicolon. Pro*C/C++ translates all EXEC SQL statements into calls to the runtime library SQLLIB.

Many embedded SQL statements differ from their interactive counterparts only through the addition of a new clause or the use of program variables. The following example compares interactive and embedded ROLLBACK statements:

ROLLBACK WORK:           -- interactive
EXEC SQL ROLLBACK WORK;  -- embedded

These statements have the same effect, but you would use the first in an interactive SQL environment (such as when running SQL*Plus), and the second in a Pro*C/C++ program.

Static Versus Dynamic SQL Statements

Most application programs are designed to process static SQL statements and fixed transactions. In this case, you know the makeup of each SQL statement and transaction before runtime; that is, you know which SQL commands will be issued, which database tables might be changed, which columns will be updated, and so on.

However, some applications might be required to accept and process any valid SQL statement at runtime. So, you might not know until runtime all the SQL commands, database tables, and columns involved.

Dynamic SQL is an advanced programming technique that lets your program accept or build SQL statements at run time and take explicit control over datatype conversion.

Embedded PL/SQL Blocks

Pro*C/C++ treats a PL/SQL block like a single embedded SQL statement. You can place a PL/SQL block anywhere in an application program that you can place a SQL statement. To embed PL/SQL in your host program, you simply declare the variables to be shared with PL/SQL and bracket the PL/SQL block with the keywords EXEC SQL EXECUTE and END-EXEC.

From embedded PL/SQL blocks, you can manipulate Oracle data flexibly and safely because PL/SQL supports all SQL data manipulation and transaction processing commands.

Host and Indicator Variables

Host variables are the key to communication between Oracle and your program. A host variable is a scalar or aggregate variable declared in C and shared with Oracle, meaning that both your program and Oracle can reference its value.

Your program uses input host variables to pass data to Oracle. Oracle uses output host variables to pass data and status information to your program. The program assigns values to input host variables; Oracle assigns values to output host variables.

Host variables can be used anywhere a SQL expression can be used. In SQL statements, host variables must be prefixed with a colon (:) to set them apart from the SQL keywords.

You can also use a C struct to contain a number of host variables. When you name the structure in an embedded SQL statement, prefixed with a colon, Oracle uses each of the components of the struct as a host variable.

You can associate any host variable with an optional indicator variable. An indicator variable is a short integer variable that "indicates" the value or condition of its host variable. You use indicator variables to assign NULLs to input host variables and to detect NULLs or truncated values in output host variables. A NULL is a missing, unknown, or inapplicable value.

In SQL statements, an indicator variable must be prefixed with a colon and immediately follow its associated host variable. The keyword INDICATOR can be placed between the host variable and its indicator for additional clarity.

If the host variables are packaged in a struct, and you want to use indicator variables, you simply create a struct that has an indicator variable for each host variable in the host structure, and name the indicator struct in the SQL statement, immediately following the host variable struct, and prefixed with a colon. You can also use the INDICATOR keyword to separate a host structure and its associated indicator structure.

Oracle Datatypes

Typically, a host program inputs data to Oracle, and Oracle outputs data to the program. Oracle stores input data in database tables and stores output data in program host variables. To store a data item, Oracle must know its datatype, which specifies a storage format and valid range of values.

Oracle recognizes two kinds of datatypes: internal and external. Internal datatypes specify how Oracle stores data in database columns. Oracle also uses internal datatypes to represent database pseudocolumns, which return specific data items but are not actual columns in a table.

External datatypes specify how data is stored in host variables. When your host program inputs data to Oracle, if necessary, Oracle converts between the external datatype of the input host variable and the internal datatype of the target database column. When Oracle outputs data to your host program, if necessary, Oracle converts between the internal datatype of the source database column and the external datatype of the output host variable.

Arrays

Pro*C/C++ lets you define array host variables (called host arrays) and arrays of structures and operate on them with a single SQL statement. Using the array SELECT, FETCH, DELETE, INSERT, and UPDATE statements, you can query and manipulate large volumes of data with ease. You can also use host arrays inside a host variable struct.

Datatype Equivalencing

Pro*C/C++ adds flexibility to your applications by letting you equivalence datatypes. That means you can customize the way Oracle interprets input data and formats output data.

On a variable-by-variable basis, you can equivalence supported C datatypes to the Oracle external datatypes. You can also equivalence user-defined datatypes to Oracle external datatypes.

Private SQL Areas, Cursors, and Active Sets

To process a SQL statement, Oracle opens a work area called a private SQL area. The private SQL area stores information needed to execute the SQL statement. An identifier called a cursor lets you name a SQL statement, access the information in its private SQL area, and, to some extent, control its processing.

For static SQL statements, there are two types of cursors: implicit and explicit. Oracle implicitly declares a cursor for all data definition and data manipulation statements, including SELECT statements (queries) that return only one row. However, for queries that return more than one row, to process beyond the first row, you must explicitly declare a cursor (or use host arrays).

The set of rows returned is called the active set; its size depends on how many rows meet the query search condition. You use an explicit cursor to identify the row currently being processed, called the current row.

Imagine the set of rows being returned to a terminal screen. A screen cursor can point to the first row to be processed, then the next row, and so on. In the same way, an explicit cursor "points" to the current row in the active set. This allows your program to process the rows one at a time.

Transactions

A transaction is a series of logically related SQL statements (two UPDATEs that credit one bank account and debit another, for example) that Oracle treats as a unit, so that all changes brought about by the statements are made permanent or undone at the same time.

All the data manipulation statements executed since the last data definition, COMMIT, or ROLLBACK statement was executed make up the current transaction.

To help ensure the consistency of your database, Pro*C/C++ lets you define transactions using the COMMIT, ROLLBACK, and SAVEPOINT statements.

COMMIT makes permanent any changes made during the current transaction. ROLLBACK ends the current transaction and undoes any changes made since the transaction began. SAVEPOINT marks the current point in the processing of a transaction; used with ROLLBACK, it undoes part of a transaction.

Errors and Warnings

When you execute an embedded SQL statement, it either succeeds or fails, and might result in an error or warning. You need a way to handle these results. Pro*C/C++ provides two error handling mechanisms: the SQL Communications Area (SQLCA) and the WHENEVER statement.

The SQLCA is a data structure that you include (or hard-code) in your host program. It defines program variables used by Oracle to pass runtime status information to the program. With the SQLCA, you can take different actions based on feedback from Oracle about work just attempted. For example, you can check to see if a DELETE statement succeeded and, if so, how many rows were deleted.

With the WHENEVER statement, you can specify actions to be taken automatically when Oracle detects an error or warning condition. These actions are: continuing with the next statement, calling a function, branching to a labeled statement, or stopping.

SQL99 Syntax Support

The SQL standard enables the portability of SQL applications across all conforming software products. Oracle features are compliant with the ANSI/ISO SQL99 standard, including ANSI compliant joins. Pro*C/C++ supports all SQL99 features that are supported by Oracle database, which means that the SQL99 syntax for the SELECT, INSERT, DELETE, and UPDATE statements and the body of the cursor in a DECLARE CURSOR statement are supported.

Steps in Developing an Embedded SQL Application

Figure 2-1 shows the embedded SQL application development process.

Figure 2-1 Embedded SQL Application Development Process

Embedded SQL Application Development Process
Description of "Figure 2-1 Embedded SQL Application Development Process"

As you can see, precompiling results in a modified source file that can be compiled normally. Though precompiling adds a step to the traditional development process, that step lets you write very flexible applications.

Guidelines for Programming

This section deals with embedded SQL syntax, coding conventions, and C-specific features and restrictions. Topics are arranged alphabetically for quick reference.

Comments

You can place C-style Comments (/* ... */) in a SQL statement wherever blanks can be placed (except between the keywords EXEC SQL). Also, you can place ANSI-style Comments (-- ...) within SQL statements at the end of a line, as the following example shows:

EXEC SQL SELECT ENAME, SAL 
    INTO :emp_name, :salary  -- output host variables 
    FROM EMP 
    WHERE DEPTNO = :dept_number; 

You can use C++ style Comments (//) in your Pro*C/C++ source if you precompile using the CODE=CPP precompiler option.

Constants

An L or l suffix specifies a long integer constant, a U or u suffix specifies an unsigned integer constant, a 0X or 0x prefix specifies a hexadecimal integer constant, and an F or f suffix specifies a float floating-point constant. These forms are not allowed in SQL statements.

Declare Section

A Declare Section contains the host variable declarations and is of the form:

EXEC SQL BEGIN DECLARE SECTION;
/* Declare all host variables inside this section:  */
    char *uid = "username/password";
    ...
EXEC SQL END DECLARE SECTION;

A Declare Section begins with the statement:

EXEC SQL BEGIN DECLARE SECTION;

and ends with the statement:

EXEC SQL END DECLARE SECTION;

Between these two statements only the following are allowed:

  • Host-variable and indicator-variable declarations

  • Non-host C/C++ variables

  • EXEC SQL DECLARE statements

  • EXEC SQL INCLUDE statements

  • EXEC SQL VAR statements

  • EXEC SQL TYPE statements

  • EXEC ORACLE statements

  • C/C++ comments

A Declare Section is required when MODE=ANSI or CODE=CPP (in a C++ application) or PARSE=NONE or PARTIAL. For details of the PARSE option, see also "Parsing Code".

More than one Declare Section is allowed. They can be in different code modules.

Delimiters

While C uses single quotes to delimit single characters, as in

ch = getchar(); 
switch (ch)
{ 
case 'U': update();  break; 
case 'I': insert();  break; 
... 

SQL uses single quotes to delimit character strings, as in

EXEC SQL SELECT ENAME, SAL FROM EMP WHERE JOB = 'MANAGER'; 

While C uses double quotes to delimit character strings, as in

printf("\nG'Day, mate!"); 

SQL uses double quotes to delimit identifiers containing special or lowercase characters, as in

EXEC SQL CREATE TABLE "Emp2" (empno  number(4), ...); 

File Length

Pro*C/C++ cannot process arbitrarily long source files. There is a limit to the number of lines allowed. The following aspects of the source file are contributing factors to the file-size constraint:

  • Complexity of the embedded SQL statements (for example, the number of bind and define variables).

  • Whether a database name is used (for example, connecting to a database with an AT clause).

  • Number of embedded SQL statements.

To prevent problems related to this limitation, use multiple program units to sufficiently reduce the size of the source files.

Function Prototyping

The ANSI C standard (X3.159-1989) provides for function prototyping. A function prototype declares a function and the data types of its arguments, so that the C compiler can detect missing or mismatched arguments.

The CODE option, which you can enter on the command line or in a configuration file, determines the way that the precompiler generates C or C++ code.

ANSI_C

When you precompile your program with CODE=ANSI_C, the precompiler generates fully prototyped function declarations. For example:

extern void sqlora(long *, void *); 

KR_C

When you precompile with the option CODE=KR_C (KR for "Kernighan and Ritchie"), the precompiler generates function prototypes in the same way that it does for ANSI_C, except that function parameter lists are commented out. For example:

extern void sqlora(/*_ long *, void *  _*/);

So, make sure to set the precompiler option CODE to KR_C if you use a C compiler that does not support ANSI C. When the CODE option is set to ANSI_C, the precompiler can also generate other ANSI-specific constructs; for example, the const type qualifier.

CPP

When you compile with CODE=CPP you will generate C++ compatible function prototypes. Use this option setting with C++ compilers.


hA

See Also:

Chapter 12, "C++ Applications", for more information on using C++.

Hint Length

Maximum length of a sql hint in an embedded sql statement is limited to 256 characters. Any hint exceeding this limit will be truncated.

Host Variable Names

Host variable names can consist of upper or lowercase letters, digits, and underscores, but must begin with a letter. They can be any length, but only the first 31 characters are significant to Pro*C/C++. Your C compiler or linker might require a shorter maximum length, so check your C compiler user's guide.

For portability, you may wish to restrict the length of host variable names to 18 or fewer characters (the length mandated by the SQL standard).


See Also:

Appendix B, " Reserved Words, Keywords, and Namespaces" for a list of words that have restrictions on their use in applications.

Line Continuation

You can continue SQL statements from one line to the next. You must use a backslash (\) to continue a string literal from one line to the next, as the following example shows:

EXEC SQL INSERT INTO dept (deptno, dname) VALUES (50, 'PURCHAS\ 
ING'); 

In this context, the precompiler treats the backslash as a continuation character.

Line Length

The maximum line length is 1299 for lines consisting of only ASCII characters, or 324 for multibyte characters.

MAXLITERAL Default Value

The precompiler option MAXLITERAL lets you specify the maximum length of string literals generated by the precompiler. The MAXLITERAL default value is 1024. Specify a smaller value if required. For example, if your C compiler cannot handle string literals longer than 512 characters, you then specify MAXLITERAL=512. Check your C compiler user's guide.

Operators

The logical operators and the "equal to" relational operator are different in C and SQL, as the following list shows. These C operators are not allowed in SQL statements:

SQL OperatorC Operator
NOT!
AND&&
OR||
=
==

The following C operators also not allowed in SQL statements:

TypeC Operator
address&
bitwise&, |, ^, ~
compound assignment+=, -=, *=, and so on.
conditional?:
decrement--
increment++
indirection*
modulus%
shift>>,<<

Statement Terminator

Embedded SQL statements are always terminated by a semicolon, as the following example shows:

EXEC SQL DELETE FROM emp WHERE deptno = :dept_number;

Conditional Precompilation

Conditional precompilation includes (or excludes) sections of code in your host program based on certain conditions. For example, you might want to include one section of code when precompiling under UNIX and another section when precompiling under VMS. Conditional precompilation lets you write programs that can run in different environments.

Conditional sections of code are marked by statements that define the environment and actions to take. You can code C or C++ statements as well as EXEC SQL statements in these sections. The following statements let you exercise conditional control over precompilation:

EXEC ORACLE DEFINE symbol;        -- define a symbol
EXEC ORACLE IFDEF symbol;         -- if symbol is defined
EXEC ORACLE IFNDEF symbol;        -- if symbol is not defined
EXEC ORACLE ELSE;                 -- otherwise
EXEC ORACLE ENDIF;                -- end this control block

All EXEC ORACLE statements must be terminated with a semi-colon.

Symbol Definition

You can define a symbol in two ways. Either include the statement:

EXEC ORACLE DEFINE symbol;

in your host program or define the symbol on the command line using the syntax:

... DEFINE=symbol ...

where symbol is not case-sensitive.


Note:

The #define preprocessor directive is not the same as the EXEC ORACLE DEFINE statement.

Some port-specific symbols are predefined for you when Pro*C/C++ is installed on your system. For example, predefined operating symbols include CMS, MVS, MS-DOS, UNIX, and VMS.

Example SELECT Statement

In the following example, the SELECT statement is precompiled only when the symbol site2 is defined:

EXEC ORACLE IFDEF site2;
   EXEC SQL SELECT DNAME
       INTO :dept_name
       FROM DEPT
       WHERE DEPTNO= :dept_number;
EXEC ORACLE ENDIF;

You can "comment out" C, C++, or embedded SQL code by placing it between IFDEF and ENDIF and not defining the symbol.

Precompile Separately

You can precompile several C or C++ program modules separately, then link them into one executable program. This supports modular programming, which is required when the functional components of a program are written and debugged by different programmers. The individual program modules need not be written in the same language.

Guidelines

The following guidelines will help you avoid some common problems.

Referencing Cursors

Cursor names are SQL identifiers, whose scope is the precompilation unit. Hence, cursor operations cannot span precompilation units (files). That is, you cannot DECLARE a cursor in one file, and OPEN or FETCH from it in another file. So, when doing a separate precompilation, make sure all definitions and references to a given cursor are in one file.

Specifying MAXOPENCURSORS

When you precompile the program module that CONNECTs to Oracle, specify a value for MAXOPENCURSORS that is high enough for any of the program modules. If you use MAXOPENCURSORS for another program module, one that does not do a CONNECT, then that value for MAXOPENCURSORS is ignored. Only the value in effect for the CONNECT is used at runtime.

Use a Single SQLCA

If you want to use just one SQLCA, you must declare it as global in one of the program modules and as external in the other modules. Use the extern storage class, and the following define in your code:

#define SQLCA_STORAGE_CLASS extern 

which tells the precompiler to look for the SQLCA in another program module. Unless you declare the SQLCA as external, each program module uses its own local SQLCA.


Note:

All source files in an application must be uniquely named, or else an error will be generated.

Compile and Link

To get an executable program, you must compile the output .c source files produced by the precompiler, then link the resulting object modules with modules needed from SQLLIB and system-specific Oracle libraries. If you are mixing precompiler code and OCI calls, be sure to also link in the OCI runtime library (liboci.a on UNIX systems).

The linker resolves symbolic references in the object modules. If these references conflict, the link fails. This can happen when you try to link third-party software into a precompiled program. Not all third-party software is compatible with Oracle. So, linking your program shared might cause an obscure problem. In some cases, linking standalone or two-task might solve the problem.

Compiling and linking are system dependent. On most platforms, example makefiles or batch files are supplied that you can use to precompile, compile, and link a Pro*C/C++ application. See your system-specific documentation.

Example Tables

Most programming examples in this guide use two example database tables: DEPT and EMP. Their definitions follow:

CREATE TABLE DEPT
    (DEPTNO    NUMBER(2) NOT NULL,
     DNAME     VARCHAR2(14),
     LOC       VARCHAR2(13))

CREATE TABLE EMP
    (EMPNO     NUMBER(4) NOT NULL,
     ENAME     VARCHAR2(10),
     JOB       VARCHAR2(9),
     MGR       NUMBER(4),
     HIREDATE  DATE,
     SAL       NUMBER(7,2),
     COMM      NUMBER(7,2),
     DEPTNO    NUMBER(2))

Example Data

Respectively, the DEPT and EMP tables contain the following rows

of data:

DEPTNO  DNAME      LOC
------- ---------- ---------
10      ACCOUNTING NEW YORK
20      RESEARCH   DALLAS
30      SALES      CHICAGO
40      OPERATIONS BOSTON

EMPNO ENAME   JOB          MGR  HIREDATE    SAL   COMM  DEPTNO
----- ------- --------- ------ --------- ------ ------ -------
 7369 SMITH   CLERK       7902 17-DEC-80    800             20
 7499 ALLEN   SALESMAN    7698 20-FEB-81   1600    300      30
 7521 WARD    SALESMAN    7698 22-FEB-81   1250    500      30
 7566 JONES   MANAGER     7839 02-APR-81   2975             20
 7654 MARTIN  SALESMAN    7698 28-SEP-81   1250   1400      30
 7698 BLAKE   MANAGER     7839 01-MAY-81   2850             30
 7782 CLARK   MANAGER     7839 09-JUN-81   2450             10
 7788 SCOTT   ANALYST     7566 19-APR-87   3000             20
 7839 KING    PRESIDENT        17-NOV-81   5000             10
 7844 TURNER  SALESMAN    7698 08-SEP-81   1500             30
 7876 ADAMS   CLERK       7788 23-MAY-87   1100             20
 7900 JAMES   CLERK       7698 03-DEC-81    950             30
 7902 FORD    ANALYST     7566 03-DEC-81   3000             20
 7934 MILLER  CLERK       7782 23-JAN-82   1300             10

Example Program: A Simple Query

One way to get acquainted with Pro*C/C++ and embedded SQL is to study a program example. The following program is also available on-line in the file sample1.pc in your Pro*C/C++ demo directory.

The program connects to Oracle, then loops, prompting the user for an employee number. It queries the database for the employee's name, salary, and commission, displays the information, and then continues the loop. The information is returned to a host structure. There is also a parallel indicator structure to signal whether any of the output values SELECTed might be NULL.

Precompile example programs using the precompiler option MODE=ORACLE.


Note:

For simplicity in demonstrating this feature, this example does not perform the password management techniques that a deployed system normally uses. In a production environment, follow the Oracle Database password management guidelines, and disable any sample accounts. See Oracle Database Security Guide for password management guidelines and other security recommendations.

/*
 *  sample1.pc
 *
 *  Prompts the user for an employee number,
 *  then queries the emp table for the employee's
 *  name, salary and commission.  Uses indicator
 *  variables (in an indicator struct) to determine
 *  if the commission is NULL.
 *
 */

#include <stdio.h>
#include <string.h>


/* Define constants for VARCHAR lengths. */
#define     UNAME_LEN      20
#define     PWD_LEN        40

/* Declare variables. No declare section is needed if MODE=ORACLE.*/
VARCHAR     username[UNAME_LEN];  
/* VARCHAR is an Oracle-supplied struct */
varchar     password[PWD_LEN];    
/* varchar can be in lower case also. */
/*
Define a host structure for the output values of a SELECT statement.
*/
struct {
    VARCHAR   emp_name[UNAME_LEN];
    float     salary;
    float     commission;
} emprec;
/* 
Define an indicator struct to correspond to the host output struct. */
struct
{
    short     emp_name_ind;
    short     sal_ind;
    short     comm_ind;
} emprec_ind;

/*  Input host variable. */
int         emp_number;
int         total_queried;
/* Include the SQL Communications Area.
   You can use #include or EXEC SQL INCLUDE. */
#include <sqlca.h>

/* Declare error handling function. */
void sql_error();

main()
{
    char temp_char[32];

/* Connect to ORACLE--
 * Copy the username into the VARCHAR.
 */
    strncpy((char *) username.arr, "SCOTT", UNAME_LEN);
/* Set the length component of the VARCHAR. */
    username.len = strlen((char *) username.arr);
/* Copy the password. */
    strncpy((char *) password.arr, "TIGER", PWD_LEN);
    password.len = strlen((char *) password.arr);
/* Register sql_error() as the error handler. */
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

/* Connect to ORACLE.  Program will call sql_error()
 * if an error occurs when connecting to the default database.
 */
    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    printf("\nConnected to ORACLE as user: %s\n", username.arr);
/* Loop, selecting individual employee's results */
    total_queried = 0;
    for (;;)
    {
/* Break out of the inner loop when a
 * 1403 ("No data found") condition occurs.
 */
        EXEC SQL WHENEVER NOT FOUND DO break;
        for (;;)
        {
            emp_number = 0;
            printf("\nEnter employee number (0 to quit): ");
            gets(temp_char);
            emp_number = atoi(temp_char);
            if (emp_number == 0)
                break;
            EXEC SQL SELECT ename, sal, NVL(comm, 0)
                INTO :emprec INDICATOR :emprec_ind
                FROM EMP
                WHERE EMPNO = :emp_number;
/* Print data. */
            printf("\n\nEmployee\tSalary\t\tCommission\n");
            printf("--------\t------\t\t----------\n");
/* Null-terminate the output string data. */
            emprec.emp_name.arr[emprec.emp_name.len] = '\0';
            printf("%-8s\t%6.2f\t\t",
                emprec.emp_name.arr, emprec.salary);
            if (emprec_ind.comm_ind == -1)
                printf("NULL\n");
            else
                printf("%6.2f\n", emprec.commission);

            total_queried++;
        }  /* end inner for (;;) */
        if (emp_number == 0) break;
        printf("\nNot a valid employee number - try again.\n");
    } /* end outer for(;;) */

    printf("\n\nTotal rows returned was %d.\n", total_queried); 
    printf("\nG'day.\n\n\n");

/* Disconnect from ORACLE. */
    EXEC SQL COMMIT WORK RELEASE;
    exit(0);
}
void sql_error(msg)
char *msg;
{
    char err_msg[128];
    int buf_len, msg_len;

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    printf("\n%s\n", msg);
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    if (msg_len > buf_len)
    msg_len = buf_len;
    printf("%.*s\n", msg_len, err_msg);
    EXEC SQL ROLLBACK RELEASE;
    exit(1);
}

Example Program: A Simple Query using SQL99 Syntax

This program is similar to the previous example, but uses SQL99 syntax for SELECT, INSERT, DELETE and UPDATE statements and the body of the cursor in a DECLARE CURSOR statement is supported.

Precompile example programs using the precompiler option MODE=ORACLE.

/*
 *  sql99.pc
 *
 *  Prompts the user for an employee number,
 *  then queries the emp table for the employee's
 *  name, salary and department. 
 *
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
.
/* Define constants for VARCHAR lengths. */
#define     UNAME_LEN     30
#define     PWD_LEN        40
/* Declare variables.  No declare section is needed if MODE=ORACLE. */
 
VARCHAR     username[UNAME_LEN]; 
 /* VARCHAR is an Oracle-supplied struct */
 varchar     password[PWD_LEN];  
 /* varchar can be in lower case also. */
/* Define a host structure for the output values of a SELECT statement.  */
 
struct{ 
   VARCHAR   emp_name[UNAME_LEN];   
   float     salary;  
   VARCHAR  dept_name[UNAME_LEN] ;
  } emprec;
/* Define an indicator struct to correspond to the host output struct. */
struct{ 
   short     emp_name_ind;  
   short     sal_ind;   
   short     dept_name;
  } emprec_ind;
 
/*  Input host variable. */
int         emp_number;
int         total_queried;
/* Include the SQL Communications Area. You can use #include or EXEC SQL 
INCLUDE. */
 
#include <sqlca.h>
/* Declare error handling function. */
void sql_error(msg)   
   char *msg;
   {   
    char err_msg[128];    
    size_t buf_len, msg_len;    
    EXEC SQL WHENEVER SQLERROR CONTINUE;    
    printf("\n%s\n", msg); 
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);  
    printf("%.*s\n", msg_len, err_msg); 
    EXEC SQL ROLLBACK RELEASE;  
  exit(EXIT_FAILURE);
  }
 
void main(){  
   char temp_char[32];
  /* Connect to ORACLE-- * Copy the username into the VARCHAR. */
    strncpy((char *) username.arr, "scott", UNAME_LEN);
  /* Set the length component of the VARCHAR. */   
    username.len = (unsigned short) strlen((char *) username.arr);
   /* Copy the password. */   
     strncpy((char *) password.arr, "tiger", PWD_LEN);   
     password.len = (unsigned short) strlen((char *) password.arr);
  /* Register sql_error() as the error handler. */    
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
  /* Connect to ORACLE.  Program will call sql_error() * if an error occurs 
when connecting to the default database. */    
     EXEC SQL CONNECT :username IDENTIFIED BY :password; 
    printf("\nConnected to ORACLE as user: %s\n", username.arr);
  /* Loop, selecting individual employee's results */   
     total_queried = 0;   
     for (;;)    {
                  emp_number = 0;       
                  printf("\nEnter employee number (0 to quit): "); 
                  gets(temp_char);    
                  emp_number = atoi(temp_char);      
                  if (emp_number == 0)            
                        break;
  /* Branch to the notfound label when the * 1403 ("No data found") condition 
occurs. */     
   EXEC SQL WHENEVER NOT FOUND GOTO notfound;
 
  /* The following query uses SQL99 syntax - RIGHT OUTER JOIN */
    EXEC SQL SELECT e.ename, e.sal, d.dname        
    INTO :emprec INDICATOR :emprec_ind       
    FROM EMP e RIGHT OUTER JOIN dept d   
    ON e.deptno = d.deptno  
    WHERE e.EMPNO = :emp_number;
  /* Print data. */      
  printf("\n\nEmployee   Salary    Department Name\n");    
  printf("--------   -------   ------------------\n");
  /* Null-terminate the output string data. */    
    emprec.emp_name.arr[emprec.emp_name.len] = '\0';  
    emprec.dept_name.arr[emprec.dept_name.len]='\0';   
    printf("%s      %7.2f          %s ",            emprec.emp_name.arr, 
  emprec.salary, emprec.dept_name.arr);
    total_queried++;   
     continue;
  
  notfound:        
     printf("\nNot a valid employee number - try again.\n");  
  }
  
 printf("\n\nTotal rows returned was %d.\n", total_queried); 
 printf("\nG'day.\n\n\n");
/* Disconnect from ORACLE. */ 
   EXEC SQL ROLLBACK WORK RELEASE;   
 exit(EXIT_SUCCESS);
}
PKpPK+AOEBPS/pc_01int.htm Introduction

1 Introduction

This chapter introduces you to the Oracle Pro*C/C++ Precompiler. You look at its role in developing application programs that manipulate Oracle data and find out what it enables your applications to do. This chapter contains the following topics:

What is an Oracle Precompiler?

An Oracle Precompiler is a programming tool that enables the user to embed SQL statements in a high-level source program. As Figure 1-1 shows, the precompiler accepts the source program as input, translates the embedded SQL statements into standard Oracle runtime library calls, and generates a modified source program that you can compile, link, and execute in the usual way.

Figure 1-1 Embedded SQL Program Development

Embedded SQL Program Development
Description of "Figure 1-1 Embedded SQL Program Development"

Why Use the Oracle Pro*C/C++ Precompiler

The Oracle Pro*C/C++ Precompiler lets you use the power and flexibility of SQL in your application programs. A convenient, easy to use interface lets your application access Oracle directly.

Unlike many application development tools, Pro*C/C++ lets you create highly customized applications. For example, you can create user interfaces that incorporate the latest windowing and mouse technology. You can also create applications that run in the background without the need for user interaction.

Furthermore, Pro*C/C++ helps you fine-tune your applications. It allows close monitoring of resource use, SQL statement execution, and various runtime indicators. With this information, you can change program parameters for maximum performance.

Although precompiling adds a step to the application development process, it saves time. The precompiler, not you, translates each embedded SQL statement into calls to the Oracle runtime library (SQLLIB). The Pro*C/C++ precompiler also analyzes host variables, defines mappings of structures into columns, and, with SQLCHECK=FULL, performs semantic analysis of the embedded SQL statements.

Why Use SQL

If you want to access and manipulate Oracle data, you need SQL. Whether you use SQL interactively through SQL*Plus or embedded in an application program depends on the job at hand. If the job requires the procedural processing power of C or C++, or must be done on a regular basis, use embedded SQL.

SQL has become the database language of choice because it is flexible, powerful, and easy to learn. Being non-procedural, it lets you specify what you want done without specifying how to do it. A few English-like statements make it easy to manipulate Oracle data one row or many rows at a time.

You can execute any SQL (not SQL*Plus) statement from an application program. For example, you can

  • CREATE, ALTER, and DROP database tables dynamically

  • SELECT, INSERT, UPDATE, and DELETE rows of data

  • COMMIT or ROLLBACK transactions

Before embedding SQL statements in an application program, you can test them interactively using SQL*Plus. Usually, only minor changes are required to switch from interactive to embedded SQL.

Why Use PL/SQL

An extension to SQL, PL/SQL is a transaction processing language that supports procedural constructs, variable declarations, and robust error handling. Within the same PL/SQL block, you can use SQL and all the PL/SQL extensions.

The main advantage of embedded PL/SQL is better performance. Unlike SQL, PL/SQL provides the ability to group SQL statements logically and send them to Oracle in a block rather than one by one. This reduces network traffic and processing overhead.


See Also:

Chapter 7, " Embedded PL/SQL" for information about embedding PL/SQL in Pro*C/C++ programs.

Pro*C/C++ Precompiler Benefits

As Figure 1-2 shows, Pro*C/C++ offers many features and benefits, which help you to develop effective, reliable applications.

Figure 1-2 Features and Benefits

figure
Description of "Figure 1-2 Features and Benefits"

Pro*C/C++ enables:

  • Writing applications in C or C++.

  • Following the ANSI/ISO standards for embedding SQL statements in a high-level language.

  • Taking advantage of dynamic SQL, an advanced programming technique that lets your Program accept or build any valid SQL statement at runtime.

  • Designing and developing highly customized applications.

  • Writing shared server process applications.

  • Automatically converting between Oracle internal datatypes and high-level language datatypes.

  • Improved performance by embedding PL/SQL transaction processing blocks in your application program.

  • Specifying useful precompiler options inline and on the command line and change their values during precompilation.

  • The use of datatype equivalencing to control the way Oracle interprets input data and formats output data.

  • Separately precompiling several program modules, then link them into one executable Program.

  • Complete checking of the syntax and semantics of embedded SQL data manipulation statements and PL/SQL blocks.

  • Concurrent access to Oracle databases on multiple nodes using Oracle Net.

  • The use of arrays as input and output program variables.

  • Conditionally precompiling sections of code in your host program so that it can run in different environments.

  • Direct interface with SQL*Forms through the use of user exits written in a high-level language.

  • Handling errors and warnings with the SQL Communications Area (SQLCA) and the WHENEVER or DO statement.

  • The use of an enhanced set of diagnostics provided by the Oracle Communications Area (ORACA).

  • Working with user-defined object types in the database.

  • The use of collections (varrays and nested tables) in the database.

  • The use of LOBs (Large Objects) in the database.

  • The use of National Character Set data stored in the database.

  • The use of OCI (Oracle Call Interface) functions in your program.

  • The use of multi-threaded applications.

  • Microsoft Visual Studio .NET 2002/2003 support.

Pro*C/C++ is a full-featured tool that supports a professional approach to embedded SQL programming.


Note:

Pro*C/C++ does not support 16-bit code generation.

Directory Structure

When you install Oracle software, a directory structure is created on your hard drive for the Oracle products. A main Oracle directory contains the Oracle subdirectories and files that are necessary to run Pro*C/C++.

When you install Pro*C/C++, Oracle Universal Installer creates a directory called \precomp in the ORACLE_BASE\ORACLE_HOME directory. This subdirectory contains the Pro*C/C++ executable files, library files, and sample programs listed in Table 1-1.

Table 1-1 precomp Directory Structure

Directory NameContents

\admin

Configuration files

\demo\proc

Sample programs for Pro*C/C++

\demo\sql

SQL scripts for sample programs

\doc\proc

Readme files for Pro*C/C++

\help\proc

Help files for Pro*C/C++

\lib\msvc

Library files for Pro*C/C++

\mesg

Message files

\misc\proc

Miscellaneous files for Pro*C/C++

\public

Header files



Note:

The \precomp directory can contain files for other products, such as Pro*COBOL.

Known Problems, Restrictions, and Workarounds

Although all Windows operating systems allow spaces in file names and directory names, the Oracle Pro*C/C++ and Oracle Pro*COBOL precompilers will not precompile files that include spaces in the filename or directory name. For example, do not use the following formats:

  • proc iname=test one.pc

  • proc iname=d:\dir1\second dir\sample1.pc

Library Files

When linking Pro*C/C++ applications, you use library files. The Pro*C/C++ library files are installed as follows:

ORACLE_HOME\precomp\LIB\orasql11.lib
ORACLE_HOME\precomp\LIB\ottclasses.zip
ORACLE_HOME\precomp\LIB\msvc\orasqx11.lib

Pro*C/C++ application program interface (API) calls are implemented in DLL files provided with your Pro*C/C++ software. To use the DLLs, you must link your application with the import libraries (.lib files) that correspond to the Pro*C/C++ DLLs. Also, you must ensure that the DLL files are installed on the computer that is running your Pro*C/C++ application.

Microsoft provides you with three libraries: libc.lib, libcmt.lib, and msvcrt.lib. The Oracle DLLs use the msvcrt.lib runtime library. You must link the applications with msvcrt.lib instead of the other two Microsoft libraries.

Frequently Asked Questions

This section presents some questions that are frequently asked about Pro*C/C++, and about Oracle in relation to Pro*C/C++. The answers are more informal than the documentation in the rest of this Guide, but do provide references to places where you can find the reference material.

What is a VARCHAR?

Here is a short description of VARCHARs:

VARCHARDescription
VARCHAR2A kind of column in the database that contains variable-length character data. This is what Oracle calls an "internal datatype", because it is a possible column type.
VARCHARAn Oracle "external datatype" (datatype code 9). You use this only if you are doing dynamic SQL Method 4, or datatype equivalencing.
VARCHAR[n]

varchar[n]

This is a Pro*C/C++ "pseudotype" that you can declare as a host variable in your Pro*C/C++ program. It is actually generated by Pro*C/C++ as a struct, with a 2-byte length element, and a [n]-byte character array.

Does Pro*C/C++ Generate Calls to the Oracle Call Interface?

No. Pro*C/C++ generates data structures and calls to its runtime library: SQLLIB.

Why Not Code Using SQLLIB Calls and Not Use Pro*C/C++?

SQLLIB is not externally documented, is unsupported, and might change from release to release. Also, Pro*C/C++ is an ANSI/ISO compliant product, that follows the standard requirements for embedded SQL.

SQLLIB is not an API. While it has user-callable functions, it is primarily a runtime library for the precompiler suite of languages.

If you need to do API coding for the database, either use the Oracle Call Interface, the client side API for the Oracle RDBMS, or mix OCI and Pro*C/C++.

See "SQLLIB Extensions for OCI Release 8 Interoperability".

Can I Call A PL/SQL Stored Procedure From a Pro*C/C++ Program?

Certainly. See Chapter 7, " Embedded PL/SQL". There is a demo program, "Calling a Stored PL/SQL or Java Subprogram".

Can I Write C++ Code, and Precompile It Using Pro*C/C++?

Yes. See Chapter 12, "C++ Applications".

Can I Use Bind Variables Anywhere in a SQL Statement?

For example, I would d like to be able to input the name of a table in my SQL statements at runtime. But when I use host variables, I get precompiler errors.

In general, you can use host variables at anywhere in a SQL or PL/SQL, statement where expressions are allowed. See "Host Variable Referencing".

However, the following SQL statement, where table_name is a host variable, is illegal:

EXEC SQL SELECT ename,sal INTO :name, :salary FROM :table_name;

To solve your problem, you need to use dynamic SQL. See Chapter 13, "Oracle Dynamic SQL". There is a demo program that you can adapt to do this, "Example Program: Dynamic SQL Method 1".

I Am Confused By Character Handling in Pro*C/C++.

There are many options, but we can simplify. First of all, if you need compatibility with previous precompiler releases, and Oracle7, the safest thing to do is use VARCHAR[n] host variables. See "VARCHAR Variable Declaration".

The default datatype for all other character variables in Pro*C/C++ is CHARZ; see "CHARZ". Briefly, this means that you must null-terminate the string on input, and it is both blank-padded and null-terminated on output.

In release 8.0, the CHAR_MAP precompiler option was introduced to specify the default mapping of char variables. See "Precompiler Option CHAR_MAP".

If neither VARCHAR nor CHARZ works for your application, and you need total C-like behavior (null termination, absolutely no blank-padding), use the TYPE command and the C typedef statement, and use datatype equivalencing to convert your character host variables to STRING. See "User-Defined Type Equivalencing". There is an example program that shows how to use the TYPE command starting on "Example Program: Using sqlvcp()".

Is There Anything Special About Character Pointers?

Yes. When Pro*C/C++ binds an input or output host variable, it must know the length. When you use VARCHAR[n], or declare a host variable of type char[n], Pro*C/C++ knows the length from your declaration. But when you use a character pointer as a host variable, and use malloc() to define the buffer in your program, Pro*C/C++ has no way of knowing the length.

On output you must not only allocate the buffer, but pad it out with some non-null characters, then null-terminate it. On input or output, Pro*C/C++ calls strlen() for the buffer to get the length. See "Pointer Variables".

Why Does SPOOL Not Work in Pro*C/C++?

SPOOL is a special command used in SQL*Plus. It is not an embedded SQL command. See "Key Concepts of Embedded SQL Programming".

Where Can I Find The On-line Versions of the Example Programs?

Each Oracle installation should have a demo directory. If the directory is not there, or it does not contain the example programs, see your system or database administrator.

How Can I Compile and Link My Application?

Compiling and linking are very platform specific. Your system-specific Oracle documentation has instructions on how to link a Pro*C/C++ application. On UNIX systems, there is a makefile called proc.mk in the demo directory. To link, say, the demo program sample1.pc, you would enter the command line

make -f proc.mk sample1

If you need to use special precompiler options, you can run Pro*C/C++ separately, then do the make. Or, you can create your own custom makefile. For example, if your program contains embedded PL/SQL code, you can enter

proc cv_demo userid=username/password sqlcheck=semantics
make -f proc.mk cv_demo

On VMS systems, there is a script called LNPROC that you use to link your Pro*C/C++ applications.

Does Pro*C/C++ Now Support Using Structures As Host Variables?

How does this work with the array interface?

You can use arrays inside a single structure, or an array of structures with the array interface. See "Host Structures" and "Pointer Variables".

Is It Possible to Have Recursive Functions In Pro*C/C++ If I Use Embedded SQL In the Function?

Yes. However, for embedded SQL, you must use cursor variables.

Can I Use Any Release of Pro*C/C++ with Any Version of the Oracle Server?

When you run a precompiler or OCI application against a database server, Oracle recommends that the release of the database server software be equal to or higher than the client software release, but this configuration is not strictly required. For example, if your Oracle Database client software is release 8.1.7, then it is recommended that your Oracle Database server software be release 8.1.7 or higher to run a precompiler application on the client against the server.

More information about upgrading your applications can be found in the Oracle Database Upgrade Guide.

When My Application Runs, I Keep Getting an Ora-1405 Error (Fetched Column Value Is NULL).

You are selecting a NULL into a host variable that does not have an associated indicator variable. This is not in compliance with the ANSI/ISO standards, and was changed beginning with Oracle7.

If possible, rewrite your program using indicator variables, and use indicators in future development. Indicator variables are described "Indicator Variables".

Alternatively, if precompiling with MODE=ORACLE and DBMS=V7 or V8, specify UNSAFE_NULL=YES on the command line (see "UNSAFE_NULL" for more information) to disable the ORA-01405 message.

Are All SQLLIB Functions Private?

No. There are some SQLLIB functions that you can call to get information about your program, or its data. The SQLLIB public functions are shown here:

SQLLIB Public FunctionsDescription
SQLSQLDAAlloc()Used to allocate a SQL descriptor array (SQLDA) for dynamic SQL Method 4. See "How is the SQLDA Referenced?".
SQLCDAFromResultSetCursor()Used to convert a Pro*C/C++ cursor variable to an OCI cursor data area. See "New Names for SQLLIB Public Functions".
SQLSQLDAFree()Used to free a SQLDA allocated using SQLSQLDAAlloc(). See "New Names for SQLLIB Public Functions".
SQLCDAToResultSetCursor()Used to convert an OCI cursor data area to a Pro*C/C++ cursor variable. See "New Names for SQLLIB Public Functions".
SQLErrorGetText()Returns a long error message. See "sqlerrm".
SQLStmtGetText()Used to return the text of the most recently executed SQL statement. See "Obtaining the Text of SQL Statements".
SQLLDAGetNamed()Used to obtain a valid Logon Data Area for a named connection, when OCI calls are used in a Pro*C/C++ program. See "New Names for SQLLIB Public Functions".
SQLLDAGetCurrent()Used to obtain a valid Logon Data Area for the most recent connection, when OCI calls are used in a Pro*C/C++ program. See "New Names for SQLLIB Public Functions".
SQLColumnNullCheck()Returns an indication of NULL status for dynamic SQL Method 4. See "Handling NULL/Not NULL Datatypes".
SQLNumberPrecV6()Returns precision and scale of numbers. See "Extracting Precision and Scale".
SQLNumberPrecV7()A variant of SQLNumberPrecV6(). See "Extracting Precision and Scale".
SQLVarcharGetLength()Used for obtaining the padded size of a VARCHAR[n]. See "Find the Length of the VARCHAR Array Component".
SQLEnvGet()Returns the OCI environment handle for a given SQLLIB runtime context. See "SQLEnvGet()".
SQLSvcCtxGet()Returns the OCI service context for the database connection. See SQLSvcCtxGet().
SQLRowidGet()Returns the universal ROWID of the last row inserted. See "SQLRowidGet()".
SQLExtProcError()Returns control to PL/SQL when an error occurs in an external C procedure. See "SQLExtProcError()".

In the preceding list, the functions are thread-safe SQLLIB public functions. Use these functions in all new applications. The names of the functions were changed for release 8.0, but the old names are still supported in Pro*C/C++. For more information about these thread-safe public functions (including their old names), see the table "SQLLIB Public Functions -- New Names".

How Does Oracle Support The New Object Types?

See the chapters Chapter 17, "Objects" and Chapter 19, "The Object Type Translator" for how to use Object types in Pro*C/C++ applications.

Compatibility, Upgrading, and Migration

With the 11.1 release, Pro*C/C++ adopts a similar compatibility rule to OCI-based applications. This compatibility is subject to the same limitations that OCI imposes on backward compatibility.

The additional "array insert" and "array select" syntax will help migrating DB2 precompiler applications to the Pro*C/C++ application. This is because you will not need to change DB2 array INSERT and SELECT syntax to that of Oracle Pro*C/C++.

The "Implicit Buffered Insert" feature supported by Pro*C/C++ helps you to migrate DB2 precompiler applications to Pro*C/C++ applications without using the array syntax of Pro*C/C++ for better performance.

PKCP/(uPK+AOEBPS/partpage2.htmn Applications PK&UsnPK+AOEBPS/pc_19ott.htm The Object Type Translator

19 The Object Type Translator

This chapter discusses the OTT (Object Type Translator), which maps database object types, LOB types, and collection types to C structs for use in Pro*C/C++ applications.

The chapter includes the following sections:

OTT Overview

OTT (The Object Type Translator) assists in the development of applications that make use of user-defined types in an Oracle server.

Through the use of SQL CREATE TYPE statements, you can create object types. The definitions of these types are stored in the database, and can be used in the creation of database tables. Once these tables are populated, an OCI, Pro*C/C++, or Java programmer can access objects stored in the tables.

An application that accesses object data must be able to represent the data in a host language format. This is accomplished by representing object types as C structs. It would be possible for a programmer to code struct declarations by hand to represent database object types, but this can be very time-consuming and error-prone if many types are involved. OTT simplifies this step by automatically generating appropriate struct declarations. For Pro*C/C++, the application only needs to include the header file generated by OTT. In OCI, the application also needs to call an initialization function generated by OTT.

In addition to creating structs that represent stored datatypes, OTT also generates parallel indicator structs which indicate whether an object type or its fields are NULL.

For detailed information about object types, refer to Chapter 16, "LOBs", Chapter 17, "Objects", and Chapter 18, "Collections".

What is the Object Type Translator

The Object Type Translator (OTT) converts database definitions of object types and named collection types into C struct declarations which can be included in an OCI or Pro*C/C++ application.

Both OCI programmers and Pro*C/C++ programmers must explicitly invoke OTT to translate database types to C representations. OCI programmers must also initialize a data structure called the Type Version Table with information about the user-defined types required by the program. Code to perform this initialization is generated by OTT. In Pro*C/C++, the type version information is recorded in the OUTTYPE file which is passed as a parameter to Pro*C/C++.

On most operating systems, OTT is invoked on the command line. It takes as input an INTYPE file, and it generates an OUTTYPE file and one or more C header files and an optional implementation file (for OCI programmers). The following is an example of a command that invokes OTT:

ott userid=scott/tiger intype=demoin.typ outtype=demoout.typ code=c hfile=demo.h

This command causes OTT to connect to the database with username scott and password tiger, and translate database types to C structs, based on instructions in the INTYPE file, demoin.typ. The resulting structs are output to the header file, demo.h, for the host language (C) specified by the CODE parameter. The OUTTYPE file, demoout.typ, receives information about the translation.

Each of these parameters is described in more detail in later sections of this chapter.

Sample demoin.typ file:

CASE=LOWER
TYPE employee

Sample demoout.typ file:

CASE = LOWER
TYPE SCOTT.EMPLOYEE AS employee
  VERSION = "$8.0"
  HFILE = demo.h

In this example, the demoin.typ file contains the type to be translated, preceded by TYPE (for example, TYPE employee). The structure of the OUTTYPE file is similar to the INTYPE file, with the addition of information obtained by OTT.

Once OTT has completed the translation, the header file contains a C struct representation of each type specified in the INTYPE file, and a NULL indicator struct corresponding to each type. For example, if the employee type listed in the INTYPE file was defined as

CREATE TYPE employee AS OBJECT
(
    name       VARCHAR2(30),
    empno      NUMBER,
    deptno     NUMBER,
    hiredate   DATE,
    salary     NUMBER
);

the header file generated by OTT (demo.h) includes, among other items, the following declarations:

struct employee
{
    OCIString * name;
    OCINumber empno;
    OCINumber deptno;
    OCIDate   hiredate;
    OCINumber salary;
};
typedef struct emp_type emp_type;

struct employee_ind
{
    OCIInd _atomic;
    OCIInd name;
    OCIInd empno;
    OCIInd deptno;
    OCIInd hiredate;
    OCIInd salary;
};
typedef struct employee_ind employee_ind;

The datatypes that appear in the struct declarations (for example, OCIString and OCIInd) are special datatypes which were new in Oracle8. For more information about these types, see "OTT Datatype Mappings".

The following sections describe these aspects of using OTT:

The remaining sections of the chapter discuss the use of OTT with OCI and Pro*C/C++, followed by a reference section that describes command line syntax, parameters, INTYPE file structure, nested #include file generation, schema names usage, default name mapping, and restrictions.

Creating Types in the Database

The first step in using OTT is to create object types or named collection types and store them in the database. This is accomplished through the use of the SQL CREATE TYPE statement.

See Also: For information about creating object types and collections, refer to Chapter 17, "Objects".

Invoking OTT

The next step is to invoke OTT.

You can specify OTT parameters on the command line, or in a file called a configuration file. Certain parameters can also be specified in the INTYPE file.

If you specify a parameter in more than one place, its value on the command line will take precedence over its value in the INTYPE file, which takes precedence over its value in a user-defined configuration file, which takes precedence over its value in the default configuration file.

For global options -- that is, options on the command line or options at the beginning of the INTYPE file before any TYPE statements -- the value on the command line overrides the value in the INTYPE file. (The options that can be specified globally in the INTYPE file are CASE, CODE, INITFILE, OUTDIR, and INITFUNC, but not HFILE.) Anything in the INTYPE file in a TYPE specification applies to a particular type only, and overrides anything on the command line that would otherwise apply to the type. So if you enter TYPE person HFILE=p.h, it applies to person only and overrides the HFILE on the command line. The statement is not considered a command-line parameter.

Command Line

Parameters (also called options) set on the command line override any set elsewhere.

See Also: For information about creating object types and collections, refer to Chapter 17, "Objects".

Configuration File

A configuration file is a text file that contains OTT parameters. Each non-blank line in the file contains one parameter, with its associated value or values. If more than one parameter is put on a line, only the first one will be used. No whitespace may occur on any non-blank line of a configuration file.

A configuration file can be named on the command line. In addition, a default configuration file is always read. This default configuration file must always exist, but can be empty. The name of the default configuration file is ottcfg.cfg, and the location of the file is system-specific. See your platform-specific documentation for further information.

INTYPE File

The INTYPE file gives a list of types for OTT to translate.

The parameters CASE, HFILE, INITFUNC, and INITFILE can appear in the INTYPE file. See "The INTYPE File" for more information.

The OTT Command Line

On most platforms, OTT is invoked on the command line. You can specify the input and output files and the database connection information, among other things. Consult your platform-specific documentation to see how to invoke OTT on your platform.

The following is an example (example 1) of an OTT invocation from the command line:

ott userid=scott/tiger intype=demoin.typ outtype=demoout.typ code=c hfile=demo.h

Note:

No spaces are permitted around the equals sign (=).

The following sections describe the elements of the command line used in this example.

For a detailed discussion of the various OTT command line options, see "OTT Reference".

OTT

Causes OTT to be invoked. It must be the first item on the command line.

Userid

Specifies the database connection information which OTT will use. In example one, OTT will attempt to connect with username scott and password tiger.

INTYPE

Specifies the name of the INTYPE file which will be used. In example 1, the name of the INTYPE file is specified as demoin.typ.

OUTTYPE

Specifies the name of the OUTTYPE file. When OTT generates the C header file, it also writes information about the translated types into the OUTTYPE file. This file contains an entry for each of the types that is translated, including its version string, and the header file to which its C representation was written.

In example one, the name of the OUTTYPE file is specified as demoout.typ.


Note:

If the file specified by OUTTYPE already exists, it will be overwritten when OTT runs, with one exception: if the contents of the file as generated by OTT are identical to the previous contents of the file, OTT will not actually write to the file. This preserves the modification time of the file so that UNIX make and similar facilities on other platforms do not perform unnecessary recompilations.

CODE

Specifies the target language for the translation. The following options are available:

  • C (equivalent to ANSI_C)

  • ANSI_C (for ANSI C)

  • KR_C (for Kernighan & Ritchie C)

There is currently no default value, so this parameter is required.

Struct declarations are identical in both C dialects. The style in which the initialization function defined in the INITFILE file is defined depends on whether KR_C is used. If the INITFILE option is not used, all three options are equivalent.

HFILE

Specifies the name of the C header file to which the generated structs should be written. In example 1, the generated structs will be stored in a file called demo.h.


Note:

If the file specified by HFILE already exists, it will be overwritten when OTT runs, with one exception: if the contents of the file as generated by OTT are identical to the previous contents of the file, OTT will not actually write to the file. This preserves the modification time of the file so that UNIX make and similar facilities on other platforms do not perform unnecessary recompilations.

INITFILE

Specifies the use of the C source file into which the type initialization function is to be written.

The initialization function is only needed in OCI programs. In Pro*C/C++ programs, the Pro*C/C++ runtime library initializes types for the user.


Note:

If the file specified by INITFILE already exists, it will be overwritten when OTT runs, with one exception: if the contents of the file as generated by OTT are identical to the previous contents of the file, OTT will not actually write to the file. This preserves the modification time of the file so that UNIX make and similar facilities on other platforms do not perform unnecessary recompilations.

INITFUNC

Specifies the name of the initialization function to be defined in the INITFILE.

If this parameter is not used and an initialization function is generated, the name of the initialization function will be the same as the base name of the INITFILE.

This function is only needed in OCI programs.

The INTYPE File

When you run OTT, the INTYPE file tells OTT which database types should be translated. It can also control the naming of the generated structs. You can create the INTYPE file, or use the OUTTYPE file of a previous invocation of OTT. If the INTYPE parameter is not used, all types in the schema to which OTT connects are translated.

The following is a simple example of a user-created INTYPE file:

CASE=LOWER
TYPE employee
  TRANSLATE SALARY$ AS salary
            DEPTNO AS department
TYPE ADDRESS
TYPE item
TYPE "Person"
TYPE PURCHASE_ORDER AS p_o

The first line, with the CASE keyword, indicates that generated C identifiers should be in lower case. However, this CASE option is only applied to those identifiers that are not explicitly mentioned in the INTYPE file. Thus, employee and ADDRESS would always result in C structures employee and ADDRESS, respectively. The members of these structures would be named in lower case.

See "CASE" for further information regarding the CASE option.

The lines that begin with the TYPE keyword specify which types in the database should be translated. In this case, the EMPLOYEE, ADDRESS, ITEM, PERSON, and PURCHASE_ORDER types.

The TRANSLATE...AS keywords specify that the name of an object attribute should be changed when the type is translated into a C struct. In this case, the SALARY$ attribute of the employee type is translated to salary.

The AS keyword in the final line specifies that the name of an object type should be changed when it is translated into a struct. In this case, the purchase_order database type is translated into a struct called p_o.

If you do not use AS to translate a type or attribute name, the database name of the type or attribute will be used as the C identifier name, except that the CASE option will be observed, and any characters that cannot be mapped to a legal C identifier character will be replaced by an underscore. Reasons for translating a type or attribute name include:

  • the name contains characters other than letters, digits, and underscores

  • the name conflicts with a C keyword

  • the type name conflicts with another identifier in the same scope. This can happen, for example, if the program uses two types with the same name from different schemas.

  • the programmer prefers a different name

OTT may need to translate additional types that are not listed in the INTYPE file. This is because OTT analyzes the types in the INTYPE file for type dependencies before performing the translation, and translates other types as necessary. For example, if the ADDRESS type were not listed in the INTYPE file, but the Person type had an attribute of type ADDRESS, OTT would still translate ADDRESS because it is required to define the Person type.


Note:

As of Release 1 (9.0.1), users may specify TRANSITIVE = FALSE to not generate types that are not specified in the INTYPE file. TRANSITIVE is set to TRUE by default.

A normal case-insensitive SQL identifier can be spelled in any combination of upper and lower case in the INTYPE file, and is not quoted.

Use quotation marks, such as TYPE "Person" to reference SQL identifiers that have been created in a case-sensitive manner, for example, CREATE TYPE "Person". A SQL identifier is case-sensitive if it was quoted when it was declared.

Quotation marks can also be used to refer to a SQL identifier that is also an OTT-reserved word, for example, TYPE "CASE". In this case, the quoted name must be in upper case if the SQL identifier was created in a case-insensitive manner, for example, CREATE TYPE Case. If an OTT-reserved word is used to refer to the name of a SQL identifier but is not quoted, OTT will report a syntax error in the INTYPE file.

See Also: For a more detailed specification of the structure of the INTYPE file and the available options, see "Structure of the INTYPE File".

OTT Datatype Mappings

When OTT generates a C struct from a database type, the struct contains one element corresponding to each attribute of the object type. The datatypes of the attributes are mapped to types that are used in Oracle object data types. The datatypes found in Oracle include a set of predefined, primitive types, and provide for the creation of user-defined types, like object types and collections.

The set of predefined types includes standard types that are familiar to most programmers, including number and character types. It also includes datatypes that were introduced with Oracle8 (for example, BLOB or CLOB).

Oracle also includes a set of predefined types that are used to represent object type attributes in C structs. As an example, consider the following object type definition, and its corresponding OTT-generated struct declarations:

CREATE TYPE employee AS OBJECT
(   name       VARCHAR2(30),
    empno      NUMBER,
    deptno     NUMBER,
    hiredate   DATE,
    salary$    NUMBER);

The OTT output, assuming CASE=LOWER and no explicit mappings of type or attribute names, is:

struct employee
{   OCIString * name;
    OCINumber empno;
    OCINumber department;
    OCIDate   hiredate;
    OCINumber salary_;
};
typedef struct emp_type emp_type;
struct employee_ind
{
    OCIInd _atomic;
    OCIInd name;
    OCIInd empno;
    OCIInd department;
    OCIInd hiredate;
    OCIInd salary_;
}
typedef struct employee_ind employee_ind;

The indicator struct (struct employee_ind) is explained in "NULL Indicator Structs".

The datatypes in the struct declarations—OCIString, OCINumber, OCIDate, OCIInd—are C mappings of object types introduced in Oracle8. They are used here to map the datatypes of the object type attributes. The NUMBER datatype of the empno attribute, maps to the new OCINumber datatype, for example. These new datatypes can also be used as the types of bind and define variables.

See Also: For further information about the use of datatypes, including object datatypes in OCI applications, refer to the Oracle Call Interface Programmer's Guide.

Mapping Object Datatypes to C

This section describes the mappings of object attribute types to C types generated by OTT. "OTT Type Mapping Example" includes examples of many of these different mappings. Table 19-1 lists the mappings from types that can be used as attributes of object datatypes that are generated by OTT.

Table 19-1 Object Datatype Mappings for Object Type Attributes

Object Attribute TypesC Mapping

VARCHAR2(N)

OCIString *

VARCHAR(N)

OCIString *

CHAR(N), CHARACTER(N)

OCIString *

NUMBER, NUMBER(N), NUMBER(N,N)

OCINumber

NUMERIC, NUMERIC(N), NUMERIC(N,N)

OCINumber

REAL

OCINumber

INT, INTEGER, SMALLINT

OCINumber

FLOAT, FLOAT(N), DOUBLE PRECISION

OCINumber

DEC, DEC(N), DEC(N,N)

OCINumber

DECIMAL, DECIMAL(N), DECIMAL(N,N)

OCINumber

DATE

OCIDate *

BLOB

OCIBlobLocator *

CLOB

OCIClobLocator *

BFILE

OCIBFileLocator *

Nested Object Type

C name of the nested object type.

REF

Declared using typedef; equivalent to OCIRef *.

RAW(N)

OCIRaw *


Table 19-2 shows the mappings of named collection types to object datatypes generated by OTT:

Table 19-2 Object Datatype Mappings for Collection Types

Named Collection TypeC Mapping

VARRAY

Declared using typedef; equivalent to OCIArray *.

NESTED TABLE

Declared using typedef; equivalent to OCITable *.



Note:

For REF, VARRAY, and NESTED TABLE types, OTT generates a typedef. The type declared in the typedef is then used as the type of the data member in the struct declaration. For examples, see "OTT Type Mapping Example".

If an object type includes an attribute of a REF or collection type, a typedef for the REF or collection type is first generated. Then the struct declaration corresponding to the object type is generated. The struct includes an element whose type is a pointer to the REF or collection type.

If an object type includes an attribute whose type is another object type, OTT first generates the nested type (if TRANSITIVE = TRUE.) It then maps the object type attribute to a nested struct of the type of the nested object type.

The C datatypes to which OTT maps non-object database attribute types are structures, which, except for OCIDate, are opaque.

OTT Type Mapping Example

The following example demonstrates the various type mappings created by OTT.

Given the following database types:

CREATE TYPE my_varray AS VARRAY(5) of integer;

CREATE TYPE object_type AS OBJECT
(object_name    VARCHAR2(20));

CREATE TYPE my_table AS TABLE OF object_type;

CREATE TYPE many_types AS OBJECT
( the_varchar    VARCHAR2(30),
  the_char       CHAR(3),
  the_blob       BLOB,
  the_clob       CLOB,
  the_object     object_type,
  another_ref    REF other_type,
  the_ref        REF many_types,
  the_varray     my_varray,
  the_table      my_table,
  the_date       DATE,
  the_num        NUMBER,
  the_raw        RAW(255));

and an INTYPE file that includes:

CASE = LOWER
TYPE many_types

OTT would generate the following C structs:


Note:

Comments are provided here to help explain the structs. These comments are not part of actual OTT output.

#ifndef MYFILENAME_ORACLE
#define MYFILENAME_ORACLE

#ifndef OCI_ORACLE
#include <oci.h>
#endif

typedef OCIRef many_types_ref;
typedef OCIRef object_type_ref;
typedef OCIArray my_varray;             /* part of many_types */
typedef OCITable my_table;              /* part of many_types*/
typedef OCIRef other_type_ref;
struct object_type                      /* part of many_types */
{
   OCIString * object_name;
};
typedef struct object_type object_type;

struct object_type_ind                  /*indicator struct for*/
{                                       /*object_types*/
   OCIInd _atomic;
   OCIInd object_name;
};
typedef struct object_type_ind object_type_ind;

struct many_types
{
   OCIString *        the_varchar;
   OCIString *        the_char;
   OCIBlobLocator *   the_blob;
   OCIClobLocator *   the_clob;
   struct object_type the_object;
   other_type_ref *   another_ref;
   many_types_ref *   the_ref;
   my_varray *        the_varray;
   my_table *         the_table; 
   OCIDate            the_date;
   OCINumber          the_num;
   OCIRaw *           the_raw;
};
typedef struct many_types many_types;

struct many_types_ind                   /*indicator struct for*/
{                                       /*many_types*/
   OCIInd _atomic;
   OCIInd the_varchar;
   OCIInd the_char;
   OCIInd the_blob;
   OCIInd the_clob;
   struct object_type_ind the_object;   /*nested*/
   OCIInd another_ref;
   OCIInd the_ref;
   OCIInd the_varray;
   OCIInd the_table;
   OCIInd the_date;
   OCIInd the_num;
   OCIInd the_raw;
};
typedef struct many_types_ind many_types_ind;

#endif

Notice that even though only one item was listed for translation in the INTYPE file, two object types and two named collection types were translated. This is because the OTT parameter "TRANSITIVE", has the default value of TRUE. As described in that section, when TRANSITIVE=TRUE, OTT automatically translates any types which are used as attributes of a type being translated, in order to complete the translation of the listed type.

This is not the case for types that are only accessed by a pointer or REF in an object type attribute. For example, although the many_types type contains the attribute another_ref REF other_type, a declaration of struct other_type was not generated.

This example also illustrates how typedefs are used to declare VARRAY, NESTED TABLE, and REF types.

The typedefs occur near the beginning:

typedef OCIRef many_types_ref;
typedef OCIRef object_type_ref;
typedef OCIArray my_varray;    
typedef OCITable my_table; 
typedef OCIRef other_type_ref;

In the struct many_types, the VARRAY, NESTED TABLE, and REF attributes are declared:

struct many_types
{
   ...
   other_type_ref *   another_ref;
   many_types_ref *   the_ref;
   my_varray *        the_varray;
   my_table *         the_table;
   ...
}

NULL Indicator Structs

Each time OTT generates a C struct to represent a database object type, it also generates a corresponding NULL indicator struct. When an object type is selected into a C struct, NULL indicator information can be selected into a parallel struct.

For example, the following NULL indicator struct was generated in the example in the previous section:

struct many_types_ind
{
OCIInd _atomic;
OCIInd the_varchar;
OCIInd the_char;
OCIInd the_blob;
OCIInd the_clob;
struct object_type_ind the_object;
OCIInd another_ref;
OCIInd the_ref;
OCIInd the_varray;
OCIInd the_table;
OCIInd the_date;
OCIInd the_num;
OCIInd the_raw;
};
typedef struct many_types_ind many_types_ind;

The layout of the NULL struct is important. The first element in the struct (_atomic) is the atomic NULL indicator. This value indicates the NULL status for the object type as a whole. The atomic NULL indicator is followed by an indicator element corresponding to each element in the OTT-generated struct representing the object type.

Notice that when an object type contains another object type as part of its definition (in the earlier example, it is the object_type attribute), the indicator entry for that attribute is the NULL indicator struct (object_type_ind) corresponding to the nested object type.

VARRAYs and NESTED TABLEs contain the NULL information for their elements. The datatype for all other elements of a NULL indicator struct is OCIInd.

See Also: For more information about atomic NULLness, refer to the discussion of object types in Oracle Call Interface Programmer's Guide.

OTT Support for Type Inheritance

To support type inheritance of objects, OTT generates a C struct to represent an object subtype by declaring the inherited attributes in an encapsulated struct with the special name '_super', before declaring the new attributes. Thus, for an object subtype that inherits from a supertype, the first element in the struct is named '_super', followed by elements corresponding to each attribute of the subtype.The type of the element named '_super' is the name of the supertype.

For example, given the type Person_t, with subtype Student_t and subtype Employee_t, which are created as follows:

CREATE TYPE Person_t AS OBJECT
( ssn     NUMBER,
  name    VARCHAR2(30),
  address VARCHAR2(100)) NOT FINAL;

CREATE TYPE Student_t UNDER Person_t
( deptid NUMBER,
  major  VARCHAR2(30)) NOT FINAL;

CREATE TYPE Employee_t UNDER Person_t
( empid NUMBER,
  mgr   VARCHAR2(30));

and, given an INTYPE file which includes:

CASE=SAME
TYPE EMPLOYEE_T
TYPE STUDENT_T
TYPE PERSON_T

OTT generates the following C structs for Person_t, Student_t, and Employee_t and their null indicator structs:

#ifndef MYFILENAME_ORACLE
#define MYFILENAME_ORACLE

#ifndef OCI_ORACLE
#include <oci.h>
#endif

typedef OCIRef EMPLOYEE_T_ref;
typedef OCIRef STUDENT_T_ref;
typedef OCIRef PERSON_T_ref;

struct PERSON_T
{
   OCINumber SSN;
   OCIString * NAME;
   OCIString * ADDRESS;
};
typedef struct PERSON_T PERSON_T;

struct PERSON_T_ind
{
   OCIInd _atomic;
   OCIInd SSN;
   OCIInd NAME;
   OCIInd ADDRESS;
};
typedef struct PERSON_T_ind PERSON_T_ind;

struct EMPLOYEE_T
{
   PERSON_T _super;
   OCINumber EMPID;
   OCIString * MGR;
};
typedef struct EMPLOYEE_T EMPLOYEE_T;

struct EMPLOYEE_T_ind
{
   PERSON_T _super;
   OCIInd EMPID;
   OCIInd MGR;
};
typedef struct EMPLOYEE_T_ind EMPLOYEE_T_ind;

struct STUDENT_T
{
   PERSON_T _super;
   OCINumber DEPTID;
   OCIString * MAJOR;
};
typedef struct STUDENT_T STUDENT_T;

struct STUDENT_T_ind
{
   PERSON_T _super;
   OCIInd DEPTID;
   OCIInd MAJOR;
};
typedef struct STUDENT_T_ind STUDENT_T_ind;

#endif

The earlier C mapping convention allows simple up-casting from an instance of a subtype to an instance of a supertype in C to work properly. For example:

STUDENT_T *stu_ptr = some_ptr;               /* some STUDENT_T instance  */
PERSON_T  *pers_ptr = (PERSON_T *)stu_ptr;   /* up-casting */

The null indicator structs are generated similarly. Note that for the supertype Person_t null indicator struct, the first element is '_atomic', and that for the subtypes Employee_t and Student_t null indicator structs, the first element is '_super' (no atomic element is generated for subtypes).

Substitutable Object Attributes

For attributes of NOT FINAL types (and therefore potentially substitutable), the embedded attribute is represented as a pointer.

Consider a type Book_t created as:

CREATE TYPE Book_t AS OBJECT 
( title   VARCHAR2(30),
  author  Person_t     /* substitutable */);

The corresponding C struct generated by OTT contains a pointer to Person_t:

struct Book_t
{
  OCIString  *title;
  Person_t   *author;    /* pointer to Person_t struct */
}

The null indicator struct corresponding to the earlier type is:

struct Book_t_ind
{ 
  OCIInd  _atomic;
  OCIInd  title;
  OCIInd  author;
}

Note that the null indicator struct corresponding to the author attribute can be obtained from the author object itself. See OBJECT GET.

If a type is defined to be FINAL, it cannot have any subtypes. An attribute of a FINAL type is therefore not substitutable. In such cases, the mapping is as before: the attribute struct is inline. Now, if the type is altered and defined to be NOT FINAL, the mapping will have to change. The new mapping is generated by running OTT again.

The OUTTYPE File

The OUTTYPE file is named on the OTT command line. When OTT generates the C header file, it also writes the results of the translation into the OUTTYPE file. This file contains an entry for each of the types that is translated, including its version string, and the header file to which its C representation was written.

The OUTTYPE file from one OTT run can be used as the INTYPE file for a subsequent OTT invocation.

For example, given the simple INTYPE file used earlier in this chapter

CASE=LOWER
TYPE employee
  TRANSLATE SALARY$ AS salary
            DEPTNO AS department
TYPE ADDRESS
TYPE item
TYPE person
TYPE PURCHASE_ORDER AS p_o

the user has chosen to specify the case for OTT-generated C identifiers, and has provided a list of types that should be translated. In two of these types, naming conventions are specified.

The following example shows what the OUTTYPE file looks like after running OTT:

CASE = LOWER
TYPE EMPLOYEE AS employee
  VERSION = "$8.0"
  HFILE = demo.h
  TRANSLATE SALARY$ AS salary
             DEPTNO AS department
TYPE ADDRESS AS ADDRESS
  VERSION = "$8.0"
  HFILE = demo.h
TYPE ITEM AS item
  VERSION = "$8.0"
  HFILE = demo.h
TYPE "Person" AS Person
  VERSION = "$8.0"
  HFILE = demo.h
TYPE PURCHASE_ORDER AS p_o
  VERSION = "$8.0"
  HFILE = demo.h

When examining the contents of the OUTTYPE file, you might discover types listed that were not included in the INTYPE specification. For example, if the INTYPE file only specified that the person type was to be translated:

CASE = LOWER
TYPE PERSON

and the definition of the person type includes an attribute of type address, then the OUTTYPE file will include entries for both PERSON and ADDRESS. The person type cannot be translated completely without first translating address.

When the parameter TRANSITIVE has been set to TRUE (it is the default), OTT analyzes the types in the INTYPE file for type dependencies before performing the translation, and translates other types as necessary.

Using OTT with OCI Applications

C header and implementation files that have been generated by OTT can be used by an OCI application that accesses objects in a database server. Incorporate the header file into the OCI code with an #include statement.

Once the header file has been included, the OCI application can access and manipulate object data in the host language format.

Figure 19-1 shows the steps involved in using OTT with OCI.

  1. SQL is used to create type definitions in the database.

  2. OTT generates a header file containing C representations of object types and named collection types. It also generates an implementation file, as named with the INITFILE option.

  3. The application is written. User-written code in the OCI application declares and calls the INITFUNC function.

  4. The header file is included in an OCI source code file.

  5. The OCI application, including the implementation file generated by OTT, is compiled and linked with the OCI libraries.

  6. The OCI executable is run against the Oracle Server.

Figure 19-1 Using OTT with OCI

Using OTT with OCI
Description of "Figure 19-1 Using OTT with OCI"

Accessing and Manipulating Objects with OCI

Within the application, the OCI program can perform bind and define operations using program variables declared to be of types that appear in the OTT-generated header file.

For example, an application might fetch a REF to an object using a SQL SELECT statement and then pin that object using the appropriate OCI function. Once the object has been pinned, its attribute data can be accessed and manipulated with other OCI functions.

OCI includes a set of datatype mapping and manipulation functions specifically designed to work on attributes of object types and named collection types.

Some of the available functions follow:

  • OCIStringSize() gets the size of an OCIString string.

  • OCINumberAdd() adds two OCINumber numbers together.

  • OCILobIsEqual() compares two LOB locators for equality.

  • OCIRawPtr() gets a pointer to an OCIRaw raw datatype.

  • OCICollAppend() appends an element to a collection type (OCIArray or OCITable).

  • OCITableFirst() returns the index for the first existing element of a nested table (OCITable).

  • OCIRefIsNull() tests if a REF (OCIRef) is NULL

These functions are described in detail in the following chapters of the Oracle Call Interface Programmer's Guide:

  • Chapter 2, which covers OCI concepts, including binding and defining

  • Chapter 6, which covers object access and navigation

  • Chapter 7, which covers datatype mapping and manipulation

  • Chapter 12, which lists datatype mapping and manipulation functions

Calling the Initialization Function

OTT generates a C initialization function if requested. The initialization function tells the environment, for each object type used in the program, which version of the type is used. You can specify a name for the initialization function when invoking OTT with the INITFUNC option, or may allow OTT to select a default name based on the name of the implementation file (INITFILE) containing the function.

The initialization function takes two arguments, an environment handle pointer and an error handle pointer. There is typically a single initialization function, but this is not required. If a program has several separately compiled pieces requiring different types, you may want to execute OTT separately for each piece requiring, for each piece, one initialization file, containing an initialization function.

After you create an environment handle by an explicit OCI object call, for example, by calling OCIEnvInit(), you must also call the initialization functions explicitly for each environment handle. This gives each handle access to all the datatypes used in the entire program.

If an environment handle is implicitly created using embedded SQL statements, such as EXEC SQL CONTEXT USE and EXEC SQL CONNECT, the handle is initialized implicitly, and the initialization functions need not be called. This is relevant for Pro*C/C++ applications, or when Pro*C/C++ is being combined with OCI applications.

The following example shows an initialization function.

Given an INTYPE file, ex2c.typ, containing

TYPE SCOTT.PERSON
TYPE SCOTT.ADDRESS

and the command line

ott userid=scott/tiger intype=ex2c outtype=ex2co hfile=ex2ch.h initfile=ex2cv.c

OTT generates the following to the file ex2cv.c:

#ifndef OCI_ORACLE
#include <oci.h>
#endif

sword ex2cv(OCIEnv *env, OCIError *err)
{
   sword status = OCITypeVTInit(env, err);
   if (status == OCI_SUCCESS)
      status = OCITypeVTInsert(env, err,
          "SCOTT", 5,
          "PERSON", 6,
          "$8.0", 4);
    if (status == OCI_SUCCESS)
        status = OCITypeVTInsert(env, err,
           "SCOTT", 5,
           "ADDRESS", 7,
           "$8.0", 4);
    return status;
}

The function ex2cv creates the type version table and inserts the types SCOTT.PERSON and SCOTT.ADDRESS.

If a program explicitly creates an environment handle, all the initialization functions must be generated, compiled, and linked, because they must be called for each explicitly created handle. If a program does not explicitly create any environment handles, initialization functions are not required.

A program that uses an OTT-generated header file must also use the initialization function generated at the same time. More precisely, if a header file generated by OTT is included in a compilation that generates code that is linked into program P, and an environment handle is explicitly created somewhere in program P, the implementation file generated by the same invocation of OTT must also be compiled and linked into program P. Doing this correctly is your responsibility.

Tasks of the Initialization Function

The C initialization function supplies version information about the types processed by OTT. It adds to the type-version table the name and version identifier of every OTT-processed object datatype.

The type-version table is used by the Open Type Manager (OTM) to determine which version of a type a particular program uses. Different initialization functions generated by OTT at different times may add some of the same types to the type version table. When a type is added more than once, OTM ensures that the same version of the type is registered each time.

It is the OCI programmer's responsibility to declare a function prototype for the initialization function, and to call the function.


Note:

In the current release of Oracle, each type has only one version. Initialization of the type version table is required only for compatibility with future releases of Oracle.

Using OTT with Pro*C/C++ Applications

When building Pro*C/C++ applications, the type-translation process can be simpler than when building OCI-based applications. This is because precompiler-generated code will automatically initialize the type version table.

A C header file generated by OTT can be used by a Pro*C/C++ application to access objects in a database server. The header file is incorporated into the code with an #include statement. Once the header file has been included, the Pro*C/C++ application can access and manipulate object data in the host language format.

Figure 19-2 shows the steps involved in using OTT with Pro*C/C++.

  1. SQL is used to create type definitions in the database.

  2. OTT generates a header file containing C representations of object types, REF types, and named collection types. It also generates an OUTTYPE file that is passed as the INTYPE parameter to Pro*C/C++.

  3. The header file is included in a Pro*C/C++ source code file.

  4. The Pro*C/C++ application is compiled and linked with the Pro*C/C++ run-time library SQLLIB.

  5. The Pro*C/C++ executable is run against the Oracle Server.

Figure 19-2 Building an Object-oriented Pro*C/C++ Application

Building an Object-oriented Pro*C/C++ Application
Description of "Figure 19-2 Building an Object-oriented Pro*C/C++ Application"

As noted in step 2, earlier, the OUTTYPE file generated by OTT serves a special purpose for Pro*C/C++ programmers. Pass the OUTTYPE file to the new INTYPE command line parameter when invoking Pro*C/C++. The contents of this file are used by the precompiler to determine which database types correspond to which OTT-generated structs. OCI programmers must make this association explicitly through the use of special bind, define, and type information access functions.

Also, the precompiler generates code to initialize the type version table with the types named in the OTT OUTTYPE (Pro*C/C++ INTYPE) file.


Note:

Oracle recommends that the OUTTYPE file from OTT always serve as the INTYPE file to Pro*C/C++. It would be possible for you to write an INTYPE file for Pro*C/C++, but this is not recommended, due to the possibility of errors being introduced.

One way to manipulate the attributes of objects retrieved from the server is to call the OCI datatype mapping and manipulation functions. Before doing this, the application must first call SQLEnvGet() to obtain an OCI environment handle to pass to the OCI functions, and SQLSvcCtxGet() to obtain an OCI service context to pass to the OCI functions. There are also Pro*C facilities that can be used to manipulate object attributes. See Chapter 17, "Objects" for more information.

The process of calling OCI functions from Pro*C/C++ is described briefly in "Accessing and Manipulating Objects with OCI", and in more detail in Chapter 8 of Oracle Call Interface Programmer's Guide.

OTT Reference

Behavior of OTT is controlled by parameters which can appear on the OTT command line or in a CONFIG file. Certain parameters may also appear in the INTYPE file. This section provides detailed information about the following topics:

The following conventions are used in this chapter to describe OTT syntax:

  • Italic strings are to be supplied by the user.

  • Strings in UPPERCASE are entered as shown, except that case is not significant.

  • Square brackets [...] enclose optional items.

  • An ellipsis (...) immediately following an item (or items enclosed in brackets) means that the item can be repeated any number of times.

  • Punctuation symbols other than those described earlier are entered as shown. These include '.', '@', and so on.

OTT Command Line Syntax

The OTT command-line interface is used when explicitly invoking OTT to translate database types into C structs. This is always required when developing OCI applications or Pro*C/C++ applications that use objects.

An OTT command-line statement consists of the keyword OTT, followed by a list of OTT parameters.

The parameters that can appear on an OTT command-line statement are as follows:

   [USERID=username/password[@db_name]]
   [INTYPE=in_filename]
   OUTTYPE=out_filename
   CODE={C|ANSI_C|KR_C}
   [HFILE=filename]
   [ERRTYPE=filename]
   [CONFIG=filename]
   [INITFILE=filename]
   [INITFUNC=filename]
   [CASE={SAME|LOWER|UPPER|OPPOSITE}]
   [SCHEMA_NAMES={ALWAYS|IF_NEEDED|FROM_INTYPE}]
   [TRANSITIVE=TRUE|FALSE]

Note:

Generally, the order of the parameters following the OTT command does not matter, and only the OUTTYPE and CODE parameters are always required.

The HFILE parameter is almost always used. If omitted, HFILE must be specified individually for each type in the INTYPE file. If OTT determines that a type not listed in the INTYPE file must be translated, an error will be reported. Therefore, it is safe to omit the HFILE parameter only if the INTYPE file was previously generated as an OTT OUTTYPE file.

If the INTYPE file is omitted, the entire schema will be translated. See the parameter descriptions in the following section for more information.

The following is an example of an OTT command line statement (enter it as one line):

OTT userid=scott/tiger intype=in.typ outtype=out.typ code=c hfile=demo.h errtype=demo.tls case=lower

Each of the OTT command line parameters is described in the following sections.

OTT Parameters

Enter parameters on the OTT command line using the following format:

parameter=value

where parameter is the literal parameter string and value is a valid parameter setting. The literal parameter string is not case sensitive.

Separate command-line parameters using either spaces or tabs.

Parameters can also appear within a configuration file, but, in that case, no whitespace is permitted within a line, and each parameter must appear on a separate line. Additionally, the parameters CASE, HFILE, INITFUNC, and INITFILE can appear in the INTYPE file.

USERID

The USERID parameter specifies the Oracle username, password, and optional database name (Oracle Net database specification string). If the database name is omitted, the default database is assumed. The syntax of this parameter is:

USERID=username/password[@db_name]

If this is the firstx4 parameter, "USERID=" may be omitted as shown here:

OTT username/password...

The USERID parameter is optional. If you omit it, OTT automatically attempts to connect to the default database as user CLUSTER$username, where username is the user's operating system user name.

INTYPE

The INTYPE parameter specifies the name of the file from which to read the list of object type specifications. OTT translates each type in the list. The syntax for this parameter is

INTYPE=filename

"INTYPE=" may be omitted if USERID and INTYPE are the first two parameters, in that order, and "USERID=" is omitted. If INTYPE is not specified, all types in the user's schema will be translated.

OTT username/password filename...

The INTYPE file can be thought of as a makefile for type declarations. It lists the types for which C struct declarations are needed. The format of the INTYPE file is described in "Structure of the INTYPE File".

If the file name on the command line or in the INTYPE file does not include an extension, a platform-specific extension such as "TYP" or "typ" will be added.

OUTTYPE

The name of a file into which OTT will write type information for all the object datatypes it processes. This includes all types explicitly named in the INTYPE file, and may include additional types that are translated (if TRANSITIVE=TRUE) because they are used in the declarations of other types that need to be translated. This file may be used as an INTYPE file in a future invocation of OTT.

OUTTYPE=filename

If the INTYPE and OUTTYPE parameters refer to the same file, the new INTYPE information replaces the old information in the INTYPE file. This provides a convenient way for the same INTYPE file to be used repeatedly in the cycle of altering types, generating type declarations, editing source code, precompiling, compiling, and debugging.

OUTTYPE must be specified.

If the file name on the command line or in the INTYPE file does not include an extension, a platform-specific extension such as "TYP" or "typ" will be added.

CODE

CODE= C|KR_C|ANSI_C

This is the desired host language for OTT output, that may be specified as CODE=C, CODE=KR_C, or CODE=ANSI_C. "CODE=C" is equivalent to "CODE=ANSI_C".

There is no default value for this parameter; it must be supplied.

INITFILE

The INITFILE parameter specifies the name of the file where the OTT-generated initialization file is to be written. OTT does not generate the initialization function if you omit this parameter.

For Pro*C/C++ programs, the INITFILE is not necessary, because the SQLLIB run-time library performs the necessary initializations. An OCI program user must compile and link the INITFILE file(s), and must call the initialization function(s) when an environment handle is created.

If the file name of an INITFILE on the command line or in the INTYPE file does not include an extension, a platform-specific extension such as "C" or ".c" will be added.

INITFILE=filename

INITFUNC

The INITFUNC parameter is used only in OCI programs. It specifies the name of the initialization function generated by OTT. If this parameter is omitted, the name of the initialization function is derived from the name of the INITFILE.

INITFUNC=filename

HFILE

The name of the include (.h) file to be generated by OTT for the declarations of types that are mentioned in the INTYPE file but whose include files are not specified there. This parameter is required unless the include file for each type is specified individually in the INTYPE file. This parameter is also required if a type not mentioned in the INTYPE file must be generated because other types require it (if TRANSITIVE=TRUE), and these other types are declared in two or more different files.

If the file name of an HFILE on the command line or in the INTYPE file does not include an extension, a platform-specific extension such as "H" or ".h" will be added.

HFILE=filename

CONFIG

The CONFIG parameter specifies the name of the OTT configuration file, that lists commonly used parameter specifications. Parameter specifications are also read from a system configuration file in a platform-dependent location. All remaining parameter specifications must appear on the command line, or in the INTYPE file.

CONFIG=filename 

Note: A CONFIG parameter is not allowed in the CONFIG file.

ERRTYPE

If you supply this parameter, a listing of the INTYPE file is written to the ERRTYPE file, along with all informational and error messages. Informational and error messages are sent to the standard output whether or not ERRTYPE is specified.

Essentially, the ERRTYPE file is a copy of the INTYPE file with error messages added. In most cases, an error message will include a pointer to the text that caused the error.

If the file name of an ERRTYPE on the command line or in the INTYPE file does not include an extension, a platform-specific extension such as "TLS" or "tls" will be added.

ERRTYPE=filename

CASE

This parameter affects the case of certain C identifiers generated by OTT. The possible values of CASE are SAME, LOWER, UPPER, and OPPOSITE. If CASE = SAME, the case of letters is not changed when converting database type and attribute names to C identifiers. If CASE=LOWER, all uppercase letters are converted to lowercase. If CASE=UPPER, all lowercase letters are converted to uppercase. If CASE=OPPOSITE, all uppercase letters are converted to lower-case, and vice-versa.

CASE=[SAME|LOWER|UPPER|OPPOSITE]

This parameter affects only those identifiers (attributes or types not explicitly listed) not mentioned in the INTYPE file. Case conversion takes place after a legal identifier has been generated.


Note:

The case of the C struct identifier for a type specifically mentioned in the INTYPE is the same as its case in the INTYPE file. For example, if the INTYPE file includes the following line

TYPE Worker

then OTT will generate

struct Worker {...};

On the other hand, if the INTYPE file were written as

TYPE wOrKeR

OTT would generate

struct wOrKeR {...};

following the case of the INTYPE file.

Case-insensitive SQL identifiers not mentioned in the INTYPE file will appear in upper case if CASE=SAME, and in lower case if CASE=OPPOSITE. A SQL identifier is case-insensitive if it was not quoted when it was declared.

SCHEMA_NAMES

This parameter offers control in qualifying the database name of a type from the default schema with a schema name in the OUTTYPE file. The OUTTYPE file generated by OTT contains information about the types processed by OTT, including the type names.

See "SCHEMA_NAMES Usage" for further information.

TRANSITIVE

Takes the values TRUE (the default) or FALSE. Indicates whether type dependencies not explicitly listed in the INTYPE file are to be translated, or not. If TRANSITIVE=FALSE is specified, then types not mentioned in the INTYPE file are not generated. This is the case even if they were used as attribute types of other generated types.

Where OTT Parameters Can Appear

Supply OTT parameters on the command line, in a CONFIG file named on the command line, or both. Some parameters are also allowed in the INTYPE file.

OTT is invoked as follows:

OTT username/password parameters

If one of the parameters on the command line is

CONFIG=filename

additional parameters are read from the configuration file named filename.

In addition, parameters are also read from a default configuration file in a platform-dependent location. This file must exist, but can be empty. Each line in the configuration may contain one parameter, with no whitespace on the line.

If OTT is executed without any arguments, an on-line parameter reference is displayed.

The types for OTT to translate are named in the file specified by the INTYPE parameter. The parameters CASE, INITFILE, INITFUNC, and HFILE may also appear in the INTYPE file. OUTTYPE files generated by OTT include the CASE parameter, and include the INITFILE, and INITFUNC parameters if an initialization file was generated. The OUTTYPE file specifies the HFILE individually for each type.

The case of the OTT command is platform-dependent.

Structure of the INTYPE File

The INTYPE and OUTTYPE files list the types translated by OTT and provide all the information needed to determine how a type or attribute name is translated to a legal C identifier. These files contain one or more type specifications. These files also may contain specifications of the following options:

  • CASE

  • HFILE

  • INITFILE

  • INITFUNC

If the CASE, INITFILE, or INITFUNC options are present, they must precede any type specifications. If these options appear both on the command line and in the INTYPE file, the value on the command line is used.

For an example of a simple user-defined INTYPE file, and of the full OUTTYPE file that OTT generates from it, see "OTT Support for Type Inheritance".

INTYPE File Type Specifications

A type specification in the INTYPE names an object datatype that is to be translated. The following is an example of a user-created INTYPE file:

TYPE employee
  TRANSLATE SALARY$ AS salary
            DEPTNO AS department
TYPE ADDRESS
TYPE PURCHASE_ORDER AS p_o

The structure of a type specification is as follows:

TYPE type_name [AS type_identifier]
[VERSION [=] version_string]
[HFILE [=] hfile_name]
[TRANSLATE{member_name [AS identifier]}...]

The syntax of type_name is:

[schema_name.]type_name

where schema_name is the name of the schema that owns the given object datatype, and type_name is the name of the type. The default schema is that of the user running OTT. The default database is the local database.

The components of a type specification are:

  • type name is the name of an object datatype.

  • type identifier is the C identifier used to represent the type. If omitted, the default name mapping algorithm will be used. For further information, see "Default Name Mapping".

  • version string is the version string of the type that was used when the code was generated by a previous invocation of OTT. The version string is generated by OTT and written to the OUTTYPE file, that may later be used as the INTYPE file when OTT is later executed. The version string does not affect the OTT's operation, but will eventually be used to select which version of the object datatype should be used in the running program.

  • hfile name is the name of the header file in which the declarations of the corresponding struct or class appears or will appear. If hfile name is omitted, the file named by the command-line HFILE parameter will be used if a declaration is generated.

  • member name is the name of an attribute (data member) which is to be translated to the following identifier.

  • identifier is the C identifier used to represent the attribute in the user program. You can specify identifiers in this way for any number of attributes. The default name mapping algorithm will be used for the attributes that are not mentioned.

An object datatype may need to be translated for one of two reasons:

  • It appears in the INTYPE file.

  • It is required to declare another type that must be translated, and TRANSITIVE = TRUE.

If a type that is not mentioned explicitly is required by types declared in exactly one file, the translation of the required type is written to the same file(s) as the explicitly declared types that require it.

If a type that is not mentioned explicitly is required by types declared in two or more different files, the translation of the required type is written to the global HFILE file.

Nested #include File Generation

Every HFILE generated by OTT #includes other necessary files, and #defines a symbol constructed from the name of the file, that may be used to determine if the HFILE has already been included. Consider, for example, a database with the following types:

create type px1 AS OBJECT (col1 number, col2 integer);
create type px2 AS OBJECT (col1 px1);
create type px3 AS OBJECT (col1 px1);

where the INTYPE file contains:

CASE=lower
type pxl
  hfile tott95a.h
type px3
  hfile tott95b.h

If we invoke OTT with

ott scott/tiger tott95i.typ outtype=tott95o.typ code=c

then it will generate the two following header files.

File tott95b.h is:

#ifndef TOTT95B_ORACLE
#define TOTT95B_ORACLE
#ifndef OCI_ORACLE
#include <oci.h>
#endif
#ifndef TOTT95A_ORACLE
#include "tott95a.h"
#endif
typedef OCIRef px3_ref;
struct px3
{
   struct px1 col1;
};
typedef struct px3 px3;
struct px3_ind
{
   OCIInd _atomic;
   struct px1_ind col1
};
typedef struct px3_ind px3_ind;
#endif

File tott95a.h is:

#ifndef TOTT95A_ORACLE
#define TOTT95A_ORACLE
#ifndef OCI_ORACLE
#include <oci.h>
#endif
typedef OCIRef px1_ref;
struct px1
{
   OCINumber col1;
   OCINumber col2;
}
typedef struct px1 px1;
struct px1_ind
{
   OCIInd _atomic;
   OCIInd col1;
   OCIInd col2;
}
typedef struct px1_ind px1_ind;
#endif

In this file, the symbol TOTT95B_ORACLE is defined first so that the programmer may conditionally include tott95b.h without having to worry whether tott95b.h depends on the include file using the following construct:

#ifndef TOTT95B_ORACLE
#include "tott95b.h"
#endif

Using this technique, you can include "tott95b.h" from some file, say "foo.h", without having to know whether some other file included by "foo.h" also includes "tott95b.h".

After the definition of the symbol TOTT95B_ORACLE, the file oci.h is #included. Every HFILE generated by OTT includes oci.h, that contains type and function declarations that the Pro*C/C++ or OCI programmer will find useful. This is the only case in which OTT uses angle brackets in an #include.

Next, the file tott95a.h is included because it contains the declaration of "struct px1", that tott95b.h requires. When the INTYPE file requests that type declarations be written to more than one file, OTT will determine which other files each HFILE must include, and will generate the necessary #includes.

Note that OTT uses quotes in this #include. When a program including tott95b.h is compiled, the search for tott95a.h begins where the source program was found, and will thereafter follow an implementation-defined search rule. If tott95a.h cannot be found in this way, a complete file name (for example, a UNIX absolute path name beginning with /) should be used in the INTYPE file to specify the location of tott95a.h.

SCHEMA_NAMES Usage

This parameter affects whether the name of a type from the default schema to which OTT is connected is qualified with a schema name in the OUTTYPE file.

The name of a type from a schema other that the default schema is always qualified with a schema name in the OUTTYPE file.

The schema name, or its absence, determines in which schema the type is found during program execution.

There are three settings:

  • SCHEMA_NAMES=ALWAYS(default)

    All type names in the OUTTYPE file are qualified with a schema name.

  • SCHEMA_NAMES=IF_NEEDED

    The type names in the OUTTYPE file that belong to the default schema are not qualified with a schema name. As always, type names belonging to other schemas are qualified with the schema name.

  • SCHEMA_NAMES=FROM_INTYPE

    A type mentioned in the INTYPE file is qualified with a schema name in the OUTTYPE file if, and only if, it was qualified with a schema name in the INTYPE file. A type in the default schema that is not mentioned in the INTYPE file but that has to be generated because of type dependencies is written with a schema name only if the first type encountered by OTT that depends on it was written with a schema name. However, a type that is not in the default schema to which OTT is connected is always written with an explicit schema name.

The OUTTYPE file generated by OTT is the Pro*C/C++ INTYPE file. This file matches database type names to C struct names. This information is used at run-time to make sure that the correct database type is selected into the struct. If a type appears with a schema name in the OUTTYPE file (Pro*C/C++ INTYPE file), the type will be found in the named schema during program execution. If the type appears without a schema name, the type will be found in the default schema to which the program connects, which may be different from the default schema OTT used.

An Example

If SCHEMA_NAMES is set to FROM_INTYPE, and the INTYPE file reads:

TYPE Person
TYPE joe.Dept
TYPE sam.Company

then the Pro*C/C++ application that uses the OTT-generated structs will use the types sam.Company, joe.Dept, and Person. Person without a schema name refers to the Person type in the schema to which the application is connected.

If OTT and the application both connect to schema joe, the application will use the same type (joe.Person) that OTT used. If OTT connected to schema joe but the application connects to schema mary, the application will use the type mary.Person. This behavior is appropriate only if the same "CREATE TYPE Person" statement has been executed in schema joe and schema mary.

On the other hand, the application will use type joe.Dept regardless of to which schema the application is connected. If this is the behavior you want, be sure to include schema names with your type names in the INTYPE file.

In some cases, OTT translates a type that the user did not explicitly name. For example, consider the following SQL declarations:

CREATE TYPE Address AS OBJECT
(
street    VARCHAR2(40),
city      VARCHAR(30),
state     CHAR(2),
zip_code  CHAR(10)
);

CREATE TYPE Person AS OBJECT
(
name      CHAR(20),
age       NUMBER,
addr      ADDRESS
);

Now suppose that OTT connects to schema joe, SCHEMA_NAMES=FROM_INTYPE is specified, and the user's INTYPE files include either

TYPE Person or TYPE joe.Person

but do not mention the type joe.Address, which is used as a nested object type in type joe.Person. If "TYPE joe.Person" appeared in the INTYPE file, "TYPE joe.Person" and "TYPE joe.Address" will appear in the OUTTYPE file. If "Type Person" appeared in the INTYPE file, "TYPE Person" and "TYPE Address" will appear in the OUTTYPE file.

If the joe.Address type is embedded in several types translated by OTT, but is not explicitly mentioned in the INTYPE file, the decision of whether to use a schema name is made the first time OTT encounters the embedded joe.Address type. If, for some reason, the user wants type joe.Address to have a schema name but does not want type Person to have one, you must explicitly request

TYPE      joe.Address

in the INTYPE FILE.

In the usual case in which each type is declared in a single schema, it is safest for you to qualify all type names with schema names in the INTYPE file.

Default Name Mapping

When OTT creates a C identifier name for an object type or attribute, it translates the name from the database character set to a legal C identifier. First, the name is translated from the database character set to the character set used by OTT. Next, if a translation of the resulting name is supplied in the INTYPE file, that translation is used. Otherwise, OTT translates the name character-by-character to the compiler character set, applying the CASE option. The following describes this in more detail.

When OTT reads the name of a database entity, the name is automatically translated from the database character set to the character set used by OTT. In order for OTT to read the name of the database entity successfully, all the characters of the name must be found in the OTT character set, although a character may have different encodings in the two character sets.

The easiest way to guarantee that the character set used by OTT contains all the necessary characters is to make it the same as the database character set. Note, however, that the OTT character set must be a superset of the compiler character set. That is, if the compiler character set is 7-bit ASCII, the OTT character set must include 7-bit ASCII as a subset, and if the compiler character set is 7-bit EBCDIC, the OTT character set must include 7-bit EBCDIC as a subset. The user specifies the character set that OTT uses by setting the NLS_LANG environment variable, or by some other platform-specific mechanism.

Once OTT has read the name of a database entity, it translates the name from the character set used by OTT to the compiler's character set. If a translation of the name appears in the INTYPE file, OTT uses that translation.

Otherwise, OTT attempts to translate the name as follows:

  1. First, if the OTT character set is a multibyte character set, all multibyte characters in the name that have singlebyte equivalents are converted to those singlebyte equivalents.

  2. Next, the name is converted from the OTT character set to the compiler character set. The compiler character set is a singlebyte character set such as US7ASCII.

  3. Finally, the case of letters is set according to the CASE option in effect, and any character that is not legal in a C identifier, or that has no translation in the compiler character set, is replaced by an underscore. If at least one character is replaced by an underscore, OTT gives a warning message. If all the characters in a name are replaced by underscores, OTT gives an error message.

Character-by-character name translation does not alter underscores, digits, or singlebyte letters that appear in the compiler character set, so legal C identifiers are not altered.

Name translation may, for example, translate accented singlebyte characters such as "o" with an umlaut or "a" with an accent grave to "o" or "a", and may translate a multibyte letter to its singlebyte equivalent. Name translation will typically fail if the name contains multibyte characters that lack singlebyte equivalents. In this case, the user must specify name translations in the INTYPE file.

OTT will not detect a naming clash caused by two or more database identifiers being mapped to the same C name, nor will it detect a naming problem where a database identifier is mapped to a C keyword.

Restriction

The following restriction affects the use of OTT.

File Name Comparison

Currently, OTT determines if two files are the same by comparing the file names provided by the user on the command line or in the INTYPE file. But one potential problem can occur when OTT needs to know if two file names refer to the same file. For example, if the OTT-generated file foo.h requires a type declaration written to foo1.h, and another type declaration written to /private/smith/foo1.h, OTT should generate one #include if the two files are the same, and two #includes if the files are different. In practice, though, it concludes that the two files are different, and generates two #includes, as follows:

#ifndef FOO1_ORACLE
#include "foo1.h"
#endif
#ifndef FOO1_ORACLE
#include "/private/smith/foo1.h"
#endif

If foo1.h and /private/smith/foo1.h are different files, only the first one will be included. If foo1.h and /private/smith/foo1.h are the same file, a redundant #include will be written.

Therefore, if a file is mentioned several times on the command line or in the INTYPE file, each mention of the file should use exactly the same file name.

PKl@ xxPK+A OEBPS/toc.ncxI Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2) Cover Table of Contents Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2) Preface What's New in Pro*C/C++? Introduction and Concepts Introduction Precompiler Concepts Database Concepts Datatypes and Host Variables Advanced Topics Embedded SQL Embedded PL/SQL Host Arrays Handling Runtime Errors Precompiler Options Multithreaded Applications Applications C++ Applications Oracle Dynamic SQL ANSI Dynamic SQL Oracle Dynamic SQL: Method 4 LOBs Objects Collections The Object Type Translator User Exits Appendixes New Features Reserved Words, Keywords, and Namespaces Performance Tuning Syntactic and Semantic Checking System-Specific References Embedded SQL Statements and Directives Sample Programs Integrating Pro*C/C++ into Microsoft Visual Studio .NET 2002/2003 Index Copyright PKËNIPK+AOEBPS/pc_aeops.htm> System-Specific References

E System-Specific References

This appendix groups together in one place all references in this guide to system-specific information.

This appendix contains this section:

System-Specific Information

System-specific information is described in the appropriate Oracle system-specific documentation for your platform.

Location of Standard Header Files

The location of the standard Pro*C/C++ header files—sqlca.h, oraca.h, and sqlda.h—is system specific. For other your system, see your Oracle system-specific documentation.

Specifying Location of Included Files for the C Compiler

When you use the Pro*C/C++ command-line option INCLUDE= to specify the location of a non-standard file to be included, you should also specify the same location for the C compiler. The way you do this is system specific. See "Include Files".

ANSI C Support

Use the CODE= option to make the C code that Pro*C/C++ generates compatible with your system's C compiler. See "Function Prototyping".

Struct Component Alignment

C compilers vary in the way they align struct components, usually depending on the system hardware. Use the sqlvcp() function to determine the padding added to the .arr component of a VARCHAR struct. See the section "Find the Length of the VARCHAR Array Component".

Size of an Integer and ROWID

The size in bytes of integer datatypes and the binary external size of ROWID datatypes are system dependent. See "INTEGER" and "ROWID".

Byte Ordering

The order of bytes in a word is platform dependent. See the section "UNSIGNED".

Connecting to the Oracle Server

Connecting to the Oracle server using the Oracle Net drivers involves system-specific network protocols. See the section "Interface to OCI Release 8" for more details.

Linking in an XA Library

You link in your XA library in a system-dependent way. See the section "Linking", and your Oracle installation or user's guides, for more information.

Location of the Pro*C/C++ Executable

The location of the Pro*C/C++ Precompiler is system specific. See the section "The Precompiler Command", and your installation or user's guides, for more information.

System Configuration File

Each precompiler installation has a system configuration file. This file is not shipped with the precompiler; it must be created by the system administrator. The location (directory path) which Pro*C/C++ searches for the system configuration file is system dependent. See the section "What Occurs During Precompilation?" for more information.

INCLUDE Option Syntax

The syntax for the value of the INCLUDE command-line option is system specific. See "INCLUDE".

Compiling and Linking

Compiling and linking your Pro*C/C++ output to get an executable application is always system dependent. See the section "Compile and Link", and the following sections, for additional information.

User Exits

Compiling and linking Oracle Forms user exits is system specific. See Chapter 20, "User Exits".

PK%VC>PK+AOEBPS/pc_actun.htm9|ƃ Performance Tuning

C Performance Tuning

This appendix shows you some simple, easy-to-apply methods for improving the performance of your applications. Using these methods, you can often reduce processing time by 25% or more. This appendix contains the following topics:

What Causes Poor Performance?

One cause of poor performance is high communications overhead. The server must process SQL statements one at a time. Thus, each statement results in another call to single and higher overhead. In a networked environment, SQL statements must be sent over the network, adding to network traffic. Heavy network traffic can slow down your application significantly.

Another cause of poor performance is inefficient SQL statements. Because SQL is so flexible, you can get the same result with two different statements, but one statement might be less efficient. For example, the following two SELECT statements return the same rows (the name and number of every department having at least one employee):

EXEC SQL SELECT dname, deptno 
    FROM dept 
    WHERE deptno IN (SELECT deptno FROM emp); 
 
EXEC SQL SELECT dname, deptno 
    FROM dept 
    WHERE EXISTS 
    (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno); 

However, the first statement is slower because it does a time-consuming full scan of the EMP table for every department number in the DEPT table. Even if the DEPTNO column in EMP is indexed, the index is not used because the subquery lacks a WHERE clause naming DEPTNO.

A third cause of poor performance is unnecessary parsing and binding. Recall that before executing a SQL statement, the server must parse and bind it. Parsing means examining the SQL statement to make sure it follows syntax rules and refers to valid database objects. Binding means associating host variables in the SQL statement with their addresses so that the server can read or write their values.

Many applications manage cursors poorly. This results in unnecessary parsing and binding, which adds noticeably to processing overhead.

How Can Performance Be Improved?

If you are unhappy with the performance of your precompiled programs, there are several ways you can reduce overhead.

You can greatly reduce communications overhead, especially in networked environments, by

  • Using host arrays

  • Using embedded PL/SQL

You can reduce processing overhead—sometimes dramatically—by

  • Optimizing SQL statements

  • Using indexes

  • Taking advantage of row-level locking

  • Eliminating unnecessary parsing

  • Avoiding unnecessary reparsing

The following sections look at each of these ways to cut overhead.

Using Host Arrays

Host arrays can increase performance because they let you manipulate an entire collection of data with a single SQL statement. For example, suppose you want to INSERT salaries for 300 employees into the EMP table. Without arrays your program must do 300 individual INSERTs—one for each employee. With arrays, only one INSERT is necessary. Consider the following statement:

EXEC SQL INSERT INTO emp (sal) VALUES (:salary); 

If salary is a simple host variable, the server executes the INSERT statement once, inserting a single row into the EMP table. In that row, the SAL column has the value of salary. To insert 300 rows this way, you must execute the INSERT statement 300 times.

However, if salary is a host array of size 300, all 300 rows are inserted into the EMP table at once. In each row, the SAL column has the value of an element in the salary array.

For more information, see Chapter 8, "Host Arrays".

Using Embedded PL/SQL

As Figure C-1 shows, if your application is database-intensive, you can use control structures to group SQL statements in a PL/SQL block, then send the entire block to the database server. This can drastically reduce communication between your application and the database server.

Also, you can use PL/SQL subprograms to reduce calls from your application to the server. For example, to execute ten individual SQL statements, ten calls are required, but to execute a subprogram containing ten SQL statements, only one call is required.

Figure C-1 PL/SQL Boosts Performance

PL/SQL Boosts Performance
Description of "Figure C-1 PL/SQL Boosts Performance"

PL/SQL can also cooperate with Oracle application development tools such as Oracle Forms. By adding procedural processing power to these tools, PL/SQL boosts performance. Using PL/SQL, a tool can do any computation quickly and efficiently without calling on the database server. This saves time and reduces network traffic.

For more information, see Chapter 7, " Embedded PL/SQL", and the Oracle Database PL/SQL Language Reference.

Optimizing SQL Statements

For every SQL statement, the Oracle optimizer generates an execution plan, which is a series of steps that the server takes to execute the statement. These steps are determined by rules given in Oracle Application Developer's Guide - Fundamentals. Following these rules will help you write optimal SQL statements.

Optimizer Hints

In some cases, you can suggest to the server the way to optimize a SQL statement. These suggestions, called hints, let you influence decisions made by the optimizer.

Hints are not directives; they merely help the optimizer do its job. Some hints limit the scope of information used to optimize a SQL statement, while others suggest overall strategies.

You can use hints to specify the

  • Optimization approach for a SQL statement

  • Access path for each referenced table

  • Join order for a join

  • Method used to join tables

Hence, hints fall into the following four categories:

  • Optimization Approach

  • Access Path

  • Join Order

  • Join Operation

For example, the two optimization approach hints, COST and NOCOST, invoke the cost-based optimizer and the rule-based optimizer, respectively.

You give hints to the optimizer by placing them in a C-style comment immediately after the verb in a SELECT, UPDATE, INSERT, or DELETE statement. For instance, the optimizer uses the cost-based approach for the following statement:

SELECT /*+ COST */ ename, sal INTO ... 

For C++ code, optimizer hints in the form //+ are also recognized.

For more information about optimizer hints, see Oracle Database Advanced Application Developer's Guide.

Trace Facility

You can use the SQL trace facility and the EXPLAIN PLAN statement to identify SQL statements that might be slowing down your application.

The SQL trace facility generates statistics for every SQL statement executed. From these statistics, you can determine which statements take the most time to process. Then, you can concentrate your tuning efforts on those statements.

The EXPLAIN PLAN statement shows the execution plan for each SQL statement in your application. An execution plan describes the database operations that must be carried out to execute a SQL statement. You can use the execution plan to identify inefficient SQL statements.

For instructions on using these tools and analyzing their output, see Oracle Database Advanced Application Developer's Guide.

Statement Caching

This is a feature that will help in the performance improvement of all the precompiler applications that rely on dynamic SQL statements. The new implementation will remove the overhead of parsing the dynamic statements on reuse. The precompiler application user can obtain this performance improvement using a new command line option (for the statement cache size), which will enable the statement caching of the dynamic statements. By enabling the new option, the statement cache will be created at session creation time. The caching is only applicable for the dynamic statements and the cursor cache for the static statements co-exists with this feature.

Using Indexes

Using ROWIDs, an index associates each distinct value in a table column with the rows containing that value. An index is created with the CREATE INDEX statement. For details, see Oracle Database SQL Language Reference.

You can use indexes to boost the performance of queries that return less than 15% of the rows in a table. A query that returns 15% or more of the rows in a table is executed faster by a full scan, that is, by reading all rows sequentially.

Any query that names an indexed column in its WHERE clause can use the index. For guidelines that help you choose which columns to index, see Oracle Database Advanced Application Developer's Guide.

Taking Advantage of Row-Level Locking

By default, data is locked at the row level rather than at the table level. Row-level locking allows multiple users to access different rows in the same table concurrently. The resulting performance gain is significant.

You can specify table-level locking, but it lessens the effectiveness of the transaction processing option. For more information about table locking, see the section "Using LOCK TABLE".

Applications that do online transaction processing benefit most from row-level locking. If your application relies on table-level locking, modify it to take advantage of row-level locking. In general, avoid explicit table-level locking.

Eliminating Unnecessary Parsing

Eliminating unnecessary parsing requires correct handling of cursors and selective use of the following cursor management options:

  • MAXOPENCURSORS

  • HOLD_CURSOR

  • RELEASE_CURSOR

These options affect implicit and explicit cursors, the cursor cache, and private SQL areas.

Handling Explicit Cursors

Recall that there are two types of cursors: implicit and explicit. A cursor is implicitly declared for all data definition and data manipulation statements. However, for queries that return more than one row, you must explicitly declare a cursor (or use host arrays). You use the DECLARE CURSOR statement to declare an explicit cursor. The way you handle the opening and closing of explicit cursors affects performance.

If you need to reevaluate the active set, simply reOPEN the cursor. OPEN will use any new host-variable values. You can save processing time if you do not CLOSE the cursor first.


Note:

To make performance tuning easier, you can reOPEN an already open cursor. However, this is an ANSI extension. So, when MODE=ANSI, you must CLOSE a cursor before reOPENing it.

Only CLOSE a cursor when you want to free the resources (memory and locks) acquired by OPENing the cursor. For example, your program should CLOSE all cursors before exiting.

Cursor Control

In general, there are three ways to control an explicitly declared cursor:

  • Use DECLARE, OPEN, and CLOSE.

  • Use PREPARE, DECLARE, OPEN, and CLOSE.

  • COMMIT closes the cursor when MODE=ANSI.

With the first way, beware of unnecessary parsing. OPEN does the parsing, but only if the parsed statement is unavailable because the cursor was CLOSEd or never OPENed. Your program should DECLARE the cursor, reOPEN it every time the value of a host variable changes, and CLOSE it only when the SQL statement is no longer needed.

With the second way (for dynamic SQL Methods 3 and 4), PREPARE does the parsing, and the parsed statement is available until a CLOSE is executed. Your program should do the following:

  • PREPARE the SQL statement

  • DECLARE the cursor

  • Again OPEN the cursor every time the value of a host variable changes

  • Again PREPARE the SQL statement

  • Again OPEN the cursor if the SQL statement changes

  • CLOSE the cursor only when the SQL statement is no longer needed.

When possible, avoid placing OPEN and CLOSE statements in a loop; this is a potential cause of unnecessary reparsing of the SQL statement. In the next example, both the OPEN and CLOSE statements are inside the outer while loop. When MODE=ANSI, the CLOSE statement must be positioned as shown, because ANSI requires a cursor to be CLOSEd before being reOPENed.

EXEC SQL DECLARE emp_cursor CURSOR FOR 
     SELECT ename, sal from emp where sal >  :salary and  
                                      sal <= :salary + 1000; 
salary = 0; 
while (salary < 5000) 
{  
     EXEC SQL OPEN emp_cursor; 
     while (SQLCODE==0) 
     { 
         EXEC SQL FETCH emp_cursor INTO .... 
         ... 
     } 
     salary += 1000; 
     EXEC SQL CLOSE emp_cursor; 
}

With MODE=ORACLE, however, a CLOSE statement can execute without the cursor being OPENed. By placing the CLOSE statement outside the outer while loop, you can avoid possible reparsing at each iteration of the OPEN statement.

... 
while (salary < 5000) 
{  
     EXEC SQL OPEN emp_cursor; 
     while (sqlca.sqlcode==0) 
     { 
         EXEC SQL FETCH emp_cursor INTO .... 
         ... 
     } 
     salary += 1000; 
} 
EXEC SQL CLOSE emp_cursor;

Using the Cursor Management Options

A SQL statement need be parsed only once unless you change its makeup. For example, you change the makeup of a query by adding a column to its select list or WHERE clause. The HOLD_CURSOR, RELEASE_CURSOR, and MAXOPENCURSORS options give you some control over how the server manages the parsing and reparsing of SQL statements. Declaring an explicit cursor gives you maximum control over parsing.

SQL Areas and Cursor Cache

When a data manipulation statement is executed, its associated cursor is linked to an entry in the Pro*C/C++ cursor cache. The cursor cache is a continuously updated area of memory used for cursor management. The cursor cache entry is in turn linked to a private SQL area.

The private SQL area, a work area created dynamically at run time, contains the addresses of host variables, and other information needed to process the statement. An explicit cursor lets you name a SQL statement, access the information in its private SQL area, and, to some extent, control its processing.

Figure C-2 represents the cursor cache after your program has done an INSERT and a DELETE.

Figure C-2 Cursors Linked using the Cursor Cache

Cursors Linked using the Cursor Cache
Description of "Figure C-2 Cursors Linked using the Cursor Cache"

Resource Use

The maximum number of open cursors for each user session is set by the initialization parameter OPEN_CURSORS.

MAXOPENCURSORS specifies the initial size of the cursor cache. If a new cursor is needed and there are no free cache entries, the server tries to reuse an entry. Its success depends on the values of HOLD_CURSOR and RELEASE_CURSOR and, for explicit cursors, on the status of the cursor itself.

If the value of MAXOPENCURSORS is less than the number of cache entries actually needed, the server uses the first cache entry marked as reusable. For example, suppose an INSERT statement's cache entry E(1) is marked as reusable, and the number of cache entries already equals MAXOPENCURSORS. If the program executes a new statement, cache entry E(1) and its private SQL area might be reassigned to the new statement. To reexecute the INSERT statement, the server would have to reparse it and reassign another cache entry.

The server allocates an additional cache entry if it cannot find one to reuse. For example, if MAXOPENCURSORS=8 and all eight entries are active, a ninth is created. If necessary, the server keeps allocating additional cache entries until it runs out of memory or reaches the limit set by OPEN_CURSORS. This dynamic allocation adds to processing overhead.

Thus, specifying a low value for MAXOPENCURSORS saves memory but causes potentially expensive dynamic allocations and deallocations of new cache entries. Specifying a high value for MAXOPENCURSORS assures speedy execution but uses more memory.

Infrequent Execution

Sometimes, the link between an infrequently executed SQL statement and its private SQL area should be temporary.

When HOLD_CURSOR=NO (the default), after the server executes the SQL statement and the cursor is closed, the precompiler marks the link between the cursor and cursor cache as reusable. The link is reused as soon as the cursor cache entry to which it points is needed for another SQL statement. This frees memory allocated to the private SQL area and releases parse locks. However, because a PREPAREd cursor must remain active, its link is maintained even when HOLD_CURSOR=NO.

When RELEASE_CURSOR=YES, after the server executes the SQL statement and the cursor is closed, the private SQL area is automatically freed and the parsed statement lost. This might be necessary if, for example, MAXOPENCURSORS is set low at your site to conserve memory.

If a data manipulation statement precedes a data definition statement and they reference the same tables, specify RELEASE_CURSOR=YES for the data manipulation statement. This avoids a conflict between the parse lock obtained by the data manipulation statement and the exclusive lock required by the data definition statement.

When RELEASE_CURSOR=YES, the link between the private SQL area and the cache entry is immediately removed and the private SQL area freed. Even if you specify HOLD_CURSOR=YES, the server must still reallocate memory for a private SQL area and reparse the SQL statement before executing it because RELEASE_CURSOR=YES overrides HOLD_CURSOR=YES.

However, when RELEASE_CURSOR=YES, the reparse might still require no extra processing because the server caches the parsed representations of SQL statements and PL/SQL blocks in its Shared SQL Cache. Even if its cursor is closed, the parsed representation remains available until it is aged out of the cache.

Frequent Execution

The links between a frequently executed SQL statement and its private SQL area should be maintained because the private SQL area contains all the information needed to execute the statement. Maintaining access to this information makes subsequent execution of the statement much faster.

When HOLD_CURSOR=YES, the link between the cursor and cursor cache is maintained after the server executes the SQL statement. Thus, the parsed statement and allocated memory remain available. This is useful for SQL statements that you want to keep active because it avoids unnecessary reparsing.

When RELEASE_CURSOR=NO (the default), the link between the cache entry and the private SQL area is maintained after the server executes the SQL statement and is not reused unless the number of open cursors exceeds the value of MAXOPENCURSORS. This is useful for SQL statements that are executed often because the parsed statement and allocated memory remain available.


Note:

With versions of Oracle prior to Oracle8i, when RELEASE_CURSOR=NO and HOLD_CURSOR=YES, after the server executes a SQL statement, its parsed representation remains available. But with later versions of Oracle, when RELEASE_CURSOR=NO and HOLD_CURSOR=YES, the parsed representation remains available only until it is aged out of the Shared SQL Cache. Normally, this is not a problem, but you might get unexpected results if the definition of a referenced object changes before the SQL statement is reparsed.

Embedded PL/SQL Considerations

For the purposes of cursor management, an embedded PL/SQL block is treated just like a SQL statement. When an embedded PL/SQL block is executed, a parent cursor is associated with the entire block and a link is created between the cache entry and the private SQL area in the PGA for the embedded PL/SQL block. Be aware that each SQL statement inside the embedded block also requires a private SQL area in the PGA. These SQL statements use child cursors that PL/SQL manages itself. The disposition of the child cursors is determined through its associated parent cursor. That is, the private SQL areas used by the child cursors are freed after the private SQL area for its parent cursor is freed.

Parameter Interactions

Table C-0 shows how HOLD_CURSOR and RELEASE_CURSOR interact. Notice that HOLD_CURSOR=NO overrides RELEASE_CURSOR=NO and that RELEASE_CURSOR=YES overrides HOLD_CURSOR=YES.

Table C-1 HOLD_CURSOR and RELEASE _CURSOR Interactions

HOLD_CURSORRELEASE_CURSORLinks are ...

NO

NO

marked as reusable

YES

NO

maintained

NO

YES

removed immediately

YES

YES

removed immediately


Avoiding Unnecessary Reparsing

Avoiding unnecessary reparsing involves eliminating errors encountered during the execute phase of an SQL statement in a loop. When an embedded SQL statement is executed in a loop, the SQL statement is parsed only once. However, if the execution of the SQL statement results in an error, the SQL statement is usually reparsed. In this case, reparsing will occur for all errors encountered, except the following:

  • ORA-1403 (not found)

  • ORA-1405 (truncation)

  • ORA-1406 (null value)

By eliminating all other errors, you can avoid unnecessary reparsing.

Using Connection Pooling

This section describes performance tuning using connection pooling. If an application is multithreaded and is performing concurrent operations on the same database, users can use the connection pooling feature to achieve better performance. Users can tune an application's performance by choosing the appropriate values for parameters used with connection pooling, and can achieve up to three times performance increase, when compared to existing application performance.

PK$Q}X>|9|PK+AOEBPS/pc_04dat.htm Datatypes and Host Variables

4 Datatypes and Host Variables

This chapter provides the basic information you need to write a Pro*C/C++ program. This chapter contains the following topics:

This chapter also includes several complete demonstration programs that you can study. These programs illustrate the techniques described. They are available on-line in your demo directory, so you can compile and run them, and modify them for your own uses.

Oracle Datatypes

Oracle recognizes two kinds of datatypes: internal and external. Internal datatypes specify how Oracle stores column values in database tables, as well as the formats used to represent pseudocolumn values such as NULL, SYSDATE, USER, and so on. External datatypes specify the formats used to store values in input and output host variables.

For descriptions of the Oracle internal (also called built-in) datatypes, see Oracle Database SQL Language Reference.

Internal Datatypes

For values stored in database columns, Oracle uses the internal datatypes shown in Table 4-1

Table 4-1 Oracle Internal Datatypes

NameDescription

VARCHAR2

Variable-length character string, <= 4000 bytes.

NVARCHAR2 or NCHAR VARYING

Variable-length single-byte or National Character string,<= 4000 bytes.

NUMBER

Numeric value having precision and scale, represented in a base-100 format.

LONG

Variable-length character string <=2**31-1 bytes.

BINARY_FLOAT

32-bit floating point number, 4 bytes.

BINARY_DOUBLE

64-bit floating point number, 8 bytes.

TIMESTAMP

Year, month, and day values of date, as well as hour, minute, and second values of time, 7 or 11 bytes.

DATE

Fixed-length date + time value, 7 bytes.

INTERVAL YEAR

Stores a period of time in years and months, 5 bytes.

INTERVAL DAY

Stores a period of time in days, hours, minutes, and seconds, 11 bytes.

RAW

Variable-length binary data, <=2000 bytes.

LONG RAW

Variable-length binary data, <=2**31-1 bytes.

ROWID

Binary value.

UROWID

Binary value, <=4000 bytes.

CHAR

Fixed-length character string, <=2000 bytes.

NCHAR

Fixed-length single-byte or National Character string, <= 2000 bytes.

CLOB

Character data, <= 4 Gbytes.

NCLOB

National Character Set data, <= 4 Gbytes.

BLOB

Binary data, <= 4 Gbytes.

BFILE

External file binary data, <= 4 Gbytes.


These internal datatypes can be quite different from C datatypes. For example, C has no datatype that is equivalent to the Oracle NUMBER datatype. However, NUMBERs can be converted between C datatypes such as float and double, with some restrictions. For example, the Oracle NUMBER datatype allows up to 38 decimal digits of precision, while no current C implementations can represent double with that degree of precision.

The Oracle NUMBER datatype represents values exactly (within the precision limits), while floating-point formats cannot represent values such as 10.0 exactly.

Use the LOB datatypes to store unstructured data (text, graphic images, video clips, or sound waveforms). BFILE data is stored in an operating system file outside the database. LOB types store locators that specify the location of the data.


See Also:

Chapter 16, "LOBs"

NCHAR and NVARCHAR2 are used to store multibyte character data.


See Also:

"Globalization Support" for a discussion of these datatypes

External Datatypes

As shown in Table 4-2, the external datatypes include all the internal datatypes plus several datatypes that closely match C constructs. For example, the STRING external datatype refers to a C null-terminated string.

Table 4-2 Oracle External Datatypes

NameDescription

VARCHAR2

Variable-length character string, <= 65535 bytes.

NUMBER

Decimal number, represented using a base-100 format.

INTEGER

Signed integer.

FLOAT

Real number.

STRING

Null-terminated variable length character string.

VARNUM

Decimal number, like NUMBER, but includes representation length component.

LONG

Fixed-length character string, up to 2**31-1 bytes.

VARCHAR

Variable-length character string, <= 65533 bytes.

ROWID

Binary value, external length is system dependent.

DATE

Fixed-length date/time value, 7 bytes.

VARRAW

Variable-length binary data, <= 65533 bytes.

RAW

Fixed-length binary data, <= 65535 bytes.

LONG RAW

Fixed-length binary data, <= 2**31-1 bytes.

UNSIGNED

Unsigned integer.

LONG VARCHAR

Variable-length character string, <= 2**31-5 bytes.

LONG VARRAW

Variable-length binary data, <= 2**31-5 bytes.

CHAR

Fixed-length character string, <= 65535 bytes.

CHARZ

Fixed-length, null-terminated character string, <= 65534 bytes.

CHARF

Used in TYPE or VAR statements to force CHAR to default to CHAR, instead of VARCHAR2 or CHARZ.


Brief descriptions of the Oracle datatypes follow.

VARCHAR2

You use the VARCHAR2 datatype to store variable-length character strings. The maximum length of a VARCHAR2 value is 64K bytes.

You specify the maximum length of a VARCHAR2(n) value in bytes, not characters. So, if a VARCHAR2(n) variable stores multibyte characters, its maximum length can be less than n characters.

When you precompile using the option CHAR_MAP=VARCHAR2, Oracle assigns the VARCHAR2 datatype to all host variables that you declare as char[n] or char.

On Input

Oracle reads the number of bytes specified for the input host variable, strips any trailing blanks, then stores the input value in the target database column. Be careful. An uninitialized host variable can contain NULLs. So, always blank-pad a character input host variable to its declared length, and do not null-terminate it.

If the input value is longer than the defined width of the database column, Oracle generates an error. If the input value contains nothing but blanks, Oracle treats it like a NULL.

Oracle can convert a character value to a NUMBER column value if the character value represents a valid number. Otherwise, Oracle generates an error.

On Output

Oracle returns the number of bytes specified for the output host variable, blank-padding if necessary. It then assigns the output value to the target host variable. If a NULL is returned, Oracle fills the host variable with blanks.

If the output value is longer than the declared length of the host variable, Oracle truncates the value before assigning it to the host variable. If there is an indicator variable associated with the host variable, Oracle sets it to the original length of the output value.

Oracle can convert NUMBER column values to character values. The length of the character host variable determines precision. If the host variable is too short for the number, scientific notation is used. For example, if you SELECT the column value 123456789 into a character host variable of length 6, Oracle returns the value '1.2E08'. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

NUMBER

You use the NUMBER datatype to store fixed or floating-point numbers. You can specify precision and scale. The maximum precision of a NUMBER value is 38. The magnitude range is 1.0E-130 to 9.99...9E125 (38 nines followed by 88 zeroes). Scale can range from -84 to 127.

NUMBER values are stored in a variable-length format, starting with an exponent byte and followed by 19 mantissa bytes. The high-order bit of the exponent byte is a sign bit, which is set for positive numbers. The low-order 7 bits represent the magnitude.

The mantissa forms a 38-digit number with each byte representing 2 of the digits in a base-100 format. The sign of the mantissa is specified by the value of the first (left-most) byte. If greater than 101 then the mantissa is negative and the first digit of the mantissa is equal to the left-most byte minus 101.

On output, the host variable contains the number as represented internally by Oracle. To accommodate the largest possible number, the output host variable must be 22 bytes long. Only the bytes used to represent the number are returned. Oracle does not blank-pad or null-terminate the output value. If you need to know the length of the returned value, use the VARNUM datatype instead.

There is seldom a need to use this external datatype.

INTEGER

You use the INTEGER datatype to store numbers that have no fractional part. An integer is a signed, 2-byte, 4-byte or 8-byte binary number. The order of the bytes in a word is system dependent. You must specify a length for input and output host variables. On output, if the column value is a real number, Oracle truncates any fractional part.

FLOAT

You use the FLOAT datatype to store numbers that have a fractional part or that exceed the capacity of the INTEGER datatype. The number is represented using the floating-point format of your computer and typically requires 4 or 8 bytes of storage. You must specify a length for input and output host variables.

Oracle can represent numbers with greater precision than most floating-point implementations because the internal format of Oracle numbers is decimal. This can cause a loss of precision when fetching into a FLOAT variable.

STRING

The STRING datatype is like the VARCHAR2 datatype, except that a STRING value is always null-terminated. When you precompile using the option CHAR_MAP=STRING, Oracle assigns the STRING datatype to all host variables that you declare as char[n] or char.

On Input

Oracle uses the specified length to limit the scan for the null terminator. If a null terminator is not found, Oracle generates an error. If you do not specify a length, Oracle assumes the maximum length of 2000 bytes. The minimum length of a STRING value is 2 bytes. If the first character is a null terminator and the specified length is 2, Oracle inserts a null unless the column is defined as NOT NULL. If the column is defined as NOT NULL, an error occurs. An all-blank value is stored intact.

On Output

Oracle appends a null byte to the last character returned. If the string length exceeds the specified length, Oracle truncates the output value and appends a null byte. If a NULL is SELECTed, Oracle returns a null byte in the first character position. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

VARNUM

The VARNUM datatype is like the NUMBER datatype, except that the first byte of a VARNUM variable stores the length of the representation.

On input, you must set the first byte of the host variable to the length of the value. On output, the host variable contains the length followed by the number as represented internally by Oracle. To accommodate the largest possible number, the host variable must be 22 bytes long. After SELECTing a column value into a VARNUM host variable, you can check the first byte to get the length of the value.

Normally, there is little reason to use this datatype.

LONG

You use the LONG datatype to store fixed-length character strings.

The LONG datatype is like the VARCHAR2 datatype, except that the maximum length of a LONG value is 2147483647 bytes or two gigabytes.

VARCHAR

You use the VARCHAR datatype to store variable-length character strings. VARCHAR variables have a 2-byte length field followed by a <=65533-byte string field. However, for VARCHAR array elements, the maximum length of the string field is 65530 bytes. When you specify the length of a VARCHAR variable, be sure to include 2 bytes for the length field. For longer strings, use the LONG VARCHAR datatype. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

ROWID

Rows in Index-Organized tables do not have permanent physical addresses. The logical ROWID is accessed using the same syntax as the physical ROWID. For this reason, the physical ROWID includes a data object number (schema objects in the same segment).

To support both logical and physical ROWIDs (as well as ROWIDs of non-Oracle tables) the universal ROWID was defined.

You can use character host variables to store rowids in a readable format. When you SELECT or FETCH a rowid into a character host variable, Oracle converts the binary value to an 18-byte character string and returns it in the format

BBBBBBBB.RRRR.FFFF 

where BBBBBBBB is the block in the database file, RRRR is the row in the block (the first row is 0), and FFFF is the database file. These numbers are hexadecimal. For example, the rowid

0000000E.000A.0007 
points to the 11th row in the 15th block in the 7th database file. 

See Also:

"Universal ROWIDs" for a further discussion of how to use the universal ROWID in applications.

Typically, you FETCH a rowid into a character host variable, then compare the host variable to the ROWID pseudocolumn in the WHERE clause of an UPDATE or DELETE statement. That way, you can identify the latest row fetched by a cursor.


Note:

If you need full portability or your application communicates with a non-Oracle database using Oracle Open Gateway technology, specify a maximum length of 256 (not 18) bytes when declaring the host variable. Though you can assume nothing about the host variable's contents, the host variable will behave normally in SQL statements.

DATE

You use the DATE datatype to store dates and times in 7-byte, fixed-length fields. As Table 4-3 shows, the century, year, month, day, hour (in 24-hour format), minute, and second are stored in that order from left to right.

Table 4-3 DATE Format

Date DatatypeCenturyYearMonthDayHourMinutesSecond

Byte

1

2

3

4

5

6

7

Meaning

Century

Year

Month

Day

Hour

Minute

Second

Example

17-OCT-1994 at 1:23:12 PM

119

194

10

17

14

24

13


The century and year bytes are in excess-100 notation. The hour, minute, and second are in excess-1 notation. Dates before the Common Era (B.C.E.) are less than 100. The epoch is January 1, 4712 B.C.E. For this date, the century byte is 53 and the year byte is 88. The hour byte ranges from 1 to 24. The minute and second bytes range from 1 to 60. The time defaults to midnight (1, 1, 1).

Normally, there is little reason to use the DATE datatype.

RAW

You use the RAW datatype to store binary data or byte strings. The maximum length of a RAW value is 65535 bytes.

RAW data is like CHARACTER data, except that Oracle assumes nothing about the meaning of RAW data and does no character set conversions when you transmit RAW data from one system to another.

VARRAW

You use the VARRAW datatype to store variable-length binary data or byte strings. The VARRAW datatype is like the RAW datatype, except that VARRAW variables have a 2-byte length field followed by a data field <= 65533 bytes in length. For longer strings, use the LONG VARRAW datatype.

When you specify the length of a VARRAW variable, be sure to include 2 bytes for the length field. The first two bytes of the variable must be interpretable as an integer.

To get the length of a VARRAW variable, simply refer to its length field.

LONG RAW

You use the LONG RAW datatype to store binary data or byte strings. The maximum length of a LONG RAW value is 2147483647 bytes or two gigabytes.

LONG RAW data is like LONG data, except that Oracle assumes nothing about the meaning of LONG RAW data and does no character set conversions when you transmit LONG RAW data from one system to another.

UNSIGNED

You use the UNSIGNED datatype to store unsigned integers. An unsigned integer is a binary number of 2 or 4 bytes. The order of the bytes in a word is system dependent. You must specify a length for input and output host variables. On output, if the column value is a floating-point number, Oracle truncates the fractional part.

LONG VARCHAR

You use the LONG VARCHAR datatype to store variable-length character strings. LONG VARCHAR variables have a 4-byte length field followed by a string field. The maximum length of the string field is 2147483643 (2**31 - 5) bytes. When you specify the length of a LONG VARCHAR for use in a VAR or TYPE statement, do not include the 4 length bytes.

LONG VARRAW

You use the LONG VARRAW datatype to store variable-length binary data or byte strings. LONG VARRAW variables have a 4-byte length field followed by a data field. The maximum length of the data field is 2147483643 bytes. When you specify the length of a LONG VARRAW for use in a VAR or TYPE statement, do not include the 4 length bytes.

CHAR

You use the CHAR datatype to store fixed-length character strings. The maximum length of a CHAR value is 65535 bytes.

On Input

Oracle reads the number of bytes specified for the input host variable, does not strip trailing blanks, then stores the input value in the target database column.

If the input value is longer than the defined width of the database column, Oracle generates an error. If the input value is all-blank, Oracle treats it like a character value.

On Output

Oracle returns the number of bytes specified for the output host variable, doing blank-padding if necessary, then assigns the output value to the target host variable. If a NULL is returned, Oracle fills the host variable with blanks.

If the output value is longer than the declared length of the host variable, Oracle truncates the value before assigning it to the host variable. If an indicator variable is available, Oracle sets it to the original length of the output value. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

CHARZ

When DBMS=V7 or V8, Oracle, by default, assigns the CHARZ datatype to all character host variables in a Pro*C/C++ program. The CHARZ datatype indicates fixed-length, null-terminated character strings. The maximum length of a CHARZ value is 65534 bytes.

On Input

The CHARZ and STRING datatypes work the same way. You must null-terminate the input value. The null terminator serves only to delimit the string; it does not become part of the stored data.

On Output

CHARZ host variables are blank-padded if necessary, then null-terminated. The output value is always null-terminated, even if data must be truncated. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

CHARF

The CHARF datatype is used in EXEC SQL TYPE and EXEC SQL VAR statements. When you precompile with the DBMS option set to V7 or V8, specifying the external datatype CHAR in a TYPE or VAR statement equivalences the C type or variable to the fixed-length, null-terminated datatype CHARZ.

However, you might not want either of these type equivalences, but rather an equivalence to the fixed-length external type CHAR. If you use the external type CHARF, the C type or variable is always equivalenced to the fixed-length ANSI datatype CHAR, regardless of the DBMS value. CHARF never allows the C type to be equivalenced to VARCHAR2 or CHARZ. Alternatively, when you set the option CHAR_MAP=CHARF, all host variables declared as char[n] or char are equivalenced to a CHAR string. If a NULL is selected explicitly, the value in the host variable is indeterminate. The value of the indicator variable needs to be checked for NULL-ness.

Additional External Datatypes

This section describes additional external datatypes.

Datetime and Interval Datatypes

The datetime and interval datatypes are briefly summarized here.


See Also:

For more a more complete discussion, see Oracle Database SQL Language Reference

ANSI DATE

The ANSI DATE is based on the DATE, but contains no time portion. (Therefore, it also has no time zone.) ANSI DATE follows the ANSI specification for the DATE datatype. When assigning an ANSI DATE to a DATE or a timestamp datatype, the time portion of the Oracle DATE and the timestamp are set to zero. When assigning a DATE or a timestamp to an ANSI DATE, the time portion is ignored.

You are encouraged to instead use the TIMESTAMP datatype which contains both date and time.

TIMESTAMP

The TIMESTAMP datatype is an extension of the DATE datatype. It stores the year, month, and day of the DATE datatype, plus the hour, minute, and second values. It has no time zone. The TIMESTAMP datatype has the form:

TIMESTAMP(fractional_seconds_precision) 

where fractional_seconds_precision (which is optional) specifies the number of digits in the fractional part of the SECOND datetime field and can be a number in the range 0 to 9. The default is 6.

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE (TSTZ) is a variant of TIMESTAMP that includes an explicit time zone displacement in its value. The time zone displacement is the difference (in hours and minutes) between local time and UTC (Coordinated Universal Time—formerly Greenwich Mean Time). The TIMESTAMP WITH TIME ZONE datatype has the form:

TIMESTAMP(fractional_seconds_precision) WITH TIME ZONE

where fractional_seconds_precision optionally specifies the number of digits in the fractional part of the SECOND datetime field and can be a number in the range 0 to 9. The default is 6.

Two TIMESTAMP WITH TIME ZONE values are considered identical if they represent the same instant in UTC, regardless of the TIME ZONE offsets stored in the data.

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ) is another variant of TIMESTAMP that includes a time zone displacement in its value. Storage is in the same format as for TIMESTAMP. This type differs from TIMESTAMP WITH TIME ZONE in that data stored in the database is normalized to the database time zone, and the time zone displacement is not stored as part of the column data. When users retrieve the data, Oracle returns it in the users' local session time zone.

The time zone displacement is the difference (in hours and minutes) between local time and UTC (Coordinated Universal Time—formerly Greenwich Mean Time). The TIMESTAMP WITH LOCAL TIME ZONE datatype has the form:

TIMESTAMP(fractional_seconds_precision) WITH LOCAL TIME ZONE

where fractional_seconds_precision optionally specifies the number of digits in the fractional part of the SECOND datetime field and can be a number in the range 0 to 9. The default is 6.

INTERVAL YEAR TO MONTH

INTERVAL YEAR TO MONTH stores a period of time using the YEAR and MONTH datetime fields. The INTERVAL YEAR TO MONTH datatype has the form:

INTERVAL YEAR(year_precision) TO MONTH

where the optional year_precision is the number of digits in the YEAR datetime field. The default value of year_precision is 2.

INTERVAL DAY TO SECOND

INTERVAL DAY TO SECOND stores a period of time in terms of days, hours, minutes, and seconds. The INTERVAL DAY TO SECOND datatype has the form:

INTERVAL DAY (day_precision) TO SECOND(fractional_seconds_precision)

where:

  • day_precision is the number of digits in the DAY datetime field. It is optional. Accepted values are 0 to 9. The default is 2.

fractional_seconds_precision is the number of digits in the fractional part of the SECOND datetime field. It is optional. Accepted values are 0 to 9. The default is 6.

Avoiding Unexpected Results Using Datetime


Note:

To avoid unexpected results in your DML operations on datetime data, you can verify the database and session time zones by querying the built-in SQL functions DBTIMEZONE and SESSIONTIMEZONE. If the time zones have not been set manually, Oracle uses the operating system time zone by default. If the operating system time zone is not a valid Oracle time zone, Oracle uses UTC as the default value.

Host Variables

Host variables are the key to communication between your host program and Oracle. Typically, a precompiler program inputs data from a host variable to Oracle, and Oracle outputs data to a host variable in the program. Oracle stores input data in database columns, and stores output data in program host variables.

A host variable can be any arbitrary C expression that resolves to a scalar type. But, a host variable must also be an lvalue. Host arrays of most host variables are also supported.

Host Variable Declaration

You declare a host variable according to the rules of the C programming language, specifying a C datatype supported by the Oracle program interface. The C datatype must be compatible with that of the source or target database column.

If MODE=ORACLE, you do not have to declare host variables in a special Declare Section. However, if you do not use a Declare Section, the FIPS flagger warns you about this, as the Declare Section is part of the ANSI SQL Standard. If CODE=CPP (you are compiling C++ code) or PARSE=NONE or PARSE=PARTIAL, then you must have a Declare Section.

Table 4-4 shows the C datatypes and the pseudotypes that you can use when declaring host variables. Only these datatypes can be used for host variables.

Table 4-4 C Datatypes for Host Variables

C Datatype or PseudotypeDescription

char

single character

char[n]

n-character array (string)

int

integer

short

small integer

long

large integer

long long

very large (8-byte) integer

float

floating-point number (usually single precision)

double

floating-point number (always double precision)

VARCHAR[n]

variable-length string


Table 4-5 shows the compatible Oracle internal datatypes.

Table 4-5 C to Oracle Datatype Compatibility

Internal TypeC TypeDescription

VARCHAR2(Y)

(Note 1)

char

single character

CHAR(X)

(Note 1)

char[n]

VARCHAR[n]

int

short

long

long long

float

double

n-byte character array

n-byte variable-length character array

integer

small integer

large integer

very large (8-byte) integer

floating-point number

double-precision floating-point

number

NUMBER

int

integer

NUMBER(P,S)

(Note 2)

short

int

long

float

double

char

char[n]

VARCHAR[n]

small integer

integer

large integer

floating-point number

double-precision floating-point

number

single character

n-byte character array

n-byte variable-length character array

DATE

char[n]

VARCHAR[n]

n-byte character array

n-byte variable-length character array

LONG

char[n]

VARCHAR[n]

n-byte character array

n-byte variable-length character array

RAW(X)

(Note 1)

unsigned char[n]

VARCHAR[n]

n-byte character array

n-byte variable-length character array

LONG RAW

unsigned char[n]

VARCHAR[n]

n-byte character array

n-byte variable-length character array

ROWID

unsigned char[n]

VARCHAR[n]

n-byte character array

n-byte variable-length character array

Notes:

1. X ranges from 1 to 2000. 1 is the default value. Y ranges from 1 to 4000.

2. P ranges from 1 to 38. S ranges from -84 to 127.




One-dimensional arrays of simple C types can also serve as host variables. For char[n] and VARCHAR[n], n specifies the maximum string length, not the number of strings in the array. Two-dimensional arrays are allowed only for char[m][n] and VARCHAR[m][n], where m specifies the number of strings in the array and n specifies the maximum string length.

Pointers to simple C types are supported. Pointers to char[n] and VARCHAR[n] variables should be declared as pointer to char or VARCHAR (with no length specification). Arrays of pointers, however, are not supported.

Storage-Class Specifiers

Pro*C/C++ lets you use the auto, extern, and static storage-class specifiers when you declare host variables. However, you cannot use the register storage-class specifier to store host variables, since the precompiler takes the address of host variables by placing an ampersand (&) before them. Following the rules of C, you can use the auto storage class specifier only within a block.

To comply with the ANSI C standard, the Pro*C/C++ Precompiler provides the ability to declare an extern char[n] host variable with or without a maximum length, as the following examples shows:

extern char  protocol[15]; 
extern char  msg[]; 

However, you should always specify the maximum length. In the last example, if msg is an output host variable declared in one precompilation unit but defined in another, the precompiler has no way of knowing its maximum length. If you have not allocated enough storage for msg in the second precompilation unit, you might corrupt memory. (Usually, "enough" is the number of bytes in the longest column value that might be SELECTed or FETCHed into the host variable, plus one byte for a possible null terminator.)

If you neglect to specify the maximum length for an extern char[ ] host variable, the precompiler issues a warning message. The precompiler also assumes that the host variable will store a CHARACTER column value, which cannot exceed 255 characters in length. So, if you want to SELECT or FETCH a VARCHAR2 or a LONG column value of length greater than 255 characters into the host variable, you must specify a maximum length.

Type Qualifiers

You can also use the const and volatile type qualifiers when you declare host variables.

A const host variable must have a constant value, that is, your program cannot change its initial value. A volatile host variable can have its value changed in ways unknown to your program (for example, by a device attached to the system).

Host Variable Referencing

You use host variables in SQL data manipulation statements. A host variable must be prefixed with a colon (:) in SQL statements but must not be prefixed with a colon in C statements, as the following example shows:

char    buf[15];
int     emp_number; 
float   salary; 
... 
gets(buf); 
emp_number = atoi(buf); 

EXEC SQL SELECT sal INTO :salary FROM emp 
    WHERE empno = :emp_number; 

Though it might be confusing, you can give a host variable the same name as an Oracle table or column, as this example shows:

int     empno; 
char    ename[10]; 
float   sal; 
... 
EXEC SQL SELECT ename, sal INTO :ename, :sal FROM emp 
    WHERE empno = :empno; 

Restrictions

A host variable name is a C identifier, hence it must be declared and referenced in the same upper/lower case format. It cannot substitute for a column, table, or other Oracle object in a SQL statement, and must not be an Oracle reserved word.

A host variable must resolve to an address in the program. For this reason, function calls and numeric expressions cannot serve as host variables. The following code is invalid:

#define MAX_EMP_NUM    9000 
... 
int get_dept(); 
... 
EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES 
    (:MAX_EMP_NUM + 10, 'CHEN', :get_dept()); 

Indicator Variables

You can associate every host variable with an optional indicator variable. An indicator variable must be defined as a 2-byte integer and, in SQL statements, must be prefixed with a colon and immediately follow its host variable (unless you use the keyword INDICATOR). If you are using Declare Sections, you must also declare indicator variables inside the Declare Sections.

This applies to relational columns, not object types.

The INDICATOR Keyword

To improve readability, you can precede any indicator variable with the optional keyword INDICATOR. You must still prefix the indicator variable with a colon. The correct syntax is:

:host_variable INDICATOR :indicator_variable 

which is equivalent to

:host_variable:indicator_variable 

You can use both forms of expression in your host program.

Possible indicator values, and their meanings, are:

Indicator ValuesMeanings
0The operation was successful
-1A NULL was returned, inserted, or updated.
-2Output to a character host variable from a "long" type was truncated, but the original column length cannot be determined.
>0The result of a SELECT or FETCH into a character host variable was truncated. In this case, if the host variable is a multibyte character variable, the indicator value is the original column length in characters. If the host variable is not a multibye character variable, then the indicator length is the original column length in bytes.

Example of INDICATOR Variable Usage

Typically, you use indicator variables to assign NULLs to input host variables and detect NULLs or truncated values in output host variables. In the example later, you declare three host variables and one indicator variable, then use a SELECT statement to search the database for an employee number matching the value of host variable emp_number. When a matching row is found, Oracle sets output host variables salary and commission to the values of columns SAL and COMM in that row and stores a return code in indicator variable ind_comm. The next statements use ind_comm to select a course of action.

EXEC SQL BEGIN DECLARE SECTION; 
    int    emp_number; 
    float  salary, commission; 
    short comm_ind;  /* indicator variable  */
EXEC SQL END DECLARE SECTION;
    char temp[16];
    float  pay;      /* not used in a SQL statement */
...
printf("Employee number? "); 
gets(temp);
emp_number = atof(temp);
EXEC SQL SELECT SAL, COMM 
    INTO :salary, :commission:ind_comm 
    FROM EMP 
    WHERE EMPNO = :emp_number; 
if(ind_comm == -1)    /* commission is null */
    pay = salary; 
else
    pay = salary + commission; 

INDICATOR Variable Guidelines

The following guidelines apply to declaring and referencing indicator variables. An indicator variable must

  • Be declared explicitly (in the Declare Section if present) as a 2-byte integer.

  • Be prefixed with a colon (:) in SQL statements.

  • Immediately follow its host variable in SQL statements and PL/SQL blocks (unless preceded by the keyword INDICATOR).

An indicator variable must not:

  • Be prefixed with a colon in host language statements.

  • Follow its host variable in host language statements.

  • Be an Oracle reserved word.

Oracle Restrictions

When DBMS=V7 or V8, if you SELECT or FETCH a NULL into a host variable that has no indicator, Oracle issues the following error message:

ORA-01405: fetched column value is NULL

When precompiling with MODE=ORACLE and DBMS=V7 or V8 specified, you can specify UNSAFE_NULL=YES to disable the ORA-01405 message.


See Also:

"UNSAFE_NULL"

VARCHAR Variables

You can use the VARCHAR pseudotype to declare variable-length character strings. When your program deals with strings that are output from, or input to, VARCHAR2 or LONG columns, you might find it more convenient to use VARCHAR host variables instead of standard C strings. The datatype name VARCHAR can be uppercase or lowercase, but it cannot be mixed case. In this Guide, uppercase is used to emphasize that VARCHAR is not a native C datatype.

VARCHAR Variable Declaration

Think of a VARCHAR as an extended C type or pre-declared struct. For example, the precompiler expands the VARCHAR declaration

VARCHAR   username[20];
 

into the following struct with array and length members:

struct 
{ 
    unsigned short  len; 
    unsigned char   arr[20]; 
} username; 

The advantage of using VARCHAR variables is that you can explicitly reference the length member of the VARCHAR structure after a SELECT or FETCH. Oracle puts the length of the selected character string in the length member. You can then use this member to do things such as adding the null ('\0') terminator.

username.arr[username.len] = '\0'; 

or using the length in a strncpy or printf statement; for example:

printf("Username is %.*s\n", username.len, username.arr);

You specify the maximum length of a VARCHAR variable in its declaration. The length must lie in the range 1.65533. For example, the following declaration is invalid because no length is specified:

VARCHAR   null_string[];    /* invalid */

The length specification holds the current length of the value stored in the array member.

You can declare multiple VARCHARs on a single line; for example:

VARCHAR emp_name[ENAME_LEN], dept_loc[DEPT_NAME_LEN];

The length specifier for a VARCHAR can be a #defined macro, or any complex expression that can be resolved to an integer at precompile time.

You can also declare pointers to VARCHAR datatypes.


Note:

Do not attempt to use a typedef statement such as:
typedef VARCHAR buf[64]; 

This causes errors during C compilation.


VARCHAR Variable Referencing

In SQL statements, you reference VARCHAR variables using the struct name prefixed with a colon, as the following example shows:

... 
int       part_number; 
VARCHAR   part_desc[40]; 
... 
main() 
{ 
    ... 
    EXEC SQL SELECT pdesc INTO :part_desc 
        FROM parts 
        WHERE pnum = :part_number; 
    ... 

After the query is executed, part_desc.len holds the actual length of the character string retrieved from the database and stored in part_desc.arr.

In C statements, you reference VARCHAR variables using the component names, as the next example shows:

printf("\n\nEnter part description: "); 
gets(part_desc.arr); 
/* You must set the length of the string
   before using the VARCHAR in an INSERT or UPDATE */
part_desc.len = strlen(part_desc.arr); 

Return NULLs to a VARCHAR Variable

Oracle automatically sets the length component of a VARCHAR output host variable. If you SELECT or FETCH a NULL into a VARCHAR, the server does not change the length or array members.


Note:

If you select a NULL into a VARCHAR host variable, and there is no associated indicator variable, an ORA-01405 error occurs at run time. Avoid this by coding indicator variables with all host variables. (As a temporary fix, use the UNSAFE_NULL=YES precompiler option. See also "DBMS").

Insert NULLs Using VARCHAR Variables

If you set the length of a VARCHAR variable to zero before performing an UPDATE or INSERT statement, the column value is set to NULL. If the column has a NOT NULL constraint, Oracle returns an error.

Pass VARCHAR Variables to a Function

VARCHARs are structures, and most C compilers permit passing of structures to a function by value, and returning structures by copy out from functions. However, in Pro*C/C++ you must pass VARCHARs to functions by reference. The following example shows the correct way to pass a VARCHAR variable to a function:

VARCHAR emp_name[20]; 
... 
emp_name.len = 20; 
SELECT ename INTO :emp_name FROM emp 
WHERE empno = 7499; 
... 
print_employee_name(&emp_name); /* pass by pointer */ 
... 
 
print_employee_name(name) 
VARCHAR *name; 
{ 
    ... 
    printf("name is %.*s\n", name->len, name->arr); 
    ... 
}

Find the Length of the VARCHAR Array Component

When the precompiler processes a VARCHAR declaration, the actual length of the array element in the generated structure can be longer than that declared. For example, on a Sun Solaris system, the Pro*C/C++ declaration

VARCHAR my_varchar[12];
 

is expanded by the precompiler to

struct my_varchar
{
    unsigned short len;
    unsigned char  arr[12];
};

However, the precompiler or the C compiler on this system pads the length of the array component to 14 bytes. This alignment requirement pads the total length of the structure to 16 bytes: 14 for the padded array and 2 bytes for the length.

The SQLVarcharGetLength() (replaces the non-threaded sqlvcp()) function—part of the SQLLIB runtime library—returns the actual (possibly padded) length of the array member.

You pass the SQLVarcharGetLength() function the length of the data for a VARCHAR host variable or a VARCHAR pointer host variable, and SQLVarcharGetLength() returns the total length of the array component of the VARCHAR. The total length includes any padding that might be added by your C compiler.

The syntax of SQLVarcharGetLength() is

SQLVarcharGetLength (dvoid *context, unsigned long *datlen, unsigned long *totlen); 

For single-threaded applications, use sqlvcp(). Put the length of the VARCHAR in the datlen parameter before calling sqlvcp(). When the function returns, the totlen parameter contains the total length of the array element. Both parameters are pointers to unsigned long integers, so must be passed by reference.


See Also:

"New Names for SQLLIB Public Functions" for a discussion of these and all other SQLLIB public functions.

Example Program: Using sqlvcp()

The following example program shows how you can use the function in a Pro*C/C++ application. The example also uses the sqlgls() function. The example declares a VARCHAR pointer, then uses the sqlvcp() function to determine the size required for the VARCHAR buffer. The program FETCHes employee names from the EMP table and prints them. Finally, the example uses the sqlgls() function to print out the SQL statement and its function code and length attributes. This program is available on-line as sqlvcp.pc in your demo directory.

/*
 *  The sqlvcp.pc program demonstrates how you can use the
 *  sqlvcp() function to determine the actual size of a
 *  VARCHAR struct. The size is then used as an offset to
 *  increment a pointer that steps through an array of
 *  VARCHARs.
 *
 *  This program also demonstrates the use of the sqlgls()
 *  function, to get the text of the last SQL statement executed.
 *  sqlgls() is described in the "Error Handling" chapter of
 *  The Programmer's Guide to the Oracle Pro*C/C++ Precompiler.
 */

#include <stdio.h> 
#include <sqlca.h>
#include <sqlcpr.h>

/*  Fake a VARCHAR pointer type. */ 

struct my_vc_ptr 
{ 
    unsigned short len; 
    unsigned char arr[32767]; 
}; 

/* Define a type for the VARCHAR pointer */
typedef struct my_vc_ptr my_vc_ptr; 
my_vc_ptr *vc_ptr; 


EXEC SQL BEGIN DECLARE SECTION; 
VARCHAR *names;  
int      limit;    /* for use in FETCH FOR clause  */ 
char    *username = "scott/tiger"; 
EXEC SQL END DECLARE SECTION; 
void sql_error(); 
extern void sqlvcp(), sqlgls(); 

main() 
{ 
    unsigned int vcplen, function_code, padlen, buflen; 
    int i; 
    char stmt_buf[120]; 

    EXEC SQL WHENEVER SQLERROR DO sql_error(); 

    EXEC SQL CONNECT :username; 
    printf("\nConnected.\n"); 
     
/*  Find number of rows in table. */ 
    EXEC SQL SELECT COUNT(*) INTO :limit FROM emp; 
     
     
/*  Declare a cursor for the FETCH statement. */ 
    EXEC SQL DECLARE emp_name_cursor CURSOR FOR 
    SELECT ename FROM emp; 
    EXEC SQL FOR :limit OPEN emp_name_cursor; 
     
/*  Set the desired DATA length for the VARCHAR. */ 
    vcplen = 10; 
     
/*  Use SQLVCP to help find the length to malloc. */ 
    sqlvcp(&vcplen, &padlen); 
    printf("Actual array length of VARCHAR is %ld\n", padlen); 
     
/*  Allocate the names buffer for names. 
    Set the limit variable for the FOR clause. */ 
    names = (VARCHAR *) malloc((sizeof (short) + 
    (int) padlen) * limit); 
    if (names == 0) 
    { 
        printf("Memory allocation error.\n"); 
        exit(1); 
    }
/*  Set the maximum lengths before the FETCH. 
 *  Note the "trick" to get an effective VARCHAR *.
 */ 
    for (vc_ptr = (my_vc_ptr *) names, i = 0; i < limit; i++) 
    { 
        vc_ptr->len = (short) padlen; 
        vc_ptr = (my_vc_ptr *)((char *) vc_ptr + 
        padlen + sizeof (short)); 
    } 
/*  Execute the FETCH. */ 
    EXEC SQL FOR :limit FETCH emp_name_cursor INTO :names; 
     
/*  Print the results. */ 
    printf("Employee names--\n"); 
    
    for (vc_ptr = (my_vc_ptr *) names, i = 0; i < limit; i++) 
    { 
        printf
         ("%.*s\t(%d)\n", vc_ptr->len, vc_ptr->arr, vc_ptr->len); 
        vc_ptr = (my_vc_ptr *)((char *) vc_ptr + 
                  padlen + sizeof (short)); 
    } 
     
/*  Get statistics about the most recent 
 *  SQL statement using SQLGLS. Note that 
 *  the most recent statement in this example 
 *  is not a FETCH, but rather "SELECT ENAME FROM EMP" 
 *  (the cursor).
 */ 
    buflen = (long) sizeof (stmt_buf); 
    
/*  The returned value should be 1, indicating no error. */ 
    sqlgls(stmt_buf, &buflen, &function_code);
    if (buflen != 0)
    { 
        /* Print out the SQL statement. */ 
        printf("The SQL statement was--\n%.*s\n", buflen, stmt_buf); 
     
        /* Print the returned length. */ 
        printf("The statement length is %ld\n", buflen); 
     
        /* Print the attributes. */ 
        printf("The function code is %ld\n", function_code); 
    
        EXEC SQL COMMIT RELEASE; 
        exit(0); 
    }
    else 
    { 
        printf("The SQLGLS function returned an error.\n"); 
        EXEC SQL ROLLBACK RELEASE; 
        exit(1); 
    } 
} 

void
sql_error() 
{ 
    char err_msg[512]; 
    int buf_len, msg_len;

     
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
 
    buf_len = sizeof (err_msg); 
    sqlglm(err_msg, &buf_len, &msg_len); 
    printf("%.*s\n", msg_len, err_msg); 
 
    EXEC SQL ROLLBACK RELEASE; 
    exit(1); 
} 

Cursor Variables

You can use cursor variables in your Pro*C/C++ program for queries. A cursor variable is a handle for a cursor that must be defined and opened on the Oracle server using PL/SQL. See the Oracle Database PL/SQL Language Reference for complete information about cursor variables.

The advantages of cursor variables are:

  • Ease of maintenance

    Queries are centralized, in the stored procedure that opens the cursor variable. If you need to change the cursor, you only need to make the change in one place: the stored procedure. There is no need to change each application.

  • Convenient security

    The user of the application is the username used when the Pro*C/C++ application connects to the server. The user must have execute permission on the stored procedure that opens the cursor but not read permission on the tables used in the query. This capability can be used to limit access to the columns in the table, and access to other stored procedures.

Declare a Cursor Variable

You declare a cursor variable in your Pro*C/C++ program using the Pro*C/C++ pseudotype SQL_CURSOR. For example:

EXEC SQL BEGIN DECLARE SECTION;
    sql_cursor     emp_cursor;             /* a cursor variable */
    SQL_CURSOR     dept_cursor;      /* another cursor variable */
    sql_cursor     *ecp;      /* a pointer to a cursor variable */
    ...
EXEC SQL END DECLARE SECTION;
ecp = &emp_cursor;             /* assign a value to the pointer */

You can declare a cursor variable using the type specification SQL_CURSOR, in all upper case, or sql_cursor, in all lower case; you cannot use mixed case.

A cursor variable is just like any other host variable in the Pro*C/C++ program. It has scope, following the scope rules of C. You can pass it as a parameter to other functions, even functions external to the source file in which you declared it. You can also define functions that return cursor variables, or pointers to cursor variables.


Note:

A SQL_CURSOR is implemented as a C struct in the code that Pro*C/C++ generates. So you can always pass it by pointer to another function, or return a pointer to a cursor variable from a function. But you can only pass it or return it by value if your C compiler supports these operations.

Allocate a Cursor Variable

Before you can use a cursor variable, either to open it or to FETCH it, you must allocate the cursor. You do this using the new precompiler command ALLOCATE. For example, to allocate the SQL_CURSOR emp_cursor that was declared in the example earlier, you write the statement:

EXEC SQL ALLOCATE :emp_cursor;

Allocating a cursor does not require a call to the server, either at precompile time or at runtime. If the ALLOCATE statement contains an error (for example, an undeclared host variable), Pro*C/C++ issues a precompile-time error. Allocating a cursor variable does cause heap memory to be used. For this reason, you can free a cursor variable in a program loop. Memory allocated for cursor variables is not freed when the cursor is closed, but only when an explicit CLOSE is executed, or the connection is closed:

EXEC SQL CLOSE :emp_cursor;

Open a Cursor Variable

You must open a cursor variable on the Oracle database server. You cannot use the embedded SQL OPEN command to open a cursor variable. You can open a cursor variable either by calling a PL/SQL stored procedure that opens the cursor (and defines it in the same statement). Or, you can open and define a cursor variable using an anonymous PL/SQL block in your Pro*C/C++ program.

For example, consider the following PL/SQL package, stored in the database:

CREATE PACKAGE demo_cur_pkg AS
    TYPE EmpName IS RECORD (name VARCHAR2(10));
    TYPE cur_type IS REF CURSOR RETURN EmpName;
    PROCEDURE open_emp_cur (
               curs     IN OUT cur_type,
               dept_num IN     NUMBER);
END;

CREATE PACKAGE BODY demo_cur_pkg AS
    CREATE PROCEDURE open_emp_cur (
               curs     IN OUT cur_type,
               dept_num IN     NUMBER) IS
    BEGIN
        OPEN curs FOR
            SELECT ename FROM emp
                WHERE deptno = dept_num
                ORDER BY ename ASC;
    END;
END;

After this package has been stored, you can open the cursor curs by calling the open_emp_cur stored procedure from your Pro*C/C++ program, and FETCH from the cursor in the program. For example:

...
sql_cursor    emp_cursor;
char          emp_name[11];
...
EXEC SQL ALLOCATE :emp_cursor;  /* allocate the cursor variable */
...
/* Open the cursor on the server side. */
EXEC SQL EXECUTE
    begin
        demo_cur_pkg.open_emp_cur(:emp_cursor, :dept_num);
    end;
;
EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
    EXEC SQL FETCH :emp_cursor INTO :emp_name;
    printf("%s\n", emp_name);
}
...

To open a cursor using a PL/SQL anonymous block in your Pro*C/C++ program, you define the cursor in the anonymous block. For example:

sql_cursor emp_cursor;
int dept_num = 10;
...
EXEC SQL EXECUTE
    BEGIN
        OPEN :emp_cursor FOR SELECT ename FROM emp
             WHERE deptno = :dept_num;
    END;
END-EXEC;
...

The earlier examples show how to use PL/SQL to open a cursor variable. You can also open a cursor variable using embedded SQL with the CURSOR clause:

...
sql_cursor emp_cursor;
...
EXEC ORACLE OPTION(select_error=no);
EXEC SQL
    SELECT CURSOR(SELECT ename FROM emp WHERE deptno = :dept_num)
    INTO :emp_cursor FROM DUAL;
EXEC ORACLE OPTION(select_error=yes);

In the statement earlier, the emp_cursor cursor variable is bound to the first column of the outermost select. The first column is itself a query, but it is represented in the form compatible with a sql_cursor host variable since the CURSOR(...) conversion clause is used.

Before using queries which involve the CURSOR clause, you must set the SELECT_ERROR option to NO. This will prevent the cancellation of the parent cursor and allow the program to run without errors.

Opening in a Standalone Stored Procedure

In the example earlier, a reference cursor was defined inside a package, and the cursor was opened in a procedure in that package. But it is not always necessary to define a reference cursor inside the package that contains the procedures that open the cursor.

If you need to open a cursor inside a standalone stored procedure, you can define the cursor in a separate package, and then reference that package in the standalone stored procedure that opens the cursor. Here is an example:

PACKAGE dummy IS
    TYPE EmpName IS RECORD (name VARCHAR2(10));
    TYPE emp_cursor_type IS REF CURSOR RETURN EmpName;
END;
-- and then define a standalone procedure:
PROCEDURE open_emp_curs (
      emp_cursor IN OUT dummy.emp_cursor_type;
      dept_num   IN     NUMBER) IS
    BEGIN
        OPEN emp_cursor FOR
            SELECT ename FROM emp WHERE deptno = dept_num;
    END;
END;

Return Types

When you define a reference cursor in a PL/SQL stored procedure, you must declare the type that the cursor returns. See the Oracle Database PL/SQL Language Reference for complete information on the reference cursor type and its return types.

Closing and Freeing a Cursor Variable

Use the CLOSE command to close a cursor variable. For example, to close the emp_cursor cursor variable that was OPENed in the examples earlier, use the embedded SQL statement:

EXEC SQL CLOSE :emp_cursor;

The cursor variable is a host variable, and so you must precede it with a colon.

You can reuse ALLOCATEd cursor variables. You can open, FETCH, and CLOSE as many times as needed for your application. However, if you disconnect from the server, then reconnect, you must re-ALLOCATE cursor variables.

Cursors are deallocated by the FREE embedded SQL statement. For example:

EXEC SQL FREE :emp_cursor;

If the cursor is still open, it is closed and the memory allocated for it is released.

Cursor Variables with the OCI (Release 7 Only)

You can share a Pro*C/C++ cursor variable with an OCI function. To do so, you must use the SQLLIB conversion functions, SQLCDAFromResultSetCursor() (formerly known as sqlcdat()) and SQLCDAToResultSetCursor (formerly known as sqlcurt()). These functions convert between OCI cursor data areas and Pro*C/C++ cursor variables.

The SQLCDAFromResultSetCursor() function translates an allocated cursor variable to an OCI cursor data area. The syntax is:

void SQLCDAFromResultSetCursor(dvoid *context, Cda_Def *cda, void *cur, 
   sword *retval);

where the parameters are:

ParametersDescription
contextA pointer to the SQLLIB runtime context.
cdaA pointer to the destination OCI cursor data area.
curA pointer to the source Pro*C/C++ cursor variable.
retval0 if no error, otherwise a SQLLIB (SQL) error number.


Note:

In the case of an error, the V2 and rc return code fields in the CDA also receive the error codes. The rows processed count field in the CDA is not set.

For non-threaded or default context applications, pass the defined constant SQL_SINGLE_RCTX as the context.


The SQLCDAToResultSetCursor() function translates an OCI cursor data area to a Pro*C/C++ cursor variable. The syntax is:

void SQLCDAToResultSetCursor(dvoid *context, void *cur, Cda_Def *cda, 
   int *retval);

where the parameters are:

ParametersDescription
contextA pointer to the SQLLIB runtime context.
curA pointer to the destination Pro*C/C++ cursor variable.
cdaA pointer to the source OCI cursor data area.
retval0 if no error, otherwise an error code.


Note:

The SQLCA structure is not updated by this routine. The SQLCA components are only set after a database operation is performed using the translated cursor.

For non-threaded applications, pass the defined constant SQL_SINGLE_RCTX as the context.


ANSI and K&R prototypes for these functions are provided in the sql2oci.h header file. Memory for both cda and cur must be allocated prior to calling these functions.


See Also:

"New Names for SQLLIB Public Functions" for more details on the SQLLIB Public Functions, see the table.

Restrictions

The following restrictions apply to the use of cursor variables:

  • If you use the same cursor variable in Pro*C/C++ and OCI V7, then you must use either SQLLDAGetCurrent() or SQLLDAGetName() immediately after connecting.

  • You cannot translate a cursor variable to an OCI release 8 equivalent.

  • You cannot use cursor variables with dynamic SQL.

  • You can only use cursor variables with the ALLOCATE, FETCH, FREE, and CLOSE commands

  • The DECLARE CURSOR command does not apply to cursor variables.

  • You cannot FETCH from a CLOSEd cursor variable.

  • You cannot FETCH from a non-ALLOCATEd cursor variable.

  • If you precompile with MODE=ANSI, it is an error to close a cursor variable that is already closed.

  • You cannot use the AT clause with the ALLOCATE command, nor with the FETCH and CLOSE commands if they reference a cursor variable.

  • Cursor variables cannot be stored in columns in the database.

  • A cursor variable itself cannot be declared in a package specification. Only the type of the cursor variable can be declared in the package specification.

  • A cursor variable cannot be a component of a PL/SQL record.

Example: cv_demo.sql and sample11.pc

The following example programs—a PL/SQL script and a Pro*C/C++ program—demonstrate how you can use cursor variables. These sources are available on-line in your demo directory. Also see another version of the same application, cv_demo.pc, in the demo directory.

cv_demo.sql

-- PL/SQL source for a package that declares and
-- opens a ref cursor
CONNECT SCOTT/TIGER;
CREATE OR REPLACE PACKAGE emp_demo_pkg as
   TYPE emp_cur_type IS REF CURSOR RETURN emp%ROWTYPE;
     PROCEDURE open_cur(curs IN OUT emp_cur_type, dno IN NUMBER);
END emp_demo_pkg;
 
 
CREATE OR REPLACE PACKAGE BODY emp_demo_pkg AS
    PROCEDURE open_cur(curs IN OUT emp_cur_type, dno IN NUMBER) IS
    BEGIN 
        OPEN curs FOR SELECT *
            FROM emp WHERE deptno = dno
            ORDER BY ename ASC;
    END;
END emp_demo_pkg;

sample11.pc

/*
 *  Fetch from the EMP table, using a cursor variable.
 *  The cursor is opened in the stored PL/SQL procedure
 *  open_cur, in the EMP_DEMO_PKG package.
 *
 *  This package is available on-line in the file
 *  sample11.sql, in the demo directory.
 *
 */
 
#include <stdio.h>
#include <sqlca.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
 
/* Error handling function. */
void sql_error(msg)
    char *msg;
{
    size_t clen, fc;
    char cbuf[128];
 
    clen = sizeof (cbuf);
    sqlgls((char *)cbuf, (size_t *)&clen, (size_t *)&fc);
 
    printf("\n%s\n", msg);
    printf("Statement is--\n%s\n", cbuf);
    printf("Function code is %ld\n\n", fc);
 
    sqlglm((char *)cbuf, (size_t *) &clen, (size_t *) &clen);
    printf ("\n%.*s\n", clen, cbuf);
  
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK RELEASE;
    exit(EXIT_FAILURE);
}

void main()
{
    char temp[32];
 
    EXEC SQL BEGIN DECLARE SECTION;
        char *uid = "scott/tiger";
        SQL_CURSOR emp_cursor;
        int dept_num;
        struct
        {
            int   emp_num;
            char  emp_name[11];
            char  job[10];
            int   manager;
            char  hire_date[10];
            float salary;
            float commission;
            int   dept_num;
        } emp_info;
    
        struct
        {
            short emp_num_ind;
            short emp_name_ind;
            short job_ind;
            short manager_ind;
            short hire_date_ind;
            short salary_ind;
            short commission_ind;
            short dept_num_ind;
        } emp_info_ind;
    EXEC SQL END DECLARE SECTION;
    
    EXEC SQL WHENEVER SQLERROR do sql_error("Oracle error");
    
/* Connect to Oracle. */
    EXEC SQL CONNECT :uid;
 
/* Allocate the cursor variable. */
    EXEC SQL ALLOCATE :emp_cursor;
 
/* Exit the inner for (;;) loop when NO DATA FOUND. */
    EXEC SQL WHENEVER NOT FOUND DO break;
 
    for (;;)
    {
        printf("\nEnter department number  (0 to exit): ");
        gets(temp);
        dept_num = atoi(temp);
        if (dept_num <= 0)
            break;
 
        EXEC SQL EXECUTE
            begin
                emp_demo_pkg.open_cur(:emp_cursor, :dept_num);
            end;
        END-EXEC;
 
        printf("\nFor department %d--\n", dept_num);
        printf("ENAME           SAL     COMM\n");
        printf("-----           ---     ----\n");
 
/* Fetch each row in the EMP table into the data struct.
   Note the use of a parallel indicator struct. */
        for (;;)
        {
             EXEC SQL FETCH :emp_cursor 
                 INTO :emp_info INDICATOR :emp_info_ind;
 
             printf("%s ", emp_info.emp_name);
             printf("%8.2f ", emp_info.salary);
             if (emp_info_ind.commission_ind != 0)
                 printf("    NULL\n");
             else
                 printf("%8.2f\n", emp_info.commission);
        }
 
    }
 
/* Close the cursor. */
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL CLOSE :emp_cursor;

/* Disconnect from Oracle. */
    EXEC SQL ROLLBACK WORK RELEASE;
    exit(EXIT_SUCCESS);

}

CONTEXT Variables

A runtime context, usually simply called a context, is a handle to a an area in client memory which contains zero or more connections, zero or more cursors, their inline options (such as MODE, HOLD_CURSOR, RELEASE_CURSOR, SELECT_ERROR, and so on.) and other additional state information.

To define a context host variable use pseudo-type sql_context. For example:

sql_context my_context ;

Use the CONTEXT ALLOCATE precompiler directive to allocate and initialize memory for a context:

EXEC SQL CONTEXT ALLOCATE :context ;

where context is a host variable that is a handle to the context. For example:

EXEC SQL CONTEXT ALLOCATE :my_context ;

Use the CONTEXT USE precompiler directive to define which context is to be used by the embedded SQL statements (such as CONNECT, INSERT, DECLARE CURSOR, and so on.) from that point on in the source file, not in the flow of program logic. That context is used until another CONTEXT USE statement is encountered. The syntax is:

EXEC SQL CONTEXT USE {:context | DEFAULT} ;

The keyword DEFAULT specifies that the default (also known as global) context is to be used in all the embedded SQL statements that are executed subsequently, until another CONTEXT USE directive is encountered. A simple example is:

EXEC SQL CONTEXT USE :my_context ;

If the context variable my_context has not been defined and allocated already, an error is returned.

The CONTEXT FREE statement frees the memory used by the context after it is no longer needed:

EXEC SQL CONTEXT FREE :context ;

An example is:

EXEC SQL CONTEXT FREE :my_context ;

The following example demonstrates the use of a default context in the same application as a user-defined context:

CONTEXT USE Example

#include <sqlca.h>
#include <ociextp.h>
main()
{
   sql_context ctx1;
   char *usr1 = "scott/tiger";
   char *usr2 = "system/manager";

   /* Establish connection to SCOTT in global runtime context */
   EXEC SQL CONNECT :usr1;

   /* Establish connection to SYSTEM in runtime context ctx1 */
   EXEC SQL CONTEXT ALLOCATE :ctx1;
   EXEC SQL CONTEXT USE :ctx1;
   EXEC SQL CONNECT :usr2; 

   /* Insert into the emp table from schema SCOTT */
   EXEC SQL CONTEXT USE DEFAULT;
   EXEC SQL INSERT INTO emp (empno, ename) VALUES (1234, 'WALKER');
   ...
}

Universal ROWIDs

There are two kinds of table organization used in the database server: heap tables and index-organized tables.

Heap tables are the default. The physical row address (ROWID) is a permanent property that is used to identify a row in a heap table. The external character format of the physical ROWID is an 18-byte character string in base-64 encoding.

An index-organized table does not have physical row addresses as permanent identifiers. A logical ROWID is defined for these tables. When you use a SELECT ROWID ... statement from an index-organized table the ROWID is an opaque structure that contains the primary key of the table, control information, and an optional physical "guess". You can use this ROWID in a SQL statement containing a clause such as "WHERE ROWID = ..." to retrieve values from the table.

Universal ROWID can be used for both physical ROWID and logical ROWID. You can use universal ROWIDs to access data in heap tables, or index-organized tables, since the table organization can change with no effect on applications. The column datatype used for ROWID is UROWID(length), where length is optional.

Use the universal ROWID in all new applications.

For more information on universal ROWIDs, see Oracle Database Concepts.

Use a universal ROWID variable this way:

  • Declare it as type pointer to OCIRowid.

  • Allocate memory for the universal ROWID variable.

  • Use the universal ROWID as a host bind variable.

  • Free the memory when finished.

For example:

OCIRowid *my_urowid ;
...
EXEC SQL ALLOCATE :my_urowid ;
/* Bind my_urowid as type SQLT_RDD -- no implicit conversion */
EXEC SQL SELECT rowid INTO :my_urowid FROM my_table WHERE ... ;
...
EXEC SQL UPDATE my_table SET ... WHERE rowid = :my_urowid ;
EXEC SQL FREE my_urpwid ;
...

You also have the option of using a character host variable of width between 19 (18 bytes plus the null-terminator) and 4001 as the host bind variable for universal ROWID. Character-based universal ROWIDs are supported for heap tables only for backward compatibility. Because universal ROWID can be variable length, there can be truncation.

Use the character variable this way:

/* n is based on table characteristics  */
int n=4001 ;
char my_urowid_char[n] ;
...
EXEC SQL ALLOCATE :my_urowid_char ;
/* Bind my_urowid_char as SQLT_STR  */
EXEC SQL SELECT rowid INTO :my_urowid_char FROM my_table WHERE ... ;
EXEC ORACLE OPTION(CHAR_MAP=STRING);
EXEC SQL UPDATE my_table SET ... WHERE rowid = :my_urowid_char ;
EXEC SQL FREE :my_urowid_char ;
...

See Also:

"Positioned Update" for an example of a positioned update using the universal ROWID.

SQLRowidGet()

A SQLLIB function, SQLRowidGet(), provides the ability to retrieve a pointer to the universal ROWID of the last row inserted, updated, or selected. The function prototype and its arguments are:

void SQLRowidGet (dvoid *rctx, OCIRowid **urid) ;

rctx (IN)

is a pointer to a runtime context. For the default context or a non-threaded case, pass SQL_SINGLE_RCTX.

urid (OUT)

is a pointer to a universal ROWID pointer. When a normal execution finishes, this will point to a valid ROWID. In case of an error, NULL is returned.


Note:

The universal ROWID pointer must have been previously allocated to call SQLRowidGet(). Use FREE afterward on the universal ROWID.

Host Structures

You can use a C structure to contain host variables. You reference a structure containing host variables in the INTO clause of a SELECT or a FETCH statement, and in the VALUES list of an INSERT statement. Every component of the host structure must be a legal Pro*C/C++ host variable, as defined in Table 4-4.

When a structure is used as a host variable, only the name of the structure is used in the SQL statement. However, each of the members of the structure sends data to Oracle, or receives data from Oracle on a query. The following example shows a host structure that is used to add an employee to the EMP table:

typedef struct 
{ 
    char  emp_name[11]; /* one greater than column length */ 
    int   emp_number; 
    int   dept_number; 
    float salary; 
} emp_record; 
... 
/* define a new structure of type "emp_record" */ 
emp_record new_employee; 
 
strcpy(new_employee.emp_name, "CHEN"); 
new_employee.emp_number = 9876; 
new_employee.dept_number = 20; 
new_employee.salary = 4250.00; 
 
EXEC SQL INSERT INTO emp (ename, empno, deptno, sal) 
    VALUES (:new_employee); 

The order that the members are declared in the structure must match the order that the associated columns occur in the SQL statement, or in the database table if the column list in the INSERT statement is omitted.

For example, the following use of a host structure is invalid, and causes a runtime error:

struct 
{ 
    int empno; 
    float salary;          /* struct components in wrong order */
    char emp_name[10]; 
} emp_record; 
 
... 
SELECT empno, ename, sal 
   INTO :emp_record FROM emp; 

The example is wrong because the components of the structure are not declared in the same order as the associated columns in the select list. The correct form of the SELECT statement is:

SELECT empno, sal, ename   /* reverse order of sal and ename */
    INTO :emp_record FROM emp;

Host Structures and Arrays

An array is a collection of related data items, called elements, associated with a single variable name. When declared as a host variable, the array is called a host array. Likewise, an indicator variable declared as an array is called an indicator array. An indicator array can be associated with any host array.

Host arrays can increase performance by letting you manipulate an entire collection of data items with a single SQL statement. With few exceptions, you can use host arrays wherever scalar host variables are allowed. Also, you can associate an indicator array with any host array.

For a complete discussion of host arrays, see also Chapter 8, "Host Arrays".

You can use host arrays as components of host structures. In the following example, a structure containing arrays is used to INSERT three new entries into the EMP table:

struct 
{ 
    char emp_name[3][10]; 
    int emp_number[3]; 
    int dept_number[3]; 
} emp_rec; 
... 
strcpy(emp_rec.emp_name[0], "ANQUETIL"); 
strcpy(emp_rec.emp_name[1], "MERCKX"); 
strcpy(emp_rec.emp_name[2], "HINAULT"); 
emp_rec.emp_number[0] = 1964; emp_rec.dept_number[0] = 5; 
emp_rec.emp_number[1] = 1974; emp_rec.dept_number[1] = 5; 
emp_rec.emp_number[2] = 1985; emp_rec.dept_number[2] = 5; 
 
EXEC SQL INSERT INTO emp (ename, empno, deptno) 
    VALUES (:emp_rec); 
...

PL/SQL Records

You cannot bind a C struct to a PL/SQL record.

Nested Structures and Unions

You cannot nest host structures. The following example is invalid:

struct 
{ 
    int emp_number; 
    struct 
    { 
        float salary; 
        float commission; 
    } sal_info;            /* INVALID */ 
    int dept_number; 
} emp_record; 
... 
EXEC SQL SELECT empno, sal, comm, deptno 
    INTO :emp_record 
    FROM emp; 

Also, you cannot use a C union as a host structure, nor can you nest a union in a structure that is to be used as a host structure.

Host Indicator Structures

When you need to use indicator variables, but your host variables are contained in a host structure, you set up a second structure that contains an indicator variable for each host variable in the host structure.

For example, suppose you declare a host structure student_record as follows:

struct 
{ 
    char s_name[32]; 
    int s_id; 
    char grad_date[9]; 
} student_record; 

If you want to use the host structure in a query such as

EXEC SQL SELECT student_name, student_idno, graduation_date 
    INTO :student_record 
    FROM college_enrollment 
    WHERE student_idno = 7200; 

and you need to know if the graduation date can be NULL, then you must declare a separate host indicator structure. You declare this as

struct 
{ 
    short s_name_ind;  /* indicator variables must be shorts */ 
    short s_id_ind; 
    short grad_date_ind; 
} student_record_ind; 

Reference the indicator structure in the SQL statement in the same way that you reference a host indicator variable:

EXEC SQL SELECT student_name, student_idno, graduation_date 
    INTO :student_record INDICATOR :student_record_ind 
    FROM college_enrollment 
    WHERE student_idno = 7200;
 

When the query completes, the NULL/NOT NULL status of each selected component is available in the host indicator structure.


Note:

This Guide conventionally names indicator variables and indicator structures by appending _ind to the host variable or structure name. However, the names of indicator variables are completely arbitrary. You can adopt a different convention, or use no convention at all.

Example Program: Cursor and a Host Structure

The demonstration program in this section shows a query that uses an explicit cursor, selecting data into a host structure. This program is available in the file sample2.pc in your demo directory.

/*
 *  sample2.pc
 *
 *  This program connects to ORACLE, declares and opens a cursor, 
 *  fetches the names, salaries, and commissions of all
 *  salespeople, displays the results, then closes the cursor. 
 */ 

#include <stdio.h>
#include <sqlca.h>

#define UNAME_LEN      20 
#define PWD_LEN        40 
 
/*
 * Use the precompiler typedef'ing capability to create
 * null-terminated strings for the authentication host
 * variables. (This isn't really necessary--plain char *'s
 * does work as well. This is just for illustration.)
 */
typedef char asciiz[PWD_LEN]; 

EXEC SQL TYPE asciiz IS STRING(PWD_LEN) REFERENCE; 
asciiz     username; 
asciiz     password; 

struct emp_info 
{ 
    asciiz     emp_name; 
    float      salary; 
    float      commission; 
}; 


/* Declare function to handle unrecoverable errors. */ 
void sql_error(); 


main() 
{ 
    struct emp_info *emp_rec_ptr; 

/* Allocate memory for emp_info struct. */ 
    if ((emp_rec_ptr = 
        (struct emp_info *) malloc(sizeof(struct emp_info))) == 0)
    { 
        fprintf(stderr, "Memory allocation error.\n"); 
        exit(1); 
    } 
 
/* Connect to ORACLE. */ 
    strcpy(username, "SCOTT"); 
    strcpy(password, "TIGER"); 
 
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--");
 
    EXEC SQL CONNECT :username IDENTIFIED BY :password; 
    printf("\nConnected to ORACLE as user: %s\n", username); 
 
/* Declare the cursor. All static SQL explicit cursors
 * contain SELECT commands. 'salespeople' is a SQL identifier,
 * not a (C) host variable.
 */
    EXEC SQL DECLARE salespeople CURSOR FOR 
        SELECT ENAME, SAL, COMM 
            FROM EMP 
            WHERE JOB LIKE 'SALES%'; 
 
/* Open the cursor. */
    EXEC SQL OPEN salespeople; 
 
/* Get ready to print results. */
    printf("\n\nThe company's salespeople are--\n\n");
    printf("Salesperson   Salary   Commission\n"); 
    printf("-----------   ------   ----------\n"); 
 
/* Loop, fetching all salesperson's statistics.
 * Cause the program to break the loop when no more
 * data can be retrieved on the cursor.
 */
    EXEC SQL WHENEVER NOT FOUND DO break; 

    for (;;) 
    { 
        EXEC SQL FETCH salespeople INTO :emp_rec_ptr; 
        printf("%-11s%9.2f%13.2f\n", emp_rec_ptr->emp_name, 
                emp_rec_ptr->salary, emp_rec_ptr->commission); 
    } 
 
/* Close the cursor. */
    EXEC SQL CLOSE salespeople; 
 
    printf("\nArrivederci.\n\n");

    EXEC SQL COMMIT WORK RELEASE; 
    exit(0); 
} 



void 
sql_error(msg) 
char *msg;
{ 
    char err_msg[512];
    int buf_len, msg_len;

    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s\n", msg);

/* Call sqlglm() to get the complete text of the
 * error message.
 */
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s\n", msg_len, err_msg);

    EXEC SQL ROLLBACK RELEASE;
    exit(1);
} 

Pointer Variables

C supports pointers, which "point" to other variables. A pointer holds the address (storage location) of a variable, not its value.

Pointer Variable Declaration

You define pointers as host variables following the normal C practice, as the next example shows:

int   *int_ptr; 
char  *char_ptr;

Pointer Variable Referencing

In SQL statements, prefix pointers with a colon, as shown in the following example:

EXEC SQL SELECT intcol INTO :int_ptr FROM ... 

Except for pointers to character strings, the size of the referenced value is given by the size of the base type specified in the declaration. For pointers to character strings, the referenced value is assumed to be a NULL-terminated string. Its size is determined at run time by calling the strlen() function. For details, see also "Globalization Support".

You can use pointers to reference the members of a struct. First, declare a pointer host variable, then set the pointer to the address of the desired member, as shown in the example later. The datatypes of the struct member and the pointer variable must be the same. Most compilers will warn you of a mismatch.

struct 
{ 
    int  i; 
    char c; 
} structvar; 
int   *i_ptr; 
char  *c_ptr; 
... 
main() 
{ 
    i_ptr = &structvar.i; 
    c_ptr = &structvar.c; 
/* Use i_ptr and c_ptr in SQL statements. */ 
... 

Structure Pointers

You can use a pointer to a structure as a host variable. The following example

  • Declares a structure

  • Declares a pointer to the structure

  • Allocates memory for the structure

  • Uses the struct pointer as a host variable in a query

  • Dereferences the struct components to print the results

struct EMP_REC 
{ 
    int emp_number; 
    float salary; 
}; 
char *name = "HINAULT"; 
... 
struct EMP_REC *sal_rec; 
sal_rec = (struct EMP_REC *) malloc(sizeof (struct EMP_REC)); 
... 
EXEC SQL SELECT empno, sal INTO :sal_rec 
    FROM emp 
    WHERE ename = :name; 

printf("Employee number and salary for %s: ", name); 
printf("%d, %g\n", sal_rec->emp_number, sal_rec->salary);

In the SQL statement, pointers to host structures are referred to in exactly the same way as a host structure. The "address of" notation (&) is not required; in fact, it is an error to use it.

Globalization Support

Although the widely-used 7- or 8-bit ASCII and EBCDIC character sets are adequate to represent the Roman alphabet, some Asian languages, such as Japanese, contain thousands of characters. These languages can require at least 16 bits (two bytes) to represent each character. How does Oracle deal with such dissimilar languages?

Oracle provides Globalization Support, which lets you process single-byte and multibyte character data and convert between character sets. It also lets your applications run in different language environments. With Globalization Support, number and date formats adapt automatically to the language conventions specified for a user session. Thus, Globalization Support allows users around the world to interact with Oracle in their native languages.

You control the operation of language-dependent features by specifying various Globalization Support or NLS parameters. Default values for these parameters can be set in the Oracle initialization file. Table 4-6 shows what each Globalization Support parameter specifies.

Table 4-6 Globalization Support Parameters

Globalization Support ParameterSpecifies

NLS_LANGUAGE

language-dependent conventions

NLS_TERRITORY

te*rritory-dependent conventions

NLS_DATE_FORMAT

date format

NLS_DATE_LANGUAGE

language for day and month names

NLS_NUMERIC_CHARACTERS

decimal character and group separator

NLS_CURRENCY

local currency symbol

NLS_ISO_CURRENCY

ISO currency symbol

NLS_SORT

sort sequence


The main parameters are NLS_LANGUAGE and NLS_TERRITORY. NLS_LANGUAGE specifies the default values for language-dependent features, which include:

  • Language for server messages

  • Language for day and month names

  • Sort sequence

NLS_TERRITORY specifies the default values for territory-dependent features, which include

  • Date format

  • Decimal character

  • Group separator

  • Local currency symbol

  • ISO currency symbol

You can control the operation of language-dependent Globalization Support features for a user session by specifying the parameter NLS_LANG as follows:

NLS_LANG = <language>_<territory>.<character set> 

where language specifies the value of NLS_LANGUAGE for the user session, territory specifies the value of NLS_TERRITORY, and character set specifies the encoding scheme used for the terminal. An encoding scheme (usually called a character set or code page) is a range of numeric codes that corresponds to the set of characters a terminal can display. It also includes codes that control communication with the terminal.

You define NLS_LANG as an environment variable (or the equivalent on your system). For example, on UNIX using the C shell, you might define NLS_LANG as follows:

setenv NLS_LANG French_France.WE8ISO8859P1 

During an Oracle database session you can change the values of Globalization Support parameters. Use the ALTER SESSION statement as follows:

ALTER SESSION SET <globalization support_parameter> = <value>

Pro*C/C++ fully supports all the Globalization Support features that allow your applications to process foreign language data stored in an Oracle database. For example, you can declare foreign language character variables and pass them to string functions such as INSTRB, LENGTHB, and SUBSTRB. These functions have the same syntax as the INSTR, LENGTH, and SUBSTR functions, respectively, but operate on a byte-by-byte basis rather than a character-by-character basis.

You can use the functions NLS_INITCAP, NLS_LOWER, and NLS_UPPER to handle special instances of case conversion. And, you can use the function NLSSORT to specify WHERE-clause comparisons based on linguistic rather than binary ordering. You can even pass globalization support parameters to the TO_CHAR, TO_DATE, and TO_NUMBER functions. For more information about Globalization Support, see Oracle Database Advanced Application Developer's Guide.

NCHAR Variables

Three internal database datatypes can store National Character Set data. They are NCHAR, NCLOB, and NVARCHAR2 (also known as NCHAR VARYING). You use these datatypes only in relational columns.

CHARACTER SET [IS] NCHAR_CS

To specify which host variables hold National Character Set data, insert the clause "CHARACTER SET [IS] NCHAR_CS" in character variable declarations. Then you are able to store National Character Set data in those variables. You can omit the token IS. NCHAR_CS is the name of the National Character Set.

For example:

char character set is nchar_cs *str = "<Japanese_string>";

In this example, <Japanese_string> consists of Unicode characters that are in the National Character Set AL16UTF16, as defined by the variable NLS_NCHAR.

You can accomplish the same thing by entering NLS_CHAR=str on the command line, and coding in your application:

char *str = "<Japanese_string>"

Pro*C/C++ treats variables declared this way as of the character set specified by the environment variable NLS_NCHAR. The variable size of an NCHAR variable is specified as a byte count, the same way that ordinary C variables are.

To select data into str, use the following simple query:

EXEC SQL
   SELECT ENAME INTO :str FROM EMP WHERE DEPT = n'<Japanese_string1>';

Or, you can use str in the following SELECT:

EXEC SQL 
   SELECT DEPT INTO :dept FROM DEPT_TAB WHERE ENAME = :str;

Environment Variable NLS_NCHAR

Pro*C/C++ supports National Character Sets with database support when NLS_LOCAL=NO. When NLS_LOCAL=NO, and the new environmental variable NLS_NCHAR is set to a valid National Character Set, the database server supports NCHAR. See NLS_NCHAR in the Oracle Database Reference.

NLS_NCHAR specifies the character set used for National Character Set data (NCHAR, NVARCHAR2, NCLOB). If it is not specified, the character set defined or indirectly defined by NLS_LANG will be used.

NLS_NCHAR must have a valid National Character Set specification (not a language name, that is set by NLS_LANG) at both precompile-time and runtime. SQLLIB performs a runtime check when the first SQL statement is executed. If the precompile-time and runtime character sets are different, SQLLIB will return an error code.

CONVBUFSZ Clause in VAR

You can override the default assignments by equivalencing host variables to Oracle external datatypes, using the EXEC SQL VAR statement, This is called host variable equivalencing.

The EXEC SQL VAR statement can have an optional clause: CONVBUFSZ (<size>). You specify the size, <size>, in bytes, of the buffer in the Oracle runtime library used to perform conversion of the specified host variable between character sets.

The new syntax is:

EXEC SQL VAR host_variable IS datatype [CONVBUFSZ [IS] (size)] ;

or

EXEC SQL VAR host_variable [CONVBUFSZ [IS] (size)];

where datatype is:

type_name [ ( { length | precision, scale } ) ]

See Also:

"VAR (Oracle Embedded SQL Directive)" for a complete discussion of all keywords, examples, and variables.

Character Strings in Embedded SQL

A multibyte character string in an embedded SQL statement consists of a character literal that identifies the string as multibyte, immediately followed by the string. The string is enclosed in the usual single quotes.

For example, an embedded SQL statement such as

EXEC SQL SELECT empno INTO :emp_num FROM emp
    WHERE ename = N'<Japanese_string>';

contains a multibyte character string (<Japanese_string> could actually be Kanji), since the N character literal preceding the string identifies it as a multibyte string. Since Oracle is case-insensitive, you can use "n" or "N" in the example.

Strings Restrictions

You cannot use datatype equivalencing (the TYPE or VAR commands) with multibyte character strings.

Dynamic SQL method 4 is not available for multibyte character string host variables in Pro*C/C++.

Indicator Variables

You can use indicator variables with host character variables that are multibyte characters (as specified using the NLS_CHAR option).

PKá+*PK+AOEBPS/content.opf Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2) en-US E10825-01 Oracle Corporation Oracle Corporation Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2) 2009-08-01T13:29:44Z Describes how to develop C++ programs that use the SQL and PL/SQL database languages to access and manipulate Oracle data. 8 PKk<5B8PK+AOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((,RmuM. I-nBvskƭON%I4/# W+!h9ݨdsw'(Y_aQEQEQEexEK2T\[WlTs_.>NQ\?ïx-BV'u}3P X\csq@U=7Vuv K4,$g{EPENVt[{B{m*4͐0=hQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?G<+O<5`_w?±k/ZX|+EOFOK(VY%PA%pz 6-]y  zRdyLɅ#rœ8{5[oqk s!#[>v2m;9^gƞ?,ęOw%\HmpXчxIuթr߻\ ! cY's:]j,lW;1TwuvR>0| ,QSdy̫eA=HqdK:~ϩKTv-'#ǟ7<O<yg;1ݶ|gZ~׋hX˕TG(ftRS r =@%A pNI@>l?uOXڿh]i}?g{s;6v񺾋RtoOi+h- `CTi 9kYojzqRE@#6}EX<7c9&iq.,mbI^6$@g?D[3F`]bG?xp>^77 xSYc3Z(’:J^@7VEJ$E `*J*\ILIڊ cx&&;ck5#`汏<`0Hk>E\rp:0zW5owwy+Iz nc8~>.ufu&nec.Y<|@FziZUevv(I9$I$W(#BpF'tTy̪IPORf v}jJ+֣X[ϵx۳:z; IaY?TTC/$W Uc[7P봒H*3*q)zNmf-Sz4{FR*H ?~y z1ѶC/$W WEϊ/&h"^F_i~.cՃ)jXu8(((((((((((((((((((((;IaXTyZ襫$:; rv&T^<8 cօ[XYЛڊQXOLO,!#v*zu@ j.]v z6ҿr a@ A>EQEɪ|Vk~(D2рXnbH62pA_B;|Q$o V$rC=zWI<[oqsA*92<G.u . #" d"0QӰZwƽ Hݧxtnr;x#mۖ;d _m,2.=\dd䎝GQx;ÞE]Gpo]۾w]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEx$O*Z<RןO4 |}]#Ky8b*Y)#2A@?^H[ *gO-v "YHë#|2~Q^f_x9'8d2QY0'$ Ρ卆OxrY sd'2+17ʹ=Ŗ6gr?.DNX(ր<z$ėw]B%wڹK(zo)4*CitI Ƿ`S#Ez|zT4VYeH'hPAro?}Ǜ"7gj{ Ᏽf@MQ@.,r+$](hz;mFJԥ[;U r 7nxWqA=MxR616[{FFFz"W+wZEpe,dwH ʎOWynCaeByʆ,>o -;'pwh2>g3OO ռW4x䍃+sg s6v,sZϕf9Ҹ?ٚyĶ,{gH% @ GGM̭oF:I$xķ10U5c[n3epyc!Ox7AѼeI\3 ʈ01]-TT4k 8[XSq;Q@ 2y8u>/iV7<3g=f A,W3t;9^o.oF*!h<АWCj>|P_]&XmvBr29nqm<ϻΎdg6:cZMWUOS7+Q'$k׌|_xcDZuE`[bAH7B-o[ [6\H x_{C,4q-m"X6͉,NI8h=kZ5&e|E{fs df#5ϋǂmUoX浒xR7C~PQMu'" $r0 1kqG4fKo>L?I۝)wHݻw@8ɠ w$Ŀ M]gg߇='~i-vWv23C²訫53oڞy?nۻf+sx4msV2qvψmb|~d"bU;BțH^٪:qw1Yۦe~?$9$2Mq~9OQYHbRgqR A,`0e#7R^|G Yt}كiy3i#1A6x͢ "P*1`ަ}ouo0bDT:d $`+J}3L6EtQ'$$kƞмygs-}x%(n*[Nvt  !y$($s!W=fYZjFࡰGjKo|Bo4U@ahԪ :)ӌuDžtM-M/IGGTDA-c KsɠK$](_Ht/x҉+?1ϱm"vz<C!c}e?y{Hrqڀ10_\i 5dhvD>=5Jbyg[ZRW;˅JpzڱCuo-QRHPF Aboo7xKzkq%[$ nWBT y9 >?NC||4q#2 rH+s ?JǺ7׺P<)bFybB3>;:>_3Wtw'ݎ?W{n?f'f@߿+ 2gifyy6sz|2nZkeo{5 ¹vlg;Q7,ogo7~1߭z|ON_o_@W$Ok3E67˕31h+>y+/kۏٿY}<=qx_N lǥ:`pOfU~xעxp.L~e2H';YI]Cuo-QRHPF AbMRӺ gxVޮW$36I(*8'+yc Pe5/ k: $2Ug^v`*ƁGO _%L#o.Am!c2]w0Q‚O$&xGVn>c>.]SG EqKIoQ%v޷xsGVծ>c2]w0Q‚O$&xGVn>c>.]SG EqKIoQ%y [{Foh_76Ê/9//വA.H,x$Ƽg/JҮ|xoM{Ӯd.: 2VW$ct@ K -V5'B>@<un:rONk=#:_u-;BAR?-jWm M=F@N7W#8hxğ/T~d~ M#˜8sݟm$Gumzᤈjљ U۹8Alvz7jYn%Xo\尠+ x-h%@WR2#5ߌ;?Pf!gs:Brn5 :U|R$ ( NyxrLէnٲ qSukb|-߇ޭdo`z b ?J>6!J# ?J Z^gzޫI% n‹eʹeU (珃6g_XYy )1<:8_}@ι{N{^ +U3q:`(8WCx+GV_ξ^~7ێ~vL{h|æ71K2弢w<I>czvkazbDa7!C9I9aylZՒ7TFr\)ܥHb W@PB4i*I[~]$澧yV?-{x$O*Z?h^e֟o4hԱ| zW?/~ g-m%bQ\`|;'gt; w˺>9 J> 0k<mXRʭC2@Qp::΍c[w Fp}MG_ವ\>7 ڣ6ŒI5n4VX(PN爵 /),/|M g^<4f୽څ=XE3P3k5 﨟jv/ukyv~Αp w v`5Q=;id~!8x^j:o1&N? ypEszο:sj/m['dН7)ݕl#<W~2? un mIT8u9zGԵ-f=X8 y4w߈rX~%n]^Kp&o9S7?w$q^sΝŬ1F6B>E(9 `q@ 9IoOGq`#*s|+cY4iej|n GVl' ,=/Mool n,C0˶[$c@v0m}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@E}5 -eҾѫJ^w"Y*I•!AFw? W=fYm% E2R38e\ĒHY K ;q+ǂ|;`icV;Inv8^w>kybO ;U9c,7NFG^Ay]3:fv. u)̫,XPmPsԚ(񦻬^~^д=Vani7.BH'G+(I}}. s o#Z!¼N< `uQ@_$:Dt|CI\?W?9wGJf0k9Tv><#IkkcqsH{PQT/Ѭe! Ak9TޣlkNZwpxk:U><(w)l2màNƿi_@W~-sZ,+bڗG5F5$6&r2O|sM4k7gO8o3;?L'Sװ$uyg}x#2ק5yV4d =^>UOo1,Ao81/c7;81Sy]bynHe0y*Nr.0IKIl!m#c̀su $.,/n 30mG9

yV?-{yƿ k>.mgH99rV\_+u_\\xkFytgI,"fv1)$$s^i+ Qc_-nhn-p[Tz`3WvOAk/}wpmTI#b%C9;F3 0yK 5>Sq pKrEh|I^54FM7^M\\),pr9ud`OR_?^ۏ9V,>xLm/.T\kN ֹ8u_zG$jf *1Sdg5k_ڟ5_XD2J-U ˹8ZiEK]EƧ*?2I ) (dֳ5[Ywl4;?G$̞jG ː:ƙ?.OdX0Ҁ<< ;R4҉T̑j`rq=_vW?⏅Z|?>ũoyYY͕;ihnw.$?LEww_2_zW.d v#ʼr0|nmbKtI7XFf; Lͧۯ ]XDsWk#A)  ]Xm緳x_9 @sHNncݡp*áVR  f5h:39~*F Pg98n8ՇĈZ=[“i986*$:-alsFgCw1O7l[CҀ3 xķ>&EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEFKqYxoZGWKh۪o !ېv/̆mc^ou {tA#'8esy%NO|WQ@>&o>1,5jM_谤3~hb1rH~ugMJoM,s=0ΐDU]dJN (_6^ChE$I`r1u9qy_ ?7j#9%4A`U ,0C,#'pդFK9b^PbG:7t٬~ Z2Dbqtlx}Pūjz4[[Iu2#@h-[R| }qjwӮ",S4ʈ$${)择,YH! #AW|<w{*̕!\Fb0DF t}@/7AxU_.GG2~%L!Kpzx[Y>Ϭ$(ݎYdP%@Q(((((((((((((((((((((((((+,Y#m^W.nmfǕ92#7S:|WVV‰!=7lrAQ>>OUouܩ$pDcC2X@d![=꺛onD|d8fN0dWGx?װP\x&I$I+ʢ!Vdf87M!"7x^tU(se8==+gO;wܲݜmE~VUw;M{s;y_]覯?jEEY~%]gºo+=3PN$'>tVK-5)cFPpw:oJn,]Mr9㵺߱'PmvC Toƿt0z4ۭµh.S@w7y¾?c85g؞w{y]7m{,>L`Ӳ,+a}FN~]z5n$]]!w?FN{I?x2GIs5R-F@I9'7ƿ v1 ad|`m }} ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (<5(i8͌Wmlnmk3d=B((((((Ɩ^ Լ/ucᛨ,+F.S?1Rq(3Q@ß/|o4v+c8*ۜMuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PKCrrPK+AOEBPS/dcommon/contbig.gif`GIF87a!!!111999BBBJJJRRRccckkksss{{{skk{{ZRRRJJƽ{sZRJRJB91)kcZB9)sskZRJ1޽ƽ{{ssskkkcƵZZRccZRRJJJB{BB9991ssckkZccR))!RRB!!JJ1))99!11ƌ)1R)k֔)s1RZJR{BJs9R1J!11J1J9k{csZk!1J!)cBR9J1B)91B!cRs{!)s!){1B!k!s!{ksksckckZc9B)1!)!)BJ9B1919έƌ!!)JJcZZ{!!!1RR{JJsBBkJJ{!!9BB{1!!J9)!!Z!!c1!!kR!!s9Z!BckJs)19!!c!!ZRZ,H rrxB(Kh" DժuICiи@S z$G3TTʖ&7!f b`D 0!A  k,>SO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPK+AOEBPS/dcommon/darbbook.cssPKPK+A!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PK+AOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PK+AOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PK+AOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PK+AOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PK+AOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK+AOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PK+AOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PK+AOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PK+AOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPK+AOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK+AOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PK+AOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPK+AOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PK+AOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PK+AOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PK+AOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPK+AOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PK+AOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PK+AOEBPS/pc_aanew.htm? New Features

A New Features

This appendix lists the new features offered in the Pro*C/C++ Precompiler. Each new feature is described briefly, and a reference to the more complete description in the chapters is provided. This appendix contains the following topics:

New In This Release

This section describes features which are new in this release.

New External Datatypes

Five new external datatypes are available:

  • INTERVAL DAY TO SECOND

  • INTERVAL YEAR TO MONTH

  • TIMESTAMP

  • TIMESTAMP WITH TIMEZONE

  • TIMESTAMP WITH LOCAL TIMEZONE

See "Additional External Datatypes"

New In Previous Releases

This section describes features which were new in prior releases.

Array of Structs

Pro*C/C++ supports the use of arrays of structs which enable you to perform multirow, multicolumn operations. With this enhancement, Pro*C/C++ can handle simple arrays of structs of scalars as bind variables in embedded SQL statements for easier processing of user data. This makes programming more intuitive, and allows users greater flexibility in organizing their data.

In addition to supporting arrays of structs as bind variables, Pro*C/C++ now also supports arrays of indicator structs when used in conjunction with an array of structs declaration. See "Arrays of Structs".

Precompiled Header Files

The precompiler option HEADER specifies that precompiled header files are to be created and used to reduce the time and computer resources needed for developing large projects. See "Precompiled Header Files".

CALL Statement

The CALL embedded SQL statement invokes a stored procedure. It can be used instead of an embedded PL/SQL block in new applications. See "CALL (Executable Embedded SQL)".

Changing Passwords at Runtime

Pro*C/C++ provides client applications with a convenient way to change a user password at runtime through a simple extension to the EXEC SQL CONNECT statement. See "Using the ALTER AUTHORIZATION Clause to Change Passwords".

Support for National Character Sets

Pro*C/C++ supports National Character Sets (for NCHAR, NVARCHAR2, NCLOB columns) with database support, when NLS_LOCAL=NO. When NLS_LOCAL=NO, and the new environmental variable NLS_NCHAR is set to a valid National Character Set, NCHAR will be supported. See "Environment Variable NLS_NCHAR".

The clause CHARACTER SET [IS] NCHAR_CS can be specified in character variable declarations. This has the same effect as naming the variable in the NLS_CHAR precompiler option. See "CHARACTER SET [IS] NCHAR_CS".

A new clause, CONVBUFSZ, is available in the EXEC SQL VAR statement, for character set conversion. See "The EXEC SQL VAR and TYPE Directives".

CHAR_MAP Precompiler Option

This option specifies the default mapping of C host char variables. Character strings are CHARZ (fixed-length blank-padded and 0-terminated) by default. For more information, see "Precompiler Option CHAR_MAP".

New Names for SQLLIB Functions

SQLLIB functions have new aliases, which co-exist with the old function names for this release of Pro*C/C++. See "New Names for SQLLIB Public Functions".

New Actions in WHENEVER Statement

The DO BREAK and DO CONTINUE actions are now supported by the embedded SQL directive WHENEVER. See "Using the WHENEVER Directive" and "WHENEVER (Embedded SQL Directive)".

Object Type Support

Pro*C/C++ now provides the ability to map C structures to Object types that you defined for the database server.

See Chapter 17, "Objects" for a description of how to access objects in a Pro*C/C++ program using an associative interface and a navigational interface (Executable Embedded SQL Extensions).

A example program that illustrates how to access objects is listed in "Example Code for Navigational Access".

Object Type Translator

A new chapter describes the Object Type Translator (OTT) utility, which maps database object types to C structs for use in OCI and Pro*C/C++ applications. OTT is run before running the precompiler. See Chapter 19, "The Object Type Translator".

You can mix OCI function calls with embedded SQL statements in your application. New OCI interoperability functions, are available, as well as library routines to manipulate OCIString and OCINumber datatypes. For a description of Pro*C/C++ object support, see Chapter 17, "Objects".

LOB Support

An embedded SQL statement interface allows LOBs (large objects) to be used in precompiler applications. How LOBs are used, the internal and external LOBs, and comparisons with other ways to handle LOBs are presented. A presentation of each new SQL statement is made. Example code shows how to use the LOB interface. See the chapter Chapter 16, "LOBs" for complete details.

ANSI Dynamic SQ

The complete ANSI implementation of dynamic SQL Method 4 through embedded SQL statements is presented in Chapter 14, " ANSI Dynamic SQL". An overview with simple examples is presented. This is followed by a complete discussion of the new SQL statements. Example programs from the demo directory are then shown.

Collections

The two kinds of collections (VARRAYs and Nested Tables) are presented and compared to other datatypes. Then the embedded SQL commands that manipulate collections are described. See Chapter 18, "Collections".

Miscellaneous Topics

This section covers a variety of topics of interest to the Pro*C/C++ programmer.

Unicode Support

Support for Unicode(UCS16) character set in bind and define variables is described in "Unicode Variables".

UTF16_CHARSET Option

Specifies the default character set form used by UNICODE(UTF16) variables for performance and backward compatibility.


See Also:

"UTF16_CHARSET"

PREFETCH Option

This precompiler option speeds up database access by "prefetching" values, thus cutting down the number of network round trips. See "The PREFETCH Precompiler Option".

External Procedures

External procedures written in C can be called from PL/SQL blocks. The REGISTER CONNECT embedded SQL statement is used by the procedures. See "External Procedures".

Calling Java from PL/SQL

Stored procedures written in Java can be called from your application. For information on how to call a procedure written in Java, see "Stored PL/SQL and Java Subprograms".

DML Returning Clause

This clause is allowed in INSERT, DELETE, and UPDATE statements. See "The DML Returning Clause".

Universal ROWID

The support for universal ROWID datatype is presented. Index-organized tables use this concept. See "Universal ROWIDs".

SYSDBA/SYSOPER Privileges in CONNECT Statements

To set these privileges using the CONNECT statement, see"Connect to the Database".

CLOSE_ON_COMMIT Precompiler Option

The CLOSE_ON_COMMIT micro precompiler option provides the ability to choose whether or not to close all cursors when a COMMIT is executed and the macro option MODE=ANSI. See "#include <stdio.h>" and "CLOSE_ON_COMMIT".

Character Strings

Many applications have been written under the assumption that character strings are of varying length (such as VARCHAR2). By default, fixed-length, blank-padded, NULL-terminated character strings (CHARZ) are used to conform to the current SQL standards.

If your application assumes that character strings are varying in length (and this is especially important in the string comparison semantics), then you should precompile your application using the options DBMS=V8 and CHAR_MAP=VARCHAR2. See "Character Data" for details.

See the description of the DBMS options in "DBMS" for a complete list of the effects of the DBMS options.

Error Message Codes

Error and warning codes are different between earlier releases of Pro*C/C++ and the current release. See Oracle Database Error Messages for a complete list of codes and messages.

The runtime messages issued by SQLLIB now have the prefix SQL-, rather than the RTL- prefix used in earlier Pro*C/C++ and Pro*C releases. The message codes remain the same as those of earlier releases.

When precompiling with SQLCHECK=SEMANTICS, PLS is the prefix used by the PL/SQL compiler. Such errors are not from Pro*C/C++.

LINES Option

When LINES=YES, error messages issued by the C compiler always refer to your original source files, not the modified (precompiled) source file. This also enables stepping through the original source code using most debuggers. See "LINES".

Migration From Earlier Releases

For existing Pro*C/C++ applications to work in the Oracle environment, the following actions must be taken:

  • Relink existing Pro*C/C++ applications with the Oracle SQLLIB library.

Specific functionality previously available in Pro*C/C++ is no longer supported in Oracle. This includes:

  • The Graphical User Interface (GUI) for Pro*C/C++ on a computer running Windows NT Server or Windows NT Workstation

  • The Intype File Assistant (IFA) for Pro*C/C++ for the Object Type Translator (OTT) on a computer running the Windows NT Server or Windows NT Workstation

For specific information about upgrading to Oracle 11g, see Oracle Database Upgrade Guide.

PKQ%??PK+A OEBPS/toc.htm Table of Contents

Contents

Title and Copyright Information

Preface

What's New in Pro*C/C++?

Part I Introduction and Concepts

1 Introduction

2 Precompiler Concepts

3 Database Concepts

4 Datatypes and Host Variables

5 Advanced Topics

6 Embedded SQL

7 Embedded PL/SQL

8 Host Arrays

9 Handling Runtime Errors

10 Precompiler Options

11 Multithreaded Applications

Part II Applications

12 C++ Applications

13 Oracle Dynamic SQL

14 ANSI Dynamic SQL

15 Oracle Dynamic SQL: Method 4

16 LOBs

17 Objects

18 Collections

19 The Object Type Translator

20 User Exits

Part III Appendixes

A New Features

B Reserved Words, Keywords, and Namespaces

C Performance Tuning

D Syntactic and Semantic Checking

E System-Specific References

F Embedded SQL Statements and Directives

G Sample Programs

H Integrating Pro*C/C++ into Microsoft Visual Studio .NET 2002/2003

Index

PK U41^"^PK+AOEBPS/pc_17obj.htm Objects

17 Objects

This chapter describes the support in Pro*C/C++ for user-defined objects. This chapter contains the following topics:

Introduction to Objects

In addition to the Oracle relational datatypes supported since Oracle8, Pro*C/C++ supports user-defined datatypes, which are:

Object Types

An object type is a user-defined datatype that has attributes, the variables that form the datatype defined by a CREATE TYPE SQL statement, and methods, functions and procedures that are the set of allowed behaviors of the object type. We consider object types with only attributes in this guide.

For example:

--Defining an object type...
CREATE TYPE employee_type AS OBJECT(
    name    VARCHAR2(20),
    id      NUMBER,
    MEMBER FUNCTION get_id(name VARCHAR2) RETURN NUMBER);
/
--
--Creating an object table...
CREATE TABLE employees OF employee_type;
--Instantiating an object, using a constructor...
INSERT INTO employees VALUES (
        employee_type('JONES', 10042));

LONG, LONG RAW, NCLOB, NCHAR and NCHAR Varying are not allowed as datatypes in attributes of objects.

REFs to Object Types

REF (short for "reference") is a reference to an object stored in a database table, instead of the object itself. REF types can occur in relational columns and also as datatypes of an object type. For example, a table employee_tab can have a column that is a REF to an object type employee_t itself:

CREATE TYPE employee_t AS OBJECT(
   empname         CHAR(20),
   empno           INTEGER,
   manager         REF employee_t);
/
CREATE TABLE employee_tab OF employee_t;

Type Inheritance

Oracle supports type inheritance of objects. This enables sharing of attributes and methods between similar object types, as well as extending the characteristics of an object type.

Pro*C/C++ supports type inheritance of object types with the following SQL operators:

  • IS OF type

  • TREAT

The IS OF type operator is used to test an object instance for specific type information.

The following code example returns the references to all p objects where p is of type Employee_t and Student_t.

SELECT REF(p)
   FROM person_tab p
   WHERE VALUE(p) IS OF (Employee_t, Student_t);

The following code example returns all rows where p is of type Student_t only.

SELECT VALUE(p)
   FROM person_tab p
   WHERE VALUE(p) IS OF (ONLY Student_t);

The TREAT operator is used to modify the declared type of an expression.

The following code example returns all rows where p is of type Student_t. For all instances of p that are not of type Student_t, null is returned.

SELECT TREAT(VALUE(p) AS Student_t)
   FROM person_tab p;

The following code example returns the references to all p objects of type Student_t and any objects of subtype PartTimeStudent_t.

SELECT TREAT(REP(p) AS REF Student_t) 
   FROM person_tab p
   WHERE VALUE(p) IS OF (Student_t);

Using Object Types in Pro*C/C++

Declare pointers to C structures generated by the OTT (Object Type Translator) as host and indicator variables in your Pro*C/C++ application. Use of an indicator variable is optional for an object type, but Oracle recommends it.

Represent object types in a Pro*C/C++ program as C structures generated from the database objects using OTT. You must

  • Include in the Pro*C/C++ program the OTT-generated header file with structure definitions and the associated NULL indicator structures, and the C type for a REF to the object type.

  • Enter the typefile generated by OTT as an INTYPE Pro*C/C++ command-line option. This typefile encodes the correspondence between the OTT-generated C structures and the associated object types in the database, as well as schema and type version information.

NULL Indicators

C structures representing the NULL status of object types are generated by the Object Type Translator. You must use these generated structure types in declaring indicator variables for object types.

Other Oracle types do not require special treatment for NULL indicators.


Se Also:

"Datatypes and Host Variables" for more information about NULL indicators.

Because object types have internal structure, NULL indicators for object types also have internal structure. A NULL indicator structure for a non-collection object type provides atomic (single) NULL status for the object type as a whole, as well as the NULL status of every attribute. OTT generates a C structure to represent the NULL indicator structure for the object type. The name of the NULL indicator structure is Object_typename_ind where Object_typename is the name of the C structure for the user-defined type in the database.

The Object Cache

The object cache is an area of memory on the client that is allocated for your program's use in interfacing with database objects. There are two interfaces to working with objects. The associative interface manipulates "transient" copies of the objects and the navigational interface manipulates "persistent" objects.

Persistent Versus Transient Copies of Objects

Objects that you allocated in the cache with EXEC SQL ALLOCATE statements in Pro*C/C++ are transient copies of persistent objects in the Oracle database. As such, you can update these copies in the cache after they are fetched in, but in order to make these changes persistent in the database, you must use explicit SQL commands. This "transient copy" or "value-based" object caching model is an extension of the relational model, in which scalar columns of relational tables can be fetched into host variables, updated in place, and the updates communicated to the server.

Associative Interface

The associative interface manipulates transient copies of objects. Memory is allocated in the object cache with the EXEC SQL ALLOCATE statement.

One object cache is created for each SQLLIB runtime context.

Objects are retrieved by the EXEC SQL SELECT or EXEC SQL FETCH statements. These statements set values for the attributes of the host variable. If a NULL indicator is provided, it is also set.

Objects are inserted, updated, or deleted using EXEC SQL INSERT, EXEC SQL UPDATE, and EXEC SQL DELETE statements. The attributes of the object host variable must be set before the statement is executed.

Transactional statements EXEC SQL COMMIT and EXEC SQL ROLLBACK are used to write the changes permanently on the server or to cancel the changes.

You explicitly free memory in the cache for the objects by use of the EXEC SQL FREE statement. When a connection is terminated, Oracle implicitly frees its allocated memory.

When to Use the Associative Interface

Use in these cases:

  • To access large collections of objects where explicit joins between tables are not expensive.

  • To access objects that are not referenceable; they do not have object identity. For example, an object type in a relational column.

  • When an operation such as UPDATE or INSERT is applied to a set of objects. For example, add a bonus of $1000 to all employees in a department.

ALLOCATE

You allocate space in the object cache with this statement. The syntax is:

EXEC SQL [AT [:]database] ALLOCATE :host_ptr [[INDICATOR]:ind_ptr] ;

Variables entered are:

database (IN)

a zero-terminated string containing the name of the database connection, as established previously through the statement:

EXEC SQL CONNECT :user [AT [:]database];

If the AT clause AT is omitted, or if database is an empty string, the default database connection is assumed.

host_ptr (IN)

a pointer to a host structure generated by OTT for object types, collection object types, or REFs, or a pointer to one of the new C datatypes: OCIDate, OCINumber, OCIRaw, or OCIString.

ind_ptr (IN)

The indicator variable, ind_ptr, is optional, as is the keyword INDICATOR. Only pointers to struct-typed indicators can be used in the ALLOCATE and FREE statements.

host_ptr and ind_ptr can be host arrays.

The duration of allocation is the session. Any instances will be freed when the session (connection) is terminated, even if not explicitly freed by a FREE statement.

For more details, see "ALLOCATE (Executable Embedded SQL Extension)" and "FREE (Executable Embedded SQL Extension)".

FREE

EXEC SQL [AT[:]database] [OBJECT] FREE :host_ptr [[INDICATOR]:ind_ptr];

You de-allocate the space for an object that is placed in the object cache using the FREE statement. Variables used are the same as in the ALLOCATE statement.


Note:

Pointers to host and indicator variables are not set to null.

CACHE FREE ALL

EXEC SQL [AT [:]database] [OBJECT] CACHE FREE ALL;

Use the earlier statement to free all object cache memory for the specified database connection.

Accessing Objects Using the Associative Interface

When accessing objects using SQL, Pro*C/C++ applications manipulate transient copies of the persistent objects. This is a direct extension of the relational access interface, which uses SELECT, UPDATE and DELETE statements.

In Figure 17-1, you allocate memory in the cache for a transient copy of the persistent object with the ALLOCATE statement. The allocated object does not contain data, but it has the form of the struct generated by the OTT.

person *per_p;
...
EXEC SQL ALLOCATE :per_p;

You can execute a SELECT statement to populate the cache. Or, use a FETCH statement or a C assignment to populate the cache with data.

EXEC SQL SELECT ... INTO :per_p FROM person_tab WHERE ...

Make changes to the server objects with INSERT, UPDATE or DELETE statements, as shown in the illustration. You can insert the data is into the table by the INSERT statement:

EXEC SQL INSERT INTO person_tab VALUES(:per_p);

Finally, free memory associated with the copy of the object with the FREE statement:

EXEC SQL FREE :per_p;

Figure 17-1 Accessing Objects Using SQL

Accessing Objects Using SQL
Description of "Figure 17-1 Accessing Objects Using SQL "

Navigational Interface

Use the navigational interface to access the same schema as the associative interface. The navigational interface accesses objects, both persistent and transient) by dereferencing REFs to objects and traversing ("navigating") from one object to another. Some definitions follow.

Pinning an object is the term used to mean dereferencing the object, allowing the program to access it.

Unpinning means indicating to the cache that the object is no longer needed.

Dereferencing can be defined as the server using the REF to create a version of the object in the client. While the cache maintains the association between objects in the cache and the corresponding server objects, it does not provide automatic coherency. You have the responsibility to ensure correctness and consistency of the contents of the objects in the cache.

Releasing an object copy indicates to the cache that the object is not currently being used. To free memory, release objects when they are no longer needed to make them eligible for implicit freeing.

Freeing an object copy removes it from the cache and releases its memory area.

Marking an object tells the cache that the object copy has been updated in the cache and the corresponding server object must be updated when the object copy is flushed.

Un-marking an object removes the indication that the object has been updated.

Flushing an object writes local changes made to marked copies in the cache to the corresponding objects in the server. The object copies in the cache are also unmarked at this time.

Refreshing an object copy in the cache replaces it with the latest value of the corresponding object in the server.

The navigational and associative interfaces can be used together.


See Also:

"Example Code for Navigational Access" for an illustration of using the navigational and associative interfaces together

Use the EXEC SQL OBJECT statements, the navigational interface, to update, delete, and flush cache copies (write changes in the cache to the server).

When to Use the Navigational Interface

Use the navigational interface:

  • To access a single or small set of objects where explicit joins between tables are expensive. When you use dereferencing to navigate between objects, you perform implicit joins which are less expensive than an explicit join across two entire tables.

  • To make many small changes to many different objects. It is more convenient to fetch all objects to the client, make changes, mark them as updated, and flush all the changes back to the server.

Rules Used in the Navigational Statements

Embedded SQL OBJECT statements are described later with these assumptions:

  • If an AT clause is absent, the default (unnamed) connection is assumed.

  • Host variables can be arrays, except where specifically noted.

  • Use the FOR clause to explicitly specify the array dimension. If absent, the minimum dimension of the pertinent host variables is used.

  • After execution of the statement, if the SQLCA is provided as a status variable, the number of elements processed is returned in sqlca.sqlerrd[2].

  • Parameters have IN or OUT (or both) specified to signify input or output.


    See Also:

    Appendix F, " Embedded SQL Statements and Directives" for SQL OBJECT statements and syntax diagrams

OBJECT CREATE

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT CREATE :obj [INDICATOR]:
obj_ind [TABLE tab] [RETURNING REF INTO :ref] ;

where tab is:

{:hv | [schema.]table}

Use this statement to create a referenceable object in the object cache. The type of the object corresponds to the host variable obj. When optional type host variables (:obj_ind,:ref,:ref_ind) are supplied, they must all correspond to the same type.

The referenceable object can be either persistent (TABLE clause is supplied) or transient (TABLE clause is absent). Persistent objects are implicitly pinned and marked as updated. Transient objects are implicitly pinned.

The host variables are:

obj (OUT)

The object instance host variable, obj, must be a pointer to a structure generated by OTT. This variable is used to determine the referenceable object that is created in the object cache. After a successful execution, obj will point to the newly created object.

obj_ind (OUT)

This variable points to an OTT-generated indicator structure. Its type must match that of the object instance host variable. After a successful execution, obj_ind will be a pointer to the parallel indicator structure for the referenceable object.

tab (IN)

Use the table clause to create persistent objects. The table name can be specified as a host variable, hv, or as an undeclared SQL identifier. It can be qualified with a schema name. Do not use trailing spaces in host variables containing the table name.

hv (IN)

A host variable specifying a table. If a host variable is used, it must not be an array. It must not be blank-padded. It is case-sensitive. When an array of persistent objects is created, they are all associated with the same table.

table (IN)

An undeclared SQL identifier which is case-sensitive.

ref (OUT)

The reference host variable must be a pointer to the OTT-generated reference type. The type of ref must match that of the object instance host variable. After execution, ref contains a pointer to the ref for the newly created object.

Attributes are initially set to null. Creating new objects for object views is not currently supported.

Creating new objects for object views is not currently supported.

OBJECT DEREF

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT DEREF :ref INTO :obj [[INDICATOR]:obj_ind
] [FOR UPDATE [NOWAIT]] ;

Given an object reference, ref, the OBJECT DEREF statement pins the corresponding object or array of objects in the object cache. Pointers to these objects are returned in the variables obj and obj_ind.

The host variables are:

ref (IN)

This is the object reference variable, which must be a pointer to the OTT-generated reference type. This variable (or array of variables) is dereferenced, returning a pointer to the corresponding object in the cache.

obj (OUT)

The object instance host variable, obj, must be a pointer to an OTT-generated structure. Its type must match that of the object reference host variable. After successful execution, obj contains a pointer to the pinned object in the object cache.

obj_ind (OUT)

The object instance indicator variable, obj_ind, must be a pointer to an OTT-generated indicator structure. Its type must match that of the object reference indicator variable. After successful execution, obj_ind contains a pointer to the parallel indicator structure for the referenceable object.

FOR UPDATE

If this clause is present, an exclusive lock is obtained for the corresponding object in the server.

NOWAIT

If this optional keyword is present, an error is immediately returned if another user has already locked the object.

OBJECT RELEASE

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT RELEASE :obj ;

This statement unpins the object in the object cache. When an object is not pinned and not updated, it is eligible for implicit freeing.

If an object has been dereferenced n times, it must be released n times to be eligible for implicit freeing from the object cache. Oracle advises releasing all objects that are no longer needed.

OBJECT DELETE

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT DELETE :obj ;

For persistent objects, this statement marks an object or array of objects as deleted in the object cache. The object is deleted in the server when the object is flushed or when the cache is flushed. The memory reserved in the object cache is not freed.

For transient objects, the object is marked as deleted. The memory for the object is not freed.

OBJECT UPDATE

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT UPDATE :obj ;

For persistent objects, this statement marks them as updated in the object cache. The changes are written to the server when the object is flushed or when the cache is flushed.

For transient objects, this statement is a no-op.

OBJECT FLUSH

EXEC SQL [AT [:]database] [FOR [:]count] OBJECT FLUSH :obj ;

This statement flushes persistent objects that have been marked as updated, deleted, or created, to the server.


Note:

An exclusive lock is implicitly obtained when the object is flushed. After the statement successfully completes, the objects are unmarked. If the object version is LATEST (see next section), then the object will be implicitly refreshed.

Navigational Access to Objects

See Figure 17-2 for an illustration of the navigational interface.

Use the ALLOCATE statement to allocate memory in the object cache for a copy of the REF to the person object. The allocated REF does not contain data.

person *per_p;
person_ref *per_ref_p;
...
EXEC SQL ALLOCATE :per_p;

Populate the allocated memory by using a SELECT statement to retrieve the REF of the person object (exact format depends on the application):

EXEC SQL SELECT ... INTO :per_ref_p;

The DEREF statement is then used to pin the object in the cache, so that changes can be made in the object. The DEREF statement takes the pointer per_ref_p and creates an instance of the person object in the client-side cache. The pointer per_p to the person object is returned.

EXEC SQL OBJECT DEREF :per_ref_p INTO :per_p;

Figure 17-2 Navigational Access

Description of Figure 17-2 follows
Description of "Figure 17-2 Navigational Access"

Make changes to the object in the cache by using C assignment statements, or by using data conversions with the OBJECT SET statement.

Then you must mark the object as updated. See Figure 17-3. To mark the object in the cache as updated, and eligible to be flushed to the server:

EXEC SQL OBJECT UPDATE :per_p;

You send changes to the server by the FLUSH statement:

EXEC SQL OBJECT FLUSH :per_p;

You release the object:

EXEC SQL OBJECT RELEASE :per_p;

Figure 17-3 Navigational Access (continued)

 Navigational Access (continued)
Description of "Figure 17-3 Navigational Access (continued)"

The statements in the next section are used to make the conversions between object attributes and C types.

Converting Object Attributes and C Types

This section covers issues relating to attribute and type conversion.

OBJECT SET

EXEC SQL [AT [:]database] 
  OBJECT SET  [ {'*' | {attr[, attr]} } OF] 
    :obj [[INDICATOR]:obj_ind] 
       TO {:hv [[INDICATOR]:hv_ind] 
          [, :hv [INDICATOR]:hv_ind]]} ;

Use this statement with objects created by both the associative and the navigational interfaces. This statement updates the attributes of the object. For persistent objects, the changes will be written to the server when the object is updated and flushed. Flushing the cache writes all changes made to updated objects to the server.

The OF clause is optional. If absent, all the attributes of obj are set. The same result is achieved by writing:

... OBJECT SET * OF ...

The host variable list can include structures that are exploded to provide values for the attributes. However, the number of attributes in obj must match the number of elements in the exploded variable list.

Host variables and attributes are:

attr

The attributes are not host variables, but rather simple identifiers that specify which attributes of the object will be updated. The first attribute in the list is paired with the first expression in the list, and so on. The attribute must be one of either OCIString, OCINumber, OCIDate, or OCIRef.

obj (IN/OUT)

obj specifies the object to be updated. The bind variable obj must not be an array. It must be a pointer to an OTT-generated structure.

obj_ind (IN/OUT)

The parallel indicator structure that will be updated. It must be a pointer to an OTT-generated indicator structure.

hv (IN)

This is the bind variable used as input to the OBJECT SET statement. hv must be an int, float, OCIRef *, a one-dimensional char array, or a structure of these types.

hv_ind (IN)

This is the associated indicator that is used as input to the OBJECT SET statement. hv_ind must be a 2-byte integer scalar or a structure of 2-byte integer scalars.

Using Indicator Variables:

If a host variable indicator is present, then an object indicator must also be present.

If hv_ind is set to -1, the associated field in the obj_ind is set to -1.

The following implicit conversions are permitted:

  • [OCIString | STRING | VARCHAR | CHARZ] to OCIString

  • OCIRef to OCIRef

  • [OCINumber | int | float | double] to OCINumber

  • [OCIDate | STRING | VARCHAR | CHARZ ] to OCIDate


    Note:

    • Nested structures are not allowed.

    • This statement cannot be used to set a referenceable object to be atomically NULL. Set the appropriate field of the NULL indicator instead.

    • Conversions between the OCIDateTime or OCIInterval datatypes and OCIString are not supported.


OBJECT GET

EXEC SQL [AT [:]database] 
   OBJECT GET [ { '*' | {attr[, attr]} } FROM]
     :obj [[INDICATOR]:obj_ind] 
        INTO {:hv [[INDICATOR]:hv_ind]
          [, :hv [[INDICATOR]:hv_ind]]} ;

This statement converts the attributes of an object into native C types.

The FROM clause is optional. If absent, all the attributes of obj are converted. The same result is achieved by writing:

... OBJECT GET * FROM ...

The host variable list may include structures that are exploded to receive the values of the attributes. However, the number of attributes in obj must match the number of elements in the exploded host variable list.

Host variables and attributes:

attr

The attributes are not host variables, but simple identifiers that specify which attributes of the object will be retrieved. The first attribute in the list is paired with the first host variable in the list, and so on. The attribute must represent a base type. It must be OCIString, OCINumber, OCIRef, or OCIDate.

obj (IN)

This specifies the object that serves as the source for the attribute retrieval. The bind variable obj must not be an array.

hv (OUT)

This is the bind variable used to hold output from the OBJECT GET statement. It can be an int, float, double, a one-dimensional char array, or a structure containing those types. The statement returns the converted attribute value in this host variable.

hv_ind (OUT)

This is the associated indicator variable for the attribute value. It is a 2-byte integer scalar or a structure of 2-byte integer scalars.

Using Indicator Variables:

If no object indicator is specified, it is assumed that the attribute is valid. It is a program error to convert object attributes to C types if the object is atomically NULL or if the requested attribute is NULL and no object indicator variable is supplied. It may not be possible to raise an Oracle error in this situation.

If the object variable is atomically NULL or the requested attribute is NULL, and a host variable indicator (hv_ind) is supplied, then it is set to -1.

If the object is atomically NULL or the requested attribute is NULL, and no host variable indicator is supplied, then an error is raised.

The following implicit conversions are permitted:

  • OCIString to [STRING | VARCHAR | CHARZ | OCIString]

  • OCINumber to [int | float | double | OCINumber]

  • OCIRef to OCIRef

  • OCIDate to [STRING | VARCHAR | CHARZ | OCIDate]


    Note:

    • Nested structures are not allowed

    • Conversions between the OCIDateTime or OCIInterval datatypes and OCIString are not supported


Object Options Set/Get

The runtime context has options which are set to default values when the runtime context is created and allocated. You can then set these options with this embedded SQL directive:

CONTEXT OBJECT OPTION SET

EXEC SQL CONTEXT OBJECT OPTION SET {option[, option]} TO {:hv[, :hv]} ;

where the variables are:

:hv(IN) ...

The input bind variables hv ..., are of type STRING, VARCHAR, or CHARZ.

option ...

Simple identifiers that specify which option of the runtime context to update. The first option is paired with the first input bind variable, and so on. Here are the values supported at this time:

Table 17-1 Valid Choices for CONTEXT OBJECT OPTION Values

Option ValueSpecifies

DATEFORMAT

Format for Date attributes and collection elements.

DATELANG

Globalization Support language for all Date and Datetime types.


An example is:

char *new_format = "DD-MM-YYYY";
char *new_lang = "French";
char *new_date = "14-07-1789";
/* One of the attributes of the license type is dateofbirth */
license *aLicense; 
...
/* Declaration and allocation of context ... */
EXEC SQL CONTEXT OBJECT OPTION SET DATEFORMAT, DATELANG TO :new_format,   :new_lang;
/* Navigational object obtained  */
...
EXEC SQL OBJECT SET dateofbirth OF :aLicense TO :new_date;
...

CONTEXT OBJECT OPTION GET

The context affected is understood to be the context in use at the time. To determine the values of these options, use this directive:

EXEC SQL CONTEXT OBJECT OPTION GET {option[, option]} INTO {:hv[, :hv]} ;

Where the values of option are found in Table 17-1, "Valid Choices for CONTEXT OBJECT OPTION Values".

The bind variables, hv ... are used as output, and are of type STRING, VARCHAR, or CHARZ. The context affected is understood to be the context in use at the time.

New Precompiler Options for Objects

To support objects, use these precompiler options:

VERSION

This option determines which version of the object is returned by the EXEC SQL OBJECT DEREF statement. This gives you varying levels of consistency between cache objects and server objects.

Use the EXEC ORACLE OPTION statement to set it inline. Permitted values are:

RECENT (default)

If the object has been selected into the object cache in the current transaction, then return that object. If the object has not been selected, it is retrieved from the server. For transactions that are running in serializable mode, this option has the same behavior as VERSION=LATEST without incurring as many network round trips. This value can be safely used with most Pro*C/C++ applications.

LATEST

If the object does not reside in the object cache, it is retrieved from the database. If it does reside in the object cache, it is refreshed from the server. Use this value with caution because it will incur the greatest number of network round trips. Use it only when it is imperative that the object cache be kept as coherent as possible with the server-side buffer.

ANY

If the object already resides in the object cache, then return that object. If the object does not reside in the object cache, retrieve it from the server. This value will incur the fewest number of network round trips. Use in applications that access read-only objects or when a user will have exclusive access to the objects.

DURATION

Use this precompiler option to set the pin duration used by subsequent EXEC SQL OBJECT CREATE and EXEC SQL OBJECT DEREF statements. Objects in the cache are implicitly unpinned at the end of the duration.

Use with navigational interface only.

You can set this option in the EXEC ORACLE OPTION statement. Permitted values are:

TRANSACTION (default)

Objects are implicitly unpinned when the transaction completes.

SESSION

Objects are implicitly unpinned when the connection is terminated.

OBJECTS

This precompiler option provides the ability to use the object cache.

The OBJECTS default value, for DBMS=NATIVE | V8, is YES. The default size of the object cache is the same as the OCI default cache size, 8 Mbytes.


See Also:

"OBJECTS"

INTYPE

If your program uses any object types, collection object types, or REFs, you must give the INTYPE files in this command-line option.

Specify the INTYPE option using the syntax:

   INTYPE=filename1 INTYPE=filename2 ...

where filename1, and so on., is the name of the typefiles generated by OTT. These files are meant to be a read-only input to Pro*C/C++. The information in it, though in plain-text form, might be encoded, and might not necessarily be interpretable by you, the user.

You can provide more than one INTYPE file as input to a single Pro*C/C++ precompilation unit.

This option cannot be used inline in EXEC ORACLE statements.

OTT generates C structure declarations for object types created in the database, and writes type names and version information to a file called the typefile.

An object type may not necessarily have the same name as the C structure type or C++ class type that represents it. This could arise for the following reasons:

  • The name of the object type specified in the server includes characters not legal in a C or C++ identifier

  • The user asked OTT to use a different name for the structure or class

  • The user asked OTT to change the case of names

Under these circumstances, it is impossible to infer from the structure or class declaration which object type it matches. This information, which is required by Pro*C/C++, is generated by OTT in the type file.

ERRTYPE

   ERRTYPE=filename

Writes errors to the file specified, as well as to the screen. If omitted, errors are directed to the screen only. Only one ERRTYPE is allowed. As is usual with other single-valued command-line options, if you enter multiple values for ERRTYPE on the command line, the last one supersedes the earlier values.

This option cannot be used inline in EXEC ORACLE statements.

SQLCHECK Support for Objects

Object types and their attributes are represented in a C program according to the C binding of Oracle types. If the precompiler command-line option SQLCHECK is set to SEMANTICS or FULL, Pro*C/C++ verifies during precompilation that host variable types conform to the mandated C bindings for the types in the database schema. In addition, runtime checks are always performed to verify that Oracle types are mapped correctly during program execution.

Relational datatypes are checked in the usual manner.

A relational SQL datatype is compatible with a host variable type if the two types are the same, or if a conversion is permitted between the two. Object types, on the other hand, are compatible only if they are the same type. They must

  • Have the same name

  • Be in the same schema (if a schema is explicitly specified)

When you specify the option SQLCHECK=SEMANTICS or FULL, during precompilation Pro*C/C++ logs onto the database using the specified userid and password, and verifies that the object type from which a structure declaration was generated is identical to the object type used in the embedded SQL statement.

Type Checking at Runtime

Pro*C/C++ gathers the type name, version, and possibly schema information for Object, collection Object, and REF host variables, for a type from the input INTYPE file, and stores this information in the code that it generates. This enables access to the type information for Object and REF bind variables at runtime. Appropriate errors are returned for type mismatches.

An Object Example in Pro*C/C++

Let us examine a simple object example. You create a type person and a table person_tab, which has a column that is also an object type, address:

create type person as object (
        lastname        varchar2(20),
        firstname       char(20),
        age             int,
        addr            address
)
/
create table person_tab of person;

Insert data in the table, and proceed.

Associative Access

Consider the case of how to change a lastname value from "Smith" to "Smythe", using Pro*C/C++.

Run the OTT to generate C structures which map to person. In your Pro*C/C++ program you must include the header file generated by OTT.

In your application, declare a pointer, person_p, to the persistent memory in the client-side cache. Then allocate memory and use the returned pointer:

char *new_name = "Smythe";
person *person_p;
...
EXEC SQL ALLOCATE :person_p;

Memory is now allocated for a copy of the persistent object. The allocated object does not yet contain data.

Populate data in the cache either by C assignment statements or by using SELECT or FETCH to retrieve an existing object:

EXEC SQL SELECT VALUE(p) INTO :person_p FROM person_tab p WHERE lastname = 'Smith';

Changes made to the copy in the cache are transmitted to the server database by use of INSERT, UPDATE, and DELETE statements:

EXEC SQL OBJECT SET lastname OF :person_p TO :new_name;
EXEC SQL INSERT INTO person_tab VALUES(:person_p);

Free cache memory in this way:

EXEC SQL FREE :person_p;

Navigational Access

Allocate memory in the object cache for a copy of the REF to the object person. The ALLOCATE statement returns a pointer to the REF:

person *person_p;
person_ref *per_ref_p;
...
EXEC SQL ALLOCATE :per_ref_p;

The allocated REF contains no data. To populate it with data, retrieve the REF of the object:

EXEC SQL SELECT ... INTO :per_ref_p;

Then dereference the REF to put an instance of object in the client-side cache. The dereference command takes the per_ref_p and creates an instance of the corresponding object in the cache:

EXEC SQL OBJECT DEREF :per_ref_p INTO :person_p;

Make changes to data in the cache by using C assignments, or by using OBJECT GET statements:

/* lname is a C variable to hold the result */
EXEC SQL OBJECT GET lastname FROM :person_p INTO :lname;
...
EXEC SQL OBJECT SET lastname OF :person_p TO :new_name;
/* Mark the changed object as changed with OBJECT UPDATE command */;
EXEC SQL OBJECT UPDATE :person_p;
EXEC SQL FREE :per_ref_p;

To make the changes permanent in the database, use FLUSH:

EXEC SQL OBJECT FLUSH :person_p;

Changes have been made to the server; the object can now be released. Objects that are released are not necessarily freed from the object cache memory immediately. They are placed on a least-recently used stack. When the cache is full, the objects are swapped out of memory.

Only the object is released; the REF to the object remains in the cache. To release the REF, use the RELEASE statement. for the REF. To release the object pointed to by person_p:

EXEC SQL OBJECT RELEASE :person_p;

Or, issue a transaction commit and all objects in the cache are released, provided the pin duration has been set appropriately.

Example Code for Type Inheritance

The following code example creates four object types:

  • Person_t

  • Employee_t as a subtype of Person_t

  • Student_t as a subtype of Person_t

  • PartTimeStudent_t as a subtype of Student_t

and one table:

  • person_tab to hold Person_t and its subtype objects

The SQL file, inhdemo1.sql, that creates the object types and table, and then inserts values into the table, is:

connect scott/tiger;

rem ** Always drop your objects in reverse dependency order
drop table person_tab;
drop type PartTimeStudent_t;
drop type Student_t;
drop type Employee_t;
drop type Person_t;

rem ** Create the TYPES, TYPED TABLES and TABLES we need

rem ** Create a Person_t ADT
CREATE TYPE Person_t AS OBJECT
( ssn NUMBER,
  name VARCHAR2(30),
  address VARCHAR2(100)) NOT FINAL;
/

rem ** Create a Person_t subtype Employee_t
CREATE TYPE Employee_t UNDER Person_t
( empid NUMBER, 
  mgr VARCHAR2(30));
/

rem ** Create a Person_t subtype Student_t
CREATE TYPE Student_t UNDER Person_t 
( deptid NUMBER,
   major VARCHAR2(30)) NOT FINAL;
/

rem ** Create a Student_t subtype PartTimeStudent_t
CREATE TYPE PartTimeStudent_t UNDER Student_t
( numhours NUMBER);
/

rem ** Create a typed table for person_t objects
CREATE table person_tab of person_t;

rem ** Insert 2 Employee_t objects into the person_t typed table
insert into person_tab values
  (Employee_t(123456, 'Alison Laurence', '100 Geary Street, San Francisco, CA 94013',
1001, 'CEO'));
insert into person_tab values
  (Employee_t(234567, 'William Bates', '123 Main Street, Anytown, WA 97818',
1002,'CFO'));

rem ** Insert 2 Student_t objects into the person_t typed table
insert into person_tab values
  (Student_t(20001, 'Van Gates', '1825 Aikido Way, Los Angeles, CA, 45300', 20,
'English'));
insert into person_tab values
  (Student_t(20002, 'Bill Wallace', '12 Shugyo Blvd, Los Angeles, CA, 95100', 30,
'Computer Science'));

rem ** Insert 1 PartTimeStudent_t object into the person_t typed table
insert into person_tab values
  (PartTimeStudent_t(20003, 'Jean Claude', '874 Richmond Street, New York, NY 45100',
40, 'Music',20));

commit;

Here is the listing of the intype file for our example, inhdemo1.typ:

case=same
type person_t
type employee_t
type student_t
type parttimestudent_t

Here is the listing of the precompiler file, inhdemo1.pc:

/*****************************************************************************
 *
 * This is a simple Pro*C/C++ program designed to illustrate how to
 * access type inheritance objects.
 *
 * To build the executable:
 *
 *   1. Execute the SQL script, inhdemo1.sql in SQL*Plus to create:
 *   - 4 object types person_t, employee_t as a subtype of person_t,
 *              student_t as a subtype of person_t and parttimestudent_t as
 *              a subtype of student_t.
 *   - 1 typed table person_tab to hold "person_t" and its subtype objects
 *
 *   2. Run OTT: (The following command should appear on one line)
 *        ott intype=inhdemo1.typ hfile=inhdemo1.h outtype=out.typ
 *            code=c userid=scott/tiger
 *
 *   3. Precompile using Pro*C/C++:
 *        proc inhdemo1 intype=out.typ
 *   4. Compile/Link (This step is platform specific)
 *
 ****************************************************************************/

/* Include files */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlda.h>

#include <sqlca.h>                                /* SQL Communications Area */
#include <sql2oci.h>         /* SQLLIB interoperability routines for OCI8 */
#include "inhdemo1.h"        /* OTT-generated header with C typedefs for the */
                                    /* database types "person" and "address" */
/* Macros */
#define ARRAY_SIZE 10
#define NAME_LENGTH 31
#define ADDR_LENGTH 101

/* Global variables */

  char *uid="scott/tiger";
  int i;
  int count;
  VARCHAR  dynstmt[100];

main()
{

  printf("\n*** STARTING OBJECT TYPE INHERITANCE DEMO ***\n");

  EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

  EXEC SQL connect :uid;
  printf("Connected successfully.\n");
  
  exec sql select count(*) into :count from person_tab;
  printf("\nThere are %d entries in table person_tab.\n", count);

  do_fetch_all();                                  /* Fetch person_t objects */
  do_fetch_employee();                           /* Fetch employee_t objects */
  do_fetch_student();                        /* Fetch only student_t objects */
  do_fetch_parttimestudent();              /* Fetch parttimestuden_t objects */
  do_fetch_student_employee();     /* Fetch student_t and employee_t objects */

  printf("\nFetching only student_t objects with dynamic sql:\n");
  strcpy((char *)dynstmt.arr,
   "SELECT value(p) from person_tab p where value(p) is of (only student_t)");
  do_dynamic_fetch();             /* Fetch student_t object with dynamic sql */

  printf("\nFetching student_t and its subtype objects with dynamic sql:\n");
  strcpy((char *)dynstmt.arr,
   "SELECT treat(value(p) as student_t) from person_tab p where value(p) is
of(student_t)");
  do_dynamic_fetch();             /* Fetch student_t object with dynamic sql */

  printf("\n*** END OF OBJECT TYPE INHERITANCE DEMO ***\n");
  exit(EXIT_SUCCESS);

}

void printPerson(person)
  person_t *person;
{
  int writtenSSN=-1;
  text writtenName[NAME_LENGTH];
  text writtenAddr[ADDR_LENGTH];

  EXEC SQL OBJECT GET SSN, NAME, ADDRESS FROM :person INTO
     :writtenSSN, :writtenName, :writtenAddr;
  printf("\nSSN=%10d\nNAME=%s\nAddr=%s\n", writtenSSN, writtenName,
          writtenAddr);
}

void printEmployee(employee)
  employee_t *employee;
{
  int writtenID=-1;
  text writtenMgr[NAME_LENGTH];

  printPerson(employee);
  EXEC SQL OBJECT GET EMPID, MGR FROM :employee INTO :writtenID, :writtenMgr;
  printf("EMPID=%10d\nMGR=%s\n", writtenID, writtenMgr);
}

void printStudent(student)
  student_t *student;
{
  int writtendeptid=-1;
  text writtenMajor[NAME_LENGTH];

  printPerson(student);
  EXEC SQL OBJECT GET DEPTID, MAJOR FROM :student INTO :writtendeptid, :writtenMajor;
  printf("DEPTID=%10d\nMAJOR=%s\n", writtendeptid, writtenMajor);
}

void printPartTimeStudent(parttimes)
  parttimestudent_t *parttimes;
{
  int written_numhours=-1;

  printStudent(parttimes);
  EXEC SQL OBJECT GET NUMHOURS FROM :parttimes INTO :written_numhours;
  printf("NUMHOURS=%10d\n", written_numhours);
}

/* Declare error handling function. */
sql_error(msg)
    char *msg;
{
    char err_msg[128];
    size_t buf_len, msg_len;

    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s\n", msg);
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s\n", msg_len, err_msg);

    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_FAILURE);
}

/*****************************************************************************
 * The following function shows how to select person_t objects
 ****************************************************************************/

do_fetch_all()
{
person_t *personArray[ARRAY_SIZE];
person_t_ind *personArray_ind[ARRAY_SIZE];

  printf("\nFetching person_t objects:\n");

  exec sql declare c1 cursor for
    select value(p) from person_tab p;

  exec sql allocate :personArray:personArray_ind;

  exec sql open c1;

  exec sql whenever not found goto :done;
  while(sqlca.sqlcode==0)
    {
      exec sql fetch c1 into :personArray:personArray_ind;
      if (sqlca.sqlcode == 1403) goto done;
      for (i=0; i < ARRAY_SIZE; i++ )
        printPerson(personArray[i]);
    }

 done:
  for (i=0; i < sqlca.sqlerrd[2] % ARRAY_SIZE; i++)
    printPerson(personArray[i]);

  printf("Total number of person_t objects fetched: %d.\n",
          sqlca.sqlerrd[2]);

  exec sql close c1;
  exec sql free :personArray:personArray_ind;
}

/*****************************************************************************
 * The following function shows how to select person_t subtype employee_t
 * objects
 ****************************************************************************/

do_fetch_employee()
{
employee_t *empArray[ARRAY_SIZE];
employee_t_ind *empArray_ind[ARRAY_SIZE];

  printf("\nFetching employee_t objects:\n");

  exec sql allocate :empArray:empArray_ind;

  exec sql declare c2 cursor for
    select value(p) from person_tab p
      where value(p) is of (employee_t);

  exec sql open c2;

  exec sql whenever not found goto :done_emp;
  while(sqlca.sqlcode==0)
    {
      exec sql fetch c2 into :empArray:empArray_ind;
      for (i=0; i < ARRAY_SIZE; i++ )
        printEmployee(empArray[i]);
    }

 done_emp:
   for (i=0; i < sqlca.sqlerrd[2] % ARRAY_SIZE; i++)
     printEmployee(empArray[i]);

   printf("Total number of employee_t objects fetched: %d.\n",
          sqlca.sqlerrd[2]);

  exec sql close c2;
  exec sql free :empArray:empArray_ind;
}

/*****************************************************************************
 * The following function shows how to select person_t subtype student_t 
 * objects
 ****************************************************************************/

do_fetch_student()
{
student_t *studentArray[ARRAY_SIZE];
student_t_ind *studentArray_ind[ARRAY_SIZE];

  printf("\nFetching student_t objects:\n");

  exec sql declare c3 cursor for
    select value(p) from person_tab p
      where value(p) is of (student_t);

  exec sql allocate :studentArray:studentArray_ind;

  exec sql open c3;

  exec sql whenever not found goto :done_student;
  for (;;)
    {
      exec sql fetch c3 into :studentArray:studentArray_ind;
      for (i=0; i < ARRAY_SIZE; i++ )
        printStudent(studentArray[i]);
    }

 done_student:
  for (i=0; i < sqlca.sqlerrd[2] % ARRAY_SIZE; i++)
    printStudent(studentArray[i]);

  printf("Total number of student_t objects fetched: %d.\n",
          sqlca.sqlerrd[2]);

  exec sql close c3;
  exec sql free :studentArray:studentArray_ind;
}

/*****************************************************************************
 * The following function shows how to select student_t subtype
 * parttimestudent objects
 ****************************************************************************/

do_fetch_parttimestudent()
{
parttimestudent_t *parttimestudentArrayArray[ARRAY_SIZE];
parttimestudent_t_ind *parttimestudentArrayArray_ind[ARRAY_SIZE];

  printf("\nFetching parttimestudent_t objects:\n");

  exec sql declare c4 cursor for
    select value(p) from person_tab p
      where value(p) is of (parttimestudent_t);

  exec sql allocate :parttimestudentArrayArray:parttimestudentArrayArray_ind;

  exec sql open c4;

  exec sql whenever not found goto :done_parttimestudent;
  while(sqlca.sqlcode==0)
    {
      exec sql fetch c4 into :parttimestudentArrayArray:parttimestudentArrayArray_ind;
      for (i=0; i < ARRAY_SIZE; i++ )
        printPartTimeStudent(parttimestudentArrayArray[i]);
    }

 done_parttimestudent:
  for (i=0; i < sqlca.sqlerrd[2] % ARRAY_SIZE; i++)
    printPartTimeStudent(parttimestudentArrayArray[i]);

  printf("Total number of parttimestudent_t objects fetched: %d.\n",
          sqlca.sqlerrd[2]);

  exec sql close c4;
  exec sql free :parttimestudentArrayArray:parttimestudentArrayArray_ind;
}

/*****************************************************************************
 * The following function shows how to select person_t subtypes student_t 
 * and employee_t objects
 ****************************************************************************/

do_fetch_student_employee()
{
person_t *personArray[ARRAY_SIZE];
person_t_ind *personArray_ind[ARRAY_SIZE];

  printf("\nFetching only student_t and employee_t objects:\n");

  exec sql declare c5 cursor for
    select value(p) from person_tab p
      where value(p) is of (only student_t, employee_t);

  exec sql allocate :personArray:personArray_ind;

  exec sql open c5;

  exec sql whenever not found goto :done_student_employee;
  while(sqlca.sqlcode==0)
    {
      exec sql fetch c5 into :personArray:personArray_ind;
      for (i=0; i < ARRAY_SIZE; i++ )
        printPerson(personArray[i]);
    }

 done_student_employee:
  for (i=0; i < sqlca.sqlerrd[2] % ARRAY_SIZE; i++)
        printPerson(personArray[i]);

  printf("Total number of stuent_t and employee_t objects fetched: %d.\n",
sqlca.sqlerrd[2]);

  exec sql close c5;
  exec sql free :personArray:personArray_ind;
}

/*****************************************************************************
 * The following function shows how to select person_t subtype student_t 
 * objects using dynamic sql.
 ****************************************************************************/

do_dynamic_fetch()
{
student_t *student;
student_t_ind  *student_ind;

  exec sql allocate :student:student_ind;

  dynstmt.len = (unsigned short)strlen((char *)dynstmt.arr);
  EXEC SQL PREPARE S FROM :dynstmt;
  EXEC SQL DECLARE C CURSOR FOR S;
  EXEC SQL OPEN C;

  exec sql whenever not found do break;
  for (;;)
  {
     EXEC SQL FETCH C INTO :student:student_ind;
     printStudent(student);
  }

  printf("\nQuery returned %d row%s.\n", sqlca.sqlerrd[2],
         (sqlca.sqlerrd[2] == 1) ? "" : "s");

  EXEC SQL CLOSE C;
  exec sql free :student:student_ind;
}

Example Code for Navigational Access

The example object code creates three object types; budoka is a martial arts expert:

  • Customer

  • Budoka

  • Location

and two tables:

  • person_tab

  • customer_tab

The SQL file, navdemo1.sql, which creates the types and tables, and then inserts values into the tables, is:

connect scott/tiger

drop table customer_tab;
drop type customer;
drop table person_tab;
drop type budoka;
drop type location;

create type location as object (
        num     number,
        street  varchar2(60),
        city    varchar2(30),
        state   char(2),
        zip     char(10)
);
/

create type budoka as object (
        lastname        varchar2(20),
        firstname       varchar(20),
        birthdate       date,
        age             int,
        addr            location
);
/

create table person_tab of budoka;

create type customer as object (
        account_number varchar(20),
        aperson ref budoka
);
/

create table customer_tab of customer;

insert into person_tab values (
        budoka('Seagal', 'Steven', '14-FEB-1963', 34,
                location(1825, 'Aikido Way', 'Los Angeles', 'CA', 45300)));
insert into person_tab values (
        budoka('Norris', 'Chuck', '25-DEC-1952', 45,
                location(291, 'Grant Avenue', 'Hollywood', 'CA', 21003)));
insert into person_tab values (
        budoka('Wallace', 'Bill', '29-FEB-1944', 53,
                location(874, 'Richmond Street', 'New York', 'NY', 45100)));
insert into person_tab values (
        budoka('Van Damme', 'Jean Claude', '12-DEC-1964', 32,
                location(12, 'Shugyo Blvd', 'Los Angeles', 'CA', 95100)));

insert into customer_tab
        select 'AB123', ref(p)
          from person_tab p where p.lastname = 'Seagal';
insert into customer_tab
        select 'DD492', ref(p)
          from person_tab p where p.lastname = 'Norris';
insert into customer_tab 
        select 'SM493', ref(p)
          from person_tab p where p.lastname = 'Wallace';
insert into customer_tab
        select 'AC493', ref(p)
          from person_tab p where p.lastname = 'Van Damme';
        
commit work;

See Also:

"The OTT Command Line" for a description of the format for the intype file

Here is a listing of the intype file for our example, navdemo1.typ:

case=lower
type location
type budoka
type customer

The header file produced by the OTT, navdemo1.h, is included in the precompiler code with the #include preprocessor directive.

Read the comments throughout the precompiler code. The program adds one new budoka object (for Jackie Chan), then prints out all the customers in the customer_tab table.

Here is a listing of the precompiler file, navdemo1.pc:

/*************************************************************************
 *
 * This is a simple Pro*C/C++ program designed to illustrate the
 * Navigational access to objects in the object cache.
 *
 * To build the executable:
 *
 *   1. Execute the SQL script, navdemo1.sql in SQL*Plus
 *   2. Run OTT: (The following command should appear on one line)
 *        ott intype=navdemo1.typ hfile=navdemo1.h outtype=navdemo1_o.typ
 *            code=c user=scott/tiger
 *   3. Precompile using Pro*C/C++:
 *        proc navdemo1 intype=navdemo1_o.typ
 *   4. Compile/Link (This step is platform specific)
 *
 *************************************************************************/

#include "navdemo1.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>

void whoops(errcode, errtext, errtextlen)
  int   errcode;
  char *errtext;
  int   errtextlen;
{
  printf("ERROR! sqlcode=%d: text = %.*s", errcode, errtextlen, errtext);
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL ROLLBACK WORK RELEASE;
  exit(EXIT_FAILURE);
}

void main()
{
  char *uid = "scott/tiger";

       /* The following types are generated by OTT and defined in navdemo1.h */
  customer *cust_p;                            /* Pointer to customer object */
  customer_ind *cust_ind;        /* Pointer to indicator struct for customer */
  customer_ref *cust_ref;            /* Pointer to customer object reference */
  budoka *budo_p;                                /* Pointer to budoka object */
  budoka_ref *budo_ref;                /* Pointer to budoka object reference */
  budoka_ind *budo_ind;            /* Pointer to indicator struct for budoka */

    /* These are data declarations to be used to insert/retrieve object data */
  VARCHAR acct[21];
  struct { char lname[21], fname[21]; int age; } pers;
  struct { int num; char street[61], city[31], state[3], zip[11]; } addr;

  EXEC SQL WHENEVER SQLERROR DO whoops(
    sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc, sqlca.sqlerrm.sqlerrml);

  EXEC SQL CONNECT :uid;

  EXEC SQL ALLOCATE :budo_ref;

  /* Create a new budoka object with an associated indicator
   * variable returning a REF to that budoka as well.
   */
  EXEC SQL OBJECT CREATE :budo_p:budo_ind TABLE PERSON_TAB
                  RETURNING REF INTO :budo_ref;

  /* Create a new customer object with an associated indicator */
  EXEC SQL OBJECT CREATE :cust_p:cust_ind TABLE CUSTOMER_TAB;

  /* Set all budoka indicators to NOT NULL.  We
   * will be setting all attributes of the budoka.
   */
  budo_ind->_atomic = budo_ind->lastname = budo_ind->firstname = 
    budo_ind->age = OCI_IND_NOTNULL;

  /* We will also set all address attributes of the budoka */
  budo_ind->addr._atomic = budo_ind->addr.num = budo_ind->addr.street = 
    budo_ind->addr.city = budo_ind->addr.state = budo_ind->addr.zip = 
      OCI_IND_NOTNULL;

  /* All customer attributes will likewise be set */
  cust_ind->_atomic = cust_ind->account_number = cust_ind->aperson =
    OCI_IND_NOTNULL;

  /* Set the default CHAR semantics to type 5 (STRING) */
  EXEC ORACLE OPTION (char_map=string);

  strcpy((char *)pers.lname, (char *)"Chan");
  strcpy((char *)pers.fname, (char *)"Jackie");
  pers.age = 38;

  /* Convert native C types to OTS types */
  EXEC SQL OBJECT SET lastname, firstname, age OF :budo_p TO :pers;

  addr.num = 1893;
  strcpy((char *)addr.street, (char *)"Rumble Street");
  strcpy((char *)addr.city, (char *)"Bronx");
  strcpy((char *)addr.state, (char *)"NY");
  strcpy((char *)addr.zip, (char *)"92510");
  
  /* Convert native C types to OTS types */
  EXEC SQL OBJECT SET :budo_p->addr TO :addr;

  acct.len = strlen(strcpy((char *)acct.arr, (char *)"FS926"));

  /* Convert native C types to OTS types - Note also the REF type */
  EXEC SQL OBJECT SET account_number, aperson OF :cust_p TO :acct, :budo_ref;

  /* Mark as updated both the new customer and the budoka */
  EXEC SQL OBJECT UPDATE :cust_p;
  EXEC SQL OBJECT UPDATE :budo_p;

  /* Now flush the changes to the server, effectively
   * inserting the data into the respective tables.
   */
  EXEC SQL OBJECT FLUSH :budo_p;
  EXEC SQL OBJECT FLUSH :cust_p;

  /* Associative access to the REFs from CUSTOMER_TAB */
  EXEC SQL DECLARE ref_cur CURSOR FOR 
    SELECT REF(c) FROM customer_tab c;

  EXEC SQL OPEN ref_cur;

  printf("\n");

  /* Allocate a REF to a customer for use in the following */
  EXEC SQL ALLOCATE :cust_ref;

  EXEC SQL WHENEVER NOT FOUND DO break;
  while (1)
  {
    EXEC SQL FETCH ref_cur INTO :cust_ref;
    
    /* Pin the customer REF, returning a pointer to a customer object */
    EXEC SQL OBJECT DEREF :cust_ref INTO :cust_p:cust_ind;

    /* Convert the OTS types to native C types */
    EXEC SQL OBJECT GET account_number FROM :cust_p INTO :acct;
    printf("Customer Account is %.*s\n", acct.len, (char *)acct.arr);
    
    /* Pin the budoka REF, returning a pointer to a budoka object */
    EXEC SQL OBJECT DEREF :cust_p->aperson INTO :budo_p:budo_ind;

    /* Convert the OTS types to native C types */
    EXEC SQL OBJECT GET lastname, firstname, age FROM :budo_p INTO :pers;
    printf("Last Name: %s\nFirst Name: %s\nAge: %d\n",
           pers.lname, pers.fname, pers.age);

    /* Do the same for the address attributes as well */
    EXEC SQL OBJECT GET :budo_p->addr INTO :addr;
    printf("Address:\n");
    printf("  Street: %d %s\n  City: %s\n  State: %s\n  Zip: %s\n\n",
           addr.num, addr.street, addr.city, addr.state, addr.zip);

    /* Unpin the customer object and budoka objects */
    EXEC SQL OBJECT RELEASE :cust_p;
    EXEC SQL OBJECT RELEASE :budo_p;
  }

  EXEC SQL CLOSE ref_cur;
  
  EXEC SQL WHENEVER NOT FOUND DO whoops(
    sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc, sqlca.sqlerrm.sqlerrml);

  /* Associatively select the newly created customer object */
  EXEC SQL SELECT VALUE(c) INTO :cust_p FROM customer_tab c
            WHERE c.account_number = 'FS926';

  /* Mark as deleted the new customer object */
  EXEC SQL OBJECT DELETE :cust_p;

  /* Flush the changes, effectively deleting the customer object */
  EXEC SQL OBJECT FLUSH :cust_p;

  /* Associatively select a REF to the newly created budoka object */
  EXEC SQL SELECT REF(p) INTO :budo_ref FROM person_tab p
            WHERE p.lastname = 'Chan';

  /* Pin the budoka REF, returning a pointer to the budoka object */
  EXEC SQL OBJECT DEREF :budo_ref INTO :budo_p;

  /* Mark the new budoka object as deleted in the object cache */
  EXEC SQL OBJECT DELETE :budo_p;

  /* Flush the changes, effectively deleting the budoka object */
  EXEC SQL OBJECT FLUSH :budo_p;

  /* Finally, free all object cache memory and log off */
  EXEC SQL OBJECT CACHE FREE ALL;

  EXEC SQL COMMIT WORK RELEASE;

  exit(EXIT_SUCCESS);
}

When the program is executed, the result is:

Customer Account is AB123
Last Name: Seagal
First Name: Steven
Birthdate: 02-14-1963
Age: 34
Address:
  Street: 1825 Aikido Way
  City: Los Angeles
  State: CA
  Zip: 45300     

Customer Account is DD492
Last Name: Norris
First Name: Chuck
Birthdate: 12-25-1952
Age: 45
Address:
  Street: 291 Grant Avenue
  City: Hollywood
  State: CA
  Zip: 21003     

Customer Account is SM493
Last Name: Wallace
First Name: Bill
Birthdate: 02-29-1944
Age: 53
Address:
  Street: 874 Richmond Street
  City: New York
  State: NY
  Zip: 45100     

Customer Account is AC493
Last Name: Van Damme
First Name: Jean Claude
Birthdate: 12-12-1965
Age: 32
Address:
  Street: 12 Shugyo Blvd
  City: Los Angeles
  State: CA
  Zip: 95100     

Customer Account is FS926
Last Name: Chan
First Name: Jackie
Birthdate: 10-10-1959
Age: 38
Address:
  Street: 1893 Rumble Street
  City: Bronx
  State: NY
  Zip: 92510

Using C Structures

Before Oracle8, Pro*C/C++ allowed you to specify a C structure as a single host variable in a SQL SELECT statement. In such cases, each member of the structure is taken to correspond to a single database column in a relational table; that is, each member represents a single item in the select list returned by the query.

In Oracle8i and later versions, an object type in the database is a single entity and can be selected as a single item. This introduces an ambiguity with the Oracle7 notation: is the structure for a group of scalar variables, or for an object?

Pro*C/C++ uses the following rule to resolve the ambiguity:

A host variable that is a C structure is considered to represent an object type only if its C declaration was generated using OTT, and therefore its type description appears in a typefile specified in an INTYPE option to Pro*C/C++. All other host structures are assumed to be uses of the Oracle7 syntax, even if a datatype of the same name resides in the database.

Thus, if you use new object types that have the same names as existing structure host variable types, be aware that Pro*C/C++ uses the object type definitions in the INTYPE file. This can lead to compilation errors. To correct this, you might rename the existing host variable types, or use OTT to choose a new name for the object type.

The preceding rule extends transitively to user-defined datatypes that are aliased to OTT-generated datatypes. To illustrate, let emptype be a structure generated by OTT in a header file dbtypes.h and you have the following statements in your Pro*C/C++ program:

#include <dbtypes.h>
typedef emptype myemp;
myemp *employee;

The typename myemp for the variable employee is aliased to the OTT-generated typename emptype for some object type defined in the database. Therefore, Pro*C/C++ considers the variable employee to represent an object type.

The preceding rules do not imply that a C structure having or aliased to an OTT-generated type cannot be used for fetches of non-object type data. The only implication is that Pro*C/C++ will not automatically expand such a structure -- the user is free to employ the "longhand syntax" and use individual fields of the structure for selecting or updating single database columns.

Using REFs

The REF type denotes a reference to an object, instead of the object itself. REF types may occur in relational columns and also in attributes of an object type.

Generating a C Structure for a REF

The C representation for a REF to an object type is generated by OTT during type translation. For example, a reference to a user-defined PERSON type in the database may be represented in C as the type "Person_ref". The exact type name is determined by the OTT options in effect during type translation. The OTT-generated typefile must be specified in the INTYPE option to Pro*C/C++ and the OTT-generated header #included in the Pro*C/C++ program. This scheme ensures that the proper type-checking for the REF can be performed by Pro*C/C++ during precompilation.

A REF type does not require a special indicator structure to be generated by OTT; a scalar signed 2-byte indicator is used instead.

Declaring REFs

A host variable representing a REF in Pro*C/C++ must be declared as a pointer to the appropriate OTT-generated type.

Unlike object types, the indicator variable for a REF is declared as the signed 2-byte scalar type OCIInd. As always, the indicator variable is optional, but it is a good programming practice to use one for each host variable declared.

Using REFs in Embedded SQL

REFs reside in the object cache. However, indicators for REFs are scalars and cannot be allocated in the cache. They generally reside in the user stack.

Prior to using the host structure for a REF in embedded SQL, allocate space for it in the object cache by using the EXEC SQL ALLOCATE command. After use, free using the EXEC SQL FREE or EXEC SQL CACHE FREE ALL commands.


See Also:

"Navigational Interface" for a description of these statements

Memory for scalar indicator variables is not allocated in the object cache, and hence indicators are not permitted to appear in the ALLOCATE and FREE commands for REF types. Scalar indicators declared as OCIInd reside on the program stack. At runtime, the ALLOCATE statement causes space to be allocated in the object cache for the specified host variable. For the navigational interface, use EXEC SQL GET and EXEC SQL SET, not C assignments.

Pro*C/C++ supports REF host variables in associative SQL statements and in embedded PL/SQL blocks.

Using OCIDate, OCIString, OCINumber, and OCIRaw

These OCI types are new C representations for a date, a varying-length zero-terminated string, an Oracle number, and varying-length binary data respectively. In certain cases, these types provide more functionality than earlier C representations of these quantities. For example, the OCIDate type provides client-side routines to perform DATE arithmetic, which in earlier releases required SQL statements at the server.

Declaring OCIDate, OCIString, OCINumber, OCIRaw

The OCI* types appear as object type attributes in OTT-generated structures, and you use them as part of object types in Pro*C/C++ programs. Other than their use in object types, Oracle recommends that the beginner-level C and Pro*C/C++ user avoid declaring individual host variables of these types. An experienced Pro*C/C++ user may wish to declare C host variables of these types to take advantage of the advanced functionality these types provide. The host variables must be declared as pointers to these types, for example, OCIString *s. The associated (optional) indicators are scalar signed 2-byte quantities, declared, for example, OCIInd s_ind.

Use of the OCI Types in Embedded SQL

Space for host variables of these types may be allocated in the object cache using EXEC SQL ALLOCATE. Scalar indicator variables are not permitted to appear in the ALLOCATE and FREE commands for these types. You allocate such indicators statically on the stack, or dynamically on the heap. De-allocation of space can be done using the statement EXEC SQL FREE, EXEC SQL CACHE FREE ALL, or automatically at the end of the session.


See Also:

"Navigational Interface" for a description of these statements

Manipulating the OCI Types

Except for OCIDate, which is a structure type with individual fields for various date components: year, month, day, hour and so on., the other OCI types are encapsulated, and are meant to be opaque to an external user. In contrast to the way existing C types like VARCHAR are currently handled in Pro*C/C++, you include the OCI header file oci.h and employ its functions to perform DATE arithmetic, and to convert these types to and from native C types such as int, char, and so on.

Summarizing the New Database Types in Pro*C/C++

Table 17-2 lists the new database types for Object support:

Table 17-2 Using New Database Types in Pro*C/C++

Operations Database TypeDECLAREALLOCATEFREEMANIPULATE

Object type

Host: Pointer to OTT-generated C struct

Indicator: Pointer to OTT-generated indicator struct

Associative interface:

EXEC SQL ALLOCATE

Navigational interface:

EXEC SQL OBJECT CREATE ...

EXEC SQL OBJECT DEREF

allocates memory for host var and indicator in object cache

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

Dereference the C pointer to get each attribute. Manipulation method depends on type of attribute (see later).

COLLECTION Object type

(NESTED TABLE AND VARYING ARRAY)

Host: Pointer to OTT-generated C struct

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache.

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

Use OCIColl* functions (defined in oci.h) to get/set elements. See also Chapter 18, "Collections".

REF

Host: Pointer to OTT-generated C struct

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache.

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

Use EXEC SQL OBJECT DEREF

Use EXEC SQL OBJECT SET/GET for navigational interface.

LOB

Host:

OCIBlobLocator *, OCIClobLocator *, or OCIBfileLocator *.

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for the host var in user heap using

malloc().

Freed by EXEC SQL FREE, or automatically when all Pro*C/C++ connections are closed. EXEC SQL CACHE FREE ALL frees only LOB attributes of objects.

Or use embedded PL/SQL stored procedures in the dbms_lob package, or

Use OCILob* functions defined in oci.h.

See also "LOBs".

Note:

Host arrays of these types may be declared and used in bulk fetch/insert SQL operations in Pro*C/C++.

-

-

-

-


Table 17-3 shows how to use the new C datatypes in Pro*C/C++:

Table 17-3 Using New C Datatypes in Pro*C/C++

OperationsC TypeDECLAREALLOCATEFREEMANIPULATE

OCIDate

Host: OCIDate *

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

(1) Use OCIDate* functions defined in oci.h.

(2) Use EXEC SQL OBJECT GET/SET, or

(3) Use OCINumber* functions defined in oci.h.

OCINumber

Host: OCINumber *

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

(1) Use EXEC SQL OBJECT GET/SET, or

(2) Use OCINumber* functions defined in oci.h.

OCIRaw

Host: OCIRaw *

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache

Freed by EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

Use OCIRaw* functions defined in oci.h.

OCIString

Host: OCIString *

Indicator: OCIInd

EXEC SQL ALLOCATE

allocates memory for host var in object cache

EXEC SQL FREE, or EXEC SQL CACHE FREE ALL, or automatically at end of session.

(1) Use EXEC SQL OBJECT GET/SET, or

(2) use OCIString* functions defined in oci.h.

Note:

Host arrays of these types may not be used in bulk fetch/insert SQL operations in Pro*C/C++.

-

-

-

-


The new datatypes for Oracle8 were Ref, BLOB, NCLOB, CLOB, and BFILE. These types may be used in objects or in relational columns. In either case, they are mapped to host variables according to the C bindings.


See Also:

"Summarizing the New Database Types in Pro*C/C++" for a description of the C bindings

Restrictions on Using Oracle Datatypes in Dynamic SQL

Pro*C/C++ currently supports these different types of dynamic SQL methods: methods 1, 2, 3, and 4 (ANSI and Oracle).

The dynamic methods 1, 2, and 3 will handle all Pro*C/C++ extensions mentioned earlier, including the new object types, REF, Nested Table, Varying Array, NCHAR, NCHAR Varying and LOB types.

The older Dynamic SQL method 4 is generally restricted to the Oracle types supported by Pro*C/C++ prior to release 8.0. It does allow host variables of the NCHAR, NCHAR Varying and LOB datatypes. Dynamic method 4 is not available for object types, Nested Table, Varying Array, and REF types.

Instead, use ANSI Dynamic SQL Method 4 for all new applications, because it supports all datatypes introduced in Oracle8i.

PKSOҼPK+AOEBPS/pc_16lob.htm LOBs

16 LOBs

This chapter describes the support provided by embedded SQL statements for the LOB (Large Object) datatypes.

The four types of LOBs are introduced and compared to the older LONG and LONG RAW datatypes.

The embedded SQL interface in Pro*C/C++ is shown to provide similar functionality to that of the Oracle Call Interface API and the PL/SQL language.

The LOB statements and their options and host variables are presented.

Lastly, examples of Pro*C/C++ programs using the LOB interface are presented as simple illustrations of usage.

This chapter contains the following topics:

What are LOBs?

Use LOB (large object) columns to store large amounts of data (maximum size is 4 Gigabytes) such as ASCII text, National Character text, files in various graphics formats, and sound wave forms.

Internal LOBs

Internal LOBs (BLOBs, CLOBs, NCLOBs) are stored in database table spaces and have transactional support (Commit, Rollback, and so on. work with them) of the database server.

BLOBs (Binary LOBs) store unstructured binary (also called "raw") data, such as video clips.

CLOBs (Character LOBs) store large blocks of character data from the database character set.

NCLOBs (National Character LOBs) store large blocks of character data from the National Character Set.

External LOBs

External LOBs are operating system files outside the database tablespaces, that have no transactional support from the database server.

BFILEs (Binary Files) store data in external binary files. A BFILE can be in GIF, JPEG, MPEG, MPEG2, text, or other formats.

Security for BFILEs

The DIRECTORY object is used to access and use BFILEs. The DIRECTORY is a logical alias name (stored in the server) for the actual physical directory in the server file system containing the file. Users are permitted to access the file only if granted access privilege on the DIRECTORY object.

  • The DDL (data definition language) SQL statements CREATE, REPLACE, ALTER, and DROP are used with DIRECTORY database objects.

  • The DML (Data Management Language) SQL statements are used to GRANT and REVOKE the READ system and object privileges on DIRECTORY objects.

A example CREATE DIRECTORY directive is:

EXEC SQL CREATE OR REPLACE DIRECTORY "Mydir" AS '/usr/home/mydir' ;

Other users or roles can read the directory only if you grant them permission with a DML (Data Manipulation Language) statement, such as GRANT. For example, to allow user scott to read BFILES in directory /usr/home/mydir:

EXEC SQL GRANT READ ON DIRECTORY "Mydir" TO scott ;

Up to 10 BFILES can be opened simultaneously in one session. This default value can be changed by setting the SESSION_MAX_OPEN_FILES parameter.

See Oracle Database Advanced Application Developer's Guide for more details on DIRECTORY objects and BFILE security. See Oracle Database SQL Language Reference for more details on the GRANT command.

LOBs versus LONG and LONG RAW

LOBs are different from the older LONG and LONG RAW datatypes in many ways.

  • The maximum size of a LOB is 4 Gigabytes versus 2 Gigabytes for LONG and LONG RAW.

  • You can use random as well as sequential access methods on LOBs; you can only use sequential access methods on LONG and LONG RAW.

  • LOBs (except NCLOBs) can be attributes of an object type that you define.

  • Tables can have multiple LOB columns, but can have only one LONG or LONG RAW column.

Migration of existing LONG and LONG Raw attributes to LOBs is recommended by Oracle. Oracle plans to end support of LONG and LONG RAW in future releases. See Oracle9i Database Migration for more information on migration.

LOB Locators

A LOB locator points to the actual LOB contents. The locator is returned when you retrieve the LOB, not the LOB's contents. LOB locators cannot be saved in one transaction or session and used again in a later transaction or session.

Temporary LOBs

You can create temporary LOBs, that are like local variables, to assist your use of database LOBs. Temporary LOBs are not associated with any table, are only accessible by their creator, have locators (which is how they are accessed), and are deleted when a session ends.

There is no support for temporary BFILES. Temporary LOBs are only permitted to be input variables (IN values) in the WHERE clauses of INSERT, UPDATE, or DELETE statements. They are also permitted as values inserted by an INSERT statement, or a value in the SET clause of an UPDATE statement. Temporary LOBs have no transactional support from the database server, which means that you cannot do COMMITS or ROLLBACKs on them.

Temporary LOB locators can span transactions. They also are deleted when the server abnormally terminates, and when an error is returned from a database SQL operation.

LOB Buffering Subsystem

The LBS (LOB Buffering Subsystem) is an area of user memory provided for use as a buffer for one or more LOBs in the client's address space.

Buffering has these advantages, especially for applications on a client that does many small reads and writes to specific regions of the LOB:

  • The LBS reduces round trips to the server because you fill the buffer with multiple reads/writes to the LOBs, then write to the server when a FLUSH directive is executed.

  • Buffering also reduces the total number of LOB updates on the server. This creates better LOB performance and saves disk space.

Oracle provides a simple buffer subsystem; not a cache. Oracle does not guarantee that the contents of a buffer are always synchronized with the server LOB value. Use the FLUSH statement to actually write updates in the server LOB.

Buffered read/write of a LOB are performed through its locator. A locator enabled for buffering provides a consistent read version of the LOB until you perform a write through that locator.

After being used for a buffered WRITE, a locator becomes an updated locator and provides access to the latest LOB version as seen through the buffering subsystem. All further buffered WRITEs to the LOB can only be done through this updated locator. Transactions involving buffered LOB operations cannot migrate across user sessions.

The LBS is managed by the user, who is responsible for updating server LOB values by using FLUSH statements to update them. It is single-user and single threaded. Use ROLLBACK and SAVEPOINT actions to guarantee correctness in the server LOBs. Transactional support for buffered LOB operations is not guaranteed by Oracle. To ensure transactional semantics for buffered LOB updates, you must maintain logical savepoints to perform a rollback in the event of an error.

For more information on the LBS, see Oracle Database Advanced Application Developer's Guide.

How to Use LOBs in Your Program

This section describes some of the important programming issues related to the use of LOBs in your Pro*C/C++ application.

Three Ways to Access LOBs

The three methods available to access LOBs in Pro*C/C++ are:

  • The DBMS_LOB package inside PL/SQL blocks.

  • OCI (Oracle Call Interface) function calls.

  • Embedded SQL statements.

The SQL statements are designed to give users a functional equivalent to the PL/SQL interface while avoiding the complexity of the OCI interface.

The following table compares LOB access by OCI function calls in Pro*C/C++, PL/SQL, and embedded SQL statements in Pro*C/C++. Empty boxes indicate missing functionality.

Table 16-1 LOB Access Methods

OCI Foot 1 PL/SQLFoot 2 Pro*C/C++ Embedded SQL

-

COMPARE()

-

-

INSTR()

-

-

SUBSTR()

-

OCILobAppend

APPEND()

APPEND

OCILobAssign

:=

ASSIGN

OCILobCharSetForm

-

-

OCICharSetId

-

-

OCILobClose

CLOSE()

CLOSE

OCILobCopy

COPY()

COPY

OCILobCreateTemporary

CREATETEMPORARY()

CREATE TEMPORARY

OCILobDisableBuffering

-

DISABLE BUFFERING

OCILobEnableBuffering

-

ENABLE BUFFERING

OCILobErase

ERASE()

ERASE

OCILobGetChunkSize

GETCHUNKSIZE()

DESCRIBE

OCILobIsOpen

ISOPEN()

DESCRIBE

OCILobFileClose

FILECLOSE()

CLOSE

OCILobFileCloseAll

FILECLOSEALL()

FILE CLOSE ALL

OCILobFileExists

FILEEXISTS()

DESCRIBE

OCILobFileGetName

FILEGETNAME()

DESCRIBE

OCILobFileIsOpen

FILEISOPEN()

DESCRIBE

OCILobFileOpen

FILEOPEN()

OPEN

OCILobFileSetName

BFILENAME()

FILE SETFoot 3 

OCILobFlushBuffer

-

FLUSH BUFFER

OCILobFreeTemporary

FREETEMPORARY()

FREE TEMPORARY

OCILobGetLength

GETLENGTH()

DESCRIBE

OCILobIsEqual

=


-

OCILobIsTemporary

ISTEMPORARY()

DESCRIBE

OCILobLoadFromFile

LOADFROMFILE()

LOAD FROM FILE

OCILobLocatorIsInit

-

-

OCILobOpen

OPEN()

OPEN

OCILobRead

READ()

READ

OCILobTrim

TRIM()

TRIM

OCILobWrite

WRITE()

WRITE

OCILobWriteAppend

WRITEAPPEND()

WRITE


Footnote 1 For C/C++ users only. Prototypes for these functions are in ociap.h.

Footnote 2 From dbmslob.sql. All routines are prefixed with 'DBMS_LOB.' except BFILENAME.

Footnote 3 The BFILENAME() built in SQL function may also be used.


Note:

You must explicitly lock the row before using any of the new statements that modify or change a LOB in any way. Operations that can modify a LOB value are APPEND, COPY, ERASE, LOAD FROM FILE, TRIM, and WRITE.

LOB Locators in Your Application

To use a LOB locator in your Pro*C/C++ application, include the oci.h header file and declare a pointer to the type OCIBlobLocator for BLOBs, OCIClobLocator for CLOBs and NCLOBs, or OCIBFileLocator for BFILEs.

For an NCLOB, you must either

  • Use the clause 'CHARACTER SET IS NCHAR_CS' in the C/C++ declaration,

  • Or, you must have already used an NLS_CHAR precompiler option on the command line or in a configuration file to set the NLS_NCHAR environment variable.


    See Also:

    "NLS_CHAR"

Here is how it is done:

/* In your precompiler program */
#include <oci.h>
...
OCIClobLocator CHARACTER SET IS NCHAR_CS *a_nclob ;

Or, if you have already set the precompiler option NLS_CHAR this way when invoking Pro*C/C++:

NLS_CHAR=(a_nclob)

you can omit the CHARACTER SET clause in your code:

#include <oci.h>
...
OCIClobLocator *a_nclob ;

The other declarations are simple:

/* In your precompiler program */
#include <oci.h>
...
OCIBlobLocator  *a_blob ;
OCIClobLocator  *a_clob ;
OCIBFileLocator *a_bfile ;

Initializing a LOB

There are different techniques which are used to intialize the different types of LOBs. Each is described in this section.

Internal LOBs

To initialize a BLOB to empty, use the EMPTY_BLOB() function or, use the ALLOCATE SQL statement. For CLOBs and NCLOBs, use the EMPTY_CLOB() function. See Oracle Database SQL Language Reference for more about EMPTY_BLOB() and EMPTY_CLOB().

These functions are permitted only in the VALUES clause of an INSERT statement or as the source of the SET clause in an UPDATE statement.

For example:

EXEC SQL INSERT INTO lob_table (a_blob, a_clob)
   VALUES (EMPTY_BLOB(), EMPTY_CLOB()) ;

The ALLOCATE statement allocates a LOB locator and initializes it to empty. So, the following code is equivalent to the previous example:

#include <oci.h>
...
OCIBlobLocator *blob ;
OCIClobLocator *clob ;
EXEC SQL ALLOCATE :blob ;
EXEC SQL ALLOCATE :clob ;
EXEC SQL INSERT INTO lob_table (a_blob, a_clob)
   VALUES (:blob, :clob) ;

External LOBs

Use the LOB FILE SET statement to initialize the DIRECTORY alias of the BFILE and FILENAME this way:

#include <oci.h>
...
char *alias = "lob_dir" ;
char *filename = "image.gif" ;
OCIBFileLocator *bfile ;
EXEC SQL ALLOCATE :bfile ;
EXEC SQL LOB FILE SET :bfile
   DIRECTORY = :alias, FILENAME = :filename ;
EXEC SQL INSERT INTO file_table (a_bfile) VALUES (:bfile) ;

Refer to Oracle Database Advanced Application Developer's Guide for a complete description of DIRECTORY object naming conventions and DIRECTORY object privileges.

Alternatively, you can use the BFILENAME('directory', 'filename') function in an INSERT or UPDATE statement to initialize a BFILE column or attribute for a particular row, and give the name of the actual physical directory and filename:

EXEC SQL INSERT INTO file_table (a_bfile)
   VALUES (BFILENAME('lob_dir', 'image.gif'))
      RETURNING a_bfile INTO :bfile ;

Note:

BFILENAME() does not check permissions on the directory or filename, or whether the physical directory actually exists. Subsequent file accesses that use the BFILE locator will do those checks and return an error if the file is inaccessible.

Temporary LOBs

A temporary LOB is initialized to empty when it is first created using the embedded SQL LOB CREATE TEMPORARY statement. The EMPTY_BLOB() and EMPTY_CLOB() functions cannot be used with temporary LOBs.

Freeing LOBs

The FREE statement is used to free the memory reserved by an ALLOCATE statement:

EXEC SQL FREE :a_blob;

Rules for LOB Statements

Here are the rules for using LOB statements:

For All LOB Statements

These general restrictions and limitations apply when manipulating LOBs with the SQL LOB statements:

  • The FOR clause is not allowed in EXEC SQL LOB statements since only one LOB locator can be used in those statements.

  • Distributed LOBs are not supported. Although you may use the AT database clause in any of the new embedded SQL LOB statements, you cannot mix LOB locators that were created or ALLOCATEd using different database connections in the same SQL LOB statement.

  • For the LOB READ and WRITE operations, OCI provides a callback mechanism whereby the client can specify a callback function that will be executed each time a piece of the LOB value is either read or written. The embedded SQL LOB approach does not support this capability.

  • OCI provides a mechanism that allows users to create and specify their own durations that can be used when creating temporary LOBs. There is also a mechanism for specifying that the buffer cache be used for READ and WRITE operations on temporary LOBs. This interface does not support these capabilities.

For the LOB Buffering Subsystem

For the LBS, these rules must be followed:

  • Errors in read or write accesses are reported at the next access to the server. Therefore, error recovery has to be coded by you, the user.

  • When updating a LOB with buffered writes, do not update the same LOB with a method that bypasses the LOB Buffering Subsystem.

  • An updated LOB locator enabled for buffering can be passed as an IN parameter to a PL/SQL procedure, but not as an IN OUT or OUT parameter. An error is returned, An error also is returned when there is an attempt to return an updated locator.

  • An ASSIGN of an updated locator enabled for buffering to another locator is not allowed.

  • You can append to the LOB value with buffered writes, but the starting offset must be one character after the end of the LOB. The LBS does not allow APPEND statements resulting in zero-byte fillers or spaces in LOBs in the database server.

  • The character sets of the host locator bind variable and the database server CLOB must be the same.

  • Only ASSIGN, READ and WRITE statements work with a locator enabled for buffering.

  • The following statements result in errors when used with a locator enabled for buffering: APPEND, COPY, ERASE, DESCRIBE (LENGTH only), and TRIM. Errors are also returned when you use these statements with a locator that is not enabled for buffering, if the LOB pointed to by the locator is being accessed in buffered mode by another locator.


    Note:

    The FLUSH statement must be used on a LOB enabled by the LOB Buffering Subsystem before.

  • Committing the transaction.

  • Migrating from the current transaction to another.

  • Disabling buffer operations on a LOB.

  • Returning from an external procedure execution back to the PL/SQL routine.


    Note:

    If an external callout is called from a PL/SQL block with a locator parameter, then all buffering, including the ENABLE statement should be done inside the external procedure.

Follow this recipe:

  • Call the external callout.

  • ENABLE the locator for buffering.

  • READ or WRITE using the locator.

  • FLUSH the LOB (LOBs are never implicitly flushed).

  • Disable the locator for buffering.

  • Return to the function/procedure/method in PL/SQL.

You have to explicitly FLUSH a LOB.

For Host Variables

Use the following rules and notes for the LOB statements:

  • src and dst can refer to either internal or external LOB locators, but file refers only to external locators.

  • Numeric host values (amt, src_offset, dst_offset, and so on) are declared as a 4-byte unsigned integer variable. The values are restricted between 0 and 4 Gigabytes.

  • The concept of NULL is part of a LOB locator. There is no need for indicator variables in the LOB statements. NULL cannot be used with numeric value variables such as amt, src_offset, and so on and result in an error.

  • The offset values src_offset and dst_offset have default values 1.

LOB Statements

The statements are presented alphabetically. In all the statements where it appears, database refers to a database connection

APPEND

Purpose

This statement appends a LOB value at the end of another LOB.

Syntax

EXEC SQL [AT [:]database] LOB APPEND :src TO :dst ;

Host Variables

src (IN)

An internal LOB locator uniquely referencing the source LOB.

dst (IN OUT)

An internal LOB locator uniquely referencing the destination LOB.

Usage Notes

The data is copied from the source LOB to the end of the destination LOB, extending the destination LOB up to a maximum of 4 Gigabytes. If the LOB is extended beyond 4 Gigabytes, an error will occur.

The source and destination LOBs must already exist and the destination LOB must be initialized.

Both the source and destination LOBs must be of the same internal LOB type. It is an error to have enabled LOB buffering for either type of locator.

ASSIGN

Purpose

Assigns a LOB or BFILE locator to another.

Syntax

EXEC SQL [AT [:]database] LOB ASSIGN :src to :dst ;

Host Variables

src (IN)

LOB or BFILE locator source copied from.

dst (IN OUT)

LOB or BFILE locator copied to.

Usage Notes

After the assignment, both locators refer to the same LOB value. The destination LOB locator must be a valid initialized (ALLOCATEd) locator.

For internal LOBs, the source locator's LOB value is copied to the destination locator's LOB value only when the destination locator is stored in the table. For Pro*C/C++, issuing a FLUSH of an object containing the destination locator will copy the LOB value.

An error is returned when a BFILE locator is assigned to an internal LOB locator and vice-versa. It is also an error if the src and dst LOBs are not of the same type.

If the source locator is for an internal LOB that was enabled for buffering, and the source locator has been used to modify the LOB value through the LOB Buffering Subsystem, and the buffers have not been FLUSHed since the WRITE, then the source locator cannot be assigned to the destination locator. This is because only one locator for each LOB can modify the LOB value through the LOB Buffering Subsystem.

CLOSE

Purpose

Close an open LOB or BFILE.

Syntax

EXEC SQL [AT [:]database] LOB CLOSE :src ;

Host Variables

src (IN OUT)

The locator of the LOB or BFILE to be closed.

Usage Notes

It is an error to close the same LOB twice either with different locators or with the same locator. For external LOBs, no error is produced if the BFILE exists but has not been opened.

It is an error to COMMIT a transaction before closing all previously opened LOBs. At transaction ROLLBACK time, all LOBs that are still open will be discarded without first being closed.

COPY

Purpose

Copy all or part of a LOB value into a second LOB.

Syntax

EXEC SQL [AT [:]database] LOB COPY :amt FROM :src [AT :src_offset]
   TO :dst [AT :dst_offset] ;

Host Variables

amt (IN)

The maximum number of bytes for BLOBs, or characters for CLOBs and NCLOBs, to copy.

src (IN)

The locator of the source LOB.

src_offset (IN)

This is the number of characters for CLOB or NCLOB, and the number of bytes for a BLOB, starting from 1 at the beginning of the LOB.

dst (IN)

The locator of the destination LOB.

dst_offset (IN)

The destination offset. Same rules as for src_offset.

Usage Notes

If the data already exists at the destination's offset and beyond, it is overwritten with the source data. If the destination's offset is beyond the end of the current data, zero-byte fillers (BLOBs) or spaces (CLOBs) are written into the destination LOB from the end of the current data to the beginning of the newly written data from the source.

The destination LOB is extended to accommodate the newly written data if it extends beyond the current length of the destination LOB. It is a runtime error to extend this LOB beyond 4 Gigabytes.

It is also an error to try to copy from a LOB that is not initialized.

Both the source and destination LOBs must be of the same type. LOB buffering must not be enabled for either locator.

The amt variable indicates the maximum amount to copy. If the end of the source LOB is reached before the specified amount is copied, the operation terminates with ORA-22993 error.

To make a temporary LOB permanent, the COPY statement must be used to explicitly COPY the temporary LOB into a permanent one.

CREATE TEMPORARY

Purpose

Creates a temporary LOB.

Syntax

EXEC SQL [AT [:]database] LOB CREATE TEMPORARY :src ;

Host Variables

src (IN OUT)

Before execution, when IN, src is a LOB locator previously ALLOCATEd.

After execution, when OUT, src is a LOB locator that will point to a new empty temporary LOB.

Usage Notes

After successful execution, the locator points to a newly created temporary LOB that resides on the database server independent of a table. The temporary LOB is empty and has zero length.

At the end of a session, all temporary LOBs are freed. READs and WRITEs to temporary LOBs never go through the buffer cache.

DISABLE BUFFERING

Purpose

Disables LOB buffering for the LOB locator.

Syntax

EXEC SQL [AT [:]database] LOB DISABLE BUFFERING :src ;

Host Variable

src (IN OUT)

An internal LOB locator.

Usage Notes

This statement does not support BFILEs. Subsequent reads or writes will not be done through the LBS.


Note:

Use a FLUSH BUFFER command to make changes permanent, since this statement does not implicitly flush the changes made in the LOB Buffering Subsystem.

ENABLE BUFFERING

Purpose

Enables LOB buffering for the LOB locator.

Syntax

EXEC SQL [AT [:]database] LOB ENABLE BUFFERING :src ;

Host Variable

src (IN OUT)

An internal LOB locator.

Usage Notes

This statement does not support BFILEs. Subsequent reads and writes are done through the LBS.

ERASE

Purpose

Erases a given amount of LOB data starting from a given offset.

Syntax

EXEC SQL [AT [:]database] LOB ERASE :amt FROM :src [AT :src_offset] ;

Host Variables

amt (IN OUT)

The input is the number of bytes or characters to erase. The returned output is the actual number erased.

src (IN OUT)

An internal LOB locator.

src_offset (IN)

The offset from the beginning of the LOB, starting from 1.

Usage Notes

This statement does not support BFILEs.

After execution, amt returns the actual number of characters/bytes that were erased. The actual number and requested number will differ if the end of the LOB value is reached before erasing the requested number of characters/bytes. If the LOB is empty, amt will indicate that 0 characters/bytes were erased.

For BLOBs, erasing means zero-byte fillers overwrite the existing LOB value. For CLOBs, erasing means that spaces overwrite the existing LOB value.

FILE CLOSE ALL

Purpose

Closes all BFILES opened in the current session.

Syntax

EXEC SQL [AT [:]database] LOB FILE CLOSE ALL ;

Usage Notes

If there are any open files in the session whose closure has not been handled properly, you can use the FILE CLOSE ALL statement to close all files opened in the session, and resume file operations from the beginning.

FILE SET

Purpose

Sets DIRECTORY alias and FILENAME in a BFILE locator.

Syntax

EXEC SQL [AT [:]database] LOB FILE SET :file
    DIRECTORY = :alias, FILENAME = :filename ;

Host Variables

file (IN OUT)

BFILE locator where the DIRECTORY alias and FILENAME is set.

alias (IN)

DIRECTORY alias name to set.

filename (IN)

The FILENAME to set.

Usage Notes

The given BFILE locator must be first ALLOCATEd prior to its use in this statement.

Both the DIRECTORY alias name and FILENAME must be provided.

The maximum length of the DIRECTORY alias is 30 bytes. The maximum length of the FILENAME is 255 bytes.

The only external datatypes supported for use with the DIRECTORY alias name and FILENAME attributes are CHARZ, STRING, VARCHAR, VARCHAR2 and CHARF.

It is an error to use this statement with anything but an external LOB locator.

FLUSH BUFFER

Purpose

Writes this LOB's buffers to the database server.

Syntax

EXEC SQL [AT [:]database] LOB FLUSH BUFFER :src [FREE] ;

Host Variables

src (IN OUT)

Internal LOB locator.

Usage Notes

Writes the buffer data to the database LOB in the server from the LOB referenced by the input locator.

LOB buffering must have already been enabled for the input LOB locator.

The FLUSH operation, by default, does not free the buffer resources for reallocation to another buffered LOB operation. However, if you want to free the buffer explicitly, you can include the optional FREE keyword to so indicate.

FREE TEMPORARY

Purpose

Free the temporary space for the LOB locator.

Syntax

EXEC SQL [AT [:]database] LOB FREE TEMPORARY :src ;

Host Variable

src (IN OUT)

The LOB locator pointing to the temporary LOB.

Usage Notes

The input locator must point to a temporary LOB. The output locator is marked not initialized and can be used in subsequent LOB statements.

LOAD FROM FILE

Purpose

Copy all or a part of a BFILE into an internal LOB.

Syntax

EXEC SQL [AT [:]database] LOB LOAD :amt FROM FILE :file [AT :src_offset] INTO
    :dst [AT :dst_offset] ;

Host Variables

amt (IN)

Maximum number of bytes to be loaded.

file (IN OUT)

The source BFILE locator.

src_offset (IN)

The number of bytes offset from the beginning of the file, starting from 1.

dst (IN OUT)

The destination LOB locator which can be BLOB, CLOB, be NCLOB.

dst_offset (IN)

The number of bytes (for BLOBs) or characters (CLOBs and NCLOBs) from the beginning of the destination LOB where writing will begin. It starts at 1.

Usage Notes

The data is copied from the source BFILE to the destination internal LOB. No character set conversions are performed when copying the BFILE data to a CLOB or NCLOB. Therefore, the BFILE data must already be in the same character set as the CLOB or NCLOB in the database.

The source and destination LOBs must already exist. If the data already exists at the destination's start position, it is overwritten with the source data. If the destination's start position is beyond the end of the current data, zero-byte fillers (BLOBs) or spaces (CLOBs and NCLOBs) are written into the destination LOB. The fillers are written to the destination LOB from the end of the data to the beginning of the newly written data from the source.

The destination LOB is extended to accommodate the newly written data if it extends beyond the current length of the destination LOB. It is an error to extend this LOB beyond 4 Gigabytes.

It is also an error to copy from a BFILE that is not initialized.

The amount parameter indicates the maximum amount to load. If the end of the source BFILE is reached before the specified amount is loaded, the operation terminates with ORA-22993 error.

OPEN

Purpose

Open a LOB or BFILE for read or read/write access.

Syntax

EXEC SQL [AT [:]database] LOB OPEN :src [ READ ONLY | READ WRITE ] ;

Host Variables

src (IN OUT)

LOB locator of the LOB or BFILE.

Usage Notes

The default mode in which a LOB or BFILE can be OPENed is for READ ONLY access.

For internal LOBs, being OPEN is associated with the LOB, not the locator. Assigning an already OPENed locator to another locator does not count as OPENing a new LOB. Instead, both locators refer to the same LOB. For BFILEs, being OPEN is associated with the locator.

Only 32 LOBs can be OPEN at any one time. An error will be returned when the 33rd LOB is OPENed.

There is no support for writable BFILEs. Therefore, when you OPEN a BFILE in READ WRITE mode, an error is returned.

It is also an error to open a LOB in READ ONLY mode and then attempt to WRITE to the LOB.

READ

Purpose

Reads all or part of a LOB or BFILE into a buffer.

Syntax

EXEC SQL [AT [:]database] LOB READ :amt FROM :src [AT :src_offset]
   INTO :buffer [WITH LENGTH :buflen] ;

Host Variables

amt (IN OUT)

The input is the number of characters or bytes to be read. The output is the actual number of characters or bytes that were read.

If the amount of bytes to be read is larger than the buffer length it is assumed that the LOB is being READ in a polling mode. On input if this value is 0, then the data will be read in a polling mode from the input offset until the end of the LOB.

The number of bytes or characters actually read is returned in amt. If the data is read in pieces, amt will always contain the length of the last piece read.

When the end of a LOB is reached an ORA-1403: no data found error will be issued.

When reading in a polling mode, the application must invoke the LOB READ repeatedly to read more pieces of the LOB until no more data is left. Control the use of the polling mode with the NOT FOUND condition in a WHENEVER directive to catch the ORA-1403 error.

src (IN)

The LOB or BFILE locator.

src_offset (IN)

This is the absolute offset from the beginning of the LOB value from which to start reading. For character LOBs it is the number of characters from the beginning of the LOB. For binary LOBs or BFILEs it is the number of bytes. The first position is 1.

buffer (IN/OUT)

A buffer into which the LOB data will be read. The external datatype of the buffer is restricted to only a few types depending on the type of the source LOB. The maximum length of the buffer depends on the external datatype being used to store the LOB value. The following table summarizes the legal external datatypes and their corresponding maximum lengths categorized by source LOB type:

Table 16-2 Source LOB and Precompiler Datatypes

External LOBFoot 1 Internal LOBPrecompiler External DatatypePrecompiler Maximum Length Foot 2 PL/SQL DatatypePL/SQL Maximum Length

BFILE

BLOB

RAW

VARRAW

LONG RAW

LONG VARRAW

65535

65533

2147483647

2147483643

RAW

32767

BFILE

CLOB

VARCHAR2

VARCHAR

LONG VARCHAR

65535

65533

2147483643

VARCHAR2

32767

BFILE

NCLOB

NVARCHAR2

4000

NVARCHAR2

4000


Footnote 1  Any of the external datatypes shown can be used with BFILES.

Footnote 2  Lengths are measured in bytes, not characters.

buflen (IN)

Specifies the length of the given buffer when it cannot be determined otherwise.

Usage Notes

A BFILE must already exist on the database server and it must have been opened using the input locator. The database must have permission to read the file and you, the user, must have read permission on the directory.

It is an error to try to read from an un-initialized LOB or BFILE.

The length of the buffer is determined this way:

TRIM

Purpose

Truncates the LOB value.

Syntax

EXEC SQL [AT [:]database] LOB TRIM :src TO :newlen ;

Host Variables

src (IN OUT)

LOB locator for internal LOB.

newlen (IN)

The new length of the LOB value.

Usage Notes

This statement is not for BFILES. The new length cannot be greater than the current length, or an error is returned.

WRITE

Purpose

Writes the contents of a buffer to a LOB.

Syntax

EXEC SQL [AT [:]database] LOB WRITE [APPEND] [ FIRST | NEXT | LAST | ONE ]
    :amt FROM :buffer [WITH LENGTH :buflen] INTO :dst [AT :dst_offset] ;

Host Variables

amt (IN OUT)

The input is the number of characters or bytes to be written.

The output is the actual number of characters or bytes that is written.

When writing using a polling method, amt will return the cumulative total length written for the execution of the WRITE statement after a WRITE LAST is executed. If the WRITE statement is interrupted, amt will be undefined.

buffer (IN)

A buffer from which the LOB data is written.


See Also:

"READ" for the lengths of datatypes.

dst (IN OUT)

The LOB locator.

dst_offset (IN)

The offset from the beginning of the LOB (counting from 1), in characters for CLOBs and NCLOBs, in bytes for BLOBs.

buflen (IN)

The buffer length when it cannot be calculated in any other way.

Usage Notes

If LOB data already exists, it is overwritten with the data stored in the buffer. If the offset specified is beyond the end of the data currently in the LOB, zero-byte fillers or spaces are inserted into the LOB.

Specifying the keyword APPEND in the WRITE statement causes the data to automatically be written to the end of the LOB. When APPEND is specified, the destination offset is assumed to be the end of the LOB. It is an error to specify the destination offset when using the APPEND option in the WRITE statement.

The buffer can be written to the LOB in one piece (using the ONE orientation which is the default) or it can be provided piece-wise using a standard polling method.

Polling is begun by using FIRST, then NEXT to write subsequent pieces. The LAST keyword is used to write the final piece that terminates the write.

Using this piece-wise write mode, the buffer and the length can be different in each call if the pieces are of different sizes and from different locations.

If the total amount of data passed to Oracle is less than the amount specified by the amt parameter after doing all the writes, an error results.

The same rules apply for determining the buffer length as in the READ statement.

DESCRIBE

Purpose

This is a statement that is equivalent to several OCI and PL/SQL statements (which is why it is saved for last). Use the LOB DESCRIBE SQL statement to retrieve attributes from a LOB. This capability is similar to OCI and PL/SQL procedures. The LOB DESCRIBE statement has this format:

Syntax

EXEC SQL [AT [:]database] LOB DESCRIBE :src GET attribute1 [{, attributeN}]
   INTO :hv1 [[INDICATOR] :hv_ind1] [{, :hvN [[INDICATOR] :hv_indN] }] ;

where an attribute can be any of these choices:

CHUNKSIZE | DIRECTORY | FILEEXISTS | FILENAME | ISOPEN | ISTEMPORARY | LENGTH

Host variables

src (IN)

The LOB locator of an internal or external LOB.

hv1 ... hvN ... (OUT)

The host variables that receive the attribute values, in the order specified in the attribute name list.

hv_ind1 ... hv_indN ... (OUT)

Optional host variables that receive the indicator NULL status in the order of the attribute name list.

This table describes the attributes, which LOB it is associated with, and the C types into which they should be read:

Table 16-3 LOB Attributes

LOB AttributeAttribute DescriptionRestrictionsC Type

CHUNKSIZE

The amount (in bytes for BLOBs and characters for CLOBs/NCLOBs) of space used in the LOB chunk to store the LOB value. You speed up performance if you issue READ/WRITE requests using a multiple of this chunk size. If all WRITEs are done on a chunk basis, no extra/excess versioning is done nor duplicated. Users could batch up the WRITE until they have enough for a chunk instead of issuing several WRITE calls for the same CHUNK.

BLOBs, CLOBs, and NCLOBs only

unsigned int

DIRECTORY

The name of the DIRECTORY alias for the BFILE. The maximum length is 30 bytes.

FILE LOBs only

char * Foot 1 

FILEEXISTS

Determines whether or not the BFILE exists on the server's operating system's file system. FILEEXISTS is true when it is nonzero; false when it equals 0.

FILE LOBs only

signed int

FILENAME

The name of the BFILE. The maximum length is 255 bytes.

FILE LOBs only

char *

ISOPEN

For BFILEs, if the input BFILE locator was never used in an OPEN statement, the BFILE is considered not to be OPENed by this locator. However, a different BFILE locator may have OPENed the BFILE. More than one OPEN can be performed on the same BFILE using different locators. For LOBs, if a different locator OPENed the LOB, the LOB is still considered to be OPEN by the input locator. ISOPEN is true when it is nonzero; false when it equals 0.

-

signed int

ISTEMPORARY

Determines whether or not the input LOB locator refers to a temporary LOB or not. ISTEMPORARY is true when it is nonzero; false when it equals 0.

BLOBs, CLOBs, and NCLOBs only

signed int

LENGTH

Length of BLOBs and BFILEs in bytes, CLOBs and NCLOBs in characters. For BFILEs, the length includes EOF if it exists. Empty internal LOBs have zero length. LOBs/BFILEs that are not initialized have undefined length.

-

unsigned int


Footnote 1 For DIRECTORY and FILENAME attributes, the only external datatypes that will be supported are CHARZ, STRING, VARCHAR, VARCHAR2 and CHARF.

Usage Notes

Indicator variables should be declared short. After execution has completed, sqlca.sqlerrd[2] contains the number of attributes retrieved without error. If there was an execution error, the attribute at which it occurred is one more than the contents of sqlca.sqlerrd[2].

DESCRIBE Example

Here is a simple Pro*C/C++ example that extracts the DIRECTORY and FILENAME attributes of a given BFILE:

The oci.h header file is needed for the proper type resolution and compilation of the following OCIBFileLocator declaration:

#include <oci.h>
...
OCIBFileLocator *bfile ;
char directory[31], filename[256] ;
short d_ind, f_ind ;

Finally, select a BFILE locator from some LOB table and perform the DESCRIBE:

EXEC SQL ALLOCATE :bfile ;
EXEC SQL SELECT a_bfile INTO :bfile FROM lob_table WHERE ... ;
EXEC SQL LOB DESCRIBE :bfile
   GET DIRECTORY, FILENAME INTO :directory:d_ind, :filename:f_ind ;

Indicator variables are only valid for use with the DIRECTORY and FILENAME attributes. These attributes are character strings whose values may be truncated if the host variable buffers used to hold their values aren't large enough. When truncation occurs, the value of the indicator will be set to the original length of the attribute.

LOBs and the Navigational Interface

The navigational interface can also be used to work with object types that contain LOBs as attributes.

Transient Objects

Use the OBJECT CREATE statement to create transient and persistent objects with LOB attributes. You can ASSIGN a temporary LOB to the LOB attribute of a transient object, then copy the value to a permanent LOB or a LOB attribute of a persistent object to save the data. Or, ASSIGN the temporary LOB to the LOB attribute and use FLUSH to write the value to the database.

You can create a transient object with a BFILE attribute and read data from the BFILE on disk. Remember, temporary BFILEs are not supported.

Persistent Objects

When you create a persistent object in the object cache that contains an internal LOB attribute, the LOB attribute is implicitly set to empty. You must first flush this object using the OBJECT FLUSH statement, thereby inserting a row into the table and creating an empty LOB. Once the object is refreshed in the object cache (using the VERSION=LATEST option), the real locator is read into the attribute.

When creating an object with a BFILE attribute, the BFILE is set to NULL. It must be updated with a valid directory alias and filename before the BFILE can be read.

A temporary LOB may be ASSIGNed to a LOB attribute of a persistent object. The actual LOB value will be copied when the object is flushed. A user may also explicitly copy a temporary LOB's value to a LOB attribute of a persistent object using the temporary LOB locator and a locator for the LOB attribute in a COPY statement.

Navigational Interface Example

Use the OBJECT GET and SET statements to handle LOBs through the navigational interface.

You can retrieve a LOB locator that is an attribute of an object type and use it in any of the new embedded SQL LOB statements. Place LOB locators back into object types as attributes using the OBJECT SET statement.

Doing so is the same as a direct LOB ASSIGN operation. The same rules apply to an OBJECT GET or SET of a LOB attribute from or to an object type that would apply if a LOB ASSIGN had been performed instead, including type enforcement.

For example, suppose we had this simple type definition

CREATE TYPE lob_type AS OBJECT (a_blob BLOB) ;

This example assumes that the type is a column in the database with a valid (and initialized) BLOB attribute.

The OTT-generated C structure usable by Pro*C/C++ looks like this:


See Also:

Chapter 19, "The Object Type Translator" for information on creating an INTYPE file for OTT and running OTT.

struct lob_type
{
   OCIBlobLocator *a_blob ;
} ;
typedef struct lob_type lob_type ;

You can write a Pro*C/C++ program to extract the BLOB attribute and retrieve the BLOB's current length in a DESCRIBE statement. You can then TRIM the BLOB to half its size, setting the attribute back with a SET OBJECT and then make the change permanent with an OBJECT FLUSH.

First include oci.h and make some local variable declarations:

#include <oci.h>
lob_type *lob_type_p ;
OCIBlobLocator *blob = (OCIBlobLocator *)0 ;
unsigned int length ;

Select the BLOB attribute from the object, do an OBJECT GET, and do a DESCRIBE to get the current length of the BLOB:

EXEC SQL ALLOCATE :blob ;
EXEC SQL SELECT a_column
   INTO :lob_type_p FROM a_table WHERE ... FOR UPDATE ;
EXEC SQL OBJECT GET a_blob FROM :lob_type_p INTO :blob ;
EXEC SQL LOB DESCRIBE :blob GET LENGTH INTO :length ;

Cut the length in half and TRIM the BLOB to that new length:

length = (unsigned int)(length / 2) ;
EXEC SQL LOB TRIM :blob TO :length ;

Once the BLOB has been changed, set the BLOB attribute back into the object, FLUSH the change back to the server, and commit:

EXEC SQL OBJECT SET a_blob OF :lob_type_p TO :blob ;
EXEC SQL OBJECT FLUSH :lob_type_p ;
EXEC SQL FREE :blob ;
EXEC SQL COMMIT WORK ;

LOB Program Examples

Here are two examples which show how to read and write BFILEs and BLOBs.

READ a BLOB, Write a File Example

In this example we will be reading data from a BLOB with an unknown arbitrary length into a buffer and then writing the data from the buffer into an external file. Our buffer is small, so depending on the size of the BLOB we are reading, we may be able to read the BLOB value into the buffer in a single READ statement or we may be required to utilize a standard polling method instead.

First we start off with oci.h and some simple local variable declarations

#include <oci.h>
OCIBlobLocator *blob ;
FILE *fp ;
unsigned int amt, offset = 1 ;

Now we need a buffer to store the BLOB value and then write to the file from:

#define MAXBUFLEN 5000
unsigned char buffer[MAXBUFLEN] ;
EXEC SQL VAR buffer IS RAW(MAXBUFLEN) ;

Allocate the BLOB host variable and select a BLOB which we will READ:

EXEC SQL ALLOCATE :blob ;
EXEC SQL SELECT a_blob INTO :blob FROM lob_table WHERE ... ;

We can then open the external file to which we will write the BLOB value:

fp = fopen((const char *)"image.gif", (const char *)"w") ;

If the buffer can hold the entire LOB value in a single READ we need to catch the NOT FOUND condition to signal LOB READ termination:

EXEC SQL WHENEVER NOT FOUND GOTO end_of_lob ;

Now do our first READ. We set the amount to the maximum value of 4 Gigabytes. It is larger than our buffer so if the LOB doesn't fit we will READ using a polling mode:

amt = 4294967295 ;
EXEC SQL LOB READ :amt FROM :blob AT :offset INTO :buffer ;

If we get here then it means that the buffer was not large enough to hold the entire LOB value, so we must write what we have using binary I/O and continue reading:

(void) fwrite((void *)buffer, (size_t)MAXBUFLEN, (size_t)1, fp) ;

We use a standard polling method to continue reading with the LOB READ inside of an infinite loop. We can set up the NOT FOUND condition to terminate the loop:

EXEC SQL WHENEVER NOT FOUND DO break ;
while (TRUE)
  {

During polling, the offset is not used so we can omit it in subsequent LOB READs. We need the amount, however, because it will tell us how much was READ in the last READ invocation

    EXEC SQL LOB READ :amt FROM :blob INTO :buffer ;
    (void) fwrite((void *)buffer, (size_t)MAXBUFLEN, (size_t)1, fp) ;
  }

Here, we have reached the end of the LOB value. The amount holds the amount of the last piece that was READ. During polling, the amount for each interim piece was set to MAXBUFLEN, or the maximum size of our buffer:

end_of_lob:
(void) fwrite((void *)buffer, (size_t)amt, (size_t)1, fp) ;

The basic structure of this code should allow internal LOBs of arbitrary length to be READ into local buffers and then written to external files. It has been modeled after OCI and PL/SQL. Refer to the examples in the Appendix of the Oracle Call Interface Programmer's Guide and to the appropriate chapter of the Oracle Database Advanced Application Developer's Guide for further details.

Read a File, WRITE a BLOB Example

In this example we will be reading data from a file with a known arbitrary length into a buffer and then writing the data from the buffer into an internal BLOB. Our buffer is small, so depending on the size of the file we are reading, we may be able to write the file data into the LOB in a single WRITE or we may be required to utilize a standard polling method instead.

First we start off with oci.h and some simple local variable declarations

#include <oci.h>
OCIBlobLocator *blob ;
FILE *fp ;
unsigned int amt, offset = 1 ;
unsigned filelen, remainder, nbytes ;
boolean last ;

We need a buffer to store the file data and then write to the LOB:

#define MAXBUFLEN 5000
unsigned char buffer[MAXBUFLEN] ;
EXEC SQL VAR buffer IS RAW(MAXBUFLEN) ;

We initialize an empty BLOB in an empty table and retrieve that BLOB into an ALLOCATEd locator and then fill it with the data from the file:

EXEC SQL ALLOCATE :blob ;
EXEC SQL INSERT INTO lob_table (a_blob) VALUES (EMPTY_BLOB())
   RETURNING a_blob INTO :blob ;

Open the binary file and determine its length. The total amount we write to our BLOB is the actual length of the binary file:

fp = fopen((const char *)"image.gif", (const char *)"r") ;
(void) fseek(fp, 0L, SEEK_END) ;
filelen = (unsigned int)ftell(fp) ;
amt = filelen ;

Set up our initial read of the file, determining the number of bytes to read based on our buffer size:

if (filelen > MAXBUFLEN)
    nbytes = MAXBUFLEN ;
else
    nbytes = filelen ;

Issue a file I/O operation to read n bytes of data from our file, fp, into our buffer and determine how much is left to read. Start reading from the beginning of the file:

(void) fseek(fp, 0L, SEEK_SET) ;
(void) fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) ;
remainder = filelen - nbytes ;

Based on what is left, either write the buffer in a single piece or initiate polling to write the data from the file in several smaller pieces:

     if (remainder == 0)
     {

In this case we can write the data in a single piece:

        EXEC SQL LOB WRITE ONE :amt
           FROM :buffer INTO :blob AT :offset ;
      }
     else
      {

Initiate the polling method for writing the data piece-wise into the LOB. First, to initiate the polling method, we use the FIRST orientation on the initial WRITE:

        EXEC SQL LOB WRITE FIRST :amt
           FROM :buffer INTO :blob AT :offset ;

Set up a simple loop to implement the polling method:

        last = FALSE ;
        EXEC SQL WHENEVER SQLERROR DO break ;
        do
          {

Calculate the number of bytes to read from the file and subsequently to WRITE into the destination LOB. Also determine if this will be our LAST piece:

            if (remainder > MAXBUFLEN)
                nbytes = MAXBUFLEN ;
            else
                {
                    nbytes = remainder ;
                    last = TRUE ;
                }

Again read the next nbytes from the file on the file system into our buffer. If any error occurs during a file read, we automatically set the next WRITE to be the LAST one:

            if  fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) != 1)
               last = TRUE ;

At this point, either WRITE the LAST piece or an interim NEXT piece which would indicate that there is still data left to be processed from the file:

           if (last)
             {  
               EXEC SQL LOB WRITE LAST :amt
                  FROM :buffer INTO :blob  ;
             }
           
           else
             {
               EXEC SQL LOB WRITE NEXT :amt
                  FROM :buffer INTO :blob  ;
             }
           remainder -= nbytes ;
          } 
while (!last && !feof(fp)) ;

This code example allows files of arbitrary length to be read into a local buffer and then written to a LOB. It has been modeled after OCI examples. Refer to the examples in the Appendix of the Oracle Call Interface Programmer's Guide for further details.

lobdemo1.pc

This program, lobdemo1.pc, illustrates several LOB embedded SQL statements. The source code is in the demo directory. The application uses a table named license_table whose columns are social security number, name, and a CLOB containing text summarizing driving offenses. Several simplified SQL operations of a typical motor vehicle department are modeled.

The possible actions are:

  • Add new records.

  • List records by social security number.

  • List information in a record, given a social security number.

  • Append a new traffic violation to an existing CLOB's contents.

/***************************************************************************
  
  SCENARIO: 
  
  We consider the example of a database used to store driver's
  licenses. The licenses are stored as rows of a table containing
  three columns: the sss number of a person, his name in text and the 
  text summary of the info found in his license.

  The sss number is the driver's unique social security number.

  The name is the driver's given name as found on his ID card.

  The text summary is a summary of the information on the driver,
  including his driving record, which can be arbitrarily long and may
  contain comments and data regarding the person's driving ability. 

  APPLICATION OVERVIEW:

  This example demonstrate how a Pro*C client can handle the new LOB
  datatypes through PL/SQL routines. Demonstrated are mechanisms for
  accessing and storing lobs to tables and manipulating LOBs through
  the stored procedures available through the dbms_lob package.

****************************************************************************/

/***************************************************************************

   To run the demo:

   1. Execute the script, lobdemo1c.sql in SQL*Plus
   2. Precompile using Pro*C/C++
        proc lobdemo1 user=scott/tiger sqlcheck=full
   3. Compile/Link (This step is platform specific)

****************************************************************************/

/*** The following will be added to the creation script for this example ***
 *** This code can be found in lobdemo1c.sql                                ***

connect scott/tiger;

set serveroutput on;

Rem Make sure database has no license_table floating around

drop table license_table;

Rem ABSTRACTION:
Rem A license table reduces the notion of a driver's license into three 
Rem distinct components - a unique social security number (sss), 
Rem a name (name), and a text summary of miscellaneous information.

Rem IMPLEMENTATION:
Rem Our implementation follows this abstraction

create table license_table(
  sss char(9),
  name varchar2(50),
  txt_summary clob);

insert into license_table 
        values('971517006', 'Dennis Kernighan', 
        'Wearing a Bright Orange Shirt - 31 Oct 1996');

insert into license_table 
        values('555001212', 'Eight H. Number', 
        'Driving Under the Influence - 1 Jan 1997');

insert into license_table 
        values('010101010', 'P. Doughboy', 
        'Impersonating An Oracle Employee - 10 Jan 1997');

insert into license_table
        values('555377012', 'Calvin N. Hobbes', 
        'Driving Under the Influence - 30 Nov 1996');

select count(*) from license_table;

Rem Commit to save
commit;

****************************************************************************/

/**************************
 * Begin lobdemo1.pc code *
 **************************/

#define EX_SUCCESS       0
#define EX_FAILURE       1

#ifndef STDIO
# include <stdio.h>
#endif /* STDIO */

#ifndef SQLCA_ORACLE
# include <sqlca.h>
#endif /* SQLCA_ORACLE */

#ifndef OCI_ORACLE
# include <oci.h>
#endif /* OCI_ORACLE */

#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#ifndef LOBDEMO1_ORACLE
# include "lobdemo1.h"
#endif /* LOBDEMO1_ORACLE */

/***********
 * Defines *
 ***********/
#define SSS_LENGTH 12
#define NAME_LENGTH 50 /* corresponds with max length of name in table */
#define BUFLEN 1024
#define MAXCRIME 5
#define DATELENGTH 12

/***********
 * Globals *
 ***********/

char *CrimeList[MAXCRIME]={ "Driving Under the Influence", 
                            "Grand Theft Auto", 
                            "Driving Without a License",
                            "Impersonating an Oracle Employee",
                            "Wearing a Bright Orange Shirt" };

char curdate[DATELENGTH];

/*********************** 
 * Function prototypes *
 ***********************/

#if defined(__STDC__)
  void GetDate( void );
  void PrintSQLError( void );
  void Driver( void );
  void ListRecords( void );
  void PrintCrime( OCIClobLocator *a_clob );
  void GetRecord( void );
  void NewRecord( void );
  char *NewCrime( void );
  void GetName( char *name_holder );
  void AppendToClob( OCIClobLocator *a_clob, char *charbuf );
  void AddCrime( void );
  void ReadClob( OCIClobLocator *a_clob );
  boolean GetSSS( char *suggested_sss );
#else
  void GetDate();
  void PrintSQLError( );
  void Driver( );
  void ListRecords( );
  void PrintCrime(/* OCIClobLocator *a_clob */);
  void GetRecord( );
  void NewRecord( );
  char *NewCrime( );
  void GetName(/* char *name_holder */);
  void AppendToClob(/* OCIClobLocator *a_clob, char *charbuf */);
  void AddCrime();
  boolean GetSSS(/* char *suggested_sss */);
#endif

/* 
 * NAME
 *   GetDate
 * DESCRIPTION
 *   Get date from user
 * LOB FEATURES
 *   none
 */ 

void GetDate()
{
  time_t now;

  now = time(NULL);
  strftime(curdate, 100, " - %d %b %Y", localtime(&now));
}

main()
{
  char * uid = "scott/tiger";

  EXEC SQL WHENEVER SQLERROR DO PrintSQLError();

  printf("Connecting to license database account: %s \n", uid);
  EXEC SQL CONNECT :uid;
  
  GetDate();

  printf("\t*******************************\n");
  printf("\t* Welcome to the DMV Database *\n");
  printf("\t*******************************\n\n");
  printf("Today's Date is%s\n", curdate);

  Driver();

  EXEC SQL COMMIT RELEASE;

  return (EX_SUCCESS);
}

/* 
 * NAME
 *   Driver
 * DESCRIPTION
 *   Command Dispatch Routine
 * LOB FEATURES
 *   none
 */ 

void Driver()
{
  char choice[20];
  boolean done = FALSE;

  while (!done)
  {
    printf("\nLicense Options:\n");
    printf("\t(L)ist available records by SSS number\n");
    printf("\t(G)et information on a particular record\n");
    printf("\t(A)dd crime to a record\n");
    printf("\t(I)nsert new record to database\n");
    printf("\t(Q)uit\n");
    printf("Enter your choice: ");

    fgets(choice, 20, stdin);
    switch(toupper(choice[0]))
    {
    case 'L':
      ListRecords();
      break;
    case 'G':
      GetRecord();
      break;
    case 'A':
      AddCrime();
      break;
    case 'I': 
      NewRecord();
      break;
    case 'Q':
      done = TRUE;
      break;
    default:
      break;
    }
  }
}

/* 
 * NAME
 *   ListRecords
 * DESCRIPTION
 *   List available records by sss number
 * LOB FEATURES
 *   none
 */ 

void ListRecords()
{
  char *select_sss = "SELECT SSS FROM LICENSE_TABLE";
  char sss[10];

  EXEC SQL PREPARE sss_exec FROM :select_sss;
  EXEC SQL DECLARE sss_cursor CURSOR FOR sss_exec;
  EXEC SQL OPEN sss_cursor;

  printf("Available records:\n");

  EXEC SQL WHENEVER NOT FOUND DO break;
  while (TRUE)
    {
      EXEC SQL FETCH sss_cursor INTO :sss;
      printf("\t%s\n", sss);
    }
  EXEC SQL WHENEVER NOT FOUND CONTINUE;

  EXEC SQL CLOSE sss_cursor;
}


/* 
 * NAME
 *   PrintCrime
 * DESCRIPTION
 *   Tests correctness of clob
 * LOB FEATURES
 *   OCIlobRead and OCILobGetLength
 */

void PrintCrime(a_clob)
  OCIClobLocator *a_clob; 
{ 
  ub4 lenp; 

  printf("\n");
  printf("=====================\n");
  printf(" CRIME SHEET SUMMARY \n");
  printf("=====================\n\n");

  EXEC SQL LOB DESCRIBE :a_clob GET LENGTH INTO :lenp;

  if(lenp == 0) /* No crime on file */
    {
      printf("Record is clean\n");
    }
  else
    {
      ub4 amt = lenp;
      varchar *the_string = (varchar *)malloc(2 + lenp);

      the_string->len = (ub2)lenp;      

      EXEC SQL WHENEVER NOT FOUND CONTINUE;
      EXEC SQL LOB READ :amt
        FROM :a_clob INTO :the_string WITH LENGTH :lenp;
         
      printf("%.*s\n", the_string->len, the_string->arr);
      free(the_string);
    }
}

/* 
 * NAME
 *   GetRecord
 * DESCRIPTION
 *   Get license of single individual
 * LOB FEATURES
 *   allocate and select of blob and clob
 */ 

void GetRecord()
{
  char sss[SSS_LENGTH];
  
  if(GetSSS(sss) == TRUE)
    {
      OCIClobLocator *license_txt;
      char name[NAME_LENGTH]={'\0'};
      
      EXEC SQL ALLOCATE :license_txt;

      EXEC SQL SELECT name, txt_summary INTO :name, :license_txt 
        FROM license_table WHERE sss = :sss;
      
      printf("========================================================\n\n");
      printf("NAME: %s\tSSS: %s\n", name, sss);
      PrintCrime(license_txt);
      printf("\n\n========================================================\n");

      EXEC SQL FREE :license_txt;
    }
  else
    {
      printf("SSS Number Not Found\n");
    }
}

/* 
 * NAME
 *   NewRecord
 * DESCRIPTION
 *   Create new record in database
 * LOB FEATURES
 *   EMPTY_CLOB() and OCILobWrite
 */ 

void NewRecord()
{
  char sss[SSS_LENGTH], name[NAME_LENGTH] = {'\0'};
  
  if(GetSSS(sss) == TRUE)
    {
      printf("Record with that sss number already exists.\n");
      return;
    }
  else
    {
      OCIClobLocator *license_txt;
      
      EXEC SQL ALLOCATE :license_txt;
      
      GetName(name);

      EXEC SQL INSERT INTO license_table 
        VALUES (:sss, :name, empty_clob());

      EXEC SQL SELECT TXT_SUMMARY INTO :license_txt FROM LICENSE_TABLE
        WHERE SSS = :sss;

      printf("========================================================\n\n");
      printf("NAME: %s\tSSS: %s\n", name, sss);
      PrintCrime(license_txt);
      printf("\n\n========================================================\n");

      EXEC SQL FREE :license_txt;
    }
}

/* 
 * NAME
 *   NewCrime
 * DESCRIPTION
 *   Query user for new crime
 * LOB FEATURES
 *   None
 */ 

char *NewCrime()
{
  int  SuggestedCrimeNo;
  int  i;
  char crime[10];

  printf("Select from the following:\n");
  for(i = 1; i <= MAXCRIME; i++)
    printf("(%d) %s\n", i, CrimeList[i-1]);

  printf("Crime (1-5): ");
  fgets(crime, 10, stdin);
  SuggestedCrimeNo = atoi(crime);

  while((SuggestedCrimeNo < 1) || (SuggestedCrimeNo > MAXCRIME))
    {
      printf("Invalid selection\n");
      printf("Crime (1-5): ");
      fgets(crime, 10, stdin);
      SuggestedCrimeNo = atoi(crime);
    }
  
  return CrimeLiZst[SuggestedCrimeNo-1];
}

/* 
 * NAME
 *   AppendToClob
 * DESCRIPTION
 *   Append String charbuf to a Clob in the following way:
 *   if the contents of the clob a_clob were <foo> and the
 *   contents of charbuf were <bar>, after the append a_clob
 *   will contain: <foo>\n<bar> - <curdate>
 *   where <curdate> is today's date as obtained by the
 *   GetDate procedure.
 * LOB FEATURES
 *   OCILobWrite
 * NOTE
 *   Potentially, charbuf can be a very large string buffer.
 *   Furthermore, it should be noted that lobs and lob
 *   performance were designed for large data. Therefore, 
 *   users are encouraged to read and write large chunks of
 *   data to lobs. 
 */ 

void AppendToClob(a_clob, charbuf)
  OCIClobLocator *a_clob;
  char *charbuf;
{
  ub4 ClobLen, WriteAmt, Offset;
  int CharLen = strlen(charbuf);
  int NewCharbufLen = CharLen + DATELENGTH + 4; 
  varchar *NewCharbuf;
 
  NewCharbuf = (varchar *)malloc(2 + NewCharbufLen);

  NewCharbuf->arr[0] = '\n';
  NewCharbuf->arr[1] = '\0';
  strcat((char *)NewCharbuf->arr, charbuf);
  NewCharbuf->arr[CharLen + 1] = '\0';
  strcat((char *)NewCharbuf->arr, curdate);

  NewCharbuf->len = NewCharbufLen;

  EXEC SQL LOB DESCRIBE :a_clob GET LENGTH INTO :ClobLen;

  WriteAmt = NewCharbufLen;
  Offset = ClobLen + 1;

  EXEC SQL LOB WRITE ONE :WriteAmt FROM :NewCharbuf
    WITH LENGTH :NewCharbufLen INTO :a_clob AT :Offset;

  free(NewCharbuf);
}

/* 
 * NAME
 *   AddCrime
 * DESCRIPTION
 *   Add a crime to a citizen's crime file
 * LOB FEATURES
 *   OCILobWrite
 */ 

void AddCrime()
{
  char sss[SSS_LENGTH];

  if (GetSSS(sss) == TRUE)
    {
      OCIClobLocator *license_txt;
      char *crimebuf;
      char  name[NAME_LENGTH] = {'\0'};
      
      EXEC SQL ALLOCATE :license_txt;    
      
      EXEC SQL SELECT txt_summary INTO :license_txt FROM license_table
        WHERE sss = :sss FOR UPDATE; 

      crimebuf = NewCrime();

      printf("Added %s to CrimeList\n", crimebuf);
      AppendToClob(license_txt, crimebuf);

      EXEC SQL SELECT name INTO :name FROM license_table WHERE sss = :sss;

      printf("NAME: %s SSS: %s\n", name, sss);
      PrintCrime(license_txt);

      EXEC SQL COMMIT;
      EXEC SQL FREE :license_txt;
    }
  else
    {
      printf("SSS Number Not Found\n");
    }
}

/* 
 * NAME
 *   GetSSS
 * DESCRIPTION
 *   Fills the passed buffer with a client-supplied social security number
 *   Returns FALSE if sss does not correspond to any entry in the database,
 *   else returns TRUE
 * LOB FEATURES
 *   none
 */

boolean GetSSS(suggested_sss)
  char *suggested_sss;
{
  int count = 0;
  int i;

  printf("Social Security Number: ");
  fgets(suggested_sss, SSS_LENGTH, stdin);

  for(i = 0; ((suggested_sss[i] != '\0') && (i < SSS_LENGTH)); i++)
    {
      if(suggested_sss[i] == '\n') 
        suggested_sss[i]='\0';
    }

  EXEC SQL SELECT COUNT(*) INTO :count FROM license_table 
    WHERE sss = :suggested_sss;

  return (count != 0);
}

/* 
 * NAME
 *   GetName
 * DESCRIPTION
 *   Get name from user. 
 *   
 * LOB FEATURES
 *   none
 */

void GetName(name_holder)
  char *name_holder;
{
  int count=0;
  int i;

  printf("Enter Name: ");
  fgets(name_holder, NAME_LENGTH + 1, stdin);

  for(i = 0; name_holder[i] != '\0'; i++)
    {
      if(name_holder[i] == '\n') 
        name_holder[i]='\0';
    }

  return;
}

/* 
 * NAME
 *   PrintSQLError
 * DESCRIPTION
 *   Prints an error message using info in sqlca and calls exit.
 * COLLECTION FEATURES
 *   none
 */ 

void PrintSQLError()
{
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  printf("SQL error occurred...\n");
  printf("%.*s\n", (int)sqlca.sqlerrm.sqlerrml,
         (CONST char *)sqlca.sqlerrm.sqlerrmc);
  EXEC SQL ROLLBACK RELEASE;
  exit(EX_FAILURE);
}

PK?(`nZPK+AOEBPS/partpage3.htm Appendixes PKDPK+AOEBPS/pc_18col.htm Collections

18 Collections

This chapter describes other kinds of object types, known as collections, and the ways of using them in Pro*C/C++. We present methods to access collections and their elements. This chapter contains the following topics:

Collections

There are two kinds of collection object types: nested tables and varrays.

Collections may occur both in relational columns and also as attributes within an object type. All collections must be named object types in the database. In the case of varrays, you must first create a named type in the database, specifying the desired array element type and maximum array dimension.

With Oracle, you are no longer limited to a single level of nesting. Oracle supports multilevel collections of objects enabling multiple levels of nested tables and varrays.

Nested Tables

A nested table is a collection of rows, called elements, within a column. For each row of the database table there are many such elements. A simple example is the list of tasks that each employee is working on. Thus many-to-one relationships can be stored in one table, without needing to join employee and task tables.

Nested tables differ from C and C++ arrays in these ways:

  • Arrays have a fixed upper bound; nested tables are unbounded (have no maximum index).

  • Arrays have consecutive subscripts (are dense); nested tables can be either dense or sparse. When a nested table is retrieved into an array in a program, the gaps are skipped, resulting in a filled array that has no gaps.

Use the CREATE TYPE statement to define a table type that can be nested within other object types in one or more columns of a relational table.

For example:, to store several projects in each department of an organization:

CREATE TYPE project_type AS OBJECT (
    pno            CHAR(5),
    pname          CHAR(20),
    budget         NUMBER(7,2)) ;

CREATE TYPE project_table AS TABLE OF project_type ;

CREATE TABLE depts (
    dno            CHAR(5),
    dname          CHAR(20),
    budgets_limit  NUMBER(15,2),
    projects       project_table)
    NESTED TABLE projects STORE AS depts_projects ;

Varrays

Unlike nested tables, you must specify the maximum number of elements when you create a VARRAY type. Varrays are only dense, unlike nested tables, which can be dense or sparse. The elements of a varray and a nested table are both numbered from 0.

You create a varray with CREATE TYPE statements such as:

CREATE TYPE employee AS OBJECT 
(
  name   VARCHAR2(10),
  salary NUMBER(8,2)
) ;
CREATE TYPE employees AS VARRAY(15) OF employee ;
CREATE TYPE department AS OBJECT
(
  name VARCHAR2(15),
  team employees
) ;

Use VARRAY as a datatype of a column of a relational table, or as the attribute of an object type. This saves storage space compared to a relational table that has up to 15 records for each team, each containing the team's name.

C and Collections

In a C or C++ program a nested table is read in starting from index value 0 of the collection. When you write the nested table into an array, the elements of the nested table are stored starting at array index 0. When a nested table which is sparse (has gaps in its index) is stored into an array, the gaps are skipped. When reading the array back into the nested table, the gaps are re-created.

In a C or C++ program varrays are written into an array, starting at index 0. When read back into the varray, the elements are restored starting at index 0 in the same order. Thus, arrays are easily used to access collections.

Descriptors for Collections

The C type for a nested table is a pointer to OCITable. For varrays, it is a pointer to OCIArray. (Both are subtypes of a pointer to OCIColl). Use the OTT (Object Type Translator) utility to generate typedefs in header files that you then include in your application code. See also Chapter 19, "The Object Type Translator".

The host structure for a collection is a descriptor through which the elements in the collection may be accessed. These descriptors do not hold the actual elements of the collection, but instead contain the pointers to them. Memory for both the descriptor and its associated elements come from the object cache.

Following the usual procedure for object types, the OTT-generated typefile must be specified in the INTYPE precompiler option to Pro*C/C++ and the OTT-generated headers included in the Pro*C/C++ program using the #include preprocessor directive. This ensures that the proper type-checking for the collection object type can be performed during precompilation.

Unlike other object types, however, a collection object type does not require a special indicator structure to be generated by OTT; a scalar indicator is used instead. This is because an atomic NULL indicator is sufficient to denote whether a collection as a whole is NULL. The NULL status of each individual element in a collection may (optionally) be represented in separate indicators associated to each element.

Declarations for Host and Indicator Variables

As for the other object types, a host variable representing a collection object type must be declared as a pointer to the appropriate OTT-generated typedef.

Unlike other object types, however, the indicator variable for a collection object type as a whole is declared as a scalar signed 2-byte type, OCIInd. The indicator variable is optional, but it is a good programming practice to use one for each host variable declared in Pro*C/C++.

Manipulating Collections

There are two ways to manipulate a collection: the collection is treated as an autonomous entity without access to its elements, or its elements are accessed, appended to, truncated, and so on.

Autonomous Collection Access

Using a C collection descriptor (OCITable or OCIArray) allows only assignment of the collection as a whole. The OBJECT GET embedded SQL statement binds the collection to a C host variable descriptor. The opposite occurs in an OBJECT SET statement which binds the C host descriptor to the collection.

It is possible to bind more than one collection to a compatible C descriptor in the same statement, or include bindings of other scalars in the same statement where binding of a collection to a C descriptor occurs.

Collection Element Access

The C collection descriptor is used to access elements of a collection. The descriptor contains the internal attributes of the collection such as its start and end points, and other information.

A slice of elements are bound to a host array that has a compatible data type. A slice of a collection is defined as the contents between a starting index and an ending index. The slice maps to an array, which can have a dimension larger than the number of slice elements.

Binding a scalar is the same as having a host array of dimension one, or having an optional FOR clause evaluated to one.

Rules for Access

Access rules are different for autonomous and element access.

Autonomous Access

  • The FOR clause is not allowed since the collection is treated as a whole.

  • Because nested tables and varrays are defined differently, assignments between them are not possible.

  • Multiple assignments of several collections to C descriptors are allowed in the same statement. You can assign a collection to a C descriptor and also bind other scalar datatypes in the same statement.

Element Access

  • FOR clauses are permitted. If omitted, the smallest array dimension gives the number of iterations to perform.

  • Only one collection can be accessed at a time.


    Note:

    The FOR clause variable specifies the number of array elements to be processed. Make sure the number does not exceed the smallest array dimension. Internally, the value is treated as an unsigned quantity. An attempt to pass a negative value through the use of a signed host variable will result in unpredictable behavior.

Indicator Variables

Each access method has its own way of using indicator variables.

Autonomous Bindings

The single indicator variable holds the NULL status of the collection as a single entity. This says nothing about the NULL status in the elements.

Element Bindings

The indicator variables show whether an element is NULL or not. If a slice of collection data is bound to a host array which has its own indicator array, that indicator array will contain the NULL status of each element in the slice.

When the collection element type is a user-defined object type, the indicator variable associated with the host variable contains the NULL status of the object and of its attributes.

OBJECT GET and SET

The navigational statements OBJECT SET and OBJECT GET permit you to retrieve and update collection attributes as well as object types defined by you.

For elements that are object types, the OBJECT GET statement retrieves all attributes of the object into the host variables when either the

 '*' | {attr [, attr]}  FROM 

clause is omitted, or 'OBJECT GET * FROM ' is used:

EXEC SQL [AT [:]database] 
   OBJECT GET [  '*' | {attr [,attr]}  FROM]
      :object [[INDICATOR] :object_ind]
         INTO {:hv [[INDICATOR] :hv_ind]
            [,:hv [[INDICATOR] :hv_ind]]} ;

The OBJECT SET statement causes all attributes of the object to be updated using the host variables when either the

 '*' | {attr, [, attr]}  OF

clause is omitted or 'OBJECT SET * OF' is used:

EXEC SQL [AT [:]database] 
   OBJECT SET [  '*' | {attr [, attr]} OF]
     :object [INDICATOR] :object_ind]
        TO {:hv [[INDICATOR] :hv_ind]
            [,:hv [[INDICATOR] :hv_ind]]} ;

See Also:

"Converting Object Attributes and C Types" for complete details of the OBJECT GET and OBJECT SET statements.

This table shows how object and collection types are mapped by these two statements:

Table 18-1 Object and Collection Attributes

Attribute TypeRepresentationHost Data Type

Object

OTT-Generated Structure

Pointer to OTT Structure

Collection

OCIArray, OCITable (OCIColl)

OCIArray *, OCITable * (OCIColl *)


The object or collection must be type compatible with the attribute to which it is bound. Collection attributes are type compatible if and only if they are both either varray or nested table, and their element types are compatible.

This next table shows how type compatibility for the elements of two collection types is obtained.

Table 18-2 Collection and Host Array Allowable Type Conversions

Collection Element TypeRepresentationHost Data Type

CHAR, VARCHAR, VARCHAR2

OCIString

string, VARCHAR, CHARZ, OCIString

REF

OCIRef

OCIRef

INTEGER, SMALLINT, INT

OCINumber

int, short, OCINumber

NUMBER, NUMERIC, REAL, FLOAT, DOUBLE PRECISION

OCINumber

int, float, double, OCINumber

DATE

OCIDate

string, VARCHAR, CHARZ, OCIDate


The object to which the REF refers must be type compatible with the REF to which it is bound.

In both tables OBJECT GET converts database types from the type on the left, using the format specified in the Representation column to an internal datatype using the format in the Host Data Type column. OBJECT SET converts in the opposite direction.

No Explicit Type Checking

The precompiler does not support explicit type checking on the bindings between collection element datatypes and host variable datatypes. Type-checking is done at runtime.

Collection Statements

This section includes descriptions of the collection statements.

COLLECTION GET

Purpose

The COLLECTION GET statement is analogous to the OBJECT GET statement, but is designed for collections. It retrieves the elements of a collection, sets the current slice, and converts elements to C types where appropriate.

Syntax

EXEC SQL [AT [:]database] [FOR :num]
   COLLECTION GET :collect [[INDICATOR] :collect_ind]
      INTO :hv [[INDICATOR] :hv_ind] ;

Variables

num (IN)

The number of elements requested. If this clause is omitted, the array size of the host variable (scalar has 1) determines the number of elements retrieved from the collection.

collect (IN)

A host variable C collection descriptor.

collect_ind (IN)

An optional indicator variable returning the NULL status of the collection.

hv (OUT)

The host variable that receives the collection element values.

hv_ind (OUT)

An optional indicator variable returning the NULL status of hv if it is a scalar, or an array holding the status of each element in the slice.

Usage Notes

The number of elements actually returned in the last COLLECTION GET is set in sqlca.sqlerrd[2] (not the cumulative total of all GETs). See also "sqlerrd".

The number returned can be less than the number requested when one or both of the slice endpoints exceed the collection bounds. This can occur when:

  • The collection descriptor has not been initialized in a syntactically correct ALLOCATE statement, is NULL, or invalid for any other reason.

  • The collection is NULL. Its associated indicator is -1.

  • The collection is empty (has no elements).

  • More elements were requested than are remaining in the collection.

  • A COLLECTION TRIM statement has been executed, resulting in the endpoint index being below the starting index of the current slice.

An improperly initialized C collection descriptor results in an error. All other situations in the list will raise an ORA-01403: no data found error condition. In this case, the total number of elements successfully retrieved before the error occurs is still stored in sqlca.sqlerrd[2].

The initial GET or the first GET after a RESET affects the slice as follows:

  • The ending index of the slice will be the index where the final element was found; it depends on how many elements are requested. If there were not enough elements in the remaining portion of the collection to satisfy the request, then the ending index will be the last index in the collection.

Subsequent GETs affect the slice indexes as follows:

  • The index of the start-point is the index where the first element was found after the end-point of the previous slice. If no more elements are left after the end-point of the previous slice, the starting index is that of the last element in the collection.

  • The ending index of the next slice will be the index where the final element was found; it depends on how many elements are requested. If there were not enough elements in the remaining portion of the collection to satisfy the request given the position of the previous slice, then the ending index will be the last index in the collection.

COLLECTION SET

Purpose

The COLLECTION SET statement is analogous to the OBJECT SET statement; it is used for updating element values of collections. Elements in the current slice are converted from the native C types to Oracle datatypes.

Syntax

EXEC SQL [AT [:]database] [FOR :num]
   COLLECTION SET :collect [[INDICATOR] :collect_ind]
      TO :hv [[INDICATOR] :hv_ind] ;

Variables

num (IN)

This optional scalar value is the maximum number of elements to be updated in the slice. If this clause is omitted, the array size of the host variable (scalar has 1) determines the number of elements updated from the collection.

collect (OUT)

A host variable C collection descriptor.

collect_ind (OUT)

An optional indicator variable which determines the NULL status of the collection.

hv (IN)

A host variable that contains the values to be updated in the collection.

hv_ind (IN)

An associated indicator variable representing the NULL status of the host variable.

Usage Notes

The following restrictions apply:

  • A COLLECTION GET must be executed before a COLLECTION SET.

  • The starting and ending indexes of the slice always remain unchanged. This is true even if less elements are placed in the collection than can be stored in the current slice. A SET statement never changes the endpoints of the slice. It only changes elements in the current slice.

  • The COLLECTION SET is intended only to update those elements in the current slice. You cannot append new elements to a collection using the COLLECTION SET statement.

  • If an attempt is made to SET more elements than the current slice contains, only those elements that fit in the existing slice are updated. Remaining elements beyond the end of the slice are unaffected and any extra values supplied by the host variable are unused.

The dimension of the host variable or the value num specified in an optional FOR clause gives the maximum number of elements requested to be updated in the collection.

The variable sqlca.sqlerrd[2] returns the number of elements successfully updated by the previous SET statement (not a cumulative total), which can be less than the number requested to be set (as for the GET), for these cases:

  • The C collection descriptor has not been correctly initialized in a syntactically correct ALLOCATE statement, or is NULL, or otherwise invalid.

  • The collection is empty.

  • There were fewer elements in the remaining portion of the collection than were requested to be set given the position of the current slice in the collection.

  • The end of the current slice was breached. This can happen only when an attempt is made to set more elements than are in the existing slice.

  • A TRIM has been performed on the collection, bringing the maximum endpoint index value of the collection below the starting index of the current slice.

Issuing a COLLECTION SET immediately after a COLLECTION GET or SET will only update the values of the elements in the existing slice. A COLLECTION GET that immediately follows a COLLECTION SET will advance the slice as already described.

COLLECTION RESET

Purpose

Reset the collection slice endpoints back to the beginning of the collection.

Syntax

EXEC SQL [AT [:]database]
   COLLECTION RESET :collect 
      [ [INDICATOR] :collect_ind] ;

Variables

collect (IN/OUT)

The collection whose endpoints are to be reset.

collect_ind

Optional indicator variable determining NULL status of the collection.

Usage Notes

An error occurs if the given collection is NULL, or otherwise invalid.

COLLETION RESET does not affect the size or contents of the collection.

COLLECTION APPEND

Purpose

This statement appends a set of elements (one or more) to the end of a collection, increasing the size of the collection.

Syntax

EXEC SQL [AT [:]database] [FOR :num]
   COLLECTION APPEND :src [[INDICATOR] :src_ind]
      TO :collect [[INDICATOR] :collect_ind] ;

Variables

num (IN)

A scalar that contains the number of elements to be appended. If absent, the array size of src is the number of elements to be appended.

src (IN)

Scalar or array of elements to be appended to the collection.

src_ind (IN)

An optional indicator variable (scalar or array) determining the NULL status of the elements appended.

collect (IN OUT)

The collection to which elements are appended.

collect_ind (IN)

An optional indicator variable determining the NULL status of the collection.

Usage Notes

Elements are appended one at a time (the collection is increased in size by one, the data is copied to that element, and so on).

The variable sqlca.sqlerrd[2] returns the number of elements successfully appended by the latest APPEND (not a cumulative total). An error results if there is an attempt to add elements beyond the upper bound of the collection, or to append to a NULL collection. Only the elements that fit will be appended.

COLLECTION TRIM

Purpose

This statement removes elements from the end of a collection.

Syntax

EXEC SQL [AT [:]database]
   COLLECTION TRIM :num
      FROM :collect [[INDICATOR] :collect_ind] ;

Variables

num (IN)

A host scalar variable which is how many elements are to be removed. The maximum permitted value is two Gigabytes.

collect (IN OUT)

The collection to be trimmed.

collect_ind (IN)

An optional indicator variable determining the NULL status of the collection.

Usage Notes

Restrictions applied:

  • The FOR clause is not allowed.

  • The maximum value of num is 2 Gigabytes (the largest number in a 4-byte signed binary variable.

  • No indicator is allowed with num.

If num is greater than the size of the collection, an error is returned. A warning is returned if a TRIM removes any elements from the current slice.

COLLECTION DESCRIBE

Purpose

This statement returns information about a collection.

Syntax

EXEC SQL [AT [:]database] 
   COLLECTION DESCRIBE :collect [[INDICATOR] :collect_ind]
      GET attribute1 [{, attributeN}]
         INTO :hv1 [[INDICATOR] :hv_ind1] [{, hvN [[INDICATOR] :hv_indN]}] ;

where attributeN is:

DATA_SIZE | TYPECODE | DATA_TYPE | NUM_ELEMENTS
   | PRECISION | SCALE | TYPE_NAME | TYPE_SCHEMA | SIZE | TABLE_SIZE

Variables

collect (IN)

The host variable C collection descriptor.

collect_ind (IN)

An optional indicator variable containing the NULL status of the collection.

hv1 .. hvN (OUT)

Output host variables where the information is to be stored.

hv_ind1 .. hv_indN (OUT)

Indicator variables for the output host variables.

Usage Notes

These restrictions are in effect:

  • The collection cannot be NULL.

  • Host variable types should be compatible with the types of the returned attributes.

  • Indicator variables for the attributes are only required for TYPE_NAME and TYPE_SCHEMA attribute values where text truncation can occur.

  • A FOR clause is not allowed.

  • The variable sqlca.sqlerrd[2] returns the number of successful attributes retrieved with no errors. If the DESCRIBE statement incurs an error, then sqlca.sqlqerrd[2] contains the number of attributes returned before that error, and is one less than the attribute where the error occurred.

The following table gives attributes, descriptions, and C types for the attributes retrieved:

Table 18-3 Attributes of a COLLECTION DESCRIBE

AttributeDescriptionC TypeNotes

DATA_SIZE

The maximum size of the type attribute. The returned length is in bytes for strings. It is 22 for NUMBERs.

unsigned short

Not valid for object or object REF elements.

TYPECODE

OCI type code.

OCITypeCode

-

DATA_TYPE

The internal numeric type code of the collection items.

unsigned short

-

NUM_ELEMENTS

The maximum number of elements in the varray.

unsigned int

Only valid for type VARRAY.

PRECISION

The precision of numeric type attributes. When the returned value is 0 the item being described is not initialized and is NULL in the data dictionary.

unsigned char

Only valid for elements of type NUMBER.

SCALE

The scale of numeric type attributes. When the returned value is -127 the item being described is not initialized and is NULL in the data dictionary.

signed char

Only valid for elements of type NUMBER.

TYPE_NAME

A string containing the name of the type. For an object type, its name is returned. For a REF the name of the data type pointed to by the REF is returned. External data types allowed are CHARZ, STRING, and VARCHAR.

char *

Only valid for object and object REF elements.

TYPE_SCHEMA

The schema name where the type was created. External data types allowed are CHARZ, STRING, and VARCHAR.

char *

Only valid for object and object REF elements.

SIZE

The number of elements actually stored in the collection. For nested tables, SIZE includes the empty elements. A TRIM statement decrements the SIZE of the collection by the number of elements trimmed.

signed int

-

TABLE_SIZE

The number of elements in the nested table. It does not include the gaps.

signed int

Only valid for nested tables.


Notes on the Table

Pro*C/C++ only supports the external datatypes CHARZ, STRING, and VARCHAR for the attributes TYPE_NAME and TYPE_SCHEMA.

All the DESCRIBE attributes, except for SIZE and TABLE_SIZE, depend on the element type of the collection and are independent of any one particular instance of the collection. The SIZE and TABLE_SIZE attributes, on the other hand, are attributes whose values strictly depend on a specific instance of the collection. The SIZE or TABLE_SIZE values will change from one collection instance to another in cases where an allocated collection descriptor is being reused to refer to different instances of the same collection. NUM_ELEMENTS is an attribute of the collection type (a VARRAY in this case), not the collection element type, and is independent of any one particular instance of the collection.

Rules for the Use of Collections

  • A host variable collection descriptor must always be explicitly allocated.

  • The metadata (internal Oracle data from the database about a collection and its element type) is collected during an ALLOCATE. That metadata becomes invalid when the connection in which the ALLOCATE was made is closed or if the type changes after the ALLOCATE.

  • Use the ALLOCATE and FREE statements to begin and end use of each C collection descriptor.

Collection Example Code

Here are examples of SQL and Pro*C/C++ code that illustrates the use of the COLLECTION SQL statements:

Type and Table Creation

Assuming a connection as scott/tiger, we create the following types using SQL:

CREATE TYPE employee AS OBJECT 
(
  name   VARCHAR2(10),
  salary NUMBER(8,2)
) ;
CREATE TYPE employees AS VARRAY(15) OF employee ;
CREATE TYPE department AS OBJECT
(
  name VARCHAR2(15),
  team employees
) ;

Now for the header file generated by the Object Type Translator. The following intype file (called in.typ) will be used as input to OTT:

case=lower
type employee
type employees
type department

The following command will generate the header file:

ott intype=in.typ outtype=out.typ hfile=example.h user=scott/tiger code=c

This header file, example.h, is produced by OTT:

#ifndef EXAMPLE_ORACLE
# define EXAMPLE_ORACLE

#ifndef OCI_ORACLE
# include <oci.h>
#endif

typedef OCIRef employee_ref ;
typedef OCIArray employees ;
typedef OCIRef department_ref ;

struct employee
{
   OCIString * name ;
   OCINumber salary ;
} ;
typedef struct employee employee ;

struct employee_ind
{
   OCIInd _atomic ;
   OCIInd name ;
   OCIInd salary ;
} ;
typedef struct employee_ind employee_ind ;
struct department_ind
{
   OCIInd _atomic ;
   OCIInd name ;
   OCIInd team ;
} ;
typedef struct department_ind department_ind ;

#endif

Note:

The oci.h file includes orl.h which has a typedef that defines OCIArray. That typedef looks like the following 'typedef OCIColl OCIArray;' where OCIColl is an opaque structure representing a generic collection.

Now create a simple table that has one column as follows:

CREATE TABLE division ( subdivision department ) ;

Now we will insert a few rows into that table:

INSERT INTO division (subdivision) VALUES
(department('Accounting',
            employees(employee('John', 75000),
                      employee('Jane', 75000)))
);
INSERT INTO division (subdivision) VALUES
(department('Development',
            employees(employee('Peter', 80000),
                      employee('Paula', 80000)))
) ;
INSERT INTO division (subdivision) VALUES
(department('Research',
            employees(employee('Albert', 95000),
                      employee('Alison', 95000)))
);

We can now use these type definitions and table information in the examples to follow.

GET and SET Example

Suppose we want to retrieve the values from the collection attribute of an example object, modify them in some simple way and place them back into the collection.

First, we need to include example.h and declare a variable for the object type:

#include <example.h>
department *dept_p ;

Now we will select the 'Development' department from the division table:

       EXEC SQL ALLOCATE :dept_p ;
       EXEC SQL SELECT subdivision INTO :dept_p
          FROM division WHERE name = 'Development' ;

We also need a variable for the team varray of employee object types and one to represent a single employee object. We will be giving all team members of the 'Development' department a raise so we need a variable for that also:

       employees *emp_array ;
       employee *emp_p ;
       double salary ;

Now we must ALLOCATE our varray C Collection and employee object descriptors. We will retrieve the actual collection from the object using the navigational interface:

       EXEC SQL ALLOCATE :emp_array ;
       EXEC SQL ALLOCATE :emp_p ;
       EXEC SQL OBJECT GET team FROM :dept_p INTO :emp_array ;

We will use a loop to iterate through the varray elements, controlling loop termination by using the WHENEVER directive:

       EXEC SQL WHENEVER NOT FOUND DO break ;
       while (TRUE)
         {

First, retrieve the element from the collection so that we can alter it. The actual element type is an employee object:

            EXEC SQL COLLECTION GET :emp_array INTO :emp_p ;

Now that we have the actual object element, we can then proceed to change an attribute's value using the existing navigational interface. In this case, we give a 10% salary increase to everyone:

            EXEC SQL OBJECT GET salary FROM :emp_p INTO :salary ;
            salary += (salary * .10) ;
            EXEC SQL OBJECT SET salary OF :emp_p TO :salary ;

Once we are done making our changes, we can update the value of the attribute of the object element we are currently at in the collection:

            EXEC SQL COLLECTION SET :emp_array TO :emp_p ;
         }

Once we are done iterating through all of the collection elements, we must then update the column of the table that stores the object that contains the collection we just finished modifying:

     EXEC SQL UPDATE division SET subdivision = :dept_p ;

We can then FREE all of our resources and COMMIT our work thus terminating this sequence of operations:

     EXEC SQL FREE :emp_array ;
     EXEC SQL FREE :emp_p ;
     EXEC SQL FREE :dept_p ;
     EXEC SQL COMMIT WORK ;

Although this is a fairly small and simple example, it is quite comprehensive. It clearly demonstrates how a collection attribute can be retrieved from an object into a C Collection Descriptor using the semantic extensions to the navigational OBJECT GET statement. Using that C Descriptor we then saw how to use the new COLLECTION GET and SET statements to retrieve and update the actual elements of that collection. We used the navigational interface to modify the attribute values of the collection object element type.

DESCRIBE Example

This example illustrates a simple use of the DESCRIBE SQL statement. We want to find out some basic information about a given collection.

First we need our example header file, an object pointer and a SQL Collection Descriptor:

#include <example.h>
department *dept_p ;

Now we ALLOCATE the object pointer and retrieve our object from the table as before:

EXEC SQL ALLOCATE :dept_p ;
EXEC SQL SELECT subdivision INTO :dept_p
   FROM division WHERE name = 'Research' ;

Declare Pro*C/C++ variables to store the collection attribute information we want:

int size ;
char type_name[9] ;
employees *emp_array ;

Allocate the collection descriptor, then use the navigational interface to get the collection attribute from the object:

EXEC SQL ALLOCATE :emp_array ;
EXEC SQL OBJECT GET team FROM :dept_p INTO :emp_array ;

Finally, we can use the new COLLECTION DESCRIBE statement to extract the desired collection attribute information:

EXEC SQL COLLECTION DESCRIBE :emp_array
   GET SIZE, TYPE_NAME INTO :size, :type_name ;

Note:

You are permitted to use host variable names that are the same as the desired collection attribute name, as in this example.

Because the type employees is a VARRAY of object employee, we can extract the type name.

After successful completion of the DESCRIBE, the value of size should be 2 (there are 2 elements, Albert and Alison, in this collection instance, Research). The type_name variable should read "EMPLOYEE\0" (it is a CHARZ by default).

Once we are finished with the SQL Descriptor and the object pointer we can FREE their resources:

EXEC SQL FREE :emp_array ;
EXEC SQL FREE :dept_p ;

We have just illustrated that the DESCRIBE mechanism is used to extract useful information from a C Collection Descriptor about the underlying collection to which the descriptor refers.

RESET Example

Now suppose that instead of giving just the employees in Development a raise, as in the GET and SET example, we give raises to everybody in the entire division.

We start off as before, including our example header file generated by the Object Type Translator. This time, however, we will be using a cursor to iterate through all departments in the division, one at a time:

#include <example.h>
EXEC SQL DECLARE c CURSOR FOR SELECT subdivision FROM division ;

We will need some local variables to manipulate our data:

department *dept_p ;
employees *emp_array ;
employee *emp_p ;
double salary ;
int size ;

Before we can use the object and collection variables, we must first initialize them by using this ALLOCATE statement:

EXEC SQL ALLOCATE :emp_array ;
EXEC SQL ALLOCATE :emp_p ;

Now we are ready to use our cursor to iterate through all of the departments in the division:

EXEC SQL OPEN c ;
EXEC SQL WHENEVER NOT FOUND DO break ;
while (TRUE)
    {
         EXEC SQL FETCH c INTO :dept_p ;

At this point, we have a department object. We need to use the Navigational Interface to extract the 'team' VARRAY attribute from the department:

         EXEC SQL OBJECT GET team FROM :dept_p INTO :emp_array ;

Before we can start referring to the collection, we need to guarantee that the slice endpoints are set to the beginning of the current collection instance (not the end of a previous instance) by use of the RESET statement:

         EXEC SQL COLLECTION RESET :emp_array ;

Now we will iterate through all elements of the varray and update the salaries as we did before. The existing WHENEVER directive remains in effect for this loop as well:

        while (TRUE)
           {
            EXEC SQL COLLECTION GET :emp_array INTO :emp_p ;
            EXEC SQL OBJECT GET salary FROM :emp_p INTO :salary ;
            salary += (salary * .05) ;
            EXEC SQL OBJECT SET salary OF :emp_p TO :salary ;

When we are finished, we'll update the collection attribute:

            EXEC SQL COLLECTION SET :emp_array TO :emp_p ;
           }

As before, we need to update the column of the table that stores the object that contains the collection that we just finished modifying:

        EXEC SQL UPDATE division SET subdivision = :dept_p ;
    }

Loop termination signifies the end of processing. We can now FREE all of our resources and COMMIT our work:

EXEC SQL CLOSE c ;
EXEC SQL FREE :emp_p ;
EXEC SQL FREE :emp_array ;
EXEC SQL FREE :dept_p ;
EXEC SQL COMMIT WORK ;

This example demonstrates how it is possible to reuse an ALLOCATEd Collection Descriptor for different instances of the same collection type. The COLLECTION RESET statement ensures the slice endpoints are set back to the beginning of the current collection instance. They do not remain in their existing positions after being moved during the referencing of a previous collection instance.

By using the COLLECTION RESET statement in this fashion, application developers need not explicitly FREE and reALLOCATE a Collection Descriptor with each new instance of the same collection type.

Example Program:coldemo1.pc

The following program, coldemo1.pc, is in the demo directory.

This example demonstrates three ways for the Pro*C client to navigate through collection-typed database columns. Although the examples presented use nested tables, they also apply to varrays.

Here is the SQL*Plus file, coldemo1.sql, that sets up the table using the inserts and data contained in calidata.sql:

REM ************************************************************************
REM ** This is a SQL*Plus script to demonstrate collection manipulation
REM ** in Pro*C/C++.
REM ** Run this script before executing OTT for the coldemo1.pc program
REM ************************************************************************

connect scott/tiger;

set serveroutput on;

REM Make sure database has no old version of the table and types

DROP TABLE county_tbl;
DROP TYPE citytbl_t;
DROP TYPE city_t;

REM ABSTRACTION:
REM The counties table contains census information about each of the
REM counties in a particular U.S. state (California is used here).  
REM Each county has a name, and a collection of cities.  
REM Each city has a name and a population.

REM IMPLEMENTATION:
REM Our implementation follows this abstraction
REM Each city is implemented as a "city" OBJECT, and the
REM collection of cities in the county is implemented using 
REM a NESTED TABLE of "city" OBJECTS.

CREATE TYPE city_t AS OBJECT (name CHAR(30), population NUMBER);
/

CREATE TYPE citytbl_t AS TABLE OF city_t;
/

CREATE TABLE county_tbl (name CHAR(30), cities citytbl_t)
  NESTED TABLE cities STORE AS citytbl_t_tbl;

REM Load the counties table with data.  This example uses estimates of
REM California demographics from Janurary 1, 1996.

@calidata.sql;

REM Commit to save
COMMIT;

See the comments at the beginning of the following program for explanations of how to set up the table, and then the functionality demonstrated by this program.

            /* ***************************************** */
            /*   Demo program for Collections in Pro*C   */
            /* ***************************************** */

/*****************************************************************************
 
   In SQL*Plus, run the SQL script coldemo1.sql to create:
     - 2 types: city_t (OBJECT) and citytbl_t (NESTED TABLE)
     - 1 relational table county_tbl which contains a citytbl_t nested table
  
   Next, run the Object Type Translator (OTT) to generate typedefs of C structs
   corresponding to the city_t and citytbl_t types in the databases:
     ott int=coldemo1.typ outt=out.typ hfile=coldemo1.h code=c user=scott/tiger
  
   Then, run the Pro*C/C++ Precompiler as follows:
     proc coldemo1 intype=out.typ
  
   Finally, link the generated code using the Pro*C Makefile:
     (Compiling and Linking applications is a platform dependent step).
  
 ****************************************************************************
 
   Scenario: 
     We consider the example of a database used to store census 
     information for the state of California.  The database has a table
     representing the counties of California.  Each county has a name 
     and a collection of cities.  Each city has a name and a population.

   Application Overview:
     This example demonstrates three ways for the Pro*C client to 
     navigate through collection-typed database columns.  Although the
     examples presented use nested tables, they also apply to varrays.
     Collections-specific functionality is demonstrated in three
     different functions, as described in the following section.
        
     PrintCounties shows examples of 
     * Declaring collection-typed host variables and arrays
     * Allocating and freeing collection-typed host variables
     * Using SQL to load a collection-typed host variable
     * Using indicators for collection-typed host variables
     * Using OCI to examine a collection-typed host variables

     PrintCounty shows examples of 
     * Binding a ref cursor host variable to a nested table column
     * Allocating and freeing a ref cursor
     * Using the SQL "CURSOR" clause

     CountyPopulation shows examples of 
     * Binding a "DECLARED" cursor to a nested table column
     * Using the SQL "THE" clause

****************************************************************************/

/* Include files */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>                                /* SQL Communications Area */
#include <coldemo1.h>        /* OTT-generated header with C typedefs for the */
                                      /* database types city_t and citytbl_t */
#ifndef EXIT_SUCCESS
# define EXIT_SUCCESS   0
#endif
#ifndef EXIT_FAILURE
# define EXIT_FAILURE   1
#endif 

#define CITY_NAME_LEN    30
#define COUNTY_NAME_LEN  30
#define MAX_COUNTIES     60

/* Function prototypes */

#if defined(__STDC__)
 void OptionLoop( void );
 boolean GetCountyName( char *countyName );
 void PrintCounties( void );
 long CountyPopulation( CONST char *countyName );
 void PrintCounty( CONST char *countyName );
 void PrintSQLError( void );
 void PrintCountyHeader( CONST char *county );
 void PrintCity( city_t *city );
#else
 void OptionLoop();
 boolean GetCountyName(/*_ char *countyName _*/);
 void PrintCounties();
 long CountyPopulation(/*_ CONST char *countyName _*/);
 void PrintCounty(/*_ CONST char *countyName _*/);
 void PrintSQLError(/*_ void _*/);
 void PrintCountyHeader(/*_ CONST char *county _*/);
 void PrintCity(/*_ city_t *city _*/);
#endif

/* 
 * NAME
 *   main
 * COLLECTION FEATURES
 *   none
 */
int main()
{
  char * uid = "scott/tiger";
  
  EXEC SQL WHENEVER SQLERROR DO PrintSQLError();

  printf("\nPro*Census: Release California - Jan 1 1996.\n");
  EXEC SQL CONNECT :uid;
  
  OptionLoop();

  printf("\nGoodbye\n\n");
  EXEC SQL ROLLBACK RELEASE;
  return(EXIT_SUCCESS);
}

/* 
 * NAME
 *   OptionLoop
 * DESCRIPTION
 *   A command dispatch routine.
 * COLLECTION FEATURES
 *   none
 */
void OptionLoop()
{
  char choice[30];
  boolean done = FALSE;
  char countyName[COUNTY_NAME_LEN + 1];

  while (!done)
  {
    printf("\nPro*Census options:\n");
    printf("\tlist information for (A)ll counties\n");
    printf("\tlist information for one (C)ounty\n");
    printf("\tlist (P)opulation total for one county\n");
    printf("\t(Q)uit\n");
    printf("Choice? ");

    fgets(choice, 30, stdin);
    switch(toupper(choice[0]))
    {
    case 'A':
      PrintCounties();
      break;
    case 'C':
      if (GetCountyName(countyName)) 
        PrintCounty(countyName);
      break;
    case 'P':
      if (GetCountyName(countyName)) 
        printf("\nPopulation for %s county: %ld\n", 
               countyName, CountyPopulation(countyName));
      break;
    case 'Q':
      done = TRUE;
      break;
    default:
      break;
    }
  }
}


/* 
 * NAME
 *   GetCountyName
 * DESCRIPTION
 *   Fills the passed buffer with a client-supplied county name.
 *   Returns TRUE if the county is in the database, and FALSE otherwise.
 * COLLECTION FEATURES
 *   none
 */
boolean GetCountyName(countyName)
  char *countyName;
{
  int   count;
  int   i;

  printf("County name? ");
  fgets(countyName, COUNTY_NAME_LEN + 1, stdin);

  /* Convert the name to uppercase and remove the trailing '\n' */
  for (i = 0; countyName[i] != '\0'; i++)
    {
      countyName[i] = (char)toupper(countyName[i]);
      if (countyName[i] == '\n') countyName[i] = '\0';
    }

  EXEC SQL SELECT COUNT(*) INTO :count 
    FROM county_tbl WHERE name = :countyName;

  if (count != 1)
    {
      printf("\nUnable to find %s county.\n", countyName);
      return FALSE;
    }
  else
    return TRUE;
}


/* 
 * NAME
 *   PrintCounties
 * DESCRIPTION
 *   Prints the population and name of each city of every county 
 *   in the database.
 * COLLECTION FEATURES
 *   The following features correspond to the inline commented numbers
 *   1) Host variables for collection-typed objects are declared using 
 *      OTT-generated types.  Both array and scalar declarations are allowed.
 *      Scalar declarations must be of type pointer-to-collection-type, and
 *      array declarations must of type array-of-pointer-to-collection-type.
 *   2) SQL ALLOCATE should be used to allocate space for the collection.
 *      SQL FREE should be used to free the memory once the collection is
 *      no longer needed.  The host variable being allocated or free'd 
 *      can be either array or scalar.
 *   3) SQL is used to load into or store from collection-typed host variables
 *      and arrays.  No special syntax is needed.
 *   4) The type of an indicator variable for a collection is OCIInd.
 *      An indicators for a collections is declared and used just like
 *      an indicator for an int or string.
 *   5) The COLLECTION GET Interface is used to access and manipulate the
 *      contents of collection-typed host variables.  Each member of the
 *      collection used here has type city_t, as generated by OTT.
 */
void PrintCounties()
{
  citytbl_t *cityTable[MAX_COUNTIES];                                 /* 1 */
  OCIInd     cityInd[MAX_COUNTIES];                                   /* 4 */
  char       county[MAX_COUNTIES][COUNTY_NAME_LEN + 1];
  int        i, numCounties;
  city_t    *city;

  EXEC SQL ALLOCATE :cityTable;                                       /* 2 */
  EXEC SQL ALLOCATE :city;
  
  EXEC SQL SELECT name, cities
    INTO :county, :cityTable:cityInd FROM county_tbl;              /* 3, 4 */

  numCounties = sqlca.sqlerrd[2];

  for (i = 0; i < numCounties; i++) 
  {
    if (cityInd[i] == OCI_IND_NULL)                                   /* 4 */
      {
        printf("Unexpected NULL city table for %s county\n", county[i]);
      }
    else
      {                                                               /* 5 */
        PrintCountyHeader(county[i]);
        EXEC SQL WHENEVER NOT FOUND DO break;
        while (TRUE)
          {
            EXEC SQL COLLECTION GET :cityTable[i] INTO :city;
            PrintCity(city);
          }
        EXEC SQL WHENEVER NOT FOUND CONTINUE;
      }
  }

  EXEC SQL FREE :city;
  EXEC SQL FREE :cityTable;                                           /* 2 */
}


/* 
 * NAME
 *   PrintCountyHeader
 * COLLECTION FEATURES
 *   none
 */
void PrintCountyHeader(county)
  CONST char *county;
{
  printf("\nCOUNTY: %s\n", county);
}

/* 
 * NAME
 *   PrintCity
 * COLLECTION FEATURES
 *   none
 */
void PrintCity(city)
  city_t *city;
{
  varchar newCITY[CITY_NAME_LEN];
  int newPOP;

  EXEC SQL OBJECT GET NAME, POPULATION from :city INTO :newCITY, :newPOP;
  printf("CITY: %.*s POP: %d\n", CITY_NAME_LEN, newCITY.arr, newPOP);
}

/* 
 * NAME
 *   PrintCounty
 * DESCRIPTION
 *   Prints the population and name of each city in a particular county.
 * COLLECTION FEATURES
 *   The following features correspond to the inline commented numbers
 *   1) A ref cursor host variable may be used to scroll through the 
 *      rows of a collection. 
 *   2) Use SQL ALLOCATE/FREE to create and destroy the ref cursor.
 *   3) The "CURSOR" clause in SQL can be used to load a ref cursor 
 *      host variable.  In such a case, the SELECT ... INTO does an
 *      implicit "OPEN" of the ref cursor.
 * IMPLEMENTATION NOTES 
 *   In the case of SQL SELECT statements which contain an embedded 
 *   CURSOR(...) clause, the Pro*C "select_error" flag must be "no"
 *   to prevent cancellation of the parent cursor.
 */
void PrintCounty(countyName)
  CONST char *countyName;
{
  sql_cursor cityCursor;                                              /* 1 */
  city_t *city;

  EXEC SQL ALLOCATE :cityCursor;                                      /* 2 */
  EXEC SQL ALLOCATE :city;                                        
  
  EXEC ORACLE OPTION(select_error=no);
  EXEC SQL SELECT 
    CURSOR(SELECT VALUE(c) FROM TABLE(county_tbl.cities) c)
      INTO :cityCursor 
      FROM county_tbl
      WHERE county_tbl.name = :countyName;                            /* 3 */
  EXEC ORACLE OPTION(select_error=yes);
  
  PrintCountyHeader(countyName);

  EXEC SQL WHENEVER NOT FOUND DO break;
  while (TRUE)
    {
      EXEC SQL FETCH :cityCursor INTO :city;
      PrintCity(city);
    }
  EXEC SQL WHENEVER NOT FOUND CONTINUE;

  EXEC SQL CLOSE :cityCursor;

  EXEC SQL FREE :cityCursor;                                         /* 2 */
  EXEC SQL FREE :city; 
}


/* 
 * NAME
 *   CountyPopulation
 * DESCRIPTION
 *   Returns the number of people living in a particular county.
 * COLLECTION FEATURES
 *   The following features correspond to the inline commented numbers
 *   1) A "DECLARED" cursor may be used to scroll through the 
 *      rows of a collection. 
 *   2) The "THE" clause in SQL is used to convert a single nested-table
 *      column into a table.
 */
long CountyPopulation(countyName)
  CONST char *countyName;
{
  long population;
  long populationTotal = 0;

  EXEC SQL DECLARE cityCursor CURSOR FOR
    SELECT c.population 
    FROM THE(SELECT cities FROM county_tbl 
              WHERE name = :countyName) AS c;                     /* 1, 2 */

  EXEC SQL OPEN cityCursor;

  EXEC SQL WHENEVER NOT FOUND DO break;
  while (TRUE)
    {
      EXEC SQL FETCH cityCursor INTO :population;
      populationTotal += population;
    }
  EXEC SQL WHENEVER NOT FOUND CONTINUE;

  EXEC SQL CLOSE cityCursor;
  return populationTotal;
}


/* 
 * NAME
 *   PrintSQLError
 * DESCRIPTION
 *   Prints an error message using info in sqlca and calls exit.
 * COLLECTION FEATURES
 *   none
 */ 
void PrintSQLError()
{
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  printf("SQL error occurred...\n");
  printf("%.*s\n", (int)sqlca.sqlerrm.sqlerrml,
         (CONST char *)sqlca.sqlerrm.sqlerrmc);
  EXEC SQL ROLLBACK RELEASE;
  exit(EXIT_FAILURE);
}
           
PKŎSPK+AOEBPS/pc_07pls.htm Embedded PL/SQL

7 Embedded PL/SQL

This chapter shows you how to improve performance by embedding PL/SQL transaction processing blocks in your program. This chapter contains the following topics:

Advantages of PL/SQL

This section looks at some of the features and benefits offered by PL/SQL, such as:

For more information about PL/SQL, see Oracle Database PL/SQL Language Reference.

Better Performance

PL/SQL can help you reduce overhead, improve performance, and increase productivity. For example, without PL/SQL, Oracle must process SQL statements one at a time. Each SQL statement results in another call to the Server and higher overhead. However, with PL/SQL, you can send an entire block of SQL statements to the Server. This minimizes communication between your application and Oracle.

Integration with Oracle

PL/SQL is tightly integrated with the Oracle Server. For example, most PL/SQL datatypes are native to the Oracle data dictionary. Furthermore, you can use the %TYPE attribute to base variable declarations on column definitions stored in the data dictionary, as the following example shows:

job_title  emp.job%TYPE; 

That way, you need not know the exact datatype of the column. Furthermore, if a column definition changes, the variable declaration changes accordingly and automatically. This provides data independence, reduces maintenance costs, and allows programs to adapt as the database changes.

Cursor FOR Loops

With PL/SQL, you need not use the DECLARE, OPEN, FETCH, and CLOSE statements to define and manipulate a cursor. Instead, you can use a cursor FOR loop, which implicitly declares its loop index as a record, opens the cursor associated with a given query, repeatedly fetches data from the cursor into the record, then closes the cursor. An example follows:

DECLARE 
... 
BEGIN 
   FOR emprec IN (SELECT empno, sal, comm FROM emp) LOOP 
   IF emprec.comm / emprec.sal > 0.25 THEN ... 
   ... 
END LOOP; 
END; 

Notice that you use dot notation to reference components in the record.

Procedures and Functions

PL/SQL has two types of subprograms called procedures and functions, which aid application development by letting you isolate operations. Generally, you use a procedure to perform an action and a function to compute a value.

Procedures and functions provide extensibility. That is, they let you tailor the PL/SQL language to suit your needs. For example, if you need a procedure that creates a new department, just write your own as follows:

PROCEDURE create_dept 
  (new_dname  IN CHAR(14), 
   new_loc    IN CHAR(13), 
   new_deptno OUT NUMBER(2)) IS 
BEGIN 
   SELECT deptno_seq.NEXTVAL INTO new_deptno FROM dual; 
   INSERT INTO dept VALUES (new_deptno, new_dname, new_loc); 
END create_dept; 

When called, this procedure accepts a new department name and location, selects the next value in a department-number database sequence, inserts the new number, name, and location into the dept table, then returns the new number to the caller.

You use parameter modes to define the behavior of formal parameters. There are three parameter modes: IN (the default), OUT, and IN OUT. An IN parameter lets you pass values to the subprogram being called. An OUT parameter lets you return values to the caller of a subprogram. An IN OUT parameter lets you pass initial values to the subprogram being called and return updated values to the caller.

The datatype of each actual parameter must be convertible to the datatype of its corresponding formal parameter. Table 7-1 shows the legal conversions between datatypes.

Packages

PL/SQL lets you bundle logically related types, program objects, and subprograms into a package. With the Procedural Database Extension, packages can be compiled and stored in an Oracle database, where their contents can be shared by many applications.

Packages usually have two parts: a specification and a body. The specification is the interface to your applications; it declares the types, constants, variables, exceptions, cursors, and subprograms available for use. The body defines cursors and subprograms; it implements the specification. In the following example, you "package" two employment procedures:

PACKAGE emp_actions IS  -- package specification 
  PROCEDURE hire_employee (empno NUMBER, ename CHAR, ...); 
 
  PROCEDURE fire_employee (emp_id NUMBER); 
END emp_actions; 
 
PACKAGE BODY emp_actions IS  -- package body 
  PROCEDURE hire_employee (empno NUMBER, ename CHAR, ...) IS 
  BEGIN 
    INSERT INTO emp VALUES (empno, ename, ...); 
  END hire_employee; 
 
  PROCEDURE fire_employee (emp_id NUMBER) IS 
  BEGIN 
    DELETE FROM emp WHERE empno = emp_id; 
  END fire_employee; 
END emp_actions; 

Only the declarations in the package specification are visible and accessible to applications. Implementation details in the package body are hidden and inaccessible.

PL/SQL Tables

PL/SQL provides a composite datatype named TABLE. Objects of type TABLE are called PL/SQL tables, which are modeled as (but not the same as) database tables. PL/SQL tables have only one column and use a primary key to give you array-like access to rows. The column can belong to any scalar type (such as CHAR, DATE, or NUMBER), but the primary key must belong to type BINARY_INTEGER, PLS_INTEGER or VARCHAR2.

You can declare PL/SQL table types in the declarative part of any block, procedure, function, or package. In the following example, you declare a TABLE type called NumTabTyp:

... 
DECLARE 
   TYPE NumTabTyp IS TABLE OF NUMBER 
      INDEX BY BINARY_INTEGER; 
... 
BEGIN 
   ... 
END; 
... 

Once you define type NumTabTyp, you can declare PL/SQL tables of that type, as the next example shows:

num_tab  NumTabTyp; 

The identifier num_tab represents an entire PL/SQL table.

You reference rows in a PL/SQL table using array-like syntax to specify the primary key value. For example, you reference the ninth row in the PL/SQL table named num_tab as follows:

num_tab(9) ... 

User-Defined Records

You can use the %ROWTYPE attribute to declare a record that represents a row in a table or a row fetched by a cursor. However, you cannot specify the datatypes of components in the record or define components of your own. The composite datatype RECORD lifts those restrictions.

Objects of type RECORD are called records. Unlike PL/SQL tables, records have uniquely named components, which can belong to different datatypes. For example, suppose you have different kinds of data about an employee such as name, salary, hire date, and so on. This data is dissimilar in type but logically related. A record that contains such components as the name, salary, and hire date of an employee would let you treat the data as a logical unit.

You can declare record types and objects in the declarative part of any block, procedure, function, or package. In the following example, you declare a RECORD type called DeptRecTyp:

DECLARE 
TYPE DeptRecTyp IS RECORD 
    (deptno  NUMBER(4) NOT NULL, -- default is NULL allowed 
    dname   CHAR(9), 
    loc     CHAR(14)); 

Notice that the component declarations are like variable declarations. Each component has a unique name and specific datatype. You can add the NOT NULL option to any component declaration and so prevent the assigning of NULLs to that component.

Once you define type DeptRecTyp, you can declare records of that type, as the next example shows:

dept_rec  DeptRecTyp; 

The identifier dept_rec represents an entire record.

You use dot notation to reference individual components in a record. For example, you reference the dname component in the dept_rec record as follows:

dept_rec.dname ... 

Embedded PL/SQL Blocks

The Pro*C/C++ Precompiler treats a PL/SQL block like a single embedded SQL statement. So, you can place a PL/SQL block anywhere in a program that you can place a SQL statement.

To embed a PL/SQL block in your Pro*C/C++ program, simply bracket the PL/SQL block with the keywords EXEC SQL EXECUTE and END-EXEC as follows:

EXEC SQL EXECUTE
DECLARE
... 
BEGIN 
   ... 
END; 
END-EXEC; 

The keyword END-EXEC must be followed by a semicolon.

After writing your program, you precompile the source file in the usual way.

When the program contains embedded PL/SQL, you must use the SQLCHECK=SEMANTICS command-line option, since the PL/SQL must be parsed by the Oracle Server. SQLCHECK=SEMANTICS requires the USERID option also, to connect to a server.

Host Variables

Host variables are the key to communication between a host language and a PL/SQL block. Host variables can be shared with PL/SQL, meaning that PL/SQL can set and reference host variables.

For example, you can prompt a user for information and use host variables to pass that information to a PL/SQL block. Then, PL/SQL can access the database and use host variables to pass the results back to your host program.

Inside a PL/SQL block, host variables are treated as global to the entire block and can be used anywhere a PL/SQL variable is allowed. Like host variables in a SQL statement, host variables in a PL/SQL block must be prefixed with a colon. The colon sets host variables apart from PL/SQL variables and database objects.


Note:

To use VARCHAR, CHARZ, or STRING types as output host variables in PL/SQL blocks, you must initialize the length before entering the block. Set the length to the declared (maximum) length of the VARCHAR, CHARZ, or STRING.

Example: Using Host Variables with PL/SQL

The following example illustrates the use of host variables with PL/SQL. The program prompts the user for an employee number, then displays the job title, hire date, and salary of that employee.

char username[100], password[20]; 
char job_title[20], hire_date[9], temp[32]; 
int emp_number; 
float salary; 
 
#include <sqlca.h> 
 
printf("Username? \n"); 
gets(username); 
printf("Password? \n"); 
gets(password); 
 
EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
 
EXEC SQL CONNECT :username IDENTIFIED BY :password; 
printf("Connected to Oracle\n"); 
for (;;) 
{
   printf("Employee Number (0 to end)? "); 
   gets(temp);
   emp_number = atoi(temp); 
 
   if (emp_number == 0) 
   { 
      EXEC SQL COMMIT WORK RELEASE; 
      printf("Exiting program\n"); 
      break; 
   } 
/*-------------- begin PL/SQL block -----------------*/ 
   EXEC SQL EXECUTE 
   BEGIN 
      SELECT job, hiredate, sal 
         INTO :job_title, :hire_date, :salary 
         FROM emp 
         WHERE empno = :emp_number; 
   END; 
   END-EXEC; 
/*-------------- end PL/SQL block -----------------*/ 
 
   printf("Number  Job Title  Hire Date  Salary\n"); 
   printf("------------------------------------\n"); 
   printf("%6d  %8.8s  %9.9s  %6.2f\n", 
   emp_number, job_title, hire_date, salary); 
} 
... 
exit(0); 
 
sql_error: 
EXEC SQL WHENEVER SQLERROR CONTINUE; 
EXEC SQL ROLLBACK WORK RELEASE; 
printf("Processing error\n"); 
exit(1); 

Notice that the host variable emp_number is set before the PL/SQL block is entered, and the host variables job_title, hire_date, and salary are set inside the block.

Complex Example

In the example later, you prompt the user for a bank account number, transaction type, and transaction amount, then debit or credit the account. If the account does not exist, you raise an exception. When the transaction is complete, you display its status.

#include <stdio.h>
#include <sqlca.h>

char username[20];
char password[20];
char status[80]; 
char temp[32];
int  acct_num; 
double trans_amt; 
void sql_error();



main()
{
   char trans_type;

   strcpy(password, "TIGER");
   strcpy(username, "SCOTT");

   EXEC SQL WHENEVER SQLERROR DO sql_error(); 
   EXEC SQL CONNECT :username IDENTIFIED BY :password; 
   printf("Connected to Oracle\n"); 

   for (;;) 
   { 
      printf("Account Number (0 to end)? "); 
      gets(temp);
      acct_num = atoi(temp); 

      if(acct_num == 0) 
      { 
         EXEC SQL COMMIT WORK RELEASE; 
         printf("Exiting program\n"); 
         break; 
      } 
 
      printf("Transaction Type - D)ebit or C)redit? "); 
      gets(temp);
      trans_type = temp[0];
 
      printf("Transaction Amount? "); 
      gets(temp);
      trans_amt = atof(temp); 

/*----------------- begin PL/SQL block -------------------*/ 
      EXEC SQL EXECUTE 
      DECLARE 
         old_bal      NUMBER(9,2); 
         err_msg      CHAR(70); 
         nonexistent  EXCEPTION; 

      BEGIN 
         :trans_type := UPPER(:trans_type); 
         IF :trans_type = 'C' THEN       -- credit the account 
            UPDATE accts SET bal = bal + :trans_amt 
            WHERE acctid = :acct_num; 
            IF SQL%ROWCOUNT = 0 THEN    -- no rows affected 
               RAISE nonexistent; 
            ELSE 
               :status := 'Credit applied'; 
            END IF; 
         ELSIF :trans_type = 'D' THEN    -- debit the account 
            SELECT bal INTO old_bal FROM accts 
               WHERE acctid = :acct_num; 
            IF old_bal >= :trans_amt THEN   -- enough funds 
               UPDATE accts SET bal = bal - :trans_amt 
                  WHERE acctid = :acct_num; 
               :status := 'Debit applied'; 
            ELSE 
               :status := 'Insufficient funds'; 
            END IF; 
         ELSE 
            :status := 'Invalid type: ' || :trans_type; 
         END IF; 
         COMMIT; 
      EXCEPTION 
         WHEN NO_DATA_FOUND OR nonexistent THEN 
            :status := 'Nonexistent account'; 
         WHEN OTHERS THEN 
            err_msg := SUBSTR(SQLERRM, 1, 70); 
            :status := 'Error: ' || err_msg; 
      END; 
      END-EXEC; 
/*----------------- end PL/SQL block ----------------------- */
 
      printf("\nStatus: %s\n", status); 
   } 
   exit(0); 
}


void
sql_error() 
{ 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK WORK RELEASE; 
    printf("Processing error\n"); 
    exit(1); 
}

VARCHAR Pseudotype

You can use the VARCHAR datatype to declare variable-length character strings. If the VARCHAR is an input host variable, you must tell Oracle what length to expect. Therefore, set the length component to the actual length of the value stored in the string component.

If the VARCHAR is an output host variable, Oracle automatically sets the length component. However, to use a VARCHAR (as well as CHARZ and STRING) output host variable in your PL/SQL block, you must initialize the length component before entering the block. So, set the length component to the declared (maximum) length of the VARCHAR, as shown here:

int     emp_number; 
varchar emp_name[10]; 
float   salary; 
... 
emp_name.len = 10;   /* initialize length component */ 
 
EXEC SQL EXECUTE 
  BEGIN 
    SELECT ename, sal INTO :emp_name, :salary 
        FROM emp 
        WHERE empno = :emp_number; 
    ... 
  END; 
END-EXEC; 
... 

Restriction

Do not use C pointer or array syntax in PL/SQL blocks. The PL/SQL compiler does not understand C host-variable expressions and is, therefore, unable to parse them. For example, the following is invalid:

EXEC SQL EXECUTE
    BEGIN
        :x[5].name := 'SCOTT';
        ...
    END;
END-EXEC;

To avoid syntax errors, use a place-holder (a temporary variable), to hold the address of the structure field to populate structures as shown in the following valid example:

name = x[5].name ;
EXEC SQL EXECUTE
    BEGIN
        :name := ...;
        ...
    END;
END-EXEC;

Indicator Variables

PL/SQL does not need indicator variables because it can manipulate NULLs. For example, within PL/SQL, you can use the IS NULL operator to test for NULLs, as follows:

IF variable IS NULL THEN ... 

And, you can use the assignment operator (:=) to assign NULLs, as follows:

variable := NULL; 

However, a host language such as C needs indicator variables because it cannot manipulate NULLs. Embedded PL/SQL meets this need by letting you use indicator variables to

  • Accept NULLs input from a host program

  • Output NULLs or truncated values to a host program

When used in a PL/SQL block, indicator variables are subject to the following rules:

  • You cannot refer to an indicator variable by itself; it must be appended to its associated host variable.

  • If you refer to a host variable with its indicator variable, you must always refer to it that way in the same block.

In the following example, the indicator variable ind_comm appears with its host variable commission in the SELECT statement, so it must appear that way in the IF statement:

... 
EXEC SQL EXECUTE 
BEGIN 
    SELECT ename, comm 
        INTO :emp_name, :commission :ind_comm 
        FROM emp 
        WHERE empno = :emp_number; 
    IF :commission :ind_comm IS NULL THEN ... 
    ... 
END; 
END-EXEC; 

Notice that PL/SQL treats :commission :ind_comm like any other simple variable. Though you cannot refer directly to an indicator variable inside a PL/SQL block, PL/SQL checks the value of the indicator variable when entering the block and sets the value correctly when exiting the block.

NULLs Handling

When entering a block, if an indicator variable has a value of -1, PL/SQL automatically assigns a NULL to the host variable. When exiting the block, if a host variable is NULL, PL/SQL automatically assigns a value of -1 to the indicator variable. In the next example, if ind_sal had a value of -1 before the PL/SQL block was entered, the salary_missing exception is raised. An exception is a named error condition.

... 
EXEC SQL EXECUTE 
BEGIN 
    IF :salary :ind_sal IS NULL THEN 
    RAISE salary_missing; 
END IF; 
... 
END; 
END-EXEC; 
...

Truncated Values

PL/SQL does not raise an exception when a truncated string value is assigned to a host variable. However, if you use an indicator variable, PL/SQL sets it to the original length of the string. In the following example, the host program will be able to tell, by checking the value of ind_name, if a truncated value was assigned to emp_name:

... 
EXEC SQL EXECUTE 
DECLARE 
... 
new_name  CHAR(10); 
BEGIN 
    ... 
    :emp_name:ind_name := new_name; 
    ... 
END; 
END-EXEC; 

Host Arrays

You can pass input host arrays and indicator arrays to a PL/SQL block. They can be indexed by a PL/SQL variable of type BINARY_INTEGER or PLS_INTEGER; VARCHAR2 key types are not permitted. Normally, the entire host array is passed to PL/SQL, but you can use the ARRAYLEN statement (discussed later) to specify a smaller array dimension.

Furthermore, you can use a procedure call to assign all the values in a host array to rows in a PL/SQL table. Given that the array subscript range is m .. n, the corresponding PL/SQL table index range is always 1 .. n - m + 1. For example, if the array subscript range is 5 .. 10, the corresponding PL/SQL table index range is 1 .. (10 - 5 + 1) or 1 .. 6.

In the following example, you pass an array named salary to a PL/SQL block, which uses the array in a function call. The function is named median because it finds the middle value in a series of numbers. Its formal parameters include a PL/SQL table named num_tab. The function call assigns all the values in the actual parameter salary to rows in the formal parameter num_tab.

... 
float salary[100]; 
 
/* populate the host array */ 
 
EXEC SQL EXECUTE 
  DECLARE 
    TYPE NumTabTyp IS TABLE OF REAL 
        INDEX BY BINARY_INTEGER; 
    median_salary  REAL; 
    n  BINARY_INTEGER; 
... 
  FUNCTION median (num_tab NumTabTyp, n INTEGER) 
    RETURN REAL IS 
  BEGIN 
    -- compute median 
  END; 
  BEGIN 
    n := 100; 
    median_salary := median(:salary, n); 
    ... 
  END; 
END-EXEC; 
... 

Note:

In dynamic SQL Method 4, you cannot bind a host array to a PL/SQL procedure with a parameter of type "table." See also"Using Method 4".

You can also use a procedure call to assign all row values in a PL/SQL table to corresponding elements in a host array.


See Also:

"Stored PL/SQL and Java Subprograms" for an example.

Table 7-1 shows the legal conversions between row values in a PL/SQL table and elements in a host array. For example, a host array of type LONG is compatible with a PL/SQL table of type VARCHAR2, LONG, RAW, or LONG RAW. Notably, it is not compatible with a PL/SQL table of type CHAR.

Table 7-1 Legal Datatype Conversions

PL/SQL Table->Host ArrayCHARDATELONGLONG RAWNUMBERRAWROWIDVARCHAR2

CHARF

X

-

-

-

-

-

-

-

CHARZ

X

-

-

-

-

-

-

-

DATE

-

X

-

-

-

-

-

-

DECIMAL

-

-

-

-

X

-

-

-

DISPLAY

-

-

-

-

X

-

-

-

FLOAT

-

-

-

-

X

-

-

-

INTEGER

-

-

-

-

X

-

-

-

LONG

X

-

X

-

-

-

-

-

LONG VARCHAR

-

-

X

X

-

X

-

X

LONG VARRAW

-

-

-

X

-

X

-

-

NUMBER

-

-

-

-

X

-

-

-

RAW

-

-

-

X

-

X

-

-

ROWID

-

-

-

-

-

-

X

-

STRING

-

-

X

X

-

X

-

X

UNSIGNED

-

-

-

-

X

-

-

-

VARCHAR

-

-

X

X

-

X

-

X

VARCHAR2

-

-

X

X

-

X

-

X

VARNUM

-

-

-

-

X

-

-

-

VARRAW

-

-

-

X

-

X

-

-



Note:

The Pro*C/C++ Precompiler does not check your usage of host arrays. For instance, no index range-checking is done.

ARRAYLEN Statement

Suppose you must pass an input host array to a PL/SQL block for processing. By default, when binding such a host array, the Pro*C/C++ Precompiler uses its declared dimension. However, you might not want to process the entire array. In that case, you can use the ARRAYLEN statement to specify a smaller array dimension. ARRAYLEN associates the host array with a host variable, which stores the smaller dimension. The statement syntax is

EXEC SQL ARRAYLEN host_array (dimension) [EXECUTE]; 

where dimension is a 4-byte integer host variable, not a literal or expression.

EXECUTE is an optional keyword.

The ARRAYLEN statement must appear along with, but somewhere after, the declarations of host_array and dimension. You cannot specify an offset into the host array. However, you might be able to use C features for that purpose. The following example uses ARRAYLEN to override the default dimension of a C host array named bonus:

float bonus[100]; 
int dimension; 
EXEC SQL ARRAYLEN bonus (dimension); 
/* populate the host array */ 
... 
dimension = 25;  /* set smaller array dimension */ 
EXEC SQL EXECUTE 
DECLARE 
    TYPE NumTabTyp IS TABLE OF REAL 
    INDEX BY BINARY_INTEGER; 
    median_bonus  REAL; 
    FUNCTION median (num_tab NumTabTyp, n INTEGER) 
        RETURN REAL IS 
  BEGIN 
    -- compute median 
  END; 
  BEGIN 
    median_bonus := median(:bonus, :dimension); 
    ... 
  END; 
END-EXEC; 

Only 25 array elements are passed to the PL/SQL block because ARRAYLEN reduces the array from 100 to 25 elements. As a result, when the PL/SQL block is sent to Oracle for execution, a much smaller host array is sent along. This saves time and, in a networked environment, reduces network traffic.

Optional Keyword EXECUTE

Host arrays used in a dynamic SQL method 2 EXEC SQL EXECUTE statement may have two different interpretations based on the presence or absence of the optional keyword EXECUTE.


See Also:

"Using Method 2"

By default (if the EXECUTE keyword is absent on an ARRAYLEN statement):

  • The host array is considered when determining the number of times a PL/SQL block will be executed. (The minimum array dimension is used.)

  • The host array must not be bound to a PL/SQL index table.

If the keyword EXECUTE is present:

  • The host array must be bound to an index table.

  • The PL/SQL block will be executed one time.

  • All host variables specified in the EXEC SQL EXECUTE statement must either

    • Be specified in an ARRAYLEN ... EXECUTE statement

    • Be scalar.

For example, given the following PL/SQL procedure:

   CREATE OR REPLACE PACKAGE pkg AS 
          TYPE tab IS TABLE OF NUMBER(5) INDEX BY BINARY_INTEGER; 
          PROCEDURE proc1 (parm1 tab, parm2 NUMBER, parm3 tab); 
   END; 
 

The following Pro*C/C++ function demonstrates how host arrays can be used to determine how many times a given PL/SQL block is executed. In this case, the PL/SQL block will be executed 3 times resulting in 3 new rows in the emp table.

func1() 
{ 
  int empno_arr[5] = {1111, 2222, 3333, 4444, 5555}; 
  char *ename_arr[3] = {"MICKEY", "MINNIE", "GOOFY"}; 
  char *stmt1 = "BEGIN INSERT INTO emp(empno, ename) VALUES :b1, :b2; END;"; 
  
  EXEC SQL PREPARE s1 FROM :stmt1; 
  EXEC SQL EXECUTE s1 USING :empno_arr, :ename_arr; 
}  
 

The following Pro*C/C++ function demonstrates how to bind a host array to a PL/SQL index table through dynamic method 2. Note the presence of the ARRAYLEN...EXECUTE statement for all host arrays specified in the EXEC SQL EXECUTE statement.

func2() 
{ 
  int ii = 2; 
  int int_tab[3] = {1,2,3}; 
  int dim = 3; 
  EXEC SQL ARRAYLEN int_tab (dim) EXECUTE;  
 
  char *stmt2 = "begin pkg.proc1(:v1, :v2, :v3); end; "; 
 
  EXEC SQL PREPARE s2 FROM :stmt2; 
  EXEC SQL EXECUTE s2 USING :int_tab, :ii, :int_tab;  
} 
 

However the following Pro*C/C++ function will result in a precompile-time warning because there is no ARRAYLEN...EXECUTE statement for int_arr.

func3() 
{ 
  int int_arr[3]; 
  int int_tab[3] = {1,2,3}; 
  int dim = 3; 
  EXEC SQL ARRAYLEN int_tab (dim) EXECUTE;  
 
  char *stmt3 = "begin pkg.proc1(:v1, :v2, :v3); end; "; 
 
  EXEC SQL PREPARE s3 FROM :stmt3; 
  EXEC SQL EXECUTE s3 USING :int_tab, :int_arr, :int_tab;  
} 

See Also:

Chapter 8, "Host Arrays" for a complete discussion of using arrays.

Cursor Usage in Embedded PL/SQL

The maximum number of cursors your program can use simultaneously is determined by the database initialization parameter OPEN_CURSORS. While executing an embedded PL/SQL block, one cursor. the parent cursor, is associated with the entire block and one cursor, the child cursor, is associated with each SQL statement in the embedded PL/SQL block. Both parent and child cursors count toward the OPEN_CURSORS limit.

The following calculation shows how to determine the maximum number of cursors used. The sum of the cursors used must not exceed OPEN_CURSORS.

   SQL statement cursors
   PL/SQL parent cursors
   PL/SQL child cursors
+  6 cursors for overhead
--------------------------
   Sum of cursors in use

If your program exceeds the limit imposed by OPEN_CURSORS, Oracle gives you an error.

Stored PL/SQL and Java Subprograms

Unlike anonymous blocks, PL/SQL subprograms (procedures and functions) and Java methods can be compiled separately, stored in an Oracle database, and invoked.

For more information about creating Java methods, see Oracle Database Java Developer's Guide

A subprogram explicitly created using an Oracle tool such as SQL*Plus is called a stored subprogram. Once compiled and stored in the data dictionary, it is a database object, which can be re-executed without being recompiled.

When a subprogram within a PL/SQL block or stored procedure is sent to Oracle by your application, it is called an inline subprogram. Oracle compiles the inline subprogram and caches it in the System Global Area (SGA) but does not store the source or object code in the data dictionary.

Subprograms defined within a package are considered part of the package, and thus are called packaged subprograms. Stored subprograms not defined within a package are called standalone subprograms.

Creating Stored Subprograms

You can embed the SQL statements CREATE FUNCTION, CREATE PROCEDURE, and CREATE PACKAGE in a host program, as the following example shows:

EXEC SQL CREATE 
FUNCTION sal_ok (salary REAL, title CHAR) 
RETURN BOOLEAN AS 
min_sal  REAL; 
max_sal  REAL; 
  BEGIN 
    SELECT losal, hisal INTO min_sal, max_sal 
        FROM sals 
        WHERE job = title; 
    RETURN (salary >= min_sal) AND 
           (salary <= max_sal); 
  END sal_ok; 
END-EXEC; 

Notice that the embedded CREATE {FUNCTION | PROCEDURE | PACKAGE} statement is a hybrid. Like all other embedded CREATE statements, it begins with the keywords EXEC SQL (not EXEC SQL EXECUTE). But, unlike other embedded CREATE statements, it ends with the PL/SQL terminator END-EXEC.

In the example later, you create a package that contains a procedure named get_employees, which fetches a batch of rows from the EMP table. The batch size is determined by the caller of the procedure, which might be another stored subprogram or a client application.

The procedure declares three PL/SQL tables as OUT formal parameters, then fetches a batch of employee data into the PL/SQL tables. The matching actual parameters are host arrays. When the procedure finishes, it automatically assigns all row values in the PL/SQL tables to corresponding elements in the host arrays.

EXEC SQL CREATE OR REPLACE PACKAGE emp_actions AS 
    TYPE CharArrayTyp IS TABLE OF VARCHAR2(10) 
        INDEX BY BINARY_INTEGER; 
    TYPE NumArrayTyp IS TABLE OF FLOAT 
        INDEX BY BINARY_INTEGER; 
  PROCEDURE get_employees( 
    dept_number IN     INTEGER, 
    batch_size  IN     INTEGER, 
    found       IN OUT INTEGER, 
    done_fetch  OUT    INTEGER, 
    emp_name    OUT    CharArrayTyp, 
    job_title   OUT    CharArrayTyp, 
    salary      OUT    NumArrayTyp); 
  END emp_actions; 
END-EXEC;
EXEC SQL CREATE OR REPLACE PACKAGE BODY emp_actions AS 
 
    CURSOR get_emp (dept_number IN INTEGER) IS 
        SELECT ename, job, sal FROM emp 
            WHERE deptno = dept_number; 
 
  PROCEDURE get_employees( 
    dept_number IN     INTEGER, 
    batch_size  IN     INTEGER, 
    found       IN OUT INTEGER, 
    done_fetch  OUT    INTEGER, 
    emp_name    OUT    CharArrayTyp, 
    job_title   OUT    CharArrayTyp, 
    salary      OUT    NumArrayTyp) IS 
 
  BEGIN 
    IF NOT get_emp%ISOPEN THEN 
        OPEN get_emp(dept_number); 
    END IF; 
    done_fetch := 0; 
    found := 0; 
    FOR i IN 1..batch_size LOOP 
        FETCH get_emp INTO emp_name(i), 
        job_title(i), salary(i); 
        IF get_emp%NOTFOUND THEN 
            CLOSE get_emp; 
            done_fetch := 1; 
            EXIT; 
        ELSE 
            found := found + 1; 
        END IF; 
    END LOOP; 
  END get_employees; 
END emp_actions; 
END-EXEC; 

You specify the REPLACE clause in the CREATE statement to redefine an existing package without having to drop the package, re-create it, and re-grant privileges on it. For the full syntax of the CREATE statement see Oracle Database SQL Language Reference.

If an embedded CREATE {FUNCTION | PROCEDURE | PACKAGE} statement fails, Oracle generates a warning, not an error.

Calling a Stored PL/SQL or Java Subprogram

To call a stored subprogram from your host program, you can use either an anonymous PL/SQL block, or the CALL embedded SQL statement.

Anonymous PL/SQL Block

In the following example, you call a standalone procedure named raise_salary:

EXEC SQL EXECUTE 
  BEGIN 
    raise_salary(:emp_id, :increase); 
  END; 
END-EXEC; 

Notice that stored subprograms can take parameters. In this example, the actual parameters emp_id and increase are C host variables.

In the next example, the procedure raise_salary is stored in a package named emp_actions, so you must use dot notation to fully qualify the procedure call:

EXEC SQL EXECUTE 
BEGIN 
    emp_actions.raise_salary(:emp_id, :increase); 
END; 
END-EXEC; 

An actual IN parameter can be a literal, scalar host variable, host array, PL/SQL constant or variable, PL/SQL table, PL/SQL user-defined record, procedure call, or expression. However, an actual OUT parameter cannot be a literal, procedure call, or expression.

You must use precompiler option SQLCHECK=SEMANTICS with an embedded PL/SQL block.

In the following example, three of the formal parameters are PL/SQL tables, and the corresponding actual parameters are host arrays. The program calls the stored procedure get_employees repeatedly, displaying each batch of employee data, until no more data is found. This program is available on-line in the demo directory, in the file sample9.pc. A SQL script to create the CALLDEMO stored package is available in the file calldemo.sql.

/*************************************************************
Sample Program 9:  Calling a stored procedure

This program connects to ORACLE using the SCOTT/TIGER
account.  The program declares several host arrays, then
calls a PL/SQL stored procedure (GET_EMPLOYEES in the
CALLDEMO package) that fills the table OUT parameters.  The
PL/SQL procedure returns up to ASIZE values.

Sample9 keeps calling GET_EMPLOYEES, getting ASIZE arrays
each time, and printing the values, until all rows have been
retrieved.  GET_EMPLOYEES sets the done_flag to indicate "no
more data."
*************************************************************/
#include <stdio.h>
#include <string.h>

EXEC SQL INCLUDE sqlca.h;


typedef char asciz[20];
typedef char vc2_arr[11];

EXEC SQL BEGIN DECLARE SECTION;
/* User-defined type for null-terminated strings */
EXEC SQL TYPE asciz  IS STRING(20) REFERENCE;

/* User-defined type for a VARCHAR array element. */
EXEC SQL TYPE vc2_arr IS VARCHAR2(11) REFERENCE;

asciz     username;
asciz     password;
int       dept_no;              /* which department to query? */
vc2_arr   emp_name[10];            /* array of returned names */
vc2_arr   job[10];
float     salary[10];
int       done_flag;
int       array_size;
int       num_ret;                 /* number of rows returned */
EXEC SQL END DECLARE SECTION;

long      SQLCODE;



void print_rows();            /* produces program output      */
void sql_error();             /* handles unrecoverable errors */



main()
{
   int   i;
   char  temp_buf[32];

/* Connect to ORACLE. */
   EXEC SQL WHENEVER SQLERROR DO sql_error();
   strcpy(username, "scott");
   strcpy(password, "tiger");
   EXEC SQL CONNECT :username IDENTIFIED BY :password;
   printf("\nConnected to ORACLE as user: %s\n\n", username);
   printf("Enter department number: ");
   gets(temp_buf);
   dept_no = atoi(temp_buf);/* Print column headers. */
   printf("\n\n");
   printf("%-10.10s%-10.10s%s\n", "Employee", "Job", "Salary");
   printf("%-10.10s%-10.10s%s\n", "--------", "---", "------");

/* Set the array size. */
   array_size = 10;

   done_flag = 0;
   num_ret = 0;

/*  Array fetch loop.
 *  The loop continues until the OUT parameter done_flag is set.
 *  Pass in the department number, and the array size--
 *  get names, jobs, and salaries back.
 */
   for (;;)
   {
      EXEC SQL EXECUTE 
         BEGIN calldemo.get_employees
            (:dept_no, :array_size, :num_ret, :done_flag,
             :emp_name, :job, :salary);
         END;
      END-EXEC;

      print_rows(num_ret);

      if (done_flag)
         break;
   }

/* Disconnect from the database. */
   EXEC SQL COMMIT WORK RELEASE;
   exit(0);
}
void
print_rows(n)
int n;
{
   int i;

    if (n == 0)
    {
        printf("No rows retrieved.\n");
        return;
    }

    for (i = 0; i < n; i++)
        printf("%10.10s%10.10s%6.2f\n",
               emp_name[i], job[i], salary[i]);
}

/* Handle errors. Exit on any error. */
void
sql_error()
{
   char msg[512];
   int buf_len, msg_len;


   EXEC SQL WHENEVER SQLERROR CONTINUE;

   buf_len = sizeof(msg);
   sqlglm(msg, &buf_len, &msg_len);

   printf("\nORACLE error detected:");
   printf("\n%.*s \n", msg_len, msg);

   EXEC SQL ROLLBACK WORK RELEASE;
   exit(1);
}

Remember, the datatype of each actual parameter must be convertible to the datatype of its corresponding formal parameter. Also, before a stored procedure is exited, all OUT formal parameters must be assigned values. Otherwise, the values of corresponding actual parameters are indeterminate.

SQLCHECK=SEMANTICS is required when using an anonymous PL/SQL block.

Remote Access

PL/SQL lets you access remote databases using database links. Typically, database links are established by your DBA and stored in the Oracle data dictionary. A database link tells Oracle where the remote database is located, the path to it, and what Oracle username and password to use. In the following example, you use the database link dallas to call the raise_salary procedure:

EXEC SQL EXECUTE 
BEGIN 
    raise_salary@dallas(:emp_id, :increase); 
END; 
END-EXEC; 

You can create synonyms to provide location transparency for remote subprograms, as the following example shows:

CREATE PUBLIC SYNONYM raise_salary 
FOR raise_salary@dallas; 

The CALL Statement

The concepts presented earlier for the embedded PL/SQL block also hold true for the CALL statement. The CALL embedded SQL statement has the form:

EXEC SQL 
   CALL [schema.] [package.]stored_proc[@db_link](arg1, ...) 
   [INTO :ret_var [[INDICATOR]:ret_ind]] ;

where

schema

the schema containing the procedure

package

the package containing the procedure

st3Tored_proc

is the Java or PL/SQL stored procedure to be called

db_link

is the optional remote database link

arg1...

is the list of arguments (variables, literals, or expressions) passed,

ret_var

is the optional host variable which receives the result

ind_var

the optional indicator variable for ret_var.

You can use either SQLCHECK=SYNTAX, or SEMANTICS with the CALL statement.

CALL Example

If you have created a PL/SQL function fact (stored in the package mathpkg) that takes an integer as input and returns its factorial in an integer:

     EXEC SQL CREATE OR REPLACE PACKAGE BODY mathpkg as 
       function fact(n IN INTEGER) RETURN INTEGER AS
         BEGIN
           IF (n <= 0) then return 1;
           ELSE return n * fact(n - 1);
           END IF;
         END fact;
       END mathpkge;
     END-EXEC.

then to use fact in a Pro*C/C++ application using the CALL statement:

 ...
int num, fact;
...
EXEC SQL CALL mathpkge.fact(:num) INTO :fact ;
...

See Also:


Getting Information about Stored Subprograms


Note:

The Logon Data Area (LDA) is no longer supported in Oracle. The ability to embed OCI Release 7 calls in your Pro*C/C++ program will be phased out by the next major Oracle release.

Chapter 4, "Datatypes and Host Variables" described how to embed OCI calls in your host program. After calling the library routine SQLLDA to set up the LDA, use the OCI call odessp to get useful information about a stored subprogram. When you call odessp, you must pass it a valid LDA and the name of the subprogram. For packaged subprograms, you must also pass the name of the package. odessp returns information about each subprogram parameter such as its datatype, size, position, and so on. For details, see Oracle Call Interface Programmer's Guide.

You can also use the DESCRIBE_PROCEDURE stored procedure, in the DBMS_DESCRIBE package. See Oracle Database Advanced Application Developer's Guide for more information about this procedure.

External Procedures

PL/SQL can call C functions which are external procedures. External procedures (also known as external procedures) are stored in dynamic link libraries (DLL) or, for example, in .so libraries under Solaris.

If the external procedure executes on the server-side, it can call back into the server to execute SQL and PL/SQL in the same transaction. External procedures on the server execute faster than on the client and can interface the database server with external systems and data sources.

In order to execute a server-side external C function, the REGISTER CONNECT embedded SQL statement must be used inside that function. The syntax of the statement is:

EXEC SQL REGISTER CONNECT USING :epctx [RETURNING :host_context] ;

where epctx is the external procedure context (of type pointer to OCIExtProcContext). epctx is passed to the procedure by PL/SQL.

host_context is a runtime context returned by the external procedure. Currently, it is the default (global) context.

The REGISTER CONNECT statement will return the set of OCI handles (OCIEnv, OCISvcCtx, and OCIError) that are associated with the current Oracle connection and transaction. These handles are then used to define the Pro*C/C++ default unnamed connection for the global SQLLIB runtime context. The REGISTER CONNECT statement is therefore used instead of a CONNECT statement.

Subsequent embedded SQL statements will use this set of OCI handles. They execute against the global SQLLIB runtime context and the unnamed connection, even those that are in separately precompiled units. Uncommitted changes are not seen. In the future, a (nondefault) runtime context can be returned in the optional RETURNING clause.

There cannot already be any active default connection for the global runtime context. A runtime error is returned if you try to use REGISTER CONNECT when a connection already exists.


See Also:

Oracle Call Interface Programmer's Guide for more information about OCI functions.

In real-world cases, the external procedure should be one that you can reuse from many different applications.

Restrictions on External Procedures

Follow these rules for external procedures:

  • External procedures can only be in C. C++ external procedures are not supported.

  • When you are connected to the external procedure context, any additional connection is not permitted and results in a runtime error.

  • Multithreaded external procedures are not supported. Executing an EXEC SQL ENABLE THREADS statement is not permitted and will return a runtime error. Pro*C/C++ does support multithreading in an application not using the external procedure method we are describing.

  • You cannot use DDL statements. They result in runtime errors.

  • You cannot use transaction control statements, such as EXEC SQL COMMIT, and EXEC SQL ROLLBACK.

  • You cannot use object navigation statements such as EXEC SQL OBJECT ... .

  • You cannot use polling EXEC SQL LOB statements.

  • You cannot use EXEC TOOLS statements. They will result in runtime errors.

Creating the External Procedure

Here is a simple example to create the external procedure extp1.

To store an external C procedure, compile and link the code to a library such as a DLL.

Then use the following SQL command once to register the external procedure extp1:

CREATE OR REPLACE PROCEDURE extp1
AS EXTERNAL NAME "extp1"
LIBRARY mylib
WITH CONTEXT
PARAMETERS(CONTEXT) ;

Where mylib is the name of the library storing procedure extp1. WITH CONTEXT means to implicitly call this procedure with argument of type OCIExtProcContext*. The context is omitted in your call, but is passed to the procedure anyway. The keyword CONTEXT appears in the CREATE statement, however, as a place marker.

This context parameter is the one referenced in the EXEC SQL REGISTER CONNECT statement inside extp1.

For more background on calling external procedures, see Oracle Database PL/SQL Language Reference

The external procedure is called from SQL*Plus this way:

SQL>
BEGIN
  INSERT INTO emp VALUES(9999,'JOHNSON','SALESMAN',7782, sysdate, 1200,150,10);
  extp1;
END;

Here is the listing of extp1.pc:

void extp1 (epctx)
OCIExtProcContext *epctx;
{
char name[15];
        EXEC SQL REGISTER CONNECT USING :epctx;
        EXEC SQL WHENEVER SQLERROR goto err;
        EXEC SQL SELECT ename INTO :name FROM emp WHERE empno = 9999;
        return;
err: SQLExtProcError(SQL_SINGLE_RCTX,sqlca.sqlerrm.sqlerrmc,sqlca.sqlerrm.sqlerrml);
        return;
}

SQLExtProcError()

The SQLLIB function SQLExtProcError() provides the ability to return control to PL/SQL when an error occurs in an external C procedure. The function and its arguments are:

SQLExtProcError (ctx, msg, msglen)

where:

ctx (IN) sql_context *

This is the target SQLLIB runtime context of the REGISTER CONNECT statement, which has to be executed before this function is invoked. Only the global runtime context is supported now.

msg (OUT) char *

The text of the error message.

msglen (OUT) size_t

The length in bytes of the message.

SQLLIB calls the OCI service function OCIExtProcRaiseExcpWithMsg when this function is executed.

The message is from the structure sqlerrm in the SQLCA. For a discussion of the structure of the SQLCA and sqlerrm, see "SQLCA Structure".

Here is an example showing use of SQLExtProcError():

void extp1 (epctx)
OCIExtProcContext *epctx;
{
   char name[15];
   EXEC SQL REGISTER CONNECT USING :epctx;
   EXEC SQL WHENEVER SQLERROR goto err;
   EXEC SQL SELECT ename INTO :name FROM emp WHERE smpno = 9999;
   return;
 err:
   SQLExtProcError (SQL_SINGLE_RCTX, sqlca.sqlerrm.sqlerrmc,
      sqlca.sqlerrm.sqlerrml);
   printf("\n%*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
   return;
}

Using Dynamic SQL

Recall that the precompiler treats an entire PL/SQL block like a single SQL statement. Therefore, you can store a PL/SQL block in a string host variable. Then, if the block contains no host variables, you can use dynamic SQL Method 1 to EXECUTE the PL/SQL string. Or, if the block contains a known number of host variables, you can use dynamic SQL Method 2 to PREPARE and EXECUTE the PL/SQL string. If the block contains an unknown number of host variables, you must use dynamic SQL Method 4.


Note:

In dynamic SQL Method 4, you cannot bind a host array to a PL/SQL procedure with a parameter of type "table." See also "Using Method 4".

PKX33PK+AOEBPS/pc_abres.htmy Reserved Words, Keywords, and Namespaces

B Reserved Words, Keywords, and Namespaces

This appendix contains the following topics:

Reserved Words and Keywords

Some words are reserved by Oracle. That is, they have a special meaning to Oracle and cannot be redefined. For this reason, you cannot use them to name database objects such as columns, tables, or indexes. To view the lists of the Oracle reserved words for SQL and PL/SQL, see the Oracle Database SQL Language Reference and the Oracle Database PL/SQL Language Reference.

Pro*C/C++ keywords, like C or C++ keywords, should not be used as variables in your program. Otherwise, an error will be generated. An error may result if they are used as the name of a database object such as a column. Here are the keywords used in Pro*C/C++:

Table B-1 Pro*C and C++ Keywords

KeywordsKeywordsKeywordsKeywordsKeywords

all

allocate

alter

analyze

and

any

arraylen

as

asc

at

audit

authorization

avg

begin

between

bind

both

break

by

cache

call

cast

char

character

character

charf

charz

check

close

collection

comment

commit

connect

constraint

constraints

context

continue

convbufsz

count

create

current

currval

cursor

database

date

dateformat

datelang

day

deallocate

dec

decimal

declare

default

define

delete

deref

desc

describe

descriptor

display

distinct

do

double

drop

else

enable

end

endif

escape

exec

exec

execute

exists

explain

extract

fetch

float

flush

for

force

found

free

from

function

get

global

go

goto

grant

group

having

hour

iaf

identified

ifdef

ifndef

immediate

in

indicator

input

insert

integer

intersect

interval

into

is

is

leading

level

like

list

lob

local

lock

long

max

message

min

minus

minute

mode

month

multiset

nchar

nchar_cs

next

nextval

noaudit

not

notfound

nowait

null

number

numeric

nvarchar

nvarchar2

object

ocibfilelocator

ocibloblocator

ocicloblocator

ocidate

ociextproccontext

ocinumber

ociraw

ocirowid

ocistring

of

only

open

option

option

or

oracle

order

output

overlaps

package

partition

precision

prepare

prior

procedure

put

raw

read

real

ref

reference

register

release

rename

replace

return

returning

revoke

role

rollback

rowid

rownum

savepoint

second

section

select

set

set

smallint

some

sql

sql_context

sql_cursor

sqlerror

sqlwarning

start

statement

stddev

stop

string

sum

sysdate

sysdba

sysoper

table

temporary

the

threads

time

timestamp

timezone_hour

timezone_minute

to

tools

trailing

transaction

trigger

trim

truncate

type

uid

ulong_varchar

union

unique

unsigned

update

use

user

using

uvarchar

validate

values

varchar

varchar

varchar2

variables

variance

varnum

varraw

view

whenever

where

with

work

year

zone

-

-


Oracle Reserved Namespaces

The following table contains a list of namespaces that are reserved by Oracle. The initial characters of function names in Oracle libraries are restricted to the character strings in this list. Because of potential name conflicts, do not use function names that begin with these characters. For example, the Oracle Net Transparent Network Service functions all begin with the characters NS, so you need to avoid naming functions that begin with NS.

Table B-2 Oracle Reserved Namespaces

NamespaceLibrary

XA

external functions for XA applications only

SQ

external SQLLIB functions used by Oracle Precompiler and SQL*Module applications

O, OCI

external OCI functions internal OCI functions

UPI, KP

function names from the Oracle UPI layer

NA

NC

ND

NL

NM

NR

NS

NT

NZ

OSN

TTC

Oracle Net Native services product

Oracle Net RPC project

Oracle Net Directory

Oracle Net Network Library layer

Oracle Net Net Management Project

Oracle Net Interchange

Oracle Net Transparent Network Service

Oracle Net Drivers

Oracle Net Security Service

Oracle Net V1

Oracle Net Two task

GEN, L, ORA

Core library functions

LI, LM, LX

function names from the Oracle Globalization Support layer

S

function names from system-dependent libraries


The list in the table is not a comprehensive list of all functions within the Oracle reserved namespaces. For a complete list of functions within a particular namespace, refer to the document that corresponds to the appropriate Oracle library.

PKHLDyyPK+AOEBPS/pc_08arr.htm Host Arrays

8 Host Arrays

This chapter looks at using arrays to simplify coding and improve program performance. You will learn how to manipulate Oracle data using arrays, how to operate on all the elements of an array with a single SQL statement, and how to limit the number of array elements processed. The chapter contains the following topics:

Why Use Arrays?

Arrays reduce programming time and result in improved performance.

With arrays, you manipulate an entire array with a single SQL statement. Thus, Oracle communication overhead is reduced markedly, especially in a networked environment. A major portion of runtime is spent on network round trips between the client program and the server database. Arrays reduce the round trips.

For example, suppose you want to insert information about 300 employees into the EMP table. Without arrays your program must do 300 individual INSERTs—one for each employee. With arrays, only one INSERT needs to be done.

Declaring Host Arrays

The following example declares three host arrays, each with a maximum of 50 elements:

char  emp_name[50][10]; 
int   emp_number[50]; 
float salary[50]; 

Arrays of VARCHARs are also allowed. The following declaration is a valid host language declaration:

VARCHAR v_array[10][30];

Restrictions

You cannot declare host arrays of pointers, except for object types.

Except for character arrays (strings), host arrays that might be referenced in a SQL statement are limited to one dimension. So, the two-dimensional array declared in the following example is invalid:

int hi_lo_scores[25][25];   /* not allowed */ 

Maximum Size of Arrays

The maximum number of array elements in a SQL statement that is accessible in one fetch is 32K (or possibly greater, depending on the platform and the available memory). If you try to access a number that exceeds the maximum, you get a "parameter out of range" runtime error. If the statement is an anonymous PL/SQL block, the number of array elements accessible is limited to 32512 divided by the size of the datatype.

Using Arrays in SQL Statements

You can use host arrays as input variables in the INSERT, UPDATE, and DELETE statements and as output variables in the INTO clause of SELECT and FETCH statements.

The embedded SQL syntax used for host arrays and simple host variables is nearly the same. One difference is the optional FOR clause, which lets you control array processing. Also, there are restrictions on mixing host arrays and simple host variables in a SQL statement.

The following sections illustrate the use of host arrays in data manipulation statements.

Referencing Host Arrays

If you use multiple host arrays in a single SQL statement, their number of elements should be the same. Otherwise, an "array size mismatch" warning message is issued at precompile time. If you ignore this warning, the precompiler uses the smallest number of elements for the SQL operation.

In this example, only 25 rows are Inserted

int    emp_number[50]; 
char   emp_name[50][10]; 
int    dept_number[25]; 
/* Populate host arrays here. */ 

EXEC SQL INSERT INTO emp (empno, ename, deptno) 
    VALUES (:emp_number, :emp_name, :dept_number);
 

It is possible to subscript host arrays in SQL statements, and use them in a loop to INSERT or fetch data. For example, you could INSERT every fifth element in an array using a loop such as:

for (i = 0; i < 50; i += 5) 
    EXEC SQL INSERT INTO emp (empno, deptno) 
        VALUES (:emp_number[i], :dept_number[i]);

However, if the array elements that you need to process are contiguous, you should not process host arrays in a loop. Simply use the non-scripted array names in your SQL statement. Oracle treats a SQL statement containing host arrays of element number n like the same statement executed n times with n different scalar variables.

Using Indicator Arrays

You can use indicator arrays to assign NULLs to input host arrays, and to detect NULL or truncated values (character columns only) in output host arrays. The following example shows how to INSERT with indicator arrays:

int    emp_number[50]; 
int    dept_number[50]; 
float  commission[50]; 
short  comm_ind[50];       /* indicator array */ 

/* Populate the host and indicator arrays.  To insert a null 
   into the comm column, assign -1 to the appropriate 
   element in the indicator array. */ 
    EXEC SQL INSERT INTO emp (empno, deptno, comm) 
        VALUES (:emp_number, :dept_number, 
        :commission INDICATOR :comm_ind); 

Oracle Restrictions

Mixing scalar host variables with host arrays in the VALUES, SET, INTO, or WHERE clause is not allowed. If any of the host variables is an array, all must be arrays.

You cannot use host arrays with the CURRENT OF clause in an UPDATE or DELETE statement.

ANSI Restriction and Requirements

The array interface is an Oracle extension to the ANSI/ISO embedded SQL standard. However, when you precompile with MODE=ANSI, array SELECTs and FETCHes are still allowed. The use of arrays can be flagged using the FIPS flagger precompiler option, if desired.

When doing array SELECTs and FETCHes, always use indicator arrays. That way, you can test for NULLs in the associated output host array.

If DBMS=V7 or DBMS=v8 and you SELECT or FETCH a NULL column value into a host array that is not associated with an indicator array, then Oracle stops processing, sets sqlerrd[2] to the number of rows processed, and returns an error message. When DBMS=V7 or DBMS=v8, Oracle does not consider truncation to be an error.

Also, if your SELECT or FETCH results in any warning such as ORA-24347 due to usage of NULL, and if any column does not have an indicator array, Oracle stops processing.


Note:

Use indicator variables for all the columns in the SELECT or FETCH. If all columns do not have indicators, then the precompiler option unsafe_null=yes can be used as an alternative.


Selecting into Arrays

You can use host arrays as output variables in the SELECT statement. If you know the maximum number of rows the SELECT will return, simply declare the host arrays with that number of elements. In the following example, you select directly into three host arrays. Knowing the SELECT will return no more than 50 rows, you declare the arrays with 50 elements:

char   emp_name[50][20]; 
int    emp_number[50]; 
float  salary[50]; 
 
EXEC SQL SELECT ENAME, EMPNO, SAL 
    INTO :emp_name, :emp_number, :salary 
    FROM EMP 
    WHERE SAL > 1000; 

In the preceding example, the SELECT statement returns up to 50 rows. If there are fewer than 50 eligible rows or you want to retrieve only 50 rows, this method will suffice. However, if there are more than 50 eligible rows, you cannot retrieve all of them this way. If you reexecute the SELECT statement, it just returns the first 50 rows again, even if more are eligible. You must either declare a larger array or declare a cursor for use with the FETCH statement.

If a SELECT INTO statement returns more rows than the number of elements you declared, Oracle issues an error message unless you specify SELECT_ERROR=NO.


See Also:

"Precompiler Options" for more information about the SELECT_ERROR option, see the section

Cursor Fetches

If you do not know the maximum number of rows a SELECT will return, you can declare and open a cursor, then fetch from it in "batches."

Batch fetches within a loop let you retrieve a large number of rows with ease. Each FETCH returns the next batch of rows from the current active set. In the following example, you fetch in 20-row batches:

 
int   emp_number[20]; 
float salary[20]; 
 
EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT empno, sal FROM emp; 
 
EXEC SQL OPEN emp_cursor; 
 
EXEC SQL WHENEVER NOT FOUND do break; 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor 
        INTO :emp_number, :salary; 
    /* process batch of rows */ 
    ... 
} 
...

Do not forget to check how many rows were actually returned in the last fetch, and process them.

Using sqlca.sqlerrd[2]

For INSERT, UPDATE, DELETE, and SELECT INTO statements, sqlca.sqlerrd[2] records the number of rows processed. For FETCH statements, it records the cumulative sum of rows processed.

When using host arrays with FETCH, to find the number of rows returned by the most recent iteration, subtract the current value of sqlca.sqlerrd[2] from its previous value (stored in another variable). In the following example, you determine the number of rows returned by the most recent fetch:

int  emp_number[100]; 
char emp_name[100][20]; 
 
int rows_to_fetch, rows_before, rows_this_time; 
EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT empno, ename 
    FROM emp 
    WHERE deptno = 30; 
EXEC SQL OPEN emp_cursor; 
EXEC SQL WHENEVER NOT FOUND CONTINUE; 
/* initialize loop variables */ 
rows_to_fetch = 20;   /* number of rows in each "batch" */ 
rows_before = 0;      /* previous value of sqlerrd[2]  */ 
rows_this_time = 20; 
 
while (rows_this_time == rows_to_fetch) 
{ 
    EXEC SQL FOR :rows_to_fetch 
    FETCH emp_cursor 
        INTO :emp_number, :emp_name; 
    rows_this_time = sqlca.sqlerrd[2] - rows_before; 
    rows_before = sqlca.sqlerrd[2]; 
} 
... 

sqlca.sqlerrd[2] is also useful when an error occurs during an array operation. Processing stops at the row that caused the error, so sqlerrd[2] gives the number of rows processed successfully.

Number of Rows Fetched

Each FETCH returns, at most, the total number of rows in the array. Fewer rows are returned in the following cases:

  • The end of the active set is reached. The "no data found" Oracle error code is returned to SQLCODE in the SQLCA. For example, this happens if you fetch into an array of number of elements 100 but only 20 rows are returned.

  • Fewer than a full batch of rows remain to be fetched. For example, this happens if you fetch 70 rows into an array of 20 number elements because after the third FETCH, only 10 rows remain to be fetched.

  • An error is detected while processing a row. The FETCH fails and the applicable Oracle error code is returned to SQLCODE.

The cumulative number of rows returned can be found in the third element of sqlerrd in the SQLCA, called sqlerrd[2] in this guide. This applies to each open cursor. In the following example, notice how the status of each cursor is maintained separately:

EXEC SQL OPEN cursor1; 
EXEC SQL OPEN cursor2; 
EXEC SQL FETCH cursor1 INTO :array_of_20; 
/* now running total in sqlerrd[2] is 20 */ 
EXEC SQL FETCH cursor2 INTO :array_of_30; 
/* now running total in sqlerrd[2] is 30, not 50 */ 
EXEC SQL FETCH cursor1 INTO :array_of_20; 
/* now running total in sqlerrd[2] is 40 (20 + 20) */ 
EXEC SQL FETCH cursor2 INTO :array_of_30; 
/* now running total in sqlerrd[2] is 60 (30 + 30) */

Scrollable Cursor Fetches

You can also use host arrays with scrollable cursors. With scrollable cursors sqlca.sqlerrd[2] represents the maximum (absolute) row number processed. Since an application can arbitrarily position the fetches in scrollable mode, it need not be the total number of rows processed.

While using host arrays with the FETCH statement in scrollable mode, you cannot subtract the current value of sqlca.sqlerrd[2] from its previous value to find the number of rows returned by the most recent iteration. The application program determines the total number of rows in the result set by executing a FETCH LAST. The value of sqlca.sqlerrd[2] provides the total number of rows in the result set. Refer to "Sample Program: Host Arrays Using Scrollable Cursor" for an example illustrating the use of host arrays with scrollable cursors

Sample Program 3: Host Arrays

The demonstration program in this section shows how you can use host arrays when writing a query in Pro*C/C++. Pay particular attention to the use of the "rows processed count" in the SQLCA (sqlca.sqlerrd[2]). This program is available on-line in the file sample3.pc in your demo directory.


See Also:

"Handling Runtime Errors" for more information about the SQLCA

/*
 *  sample3.pc
 *  Host Arrays
 *
 *  This program connects to ORACLE, declares and opens a cursor,
 *  fetches in batches using arrays, and prints the results using
 *  the function print_rows().
 */

#include <stdio.h>
#include <string.h>

#include <sqlca.h>

#define NAME_LENGTH   20
#define ARRAY_LENGTH   5
/* Another way to connect. */
char *username = "SCOTT";
char *password = "TIGER";

/* Declare a host structure tag. */
struct
{
    int    emp_number[ARRAY_LENGTH];
    char   emp_name[ARRAY_LENGTH][NAME_LENGTH];
    float  salary[ARRAY_LENGTH];
} emp_rec;

/* Declare this program's functions. */
void print_rows();              /* produces program output */
void sql_error();          /* handles unrecoverable errors */


main()
{
    int  num_ret;               /* number of rows returned */
  
/* Connect to ORACLE. */
    EXEC SQL WHENEVER SQLERROR DO sql_error("Connect error:");

    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    printf("\nConnected to ORACLE as user: %s\n", username);


    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error:");
/* Declare a cursor for the FETCH. */
    EXEC SQL DECLARE c1 CURSOR FOR
        SELECT empno, ename, sal FROM emp;

    EXEC SQL OPEN c1;

/* Initialize the number of rows. */
    num_ret = 0;

/* Array fetch loop - ends when NOT FOUND becomes true. */
    EXEC SQL WHENEVER NOT FOUND DO break;

    for (;;)
    {
        EXEC SQL FETCH c1 INTO :emp_rec;

/* Print however many rows were returned. */
        print_rows(sqlca.sqlerrd[2] - num_ret);
        num_ret = sqlca.sqlerrd[2];        /* Reset the number. */
    }
/* Print remaining rows from last fetch, if any. */
    if ((sqlca.sqlerrd[2] - num_ret) > 0)
        print_rows(sqlca.sqlerrd[2] - num_ret);

    EXEC SQL CLOSE c1;
    printf("\nAu revoir.\n\n\n");

/* Disconnect from the database. */
    EXEC SQL COMMIT WORK RELEASE;
    exit(0);
}


void
print_rows(n)
int n;
{
    int i;

    printf("\nNumber   Employee         Salary");
    printf("\n------   --------         ------\n");

    for (i = 0; i < n; i++)
        printf("%-9d%-15.15s%9.2f\n", emp_rec.emp_number[i],
               emp_rec.emp_name[i], emp_rec.salary[i]);

}


void
sql_error(msg)
char *msg;
{
    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s", msg);
    printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc);

    EXEC SQL ROLLBACK WORK RELEASE;
    exit(1);
}

Sample Program: Host Arrays Using Scrollable Cursor

This program describes how to use host arrays with scrollable cursors. This program is available on-line in the file scrolldemo2.pc in your demo directory.


Note:

Note that we do a FETCH LAST to determine the number of rows in the result set.

Scroll Demo2.pc

/*
 *  A Sample program to demonstrate the use of scrollable 
 *  cursors with host arrays.
 * 
 *  This program uses the hr/hr schema.Make sure
 *  that this schema exists before executing this program
 */


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>

#define ARRAY_LENGTH   4

/* user and passwd */
char *username = "hr";
char *password = "hr";

/* Declare a host structure tag. */
struct emp_rec_array
{
    int    emp_number;
    char   emp_name[20];
    float  salary;
} emp_rec[ARRAY_LENGTH];


/* Print the result of the query */

void print_rows()
{
    int i;

    for (i=0; i<ARRAY_LENGTH; i++)
        printf("%d    %s  %8.2f\n", emp_rec[i].emp_number,
             emp_rec[i].emp_name, emp_rec[i].salary);

}

/*  Oracle error handler */

void sql_error(char *msg)
{
    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s", msg);
    printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc);

    EXEC SQL ROLLBACK WORK RELEASE;
    exit(EXIT_FAILURE);
}

void main()
{
    int noOfRows; /* Number of rows in the result set */

    /* Error handler */
    EXEC SQL WHENEVER SQLERROR DO sql_error("Connect error:");

    /* Connect to the data base */
    EXEC SQL CONNECT :username IDENTIFIED BY :password;

    /* Error handle */
    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error:");

    /* declare the cursor in scrollable mode */
    EXEC SQL DECLARE c1 SCROLL CURSOR FOR
        SELECT employee_id, first_name, salary FROM employees;

    EXEC SQL OPEN c1;

    EXEC SQL WHENEVER SQLERROR DO sql_error("Fetch Error:");

    /* This is a dummy fetch to find out the number of rows
       in the result set */
    EXEC SQL FETCH LAST c1 INTO :emp_rec;

    /* The number of rows in the result set is given by 
       the value of sqlca.sqlerrd[2] */

    noOfRows = sqlca. sqlerrd[2];
    printf("Total number of rows in the result set %d:\n", 
             noOfRows);

    /* Fetch the first ARRAY_LENGTH number of rows */
    EXEC SQL FETCH FIRST c1 INTO :emp_rec;
    printf("******************** DEFAULT : \n");
    print_rows();

    /* Fetch the next set of ARRAY_LENGTH rows */
    EXEC SQL FETCH NEXT c1 INTO :emp_rec;
    printf("******************** NEXT  : \n");
    print_rows();

    /* Fetch a set of ARRAY_LENGTH rows from the 3rd row onwards */
    EXEC SQL FETCH ABSOLUTE 3 c1 INTO :emp_rec;
    printf("******************** ABSOLUTE 3 : \n");
    print_rows();

    /* Fetch the current ARRAY_LENGTH set of rows */
    EXEC SQL FETCH CURRENT c1 INTO :emp_rec;
    printf("******************** CURRENT : \n");
    print_rows();

    /* Fetch a set of ARRAY_LENGTH rows from the 2nd offset
       from the current cursor position */
    EXEC SQL FETCH RELATIVE 2 c1 INTO :emp_rec;
    printf("******************** RELATIVE 2 : \n");
    print_rows();

    /* Again Fetch the first ARRAY_LENGTH number of rows */
    EXEC SQL FETCH ABSOLUTE 0 c1 INTO :emp_rec;
    printf("******************** ABSOLUTE 0 : \n");
    print_rows();

    /* close the cursor */
    EXEC SQL CLOSE c1;

/* Disconnect from the database. */
    EXEC SQL COMMIT WORK RELEASE;
    exit(EXIT_SUCCESS);
}

Host Array Restrictions

Using host arrays in the WHERE clause of a SELECT statement is not allowed except in a subquery. For an example, see "Using the WHERE Clause".

Also, you cannot mix simple host variables with host arrays in the INTO clause of a SELECT or FETCH statement. If any of the host variables is an array, all must be arrays.

Table 8-1 shows which uses of host arrays are valid in a SELECT INTO statement:

Table 8-1 Valid Host Arrays for SELECT INTO

INTO ClauseWHERE ClauseValid?

array

array

no

scalar

scalar

yes

array

scalar

yes

scalar

array

no


Fetching NULLs

When doing array SELECTs and FETCHes, always use indicator arrays. That way, you can test for NULLs in the associated output host array.

When DBMS = V7 or DBMS=v8, if you SELECT or FETCH a NULL column value into a host array that is not associated with an indicator array, Oracle stops processing, sets sqlerrd[2] to the number of rows processed, and issues an error message.

Also, if your SELECT or FETCH results in any warning such as ORA-24347 due to usage of NULL, and if any column does not have an indicator array, Oracle stops processing. Use indicator variables in all the columns in the SELECT or FETCH.If all columns do not have indicators, the precompiler option unsafe_null=yes could be used as an alternative.

Fetching Truncated Values

When DBMS=V7, truncation results in a warning message, but Oracle continues processing.

Again, when doing array SELECTs and FETCHes, always use indicator arrays. That way, if Oracle assigns one or more truncated column values to an output host array, you can find the original lengths of the column values in the associated indicator array.

Inserting with Arrays

You can use host arrays as input variables in an INSERT statement. Just make sure your program populates the arrays with data before executing the INSERT statement.

If some elements in the arrays are irrelevant, you can use the FOR clause to control the number of rows inserted. See also "Using the FOR Clause".

An example of inserting with host arrays follows:

char   emp_name[50][20]; 
int    emp_number[50]; 
float  salary[50]; 
/* populate the host arrays */ 
... 
EXEC SQL INSERT INTO EMP (ENAME, EMPNO, SAL) 
    VALUES (:emp_name, :emp_number, :salary); 

The cumulative number of rows inserted can be found in the rows-processed count, sqlca.sqlerrd[2].

In the following example, the INSERT is done one row at a time. This is much less efficient than the previous example, since a call to the server must be made for each row inserted.

for (i = 0; i < array_size; i++) 
    EXEC SQL INSERT INTO emp (ename, empno, sal) 
        VALUES (:emp_name[i], :emp_number[i], :salary[i]); 

Inserting with Arrays Restrictions

You cannot use an array of pointers in the VALUES clause of an INSERT statement; all array elements must be data items.

Mixing scalar host variables with host arrays in the VALUES clause of an INSERT statement is not allowed. If any of the host variables is an array, all must be arrays.

Updating with Arrays

You can also use host arrays as input variables in an UPDATE statement, as the following example shows:

int   emp_number[50]; 
float salary[50]; 
/* populate the host arrays */ 
EXEC SQL UPDATE emp SET sal = :salary 
    WHERE EMPNO = :emp_number; 

The cumulative number of rows updated can be found in sqlerrd[2]. This number does not include rows processed by an update cascade.

If some elements in the arrays are irrelevant, you can use the embedded SQL FOR clause to limit the number of rows updated.

The last example showed a typical update using a unique key (EMP_NUMBER). Each array element qualified just one row for updating. In the following example, each array element qualifies multiple rows:

char  job_title [10][20]; 
float commission[10]; 
 
... 
 
EXEC SQL UPDATE emp SET comm = :commission 
    WHERE job = :job_title;

Updating with Arrays Restrictions

Mixing simple host variables with host arrays in the SET or WHERE clause of an UPDATE statement is not recommended. If any of the host variables is an array, all should be arrays. Furthermore, if you use a host array in the SET clause, use one of equal number of elements in the WHERE clause.

You cannot use host arrays with the CURRENT OF clause in an UPDATE statement.


See Also:

"Mimicking CURRENT OF" for an alternative.

Table 8-2 shows which uses of host arrays are valid in an UPDATE statement:

Table 8-2 Host Arrays Valid in an UPDATE

SET ClauseWHERE ClauseValid?

array

array

yes

scalar

scalar

yes

array

scalar

no

scalar

array

no


Deleting with Arrays

You can also use host arrays as input variables in a DELETE statement. It is like executing the DELETE statement repeatedly using successive elements of the host array in the WHERE clause. Thus, each execution might delete zero, one, or more rows from the table.

An example of deleting with host arrays follows:

... 
int emp_number[50]; 
 
/* populate the host array */ 
... 
EXEC SQL DELETE FROM emp 
    WHERE empno = :emp_number; 

The cumulative number of rows deleted can be found in sqlerrd[2]. The number does not include rows processed by a delete cascade.

The last example showed a typical delete using a unique key (EMP_NUMBER). Each array element qualified just one row for deletion. In the following example, each array element qualifies multiple rows:

... 
char job_title[10][20]; 
 
/* populate the host array  */ 
... 
EXEC SQL DELETE FROM emp 
    WHERE job = :job_title;
...

Deleting with Arrays Restrictions

Mixing simple host variables with host arrays in the WHERE clause of a DELETE statement is not allowed. If any of the host variables is an array, all must be arrays.

You cannot use host arrays with the CURRENT OF clause in a DELETE statement.


See Also:

"Mimicking CURRENT OF" for an alternative.

Using the FOR Clause

You can use the optional embedded SQL FOR clause to set the number of array elements processed by any of the following SQL statements:

  • DELETE

  • EXECUTE

  • FETCH

  • INSERT

  • OPEN

  • UPDATE

The FOR clause is especially useful in UPDATE, INSERT, and DELETE statements. With these statements you might not want to use the entire array. The FOR clause lets you limit the elements used to just the number you need, as the following example shows:

char  emp_name[100][20]; 
float salary[100]; 
int   rows_to_insert; 
 
/* populate the host arrays */ 
rows_to_insert = 25;             /* set FOR-clause variable */ 
EXEC SQL FOR :rows_to_insert   /* will process only 25 rows */ 
    INSERT INTO emp (ename, sal) 
    VALUES (:emp_name, :salary); 

The FOR clause can use an integer host variable to count array elements, or an integer literal. A complex C expression that resolves to an integer cannot be used. For example, the following statement that uses an integer expression is illegal:

EXEC SQL FOR :rows_to_insert + 5                 /* illegal */ 
    INSERT INTO emp (ename, empno, sal) 
        VALUES (:emp_name, :emp_number, :salary); 

The FOR clause variable specifies the number of array elements to be processed. Make sure the number does not exceed the smallest array dimension. Internally, the value is treated as an unsigned quantity. An attempt to pass a negative value through the use of a signed host variable will result in unpredictable behavior.

FOR Clause Restrictions

Two restrictions keep FOR clause semantics clear: you cannot use the FOR clause in a SELECT statement or with the CURRENT OF clause.

In a SELECT Statement

If you use the FOR clause in a SELECT statement, you get an error message.

The FOR clause is not allowed in SELECT statements because its meaning is unclear. Does it mean "execute this SELECT statement n times"? Or, does it mean "execute this SELECT statement once, but return n rows"? The problem in the former case is that each execution might return multiple rows. In the latter case, it is better to declare a cursor and use the FOR clause in a FETCH statement, as follows:

EXEC SQL FOR :limit FETCH emp_cursor INTO ... 

With the CURRENT OF Clause

You can use the CURRENT OF clause in an UPDATE or DELETE statement to refer to the latest row returned by a FETCH statement, as the following example shows:

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, sal FROM emp WHERE empno = :emp_number; 
... 
EXEC SQL OPEN emp_cursor; 
... 
EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; 
... 
EXEC SQL UPDATE emp SET sal = :new_salary 
WHERE CURRENT OF emp_cursor; 

However, you cannot use the FOR clause with the CURRENT OF clause. The following statements are invalid because the only logical value of limit is 1 (you can only update or delete the current row once):

EXEC SQL FOR :limit UPDATE emp SET sal = :new_salary 
WHERE CURRENT OF emp_cursor; 
... 
EXEC SQL FOR :limit DELETE FROM emp 
WHERE CURRENT OF emp_cursor; 

Using the WHERE Clause

Oracle treats a SQL statement containing host arrays of number of elements n like the same SQL statement executed n times with n different scalar variables (the individual array elements). The precompiler issues an error message only when such treatment would be ambiguous.

For example, assuming the declarations

int  mgr_number[50]; 
char job_title[50][20]; 

it would be ambiguous if the statement

EXEC SQL SELECT mgr INTO :mgr_number FROM emp 
WHERE job = :job_title; 

were treated like the imaginary statement

for (i = 0; i < 50; i++) 
    SELECT mgr INTO :mgr_number[i] FROM emp 
        WHERE job = :job_title[i]; 

because multiple rows might meet the WHERE-clause search condition, but only one output variable is available to receive data. Therefore, an error message is issued.

On the other hand, it would not be ambiguous if the statement

EXEC SQL UPDATE emp SET mgr = :mgr_number 
    WHERE empno IN (SELECT empno FROM emp 
        WHERE job = :job_title); 

were treated like the imaginary statement

for (i = 0; i < 50; i++) 
    UPDATE emp SET mgr = :mgr_number[i] 
        WHERE empno IN (SELECT empno FROM emp 
            WHERE job = :job_title[i]); 

because there is a mgr_number in the SET clause for each row matching job_title in the WHERE clause, even if each job_title matches multiple rows. All rows matching each job_title can be SET to the same mgr_number. Therefore, no error message is issued.

Arrays of Structs

Using arrays of scalars, you can perform multirow operations involving a single column only. Using structs of scalars allows users to perform single row operations involving multiple columns.

In order to perform multirow operations involving multiple columns, however, you previously needed to allocate several parallel arrays of scalars either separately or encapsulated within a single struct. In many cases, it is easier to reorganize this data structure more conveniently as a single array of structs instead.

Pro*C/C++ supports the use of arrays of structs which enable an application programmer to perform multirow, multicolumn operations using an array of C structs. With this enhancement, Pro*C/C++ can handle simple arrays of structs of scalars as bind variables in embedded SQL statements for easier processing of user data. This makes programming more intuitive, and allows users greater flexibility in organizing their data.

In addition to supporting arrays of structs as bind variables, Pro*C/C++ also supports arrays of indicator structs when used in conjunction with an array of structs declaration.


Note:

Binding structs to PL/SQL records and binding arrays of structs to PL/SQL tables of records are not part of this new functionality. Arrays of structs may also not be used within an embedded PL/SQL block. See also "Restrictions on Arrays of Structs".

Since arrays of structs are intended to be used when performing multirow operations involving multiple columns, it is generally anticipated that they will be used in the following ways.

  • As output bind variables in SELECT statements or FETCH statements.

  • As input bind variables in the VALUES clause of an INSERT statement.

Arrays of Structs Usage

The notion of an array of structs is not new to C programmers. It does, however, present a conceptual difference for data storage when it is compared to a struct of parallel arrays.

In a struct of parallel arrays, the data for the individual columns is stored contiguously. In an array of structs, on the other hand, the column data is interleaved, whereby each occurrence of a column in the array is separated by the space required by the other columns in the struct. This space is known as a stride.

Restrictions on Arrays of Structs

The following restrictions apply to the use of arrays of structs in Pro*C/C++:

  • Arrays of structs (just as with ordinary structs) are not permitted inside an embedded PL/SQL block.

  • Use of arrays of structs in WHERE or FROM clauses is prohibited.

  • Arrays of structs are not permitted with Oracle Dynamic SQL Method 4. They are permitted with ANSI Dynamic SQL. See also " ANSI Dynamic SQL".

  • Arrays of structs are not permitted in the SET clause of an UPDATE statement.

The syntax for declaring an array of structs does not change. There are, however, a few things to keep in mind when using an array of structs.

Declaring an Array of Structs

When declaring an array of structs which will be used in a Pro*C/C++ application, the programmer must keep in mind the following important points:

  • The struct must have a structure tag. For example, in the following code segment

    struct person {
       char name[15];
       int  age;
    } people[10];

the person variable is the structure tag. This is so the precompiler can use the name of the struct to compute the size of the stride.

  • The members of the struct must not be arrays. The only exception to this rule is for character types such as char or VARCHAR since array syntax is used when declaring variables of these types.

  • char and VARCHAR members may not be two-dimensional.

  • Nested structs are not permitted as members of an array of structs. This is not a new restriction, since nested structs have not been supported by previous releases of Pro*C/C++.

  • The size of just the struct may not exceed the maximum value that a signed 4-byte quantity may represent. This is typically two gigabytes.

Given these restrictions regarding the use of arrays of structs, the following declaration is legal in Pro*C/C++

struct department {
   int deptno;
   char dname[15];
   char loc[14];
} dept[4];

while the following declaration is illegal.

struct {              /* the struct is missing a structure tag */
  int empno[15];      /* struct members may not be arrays */
  char ename[15][10]; /* character types may not be 2-dimensional */
  struct nested {
    int salary;   /* nested struct not permitted in array of structs */
  } sal_struct;
} bad[15];

It is also important to note that you cannot apply datatype equivalencing to either the array of structs itself or to any of the individual fields within the struct. For example, assuming empno is not declared as an array in the earlier illegal struct, the following is illegal:

exec sql var bad[3].empno is integer(4);

The precompiler has no way to keep track of individual structure elements within the array of structs. One could do the following, on the other hand, to achieve the desired effect.

typedef int myint;
exec sql type myint is integer(4);

struct equiv {
  myint empno; /* now legally considered an integer(4) datatype */
   ...
} ok[15];

This should come as no surprise since equivalencing individual array items has not been supported by previous releases of Pro*C/C++. For example, the following scalar array declarations illustrate what is legal and what is not.

int empno[15];
exec sql var empno[3] is integer(4); /* illegal */

myint empno[15]; /* legal */

In summary, you may not equivalence any individual array item.

Variables Guidelines

Indicator variables for an array of structs declaration work in much the same way as a normal struct declaration. An indicator array of structs declaration must abide by the rules for an array of structs as follows:

  • The number of fields in the indicator struct must be less than or equal to the number of fields in the corresponding array of structs.

  • The order of the fields must match the order of the corresponding members of the array of structs.

  • The datatype for all elements in the indicator struct must be short.

  • The size of the indicator array must be at least the same size as the host variable declaration. It may be larger, but it may not be smaller.

These rules generally reflect the rules for using structs as implemented in prior releases of Pro*C/C++. The array restriction is also the same as that previously used for arrays of scalars.

Given these rules, assume the following struct declaration:

struct department {
   int deptno;
   char dname[15];
   char loc[14];
} dept[4];

The following is a legal indicator variable struct declaration:

struct department_ind {
   short deptno_ind;
   short dname_ind;
   short loc_ind;
} dept_ind[4];

while the following is illegal as an indicator variable

struct{               /* missing indicator structure tag */
  int deptno_ind;     /* indicator variable not of type short */
  short dname_ind[15];/* array element forbidden in indicator struct */
  short loc_ind[14];  /* array element forbidden in indicator struct */
} bad_ind[2];     /* indicator array size is smaller than host array */

Declaring a Pointer to an Array of Structs

In some cases, it may be desirable to declare a pointer to an array of structs. This allows pointers to arrays of structs to be passed to other functions or used directly in an embedded SQL statement.


Note:

The length of the array referenced by a pointer to an array of structs cannot be known during precompilation. For this reason, an explicit FOR clause must be used when a bind variable whose type is a pointer to an array of structs is used in any embedded SQL statement.

Remember that FOR clauses may not be used in an embedded SQL SELECT statement. Therefore, to retrieve data into a pointer to an array of structs, an explicit cursor and FETCH statement must be used with the FOR clause.

Examples

The following examples demonstrate different uses of the array of structs functionality in Pro*C/C++.

Example 1: A Simple Array of Structs of Scalars

Given the following structure declaration,

struct department {
   int deptno;
   char dname[15];
   char loc[14];
} my_dept[4];

a user could then select the dept data into my_dept as follows:

exec sql select * into :my_dept from dept;

or the user could populate my_dept first and then bulk insert it into the dept table:

exec sql insert into dept values (:my_dept);

To use an indicator variable, a parallel indicator array of structs could be declared.

struct deptartment_ind {
   short deptno_ind;
   short dname_ind;
   short loc_ind;
} my_dept_ind[4];

Data is then be selected using the same query except for the addition of the indicator variable:

exec sql select * into :my_dept indicator :my_dept_ind from dept;

Similarly, the indicator could be used when inserting the data as well:

exec sql insert into dept values (:my_dept indicator :my_dept_ind);

Example 2: Using Mixed Scalar Arrays with An Array of Structs

As in prior releases of Pro*C/C++, when using multiple arrays for bulk handling of user data, the size of the arrays must be the same. If they are not, the smallest array size is chosen leaving the remaining portions of the arrays unaffected.

Given the following declarations,

struct employee {
   int empno;
   char ename[11];
} emp[14];

float sal[14];
float comm[14];

it is possible to select multiple rows for all columns in one simple query:

exec sql select empno, ename, sal, comm into :emp, :sal, :comm from emp;

We also want to know whether the column values for the commissions are NULL or not. A single indicator array could be used given the following declaration:

short comm_ind[14];
...
exec sql select empno, ename, sal, comm
   into :emp, :sal, :comm indicator :comm_ind from emp;

You cannot declare a single indicator array of structs that encapsulate all indicator information from the query. Therefore:

struct employee_ind {   /* example of illegal usage */
   short empno_ind;
   short ename_ind;
   short sal_ind;
   short comm_ind;
} illegal_ind[15];

exec sql select empno, ename, sal, comm
   into :emp, :sal, :comm indicator :illegal_ind from emp;

is illegal (as well as undesirable). The earlier statement associates the indicator array with the comm column only, not the entire SELECT...INTO list.

Assuming the array of structs and the sal, comm and comm_ind arrays were populated with the desired data, insertion is straightforward:

exec sql insert into emp (empno, ename, sal, comm)
   values (:emp, :sal, :comm indicator :comm_ind);

Example 3: Using Multiple Arrays of Structs with a Cursor

For this example, we make the following declarations:

struct employee {
   int empno;
   char ename[11];
   char job[10];
} emp[14];

struct compensation {
   int sal;
   int comm;
} wage[14];

struct compensation_ind {
   short sal_ind;
   short comm_ind;
} wage_ind[14];

Our program could then make use of these arrays of structs as follows:

exec sql declare c cursor for 
   select empno, ename, job, sal, comm from emp;

exec sql open c;

exec sql whenever not found do break;
while(1)
{
  exec sql fetch c into :emp, :wage indicator :wage_ind;
  ... process batch rows returned by the fetch ...
}

printf("%d rows selected.\n", sqlca.sqlerrd[2]);

exec sql close c;
Using the FOR clause

Alternatively, we could have used the FOR clause to instruct the fetch on how many rows to retrieve. Recall that the FOR clause is prohibited when using the SELECT statement, but not the INSERT or FETCH statements.

We add the following to our original declarations

int limit = 10;

and code our example accordingly.

   exec sql for :limit
      fetch c into :emp, :wage indicator :wage_ind;

Example 4: Individual Array and Struct Member Referencing

Prior releases of Pro*C/C++ allowed array references to single structures in an array of structs. The following is therefore legal since the bind expression resolves to a simple struct of scalars.

exec sql select * into :dept[3] from emp;

Users can reference an individual scalar member of a specific struct in an array of structs as the following example shows.

exec sql select dname into :dept[3].dname from dept where ...;

Naturally, this requires that the query be a single row query so only one row is selected into the variable represented by this bind expression.

Example 5: Using Indicator Variables, a Special Case

Prior releases of Pro*C/C++ required that an indicator struct have the same number of fields as its associated bind struct. This restriction has been relaxed when using structs in general. By following the previously mentioned guidelines for indicator arrays of structs it is possible to construct the following example.

struct employee {
    float comm;
    float sal;
    int empno;
    char ename[10];
} emp[14];

struct employee_ind {
    short comm;
} emp_ind[14];

exec sql select comm, sal, empno, ename 
   into :emp indicator :emp_ind from emp;

The mapping of indicator variables to bind values is one-to-one. They map in associative sequential order starting with the first field.

Be aware, however, that if any of the other fields has a fetched value of NULL and no indicator is provided, the following error is raised:

ORA-1405: fetched column value is NULL

As an example, such is the case if sal was nullable because there is no indicator for sal.

Suppose we change the array of structs as follows,

struct employee {
   int empno;
   char ename[10];
   float sal;
   float comm;
} emp[15];

but still used the same indicator array of structs.

Because the indicators map in associative sequential order, the comm indicator maps to the empno field leaving the comm bind variable without an indicator once again leading to the ORA-1405 error.

To avoid the ORA-1405 when using indicator structs that have fewer fields than their associative bind variable structs, the nullable attributes should appear first and in sequential order.

We could easily change this into a single-row fetch involving multiple columns by using non-array structs and expect it to work as though the indicator struct was declared as follows.

struct employee_ind {
   short comm;
   short sal;
   short empno;
   short ename;
} emp_ind;

Because Pro*C/C++ no longer requires that the indicator struct have the same number of fields as its associated value struct, the earlier example is now legal in Pro*C/C++ whereas previously it was not.

Our indicator struct could now look like the following simple struct.

struct employee_ind {
   short comm;
} emp_ind;

Using the non-array emp and emp_ind structs we are able to perform a single row fetch as follows.

exec sql fetch comm, sal, empno, ename
   into :emp indicator :emp_ind from emp;

Note once again how the comm indicator maps to the comm bind variable in this case as well.

Example 6: Using a Pointer to an Array of Structs

This example demonstrates how to use a pointer to an array of structs.

Given the following type declaration:

typedef struct dept {
   int deptno;
   char dname[15];
   char loc[14];
} dept;

we can perform a variety of things, manipulating a pointer to an array of structs of that type. For example, we can pass pointers to arrays of structs to other functions.

void insert_data(d, n)
   dept *d;
   int n;
{
    exec sql for :n insert into dept values (:d);
}

void fetch_data(d, n)
   dept *d;
   int n;
{
   exec sql declare c cursor for select deptno, dname, loc from dept;
   exec sql open c;
   exec sql for :n fetch c into :d;
   exec sql close c;
}

Such functions are invoked by passing the address of the array of structs as these examples indicate.

dept d[4];
dept *dptr = &d[0];
const int n = 4;

fetch_data(dptr, n);
insert_data(d, n); /* We are treating '&d[0]' as being equal to 'd' */

Or we can simply use such pointers to arrays of structs directly in some embedded SQL statement.

exec sql for :n insert into dept values (:dptr);

The most important thing to remember is the use of the FOR clause.

Mimicking CURRENT OF

You use the CURRENT OF cursor clause in a DELETE or UPDATE statement to refer to the latest row FETCHed from the cursor. However, you cannot use CURRENT OF with host arrays. Instead, select the ROWID of each row, then use that value to identify the current row during the update or delete.

For example:

char  emp_name[20][10]; 
char  job_title[20][10]; 
char  old_title[20][10]; 
char  row_id[20][19]; 
... 
EXEC SQL DECLARE emp_cursor CURSOR FOR 
SELECT ename, job, rowid FROM emp FOR UPDATE; 
... 
EXEC SQL OPEN emp_cursor; 
EXEC SQL WHENEVER NOT FOUND do break; 
for (;;) 
{ 
    EXEC SQL FETCH emp_cursor 
        INTO :emp_name, :job_title, :row_id; 
    ... 
    EXEC SQL DELETE FROM emp 
        WHERE job = :old_title AND rowid = :row_id; 
    EXEC SQL COMMIT WORK; 
} 

Using Additional Array Insert/Select SynOHtax

The Oracle precompiler also supports the DB2 insert and fetch syntax for the host tables. The supported additional array insert and fetch syntax are shown in the following figures, respectively.

Figure 8-1 Additional Insert Syntax

Additional Insert Syntax
Description of "Figure 8-1 Additional Insert Syntax"

Figure 8-2 Additional Fetch Syntax

Additional Fetch Syntax
Description of "Figure 8-2 Additional Fetch Syntax"

The optional ROWSET and ROWSET STARTING AT clauses are used in the fetch-orientation (FIRST, PRIOR, NEXT, LAST, CURRENT, RELATIVE and ABSOLUTE). Consider the following examples:

  • FIRST ROWSET

  • PRIOR ROWSET

  • NEXT ROWSET

  • LAST ROWSET

  • CURRENT ROWSET

  • ROWSET STARTING AT RELATIVEn

  • ROWSET STARTING AT ABSOLUTEn

Examples of the DB2 array insert/fetch syntax and their comparison with the corresponding Oracle precompiler syntax are shown in Table 8-3:

Table 8-3 DB2 Array Syntax vs. Oracle Precompiler Syntax

DB2 Array SyntaxOracle Precompiler Syntax
EXEC SQL
  INSERT INTO dsn8810.act 
  (actno, actkwd, actdesc) 
  VALUES (:hva1, :hva2, :hva3)
  FOR :NUM_ROWS ROWS;
EXEC SQL FOR :num_rows
  INSERT INTO dsn8810.act
  (actno, actkwd, actdesc)
  VALUES (:hva1, :hva2, :hva3);
EXEC SQL
  FETCH NEXT ROWSET FROM c1 
  FOR 20 ROWS 
  INTO :hva_empno, :hva_lastname,
       :hva_salary;
EXEC SQL
   FOR :twenty
   FETCH c1 
   INTO :hva_empno, :hva_lastname,
        :hva_salary;

In DB2 syntax, a row-set positioned cursor should be first declared before retrieving row sets of data. To enable a cursor to fetch row sets, the 'WITH ROWSET POSITIONING' clause has to be used in the DECLARE CURSOR statement, which is not required and relevant in the Oracle precompiler syntax, as shown in the following table.

DB2 Array SyntaxOracle Precompiler Syntax
EXEC SQL
 DECLARE c1 CURSOR
  WITH ROWSET POSITIONING FOR
  SELECT empno, lastname, salary
      FROM dsn8810.emp;
EXEC SQL
   DECLARE c1 CURSOR FOR
   SELECT empno, lastname, salary
        FROM dsn8810.emp;

This DB2 array syntax support can be enabled with the precompiler option db2_array, whose default option is no. The DB2 array syntax support cannot be used together with the Oracle precompiler syntax; only one of the syntax, only on of the syntax, either Oracle precompiler or DB2 syntax, is supported at a time.

Example 8-1 Inserting and Fetching Rows by Using the DB2 Array Syntax

This program inserts INSCNT rows into the EMP table by using the DB2 array insert syntax, and then fetches the inserted rows by using the DB2 array fetch syntax.

/* 
 * db2arrdemo.pc 
 */
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <sqlca.h>
 
/* Number of rows to be inserted in one shot */
#define INSCNT 100
/* Number of rows to be fetched in one shot */
#define FETCHCNT 20
 
/* Define a host structure
   for inserting data into the table 
   and for fetching data from the table */
struct emprec
{
  int     empno;
  varchar ename[10];
  varchar job[9];
  int mgr;
  char hiredate[10];
  float sal;
  float comm;
  int deptno;
};
typedef struct emprec empdata;
 
/* Function prototypes */
void sql_error(char *);
void insertdata();
void fetchdata();
void printempdata(empdata *);
 
void main()
{
 
  exec sql begin declare section;
    char *uid = "scott/tiger";
  exec sql end declare section;
 
  exec sql whenever sqlerror do sql_error("ORACLE error--\n");
  exec sql connect :uid;
 
  printf("Inserting %d rows into EMP table using DB2 array insert syntax.\n",
         INSCNT);
  insertdata();
  printf("\nFetching data using DB2 array fetch syntax.\n");
  fetchdata();
 
  exec sql rollback work release;
  exit(EXIT_SUCCESS);
}
 
/* Inserting data into the table using DB2 array insert syntax*/
void insertdata() 
{
  int i, cnt;
  char *str;
  empdata emp_in[INSCNT];
 
  /* To store temporary strings */
  str = (char *)malloc (25 * sizeof(char));
 
  /* Fill the array elements to insert */ 
  for (i = 0; i < INSCNT; i++)
  {
    emp_in[i].empno = i+1;
    sprintf(str, "EMP_%03d", i+1);
    strcpy (emp_in[i].ename.arr, str);
    emp_in[i].ename.len = strlen (emp_in[i].ename.arr);
    sprintf(str, "JOB_%03d", i+1);
    strcpy (emp_in[i].job.arr, str);
    emp_in[i].job.len = strlen (emp_in[i].job.arr);
    emp_in[i].mgr = i+1001;
    sprintf(str, "%02d-MAY-06", (i%30)+1);
    strcpy (emp_in[i].hiredate, str);
    emp_in[i].sal = (i+1) * 10;
    emp_in[i].comm = (i+1) * 0.1;
    emp_in[i].deptno = 10;
  }
 
  free (str);
 
  /* Inserting data using DB2 array insert syntax */
  exec sql insert into emp values (:emp_in) FOR :INSCNT rows;
 
  exec sql select count(*) into :cnt from emp where ename like 'EMP_%';
  printf ("Number of rows successfully inserted into emp table: %d\n", cnt);
}
 
/* Fetches data from the table using DB2 array fetch syntax*/
void fetchdata()
{
  empdata emp_out[FETCHCNT];
 
  /* Declares scrollable cursor to fetch data */
  exec sql declare c1 scroll cursor with rowset positioning for
         select empno, ename, job, mgr, hiredate, sal, comm, deptno
         from emp where ename like 'EMP_%' order by empno;
  
  exec sql open c1;
 
  exec sql whenever not found do break;
  while(1)
  {
    /* Fetches data using DB2 array fetch syntax */
    exec sql fetch next rowset from c1 for :FETCHCNT rows into :emp_out;
    printempdata(emp_out);
  }
  exec sql whenever not found do sql_error("ORACLE ERROR");
 
  exec sql close c1;
}
 
/* Prints the fetched employee data */
void printempdata(empdata *emp_out)
{
  int i;
  for (i=0; i<FETCHCNT; i++)
  {
    emp_out[i].ename.arr[emp_out[i].ename.len] = '\0';
    emp_out[i].job.arr[emp_out[i].job.len] = '\0';
    printf("Empno=%d, Ename=%s, Job=%s, Mgr=%d, Hiredate=%s, Sal=%6.2f,\n"
           "Comm=%5.2f, Deptno=%d\n", emp_out[i].empno, emp_out[i].ename.arr,
 emp_out[i].job.arr, emp_out[i].mgr, emp_out[i].hiredate,
 emp_out[i].sal, emp_out[i].comm, emp_out[i].deptno);
  }
}
 
/* Error handling function. */
void sql_error(char *msg)
{
  exec sql whenever sqlerror continue;
 
  printf("\n%s\n", msg);
  printf("%.70s\n", sqlca.sqlerrm.sqlerrmc); 
  exec sql rollback release;
 
  exit(EXIT_FAILURE);
}

Using Implicit Buffered Insert

For improved performance, Pro*C/C++ application developers can reference host arrays in their embedded SQL statements. This provides a means to execute an array of SQL statements with a single round-trip to the database. Despite the significant performance improvements afforded by array execution, some developers choose not to use this capability because it is not ANSI standard. For example, an application written to exploit array execution in Oracle cannot be precompiled using IBM's precompiler.

One workaround is to use buffered INSERT statements, which enable you to gain performance benefits while retaining ANSI standard embedded SQL syntax.

The command line option "max_row_insert" controls the number of rows to be buffered before executing the INSERT statement. By default it is zero and the feature is disabled. To enable this feature, specify any number greater than zero.

If insert bufering is enabled, precompiler runtime will flag the corresponding cursor and:

  • Allocate or re-allocate extra memory to hold bind values (first execute only).

  • Copy bind values from program host variables to internal runtime bind structures.

  • Increment the rows buffered count.

  • Flush the buffered INSERT statements if MAX_INSERT_ROWS have been buffered.

  • If MAX_INSERT_ROWS has not been hit, then return after copying the values to the internal bind buffers without flushing.

If a new embedded SQL statement is executed and results in a flush of the buffered insert statements:

  • Flush the buffers.

  • Continue with the call that prompted the flush.

The application is informed of the error through the standard precompiler error mechanisms such as the sqlca in Pro*C.

The "implicit_svpt" option controls whether an implicit savepoint is taken prior to the start of a new batched insert.

  • If yes, a savepoint is taken prior to the start of a new batch of rows. If an error occurs on the insert, an implicit "rollback to savepoint" is executed.

  • If no, there is no implicit savepoint taken. If an error occurs on the buffered insert, then it is reported back to the application, but no rollback is executed. Errors are reported asynchronously for buffer inserts. Errors for inserted rows are not reported when the INSERT statement is executed in the application.

    • Some errors for inserted rows are reported later, when the first statement other than the INSERT is executed. This may include DELETE, UPDATE, INSERT (into different tables), COMMIT, and ROLLBACK. Any statement that closes the buffered insert statement can report an error. In such cases, the statement that reports the error is not executed. You need to first handle the error and also reexecute the statement on which the buffered insert error is reported. Otherwise, you may rollback the transaction and reexecute it.

      For example, consider using a COMMIT statement to close a buffered insert loop. COMMIT can report an error because of a duplicate key from an earlier insert. In this scenario, the commit is not executed. You should first handle the error and then reexecute COMMIT. Otherwise, you can rollback the transaction and reexecute it.

    • Some errors are reported on the insert itself, and may reflect an error of a previously inserted row. In such cases, no further inserts are executed. You need to handle the errors of the previously inserted row and continue inserting the current insert, which is a long process. Instead, you may rollback and reexecute the transaction.

      For example, consider that the limit of internal buffer is 10 rows and the application is inserting 15 rows in a loop. Suppose there is an error on the 8th row. The error is reported when the 11th row insert happens and the insert is no more executed further.

The following are some of the possible errors that you might face during buffered insert:

  • ORA-00001: duplicate key in index

  • ORA-01400: mandatory (not null) column is missing or Null during insert

  • ORA-01401: inserted value too large for column

  • ORA-01438: value larger than specified precision allows for this column

Example 8-2 Inserting Buffered Rows into a Table

This program inserts LOOPCNT number of rows into the EMP table. At loop counter=5, this program attempts to insert an invalid empno. Without the max_row_insert option, the program inserts all rows except the invalid row. When the max_row_insert option is set to LOOPCNT, only the first four rows are inserted.

Using the max_row_insert option, when the erroneous statement is removed, the program performs the same way an array insert program would.

/* 
 * bufinsdemo.pc 
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <sqlca.h>

/* Number of rows to be inserted into the table */
#define LOOPCNT 100

/* Define a host structure
   for inserting data into the table 
   and for fetching data from the table */
struct emprec
{
  int empno;
  varchar ename[10];
  varchar job[9];
  int mgr;
  char hiredate[10];
  float sal;
  float comm;
  int deptno;
};
typedef struct emprec buffinstyp;

/* Function prototypes */
void sql_error();
void insertdata();
void fetchdata();
void printempdata(buffinstyp);

void main()
{

  exec sql begin declare section;
    char *uid = "scott/tiger";
  exec sql end declare section;

  exec sql whenever sqlerror do sql_error();
  exec sql connect :uid;

  printf("\nInserting %d rows into EMP table.\n", LOOPCNT);
  insertdata();
  printf("\nFetching inserted data from EMP table.\n");
  fetchdata();

  exec sql delete from emp where empno < 1000;

  exec sql commit work release;
  exit(EXIT_SUCCESS);
}

/* Inserting data into the table */
void insertdata() 
{
  int i, cnt;
  char *str;
  buffinstyp emp_in;

  /* To store temporary strings */
  str = (char *)malloc (25 * sizeof(char));

  /*
   * When max_row_insert option is set to LOOPCNT and when the errorneous
   * statement is removed, all the rows will be inserted into the database in
   * one stretch and hence maximum performance gain will be achieved.
 */
  for (i = 1; i <= LOOPCNT; i++)
  {
    if (i != 5)
      emp_in.empno = i;
    else
    /* Errorneous statement. In emp table, empno is defined as number(4). */
      emp_in.empno = 10000;

    sprintf(str, "EMP_%03d", i);
    strcpy (emp_in.ename.arr, str);
    emp_in.ename.len = strlen (emp_in.ename.arr);
    sprintf(str, "JOB_%03d", i);
    strcpy (emp_in.job.arr, str);
    emp_in.job.len = strlen (emp_in.job.arr);
    emp_in.mgr = i+1001;
    sprintf(str, "%02d-MAY-06", (i%30));
    strcpy (emp_in.hiredate, str);
    emp_in.sal = (i) * 10;
    emp_in.comm = (i) * 0.1;
    emp_in.deptno = 10;

    exec sql insert into emp values (:emp_in);
  }

  free (str);

  exec sql commit;

  exec sql select count(*) into :cnt from emp where ename like 'EMP_%';
  printf ("Number of rows successfully inserted into emp table: %d\n", cnt);
}

/* Fetches data from the table*/
void fetchdata()
{
  buffinstyp emp_out;

  /* Declares cursor to fetch only the rows that are inserted */
  exec sql declare c1 cursor for
         select empno, ename, job, mgr, hiredate, sal, comm, deptno
         from emp where ename like 'EMP_%' order by empno;
  
  exec sql open c1;

  exec sql whenever not found do break;
  while(1)
  {
    /* Fetches single row at each call */
    exec sql fetch c1 into :emp_out;
    printempdata(emp_out);
  }
  exec sql whenever not found do sql_error();

  exec sql close c1;
}

/* Prints the fetched employee data */
void printempdata(buffinstyp emp_out)
{
  emp_out.ename.arr[emp_out.ename.len] = '\0';
  emp_out.job.arr[emp_out.job.len] = '\0';
  printf("Empno=%d, Ename=%s, Job=%s, Mgr=%d, Hiredate=%s, Sal=%6.2f,\n"
         "Comm=%5.2f, Deptno=%d\n", emp_out.empno, emp_out.ename.arr,
 emp_out.job.arr, emp_out.mgr, emp_out.hiredate, emp_out.sal,
 emp_out.comm, emp_out.deptno);
}

/* Error handling function. */
void sql_error()
{
   printf("Error %s\n", sqlca.sqlerrm.sqlerrmc);
   printf(" Rows Processed: %d\n", sqlca.sqlerrd[2]);
   printf(" Rows Rolled Back: %d\n", sqlca.sqlerrd[0]);
}

Scrollable Cursors

A scrollable cursor is a work area where Oracle executes SQL statements and stores information that is processed during execution.When a cursor is executed, the results of the query are placed into a a set of rows called the result set. The result set can be fetched either sequentially or non-sequentially. Non-sequential result sets are called scrollable cursors. A scrollable cursor enables users to access the rows of a database result set in a forward, backward, and random manner. This enables the program to fetch any row in the result set.

PK/^HOHPK +Aoa,mimetypePK+A7W?::iTunesMetadata.plistPK+AYuMETA-INF/container.xmlPK+Ah8z3zOEBPS/pc_20exi.htmPK+Au^OEBPS/pc_15ody.htmPK+A[pTO'ZOEBPS/cover.htmPK+Am\OEBPS/whatsnew.htmPK+AxQ=$mOEBPS/pc_10opt.htmPK+A_> 8$5mOEBPS/pc_14ady.htmPK+A &H OEBPS/pc_03dbc.htmPK+AUaOEBPS/title.htmPK+A\KBvBC!OEBPS/pc_afemb.htmPK+A3$&d OEBPS/pc_13dyn.htmPK+AKrޚ&R Rf OEBPS/pc_09err.htmPK+ASOEBPS/pc_06sql.htmPK+Ap94OEBPS/partpage1.htmPK+Ao#~ayaOEBPS/pc_12cpl.htmPK+Aq*I>OEBPS/preface.htmPK+Ak[QG\OEBPS/pc_11thr.htmPK+A G^;HOEBPS/index.htmPK+ANٛϛ:hOEBPS/pc_agsmp.htmPK+AdKQQSOEBPS/img/insert.gifPK+A[j(v7VOEBPS/img/lnpcc009.gifPK+A+@H;HOEBPS/img/select_b.gifPK+A  !OEBPS/img/connection_pooling.gifPK+AmFi d 3OEBPS/img/dcltabob.gifPK+A F@P;PAOEBPS/img/lnpcc019.gifPK+A PKOEBPS/img/execi.gifPK+A ;OEBPS/img/regconn.gifPK+AK 77OEBPS/img/objget.gifPK+AOEBPS/img/ms1.gifPK+A"qOEBPS/img/collres.gifPK+A0^% 7OEBPS/img/lobtrim.gifPK+A3Ix gg;OOEBPS/img/setdnc.gifPK+A^88OEBPS/img/lobwri.gifPK+ATfQiTdTiOEBPS/img/lnpcc003.gifPK+A~?ހDOEBPS/img/getdnc.gifPK+A^_Z@OEBPS/img/conuse.gifPK+Aqs1""OEBPS/img/lobcop.gifPK+AHiOEBPS/img/lnpcc017.gifPK+Aɟ**z}OEBPS/img/alldesc.gifPK+AUwYOEBPS/img/select.gifPK+A6dd[OEBPS/img/lnpcc021.gifPK+A|`++OEBPS/img/rollb.gifPK+A 32-OEBPS/img/dcltab.gifPK+A!OEBPS/img/lobficl.gifPK+A`j::!OEBPS/img/connect.gifPK+A*Tm11|P!OEBPS/img/openo.gifPK+Aؽqls!OEBPS/img/optional.gifPK+A['{v(!OEBPS/img/lobatt.gifPK+A=7yftf!OEBPS/img/lnpcc070.gifPK+Aw"OEBPS/img/describe.gifPK+A`FW+ & 2"OEBPS/img/allocat.gifPK+AH`,[,qR"OEBPS/img/objcrea.gifPK+Ae52, ' "OEBPS/img/dcldbase.gifPK+A>t!"OEBPS/img/lobfise.gifPK+A "OEBPS/img/close.gifPK+Av@--"OEBPS/img/collatt.gifPK+Aнc4/"OEBPS/img/lobdisab.gifPK+A\"OEBPS/img/lobapp.gifPK+A5nNNs#OEBPS/img/delete.gifPK+AX>(9(Bf#OEBPS/img/lobdesc.gifPK+ACÎ#OEBPS/img/cache.gifPK+A_/: !!#OEBPS/img/prepare.gifPK+Al"&&0#OEBPS/img/ms3.gifPK+A=x#OEBPS/img/lnpcc011.gifPK+A +t&tF{$OEBPS/img/lnpcc010.gifPK+A&vLG$OEBPS/img/conobget.gifPK+A&4/E%OEBPS/img/objtab.gifPK+A>.)))%OEBPS/img/commit.gifPK+A4\ +;%OEBPS/img/ms5.gifPK+AfS%OEBPS/img/dcl_stmt.gifPK+Arv j%OEBPS/img/objdel.gifPK+A -j(j:%OEBPS/img/update.gifPK+AU-)%OEBPS/img/lnpcc068.gifPK+A&gbr&OEBPS/img/lobclose.gifPK+AT|c.^.&OEBPS/img/fetcha.gifPK+AW Xn..f&OEBPS/img/objder.gifPK+AaҋyGtGI&OEBPS/img/execa.gifPK+A'~XS,'OEBPS/img/lobopen.gifPK+A( (H'OEBPS/img/descans.gifPK+A2Rp*%p'OEBPS/img/first.gifPK+AW5OQ L ['OEBPS/img/reqp.gifPK+A/'OEBPS/img/execeex.gifPK+Acm./)/'OEBPS/img/lnpcc002.gifPK+A.$'OEBPS/img/lnpcc069.gifPK+A" W(OEBPS/img/lobflbuf.gifPK+A6>lbp(OEBPS/img/lnpcc014.gifPK+AYd )OEBPS/img/performgraph_case1.gifPK+Ax%[V)OEBPS/img/lobcreat.gifPK+AB-)OEBPS/img/return.gifPK+A\gr::dL)OEBPS/img/getdesc.gifPK+A$43/3)OEBPS/img/execo.gifPK+A@5 )OEBPS/img/objupd.gifPK+Anf\)OEBPS/img/free.gifPK+A*..=)OEBPS/img/fetch2.gifPK+A@B **&*OEBPS/img/var.gifPK+AإQ*OEBPS/img/lnpcc016.gifPK+A W;;D*OEBPS/img/setdesc.gifPK+A1SIDy3+OEBPS/img/dealdesc.gifPK+A*I_M+OEBPS/img/savep.gifPK+A//a+OEBPS/img/collapp.gifPK+AH)Y$Y+OEBPS/img/lnpcc022.gifPK+A&))q+OEBPS/img/collset.gifPK+A)&t)),OEBPS/img/collget.gifPK+A13,+>,OEBPS/img/performance_graph.gifPK+A]Xlj,OEBPS/img/lnpcc020.gifPK+Aʕ ,OEBPS/img/lobass.gifPK+AZSҠ##,OEBPS/img/call.gifPK+Aσ-,OEBPS/img/lnpcc015.gifPK+A݇D))i-OEBPS/img/whenevrc.gifPK+A,}}-OEBPS/img/lnpcc012.gifPK+Ap'0"0.OEBPS/pc_adchk.htmPK+A;j0'B.OEBPS/img_text/objset.htmPK+AD^-D.OEBPS/img_text/setdnc.htmPK+AxB6v%pF.OEBPS/img_text/performgraph_case2.htmPK+A}IeHH.OEBPS/img_text/lobenab.htmPK+ABJ.OEBPS/img_text/objupd.htmPK+AL.OEBPS/img_text/execeex.htmPK+A|~,wN.OEBPS/img_text/reqp1.htmPK+ABtQ.OEBPS/img_text/lobclose.htmPK+AS.OEBPS/img_text/collget.htmPK+AhU.OEBPS/img_text/openo.htmPK+A*W.OEBPS/img_text/lnpcc071.htmPK+AwY.OEBPS/img_text/opena.htmPK+Aj[.OEBPS/img_text/rollb.htmPK+AD].OEBPS/img_text/regconn.htmPK+A1/_.OEBPS/img_text/savep.htmPK+Amb?:a.OEBPS/img_text/lnpcc013.htmPK+A0nd.OEBPS/img_text/part.htmPK+AE[\f.OEBPS/img_text/commit.htmPK+AFh.OEBPS/img_text/lnpcc014.htmPK+Auj.OEBPS/img_text/ms3.htmPK+AvT"m.OEBPS/img_text/lnpcc070.htmPK+A"pҾ+o.OEBPS/img_text/lnpcc008.htmPK+AkEk2q.OEBPS/img_text/call.htmPK+A,l.s.OEBPS/img_text/collatt.htmPK+A gu.OEBPS/img_text/objrel.htmPK+ARqw.OEBPS/img_text/objtab.htmPK+A11y.OEBPS/img_text/lobass.htmPK+A8Q${.OEBPS/img_text/objder.htmPK+Az~}.OEBPS/img_text/lnpcc022.htmPK+A+f .OEBPS/img_text/getdnc.htmPK+AZiw0.OEBPS/img_text/var.htmPK+A}[).OEBPS/img_text/connect.htmPK+ASƻ..OEBPS/img_text/update.htmPK+A4*G0.OEBPS/img_text/conobset.htmPK+AI.OEBPS/img_text/lobdisab.htmPK+A S.$^.OEBPS/img_text/performance_graph.htmPK+A~6.OEBPS/img_text/enable_t.htmPK+AҗɿD.OEBPS/img_text/execa.htmPK+AծjP.OEBPS/img_text/lobfrtem.htmPK+ANGb.OEBPS/img_text/ms5.htmPK+Azė.OEBPS/img_text/allocat.htmPK+Aهʙ.OEBPS/img_text/prepare.htmPK+Aϛ.OEBPS/img_text/alldesc.htmPK+A.OEBPS/img_text/whenevrc.htmPK+AO.OEBPS/img_text/return.htmPK+A IKD.OEBPS/img_text/delete.htmPK+ARA$.OEBPS/img_text/dcltab.htmPK+A'U.OEBPS/img_text/lobatt.htmPK+A3F.OEBPS/img_text/dcltabob.htmPK+A\(d.OEBPS/img_text/objflu.htmPK+A1l.OEBPS/img_text/execi.htmPK+Ajw.OEBPS/img_text/lnpcc012.htmPK+A߰o.OEBPS/img_text/loblofr.htmPK+A݈.OEBPS/img_text/lnpcc003.htmPK+Alᬰ.OEBPS/img_text/conuse.htmPK+AKMX.OEBPS/img_text/lobapp.htmPK+Ah7¸.OEBPS/img_text/select.htmPK+AҎĺ.OEBPS/img_text/dclco.htmPK+A's̼.OEBPS/img_text/setdesc.htmPK+Aؾ.OEBPS/img_text/dealdesc.htmPK+ApJE.OEBPS/img_text/type.htmPK+A^QL.OEBPS/img_text/lnpcc017.htmPK+A)q.OEBPS/img_text/cache.htmPK+A.OEBPS/img_text/conobget.htmPK+AUe˕.OEBPS/img_text/lobfise.htmPK+AĤ.OEBPS/img_text/lobficl.htmPK+Ah̓.OEBPS/img_text/lnpcc011.htmPK+Ay.OEBPS/img_text/fetch2.htmPK+Ar.OEBPS/img_text/lnpcc004.htmPK+A=J.OEBPS/img_text/objget.htmPK+A“%.OEBPS/img_text/performgraph_case1.htmPK+Aoʽ.OEBPS/img_text/lobcop.htmPK+Aɗ.OEBPS/img_text/lnpcc001.htmPK+AjZ".OEBPS/img_text/optional.htmPK+A- Y.OEBPS/img_text/insert.htmPK+A4?[.OEBPS/img_text/lobopen.htmPK+A2a.OEBPS/img_text/lobcreat.htmPK+A:ڃ~u.OEBPS/img_text/syntax.htmPK+AQ^?.OEBPS/img_text/descans.htmPK+AP.OEBPS/img_text/reqp.htmPK+A7*.OEBPS/img_text/lobtrim.htmPK+AlS0.OEBPS/img_text/dcldbase.htmPK+AO@.OEBPS/img_text/lobread.htmPK+AbHF.OEBPS/img_text/fetcho.htmPK+A[VG.OEBPS/img_text/objdel.htmPK+A-P.OEBPS/img_text/colldes.htmPK+AM kfa.OEBPS/img_text/lnpcc015.htmPK+Amk.OEBPS/img_text/free.htmPK+AL.OEBPS/img_text/lnpcc023.htmPK+A?,2.OEBPS/img_text/lobwri.htmPK+A2O7/OEBPS/img_text/select_b.htmPK+A/F=/OEBPS/img_text/dcltype.htmPK+A@(=G/OEBPS/img_text/getdesc.htmPK+AUS/OEBPS/img_text/describe.htmPK+A[ /OEBPS/img_text/ms2.htmPK+A7/ /OEBPS/img_text/dcl_stmt.htmPK+A]ܥ /OEBPS/img_text/collset.htmPK+A :/OEBPS/img_text/lnpcc002.htmPK+A}/OEBPS/img_text/confree.htmPK+A2/OEBPS/img_text/insert2.htmPK+A8L/OEBPS/img_text/conall.htmPK+A}ge/OEBPS/img_text/lnpcc020.htmPK+A1%/OEBPS/img_text/connection_pooling.htmPK+AQ8F/OEBPS/img_text/lnpcc021.htmPK+AEW/OEBPS/img_text/ms1.htmPK+Ai /OEBPS/img_text/objcrea.htmPK+AD "/OEBPS/img_text/close.htmPK+AfQ$/OEBPS/img_text/first.htmPK+AO\'/OEBPS/img_text/lobdesc.htmPK+Au&)/OEBPS/img_text/execo.htmPK+A +/OEBPS/img_text/lnpcc005.htmPK+A!;./OEBPS/img_text/fetcha.htmPK+ASRG0/OEBPS/img_text/collres.htmPK+A BU2/OEBPS/img_text/lobflbuf.htmPK+A%Fe4/OEBPS/img_text/lnpcc072.htmPK+AGDcv6/OEBPS/img_text/lnpcc016.htmPK+Ajg9/OEBPS/img_text/loberas.htmPK+AE/OEBPS/img_text/lnpcc068.htmPK+AiwUG/OEBPS/img_text/lnpcc009.htmPK+ASI/OEBPS/img_text/collapp.htmPK+ACM7!W > K/OEBPS/pc_05adv.htmPK+AjPQ+L+7Y1OEBPS/pc_ahintegrat.htmPK+Ap̈́1OEBPS/pc_02prc.htmPK+ACP/(um2OEBPS/pc_01int.htmPK+A&Usn2OEBPS/partpage2.htmPK+Al@ xxH3OEBPS/pc_19ott.htmPK+AËNI bz4OEBPS/toc.ncxPK+A%VC>4OEBPS/pc_aeops.htmPK+A$Q}X>|9|n4OEBPS/pc_actun.htmPK+Aá+*(5OEBPS/pc_04dat.htmPK+Ak<5B8-T7OEBPS/content.opfPK+A_ 7OEBPS/dcommon/prodbig.gifPK+AY@ 7OEBPS/dcommon/doclib.gifPK+ACrrX7OEBPS/dcommon/oracle-logo.jpgPK+A|o8OEBPS/dcommon/contbig.gifPK+Agu8OEBPS/dcommon/darbbook.cssPK+AMά""!u8OEBPS/dcommon/O_signature_clr.JPGPK+APz ߘ8OEBPS/dcommon/feedbck2.gifPK+A-78OEBPS/dcommon/feedback.gifPK+Aː5L8OEBPS/dcommon/booklist.gifPK+AN618OEBPS/dcommon/cpyr.htmPK+A!:3.)8OEBPS/dcommon/masterix.gifPK+AeӺ1,8OEBPS/dcommon/doccd.cssPK+A7 8OEBPS/dcommon/larrow.gifPK+A#A8OEBPS/dcommon/indxicon.gifPK+AS'"8OEBPS/dcommon/leftnav.gifPK+Ahu,8OEBPS/dcommon/uarrow.gifPK+Al-OJ58OEBPS/dcommon/oracle.gifPK+A(8OEBPS/dcommon/index.gifPK+AGC 8OEBPS/dcommon/bookbig.gifPK+AJV^08OEBPS/dcommon/rarrow.gifPK+A枰pkK8OEBPS/dcommon/mix.gifPK+Ao"nR M 8OEBPS/dcommon/doccd_epub.jsPK+Av I 8OEBPS/dcommon/toc.gifPK+A r~$8OEBPS/dcommon/topnav.gifPK+A1FAP8OEBPS/dcommon/prodicon.gifPK+A3( # 8OEBPS/dcommon/bp_layout.cssPK+Ax[?:O8OEBPS/dcommon/bookicon.gifPK+Ap*c^8OEBPS/dcommon/conticon.gifPK+Aʍ9OEBPS/dcommon/blafdoc.cssPK+A+&9OEBPS/dcommon/rightnav.gifPK+Aje889OEBPS/dcommon/oracle-small.JPGPK+Aއ{&!4T9OEBPS/dcommon/help.gifPK+AQ%??U9OEBPS/pc_aanew.htmPK+A U41^"^ 9OEBPS/toc.htmPK+ASOҼQ:OEBPS/pc_17obj.htmPK+A?(`nZM<OEBPS/pc_16lob.htmPK+AD>OEBPS/partpage3.htmPK+AŎS4%>OEBPS/pc_18col.htmPK+AX337?OEBPS/pc_07pls.htmPK+AHLDyyk@OEBPS/pc_abres.htmPK+A/^HOH@OEBPS/pc_08arr.htmPKBBV-B