Pegasus Enhancement Proposal (PEP)

PEP #: 098

Title: Release Notes Pegasus 2.3

Version: 1.1

Created: 10 October 2003

Authors: Karl Schopmeyer

Status:  Approved

 

Version History:

Version Date Author Change Description
1.0 10 October 2003   Initial Submission
1.1 31 October 2003 K. Schopmeyer Update to integrate comments and complete table of PEPs
1.2 19 November 2003 K. Schopmeyer Update to reflect comments from review Nov 2003. Approved with comments

 


Abstract: This document defines the release notes that support release 2.3.0 of the Pegasus platform


 

Availability of the Release

The Pegasus 2.3 release is available as a source release in both ZIP and TAR formats. The release can be downloaded from the OpenPegaus Web site at www.openpegasus.org.

In addition, the release is available through Pegasus CVS as the branch tag RELEASE_2_3_0-branch. This defines the current released version of Pegasus 2.3 . In addition, the following tags exist for the release. RELEASE_2_3_0-root which defines the initial release point of Pegasus 2.3 and the point at which it branched from the trunk.. Other tags may exist to mark release candidate snapshots, etc. These will be announced on the web site and the Pegasus mailing list.

The instructions for acquiring the released code are on the WEB site. Installation instructions are part of the readme in the root of the source tree.

The OpenPegasus project is currently not providing binary releases. However, binary releases may be available of selected ports and are documented on the OpenPegasus web site.

There may be point releases to the Pegasus 2.3 release and these will be announced on the Pegasus web site.

 

Functionality of This Release

The overall level of functionality in the Pegasus environment effective with this release is as follows:

CIM Server

CIM Operations over HTTP

  1.     Class Operations (getClass, deleteClass, modifyClass, enumerateClass, enuerateClassNames) - Operational
  2.     Qualifier Operations - Operational
  3.     Instance Operations (getInstance, deleteInstance, modifyInstance, enumerateInstance, enumerateInstanceNames, getProperty, setProperty) - Operational
  4.     Association Operations (references, referencenames, associators, associatornames - Operational
  5.     Methods- Operational
  6.     Query operation (Not Operational)

Indications

Process indications are operational in the Server.  This includes support for subscriptions, filters, and indication handlers, the provider API for indications and the CIMXML indication handler. The Pegasus sever can be used as an Indication client.  The Client indication  API support is complete but the interfaces are marked experimental for version 2.3 because this is the first version of Pegasus in which these APIs were available.

Query Language

The query language today is based on WQL and is implemented and used for filters.  However, the executeQuery operation has not been implemented pending the availability of a standard DMTF Query language.

Class Repository

XML based file/directory Class repository.

Instance Repository

XML based file/directory Instance repository.  The instance repository is used as the default repository unless a flag is set disabling this repository for client operations.

Security

  1. Basic Security (Note that Digest based security is not implemented)
  2. SSL support - SSL is implemented in Pegasus using the OpenSSL libraries. Pegasus does not provide the OpenSSL libraries but SSL can be used on any platform supported by OpenSSL.

Platform Management Functions

  1. Configuration through the defined configuration parameters.
  2. Daemon operation on all supported platforms
  3. User management utilities
  4. Provider management. The CIM Server provides dynamic registration of providers and automatic load and unload functionality.

SLP Discovery

SLP support is enabled in the platform but is conditionally compiled with the default to not compile it today pending further testing.

 Providers

 There are a number of standard providers available in Pegasus release. This includes providers in the following categories:

Internal Providers

Generic Providers

Generic OperatingSystem provider. See the directory src/Providers/generic.

Test/Sample Providers

See the directories src/Providers/TestProviders and src/Sample for more information about test and sample providers.

Managed System Providers

ComputerSystem, DNSAdmin, DNSService, Operating System, Process, Processor. For more information on these providers see the documentation for each provider in the directory src/Providers/ManagedSystem

CIMOM Statistics Providers

IBMStatisticalData - This is an early version of the work that became CIM_StatisticalData. It is similar to CIM_StatisticalData and provides the same data but the structure of the Classes is slightly different.

        Linux Specific Providers

There are a number of providers in this category including DiskDrive, CDROMDrive, Interrupt, IOPOrt, IPROute, NetworkAdapter, Operating System, PCI Controller, Processor, ProviderData, ProviderSupport, SoftwareElement.  For more information about these providers see the documentation in the directory src/Providers/linux

CIM_Schema

The default CIM_Schema loaded with the Pegasus 2.2 release is the DMTF CIM 2.7 Final release.  In addition, Pegasus includes a number of local classes defined for Pegasus.  These are visible in the Schemas directory.

Pegasus MOF Compiler

Pegasus implements a MOF compiler that can operate either at the client interface (cimmof) or directly interfacing with a CIM repository (cimmofl).

The direct interface compiler is used primarily to provide an initial class/instance repository. Note that use of cimmofl to manipulate instances in the repository bypasses any provider that is registered to serve the instances and simply installs the instances in the instance repository; this may result in corruption if providers are using the repository.  Use of cimmofl to manipulate instances served by a registered providers is therefore discouraged. Use of cimmof rather that cimmofl is encouraged.

Client Tools

    Pegasus CIM Server Adminstration

  1. cimuser - Manage Pegasus CIM server Users
  2. cimconfig - Manage the Pegasus CIM Server configuration parameters
  3. cimauth - Manage the CIM Server authorization characteristics. Today this is authorizing users to namespaces.
  4. cimprovider - Manage information about the providers.

    Information client tools

   These tools provide information on the objects managed by the server.

  1. tomof - output Classes and/or instance information in MOF or XML format.
  2. dnsinfo -
  3. ipinfo - Generates a set of standard information from the Network Schema.  Information generated varies by system because of the level of provider support.
  4. osinfo - Generate a set of standard information on the Operating System from CIM Classes. Note that the information generated is dependent on the information available from providers and differes from system to system

     Test support Tools

  1. Pegasus Unit tests (available through the "tests" option on the Pegasus make files       
  2. The Pegasus Test Suite (see the tests directory and the Pegasus/TestBuildMakeFile)
  3. TestClient - Basic client for overall platform operation testing.
  4. CGICLient - This client has not been completely update to version 2.2.
  5. wbemexec - Test tool that sends/receives XML from XML input.
  6. CLI - Command line interface for Client commands.
  7. Benchmark Test - Introduced with Pegasus 2.3, a benchmark test environment is not provided which includes both a client and provider component. See src/clients/benchmarkTest for more information.

Pegasus Interface APIs

Details of the Pegasus public interfaces for release 2.3 is listed in PEP 96 available from the web site(www.openpegasus.org). This document is the authorative source for the list of publicly supported Pegasus APIs.   The Client and Provider API were originally frozen at the  Pegasus version 2.1 release. The interfaces in the release of Pegasus 2.1 are forward compatible to release 2.3 (clients and providers compiled to the Pegasus 2.1 or 2.2 interfaces should be compatible with Pegasus 2.3 without compilation)  but there have been extensions and new interfaces added for release 2.3   The public interfaces includes the following major functions

  1. Client APIs
  2. Provider APIs
  3. CIM Objects
  4. CIM Listener (experimental for Pegasus 2.3). These are compiled only if the PEGASUS_USE_EXPERIMENTAL_INTERFACES flag is set.
  5. SLP Client (experimental for Pegasus 2.3). These are compiled only if the PEGASUS_USE_EXPERIMENTAL_INTERFACES flag is set.

The functions are documented in their respective header files and HTML documentation based on the information in the header files extracted with the doc++ tool will be available on the OpenPegasus web site.

WMI Mapper

A version of of the Pegasus platform that specifically communicates with Microsoft WMI implementations and interfaces with WMI object is provided as a separately compilable code set in the CVS.

Supported Platforms

Each Pegasus release lists as supported platforms those hardware/software platforms that have recognized ports for the Pegasus code base including a maintainer for the platform that will be willing to regularly assure that the port is maintained as the Pegasus code base is changed.  Pegasus may be operable on other platforms (ex. Windows 98) but without a group to provide the role of test and maintenance, the Pegasus project cannot assure operation. The supported platforms for current release are:

Platform and OS Compilers
AIX 5.2 VisualAge C++ Version 5.0.2.3
HP-UX HP aC++ B3910B
Linux Itanium gcc
Linux IA-32 gcc (versions 2.9x and 3.xx)
Windows 2000 Microsoft Visual C++ Ver 6 and Microsoft .Net compiler Version V7 and 7.1
Windows XP Microsoft Visual C++ Ver. 6 and Microsoft .Net compiler Version V7 and 7.1
Mac OS X/Darwin PPC gcc (version 3.3)

 

Further information regarding Pegasus support on IBM platforms can be found at: http://publib.boulder.ibm.com/eserver/v1r1/en_US/info/ciminf o/eicahkickoff.htm. This site is expected to have information available starting in December.

Further information regarding Pegasus support on HP platforms can be found at: http://www.hp.com/large/infrastructure/management/wbem/.

Conformance with DMTF Specifications

Pegasus tries to conform to the CIM specifications.  It is a major goal of the OpenPegasus project to both drive and utilize the DMTF CIM/WBEM specifications.  However, today there are a number of differences.  As of Pegasus 2.3, some of the differences include the following:

1. Provider Registration - Pegasus supports registration through a set of Provider registration classes  similar to the CIM Classes defined as experimental in the CIM 2.8 preliminary Schema release and does not support the Provider Qualifier. Note that there are differences that must still be worked out between the Pegasus PG provider registration classes and the CIM classes as part of the move to release of the CIM classes.

2. Indications -Pegasus supports process indications but does not include any specific support for lifecycle indications.

3. Interop Schema - Today Pegasus provides alternatives to some of the classes in the Interop Schema including CIM_StatisticalData.

4. execQuery operaiton - Today Pegasus does not support the execQuery pending the availability of a standard for the query language.

5. Pegasus differs from some other implementations in the delivery of instance and class qualifiers on some operations.

6. Pegasus has not implemented the alias functions defined in the CIM specification in the MOF compiler.

Changes in this Release

The development and release of each version of Pegasus is defined and controlled through Pegasus PEP documents.  PEP 57 is the controlling document this release and lists the original set of changes proposed and the status of each of those changes. Note that not all of the originally defined functionality was completed for this release.

In general, the changes implemented for this release were:

  1. Introduction of platform globalization.
  2. Introduction of a listener API
  3. Introduction of SLP (still experimental and by default not compiled in the 2.3.0 release)
  4. Introduction of a new pluggable Provider Manager (still experimental and by default not compiled in the 2.3.0 release)
  5. Introduction of extensive changes to the HTTP monitor (still experimental and not compiled in the 2.3.0 release)
  6. Incorporation of a Java Client based on the SNIA code base.
  7. Additional Indication Handlers (SNMP)
  8. Improvements to indication handling.

Note that there were a number of objectives that were not completely achieved including:

  1. SLP integration - This code is in place but is compiled only with a conditional compile flag. This code can be enabled by setting the environment variables PEGASUS_SLP_ENABLE and PEGASUS_SLP_CLASSES and recompiling Pegasus.
  2. Pluggable provider manager - This was a major objective but because the code changes were extensive and released very late in the developement cycle of 2.3, both the old and the new provider managers are maintained in the release AND the old provider manager is defined as the default compile.  To compile and run with the new pluggable provider manager functions the user must set a compile flag (ENABLE_PROVIDER_MANAGER2).  NOTE: It is the intention of the Pegasus project to move to the new provider manager as soon as possible.
  3. HTTP Monitor enhancements - As with the Pluggable Provider Manager, it was the intention to incorporate a number of enhancements to the HTTP monitor.  Again because the time in the development phase when they were submitted, the project team elected to release 2.3 with the existing monitor as the default compile but with the code for both monitors. It is the intention to move to the new monitor as soon as possible and users are free to work with either implementation.  To compile and run with the new monitor use the flag PEGASUS_MONITOR2.

The set of PEPs defined for this release is summarized below along with the final implementation status because not all of the PEPs originally defined for this version were implemented:

PEP # PEP Description Status Comments
56 Unicode Support in Infrastructure Implemented
58 Unicode Support in Infrastructure Implemented
68 Provider Manager Interface - Multiple provider support Implemented - but requires compile flag to integrate.
84 Provider Manager Interface, Pluggable provider manager configuration Implemented - see above.
86 Provider Manager Interface, pluggable provider manager. Implemented - see above.
60 Secure connections between CIM Listener and CIM server Implemented
62 SNMP Mapper Indication Handler Implemented
67 Indication Consumer registration
76 CIM Listener Client API, Libraries, SDK Implemented - Experimental
75 Indication Subscription Performance Enhancements Implemented
30 SLP support Implemented - Optional compile
52 Interop Schema provider support Implemented - Optional compile
80 Change to use CIM_Statistics rather than IBM Statistics class for Interop statistics Delayed for future work
64 Java implementation of CIM Client and Listener Interface Included in Pegasus based SNIA OpenCimom Java Classes.
65 Benchmark test utility Implemented
74 SSL certificate verification callback enhancement Implemented
78 WMI mapper changes on authentication process Implemented
73 Support CIM Schema 2.8 preliminary  CIM 2.7 is the default tested schema but the code was added to support 2.8 preliminary specifically becasue of requirements from SNIA.
79 WMI Mapper - local connection enhancements
77 Default instance provider Implemented
88 Monitor Optimization Implemented but with compile flag. Default is old monitor
85 Configuration Property Table Enhancement Implemented
90 Add IO trace diagnostics to CIMClient Implemented
54 Statistical data change to use CIM classes Deferred
81/82 Enhance operations performance Deferred
71 Security Plugin Enablement deferred
69 Kerberos Based Security TBD
70 Kerberos Based Security proposal to DMTF Deferred because of problems with Kerberos Specifications
72 Out of Process Providers Deferred
30 SLP support Implemente but not compiled by default
52 Interop Classes Support Implemented but not compiled by default
89 SLP Client Integration Implemented but not compiled by default

List of Bugs Corrected

The current bug list for Pegasus is openly available on the OpenPegasus web site.  As of the release of 2.3.0, the open bug list was as follows:

 

138 bugs found.

ID Sev Pri Plt State Result Summary
3 min P4 All ASSI Weak association qualifier check missed
42 nor P3 PC ASSI Windows OS provider doesn't fill in CSName and Name keys
68 enh P5 HP NEW cimom allows providers to deliver invalid properties
70 enh P2 HP NEW Client API should support socks
71 min P4 All ASSI Statistics MOF included in ManagedSystem Schema
85 enh P5 All ASSI Need a way to manage currently executing requests
89 maj P3 All ASSI HTTPConnection must return 413 response on oversized requ...
90 nor P1 PC ASSI Deep Inheritance and Local Only Flags Do Not Work
120 nor P3 PC ASSI CIMClassRep::addProperty() sets ClassOrigin incorrectly.
126 nor P3 PC NEW CIMDateTime::getDifference returns incorrect result for s...
133 nor P3 Oth ASSI Pegasus compiler converts Schema Qualifer decl to CLASS
141 nor P2 All ASSI ObjectPath MalformedObjectPath exceptions leak back throu...
144 nor P3 HP NEW cimserver writes on console even when started in daemon mode
146 enh P2 HP NEW There is no way to do pre-build or post-build stuff with ...
148 nor P3 PC ASSI CGIClient.cpp changes '-' to '.'
149 tri P4 HP ASSI src/Clients/ToMofClient/ToMofClient.cpp warning during build
150 tri P4 HP NEW warnings compiling src/Server/cimserver.cpp
168 nor P2 PC NEW Incomplete CIMObjectPath wen calling providers
202 nor P3 HP ASSI Porting changes for HP-UX
203 nor P3 All ASSI Porting changes for IA64 Linux
206 nor P3 HP NEW Client requests time out with PERFINST enabled
210 nor P4 PC ASSI MOF output for Reference values generates XML not mof
211 nor P3 PC ASSI CIMObjectPath Legal Host name incomplete
212 maj P3 All NEW Cimserver uses lots of cpu "idle time" when the cimserver...
213 nor P4 All NEW Insufficient Code Coverage
217 nor P4 PC NEW Error in CIMClass Create on some Linux Platforms
237 nor P3 All ASSI Incorrect use of statistic macros
243 nor P4 PC NEW Compiler misses MOF syntax error in value
246 enh P2 All NEW Security issues with CIMOMHandle
249 nor P3 All NEW cimmof returns code of 0 on error
267 nor P2 All NEW ComputerSystem provider does not set path in enumerateIns...
279 nor P3 HP NEW CIMDateTime::getDifference returns incorrect result on so...
281 nor P3 All NEW setQualifier throws CIM_ERR_ALREADY_EXISTS
296 nor P5 All NEW pegasus/src/Pegasus/Server/tests accidently disabled Feb '02
298 nor P3 PC NEW dispatcher lookup optimization
306 nor P4 All NEW cimconfig -s property=value -p allows you to set non-vali...
323 cri P2 All ASSI TestClient Failure - Associations
329 min P3 PC ASSI tomof client fails on call - cannot find repository
338 cri P3 PC NEW Condition doesn't CloseHandle() on _condition
347 tri P5 All ASSI typos throughout the code
348 cri P1 All REOP Association test SampleFamilyProvider fails intermittently
353 min P4 All NEW cimserver silently creates new repositories
354 nor P3 All NEW Test EnumerateClasses fails when classes are in a differe...
355 nor P1 PC ASSI PropertyList parameter specified in the EnumerateInstance...
357 nor P3 PC NEW pegasus/mak/library-windows.mak should be using variables
359 nor P2 PC NEW cimserver does not report cimserver_planned.conf errors
360 nor P2 PC NEW Invalid XML return on what appears to be keepalive.
364 enh P2 Oth REOP No method to recreate SSL certs, except reading the readm...
365 nor P2 All NEW MOF Compiler sets ToInstance Flavor when ToSubclass is sp...
367 nor P1 PC ASSI EnumerateInstance and EnumerateInstanceNames methods not ...
371 min P5 All NEW mu should build to $PEGASUS_HOME/bin
372 nor P2 All NEW Posix signals can interrupt blocking calls and cause them...
373 nor P2 PC NEW "Pegasus CIM Server Demonstration" cannot enumerate clas...
376 nor P2 PC ASSI SetProperty returns "CIM_ERR_NOT_SUPPORTED"
377 enh P2 PC NEW Multireq not supported
378 nor P3 PC ASSI GetClass returns CIM_ERR_NOT_SUPPORTED with invalid args
379 nor P1 PC NEW CreateInstances errors with property types real32 and real64
384 nor P4 PC NEW use of Tracer in ThreadPool test causes coredump when tra...
390 nor P2 PC NEW Compiler Errors in serveral Linux Providers
393 enh P3 All NEW Definition of cimconfig parameters
398 maj P3 All NEW Infinite re-acking of CIM_STOPPED message during shutdown.
410 nor P3 PC NEW Placement of the PEGASUS_HAS_PERFINST compile param
416 tri P5 PC NEW TestMakefile for Linux uses 'kill -9' to terminate cimser...
424 nor P2 All NEW XMLParser removes whitespace
426 nor P3 PC NEW There is no inserter operation for Uint64 on the windows ...
427 nor P4 PC NEW Loading testrepository issues message stating loading CIM...
428 nor P1 All NEW xml parsing problem regarding REFERENCECLASS
439 nor P3 All NEW Corrupt newlines CVS repository
441 nor P2 PC NEW CIMOM Authentication on Windows XP
456 min P4 All ASSI Adding TEST CASES to the String test bucket.
463 nor P4 All NEW SampleFamilyProvider Shows Warnings in TestClient
473 nor P2 PC NEW System.cpp getSystemCreationClassName() returns empty
477 nor P3 HP ASSI Coredump in Tracer
482 maj P1 PC NEW Gives internal server error( Error Code:500) while creati...
485 nor P3 All ASSI Message review/rewording
490 cri P3 PC ASSI ProviderManager looks up instance provider for InvokeMethod
493 nor P3 All NEW Dispatcher's result aggregation selects arbitrary exception
512 nor P5 All NEW File open error lost in Repository
518 tri P5 HP ASSI Remove DNSAdminDomain and NTPAdminDomain
533 nor P3 PC NEW mu does not build on Linux
535 nor P2 All ASSI cimserver hangs when subjected to bursts of individual re...
537 nor P3 All NEW XmlReader accepts CLASSORIGIN=""
539 enh P2 PC NEW Pegasus DLLs on windows do not contain version numbers
544 maj P2 All NEW MOF compiler does not convert escape characters
548 nor P3 All NEW Redundant error message from WQLParser
556 nor P2 PC NEW wbem exec tests error
558 cri P1 All REOP cimserver failure when running multiple client tests
562 nor P3 PC NEW tests/config.mak always outputs test passed even if failed
577 nor P1 PC NEW ComputerSystem_Linux Provider Generates File Error
581 nor P2 PC NEW Microsoft Visual C++ .NET compile issues
590 nor P3 All NEW Unreachable error conditions in CIMOperationRequestDecoder
596 nor P4 All NEW LocalizedProvider does not set path in enumerateInstances
597 nor P2 All NEW Sample Association Provider Cannot Register
600 nor P3 PC NEW MOF Output generates error for Override flavor on qualifiers
604 nor P2 All NEW FamilyProvider Needed in repositoryServer Make
606 nor P3 PC NEW Quesiton: use of cimobjectPath instead of CIMInstanceName...
607 nor P3 PC NEW Provider Interface Documentation (instance Provider)
611 nor P4 PC NEW Malformed Object path exception should have more information
623 nor P2 All NEW IndicationService should be stopped before other services...
624 nor P2 All NEW IndicationHandlerService sends incorrect response type
ID Sev Pri Plt State Result Summary
625 nor P2 All NEW IndicationService should call _terminate before handle_Ci...
626 nor P2 All ASSI IndicationService needs to handle provider enable notific...
627 nor P2 All ASSI IndicationService should not accept value of Other for On...
628 nor P2 All ASSI IndicationService should honor FailureTriggerTimeInterval
629 nor P2 All ASSI IndicationService should send DisableIndications request ...
631 nor P2 All ASSI IndicationService should handle DateTimeOutOfRangeExcepti...
632 nor P2 All ASSI Eliminate all repository access by Indication Service on...
639 tri P5 All NEW Spelling Mistake in cimserver.passwd
645 nor P3 PC ASSI For Linux Release-only Use rpath-link
647 nor P2 All NEW Timing Window in Trace Code causes CIM Server fault
651 min P4 Ita ASSI Remove unneccessary line from Linux IA64 from Platform_LI...
653 nor P4 All NEW Unreachable condition in HTTPConnection2::_handleReadEvent
666 nor P2 All NEW Instance not found when using CIMOMHandle::getInstance()
667 nor P2 PC NEW Inappropriate string match in getAssociatorNames()
671 nor P2 PC NEW WQLSelectStatement is only valid on first call to evaluat...
680 nor P2 All NEW For M-POST request, CIMServer sends Incorrect Extention ...
682 nor P2 PC NEW enableIndications called multiple times
745 nor P2 IBM NEW Fixes needed for OS/400 Authentication (V2.3)
753 nor P2 All NEW Remove deprecated interfaces
755 nor P1 PC NEW CIMObjectPath to handle "http://"
764 nor P2 Sun ASSI Solaris build using gcc broken
770 nor P2 PC ASSI getInstance() calls using CIMClient class result in 'inva...
777 nor P2 PC ASSI Sample/familyprovider did not honor propertylist.
786 nor P2 PC NEW CIMRepository
796 nor P2 PC NEW cimmof error when tring to dynicall add a mof to the repo...
811 nor P2 PC NEW Allow any form for destination for an indication
812 nor P2 PC NEW ProviderManager2 only routes to Default PM
813 maj P1 All NEW ThreadPool deadlock
828 nor P2 PC NEW slpclient has unresolved externals
829 nor P2 PC NEW Logger traces of xml written to standard log. Should prob...
846 min P5 All NEW InstanceDecl test should test removeQualifier
847 blo P1 All NEW Request being sent to wrong provider - Client timeout
929 nor P2 PC NEW openpegasus.org-wbem-2.2.spec fails due to SLP absence
933 nor P1 All NEW Indication subscription memory leaks
934 nor P1 All NEW Java Client, numeric keybindings changed to strings
942 nor P2 All NEW Indication provider does not be disabled properly
943 nor P2 PC NEW CIMON not verifying that the instance exist
946 nor P2 All NEW Double error text from cim opperation errors

 

Documentation

The following documentation is available for the this Pegasus release:


Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; IBM Corp.; The Open Group

Permission is hereby granted, free of charge, to any person obtaining a copy  of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.