[No Subject]

{3COM/PDD/PeteW}@pdd.3mail.3com.com Wed, 28 April 1993 10:08 UTC

Received: from ietf.nri.reston.va.us by IETF.CNRI.Reston.VA.US id aa01614; 28 Apr 93 6:08 EDT
Received: from CS.UTK.EDU by IETF.CNRI.Reston.VA.US id aa01610; 28 Apr 93 6:08 EDT
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA04714; Wed, 28 Apr 93 05:23:57 -0400
X-Resent-To: chassismib@CS.UTK.EDU ; Wed, 28 Apr 1993 05:23:53 EDT
Errors-To: owner-chassismib@CS.UTK.EDU
Received: from gatekeeper.3Com.COM by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA04571; Wed, 28 Apr 93 05:23:38 -0400
Received: from gw.3Com.COM by gatekeeper.3Com.COM with SMTP id AA05893 (5.65c/IDA-1.4.4-910725 for <chassismib@cs.utk.edu>); Wed, 28 Apr 1993 02:23:28 -0700
Received: by gw.3Com.COM id AA16450 (5.65c/IDA-1.4.4 for chassismib@cs.utk.edu); Wed, 28 Apr 1993 02:23:21 -0700
Date: Wed, 28 Apr 1993 10:15:00 -0700
Sender: ietf-archive-request@IETF.CNRI.Reston.VA.US
From: {3COM/PDD/PeteW}@pdd.3mail.3com.com
Subject: [No Subject]
To: chassismib@cs.utk.edu
Message-Id: <930428.022510@3Mail.3Com.COM>
Msg-Date: 1993-04-28
Msg-Time: 10:15

Microsoft Mail v3.0 IPM.Microsoft Mail.Note
From: Wilson, Peter
To:  Chassis MIB
Date: 1993-04-28 10:09
Priority: 
Message ID: 69910251
Conversation ID: 69910251
Attachments:
     740-020.TXT

------------------------------------------------------------------------------

[[ 740-020.TXT : 2607 in 740-020.TXT ]]

---------------------------------------
Attachment: L:\MAILEXE2\MFFGET\740-020.TXT
---------------------------------------
I've modified the Chassis MIB sent around by Dave a couple of days ago
(the one that uses the full indices) to more accurately reflect my
thoughts on the chassis MIB. It was basically correct I wanted to
clarify a few points. Some of the changes are to the descriptions to
make things clearer, some are typos or ommisions. Dave: you should be
able to do some diffs between this and the one you sent to find the
descriptive differences. I removed the header and footers but ignoring
those I've not needlessly changed spacing etc. 

I started writing these as comments but soon found it easier this way.
I've included some comments in the MIB by using '-- &&'. These are
meant to be comments to the group, not a part of the eventual MIB!

I'm working on a couple of more complex examples at the moment which
I'll send shortly. Has anyone had the opportunity to try the model on
their device? Any comments? has anyone found the first two examples
useful, confusing, or whatever? Has anyone had a chance to consider
the indices on tables?

Summary:
1) Added OBJECT IDENTIFIERS for common types.
2) chasPhyLocationTable is a dense table with a single row for each
type of location. Your comments suggested this but then had an extra
index so that instances of location types could be enumerated. This
removed the chasPhyLocationIndex is removed.
3) I've renamed chasResourceTable to chasPhyResourceTable and
chasLogicalConfigTable to chasLogResourceTable for consistency (and
the objects under those branches).

Major Changes
=============
I've tried to tackle the as yet unmodified power supply and sensor MIB
groups. This is to bring them into line with the new model.

1) Removed the chasPowerSupplyTable. All the important information in
this table is available in the module table. A power supply module
is simply a module. By describing the PSU in the module table we allow
for those implementations where these is no distinction between a slot
that can accept a power supply or network card.

Things that are not in the module table should be considered for
inclusion in that table. These are:
            chasPowerSupplyHealthText,
            chasPowerSupplyWarnings,
            chasPowerSupplyFailures.
If these are useful then they are useful for any module.

2) Modified chasPowerSupplyOutputTable. In the new model each type of
output can be considered as a resource of a particular module. For
example suppose there are two PSU modules each of which have a 12V and
5V output. The model will map this as:

   Module Table              Resource Table                 Entity Table
   ======================================================================
   PSU Module 1 <------- PSU Module 1, Resource 1 -------->  5V PSU Entity
   PSU Module 1 <------- PSU Module 1, Resource 2 --------> 12V PSU Entity
   PSU Module 1 <------- PSU Module 1, Resource 1 -------->  5V PSU Entity
   PSU Module 1 <------- PSU Module 1, Resource 2 --------> 12V PSU Entity

The information in the output table then is extra information for the supply
resources. As such I've changed the index on this table to be the same
as the resource table (locationType, instance, resourceId). Note that
this is really neat in an SNMPv2 MIB because either the INDEX clause
can simply reference the resource table OR an AUGMENTS clause can be
used. Augments is probably more appropriate.

A final advantage is that the output resource is now identified by
it's location which it was not before. If a supply failed to deliver
correct voltage and there were several 5V resource there was no way to
know which had failed.

3) Sensor Table.
A sensor is also a resource of the chassis. I've changed this table in
a similar way to the power supply output table. The indices are now
locationType, instance and resource. This has the advantage again that
if there are multiple sensors of a particular type, it can be
identified by its location. This also removed the need for the OID
to identify the sensor type.

Sensors are an interesting chassis concept for the model. Every
resource should map to some entity, but individual entities are only
required to distinguish a particular agent or context. To map sensors
in a chassis simply provide a 'chassis' entity that contains all the
sensors and specifies that they are visible through the same view that
contains the chassis MIB.

ie
   Module Table              Resource Table                 Entity Table
   ======================================================================
   modularSlot.1 <---------------- 1 ----------------------> chassis
   modularSlot.2 <---------------- 1 ----------------------> chassis
   modularSlot.2 <---------------- 2 ----------------------> chassis
   ...

          CHASSIS-MIB DEFINITIONS ::= BEGIN

          IMPORTS
                  experimental, TimeTicks, IpAddress, Counter
                          FROM RFC1155-SMI
                  OBJECT-TYPE
                          FROM RFC1212
                  Party
                          FROM RFC1353-MIB;  -- SNMP Party MIB


          -- Textual Conventions

          DisplayString ::= OCTET STRING

          -- This data type is used to model textual information taken
          -- from the NVT ASCII character set.  By convention, objects
          -- with this syntax are declared as having
          --
          --      SIZE (0..255)


          AutonomousType    ::= OBJECT IDENTIFIER

          -- The object identifier is an independently extensible type
          -- identification value.  It may, for example indicate a
          -- particular sub-tree with further MIB definitions, or
          -- define something like a protocol type or type of
          -- hardware.

          chassis             OBJECT IDENTIFIER ::= { experimental 38 }

          -- Groups within the chassis MIB

          chasInfo            OBJECT IDENTIFIER ::= { chassis 1 }
          chasPhysical        OBJECT IDENTIFIER ::= { chassis 2 }
          chasEntity          OBJECT IDENTIFIER ::= { chassis 3 }
          chasResource        OBJECT IDENTIFIER ::= { chassis 4 }
          chasPowerSupply     OBJECT IDENTIFIER ::= { chassis 5 }
          chasEnviron         OBJECT IDENTIFIER ::= { chassis 6 }

          -- Chassis MIB Known Types
          chasKnownTypes      OBJECT IDENTIFIER ::= { chassis 8 }

          -- a) Values for known chasPhyLocationType. The types of
          --    location in the chassis.
          chasPubLocationTypes   OBJECT IDENTIFIER ::= { chasKnownTypes 1 }

          chasModularSlot     OBJECT IDENTIFIER ::= { chasPubLocationTypes 1 }
          chasPowerSupplyBay  OBJECT IDENTIFIER ::= { chasPubLocationTypes 2 }
          chasFanTray         OBJECT IDENTIFIER ::= { chasPubLocationTypes 3 }
          chasBackplane       OBJECT IDENTIFIER ::= { chasPubLocationTypes 4 }
          chasFrontSlot       OBJECT IDENTIFIER ::= { chasPubLocationTypes 5 }
          chasBackSlot        OBJECT IDENTIFIER ::= { chasPubLocationTypes 6 }

          -- b) Values for chasModuleType.
          chasPubModuleTypes  OBJECT IDENTIFIER ::= { chasKnownTypes 2 }
          chasLocationEmpty   OBJECT IDENTIFIER ::= { chasPubModuleTypes 1 }
          chasModuleUnknown   OBJECT IDENTIFIER ::= { chasPubModuleTypes 2 }

          -- c) Values for chasEntityObjectId.
          chasPubEntityTypes  OBJECT IDENTIFIER ::= { chasKnownTypes 3 }

             -- i) Things in the chassis, nothing to do with network.
             chasPubChassisEntities OBJECT IDENTIFIER ::= { chasPubEntityTypes 1 }

             chasPowerSupply  OBJECT IDENTIFIER ::= { chasPubChassisTypes  1 }
             chasChassis      OBJECT IDENTIFIER ::= { chasPubChassisTypes  2 }
             chasMonitors     OBJECT IDENTIFIER ::= { chasPubChassisTypes  3 }

             -- ii) Basic Network Entities
             chasPubNetEntities OBJECT IDENTIFIER ::= { chasPubEntityTypes 2 }

             chas8023Repeater OBJECT IDENTIFIER ::= { chasPubNetEntities 1 }
             chas8025Ring     OBJECT IDENTIFIER ::= { chasPubNetEntities 2 }
             chasFddiRing     OBJECT IDENTIFIER ::= { chasPubNetEntities 3 }
             chasAtmSwitch    OBJECT IDENTIFIER ::= { chasPubNetEntities 4 }
             chasFrameRelay   OBJECT IDENTIFIER ::= { chasPubNetEntities 5 }

             -- iii) Internetworking/Bridging
             chasPubConnectEntities OBJECT IDENTIFIER ::= { chasPubEntityTypes 3 }
             chasBridge    OBJECT IDENTIFIER ::= { chasPubConnectEntities 1 }
             chasRouter    OBJECT IDENTIFIER ::= { chasPubConnectEntities 2 }
             chasBrouter   OBJECT IDENTIFIER ::= { chasPubConnectEntities 3 }
             chasGateway   OBJECT IDENTIFIER ::= { chasPubConnectEntities 4 }

          -- d) Values for chasResourceType.
          chasPubResTypes  OBJECT IDENTIFIER ::= { chasKnownTypes 4 }

             -- i) Chassis type resources.
             chasPubChassisRes OBJECT IDENTIFIER ::= { chasPubResTypes 1 }

             -- ii) Basic Network Resource
             chasPubNetworkRes OBJECT IDENTIFIER ::= { chasPubResTypes 2 }

             chas8023RptrPort  OBJECT IDENTIFIER ::= { chasPubNetworkRes 1 }
             chas8025MauPort   OBJECT IDENTIFIER ::= { chasPubNetworkRes 2 }
             chasFddiPort      OBJECT IDENTIFIER ::= { chasPubNetworkRes 3 }
             chasAtmPort       OBJECT IDENTIFIER ::= { chasPubNetworkRes 4 }
             chas8023PortGroup OBJECT IDENTIFIER ::= { chasPubNetworkRes 5 }
             chas8025PortGroup OBJECT IDENTIFIER ::= { chasPubNetworkRes 6 }
             chasFddiPortGroup OBJECT IDENTIFIER ::= { chasPubNetworkRes 7 }
             chasAtmPortGroup  OBJECT IDENTIFIER ::= { chasPubNetworkRes 8 }

             -- iii) Backplane Network Resources (if required)
             chasPubBplaneRes  OBJECT IDENTIFIER ::= { chasPubResTypes 3 }

             chas8023Bplane    OBJECT IDENTIFIER ::= { chasPubBplaneRes  1 }
             chas8025Bplane    OBJECT IDENTIFIER ::= { chasPubBplaneRes  2 }
             chasFddiBplane    OBJECT IDENTIFIER ::= { chasPubBplaneRes  3 }
             chasMgmtBplane    OBJECT IDENTIFIER ::= { chasPubBplaneRes  4 }
             chasAtmBplane     OBJECT IDENTIFIER ::= { chasPubBplaneRes  5 }

             -- iv) Internetworking/bridging resources (if required)
             chasPubConnectRes OBJECT IDENTIFIER ::= { chasPubResTypes 4 }

             chasBridgeRelay   OBJECT IDENTIFIER ::= { chasPubConnectRes 1 }
             chasRouterRelay   OBJECT IDENTIFIER ::= { chasPubConnectRes 2 }
             chasBrouterRelay  OBJECT IDENTIFIER ::= { chasPubConnectRes 3 }
             chasSwitch        OBJECT IDENTIFIER ::= { chasPubConnectRes 4 }

          -- chasInfo group (chassis information group).
          -- Implementation of this group is mandatory.

          chasType  OBJECT-TYPE
              SYNTAX  OBJECT IDENTIFIER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "An authoritative identification of the type of
                      hub-based or standalone chassis.  By convention
                      this value is allocated within the SMI enterprises
                      subtree(1.3.6.1.4.1), and provides an easy and
                      unambiguous means for determining `what kind of
                      box' is being managed.  If this information is not
                      present or unknown, its value should be set to the
                      value: chasTypeUnknown."
              ::= { chasInfo 1 }

          chasPhysicalChanges  OBJECT-TYPE
              SYNTAX   Counter
              ACCESS   read-only
              STATUS   mandatory
              DESCRIPTION
                      "The number of physical changes that have occurred
                      in the chassis since the agent was warm/cold
                      started.  This includes additions and removal of
                      modules and entities.  Other uses are
                      implementation specific."
              ::= { chasInfo 2 }


          chasChassisSerialNumber   OBJECT-TYPE
              SYNTAX    DisplayString (SIZE (0..32))
              ACCESS    read-only
              STATUS    mandatory
              DESCRIPTION
                      "The serial number of the chassis. If no serial
                      number is available then this object should be the
                      zero length string."
              ::= { chasInfo 3 }

          -- chasPhysical group (physical configuration group).
          -- Implementation of this group is mandatory.

          chasPhyLocationTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ChasPhyLocationTable
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
              "This table summarises the different classes of
               modular physical locations in the chassis.
               This includes but is not limited to slot
               within a chassis, power supply bay. Note that
               this table contains an entry for each type of
               location, _not_ each instance of each type of 
               location."
                     
              ::= { chasPhysical 1 }

          chasPhyLocationEntry OBJECT-TYPE
              SYNTAX ChasPhyLocationEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                      "An entry in the phyLocationTable"
              INDEX { chasPhyLocationTypeIndex }
              ::= { chasPhyLocationTable 1 }

          ChasPhyLocationEntry ::= SEQUENCE {
                  chasPhyLocationTypeIndex
                          INTEGER,
                  chasPhyLocationType
                          OBJECT IDENTIFIER,
                  chasPhyLocationName
                          DisplayString
                  }

          chasPhyLocationTypeIndex OBJECT-TYPE
              SYNTAX INTEGER (1..65535)
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "This uniquely identifies the physical location
                      type within the chassis."
              ::= { chasPhyLocationEntry 1 }

          chasPhyLocationType OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      " Uniquely identifies the 'type' of the physical
                      location within the chassis."
              ::= { chasPhyLocationEntry 2 }

          chasPhyLocationName OBJECT-TYPE
              SYNTAX DisplayString
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "Each type of physical location within the chassis
                      is given a textual name."
              ::= { phyLocationEntry 3 }

          chasModuleTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ChasModuleEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                      "This table defines the physical modules within a
                      chassis.  This is done by defining the type
                      physical modules and the physical location where
                      it resides.  This table also provides a mapping
                      from between physical modules and their location
                      within the chassis."
              :: { chasPhysical 2 }

          chasModuleEntry OBJECT-TYPE
              SYNTAX ChasPhyModuleEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                      "An entry in this table that describes a physical
                      module that resides at a given physcial location
                      within the chassis."
              INDEX { chasModuleLocationType, chasModuleLocation }
              ::= { chasModuleTable 1 }

          ChasPhyModuleEntry ::= SEQUENCE
              chasModuleLocationType
                  INTEGER,
              chasModuleLocation
                  INTEGER,
              chasModuleType
                  OBJECT IDENTIFIER,
              chasModuleSwVersion
                  DISPLAYSTRING,
              chasModuleHwVersion
                  DisplayString,
              chasModuleSerialNumber
                  DisplayString,
              chasModuleDescription
                  DisplayString,
              chasModuleLastChangeTime
                  TimeTicks,
              chasModuleAdminStatus
                  INTEGER,
              chasModuleOperStatus
                  INTEGER
              }

          chasModuleLocationType  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "An instance of a module is identified by the
                      physical location which it resides.  The physical
                      location is identified by location type index and
                      location index (instance of that location type).
                      This object defines the location type. The value
                      of this index can be used to index the
                      chasPhyLocationTable to get details of this type
                      of location, for example a power supply bay or
                      a modular slot."
                  ::= { chasModuleEntry 1 }

          chasModuleLocation  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "An instance of a module is identified by the
                      physical location which it resides.  The physical
                      location is identified by location type index and
                      location index (instance of that location type.
                      This object defines the instance of a particular
                      location type."
                  ::= { chasModuleEntry 2 }

          chasModuleType OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "An authoritative identification of the type of
                      physcial module in this physical location.  A
                      value of chasModuleUnknown indicates that the
                      type of physical module is unknown. A value of
                      chasLocationEmpty indicates that this location
                      is currently occupied by nothing, its empty."
              :== { chasModuleEntry 3 }

          -- && A cards software may not be in PROM so SW is a more
          -- && appropriate term.
          chasModuleSwVersion OBJECT-TYPE
              SYNTAX DisplayString (SIZE (0..32))
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "A textual description of the version/revision
                      level for this module's software.  If not known,
                      is not appropriate or the location is empty then
                      this value should be set to the zero-length
                      string."
              :== { chasModuleEntry 4 }

          chasModuleHwVersion OBJECT-TYPE
              SYNTAX DisplayString (SIZE (0..32))
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "A textual description of the version/revision
                      level for this module's firmware.  If not known,
                      is not appropriate or the location is empty then
                      this value should be set to the zero-length
                      string."
              ::= { chasModuleEntry 5 }

          chasModuleSerialNumber OBJECT-TYPE
              SYNTAX DisplayString (SIZE (0..32))
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "The serial number of the physical module present
                      in this physical location.  If ths value is not known,
                      is not appropriate or the location is empty this value
                      will be the zero length string.  If no serial number 
                      is available for a physical module this value should
                      set to a zero length string."
              ::= { chasModuleEntry 6 }

          chasModuleDescription OBJECT-TYPE
              SYNTAX DisplayString (SIZE (0..32))
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "A textual description of the physical module
                      plugged that resides in this physical location.
                      If this value is not available or the slot is
                      empty then this value should be set to a
                      zero length string."
              ::= { chasModuleEntry 7 }

          chasModuleLastChange OBJECT-TYPE
              Syntax TimeTicks
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "The value of MIB-II's sysUpTime (in the agent
                      supporting this chassis MIB) at which a module was
                      last inserted or initialized.  If the module has
                      not changed since the last network managment
                      system reinitialized then this object has a zero
                      value."
              ::= { chasModuleEntry 8 }

          chasModuleAdminStatus OBJECT-TYPE
              Syntax INTEGER {
                  enable(2),
                  disable(3),
                  reset(4),
                  programLoad(5),
                  test(6)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                      Provides desired state of the given physical
                      module.  Notice that not all values may be
                      supported by the specified physical module.  In
                      this case and SNMP error will be returned when the
                      set is attempted.

                      A physical module maybe activated by writting a
                      value of enable(2).

                      A physical module may be de-activated by writting
                      a value of disable(3).  In a disabled state a
                      physical module is present in the chassis but is
                      benign.

                      Writting a value of reset(4) initiates a reset
                      sequence.

                      A value of programLoad(5) initiates a software
                      load sequences.

                      Writting a vlaue of test(6) should start a self
                      test sequence within the physical module."
              ::= { chasModuleEntry 9 }

          chasModuleOperStatus OBJECT-TYPE
              Syntax INTEGER {
                  other(1),
                  invalid(2),
                  test(3),
                  operational(4),
                  resetInProgress(5),
                  warning(6),
                  nonFatalError(7),
                  fatalError(8)
              }
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      Provides operational status of the module.  The
                      following are possible definitions of the values.
                      The exact definition of the values is
                      implementation specific.  A value of other(1)
                      implies some undetermined state, possibly as a
                      result of setting phyAdminStatus to a value of
                      disable(3).  A value of invalid(2) could have the
                      possible meaning that the module exists but the
                      chassis manager has no direct control over the
                      module.  A value of testing(3) may be a diagnostic
                      state.  A value of operational(4) implies that the
                      entity is running with no errors or warnings.
                      State resetInProgress(5) implies equivalent of
                      setting phyAdminStatus to reset(4). The states of
                      warning(6), nonFatalError(7), fatalError(8)
                      reflect conditions detected during operation.  The
                      entity may or may not be still functional.

                      For example if a modules value of phyAdminStatus
                      is disable(3) and is set to enable(2) then
                      phyOperStatus may enter a state of testing(3) then
                      change to a value of operational(4)."
              ::= { chasModuleEntry 10 }
--
          -- The chasEntity group.
          -- This group is MANDATORY.

          -- Entity Table

          chasEntityTable OBJECT-TYPE
              SYNTAX  SEQUENCE OF ChasEntityEntry
              ACCESS  not-accessible
              STATUS  mandatory
              DESCRIPTION
                      "A table that contains information about the
                      'logical' networking devices (entities) in this
                      chassis."
              ::= { chasEntity 1 }

          chasEntityEntry OBJECT-TYPE
              SYNTAX  ChasEntityEntry
              ACCESS  not-accessible
              STATUS  mandatory
              DESCRIPTION
                      "Information concerning an entity in the chassis.
                      Conceptual rows may not be created or deleted with
                      SNMP operations."
              INDEX  { chasEntityIndex }
              ::= { chasEntityTable 1 }

          ChasEntityEntry ::=
              SEQUENCE {
                  chasEntityIndex
                      INTEGER,
                  chasEntityObjectID
                      OBJECT IDENTIFIER,
                  chasEntityDescr
                      DisplayString,
                  chasEntityAdminStatus
                      INTEGER,
                  chasEntityOperStatus
                      INTEGER,
                  chasEntityTimeStamp
                      TimeTicks,
                  chasEntityParty
                      Party,
                  chasEntityCommunity
                      OCTET STRING,
                  chasEntityIpAddress
                      IpAddress
              }

          chasEntityIndex OBJECT-TYPE
              SYNTAX  INTEGER (1..65535)
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "A unique index for the entity for which this
                      entry contains information."
              ::= { chasEntityEntry 1 }

          chasEntityObjectID  OBJECT-TYPE
              SYNTAX  OBJECT IDENTIFIER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The specific type of entity.  The value of this
                      object is analagous to MIB-II's sysObjectId.  In
                      particular, it has the same value as would be
                      returned if the SNMP Party (identified by
                      chasEntityParty) and/or the community (identified
                      by chasIpAddress and chasCommunity), were queried
                      for sysObjectId."
              ::= { chasEntityEntry 2 }


          chasEntityDescr  OBJECT-TYPE
              SYNTAX  DisplayString (SIZE (0..255))
              ACCESS  read-write
              STATUS  mandatory
              DESCRIPTION
                      "A textual description of the entity.  The value
                      of this object is analagous to MIB-II's sysDescr.
                      In particular, it has the same value as would be
                      returned if the SNMP Party (identified by
                      chasEntityParty) and/or the community (identified
                      by chasIpAddress and chasCommunity), were queried
                      for sysDescr."
              ::= { chasEntityEntry 3 }

          chasEntityAdminStatus OBJECT-TYPE
              SYNTAX  INTEGER {
                  unknown(1),             --  none of the following
                  enable(2),
                  disable(3),
                  reset(4),
                  programload(5),
                  test(6)
              }
              ACCESS  read-write
              STATUS  mandatory
              DESCRIPTION
                      "Provides the administratively desired state of
                      the given entity.

                      An entity is activated by writing a value of
                      enable(2).

                      An entity may be de-activated by writing a value
                      of disable(3).  In a disabled state, a entity does
                      exist within the given chassis, but is benign.  A
                      disabled entity is available for subsequent
                      activation.

                      Writing a value of reset(4) specifies an entity
                      should initiate a reset sequence.

                      Writing a value of programload(5) specifies an
                      entity should initiate a program load sequence.

                      Writing a value of test(6) specifies an entity
                      should initiate a testing sequence.

                      Agent support of the writing of any of the values
                      of this object is implementation-specific.  For
                      example, this object might be read only for
                      entities that disabling would compromise the
                      integrity of the chassis."
              ::= { chasEntityEntry 4 }

          chasEntityOperStatus OBJECT-TYPE
              SYNTAX  INTEGER {
                  other(1),               --  none of the following
                  invalid(2),
                  testing(3),
                  operational(4),
                  resetInProgress(5),
                  warning(6),
                  nonFatalError(7),
                  fatalError(8),
                  loading(10)
              }
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "Provides operational status of the entity.  The
                      following are possible definitions of the values.
                      The exact definition of the values is
                      implementation specific.  A value of other(1)
                      implies some undetermined state, possibly as a
                      result of setting chasEntityAdminStatus to a value
                      of disable(3).  A value of invalid(2) could have
                      the possible meaning that the entity exists but
                      the chassis manager has no direct control of the
                      entity.  A value of testing(3) may be a diagnostic
                      state.  A value of operational(4) implies that the
                      entity is running with no errors or warnings.
                      State resetInProgress(5) implies equivalent of
                      setting chasEntityAdminStatus to reset(4). The
                      states of warning(6), nonFatalError(7),
                      fatalError(8) reflect conditions detected during
                      operation.  The entity may or may not be still
                      functional.  State loading(10) is a result of
                      asserting programload(5) in chasEntityAdminStatus.

                      For example if an entities value of
                      chasEntityAdminStatus is disable(3) and is set to
                      enable(2) then chasEntityOperStatus may enter a
                      state of testing(3) then change to a value of
                      operational(4)."
              ::= { chasEntityEntry 5 }


          chasEntityTimeStamp  OBJECT-TYPE
              SYNTAX  TimeTicks
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The value of MIB-II's sysUpTime (in the agent
                      supporting this MIB) at which this entity was last
                      (re-)initialized.  If the entity has not been
                      initialized then this object has a zero value."
              ::= { chasEntityEntry 6 }

          chasEntityParty  OBJECT-TYPE
              SYNTAX  Party
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The SNMP Party which provides access to the
                      detailed management information for this entity.
                      Note that the definition of a SNMP Party includes
                      the location at which it executes, the MIB view to
                      which it provides access, the authentication and
                      privacy algorithms and parameters required to
                      access its MIB view, and whether or not proxy is
                      performed.  In order for a SNMP manager to be able
                      to access the Party, that manager must have prior
                      knowledge of the Party.  In particular, the
                      manager must know the location at which the Party
                      executes.

                      A party is named by an OBJECT IDENTIFIER.  For a
                      entity which is not managed through access to a
                      SNMP Party, the value of this object is
                      chasEntityNoParty."
              ::= { chasEntityEntry 7 }


          chasEntityCommunity  OBJECT-TYPE
              SYNTAX  OCTET STRING (SIZE (0..256))
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The SNMP Community which executes at the address
                      chasEntityIpAddress, and provides access to the
                      detailed management information for this entity.

                      For a entity which is not managed through access
                      to a SNMP Community, the value of this object is
                      the zero-length string."
              ::= { chasEntityEntry 8 }

          chasEntityIpAddress  OBJECT-TYPE
              SYNTAX  IpAddress
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The address of the SNMP agent which responds to
                      messages for the SNMP Community identified by
                      chasEntityCommunity.  When access is via proxy,
                      this variable contains the address of the proxy
                      agent.

                      For a entity which is not managed through access
                      to a SNMP Community, the value of this object is
                      0.0.0.0."
              ::= { chasEntityEntry 9 }
--
          -- The chasResource group.
          -- This group documents the mapping of resources onto modules and
          -- of resources onto entities.

          -- && Implementation of this group is NOT optional, it is mandatory.

          chasPhyResourceTable  OBJET-TYPE
              SYNTAX  SEQUENCE of ChasResourceEntry
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "Each physical module contains a number of resources. Each
               resource is a building block for constructing functional
               entities. This table contains an entry for each resource in
               the chassis, the type of entity to which that resource may 
               belong and the entity to which that resource is currently 
               assigned."
              ::= { chasResource 1 }

          chasPhyResourceEntry  OBJECT-TYPE
              SYNTAX  ChasPhyResourceEntry
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "This entry describes one resource in the chassis at a 
               particular instant in time. Note that if the physical module on
               which this resource resides is removed then this resource
               will be destroyed.

               Resources may be neither created or destroyed through
               management. Some implementations may allow management to
               assign a resouce to different entities through management."
              INDEX { chasPhyResLocationType,
                      chasPhyResLocation,
                      chasPhyResIndex }
              ::= { chasPhyResourceTable 1 }

          ChasPhyResourceEntry ::= SEQUENCE {
              chasPhyResLocationType
                  INTEGER,
              chasPhyResLocation
                  INTEGER
              chasPhyResIndex
                  INTEGER,
              chasPhyResourceType
                  OBJECT IDENTIFIER,
              chasPhyResEntityAssignmentType
                  OBJECT IDENTIFIER,
              chasPhyResEntityAssignment
                  INTEGER,
              chasPhyResEntitySubindex
                  INTEGER
              }

          chasPhyResLocationType  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A resource exists on a particular module. A module is
               identified by its location type and location instance.
               This variable identifies the type part of the module on
               which this resource resides. It can be used with 
               chasPhyResourceLocation to index the module table for information
               about the module."
              ::= { chasPhyResourceEntry 1 }

          chasPhyResLocation  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A resource exists on a particular module. A module is
               identified by its location type and location instance.
               This variable identifies the instance part of the module
               identification on which this resource resides. It can be
               used with chasPhyResourceLocationType to index the module table 
               for information about the module."
              ::= { chasPhyResourceEntry 2 }

          chasPhyResIndex  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "A unique index for the resource on this
                      particular physical module."
              ::= { chasPhyResourceEntry 3 }

          chasPhyResType OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "The type of resource.  For example, for an
                      Ethernet segment this object would have a value of
                      dot3 as defined in RFC 1284."
              ::= { chasPhyResourceEntry 4 }

          chasPhyResEntityAssignmentType OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
              "Some implementations of the chassis MIB allow a resource to
              be moved between entities through management. For example a 
              repeater module may be moved to different repeaters. This
              object acts as a 'hint' to the management card to indicate
              to which type of entity this resource may be assigned. If
              used then the value of this field can be matched to
              entities via the chasEntityObjectID object.

              Note that a value in this column does not mean that this
              resource _can_ be successfully assigned to a particular
              entity, merely that such an assignment is legal. A request
              to change assignment can be rejected due to local considerations
              such as insufficient resource."
              ::= { chasPhyResourceEntry 5 }

          chasPhyResEntityAssignment  OBJECT-TYPE
              SYNTAX  INTEGER
              access  read-write
              STATUS  mandatory
              DESCRIPTION
              "The entity to which this resource is currently assigned.
              Note that this object is read/write. Depending on the
              implementation the request to set this object to a particular
              value will be rejected under some circumstances. Examples
              are:
              1) insufficient resource, eg to assign a repeater port
                 to the specified repeater would require uavailable
                 backplane resource.
              2) invalid configuration, trying to assign a repeater
                 port to a bridge entity!
              3) no-such entity.
              4) management configuration not possible. Some implementations
                 can only be reconfigured by changing hardware straps.

              Note that changing this object has the possible side effect
              of changing the chasPhyResourceEntitySubIndex. This second object
              is merely to allow a get-next type interrogation of resource
              assigned to entity in the chasLogResourceTable."
              ::= { chasPhyResourceEntry 6 }

          chasPhyResEntitySubIndex  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "Provides a unique index that can be used to
                      identify the relationship in terms of the entity."
              ::= { chasPhyResourceEntry 7 }
--
          -- Logical configuration table
          -- Implementation of the chasLogResoureTable is mandatory.

          chasLogResourceTable  OBJECT-TYPE
                  SYNTAX SEQUENCE OF ChasLogicalConfigEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  DESCRIPTION
                      "Defines a logical configuration relationship
                      which is a relationship between entities and
                      resources and the physical module that the
                      relationship exists on."
                  ::= { chasResource 2 }

          chasLogResourceEntry OBJECT-TYPE
                  SYNTAX ChasLogResourceEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  DESCRIPTION
                      "Defines a single logical relationship."
                  INDEX { chasLogResEntity,
                          chasLogResEntitySubIndex }
                  ::= { chasLogResourceTable 1 }

          ChasLogResourceEntry  SEQUENCE {
                  chasLogResEntity
                          INTEGER,
                  chasLogResEntitySubIndex
                          INTEGER,
                  chasLogResLocationType
                          INTEGER,
                  chasLogResLocation
                          INTEGER,
                  chasLogResIndex
                          INTEGER
                  }

          chasLogResEntity  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "The entity ID for which this logical
                      configuration relationship exists."
                  ::= { chasLogResourceEntry 1 }

          chasLogResEntitySubIndex  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "The entity sub index for which this logical
                      configuration relationship exists.  The logical
                      relation ship is identified by a resource
                      assignment to an entity.  The sub index defines a
                      particular instance of the mapping of physical
                      configuration onto an entity."
                  ::= { chasLogResourceEntry 2 }

          chasLogResLocationType  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "A module is defined by it's physical location
                      type and an instance of that physical location.
                      This object defines the physical location type
                      portion of the physical module identifier that
                      this logical configuration exists for."
                  ::= { chasLogResourceEntry 3 }

          chasLogResLocation  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "A module is defined by it's physical location
                      type and an instance of that physical location.
                      This object defines the instance physical location
                      (location index) portion of the physical module
                      identifier that this logical configuration exists
                      for."
                  ::= { chasLogResourceEntry 4 }

          chasLogResResourceID  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                      "The value of this object refers to a particular
                      instance of a resource, as defined by
                      chasPhyResourceIndex, for which this relationship is
                      defined.  This together with
                      chasLogicalConfigLocationType and
                      chasLogicalConfigLocation completes the mapping of
                      the logical configuration on to the physical
                      module and resource combination."
                  ::= { chasLogResourceEntry 5 }

--
          -- the Power Supply Output table. Note that this table contains
          -- additional information for resources that represent power 
          -- supplies. As such this table has the same index as the resource
          -- table. When the MIB is represented in an SNMPv2 manner the
          -- index columns can be removed from this table and the INDEX
          -- clause can refer to the resource table. Alternatively since
          -- this table requires exactly the same indices as the resource
          -- table it is a good candidate for the AUGMENTS clause!
          --
          -- && Note that identifying PS resouces differently here to the
          -- && resource table is confusing.
          chasPowerSupplyOutputTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ChasPowerSupplyOutputEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
              "Additional information for resource that represent source
              of power within the chassis."
              ::= { chasPowerSupply 2 }

          chasPowerSupplyOutputEntry OBJECT-TYPE
              SYNTAX ChasPowerSupplyEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                      "Values for a power supply output."
              INDEX { chasPSLocationType, chasPSLocationIndex,chasPSResource}
              ::= { chasPowerSupplyOutputTable 1 }

          ChasPowerSupplyOutputEntry ::=
              SEQUENCE {
                  chasPSLocationType
                      INTEGER,
                  chasPSLocationIndex
                      INTEGER,
                  chasPSUResource
                      INTEGER,
                  chasPSOutputStatus
                      INTEGER,
                  chasPSOutputNominalVoltage
                      Gauge,
                  chasPSOutputOfferedVoltage
                      Gauge,
                  chasPSOutputOfferedWattage
                      Gauge,
                  chasPSOutputWarnings
                      Counter,
                  chasPSOutputFailures
                      Counter
              }

          chasPSLocationType  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A Power Supply resource exists on a particular module.
               This variable identifies the type part of the module on
               which this resource resides. It can be used with 
               chasPSULocationIndex to index the module table for information
               about the module.

               The value of this object could be chasPowerSupplyBay, however
               some chassis implementations will not distinguish between
               slots that accept modular function card and those that accept
               power supplies. A slot can accept for example a power supply
               or a repeater line card."
              ::= { chasPowerSupplyOutputEntry 1 }

          chasPSLocationIndex  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A power supply resource exists on a particular module. A module
               is identified by its location type and location instance.
               This variable identifies the instance part of the module
               identification on which this resource resides. It can be
               used with chasPSLocationType to index the module table 
               for information about the module."
              ::= { chasPowerSupplyOutputEntry 2 }

          chasPSResource  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "A unique index for the power supply resource on this
                      particular physical module."
              ::= { chasPowerSupplyOutputEntry 3 }

          chasPSOutputStatus OBJECT-TYPE
              SYNTAX INTEGER {
                  unknown(1),
                  bad(2),
                  warning(3),
                  good(4) }
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                      "Actual status of the power supply:

                      - unknown(1)     status not known
                      - bad(2)         unable to supply power due to failure
                      - warning(3)     supplying power but marginally
                      - good(4)        supplying power

                      It is an implementation specific matter whether
                      the agent keeps entries with status unknown(1) in
                      the table.  If unknown(1), offered values and
                      counters are meaningless."
                          ::= { chasPowerSupplyOutputEntry 4 }

                      chasPSOutputNominalVoltage OBJECT-TYPE
                          SYNTAX Gauge
                          ACCESS read-only
                          STATUS mandatory
                          DESCRIPTION
                                  "In hundredths of a volt, the voltage
                                  the output is supposed to supply, such
                                  as -5, +5, +12, -15, etc."
                         ::= { chasPowerSupplyOutputEntry 5 }

                     chasPSOutputOfferedVoltage OBJECT-TYPE
                         SYNTAX Gauge
                         ACCESS read-only
                         STATUS mandatory
                         DESCRIPTION
                                 "In hundredths of a volt, the voltage
                                 actually offered by the output.  If
                                 chasPowerSupplyOutputStatus is good(4),
                                 the value 0 means offered voltage is
                                 not available."
                        ::= { chasPowerSupplyOutputEntry 6 }

                    chasPSOutputOfferedWattage OBJECT-TYPE
                        SYNTAX Gauge
                        ACCESS read-only
                        STATUS mandatory
                        DESCRIPTION
                                "In hundredths of a watt, the wattage
                                actually offered by the output.  If
                                chasPowerSupplyOutputStatus is good(4),
                                the value 0 means offered wattage is not
                                available."
                       ::= { chasPowerSupplyOutputEntry 7 }

                   chasPSOutputWarnings OBJECT-TYPE
                       SYNTAX Counter
                       ACCESS read-only
                       STATUS mandatory
                       DESCRIPTION
                               "The number of times
                               chasPowerSupplyOutputStatus has gone to
                               warning(3)."
                      ::= { chasPowerSupplyOutputEntry 8 }

                  chasPSOutputFailures OBJECT-TYPE
                      SYNTAX Counter
                      ACCESS read-only
                      STATUS mandatory
                      DESCRIPTION
                              "The number of times
                              chasPowerSupplyOutputStatus has gone to
                              bad(2)."
                     ::= { chasPowerSupplyOutputEntry 9 }
--
                 -- the chasEnviron (Environment) group
                 -- Implementation of this group is optional.

                 -- && In the same way that each power supply is
                 -- && a resource, so is each environmental monitor. This
                 -- && table can also be described as an AUGMENTS or a shared
                 -- && index with the resource table. In the long run it is
                 -- && more economical on MIB objects to share the indices
                 -- && with the resource table. In preparation for this I've
                 -- && changed this table to use the location type and index
                 -- && to identify rows in this table.
                 -- &&
                 -- && Because a sensor is a resource, its can be identified
                 -- && by the OID in the resource table so chasEnvironSensor
                 -- && is no longer required.
                 chasEnvironTable OBJECT-TYPE
                     SYNTAX SEQUENCE OF ChasEnvironEntry
                     ACCESS not-accessible
                     STATUS mandatory
                     DESCRIPTION
                     "A list of environmental entries, one for
                     each environmental sensor in the chassis. This table
                     augments the resources in the resource table for those
                     entries which represent sensors."                     
                    ::= { chasEnviron 1 }

                chasEnvironEntry OBJECT-TYPE
                    SYNTAX ChasEnvironEntry
                    ACCESS not-accessible
                    STATUS mandatory
                    DESCRIPTION
                            "Values for a environmental sensor."
                   INDEX { chasEnvironLocationType,
                           chasEnvironLocationIndex,
                           chasEnvironResource }
                   ::= { chasEnvironTable 1 }

               ChasEnvironEntry ::= SEQUENCE {
                   chasEnvironLocationType
                       INTEGER,
                   chasEnvironLocationIndex
                       INTEGER,
                   chasEnvironResource
                       INTEGER,
                   chasEnvironStatus
                       INTEGER,
                   chasEnvironWarnings
                       Counter,
                   chasEnvironFailures
                       Counter,
                   }

          chasEnvironLocationType  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A sensor resource exists on a particular module.
               This variable identifies the type part of the module on
               which this sensor resides."
              ::= { chasEnvironEntry 1 }

          chasEnvironLocationIndex  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
              "A sensor exists on a particular module. A module
               is identified by its location type and location instance.
               This variable identifies the instance part of the module
               identification on which this sensor resides."
              ::= { chasEnvironEntry 2 }

          chasEnvironResource  OBJECT-TYPE
              SYNTAX  INTEGER
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "A unique index for the resource on this
                      particular physical module."
              ::= { chasEnvironEntry 3 }

          chasEnvironStatus OBJECT-TYPE
                  SYNTAX INTEGER {
                      unknown(1),
                      bad(2),
                      warning(3),
                      good(4) }
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                          "Actual status indicated by the sensor.  It is
                          an implementation specific matter whether the
                          agent keeps entries with status unknown(1) in
                          the table.  If unknown(1), counters are
                          meaningless."
                 ::= { chasEnvironEntry 4 }

             chasEnvironWarnings OBJECT-TYPE
                 SYNTAX Counter
                 ACCESS read-only
                 STATUS mandatory
                 DESCRIPTION
                         "The number of times chasEnvironStatus has gone
                         to warning(3)."
                ::= { chasEnvironEntry 5 }

            chasEnvironFailures OBJECT-TYPE
                SYNTAX Counter
                ACCESS read-only
                STATUS mandatory
                DESCRIPTION
                        "The number of times chasEnvironStatus has gone
                        to bad(2)."
               ::= { chasEnvironEntry 6 }


          -- Entity party types

          chasKnownParty     OBJECT IDENTIFIER ::= { chasKnownTypes 2 }
          chasEntityNoParty  OBJECT IDENTIFIER ::= { chasKnownParty 1 }


          END

---------------------------------------
Attachment: L:\MAILEXE2\MFFGET\WINMAIL.001
(This attachment contained binary characters, so it has been uuencoded.
Use a uudecode program to recreate the original file.)
---------------------------------------
begin 666 L:\MAILEXE2\MFFGET\WINMAIL.001
M>)\^(B\* @*0!@ .     0      (  @      !!  (!D 8 #    #<T,"TP
M,C N5%A4 (@" A.  P .    R0<$ !P "0 % #(    P 0(1@ 8 H D   $ 
M"0   [H$     "$$      4    ) @     %     0+___\ 90   $$+Q@"(
M "  (       (  @       H    (    "     !  $                 
M                     /___P _____/____S____\_____#X___R(?__\X
M?___(/___P8___\?!____X /___ !___X /___ !___X /___  ___X '___
M  ___X #___  ?__X '__^ !___P ?__^ '___P#___\ ____@/___\#____
MA____\?____G____]P4    ) @$    %     0(!    !0    D"      4 
M   ! O___P A!   00M& &8 (  @       @ "       "@    @    (   
M  $ "                                         "_  "_    O[\ 
MOP   +\ OP"_OP  P,#  ,#<P #PRJ8                             
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                              #P^_\ I*"@ (" @    /\  /\   #_
M_P#_    _P#_ /__  #___\                                     
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M_P  ^                                       __OX            
M                            __O[_P<' P,#                    
M            __O[_P<' P,#                                __O[
M_P<' P,#                                __O[_P<' P,#        
M                        __O[_P<' P,#                        
M        __O[_P<' P                                  __O[_P< 
M                                    __O[                    
M                    ^P          ! 0                         
M    _P       /P$! 0                             _P    #\!/P$
M!                               _P#\_ 3\!/P$                
M                _/S\_ 3\!/P                               #\
M_/S\_ 3\                                 /S\__S\_ 0         
M                         /S\__S\_                           
M         /S\__S\                                     /S\_P  
M                                     /S\                    
M                     /P                                     
M          4    ) @$    %     0(!     P      !P<'!P<'!P<'!P<'
M!P<'!P<'!P<'!P<'!P<'!P<'_P<'^ <'!P<'!P<'!P> X (0@ $ #    #<T
,,"TP,C N5%A4 (@"
 
end