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

Draft as of 2025-02-07

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="HIVIND22Logic"/>
  <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.22 Logic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">HIVIND22Logic</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-HIVIND22Logic.html">HIV.IND.22 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>Number of people who were identified and tested using partner testing services and who received their results</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.22 Logic
 * Ref No: HTS.5
 * Short Name: HTS partner services
 *
 * Definition: Number of people who were identified and tested using partner testing services and who received their results
 *
 * Numerator: For the general population: Number of elicited partners and other contacts* of people diagnosed with HIV who received HTS |  | Additional cascade data collected: | • Number of people diagnosed with HIV (index cases) offered partner services | • Number of people diagnosed with HIV (index cases) accepting partner services | • Number of contacts/partners of people living with HIV whose information is elicited from people diagnosed with HIV (index cases) |  | For key populations: Number of elicited contacts1 of members of key populations who received HTS. | Additional cascade data collected: | • Number of key population members offered social network-based/partner services | • Number of key population members accepting social network-based/partner services | • Number of contacts of key population members elicited
 * Numerator Calculation: COUNT of clients &quot;Referred through partner services&quot; that are a 'Partner or contact of an index case' AND &quot;Type of contact or partner for partner services&quot; IN 'Sexual partner', 'Drug-injecting partner' with &quot;HIV test date&quot; AND &quot;Date HIV test results returned&quot; in the reporting period
 * Numerator Exclusions: 
 *
 * Denominator: 1
 * Denominator Calculation: 1
 * Denominator Exclusions: 
 *
 * Disaggregations:
 * • By index case gender (male, female, other**) 
 *  • Age (0–4, 5–9, 10–14, 15–19, 20–24, 25–49, 50+ years)*** 
 *  • HIV status of partner or contact (already known positive, newly diagnosed positive, negative) 
 *  • 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)**** 
 *  • Cities and other administrative regions of epidemiologic importance
 *
 * Disaggregation Elements: *Gender [of index case] | Age | Partner HIV status (reported) | HIV status of contact | Key population member type
 *
 * Numerator and Denominator Elements:
 * Date HIV test results returned 
 *  HIV test date 
 *  Referred through partner services 
 *  Type of contact or partner for partner services
 *
 * 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.B.DE5: Referred through partner services | Client reported coming to the facility after receiving a provider-assisted referral or patient referral from a contact or partner
 * HIV.B.DE6: Partner or contact of an index case | The client is a contact or partner of a person diagnosed with HIV (an index case)
 * HIV.B.DE7: Partner or contact of an HIV testing client (non-index case) | The client is a contact or partner identified through partner or social network services, but is not known to be a partner of an index-case
 * HIV.B.DE8: Type of contact or partner for partner services | Client's relationship to the person that referred the client for partner services or family services
 * HIV.B.DE9: Biological child | Client is the biological child of the person that referred the client for family services
 * HIV.B.DE10: Drug-injecting partner | Client is a drug-injecting partner of the person that referred the client for partner services
 * HIV.B.DE11: Sexual partner | Client is a sexual partner of the person that referred the client for partner services
 * HIV.B.DE12: Social contact | Client is a social contact of the person that referred the client for social-network services
 * HIV.B.DE33: Partner HIV status (reported) | The HIV status of the client's partner.
 * HIV.B.DE34: HIV-positive | Client's partner is HIV-positive
 * HIV.B.DE35: HIV-negative | Client's partner is HIV-negative
 * HIV.B.DE36: Unknown | Don't know HIV status - client does not know partner's HIV status
 * 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.DE60: Date HIV test results returned | Date HIV test result returned to client
 * HIV.B.DE110: HIV test date | Date of the HIV test
 * 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.E.DE224: HIV test date | Date of the HIV test
 * HIV.PRV.DE11: HIV status of contact | The HIV status of the client's contact
 * HIV.PRV.DE12: HIV-positive | Client's contact is HIV-positive
 * HIV.PRV.DE13: HIV-negative | Client's contact is HIV-negative
 * HIV.PRV.DE14: Unknown | Client does not know contact's HIV status
 * HIV.SRV.DE1: HIV test date | Date of the HIV test
 *
 * Additional Context
 * - what it measures: This measures the coverage and impact of the testing cascade of services for partners and other contacts* of people living with HIV, including key population members.
 * - rationale: • Contact testing, including among sexual partners, has been shown to increase the diagnosis of already-infected contacts and partners of newly identified HIV cases. | • Among serodiscordant couples, partner notification and testing can be a critical step in preventing infection of the uninfected partner. | • Contact and/or partner notification and testing should be voluntary and provided with supportive services.
 * - method: Patient monitoring data (HIV index testing services register or logbook, HTS registers or reporting forms) or EMR
 * 
 * Suggested Scoring Method: continuous-variable | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cv-measure-cqfm
 */

library HIVIND22Logic

// 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 HIVIndicatorElements called HIE
include HIVElements called HE

// 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

/**
 * Measure Population
 *
 * Definition: For the general population: Number of elicited partners and other contacts* of people diagnosed with HIV who received HTS |  | Additional cascade data collected: | • Number of people diagnosed with HIV (index cases) offered partner services | • Number of people diagnosed with HIV (index cases) accepting partner services | • Number of contacts/partners of people living with HIV whose information is elicited from people diagnosed with HIV (index cases) |  | For key populations: Number of elicited contacts1 of members of key populations who received HTS. | Additional cascade data collected: | • Number of key population members offered social network-based/partner services | • Number of key population members accepting social network-based/partner services | • Number of contacts of key population members elicited
 * Calculation: For the general population: Number of elicited partners and other contacts* of people diagnosed with HIV who received HTS |  | Additional cascade data collected: | • Number of people diagnosed with HIV (index cases) offered partner services | • Number of people diagnosed with HIV (index cases) accepting partner services | • Number of contacts/partners of people living with HIV whose information is elicited from people diagnosed with HIV (index cases) |  | For key populations: Number of elicited contacts1 of members of key populations who received HTS. | Additional cascade data collected: | • Number of key population members offered social network-based/partner services | • Number of key population members accepting social network-based/partner services | • Number of contacts of key population members elicited
 */
                                                       
define &quot;Measure Population&quot;:
    exists(HE.&quot;Partner or contact of an index case&quot; IC
    with HE.&quot;Drug-injecting partner&quot; DIP
      such that IC.hasMember.references(DIP)
    with HIE.&quot;HIV test results returned in measurement period&quot; HIV
      such that IC.hasMember.references(HIV)
      and HIV.issued.toInterval() during &quot;Measurement Period&quot;)
    or 
    exists(HE.&quot;Partner or contact of an index case&quot; IC
    with HE.&quot;Sexual partner&quot; SP
      such that IC.hasMember.references(SP)
      with HIE.&quot;HIV test results returned in measurement period&quot; HIV
      such that IC.hasMember.references(HIV)
      and HIV.issued.toInterval() during &quot;Measurement Period&quot;)



/**
 * Measure Observation
 * Definition: For the general population: Number of elicited partners and other contacts* of people diagnosed with HIV who received HTS |  | Additional cascade data collected: | • Number of people diagnosed with HIV (index cases) offered partner services | • Number of people diagnosed with HIV (index cases) accepting partner services | • Number of contacts/partners of people living with HIV whose information is elicited from people diagnosed with HIV (index cases) |  | For key populations: Number of elicited contacts1 of members of key populations who received HTS. | Additional cascade data collected: | • Number of key population members offered social network-based/partner services | • Number of key population members accepting social network-based/partner services | • Number of contacts of key population members elicited
 * Calculation: For the general population: Number of elicited partners and other contacts* of people diagnosed with HIV who received HTS |  | Additional cascade data collected: | • Number of people diagnosed with HIV (index cases) offered partner services | • Number of people diagnosed with HIV (index cases) accepting partner services | • Number of contacts/partners of people living with HIV whose information is elicited from people diagnosed with HIV (index cases) |  | For key populations: Number of elicited contacts1 of members of key populations who received HTS. | Additional cascade data collected: | • Number of key population members offered social network-based/partner services | • Number of key population members accepting social network-based/partner services | • Number of contacts of key population members elicited                                                      
 */     

define function &quot;Measure Observation&quot;(Patient &quot;Patient&quot;):
  1
/* end Populations */

/*
 * Disaggregators
 */

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

define &quot;Age Stratifier&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;HIV status of partner or contact&quot;:
  HIE.&quot;HIV status of partner or contact&quot;

define &quot;Stratification&quot;:
 HIE.&quot;By Administrative Gender Stratifier&quot;.code 
 + ':' + HIE.&quot;HIV status of partner or contact&quot;.code
  + ':' + HIE.&quot;By Age Stratifier 2&quot;
+ ':' + HIE.&quot;By Geographic Region Stratifier&quot;
+ Combine(HIE.patientGroups, ':')
</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/HIVIND22Logic"/>
  <version value="0.4.3"/>
  <name value="HIVIND22Logic"/>
  <title value="HIV.IND.22 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="Number of people who were identified and tested using partner testing services and who received their results"/>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuMjIgTG9naWMKICogUmVmIE5vOiBIVFMuNQogKiBTaG9ydCBOYW1lOiBIVFMgcGFydG5lciBzZXJ2aWNlcwogKgogKiBEZWZpbml0aW9uOiBOdW1iZXIgb2YgcGVvcGxlIHdobyB3ZXJlIGlkZW50aWZpZWQgYW5kIHRlc3RlZCB1c2luZyBwYXJ0bmVyIHRlc3Rpbmcgc2VydmljZXMgYW5kIHdobyByZWNlaXZlZCB0aGVpciByZXN1bHRzCiAqCiAqIE51bWVyYXRvcjogRm9yIHRoZSBnZW5lcmFsIHBvcHVsYXRpb246IE51bWJlciBvZiBlbGljaXRlZCBwYXJ0bmVycyBhbmQgb3RoZXIgY29udGFjdHMqIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgd2hvIHJlY2VpdmVkIEhUUyB8ICB8IEFkZGl0aW9uYWwgY2FzY2FkZSBkYXRhIGNvbGxlY3RlZDogfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBvZmZlcmVkIHBhcnRuZXIgc2VydmljZXMgfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBhY2NlcHRpbmcgcGFydG5lciBzZXJ2aWNlcyB8IOKAosKgTnVtYmVyIG9mIGNvbnRhY3RzL3BhcnRuZXJzIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2hvc2UgaW5mb3JtYXRpb24gaXMgZWxpY2l0ZWQgZnJvbSBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIChpbmRleCBjYXNlcykgfCAgfCBGb3Iga2V5IHBvcHVsYXRpb25zOiBOdW1iZXIgb2YgZWxpY2l0ZWQgY29udGFjdHMxIG9mIG1lbWJlcnMgb2Yga2V5IHBvcHVsYXRpb25zIHdobyByZWNlaXZlZCBIVFMuIHwgQWRkaXRpb25hbCBjYXNjYWRlIGRhdGEgY29sbGVjdGVkOiB8IOKAosKgTnVtYmVyIG9mIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMgb2ZmZXJlZCBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGFjY2VwdGluZyBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBjb250YWN0cyBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGVsaWNpdGVkCiAqIE51bWVyYXRvciBDYWxjdWxhdGlvbjogQ09VTlQgb2YgY2xpZW50cyAiUmVmZXJyZWQgdGhyb3VnaCBwYXJ0bmVyIHNlcnZpY2VzIiB0aGF0IGFyZSBhICdQYXJ0bmVyIG9yIGNvbnRhY3Qgb2YgYW4gaW5kZXggY2FzZScgQU5EICJUeXBlIG9mIGNvbnRhY3Qgb3IgcGFydG5lciBmb3IgcGFydG5lciBzZXJ2aWNlcyIgSU4gJ1NleHVhbCBwYXJ0bmVyJywgJ0RydWctaW5qZWN0aW5nIHBhcnRuZXInIHdpdGggIkhJViB0ZXN0IGRhdGUiIEFORCAiRGF0ZSBISVYgdGVzdCByZXN1bHRzIHJldHVybmVkIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKiBOdW1lcmF0b3IgRXhjbHVzaW9uczogCiAqCiAqIERlbm9taW5hdG9yOiAxCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiAxCiAqIERlbm9taW5hdG9yIEV4Y2x1c2lvbnM6IAogKgogKiBEaXNhZ2dyZWdhdGlvbnM6CiAqIOKAosKgQnkgaW5kZXggY2FzZSBnZW5kZXIgKG1hbGUsIGZlbWFsZSwgb3RoZXIqKikgCiAqICDigKLCoEFnZSAoMOKAkzQsIDXigJM5LCAxMOKAkzE0LCAxNeKAkzE5LCAyMOKAkzI0LCAyNeKAkzQ5LCA1MCsgeWVhcnMpKioqIAogKiAg4oCiIEhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0IChhbHJlYWR5IGtub3duIHBvc2l0aXZlLCBuZXdseSBkaWFnbm9zZWQgcG9zaXRpdmUsIG5lZ2F0aXZlKSAKICogIOKAosKgS2V5IHBvcHVsYXRpb25zIChtZW4gd2hvIGhhdmUgc2V4IHdpdGggbWVuLCBwZW9wbGUgbGl2aW5nIGluIHByaXNvbnMgYW5kIG90aGVyIGNsb3NlZCBzZXR0aW5ncywgcGVvcGxlIHdobyBpbmplY3QgZHJ1Z3MsIHNleCB3b3JrZXJzLCB0cmFucyBhbmQgZ2VuZGVyIGRpdmVyc2UgcGVvcGxlKSoqKiogCiAqICDigKLCoENpdGllcyBhbmQgb3RoZXIgYWRtaW5pc3RyYXRpdmUgcmVnaW9ucyBvZiBlcGlkZW1pb2xvZ2ljIGltcG9ydGFuY2UKICoKICogRGlzYWdncmVnYXRpb24gRWxlbWVudHM6ICpHZW5kZXIgW29mIGluZGV4IGNhc2VdIHwgQWdlIHwgUGFydG5lciBISVYgc3RhdHVzIChyZXBvcnRlZCkgfCBISVYgc3RhdHVzIG9mIGNvbnRhY3QgfCBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZQogKgogKiBOdW1lcmF0b3IgYW5kIERlbm9taW5hdG9yIEVsZW1lbnRzOgogKiBEYXRlIEhJViB0ZXN0IHJlc3VsdHMgcmV0dXJuZWQgCiAqICBISVYgdGVzdCBkYXRlIAogKiAgUmVmZXJyZWQgdGhyb3VnaCBwYXJ0bmVyIHNlcnZpY2VzIAogKiAgVHlwZSBvZiBjb250YWN0IG9yIHBhcnRuZXIgZm9yIHBhcnRuZXIgc2VydmljZXMKICoKICogUmVmZXJlbmNlOiBDb25zb2xpZGF0ZWQgZ3VpZGVsaW5lcyBvbiBwZXJzb24tY2VudHJlZCBISVYgc3RyYXRlZ2ljIGluZm9ybWF0aW9uOiBzdHJlbmd0aGVuaW5nIHJvdXRpbmUgZGF0YSBmb3IgaW1wYWN0LiBHZW5ldmE6IFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb247IDIwMjIKICogCiAqIERhdGEgQ29uY2VwdHM6CiAqIEhJVi5BLkRFMTc6IEFnZSB8IENhbGN1bGF0ZWQgYWdlIChudW1iZXIgb2YgeWVhcnMpIG9mIHRoZSBjbGllbnQgYmFzZWQgb24gZGF0ZSBvZiBiaXJ0aAogKiBISVYuQi5ERTU6IFJlZmVycmVkIHRocm91Z2ggcGFydG5lciBzZXJ2aWNlcyB8IENsaWVudCByZXBvcnRlZCBjb21pbmcgdG8gdGhlIGZhY2lsaXR5IGFmdGVyIHJlY2VpdmluZyBhIHByb3ZpZGVyLWFzc2lzdGVkIHJlZmVycmFsIG9yIHBhdGllbnQgcmVmZXJyYWwgZnJvbSBhIGNvbnRhY3Qgb3IgcGFydG5lcgogKiBISVYuQi5ERTY6IFBhcnRuZXIgb3IgY29udGFjdCBvZiBhbiBpbmRleCBjYXNlIHwgVGhlIGNsaWVudCBpcyBhIGNvbnRhY3Qgb3IgcGFydG5lciBvZiBhIHBlcnNvbiBkaWFnbm9zZWQgd2l0aCBISVYgKGFuIGluZGV4IGNhc2UpCiAqIEhJVi5CLkRFNzogUGFydG5lciBvciBjb250YWN0IG9mIGFuIEhJViB0ZXN0aW5nIGNsaWVudCAobm9uLWluZGV4IGNhc2UpIHwgVGhlIGNsaWVudCBpcyBhIGNvbnRhY3Qgb3IgcGFydG5lciBpZGVudGlmaWVkIHRocm91Z2ggcGFydG5lciBvciBzb2NpYWwgbmV0d29yayBzZXJ2aWNlcywgYnV0IGlzIG5vdCBrbm93biB0byBiZSBhIHBhcnRuZXIgb2YgYW4gaW5kZXgtY2FzZQogKiBISVYuQi5ERTg6IFR5cGUgb2YgY29udGFjdCBvciBwYXJ0bmVyIGZvciBwYXJ0bmVyIHNlcnZpY2VzIHwgQ2xpZW50J3MgcmVsYXRpb25zaGlwIHRvIHRoZSBwZXJzb24gdGhhdCByZWZlcnJlZCB0aGUgY2xpZW50IGZvciBwYXJ0bmVyIHNlcnZpY2VzIG9yIGZhbWlseSBzZXJ2aWNlcwogKiBISVYuQi5ERTk6IEJpb2xvZ2ljYWwgY2hpbGQgfCBDbGllbnQgaXMgdGhlIGJpb2xvZ2ljYWwgY2hpbGQgb2YgdGhlIHBlcnNvbiB0aGF0IHJlZmVycmVkIHRoZSBjbGllbnQgZm9yIGZhbWlseSBzZXJ2aWNlcwogKiBISVYuQi5ERTEwOiBEcnVnLWluamVjdGluZyBwYXJ0bmVyIHwgQ2xpZW50IGlzIGEgZHJ1Zy1pbmplY3RpbmcgcGFydG5lciBvZiB0aGUgcGVyc29uIHRoYXQgcmVmZXJyZWQgdGhlIGNsaWVudCBmb3IgcGFydG5lciBzZXJ2aWNlcwogKiBISVYuQi5ERTExOiBTZXh1YWwgcGFydG5lciB8IENsaWVudCBpcyBhIHNleHVhbCBwYXJ0bmVyIG9mIHRoZSBwZXJzb24gdGhhdCByZWZlcnJlZCB0aGUgY2xpZW50IGZvciBwYXJ0bmVyIHNlcnZpY2VzCiAqIEhJVi5CLkRFMTI6IFNvY2lhbCBjb250YWN0IHwgQ2xpZW50IGlzIGEgc29jaWFsIGNvbnRhY3Qgb2YgdGhlIHBlcnNvbiB0aGF0IHJlZmVycmVkIHRoZSBjbGllbnQgZm9yIHNvY2lhbC1uZXR3b3JrIHNlcnZpY2VzCiAqIEhJVi5CLkRFMzM6IFBhcnRuZXIgSElWIHN0YXR1cyAocmVwb3J0ZWQpIHwgVGhlIEhJViBzdGF0dXMgb2YgdGhlIGNsaWVudCdzIHBhcnRuZXIuCiAqIEhJVi5CLkRFMzQ6IEhJVi1wb3NpdGl2ZSB8IENsaWVudCdzIHBhcnRuZXIgaXMgSElWLXBvc2l0aXZlCiAqIEhJVi5CLkRFMzU6IEhJVi1uZWdhdGl2ZSB8IENsaWVudCdzIHBhcnRuZXIgaXMgSElWLW5lZ2F0aXZlCiAqIEhJVi5CLkRFMzY6IFVua25vd24gfCBEb24ndCBrbm93IEhJViBzdGF0dXMgLSBjbGllbnQgZG9lcyBub3Qga25vdyBwYXJ0bmVyJ3MgSElWIHN0YXR1cwogKiBISVYuQi5ERTUwOiBLZXkgcG9wdWxhdGlvbiBtZW1iZXIgdHlwZSogfCBUaGUgdHlwZSBvZiBrZXkgcG9wdWxhdGlvbiB0aGF0IHRoZSBjbGllbnQgaXMgaW5jbHVkZWQgaW4KICogSElWLkIuREU1MTogU2V4IHdvcmtlciB8IENsaWVudCBpcyBhIHNleCB3b3JrZXIKICogSElWLkIuREU1MjogTWVuIHdobyBoYXZlIHNleCB3aXRoIG1lbiB8IENsaWVudCBpcyBhIG1hbiB3aG8gaGFzIHNleCB3aXRoIG1lbgogKiBISVYuQi5ERTUzOiBUcmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UgcGVvcGxlIHwgQ2xpZW50IGlkZW50aWZpZXMgYXMgdHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlCiAqIEhJVi5CLkRFNTQ6IFBlb3BsZSB3aG8gaW5qZWN0IGRydWdzIHwgQ2xpZW50IGlzIGEgcGVyc29uIHdobyBpbmplY3RzIGRydWdzCiAqIEhJVi5CLkRFNTU6IFBlb3BsZSBsaXZpbmcgaW4gcHJpc29ucyBhbmQgb3RoZXIgY2xvc2VkIHNldHRpbmdzIHwgQ2xpZW50IGxpdmVzIGluIGEgcHJpc29uIG9yIGFub3RoZXIgY2xvc2VkIHNldHRpbmcKICogSElWLkIuREU2MDogRGF0ZSBISVYgdGVzdCByZXN1bHRzIHJldHVybmVkIHwgRGF0ZSBISVYgdGVzdCByZXN1bHQgcmV0dXJuZWQgdG8gY2xpZW50CiAqIEhJVi5CLkRFMTEwOiBISVYgdGVzdCBkYXRlIHwgRGF0ZSBvZiB0aGUgSElWIHRlc3QKICogSElWLkUuREUxMTQ6IEtleSBwb3B1bGF0aW9uIG1lbWJlciB0eXBlKiB8IFRoZSB0eXBlIG9mIGtleSBwb3B1bGF0aW9uIHRoYXQgdGhlIGluZmFudCdzIG1vdGhlciBpcyBpbmNsdWRlZCBpbgogKiBISVYuRS5ERTExNTogU2V4IHdvcmtlciB8IEluZmFudCdzIG1vdGhlciBpcyBhIHNleCB3b3JrZXIKICogSElWLkUuREUxMTY6IFBlb3BsZSB3aG8gaW5qZWN0IGRydWdzIHwgSW5mYW50J3MgbW90aGVyIGlzIGEgcGVyc29uIHdobyBpbmplY3RzIGRydWdzCiAqIEhJVi5FLkRFMTE3OiBUcmFucyBhbmQgZ2VuZGVyLWRpdmVyc2UgcGVvcGxlIHwgSW5mYW50J3MgbW90aGVyIGlkZW50aWZpZXMgYXMgdHJhbnMgYW5kIGdlbmRlci1kaXZlcnNlCiAqIEhJVi5FLkRFMTE4OiBQZW9wbGUgbGl2aW5nIGluIHByaXNvbnMgYW5kIG90aGVyIGNsb3NlZCBzZXR0aW5nIHwgSW5mYW50J3MgbW90aGVyIGlzIGluIGEgcHJpc29uIG9yIGNsb3NlZCBzZXR0aW5nCiAqIEhJVi5FLkRFMjI0OiBISVYgdGVzdCBkYXRlIHwgRGF0ZSBvZiB0aGUgSElWIHRlc3QKICogSElWLlBSVi5ERTExOiBISVYgc3RhdHVzIG9mIGNvbnRhY3QgfCBUaGUgSElWIHN0YXR1cyBvZiB0aGUgY2xpZW50J3MgY29udGFjdAogKiBISVYuUFJWLkRFMTI6IEhJVi1wb3NpdGl2ZSB8IENsaWVudCdzIGNvbnRhY3QgaXMgSElWLXBvc2l0aXZlCiAqIEhJVi5QUlYuREUxMzogSElWLW5lZ2F0aXZlIHwgQ2xpZW50J3MgY29udGFjdCBpcyBISVYtbmVnYXRpdmUKICogSElWLlBSVi5ERTE0OiBVbmtub3duIHwgQ2xpZW50IGRvZXMgbm90IGtub3cgY29udGFjdCdzIEhJViBzdGF0dXMKICogSElWLlNSVi5ERTE6IEhJViB0ZXN0IGRhdGUgfCBEYXRlIG9mIHRoZSBISVYgdGVzdAogKgogKiBBZGRpdGlvbmFsIENvbnRleHQKICogLSB3aGF0IGl0IG1lYXN1cmVzOiBUaGlzIG1lYXN1cmVzIHRoZSBjb3ZlcmFnZSBhbmQgaW1wYWN0IG9mIHRoZSB0ZXN0aW5nIGNhc2NhZGUgb2Ygc2VydmljZXMgZm9yIHBhcnRuZXJzIGFuZCBvdGhlciBjb250YWN0cyogb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViwgaW5jbHVkaW5nIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMuCiAqIC0gcmF0aW9uYWxlOiDigKLCoENvbnRhY3QgdGVzdGluZywgaW5jbHVkaW5nIGFtb25nIHNleHVhbCBwYXJ0bmVycywgaGFzIGJlZW4gc2hvd24gdG8gaW5jcmVhc2UgdGhlIGRpYWdub3NpcyBvZiBhbHJlYWR5LWluZmVjdGVkIGNvbnRhY3RzIGFuZCBwYXJ0bmVycyBvZiBuZXdseSBpZGVudGlmaWVkIEhJViBjYXNlcy4gfCDigKLCoEFtb25nIHNlcm9kaXNjb3JkYW50IGNvdXBsZXMsIHBhcnRuZXIgbm90aWZpY2F0aW9uIGFuZCB0ZXN0aW5nIGNhbiBiZSBhIGNyaXRpY2FsIHN0ZXAgaW4gcHJldmVudGluZyBpbmZlY3Rpb24gb2YgdGhlIHVuaW5mZWN0ZWQgcGFydG5lci4gfCDigKIgQ29udGFjdCBhbmQvb3IgcGFydG5lciBub3RpZmljYXRpb24gYW5kIHRlc3Rpbmcgc2hvdWxkIGJlIHZvbHVudGFyeSBhbmQgcHJvdmlkZWQgd2l0aCBzdXBwb3J0aXZlIHNlcnZpY2VzLgogKiAtIG1ldGhvZDogUGF0aWVudCBtb25pdG9yaW5nIGRhdGEgKEhJViBpbmRleCB0ZXN0aW5nIHNlcnZpY2VzIHJlZ2lzdGVyIG9yIGxvZ2Jvb2ssIEhUUyByZWdpc3RlcnMgb3IgcmVwb3J0aW5nIGZvcm1zKSBvciBFTVIKICogCiAqIFN1Z2dlc3RlZCBTY29yaW5nIE1ldGhvZDogY29udGludW91cy12YXJpYWJsZSB8IGh0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY3FmbWVhc3VyZXMvU3RydWN0dXJlRGVmaW5pdGlvbi9jdi1tZWFzdXJlLWNxZm0KICovCgpsaWJyYXJ5IEhJVklORDIyTG9naWMKCi8vIEluY2x1ZGVkIExpYnJhcmllcwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDb20KaW5jbHVkZSBISVZJbmRpY2F0b3JFbGVtZW50cyBjYWxsZWQgSElFCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCgovLyBJbmRpY2F0b3IgRGVmaW5pdGlvbgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZT4gZGVmYXVsdCBJbnRlcnZhbFtAMjAyMy0wMS0wMSwgQDIwMjMtMDEtMzBdCgpjb250ZXh0IFBhdGllbnQKLyogUG9wdWxhdGlvbnMgKi8KCi8qCiAqSW5pdGlhbCBQb3B1bGF0aW9uCiAqLwoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogIHRydWUKCi8qKgogKiBNZWFzdXJlIFBvcHVsYXRpb24KICoKICogRGVmaW5pdGlvbjogRm9yIHRoZSBnZW5lcmFsIHBvcHVsYXRpb246IE51bWJlciBvZiBlbGljaXRlZCBwYXJ0bmVycyBhbmQgb3RoZXIgY29udGFjdHMqIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgd2hvIHJlY2VpdmVkIEhUUyB8ICB8IEFkZGl0aW9uYWwgY2FzY2FkZSBkYXRhIGNvbGxlY3RlZDogfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBvZmZlcmVkIHBhcnRuZXIgc2VydmljZXMgfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBhY2NlcHRpbmcgcGFydG5lciBzZXJ2aWNlcyB8IOKAosKgTnVtYmVyIG9mIGNvbnRhY3RzL3BhcnRuZXJzIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2hvc2UgaW5mb3JtYXRpb24gaXMgZWxpY2l0ZWQgZnJvbSBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIChpbmRleCBjYXNlcykgfCAgfCBGb3Iga2V5IHBvcHVsYXRpb25zOiBOdW1iZXIgb2YgZWxpY2l0ZWQgY29udGFjdHMxIG9mIG1lbWJlcnMgb2Yga2V5IHBvcHVsYXRpb25zIHdobyByZWNlaXZlZCBIVFMuIHwgQWRkaXRpb25hbCBjYXNjYWRlIGRhdGEgY29sbGVjdGVkOiB8IOKAosKgTnVtYmVyIG9mIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMgb2ZmZXJlZCBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGFjY2VwdGluZyBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBjb250YWN0cyBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGVsaWNpdGVkCiAqIENhbGN1bGF0aW9uOiBGb3IgdGhlIGdlbmVyYWwgcG9wdWxhdGlvbjogTnVtYmVyIG9mIGVsaWNpdGVkIHBhcnRuZXJzIGFuZCBvdGhlciBjb250YWN0cyogb2YgcGVvcGxlIGRpYWdub3NlZCB3aXRoIEhJViB3aG8gcmVjZWl2ZWQgSFRTIHwgIHwgQWRkaXRpb25hbCBjYXNjYWRlIGRhdGEgY29sbGVjdGVkOiB8IOKAoiBOdW1iZXIgb2YgcGVvcGxlIGRpYWdub3NlZCB3aXRoIEhJViAoaW5kZXggY2FzZXMpIG9mZmVyZWQgcGFydG5lciBzZXJ2aWNlcyB8IOKAoiBOdW1iZXIgb2YgcGVvcGxlIGRpYWdub3NlZCB3aXRoIEhJViAoaW5kZXggY2FzZXMpIGFjY2VwdGluZyBwYXJ0bmVyIHNlcnZpY2VzIHwg4oCiwqBOdW1iZXIgb2YgY29udGFjdHMvcGFydG5lcnMgb2YgcGVvcGxlIGxpdmluZyB3aXRoIEhJViB3aG9zZSBpbmZvcm1hdGlvbiBpcyBlbGljaXRlZCBmcm9tIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSB8ICB8IEZvciBrZXkgcG9wdWxhdGlvbnM6IE51bWJlciBvZiBlbGljaXRlZCBjb250YWN0czEgb2YgbWVtYmVycyBvZiBrZXkgcG9wdWxhdGlvbnMgd2hvIHJlY2VpdmVkIEhUUy4gfCBBZGRpdGlvbmFsIGNhc2NhZGUgZGF0YSBjb2xsZWN0ZWQ6IHwg4oCiwqBOdW1iZXIgb2Yga2V5IHBvcHVsYXRpb24gbWVtYmVycyBvZmZlcmVkIHNvY2lhbCBuZXR3b3JrLWJhc2VkL3BhcnRuZXIgc2VydmljZXMgfCDigKIgTnVtYmVyIG9mIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMgYWNjZXB0aW5nIHNvY2lhbCBuZXR3b3JrLWJhc2VkL3BhcnRuZXIgc2VydmljZXMgfCDigKIgTnVtYmVyIG9mIGNvbnRhY3RzIG9mIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMgZWxpY2l0ZWQKICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZGVmaW5lICJNZWFzdXJlIFBvcHVsYXRpb24iOgogICAgZXhpc3RzKEhFLiJQYXJ0bmVyIG9yIGNvbnRhY3Qgb2YgYW4gaW5kZXggY2FzZSIgSUMKICAgIHdpdGggSEUuIkRydWctaW5qZWN0aW5nIHBhcnRuZXIiIERJUAogICAgICBzdWNoIHRoYXQgSUMuaGFzTWVtYmVyLnJlZmVyZW5jZXMoRElQKQogICAgd2l0aCBISUUuIkhJViB0ZXN0IHJlc3VsdHMgcmV0dXJuZWQgaW4gbWVhc3VyZW1lbnQgcGVyaW9kIiBISVYKICAgICAgc3VjaCB0aGF0IElDLmhhc01lbWJlci5yZWZlcmVuY2VzKEhJVikKICAgICAgYW5kIEhJVi5pc3N1ZWQudG9JbnRlcnZhbCgpIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIikKICAgIG9yIAogICAgZXhpc3RzKEhFLiJQYXJ0bmVyIG9yIGNvbnRhY3Qgb2YgYW4gaW5kZXggY2FzZSIgSUMKICAgIHdpdGggSEUuIlNleHVhbCBwYXJ0bmVyIiBTUAogICAgICBzdWNoIHRoYXQgSUMuaGFzTWVtYmVyLnJlZmVyZW5jZXMoU1ApCiAgICAgIHdpdGggSElFLiJISVYgdGVzdCByZXN1bHRzIHJldHVybmVkIGluIG1lYXN1cmVtZW50IHBlcmlvZCIgSElWCiAgICAgIHN1Y2ggdGhhdCBJQy5oYXNNZW1iZXIucmVmZXJlbmNlcyhISVYpCiAgICAgIGFuZCBISVYuaXNzdWVkLnRvSW50ZXJ2YWwoKSBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIpCgoKCi8qKgogKiBNZWFzdXJlIE9ic2VydmF0aW9uCiAqIERlZmluaXRpb246IEZvciB0aGUgZ2VuZXJhbCBwb3B1bGF0aW9uOiBOdW1iZXIgb2YgZWxpY2l0ZWQgcGFydG5lcnMgYW5kIG90aGVyIGNvbnRhY3RzKiBvZiBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIHdobyByZWNlaXZlZCBIVFMgfCAgfCBBZGRpdGlvbmFsIGNhc2NhZGUgZGF0YSBjb2xsZWN0ZWQ6IHwg4oCiIE51bWJlciBvZiBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIChpbmRleCBjYXNlcykgb2ZmZXJlZCBwYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIChpbmRleCBjYXNlcykgYWNjZXB0aW5nIHBhcnRuZXIgc2VydmljZXMgfCDigKLCoE51bWJlciBvZiBjb250YWN0cy9wYXJ0bmVycyBvZiBwZW9wbGUgbGl2aW5nIHdpdGggSElWIHdob3NlIGluZm9ybWF0aW9uIGlzIGVsaWNpdGVkIGZyb20gcGVvcGxlIGRpYWdub3NlZCB3aXRoIEhJViAoaW5kZXggY2FzZXMpIHwgIHwgRm9yIGtleSBwb3B1bGF0aW9uczogTnVtYmVyIG9mIGVsaWNpdGVkIGNvbnRhY3RzMSBvZiBtZW1iZXJzIG9mIGtleSBwb3B1bGF0aW9ucyB3aG8gcmVjZWl2ZWQgSFRTLiB8IEFkZGl0aW9uYWwgY2FzY2FkZSBkYXRhIGNvbGxlY3RlZDogfCDigKLCoE51bWJlciBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIG9mZmVyZWQgc29jaWFsIG5ldHdvcmstYmFzZWQvcGFydG5lciBzZXJ2aWNlcyB8IOKAoiBOdW1iZXIgb2Yga2V5IHBvcHVsYXRpb24gbWVtYmVycyBhY2NlcHRpbmcgc29jaWFsIG5ldHdvcmstYmFzZWQvcGFydG5lciBzZXJ2aWNlcyB8IOKAoiBOdW1iZXIgb2YgY29udGFjdHMgb2Yga2V5IHBvcHVsYXRpb24gbWVtYmVycyBlbGljaXRlZAogKiBDYWxjdWxhdGlvbjogRm9yIHRoZSBnZW5lcmFsIHBvcHVsYXRpb246IE51bWJlciBvZiBlbGljaXRlZCBwYXJ0bmVycyBhbmQgb3RoZXIgY29udGFjdHMqIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgd2hvIHJlY2VpdmVkIEhUUyB8ICB8IEFkZGl0aW9uYWwgY2FzY2FkZSBkYXRhIGNvbGxlY3RlZDogfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBvZmZlcmVkIHBhcnRuZXIgc2VydmljZXMgfCDigKIgTnVtYmVyIG9mIHBlb3BsZSBkaWFnbm9zZWQgd2l0aCBISVYgKGluZGV4IGNhc2VzKSBhY2NlcHRpbmcgcGFydG5lciBzZXJ2aWNlcyB8IOKAosKgTnVtYmVyIG9mIGNvbnRhY3RzL3BhcnRuZXJzIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2hvc2UgaW5mb3JtYXRpb24gaXMgZWxpY2l0ZWQgZnJvbSBwZW9wbGUgZGlhZ25vc2VkIHdpdGggSElWIChpbmRleCBjYXNlcykgfCAgfCBGb3Iga2V5IHBvcHVsYXRpb25zOiBOdW1iZXIgb2YgZWxpY2l0ZWQgY29udGFjdHMxIG9mIG1lbWJlcnMgb2Yga2V5IHBvcHVsYXRpb25zIHdobyByZWNlaXZlZCBIVFMuIHwgQWRkaXRpb25hbCBjYXNjYWRlIGRhdGEgY29sbGVjdGVkOiB8IOKAosKgTnVtYmVyIG9mIGtleSBwb3B1bGF0aW9uIG1lbWJlcnMgb2ZmZXJlZCBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGFjY2VwdGluZyBzb2NpYWwgbmV0d29yay1iYXNlZC9wYXJ0bmVyIHNlcnZpY2VzIHwg4oCiIE51bWJlciBvZiBjb250YWN0cyBvZiBrZXkgcG9wdWxhdGlvbiBtZW1iZXJzIGVsaWNpdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAqLyAgICAgCgpkZWZpbmUgZnVuY3Rpb24gIk1lYXN1cmUgT2JzZXJ2YXRpb24iKFBhdGllbnQgIlBhdGllbnQiKToKICAxCi8qIGVuZCBQb3B1bGF0aW9ucyAqLwoKLyoKICogRGlzYWdncmVnYXRvcnMKICovCgpkZWZpbmUgIkFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiCgpkZWZpbmUgIkFnZSBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgQWdlIFN0cmF0aWZpZXIgMiIKCmRlZmluZSAiR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciI6CglISUUuIkJ5IEdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiCgpkZWZpbmUgInBhdGllbnRHcm91cHMgU3RyYXRpZmllciI6CglISUUuInBhdGllbnRHcm91cHMiCgpkZWZpbmUgIkhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0IjoKICBISUUuIkhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0IgoKZGVmaW5lICJTdHJhdGlmaWNhdGlvbiI6CiBISUUuIkJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIi5jb2RlIAogKyAnOicgKyBISUUuIkhJViBzdGF0dXMgb2YgcGFydG5lciBvciBjb250YWN0Ii5jb2RlCiAgKyAnOicgKyBISUUuIkJ5IEFnZSBTdHJhdGlmaWVyIDIiCisgJzonICsgSElFLiJCeSBHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIgorIENvbWJpbmUoSElFLnBhdGllbnRHcm91cHMsICc6JykK"/>
  </content>
</Library>