Ontada FHIR Server

v1.8.0.0

Introduction

The Ontada FHIR Server documentation provides information for retrieving patient data from the Common Clinical Data Set, as defined by the 2015 Edition ONC Certification criteria. This documentation is intended to meet applicable certification criteria, as well as aid clients who want to consume these APIs. Access is based on HL7® FHIR® version R4. More information can be found on the FHIR Website.

Authentication

The Ontada FHIR Server uses OAuth2.0 and Open ID Connect for authentication and authorization.

The /authorize and /token endpoints of the Auth server can be found by calling the /metadata Capability Statement (see documentation) or /.well-known/smart-configuration (see documentation) endpoints.

For more information about registering and launching applications, please reach out to support.

SMART on FHIR

For EHR embedded application launches, clients will use the SMART App Authorization 1.0 specification.

Client Credentials

The Ontada FHIR Server also supports Client Credentials for authentication. A client id and secret are passed to the token endpoint to obtain an access token.

practicePublicId

When a token is obtained through client credentials, the client is required to include a header named practicePublicId when calling the APIs. This header must hold the value of the iKnowMed practice that the client is requesting information about. This value is crucial for validation and analytical purposes. It is the same value as the FHIR Organization id field.

Server Details

The Ontada FHIR Server is a REST-based API implementation. FHIR resources are accessed through HTTP protocol. Data can be retrieved for each resource using search or read APIs. Each search API has its own set of usable query parameters.

Media Types

Ontada supports the standard JSON and FHIR media type as specified for R4 FHIR.

  • application/json+fhir

If no Accept header is included in the request, the media type will default to application/json+fhir.

Date Formatting

Ontada supports all FHIR compliant date, date time, and timestamp formats as specified by the R4 FHIR Data Types.

HTTP Verbs

Ontada supports the following HTTP verbs:

  • GET

  • POST

It is expected most READ/SEARCH options will use a GET verb with query parameters however a POST with x-www-form-urlencoded body parameters is also supported.

FHIR R4 Search Guidelines

Provenance

With some of the search APIs, the server may return Provenance resources that outline the parties and processes involved in bringing about the resources. They will be included in the end of the Bundle entry list. Including the _revinclude parameter in the query will achieve this in the relevant APIs. You can also retrieve Provenance data by calling the Provenance API directly.

Downtime

The Ontada FHIR Server undergoes scheduled downtime once a week, typically between 1-3 AM Eastern Time on Sundays. For more details, please contact support.

Error Handling

Below are the common error responses that may be returned by the FHIR Servers. In each case, an OperationOutcome resource will be returned in the response body:

  • 400 Bad Request: The server could not understand the request due to invalid syntax.

  • 401 Unauthorized: The client must authenticate itself to get the requested response.

  • 403 Forbidden: The client does not have access rights to the content.

  • 404 Not Found: The server can not find the requested resource.

  • 429 Too Many Requests: The client has exceeded the rate limit in requests per second and will receive this response code until usage falls below the rate limit.

  • 500 Internal Server Error: The server has encountered a situation it doesn't know how to handle.

FHIR R4 OperationOutcome Resource

Example OperationOutcome response:

{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "processing",
      "diagnostics": "Invalid input"
    }
  ]
}

Best Practices

Client Best Practices

Consumers of these APIs should follow best practices when making requests. These include, but are not limited to, the following:

  • Reuse the access token obtained through client credentials; there is no need to acquire a new token for every API call. The "exp" field in the token indicates when a new token will be required.

  • Only call for data that are absolutely needed for the purpose of the application.

  • Cache data when possible to avoid unnecessary API calls.

  • When applicable, use date ranges to get only the data that are needed.

For precautionary measures, we have implemented API rate limiting. This restricts the number of requests a client can make within a specified time frame. Please reach out to support to learn more.

Search API Best Practices

A client will have certain objectives in what data it needs to retrieve. Here's an overview of the best practices for different types of data retrieval. Further specificity may be found in each search API description in the FHIR Resources section.

Definitions

Active Patient

This is a patient who has an active CarePlan or MedicationRequest in place.

Active Clinical Data

This refers to any clinical information about a patient that is relevant today. It can be either Recent or Historical.

Recent Clinical Data

This includes any clinical information for a patient that was recorded within the last 30 days. For an Active Patient, these data are typically linked to their recent visits. If a patient isn't an Active Patient, it's unlikely that they have any Recent Clinical Data.

Historical Clinical Data

This covers clinical information that was recorded more than 30 days ago. This type of data can come with different labels like draft, active, on-hold, completed, or cancelled.

Best Practices for Searching Clinical Data

Active Clinical Data Best Practice

This practice is for applications that want to access a patient’s current records.

Recent Clinical Data Best Practice

This practice is for applications that want access to recent health records just before, during, or shortly after a patient visit. This practice focuses on capturing all relevant data within this immediate timeframe without targeting specific types of data. This practice timeframe is up to 30 days prior to the current date. An example of using this practice is to query for new lab results of any category or code for a patient that had a visit the previous week.

Targeted Historical Data Best Practice

This practice is for applications aiming to search for historical data. Applications must clearly define the data type (using categories or codes), the precise time period (up to 3 months), or any other relevant qualifiers to narrow the search request, ensuring efficient execution. Historical Clinical Data should be accessed in a limited and focused manner, avoiding broad or extensive searches. For comprehensive patient histories, please consult the Patient Data Export section.

Patient Data Export

A client that desires to obtain all clinical data for a patient may do so as required by § 170.315(b)(10) Electronic Health Information (EHI) Export. Please see your practice representative for details.

Capability Statement

Fetch the server FHIR CapabilityStatement

This operation will generate a FHIR R4 Capability Statement documenting current server capabilties. The data generated is up to date as to currently available resources and operations. The Capability Statement supersedes anything found in this API guide or the OpenAPI document.

References:

FHIR R4 Capability Statement

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "CapabilityStatement",
  • "id": "c559aff3-873d-4395-a77d-e02c96b0b975",
  • "version": "iKnowMed G2 1.0",
  • "name": "SMART on FHIR Conformance Statement",
  • "status": "active",
  • "date": "2022-08-17T15:08:56.061-07:00",
  • "publisher": "McKesson",
  • "description": "Describes capabilities of this server",
  • "kind": "instance",
  • "software": {
    },
  • "implementation": {},
  • "fhirVersion": "4.0.1",
  • "format": [
    ],
  • "rest": [
    ]
}

AllergyIntolerance

You can use the AllergyIntolerance REST API to read and search for patient AllergyIntolerance FHIR resources.

  • The "code" field can be either RxNORM or SNOMED-CT codes.
  • An extension showing the SNOMED-CT code of the severity of the allergy or intolerance may be included.
  • The reaction manifestation codes will be from SNOMED-CT.

Read AllergyIntolerance instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for AllergyIntolerance instances

Search operation to return AllergyIntolerance resources

query Parameters
patient
required
string

Who the sensitivity is for. Identified by patient public ID.

_count
number

The number of resources to return

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=recordedDate)

Responses

Response samples

Content type
application/fhir+json
{}

Binary

Read Binary instance

Read a Binary instance by its public ID. This id is usually found in results from the DocumentReference search API. The contentType may be application/xml, application/pdf, text/html, image/jpeg, etc. The data is base64 encoded.

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Binary",
  • "id": "1234567",
  • "contentType": "application/xml",
  • "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENsaW5pY2FsRG9jdW1lbnQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM9InVybjpobDctb3JnOnYzIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjpobDctb3JnOnYzIGluZnJhc3RydWN0dXJlL2NkYS9DREFfU0RUQy54c2QiPgogIDxyZWFsbUNvZGUgY29kZT0iVVMiLz4KICA8dHlwZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEuMyIgZXh0ZW5zaW9uPSJQT0NEX0hEMDAwMDQwIi8+CiAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMS4yIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4xLjEiLz4KICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4xLjEiIGV4dGVuc2lvbj0iMjAxNS0wOC0wMSIvPgogIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSJQYXRpZW50UmVjb3JkQ0NEX1NtaXRoZXlfMjAyMjEwMTdfMjE0MV80OS41NDMiLz4KICA8Y29kZSBjb2RlPSIzNDEzMy05IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiLz4KICA8dGl0bGU+U21pdGhleSwgSGFycnkgUGF0aWVudCBSZWNvcmQgQ0NEPC90aXRsZT4KICA8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAyMjEwMTcyMTQxNDkrMDAwMCIvPgogIDxjb25maWRlbnRpYWxpdHlDb2RlIGNvZGU9Ik4iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMjUiLz4KICA8bGFuZ3VhZ2VDb2RlIGNvZGU9ImVuLVVTIi8+CiAgPHJlY29yZFRhcmdldD4KICAgIDxwYXRpZW50Um9sZT4KICAgICAgPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuNjIzIiBleHRlbnNpb249Ijc2MTM5NiIvPgogICAgICA8YWRkciB1c2U9IkhQIj48c3RyZWV0QWRkcmVzc0xpbmU+Njg1MyBDYW1kZW4gUGxhY2U8L3N0cmVldEFkZHJlc3NMaW5lPjxjaXR5PkxhcyBWZWdhczwvY2l0eT48c3RhdGU+TlY8L3N0YXRlPjxwb3N0YWxDb2RlPjg5MTMxPC9wb3N0YWxDb2RlPjwvYWRkcj4KICAgICAgPHRlbGVjb20gdmFsdWU9InRlbDo1NTUtNTU1LTU1NTUiIHVzZT0iTUMiLz4KICAgICAgPHRlbGVjb20gdmFsdWU9Im1haWx0bzpoc21pdGhleUB5YWhvby5jb20iIHVzZT0iRElSIi8+CiAgICAgIDxwYXRpZW50PgogICAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSI3NjEzOTYiLz4KICAgICAgICA8bmFtZT48Z2l2ZW4+SGFycnk8L2dpdmVuPjxmYW1pbHk+U21pdGhleTwvZmFtaWx5PjwvbmFtZT4KICAgICAgICA8YWRtaW5pc3RyYXRpdmVHZW5kZXJDb2RlIGNvZGU9Ik0iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMSIgY29kZVN5c3RlbU5hbWU9IkhMNyBBZG1pbmlzdHJhdGl2ZSBHZW5kZXIiIGRpc3BsYXlOYW1lPSJNYWxlIi8+CiAgICAgICAgPGJpcnRoVGltZSB2YWx1ZT0iMTk4NzA2MDQiLz4KICAgICAgICA8bWFyaXRhbFN0YXR1c0NvZGUgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgPHJhY2VDb2RlIG51bGxGbGF2b3I9IlVOSyIvPgogICAgICAgIDxldGhuaWNHcm91cENvZGUgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgPGxhbmd1YWdlQ29tbXVuaWNhdGlvbj4KICAgICAgICAgIDxsYW5ndWFnZUNvZGUgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgPC9sYW5ndWFnZUNvbW11bmljYXRpb24+CiAgICAgIDwvcGF0aWVudD4KICAgIDwvcGF0aWVudFJvbGU+CiAgPC9yZWNvcmRUYXJnZXQ+CiAgPGF1dGhvcj4KICAgIDx0aW1lIHZhbHVlPSIyMDIyMTAxNzIxNDE0OSswMDAwIi8+CiAgICA8YXNzaWduZWRBdXRob3I+CiAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My40LjYiIGV4dGVuc2lvbj0iNDAzMSIvPgogICAgICA8YWRkcj48c3RyZWV0QWRkcmVzc0xpbmU+MjE2NCBMYWtlIEZvcmVzdCBEcml2ZTwvc3RyZWV0QWRkcmVzc0xpbmU+PHN0cmVldEFkZHJlc3NMaW5lPjk3NDQgQ291bnR5IExpbmUgUm9hZDwvc3RyZWV0QWRkcmVzc0xpbmU+PGNpdHk+RWFzdCBQcm92aWRlbmNlPC9jaXR5PjxzdGF0ZT5SSTwvc3RhdGU+PHBvc3RhbENvZGU+OTQ1NTU8L3Bvc3RhbENvZGU+PC9hZGRyPgogICAgICA8dGVsZWNvbSBudWxsRmxhdm9yPSJOSSIvPgogICAgICA8YXNzaWduZWRQZXJzb24+CiAgICAgICAgPG5hbWU+PGdpdmVuPkx5bng8L2dpdmVuPjxmYW1pbHk+SW50ZXJmYWNlPC9mYW1pbHk+PC9uYW1lPgogICAgICA8L2Fzc2lnbmVkUGVyc29uPgogICAgICA8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+CiAgICAgICAgPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuNjIzIiBleHRlbnNpb249IkNCQzNENjU0ODNENjRFOTZFMDQ0MDAyMTI4NjFCMjk2Ii8+CiAgICAgICAgPG5hbWU+T25jIEhlbSBvZiBNU0g8L25hbWU+CiAgICAgICAgPHRlbGVjb20gdmFsdWU9Im1haWx0bzpEaXZpeW5pX0xibmJoaW5AbWNrZXNzb24uY29tIiB1c2U9IkRJUiIvPgogICAgICAgIDxhZGRyPjxzdHJlZXRBZGRyZXNzTGluZT4yMTY0IExha2UgRm9yZXN0IERyaXZlPC9zdHJlZXRBZGRyZXNzTGluZT48c3RyZWV0QWRkcmVzc0xpbmU+OTc0NCBDb3VudHkgTGluZSBSb2FkPC9zdHJlZXRBZGRyZXNzTGluZT48Y2l0eT5FYXN0IFByb3ZpZGVuY2U8L2NpdHk+PHN0YXRlPlJJPC9zdGF0ZT48cG9zdGFsQ29kZT45NDU1NTwvcG9zdGFsQ29kZT48L2FkZHI+CiAgICAgIDwvcmVwcmVzZW50ZWRPcmdhbml6YXRpb24+CiAgICA8L2Fzc2lnbmVkQXV0aG9yPgogIDwvYXV0aG9yPgogIDxpbmZvcm1hbnQ+CiAgICA8YXNzaWduZWRFbnRpdHk+CiAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSIwODQyNjAiLz4KICAgICAgPGFkZHIgbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgPHRlbGVjb20gbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgPGFzc2lnbmVkUGVyc29uPgogICAgICAgIDxuYW1lPjxnaXZlbj5MYWNpZTwvZ2l2ZW4+PGZhbWlseT5SYXZlbnNjcmFmdDwvZmFtaWx5PjwvbmFtZT4KICAgICAgPC9hc3NpZ25lZFBlcnNvbj4KICAgICAgPHJlcHJlc2VudGVkT3JnYW5pemF0aW9uPgogICAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSJDQkMzRDY1NDgzRDY0RTk2RTA0NDAwMjEyODYxQjI5NiIvPgogICAgICAgIDxuYW1lPk9uYyBIZW0gb2YgTVNIPC9uYW1lPgogICAgICAgIDx0ZWxlY29tIHZhbHVlPSJtYWlsdG86RGl2aXluaV9MYm5iaGluQG1ja2Vzc29uLmNvbSIgdXNlPSJESVIiLz4KICAgICAgICA8YWRkcj48c3RyZWV0QWRkcmVzc0xpbmU+MjE2NCBMYWtlIEZvcmVzdCBEcml2ZTwvc3RyZWV0QWRkcmVzc0xpbmU+PHN0cmVldEFkZHJlc3NMaW5lPjk3NDQgQ291bnR5IExpbmUgUm9hZDwvc3RyZWV0QWRkcmVzc0xpbmU+PGNpdHk+RWFzdCBQcm92aWRlbmNlPC9jaXR5PjxzdGF0ZT5SSTwvc3RhdGU+PHBvc3RhbENvZGU+OTQ1NTU8L3Bvc3RhbENvZGU+PC9hZGRyPgogICAgICA8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPgogICAgPC9hc3NpZ25lZEVudGl0eT4KICA8L2luZm9ybWFudD4KICA8Y3VzdG9kaWFuPgogICAgPGFzc2lnbmVkQ3VzdG9kaWFuPgogICAgICA8cmVwcmVzZW50ZWRDdXN0b2RpYW5Pcmdhbml6YXRpb24+CiAgICAgICAgPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuNjIzIi8+CiAgICAgICAgPG5hbWU+TWNLZXNzb24gU3BlY2lhbHR5IEhlYWx0aDwvbmFtZT4KICAgICAgICA8dGVsZWNvbSB2YWx1ZT0idGVsOjgwMCAzODEgMjYzNyIgdXNlPSJXUCIvPgogICAgICAgIDxhZGRyPjxzdHJlZXRBZGRyZXNzTGluZT4xMDEwMSBXb29kbG9jaCBGb3Jlc3Q8L3N0cmVldEFkZHJlc3NMaW5lPjxjaXR5PlRoZSBXb29kbGFuZHM8L2NpdHk+PGNvdW50cnk+VVNBPC9jb3VudHJ5PjxzdGF0ZT5UWDwvc3RhdGU+PHBvc3RhbENvZGU+NzczODA8L3Bvc3RhbENvZGU+PC9hZGRyPgogICAgICA8L3JlcHJlc2VudGVkQ3VzdG9kaWFuT3JnYW5pemF0aW9uPgogICAgPC9hc3NpZ25lZEN1c3RvZGlhbj4KICA8L2N1c3RvZGlhbj4KICA8ZG9jdW1lbnRhdGlvbk9mPgogICAgPHNlcnZpY2VFdmVudCBjbGFzc0NvZGU9IlBDUFIiPgogICAgICA8ZWZmZWN0aXZlVGltZT4KICAgICAgICA8bG93IHZhbHVlPSIyMDIyMTAxNyIvPgogICAgICAgIDxoaWdoIHZhbHVlPSIyMDIyMTAxNyIvPgogICAgICA8L2VmZmVjdGl2ZVRpbWU+CiAgICAgIDxwZXJmb3JtZXIgdHlwZUNvZGU9IlBSRiI+CiAgICAgICAgPGFzc2lnbmVkRW50aXR5PgogICAgICAgICAgPGlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuNjIzIiBleHRlbnNpb249IjA4NDI2MCIvPgogICAgICAgICAgPGFkZHIgbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgICAgIDx0ZWxlY29tIG51bGxGbGF2b3I9Ik5JIi8+CiAgICAgICAgICA8YXNzaWduZWRQZXJzb24+CiAgICAgICAgICAgIDxuYW1lPjxnaXZlbj5MYWNpZTwvZ2l2ZW4+PGZhbWlseT5SYXZlbnNjcmFmdDwvZmFtaWx5PjwvbmFtZT4KICAgICAgICAgIDwvYXNzaWduZWRQZXJzb24+CiAgICAgICAgICA8cmVwcmVzZW50ZWRPcmdhbml6YXRpb24+CiAgICAgICAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSJDQkMzRDY1NDgzRDY0RTk2RTA0NDAwMjEyODYxQjI5NiIvPgogICAgICAgICAgICA8bmFtZT5PbmMgSGVtIG9mIE1TSDwvbmFtZT4KICAgICAgICAgICAgPHRlbGVjb20gdmFsdWU9Im1haWx0bzpEaXZpeW5pX0xibmJoaW5AbWNrZXNzb24uY29tIiB1c2U9IkRJUiIvPgogICAgICAgICAgICA8YWRkcj48c3RyZWV0QWRkcmVzc0xpbmU+MjE2NCBMYWtlIEZvcmVzdCBEcml2ZTwvc3RyZWV0QWRkcmVzc0xpbmU+PHN0cmVldEFkZHJlc3NMaW5lPjk3NDQgQ291bnR5IExpbmUgUm9hZDwvc3RyZWV0QWRkcmVzc0xpbmU+PGNpdHk+RWFzdCBQcm92aWRlbmNlPC9jaXR5PjxzdGF0ZT5SSTwvc3RhdGU+PHBvc3RhbENvZGU+OTQ1NTU8L3Bvc3RhbENvZGU+PC9hZGRyPgogICAgICAgICAgPC9yZXByZXNlbnRlZE9yZ2FuaXphdGlvbj4KICAgICAgICA8L2Fzc2lnbmVkRW50aXR5PgogICAgICA8L3BlcmZvcm1lcj4KICAgICAgPHBlcmZvcm1lciB0eXBlQ29kZT0iUFJGIj4KICAgICAgICA8YXNzaWduZWRFbnRpdHk+CiAgICAgICAgICA8aWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMy42MjMiIGV4dGVuc2lvbj0iNTE3OTM1MTcwMyIvPgogICAgICAgICAgPGFkZHIgbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgICAgIDx0ZWxlY29tIG51bGxGbGF2b3I9Ik5JIi8+CiAgICAgICAgICA8YXNzaWduZWRQZXJzb24+CiAgICAgICAgICAgIDxuYW1lPjxnaXZlbj5Nb29yPC9naXZlbj48ZmFtaWx5Pk9tYW48L2ZhbWlseT48L25hbWU+CiAgICAgICAgICA8L2Fzc2lnbmVkUGVyc29uPgogICAgICAgICAgPHJlcHJlc2VudGVkT3JnYW5pemF0aW9uPgogICAgICAgICAgICA8aWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMy42MjMiIGV4dGVuc2lvbj0iQ0JDM0Q2NTQ4M0Q2NEU5NkUwNDQwMDIxMjg2MUIyOTYiLz4KICAgICAgICAgICAgPG5hbWU+T25jIEhlbSBvZiBNU0g8L25hbWU+CiAgICAgICAgICAgIDx0ZWxlY29tIHZhbHVlPSJtYWlsdG86RGl2aXluaV9MYm5iaGluQG1ja2Vzc29uLmNvbSIgdXNlPSJESVIiLz4KICAgICAgICAgICAgPGFkZHI+PHN0cmVldEFkZHJlc3NMaW5lPjIxNjQgTGFrZSBGb3Jlc3QgRHJpdmU8L3N0cmVldEFkZHJlc3NMaW5lPjxzdHJlZXRBZGRyZXNzTGluZT45NzQ0IENvdW50eSBMaW5lIFJvYWQ8L3N0cmVldEFkZHJlc3NMaW5lPjxjaXR5PkVhc3QgUHJvdmlkZW5jZTwvY2l0eT48c3RhdGU+Ukk8L3N0YXRlPjxwb3N0YWxDb2RlPjk0NTU1PC9wb3N0YWxDb2RlPjwvYWRkcj4KICAgICAgICAgIDwvcmVwcmVzZW50ZWRPcmdhbml6YXRpb24+CiAgICAgICAgPC9hc3NpZ25lZEVudGl0eT4KICAgICAgPC9wZXJmb3JtZXI+CiAgICA8L3NlcnZpY2VFdmVudD4KICA8L2RvY3VtZW50YXRpb25PZj4KICA8Y29tcG9uZW50T2Y+CiAgICA8ZW5jb21wYXNzaW5nRW5jb3VudGVyPgogICAgICA8aWQgcm9vdD0iY2Y3ZjMzNDUtYzgzNi00YzBiLWFhZDYtZjNlNjk1NTgwOTA0Ii8+CiAgICAgIDxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDIyMTAxNyIvPgogICAgICA8bG9jYXRpb24+CiAgICAgICAgPGhlYWx0aENhcmVGYWNpbGl0eT4KICAgICAgICAgIDxsb2NhdGlvbj4KICAgICAgICAgICAgPG5hbWU+PGdpdmVuPlNhbiBGcmFuY2lzY28gTWVkaWNhbCBPbmNvbG9neTwvZ2l2ZW4+PC9uYW1lPgogICAgICAgICAgPC9sb2NhdGlvbj4KICAgICAgICA8L2hlYWx0aENhcmVGYWNpbGl0eT4KICAgICAgPC9sb2NhdGlvbj4KICAgIDwvZW5jb21wYXNzaW5nRW5jb3VudGVyPgogIDwvY29tcG9uZW50T2Y+CiAgPGNvbXBvbmVudD4KICAgIDxzdHJ1Y3R1cmVkQm9keT4KICAgICAgPGNvbXBvbmVudD4KICAgICAgICA8c2VjdGlvbiBudWxsRmxhdm9yPSJOSSI+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjkiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi45Ii8+CiAgICAgICAgICA8Y29kZSBjb2RlPSI1MTg0Ny0yIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IkFTU0VTU01FTlQgQU5EIFBMQU4iLz4KICAgICAgICAgIDx0aXRsZT5Bc3Nlc3NtZW50IGFuZCBQbGFuPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+QXNzZXNzbWVudDwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJCTx0cj48dGQgY29sc3Bhbj0iMiI+Tk9ORTwvdGQ+PC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi42LjEiIGV4dGVuc2lvbj0iMjAxNS0wOC0wMSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi42Ii8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjYiIGV4dGVuc2lvbj0iMjAxNS0wOC0wMSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi42LjEiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjQ4NzY1LTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iQWxsZXJnaWVzLCBhZHZlcnNlIHJlYWN0aW9ucywgYWxlcnRzIi8+CiAgICAgICAgICA8dGl0bGU+QWxsZXJnaWVzIGFuZCBBZHZlcnNlIFJlYWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+CiAgICA8dGhlYWQ+CiAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk1lZGljYXRpb24vR3JvdXAgTmFtZTwvdGg+CiAgICAgICAgICAgICAgICA8dGg+UmVhY3Rpb248L3RoPgogICAgICAgICAgICAgICAgPHRoPlNldmVyaXR5PC90aD4KICAgICAgICAgICAgICAgIDx0aD5EYXRlPC90aD4KICAgICAgICA8L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgIDx0ciBJRD0iQWxlcnRPQlMtMTAwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+U3VsZmFtaWRlPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5CcmFkeWNhcmRpYSwgSXRjaHkgc2tpbiBlcnVwdGlvbiwgQ2hpbGw8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk1vZGVyYXRlPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4wOC8xMS8yMDIyPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHIgSUQ9IkFsZXJ0T0JTLTEwMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnBlbmljaWxsaW4gRzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk1pbGQ8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjA3LzIxLzIwMjI8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0ciBJRD0iQWxlcnRPQlMtMTAwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+YXNwaXJpbjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+QW54aWV0eTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+TWlsZCB0byBtb2RlcmF0ZTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+MDgvMTEvMjAyMjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgICAgPGVudHJ5PgogICAgICAgICAgICA8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iRVZOIj4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjMwIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjMwIi8+CiAgICAgICAgICAgICAgPGlkIHJvb3Q9IjEwMGI3MzQ5LTYwZGEtNDFmYi05NWIyLTdhNWU4NmE1YjYwYSIvPgogICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjQ4NzY1LTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iQWxsZXJnaWVzLCBhZHZlcnNlIHJlYWN0aW9ucywgYWxlcnRzIi8+CiAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iYWN0aXZlIi8+CiAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICA8bG93IHZhbHVlPSIyMDIyMTAxNzIxNDE0OSswMDAwIi8+CiAgICAgICAgICAgICAgICA8aGlnaCB2YWx1ZT0iMjAyMjEwMTcyMTQxNDkrMDAwMCIvPgogICAgICAgICAgICAgIDwvZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICA8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiPgogICAgICAgICAgICAgICAgPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC43IiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjQuMy45MCIvPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjciLz4KICAgICAgICAgICAgICAgICAgPGlkIHJvb3Q9IjA3MmJmZTZlLWRiNzEtNDQzYS05MzdlLTlmNDRjNmM1NDlmZiIvPgogICAgICAgICAgICAgICAgICA8Y29kZSBjb2RlPSJBU1NFUlRJT04iIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIgY29kZVN5c3RlbU5hbWU9IkhMNyBBY3QgQ29kZXMiIGRpc3BsYXlOYW1lPSJBY3RDb2RlLkFTU0VSVElPTiIvPgogICAgICAgICAgICAgICAgICA8dGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjQWxlcnRPQlMtMTAwMCIvPjwvdGV4dD4KICAgICAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjIwODExIi8+CiAgICAgICAgICAgICAgICAgIDwvZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iNDE2MDk4MDAyIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iRHJ1ZyBBbGxlcmd5IChkaXNvcmRlcikiLz4KICAgICAgICAgICAgICAgICAgPHBhcnRpY2lwYW50IHR5cGVDb2RlPSJDU00iPgogICAgICAgICAgICAgICAgICAgIDxwYXJ0aWNpcGFudFJvbGUgY2xhc3NDb2RlPSJNQU5VIj4KICAgICAgICAgICAgICAgICAgICAgIDxwbGF5aW5nRW50aXR5IGNsYXNzQ29kZT0iTU1BVCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjgyMTAxIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljg4IiBjb2RlU3lzdGVtTmFtZT0iUnhOb3JtIiBkaXNwbGF5TmFtZT0ic3VsZmFjZXRhbWlkZSBzb2RpdW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbFRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI0FsZXJ0T0JTLTEwMDAiLz48L29yaWdpbmFsVGV4dD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5TdWxmYW1pZGU8L25hbWU+CiAgICAgICAgICAgICAgICAgICAgICA8L3BsYXlpbmdFbnRpdHk+CiAgICAgICAgICAgICAgICAgICAgPC9wYXJ0aWNpcGFudFJvbGU+CiAgICAgICAgICAgICAgICAgIDwvcGFydGljaXBhbnQ+CiAgICAgICAgICAgICAgICAgIDxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iTUZTVCIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC45IiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuOSIvPgogICAgICAgICAgICAgICAgICAgICAgPGlkIHJvb3Q9Ijk4ZGI3ZDRjLWM3OWEtNDU5Yi05ODdjLTMxMDM1ODI2ZjJkZiIvPgogICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGNvZGVTeXN0ZW1OYW1lPSJITDcgQWN0IENvZGVzIiBkaXNwbGF5TmFtZT0iQWN0Q29kZS5BU1NFUlRJT04iLz4KICAgICAgICAgICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjIwODExIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIHZhbHVlPSIyMDIyMDgxMSIvPgogICAgICAgICAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iNDg4NjcwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRUQgQ1QiIGRpc3BsYXlOYW1lPSJCcmFkeWNhcmRpYSIvPgogICAgICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgICAgIDwvZW50cnlSZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgIDxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iTUZTVCIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC45IiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuOSIvPgogICAgICAgICAgICAgICAgICAgICAgPGlkIHJvb3Q9ImMxYTU0YThkLTYxYTgtNGVjOC04YTc4LTE5OGFkOTgyMzNhZCIvPgogICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGNvZGVTeXN0ZW1OYW1lPSJITDcgQWN0IENvZGVzIiBkaXNwbGF5TmFtZT0iQWN0Q29kZS5BU1NFUlRJT04iLz4KICAgICAgICAgICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjIwODExIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIHZhbHVlPSIyMDIyMDgxMSIvPgogICAgICAgICAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iNDM3MjQwMDIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRUQgQ1QiIGRpc3BsYXlOYW1lPSJDaGlsbCIvPgogICAgICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgICAgIDwvZW50cnlSZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgIDxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iTUZTVCIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8b2JzZXJ2YXRpb24gY2xhc3NDb2RlPSJPQlMiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC45IiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuOSIvPgogICAgICAgICAgICAgICAgICAgICAgPGlkIHJvb3Q9IjVmN2JlYzU1LWZiNzItNGFlYy1hNTEzLTU2M2E4MGY4OTVhMCIvPgogICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGNvZGVTeXN0ZW1OYW1lPSJITDcgQWN0IENvZGVzIiBkaXNwbGF5TmFtZT0iQWN0Q29kZS5BU1NFUlRJT04iLz4KICAgICAgICAgICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjIwODExIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIHZhbHVlPSIyMDIyMDgxMSIvPgogICAgICAgICAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDRCIgY29kZT0iNjQxNDQwMDIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRUQgQ1QiIGRpc3BsYXlOYW1lPSJJdGNoeSBza2luIGVydXB0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPC9vYnNlcnZhdGlvbj4KICAgICAgICAgICAgICAgICAgPC9lbnRyeVJlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJTVUJKIiBpbnZlcnNpb25JbmQ9InRydWUiPgogICAgICAgICAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjgiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC44Ii8+CiAgICAgICAgICAgICAgICAgICAgICA8aWQgcm9vdD0iZDQ4YTNlMmQtZmEyZi00ZmJiLWJkMzktYjBhNWU3OTBkYzNkIi8+CiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjb2RlPSJTRVYiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNCIgY29kZVN5c3RlbU5hbWU9IkhMN0FjdENvZGUiIGRpc3BsYXlOYW1lPSJTZXZlcml0eSBvYnNlcnZhdGlvbiIvPgogICAgICAgICAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxvdyB2YWx1ZT0iMjAyMjA4MTEiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGhpZ2ggdmFsdWU9IjIwMjIwODExIi8+CiAgICAgICAgICAgICAgICAgICAgICA8L2VmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSI2NzM2MDA3IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iTW9kZXJhdGUiLz4KICAgICAgICAgICAgICAgICAgICA8L29ic2VydmF0aW9uPgogICAgICAgICAgICAgICAgICA8L2VudHJ5UmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICA8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlJFRlIiIGludmVyc2lvbkluZD0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMjgiLz4KICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjMzOTk5LTQiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iU3RhdHVzIi8+CiAgICAgICAgICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4KICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iQ0UiIGNvZGU9IjU1NTYxMDAzIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iQWN0aXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPC9vYnNlcnZhdGlvbj4KICAgICAgICAgICAgICAgICAgPC9lbnRyeVJlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgPC9lbnRyeVJlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9hY3Q+CiAgICAgICAgICA8L2VudHJ5PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjEwIi8+CiAgICAgICAgICA8Y29kZSBjb2RlPSIxODc3Ni01IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IlRyZWF0bWVudCBwbGFuIi8+CiAgICAgICAgICA8dGl0bGU+Q2FyZSBQbGFuPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+VHlwZTwvdGg+CgkJCQk8dGg+VmFsdWU8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJCQkJPHRyIElEPSJDYXJlUGxhblJlZi0xMDAzIj4KCQkJCQkJPHRkPjAxLzA5LzIwMjM8L3RkPgoJCQkJCQk8dGQ+QVBQT0lOVE1FTlQ8L3RkPgoJCQkJCQk8dGQ+Q2hlbW8gQzZEMjIgQ2lzcGxhdGluICsgQ2V0dXhpbWFiIEQxLDgsMTUsMjIgUTI4RCAoSGVhZCBhbmQgTmVjayk8L3RkPgoJCQkJPC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgPGVuY291bnRlciBjbGFzc0NvZGU9IkVOQyIgbW9vZENvZGU9IkFSUSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC40MCIvPgogICAgICAgICAgICAgIDxpZCByb290PSJjOTUyNjY4MS1jMzFkLTQ4OGYtYmJiMy1jZjdhOGYxYjNhNTMiLz4KICAgICAgICAgICAgICA8dGV4dD5DaGVtbyBDNEQxIENpc3BsYXRpbiArIENldHV4aW1hYiBEMSw4LDE1LDIyIFEyOEQgKEhlYWQgYW5kIE5lY2spPHJlZmVyZW5jZSB2YWx1ZT0iI0NhcmVQbGFuUmVmLTEwMTQiLz48L3RleHQ+CiAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWUgdmFsdWU9IjIwMjIxMDI0Ii8+CiAgICAgICAgICAgIDwvZW5jb3VudGVyPgogICAgICAgICAgPC9lbnRyeT4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4xMiIvPgogICAgICAgICAgPGNvZGUgY29kZT0iMjkyOTktNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJSRUFTT04gRk9SIFZJU0lUIi8+CiAgICAgICAgICA8dGl0bGU+UmVhc29uIGZvciBWaXNpdDwvdGl0bGU+CiAgICAgICAgICA8dGV4dD5DaGVtbyBDM0QyMiBDaXNwbGF0aW4gKyBDZXR1eGltYWIgRDEsOCwxNSwyMiBRMjhEIChIZWFkIGFuZCBOZWNrKTwvdGV4dD4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi41NiIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8Y29kZSBjb2RlPSIxMDE5MC03IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9Ik1lbnRhbCBTdGF0dXMiLz4KICAgICAgICAgIDx0aXRsZT5NZW50YWwgU3RhdHVzPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+VmFsdWU8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJCQkJCTx0ciBJRD0iTWVudGFsU3RhdHVzUmVmLTEwMTUiPgoJCQkJCQkJPHRkPjA3LzIxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPk1lbW9yeSBmdW5jdGlvbiBub3JtYWw8L3RkPgoJCQkJCTwvdHI+Cgk8L3Rib2R5Pgo8L3RhYmxlPgo8L3RleHQ+CiAgICAgICAgICA8ZW50cnk+CiAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC43NCIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICAgICAgPGlkIHJvb3Q9IjBmYzBkNmJhLTFiMTAtNGEzMC05ZmQyLWRhNjI4MGJlOTJhMCIvPgogICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjM3MzkzMDAwMCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgY29kZVN5c3RlbU5hbWU9IlNOT01FRCBDVCIgZGlzcGxheU5hbWU9IkNvZ25pdGl2ZSBTdGF0dXMgRmluZGluZyI+CiAgICAgICAgICAgICAgICA8dHJhbnNsYXRpb24gY29kZT0iNzUyNzUtOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJDb2duaXRpdmUgZnVuY3Rpb24gW0ludGVycHJldGF0aW9uXSIvPgogICAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgICAgICA8dGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjTWVudGFsU3RhdHVzUmVmLTEwMTUiLz48L3RleHQ+CiAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICA8bG93IHZhbHVlPSIyMDIyMDcyMSIvPgogICAgICAgICAgICAgIDwvZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSIyNDc2MDIwMDUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRUQgQ1QiIGRpc3BsYXlOYW1lPSJNZW1vcnkgZnVuY3Rpb24gbm9ybWFsIj4KICAgICAgICAgICAgICAgIDx0cmFuc2xhdGlvbiBudWxsRmxhdm9yPSJVTksiLz4KICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L29ic2VydmF0aW9uPgogICAgICAgICAgPC9lbnRyeT4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4yMi4xIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMjIiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMjIiIGV4dGVuc2lvbj0iMjAxNS0wOC0wMSIvPgogICAgICAgICAgPGNvZGUgY29kZT0iNDYyNDAtOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJFbmNvdW50ZXJzIi8+CiAgICAgICAgICA8dGl0bGU+RW5jb3VudGVyczwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPk5hbWU8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJCQkJCTx0ciBJRD0iRW5jb3VudGVyRGlhZ25vc2lzUmVmLTEwMTgiPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPkxhcnluZ2VhbCBjYW5jZXIsIHN1cHJhZ2xvdHRpczwvdGQ+CQkJCQkJCgkJCQkJPC90cj4KCQkJCQk8dHIgSUQ9IkVuY291bnRlckRpYWdub3Npc1JlZi0xMDE5Ij4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5OZXcgQXBwb2ludG1lbnQ8L3RkPgkJCQkJCQoJCQkJCTwvdHI+Cgk8L3Rib2R5Pgo8L3RhYmxlPgo8L3RleHQ+CiAgICAgICAgICA8ZW50cnk+CiAgICAgICAgICAgIDxlbmNvdW50ZXIgY2xhc3NDb2RlPSJFTkMiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNDkiIGV4dGVuc2lvbj0iMjAxNS0wOC0wMSIvPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNDkiLz4KICAgICAgICAgICAgICA8aWQgcm9vdD0iNDNkYmU3M2EtYzE5Yi00MzlhLWI5NjMtNTRmZTQzMjBlMWZjIi8+CiAgICAgICAgICAgICAgPGNvZGUgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgICAgICAgPHRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI0VuY291bnRlckRpYWdub3Npc1JlZi0xMDE5Ii8+PC90ZXh0PgogICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDIyMDgwMSIvPgogICAgICAgICAgICAgIDxwZXJmb3JtZXIgdHlwZUNvZGU9IlBSRiI+CiAgICAgICAgICAgICAgICA8YXNzaWduZWRFbnRpdHk+CiAgICAgICAgICAgICAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSIwODQyNjAiLz4KICAgICAgICAgICAgICAgICAgPGFkZHIgbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgICAgICAgICAgICAgPHRlbGVjb20gbnVsbEZsYXZvcj0iTkkiLz4KICAgICAgICAgICAgICAgICAgPGFzc2lnbmVkUGVyc29uPgogICAgICAgICAgICAgICAgICAgIDxuYW1lPjxnaXZlbj5MYWNpZTwvZ2l2ZW4+PGZhbWlseT5SYXZlbnNjcmFmdDwvZmFtaWx5PjwvbmFtZT4KICAgICAgICAgICAgICAgICAgPC9hc3NpZ25lZFBlcnNvbj4KICAgICAgICAgICAgICAgICAgPHJlcHJlc2VudGVkT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxpZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4zLjYyMyIgZXh0ZW5zaW9uPSJDQkMzRDY1NDgzRDY0RTk2RTA0NDAwMjEyODYxQjI5NiIvPgogICAgICAgICAgICAgICAgICAgIDxuYW1lPk9uYyBIZW0gb2YgTVNIPC9uYW1lPgogICAgICAgICAgICAgICAgICAgIDx0ZWxlY29tIHZhbHVlPSJtYWlsdG86RGl2aXluaV9MYm5iaGluQG1ja2Vzc29uLmNvbSIgdXNlPSJESVIiLz4KICAgICAgICAgICAgICAgICAgICA8YWRkcj48c3RyZWV0QWRkcmVzc0xpbmU+MjE2NCBMYWtlIEZvcmVzdCBEcml2ZTwvc3RyZWV0QWRkcmVzc0xpbmU+PHN0cmVldEFkZHJlc3NMaW5lPjk3NDQgQ291bnR5IExpbmUgUm9hZDwvc3RyZWV0QWRkcmVzc0xpbmU+PGNpdHk+RWFzdCBQcm92aWRlbmNlPC9jaXR5PjxzdGF0ZT5SSTwvc3RhdGU+PHBvc3RhbENvZGU+OTQ1NTU8L3Bvc3RhbENvZGU+PC9hZGRyPgogICAgICAgICAgICAgICAgICA8L3JlcHJlc2VudGVkT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPC9hc3NpZ25lZEVudGl0eT4KICAgICAgICAgICAgICA8L3BlcmZvcm1lcj4KICAgICAgICAgICAgPC9lbmNvdW50ZXI+CiAgICAgICAgICA8L2VudHJ5PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjE0IiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMTQiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjQ3NDIwLTUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iRnVuY3Rpb25hbCBzdGF0dXMgYXNzZXNzbWVudCIvPgogICAgICAgICAgPHRpdGxlPkZ1bmN0aW9uYWwgU3RhdHVzPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+TmFtZTwvdGg+CgkJCQk8dGg+U2NvcmU8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJCQkJCTx0ciBJRD0iRnVuY3Rpb25hbFN0YXR1c1JlZi0xMDIxIj4KCQkJCQkJCTx0ZD4wNy8yMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5LYXJub2Zza3kgcGVyZm9ybWFuY2Ugc3RhdHVzPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD45MDwvdGQ+CgkJCQkJPC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgPG9yZ2FuaXplciBjbGFzc0NvZGU9IkNMVVNURVIiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNjYiLz4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjEiLz4KICAgICAgICAgICAgICA8aWQgcm9vdD0iNWY1NjY4OWMtYWFmZi00YTk1LTlkMzQtNTlkNTk5MjAxMzAwIi8+CiAgICAgICAgICAgICAgPGNvZGUgY29kZT0iZDUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMjU0IiBjb2RlU3lzdGVtTmFtZT0iSUNGIiBkaXNwbGF5TmFtZT0iU2VsZi1DYXJlIi8+CiAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgPGNvbXBvbmVudD4KICAgICAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNjciLz4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4yIi8+CiAgICAgICAgICAgICAgICAgIDxpZCByb290PSIyNWJmZWY1Mi0xMDdkLTQwMDMtOGQwOC05Y2Y2Njc4MTE4MzEiLz4KICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iNTQ1MjItOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJGdW5jdGlvbmFsIHN0YXR1cyIvPgogICAgICAgICAgICAgICAgICA8dGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjRnVuY3Rpb25hbFN0YXR1c1JlZi0xMDIxIi8+PC90ZXh0PgogICAgICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4KICAgICAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgPGxvdyB2YWx1ZT0iMjAyMjA3MjEiLz4KICAgICAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9IkNEIiBjb2RlPSIyNzM1NDYwMDMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRUQgQ1QiIGRpc3BsYXlOYW1lPSJLYXJub2Zza3kgcGVyZm9ybWFuY2Ugc3RhdHVzIj4KICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxUZXh0PjkwPC9vcmlnaW5hbFRleHQ+CiAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICA8L29ic2VydmF0aW9uPgogICAgICAgICAgICAgIDwvY29tcG9uZW50PgogICAgICAgICAgICA8L29yZ2FuaXplcj4KICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICA8L2NvbXBvbmVudD4KICAgICAgPGNvbXBvbmVudD4KICAgICAgICA8c2VjdGlvbiBudWxsRmxhdm9yPSJOSSI+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjYwIi8+CiAgICAgICAgICA8Y29kZSBjb2RlPSI2MTE0Ni03IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IkdvYWxzIi8+CiAgICAgICAgICA8dGl0bGU+R29hbHM8L3RpdGxlPgogICAgICAgICAgPHRleHQ+PHRhYmxlPgoJPHRoZWFkPgoJCTx0cj4KCQkJCQkJCTx0aD5EYXRlPC90aD4KCQkJCTx0aD5Hb2FsPC90aD4KCQkJCTx0aD5BdXRob3I8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJCQk8dHI+PHRkIGNvbHNwYW49IjMiPk5PTkU8L3RkPjwvdHI+Cgk8L3Rib2R5Pgo8L3RhYmxlPgo8L3RleHQ+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICA8L2NvbXBvbmVudD4KICAgICAgPGNvbXBvbmVudD4KICAgICAgICA8c2VjdGlvbiBudWxsRmxhdm9yPSJOSSI+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjU4IiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9Ijc1MzEwLTMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iSGVhbHRoIGNvbmNlcm5zIGRvY3VtZW50Ii8+CiAgICAgICAgICA8dGl0bGU+SGVhbHRoQ29uY2VybnM8L3RpdGxlPgogICAgICAgICAgPHRleHQ+PHRhYmxlPgoJPHRoZWFkPgoJCTx0cj4KCQkJCQkJCTx0aD5EYXRlPC90aD4KCQkJCTx0aD5IZWFsdGggQ29uY2VybjwvdGg+CgkJCQk8dGg+QXV0aG9yPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJPHRyPjx0ZCBjb2xzcGFuPSIzIj5OT05FPC90ZD48L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjIuMSIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjIiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMiIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8Y29kZSBjb2RlPSIxMTM2OS02IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IkltbXVuaXphdGlvbnMiLz4KICAgICAgICAgIDx0aXRsZT5JbW11bml6YXRpb25zPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+TmFtZTwvdGg+CgkJCQk8dGg+Um91dGU8L3RoPgoJCQkJPHRoPkRvc2U8L3RoPgoJCQkJPHRoPkluc3RydWN0aW9uczwvdGg+CgkJCQk8dGg+UmVmdXNhbCBSZWFzb248L3RoPgoJCQkJPHRoPlN0YXR1czwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJCQkJPHRyIElEPSJJbW11bml6YXRpb25PQlMtMTAyMiI+CgkJCQkJCQk8dGQvPgoJCQkJCQkJPHRkPkNvdmlkLTE5IHZhY2NpbmUgKE1vZGVybmEpIDwvdGQ+CgkJCQkJCQk8dGQvPgoJCQkJCQkJPHRkLz4JCQkJCQkJCgkJCQkJCQk8dGQvPgkJCQkJCQkKCQkJCQkJCTx0ZC8+CgkJCQkJCQk8dGQ+Q29tcGxldGVkPC90ZD4KCQkJCQk8L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgICAgPGVudHJ5PgogICAgICAgICAgICA8c3Vic3RhbmNlQWRtaW5pc3RyYXRpb24gY2xhc3NDb2RlPSJTQkFETSIgbW9vZENvZGU9IkVWTiIgbmVnYXRpb25JbmQ9ImZhbHNlIj4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjUyIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjUyIi8+CiAgICAgICAgICAgICAgPGlkIHJvb3Q9ImQxOTFlZTNiLTQ0MzAtNGI5ZS1iZWIzLWUzNjNkNzQ0NTIzMSIvPgogICAgICAgICAgICAgIDx0ZXh0PjxyZWZlcmVuY2UgdmFsdWU9IiNJbW11bml6YXRpb25PQlMtMTAyMiIvPjwvdGV4dD4KICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4KICAgICAgICAgICAgICA8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj4KICAgICAgICAgICAgICAgIDxsb3cgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgIDxyb3V0ZUNvZGUgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgICAgICAgPGRvc2VRdWFudGl0eSBudWxsRmxhdm9yPSJVTksiPgogICAgICAgICAgICAgICAgPHRyYW5zbGF0aW9uIG51bGxGbGF2b3I9IlVOSyI+CiAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbFRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI0ltbXVuaXphdGlvbk9CUy0xMDIyIi8+PC9vcmlnaW5hbFRleHQ+CiAgICAgICAgICAgICAgICA8L3RyYW5zbGF0aW9uPgogICAgICAgICAgICAgIDwvZG9zZVF1YW50aXR5PgogICAgICAgICAgICAgIDxhZG1pbmlzdHJhdGlvblVuaXRDb2RlIG51bGxGbGF2b3I9IlVOSyIvPgogICAgICAgICAgICAgIDxjb25zdW1hYmxlPgogICAgICAgICAgICAgICAgPG1hbnVmYWN0dXJlZFByb2R1Y3QgY2xhc3NDb2RlPSJNQU5VIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC41NCIgZXh0ZW5zaW9uPSIyMDE0LTA2LTA5Ii8+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNTQiLz4KICAgICAgICAgICAgICAgICAgPG1hbnVmYWN0dXJlZE1hdGVyaWFsPgogICAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjIwNyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuMTIuMjkyIiBjb2RlU3lzdGVtTmFtZT0iQ1ZYIENvZGVzIiBkaXNwbGF5TmFtZT0iQ292aWQtMTkgdmFjY2luZSAoTW9kZXJuYSkiPgogICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsVGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjSW1tdW5pemF0aW9uT0JTLTEwMjIiLz48L29yaWdpbmFsVGV4dD4KICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgPG5hbWU+Q292aWQtMTkgdmFjY2luZSAoTW9kZXJuYSk8L25hbWU+CiAgICAgICAgICAgICAgICAgIDwvbWFudWZhY3R1cmVkTWF0ZXJpYWw+CiAgICAgICAgICAgICAgICA8L21hbnVmYWN0dXJlZFByb2R1Y3Q+CiAgICAgICAgICAgICAgPC9jb25zdW1hYmxlPgogICAgICAgICAgICA8L3N1YnN0YW5jZUFkbWluaXN0cmF0aW9uPgogICAgICAgICAgPC9lbnRyeT4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uIG51bGxGbGF2b3I9Ik5JIj4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMy4xIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMyIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4zIiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjMwOTU0LTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iUmVsZXZhbnQgZGlhZ25vc3RpYyB0ZXN0cyBhbmQvb3IgbGFib3JhdG9yeSBkYXRhIi8+CiAgICAgICAgICA8dGl0bGU+RGlhZ25vc3RpYyBSZXN1bHRzPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+VHlwZTwvdGg+CgkJCQk8dGg+VGVzdDwvdGg+CgkJCQk8dGg+VW5pdHM8L3RoPgoJCQkJPHRoPkxvd2VyIExpbWl0PC90aD4KCQkJCTx0aD5VcHBlciBMaW1pdDwvdGg+CgkJCQk8dGg+UmVzdWx0PC90aD4KCQkJCTx0aD5GbGFnPC90aD4KCQkJCTx0aD5Db21tZW50czwvdGg+CgkJCQk8dGg+U3RhdHVzPC90aD4KCQkJCTx0aD5PcmRlcmVkIEJ5PC90aD4KCQkJCTx0aD5TcGVjaW1lbiBTb3VyY2U8L3RoPgoJCQkJPHRoPkxhYiBBZGRyZXNzPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJPHRyPjx0ZCBjb2xzcGFuPSIxMyI+Tk9ORTwvdGQ+PC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uIG51bGxGbGF2b3I9Ik5JIj4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMjMiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4yMyIvPgogICAgICAgICAgPGNvZGUgY29kZT0iNDYyNjQtOCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJNZWRpY2FsIEVxdWlwbWVudCIvPgogICAgICAgICAgPHRpdGxlPk1lZGljYWwgRXF1aXBtZW50PC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGVzY3JpcHRpb248L3RoPgoJCQkJPHRoPlVESSBOdW1iZXI8L3RoPgoJCQkJPHRoPlNpdGU8L3RoPgoJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPkFjdGl2ZTwvdGg+CgkJCQk8dGg+Q29tbWVudDwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJCTx0cj48dGQgY29sc3Bhbj0iNiI+Tk9ORTwvdGQ+PC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4zOCIgZXh0ZW5zaW9uPSIyMDE0LTA2LTA5Ii8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjM4Ii8+CiAgICAgICAgICA8Y29kZSBjb2RlPSIyOTU0OS0zIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9Ik1lZGljYXRpb25zIEFkbWluaXN0ZXJlZCIvPgogICAgICAgICAgPHRpdGxlPk1lZGljYXRpb25zIEFkbWluaXN0ZXJlZDwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPk5hbWU8L3RoPgoJCQkJPHRoPlJvdXRlPC90aD4KCQkJCTx0aD5Eb3NlPC90aD4KCQkJCTx0aD5GcmVxdWVuY3k8L3RoPgoJCQkJPHRoPkluc3RydWN0aW9uczwvdGg+CgkJCQk8dGg+U3RhcnQgRGF0ZTwvdGg+CgkJCQk8dGg+RW5kIERhdGU8L3RoPgoJCQkJPHRoPlN0YXR1czwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJCQkJPHRyIElEPSJNZWRpY2F0aW9uT0JTLTEwMjMiPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPnNvZGl1bSBjaGxvcmlkZSA5IE1HL01MIEluamVjdGFibGUgU29sdXRpb24gPC90ZD4KCQkJCQkJCTx0ZD5pbnRyYXZlbm91c2x5PC90ZD4KCQkJCQkJCTx0ZD4xMDAwLjAgbUw8L3RkPgoJCQkJCQkJPHRkPm9uY2U8L3RkPgoJCQkJCQkJPHRkPlBvc3QtaHlkcmF0aW9uIGFmdGVyIENpc3BsYXRpbiBhZG1pbmlzdHJhdGlvbi48L3RkPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPmluYWN0aXZlPC90ZD4KCQkJCQk8L3RyPgoJCQkJCTx0ciBJRD0iTWVkaWNhdGlvbk9CUy0xMDI0Ij4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5jaXNwbGF0aW4gMSBNRy9NTCBJbmplY3RhYmxlIFNvbHV0aW9uIDwvdGQ+CgkJCQkJCQk8dGQ+aW50cmF2ZW5vdXNseTwvdGQ+CgkJCQkJCQk8dGQ+MjE0LjAgbWc8L3RkPgoJCQkJCQkJPHRkPm9uY2U8L3RkPgoJCQkJCQkJPHRkPkNpc3BsYXRpbiBpcyBhIHZlc2ljYW50LiBJZiBkaWx1dGVkIHRvIGEgZmluYWwgY29uY2VudHJhdGlvbiBvZiBsZXNzIHRoYW4gMC41IG1nL21MLCBjaXNwbGF0aW4gaXMgYSB2YXNjdWxhciBpcnJpdGFudC48L3RkPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPmluYWN0aXZlPC90ZD4KCQkJCQk8L3RyPgoJCQkJCTx0ciBJRD0iTWVkaWNhdGlvbk9CUy0xMDI1Ij4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD4xMDAgTUwgY2V0dXhpbWFiIDIgTUcvTUwgSW5qZWN0aW9uIDwvdGQ+CgkJCQkJCQk8dGQ+aW50cmF2ZW5vdXNseTwvdGQ+CgkJCQkJCQk8dGQ+NTM2LjAgbWc8L3RkPgoJCQkJCQkJPHRkPm9uY2U8L3RkPgoJCQkJCQkJPHRkPkxPQURJTkcgRE9TRSwgQzFEMSBPTkxZLiAKTWl4IGluIGFuIGVtcHR5IHZpYWZsZXggYmFnLiBEbyBub3Qgc2hha2Ugb3IgZnVydGhlciBkaWx1dGUgQ2V0dXhpbWFiLiBVc2UgYSAwLjIyIG1pY3JvbiBsb3cgcHJvdGVpbiBiaW5kaW5nIGluLWxpbmUgZmlsdGVyLgpNYXhpbXVtIGluZnVzaW9uIHJhdGUgaXMgNSBtTC9taW51dGUuIEFkbWluaXN0ZXIgQ2V0dXhpbWFiIG9ubHkgYXMgYSBjb250cm9sbGVkIElWIGluZnVzaW9uLiBNb25pdG9yIHBhdGllbnQgZm9yIDEgaG91ciBmb2xsb3dpbmcgaW5mdXNpb24uIEZsdXNoIGxpbmUgYXQgZW5kIG9mIGluZnVzaW9uIHdpdGggTlMuPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5pbmFjdGl2ZTwvdGQ+CgkJCQkJPC90cj4KCQkJCQk8dHIgSUQ9Ik1lZGljYXRpb25PQlMtMTAyNiI+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+Rm9zYXByZXBpdGFudCBJViA8L3RkPgoJCQkJCQkJPHRkPmludHJhdmVub3VzbHk8L3RkPgoJCQkJCQkJPHRkPjE1MC4wIG1nPC90ZD4KCQkJCQkJCTx0ZD5vbmNlPC90ZD4KCQkJCQkJCTx0ZC8+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+aW5hY3RpdmU8L3RkPgoJCQkJCTwvdHI+CgkJCQkJPHRyIElEPSJNZWRpY2F0aW9uT0JTLTEwMjciPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPmRleGFtZXRoYXNvbmUgcGhvc3BoYXRlIDQgTUcvTUwgSW5qZWN0YWJsZSBTb2x1dGlvbiA8L3RkPgoJCQkJCQkJPHRkPmludHJhdmVub3VzbHk8L3RkPgoJCQkJCQkJPHRkPjEwLjAgbWc8L3RkPgoJCQkJCQkJPHRkPm9uY2U8L3RkPgoJCQkJCQkJPHRkLz4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5pbmFjdGl2ZTwvdGQ+CgkJCQkJPC90cj4KCQkJCQk8dHIgSUQ9Ik1lZGljYXRpb25PQlMtMTAyOCI+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+ZGlwaGVuaHlkcmFtaW5lIGh5ZHJvY2hsb3JpZGUgMC41IE1HL01MIEluamVjdGFibGUgU29sdXRpb24gPC90ZD4KCQkJCQkJCTx0ZD5pbnRyYXZlbm91c2x5PC90ZD4KCQkJCQkJCTx0ZD41MC4wIG1nPC90ZD4KCQkJCQkJCTx0ZD5vbmNlPC90ZD4KCQkJCQkJCTx0ZD5BZG1pbmlzdGVyIGFzIHByZW1lZGljYXRpb24gMzAtNjAgbWludXRlcyBiZWZvcmUgY2V0dXhpbWFiIGluZnVzaW9uLjwvdGQ+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+aW5hY3RpdmU8L3RkPgoJCQkJCTwvdHI+CgkJCQkJPHRyIElEPSJNZWRpY2F0aW9uT0JTLTEwMjkiPgoJCQkJCQkJPHRkPjA4LzAxLzIwMjI8L3RkPgoJCQkJCQkJPHRkPlBhbG9ub3NldHJvbiBJViA8L3RkPgoJCQkJCQkJPHRkPmludHJhdmVub3VzbHk8L3RkPgoJCQkJCQkJPHRkPjAuMjUgbWc8L3RkPgoJCQkJCQkJPHRkPm9uY2U8L3RkPgoJCQkJCQkJPHRkLz4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5pbmFjdGl2ZTwvdGQ+CgkJCQkJPC90cj4KCQkJCQk8dHIgSUQ9Ik1lZGljYXRpb25PQlMtMTAzMCI+CgkJCQkJCQk8dGQ+MDgvMDEvMjAyMjwvdGQ+CgkJCQkJCQk8dGQ+c29kaXVtIGNobG9yaWRlIDkgTUcvTUwgSW5qZWN0YWJsZSBTb2x1dGlvbiA8L3RkPgoJCQkJCQkJPHRkPmludHJhdmVub3VzbHk8L3RkPgoJCQkJCQkJPHRkPjEwMDAuMCBtTDwvdGQ+CgkJCQkJCQk8dGQ+b25jZTwvdGQ+CgkJCQkJCQk8dGQ+UHJlLWh5ZHJhdGlvbiBwcmlvciB0byBDaXNwbGF0aW4gYWRtaW5pc3RyYXRpb24uPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD4wOC8wMS8yMDIyPC90ZD4KCQkJCQkJCTx0ZD5pbmFjdGl2ZTwvdGQ+CgkJCQkJPC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMTYiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMTYiLz4KICAgICAgICAgICAgICA8aWQgcm9vdD0iZDI1ZGIzNjktMWIyOS00ZWM0LTlkNjYtYmYzYTZhYzMyZWQwIi8+CiAgICAgICAgICAgICAgPHRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI01lZGljYXRpb25PQlMtMTAyMyIvPjwvdGV4dD4KICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4KICAgICAgICAgICAgICA8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj4KICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjIwODAxMTg0NSswMCIvPgogICAgICAgICAgICAgICAgPGhpZ2ggdmFsdWU9IjIwMjIwODAxMTkxNSswMCIvPgogICAgICAgICAgICAgIDwvZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICA8cm91dGVDb2RlIGNvZGU9IkMzODI3NiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuMy4yNi4xLjEiIGNvZGVTeXN0ZW1OYW1lPSJOQ0kgVGhlc2F1cnVzIiBkaXNwbGF5TmFtZT0iSU5UUkFWRU5PVVMiLz4KICAgICAgICAgICAgICA8YXBwcm9hY2hTaXRlQ29kZSBudWxsRmxhdm9yPSJVTksiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuOTYiIGNvZGVTeXN0ZW1OYW1lPSJTTk9NRURDVCIvPgogICAgICAgICAgICAgIDxkb3NlUXVhbnRpdHkgdmFsdWU9IjEwMDAuMCIgdW5pdD0ibUwiLz4KICAgICAgICAgICAgICA8YWRtaW5pc3RyYXRpb25Vbml0Q29kZSBudWxsRmxhdm9yPSJVTksiLz4KICAgICAgICAgICAgICA8Y29uc3VtYWJsZT4KICAgICAgICAgICAgICAgIDxtYW51ZmFjdHVyZWRQcm9kdWN0IGNsYXNzQ29kZT0iTUFOVSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMjMiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjIzIi8+CiAgICAgICAgICAgICAgICAgIDxtYW51ZmFjdHVyZWRNYXRlcmlhbD4KICAgICAgICAgICAgICAgICAgICA8Y29kZSBjb2RlPSIzMTMwMDIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuODgiIGNvZGVTeXN0ZW1OYW1lPSJSeE5vcm0iIGRpc3BsYXlOYW1lPSJzb2RpdW0gY2hsb3JpZGUgOSBNRy9NTCBJbmplY3RhYmxlIFNvbHV0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbFRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI01lZGljYXRpb25PQlMtMTAyMyIvPjwvb3JpZ2luYWxUZXh0PgogICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0aW9uIHhzaTp0eXBlPSJDRSIgY29kZT0iMTIxMCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNC42NCIgY29kZVN5c3RlbU5hbWU9IkdDTiBTZXF1ZW5jZSBOdW1iZXJzIiBkaXNwbGF5TmFtZT0ic29kaXVtIGNobG9yaWRlIDkgTUcvTUwgSW5qZWN0YWJsZSBTb2x1dGlvbiIvPgogICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgICAgICAgICAgICA8bmFtZT5zb2RpdW0gY2hsb3JpZGUgOSBNRy9NTCBJbmplY3RhYmxlIFNvbHV0aW9uPC9uYW1lPgogICAgICAgICAgICAgICAgICA8L21hbnVmYWN0dXJlZE1hdGVyaWFsPgogICAgICAgICAgICAgICAgPC9tYW51ZmFjdHVyZWRQcm9kdWN0PgogICAgICAgICAgICAgIDwvY29uc3VtYWJsZT4KICAgICAgICAgICAgICA8ZW50cnlSZWxhdGlvbnNoaXAgdHlwZUNvZGU9IlNVQkoiIGludmVyc2lvbkluZD0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8YWN0IGNsYXNzQ29kZT0iQUNUIiBtb29kQ29kZT0iSU5UIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4yMCIvPgogICAgICAgICAgICAgICAgICA8Y29kZSB4c2k6dHlwZT0iQ0UiIGNvZGU9Ijk2NzAwNiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgY29kZVN5c3RlbU5hbWU9IlNOT01FRCBDVCIgZGlzcGxheU5hbWU9Ik1lZGljYXRpb24gRWR1Y2F0aW9uIi8+CiAgICAgICAgICAgICAgICAgIDx0ZXh0PlBvc3QtaHlkcmF0aW9uIGFmdGVyIENpc3BsYXRpbiBhZG1pbmlzdHJhdGlvbi48L3RleHQ+CiAgICAgICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgICAgPC9hY3Q+CiAgICAgICAgICAgICAgPC9lbnRyeVJlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9zdWJzdGFuY2VBZG1pbmlzdHJhdGlvbj4KICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICA8L2NvbXBvbmVudD4KICAgICAgPGNvbXBvbmVudD4KICAgICAgICA8c2VjdGlvbj4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMS4xIiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi4xIiBleHRlbnNpb249IjIwMTQtMDYtMDkiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjEwMTYwLTAiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iSGlzdG9yeSBvZiBtZWRpY2F0aW9uIHVzZSIvPgogICAgICAgICAgPHRpdGxlPk1lZGljYXRpb25zPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+TmFtZTwvdGg+CgkJCQk8dGg+Um91dGU8L3RoPgoJCQkJPHRoPkRvc2U8L3RoPgoJCQkJPHRoPkZyZXF1ZW5jeTwvdGg+CgkJCQk8dGg+SW5zdHJ1Y3Rpb25zPC90aD4KCQkJCTx0aD5TdGFydCBEYXRlPC90aD4KCQkJCTx0aD5FbmQgRGF0ZTwvdGg+CgkJCQk8dGg+U3RhdHVzPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJCQk8dHIgSUQ9Ik1lZGljYXRpb25PQlMtMTAzMSI+CgkJCQkJCQk8dGQvPgoJCQkJCQkJPHRkPlRyYW1hZG9sIE9yYWwgPC90ZD4KCQkJCQkJCTx0ZD5vcmFsbHk8L3RkPgoJCQkJCQkJPHRkPjEuMCB0YWJsZXQ8L3RkPgoJCQkJCQkJPHRkPmRhaWx5PC90ZD4KCQkJCQkJCTx0ZD4gcXVhbnRpdHkgc3VmZmljaWVudCBmb3IgNTAgZGF5czsgMCByZWZpbGxzPC90ZD4KCQkJCQkJCTx0ZC8+CgkJCQkJCQk8dGQvPgoJCQkJCQkJPHRkPmFjdGl2ZTwvdGQ+CgkJCQkJPC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgPHN1YnN0YW5jZUFkbWluaXN0cmF0aW9uIGNsYXNzQ29kZT0iU0JBRE0iIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMTYiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMTYiLz4KICAgICAgICAgICAgICA8aWQgcm9vdD0iN2QwYjY1ZGQtZmNhZC00YmM0LWEyNDgtYTJhZTRiZDRiZTk1Ii8+CiAgICAgICAgICAgICAgPHRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI01lZGljYXRpb25PQlMtMTAzMSIvPjwvdGV4dD4KICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJhY3RpdmUiLz4KICAgICAgICAgICAgICA8ZWZmZWN0aXZlVGltZSB4c2k6dHlwZT0iSVZMX1RTIj4KICAgICAgICAgICAgICAgIDxsb3cgbnVsbEZsYXZvcj0iVU5LIi8+CiAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgIDxyb3V0ZUNvZGUgY29kZT0iQzM4Mjg4IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My4zLjI2LjEuMSIgY29kZVN5c3RlbU5hbWU9Ik5DSSBUaGVzYXVydXMiIGRpc3BsYXlOYW1lPSJPUkFMIi8+CiAgICAgICAgICAgICAgPGFwcHJvYWNoU2l0ZUNvZGUgbnVsbEZsYXZvcj0iVU5LIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEQ1QiLz4KICAgICAgICAgICAgICA8ZG9zZVF1YW50aXR5IHZhbHVlPSIxLjAiIHVuaXQ9InRhYmxldCIvPgogICAgICAgICAgICAgIDxhZG1pbmlzdHJhdGlvblVuaXRDb2RlIG51bGxGbGF2b3I9IlVOSyIvPgogICAgICAgICAgICAgIDxjb25zdW1hYmxlPgogICAgICAgICAgICAgICAgPG1hbnVmYWN0dXJlZFByb2R1Y3QgY2xhc3NDb2RlPSJNQU5VIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4yMyIgZXh0ZW5zaW9uPSIyMDE0LTA2LTA5Ii8+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMjMiLz4KICAgICAgICAgICAgICAgICAgPG1hbnVmYWN0dXJlZE1hdGVyaWFsPgogICAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjgzNTYwMyIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi44OCIgY29kZVN5c3RlbU5hbWU9IlJ4Tm9ybSIgZGlzcGxheU5hbWU9IlRyYW1hZG9sIE9yYWwiPgogICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsVGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjTWVkaWNhdGlvbk9CUy0xMDMxIi8+PC9vcmlnaW5hbFRleHQ+CiAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRpb24geHNpOnR5cGU9IkNFIiBjb2RlPSJVTktOT1dOIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My40LjY0IiBjb2RlU3lzdGVtTmFtZT0iR0NOIFNlcXVlbmNlIE51bWJlcnMiIGRpc3BsYXlOYW1lPSJUcmFtYWRvbCBPcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICAgICAgICAgICAgICAgIDxuYW1lPlRyYW1hZG9sIE9yYWw8L25hbWU+CiAgICAgICAgICAgICAgICAgIDwvbWFudWZhY3R1cmVkTWF0ZXJpYWw+CiAgICAgICAgICAgICAgICA8L21hbnVmYWN0dXJlZFByb2R1Y3Q+CiAgICAgICAgICAgICAgPC9jb25zdW1hYmxlPgogICAgICAgICAgICAgIDxlbnRyeVJlbGF0aW9uc2hpcCB0eXBlQ29kZT0iU1VCSiIgaW52ZXJzaW9uSW5kPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDxhY3QgY2xhc3NDb2RlPSJBQ1QiIG1vb2RDb2RlPSJJTlQiPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjIwIi8+CiAgICAgICAgICAgICAgICAgIDxjb2RlIHhzaTp0eXBlPSJDRSIgY29kZT0iOTY3MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iTWVkaWNhdGlvbiBFZHVjYXRpb24iLz4KICAgICAgICAgICAgICAgICAgPHRleHQ+IHF1YW50aXR5IHN1ZmZpY2llbnQgZm9yIDUwIGRheXM7IDAgcmVmaWxsczwvdGV4dD4KICAgICAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgICA8L2FjdD4KICAgICAgICAgICAgICA8L2VudHJ5UmVsYXRpb25zaGlwPgogICAgICAgICAgICA8L3N1YnN0YW5jZUFkbWluaXN0cmF0aW9uPgogICAgICAgICAgPC9lbnRyeT4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uIG51bGxGbGF2b3I9Ik5JIj4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuNDUiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi40NSIvPgogICAgICAgICAgPGNvZGUgY29kZT0iNjk3MzAtMCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJJbnN0cnVjdGlvbnMiLz4KICAgICAgICAgIDx0aXRsZT5QYXRpZW50IEVkdWNhdGlvbjwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPlR5cGU8L3RoPgoJCQkJPHRoPlZhbHVlPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJPHRyPjx0ZCBjb2xzcGFuPSIzIj5OT05FPC90ZD48L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjUuMSIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjUiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuNSIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjUuMSIvPgogICAgICAgICAgPGNvZGUgY29kZT0iMTE0NTAtNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJQcm9ibGVtIExpc3QiLz4KICAgICAgICAgIDx0aXRsZT5Qcm9ibGVtczwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRpYWdub3NpczwvdGg+CgkJCQk8dGg+U3RhdHVzPC90aD4KCQkJCTx0aD5EYXRlIG9mIERpYWdub3NpczwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJCQk8dHIgSUQ9IlByb2JsZW1PQlMtMTI1MyI+CgkJCQkJCTx0ZD5IaWdoIGJsb29kIHByZXNzdXJlPC90ZD4KCQkJCQkJPHRkPkFjdGl2ZTwvdGQ+CgkJCQkJCTx0ZC8+CgkJCQk8L3RyPgoJCQkJPHRyIElEPSJQcm9ibGVtT0JTLTEyNTQiPgoJCQkJCQk8dGQ+UHJvc3RhdGUgY2FuY2VyPC90ZD4KCQkJCQkJPHRkPkFjdGl2ZTwvdGQ+CgkJCQkJCTx0ZD4wOS8wMS8yMDIxPC90ZD4KCQkJCTwvdHI+Cgk8L3Rib2R5Pgo8L3RhYmxlPgo8L3RleHQ+CiAgICAgICAgICA8ZW50cnk+CiAgICAgICAgICAgIDxhY3QgY2xhc3NDb2RlPSJBQ1QiIG1vb2RDb2RlPSJFVk4iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMyIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4zIi8+CiAgICAgICAgICAgICAgPGlkIHJvb3Q9IjJhMTg3NmI5LTVhYzYtNDdhMi1hMzIyLTYzMmU1OTBmOWFkYSIvPgogICAgICAgICAgICAgIDxjb2RlIGNvZGU9IkNPTkMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuNiIgY29kZVN5c3RlbU5hbWU9IkhMN0FjdENsYXNzIiBkaXNwbGF5TmFtZT0iQ29uY2VybiIvPgogICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImFjdGl2ZSIvPgogICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgPGxvdyBudWxsRmxhdm9yPSJVTksiLz4KICAgICAgICAgICAgICA8L2VmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgPGVudHJ5UmVsYXRpb25zaGlwIHR5cGVDb2RlPSJTVUJKIj4KICAgICAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNCIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuNCIvPgogICAgICAgICAgICAgICAgICA8aWQgcm9vdD0iOTllYWVlOGUtNzNiNi00OWQxLTk0Y2EtYmNiYmMyYTM2ZmEwIi8+CiAgICAgICAgICAgICAgICAgIDxjb2RlIGNvZGU9IjU1NjA3MDA2IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iUHJvYmxlbSI+CiAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0aW9uIGNvZGU9Ijc1MzI2LTkiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iUHJvYmxlbSIvPgogICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDx0ZXh0PjxyZWZlcmVuY2UgdmFsdWU9IiNQcm9ibGVtT0JTLTEyNTMiLz48L3RleHQ+CiAgICAgICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgICAgICA8ZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICAgICAgICA8bG93IG51bGxGbGF2b3I9IlVOSyIvPgogICAgICAgICAgICAgICAgICA8L2VmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjM4MzQxMDAzIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBjb2RlU3lzdGVtTmFtZT0iU05PTUVEIENUIiBkaXNwbGF5TmFtZT0iSHlwZXJ0ZW5zaXZlIGRpc29yZGVyLCBzeXN0ZW1pYyBhcnRlcmlhbCAoZGlzb3JkZXIpIj4KICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRpb24gY29kZT0iSTEwIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjkwIiBjb2RlU3lzdGVtTmFtZT0iSUNELTEwLUNNIiBkaXNwbGF5TmFtZT0iRXNzZW50aWFsIChwcmltYXJ5KSBoeXBlcnRlbnNpb24iLz4KICAgICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgPC9lbnRyeVJlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9hY3Q+CiAgICAgICAgICA8L2VudHJ5PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24gbnVsbEZsYXZvcj0iTkkiPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi43LjEiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuMi43Ii8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjciIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPGNvZGUgY29kZT0iNDc1MTktNCIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJIaXN0b3J5IG9mIFByb2NlZHVyZXMiLz4KICAgICAgICAgIDx0aXRsZT5Qcm9jZWR1cmVzPC90aXRsZT4KICAgICAgICAgIDx0ZXh0Pjx0YWJsZT4KCTx0aGVhZD4KCQk8dHI+CgkJCQkJCQk8dGg+RGF0ZTwvdGg+CgkJCQk8dGg+Q2F0ZWdvcnk8L3RoPgoJCQkJPHRoPk5hbWU8L3RoPgoJCQkJPHRoPkluc3RydWN0aW9uczwvdGg+CgkJCQk8dGg+U3RhdHVzPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJPHRyPjx0ZCBjb2xzcGFuPSI1Ij5OT05FPC90ZD48L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24gbnVsbEZsYXZvcj0iTkkiPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMS4zLjYuMS40LjEuMTkzNzYuMS41LjMuMS4zLjEiIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMS4zLjYuMS40LjEuMTkzNzYuMS41LjMuMS4zLjEiLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjQyMzQ5LTEiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iUkVBU09OIEZPUiBSRUZFUlJBTCIvPgogICAgICAgICAgPHRpdGxlPlJlYXNvbiBmb3IgUmVmZXJyYWw8L3RpdGxlPgogICAgICAgICAgPHRleHQ+PHRhYmxlPgoJPHRoZWFkPgoJCTx0cj4KCQkJCQkJCTx0aD5EYXRlPC90aD4KCQkJCTx0aD5SZWFzb248L3RoPgoJCQkJPHRoPlJlZmVycmVkIFRvPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJPHRyPjx0ZCBjb2xzcGFuPSIzIj5OT05FPC90ZD48L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjE3IiBleHRlbnNpb249IjIwMTUtMDgtMDEiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuMTciLz4KICAgICAgICAgIDxjb2RlIGNvZGU9IjI5NzYyLTIiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iU29jaWFsIGhpc3RvcnkiLz4KICAgICAgICAgIDx0aXRsZT5Tb2NpYWwgSGlzdG9yeTwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPk5hbWU8L3RoPgoJCQkJPHRoPlZhbHVlPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJCTx0ciBJRD0iU29jaWFsSGlzdG9yeVJlZi0xMjYwIj4KCQkJCQkJPHRkPjA3LzI2LzIwMjI8L3RkPgoJCQkJCQk8dGQ+U21va2luZyBTdGF0dXM8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3VycmVudCBzb21lIGRheSBzbW9rZXI8L3RkPgoJCQkJPC90cj4KCQkJCTx0ciBJRD0iU29jaWFsSGlzdG9yeVJlZi0xMjYxIj4KCQkJCQkJPHRkPjA3LzIxLzIwMjI8L3RkPgoJCQkJCQk8dGQ+QmlydGggU2V4PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk1hbGU8L3RkPgoJCQkJPC90cj4KCTwvdGJvZHk+CjwvdGFibGU+CjwvdGV4dD4KICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgPG9ic2VydmF0aW9uIGNsYXNzQ29kZT0iT0JTIiBtb29kQ29kZT0iRVZOIj4KICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40Ljc4Ii8+CiAgICAgICAgICAgICAgPGNvZGUgY29kZT0iQVNTRVJUSU9OIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My41LjQiIGNvZGVTeXN0ZW1OYW1lPSJITDcgQWN0IENvZGVzIiBkaXNwbGF5TmFtZT0iQWN0Q29kZS5BU1NFUlRJT04iLz4KICAgICAgICAgICAgICA8dGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjU29jaWFsSGlzdG9yeVJlZi0xMjYwIi8+PC90ZXh0PgogICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lIHZhbHVlPSIyMDIyMDcyNiIvPgogICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iQ0QiIGNvZGU9IjQyODA0MTAwMDEyNDEwNiIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgY29kZVN5c3RlbU5hbWU9IlNOT01FRCBDVCIgZGlzcGxheU5hbWU9IkN1cnJlbnQgc29tZSBkYXkgc21va2VyIi8+CiAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICA8L2VudHJ5PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICAgIDxjb21wb25lbnQ+CiAgICAgICAgPHNlY3Rpb24+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjQuMSIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi4yLjQiLz4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuNCIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICA8Y29kZSBjb2RlPSI4NzE2LTMiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIiBkaXNwbGF5TmFtZT0iVml0YWwgU2lnbnMiLz4KICAgICAgICAgIDx0aXRsZT5WaXRhbCBTaWduczwvdGl0bGU+CiAgICAgICAgICA8dGV4dD48dGFibGU+Cgk8dGhlYWQ+CgkJPHRyPgoJCQkJCQkJPHRoPkRhdGU8L3RoPgoJCQkJPHRoPlR5cGU8L3RoPgoJCQkJPHRoPlZhbHVlPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQkJCTx0ciBJRD0iVml0YWxTaWduc1JlZi0xMjYyIj4KCQkJCQkJPHRkPjA2LzAyLzIwMjA8L3RkPgoJCQkJCQk8dGQ+CgkJCQkJCQlCU0EKCQkJCQkJCQoJCQkJCQk8L3RkPgoJCQkJCQk8dGQ+Mi4xNzwvdGQ+CgkJCQk8L3RyPgoJPC90Ym9keT4KPC90YWJsZT4KPC90ZXh0PgogICAgICAgICAgPGVudHJ5PgogICAgICAgICAgICA8b3JnYW5pemVyIGNsYXNzQ29kZT0iQ0xVU1RFUiIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4yNiIgZXh0ZW5zaW9uPSIyMDE1LTA4LTAxIi8+CiAgICAgICAgICAgICAgPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMjIuNC4yNiIvPgogICAgICAgICAgICAgIDxpZCByb290PSJjYzBhMzdjZS0yZWU0LTQ4MGMtOTcyMC1mMGM4ODQzMjljZTYiLz4KICAgICAgICAgICAgICA8Y29kZSBjb2RlPSI0NjY4MDAwNSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi45NiIgY29kZVN5c3RlbU5hbWU9IlNOT01FRCBDVCIgZGlzcGxheU5hbWU9IlZpdGFsIFNpZ25zIj4KICAgICAgICAgICAgICAgIDx0cmFuc2xhdGlvbiBjb2RlPSI3NDcyOC03IiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IlZpdGFsIHNpZ25zLCB3ZWlnaHQsIGhlaWdodCwgaGVhZCBjaXJjdW1mZXJlbmNlLCBveGltZXRyeSwgQk1JLCBhbmQgQlNBIHBhbmVsIC0gSEw3LkNDREFyMS4xIi8+CiAgICAgICAgICAgICAgPC9jb2RlPgogICAgICAgICAgICAgIDxzdGF0dXNDb2RlIGNvZGU9ImNvbXBsZXRlZCIvPgogICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgPGxvdyB2YWx1ZT0iMjAyMjEwMTcyMTQxNDkrMDAwMCIvPgogICAgICAgICAgICAgICAgPGhpZ2ggdmFsdWU9IjIwMjIxMDE3MjE0MTQ5KzAwMDAiLz4KICAgICAgICAgICAgICA8L2VmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgPGNvbXBvbmVudD4KICAgICAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMjciIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjI3Ii8+CiAgICAgICAgICAgICAgICAgIDxpZCByb290PSI3MTU0YmQyZC1mZmJhLTQ4MjUtYjc1MC0zNTI3MjNkNmYwYTEiLz4KICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iMzE0MC0xIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IkJTQSIvPgogICAgICAgICAgICAgICAgICA8dGV4dD48cmVmZXJlbmNlIHZhbHVlPSIjVml0YWxTaWduc1JlZi0xMjYyIi8+PC90ZXh0PgogICAgICAgICAgICAgICAgICA8c3RhdHVzQ29kZSBjb2RlPSJjb21wbGV0ZWQiLz4KICAgICAgICAgICAgICAgICAgPGVmZmVjdGl2ZVRpbWU+CiAgICAgICAgICAgICAgICAgICAgPGxvdyB2YWx1ZT0iMjAyMDA2MDIiLz4KICAgICAgICAgICAgICAgICAgPC9lZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9IlBRIiB2YWx1ZT0iMi4xNyIgdW5pdD0ibTIiLz4KICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgPC9jb21wb25lbnQ+CiAgICAgICAgICAgICAgPGNvbXBvbmVudD4KICAgICAgICAgICAgICAgIDxvYnNlcnZhdGlvbiBjbGFzc0NvZGU9Ik9CUyIgbW9vZENvZGU9IkVWTiI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjQuMjciIGV4dGVuc2lvbj0iMjAxNC0wNi0wOSIvPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xMC4yMC4yMi40LjI3Ii8+CiAgICAgICAgICAgICAgICAgIDxpZCByb290PSI4NzFmNmZkYS04MTUzLTQ1ZWQtODk2MS0yNTBjZDMwMWY4ZjYiLz4KICAgICAgICAgICAgICAgICAgPGNvZGUgY29kZT0iOTI3OS0xIiBjb2RlU3lzdGVtPSIyLjE2Ljg0MC4xLjExMzg4My42LjEiIGNvZGVTeXN0ZW1OYW1lPSJMT0lOQyIgZGlzcGxheU5hbWU9IlJlc3BpcmF0b3J5IFJhdGUiLz4KICAgICAgICAgICAgICAgICAgPHRleHQ+PHJlZmVyZW5jZSB2YWx1ZT0iI1ZpdGFsU2lnbnNSZWYtMTI2MyIvPjwvdGV4dD4KICAgICAgICAgICAgICAgICAgPHN0YXR1c0NvZGUgY29kZT0iY29tcGxldGVkIi8+CiAgICAgICAgICAgICAgICAgIDxlZmZlY3RpdmVUaW1lPgogICAgICAgICAgICAgICAgICAgIDxsb3cgdmFsdWU9IjIwMjAwNjAyIi8+CiAgICAgICAgICAgICAgICAgIDwvZWZmZWN0aXZlVGltZT4KICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJQUSIgdmFsdWU9IjEyLjAiIHVuaXQ9Ii9taW4iLz4KICAgICAgICAgICAgICAgIDwvb2JzZXJ2YXRpb24+CiAgICAgICAgICAgICAgPC9jb21wb25lbnQ+CiAgICAgICAgICAgIDwvb3JnYW5pemVyPgogICAgICAgICAgPC9lbnRyeT4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvY29tcG9uZW50PgogICAgICA8Y29tcG9uZW50PgogICAgICAgIDxzZWN0aW9uIG51bGxGbGF2b3I9Ik5JIj4KICAgICAgICAgIDx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjEwLjIwLjIyLjIuNjUiIGV4dGVuc2lvbj0iMjAxNi0xMS0wMSIvPgogICAgICAgICAgPGNvZGUgY29kZT0iMzQxMDktOSIgY29kZVN5c3RlbT0iMi4xNi44NDAuMS4xMTM4ODMuNi4xIiBjb2RlU3lzdGVtTmFtZT0iTE9JTkMiIGRpc3BsYXlOYW1lPSJOb3RlIi8+CiAgICAgICAgICA8dGl0bGU+Tm90ZXMgU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8dGV4dD4gICAgTm8gbm90ZXMgYXJlIGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUsIHBsZWFzZSBjaGVjayBhZ2Fpbi4KPC90ZXh0PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9jb21wb25lbnQ+CiAgICA8L3N0cnVjdHVyZWRCb2R5PgogIDwvY29tcG9uZW50Pgo8L0NsaW5pY2FsRG9jdW1lbnQ+"
}

CarePlan

The CarePlan APIs provide care plans for a patient. A CarePlan with the SNOMED-CT code "395082007" is considered a cancer care regimen.

A CarePlan with a "status" of "completed" are considered Previous Therapies. A CarePlan with a "status" of "active" are considered Concurrent Therapies.

Line of Therapy and Treatment Plan

The Line of Therapy, staging, and treatment intent can sometimes be found by using regex on the text.div field (see response examples)

The Treatment Plan is found in the "description" field.

Read CarePlan instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "CarePlan",
  • "id": "1234567890",
  • "text": {
    },
  • "status": "active",
  • "intent": "order",
  • "category": [],
  • "description": "Benralizumab (Initial) Q28D",
  • "subject": {
    },
  • "period": {
    },
  • "addresses": [
    ],
  • "goal": [
    ],
  • "activity": [
    ]
}

Search for CarePlan instances

Best practices

Active Clinical Data Best Practice

Note that the active care plan might be several months old despite being active.

/CarePlan?patient=123&status=active

Recent Clinical Data Best Practice

This is to find recent CarePlan records. Historical CarePlan records with recent activity may be found by searching for recent associated MedicationAdministration, MedicationRequest, and/or associated CarePlan records.

  • _lastUpdate (last 30 days)

/CarePlan?patient=123&_lastUpdated=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • status
  • _lastUpdated (max 90 day period)

/CarePlan?patient=123&status=draft&_lastUpdated=gt2024-06-03&_lastUpdated=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient who is the subject of the careplan

_count
number

The number of resources to return

_id
string

The ID of the resource

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=period.start)

_lastUpdated
string

Only return resources which were last updated as specified by the given range

category
string

Type of plan. Currently not operational and should not be used

date
string

Time period plan covers. Currently not operational and should not be used

status
string
Enum: "draft" "active" "completed" "cancelled"

Codes identifying the lifecycle stage of a request. "cancelled" is the equivalent of the FHIR R4 status "revoked"

subject
string

Who the care plan is for. The server just assumes that "subject" is the "patient" so just use the "patient" query parameter

_summary
boolean

Returns a subset of data focusing on the core of the resource

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "B123",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

CareTeam

The CareTeam APIs provide a comprehensive list of practitioners involved in patient care. Each CareTeam resource is dedicated to a single practitioner. Additionally, an extension is incorporated to indicate the patient's preferred pharmacy, which is the same in all resources for a given patient. The resources returned are compliant with the US Core profile.

Read CareTeam instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for CareTeam instances

Best practices

Active Clinical Data Best Practice

  • status

/CareTeam?patient=123&status=active

query Parameters
patient
required
string

The public ID of the patient who is the subject of the careteam

status
string
Enum: "active" "inactive"

Correlates with whether the practitioner in the CareTeam resource is active or inactive

Responses

Response samples

Content type
application/fhir+json
{}

Condition

The Condition APIs provide information about patient conditions. Additionally, an extension is incorporated to indicate whether the Condition is the patient's primary diagnosis (pDX)

Staging and Biomarkers

According to the FHIR specification, the staging of a cancer diagnosis is expected to be documented within the Condition.stage array. However, in this API, the information is represented as an "extension" with the URL "http://fhir.iknowmed.com/StructureDefinition/cds-tools-typedstage" Additionally, biomarkers related to this diagnosis are included in the "contained" list of the Condition resource, as is the Disease State, identified by the code "58DEE57115B24630BCBA0925B5C8D447."

Read Condition instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
Example
{}

Search for Condition instances

Best practices

Active Clinical Data Best Practice

/Condition?patient=123&clinical-status=active

Recent Clinical Data Best Practice

  • onset-date (last 30 days)

/Condition?patient=123&onset-date=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • clinical-status
  • onset-date (max 90 day period)

/Condition?patient=123&clinical-status=resolved&onset-date=gt2024-06-03&onset-date=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient who has the condition

category
string
Value: "problem-list-item"

The category of the condition. There's only one respected option so this parameter is not really usable

clinical-status
string
Enum: "active" "inactive" "resolved"

The clinical status of the condition

onset-date
string

Date related onsets (dateTime and Period)

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=recordedDate)

Responses

Response samples

Content type
application/fhir+json
Example
{
  • "$ref": "../fhir_samples/Condition/condition_problem_search.json"
}

Device

The Device APIs provide information about patient implantable devices. The resources returned are compliant with the US Core profile. A custom extension for the date of the device implant may be returned in the base extension list.

Read Device instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Device",
  • "id": "12345",
  • "extension": [],
  • "identifier": [],
  • "udiCarrier": [
    ],
  • "status": "active",
  • "manufactureDate": "2013-02-01T00:00:00-08:00",
  • "expirationDate": "2014-02-01T00:00:00-08:00",
  • "lotNumber": "000000000000XYZ123",
  • "serialNumber": "000025",
  • "type": {
    },
  • "distinctIdentifier": "GS1",
  • "patient": {
    }
}

Search for Device instances

query Parameters
patient
required
string

The public ID of the patient who is the subject of the device

Responses

Response samples

Content type
application/fhir+json
{}

DiagnosticReport

The DiagnosticReport APIs provide information about patient diagnostic reports. The resources returned are compliant with the US Core profile for Labs. Notes can also be returned, but may not include the actual documents. If the report is associated with a Lab's name and address, the "performer" field will be populated with the Lab's information (via the "contained" list)

presentedForm

The presentedForm field may be populated in any DiagnosticReport resource. It includes a reference to a Binary resource of type application/pdf. This resource typically originates from an external interface, such as HL7. It's important to note that the url field contains a full URL, but it may not reliably direct you to the correct endpoint. Instead, you'll need to extract the Binary ID from this URL and construct the actual API call using the designated API base URL. For illustration, the base URL of the actual API used in this example is https://example.com/fhir.

"presentedForm": [
    {
        "contentType": "application/pdf",
        "url": "https://example-2.com/fhir/Binary/FA0987654",
        "title": "sas"
    }
]

To retrieve the Binary resource, make the following API call:

GET https://example.com/fhir/Binary/FA0987654

extensions

An extension with url http://mckesson.com/ontada/fhir/g2/result-reviewed-status and one of these valueString values may be included:

  • PENDING

  • REVIEWED

  • NOT_REQUIRED

An extension with url http://mckesson.com/ontada/fhir/g2/result-interpretation with a valueString may also be included

Read DiagnosticReport instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
Example
{
  • "resourceType": "DiagnosticReport",
  • "id": "123456",
  • "contained": [
    ],
  • "extension": [],
  • "status": "registered",
  • "category": [],
  • "code": {
    },
  • "subject": {
    },
  • "encounter": {
    },
  • "effectiveDateTime": "2024-03-13T08:42:25-07:00",
  • "issued": "2024-03-13T08:42:25.000-07:00",
  • "performer": [
    ],
  • "specimen": [
    ],
  • "result": [
    ],
  • "conclusion": "A field that is not used often",
  • "presentedForm": []
}

Search for DiagnosticReport instances

Search operation to return DiagnosticReport resources. This api has paging enabled, with a default page size of 10.

Best Practices

  • Summary: If the results or notes are not needed, include _summary=true in the query
  • Date Range: Generally the most recent reports and clinical notes are the most clinically relevant. Some patients have a significant number of reports and clinical notes due to years of treatment. An app should retrieve a limited number of reports and clinical notes with each request, searching for previous reports and clinical notes only when an end-user requests additional data

Recent Clinical Data Best Practice

One of:

  • date (last 30 days)
  • _lastUpdated (last 30 days)

/DiagnosticReport?patient=123&date=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • code
  • _lastUpdated (max 90 day period)
  • date (max 90 day period)

/DiagnosticReport?patient=123&status=draft&_lastUpdated=gt2024-06-03&_lastUpdated=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient of the DiagnosticReport

category
string
Enum: "LAB" "LP29708-2" "LP7839-6" "LP29684-5"

Which diagnostic discipline/department created the report. Use LAB for lab reports, or LP29708-2 (Cardiology), LP7839-6 (Pathology), and/or LP29684-5 (Radiology) for notes. Caution must be made here since the category is not always assigned correctly.

code
string

The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result

date
string

The clinically relevant time of the report

releaseToPatient
boolean

Custom search parameter used to filter for reports that are signed and are available to the patient from the patient portal.

status
string
Enum: "registered" "partial" "preliminary" "final" "incomplete" "corrected" "cancelled"

The status of the report. This is currently not working so do not use this parameter

_count
number

The number of resources to return. Max is 50

_sort
string
Value: "date"

Specify which fields to sort by and the direction of the sort

_lastUpdated
string

Only return resources which were last updated as specified by the given range

_revinclude
string
Value: "Provenance:target"

Signals to server to return Provenance resources related to the DiagnosticReport resources.

_summary
boolean

Returns a subset of data focusing on the core of the resource

Responses

Response samples

Content type
application/fhir+json
Example
{
  • "resourceType": "Bundle",
  • "id": "111",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

DocumentReference

The resource(s) returned are compliant with the US Core profile.

Read DocumentReference instance

Read operation to return a DocumentReference resource. The DocumentReference resource identifier has been previously established via a search or a reference from another resource.

This resource is compliant with the US Core profile.

Specification references:

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for DocumentReference instances

Best practices

Recent Clinical Data Best Practice

One of:

  • date (last 30 days)
  • period (last 30 days)

/DocumentReference?patient=123&date=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • date (max 90 day period)
  • period (max 90 day period)
  • status
  • category
  • type

/DocumentReference?patient=123&date=gt2024-06-03&date=lt2024-09-01&status=current&category={LOINC code}&type={LOINC code}

query Parameters
category
string

Categorization of document

date
string

When this document reference was created

patient
string

Who/what is the subject of the document. Identified by patient public ID.

period
string

Time of service that is being documented

status
string
Enum: "current" "superseded" "entered-in-error"

Status of the document.

type
string

Kind of document (LOINC if possible)

releaseToPatient
boolean

Custom search parameter used to filter for documents that are signed and are available to the patient from the patient portal.

_count
number

The number of resources to return

_id
string

Logical identifier of the resource

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=date)

_include
string
Value: "*"

Server will return all referenced resources as part of the Bundle entry list

_revinclude
string
Value: "Provenance:target"

Signals to server to return Provenance resources related to the DocumentReference resources.

Responses

Response samples

Content type
application/fhir+json
{}

DocumentReference $docref

This operation retrieves a single DocumentReference resource based on a set of search criteria. $docref will signal to the DocumentReference API to return the latest ccda document. If dates are specified, the API will return the latest ccda document within the date range.

query Parameters
patient
required
string

The public ID of the patient who is the subject of the DocumentReferences

start
string

The start date of the care to which the document is related

end
string

The end date of the care to which the document is related

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "DocumentReference",
  • "id": "098765",
  • "identifier": [
    ],
  • "status": "current",
  • "type": {
    },
  • "category": [
    ],
  • "subject": {
    },
  • "date": "2025-01-31T12:18:33.553-08:00",
  • "author": [
    ],
  • "custodian": {
    },
  • "content": [
    ]
}

Encounter

You can use the Encounter REST API to read and search for patient Encounter FHIR resources.

There are three Encounter "type" mappings that may be returned by the iKnowMed FHIR API:

  • Appointment: iKnowMed appointment, but includes more information than the Appointment FHIR API
  • Hospital: iKnowMed hospital encounter
  • Hospice: iKnowMed hospice encounter

FHIR R4 Encounter Resource US Core Encounter Profile

Read Encounter instance

Read operation to return an Encounter resource. The Encounter resource identifier has been previously established via a search or a reference from another resource.

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
Example
{
  • "resourceType": "Encounter",
  • "id": "Appointment.DD876EC9418240F18D41039OP23IEY76",
  • "identifier": [
    ],
  • "status": "planned",
  • "class": {},
  • "type": [],
  • "subject": {
    },
  • "participant": [
    ],
  • "period": {
    },
  • "reasonCode": [
    ],
  • "hospitalization": {},
  • "location": [
    ],
  • "serviceProvider": {
    }
}

Search for Encounter instances

Best practices

Recent Clinical Data Best Practice

  • date (last 30 days)

/Encounter?date=gt{today-30}

Targeted Historical Data Best Practice

  • date (max 90 day period)

/Encounter?date=gt2024-06-03&date=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient present at the encounter

_count
number

The number of resources to return

class
string

Classification of patient encounter as outlined in https://hl7.org/fhir/R4/v3/ActEncounterCode/vs.html

date
string

A date within the period the Encounter lasted

identifier
string

Searches for the same identifiers as the Encounter FHIR resource id. This only allows for one identifier to be passed.

status
string
Enum: "planned" "arrived" "finished" "cancelled" "entered-in-error"
_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=period.start)

Responses

Response samples

Content type
application/fhir+json
Example
{
  • "resourceType": "Bundle",
  • "id": "B123",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

Goal

Read Goal instance

Read operation to return an instance of a Goal resource.

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Goal",
  • "id": "123",
  • "lifecycleStatus": "planned",
  • "description": {
    },
  • "subject": {
    },
  • "target": [
    ]
}

Search for Goal instances

Best practices

Recent Clinical Data Best Practice

  • start-date (last 30 days)

/Goal?patient=123&start-date=gt{today-30}

Targeted Historical Data Best Practice

  • start-date (max 90 day period)

/Goal?patient=123&start-date=gt2024-06-03&start-date=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient who is the subject of this goal

_count
number

The number of resources to return

start-date
string

When goal pursuit begins

Responses

Response samples

Content type
application/fhir+json
{}

Immunization

The Immunization APIs provide information about patient immunizations. The resource(s) returned are compliant with the US Core profile.

There are two types of examples shown:

  • External: immunizations administered outside of the IKnowMed practice as reported by a third party
  • Internal: immunizations administered and/or reported within the IKnowMed practice. This has more details provided about the dosing and ingredients

Read Immunization instance

Read Immunization instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
Example
{}

Search for Immunization instances

Search operation to return Immunization resources.

query Parameters
patient
required
string

The public ID of the patient of the vaccination record

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=occurrenceDateTime)

Responses

Response samples

Content type
application/fhir+json
Example
{}

Location

The Location APIs provide information about locations within an organization.

Read Location instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Location",
  • "id": "11111",
  • "status": "active",
  • "name": "A Great Location",
  • "description": "A Great Location",
  • "type": [
    ],
  • "telecom": [
    ],
  • "address": {
    },
  • "physicalType": {
    },
  • "managingOrganization": {
    }
}

Search for Location instances

Search for Location instances

query Parameters
address
string

The full or partial address of the location

identifier
string

Public id of the Location. Identical to using the _id FHIR search parameter

name
string

A portion of the location's name

organization
string

The practice public id of the managing organization

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=name)

_count
number

The number of resources to return

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "BL899922",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

Medication

The Medication APIs provide information about patient medications. The resources returned are compliant with the US Core profile.

Each Medication may include two codes:

  • First Databank Enhanced Therapeutic Classification System
  • RXNorm

If the medication is part of an investigational study, an extension with url http://fhir.iknowmed.com/StructureDefinition/study and valueBoolean true will be included.

Read Medication instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for Medication instances

Search operation to return Medication resources

query Parameters
name
required
string

The name of the medication

Responses

Response samples

Content type
application/fhir+json
{}

MedicationAdministration

The MedicationAdministration APIs provide information about administered patient medications.

Read MedicationAdministration instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "MedicationAdministration",
  • "id": "12345678",
  • "status": "completed",
  • "medicationCodeableConcept": {},
  • "subject": {
    },
  • "effectivePeriod": {
    },
  • "request": {
    },
  • "dosage": {
    }
}

Search for MedicationAdministration instances

Best practices

Recent Clinical Data Best Practice

One of:

  • effective-time (last 30 days)
  • _lastUpdated (last 30 days)

/MedicationAdministration?patient=123&effective-time=gt{today-30}

Targeted Historical Data Best Practice

One of:

  • effective-time (max 90 day period)
  • _lastUpdated (max 90 day period)

/MedicationAdministration?patient=123&effective-time=gt2024-06-03&effective-time=lt2024-09-01

query Parameters
patient
required
string

The identity of a patient to list administrations for

code
string

The GCN sequence number(s) of the medication(s) being administered

effective-time
string

Date administration happened (or did not happen)

_lastUpdated
string

Only return resources which were last updated as specified by the given range

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "111",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "entry": [
    ]
}

MedicationRequest

The MedicationRequest APIs provide information about orders or requests of patient medications. The resources returned are compliant with the US Core profile

The "medicationCodeableConcept" can hold codes (or just a text field with no code) from

  • RxNorm, system http://www.nlm.nih.gov/research/umls/rxnorm

  • First Databank Enhanced Therapeutic Classification System (FDETCS), system urn:oid:2.16.840.1.113883.3.567.13.1

The "dosage" field may contain the following:

  • extension - custom field describing dose form

  • timing - the frequency of the medication taken found in the "text" field

  • route - contains a code from FDETCS

  • doseAndRate

There may be two extensions that outline medication cycle information (see examples)

Read MedicationRequest instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "MedicationRequest",
  • "id": "MR1111",
  • "text": {
    },
  • "extension": [],
  • "status": "active",
  • "intent": "order",
  • "reportedBoolean": false,
  • "medicationCodeableConcept": {
    },
  • "subject": {
    },
  • "encounter": {
    },
  • "authoredOn": "2013-08-01T00:00:00-07:00",
  • "requester": {
    },
  • "dosageInstruction": [
    ],
  • "dispenseRequest": {
    }
}

Search for MedicationRequest instances

Best practices

Active Clinical Data Best Practice

/MedicationRequest?status=active

Recent Clinical Data Best Practice

This is to find recent MedicationRequest records. Historical MedicationRequest records with recent activity are found by searching for recent MedicationAdministration records and the associated MedicationRequest. If a client needs to know the CarePlan associated with a MedicationRequest, the client must search for CarePlan records that are authored on the same date as the MedicationRequest.

One of:

  • authoredon (last 30 days)

  • _lastUpdated (last 30 days)

/MedicationRequest?authoredon=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • status
  • _lastUpdated (max 90 day period)
  • authoredon (max 90 day period)

/MedicationRequest?status=draft&authoredon=gt2024-06-03&authoredon=lt2024-09-01

query Parameters
patient
required
string

Returns prescriptions for a specific patient

authoredon
string

Return prescriptions written on this date

encounter
string

Return prescriptions with this encounter identifier

intent
string
Value: "order"

Returns prescriptions based on intent. All MedicationRequest resources have intent of "order" so this parameter is not useful

status
string
Enum: "active" "on-hold" "cancelled" "completed" "draft"

Status of the prescription

_lastUpdated
string

Only return resources which were last updated as specified by the given range

_revinclude
string
Value: "Provenance:target"

Signals to server to return Provenance resources related to the MedicationRequest resources.

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "BB77766",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

MedicationStatement

The MedicationStatement APIs provide records of medications that are being consumed by a patient.

The "medicationCodeableConcept" can hold codes (or just a text field with no code) from

  • RxNorm, system http://www.nlm.nih.gov/research/umls/rxnorm

  • First Databank Enhanced Therapeutic Classification System (FDETCS), system urn:oid:2.16.840.1.113883.3.567.13.1

The "dosage" field may contain the following:

  • extension - custom field describing dose form

  • timing - the frequency of the medication taken found in the "text" field

  • route - contains a code from FDETCS

  • doseAndRate

FHIR R4 MedicationStatement Resource

Read MedicationStatement instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "MedicationStatement",
  • "id": "MS121111",
  • "text": {
    },
  • "status": "active",
  • "medicationCodeableConcept": {},
  • "subject": {
    },
  • "effectivePeriod": {
    },
  • "dateAsserted": "2014-01-24T09:12:16-08:00",
  • "informationSource": {
    },
  • "dosage": [
    ]
}

Search for MedicationStatement instances

Best practices

Recent Clinical Data Best Practice

One of:

  • effective (last 30 days)
  • _lastUpdated (last 30 days)

/MedicationStatement?patient=123&effective=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • effective (max 90 day period)
  • _lastUpdated (max 90 day period)

/MedicationStatement?patient=123&effective=gt2024-06-03&effective=lt2024-09-01

query Parameters
patient
required
string

The public ID of the patient who is the subject of the MedicationStatement

effective
string

Date when patient was taking (or not taking) the medication

_lastUpdated
string

Only return resources which were last updated as specified by the given range

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "BB188889",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

Observation

The Observation APIs provide information about patient lab results, vital signs, etc.

Observations types by "category" (caution must be made here since the category is not always assigned correctly):

A custom extension showing whether the Observation has been reviewed and is ready to be/has been released to the patient may be returned in the base extension list.

Read Observation instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
Example
{}

Search for Observation instances

Best practices

Recent Clinical Data Best Practice

One of:

  • date (last 30 days)
  • _lastUpdated (last 30 days)

/Observation?patient=123&date=gt{today-30}

Targeted Historical Data Best Practice

One or more of:

  • date (max 90 day period)
  • _lastUpdated (max 90 day period)
  • category
  • code

/Observation?patient=123&date=gt2024-06-03&date=lt2024-09-01&category=social-history&code=72166-2

query Parameters
patient
required
string

The public ID of the patient who is the subject of the Observation

category
string
Enum: "imaging" "laboratory" "procedure" "social-history" "vital-signs"

The classification of the type of observation

code
string

The code of the observation type

date
string

Obtained date/time. If the obtained element is a period, a date that falls in the period

flowSheetCategoryId
string

Custom query parameter to filter by the G2 flowsheet category ID

status
string
Value: "final"

The status of the observation. All Observation resources have status of "final" so this parameter is not useful

_count
number

The number of resources to return

_lastUpdated
string

Only return resources which were last updated as specified by the given range

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=effective)

Responses

Response samples

Content type
application/fhir+json
Example
{}

Organization

Each iKnowMed practice is represented as an Organization in the FHIR API.

Read Organization instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Organization",
  • "id": "CBC3D65483D64E96E04400212861B296",
  • "identifier": [],
  • "active": true,
  • "type": [],
  • "name": "Onc Hem of MSH",
  • "telecom": [
    ],
  • "address": [
    ]
}

Search for Organization instances

Search operation to return Organization resources.

query Parameters
identifier
string

The iKnowMed public id of the practice. This is also the FHIR ID for the corresponding FHIR Organization representing that practice.

patient
string

Public ID (FHIR ID) of an iKnowMed patient. This will return a single Organization, representing the practice where the patient receives care.

_count
number

The number of resources to return

Responses

Response samples

Content type
application/fhir+json
{}

Read Patient instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for Patient instances

Best practices

A client should remember the resulting Patient FHIR ID(s) for subsequent requests.

Single Patient

When searching for a single patient, a client should provide the medical record number (MRN) and the practicePublicId (either as a query parameter or http header). For the MRN, you need to provide the system and the value:

/Patient?identifier=urn:oid:2.16.840.1.113883.3.623.4%7C{patient-mrn}&practicePublicId={practicePublicId}

Notice that the system and mrn are seperated by %7C. This is the url encoded value for | which is the delimiter specified by FHIR for the system and value in a query parameter.

Multiple Patients

When searching for multiple patients, a client should use a combination of parameters to obtain a Bundle of matching patient records.

Two or more of:

  • family
  • birthdate
  • gender

The practicePublicId http header or parameter is also required.

/Patient?family={family}&birthdate={birthdate}&practicePublicId={practicePublicId}

query Parameters
_count
number

The number of resources to return

_id
string

The ID of the resource

_lastUpdated
string

Only return resources which were last updated as specified by the given range

birthdate
string

The patient's date of birth

family
string

Family name (last name) for the patient (exact match, case insensitive)

gender
string

Gender of the patient

given
string

Given name (first name) for the patient (exact match, case insensitive).

identifier
string
Value: "urn:oid:2.16.840.1.113883.3.623.4%7C[patient-mrn]"

A patient identifier. Only the MRN is allowed.

name
string

Partial search across patient first/middle/last names as well as iKM MRN (case insensitive)

practicePublicId
string
_include
string
Enum: "Patient:generalPractitioner:Practitioner" "*"

Includes the full Practitioner if the patient has an assigned generalPractitioner. Included resources will appear in the returned FHIR bundle.

Responses

Response samples

Content type
application/fhir+json
{}

Practitioner

The Practitioner APIs provide information about practitioners within Iknowmed practices. This resource is compliant with the US Core profile

Read Practitioner instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Practitioner",
  • "id": "1234567890",
  • "text": {
    },
  • "identifier": [],
  • "name": [
    ],
  • "telecom": [
    ],
  • "qualification": [
    ]
}

Procedure

Procedure allows searching for a patient's historical procedures/treatments.

Read Procedure instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Procedure",
  • "id": "PatTreatmentHistory.1501",
  • "text": {
    },
  • "status": "completed",
  • "code": {
    },
  • "subject": {
    }
}

Search for Procedure instances

Best practices

Recent Clinical Data Best Practice

One of:

  • date (last 30 days)
  • _lastUpdated (last 30 days)

/MedicationAdministration?patient=123&date=gt{today-30}

Targeted Historical Data Best Practice

One of:

  • date (max 90 day period)
  • _lastUpdated (max 90 day period)

/MedicationAdministration?patient=123&date=gt2024-06-03&date=lt2024-09-01

query Parameters
patient
required
string

Patient who is the subject of the procedure, identified by the FHIR ID (iKnowMed public ID) of the patient resource

date
string

When the procedure was performed.

_count
number

The number of resources to return

Responses

Response samples

Content type
application/fhir+json
{
  • "resourceType": "Bundle",
  • "id": "b981713a-35ad-46ae-8cef-8faa8bf3f86e",
  • "meta": {
    },
  • "type": "searchset",
  • "total": 1,
  • "link": [],
  • "entry": [
    ]
}

Provenance

See Server Details > Provenance for more information. This resource is compliant with the US Core profile.

Read Provenance instance

path Parameters
id
required
string
Example: 123

The resource ID

Responses

Response samples

Content type
application/fhir+json
{}

Search for Provenance instances

Search operation to return Provenance resources

query Parameters
target
required
string

Target Reference(s) (CareTeam/1235, Patient/4321, etc.)

_sort
string

Specify which fields to sort by and the direction of the sort (ex: _sort=recorded)

_count
number

The number of resources to return

Responses

Response samples

Content type
application/fhir+json
{}