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.34 Logic - XML Representation

Draft as of 2025-02-07

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="HIVIND34Logic"/>
  <meta>
    <profile
             value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
    <profile
             value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
    <profile
             value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
    <profile
             value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"/>
  </meta>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
<div>
    <table class="grid dict">
        
        
        <tr>
            <th scope="row"><b>Title: </b></th>
            <td style="padding-left: 4px;">HIV.IND.34 Logic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">HIVIND34Logic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">0.4.3</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-HIVIND34Logic.html">HIV.IND.34 Logic</a></td>
        </tr>
        

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Experimental: </b></th>
            <td style="padding-left: 4px;">true</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Type: </b></th>
            <td style="padding-left: 4px;">
                
                    
                        
                        <p style="margin-bottom: 5px;">
                            <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>
                        </p>
                        
                        
                        <p style="margin-bottom: 5px;">
                            <b>code: </b> <span>logic-library</span>
                        </p>
                        
                        
                    
                
                
            </td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Date: </b></th>
            <td style="padding-left: 4px;">2025-02-07 14:15:45+0000</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">WHO</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Description: </b></th>
            <td style="padding-left: 4px;"><div><p>% of people living with HIV receiving ART with VL ≥1000 copies/mL who received a follow-up viral load test within three months</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        

        

        

        
        
        <tr>
          <td colspan="2">
            <table>
              <tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
              <tr><td><pre><code class="language-cql">/**
 * Library: HIV.IND.34 Logic
 * Ref No: ART.8
 * Short Name: Appropriate second viral load test after adherence counselling
 *
 * Definition: % of people living with HIV receiving ART with VL ≥1000 copies/mL who received a follow-up viral load test within three months
 *
 * Numerator: Number of people living with HIV on ART who received a follow-up VL test three months after a VL test result of ≥1000 copies/mL during the reporting period*
 * Numerator Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;Date of viral load sample collection&quot; within reporting period AND &quot;Viral load test result&quot; GREATER THAN 1000 copies/mL AND follow-up &quot;Date of viral load sample collection&quot; LESS THAN 3 months AFTER elevated viral load result
 * Numerator Exclusions: 
 *
 * Denominator: Number of people living with HIV on ART with VL ≥1000 copies/mL during the reporting period
 * Denominator Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;Date of viral load sample collection&quot; within reporting period AND &quot;Viral load test result&quot; GREATER THAN 1000 copies/mL
 * Denominator Exclusions: 
 *
 * Disaggregations:
 * • Gender (female, male, other**) 
 *  • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–49, 50+ years)*** 
 *  • 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)**** 
 *  • ART regimen 
 *  • Receipt of enhanced adherence counselling (yes/no/unknown) 
 *  • Cities and other administrative regions of epidemiologic importance
 *
 * Disaggregation Elements: Gender | Age | Key population member type | Current ART regimen | Enhanced adherence counselling provided
 *
 * Numerator and Denominator Elements:
 * Date of viral load sample collection 
 *  HIV status 
 *  On ART 
 *  Viral load test result
 *
 * Reference: Consolidated guidelines on person-centred HIV strategic information: strengthening routine data for impact. Geneva: World Health Organization; 2022
 * 
 * Data Concepts:
 * HIV.A.DE17: Age | Calculated age (number of years) of the client based on date of birth
 * HIV.A.DE18: Gender* | Gender of the client*
 * HIV.A.DE19: Female | Client identifies as female
 * HIV.A.DE20: Male | Client identifies as male
 * HIV.A.DE21: Transgender male | Client identifies as transgender male
 * HIV.A.DE22: Transgender female | Client identifies as transgender female
 * HIV.A.DE23: Other | Additional category
 * HIV.B.DE50: Key population member type* | The type of key population that the client is included in
 * HIV.B.DE51: Sex worker | Client is a sex worker
 * HIV.B.DE52: Men who have sex with men | Client is a man who has sex with men
 * HIV.B.DE53: Trans and gender-diverse people | Client identifies as trans and gender-diverse
 * HIV.B.DE54: People who inject drugs | Client is a person who injects drugs
 * HIV.B.DE55: People living in prisons and other closed settings | Client lives in a prison or another closed setting
 * 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.
 * HIV.B.DE116: HIV-positive | Client is HIV-positive
 * HIV.B.DE117: HIV-negative | Client is HIV-negative
 * HIV.B.DE118: Unknown | Client has unknown HIV status
 * HIV.D.DE38: On ART | Client is currently taking ART
 * HIV.D.DE75: Current ART regimen | The current ART regimen the client is taking
 * HIV.D.DE194: Date of viral load sample collection | Date and time when the sample was collected to test the client's HIV viral load
 * HIV.D.DE387: Viral load test result | Result from the viral load test in number of copies/mL
 * HIV.D.DE496: Enhanced adherence counselling provided | Enhanced adherence counselling was provided to the client during the visit
 * HIV.E.DE114: Key population member type* | The type of key population that the infant's mother is included in
 * HIV.E.DE115: Sex worker | Infant's mother is a sex worker
 * HIV.E.DE116: People who inject drugs | Infant's mother is a person who injects drugs
 * HIV.E.DE117: Trans and gender-diverse people | Infant's mother identifies as trans and gender-diverse
 * HIV.E.DE118: People living in prisons and other closed setting | Infant's mother is in a prison or closed setting
 * HIV.G.DE8: Date of viral load sample collection | Date and time when the sample was collected to test the client's HIV viral load
 * HIV.G.DE12: Viral load test result | Result from the viral load test in number of copies/mL
 * HIV.H.DE47: On ART | Client is currently taking ART 
 * HIV.SRV.DE12: Date of viral load sample collection | Date and time when the sample was collected to test the client's HIV viral load
 * HIV.SRV.DE13: Viral load test result | Result from the viral load test in number of copies/mL
 *
 * Additional Context
 * - what it measures: Measures the extent to which people living with HIV with non-suppressed VL receive appropriate follow-up VL testing to check virologic suppression.
 * - rationale: • Virologic suppression is essential to the 95–95–95-related impact goals. | • This indicator complements the VL testing coverage (ART.6) and VL suppression (ART.3) indicators.
 * - method: For the numerator and denominator: HIV patient monitoring tools (for example, ART registers, EMRs, laboratory information system) |  | The recommended maximum reporting period is 12 months. Shorter reporting intervals, for example, three months, are recommended where feasible.
 * 
 * Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm
 */

library HIVIND34Logic

// Included Libraries
using FHIR version '4.0.1'

include HIVCommon version '0.0.1' called HIC
include FHIRHelpers version '4.0.1'
include WHOCommon called WCom
include HIVElements called HE
include HIVIndicatorElements called HIE

// Indicator Definition
parameter &quot;Measurement Period&quot; Interval&lt;Date&gt; default Interval[@2023-01-01, @2023-01-30]

context Patient
/* Populations */

/*
 *Initial Population
 */

define &quot;Initial Population&quot;:
  true

/**
 * Numerator
 * 
 * Definition: Number of people living with HIV on ART who received a follow-up VL test three months after a VL test result of ≥1000 copies/mL during the reporting period*
 * Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;Date of viral load sample collection&quot; within reporting period AND &quot;Viral load test result&quot; GREATER THAN 1000 copies/mL AND follow-up &quot;Date of viral load sample collection&quot; LESS THAN 3 months AFTER elevated viral load result
 */

define &quot;Numerator&quot;:
  HIE.&quot;Has HIV-positive Status&quot;
  and HIE.&quot;On ART H.DE47&quot;
  and 
    exists(HIE.&quot;Elevated Viral load test during Measurement Period&quot;)
  and 
    exists(
      HE.&quot;viral load sample collection&quot; VL
      where (months between (start of First(HIE.&quot;Elevated Viral load test during Measurement Period&quot;).issued.toInterval()) and (date from start of VL.performed.toInterval() ) &lt; 3 months)
      
      
    )



/**
 * Denominator
 *
 * Definition: Number of people living with HIV on ART with VL ≥1000 copies/mL during the reporting period
 * Calculation: COUNT of clients with &quot;HIV status&quot;='HIV-positive' AND &quot;On ART&quot;=True AND &quot;Date of viral load sample collection&quot; within reporting period AND &quot;Viral load test result&quot; GREATER THAN 1000 copies/mL
 */

define &quot;Denominator&quot;:
  HIE.&quot;Has HIV-positive Status&quot;
  and HIE.&quot;On ART H.DE47&quot;
  and 
    exists(HIE.&quot;Elevated Viral load test during Measurement Period&quot;)
    

/* end Populations */

/*
 * Disaggregators
 */

define &quot;Administrative Gender Stratifier&quot;:
	HIE.&quot;By Administrative Gender Stratifier&quot;

define &quot;Age Stratifier 2&quot;:
	HIE.&quot;By Age Stratifier 2&quot;

define &quot;Geographic Region Stratifier&quot;:
	HIE.&quot;By Geographic Region Stratifier&quot;

define &quot;patientGroups Stratifier&quot;:
	HIE.&quot;patientGroups&quot;

define &quot;Current ART regimen&quot;:
  HIE.&quot;Current ART regimen&quot;

define &quot;Enhanced adherence counselling provided Disaggregation&quot;:
  HIE.&quot;Enhanced adherence counselling provided Disaggregation&quot;

define &quot;Stratification&quot;:
 HIE.&quot;By Administrative Gender Stratifier&quot;.code 
  + ':' + HIE.&quot;By Age Stratifier 2&quot;
+ ':' + HIE.&quot;By Geographic Region Stratifier&quot;
+ Combine(HIE.patientGroups, ':')
+ HIE.&quot;Current ART regimen&quot;.code 
+ HIE.&quot;Enhanced adherence counselling provided Disaggregation&quot;.code
</code></pre></td></tr>
            </table>
          </td>
        </tr>
        
        
        
    </table>
</div>
</div>
  </text>
  <extension
             url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
    <valueCode value="computable"/>
  </extension>
  <url value="http://smart.who.int/hiv/Library/HIVIND34Logic"/>
  <version value="0.4.3"/>
  <name value="HIVIND34Logic"/>
  <title value="HIV.IND.34 Logic"/>
  <status value="draft"/>
  <experimental value="true"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2025-02-07T14:15:45+00:00"/>
  <publisher value="WHO"/>
  <contact>
    <name value="WHO"/>
    <telecom>
      <system value="url"/>
      <value value="http://who.int"/>
    </telecom>
  </contact>
  <description
               value="% of people living with HIV receiving ART with VL ≥1000 copies/mL who received a follow-up viral load test within three months"/>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuMzQgTG9naWMKICogUmVmIE5vOiBBUlQuOAogKiBTaG9ydCBOYW1lOiBBcHByb3ByaWF0ZSBzZWNvbmQgdmlyYWwgbG9hZCB0ZXN0IGFmdGVyIGFkaGVyZW5jZSBjb3Vuc2VsbGluZwogKgogKiBEZWZpbml0aW9uOiAlIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgcmVjZWl2aW5nIEFSVCB3aXRoIFZMIOKJpTEwMDAgY29waWVzL21MIHdobyByZWNlaXZlZCBhIGZvbGxvdy11cCB2aXJhbCBsb2FkIHRlc3Qgd2l0aGluIHRocmVlIG1vbnRocwogKgogKiBOdW1lcmF0b3I6IE51bWJlciBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIG9uIEFSVCB3aG8gcmVjZWl2ZWQgYSBmb2xsb3ctdXAgVkwgdGVzdCB0aHJlZSBtb250aHMgYWZ0ZXIgYSBWTCB0ZXN0IHJlc3VsdCBvZiDiiaUxMDAwIGNvcGllcy9tTCBkdXJpbmcgdGhlIHJlcG9ydGluZyBwZXJpb2QqCiAqIE51bWVyYXRvciBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgIk9uIEFSVCI9VHJ1ZSBBTkQgIkRhdGUgb2YgdmlyYWwgbG9hZCBzYW1wbGUgY29sbGVjdGlvbiIgd2l0aGluIHJlcG9ydGluZyBwZXJpb2QgQU5EICJWaXJhbCBsb2FkIHRlc3QgcmVzdWx0IiBHUkVBVEVSIFRIQU4gMTAwMCBjb3BpZXMvbUwgQU5EIGZvbGxvdy11cCAiRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIiBMRVNTIFRIQU4gMyBtb250aHMgQUZURVIgZWxldmF0ZWQgdmlyYWwgbG9hZCByZXN1bHQKICogTnVtZXJhdG9yIEV4Y2x1c2lvbnM6IAogKgogKiBEZW5vbWluYXRvcjogTnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgb24gQVJUIHdpdGggVkwg4omlMTAwMCBjb3BpZXMvbUwgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBjbGllbnRzIHdpdGggIkhJViBzdGF0dXMiPSdISVYtcG9zaXRpdmUnIEFORCAiT24gQVJUIj1UcnVlIEFORCAiRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIiB3aXRoaW4gcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlZpcmFsIGxvYWQgdGVzdCByZXN1bHQiIEdSRUFURVIgVEhBTiAxMDAwIGNvcGllcy9tTAogKiBEZW5vbWluYXRvciBFeGNsdXNpb25zOiAKICoKICogRGlzYWdncmVnYXRpb25zOgogKiDigKLCoEdlbmRlciAoZmVtYWxlLCBtYWxlLCBvdGhlcioqKSAKICogIOKAosKgQWdlICgw4oCTNCwgNeKAkzksIDEw4oCTMTQsIDE14oCTMTksIDIw4oCTMjQsIDI14oCTNDksIDUwKyB5ZWFycykqKiogCiAqICDigKLCoEtleSBwb3B1bGF0aW9ucyAobWVuIHdobyBoYXZlIHNleCB3aXRoIG1lbiwgcGVvcGxlIGxpdmluZyBpbiBwcmlzb25zIGFuZCBvdGhlciBjbG9zZWQgc2V0dGluZ3MsIHBlb3BsZSB3aG8gaW5qZWN0IGRydWdzLCBzZXggd29ya2VycywgdHJhbnMgYW5kIGdlbmRlciBkaXZlcnNlIHBlb3BsZSkqKioqIAogKiAg4oCiwqBBUlQgcmVnaW1lbiAKICogIOKAosKgUmVjZWlwdCBvZiBlbmhhbmNlZCBhZGhlcmVuY2UgY291bnNlbGxpbmcgKHllcy9uby91bmtub3duKSAKICogIOKAoiBDaXRpZXMgYW5kIG90aGVyIGFkbWluaXN0cmF0aXZlIHJlZ2lvbnMgb2YgZXBpZGVtaW9sb2dpYyBpbXBvcnRhbmNlCiAqCiAqIERpc2FnZ3JlZ2F0aW9uIEVsZW1lbnRzOiBHZW5kZXIgfCBBZ2UgfCBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSB8IEN1cnJlbnQgQVJUIHJlZ2ltZW4gfCBFbmhhbmNlZCBhZGhlcmVuY2UgY291bnNlbGxpbmcgcHJvdmlkZWQKICoKICogTnVtZXJhdG9yIGFuZCBEZW5vbWluYXRvciBFbGVtZW50czoKICogRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIAogKiAgSElWIHN0YXR1cyAKICogIE9uIEFSVCAKICogIFZpcmFsIGxvYWQgdGVzdCByZXN1bHQKICoKICogUmVmZXJlbmNlOiBDb25zb2xpZGF0ZWQgZ3VpZGVsaW5lcyBvbiBwZXJzb24tY2VudHJlZCBISVYgc3RyYXRlZ2ljIGluZm9ybWF0aW9uOiBzdHJlbmd0aGVuaW5nIHJvdXRpbmUgZGF0YSBmb3IgaW1wYWN0LiBHZW5ldmE6IFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb247IDIwMjIKICogCiAqIERhdGEgQ29uY2VwdHM6CiAqIEhJVi5BLkRFMTc6IEFnZSB8IENhbGN1bGF0ZWQgYWdlIChudW1iZXIgb2YgeWVhcnMpIG9mIHRoZSBjbGllbnQgYmFzZWQgb24gZGF0ZSBvZiBiaXJ0aAogKiBISVYuQS5ERTE4OiBHZW5kZXIqIHwgR2VuZGVyIG9mIHRoZSBjbGllbnQqCiAqIEhJVi5BLkRFMTk6IEZlbWFsZSB8IENsaWVudCBpZGVudGlmaWVzIGFzIGZlbWFsZQogKiBISVYuQS5ERTIwOiBNYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgbWFsZQogKiBISVYuQS5ERTIxOiBUcmFuc2dlbmRlciBtYWxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnNnZW5kZXIgbWFsZQogKiBISVYuQS5ERTIyOiBUcmFuc2dlbmRlciBmZW1hbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyB0cmFuc2dlbmRlciBmZW1hbGUKICogSElWLkEuREUyMzogT3RoZXIgfCBBZGRpdGlvbmFsIGNhdGVnb3J5CiAqIEhJVi5CLkRFNTA6IEtleSBwb3B1bGF0aW9uIG1lbWJlciB0eXBlKiB8IFRoZSB0eXBlIG9mIGtleSBwb3B1bGF0aW9uIHRoYXQgdGhlIGNsaWVudCBpcyBpbmNsdWRlZCBpbgogKiBISVYuQi5ERTUxOiBTZXggd29ya2VyIHwgQ2xpZW50IGlzIGEgc2V4IHdvcmtlcgogKiBISVYuQi5ERTUyOiBNZW4gd2hvIGhhdmUgc2V4IHdpdGggbWVuIHwgQ2xpZW50IGlzIGEgbWFuIHdobyBoYXMgc2V4IHdpdGggbWVuCiAqIEhJVi5CLkRFNTM6IFRyYW5zIGFuZCBnZW5kZXItZGl2ZXJzZSBwZW9wbGUgfCBDbGllbnQgaWRlbnRpZmllcyBhcyB0cmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UKICogSElWLkIuREU1NDogUGVvcGxlIHdobyBpbmplY3QgZHJ1Z3MgfCBDbGllbnQgaXMgYSBwZXJzb24gd2hvIGluamVjdHMgZHJ1Z3MKICogSElWLkIuREU1NTogUGVvcGxlIGxpdmluZyBpbiBwcmlzb25zIGFuZCBvdGhlciBjbG9zZWQgc2V0dGluZ3MgfCBDbGllbnQgbGl2ZXMgaW4gYSBwcmlzb24gb3IgYW5vdGhlciBjbG9zZWQgc2V0dGluZwogKiBISVYuQi5ERTExNTogSElWIHN0YXR1cyB8IEhJViBzdGF0dXMgcmVwb3J0ZWQgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5hdGlvbmFsIEhJViB0ZXN0aW5nIGFsZ29yaXRobS4gTm8gc2luZ2xlIEhJViB0ZXN0IGNhbiBwcm92aWRlIGFuIEhJVi1wb3NpdGl2ZSBkaWFnbm9zaXMuCiAqIEhJVi5CLkRFMTE2OiBISVYtcG9zaXRpdmUgfCBDbGllbnQgaXMgSElWLXBvc2l0aXZlCiAqIEhJVi5CLkRFMTE3OiBISVYtbmVnYXRpdmUgfCBDbGllbnQgaXMgSElWLW5lZ2F0aXZlCiAqIEhJVi5CLkRFMTE4OiBVbmtub3duIHwgQ2xpZW50IGhhcyB1bmtub3duIEhJViBzdGF0dXMKICogSElWLkQuREUzODogT24gQVJUIHwgQ2xpZW50IGlzIGN1cnJlbnRseSB0YWtpbmcgQVJUCiAqIEhJVi5ELkRFNzU6IEN1cnJlbnQgQVJUIHJlZ2ltZW4gfCBUaGUgY3VycmVudCBBUlQgcmVnaW1lbiB0aGUgY2xpZW50IGlzIHRha2luZwogKiBISVYuRC5ERTE5NDogRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIHwgRGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCB0byB0ZXN0IHRoZSBjbGllbnQncyBISVYgdmlyYWwgbG9hZAogKiBISVYuRC5ERTM4NzogVmlyYWwgbG9hZCB0ZXN0IHJlc3VsdCB8IFJlc3VsdCBmcm9tIHRoZSB2aXJhbCBsb2FkIHRlc3QgaW4gbnVtYmVyIG9mIGNvcGllcy9tTAogKiBISVYuRC5ERTQ5NjogRW5oYW5jZWQgYWRoZXJlbmNlIGNvdW5zZWxsaW5nIHByb3ZpZGVkIHwgRW5oYW5jZWQgYWRoZXJlbmNlIGNvdW5zZWxsaW5nIHdhcyBwcm92aWRlZCB0byB0aGUgY2xpZW50IGR1cmluZyB0aGUgdmlzaXQKICogSElWLkUuREUxMTQ6IEtleSBwb3B1bGF0aW9uIG1lbWJlciB0eXBlKiB8IFRoZSB0eXBlIG9mIGtleSBwb3B1bGF0aW9uIHRoYXQgdGhlIGluZmFudCdzIG1vdGhlciBpcyBpbmNsdWRlZCBpbgogKiBISVYuRS5ERTExNTogU2V4IHdvcmtlciB8IEluZmFudCdzIG1vdGhlciBpcyBhIHNleCB3b3JrZXIKICogSElWLkUuREUxMTY6IFBlb3BsZSB3aG8gaW5qZWN0IGRydWdzIHwgSW5mYW50J3MgbW90aGVyIGlzIGEgcGVyc29uIHdobyBpbmplY3RzIGRydWdzCiAqIEhJVi5FLkRFMTE3OiBUcmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UgcGVvcGxlIHwgSW5mYW50J3MgbW90aGVyIGlkZW50aWZpZXMgYXMgdHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlCiAqIEhJVi5FLkRFMTE4OiBQZW9wbGUgbGl2aW5nIGluIHByaXNvbnMgYW5kIG90aGVyIGNsb3NlZCBzZXR0aW5nIHwgSW5mYW50J3MgbW90aGVyIGlzIGluIGEgcHJpc29uIG9yIGNsb3NlZCBzZXR0aW5nCiAqIEhJVi5HLkRFODogRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIHwgRGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCB0byB0ZXN0IHRoZSBjbGllbnQncyBISVYgdmlyYWwgbG9hZAogKiBISVYuRy5ERTEyOiBWaXJhbCBsb2FkIHRlc3QgcmVzdWx0IHwgUmVzdWx0IGZyb20gdGhlIHZpcmFsIGxvYWQgdGVzdCBpbiBudW1iZXIgb2YgY29waWVzL21MCiAqIEhJVi5ILkRFNDc6IE9uIEFSVCB8IENsaWVudCBpcyBjdXJyZW50bHkgdGFraW5nIEFSVCAKICogSElWLlNSVi5ERTEyOiBEYXRlIG9mIHZpcmFsIGxvYWQgc2FtcGxlIGNvbGxlY3Rpb24gfCBEYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHNhbXBsZSB3YXMgY29sbGVjdGVkIHRvIHRlc3QgdGhlIGNsaWVudCdzIEhJViB2aXJhbCBsb2FkCiAqIEhJVi5TUlYuREUxMzogVmlyYWwgbG9hZCB0ZXN0IHJlc3VsdCB8IFJlc3VsdCBmcm9tIHRoZSB2aXJhbCBsb2FkIHRlc3QgaW4gbnVtYmVyIG9mIGNvcGllcy9tTAogKgogKiBBZGRpdGlvbmFsIENvbnRleHQKICogLSB3aGF0IGl0IG1lYXN1cmVzOiBNZWFzdXJlcyB0aGUgZXh0ZW50IHRvIHdoaWNoIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2l0aCBub24tc3VwcHJlc3NlZCBWTCByZWNlaXZlIGFwcHJvcHJpYXRlIGZvbGxvdy11cCBWTCB0ZXN0aW5nIHRvIGNoZWNrIHZpcm9sb2dpYyBzdXBwcmVzc2lvbi4KICogLSByYXRpb25hbGU6IOKAosKgVmlyb2xvZ2ljIHN1cHByZXNzaW9uIGlzIGVzc2VudGlhbCB0byB0aGUgOTXigJM5NeKAkzk1LXJlbGF0ZWQgaW1wYWN0IGdvYWxzLiB8IOKAosKgVGhpcyBpbmRpY2F0b3IgY29tcGxlbWVudHMgdGhlIFZMIHRlc3RpbmcgY292ZXJhZ2UgKEFSVC42KSBhbmQgVkwgc3VwcHJlc3Npb24gKEFSVC4zKSBpbmRpY2F0b3JzLgogKiAtIG1ldGhvZDogRm9yIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yOiBISVYgcGF0aWVudCBtb25pdG9yaW5nIHRvb2xzIChmb3IgZXhhbXBsZSwgQVJUIHJlZ2lzdGVycywgRU1ScywgbGFib3JhdG9yeSBpbmZvcm1hdGlvbiBzeXN0ZW0pIHwgIHwgVGhlIHJlY29tbWVuZGVkIG1heGltdW0gcmVwb3J0aW5nIHBlcmlvZCBpcyAxMiBtb250aHMuIFNob3J0ZXIgcmVwb3J0aW5nIGludGVydmFscywgZm9yIGV4YW1wbGUsIHRocmVlIG1vbnRocywgYXJlIHJlY29tbWVuZGVkIHdoZXJlIGZlYXNpYmxlLgogKiAKICogU3VnZ2VzdGVkIFNjb3JpbmcgTWV0aG9kOiBwcm9wb3J0aW9uIHwgaHR0cDovL2hsNy5vcmcvZmhpci91cy9jcWZtZWFzdXJlcy9TdHJ1Y3R1cmVEZWZpbml0aW9uL3Byb3BvcnRpb24tbWVhc3VyZS1jcWZtCiAqLwoKbGlicmFyeSBISVZJTkQzNExvZ2ljCgovLyBJbmNsdWRlZCBMaWJyYXJpZXMKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgSElWQ29tbW9uIHZlcnNpb24gJzAuMC4xJyBjYWxsZWQgSElDCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQ29tCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCmluY2x1ZGUgSElWSW5kaWNhdG9yRWxlbWVudHMgY2FsbGVkIEhJRQoKLy8gSW5kaWNhdG9yIERlZmluaXRpb24KcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGU+IGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjMtMDEtMDEsIEAyMDIzLTAxLTMwXQoKY29udGV4dCBQYXRpZW50Ci8qIFBvcHVsYXRpb25zICovCgovKgogKkluaXRpYWwgUG9wdWxhdGlvbgogKi8KCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICB0cnVlCgovKioKICogTnVtZXJhdG9yCiAqIAogKiBEZWZpbml0aW9uOiBOdW1iZXIgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViBvbiBBUlQgd2hvIHJlY2VpdmVkIGEgZm9sbG93LXVwIFZMIHRlc3QgdGhyZWUgbW9udGhzIGFmdGVyIGEgVkwgdGVzdCByZXN1bHQgb2Yg4omlMTAwMCBjb3BpZXMvbUwgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kKgogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyB3aXRoICJISVYgc3RhdHVzIj0nSElWLXBvc2l0aXZlJyBBTkQgIk9uIEFSVCI9VHJ1ZSBBTkQgIkRhdGUgb2YgdmlyYWwgbG9hZCBzYW1wbGUgY29sbGVjdGlvbiIgd2l0aGluIHJlcG9ydGluZyBwZXJpb2QgQU5EICJWaXJhbCBsb2FkIHRlc3QgcmVzdWx0IiBHUkVBVEVSIFRIQU4gMTAwMCBjb3BpZXMvbUwgQU5EIGZvbGxvdy11cCAiRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIiBMRVNTIFRIQU4gMyBtb250aHMgQUZURVIgZWxldmF0ZWQgdmlyYWwgbG9hZCByZXN1bHQKICovCgpkZWZpbmUgIk51bWVyYXRvciI6CiAgSElFLiJIYXMgSElWLXBvc2l0aXZlIFN0YXR1cyIKICBhbmQgSElFLiJPbiBBUlQgSC5ERTQ3IgogIGFuZCAKICAgIGV4aXN0cyhISUUuIkVsZXZhdGVkIFZpcmFsIGxvYWQgdGVzdCBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIikKICBhbmQgCiAgICBleGlzdHMoCiAgICAgIEhFLiJ2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIiBWTAogICAgICB3aGVyZSAobW9udGhzIGJldHdlZW4gKHN0YXJ0IG9mIEZpcnN0KEhJRS4iRWxldmF0ZWQgVmlyYWwgbG9hZCB0ZXN0IGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiKS5pc3N1ZWQudG9JbnRlcnZhbCgpKSBhbmQgKGRhdGUgZnJvbSBzdGFydCBvZiBWTC5wZXJmb3JtZWQudG9JbnRlcnZhbCgpICkgPCAzIG1vbnRocykKICAgICAgCiAgICAgIAogICAgKQoKCgovKioKICogRGVub21pbmF0b3IKICoKICogRGVmaW5pdGlvbjogTnVtYmVyIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgb24gQVJUIHdpdGggVkwg4omlMTAwMCBjb3BpZXMvbUwgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBjbGllbnRzIHdpdGggIkhJViBzdGF0dXMiPSdISVYtcG9zaXRpdmUnIEFORCAiT24gQVJUIj1UcnVlIEFORCAiRGF0ZSBvZiB2aXJhbCBsb2FkIHNhbXBsZSBjb2xsZWN0aW9uIiB3aXRoaW4gcmVwb3J0aW5nIHBlcmlvZCBBTkQgIlZpcmFsIGxvYWQgdGVzdCByZXN1bHQiIEdSRUFURVIgVEhBTiAxMDAwIGNvcGllcy9tTAogKi8KCmRlZmluZSAiRGVub21pbmF0b3IiOgogIEhJRS4iSGFzIEhJVi1wb3NpdGl2ZSBTdGF0dXMiCiAgYW5kIEhJRS4iT24gQVJUIEguREU0NyIKICBhbmQgCiAgICBleGlzdHMoSElFLiJFbGV2YXRlZCBWaXJhbCBsb2FkIHRlc3QgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIpCiAgICAKCi8qIGVuZCBQb3B1bGF0aW9ucyAqLwoKLyoKICogRGlzYWdncmVnYXRvcnMKICovCgpkZWZpbmUgIkFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiCgpkZWZpbmUgIkFnZSBTdHJhdGlmaWVyIDIiOgoJSElFLiJCeSBBZ2UgU3RyYXRpZmllciAyIgoKZGVmaW5lICJHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKCmRlZmluZSAicGF0aWVudEdyb3VwcyBTdHJhdGlmaWVyIjoKCUhJRS4icGF0aWVudEdyb3VwcyIKCmRlZmluZSAiQ3VycmVudCBBUlQgcmVnaW1lbiI6CiAgSElFLiJDdXJyZW50IEFSVCByZWdpbWVuIgoKZGVmaW5lICJFbmhhbmNlZCBhZGhlcmVuY2UgY291bnNlbGxpbmcgcHJvdmlkZWQgRGlzYWdncmVnYXRpb24iOgogIEhJRS4iRW5oYW5jZWQgYWRoZXJlbmNlIGNvdW5zZWxsaW5nIHByb3ZpZGVkIERpc2FnZ3JlZ2F0aW9uIgoKZGVmaW5lICJTdHJhdGlmaWNhdGlvbiI6CiBISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIi5jb2RlIAogICsgJzonICsgSElFLiJCeSBBZ2UgU3RyYXRpZmllciAyIgorICc6JyArIEhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKKyBDb21iaW5lKEhJRS5wYXRpZW50R3JvdXBzLCAnOicpCisgSElFLiJDdXJyZW50IEFSVCByZWdpbWVuIi5jb2RlIAorIEhJRS4iRW5oYW5jZWQgYWRoZXJlbmNlIGNvdW5zZWxsaW5nIHByb3ZpZGVkIERpc2FnZ3JlZ2F0aW9uIi5jb2RlCg=="/>
  </content>
</Library>