SMART DAK Cervical Cancer Screening
0.0.1 - ci-build
SMART DAK Cervical Cancer Screening, published by Dan Heslinga (independent contributor). This guide is not an authorized publication; it is the continuous build for version 0.0.1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/dhes/smart-dak-cxca/ and changes regularly. See the Directory of published versions
| Draft as of 2026-05-14 |
<Library xmlns="http://hl7.org/fhir">
<id value="CXCAD2DTHPVResultRoutingLogic"/>
<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;">CXCAD2DTHPVResultRoutingLogic</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">CXCAD2DTHPVResultRoutingLogic</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">0.0.1</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-CXCAD2DTHPVResultRoutingLogic.html">CXCAD2DTHPVResultRoutingLogic</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-05-14 00:50:23+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">Dan Heslinga (independent contributor)</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>CQL logic library for routing decisions after an HPV high-risk DNA test result returns. Implements the three-outcome decision tree from A/641 (2020) Fig 2.4: HPV negative → routine; HPV+ with negative cytology → repeat HPV in 12 months; HPV+ with cytology ≥ ASC-US → refer to colposcopy. Source CQL is at input/cql/CXCAD2DTHPVResultRoutingLogic.cql.</p>
</div></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>HPVResultPositive</th><th>boolean</th><th>0</th><th>1</th><th>In</th></tr>
<tr><th>CytologyResultASCUSorWorse</th><th>boolean</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>Route — HPV negative, return to routine</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
<tr><th>Route — HPV+, cytology negative, repeat HPV in 12 months</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
<tr><th>Route — HPV+, cytology ≥ ASC-US, refer to colposcopy</th><th>boolean</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: CXCAD2DTHPVResultRoutingLogic
*
* Decision: What to do with a returned HPV high-risk DNA test result
* L2 Source: A/641 (2020) Fig 2.4 — HPV pathway result routing tree
* Trigger: HPV result available for an HPV-screened patient
*
* THE ROUTING TREE:
*
* HPV result returns
* ↓
* ┌──────────────────────────────────┐
* │ HPV negative │ → return to routine screening
* ├──────────────────────────────────┤
* │ HPV positive │ → re-read the saved cytology slide
* │ ↓ │
* │ Cytology < ASC-US (NILM) │ → repeat HPV in 12 months
* │ ↓ (then if HPV+ again) │
* │ → refer to colposcopy │
* │ │
* │ Cytology ≥ ASC-US │ → refer to colposcopy directly
* └──────────────────────────────────┘
*
* This library encodes the IMMEDIATE three-outcome decision (HPV negative /
* HPV+ with negative cytology / HPV+ with abnormal cytology). The 12-month
* repeat-HPV cycle is encoded as the routing outcome; tracking and timer-
* based recall happens via the recall/scheduling layer (chunk 7 — deferred).
*
* Each routing outcome maps to a CXCA.D code (DE34/DE35/DE36).
*/
library CXCAD2DTHPVResultRoutingLogic version '0.0.1'
using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'
// Placeholders — to be replaced with FHIR queries via the shared CXCAElements
// layer. Real implementation:
// HPVResultPositive: Observation with code = CXCA.D#DE3 and value = CXCA.D#DE8
// CytologyResultASCUSorWorse: Observation with code = CXCA.D#DE13 and value
// in {DE30 ASC-US, DE31 ASC-H, DE32 LSIL, DE33 HSIL} (Bethesda ≥ ASC-US)
parameter "HPVResultPositive" Boolean default false
parameter "CytologyResultASCUSorWorse" Boolean default false
context Patient
// =============================================================================
// Routing rules — three mutually-exclusive outcomes per A/641 Fig 2.4
// =============================================================================
/*
* @output: CXCA.D#DE34 "Route: return to routine screening"
* @bindingness: legal
* HPV result is negative — no further investigation indicated.
*/
define "Route — HPV negative, return to routine":
not "HPVResultPositive"
/*
* @output: CXCA.D#DE35 "Route: repeat HPV test in 12 months"
* @bindingness: legal
* HPV result is positive but the cytology re-read shows no significant
* cellular abnormality (NILM / less than ASC-US). Per Fig 2.4, do not refer
* to colposcopy yet — recheck HPV in 12 months. If still positive at recheck,
* the next evaluation will route to colposcopy.
*/
define "Route — HPV+, cytology negative, repeat HPV in 12 months":
"HPVResultPositive"
and not "CytologyResultASCUSorWorse"
/*
* @output: CXCA.D#DE36 "Route: refer to colposcopy"
* @bindingness: legal
* HPV result is positive and cytology re-read shows ≥ ASC-US (any of
* ASC-US, ASC-H, LSIL, HSIL per Bethesda 2014). Refer to colposcopy
* directly per A/641 Fig 2.4 (Op.Inst. 5.6 covers the colposcopy procedure).
*/
define "Route — HPV+, cytology ≥ ASC-US, refer to colposcopy":
"HPVResultPositive"
and "CytologyResultASCUSorWorse"
</code></pre></td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/elm+xml</th></tr>
<tr><td><pre><code>Encoded data (14956 characters)</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/cxca/Library/CXCAD2DTHPVResultRoutingLogic"/>
<version value="0.0.1"/>
<name value="CXCAD2DTHPVResultRoutingLogic"/>
<title value="CXCAD2DTHPVResultRoutingLogic"/>
<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-05-14T00:50:23+00:00"/>
<publisher value="Dan Heslinga (independent contributor)"/>
<contact>
<name value="Dan Heslinga (independent contributor)"/>
<telecom>
<system value="url"/>
<value value="https://github.com/dhes"/>
</telecom>
</contact>
<description
value="CQL logic library for routing decisions after an HPV high-risk DNA test result returns. Implements the three-outcome decision tree from A/641 (2020) Fig 2.4: HPV negative → routine; HPV+ with negative cytology → repeat HPV in 12 months; HPV+ with cytology ≥ ASC-US → refer to colposcopy. Source CQL is at input/cql/CXCAD2DTHPVResultRoutingLogic.cql."/>
<parameter>
<name value="HPVResultPositive"/>
<use value="in"/>
<min value="0"/>
<max value="1"/>
<type value="boolean"/>
</parameter>
<parameter>
<name value="CytologyResultASCUSorWorse"/>
<use value="in"/>
<min value="0"/>
<max value="1"/>
<type value="boolean"/>
</parameter>
<parameter>
<name value="Patient"/>
<use value="out"/>
<min value="0"/>
<max value="1"/>
<type value="Patient"/>
</parameter>
<parameter>
<name value="Route — HPV negative, return to routine"/>
<use value="out"/>
<min value="0"/>
<max value="1"/>
<type value="boolean"/>
</parameter>
<parameter>
<name value="Route — HPV+, cytology negative, repeat HPV in 12 months"/>
<use value="out"/>
<min value="0"/>
<max value="1"/>
<type value="boolean"/>
</parameter>
<parameter>
<name value="Route — HPV+, cytology ≥ ASC-US, refer to colposcopy"/>
<use value="out"/>
<min value="0"/>
<max value="1"/>
<type value="boolean"/>
</parameter>
<content>
<contentType value="text/cql"/>
<data
value="LyoKICogTGlicmFyeTogQ1hDQUQyRFRIUFZSZXN1bHRSb3V0aW5nTG9naWMKICoKICogRGVjaXNpb246IFdoYXQgdG8gZG8gd2l0aCBhIHJldHVybmVkIEhQViBoaWdoLXJpc2sgRE5BIHRlc3QgcmVzdWx0CiAqIEwyIFNvdXJjZTogQS82NDEgKDIwMjApIEZpZyAyLjQg4oCUIEhQViBwYXRod2F5IHJlc3VsdCByb3V0aW5nIHRyZWUKICogVHJpZ2dlcjogSFBWIHJlc3VsdCBhdmFpbGFibGUgZm9yIGFuIEhQVi1zY3JlZW5lZCBwYXRpZW50CiAqCiAqIFRIRSBST1VUSU5HIFRSRUU6CiAqCiAqICAgSFBWIHJlc3VsdCByZXR1cm5zCiAqICAgICAg4oaTCiAqICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCiAqICAg4pSCIEhQViBuZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgIOKUgiDihpIgcmV0dXJuIHRvIHJvdXRpbmUgc2NyZWVuaW5nCiAqICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkCiAqICAg4pSCIEhQViBwb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgIOKUgiDihpIgcmUtcmVhZCB0aGUgc2F2ZWQgY3l0b2xvZ3kgc2xpZGUKICogICDilIIgICDihpMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICogICDilIIgICBDeXRvbG9neSA8IEFTQy1VUyAoTklMTSkgICAgICAg4pSCIOKGkiByZXBlYXQgSFBWIGluIDEyIG1vbnRocwogKiAgIOKUgiAgIOKGkyAodGhlbiBpZiBIUFYrIGFnYWluKSAgICAgICAgIOKUggogKiAgIOKUgiAgIOKGkiByZWZlciB0byBjb2xwb3Njb3B5ICAgICAgICAgIOKUggogKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICogICDilIIgICBDeXRvbG9neSDiiaUgQVNDLVVTICAgICAgICAgICAgICDilIIg4oaSIHJlZmVyIHRvIGNvbHBvc2NvcHkgZGlyZWN0bHkKICogICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKICoKICogVGhpcyBsaWJyYXJ5IGVuY29kZXMgdGhlIElNTUVESUFURSB0aHJlZS1vdXRjb21lIGRlY2lzaW9uIChIUFYgbmVnYXRpdmUgLwogKiBIUFYrIHdpdGggbmVnYXRpdmUgY3l0b2xvZ3kgLyBIUFYrIHdpdGggYWJub3JtYWwgY3l0b2xvZ3kpLiBUaGUgMTItbW9udGgKICogcmVwZWF0LUhQViBjeWNsZSBpcyBlbmNvZGVkIGFzIHRoZSByb3V0aW5nIG91dGNvbWU7IHRyYWNraW5nIGFuZCB0aW1lci0KICogYmFzZWQgcmVjYWxsIGhhcHBlbnMgdmlhIHRoZSByZWNhbGwvc2NoZWR1bGluZyBsYXllciAoY2h1bmsgNyDigJQgZGVmZXJyZWQpLgogKgogKiBFYWNoIHJvdXRpbmcgb3V0Y29tZSBtYXBzIHRvIGEgQ1hDQS5EIGNvZGUgKERFMzQvREUzNS9ERTM2KS4KICovCgpsaWJyYXJ5IENYQ0FEMkRUSFBWUmVzdWx0Um91dGluZ0xvZ2ljIHZlcnNpb24gJzAuMC4xJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCgovLyBQbGFjZWhvbGRlcnMg4oCUIHRvIGJlIHJlcGxhY2VkIHdpdGggRkhJUiBxdWVyaWVzIHZpYSB0aGUgc2hhcmVkIENYQ0FFbGVtZW50cwovLyBsYXllci4gUmVhbCBpbXBsZW1lbnRhdGlvbjoKLy8gICBIUFZSZXN1bHRQb3NpdGl2ZTogT2JzZXJ2YXRpb24gd2l0aCBjb2RlID0gQ1hDQS5EI0RFMyBhbmQgdmFsdWUgPSBDWENBLkQjREU4Ci8vICAgQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2U6IE9ic2VydmF0aW9uIHdpdGggY29kZSA9IENYQ0EuRCNERTEzIGFuZCB2YWx1ZQovLyAgICAgaW4ge0RFMzAgQVNDLVVTLCBERTMxIEFTQy1ILCBERTMyIExTSUwsIERFMzMgSFNJTH0gKEJldGhlc2RhIOKJpSBBU0MtVVMpCnBhcmFtZXRlciAiSFBWUmVzdWx0UG9zaXRpdmUiIEJvb2xlYW4gZGVmYXVsdCBmYWxzZQpwYXJhbWV0ZXIgIkN5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlIiBCb29sZWFuIGRlZmF1bHQgZmFsc2UKCmNvbnRleHQgUGF0aWVudAoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUm91dGluZyBydWxlcyDigJQgdGhyZWUgbXV0dWFsbHktZXhjbHVzaXZlIG91dGNvbWVzIHBlciBBLzY0MSBGaWcgMi40Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBAb3V0cHV0OiBDWENBLkQjREUzNCAiUm91dGU6IHJldHVybiB0byByb3V0aW5lIHNjcmVlbmluZyIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIG5lZ2F0aXZlIOKAlCBubyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW5kaWNhdGVkLgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSI6CiAgbm90ICJIUFZSZXN1bHRQb3NpdGl2ZSIKCi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM1ICJSb3V0ZTogcmVwZWF0IEhQViB0ZXN0IGluIDEyIG1vbnRocyIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIHBvc2l0aXZlIGJ1dCB0aGUgY3l0b2xvZ3kgcmUtcmVhZCBzaG93cyBubyBzaWduaWZpY2FudAogKiBjZWxsdWxhciBhYm5vcm1hbGl0eSAoTklMTSAvIGxlc3MgdGhhbiBBU0MtVVMpLiBQZXIgRmlnIDIuNCwgZG8gbm90IHJlZmVyCiAqIHRvIGNvbHBvc2NvcHkgeWV0IOKAlCByZWNoZWNrIEhQViBpbiAxMiBtb250aHMuIElmIHN0aWxsIHBvc2l0aXZlIGF0IHJlY2hlY2ssCiAqIHRoZSBuZXh0IGV2YWx1YXRpb24gd2lsbCByb3V0ZSB0byBjb2xwb3Njb3B5LgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kgbmVnYXRpdmUsIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzIjoKICAiSFBWUmVzdWx0UG9zaXRpdmUiCiAgICBhbmQgbm90ICJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIKCi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM2ICJSb3V0ZTogcmVmZXIgdG8gY29scG9zY29weSIKICogQGJpbmRpbmduZXNzOiBsZWdhbAogKiBIUFYgcmVzdWx0IGlzIHBvc2l0aXZlIGFuZCBjeXRvbG9neSByZS1yZWFkIHNob3dzIOKJpSBBU0MtVVMgKGFueSBvZgogKiBBU0MtVVMsIEFTQy1ILCBMU0lMLCBIU0lMIHBlciBCZXRoZXNkYSAyMDE0KS4gUmVmZXIgdG8gY29scG9zY29weQogKiBkaXJlY3RseSBwZXIgQS82NDEgRmlnIDIuNCAoT3AuSW5zdC4gNS42IGNvdmVycyB0aGUgY29scG9zY29weSBwcm9jZWR1cmUpLgogKi8KZGVmaW5lICJSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kg4omlIEFTQy1VUywgcmVmZXIgdG8gY29scG9zY29weSI6CiAgIkhQVlJlc3VsdFBvc2l0aXZlIgogICAgYW5kICJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIK"/>
</content>
<content>
<contentType value="application/elm+xml"/>
<data
value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSIgbG9jYWxJZD0iMCI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JPcHRpb25zPSJFbmFibGVBbm5vdGF0aW9ucyxFbmFibGVMb2NhdG9ycyxEaXNhYmxlTGlzdERlbW90aW9uLERpc2FibGVMaXN0UHJvbW90aW9uIiBzaWduYXR1cmVMZXZlbD0iT3ZlcmxvYWRzIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUluZm8iLz4KICAgPGFubm90YXRpb24gbWVzc2FnZT0iQW4gb3BlcmFuZCBpZGVudGlmaWVyIHJlZmVyZW5jZSBpcyBoaWRpbmcgYW5vdGhlciBpZGVudGlmaWVyIG9mIHRoZSBzYW1lIG5hbWUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIG1lc3NhZ2U9IkFuIG9wZXJhbmQgaWRlbnRpZmllciByZWZlcmVuY2UgaXMgaGlkaW5nIGFub3RoZXIgaWRlbnRpZmllciBvZiB0aGUgc2FtZSBuYW1lLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBtZXNzYWdlPSJBbiBvcGVyYW5kIGlkZW50aWZpZXIgcmVmZXJlbmNlIGlzIGhpZGluZyBhbm90aGVyIGlkZW50aWZpZXIgb2YgdGhlIHNhbWUgbmFtZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgIDxhOnMgcj0iMjM2Ij4KICAgICAgICAgPGE6cz4vKgogKiBMaWJyYXJ5OiBDWENBRDJEVEhQVlJlc3VsdFJvdXRpbmdMb2dpYwogKgogKiBEZWNpc2lvbjogV2hhdCB0byBkbyB3aXRoIGEgcmV0dXJuZWQgSFBWIGhpZ2gtcmlzayBETkEgdGVzdCByZXN1bHQKICogTDIgU291cmNlOiBBLzY0MSAoMjAyMCkgRmlnIDIuNCDigJQgSFBWIHBhdGh3YXkgcmVzdWx0IHJvdXRpbmcgdHJlZQogKiBUcmlnZ2VyOiBIUFYgcmVzdWx0IGF2YWlsYWJsZSBmb3IgYW4gSFBWLXNjcmVlbmVkIHBhdGllbnQKICoKICogVEhFIFJPVVRJTkcgVFJFRToKICoKICogICBIUFYgcmVzdWx0IHJldHVybnMKICogICAgICDihpMKICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKICogICDilIIgSFBWIG5lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAg4pSCIOKGkiByZXR1cm4gdG8gcm91dGluZSBzY3JlZW5pbmcKICogICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQKICogICDilIIgSFBWIHBvc2l0aXZlICAgICAgICAgICAgICAgICAgICAg4pSCIOKGkiByZS1yZWFkIHRoZSBzYXZlZCBjeXRvbG9neSBzbGlkZQogKiAgIOKUgiAgIOKGkyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogKiAgIOKUgiAgIEN5dG9sb2d5ICZsdDsgQVNDLVVTIChOSUxNKSAgICAgICDilIIg4oaSIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzCiAqICAg4pSCICAg4oaTICh0aGVuIGlmIEhQVisgYWdhaW4pICAgICAgICAg4pSCCiAqICAg4pSCICAg4oaSIHJlZmVyIHRvIGNvbHBvc2NvcHkgICAgICAgICAg4pSCCiAqICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogKiAgIOKUgiAgIEN5dG9sb2d5IOKJpSBBU0MtVVMgICAgICAgICAgICAgIOKUgiDihpIgcmVmZXIgdG8gY29scG9zY29weSBkaXJlY3RseQogKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogKgogKiBUaGlzIGxpYnJhcnkgZW5jb2RlcyB0aGUgSU1NRURJQVRFIHRocmVlLW91dGNvbWUgZGVjaXNpb24gKEhQViBuZWdhdGl2ZSAvCiAqIEhQVisgd2l0aCBuZWdhdGl2ZSBjeXRvbG9neSAvIEhQVisgd2l0aCBhYm5vcm1hbCBjeXRvbG9neSkuIFRoZSAxMi1tb250aAogKiByZXBlYXQtSFBWIGN5Y2xlIGlzIGVuY29kZWQgYXMgdGhlIHJvdXRpbmcgb3V0Y29tZTsgdHJhY2tpbmcgYW5kIHRpbWVyLQogKiBiYXNlZCByZWNhbGwgaGFwcGVucyB2aWEgdGhlIHJlY2FsbC9zY2hlZHVsaW5nIGxheWVyIChjaHVuayA3IOKAlCBkZWZlcnJlZCkuCiAqCiAqIEVhY2ggcm91dGluZyBvdXRjb21lIG1hcHMgdG8gYSBDWENBLkQgY29kZSAoREUzNC9ERTM1L0RFMzYpLgogKi8KCmxpYnJhcnkgQ1hDQUQyRFRIUFZSZXN1bHRSb3V0aW5nTG9naWMgdmVyc2lvbiAnMC4wLjEnPC9hOnM+CiAgICAgIDwvYTpzPgogICA8L2Fubm90YXRpb24+CiAgIDxpZGVudGlmaWVyIGlkPSJDWENBRDJEVEhQVlJlc3VsdFJvdXRpbmdMb2dpYyIgc3lzdGVtPSJodHRwOi8vc21hcnQud2hvLmludC9jeGNhIiB2ZXJzaW9uPSIwLjAuMSIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEiIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIgdmVyc2lvbj0iMS4wLjAiLz4KICAgICAgPGRlZiBsb2NhbElkPSIyMDYiIGxvY2F0b3I9IjM0OjEtMzQ6MjYiIGxvY2FsSWRlbnRpZmllcj0iRkhJUiIgdXJpPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB2ZXJzaW9uPSI0LjAuMSI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIwNiI+CiAgICAgICAgICAgICAgIDxhOnM+dXNpbmcgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUjwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4gdmVyc2lvbiAnNC4wLjEnPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgIDwvZGVmPgogICA8L3VzaW5ncz4KICAgPGluY2x1ZGVzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIwOCIgbG9jYXRvcj0iMzY6MS0zNjozNSIgbG9jYWxJZGVudGlmaWVyPSJGSElSSGVscGVycyIgcGF0aD0iaHR0cDovL2hsNy5vcmcvZmhpci9GSElSSGVscGVycyIgdmVyc2lvbj0iNC4wLjEiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMDgiPgogICAgICAgICAgICAgICA8YTpzPmluY2x1ZGUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUkhlbHBlcnM8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+IHZlcnNpb24gJzQuMC4xJzwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICA8L2RlZj4KICAgPC9pbmNsdWRlcz4KICAgPHBhcmFtZXRlcnM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjEwIiBsb2NhdG9yPSI0MzoxLTQzOjUxIiBuYW1lPSJIUFZSZXN1bHRQb3NpdGl2ZSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIxMCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gUGxhY2Vob2xkZXJzIOKAlCB0byBiZSByZXBsYWNlZCB3aXRoIEZISVIgcXVlcmllcyB2aWEgdGhlIHNoYXJlZCBDWENBRWxlbWVudHMKLy8gbGF5ZXIuIFJlYWwgaW1wbGVtZW50YXRpb246Ci8vICAgSFBWUmVzdWx0UG9zaXRpdmU6IE9ic2VydmF0aW9uIHdpdGggY29kZSA9IENYQ0EuRCNERTMgYW5kIHZhbHVlID0gQ1hDQS5EI0RFOAovLyAgIEN5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlOiBPYnNlcnZhdGlvbiB3aXRoIGNvZGUgPSBDWENBLkQjREUxMyBhbmQgdmFsdWUKLy8gICAgIGluIHtERTMwIEFTQy1VUywgREUzMSBBU0MtSCwgREUzMiBMU0lMLCBERTMzIEhTSUx9IChCZXRoZXNkYSDiiaUgQVNDLVVTKQpwYXJhbWV0ZXIgJnF1b3Q7SFBWUmVzdWx0UG9zaXRpdmUmcXVvdDsgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjEyIj4KICAgICAgICAgICAgICAgICAgPGE6cz5Cb29sZWFuPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjIxMSI+IGRlZmF1bHQgZmFsc2U8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGRlZmF1bHQgbG9jYWxJZD0iMjExIiBsb2NhdG9yPSI0Mzo0Ny00Mzo1MSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPHBhcmFtZXRlclR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjEyIiBsb2NhdG9yPSI0MzozMS00MzozNyIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIxNCIgbG9jYXRvcj0iNDQ6MS00NDo2MCIgbmFtZT0iQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2UiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyMTQiPgogICAgICAgICAgICAgICA8YTpzPnBhcmFtZXRlciAmcXVvdDtDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSZxdW90OyA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICA8YTpzPkJvb2xlYW48L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjE1Ij4gZGVmYXVsdCBmYWxzZTwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZGVmYXVsdCBsb2NhbElkPSIyMTUiIGxvY2F0b3I9IjQ0OjU2LTQ0OjYwIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBsb2NhbElkPSIyMTYiIGxvY2F0b3I9IjQ0OjQwLTQ0OjQ2IiBuYW1lPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgPC9kZWY+CiAgIDwvcGFyYW1ldGVycz4KICAgPGNvbnRleHRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIyMSIgbG9jYXRvcj0iNDY6MS00NjoxNSIgbmFtZT0iUGF0aWVudCIvPgogICA8L2NvbnRleHRzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBsb2NhbElkPSIyMTkiIGxvY2F0b3I9IjQ2OjEtNDY6MTUiIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMjAiIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE4IiBsb2NhdG9yPSI0NjoxLTQ2OjE1IiBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB0ZW1wbGF0ZUlkPSJodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vUGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjI0IiBsb2NhdG9yPSI1NzoxLTU4OjI1IiBuYW1lPSJSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTp0IG5hbWU9Im91dHB1dCIgdmFsdWU9IiZxdW90O1JvdXRlOiByZXR1cm4gdG8gcm91dGluZSBzY3JlZW5pbmcmcXVvdDsiLz4KICAgICAgICAgICAgPGE6dCBuYW1lPSJiaW5kaW5nbmVzcyIgdmFsdWU9ImxlZ2FsJiN4YTtIUFYgcmVzdWx0IGlzIG5lZ2F0aXZlIOKAlCBubyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW5kaWNhdGVkLiIvPgogICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgIDxhOnM+Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUm91dGluZyBydWxlcyDigJQgdGhyZWUgbXV0dWFsbHktZXhjbHVzaXZlIG91dGNvbWVzIHBlciBBLzY0MSBGaWcgMi40Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKgogKiBAb3V0cHV0OiBDWENBLkQjREUzNCAmcXVvdDtSb3V0ZTogcmV0dXJuIHRvIHJvdXRpbmUgc2NyZWVuaW5nJnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBuZWdhdGl2ZSDigJQgbm8gZnVydGhlciBpbnZlc3RpZ2F0aW9uIGluZGljYXRlZC4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWIG5lZ2F0aXZlLCByZXR1cm4gdG8gcm91dGluZSZxdW90OzoKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMjUiPgogICAgICAgICAgICAgICAgICA8YTpzPm5vdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0hQVlJlc3VsdFBvc2l0aXZlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjI1IiBsb2NhdG9yPSI1ODozLTU4OjI1IiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI2IiBsb2NhdG9yPSI1ODo3LTU4OjI1IiBuYW1lPSJIUFZSZXN1bHRQb3NpdGl2ZSIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIyOSIgbG9jYXRvcj0iNjg6MS03MDo0MCIgbmFtZT0iUm91dGUg4oCUIEhQVissIGN5dG9sb2d5IG5lZ2F0aXZlLCByZXBlYXQgSFBWIGluIDEyIG1vbnRocyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTp0IG5hbWU9Im91dHB1dCIgdmFsdWU9IiZxdW90O1JvdXRlOiByZXBlYXQgSFBWIHRlc3QgaW4gMTIgbW9udGhzJnF1b3Q7Ii8+CiAgICAgICAgICAgIDxhOnQgbmFtZT0iYmluZGluZ25lc3MiIHZhbHVlPSJsZWdhbCYjeGE7SFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBidXQgdGhlIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mgbm8gc2lnbmlmaWNhbnQmI3hhO2NlbGx1bGFyIGFibm9ybWFsaXR5IChOSUxNIC8gbGVzcyB0aGFuIEFTQy1VUykuIFBlciBGaWcgMi40LCBkbyBub3QgcmVmZXImI3hhO3RvIGNvbHBvc2NvcHkgeWV0IOKAlCByZWNoZWNrIEhQViBpbiAxMiBtb250aHMuIElmIHN0aWxsIHBvc2l0aXZlIGF0IHJlY2hlY2ssJiN4YTt0aGUgbmV4dCBldmFsdWF0aW9uIHdpbGwgcm91dGUgdG8gY29scG9zY29weS4iLz4KICAgICAgICAgICAgPGE6cyByPSIyMjkiPgogICAgICAgICAgICAgICA8YTpzPi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM1ICZxdW90O1JvdXRlOiByZXBlYXQgSFBWIHRlc3QgaW4gMTIgbW9udGhzJnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBidXQgdGhlIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mgbm8gc2lnbmlmaWNhbnQKICogY2VsbHVsYXIgYWJub3JtYWxpdHkgKE5JTE0gLyBsZXNzIHRoYW4gQVNDLVVTKS4gUGVyIEZpZyAyLjQsIGRvIG5vdCByZWZlcgogKiB0byBjb2xwb3Njb3B5IHlldCDigJQgcmVjaGVjayBIUFYgaW4gMTIgbW9udGhzLiBJZiBzdGlsbCBwb3NpdGl2ZSBhdCByZWNoZWNrLAogKiB0aGUgbmV4dCBldmFsdWF0aW9uIHdpbGwgcm91dGUgdG8gY29scG9zY29weS4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kgbmVnYXRpdmUsIHJlcGVhdCBIUFYgaW4gMTIgbW9udGhzJnF1b3Q7OgogIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjIzMCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtIUFZSZXN1bHRQb3NpdGl2ZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPm5vdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0N5dG9sb2d5UmVzdWx0QVNDVVNvcldvcnNlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIzMCIgbG9jYXRvcj0iNjk6My03MDo0MCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMSIgbG9jYXRvcj0iNjk6My02OToyMSIgbmFtZT0iSFBWUmVzdWx0UG9zaXRpdmUiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMyIiBsb2NhdG9yPSI3MDo5LTcwOjQwIiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMzIiBsb2NhdG9yPSI3MDoxMy03MDo0MCIgbmFtZT0iQ3l0b2xvZ3lSZXN1bHRBU0NVU29yV29yc2UiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIzNiIgbG9jYXRvcj0iNzk6MS04MTozNiIgbmFtZT0iUm91dGUg4oCUIEhQVissIGN5dG9sb2d5IOKJpSBBU0MtVVMsIHJlZmVyIHRvIGNvbHBvc2NvcHkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6dCBuYW1lPSJvdXRwdXQiIHZhbHVlPSImcXVvdDtSb3V0ZTogcmVmZXIgdG8gY29scG9zY29weSZxdW90OyIvPgogICAgICAgICAgICA8YTp0IG5hbWU9ImJpbmRpbmduZXNzIiB2YWx1ZT0ibGVnYWwmI3hhO0hQViByZXN1bHQgaXMgcG9zaXRpdmUgYW5kIGN5dG9sb2d5IHJlLXJlYWQgc2hvd3Mg4omlIEFTQy1VUyAoYW55IG9mJiN4YTtBU0MtVVMsIEFTQy1ILCBMU0lMLCBIU0lMIHBlciBCZXRoZXNkYSAyMDE0KS4gUmVmZXIgdG8gY29scG9zY29weSYjeGE7ZGlyZWN0bHkgcGVyIEEvNjQxIEZpZyAyLjQgKE9wLkluc3QuIDUuNiBjb3ZlcnMgdGhlIGNvbHBvc2NvcHkgcHJvY2VkdXJlKS4iLz4KICAgICAgICAgICAgPGE6cyByPSIyMzYiPgogICAgICAgICAgICAgICA8YTpzPi8qCiAqIEBvdXRwdXQ6IENYQ0EuRCNERTM2ICZxdW90O1JvdXRlOiByZWZlciB0byBjb2xwb3Njb3B5JnF1b3Q7CiAqIEBiaW5kaW5nbmVzczogbGVnYWwKICogSFBWIHJlc3VsdCBpcyBwb3NpdGl2ZSBhbmQgY3l0b2xvZ3kgcmUtcmVhZCBzaG93cyDiiaUgQVNDLVVTIChhbnkgb2YKICogQVNDLVVTLCBBU0MtSCwgTFNJTCwgSFNJTCBwZXIgQmV0aGVzZGEgMjAxNCkuIFJlZmVyIHRvIGNvbHBvc2NvcHkKICogZGlyZWN0bHkgcGVyIEEvNjQxIEZpZyAyLjQgKE9wLkluc3QuIDUuNiBjb3ZlcnMgdGhlIGNvbHBvc2NvcHkgcHJvY2VkdXJlKS4KICovCmRlZmluZSAmcXVvdDtSb3V0ZSDigJQgSFBWKywgY3l0b2xvZ3kg4omlIEFTQy1VUywgcmVmZXIgdG8gY29scG9zY29weSZxdW90OzoKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMzciPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SFBWUmVzdWx0UG9zaXRpdmUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICBhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIzNyIgbG9jYXRvcj0iODA6My04MTozNiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzOCIgbG9jYXRvcj0iODA6My04MDoyMSIgbmFtZT0iSFBWUmVzdWx0UG9zaXRpdmUiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM5IiBsb2NhdG9yPSI4MTo5LTgxOjM2IiBuYW1lPSJDeXRvbG9neVJlc3VsdEFTQ1VTb3JXb3JzZSIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"/>
</content>
</Library>