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.24 Logic - JSON Representation

Draft as of 2025-02-07

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "HIVIND24Logic",
  "meta" : {
    "profile" : [
      🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
      "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
      "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
      "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"
    ]
  },
  "text" : {
    "status" : "extensions",
    "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.24 Logic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">HIVIND24Logic</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-HIVIND24Logic.html\">HIV.IND.24 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>Among those testing HIV-negative and identified as being at elevated risk for HIV acquisition, % of people who receive an HIV prevention intervention within defined period</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.24 Logic\n * Ref No: HTS.7\n * Short Name: HTS linkage to prevention\n *\n * Definition: Among those testing HIV-negative and identified as being at elevated risk for HIV acquisition, % of people who receive an HIV prevention intervention within defined period\n *\n * Numerator: Number of people who receive an HIV prevention intervention within a defined period after receiving a negative HIV test result\n * Numerator Calculation: COUNT of clients with &quot;At elevated risk for HIV acquisition&quot;=True and with &quot;Date accessed HIV prevention intervention&quot; within X days of &quot;HIV test date&quot; in the reporting period with &quot;HIV test result&quot;='HIV-negative' |  | where X is 7, 14, or 28 days\n * Numerator Exclusions: \n *\n * Denominator: Number of people testing negative for HIV in the reporting period and identified as being at elevated risk for HIV acquisition (includes people requesting/receiving any HIV prevention intervention, people from key populations, people with known risk factors or those assessed as being at risk of HIV acquisition)\n * Denominator Calculation: COUNT of clients with &quot;At elevated risk for HIV acquisition&quot;=True AND with an &quot;HIV test date&quot; in the reporting period with &quot;HIV test result&quot;='HIV-negative'\n * Denominator Exclusions: \n *\n * Disaggregations:\n * • Gender (female, male, other*) \n *  •\u00a0Age (&lt;15, 15–19, 20–24, 25–49, 50+ years)** \n *  • Key populations (men who have sex with men, people living in prisons and other closed settings, people who inject drugs, sex workers, trans and gender diverse people)*** \n *  •\u00a0HIV prevention intervention (including PrEP, OAMT, NSP, STI services, VMMC) \n *  •\u00a0Provider type (key population-led or community-led organization, public sector provider, other entities such as private for-profit and not-for-profit organizations, including faith-based, international, nongovernmental) \n *  • Cities and other administrative regions of epidemiologic importance\n *\n * Disaggregation Elements: Gender | Age | Key population member type | HIV prevention intervention\n *\n * Numerator and Denominator Elements:\n * At elevated risk for HIV acquisition \n *  Date accessed HIV prevention intervention \n *  HIV test date \n *  HIV test result\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.DE50: Key population member type* | The type of key population that the client is included in\n * HIV.B.DE51: Sex worker | Client is a sex worker\n * HIV.B.DE52: Men who have sex with men | Client is a man who has sex with men\n * HIV.B.DE53: Trans and gender-diverse people | Client identifies as trans and gender-diverse\n * HIV.B.DE54: People who inject drugs | Client is a person who injects drugs\n * HIV.B.DE55: People living in prisons and other closed settings | Client lives in a prison or another closed setting\n * HIV.B.DE110: HIV test date | Date of the HIV test\n * HIV.B.DE111: HIV test result | The result from HIV testing after applying the testing algorithm\n * HIV.B.DE112: HIV-positive | Test result is HIV-positive\n * HIV.B.DE113: HIV-negative | Test result is HIV-negative\n * HIV.B.DE114: HIV-inconclusive | Test result is HIV-inconclusive\n * HIV.B.DE225: At elevated risk for HIV acquisition | Client is at elevated risk for HIV acquisition\n * HIV.E.DE114: Key population member type* | The type of key population that the infant's mother is included in\n * HIV.E.DE115: Sex worker | Infant's mother is a sex worker\n * HIV.E.DE116: People who inject drugs | Infant's mother is a person who injects drugs\n * HIV.E.DE117: Trans and gender-diverse people | Infant's mother identifies as trans and gender-diverse\n * HIV.E.DE118: People living in prisons and other closed setting | Infant's mother is in a prison or closed setting\n * HIV.E.DE224: HIV test date | Date of the HIV test\n * HIV.PRV.DE1: At elevated risk for HIV acquisition | Client is at elevated risk for HIV acquisition, defined according to country/programme context\n * HIV.PRV.DE2: HIV prevention intervention | HIV prevention intervention that client accessed\n * HIV.PRV.DE3: PrEP service | Client accessed PrEP services\n * HIV.PRV.DE4: OAMT | Client accessed opioid agonist maintenance treatment (OAMT) services\n * HIV.PRV.DE5: NSP | Client accessed needle-syringe programme (NSP) services\n * HIV.PRV.DE6: STI services | Client accessed sexually transmitted infection (STI) services\n * HIV.PRV.DE7: VMMC | Client accessed voluntary medical male circumcision (VMMC) services\n * HIV.PRV.DE8: Other | Client accessed other HIV prevention services\n * HIV.PRV.DE10: Date accessed HIV prevention intervention | Date the client accessed HIV prevention intervention\n * HIV.SRV.DE1: HIV test date | Date of the HIV test\n * HIV.SRV.DE2: HIV test result | The result from HIV testing after applying the testing algorithm\n *\n * Additional Context\n * - what it measures: Measures the proportion of people receiving HIV prevention within set period (for example, same day, 7, 14 or 28 days) after receiving a negative HIV test result.\n * - rationale: Access to HIV prevention interventions is important to reduce the risk of HIV acquisition among individuals testing HIV-negative. Ensuring individuals at ongoing risk are successfully linked to relevant HIV prevention is an important outcome following HIV testing.\n * - method: Individual-level data obtained from programme records |  | The indicator should exclude current PrEP recipients, as they are tested on a regular basis. As ongoing PrEP recipients are engaged in prevention, the number of days to intervention uptake is 0.\n * \n * Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm\n */\n\nlibrary HIVIND24Logic\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'\ninclude WHOCommon called WCom\ninclude HIVElements called HE\ninclude HIVIndicatorElements called HIE\n\n// Indicator Definition\nparameter &quot;Measurement Period&quot; Interval&lt;Date&gt; default Interval[@2023-01-01, @2023-01-30]\nparameter &quot;Intervention Interval&quot; System.Quantity default 7 days\n\ncontext Patient\n/* Populations */\n\n/*\n *Initial Population\n */\n\ndefine &quot;Initial Population&quot;:\n  true\n\n\n/**\n * Numerator\n * \n * Definition: Number of people who receive an HIV prevention intervention within a defined period after receiving a negative HIV test result\n * Calculation: COUNT of clients with &quot;At elevated risk for HIV acquisition&quot;=True and with &quot;Date accessed HIV prevention intervention&quot; within X days of &quot;HIV test date&quot; in the reporting period with &quot;HIV test result&quot;='HIV-negative' |  | where X is 7, 14, or 28 days\n */\n\ndefine &quot;Numerator&quot;:\n  (exists(HE.&quot;PrEP service&quot; prep\n   where prep.effective.toInterval() starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n  and prep.effective.toInterval() starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval())\n   )\n  or \n  exists(HE.&quot;OAMT&quot; t where t starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n      and t starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval()))\n  or \n  // TODO: DeviceUseStatement causing translation issue\n  // exists(HE.&quot;NSP&quot; DUS where DUS.timing.toInterval() starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n  // and DUS.timing.toInterval() starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval()))\n  // or \n  exists(HE.&quot;STI services&quot; STI where STI.performed.toInterval() starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n  and STI.performed.toInterval() starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval()))\n  or \n  exists(HE.&quot;VMMC&quot; V where V.performed.toInterval() starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n  and V.performed.toInterval() starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval()))\n  or\n  exists(HE.&quot;Other PRV.DE8&quot; O\n    where O.effective.toInterval() starts before (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval() + &quot;Intervention Interval&quot;)\n    and O.effective.toInterval() starts after (start of HIE.&quot;First Negative Test within Measurement Period&quot;.effective.toInterval())))\n  and\n  HIE.&quot;At elevated risk for HIV acquisition B.DE225&quot;\n\n\n\n/**\n * Denominator\n *\n * Definition: Number of people testing negative for HIV in the reporting period and identified as being at elevated risk for HIV acquisition (includes people requesting/receiving any HIV prevention intervention, people from key populations, people with known risk factors or those assessed as being at risk of HIV acquisition)\n * Calculation: COUNT of clients with &quot;At elevated risk for HIV acquisition&quot;=True AND with an &quot;HIV test date&quot; in the reporting period with &quot;HIV test result&quot;='HIV-negative'\n */\n\ndefine &quot;Denominator&quot;:\n  exists(HIE.&quot;Negative Tests within Measurement Period&quot;)\n  and HIE.&quot;At elevated risk for HIV acquisition B.DE225&quot;\n    \n\n/* end Populations */\n\n\n/*\n * Disaggregators\n */\n\ndefine &quot;Administrative Gender Stratifier&quot;:\n\tHIE.&quot;By Administrative Gender Stratifier&quot;\n\ndefine &quot;Age Stratifier&quot;:\n\tHIE.&quot;By Age Stratifier 5&quot;\n\ndefine &quot;Geographic Region Stratifier&quot;:\n\tHIE.&quot;By Geographic Region Stratifier&quot;\n\ndefine &quot;patientGroups Stratifier&quot;:\n\tHIE.&quot;patientGroups&quot;\n\ndefine &quot;HIV prevention intervention&quot;:\n\tHIE.&quot;HIV prevention intervention&quot;\n\ndefine &quot;Stratification&quot;:\n HIE.&quot;By Administrative Gender Stratifier&quot;.code \n  + ':' + HIE.&quot;By Age Stratifier 5&quot;\n+ ':' + HIE.&quot;By Geographic Region Stratifier&quot;\n+ Combine(HIE.patientGroups, ':')\n+ Combine(HIE.&quot;HIV prevention intervention&quot;, ':')</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  },
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability",
      "valueCode" : "computable"
    }
  ],
  "url" : "http://smart.who.int/hiv/Library/HIVIND24Logic",
  "version" : "0.4.3",
  "name" : "HIVIND24Logic",
  "title" : "HIV.IND.24 Logic",
  "status" : "draft",
  "experimental" : true,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2025-02-07T14:15:45+00:00",
  "publisher" : "WHO",
  "contact" : [
    {
      "name" : "WHO",
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://who.int"
        }
      ]
    }
  ],
  "description" : "Among those testing HIV-negative and identified as being at elevated risk for HIV acquisition, % of people who receive an HIV prevention intervention within defined period",
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuMjQgTG9naWMKICogUmVmIE5vOiBIVFMuNwogKiBTaG9ydCBOYW1lOiBIVFMgbGlua2FnZSB0byBwcmV2ZW50aW9uCiAqCiAqIERlZmluaXRpb246IEFtb25nIHRob3NlIHRlc3RpbmcgSElWLW5lZ2F0aXZlIGFuZCBpZGVudGlmaWVkIGFzIGJlaW5nIGF0IGVsZXZhdGVkIHJpc2sgZm9yIEhJViBhY3F1aXNpdGlvbiwgJSBvZiBwZW9wbGUgd2hvIHJlY2VpdmUgYW4gSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIHdpdGhpbiBkZWZpbmVkIHBlcmlvZAogKgogKiBOdW1lcmF0b3I6IE51bWJlciBvZiBwZW9wbGUgd2hvIHJlY2VpdmUgYW4gSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIGFmdGVyIHJlY2VpdmluZyBhIG5lZ2F0aXZlIEhJViB0ZXN0IHJlc3VsdAogKiBOdW1lcmF0b3IgQ2FsY3VsYXRpb246IENPVU5UIG9mIGNsaWVudHMgd2l0aCAiQXQgZWxldmF0ZWQgcmlzayBmb3IgSElWIGFjcXVpc2l0aW9uIj1UcnVlIGFuZCB3aXRoICJEYXRlIGFjY2Vzc2VkIEhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbiIgd2l0aGluIFggZGF5cyBvZiAiSElWIHRlc3QgZGF0ZSIgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2Qgd2l0aCAiSElWIHRlc3QgcmVzdWx0Ij0nSElWLW5lZ2F0aXZlJyB8ICB8IHdoZXJlIFggaXMgNywgMTQsIG9yIDI4IGRheXMKICogTnVtZXJhdG9yIEV4Y2x1c2lvbnM6IAogKgogKiBEZW5vbWluYXRvcjogTnVtYmVyIG9mIHBlb3BsZSB0ZXN0aW5nIG5lZ2F0aXZlIGZvciBISVYgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QgYW5kIGlkZW50aWZpZWQgYXMgYmVpbmcgYXQgZWxldmF0ZWQgcmlzayBmb3IgSElWIGFjcXVpc2l0aW9uIChpbmNsdWRlcyBwZW9wbGUgcmVxdWVzdGluZy9yZWNlaXZpbmcgYW55IEhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbiwgcGVvcGxlIGZyb20ga2V5IHBvcHVsYXRpb25zLCBwZW9wbGUgd2l0aCBrbm93biByaXNrIGZhY3RvcnMgb3IgdGhvc2UgYXNzZXNzZWQgYXMgYmVpbmcgYXQgcmlzayBvZiBISVYgYWNxdWlzaXRpb24pCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBjbGllbnRzIHdpdGggIkF0IGVsZXZhdGVkIHJpc2sgZm9yIEhJViBhY3F1aXNpdGlvbiI9VHJ1ZSBBTkQgd2l0aCBhbiAiSElWIHRlc3QgZGF0ZSIgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2Qgd2l0aCAiSElWIHRlc3QgcmVzdWx0Ij0nSElWLW5lZ2F0aXZlJwogKiBEZW5vbWluYXRvciBFeGNsdXNpb25zOiAKICoKICogRGlzYWdncmVnYXRpb25zOgogKiDigKIgR2VuZGVyIChmZW1hbGUsIG1hbGUsIG90aGVyKikgCiAqICDigKLCoEFnZSAoPDE1LCAxNeKAkzE5LCAyMOKAkzI0LCAyNeKAkzQ5LCA1MCsgeWVhcnMpKiogCiAqICDigKIgS2V5IHBvcHVsYXRpb25zIChtZW4gd2hvIGhhdmUgc2V4IHdpdGggbWVuLCBwZW9wbGUgbGl2aW5nIGluIHByaXNvbnMgYW5kIG90aGVyIGNsb3NlZCBzZXR0aW5ncywgcGVvcGxlIHdobyBpbmplY3QgZHJ1Z3MsIHNleCB3b3JrZXJzLCB0cmFucyBhbmQgZ2VuZGVyIGRpdmVyc2UgcGVvcGxlKSoqKiAKICogIOKAosKgSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIChpbmNsdWRpbmcgUHJFUCwgT0FNVCwgTlNQLCBTVEkgc2VydmljZXMsIFZNTUMpIAogKiAg4oCiwqBQcm92aWRlciB0eXBlIChrZXkgcG9wdWxhdGlvbi1sZWQgb3IgY29tbXVuaXR5LWxlZCBvcmdhbml6YXRpb24sIHB1YmxpYyBzZWN0b3IgcHJvdmlkZXIsIG90aGVyIGVudGl0aWVzIHN1Y2ggYXMgcHJpdmF0ZSBmb3ItcHJvZml0IGFuZCBub3QtZm9yLXByb2ZpdCBvcmdhbml6YXRpb25zLCBpbmNsdWRpbmcgZmFpdGgtYmFzZWQsIGludGVybmF0aW9uYWwsIG5vbmdvdmVybm1lbnRhbCkgCiAqICDigKIgQ2l0aWVzIGFuZCBvdGhlciBhZG1pbmlzdHJhdGl2ZSByZWdpb25zIG9mIGVwaWRlbWlvbG9naWMgaW1wb3J0YW5jZQogKgogKiBEaXNhZ2dyZWdhdGlvbiBFbGVtZW50czogR2VuZGVyIHwgQWdlIHwgS2V5IHBvcHVsYXRpb24gbWVtYmVyIHR5cGUgfCBISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24KICoKICogTnVtZXJhdG9yIGFuZCBEZW5vbWluYXRvciBFbGVtZW50czoKICogQXQgZWxldmF0ZWQgcmlzayBmb3IgSElWIGFjcXVpc2l0aW9uIAogKiAgRGF0ZSBhY2Nlc3NlZCBISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24gCiAqICBISVYgdGVzdCBkYXRlIAogKiAgSElWIHRlc3QgcmVzdWx0CiAqCiAqIFJlZmVyZW5jZTogQ29uc29saWRhdGVkIGd1aWRlbGluZXMgb24gcGVyc29uLWNlbnRyZWQgSElWIHN0cmF0ZWdpYyBpbmZvcm1hdGlvbjogc3RyZW5ndGhlbmluZyByb3V0aW5lIGRhdGEgZm9yIGltcGFjdC4gR2VuZXZhOiBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uOyAyMDIyCiAqIAogKiBEYXRhIENvbmNlcHRzOgogKiBISVYuQS5ERTE3OiBBZ2UgfCBDYWxjdWxhdGVkIGFnZSAobnVtYmVyIG9mIHllYXJzKSBvZiB0aGUgY2xpZW50IGJhc2VkIG9uIGRhdGUgb2YgYmlydGgKICogSElWLkEuREUxODogR2VuZGVyKiB8IEdlbmRlciBvZiB0aGUgY2xpZW50KgogKiBISVYuQS5ERTE5OiBGZW1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyBmZW1hbGUKICogSElWLkEuREUyMDogTWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIG1hbGUKICogSElWLkEuREUyMTogVHJhbnNnZW5kZXIgbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIHRyYW5zZ2VuZGVyIG1hbGUKICogSElWLkEuREUyMjogVHJhbnNnZW5kZXIgZmVtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnNnZW5kZXIgZmVtYWxlCiAqIEhJVi5BLkRFMjM6IE90aGVyIHwgQWRkaXRpb25hbCBjYXRlZ29yeQogKiBISVYuQi5ERTUwOiBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSogfCBUaGUgdHlwZSBvZiBrZXkgcG9wdWxhdGlvbiB0aGF0IHRoZSBjbGllbnQgaXMgaW5jbHVkZWQgaW4KICogSElWLkIuREU1MTogU2V4IHdvcmtlciB8IENsaWVudCBpcyBhIHNleCB3b3JrZXIKICogSElWLkIuREU1MjogTWVuIHdobyBoYXZlIHNleCB3aXRoIG1lbiB8IENsaWVudCBpcyBhIG1hbiB3aG8gaGFzIHNleCB3aXRoIG1lbgogKiBISVYuQi5ERTUzOiBUcmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UgcGVvcGxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlCiAqIEhJVi5CLkRFNTQ6IFBlb3BsZSB3aG8gaW5qZWN0IGRydWdzIHwgQ2xpZW50IGlzIGEgcGVyc29uIHdobyBpbmplY3RzIGRydWdzCiAqIEhJVi5CLkRFNTU6IFBlb3BsZSBsaXZpbmcgaW4gcHJpc29ucyBhbmQgb3RoZXIgY2xvc2VkIHNldHRpbmdzIHwgQ2xpZW50IGxpdmVzIGluIGEgcHJpc29uIG9yIGFub3RoZXIgY2xvc2VkIHNldHRpbmcKICogSElWLkIuREUxMTA6IEhJViB0ZXN0IGRhdGUgfCBEYXRlIG9mIHRoZSBISVYgdGVzdAogKiBISVYuQi5ERTExMTogSElWIHRlc3QgcmVzdWx0IHwgVGhlIHJlc3VsdCBmcm9tIEhJViB0ZXN0aW5nIGFmdGVyIGFwcGx5aW5nIHRoZSB0ZXN0aW5nIGFsZ29yaXRobQogKiBISVYuQi5ERTExMjogSElWLXBvc2l0aXZlIHwgVGVzdCByZXN1bHQgaXMgSElWLXBvc2l0aXZlCiAqIEhJVi5CLkRFMTEzOiBISVYtbmVnYXRpdmUgfCBUZXN0IHJlc3VsdCBpcyBISVYtbmVnYXRpdmUKICogSElWLkIuREUxMTQ6IEhJVi1pbmNvbmNsdXNpdmUgfCBUZXN0IHJlc3VsdCBpcyBISVYtaW5jb25jbHVzaXZlCiAqIEhJVi5CLkRFMjI1OiBBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24gfCBDbGllbnQgaXMgYXQgZWxldmF0ZWQgcmlzayBmb3IgSElWIGFjcXVpc2l0aW9uCiAqIEhJVi5FLkRFMTE0OiBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSogfCBUaGUgdHlwZSBvZiBrZXkgcG9wdWxhdGlvbiB0aGF0IHRoZSBpbmZhbnQncyBtb3RoZXIgaXMgaW5jbHVkZWQgaW4KICogSElWLkUuREUxMTU6IFNleCB3b3JrZXIgfCBJbmZhbnQncyBtb3RoZXIgaXMgYSBzZXggd29ya2VyCiAqIEhJVi5FLkRFMTE2OiBQZW9wbGUgd2hvIGluamVjdCBkcnVncyB8IEluZmFudCdzIG1vdGhlciBpcyBhIHBlcnNvbiB3aG8gaW5qZWN0cyBkcnVncwogKiBISVYuRS5ERTExNzogVHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlIHBlb3BsZSB8IEluZmFudCdzIG1vdGhlciBpZGVudGlmaWVzIGFzIHRyYW5zIGFuZCBnZW5kZXItZGl2ZXJzZQogKiBISVYuRS5ERTExODogUGVvcGxlIGxpdmluZyBpbiBwcmlzb25zIGFuZCBvdGhlciBjbG9zZWQgc2V0dGluZyB8IEluZmFudCdzIG1vdGhlciBpcyBpbiBhIHByaXNvbiBvciBjbG9zZWQgc2V0dGluZwogKiBISVYuRS5ERTIyNDogSElWIHRlc3QgZGF0ZSB8IERhdGUgb2YgdGhlIEhJViB0ZXN0CiAqIEhJVi5QUlYuREUxOiBBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24gfCBDbGllbnQgaXMgYXQgZWxldmF0ZWQgcmlzayBmb3IgSElWIGFjcXVpc2l0aW9uLCBkZWZpbmVkIGFjY29yZGluZyB0byBjb3VudHJ5L3Byb2dyYW1tZSBjb250ZXh0CiAqIEhJVi5QUlYuREUyOiBISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24gfCBISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24gdGhhdCBjbGllbnQgYWNjZXNzZWQKICogSElWLlBSVi5ERTM6IFByRVAgc2VydmljZSB8IENsaWVudCBhY2Nlc3NlZCBQckVQIHNlcnZpY2VzCiAqIEhJVi5QUlYuREU0OiBPQU1UIHwgQ2xpZW50IGFjY2Vzc2VkIG9waW9pZCBhZ29uaXN0IG1haW50ZW5hbmNlIHRyZWF0bWVudCAoT0FNVCkgc2VydmljZXMKICogSElWLlBSVi5ERTU6IE5TUCB8IENsaWVudCBhY2Nlc3NlZCBuZWVkbGUtc3lyaW5nZSBwcm9ncmFtbWUgKE5TUCkgc2VydmljZXMKICogSElWLlBSVi5ERTY6IFNUSSBzZXJ2aWNlcyB8IENsaWVudCBhY2Nlc3NlZCBzZXh1YWxseSB0cmFuc21pdHRlZCBpbmZlY3Rpb24gKFNUSSkgc2VydmljZXMKICogSElWLlBSVi5ERTc6IFZNTUMgfCBDbGllbnQgYWNjZXNzZWQgdm9sdW50YXJ5IG1lZGljYWwgbWFsZSBjaXJjdW1jaXNpb24gKFZNTUMpIHNlcnZpY2VzCiAqIEhJVi5QUlYuREU4OiBPdGhlciB8IENsaWVudCBhY2Nlc3NlZCBvdGhlciBISVYgcHJldmVudGlvbiBzZXJ2aWNlcwogKiBISVYuUFJWLkRFMTA6IERhdGUgYWNjZXNzZWQgSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIHwgRGF0ZSB0aGUgY2xpZW50IGFjY2Vzc2VkIEhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbgogKiBISVYuU1JWLkRFMTogSElWIHRlc3QgZGF0ZSB8IERhdGUgb2YgdGhlIEhJViB0ZXN0CiAqIEhJVi5TUlYuREUyOiBISVYgdGVzdCByZXN1bHQgfCBUaGUgcmVzdWx0IGZyb20gSElWIHRlc3RpbmcgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRlc3RpbmcgYWxnb3JpdGhtCiAqCiAqIEFkZGl0aW9uYWwgQ29udGV4dAogKiAtIHdoYXQgaXQgbWVhc3VyZXM6IE1lYXN1cmVzIHRoZSBwcm9wb3J0aW9uIG9mIHBlb3BsZSByZWNlaXZpbmcgSElWIHByZXZlbnRpb24gd2l0aGluIHNldCBwZXJpb2QgKGZvciBleGFtcGxlLCBzYW1lIGRheSwgNywgMTQgb3IgMjggZGF5cykgYWZ0ZXIgcmVjZWl2aW5nIGEgbmVnYXRpdmUgSElWIHRlc3QgcmVzdWx0LgogKiAtIHJhdGlvbmFsZTogQWNjZXNzIHRvIEhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbnMgaXMgaW1wb3J0YW50IHRvIHJlZHVjZSB0aGUgcmlzayBvZiBISVYgYWNxdWlzaXRpb24gYW1vbmcgaW5kaXZpZHVhbHMgdGVzdGluZyBISVYtbmVnYXRpdmUuIEVuc3VyaW5nIGluZGl2aWR1YWxzIGF0IG9uZ29pbmcgcmlzayBhcmUgc3VjY2Vzc2Z1bGx5IGxpbmtlZCB0byByZWxldmFudCBISVYgcHJldmVudGlvbiBpcyBhbiBpbXBvcnRhbnQgb3V0Y29tZSBmb2xsb3dpbmcgSElWIHRlc3RpbmcuCiAqIC0gbWV0aG9kOiBJbmRpdmlkdWFsLWxldmVsIGRhdGEgb2J0YWluZWQgZnJvbSBwcm9ncmFtbWUgcmVjb3JkcyB8ICB8IFRoZSBpbmRpY2F0b3Igc2hvdWxkIGV4Y2x1ZGUgY3VycmVudCBQckVQIHJlY2lwaWVudHMsIGFzIHRoZXkgYXJlIHRlc3RlZCBvbiBhIHJlZ3VsYXIgYmFzaXMuIEFzIG9uZ29pbmcgUHJFUCByZWNpcGllbnRzIGFyZSBlbmdhZ2VkIGluIHByZXZlbnRpb24sIHRoZSBudW1iZXIgb2YgZGF5cyB0byBpbnRlcnZlbnRpb24gdXB0YWtlIGlzIDAuCiAqIAogKiBTdWdnZXN0ZWQgU2NvcmluZyBNZXRob2Q6IHByb3BvcnRpb24gfCBodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NxZm1lYXN1cmVzL1N0cnVjdHVyZURlZmluaXRpb24vcHJvcG9ydGlvbi1tZWFzdXJlLWNxZm0KICovCgpsaWJyYXJ5IEhJVklORDI0TG9naWMKCi8vIEluY2x1ZGVkIExpYnJhcmllcwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDb20KaW5jbHVkZSBISVZFbGVtZW50cyBjYWxsZWQgSEUKaW5jbHVkZSBISVZJbmRpY2F0b3JFbGVtZW50cyBjYWxsZWQgSElFCgovLyBJbmRpY2F0b3IgRGVmaW5pdGlvbgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZT4gZGVmYXVsdCBJbnRlcnZhbFtAMjAyMy0wMS0wMSwgQDIwMjMtMDEtMzBdCnBhcmFtZXRlciAiSW50ZXJ2ZW50aW9uIEludGVydmFsIiBTeXN0ZW0uUXVhbnRpdHkgZGVmYXVsdCA3IGRheXMKCmNvbnRleHQgUGF0aWVudAovKiBQb3B1bGF0aW9ucyAqLwoKLyoKICpJbml0aWFsIFBvcHVsYXRpb24KICovCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgdHJ1ZQoKCi8qKgogKiBOdW1lcmF0b3IKICogCiAqIERlZmluaXRpb246IE51bWJlciBvZiBwZW9wbGUgd2hvIHJlY2VpdmUgYW4gSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIGFmdGVyIHJlY2VpdmluZyBhIG5lZ2F0aXZlIEhJViB0ZXN0IHJlc3VsdAogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24iPVRydWUgYW5kIHdpdGggIkRhdGUgYWNjZXNzZWQgSElWIHByZXZlbnRpb24gaW50ZXJ2ZW50aW9uIiB3aXRoaW4gWCBkYXlzIG9mICJISVYgdGVzdCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZCB3aXRoICJISVYgdGVzdCByZXN1bHQiPSdISVYtbmVnYXRpdmUnIHwgIHwgd2hlcmUgWCBpcyA3LCAxNCwgb3IgMjggZGF5cwogKi8KCmRlZmluZSAiTnVtZXJhdG9yIjoKICAoZXhpc3RzKEhFLiJQckVQIHNlcnZpY2UiIHByZXAKICAgd2hlcmUgcHJlcC5lZmZlY3RpdmUudG9JbnRlcnZhbCgpIHN0YXJ0cyBiZWZvcmUgKHN0YXJ0IG9mIEhJRS4iRmlyc3QgTmVnYXRpdmUgVGVzdCB3aXRoaW4gTWVhc3VyZW1lbnQgUGVyaW9kIi5lZmZlY3RpdmUudG9JbnRlcnZhbCgpICsgIkludGVydmVudGlvbiBJbnRlcnZhbCIpCiAgYW5kIHByZXAuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBzdGFydHMgYWZ0ZXIgKHN0YXJ0IG9mIEhJRS4iRmlyc3QgTmVnYXRpdmUgVGVzdCB3aXRoaW4gTWVhc3VyZW1lbnQgUGVyaW9kIi5lZmZlY3RpdmUudG9JbnRlcnZhbCgpKQogICApCiAgb3IgCiAgZXhpc3RzKEhFLiJPQU1UIiB0IHdoZXJlIHQgc3RhcnRzIGJlZm9yZSAoc3RhcnQgb2YgSElFLiJGaXJzdCBOZWdhdGl2ZSBUZXN0IHdpdGhpbiBNZWFzdXJlbWVudCBQZXJpb2QiLmVmZmVjdGl2ZS50b0ludGVydmFsKCkgKyAiSW50ZXJ2ZW50aW9uIEludGVydmFsIikKICAgICAgYW5kIHQgc3RhcnRzIGFmdGVyIChzdGFydCBvZiBISUUuIkZpcnN0IE5lZ2F0aXZlIFRlc3Qgd2l0aGluIE1lYXN1cmVtZW50IFBlcmlvZCIuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkpCiAgb3IgCiAgLy8gVE9ETzogRGV2aWNlVXNlU3RhdGVtZW50IGNhdXNpbmcgdHJhbnNsYXRpb24gaXNzdWUKICAvLyBleGlzdHMoSEUuIk5TUCIgRFVTIHdoZXJlIERVUy50aW1pbmcudG9JbnRlcnZhbCgpIHN0YXJ0cyBiZWZvcmUgKHN0YXJ0IG9mIEhJRS4iRmlyc3QgTmVnYXRpdmUgVGVzdCB3aXRoaW4gTWVhc3VyZW1lbnQgUGVyaW9kIi5lZmZlY3RpdmUudG9JbnRlcnZhbCgpICsgIkludGVydmVudGlvbiBJbnRlcnZhbCIpCiAgLy8gYW5kIERVUy50aW1pbmcudG9JbnRlcnZhbCgpIHN0YXJ0cyBhZnRlciAoc3RhcnQgb2YgSElFLiJGaXJzdCBOZWdhdGl2ZSBUZXN0IHdpdGhpbiBNZWFzdXJlbWVudCBQZXJpb2QiLmVmZmVjdGl2ZS50b0ludGVydmFsKCkpKQogIC8vIG9yIAogIGV4aXN0cyhIRS4iU1RJIHNlcnZpY2VzIiBTVEkgd2hlcmUgU1RJLnBlcmZvcm1lZC50b0ludGVydmFsKCkgc3RhcnRzIGJlZm9yZSAoc3RhcnQgb2YgSElFLiJGaXJzdCBOZWdhdGl2ZSBUZXN0IHdpdGhpbiBNZWFzdXJlbWVudCBQZXJpb2QiLmVmZmVjdGl2ZS50b0ludGVydmFsKCkgKyAiSW50ZXJ2ZW50aW9uIEludGVydmFsIikKICBhbmQgU1RJLnBlcmZvcm1lZC50b0ludGVydmFsKCkgc3RhcnRzIGFmdGVyIChzdGFydCBvZiBISUUuIkZpcnN0IE5lZ2F0aXZlIFRlc3Qgd2l0aGluIE1lYXN1cmVtZW50IFBlcmlvZCIuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkpCiAgb3IgCiAgZXhpc3RzKEhFLiJWTU1DIiBWIHdoZXJlIFYucGVyZm9ybWVkLnRvSW50ZXJ2YWwoKSBzdGFydHMgYmVmb3JlIChzdGFydCBvZiBISUUuIkZpcnN0IE5lZ2F0aXZlIFRlc3Qgd2l0aGluIE1lYXN1cmVtZW50IFBlcmlvZCIuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSArICJJbnRlcnZlbnRpb24gSW50ZXJ2YWwiKQogIGFuZCBWLnBlcmZvcm1lZC50b0ludGVydmFsKCkgc3RhcnRzIGFmdGVyIChzdGFydCBvZiBISUUuIkZpcnN0IE5lZ2F0aXZlIFRlc3Qgd2l0aGluIE1lYXN1cmVtZW50IFBlcmlvZCIuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkpCiAgb3IKICBleGlzdHMoSEUuIk90aGVyIFBSVi5ERTgiIE8KICAgIHdoZXJlIE8uZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBzdGFydHMgYmVmb3JlIChzdGFydCBvZiBISUUuIkZpcnN0IE5lZ2F0aXZlIFRlc3Qgd2l0aGluIE1lYXN1cmVtZW50IFBlcmlvZCIuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSArICJJbnRlcnZlbnRpb24gSW50ZXJ2YWwiKQogICAgYW5kIE8uZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBzdGFydHMgYWZ0ZXIgKHN0YXJ0IG9mIEhJRS4iRmlyc3QgTmVnYXRpdmUgVGVzdCB3aXRoaW4gTWVhc3VyZW1lbnQgUGVyaW9kIi5lZmZlY3RpdmUudG9JbnRlcnZhbCgpKSkpCiAgYW5kCiAgSElFLiJBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24gQi5ERTIyNSIKCgoKLyoqCiAqIERlbm9taW5hdG9yCiAqCiAqIERlZmluaXRpb246IE51bWJlciBvZiBwZW9wbGUgdGVzdGluZyBuZWdhdGl2ZSBmb3IgSElWIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIGFuZCBpZGVudGlmaWVkIGFzIGJlaW5nIGF0IGVsZXZhdGVkIHJpc2sgZm9yIEhJViBhY3F1aXNpdGlvbiAoaW5jbHVkZXMgcGVvcGxlIHJlcXVlc3RpbmcvcmVjZWl2aW5nIGFueSBISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24sIHBlb3BsZSBmcm9tIGtleSBwb3B1bGF0aW9ucywgcGVvcGxlIHdpdGgga25vd24gcmlzayBmYWN0b3JzIG9yIHRob3NlIGFzc2Vzc2VkIGFzIGJlaW5nIGF0IHJpc2sgb2YgSElWIGFjcXVpc2l0aW9uKQogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24iPVRydWUgQU5EIHdpdGggYW4gIkhJViB0ZXN0IGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIHdpdGggIkhJViB0ZXN0IHJlc3VsdCI9J0hJVi1uZWdhdGl2ZScKICovCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICBleGlzdHMoSElFLiJOZWdhdGl2ZSBUZXN0cyB3aXRoaW4gTWVhc3VyZW1lbnQgUGVyaW9kIikKICBhbmQgSElFLiJBdCBlbGV2YXRlZCByaXNrIGZvciBISVYgYWNxdWlzaXRpb24gQi5ERTIyNSIKICAgIAoKLyogZW5kIFBvcHVsYXRpb25zICovCgoKLyoKICogRGlzYWdncmVnYXRvcnMKICovCgpkZWZpbmUgIkFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiCgpkZWZpbmUgIkFnZSBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgQWdlIFN0cmF0aWZpZXIgNSIKCmRlZmluZSAiR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciI6CglISUUuIkJ5IEdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiCgpkZWZpbmUgInBhdGllbnRHcm91cHMgU3RyYXRpZmllciI6CglISUUuInBhdGllbnRHcm91cHMiCgpkZWZpbmUgIkhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbiI6CglISUUuIkhJViBwcmV2ZW50aW9uIGludGVydmVudGlvbiIKCmRlZmluZSAiU3RyYXRpZmljYXRpb24iOgogSElFLiJCeSBBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgU3RyYXRpZmllciIuY29kZSAKICArICc6JyArIEhJRS4iQnkgQWdlIFN0cmF0aWZpZXIgNSIKKyAnOicgKyBISUUuIkJ5IEdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiCisgQ29tYmluZShISUUucGF0aWVudEdyb3VwcywgJzonKQorIENvbWJpbmUoSElFLiJISVYgcHJldmVudGlvbiBpbnRlcnZlbnRpb24iLCAnOicp"
    }
  ]
}