Data Warehouse Center Administration Guide

Chapter 4. Setting up access to a warehouse

Each set of users will access a warehouse. The operating system you choose for the warehouse depends on capacity planning, the operating system that the users work on, and on your network constraints. The DB2 family of databases can support a wide variety of capacity requirements, so select the database that is appropriate for your warehouse.

Warehouse users must have access to the warehouse database. They can use any application that can access DB2 data.


Setting up a DB2 Universal Database warehouse

You can use any DB2 Universal Database database as a warehouse. For more information about connecting to DB2 Universal Database databases through a DB2 Universal Database server or through any DB2 client, see DB2 Universal Database Installation and Configuration Supplement.

Defining privileges to DB2 Universal Database warehouses

Before setting up a warehouse, you need to create a database on the target system. Then set up a user ID with the following privileges for the database:

In addition, explicit SELECT privilege is required for the following system tables:

Establishing connectivity to DB2 Universal Database warehouses

After you define the required privileges, perform the following tasks at the agent site:

  1. Set up communications to the target system, if the database is remote.
  2. Catalog the node of the target system if the database is remote.
  3. Catalog the database.
  4. Register the database as an ODBC system DSN if you are using the Windows NT or OS/2 warehouse agent, or the version of the AIX or Solaris Operating Environment warehouse agent that uses ODBC. If you are using the AIX or Solaris Operating Environment warehouse agent that uses the CLI interface, catalog the database using DB2 catalog utilities.
  5. Bind database utilities and ODBC(CLI) to the target database. Perform the bind only once from each type of client.

Setting up a DB2 for AS/400 warehouse

You can use DB2 Connect or Client Access/400 (CA/400) to access a DB2 for AS/400 warehouse.

Using DB2 Connect

To set up access to a DB2 for AS/400 warehouse with DB2 Connect:

  1. Verify that the gateway server has the prerequisite products installed.
  2. Define privileges to the warehouse.
  3. Set up the DB2 Connect gateway site.
  4. Establish connectivity to the warehouse.

Prerequisite products

If you want to access data from a DB2 for AS/400 warehouse, you need a gateway site. Configure the site for DRDA by installing DB2 Connect.

For more information about DRDA, see the Distributed Relational Database Architecture Connectivity Guide.

For information about DB2 Connect, see the following books:

Defining privileges to DB2 for AS/400 warehouses

The system administrator of the target system must set up a user ID with CHANGE authority or higher on the NULLID collection.

In addition, explicit SELECT privilege is required for the following system tables:

The user ID also needs the ALLOBJ privilege to create AS/400 collections.

Setting up the DB2 Connect gateway site

After you define the required privileges, perform the following tasks at the gateway site:

  1. Install DB2 Connect.
  2. Configure your DB2 Connect system to communicate with the target database.
  3. Update the DB2 node directory, system database directory, and DCS directory.

Establishing connectivity to DB2 for AS/400 warehouses

Perform the following tasks at the agent site:

  1. Set up communications to the DB2 Connect site.
  2. Catalog the node of the DB2 Connect site.
  3. Catalog the database.
  4. Register the database as a system DSN by using the ODBC Administrator.
  5. Bind the DB2 Connect utilities to the DRDA server as described in the DB2 Connect User's Guide. Perform the bind only once from each type of client.

Using CA/400

To set up CA/400 for access to a DB2 for AS/400 database:

  1. Install the latest Client Access PTFs on the AS/400.

    To see a full list of the latest informational APARs that will tell you which PTFs are needed for your AS/400, visit the following web page:

    http://www.as400.ibm.com/clientaccess/
    
  2. Under Support Information, select Service Packs.

    On the Client Access Service Packs web page, you can find information about the latest workstation service packs and host PTFs.

    To check the current level of your operating system:

    1. Type the following command:
      GO LICPGM
      
    2. Select Option 10.
    3. Press F11.
  3. Ensure that the AS/400 QUSER password is set (not expiring). You can set the password to no password, if required.
  4. Enter the TCP/IP host name for the AS/400 system and the Windows NT workstation in the WINNT\SYSTEM32\DRIVERS\ETC\HOSTS file. For example:
    9.123.456.7   demo400
    9.123.456.8   mypc
    
  5. Install CA/400 on the Windows NT workstation.
  6. Verify that all the servers on the AS/400 system are running. Enter the following command from a DOS command prompt on the Windows NT workstation:
    cwbping hostname ip
    

    You will receive a response like this:

    C:\>cwbping demo400 ip   
     
    IBM AS/400 Client Access for Windows 95/NT  
    Version 3  Release 1  Level 2   
     
    (C) Copyright IBM Corporation and Others 1984, 1995.  
    All rights reserved.  
    U.S. Government Users Restricted Rights - Use, duplication or  
    disclosure restricted by GSA ADP Schedule Contract with IBM Corp.  
    Licensed Materials - Property of IBM   
    [9.180.160.17]  
    pinging server Port Mapper successful  
    pinging server as-central successful  
    pinging server as-database successful  
    pinging server as-dtaq successful  
    pinging server as-file successful  
    pinging server as-netprt successful  
    pinging server as-rmtcmd successful  
    pinging server as-signon successful 
    

    If the servers are not started, enter the following command on the AS/400 system to start the servers:

    STRHOSTSVR SERVER (*ALL)
    
  7. Verify that the AS/400 has a defined DB2 database name. You can check this entry by issuing the Work with Relational Database Directory Entries (WRKRDBDIRE) command on the AS/400.

    If the AS/400 does not have a DB2 database name, you will receive an SQL0114 error when you try to access the database.

  8. Set the DB2CODEPAGE environment variable to 850 in the Windows NT system variables (not user variables).
  9. Download the latest CA/400 service pack and the CWBCFG utility from the Web. You can obtain full details of how to download SP45545 and cwbcfg.exe from the following Web page:
    http://www.as400.ibm.com/clientaccess/service.htm
    
  10. Apply the service pack and run the CWBCFG utility to enable CA/400 to run as a system task on Windows NT.

    If you do not apply service pack SP45545 and run the CWBCFG utility, you will receive the following error message:

    "IBM.[Client Access ODBC Driver (32 bit)][DB2/400 SQL] Communications  
    failure. COMM RC=0x3" 
     
    CAUSE: according to the Rochester lab. the CA/400 connection    
    was registered under the "current user" (HKEY_CURRENT_USERS) but    
    should be under HKEY_USERS (.Default). 
     
    SOLUTION: you need to register the connection in the correct register,   
    using the stand-alone utility cwbcfg.exe, which can be used to   
    configure a session for the HKEY_USERS.Default user. 
    The correct syntax for cwbcfg is: 
    cwbcfg  /host HOSTNAME /s 
     
    where HOSTNAME is the AS/400 name in your HOSTS file, (see step 3). 
     
    NOTE: the "/s" option is important.  After this command you can verify 
    that the NT registry is set up by running regedt32 and browse   
    HKEY_USERS (.Default) 
    
  11. Use the CA/400 ODBC driver to register the AS/400 database as a system DSN. Add other libraries as required, for example, DORMERK,QGPL,MYLIBRARY
  12. Test the connection to the AS/400 database with Lotus Approach(R) or Microsoft Query.

    If you receive CA/400 errors, click Help for a detailed explanation of the error.


Setting up a DB2 for OS/390 warehouse

By default, the Data Warehouse Center creates warehouse target tables in a format that is supported by the DB2 Universal Database products. You also can tailor steps to work with target tables in DB2 for OS/390(R).

Defining privileges to DB2 for OS/390 warehouses

Before setting up a warehouse, you need to create a database on the target system. Then set up a user ID with the following privileges for the database:

Establishing connectivity to the DB2 for OS/390 warehouse database

To establish connectivity to the DB2 for OS/390 database, perform the following tasks:

  1. Set up access to DB2 for OS/390.
  2. Connect to the warehouse database.

Creating the Data Warehouse Center status table

Create the Data Warehouse Center status table by using the following command:

 CREATE TABLE IWH.BVBESTATUS (BVNAME VARCHAR(80) NOT NULL,  RUN_ID INT NOT NULL, 
 UPDATIME CHAR(26) NOT NULL) IN database-name.tablespace-name

database-name
The name of the warehouse database

tablespace-name
The name of the table space that contains the database

Defining the warehouse to the Data Warehouse Center

When you define a target table for a DB2 for OS/390 warehouse, you must specify a tablespace in which to create the table. If you do not specify a tablespace, DB2 for OS/390 creates the table in the default DB2 database defined for the given subsystem.

To specify the tablespace:

  1. Define a warehouse.
  2. Define or generate a target table.
  3. Right-click the target table, and click Properties.

    The Table notebook opens.

  4. In the Table space field, specify the table space in which to create the table.
  5. Click OK.

    The Table notebook closes.

    When you promote the step to test mode, if you specified that the Data Warehouse Center is to create the target table, the Data Warehouse Center creates the target table in the DB2 for OS/390 database.


Setting up a DB2 EEE warehouse

By default, the Data Warehouse Center creates warehouse target tables in a format that is supported by the DB2 Universal Database products. You also can tailor steps to work with target tables in DB2 UDB Enterprise - Extended Edition (DB2 EEE).

Defining privileges to the DB2 EEE database

Before setting up a warehouse, you need to create a database on the target system. Then set up a user ID with the following privileges for the database:

Establishing connectivity to the DB2 EEE database

Set up access to DB2 EEE by following the instructions in Establishing connectivity to DB2 Universal Database warehouses, starting with the explicit SELECT privilege.

Defining the DB2 EEE database to the Data Warehouse Center

After setting up access to the system, perform the following tasks in the Data Warehouse Center to use a DB2 EEE warehouse:

  1. Define a warehouse target.
  2. Define or generate a target table.
  3. Right-click the target table, and click Properties.

    The Table notebook opens.

  4. Click Show SQL.

    The Show SQL window opens.

  5. Click Edit.

    A confirmation window opens. Click Yes to edit the SQL.

  6. Add the following clause to the end of the CREATE statement:
    IN tablespace-name PARTITIONING KEY (column-name) USING HASHING
    

    tablespace-name
    The name of the table space that contains the database

    column-name
    The name of the column to use for partitioning
  7. Click OK.

    The Edit SQL window closes.

  8. Click OK.

    The Table notebook closes.

    When you promote the step to test mode, the Data Warehouse Center creates the target table in the DB2 EEE database.


Defining warehouses for use with DataJoiner

IBM DataJoiner provides several advantages for accessing data for steps. Instead of using ODBC support for non-IBM databases, you can use DataJoiner to access those databases directly using the native database protocols. You can also use DataJoiner to write to non-IBM databases. With DataJoiner, you can access and join data from different data sources with a single SQL statement and a single interface. The interface hides the differences between the different IBM and non-IBM databases. DataJoiner optimizes the SQL statement to enhance performance.

You can define Data Warehouse Center steps that take advantage of DataJoiner's function. First, you define warehouses that use DataJoiner databases. Then you define steps that write to those warehouses.

Before you read this section, read Chapter 2, Setting up your warehouse, Chapter 3, Setting up warehouse sources, Chapter 4, Setting up access to a warehouse, and Chapter 5, Defining and running processes to learn about the basic components of a warehouse. You should also be familiar with creating server mappings and nicknames in DataJoiner.

Create a separate logical warehouse definition in the Data Warehouse Center for each DataJoiner target database. For example, define one warehouse for each Oracle database, another warehouse for each Sybase database, and so on.

Specify the same DataJoiner database as the database for each logical warehouse. When the Data Warehouse Center generates the SQL to extract data from the source database and write data to the target database, the Data Warehouse Center generates a SELECT INSERT statement because the DataJoiner database is both the source and target database. DataJoiner then optimizes the query for the DataJoiner target databases (such as Oracle and Sybase). You can define steps with sources from more than one database by taking advantage of the DataJoiner heterogeneous join optimization.

To access the warehouse with a different Data Warehouse Center agent, change the name of the database, the user ID, and the password.

The BVBESTATUS table contains timestamps for the step editions in the warehouse database. You must create a BVBESTATUS table in the DataJoiner database or in each remote database.

If you create the BVBESTATUS table in the DataJoiner database, you must use two-phase commit to keep the table in sync with the remote warehouse databases.

If you create the BVBESTATUS table in the remote databases, updates to the table will be in the same commit scope as the remote databases. You must have a different DataJoiner database for each remote database, because the Data Warehouse Center requires that the name of the table be BVBESTATUS. One DataJoiner nickname cannot represent multiple tables in different databases.

To create the BVBESTATUS table, use the CREATE TABLE statement. For example, to create the table in an Oracle database, issue the following command:

CREATE TABLE BVBESTATUS (BVNAME, VARCHAR2(80) NOT NULL,
              RUN_ID NUMBER(10) NOT NULL,
              UPDATIME CHAR(26) NOT NULL)

After you create the table, create a nickname for the IWH.BVBESTATUS table in DataJoiner.

For more information about creating tables and nicknames in DataJoiner, see the DB2 DataJoiner: Administration Guide.

For more information about creating a server mapping in DataJoiner, see the DB2 DataJoiner: Planning, Installation, and Configuration Guide.


Creating target tables with DataJoiner

With DataJoiner Version 2.1.1 or later, the Data Warehouse Center can create tables directly into a remote database, such as Oracle.

To create the target table:

  1. Create a step with a target table in a DataJoiner database.
  2. In the Table notebook, type the server mapping name in the Tablespace Name field.

    In the example in Defining warehouse sources for use with DataJoiner, the server mapping name is Oracle 1.

  3. Determine what you need to do because the default table name qualifier for the Data Warehouse Center is IWH:

    If your user ID for the target database has the privilege to create a table with a qualifier that is different from your user ID, you can proceed to step 4.

  4. Promote the step to test mode.
  5. Run the step to verify that the correct data is written to the target table.
  6. Promote the step to production mode.

If you have a version of DataJoiner before to Version 2.1.1, you can either:

Moving the target table

You can create and test a step in a DataJoiner database, and then move it to a remote database:

  1. Create a step with a target table in a DataJoiner database.
  2. Promote the step to test mode.
  3. Run the step to verify that the connections to the source databases are working and that the correct data is written to the target table.
  4. Manually move the table to a remote database, such as Oracle. (You can also use a modeling or data dictionary tool.) The data types of the DataJoiner tables and the Oracle tables must be compatible.
    1. Create the table in the Oracle database.
    2. Drop the DataJoiner table.

    For information about how DB2 data types map to Oracle data types, see the DB2 DataJoiner: Planning, Installation, and Configuration Guide.

  5. Manually create a nickname for the remote table in DataJoiner. The nickname must match the name of the target table for the step in the Data Warehouse Center.
  6. Run the step again to test that the data moves through DataJoiner to the target correctly.
  7. Promote the step to production mode.

Creating or updating a table in a remote database

You can use the Data Warehouse Center to update an existing table in a remote database. Use this option when data already exists or when you are using another tool, such as a modeling tool, to create the warehouse schema.

  1. Create the warehouse tables or use existing warehouse tables.
  2. Create a nickname for the target table in DataJoiner.
  3. Import the nickname definition into a warehouse by selecting the table in the Tables list in the Warehouse Target notebook.

    In the Table notebook, the Columns page displays the imported table definition.

  4. Create a step in that warehouse, selecting the imported table as the target table for the step. On the Processing Options page of the Step Properties notebook, the Data Warehouse Center Created Table check box will not be selected. Verify that it is still not selected when you promote the step.
  5. Promote the step to test mode.
  6. Run the step to test access to the target tables.
  7. Promote the steps to production mode.

Defining a warehouse target

After you define the sources for your warehouse as warehouse sources, you define the warehouse target that will contain the data. The Data Warehouse Center supports the DB2 Universal Database and DB2 for AS/400 databases for your warehouse. You can also change the CREATE statement for the target table to work with DB2 EEE and DB2 for OS/390. For more information, see Setting up a DB2 EEE warehouse and Setting up a DB2 for OS/390 warehouse.

Defining warehouse target properties

Any warehouse user can define a warehouse target, but only users who belong to a warehouse group with access to the warehouse target can change the warehouse target. For information about defining users and security groups, see the online help.

To define a warehouse target:

  1. Right-click the Warehouse Targets folder.
  2. Click Define.

    The Warehouse Target notebook opens.

  3. In the Warehouse target name field, type the business name for the warehouse target.
  4. In the Administrator field, type a contact for the warehouse target.
  5. In the Description field, type a short description of the data.
  6. In the Warehouse target type list, select the version of the DB2 Universal Database for your operating system.
  7. Optional: In the Warehouse target area, specify whether to enable the warehouse target for transformers.
  8. Click the Agent Sites page. The sites that you can select are displayed in the Available Agent Sites list.
  9. From the Available agent sites list, select the name of the site that you want to give access to your warehouse target, and click >. Your agent site is added to the Selected agent sites list. The site can now be used to access the warehouse target.

    To include all of the items in the Available agent sites list, click >>.

  10. Click the Database tab.
  11. In the Database name field, type the name of the database.
  12. In the User ID field, type the user ID that will access the database from the agent site.
  13. In the Password field, type the password for the user ID.
  14. In the Verify Password field, type the password again.
  15. Click the Tables and views tab.
  16. If the target tables already exist, you can import their definitions from the database:
    1. Expand the Tables or Views folder.

      On OS/400 Version 4 Release 2 and Version 4 Release 3, you must select the View folder to import system tables.

      The Filter window opens.

      • Optional: Select Only tables that can be replicated to retrieve only those tables that have been enabled for replication.
      • Optional: Select Include system tables to retrieve system tables from the database.
      • Optional: In the Object schema field, type a search string, including wildcards, to define the characteristics of the schema names that contain the objects to be returned from the database. For example, XYZ* would return tables with schemas that start with these characters.
      • Optional: In the Object name field, type a search string, including wildcards, to define the characteristics of the table names to be returned from the database. For example, XYZ* would return tables that start with these characters.
    2. Click OK.

      If the warehouse target has more than one agent site selected, the warehouse server uses the agent site with the name that sorts first (depending on the user's locale) for the import.

      For example, your warehouse target has three agent sites selected: Default Agent, AIX Agent, and MVS Agent. The warehouse server uses the agent site named AIX Agent for the import.

      The objects that meet the filter criteria that you entered are displayed in the Available tables list.

      If the target tables do not exist, define the tables:

      1. Right-click the white space in the Selected tables list.
      2. Click Define.

        The Define Warehouse Target Table notebook opens.
        Figure db2tu023 not displayed.

      3. In the Table schema field, type the user ID under which you created the warehouse database.
      4. In the Table name field, type a fully qualified name for the table that you are creating. The name can contain up to 128 characters and be an ordinary or delimited identifier.

        The Data Warehouse Center supports target tables that use ordinary SQL identifiers. An ordinary identifier:

        • Must start with a letter.
        • Can include uppercase letters, number, and underscores.
        • Cannot be a reserved word.

        If a table has a lowercase letter as part of its ordinary identifier, the Data Warehouse Center stores the lowercase letter as an uppercase letter.

        The Data Warehouse Center does not support target resource tables that use delimited identifiers. A delimited identifier:

        • Is enclosed within quotation marks.
        • Can include uppercase and lowercase letters, numbers, underscores, and spaces.
        • Can contain a double quotation mark, represented by two consecutive quotation marks.

        Table names can be case sensitive, or have other restrictions, for some warehouse target types. See the documentation for your warehouse target type for information about naming conventions.

      5. Optional: In the Table space field, specify the table space in which to create the table.
      6. Optional: In the Index table space field, specify the table space in which to create any indexes on the table.
      7. In the Table name field, type the name of the target table.
      8. In the Description field, type the description of the table.
      9. In the Business Name field, type the business name (a descriptive name that users will understand) for the table.
      10. If you want the Data Warehouse Center to create this table when the step that populates this table is run, verify that the Data Warehouse Center created table check box is selected.

        Use this option when you want the Data Warehouse Center to create the target table, such as when the target table is the result of an SQL step. Clear this check box if you are using a target table that is already defined.

      11. If anyone who has access to the database is to have access to the table, verify that the Grant to Public check box is selected.
      12. Verify that the Part of an OLAP schema check box is selected if the table is a dimension table or fact table that is to be exported to DB2 OLAP Integration Server.
      13. Click the Columns tab.
      14. On the Columns page, right-click in the white space of the table and click Add, or right-click a row, and click Insert. If you click Add, a blank row is added below all other rows. If you click Insert, a blank row is inserted above the selected row.
      15. Type the name of the column in the Column name field.

        Column names can be case sensitive for some data source types. See the documentation for your data source type for information about naming conventions.

      16. In the Data type field, specify a data type for the column.
      17. If you specify a data type that requires a byte count, specify the length in the Length field.

        For example, you must specify a length for CHAR data types.

      18. If you specify the DECIMAL data type, specify the precision in the Precision field.

        Precision refers to the total number of digits, which can range from 1 to 131.

      19. If you specify the DECIMAL data type, specify the scale in the Scale field.

        Scale refers to the number of digits to the right of the decimal point, which can range from 0 to the precision of the number.

      20. To ensure that the code page is translated properly, select the Is Text check box if the CHAR or VARCHAR field contains text.
      21. Select the Nullable check box if null (nonexistent or unknown) values are allowed in the table.
      22. Optional: Select Replication before to capture the before-image of the column if the source is a replication source.
      23. Optional: Select Replication after if the column is defined for change capture.
      24. Optional: In the Description field, type a description for the column.
      25. Click OK.

        The Table notebook closes. The target table is added under the Tables folder in the Selected tables list.

  17. Click the Security tab.
  18. Select a warehouse group to grant your users in the group the ability to create steps that use this warehouse target.
  19. Click >.

    The warehouse group moves to the Selected security groups list.

  20. Click OK to save your changes and close the Warehouse Target notebook.

Defining a primary key

To define a warehouse primary key:

  1. On the Warehouse Primary Key page, select the column from the Available columns list that you want to define as a warehouse primary key, and click >. The column that you select is moved to the Warehouse Primary key columns list. The order of the columns that you specify is significant, because the database manager uses the warehouse primary key for efficient access to table data.

    To include all of the columns in the Available columns list, click >>.

  2. To remove a column from the warehouse primary key definition, select the column from the Warehouse Primary Key columns list and click <.

    To remove all of the columns from the warehouse primary key definition, click <<.

  3. Optional: Type a name for the warehouse primary key constraint for the table in the Constraint name field. You must move a column to the Warehouse Primary Key columns list in order to edit this field.

    The Data Warehouse Center generates a default name for the warehouse primary key constraint.

Defining foreign keys

You can define foreign keys for a warehouse source table, warehouse source view, or warehouse target table. The Data Warehouse Center uses foreign keys only in the join process. The Data Warehouse Center does not commit foreign keys that you define to the underlying database.

Before you define foreign keys, you must know the name and schema of the parent table to which the foreign keys correspond.

You can define foreign keys when the step is in development or test mode. If the step is in development mode, the key is created when you create the table by promoting the step to test mode. If the step is in test mode, the Data Warehouse Center alters the table to add the key when you click OK.

To define foreign keys:

  1. On the Foreign Keys page, right-click in the white space of the table, and click Define. The Define Foreign Key window opens.
  2. Optional: In the Constraint name field, type a name for the foreign key constraint for the table.

    If you don't provide a name, the Data Warehouse Center generates a default name for the foreign key constraint.

  3. In the Object schema field, select the table schema for the parent table.
  4. In the Object name field, select the name of the parent table.

    The Primary key columns field shows the primary key columns that are associated with the table that you specified.

  5. From the Available columns list, select the column that you want to define as a foreign key, and click >. The column is moved to the Foreign key columns list.

    To include all of the columns in the Available columns list, click >>.

    To remove a foreign key definition from the table or view, select the column from the Foreign key columns list, and click <.

    To remove all of the columns from the foreign key definition, click <<.

  6. Click OK. The Define Foreign Key window closes, and the foreign keys that you defined are displayed in the list of foreign keys on the Foreign Keys page.

If you selected a table that exists in the warehouse database (or you already ran the step), you can view the data in the target tables. You view the data from one table at a time. The Data Warehouse Center displays all the columns of the table, and up to a maximum of 200 rows.

To view the data, click Sample Data.

The Sample Data window opens and displays a sample of your data.


Creating the Data Warehouse Center status table in the warehouse database

Users can use the BVBESTATUS table to join tables by matching their timestamps or query editions by date range rather than by edition number.

For example, the edition number 1010 might not have any meaning to a user, but the dates on which the data was extracted might have meaning. You can create a simple view on the target table to allow users to query the data by the date on which it was extracted.

You must manually create the status table. If the table was created by Visual Warehouse Version 2.1, you must delete the table and create it again.

To create the status table:

  1. Connect to the target warehouse database.
  2. Issue the following CREATE TABLE statement:
    CREATE TABLE IWH.BVBESTATUS ( BVNAME VARCHAR(80) NOT NULL, 
    RUN_ID INT NOT NULL, UPDATIME CHAR(26)NOT NULL );
    

    You might need to change the statement, as follows:


[ Top of Page | Previous Page | Next Page ]