WHO Immunization Implementation Guide
1.0.0 - release

WHO Immunization Implementation Guide, published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-immunizations/tree/132/merge and changes regularly. See the Directory of published versions

: IMMZD18SRotavirusLogic - XML Representation

Draft as of 2026-03-31

Raw xml | Download


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

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

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

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

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</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/7.1.0/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;">2026-03-31 13:54:17+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>This library defines decision support logic for the IMMZ.D18.S.Rotavirus schedule table in the Immunization CPG</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Related Artifacts: </b></th>
            <td style="padding-left: 4px;">
                
                
                
                <p><b>Dependencies</b></p>
                <ul>
                  
                    <li><a href="Library-WHOCommon.html">WHOCommon</a></li>
                  
                    <li><a href="Library-IMMZCommon.html">IMMZCommon</a></li>
                  
                    <li><a href="Library-IMMZConcepts.html">IMMZConcepts</a></li>
                  
                    <li><a href="Library-IMMZEncounterElements.html">IMMZEncounterElements</a></li>
                  
                    <li><a href="Library-IMMZD2DTRotavirusEncounterElements.html">IMMZD2DTRotavirusEncounterElements</a></li>
                  
                </ul>
                
                
                
                
                
            </td>
        </tr>
        

        
        <tr>
          <th scope="row"><b>Parameters: </b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>
              
                <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>
              
                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>First rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Second rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 2 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Third rotavirus dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Rotavirus dose 3 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
            </table>
          </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: IMMZD18SRotavirusLogic (IMMZ.D18.S.Rotavirus schedule)
 * Schedule Table: IMMZ.D18.S.Rotavirus schedule
 */
library IMMZD18SRotavirusLogic

using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'

include WHOCommon called WC

include IMMZCommon called Common
include IMMZConcepts called Concepts

include IMMZEncounterElements called IE
include IMMZD2DTRotavirusEncounterElements called Encounter

parameter Today Date default Today()


context Patient


/*
@output: Rotavirus dose 1
@description: Provision of the rotavirus first dose
@trigger: Child's birth
@pseudo: 
@triggerDate: &quot;Date of birth&quot;
*/
define &quot;Rotavirus dose 1&quot;:
  Encounter.&quot;No rotavirus primary series doses were administered&quot;
  and &quot;Rotavirus dose 1 Expiration&quot; after day of Today
  and not &quot;First rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 1 Create
@create: WHO recommends that the first dose of rotavirus vaccine be administered as soon as possible after 6 weeks of age.
*/
define &quot;Rotavirus dose 1 Create&quot;:
  if &quot;Rotavirus dose 1&quot;
  then 'WHO recommends that the first dose of rotavirus vaccine be administered as soon as possible after 6 weeks of age.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 1 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 1 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 1 Due Date
@pseudocode: &quot;Date of birth&quot; + 6 weeks
*/
define &quot;Rotavirus dose 1 Due Date&quot;:
  if &quot;Rotavirus dose 1&quot; then Patient.birthDate + 6 weeks
  else null


/*
@dynamicValue: Rotavirus dose 1 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 1 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 1 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 1 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: First rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1
*/
define &quot;First rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;One rotavirus primary series dose was administered&quot;



/*
@output: Rotavirus dose 2
@description: Provision of the rotavirus second dose
@trigger: First rotavirus dose from the primary series was administered
@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1
@triggerDate: Latest &quot;Date and time of vaccination&quot; where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;
*/
define &quot;Rotavirus dose 2&quot;:
  &quot;First rotavirus dose from the primary series was administered&quot;
  and &quot;Rotavirus dose 2 Expiration&quot; after day of Today
  and not &quot;Second rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 2 Create
@create: A minimum interval of 4 weeks should be maintained between doses.
*/
define &quot;Rotavirus dose 2 Create&quot;:
  if &quot;Rotavirus dose 2&quot;
  then 'A minimum interval of 4 weeks should be maintained between doses.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 2 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 2 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 2 Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;) + 4 weeks
*/
define &quot;Rotavirus dose 2 Due Date&quot;:
  if &quot;Rotavirus dose 2&quot; then Encounter.&quot;Date of Latest Rotavirus Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Rotavirus dose 2 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 2 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 2 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 2 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: Second rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 2
*/
define &quot;Second rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;Two rotavirus primary series doses were administered&quot;



/*
@output: Rotavirus dose 3
@description: Provision of a rotavirus third dose
@trigger: For a series containing more than two doses, two rotavirus primary series doses of mixed series or a series with unknown vaccine products were administered
@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;and &quot;Type of dose&quot; = &quot;Primary series&quot; ) = 2 
AND &quot;Vaccine brand&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; AND &quot;Dose number&quot; = 1) ≠ &quot;Vaccine brand&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; AND &quot;Dose number&quot; = 2) OR &quot;Total doses in series&quot; &gt; 2
@triggerDate: Latest &quot;Date and time of vaccination&quot; where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;
*/
define &quot;Rotavirus dose 3&quot;:
  &quot;Second rotavirus dose from the primary series was administered&quot;
  and (
    Encounter.&quot;The series administered to the client is a mixed series or a series with unknown vaccine products&quot;
    or Encounter.&quot;The series contain more than two doses&quot;
  )
  and &quot;Rotavirus dose 3 Expiration&quot; after day of Today
  and not &quot;Third rotavirus dose from the primary series was administered&quot;


/*
@output: Rotavirus dose 3 Create
@create: For a mixed series or a series with any unknown vaccine products, a total of 3 doses of rotavirus vaccine should be administered for a complete vaccination series.
RotaTeq, Rotavac and Rotasiil should be administered in a 3-dose schedule.
*/
define &quot;Rotavirus dose 3 Create&quot;:
  if &quot;Rotavirus dose 3&quot;
  then 'For a mixed series or a series with any unknown vaccine products, a total of 3 doses of rotavirus vaccine should be administered for a complete vaccination series.
RotaTeq, Rotavac and Rotasiil should be administered in a 3-dose schedule.' + '
Due Date: ' + ToString(&quot;Rotavirus dose 3 Due Date&quot;) + '
Expiration: ' + ToString(&quot;Rotavirus dose 3 Expiration&quot;)
  else ''


/*
@dynamicValue: Rotavirus dose 3 Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot;) + 4 weeks
*/
define &quot;Rotavirus dose 3 Due Date&quot;:
  if &quot;Rotavirus dose 3&quot; then Encounter.&quot;Date of Latest Rotavirus Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Rotavirus dose 3 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date.
*/
define &quot;Rotavirus dose 3 Overdue&quot;:
  null


/*
@dynamicValue: Rotavirus dose 3 Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Rotavirus dose 3 Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: Third rotavirus dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Rotavirus vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 3
*/
define &quot;Third rotavirus dose from the primary series was administered&quot;:
  Encounter.&quot;Three rotavirus primary series doses were administered&quot;



/*
@test: Test expected results based on example patients
*/
define &quot;Test Validation&quot;:
  case
    when Patient.id = 'Rotavirus07.1' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus08.3' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus09.3' then &quot;Rotavirus dose 1&quot;
    when Patient.id = 'Rotavirus10.3' then &quot;Rotavirus dose 2&quot;
    when Patient.id = 'Rotavirus11.3' then &quot;Rotavirus dose 2&quot;
    when Patient.id = 'Rotavirus12.4' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus13.4' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus14.5' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus15.5' then &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus16.4' then &quot;Second rotavirus dose from the primary series was administered&quot; and not &quot;Rotavirus dose 3&quot;
    when Patient.id = 'Rotavirus17.1' then &quot;Third rotavirus dose from the primary series was administered&quot;
    when Patient.id = 'Rotavirus18.1' then not &quot;Rotavirus dose 1&quot;
    else 'No test case set'
  end
</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/immunizations/Library/IMMZD18SRotavirusLogic"/>
  <version value="1.0.0"/>
  <name value="IMMZD18SRotavirusLogic"/>
  <title value="IMMZD18SRotavirusLogic"/>
  <status value="draft"/>
  <experimental value="false"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-03-31T13:54:17+00:00"/>
  <publisher value="WHO"/>
  <contact>
    <name value="WHO"/>
    <telecom>
      <system value="url"/>
      <value value="http://who.int"/>
    </telecom>
  </contact>
  <description
               value="This library defines decision support logic for the IMMZ.D18.S.Rotavirus schedule table in the Immunization CPG"/>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library WC"/>
    <resource value="http://smart.who.int/immunizations/Library/WHOCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Common"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Concepts"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZConcepts"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library IE"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZEncounterElements"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Encounter"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZD2DTRotavirusEncounterElements"/>
  </relatedArtifact>
  <parameter>
    <name value="Today"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Patient"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Patient"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name
          value="First rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 1 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name
          value="Second rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 2 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name
          value="Third rotavirus dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Rotavirus dose 3 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Test Validation"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKICogTGlicmFyeTogSU1NWkQxOFNSb3RhdmlydXNMb2dpYyAoSU1NWi5EMTguUy5Sb3RhdmlydXMgc2NoZWR1bGUpCiAqIFNjaGVkdWxlIFRhYmxlOiBJTU1aLkQxOC5TLlJvdGF2aXJ1cyBzY2hlZHVsZQogKi8KbGlicmFyeSBJTU1aRDE4U1JvdGF2aXJ1c0xvZ2ljCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDCgppbmNsdWRlIElNTVpDb21tb24gY2FsbGVkIENvbW1vbgppbmNsdWRlIElNTVpDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKCmluY2x1ZGUgSU1NWkVuY291bnRlckVsZW1lbnRzIGNhbGxlZCBJRQppbmNsdWRlIElNTVpEMkRUUm90YXZpcnVzRW5jb3VudGVyRWxlbWVudHMgY2FsbGVkIEVuY291bnRlcgoKcGFyYW1ldGVyIFRvZGF5IERhdGUgZGVmYXVsdCBUb2RheSgpCgoKY29udGV4dCBQYXRpZW50CgoKLyoKQG91dHB1dDogUm90YXZpcnVzIGRvc2UgMQpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiB0aGUgcm90YXZpcnVzIGZpcnN0IGRvc2UKQHRyaWdnZXI6IENoaWxkJ3MgYmlydGgKQHBzZXVkbzogCkB0cmlnZ2VyRGF0ZTogIkRhdGUgb2YgYmlydGgiCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMSI6CiAgRW5jb3VudGVyLiJObyByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCiAgYW5kICJSb3RhdmlydXMgZG9zZSAxIEV4cGlyYXRpb24iIGFmdGVyIGRheSBvZiBUb2RheQogIGFuZCBub3QgIkZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCgoKLyoKQG91dHB1dDogUm90YXZpcnVzIGRvc2UgMSBDcmVhdGUKQGNyZWF0ZTogV0hPIHJlY29tbWVuZHMgdGhhdCB0aGUgZmlyc3QgZG9zZSBvZiByb3RhdmlydXMgdmFjY2luZSBiZSBhZG1pbmlzdGVyZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciA2IHdlZWtzIG9mIGFnZS4KKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAxIENyZWF0ZSI6CiAgaWYgIlJvdGF2aXJ1cyBkb3NlIDEiCiAgdGhlbiAnV0hPIHJlY29tbWVuZHMgdGhhdCB0aGUgZmlyc3QgZG9zZSBvZiByb3RhdmlydXMgdmFjY2luZSBiZSBhZG1pbmlzdGVyZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciA2IHdlZWtzIG9mIGFnZS4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAxIER1ZSBEYXRlIikgKyAnCkV4cGlyYXRpb246ICcgKyBUb1N0cmluZygiUm90YXZpcnVzIGRvc2UgMSBFeHBpcmF0aW9uIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogUm90YXZpcnVzIGRvc2UgMSBEdWUgRGF0ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgNiB3ZWVrcwoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDEgRHVlIERhdGUiOgogIGlmICJSb3RhdmlydXMgZG9zZSAxIiB0aGVuIFBhdGllbnQuYmlydGhEYXRlICsgNiB3ZWVrcwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDEgT3ZlcmR1ZQpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBvdmVyZHVlIGRhdGUuCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMSBPdmVyZHVlIjoKICBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUm90YXZpcnVzIGRvc2UgMSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyAyNCBtb250aHMKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAxIEV4cGlyYXRpb24iOgogIFBhdGllbnQuYmlydGhEYXRlICsgMjQgbW9udGhzCgogIAovKgpAY29tcGxldGU6IEZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiKSA9IDEKKi8KZGVmaW5lICJGaXJzdCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIk9uZSByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIgoKCgovKgpAb3V0cHV0OiBSb3RhdmlydXMgZG9zZSAyCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIHRoZSByb3RhdmlydXMgc2Vjb25kIGRvc2UKQHRyaWdnZXI6IEZpcnN0IHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMQpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgd2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIiOgogICJGaXJzdCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgogIGFuZCAiUm90YXZpcnVzIGRvc2UgMiBFeHBpcmF0aW9uIiBhZnRlciBkYXkgb2YgVG9kYXkKICBhbmQgbm90ICJTZWNvbmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBSb3RhdmlydXMgZG9zZSAyIENyZWF0ZQpAY3JlYXRlOiBBIG1pbmltdW0gaW50ZXJ2YWwgb2YgNCB3ZWVrcyBzaG91bGQgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIGRvc2VzLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIgQ3JlYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMiIKICB0aGVuICdBIG1pbmltdW0gaW50ZXJ2YWwgb2YgNCB3ZWVrcyBzaG91bGQgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIGRvc2VzLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlJvdGF2aXJ1cyBkb3NlIDIgRHVlIERhdGUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAyIEV4cGlyYXRpb24iKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAyIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAyIER1ZSBEYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMiIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFJvdGF2aXJ1cyBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAyIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDIgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDIgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMjQgbW9udGhzCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMiBFeHBpcmF0aW9uIjoKICBQYXRpZW50LmJpcnRoRGF0ZSArIDI0IG1vbnRocwoKICAKLyoKQGNvbXBsZXRlOiBTZWNvbmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMgoqLwpkZWZpbmUgIlNlY29uZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIlR3byByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFJvdGF2aXJ1cyBkb3NlIDMKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgYSByb3RhdmlydXMgdGhpcmQgZG9zZQpAdHJpZ2dlcjogRm9yIGEgc2VyaWVzIGNvbnRhaW5pbmcgbW9yZSB0aGFuIHR3byBkb3NlcywgdHdvIHJvdGF2aXJ1cyBwcmltYXJ5IHNlcmllcyBkb3NlcyBvZiBtaXhlZCBzZXJpZXMgb3IgYSBzZXJpZXMgd2l0aCB1bmtub3duIHZhY2NpbmUgcHJvZHVjdHMgd2VyZSBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIiApID0gMiAKQU5EICJWYWNjaW5lIGJyYW5kIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUm90YXZpcnVzIHZhY2NpbmVzIiBBTkQgIkRvc2UgbnVtYmVyIiA9IDEpIOKJoCAiVmFjY2luZSBicmFuZCIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIgQU5EICJEb3NlIG51bWJlciIgPSAyKSBPUiAiVG90YWwgZG9zZXMgaW4gc2VyaWVzIiA+IDIKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iIHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIjoKICAiU2Vjb25kIHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgYW5kICgKICAgIEVuY291bnRlci4iVGhlIHNlcmllcyBhZG1pbmlzdGVyZWQgdG8gdGhlIGNsaWVudCBpcyBhIG1peGVkIHNlcmllcyBvciBhIHNlcmllcyB3aXRoIHVua25vd24gdmFjY2luZSBwcm9kdWN0cyIKICAgIG9yIEVuY291bnRlci4iVGhlIHNlcmllcyBjb250YWluIG1vcmUgdGhhbiB0d28gZG9zZXMiCiAgKQogIGFuZCAiUm90YXZpcnVzIGRvc2UgMyBFeHBpcmF0aW9uIiBhZnRlciBkYXkgb2YgVG9kYXkKICBhbmQgbm90ICJUaGlyZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgoKCi8qCkBvdXRwdXQ6IFJvdGF2aXJ1cyBkb3NlIDMgQ3JlYXRlCkBjcmVhdGU6IEZvciBhIG1peGVkIHNlcmllcyBvciBhIHNlcmllcyB3aXRoIGFueSB1bmtub3duIHZhY2NpbmUgcHJvZHVjdHMsIGEgdG90YWwgb2YgMyBkb3NlcyBvZiByb3RhdmlydXMgdmFjY2luZSBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGZvciBhIGNvbXBsZXRlIHZhY2NpbmF0aW9uIHNlcmllcy4KUm90YVRlcSwgUm90YXZhYyBhbmQgUm90YXNpaWwgc2hvdWxkIGJlIGFkbWluaXN0ZXJlZCBpbiBhIDMtZG9zZSBzY2hlZHVsZS4KKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIENyZWF0ZSI6CiAgaWYgIlJvdGF2aXJ1cyBkb3NlIDMiCiAgdGhlbiAnRm9yIGEgbWl4ZWQgc2VyaWVzIG9yIGEgc2VyaWVzIHdpdGggYW55IHVua25vd24gdmFjY2luZSBwcm9kdWN0cywgYSB0b3RhbCBvZiAzIGRvc2VzIG9mIHJvdGF2aXJ1cyB2YWNjaW5lIHNob3VsZCBiZSBhZG1pbmlzdGVyZWQgZm9yIGEgY29tcGxldGUgdmFjY2luYXRpb24gc2VyaWVzLgpSb3RhVGVxLCBSb3RhdmFjIGFuZCBSb3Rhc2lpbCBzaG91bGQgYmUgYWRtaW5pc3RlcmVkIGluIGEgMy1kb3NlIHNjaGVkdWxlLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlJvdGF2aXJ1cyBkb3NlIDMgRHVlIERhdGUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJSb3RhdmlydXMgZG9zZSAzIEV4cGlyYXRpb24iKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAzIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJSb3RhdmlydXMgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJSb3RhdmlydXMgZG9zZSAzIER1ZSBEYXRlIjoKICBpZiAiUm90YXZpcnVzIGRvc2UgMyIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFJvdGF2aXJ1cyBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBSb3RhdmlydXMgZG9zZSAzIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLgoqLwpkZWZpbmUgIlJvdGF2aXJ1cyBkb3NlIDMgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFJvdGF2aXJ1cyBkb3NlIDMgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMjQgbW9udGhzCiovCmRlZmluZSAiUm90YXZpcnVzIGRvc2UgMyBFeHBpcmF0aW9uIjoKICBQYXRpZW50LmJpcnRoRGF0ZSArIDI0IG1vbnRocwoKICAKLyoKQGNvbXBsZXRlOiBUaGlyZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG9jb2RlOiBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlJvdGF2aXJ1cyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAzCiovCmRlZmluZSAiVGhpcmQgcm90YXZpcnVzIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJUaHJlZSByb3RhdmlydXMgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkB0ZXN0OiBUZXN0IGV4cGVjdGVkIHJlc3VsdHMgYmFzZWQgb24gZXhhbXBsZSBwYXRpZW50cwoqLwpkZWZpbmUgIlRlc3QgVmFsaWRhdGlvbiI6CiAgY2FzZQogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czA3LjEnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMDguMycgdGhlbiAiUm90YXZpcnVzIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMwOS4zJyB0aGVuICJSb3RhdmlydXMgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czEwLjMnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTEuMycgdGhlbiAiUm90YXZpcnVzIGRvc2UgMiIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMxMi40JyB0aGVuICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czEzLjQnIHRoZW4gIlJvdGF2aXJ1cyBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTQuNScgdGhlbiAiUm90YXZpcnVzIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdSb3RhdmlydXMxNS41JyB0aGVuICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czE2LjQnIHRoZW4gIlNlY29uZCByb3RhdmlydXMgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIiBhbmQgbm90ICJSb3RhdmlydXMgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1JvdGF2aXJ1czE3LjEnIHRoZW4gIlRoaXJkIHJvdGF2aXJ1cyBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUm90YXZpcnVzMTguMScgdGhlbiBub3QgIlJvdGF2aXJ1cyBkb3NlIDEiCiAgICBlbHNlICdObyB0ZXN0IGNhc2Ugc2V0JwogIGVuZAo="/>
  </content>
</Library>