eCQM QICore Content Implementation Guide
2025.0.0 - CI Build
eCQM QICore Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/ecqm-content-qicore-2025/ and changes regularly. See the Directory of published versions
Active as of 2025-04-16 |
{
"resourceType" : "Library",
"id" : "OncologyPainIntensityQuantifiedFHIR",
"meta" : {
"profile" : [
🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-computablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-executablelibrary"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/elm-json-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/elm-xml-library"
]
},
"language" : "en",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"grid dict\">\n \n \n <tr>\n <th scope=\"row\"><b>Title: </b></th>\n <td style=\"padding-left: 4px;\">OncologyPainIntensityQuantifiedFHIR</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">OncologyPainIntensityQuantifiedFHIR</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">0.3.000</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Url: </b></th>\n <td style=\"padding-left: 4px;\">https://madie.cms.gov/Library/OncologyPainIntensityQuantifiedFHIR</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\">\n <b>\n \n official\n \n </b>\n </th>\n <td style=\"padding-left: 4px;\">\n \n <p style=\"margin-bottom: 5px;\">\n <span>OncologyPainIntensityQuantifiedFHIR</span>\n </p>\n \n </td>\n </tr>\n \n\n \n\n \n\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>http://terminology.hl7.org/CodeSystem/library-type</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-04-16T15:15:42+00:00</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">American Society of Clinical Oncology</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Description: </b></th>\n <td style=\"padding-left: 4px;\">OncologyPainIntensityQuantifiedFHIR</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 <tr>\n <th scope=\"row\"><b>Related Artifacts: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p><b>Dependencies</b></p>\n <ul>\n \n <li>https://madie.cms.gov/Library/QICoreCommon|4.0.000</li>\n \n <li>http://www.ama-assn.org/go/cpt</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1026</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1010</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.1444.5.215</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1027</li>\n \n <li>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1028</li>\n \n </ul>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Data Requirements:</b></th>\n <td style=\"padding-left: 4px;\">\n <table class=\"grid-dict\">\n <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter</th>\n <th>;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>type</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter</th>\n <th>;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>type</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.1444.5.215</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Observation</th>\n <th>http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-observation-screening-assessment</th>\n <th>;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>code</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1028</span>\n </span>\n \n \n \n </th>\n </tr>\n \n </table>\n </td>\n </tr>\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\">library OncologyPainIntensityQuantifiedFHIR version '0.3.000'\r\n\r\nusing QICore version '6.0.0'\r\n\r\ninclude FHIRHelpers version '4.4.000' called FHIRHelpers\r\ninclude CQMCommon version '4.0.000' called CQMCommon\r\ninclude QICoreCommon version '4.0.000' called QICoreCommon\r\ninclude SupplementalDataElements version '5.1.000' called SDE\r\n\r\ncodesystem "CPT": 'http://www.ama-assn.org/go/cpt'\r\n\r\nvalueset "Audio Visual Telehealth Encounter": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.1444.5.215'\r\nvalueset "Cancer": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1010'\r\nvalueset "Chemotherapy Administration": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1027'\r\nvalueset "Office Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'\r\nvalueset "Radiation Treatment Management": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1026'\r\nvalueset "Standardized Pain Assessment Tool": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1028'\r\n\r\ncode "Radiation treatment management, 5 treatments": '77427' from "CPT" display 'Radiation treatment management, 5 treatments'\r\n\r\nparameter "Measurement Period" Interval<DateTime>\r\n\r\ncontext Patient\r\n\r\ndefine "Denominator 1":\r\n "Initial Population 1"\r\n\r\ndefine "Denominator 2":\r\n "Initial Population 2"\r\n\r\ndefine "Initial Population 1":\r\n "Face to Face or Telehealth Encounter with Ongoing Chemotherapy"\r\n\r\ndefine "Initial Population 2":\r\n "Radiation Treatment Management During Measurement Period with Cancer Diagnosis"\r\n\r\ndefine "Chemotherapy Within 31 Days Prior and During Measurement Period":\r\n [Procedure: "Chemotherapy Administration"] ChemoAdministration\r\n where ChemoAdministration.performed.toInterval ( ) during Interval[start of "Measurement Period" - 31 days, end of "Measurement Period"]\r\n and ChemoAdministration.status = 'completed'\r\n\r\ndefine "Face to Face or Telehealth Encounter with Ongoing Chemotherapy":\r\n from\r\n ( [Encounter: "Office Visit"]\r\n union [Encounter: "Audio Visual Telehealth Encounter"] ) FaceToFaceOrTelehealthEncounter,\r\n "Chemotherapy Within 31 Days Prior and During Measurement Period" ChemoBeforeEncounter,\r\n "Chemotherapy Within 31 Days Prior and During Measurement Period" ChemoAfterEncounter,\r\n [ConditionProblemsHealthConcerns: "Cancer"] CancerDx\r\n where CancerDx.prevalenceInterval ( ) overlaps FaceToFaceOrTelehealthEncounter.period\r\n and ChemoBeforeEncounter.performed.toInterval ( ) starts 30 days or less on or before day of end of FaceToFaceOrTelehealthEncounter.period\r\n and ChemoAfterEncounter.performed.toInterval ( ) starts 30 days or less on or after day of end of FaceToFaceOrTelehealthEncounter.period\r\n and not ( ChemoAfterEncounter.performed.toInterval ( ) same day as ChemoBeforeEncounter.performed.toInterval ( ) )\r\n and FaceToFaceOrTelehealthEncounter.period during "Measurement Period"\r\n and FaceToFaceOrTelehealthEncounter.status = 'finished'\r\n return FaceToFaceOrTelehealthEncounter\r\n\r\ndefine "Numerator 1":\r\n "Face to Face or Telehealth Encounter with Ongoing Chemotherapy" FaceToFaceOrTelehealthEncounterWithChemo\r\n with "Standard Pain Assessment with Result" PainAssessed\r\n such that PainAssessed.effective.toInterval ( ) during FaceToFaceOrTelehealthEncounterWithChemo.period\r\n\r\ndefine "Radiation Treatment Management During Measurement Period with Cancer Diagnosis":\r\n ( [Encounter: "Radiation Treatment Management"] ) RadiationTreatmentManagement\r\n with [ConditionProblemsHealthConcerns: "Cancer"] CancerDx\r\n such that CancerDx.isActive ( )\r\n and CancerDx.prevalenceInterval ( ) overlaps RadiationTreatmentManagement.period\r\n where RadiationTreatmentManagement.period during "Measurement Period"\r\n and RadiationTreatmentManagement.status = 'finished'\r\n\r\ndefine "Numerator 2":\r\n "Radiation Treatment Management During Measurement Period with Cancer Diagnosis" RadiationManagementEncounter\r\n with "Standard Pain Assessment with Result" PainAssessed\r\n such that case\r\n when exists ( ( RadiationManagementEncounter.type ) RadiationManagement\r\n where RadiationManagement ~ "Radiation treatment management, 5 treatments"\r\n ) then PainAssessed.effective.toInterval ( ) 6 days or less on or before day of start of RadiationManagementEncounter.period \r\n else PainAssessed.effective.toInterval ( ) during day of RadiationManagementEncounter.period end\r\n\r\ndefine "SDE Ethnicity":\r\n SDE."SDE Ethnicity"\r\n\r\ndefine "SDE Payer":\r\n SDE."SDE Payer"\r\n\r\ndefine "SDE Race":\r\n SDE."SDE Race"\r\n\r\ndefine "SDE Sex":\r\n SDE."SDE Sex"\r\n\r\ndefine "Standard Pain Assessment with Result":\r\n [ObservationScreeningAssessment: "Standardized Pain Assessment Tool"] AssessedPain\r\n where AssessedPain.value is not null\r\n and AssessedPain.status = 'final'</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>"
},
"contained" : [
{
"resourceType" : "Parameters",
"id" : "options",
"parameter" : [
{
"name" : "translatorVersion",
"valueString" : "3.25.0"
},
{
"name" : "option",
"valueString" : "EnableAnnotations"
},
{
"name" : "option",
"valueString" : "EnableLocators"
},
{
"name" : "option",
"valueString" : "DisableListDemotion"
},
{
"name" : "option",
"valueString" : "DisableListPromotion"
},
{
"name" : "format",
"valueString" : "JSON"
},
{
"name" : "format",
"valueString" : "XML"
},
{
"name" : "analyzeDataRequirements",
"valueBoolean" : false
},
{
"name" : "collapseDataRequirements",
"valueBoolean" : false
},
{
"name" : "compatibilityLevel",
"valueString" : "1.5"
},
{
"name" : "enableCqlOnly",
"valueBoolean" : false
},
{
"name" : "errorLevel",
"valueString" : "Info"
},
{
"name" : "signatureLevel",
"valueString" : "Overloads"
},
{
"name" : "validateUnits",
"valueBoolean" : true
},
{
"name" : "verifyOnly",
"valueBoolean" : false
}
]
}
],
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-directReferenceCode",
"valueCoding" : {
"system" : "http://www.ama-assn.org/go/cpt",
"code" : "77427",
"display" : "Radiation treatment management, 5 treatments"
}
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions",
"valueReference" : {
"reference" : "#options"
}
},
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
"reference" : "Device/cqf-tooling"
}
}
],
"url" : "https://madie.cms.gov/Library/OncologyPainIntensityQuantifiedFHIR",
"identifier" : [
{
"use" : "official",
"system" : "https://madie.cms.gov/login",
"value" : "OncologyPainIntensityQuantifiedFHIR"
}
],
"version" : "0.3.000",
"name" : "OncologyPainIntensityQuantifiedFHIR",
"title" : "OncologyPainIntensityQuantifiedFHIR",
"status" : "active",
"experimental" : false,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2025-04-16T15:15:42+00:00",
"publisher" : "American Society of Clinical Oncology",
"description" : "OncologyPainIntensityQuantifiedFHIR",
"content" : [
{
"contentType" : "text/cql",
"data" : "bGlicmFyeSBPbmNvbG9neVBhaW5JbnRlbnNpdHlRdWFudGlmaWVkRkhJUiB2ZXJzaW9uICcwLjMuMDAwJw0KDQp1c2luZyBRSUNvcmUgdmVyc2lvbiAnNi4wLjAnDQoNCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC40LjAwMCcgY2FsbGVkIEZISVJIZWxwZXJzDQppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc0LjAuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uDQppbmNsdWRlIFFJQ29yZUNvbW1vbiB2ZXJzaW9uICc0LjAuMDAwJyBjYWxsZWQgUUlDb3JlQ29tbW9uDQppbmNsdWRlIFN1cHBsZW1lbnRhbERhdGFFbGVtZW50cyB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgU0RFDQoNCmNvZGVzeXN0ZW0gIkNQVCI6ICdodHRwOi8vd3d3LmFtYS1hc3NuLm9yZy9nby9jcHQnDQoNCnZhbHVlc2V0ICJBdWRpbyBWaXN1YWwgVGVsZWhlYWx0aCBFbmNvdW50ZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTQ0NC41LjIxNScNCnZhbHVlc2V0ICJDYW5jZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTAxMCcNCnZhbHVlc2V0ICJDaGVtb3RoZXJhcHkgQWRtaW5pc3RyYXRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTAyNycNCnZhbHVlc2V0ICJPZmZpY2UgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDEnDQp2YWx1ZXNldCAiUmFkaWF0aW9uIFRyZWF0bWVudCBNYW5hZ2VtZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjEwMjYnDQp2YWx1ZXNldCAiU3RhbmRhcmRpemVkIFBhaW4gQXNzZXNzbWVudCBUb29sIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjEwMjgnDQoNCmNvZGUgIlJhZGlhdGlvbiB0cmVhdG1lbnQgbWFuYWdlbWVudCwgNSB0cmVhdG1lbnRzIjogJzc3NDI3JyBmcm9tICJDUFQiIGRpc3BsYXkgJ1JhZGlhdGlvbiB0cmVhdG1lbnQgbWFuYWdlbWVudCwgNSB0cmVhdG1lbnRzJw0KDQpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+DQoNCmNvbnRleHQgUGF0aWVudA0KDQpkZWZpbmUgIkRlbm9taW5hdG9yIDEiOg0KICAiSW5pdGlhbCBQb3B1bGF0aW9uIDEiDQoNCmRlZmluZSAiRGVub21pbmF0b3IgMiI6DQogICJJbml0aWFsIFBvcHVsYXRpb24gMiINCg0KZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24gMSI6DQogICJGYWNlIHRvIEZhY2Ugb3IgVGVsZWhlYWx0aCBFbmNvdW50ZXIgd2l0aCBPbmdvaW5nIENoZW1vdGhlcmFweSINCg0KZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24gMiI6DQogICJSYWRpYXRpb24gVHJlYXRtZW50IE1hbmFnZW1lbnQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCB3aXRoIENhbmNlciBEaWFnbm9zaXMiDQoNCmRlZmluZSAiQ2hlbW90aGVyYXB5IFdpdGhpbiAzMSBEYXlzIFByaW9yIGFuZCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoNCiAgW1Byb2NlZHVyZTogIkNoZW1vdGhlcmFweSBBZG1pbmlzdHJhdGlvbiJdIENoZW1vQWRtaW5pc3RyYXRpb24NCiAgICB3aGVyZSBDaGVtb0FkbWluaXN0cmF0aW9uLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBkdXJpbmcgSW50ZXJ2YWxbc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIgLSAzMSBkYXlzLCBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCJdDQogICAgICBhbmQgQ2hlbW9BZG1pbmlzdHJhdGlvbi5zdGF0dXMgPSAnY29tcGxldGVkJw0KDQpkZWZpbmUgIkZhY2UgdG8gRmFjZSBvciBUZWxlaGVhbHRoIEVuY291bnRlciB3aXRoIE9uZ29pbmcgQ2hlbW90aGVyYXB5IjoNCiAgZnJvbQ0KICAgICggW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdDQogICAgICB1bmlvbiBbRW5jb3VudGVyOiAiQXVkaW8gVmlzdWFsIFRlbGVoZWFsdGggRW5jb3VudGVyIl0gKSBGYWNlVG9GYWNlT3JUZWxlaGVhbHRoRW5jb3VudGVyLA0KICAgICJDaGVtb3RoZXJhcHkgV2l0aGluIDMxIERheXMgUHJpb3IgYW5kIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIENoZW1vQmVmb3JlRW5jb3VudGVyLA0KICAgICJDaGVtb3RoZXJhcHkgV2l0aGluIDMxIERheXMgUHJpb3IgYW5kIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIENoZW1vQWZ0ZXJFbmNvdW50ZXIsDQogICAgW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJDYW5jZXIiXSBDYW5jZXJEeA0KICAgIHdoZXJlIENhbmNlckR4LnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgRmFjZVRvRmFjZU9yVGVsZWhlYWx0aEVuY291bnRlci5wZXJpb2QNCiAgICAgIGFuZCBDaGVtb0JlZm9yZUVuY291bnRlci5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgc3RhcnRzIDMwIGRheXMgb3IgbGVzcyBvbiBvciBiZWZvcmUgZGF5IG9mIGVuZCBvZiBGYWNlVG9GYWNlT3JUZWxlaGVhbHRoRW5jb3VudGVyLnBlcmlvZA0KICAgICAgYW5kIENoZW1vQWZ0ZXJFbmNvdW50ZXIucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyAzMCBkYXlzIG9yIGxlc3Mgb24gb3IgYWZ0ZXIgZGF5IG9mIGVuZCBvZiBGYWNlVG9GYWNlT3JUZWxlaGVhbHRoRW5jb3VudGVyLnBlcmlvZA0KICAgICAgYW5kIG5vdCAoIENoZW1vQWZ0ZXJFbmNvdW50ZXIucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHNhbWUgZGF5IGFzIENoZW1vQmVmb3JlRW5jb3VudGVyLnBlcmZvcm1lZC50b0ludGVydmFsICggKSApDQogICAgICBhbmQgRmFjZVRvRmFjZU9yVGVsZWhlYWx0aEVuY291bnRlci5wZXJpb2QgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiDQogICAgICBhbmQgRmFjZVRvRmFjZU9yVGVsZWhlYWx0aEVuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnDQogICAgcmV0dXJuIEZhY2VUb0ZhY2VPclRlbGVoZWFsdGhFbmNvdW50ZXINCg0KZGVmaW5lICJOdW1lcmF0b3IgMSI6DQogICJGYWNlIHRvIEZhY2Ugb3IgVGVsZWhlYWx0aCBFbmNvdW50ZXIgd2l0aCBPbmdvaW5nIENoZW1vdGhlcmFweSIgRmFjZVRvRmFjZU9yVGVsZWhlYWx0aEVuY291bnRlcldpdGhDaGVtbw0KICAgIHdpdGggIlN0YW5kYXJkIFBhaW4gQXNzZXNzbWVudCB3aXRoIFJlc3VsdCIgUGFpbkFzc2Vzc2VkDQogICAgICBzdWNoIHRoYXQgUGFpbkFzc2Vzc2VkLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBkdXJpbmcgRmFjZVRvRmFjZU9yVGVsZWhlYWx0aEVuY291bnRlcldpdGhDaGVtby5wZXJpb2QNCg0KZGVmaW5lICJSYWRpYXRpb24gVHJlYXRtZW50IE1hbmFnZW1lbnQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCB3aXRoIENhbmNlciBEaWFnbm9zaXMiOg0KICAoIFtFbmNvdW50ZXI6ICJSYWRpYXRpb24gVHJlYXRtZW50IE1hbmFnZW1lbnQiXSApIFJhZGlhdGlvblRyZWF0bWVudE1hbmFnZW1lbnQNCiAgICB3aXRoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiQ2FuY2VyIl0gQ2FuY2VyRHgNCiAgICAgIHN1Y2ggdGhhdCBDYW5jZXJEeC5pc0FjdGl2ZSAoICkNCiAgICAgICAgYW5kIENhbmNlckR4LnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgUmFkaWF0aW9uVHJlYXRtZW50TWFuYWdlbWVudC5wZXJpb2QNCiAgICB3aGVyZSBSYWRpYXRpb25UcmVhdG1lbnRNYW5hZ2VtZW50LnBlcmlvZCBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCINCiAgICAgIGFuZCBSYWRpYXRpb25UcmVhdG1lbnRNYW5hZ2VtZW50LnN0YXR1cyA9ICdmaW5pc2hlZCcNCg0KZGVmaW5lICJOdW1lcmF0b3IgMiI6DQogICJSYWRpYXRpb24gVHJlYXRtZW50IE1hbmFnZW1lbnQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCB3aXRoIENhbmNlciBEaWFnbm9zaXMiIFJhZGlhdGlvbk1hbmFnZW1lbnRFbmNvdW50ZXINCiAgICB3aXRoICJTdGFuZGFyZCBQYWluIEFzc2Vzc21lbnQgd2l0aCBSZXN1bHQiIFBhaW5Bc3Nlc3NlZA0KICAgICAgc3VjaCB0aGF0IGNhc2UNCiAgICAgICAgd2hlbiBleGlzdHMgKCAoIFJhZGlhdGlvbk1hbmFnZW1lbnRFbmNvdW50ZXIudHlwZSApIFJhZGlhdGlvbk1hbmFnZW1lbnQNCiAgICAgICAgICAgIHdoZXJlIFJhZGlhdGlvbk1hbmFnZW1lbnQgfiAiUmFkaWF0aW9uIHRyZWF0bWVudCBtYW5hZ2VtZW50LCA1IHRyZWF0bWVudHMiDQogICAgICAgICkgdGhlbiBQYWluQXNzZXNzZWQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIDYgZGF5cyBvciBsZXNzIG9uIG9yIGJlZm9yZSBkYXkgb2Ygc3RhcnQgb2YgUmFkaWF0aW9uTWFuYWdlbWVudEVuY291bnRlci5wZXJpb2QgDQogICAgICAgIGVsc2UgUGFpbkFzc2Vzc2VkLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBkdXJpbmcgZGF5IG9mIFJhZGlhdGlvbk1hbmFnZW1lbnRFbmNvdW50ZXIucGVyaW9kIGVuZA0KDQpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOg0KICBTREUuIlNERSBFdGhuaWNpdHkiDQoNCmRlZmluZSAiU0RFIFBheWVyIjoNCiAgU0RFLiJTREUgUGF5ZXIiDQoNCmRlZmluZSAiU0RFIFJhY2UiOg0KICBTREUuIlNERSBSYWNlIg0KDQpkZWZpbmUgIlNERSBTZXgiOg0KICBTREUuIlNERSBTZXgiDQoNCmRlZmluZSAiU3RhbmRhcmQgUGFpbiBBc3Nlc3NtZW50IHdpdGggUmVzdWx0IjoNCiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlN0YW5kYXJkaXplZCBQYWluIEFzc2Vzc21lbnQgVG9vbCJdIEFzc2Vzc2VkUGFpbg0KICAgIHdoZXJlIEFzc2Vzc2VkUGFpbi52YWx1ZSBpcyBub3QgbnVsbA0KICAgICAgYW5kIEFzc2Vzc2VkUGFpbi5zdGF0dXMgPSAnZmluYWwn"
}
]
}