WHO SMART Guidelines - HIV
0.4.3 - ci-build

WHO SMART Guidelines - HIV - Local Development build (v0.4.3) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: HIV.IND.45 Logic - TTL Representation

Draft as of 2025-02-07

Raw ttl | Download

@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# - resource -------------------------------------------------------------------

 a fhir:Library ;
  fhir:nodeRole fhir:treeRoot ;
  fhir:id [ fhir:v "HIVIND45Logic"] ; # 
  fhir:meta [
    ( fhir:profile [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module>     ] )
  ] ; # 
  fhir:text [
fhir:status [ fhir:v "extensions" ] ;
fhir:div "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Title: </b></th>\n            <td style=\"padding-left: 4px;\">HIV.IND.45 Logic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">HIVIND45Logic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">0.4.3</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Url: </b></th>\n            <td style=\"padding-left: 4px;\"><a href=\"Library-HIVIND45Logic.html\">HIV.IND.45 Logic</a></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Status: </b></th>\n            <td style=\"padding-left: 4px;\">draft</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Experimental: </b></th>\n            <td style=\"padding-left: 4px;\">true</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Type: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                    \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>system: </b> <span><a href=\"http://terminology.hl7.org/6.0.2/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2025-02-07 14:15:45+0000</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">WHO</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Description: </b></th>\n            <td style=\"padding-left: 4px;\"><div><p>Number and % of people living with HIV on ART who completed a course of TB preventive treatment among those who initiated TPT</p>\n</div></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        \n        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">/**\n * Library: HIV.IND.45 Logic\n * Ref No: TBH.2\n * Short Name: TPT completion\n *\n * Definition: Number and % of people living with HIV on ART who completed a course of TB preventive treatment among those who initiated TPT\n *\n * Numerator: Number of ART patients who completed a course of TPT during the reporting period\n * Numerator Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;TB preventive treatment (TPT) start date&quot; in the previous period AND &quot;TB preventive treatment (TPT) status&quot;='Completed'\n * Numerator Exclusions: \n *\n * Denominator: Number of ART patients who initiated any course of TPT during the previous reporting period\n * Denominator Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;TB preventive treatment (TPT) start date&quot; in the prior reporting period\n * Denominator Exclusions: \n *\n * Disaggregations:\n * • Gender (female, male, other*) \n *  • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–29, 30–34, 35–39, 40–44, 45–49, 50+ years)** \n *  • Type of TPT regimen \n *  • ART initiation (&lt;12 months on ART, 12+ months on ART) \n *  • Cities and other administrative regions of epidemiologic importance\n *\n * Disaggregation Elements: Gender | Age | TPT regimen type | ART start date (&lt;12 months on ART, ≥12 months on ART)\n *\n * Numerator and Denominator Elements:\n * HIV status \n *  On ART \n *  TB preventive treatment (TPT) start date \n *  TB preventive treatment (TPT) status\n *\n * Reference: Consolidated guidelines on person-centred HIV strategic information: strengthening routine data for impact. Geneva: World Health Organization; 2022\n * \n * Data Concepts:\n * HIV.A.DE17: Age | Calculated age (number of years) of the client based on date of birth\n * HIV.A.DE18: Gender* | Gender of the client*\n * HIV.A.DE19: Female | Client identifies as female\n * HIV.A.DE20: Male | Client identifies as male\n * HIV.A.DE21: Transgender male | Client identifies as transgender male\n * HIV.A.DE22: Transgender female | Client identifies as transgender female\n * HIV.A.DE23: Other | Additional category\n * HIV.B.DE72: ART start date | The date on which the client started or restarted antiretroviral therapy (ART)\n * HIV.B.DE115: HIV status | HIV status reported after applying the national HIV testing algorithm. No single HIV test can provide an HIV-positive diagnosis.\n * HIV.B.DE116: HIV-positive | Client is HIV-positive\n * HIV.B.DE117: HIV-negative | Client is HIV-negative\n * HIV.B.DE118: Unknown | Client has unknown HIV status\n * HIV.D.DE38: On ART | Client is currently taking ART\n * HIV.D.DE39: ART start date | The date on which the client started or restarted ART\n * HIV.D.DE954: TB preventive treatment (TPT) start date | The date on which the client began taking TPT\n * HIV.D.DE1028: TPT regimen type | Type of TPT regimen the client is currently on\n * HIV.D.DE1029: 3HP | The client's current TPT regimen is 3HP\n * HIV.D.DE1030: 1HP | The client's current TPT regimen is 1HP\n * HIV.D.DE1031: 6H | The client's current TPT regimen is 6H\n * HIV.D.DE1032: Six months of levofloxacin daily | The client's current TPT regimen is six months of levofloxacin daily\n * HIV.D.DE1033: Other TB preventive treatment (TPT) regimen | The client's current TPT regimen is another regimen than those listed above\n * HIV.D.DE1034: TB preventive treatment (TPT) status | Indicates the current status of TB preventive treatment (TPT)\n * HIV.D.DE1035: Not started | The client did not start the TB preventive treatment (TPT)\n * HIV.D.DE1036: On TPT | The client started the TB preventive treatment (TPT) and is currently taking the medication, without treatment interruptions\n * HIV.D.DE1037: On TPT with interruptions | The client started the TB preventive treatment (TPT) and is currently taking the medication, with treatment interruptions\n * HIV.D.DE1038: On hold | The health care worker has temporarily stopped the TB preventive treatment (TPT), but TPT is expected to continue again later. May also be called &quot;suspended&quot;.\n * HIV.D.DE1039: Completed | TB preventive treatment (TPT) was completed\n * HIV.H.DE47: On ART | Client is currently taking ART \n * HIV.SRV.DE6: ART start date | The date on which the client started or restarted antiretroviral therapy (ART)\n *\n * Additional Context\n * - what it measures: This indicator measures the effectiveness of scaled-up TPT programmes by assessing the proportion of patients who completed the recommended course of TPT.\n * - rationale: • Many countries have made progress in initiating eligible people living with HIV on TPT. However, rates of TPT completion remain poor or unknown. | • Assessment of TPT completion is a critical element of the TB/HIV cascade of services.\n * - method: For the numerator and denominator: Programme records (for example, ART registers) |  | Defining &quot;previous reporting period&quot;: For example, for annual reporting of January to December 2021, the previous reporting period is January to December 2020 (except for programmes with 1HP-exclusive national guidelines and implementation, in which case they may use January to December 2021). For quarterly or semi-annual reporting to the national level, the previous reporting period will depend on the TPT regimen and duration defined by national guidelines. |  | Note: For programmes using continuous isoniazid preventive therapy (IPT), TPT completion is defined as six months of treatment. | \n * \n * Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm\n */\n\nlibrary HIVIND45Logic\n\n// Included Libraries\nusing FHIR version '4.0.1'\n\ninclude HIVCommon version '0.0.1' called HIC\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WCom\n\ninclude HIVElements called HE\ninclude HIVIndicatorElements called HIE\n\nparameter &quot;Measurement Period&quot; Interval&lt;Date&gt; default Interval[@2023-01-01, @2023-01-30]\n\ncontext Patient\n\n/**\n * Indicator Definition\n */ \n\n/* Populations */\n\n/*\n *Initial Population\n */\n\ndefine &quot;Initial Population&quot;:\n  true\n\n/**\n * Numerator\n * \n * Definition: Number of ART patients who completed a course of TPT during the reporting period\n * Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;TB preventive treatment (TPT) start date&quot; in the previous period AND &quot;TB preventive treatment (TPT) status&quot;='Completed'\n */\n\ndefine &quot;Numerator&quot;:\n HIE.&quot;Has HIV-positive Status&quot; and HIE.&quot;On ART&quot; and exists(HIE.&quot;TB preventive treatment TPT completed in measurement period&quot;)\n\n/**\n * Denominator\n *\n * Definition: Number of ART patients who initiated any course of TPT during the previous reporting period\n * Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;TB preventive treatment (TPT) start date&quot; in the prior reporting period\n */\n\ndefine &quot;Denominator&quot;:\n HIE.&quot;Has HIV-positive Status&quot; and HIE.&quot;On ART&quot; and exists(HIE.&quot;TB preventive treatment TPT start date in previous measurement period&quot;)\n    \n/* end Populations */\n\n/*\n * Disaggregation\n *\n *  • Gender (female, male, other*) \n *  • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–29, 30–34, 35–39, 40–44, 45–49, 50+ years)** \n *  • Type of TPT regimen \n *  • ART initiation (&lt;12 months on ART, 12+ months on ART) \n *  • Cities and other administrative regions of epidemiologic importance\n *\n */\n\ndefine &quot;Administrative Gender Stratifier&quot;:\n	HIE.&quot;By Administrative Gender Stratifier&quot;\n\ndefine &quot;Age Stratifier&quot;:\n  HIE.&quot;By Age Stratifier&quot;\n\ndefine &quot;TPT Regimen Type Stratifier&quot;:\n  HIE.&quot;TPT regimen type&quot;\n\ndefine &quot;ART Initiation Stratifier&quot;:\n  HIE.&quot;By ART initiation&quot;\n\ndefine &quot;Geographic Region Stratifier&quot;:\n  HIE.&quot;By Geographic Region Stratifier&quot;\n\n/*\n * Combined stratifiers\n */\ndefine &quot;Stratification&quot;:\n  HIE.&quot;By Administrative Gender Stratifier&quot;.code \n    + ':' + HIE.&quot;By Age Stratifier&quot;\n    + ':' + Combine(HIE.&quot;TPT regimen type&quot;.coding.code)\n    + ':' + HIE.&quot;By ART initiation&quot;\n	  + ':' + HIE.&quot;By Geographic Region Stratifier&quot;\n</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  ] ; # 
  fhir:extension ( [
fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability"^^xsd:anyURI ] ;
fhir:value [ fhir:v "computable" ]
  ] ) ; # 
  fhir:url [ fhir:v "http://smart.who.int/hiv/Library/HIVIND45Logic"^^xsd:anyURI] ; # 
  fhir:version [ fhir:v "0.4.3"] ; # 
  fhir:name [ fhir:v "HIVIND45Logic"] ; # 
  fhir:title [ fhir:v "HIV.IND.45 Logic"] ; # 
  fhir:status [ fhir:v "draft"] ; # 
  fhir:experimental [ fhir:v "true"^^xsd:boolean] ; # 
  fhir:type [
    ( fhir:coding [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/library-type"^^xsd:anyURI ] ;
fhir:code [ fhir:v "logic-library" ]     ] )
  ] ; # 
  fhir:date [ fhir:v "2025-02-07T14:15:45+00:00"^^xsd:dateTime] ; # 
  fhir:publisher [ fhir:v "WHO"] ; # 
  fhir:contact ( [
fhir:name [ fhir:v "WHO" ] ;
    ( fhir:telecom [
fhir:system [ fhir:v "url" ] ;
fhir:value [ fhir:v "http://who.int" ]     ] )
  ] ) ; # 
  fhir:description [ fhir:v "Number and % of people living with HIV on ART who completed a course of TB preventive treatment among those who initiated TPT"] ; # 
  fhir:content ( [
fhir:contentType [ fhir:v "text/cql" ] ;
fhir:data [ fhir:v "LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuNDUgTG9naWMKICogUmVmIE5vOiBUQkguMgogKiBTaG9ydCBOYW1lOiBUUFQgY29tcGxldGlvbgogKgogKiBEZWZpbml0aW9uOiBOdW1iZXIgYW5kICUgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBvbiBBUlQgd2hvIGNvbXBsZXRlZCBhIGNvdXJzZSBvZiBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCBhbW9uZyB0aG9zZSB3aG8gaW5pdGlhdGVkIFRQVAogKgogKiBOdW1lcmF0b3I6IE51bWJlciBvZiBBUlQgcGF0aWVudHMgd2hvIGNvbXBsZXRlZCBhIGNvdXJzZSBvZiBUUFQgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIE51bWVyYXRvciBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgIk9uIEFSVCI9VHJ1ZSBBTkQgIlRCIHByZXZlbnRpdmUgdHJlYXRtZW50IChUUFQpIHN0YXJ0IGRhdGUiIGluIHRoZSBwcmV2aW91cyBwZXJpb2QgQU5EICJUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSBzdGF0dXMiPSdDb21wbGV0ZWQnCiAqIE51bWVyYXRvciBFeGNsdXNpb25zOiAKICoKICogRGVub21pbmF0b3I6IE51bWJlciBvZiBBUlQgcGF0aWVudHMgd2hvIGluaXRpYXRlZCBhbnkgY291cnNlIG9mIFRQVCBkdXJpbmcgdGhlIHByZXZpb3VzIHJlcG9ydGluZyBwZXJpb2QKICogRGVub21pbmF0b3IgQ2FsY3VsYXRpb246IENPVU5UIG9mIGNsaWVudHMgd2l0aCAiSElWIHN0YXR1cyI9J0hJVi1wb3NpdGl2ZScgQU5EICJPbiBBUlQiPVRydWUgQU5EICJUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSBzdGFydCBkYXRlIiBpbiB0aGUgcHJpb3IgcmVwb3J0aW5nIHBlcmlvZAogKiBEZW5vbWluYXRvciBFeGNsdXNpb25zOiAKICoKICogRGlzYWdncmVnYXRpb25zOgogKiDigKLCoEdlbmRlciAoZmVtYWxlLCBtYWxlLCBvdGhlciopIAogKiAg4oCiIEFnZSAoMOKAkzQsIDXigJM5LCAxMOKAkzE0LCAxNeKAkzE5LCAyMOKAkzI0LCAyNeKAkzI5LCAzMOKAkzM0LCAzNeKAkzM5LCA0MOKAkzQ0LCA0NeKAkzQ5LCA1MCsgeWVhcnMpKiogCiAqICDigKLCoFR5cGUgb2YgVFBUIHJlZ2ltZW4gCiAqICDigKIgQVJUIGluaXRpYXRpb24gKDwxMiBtb250aHMgb24gQVJULCAxMisgbW9udGhzIG9uIEFSVCkgCiAqICDigKIgQ2l0aWVzIGFuZCBvdGhlciBhZG1pbmlzdHJhdGl2ZSByZWdpb25zIG9mIGVwaWRlbWlvbG9naWMgaW1wb3J0YW5jZQogKgogKiBEaXNhZ2dyZWdhdGlvbiBFbGVtZW50czogR2VuZGVyIHwgQWdlIHwgVFBUIHJlZ2ltZW4gdHlwZSB8IEFSVCBzdGFydCBkYXRlICg8MTIgbW9udGhzIG9uIEFSVCwg4omlMTIgbW9udGhzIG9uIEFSVCkKICoKICogTnVtZXJhdG9yIGFuZCBEZW5vbWluYXRvciBFbGVtZW50czoKICogSElWIHN0YXR1cyAKICogIE9uIEFSVCAKICogIFRCIHByZXZlbnRpdmUgdHJlYXRtZW50IChUUFQpIHN0YXJ0IGRhdGUgCiAqICBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSBzdGF0dXMKICoKICogUmVmZXJlbmNlOiBDb25zb2xpZGF0ZWQgZ3VpZGVsaW5lcyBvbiBwZXJzb24tY2VudHJlZCBISVYgc3RyYXRlZ2ljIGluZm9ybWF0aW9uOiBzdHJlbmd0aGVuaW5nIHJvdXRpbmUgZGF0YSBmb3IgaW1wYWN0LiBHZW5ldmE6IFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb247IDIwMjIKICogCiAqIERhdGEgQ29uY2VwdHM6CiAqIEhJVi5BLkRFMTc6IEFnZSB8IENhbGN1bGF0ZWQgYWdlIChudW1iZXIgb2YgeWVhcnMpIG9mIHRoZSBjbGllbnQgYmFzZWQgb24gZGF0ZSBvZiBiaXJ0aAogKiBISVYuQS5ERTE4OiBHZW5kZXIqIHwgR2VuZGVyIG9mIHRoZSBjbGllbnQqCiAqIEhJVi5BLkRFMTk6IEZlbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIGZlbWFsZQogKiBISVYuQS5ERTIwOiBNYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgbWFsZQogKiBISVYuQS5ERTIxOiBUcmFuc2dlbmRlciBtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnNnZW5kZXIgbWFsZQogKiBISVYuQS5ERTIyOiBUcmFuc2dlbmRlciBmZW1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyB0cmFuc2dlbmRlciBmZW1hbGUKICogSElWLkEuREUyMzogT3RoZXIgfCBBZGRpdGlvbmFsIGNhdGVnb3J5CiAqIEhJVi5CLkRFNzI6IEFSVCBzdGFydCBkYXRlIHwgVGhlIGRhdGUgb24gd2hpY2ggdGhlIGNsaWVudCBzdGFydGVkIG9yIHJlc3RhcnRlZCBhbnRpcmV0cm92aXJhbCB0aGVyYXB5IChBUlQpCiAqIEhJVi5CLkRFMTE1OiBISVYgc3RhdHVzIHwgSElWIHN0YXR1cyByZXBvcnRlZCBhZnRlciBhcHBseWluZyB0aGUgbmF0aW9uYWwgSElWIHRlc3RpbmcgYWxnb3JpdGhtLiBObyBzaW5nbGUgSElWIHRlc3QgY2FuIHByb3ZpZGUgYW4gSElWLXBvc2l0aXZlIGRpYWdub3Npcy4KICogSElWLkIuREUxMTY6IEhJVi1wb3NpdGl2ZSB8IENsaWVudCBpcyBISVYtcG9zaXRpdmUKICogSElWLkIuREUxMTc6IEhJVi1uZWdhdGl2ZSB8IENsaWVudCBpcyBISVYtbmVnYXRpdmUKICogSElWLkIuREUxMTg6IFVua25vd24gfCBDbGllbnQgaGFzIHVua25vd24gSElWIHN0YXR1cwogKiBISVYuRC5ERTM4OiBPbiBBUlQgfCBDbGllbnQgaXMgY3VycmVudGx5IHRha2luZyBBUlQKICogSElWLkQuREUzOTogQVJUIHN0YXJ0IGRhdGUgfCBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgY2xpZW50IHN0YXJ0ZWQgb3IgcmVzdGFydGVkIEFSVAogKiBISVYuRC5ERTk1NDogVEIgcHJldmVudGl2ZSB0cmVhdG1lbnQgKFRQVCkgc3RhcnQgZGF0ZSB8IFRoZSBkYXRlIG9uIHdoaWNoIHRoZSBjbGllbnQgYmVnYW4gdGFraW5nIFRQVAogKiBISVYuRC5ERTEwMjg6IFRQVCByZWdpbWVuIHR5cGUgfCBUeXBlIG9mIFRQVCByZWdpbWVuIHRoZSBjbGllbnQgaXMgY3VycmVudGx5IG9uCiAqIEhJVi5ELkRFMTAyOTogM0hQIHwgVGhlIGNsaWVudCdzIGN1cnJlbnQgVFBUIHJlZ2ltZW4gaXMgM0hQCiAqIEhJVi5ELkRFMTAzMDogMUhQIHwgVGhlIGNsaWVudCdzIGN1cnJlbnQgVFBUIHJlZ2ltZW4gaXMgMUhQCiAqIEhJVi5ELkRFMTAzMTogNkggfCBUaGUgY2xpZW50J3MgY3VycmVudCBUUFQgcmVnaW1lbiBpcyA2SAogKiBISVYuRC5ERTEwMzI6IFNpeCBtb250aHMgb2YgbGV2b2Zsb3hhY2luIGRhaWx5IHwgVGhlIGNsaWVudCdzIGN1cnJlbnQgVFBUIHJlZ2ltZW4gaXMgc2l4IG1vbnRocyBvZiBsZXZvZmxveGFjaW4gZGFpbHkKICogSElWLkQuREUxMDMzOiBPdGhlciBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSByZWdpbWVuIHwgVGhlIGNsaWVudCdzIGN1cnJlbnQgVFBUIHJlZ2ltZW4gaXMgYW5vdGhlciByZWdpbWVuIHRoYW4gdGhvc2UgbGlzdGVkIGFib3ZlCiAqIEhJVi5ELkRFMTAzNDogVEIgcHJldmVudGl2ZSB0cmVhdG1lbnQgKFRQVCkgc3RhdHVzIHwgSW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKQogKiBISVYuRC5ERTEwMzU6IE5vdCBzdGFydGVkIHwgVGhlIGNsaWVudCBkaWQgbm90IHN0YXJ0IHRoZSBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKQogKiBISVYuRC5ERTEwMzY6IE9uIFRQVCB8IFRoZSBjbGllbnQgc3RhcnRlZCB0aGUgVEIgcHJldmVudGl2ZSB0cmVhdG1lbnQgKFRQVCkgYW5kIGlzIGN1cnJlbnRseSB0YWtpbmcgdGhlIG1lZGljYXRpb24sIHdpdGhvdXQgdHJlYXRtZW50IGludGVycnVwdGlvbnMKICogSElWLkQuREUxMDM3OiBPbiBUUFQgd2l0aCBpbnRlcnJ1cHRpb25zIHwgVGhlIGNsaWVudCBzdGFydGVkIHRoZSBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSBhbmQgaXMgY3VycmVudGx5IHRha2luZyB0aGUgbWVkaWNhdGlvbiwgd2l0aCB0cmVhdG1lbnQgaW50ZXJydXB0aW9ucwogKiBISVYuRC5ERTEwMzg6IE9uIGhvbGQgfCBUaGUgaGVhbHRoIGNhcmUgd29ya2VyIGhhcyB0ZW1wb3JhcmlseSBzdG9wcGVkIHRoZSBUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCAoVFBUKSwgYnV0IFRQVCBpcyBleHBlY3RlZCB0byBjb250aW51ZSBhZ2FpbiBsYXRlci4gTWF5IGFsc28gYmUgY2FsbGVkICJzdXNwZW5kZWQiLgogKiBISVYuRC5ERTEwMzk6IENvbXBsZXRlZCB8IFRCIHByZXZlbnRpdmUgdHJlYXRtZW50IChUUFQpIHdhcyBjb21wbGV0ZWQKICogSElWLkguREU0NzogT24gQVJUIHwgQ2xpZW50IGlzIGN1cnJlbnRseSB0YWtpbmcgQVJUIAogKiBISVYuU1JWLkRFNjogQVJUIHN0YXJ0IGRhdGUgfCBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgY2xpZW50IHN0YXJ0ZWQgb3IgcmVzdGFydGVkIGFudGlyZXRyb3ZpcmFsIHRoZXJhcHkgKEFSVCkKICoKICogQWRkaXRpb25hbCBDb250ZXh0CiAqIC0gd2hhdCBpdCBtZWFzdXJlczogVGhpcyBpbmRpY2F0b3IgbWVhc3VyZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2Ygc2NhbGVkLXVwIFRQVCBwcm9ncmFtbWVzIGJ5IGFzc2Vzc2luZyB0aGUgcHJvcG9ydGlvbiBvZiBwYXRpZW50cyB3aG8gY29tcGxldGVkIHRoZSByZWNvbW1lbmRlZCBjb3Vyc2Ugb2YgVFBULgogKiAtIHJhdGlvbmFsZTog4oCiwqBNYW55IGNvdW50cmllcyBoYXZlIG1hZGUgcHJvZ3Jlc3MgaW4gaW5pdGlhdGluZyBlbGlnaWJsZSBwZW9wbGUgbGl2aW5nIHdpdGggSElWIG9uIFRQVC4gSG93ZXZlciwgcmF0ZXMgb2YgVFBUIGNvbXBsZXRpb24gcmVtYWluIHBvb3Igb3IgdW5rbm93bi4gfCDigKLCoEFzc2Vzc21lbnQgb2YgVFBUIGNvbXBsZXRpb24gaXMgYSBjcml0aWNhbCBlbGVtZW50IG9mIHRoZSBUQi9ISVYgY2FzY2FkZSBvZiBzZXJ2aWNlcy4KICogLSBtZXRob2Q6IEZvciB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvcjogUHJvZ3JhbW1lIHJlY29yZHMgKGZvciBleGFtcGxlLCBBUlQgcmVnaXN0ZXJzKSB8ICB8IERlZmluaW5nICJwcmV2aW91cyByZXBvcnRpbmcgcGVyaW9kIjogRm9yIGV4YW1wbGUsIGZvciBhbm51YWwgcmVwb3J0aW5nIG9mIEphbnVhcnkgdG8gRGVjZW1iZXIgMjAyMSwgdGhlIHByZXZpb3VzIHJlcG9ydGluZyBwZXJpb2QgaXMgSmFudWFyeSB0byBEZWNlbWJlciAyMDIwIChleGNlcHQgZm9yIHByb2dyYW1tZXMgd2l0aCAxSFAtZXhjbHVzaXZlIG5hdGlvbmFsIGd1aWRlbGluZXMgYW5kIGltcGxlbWVudGF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZXkgbWF5IHVzZSBKYW51YXJ5IHRvIERlY2VtYmVyIDIwMjEpLiBGb3IgcXVhcnRlcmx5IG9yIHNlbWktYW5udWFsIHJlcG9ydGluZyB0byB0aGUgbmF0aW9uYWwgbGV2ZWwsIHRoZSBwcmV2aW91cyByZXBvcnRpbmcgcGVyaW9kIHdpbGwgZGVwZW5kIG9uIHRoZSBUUFQgcmVnaW1lbiBhbmQgZHVyYXRpb24gZGVmaW5lZCBieSBuYXRpb25hbCBndWlkZWxpbmVzLiB8ICB8IE5vdGU6IEZvciBwcm9ncmFtbWVzIHVzaW5nIGNvbnRpbnVvdXMgaXNvbmlhemlkIHByZXZlbnRpdmUgdGhlcmFweSAoSVBUKSwgVFBUIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBhcyBzaXggbW9udGhzIG9mIHRyZWF0bWVudC4gfCAKICogCiAqIFN1Z2dlc3RlZCBTY29yaW5nIE1ldGhvZDogcHJvcG9ydGlvbiB8IGh0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY3FmbWVhc3VyZXMvU3RydWN0dXJlRGVmaW5pdGlvbi9wcm9wb3J0aW9uLW1lYXN1cmUtY3FmbQogKi8KCmxpYnJhcnkgSElWSU5ENDVMb2dpYwoKLy8gSW5jbHVkZWQgTGlicmFyaWVzCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIEhJVkNvbW1vbiB2ZXJzaW9uICcwLjAuMScgY2FsbGVkIEhJQwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDb20KCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCmluY2x1ZGUgSElWSW5kaWNhdG9yRWxlbWVudHMgY2FsbGVkIEhJRQoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGU+IGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjMtMDEtMDEsIEAyMDIzLTAxLTMwXQoKY29udGV4dCBQYXRpZW50CgovKioKICogSW5kaWNhdG9yIERlZmluaXRpb24KICovIAoKLyogUG9wdWxhdGlvbnMgKi8KCi8qCiAqSW5pdGlhbCBQb3B1bGF0aW9uCiAqLwoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogIHRydWUKCi8qKgogKiBOdW1lcmF0b3IKICogCiAqIERlZmluaXRpb246IE51bWJlciBvZiBBUlQgcGF0aWVudHMgd2hvIGNvbXBsZXRlZCBhIGNvdXJzZSBvZiBUUFQgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBjbGllbnRzIHdpdGggIkhJViBzdGF0dXMiPSdISVYtcG9zaXRpdmUnIEFORCAiT24gQVJUIj1UcnVlIEFORCAiVEIgcHJldmVudGl2ZSB0cmVhdG1lbnQgKFRQVCkgc3RhcnQgZGF0ZSIgaW4gdGhlIHByZXZpb3VzIHBlcmlvZCBBTkQgIlRCIHByZXZlbnRpdmUgdHJlYXRtZW50IChUUFQpIHN0YXR1cyI9J0NvbXBsZXRlZCcKICovCgpkZWZpbmUgIk51bWVyYXRvciI6CiBISUUuIkhhcyBISVYtcG9zaXRpdmUgU3RhdHVzIiBhbmQgSElFLiJPbiBBUlQiIGFuZCBleGlzdHMoSElFLiJUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCBUUFQgY29tcGxldGVkIGluIG1lYXN1cmVtZW50IHBlcmlvZCIpCgovKioKICogRGVub21pbmF0b3IKICoKICogRGVmaW5pdGlvbjogTnVtYmVyIG9mIEFSVCBwYXRpZW50cyB3aG8gaW5pdGlhdGVkIGFueSBjb3Vyc2Ugb2YgVFBUIGR1cmluZyB0aGUgcHJldmlvdXMgcmVwb3J0aW5nIHBlcmlvZAogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgIk9uIEFSVCI9VHJ1ZSBBTkQgIlRCIHByZXZlbnRpdmUgdHJlYXRtZW50IChUUFQpIHN0YXJ0IGRhdGUiIGluIHRoZSBwcmlvciByZXBvcnRpbmcgcGVyaW9kCiAqLwoKZGVmaW5lICJEZW5vbWluYXRvciI6CiBISUUuIkhhcyBISVYtcG9zaXRpdmUgU3RhdHVzIiBhbmQgSElFLiJPbiBBUlQiIGFuZCBleGlzdHMoSElFLiJUQiBwcmV2ZW50aXZlIHRyZWF0bWVudCBUUFQgc3RhcnQgZGF0ZSBpbiBwcmV2aW91cyBtZWFzdXJlbWVudCBwZXJpb2QiKQogICAgCi8qIGVuZCBQb3B1bGF0aW9ucyAqLwoKLyoKICogRGlzYWdncmVnYXRpb24KICoKICogIOKAosKgR2VuZGVyIChmZW1hbGUsIG1hbGUsIG90aGVyKikgCiAqICDigKIgQWdlICgw4oCTNCwgNeKAkzksIDEw4oCTMTQsIDE14oCTMTksIDIw4oCTMjQsIDI14oCTMjksIDMw4oCTMzQsIDM14oCTMzksIDQw4oCTNDQsIDQ14oCTNDksIDUwKyB5ZWFycykqKiAKICogIOKAosKgVHlwZSBvZiBUUFQgcmVnaW1lbiAKICogIOKAoiBBUlQgaW5pdGlhdGlvbiAoPDEyIG1vbnRocyBvbiBBUlQsIDEyKyBtb250aHMgb24gQVJUKSAKICogIOKAoiBDaXRpZXMgYW5kIG90aGVyIGFkbWluaXN0cmF0aXZlIHJlZ2lvbnMgb2YgZXBpZGVtaW9sb2dpYyBpbXBvcnRhbmNlCiAqCiAqLwoKZGVmaW5lICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgU3RyYXRpZmllciI6CglISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIgoKZGVmaW5lICJBZ2UgU3RyYXRpZmllciI6CiAgSElFLiJCeSBBZ2UgU3RyYXRpZmllciIKCmRlZmluZSAiVFBUIFJlZ2ltZW4gVHlwZSBTdHJhdGlmaWVyIjoKICBISUUuIlRQVCByZWdpbWVuIHR5cGUiCgpkZWZpbmUgIkFSVCBJbml0aWF0aW9uIFN0cmF0aWZpZXIiOgogIEhJRS4iQnkgQVJUIGluaXRpYXRpb24iCgpkZWZpbmUgIkdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiOgogIEhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKCi8qCiAqIENvbWJpbmVkIHN0cmF0aWZpZXJzCiAqLwpkZWZpbmUgIlN0cmF0aWZpY2F0aW9uIjoKICBISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIi5jb2RlIAogICAgKyAnOicgKyBISUUuIkJ5IEFnZSBTdHJhdGlmaWVyIgogICAgKyAnOicgKyBDb21iaW5lKEhJRS4iVFBUIHJlZ2ltZW4gdHlwZSIuY29kaW5nLmNvZGUpCiAgICArICc6JyArIEhJRS4iQnkgQVJUIGluaXRpYXRpb24iCgkgICsgJzonICsgSElFLiJCeSBHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIgo="^^xsd:base64Binary ]
  ] ) . #