Responder 10.2.1c SP3 ReadMe

Version 14

    Responder 10.2.1c SP3 Release Contents

     

    Responder is a GIS hosted, distributed Outage Management System (OMS). Responder focuses on providing the most valuable information to the right people for storm restoration and daily operations, allowing them to make informed decisions.

     

    There is no new functionality in the 10.2.1c SP3 release of Responder. All prior patches and service packs released on Responder 10.2.1c are automatically included in Responder 10.2.1c SP3.

     

     

    Responder 10.2.1c SP3 contains the following bug fixes (since the latest patches and SP's on this branch):

    • CLS-64290 - AMI integration missing RX_Customers integration
    • CLS-64527 - Incident Details pane - AMI Events tab, Calls tab, and loadpoints tab don't update when automatic/manual refresh occurs
    • CLS-64754 - Crew missing on assignment to hazard
    • CLS-64781 - Jumper Title Missing Localization
    • CLS-65145 - Vanishing Text Research
    • CLS-65171 - Archive Explorer missing AMI_Event Tab in incident details
    • CLS-65172 - Outage Phase Values Missing from AMI_EVENTS tab of incident details
    • CLS-65406 - RXIF Ping Downstream Device from ArcMap doesn't include the XY data
    • CLS-66443 - FormatDateTime Exception in RX ETR page

     

    Upgrade Information

     

    All Responder users must make the following changes after applying 10.2.1c SP3.

     

    1. In Server\ArchiveStylesConfig.xml, insert the following XML immediately after the EditCall_EditView Control Style section (immediately before the EditCrew_EditView section)

     

    <ControlStyle Key="EditIncident_AMICallGrid" ResourceAssembly="Miner.Responder.Explorer">

              <Commands Key="EditIncident_AMICallGrid_Commands">

                  <Command Key="CallEdit" />

                  <Command Key="CallHistory" />

                  <Command Key="mapHighlight" IsFirstInGroup="true" />

                  <Command Key="mapZoomTo" />

                  <Command Key="mapPanTo" />

                  <Command Key="mapAttributeViewer" />

                  <Command Key="PrintTicket" />

                  <Command Key="CopyCell" IsFirstInGroup="true" />

                  <Command Key="CopyRows" />

              </Commands>

              <Tables Key="">

                  <Table Represents="CallsArchive" Editable="false">

                      <Columns Key="">

                          <Column Represents="Region" Visible="false" />

                          <Column Represents="Duration" Visible="false" />

                          <Column Represents="IncidentID" Visible="false" />

                          <Column Represents="OutagePhases" Visible="true" CustomDisplay="Miner.Responder.Explorer.CustomDisplays.CallOutagePhasesCustomDisplay, Miner.Responder.Explorer" />

                      </Columns>

                      <Appearances>

                          <Appearance Key="EditIncident_CallGrid_DefaultCall">

                              <Evaluator>Vbs:true</Evaluator>

                              <Description>[Remarks]</Description>

                          </Appearance>

                          <Appearance Key="EditIncident_CallGrid_CriticalCall">

                              <Evaluator>Vbs:[CriticalCustomer] &gt; 0</Evaluator>

                              <Description>[Remarks]</Description>

                              <BackColor>Yellow</BackColor>

                          </Appearance>

                          <Appearance Key="EditIncident_CallGrid_CustomerNotFound">

                              <Evaluator>Obj:Miner.Responder.Explorer.Evaluators.CustomerNotFoundEvaluator,Miner.Responder.Explorer</Evaluator>

                              <Description>[Remarks]</Description>

                              <BackColor>Gray</BackColor>

                          </Appearance>

                          <Appearance Key="EditIncident_CallGrid_Urgent">

                              <Evaluator>Vbs:[Urgency] &gt; 0</Evaluator>

                              <Description>[Remarks]</Description>

                              <BackColor>FFFFCC33</BackColor>

                          </Appearance>

                      </Appearances>

                  </Table>

                  <Table Represents="Hazards" Visible="false" />

              </Tables>

          </ControlStyle>

     

    2. In Server\ArchiveSchemaConfig.xml, make the following changes:

     

    In the Rx_INCIDENTS_ARCHIVE table under the <Columns> section, add the following new Column row:

    <Column Name="AMI_EVENT" Caption="AMI Event" DefaultValue="5" Domain="AMI_EVENT" Represents="AMIEvent" Visible="false" />

     

    In the RX_LOADPOINTS_ARCHIVE table under the <Columns> section, add the following new Column row:

    <Column Name="OUTAGE_PHASES" Caption="Outage Phases" Domain="PHASES" Represents="OpenPhases" Visible="true" />

     

    In the RX_CALLS_ARCHIVE table, under the <Calculated Columns> section, add the following new Column row:

    <CalculatedColumn Name="PHASES" Caption="Outage Phases" Represents="OutagePhases" DataType="String" Expression="" />

     

    After the <Domain Name="ACCOUNT_TYPE" domain, add the following new domain:

    <Domain Name="AMI_EVENT" xsi:type="CodedDomainConfig" DataType="Int32">
    <!-- DO NOT CHANGE THE FOLLOWING VALUE -->
    <DomainPair Value="0" Description="No Power" />
    <DomainPair Value="1" Description="Partial Power" />
    <!-- DO NOT CHANGE THE FOLLOWING VALUE -->
    <DomainPair Value="5" Description="&lt;None&gt;" />
    <!-- Domain Values 0-99 are RESERVED FOR TELVENT USAGE) -->
    </Domain>

     

    3a. Run the following database script against the Responder Active Tables if you're using MS-SQL Server as your RDBMS:

     

    BEGIN TRANSACTION

     

    SET QUOTED_IDENTIFIER ON

    SET ANSI_NULLS ON

    DECLARE @CURRENT_SCHEMA SYSNAME

    SET @CURRENT_SCHEMA = SCHEMA_NAME()

     

    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] = 'RX_LOADPOINTS_HISTORY' AND [COLUMN_NAME] = 'OUTAGE_PHASES' AND [TABLE_SCHEMA] = @CURRENT_SCHEMA)

      BEGIN

      PRINT 'Adding field [OUTAGE_PHASES] to table [RX_LOADPOINTS_HISTORY]...'

      EXECUTE('ALTER TABLE [RX_LOADPOINTS_HISTORY] ADD [OUTAGE_PHASES] [tinyint] NULL')

      IF @@ERROR <> 0 GOTO ERROR_HANDLING

      PRINT 'Field [OUTAGE_PHASES] added.'

      END

    ELSE

      PRINT 'Field [OUTAGE_PHASES] - Already exists'

     

    if exists (select * from dbo.sysobjects where id = object_id(N'[rx_loadpoints_trg]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)

    BEGIN

    DROP TRIGGER rx_loadpoints_trg;

    END

    Execute('

    create trigger rx_loadpoints_trg on rx_loadpoints

    for insert, delete, update

    AS

    if @@rowcount = 0 return

    IF ((select count(*) from deleted)= 0)

    BEGIN

    insert rx_loadpoints_history

      (

       loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,user_created,

       user_updated,customer_account,outage_phases,change_date,operation

      )

      Select

       id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,

       user_created,user_updated,customer_account,outage_phases,GETDATE(),''INSERT''

       from inserted

    END

    else if ((select count(*) from inserted)= 0)

    BEGIN

    insert rx_loadpoints_history

      (

       loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,user_created,

       user_updated,customer_account,outage_phases,change_date,operation

      )

      Select

       id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,

       user_created,user_updated,customer_account,outage_phases,GETDATE(),''DELETE''

       from deleted

    END

    else if ((select count(*) from deleted)> 0)

    BEGIN

    insert rx_loadpoints_history

      (

       loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,user_created,

       user_updated,customer_account,outage_phases,change_date,operation

      )

      Select

       id,device_oid,device_fcid,incident_id,customer_count,

       critical_customer_count,priority_customer_count,incident_device_oid,incident_device_fcid,

       time_outage,time_restored,

       user_created,user_updated,customer_account,outage_phases,GETDATE(),''UPDATE''

       from inserted

       END

       ');

     

    COMMIT

    GOTO THE_END

     

    ERROR_HANDLING:

      PRINT 'One or more statement failed, rolling back all changes!'

      ROLLBACK

     

    THE_END:

     

    3b. Run the following database script against the Responder Active Tables if you're using Oracle as your RDBMS:

     

    SET SERVEROUTPUT ON

    VARIABLE MyCount NUMBER

    VARIABLE mCount NUMBER

    VARIABLE m NUMBER

     

    declare

      MyCount number;

     

    BEGIN

        SELECT COUNT(*) INTO :MyCount FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='RX_LOADPOINTS_HISTORY' AND COLUMN_NAME = 'OUTAGE_PHASES';

     

        IF :MyCount = 0 THEN

            dbms_output.put_line('Adding field [OUTAGE_PHASES] to table [RX_LOADPOINTS_HISTORY]...');

            execute immediate 'alter table RX_LOADPOINTS_HISTORY add (OUTAGE_PHASES number(1,0))';

            dbms_output.put_line('Field [OUTAGE_PHASES] added.');

        else

            dbms_output.put_line('Field [OUTAGE_PHASES] - Already exists');

        END IF;

    END;

    /

     

    create or replace trigger rx_loadpoints_trg

    before delete or insert or update on rx_loadpoints

    for each row

    begin

      if inserting then

      select rx_loadpoints_id_seq.nextval into :new.id from dual;

      insert into rx_loadpoints_history

      (loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

      critical_customer_count,priority_customer_count,incident_device_oid, incident_device_fcid,

      time_outage,time_restored,user_created,

      user_updated,customer_account,outage_phases,change_date,operation)

      values

      (:new.id,:new.device_oid,:new.device_fcid,:new.incident_id,:new.customer_count,

      :new.critical_customer_count,:new.priority_customer_count,:new.incident_device_oid,:new.incident_device_fcid,

      :new.time_outage,:new.time_restored,

      :new.user_created,:new.user_updated,:new.customer_account,:new.outage_phases,sysdate,'INSERT');

      elsif updating then

      insert into rx_loadpoints_history

      (loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

      critical_customer_count,priority_customer_count,incident_device_oid, incident_device_fcid,

      time_outage,time_restored,user_created,

      user_updated,customer_account,outage_phases,change_date,operation)

      values

      (:new.id,:new.device_oid,:new.device_fcid,:new.incident_id,:new.customer_count,

      :new.critical_customer_count,:new.priority_customer_count,:new.incident_device_oid,:new.incident_device_fcid,

      :new.time_outage,:new.time_restored,

      :new.user_created,:new.user_updated,:new.customer_account,:new.outage_phases,sysdate,'UPDATE');

      elsif deleting then

      insert into rx_loadpoints_history

      (loadpoint_id,device_oid,device_fcid,incident_id,customer_count,

      critical_customer_count,priority_customer_count,incident_device_oid, incident_device_fcid,

      time_outage,time_restored,user_created,user_updated,customer_account,outage_phases,change_date,operation)

      values

      (:old.id,:old.device_oid,:old.device_fcid,:old.incident_id,:old.customer_count,

      :old.critical_customer_count,:old.priority_customer_count,:old.incident_device_oid,:old.incident_device_fcid,

      :old.time_outage,:old.time_restored,

      :old.user_created,:old.user_updated,:old.customer_account,:old.outage_phases,sysdate,'DELETE');

      end if;

    end;

    /

     

    commit;

     

    4a. Run the following database script against the Archive database if you're using MS-SQL Server as your RDBMS:

     

    BEGIN TRANSACTION

     

    SET QUOTED_IDENTIFIER ON

    SET ANSI_NULLS ON

     

    -- gets the current active schema (dbo, responder, sde, etc.)

    DECLARE @CURRENT_SCHEMA SYSNAME

    SET @CURRENT_SCHEMA = SCHEMA_NAME()

     

    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] = 'RX_LOADPOINTS_ARCHIVE' AND [COLUMN_NAME] = 'OUTAGE_PHASES' AND [TABLE_SCHEMA] = @CURRENT_SCHEMA)

      BEGIN

      PRINT 'Adding field [OUTAGE_PHASES] to table [RX_LOADPOINTS_ARCHIVE]...'

      EXECUTE('ALTER TABLE [RX_LOADPOINTS_ARCHIVE] ADD [OUTAGE_PHASES] [tinyint] NULL')

      IF @@ERROR <> 0 GOTO ERROR_HANDLING

      PRINT 'Field [OUTAGE_PHASES] added.'

      END

    ELSE

      PRINT 'Field [OUTAGE_PHASES] - Already exists'

     

    COMMIT

    GOTO THE_END

     

    ERROR_HANDLING:

      PRINT 'One or more statement failed, rolling back all changes!'

      ROLLBACK

     

    THE_END:

     

    4b. Run the following database script against the Archive database if you're using Oracle as your RDBMS:

     

    SET SERVEROUTPUT ON

    VARIABLE MyCount NUMBER

    VARIABLE m NUMBER

     

    BEGIN

        SELECT COUNT(*) INTO :MyCount FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='RX_LOADPOINTS_ARCHIVE' AND COLUMN_NAME = 'OUTAGE_PHASES';

     

        IF :MyCount = 0 THEN

            dbms_output.put_line('Adding field [OUTAGE_PHASES] to table [RX_LOADPOINTS_ARCHIVE]...');

            execute immediate 'alter table RX_LOADPOINTS_ARCHIVE add (OUTAGE_PHASES number(1,0))';

            dbms_output.put_line('Field [OUTAGE_PHASES] added.');

        else

            dbms_output.put_line('Field [OUTAGE_PHASES] - Already exists');

        END IF;

    END;

    /

     

    COMMIT;

     

    Customers who are using RxIF with Multispeak 4.16 must make the following change:

     

    In the web.config file for Multispeak 4.16, add the following to the appSettings section:

     

    <add key="Ami.CDEventMap" value="Ami.DefaultCDEventMap"/>

     

    Customers who are using RxIF and have previously applied 10.2.1c SP2 must make the following changes:

     

    1. In Server\ArchiveSchemaConfig.xml, in the RX_CALLS_ARCHIVE table under the <Columns> section, add the following new Column row:

     

    <Column Name="RXINT_AMI_TIME_RESTORED" Caption="Ami Restore Time" Represents="AmiTimeRestored" Visible="true" xmlns="http://www.miner.com/schemas/Responder/DatabaseSchema" />

     

    2a. Run the following database script against the Archive database if you're using MS-SQL as your RDBMS:

     

    IF NOT EXISTS (

      SELECT *

      FROM   sys.columns

      WHERE  object_id = OBJECT_ID(N'[RX_CALLS_ARCHIVE]')

             AND name = 'RXINT_AMI_TIME_RESTORED'

      )

      BEGIN

      ALTER TABLE RX_CALLS_ARCHIVE ADD

      RXINT_AMI_TIME_RESTORED datetime NULL

     

      Print 'Table RX_CALLS_ARCHIVE - Altered, Added Field RXINT_AMI_TIME_RESTORED';

      END

    ELSE

      Print 'Column RXINT_AMI_TIME_RESTORED in Table RX_CALLS_ARCHIVE  - Already exists';

    GO

     

    2b. Run the following database script against the Archive database if you're using Oracle as your RDBMS:

     

    DECLARE

        MyCount NUMBER;

    BEGIN

        SELECT COUNT(*)

        INTO   MyCount

        FROM   USER_TAB_COLUMNS

        WHERE  TABLE_NAME  ='RX_CALLS_ARCHIVE'

           AND COLUMN_NAME = 'RXINT_AMI_TIME_RESTORED';

     

        IF MyCount = 0 THEN

            dbms_output.put_line('Adding field [RXINT_AMI_TIME_RESTORED] to table [RX_CALLS_ARCHIVE]...');

            EXECUTE IMMEDIATE 'alter table RX_CALLS_ARCHIVE add (RXINT_AMI_TIME_RESTORED Date)';

            dbms_output.put_line('Field [RXINT_AMI_TIME_RESTORED] added to table RX_CALLS_ARCHIVE.');

        else

            dbms_output.put_line('Field [RXINT_AMI_TIME_RESTORED] in table RX_CALLS_ARCHIVE- Already exists');

        END IF;

    END;

    /

     

    All additional upgrade information related to the 10.2.1c release in general is on exchange.

     

    Installation Instructions

     

    PRE-INSTALLATION NOTES

    • Ensure that your hardware and software meet the ArcGIS system requirements.
    • Ensure that your hardware and software meet the ArcFM supported versions. You can search for supported versions on the lower left panel of the GIS Support place.
    • Responder 10.2.1c SP3 requires a complete upgrade to ArcGIS 10.2.1. ArcGIS must be upgraded before you upgrade to Responder 10.2.1c SP3.
    • When you upgrade to Responder 10.2.1c SP3, you must upgrade all ArcFM Solution products. Mixed versions of ArcFM Solution products are not supported.
    • Responder 10.2.1c SP3 requires that you have Responder 10.2.1c installed.
    • Anti-Spyware applications must be disabled before installation to avoid interference with the installation. They may be restarted after installation is complete.

     

    IMPORTANT

    • Install the applications in the following order. Installing out of order can cause errors.
      1. Responder Client
      2. Responder Business Server
      3. Responder Web Server
      4. Responder TroubleMaker
    • As of 10.2.1b, Responder Client cannot be installed on the same machine as Fiber Manager due to different .NET dependencies.

     

    Perform the following steps, in sequence, to install Responder Client, Responder Business Server, Responder Web Server, and Responder TroubleMaker:

    1. Navigate to GIS Downloads.
    2. Double-click the Microsoft installer file for this product.
    3. Follow the instructions to complete the installation.

     

    Known Issues

     

    • XY and Join Layers Search/Locate Issue on Map Viewer - Clients who use the Responder Web Map Viewer or Switch Order Request Map cannot use the Search tool on XY Event and Join Layers. These layers are excluded from the drop down of available layers for this tool. We recommend using Query Layers instead of XY layers.
    • XY Layer Identify Issue on Map Viewer - Clients who use the Responder Web Map Viewer and the Identify tool can only use the 'Replace' Selection Management option when XY layers are in the result set. A warning message appears when XY layers are in the result set and any other Selection Management option is chosen. In addition, the Lock tool does not function for rows in XY layers, and no results are returned if identifying on an XY layer that is based on a table rather than a view. We recommend using Query Layers instead of XY layers.
    • Join Layer Wildcard Search Issue on Map Viewer - Clients who use the Responder Web Map Viewer or Switch Order Request map cannot use the LIKE search with Join layers. The LIKE search works for all layers that do not include joins. (ESRI Bug NIM094565)
    • Join Layers Identify Issue on Map Viewer - Clients who use the Responder Web Map Viewer or Switch Order Request map and use the Identify tool on Join layers may notice that the joined table displays all blank fields in the Attribute Viewer. (ESRI Bug NIM092161)
    • Log in to ArcMap - After upgrading an .mxd or Stored Display to 10.1 or later, you are required you to log in again once per session when trying to use Responder tools that interact with ArcMap on an Oracle database. This issue can be avoided by saving your Stored Display again after logging in to 10.1 or later.
    • Intermittent Message in the Event Log - You may intermittently receive the following message in the event log:

    Miner.Data.Access.ProviderException: ORA-01453: SET TRANSACTION must be first statement of transaction

    ORA-06512: at "RESPONDER.RX_PREDICTION_NEXTCALL", line 4

      • If you see the message above in your event log, it is known to be innocuous, but if you'd like to make your event log cleaner, you can run the following SQL:

    Change the stored procedure RX_PREDICTION_NEXTCALL

    at line 38

    from

    EXCEPTION WHEN NO_DATA_FOUND then

    to

    EXCEPTION WHEN OTHERS then

      • This SQL change will happen as part of the automatic upgrade script process at the next major release, but this step can be followed to keep your event log cleaner in the meantime.
    • Error Message - You may intermittently receive the following exception error message:
      "System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index"
      A supported hotfix is available from Microsoft. View the following article and follow the instructions to install the hotfix: http://support.microsoft.com/?kbid=836874.
    • User Account Control - Users running a Microsoft Windows operating system utilizing User Account Control (Windows Server 2008, Windows 7) must run the ResponderPubSubViewer application in Windows XP compatibility mode so the application can write to log files. To do this, complete the following steps:
      • Browse to your Responder installation directory and select the Server subfolder.
      • Right-click ResponderPubSubViewer.exe.
      • Select Properties.
      • On the compatibility tab, check "Run this program in compatibility mode for" and select Windows XP.

    For more information on User Account Control and how it interacts with Schneider Electric products, see ArcFM Solution and Windows 7.

    • Switch Order User Interface with RTL Environment - Windows Presentation Foundation 3.5 SP1 has a known issue that causes all drag and drop targets to not be properly mirrored when using a right-to-left flow. This causes incorrect drag and drop feedback to users when dragging items in the Switch Order user interface and Switch Order Library. This issue is expected to be fixed in the .NET Framework 4.0.
    • Web Logon - When using the Responder web for the first time, you can use the Username of administrator with a password of adminpass.
    • Unicode Characters - To support Unicode Characters in your database, you must change all fields with a VARCHAR datatype. In Oracle, you need to change the VARCHAR2 to NVARCHAR2, and in SQL Server, change the VARCHAR to NVARCHAR.
    • Oracle Server and RCS Server - The RCS Server should not be installed on the same machine that contains the Oracle Server, or errors will be received.
    • Multiple-Database Setups and Direct Connect with SQL Server - Direct connections to a SQL Server database, that have a multiple-database setup, result in Responder services that intermittently throw an error to the event log:
      "System.Exception: Failed to open FeederSpace --> System.Runtime.InteropServices.COMException (0x80041538): Underlying DBMS error"
      There are no side effects of this error, and your services will work as normal.
    • Windows 10 - Windows 10 users will notice less clarity in the grid due to a limitation of the underlying grid technology. (RX-16553)
    • Help - Our context sensitive help opens two tabs in a web browser. (Esri BUG-000096609)
    • RxIF - After applying the Service Pack, you will not be able to remove only the Service Pack for the following products: AMI Service, AMI Outbound Service, CIM Service, Multispeak 30ab Service, Multispeak 416 Service, Scada Outbound Service, Scada Service. To remove the Service Pack you will need to remove the entire component and then reinstall.

     

    License Manager

     

    Responder requires the appropriate licenses before the application can be accessed. Responder has four types of license files:

    • ResponderDataServices - This license is used by the data server on the server. You can run multiple instances of the data server on a single server using only one license.
    • ResponderDispatcher - This license is used by the client when the user opens ArcMap with a valid Responder license.
    • ResponderExplorer - This license is used by the client when the user opens Responder Explorer.
    • ResponderPrediction - This license is used by the prediction engine on the server. You can run multiple instances of the prediction engine on a single server using only one license.
    • Responder AMI Adapter - This license is used by the AMI Services when processing events from smart meters.
    • Responder CIS Adapter -This license is used by the CIS Service when syncing a customer database with the Responder database.
    • Responder IVR Adapter - This license is used by the IVR Service when processing calls from an IVR system.
    • Responder SCADA Adapter - This license is used by the SCADA Services when processing events from a SCADA system.

     

    Documentation

     

    The ArcFM Solution Resource Center offers the latest Using and Configuration Guides for each product. You can view this information before installing the latest release.

     

    SDK Installer: To install the ArcFM Solution SDK Documentation, the Microsoft Windows SDK or Microsoft Visual Studio 2010 or later must be installed. Installing the SDK will take several minutes. The ArcFM Solution Resource Center contains information about everything available in the SDK installer as well as technical white papers and information on free tools.

     

    ReadMe Links