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
Draft as of 2025-02-07 |
{
"resourceType" : "Library",
"id" : "HIVIND68Logic",
"meta" : {
"profile" : [
🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"
]
},
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n <table class=\"grid dict\">\n \n \n <tr>\n <th scope=\"row\"><b>Title: </b></th>\n <td style=\"padding-left: 4px;\">HIV.IND.68 Logic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">HIVIND68Logic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">0.4.3</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Url: </b></th>\n <td style=\"padding-left: 4px;\"><a href=\"Library-HIVIND68Logic.html\">HIV.IND.68 Logic</a></td>\n </tr>\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Status: </b></th>\n <td style=\"padding-left: 4px;\">draft</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Experimental: </b></th>\n <td style=\"padding-left: 4px;\">true</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Type: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/6.0.2/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>logic-library</span>\n </p>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Date: </b></th>\n <td style=\"padding-left: 4px;\">2025-02-07 14:15:45+0000</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">WHO</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Description: </b></th>\n <td style=\"padding-left: 4px;\"><div><p>% of pregnant women tested positive for syphilis on first ANC services visit who were treated based on national guidelines during the reporting period</p>\n</div></td>\n </tr>\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n <tr>\n <td colspan=\"2\">\n <table>\n <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n <tr><td><pre><code class=\"language-cql\">/**\n * Library: HIV.IND.68 Logic\n * Ref No: STI.3C1\n * Short Name: Syphilis treatment coverage, pregnant women, first ANC visit\n *\n * Definition: % of pregnant women tested positive for syphilis on first ANC services visit who were treated based on national guidelines during the reporting period\n *\n * Numerator: Number of pregnant women who tested positive for syphilis on first ANC services visit and were treated based on national guidelines during the reporting period\n * Numerator Calculation: COUNT of pregnant women with first "ANC contact date" for this pregnancy in the reporting period AND "Syphilis test date" on first "ANC contact date" AND "Syphilis test result"='Positive' AND "Syphilis treatment start date" in the reporting period\n * Numerator Exclusions: \n *\n * Denominator: Number of pregnant women who tested positive for syphilis on first ANC services visit during the reporting period\n * Denominator Calculation: COUNT of pregnant women with first "ANC contact date" for this pregnancy in the reporting period AND "Syphilis test date" on first "ANC contact date" AND "Syphilis test result"='Positive'\n * Denominator Exclusions: \n *\n * Disaggregations:\n * •\u00a0Age (15–19, 20–24, 25–29, 30–49, 50+ years) \n * •\u00a0HIV status (HIV-positive, HIV-negative, unknown status) \n * •\u00a0Cities and other administrative regions of epidemiologic importance\n *\n * Disaggregation Elements: Age | HIV status\n *\n * Numerator and Denominator Elements:\n * ANC contact date \n * Syphilis test date \n * Syphilis test result \n * Syphilis treatment start date\n *\n * Reference: Consolidated guidelines on person-centred HIV strategic information: strengthening routine data for impact. Geneva: World Health Organization; 2022\n * \n * Data Concepts:\n * HIV.A.DE17: Age | Calculated age (number of years) of the client based on date of birth\n * HIV.B.DE115: HIV status | HIV status reported after applying the national HIV testing algorithm. No single HIV test can provide an HIV-positive diagnosis.\n * HIV.B.DE116: HIV-positive | Client is HIV-positive\n * HIV.B.DE117: HIV-negative | Client is HIV-negative\n * HIV.B.DE118: Unknown | Client has unknown HIV status\n * HIV.B.DE249: Syphilis test date | Date of syphilis test\n * HIV.B.DE250: Syphilis test result | Result from syphilis test\n * HIV.B.DE251: Positive | Test result is positive for syphilis\n * HIV.B.DE252: Negative | Test result is negative for syphilis\n * HIV.B.DE253: Inconclusive | Test result is inconclusive\n * HIV.B.DE254: Syphilis treatment start date | Date of initiation of syphilis treatment\n * HIV.D.DE801: Syphilis test date | Date of syphilis test\n * HIV.D.DE802: Syphilis test result | Result from syphilis test\n * HIV.D.DE803: Positive | Test result is positive for syphilis\n * HIV.D.DE804: Negative | Test result is negative for syphilis\n * HIV.D.DE805: Inconclusive | Test result is inconclusive\n * HIV.D.DE806: Syphilis treatment start date | Date of initiation of syphilis treatment\n * HIV.E.DE85: ANC contact date | The date and time of the client's ANC contact (in the ANC DAK this is called 'Contact date')\n * HIV.G.DE69: Syphilis test date | Date of syphilis test\n * HIV.G.DE70: Syphilis test result | Result from syphilis test\n * HIV.G.DE71: Positive | Test result is positive for syphilis\n * HIV.G.DE72: Negative | Test result is negative for syphilis\n * HIV.G.DE73: Inconclusive | Test result is inconclusive\n * HIV.SRV.DE18: ANC contact date | The date and time of the client's ANC contact (in the ANC DAK this is called 'Contact date')\n *\n * Additional Context\n * - what it measures: A: % of people attending HIV prevention services who tested positive for syphilis and | were treated based on national guidelines during the reporting period | B: % of people living with HIV who tested positive for syphilis and were treated based on national guidelines during the reporting period | C: % of pregnant women who tested positive for syphilis and were treated based on national guidelines during the reporting period\n * - rationale: Prompt treatment of individuals positive for syphilis is important for improving their health and reducing sexual and vertical transmission of syphilis.\n * - method: Individual-level data obtained from programme records. | | If individual-level data are not available, the indicator can be reported using aggregate programme data.\n * \n * Suggested Scoring Method: proportion | http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/proportion-measure-cqfm\n */\n\nlibrary HIVIND68Logic\n\n// Included Libraries\nusing FHIR version '4.0.1'\n\ninclude HIVCommon version '0.0.1' called HIC\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WCom\ninclude HIVElements called HE\ninclude HIVIndicatorElements called HIE\ninclude HIVConfig called Config\n\n// Indicator Definition\nparameter "Measurement Period" Interval<Date> default Interval[@2023-01-01, @2023-01-30]\n\ncontext Patient\n/* Populations */\n\n/*\n *Initial Population\n */\n\ndefine "Initial Population":\n true\n\n/**\n * Numerator\n * \n * Definition: Number of pregnant women who tested positive for syphilis on first ANC services visit and were treated based on national guidelines during the reporting period\n * Calculation: COUNT of pregnant women with first "ANC contact date" for this pregnancy in the reporting period AND "Syphilis test date" on first "ANC contact date" AND "Syphilis test result"='Positive' AND "Syphilis treatment start date" in the reporting period\n */\n\ndefine "Numerator":\n First(HIE."ANC within pregnancy").period.toInterval() during "Measurement Period"\n and exists(HE."Positive B.DE251" S\n with HE."Syphilis test date B.DE249" P\n such that S.partOf.references(P) and P.performed.toInterval() during "Measurement Period"\n and start of P.performed.toInterval() = start of HIE."first anc date"\n )\n and HIE."Syphilis treatment start date B.DE254"\n\n\n/**\n * Denominator\n *\n * Definition: Number of pregnant women who tested positive for syphilis on first ANC services visit during the reporting period\n * Calculation: COUNT of pregnant women with first "ANC contact date" for this pregnancy in the reporting period AND "Syphilis test date" on first "ANC contact date" AND "Syphilis test result"='Positive'\n */\n\ndefine "Denominator":\n First(HIE."ANC within pregnancy").period.toInterval() during "Measurement Period"\n and exists(HE."Positive B.DE251" S\n with HE."Syphilis test date B.DE249" P\n such that S.partOf.references(P) and P.performed.toInterval() during "Measurement Period"\n and start of P.performed.toInterval() = start of HIE."first anc date"\n )\n \n\n/* end Populations */\n\n/*\n * Disaggregators\n */\n\n\ndefine "Age Stratifier":\n\tHIE."By Age Stratifier 9"\n\ndefine "Geographic Region Stratifier":\n\tHIE."By Geographic Region Stratifier"\n\ndefine "HIV Status":\n HIE."HIV Status Stratifier"\n\ndefine "Stratification":\nHIE."By Age Stratifier 9"\n+ ':' + HIE."By Geographic Region Stratifier"\n+ ':' + HIE."HIV Status Stratifier".code </code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability",
"valueCode" : "computable"
}
],
"url" : "http://smart.who.int/hiv/Library/HIVIND68Logic",
"version" : "0.4.3",
"name" : "HIVIND68Logic",
"title" : "HIV.IND.68 Logic",
"status" : "draft",
"experimental" : true,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2025-02-07T14:15:45+00:00",
"publisher" : "WHO",
"contact" : [
{
"name" : "WHO",
"telecom" : [
{
"system" : "url",
"value" : "http://who.int"
}
]
}
],
"description" : "% of pregnant women tested positive for syphilis on first ANC services visit who were treated based on national guidelines during the reporting period",
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoqCiAqIExpYnJhcnk6IEhJVi5JTkQuNjggTG9naWMKICogUmVmIE5vOiBTVEkuM0MxCiAqIFNob3J0IE5hbWU6IFN5cGhpbGlzIHRyZWF0bWVudCBjb3ZlcmFnZSwgcHJlZ25hbnQgd29tZW4sIGZpcnN0IEFOQyB2aXNpdAogKgogKiBEZWZpbml0aW9uOiAlIG9mIHByZWduYW50IHdvbWVuIHRlc3RlZCBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgb24gZmlyc3QgQU5DIHNlcnZpY2VzIHZpc2l0IHdobyB3ZXJlIHRyZWF0ZWQgYmFzZWQgb24gbmF0aW9uYWwgZ3VpZGVsaW5lcyBkdXJpbmcgdGhlIHJlcG9ydGluZyBwZXJpb2QKICoKICogTnVtZXJhdG9yOiBOdW1iZXIgb2YgcHJlZ25hbnQgd29tZW4gd2hvIHRlc3RlZCBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgb24gZmlyc3QgQU5DIHNlcnZpY2VzIHZpc2l0IGFuZCB3ZXJlIHRyZWF0ZWQgYmFzZWQgb24gbmF0aW9uYWwgZ3VpZGVsaW5lcyBkdXJpbmcgdGhlIHJlcG9ydGluZyBwZXJpb2QKICogTnVtZXJhdG9yIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBwcmVnbmFudCB3b21lbiB3aXRoIGZpcnN0ICJBTkMgY29udGFjdCBkYXRlIiBmb3IgdGhpcyBwcmVnbmFuY3kgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QgQU5EICJTeXBoaWxpcyB0ZXN0IGRhdGUiIG9uIGZpcnN0ICJBTkMgY29udGFjdCBkYXRlIiBBTkQgIlN5cGhpbGlzIHRlc3QgcmVzdWx0Ij0nUG9zaXRpdmUnIEFORCAiU3lwaGlsaXMgdHJlYXRtZW50IHN0YXJ0IGRhdGUiIGluIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIE51bWVyYXRvciBFeGNsdXNpb25zOiAKICoKICogRGVub21pbmF0b3I6IE51bWJlciBvZiBwcmVnbmFudCB3b21lbiB3aG8gdGVzdGVkIHBvc2l0aXZlIGZvciBzeXBoaWxpcyBvbiBmaXJzdCBBTkMgc2VydmljZXMgdmlzaXQgZHVyaW5nIHRoZSByZXBvcnRpbmcgcGVyaW9kCiAqIERlbm9taW5hdG9yIENhbGN1bGF0aW9uOiBDT1VOVCBvZiBwcmVnbmFudCB3b21lbiB3aXRoIGZpcnN0ICJBTkMgY29udGFjdCBkYXRlIiBmb3IgdGhpcyBwcmVnbmFuY3kgaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QgQU5EICJTeXBoaWxpcyB0ZXN0IGRhdGUiIG9uIGZpcnN0ICJBTkMgY29udGFjdCBkYXRlIiBBTkQgIlN5cGhpbGlzIHRlc3QgcmVzdWx0Ij0nUG9zaXRpdmUnCiAqIERlbm9taW5hdG9yIEV4Y2x1c2lvbnM6IAogKgogKiBEaXNhZ2dyZWdhdGlvbnM6CiAqIOKAosKgQWdlICgxNeKAkzE5LCAyMOKAkzI0LCAyNeKAkzI5LCAzMOKAkzQ5LCA1MCsgeWVhcnMpIAogKiAg4oCiwqBISVYgc3RhdHVzIChISVYtcG9zaXRpdmUsIEhJVi1uZWdhdGl2ZSwgdW5rbm93biBzdGF0dXMpIAogKiAg4oCiwqBDaXRpZXMgYW5kIG90aGVyIGFkbWluaXN0cmF0aXZlIHJlZ2lvbnMgb2YgZXBpZGVtaW9sb2dpYyBpbXBvcnRhbmNlCiAqCiAqIERpc2FnZ3JlZ2F0aW9uIEVsZW1lbnRzOiBBZ2UgfCBISVYgc3RhdHVzCiAqCiAqIE51bWVyYXRvciBhbmQgRGVub21pbmF0b3IgRWxlbWVudHM6CiAqIEFOQyBjb250YWN0IGRhdGUgCiAqICBTeXBoaWxpcyB0ZXN0IGRhdGUgCiAqICBTeXBoaWxpcyB0ZXN0IHJlc3VsdCAKICogIFN5cGhpbGlzIHRyZWF0bWVudCBzdGFydCBkYXRlCiAqCiAqIFJlZmVyZW5jZTogQ29uc29saWRhdGVkIGd1aWRlbGluZXMgb24gcGVyc29uLWNlbnRyZWQgSElWIHN0cmF0ZWdpYyBpbmZvcm1hdGlvbjogc3RyZW5ndGhlbmluZyByb3V0aW5lIGRhdGEgZm9yIGltcGFjdC4gR2VuZXZhOiBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uOyAyMDIyCiAqIAogKiBEYXRhIENvbmNlcHRzOgogKiBISVYuQS5ERTE3OiBBZ2UgfCBDYWxjdWxhdGVkIGFnZSAobnVtYmVyIG9mIHllYXJzKSBvZiB0aGUgY2xpZW50IGJhc2VkIG9uIGRhdGUgb2YgYmlydGgKICogSElWLkIuREUxMTU6IEhJViBzdGF0dXMgfCBISVYgc3RhdHVzIHJlcG9ydGVkIGFmdGVyIGFwcGx5aW5nIHRoZSBuYXRpb25hbCBISVYgdGVzdGluZyBhbGdvcml0aG0uIE5vIHNpbmdsZSBISVYgdGVzdCBjYW4gcHJvdmlkZSBhbiBISVYtcG9zaXRpdmUgZGlhZ25vc2lzLgogKiBISVYuQi5ERTExNjogSElWLXBvc2l0aXZlIHwgQ2xpZW50IGlzIEhJVi1wb3NpdGl2ZQogKiBISVYuQi5ERTExNzogSElWLW5lZ2F0aXZlIHwgQ2xpZW50IGlzIEhJVi1uZWdhdGl2ZQogKiBISVYuQi5ERTExODogVW5rbm93biB8IENsaWVudCBoYXMgdW5rbm93biBISVYgc3RhdHVzCiAqIEhJVi5CLkRFMjQ5OiBTeXBoaWxpcyB0ZXN0IGRhdGUgfCBEYXRlIG9mIHN5cGhpbGlzIHRlc3QKICogSElWLkIuREUyNTA6IFN5cGhpbGlzIHRlc3QgcmVzdWx0IHwgUmVzdWx0IGZyb20gc3lwaGlsaXMgdGVzdAogKiBISVYuQi5ERTI1MTogUG9zaXRpdmUgfCBUZXN0IHJlc3VsdCBpcyBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMKICogSElWLkIuREUyNTI6IE5lZ2F0aXZlIHwgVGVzdCByZXN1bHQgaXMgbmVnYXRpdmUgZm9yIHN5cGhpbGlzCiAqIEhJVi5CLkRFMjUzOiBJbmNvbmNsdXNpdmUgfCBUZXN0IHJlc3VsdCBpcyBpbmNvbmNsdXNpdmUKICogSElWLkIuREUyNTQ6IFN5cGhpbGlzIHRyZWF0bWVudCBzdGFydCBkYXRlIHwgRGF0ZSBvZiBpbml0aWF0aW9uIG9mIHN5cGhpbGlzIHRyZWF0bWVudAogKiBISVYuRC5ERTgwMTogU3lwaGlsaXMgdGVzdCBkYXRlIHwgRGF0ZSBvZiBzeXBoaWxpcyB0ZXN0CiAqIEhJVi5ELkRFODAyOiBTeXBoaWxpcyB0ZXN0IHJlc3VsdCB8IFJlc3VsdCBmcm9tIHN5cGhpbGlzIHRlc3QKICogSElWLkQuREU4MDM6IFBvc2l0aXZlIHwgVGVzdCByZXN1bHQgaXMgcG9zaXRpdmUgZm9yIHN5cGhpbGlzCiAqIEhJVi5ELkRFODA0OiBOZWdhdGl2ZSB8IFRlc3QgcmVzdWx0IGlzIG5lZ2F0aXZlIGZvciBzeXBoaWxpcwogKiBISVYuRC5ERTgwNTogSW5jb25jbHVzaXZlIHwgVGVzdCByZXN1bHQgaXMgaW5jb25jbHVzaXZlCiAqIEhJVi5ELkRFODA2OiBTeXBoaWxpcyB0cmVhdG1lbnQgc3RhcnQgZGF0ZSB8IERhdGUgb2YgaW5pdGlhdGlvbiBvZiBzeXBoaWxpcyB0cmVhdG1lbnQKICogSElWLkUuREU4NTogQU5DIGNvbnRhY3QgZGF0ZSB8IFRoZSBkYXRlIGFuZCB0aW1lIG9mIHRoZSBjbGllbnQncyBBTkMgY29udGFjdCAoaW4gdGhlIEFOQyBEQUsgdGhpcyBpcyBjYWxsZWQgJ0NvbnRhY3QgZGF0ZScpCiAqIEhJVi5HLkRFNjk6IFN5cGhpbGlzIHRlc3QgZGF0ZSB8IERhdGUgb2Ygc3lwaGlsaXMgdGVzdAogKiBISVYuRy5ERTcwOiBTeXBoaWxpcyB0ZXN0IHJlc3VsdCB8IFJlc3VsdCBmcm9tIHN5cGhpbGlzIHRlc3QKICogSElWLkcuREU3MTogUG9zaXRpdmUgfCBUZXN0IHJlc3VsdCBpcyBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMKICogSElWLkcuREU3MjogTmVnYXRpdmUgfCBUZXN0IHJlc3VsdCBpcyBuZWdhdGl2ZSBmb3Igc3lwaGlsaXMKICogSElWLkcuREU3MzogSW5jb25jbHVzaXZlIHwgVGVzdCByZXN1bHQgaXMgaW5jb25jbHVzaXZlCiAqIEhJVi5TUlYuREUxODogQU5DIGNvbnRhY3QgZGF0ZSB8IFRoZSBkYXRlIGFuZCB0aW1lIG9mIHRoZSBjbGllbnQncyBBTkMgY29udGFjdCAoaW4gdGhlIEFOQyBEQUsgdGhpcyBpcyBjYWxsZWQgJ0NvbnRhY3QgZGF0ZScpCiAqCiAqIEFkZGl0aW9uYWwgQ29udGV4dAogKiAtIHdoYXQgaXQgbWVhc3VyZXM6IEE6ICUgb2YgcGVvcGxlIGF0dGVuZGluZyBISVYgcHJldmVudGlvbiBzZXJ2aWNlcyB3aG8gdGVzdGVkIHBvc2l0aXZlIGZvciBzeXBoaWxpcyBhbmQgfCB3ZXJlIHRyZWF0ZWQgYmFzZWQgb24gbmF0aW9uYWwgZ3VpZGVsaW5lcyBkdXJpbmcgdGhlIHJlcG9ydGluZyBwZXJpb2QgfCBCOiAlIG9mIHBlb3BsZSBsaXZpbmcgd2l0aCBISVYgd2hvIHRlc3RlZCBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgYW5kIHdlcmUgdHJlYXRlZCBiYXNlZCBvbiBuYXRpb25hbCBndWlkZWxpbmVzIGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZCB8IEM6ICUgb2YgcHJlZ25hbnQgd29tZW4gd2hvIHRlc3RlZCBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgYW5kIHdlcmUgdHJlYXRlZCBiYXNlZCBvbiBuYXRpb25hbCBndWlkZWxpbmVzIGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKiAtIHJhdGlvbmFsZTogUHJvbXB0IHRyZWF0bWVudCBvZiBpbmRpdmlkdWFscyBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgaXMgaW1wb3J0YW50IGZvciBpbXByb3ZpbmcgdGhlaXIgaGVhbHRoIGFuZCByZWR1Y2luZyBzZXh1YWwgYW5kIHZlcnRpY2FsIHRyYW5zbWlzc2lvbiBvZiBzeXBoaWxpcy4KICogLSBtZXRob2Q6IEluZGl2aWR1YWwtbGV2ZWwgZGF0YSBvYnRhaW5lZCBmcm9tIHByb2dyYW1tZSByZWNvcmRzLiAgIHwgIHwgSWYgaW5kaXZpZHVhbC1sZXZlbCBkYXRhIGFyZSBub3QgYXZhaWxhYmxlLCB0aGUgaW5kaWNhdG9yIGNhbiBiZSByZXBvcnRlZCB1c2luZyBhZ2dyZWdhdGUgcHJvZ3JhbW1lIGRhdGEuCiAqIAogKiBTdWdnZXN0ZWQgU2NvcmluZyBNZXRob2Q6IHByb3BvcnRpb24gfCBodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NxZm1lYXN1cmVzL1N0cnVjdHVyZURlZmluaXRpb24vcHJvcG9ydGlvbi1tZWFzdXJlLWNxZm0KICovCgpsaWJyYXJ5IEhJVklORDY4TG9naWMKCi8vIEluY2x1ZGVkIExpYnJhcmllcwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQ29tCmluY2x1ZGUgSElWRWxlbWVudHMgY2FsbGVkIEhFCmluY2x1ZGUgSElWSW5kaWNhdG9yRWxlbWVudHMgY2FsbGVkIEhJRQppbmNsdWRlIEhJVkNvbmZpZyBjYWxsZWQgQ29uZmlnCgovLyBJbmRpY2F0b3IgRGVmaW5pdGlvbgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZT4gZGVmYXVsdCBJbnRlcnZhbFtAMjAyMy0wMS0wMSwgQDIwMjMtMDEtMzBdCgpjb250ZXh0IFBhdGllbnQKLyogUG9wdWxhdGlvbnMgKi8KCi8qCiAqSW5pdGlhbCBQb3B1bGF0aW9uCiAqLwoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogIHRydWUKCi8qKgogKiBOdW1lcmF0b3IKICogCiAqIERlZmluaXRpb246IE51bWJlciBvZiBwcmVnbmFudCB3b21lbiB3aG8gdGVzdGVkIHBvc2l0aXZlIGZvciBzeXBoaWxpcyBvbiBmaXJzdCBBTkMgc2VydmljZXMgdmlzaXQgYW5kIHdlcmUgdHJlYXRlZCBiYXNlZCBvbiBuYXRpb25hbCBndWlkZWxpbmVzIGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgcHJlZ25hbnQgd29tZW4gd2l0aCBmaXJzdCAiQU5DIGNvbnRhY3QgZGF0ZSIgZm9yIHRoaXMgcHJlZ25hbmN5IGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiU3lwaGlsaXMgdGVzdCBkYXRlIiBvbiBmaXJzdCAiQU5DIGNvbnRhY3QgZGF0ZSIgQU5EICJTeXBoaWxpcyB0ZXN0IHJlc3VsdCI9J1Bvc2l0aXZlJyBBTkQgIlN5cGhpbGlzIHRyZWF0bWVudCBzdGFydCBkYXRlIiBpbiB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKi8KCmRlZmluZSAiTnVtZXJhdG9yIjoKICBGaXJzdChISUUuIkFOQyB3aXRoaW4gcHJlZ25hbmN5IikucGVyaW9kLnRvSW50ZXJ2YWwoKSBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIKICBhbmQgZXhpc3RzKEhFLiJQb3NpdGl2ZSBCLkRFMjUxIiBTCiAgd2l0aCBIRS4iU3lwaGlsaXMgdGVzdCBkYXRlIEIuREUyNDkiIFAKICBzdWNoIHRoYXQgUy5wYXJ0T2YucmVmZXJlbmNlcyhQKSBhbmQgUC5wZXJmb3JtZWQudG9JbnRlcnZhbCgpIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgogIGFuZCBzdGFydCBvZiBQLnBlcmZvcm1lZC50b0ludGVydmFsKCkgPSBzdGFydCBvZiBISUUuImZpcnN0IGFuYyBkYXRlIgogICkKICBhbmQgSElFLiJTeXBoaWxpcyB0cmVhdG1lbnQgc3RhcnQgZGF0ZSBCLkRFMjU0IgoKCi8qKgogKiBEZW5vbWluYXRvcgogKgogKiBEZWZpbml0aW9uOiBOdW1iZXIgb2YgcHJlZ25hbnQgd29tZW4gd2hvIHRlc3RlZCBwb3NpdGl2ZSBmb3Igc3lwaGlsaXMgb24gZmlyc3QgQU5DIHNlcnZpY2VzIHZpc2l0IGR1cmluZyB0aGUgcmVwb3J0aW5nIHBlcmlvZAogKiBDYWxjdWxhdGlvbjogQ09VTlQgb2YgcHJlZ25hbnQgd29tZW4gd2l0aCBmaXJzdCAiQU5DIGNvbnRhY3QgZGF0ZSIgZm9yIHRoaXMgcHJlZ25hbmN5IGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIEFORCAiU3lwaGlsaXMgdGVzdCBkYXRlIiBvbiBmaXJzdCAiQU5DIGNvbnRhY3QgZGF0ZSIgQU5EICJTeXBoaWxpcyB0ZXN0IHJlc3VsdCI9J1Bvc2l0aXZlJwogKi8KCmRlZmluZSAiRGVub21pbmF0b3IiOgogIEZpcnN0KEhJRS4iQU5DIHdpdGhpbiBwcmVnbmFuY3kiKS5wZXJpb2QudG9JbnRlcnZhbCgpIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgogIGFuZCBleGlzdHMoSEUuIlBvc2l0aXZlIEIuREUyNTEiIFMKICB3aXRoIEhFLiJTeXBoaWxpcyB0ZXN0IGRhdGUgQi5ERTI0OSIgUAogIHN1Y2ggdGhhdCBTLnBhcnRPZi5yZWZlcmVuY2VzKFApIGFuZCBQLnBlcmZvcm1lZC50b0ludGVydmFsKCkgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgYW5kIHN0YXJ0IG9mIFAucGVyZm9ybWVkLnRvSW50ZXJ2YWwoKSA9IHN0YXJ0IG9mIEhJRS4iZmlyc3QgYW5jIGRhdGUiCiAgKQogICAgCgovKiBlbmQgUG9wdWxhdGlvbnMgKi8KCi8qCiAqIERpc2FnZ3JlZ2F0b3JzCiAqLwoKCmRlZmluZSAiQWdlIFN0cmF0aWZpZXIiOgoJSElFLiJCeSBBZ2UgU3RyYXRpZmllciA5IgoKZGVmaW5lICJHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIjoKCUhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKCmRlZmluZSAiSElWIFN0YXR1cyI6CiAgSElFLiJISVYgU3RhdHVzIFN0cmF0aWZpZXIiCgpkZWZpbmUgIlN0cmF0aWZpY2F0aW9uIjoKSElFLiJCeSBBZ2UgU3RyYXRpZmllciA5IgorICc6JyArIEhJRS4iQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciIKKyAnOicgKyBISUUuIkhJViBTdGF0dXMgU3RyYXRpZmllciIuY29kZSA="
}
]
}