Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build
Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions
| Draft as of 2026-09-19 |
{
"resourceType" : "Library",
"id" : "CMS1244FHIRECATHOQR",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"narrative-table\">\n <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\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\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n \n \n <tr>\n <th scope=\"row\" class=\"row-header\">CQL Content</th>\n <td>\n <a name=\"cql-content\"> </a>\n <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMS1244FHIRECATHOQR version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude CQMCommon version '5.1.000' called CQMCommon\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\n\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\ncodesystem "RoleCode": 'http://terminology.hl7.org/CodeSystem/v3-RoleCode'\n\nvalueset "Admit Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.164'\nvalueset "Mental Health Diagnosis without Substance Use Disorders": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.285'\nvalueset "Decision to Admit to Hospital Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.294'\nvalueset "Emergency Department Evaluation": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.163'\nvalueset "Emergency Department Evaluation and Management Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1010'\nvalueset "Emergency Department Location": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.284'\nvalueset "Emergency Department Treatment Location": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.278'\nvalueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'\nvalueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset "Triage": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.279'\n\ncode "Patient bed assigned (finding)": '5751000175101' from "SNOMEDCT" display 'Patient bed assigned (finding)'\ncode "Patient left without being seen (finding)": '21541000119102' from "SNOMEDCT" display 'Patient left without being seen (finding)'\ncode "Emergency room": 'ER' from "RoleCode" display 'Emergency room'\ncode "Emergency trauma unit": 'ETU' from "RoleCode" display 'Emergency trauma unit'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine "Initial Population":\n "ED Evaluation and Management"\n union "ED Triage Excluding Those Prior To ED Encounters"\n\ndefine "Denominator":\n "Initial Population"\n\ndefine "Numerator":\n "Time to Treatment Room Greater Than 60 Minutes"\n union "ED Arrival Left Without Being Seen"\n union "Boarded Time Greater Than 240 Minutes and No Observation Stay"\n union "ED Length of Stay Greater Than 480 Minutes and No Observation Stay"\n\ndefine "Pediatric With No Mental Health Diagnosis":\n ( "ED Encounter or Triage of Patients Less Than 18 Years" PediatricEDEncounters\n where not ( PediatricEDEncounters.hasPrincipalDiagnosisOf ( "Mental Health Diagnosis without Substance Use Disorders" ) )\n )\n\ndefine "Adult With No Mental Health Diagnosis":\n ( "ED Encounter or Triage of Patients 18 Years and Older" AdultEDEncounters\n where not ( AdultEDEncounters.hasPrincipalDiagnosisOf ( "Mental Health Diagnosis without Substance Use Disorders" ) )\n )\n\ndefine "Pediatric With Mental Health Diagnosis":\n ( "ED Encounter or Triage of Patients Less Than 18 Years" PediatricEDEncounters\n where ( PediatricEDEncounters.hasPrincipalDiagnosisOf ( "Mental Health Diagnosis without Substance Use Disorders" ) )\n )\n\ndefine "Adult With Mental Health Diagnosis":\n ( "ED Encounter or Triage of Patients 18 Years and Older" AdultEDEncounters\n where ( AdultEDEncounters.hasPrincipalDiagnosisOf ( "Mental Health Diagnosis without Substance Use Disorders" ) )\n )\n\ndefine "Stratification 1":\n "Pediatric With No Mental Health Diagnosis"\n\ndefine "Stratification 2":\n "Adult With No Mental Health Diagnosis"\n\ndefine "Stratification 3":\n "Pediatric With Mental Health Diagnosis"\n\ndefine "Stratification 4":\n "Adult With Mental Health Diagnosis"\n\ndefine "Admitted to Inpatient 241 Minutes or More Before Departure":\n "Denominator" EDEncounter\n with CQMCommon."Inpatient Encounter" Inpatient\n such that Inpatient.holdingInEDAfterAdmission ( ) 241 minutes or more before EDEncounter.edDepartureTime ( )\n\ndefine "Boarded Time Greater Than 240 Minutes":\n "Decision to Admit Encounter Order"\n union "Decision to Admit Using Assessment"\n union "Time of Admit Order Or Bed Assignment to Departure Greater Than 241 Minutes"\n union "Admitted to Inpatient 241 Minutes or More Before Departure"\n\ndefine "Boarded Time Greater Than 240 Minutes and No Observation Stay":\n ( "Boarded Time Greater Than 240 Minutes" Boarding\n where not exists ( "ED Observation Status" EDObs\n where ( EDObs.period during Boarding.period )\n )\n )\n\ndefine "Decision to Admit Encounter Order":\n "Denominator" EDEncounter\n with CQMCommon."Inpatient Encounter" EncounterInpatient\n such that EncounterInpatient.admitDecisionUsingEncounterOrder ( ) 241 minutes or more before EDEncounter.edDepartureTime ( )\n\ndefine "Decision to Admit Using Assessment":\n "Denominator" EDEncounter\n with CQMCommon."Inpatient Encounter" EncounterInpatient\n such that EncounterInpatient.admitDecisionUsingAssessment ( ) 241 minutes or more before EDEncounter.edDepartureTime ( )\n\ndefine "ED Arrival Left Without Being Seen":\n "Denominator" EDEncounter\n where EDEncounter.hospitalization.dischargeDisposition ~ "Patient left without being seen (finding)"\n\ndefine "ED Evaluation and Management":\n [Encounter: "Emergency Department Evaluation and Management Visit"] EDEvalManagementVisit\n where EDEvalManagementVisit.period ends during day of "Measurement Period"\n and EDEvalManagementVisit.status = 'finished'\n\ndefine "ED Encounter or Triage of Patients 18 Years and Older":\n "Denominator" EDEncounter\n where AgeInYearsAt(date from start of "Measurement Period") >= 18\n\ndefine "ED Encounter or Triage of Patients Less Than 18 Years":\n "Denominator" EDEncounter\n where AgeInYearsAt(date from start of "Measurement Period") < 18\n\ndefine "ED Length of Stay Greater Than 480 Minutes":\n "Denominator" EDEncounter\n where EDEncounter.edArrivalTime ( ) 481 minutes or more before EDEncounter.edDepartureTime ( )\n\ndefine "ED Length of Stay Greater Than 480 Minutes and No Observation Stay":\n ( "ED Length of Stay Greater Than 480 Minutes" EDStay\n where not exists ( "ED Observation Status" EDObs\n where ( EDObs.period during EDStay.period )\n )\n )\n\ndefine "ED Observation Status":\n [Encounter: "Observation Services"] EDObsEncounter\n with "Denominator" EDEncounter\n such that EDObsEncounter.period during EDEncounter.period\n and EDObsEncounter.status = 'finished'\n\ndefine "ED Triage":\n ( [Encounter: "Triage"] EDTriage\n where EDTriage.period ends during day of "Measurement Period"\n and EDTriage.status in { 'finished', 'triaged' }\n )\n\ndefine "ED Triage Excluding Those Prior To ED Encounters":\n "ED Triage" EDTriageinMP\n where not exists ( "ED Evaluation and Management" EDEvalManagementInMP\n where ( ( EDTriageinMP.period overlaps before EDEvalManagementInMP.period )\n or ( EDTriageinMP.period during EDEvalManagementInMP.period )\n or ( EDEvalManagementInMP.period during EDTriageinMP.period )\n or ( EDTriageinMP.period ends 120 minutes or less before start of EDEvalManagementInMP.period )\n )\n )\n\ndefine "ED Triage Before Evaluation Management":\n "ED Triage" EDTriageinMP\n with "Denominator" EDEncounter\n such that ( ( EDTriageinMP.period overlaps before EDEncounter.period )\n or ( EDTriageinMP.period during EDEncounter.period )\n or ( EDEncounter.period during EDTriageinMP.period )\n or ( EDTriageinMP.period ends 120 minutes or less before start of EDEncounter.period )\n )\n\ndefine "ED Triage and Evaluation Management":\n "Denominator"\n union "ED Triage Before Evaluation Management"\n\ndefine "Time of Admit Order Or Bed Assignment to Departure Greater Than 241 Minutes":\n "Denominator" EDEncounter\n with CQMCommon."Inpatient Encounter" InpatientEncounter\n such that InpatientEncounter.admitInpatientOrBedAssignmentEncounterOrder ( ) 241 minutes or more before EDEncounter.edDepartureTime ( )\n\ndefine "Time to Treatment Room Greater Than 60 Minutes":\n "ED Evaluation and Management" EDEvalManagementInMP\n where EDEvalManagementInMP.edArrivalTime ( ) 61 minutes or more before EDEvalManagementInMP.edTreatmentRoomTimeArrivalTime ( )\n\ndefine "Assessment In ED":\n ["ObservationClinicalResult": "Emergency Department Evaluation"]\n union ["SimpleObservation": "Emergency Department Evaluation"] ObsInED\n where ObsInED.value as CodeableConcept in "Admit Inpatient"\n\ndefine fluent function "admitDecisionUsingAssessment"(EncounterInpatient Encounter):\n Last("Assessment In ED" EDEvaluation\n let LastEDVisit: EncounterInpatient.lastEDEncounter()\n where EDEvaluation.effective.toInterval() starts during LastEDVisit.period\n and EDEvaluation.status in { 'final', 'amended', 'corrected' }\n return start of EDEvaluation.effective.toInterval()\n sort ascending\n )\n\ndefine "ED To Inpatient Order":\n [ServiceRequest: "Decision to Admit to Hospital Inpatient"] AdmitIPOrder\n where AdmitIPOrder.status in { 'active', 'completed' }\n\ndefine fluent function "admitDecisionUsingEncounterOrder"(EncounterInpatient Encounter):\n Last("ED To Inpatient Order" AdmitOrder\n let LastEDVisit: EncounterInpatient.lastEDEncounter()\n where AdmitOrder.authoredOn during LastEDVisit.period\n and AdmitOrder.intent ~ 'order'\n return AdmitOrder.authoredOn\n sort ascending\n )\n\ndefine "Inpatient Or Bed Assignment Encounter Order":\n ( [ServiceRequest: "Encounter Inpatient"]\n union [ServiceRequest: "Patient bed assigned (finding)"] ) IPRequest\n where IPRequest.status in { 'active', 'completed' }\n\ndefine fluent function "admitInpatientOrBedAssignmentEncounterOrder"(Encounter Encounter):\n Last(("Inpatient Or Bed Assignment Encounter Order") AdmitInpatientOrder\n let LastEDVisit: Encounter.lastEDEncounter()\n where AdmitInpatientOrder.authoredOn during LastEDVisit.period\n return AdmitInpatientOrder.authoredOn\n sort ascending\n )\n\ndefine fluent function "edArrivalTime"(EDEncounter Encounter):\n Last("ED Triage and Evaluation Management".location Location\n where exists((Location.location.getLocation().type) LocationType\n where(LocationType in "Emergency Department Location"\n or LocationType ~ "Emergency room"\n or LocationType ~ "Emergency trauma unit"\n )\n )\n and start of Location.period is not null\n and(Location.period ends 120 minutes or less before start of EDEncounter.period\n or Location.period overlaps before EDEncounter.period\n or EDEncounter.period overlaps before Location.period\n or Location.period starts same as start of EDEncounter.period\n )\n return start of Location.period\n sort ascending\n )\n\ndefine fluent function "edDepartureTime"(EDEncounter Encounter):\n Last("ED Triage and Evaluation Management".location Location\n where exists((Location.location.getLocation().type) LocationType\n where(LocationType in "Emergency Department Location"\n or LocationType ~ "Emergency room"\n or LocationType ~ "Emergency trauma unit"\n )\n )\n and \n end of Location.period is not null\n and(Location.period ends 120 minutes or less before start of EDEncounter.period\n or Location.period overlaps before EDEncounter.period\n or EDEncounter.period overlaps before Location.period\n or Location.period starts same as start of EDEncounter.period\n )\n return \n end of Location.period\n sort ascending\n )\n\ndefine fluent function "edTreatmentRoomTimeArrivalTime"(EDEncounter Encounter):\n First(EDEncounter.location Location\n where Location.location.getLocation().type in "Emergency Department Treatment Location"\n and start of Location.period is not null\n return start of Location.period\n sort ascending\n )\n\ndefine fluent function holdingInEDAfterAdmission(InpatientEncounter Encounter):\n Last(CQMCommon."Inpatient Encounter" AdmittedInpatient\n let LastEDVisit: InpatientEncounter.lastEDEncounter()\n where start of AdmittedInpatient.period during LastEDVisit.period\n return start of AdmittedInpatient.period\n sort ascending\n )\n\ndefine fluent function "lastEDEncounter"(EncounterInpatient Encounter):\n Last("ED Evaluation and Management" EDEvalManagementInMP\n where EDEvalManagementInMP.period starts 1 day or less before or on start of EncounterInpatient.period\n and EDEvalManagementInMP.period starts before start of EncounterInpatient.period\n and EDEvalManagementInMP.period during day of "Measurement Period"\n and EDEvalManagementInMP.status = 'finished'\n sort by \n end of period ascending\n )\n\ndefine "SDE Ethnicity":\n SDE."SDE Ethnicity"\n\ndefine "SDE Payer":\n SDE."SDE Payer"\n\ndefine "SDE Race":\n SDE."SDE Race"\n\ndefine "SDE Sex":\n SDE."SDE Sex"</code></pre>\n </td>\n </tr>\n \n \n\n\n\n<tr>\n <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n </tbody>\n </table>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
"reference" : "Device/cqf-tooling"
}
}
],
"url" : "https://madie.cms.gov/Library/CMS1244FHIRECATHOQR",
"version" : "1.1.000",
"name" : "CMS1244FHIRECATHOQR",
"status" : "draft",
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-09-19T16:31:14+00:00",
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMxMjQ0RkhJUkVDQVRIT1FSIHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uCmluY2x1ZGUgVVNRdWFsaXR5Q29yZUNvbW1vbiB2ZXJzaW9uICcwLjEuMC1jaWJ1aWxkJyBjYWxsZWQgVVNRdWFsaXR5Q29yZUNvbW1vbgppbmNsdWRlIFN1cHBsZW1lbnRhbERhdGFFbGVtZW50cyB2ZXJzaW9uICc2LjEuMDAwJyBjYWxsZWQgU0RFCmluY2x1ZGUgU3RhdHVzIHZlcnNpb24gJzIuMS4wMDAnIGNhbGxlZCBTdGF0dXMKCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIlJvbGVDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtUm9sZUNvZGUnCgp2YWx1ZXNldCAiQWRtaXQgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNjQnCnZhbHVlc2V0ICJNZW50YWwgSGVhbHRoIERpYWdub3NpcyB3aXRob3V0IFN1YnN0YW5jZSBVc2UgRGlzb3JkZXJzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0Ni4yODUnCnZhbHVlc2V0ICJEZWNpc2lvbiB0byBBZG1pdCB0byBIb3NwaXRhbCBJbnBhdGllbnQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuMTE3LjEuNy4xLjI5NCcKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IEV2YWx1YXRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMTExLjE2MycKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IEV2YWx1YXRpb24gYW5kIE1hbmFnZW1lbnQgVmlzaXQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTAnCnZhbHVlc2V0ICJFbWVyZ2VuY3kgRGVwYXJ0bWVudCBMb2NhdGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwNDYuMjg0Jwp2YWx1ZXNldCAiRW1lcmdlbmN5IERlcGFydG1lbnQgVHJlYXRtZW50IExvY2F0aW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0Ni4yNzgnCnZhbHVlc2V0ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMTEuMTQzJwp2YWx1ZXNldCAiRW5jb3VudGVyIElucGF0aWVudCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42NjYuNS4zMDcnCnZhbHVlc2V0ICJUcmlhZ2UiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3OScKCmNvZGUgIlBhdGllbnQgYmVkIGFzc2lnbmVkIChmaW5kaW5nKSI6ICc1NzUxMDAwMTc1MTAxJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnUGF0aWVudCBiZWQgYXNzaWduZWQgKGZpbmRpbmcpJwpjb2RlICJQYXRpZW50IGxlZnQgd2l0aG91dCBiZWluZyBzZWVuIChmaW5kaW5nKSI6ICcyMTU0MTAwMDExOTEwMicgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ1BhdGllbnQgbGVmdCB3aXRob3V0IGJlaW5nIHNlZW4gKGZpbmRpbmcpJwpjb2RlICJFbWVyZ2VuY3kgcm9vbSI6ICdFUicgZnJvbSAiUm9sZUNvZGUiIGRpc3BsYXkgJ0VtZXJnZW5jeSByb29tJwpjb2RlICJFbWVyZ2VuY3kgdHJhdW1hIHVuaXQiOiAnRVRVJyBmcm9tICJSb2xlQ29kZSIgZGlzcGxheSAnRW1lcmdlbmN5IHRyYXVtYSB1bml0JwoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGVUaW1lPgogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAuMDAwWiwgQDIwMjctMDEtMDFUMDA6MDA6MDAuMDAwWikKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogICJFRCBFdmFsdWF0aW9uIGFuZCBNYW5hZ2VtZW50IgogICAgdW5pb24gIkVEIFRyaWFnZSBFeGNsdWRpbmcgVGhvc2UgUHJpb3IgVG8gRUQgRW5jb3VudGVycyIKCmRlZmluZSAiRGVub21pbmF0b3IiOgogICJJbml0aWFsIFBvcHVsYXRpb24iCgpkZWZpbmUgIk51bWVyYXRvciI6CiAgIlRpbWUgdG8gVHJlYXRtZW50IFJvb20gR3JlYXRlciBUaGFuIDYwIE1pbnV0ZXMiCiAgICB1bmlvbiAiRUQgQXJyaXZhbCBMZWZ0IFdpdGhvdXQgQmVpbmcgU2VlbiIKICAgIHVuaW9uICJCb2FyZGVkIFRpbWUgR3JlYXRlciBUaGFuIDI0MCBNaW51dGVzIGFuZCBObyBPYnNlcnZhdGlvbiBTdGF5IgogICAgdW5pb24gIkVEIExlbmd0aCBvZiBTdGF5IEdyZWF0ZXIgVGhhbiA0ODAgTWludXRlcyBhbmQgTm8gT2JzZXJ2YXRpb24gU3RheSIKCmRlZmluZSAiUGVkaWF0cmljIFdpdGggTm8gTWVudGFsIEhlYWx0aCBEaWFnbm9zaXMiOgogICggIkVEIEVuY291bnRlciBvciBUcmlhZ2Ugb2YgUGF0aWVudHMgTGVzcyBUaGFuIDE4IFllYXJzIiBQZWRpYXRyaWNFREVuY291bnRlcnMKICAgICAgd2hlcmUgbm90ICggUGVkaWF0cmljRURFbmNvdW50ZXJzLmhhc1ByaW5jaXBhbERpYWdub3Npc09mICggIk1lbnRhbCBIZWFsdGggRGlhZ25vc2lzIHdpdGhvdXQgU3Vic3RhbmNlIFVzZSBEaXNvcmRlcnMiICkgKQogICkKCmRlZmluZSAiQWR1bHQgV2l0aCBObyBNZW50YWwgSGVhbHRoIERpYWdub3NpcyI6CiAgKCAiRUQgRW5jb3VudGVyIG9yIFRyaWFnZSBvZiBQYXRpZW50cyAxOCBZZWFycyBhbmQgT2xkZXIiIEFkdWx0RURFbmNvdW50ZXJzCiAgICAgIHdoZXJlIG5vdCAoIEFkdWx0RURFbmNvdW50ZXJzLmhhc1ByaW5jaXBhbERpYWdub3Npc09mICggIk1lbnRhbCBIZWFsdGggRGlhZ25vc2lzIHdpdGhvdXQgU3Vic3RhbmNlIFVzZSBEaXNvcmRlcnMiICkgKQogICkKCmRlZmluZSAiUGVkaWF0cmljIFdpdGggTWVudGFsIEhlYWx0aCBEaWFnbm9zaXMiOgogICggIkVEIEVuY291bnRlciBvciBUcmlhZ2Ugb2YgUGF0aWVudHMgTGVzcyBUaGFuIDE4IFllYXJzIiBQZWRpYXRyaWNFREVuY291bnRlcnMKICAgICAgd2hlcmUgKCBQZWRpYXRyaWNFREVuY291bnRlcnMuaGFzUHJpbmNpcGFsRGlhZ25vc2lzT2YgKCAiTWVudGFsIEhlYWx0aCBEaWFnbm9zaXMgd2l0aG91dCBTdWJzdGFuY2UgVXNlIERpc29yZGVycyIgKSApCiAgKQoKZGVmaW5lICJBZHVsdCBXaXRoIE1lbnRhbCBIZWFsdGggRGlhZ25vc2lzIjoKICAoICJFRCBFbmNvdW50ZXIgb3IgVHJpYWdlIG9mIFBhdGllbnRzIDE4IFllYXJzIGFuZCBPbGRlciIgQWR1bHRFREVuY291bnRlcnMKICAgICAgd2hlcmUgKCBBZHVsdEVERW5jb3VudGVycy5oYXNQcmluY2lwYWxEaWFnbm9zaXNPZiAoICJNZW50YWwgSGVhbHRoIERpYWdub3NpcyB3aXRob3V0IFN1YnN0YW5jZSBVc2UgRGlzb3JkZXJzIiApICkKICApCgpkZWZpbmUgIlN0cmF0aWZpY2F0aW9uIDEiOgogICJQZWRpYXRyaWMgV2l0aCBObyBNZW50YWwgSGVhbHRoIERpYWdub3NpcyIKCmRlZmluZSAiU3RyYXRpZmljYXRpb24gMiI6CiAgIkFkdWx0IFdpdGggTm8gTWVudGFsIEhlYWx0aCBEaWFnbm9zaXMiCgpkZWZpbmUgIlN0cmF0aWZpY2F0aW9uIDMiOgogICJQZWRpYXRyaWMgV2l0aCBNZW50YWwgSGVhbHRoIERpYWdub3NpcyIKCmRlZmluZSAiU3RyYXRpZmljYXRpb24gNCI6CiAgIkFkdWx0IFdpdGggTWVudGFsIEhlYWx0aCBEaWFnbm9zaXMiCgpkZWZpbmUgIkFkbWl0dGVkIHRvIElucGF0aWVudCAyNDEgTWludXRlcyBvciBNb3JlIEJlZm9yZSBEZXBhcnR1cmUiOgogICJEZW5vbWluYXRvciIgRURFbmNvdW50ZXIKICAgIHdpdGggQ1FNQ29tbW9uLiJJbnBhdGllbnQgRW5jb3VudGVyIiBJbnBhdGllbnQKICAgICAgc3VjaCB0aGF0IElucGF0aWVudC5ob2xkaW5nSW5FREFmdGVyQWRtaXNzaW9uICggKSAyNDEgbWludXRlcyBvciBtb3JlIGJlZm9yZSBFREVuY291bnRlci5lZERlcGFydHVyZVRpbWUgKCApCgpkZWZpbmUgIkJvYXJkZWQgVGltZSBHcmVhdGVyIFRoYW4gMjQwIE1pbnV0ZXMiOgogICJEZWNpc2lvbiB0byBBZG1pdCBFbmNvdW50ZXIgT3JkZXIiCiAgICB1bmlvbiAiRGVjaXNpb24gdG8gQWRtaXQgVXNpbmcgQXNzZXNzbWVudCIKICAgIHVuaW9uICJUaW1lIG9mIEFkbWl0IE9yZGVyIE9yIEJlZCBBc3NpZ25tZW50IHRvIERlcGFydHVyZSBHcmVhdGVyIFRoYW4gMjQxIE1pbnV0ZXMiCiAgICB1bmlvbiAiQWRtaXR0ZWQgdG8gSW5wYXRpZW50IDI0MSBNaW51dGVzIG9yIE1vcmUgQmVmb3JlIERlcGFydHVyZSIKCmRlZmluZSAiQm9hcmRlZCBUaW1lIEdyZWF0ZXIgVGhhbiAyNDAgTWludXRlcyBhbmQgTm8gT2JzZXJ2YXRpb24gU3RheSI6CiAgKCAiQm9hcmRlZCBUaW1lIEdyZWF0ZXIgVGhhbiAyNDAgTWludXRlcyIgQm9hcmRpbmcKICAgICAgd2hlcmUgbm90IGV4aXN0cyAoICJFRCBPYnNlcnZhdGlvbiBTdGF0dXMiIEVET2JzCiAgICAgICAgICB3aGVyZSAoIEVET2JzLnBlcmlvZCBkdXJpbmcgQm9hcmRpbmcucGVyaW9kICkKICAgICAgKQogICkKCmRlZmluZSAiRGVjaXNpb24gdG8gQWRtaXQgRW5jb3VudGVyIE9yZGVyIjoKICAiRGVub21pbmF0b3IiIEVERW5jb3VudGVyCiAgICB3aXRoIENRTUNvbW1vbi4iSW5wYXRpZW50IEVuY291bnRlciIgRW5jb3VudGVySW5wYXRpZW50CiAgICAgIHN1Y2ggdGhhdCBFbmNvdW50ZXJJbnBhdGllbnQuYWRtaXREZWNpc2lvblVzaW5nRW5jb3VudGVyT3JkZXIgKCApIDI0MSBtaW51dGVzIG9yIG1vcmUgYmVmb3JlIEVERW5jb3VudGVyLmVkRGVwYXJ0dXJlVGltZSAoICkKCmRlZmluZSAiRGVjaXNpb24gdG8gQWRtaXQgVXNpbmcgQXNzZXNzbWVudCI6CiAgIkRlbm9taW5hdG9yIiBFREVuY291bnRlcgogICAgd2l0aCBDUU1Db21tb24uIklucGF0aWVudCBFbmNvdW50ZXIiIEVuY291bnRlcklucGF0aWVudAogICAgICBzdWNoIHRoYXQgRW5jb3VudGVySW5wYXRpZW50LmFkbWl0RGVjaXNpb25Vc2luZ0Fzc2Vzc21lbnQgKCApIDI0MSBtaW51dGVzIG9yIG1vcmUgYmVmb3JlIEVERW5jb3VudGVyLmVkRGVwYXJ0dXJlVGltZSAoICkKCmRlZmluZSAiRUQgQXJyaXZhbCBMZWZ0IFdpdGhvdXQgQmVpbmcgU2VlbiI6CiAgIkRlbm9taW5hdG9yIiBFREVuY291bnRlcgogICAgd2hlcmUgRURFbmNvdW50ZXIuaG9zcGl0YWxpemF0aW9uLmRpc2NoYXJnZURpc3Bvc2l0aW9uIH4gIlBhdGllbnQgbGVmdCB3aXRob3V0IGJlaW5nIHNlZW4gKGZpbmRpbmcpIgoKZGVmaW5lICJFRCBFdmFsdWF0aW9uIGFuZCBNYW5hZ2VtZW50IjoKICBbRW5jb3VudGVyOiAiRW1lcmdlbmN5IERlcGFydG1lbnQgRXZhbHVhdGlvbiBhbmQgTWFuYWdlbWVudCBWaXNpdCJdIEVERXZhbE1hbmFnZW1lbnRWaXNpdAogICAgd2hlcmUgRURFdmFsTWFuYWdlbWVudFZpc2l0LnBlcmlvZCBlbmRzIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgYW5kIEVERXZhbE1hbmFnZW1lbnRWaXNpdC5zdGF0dXMgPSAnZmluaXNoZWQnCgpkZWZpbmUgIkVEIEVuY291bnRlciBvciBUcmlhZ2Ugb2YgUGF0aWVudHMgMTggWWVhcnMgYW5kIE9sZGVyIjoKICAiRGVub21pbmF0b3IiIEVERW5jb3VudGVyCiAgICB3aGVyZSBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAoKZGVmaW5lICJFRCBFbmNvdW50ZXIgb3IgVHJpYWdlIG9mIFBhdGllbnRzIExlc3MgVGhhbiAxOCBZZWFycyI6CiAgIkRlbm9taW5hdG9yIiBFREVuY291bnRlcgogICAgd2hlcmUgQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSBzdGFydCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxOAoKZGVmaW5lICJFRCBMZW5ndGggb2YgU3RheSBHcmVhdGVyIFRoYW4gNDgwIE1pbnV0ZXMiOgogICJEZW5vbWluYXRvciIgRURFbmNvdW50ZXIKICAgIHdoZXJlIEVERW5jb3VudGVyLmVkQXJyaXZhbFRpbWUgKCApIDQ4MSBtaW51dGVzIG9yIG1vcmUgYmVmb3JlIEVERW5jb3VudGVyLmVkRGVwYXJ0dXJlVGltZSAoICkKCmRlZmluZSAiRUQgTGVuZ3RoIG9mIFN0YXkgR3JlYXRlciBUaGFuIDQ4MCBNaW51dGVzIGFuZCBObyBPYnNlcnZhdGlvbiBTdGF5IjoKICAoICJFRCBMZW5ndGggb2YgU3RheSBHcmVhdGVyIFRoYW4gNDgwIE1pbnV0ZXMiIEVEU3RheQogICAgICB3aGVyZSBub3QgZXhpc3RzICggIkVEIE9ic2VydmF0aW9uIFN0YXR1cyIgRURPYnMKICAgICAgICAgIHdoZXJlICggRURPYnMucGVyaW9kIGR1cmluZyBFRFN0YXkucGVyaW9kICkKICAgICAgKQogICkKCmRlZmluZSAiRUQgT2JzZXJ2YXRpb24gU3RhdHVzIjoKICBbRW5jb3VudGVyOiAiT2JzZXJ2YXRpb24gU2VydmljZXMiXSBFRE9ic0VuY291bnRlcgogICAgd2l0aCAiRGVub21pbmF0b3IiIEVERW5jb3VudGVyCiAgICAgIHN1Y2ggdGhhdCBFRE9ic0VuY291bnRlci5wZXJpb2QgZHVyaW5nIEVERW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBFRE9ic0VuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnCgpkZWZpbmUgIkVEIFRyaWFnZSI6CiAgKCBbRW5jb3VudGVyOiAiVHJpYWdlIl0gRURUcmlhZ2UKICAgICAgd2hlcmUgRURUcmlhZ2UucGVyaW9kIGVuZHMgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgIGFuZCBFRFRyaWFnZS5zdGF0dXMgaW4geyAnZmluaXNoZWQnLCAndHJpYWdlZCcgfQogICkKCmRlZmluZSAiRUQgVHJpYWdlIEV4Y2x1ZGluZyBUaG9zZSBQcmlvciBUbyBFRCBFbmNvdW50ZXJzIjoKICAiRUQgVHJpYWdlIiBFRFRyaWFnZWluTVAKICAgIHdoZXJlIG5vdCBleGlzdHMgKCAiRUQgRXZhbHVhdGlvbiBhbmQgTWFuYWdlbWVudCIgRURFdmFsTWFuYWdlbWVudEluTVAKICAgICAgICB3aGVyZSAoICggRURUcmlhZ2Vpbk1QLnBlcmlvZCBvdmVybGFwcyBiZWZvcmUgRURFdmFsTWFuYWdlbWVudEluTVAucGVyaW9kICkKICAgICAgICAgICAgb3IgKCBFRFRyaWFnZWluTVAucGVyaW9kIGR1cmluZyBFREV2YWxNYW5hZ2VtZW50SW5NUC5wZXJpb2QgKQogICAgICAgICAgICBvciAoIEVERXZhbE1hbmFnZW1lbnRJbk1QLnBlcmlvZCBkdXJpbmcgRURUcmlhZ2Vpbk1QLnBlcmlvZCApCiAgICAgICAgICAgIG9yICggRURUcmlhZ2Vpbk1QLnBlcmlvZCBlbmRzIDEyMCBtaW51dGVzIG9yIGxlc3MgYmVmb3JlIHN0YXJ0IG9mIEVERXZhbE1hbmFnZW1lbnRJbk1QLnBlcmlvZCApCiAgICAgICAgKQogICAgKQoKZGVmaW5lICJFRCBUcmlhZ2UgQmVmb3JlIEV2YWx1YXRpb24gTWFuYWdlbWVudCI6CiAgIkVEIFRyaWFnZSIgRURUcmlhZ2Vpbk1QCiAgICB3aXRoICJEZW5vbWluYXRvciIgRURFbmNvdW50ZXIKICAgICAgc3VjaCB0aGF0ICggKCBFRFRyaWFnZWluTVAucGVyaW9kIG92ZXJsYXBzIGJlZm9yZSBFREVuY291bnRlci5wZXJpb2QgKQogICAgICAgICAgb3IgKCBFRFRyaWFnZWluTVAucGVyaW9kIGR1cmluZyBFREVuY291bnRlci5wZXJpb2QgKQogICAgICAgICAgb3IgKCBFREVuY291bnRlci5wZXJpb2QgZHVyaW5nIEVEVHJpYWdlaW5NUC5wZXJpb2QgKQogICAgICAgICAgb3IgKCBFRFRyaWFnZWluTVAucGVyaW9kIGVuZHMgMTIwIG1pbnV0ZXMgb3IgbGVzcyBiZWZvcmUgc3RhcnQgb2YgRURFbmNvdW50ZXIucGVyaW9kICkKICAgICAgKQoKZGVmaW5lICJFRCBUcmlhZ2UgYW5kIEV2YWx1YXRpb24gTWFuYWdlbWVudCI6CiAgIkRlbm9taW5hdG9yIgogICAgdW5pb24gIkVEIFRyaWFnZSBCZWZvcmUgRXZhbHVhdGlvbiBNYW5hZ2VtZW50IgoKZGVmaW5lICJUaW1lIG9mIEFkbWl0IE9yZGVyIE9yIEJlZCBBc3NpZ25tZW50IHRvIERlcGFydHVyZSBHcmVhdGVyIFRoYW4gMjQxIE1pbnV0ZXMiOgogICJEZW5vbWluYXRvciIgRURFbmNvdW50ZXIKICAgIHdpdGggQ1FNQ29tbW9uLiJJbnBhdGllbnQgRW5jb3VudGVyIiBJbnBhdGllbnRFbmNvdW50ZXIKICAgICAgc3VjaCB0aGF0IElucGF0aWVudEVuY291bnRlci5hZG1pdElucGF0aWVudE9yQmVkQXNzaWdubWVudEVuY291bnRlck9yZGVyICggKSAyNDEgbWludXRlcyBvciBtb3JlIGJlZm9yZSBFREVuY291bnRlci5lZERlcGFydHVyZVRpbWUgKCApCgpkZWZpbmUgIlRpbWUgdG8gVHJlYXRtZW50IFJvb20gR3JlYXRlciBUaGFuIDYwIE1pbnV0ZXMiOgogICJFRCBFdmFsdWF0aW9uIGFuZCBNYW5hZ2VtZW50IiBFREV2YWxNYW5hZ2VtZW50SW5NUAogICAgd2hlcmUgRURFdmFsTWFuYWdlbWVudEluTVAuZWRBcnJpdmFsVGltZSAoICkgNjEgbWludXRlcyBvciBtb3JlIGJlZm9yZSBFREV2YWxNYW5hZ2VtZW50SW5NUC5lZFRyZWF0bWVudFJvb21UaW1lQXJyaXZhbFRpbWUgKCApCgpkZWZpbmUgIkFzc2Vzc21lbnQgSW4gRUQiOgogIFsiT2JzZXJ2YXRpb25DbGluaWNhbFJlc3VsdCI6ICJFbWVyZ2VuY3kgRGVwYXJ0bWVudCBFdmFsdWF0aW9uIl0KICAgIHVuaW9uIFsiU2ltcGxlT2JzZXJ2YXRpb24iOiAiRW1lcmdlbmN5IERlcGFydG1lbnQgRXZhbHVhdGlvbiJdIE9ic0luRUQKICAgICAgd2hlcmUgT2JzSW5FRC52YWx1ZSBhcyBDb2RlYWJsZUNvbmNlcHQgaW4gIkFkbWl0IElucGF0aWVudCIKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gImFkbWl0RGVjaXNpb25Vc2luZ0Fzc2Vzc21lbnQiKEVuY291bnRlcklucGF0aWVudCBFbmNvdW50ZXIpOgogIExhc3QoIkFzc2Vzc21lbnQgSW4gRUQiIEVERXZhbHVhdGlvbgogICAgICBsZXQgTGFzdEVEVmlzaXQ6IEVuY291bnRlcklucGF0aWVudC5sYXN0RURFbmNvdW50ZXIoKQogICAgICB3aGVyZSBFREV2YWx1YXRpb24uZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBzdGFydHMgZHVyaW5nIExhc3RFRFZpc2l0LnBlcmlvZAogICAgICAgIGFuZCBFREV2YWx1YXRpb24uc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgIHJldHVybiBzdGFydCBvZiBFREV2YWx1YXRpb24uZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKQogICAgICBzb3J0IGFzY2VuZGluZwogICkKCmRlZmluZSAiRUQgVG8gSW5wYXRpZW50IE9yZGVyIjoKICBbU2VydmljZVJlcXVlc3Q6ICJEZWNpc2lvbiB0byBBZG1pdCB0byBIb3NwaXRhbCBJbnBhdGllbnQiXSBBZG1pdElQT3JkZXIKICAgIHdoZXJlIEFkbWl0SVBPcmRlci5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiYWRtaXREZWNpc2lvblVzaW5nRW5jb3VudGVyT3JkZXIiKEVuY291bnRlcklucGF0aWVudCBFbmNvdW50ZXIpOgogIExhc3QoIkVEIFRvIElucGF0aWVudCBPcmRlciIgQWRtaXRPcmRlcgogICAgICBsZXQgTGFzdEVEVmlzaXQ6IEVuY291bnRlcklucGF0aWVudC5sYXN0RURFbmNvdW50ZXIoKQogICAgICB3aGVyZSBBZG1pdE9yZGVyLmF1dGhvcmVkT24gZHVyaW5nIExhc3RFRFZpc2l0LnBlcmlvZAogICAgICAgIGFuZCBBZG1pdE9yZGVyLmludGVudCB+ICdvcmRlcicKICAgICAgcmV0dXJuIEFkbWl0T3JkZXIuYXV0aG9yZWRPbgogICAgICBzb3J0IGFzY2VuZGluZwogICkKCmRlZmluZSAiSW5wYXRpZW50IE9yIEJlZCBBc3NpZ25tZW50IEVuY291bnRlciBPcmRlciI6CiAgKCBbU2VydmljZVJlcXVlc3Q6ICJFbmNvdW50ZXIgSW5wYXRpZW50Il0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIlBhdGllbnQgYmVkIGFzc2lnbmVkIChmaW5kaW5nKSJdICkgSVBSZXF1ZXN0CiAgICB3aGVyZSBJUFJlcXVlc3Quc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gImFkbWl0SW5wYXRpZW50T3JCZWRBc3NpZ25tZW50RW5jb3VudGVyT3JkZXIiKEVuY291bnRlciBFbmNvdW50ZXIpOgogIExhc3QoKCJJbnBhdGllbnQgT3IgQmVkIEFzc2lnbm1lbnQgRW5jb3VudGVyIE9yZGVyIikgQWRtaXRJbnBhdGllbnRPcmRlcgogICAgICBsZXQgTGFzdEVEVmlzaXQ6IEVuY291bnRlci5sYXN0RURFbmNvdW50ZXIoKQogICAgICB3aGVyZSBBZG1pdElucGF0aWVudE9yZGVyLmF1dGhvcmVkT24gZHVyaW5nIExhc3RFRFZpc2l0LnBlcmlvZAogICAgICByZXR1cm4gQWRtaXRJbnBhdGllbnRPcmRlci5hdXRob3JlZE9uCiAgICAgIHNvcnQgYXNjZW5kaW5nCiAgKQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiZWRBcnJpdmFsVGltZSIoRURFbmNvdW50ZXIgRW5jb3VudGVyKToKICBMYXN0KCJFRCBUcmlhZ2UgYW5kIEV2YWx1YXRpb24gTWFuYWdlbWVudCIubG9jYXRpb24gTG9jYXRpb24KICAgICAgd2hlcmUgZXhpc3RzKChMb2NhdGlvbi5sb2NhdGlvbi5nZXRMb2NhdGlvbigpLnR5cGUpIExvY2F0aW9uVHlwZQogICAgICAgICAgd2hlcmUoTG9jYXRpb25UeXBlIGluICJFbWVyZ2VuY3kgRGVwYXJ0bWVudCBMb2NhdGlvbiIKICAgICAgICAgICAgICBvciBMb2NhdGlvblR5cGUgfiAiRW1lcmdlbmN5IHJvb20iCiAgICAgICAgICAgICAgb3IgTG9jYXRpb25UeXBlIH4gIkVtZXJnZW5jeSB0cmF1bWEgdW5pdCIKICAgICAgICAgICkKICAgICAgKQogICAgICAgIGFuZCBzdGFydCBvZiBMb2NhdGlvbi5wZXJpb2QgaXMgbm90IG51bGwKICAgICAgICBhbmQoTG9jYXRpb24ucGVyaW9kIGVuZHMgMTIwIG1pbnV0ZXMgb3IgbGVzcyBiZWZvcmUgc3RhcnQgb2YgRURFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgIG9yIExvY2F0aW9uLnBlcmlvZCBvdmVybGFwcyBiZWZvcmUgRURFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgIG9yIEVERW5jb3VudGVyLnBlcmlvZCBvdmVybGFwcyBiZWZvcmUgTG9jYXRpb24ucGVyaW9kCiAgICAgICAgICAgIG9yIExvY2F0aW9uLnBlcmlvZCBzdGFydHMgc2FtZSBhcyBzdGFydCBvZiBFREVuY291bnRlci5wZXJpb2QKICAgICAgICApCiAgICAgIHJldHVybiBzdGFydCBvZiBMb2NhdGlvbi5wZXJpb2QKICAgICAgc29ydCBhc2NlbmRpbmcKICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJlZERlcGFydHVyZVRpbWUiKEVERW5jb3VudGVyIEVuY291bnRlcik6CiAgTGFzdCgiRUQgVHJpYWdlIGFuZCBFdmFsdWF0aW9uIE1hbmFnZW1lbnQiLmxvY2F0aW9uIExvY2F0aW9uCiAgICAgIHdoZXJlIGV4aXN0cygoTG9jYXRpb24ubG9jYXRpb24uZ2V0TG9jYXRpb24oKS50eXBlKSBMb2NhdGlvblR5cGUKICAgICAgICAgIHdoZXJlKExvY2F0aW9uVHlwZSBpbiAiRW1lcmdlbmN5IERlcGFydG1lbnQgTG9jYXRpb24iCiAgICAgICAgICAgICAgb3IgTG9jYXRpb25UeXBlIH4gIkVtZXJnZW5jeSByb29tIgogICAgICAgICAgICAgIG9yIExvY2F0aW9uVHlwZSB+ICJFbWVyZ2VuY3kgdHJhdW1hIHVuaXQiCiAgICAgICAgICApCiAgICAgICkKICAgICAgICBhbmQgCiAgICAgICAgZW5kIG9mIExvY2F0aW9uLnBlcmlvZCBpcyBub3QgbnVsbAogICAgICAgIGFuZChMb2NhdGlvbi5wZXJpb2QgZW5kcyAxMjAgbWludXRlcyBvciBsZXNzIGJlZm9yZSBzdGFydCBvZiBFREVuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgb3IgTG9jYXRpb24ucGVyaW9kIG92ZXJsYXBzIGJlZm9yZSBFREVuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgb3IgRURFbmNvdW50ZXIucGVyaW9kIG92ZXJsYXBzIGJlZm9yZSBMb2NhdGlvbi5wZXJpb2QKICAgICAgICAgICAgb3IgTG9jYXRpb24ucGVyaW9kIHN0YXJ0cyBzYW1lIGFzIHN0YXJ0IG9mIEVERW5jb3VudGVyLnBlcmlvZAogICAgICAgICkKICAgICAgcmV0dXJuIAogICAgICBlbmQgb2YgTG9jYXRpb24ucGVyaW9kCiAgICAgIHNvcnQgYXNjZW5kaW5nCiAgKQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiZWRUcmVhdG1lbnRSb29tVGltZUFycml2YWxUaW1lIihFREVuY291bnRlciBFbmNvdW50ZXIpOgogIEZpcnN0KEVERW5jb3VudGVyLmxvY2F0aW9uIExvY2F0aW9uCiAgICAgIHdoZXJlIExvY2F0aW9uLmxvY2F0aW9uLmdldExvY2F0aW9uKCkudHlwZSBpbiAiRW1lcmdlbmN5IERlcGFydG1lbnQgVHJlYXRtZW50IExvY2F0aW9uIgogICAgICAgIGFuZCBzdGFydCBvZiBMb2NhdGlvbi5wZXJpb2QgaXMgbm90IG51bGwKICAgICAgcmV0dXJuIHN0YXJ0IG9mIExvY2F0aW9uLnBlcmlvZAogICAgICBzb3J0IGFzY2VuZGluZwogICkKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaG9sZGluZ0luRURBZnRlckFkbWlzc2lvbihJbnBhdGllbnRFbmNvdW50ZXIgRW5jb3VudGVyKToKICBMYXN0KENRTUNvbW1vbi4iSW5wYXRpZW50IEVuY291bnRlciIgQWRtaXR0ZWRJbnBhdGllbnQKICAgICAgbGV0IExhc3RFRFZpc2l0OiBJbnBhdGllbnRFbmNvdW50ZXIubGFzdEVERW5jb3VudGVyKCkKICAgICAgd2hlcmUgc3RhcnQgb2YgQWRtaXR0ZWRJbnBhdGllbnQucGVyaW9kIGR1cmluZyBMYXN0RURWaXNpdC5wZXJpb2QKICAgICAgcmV0dXJuIHN0YXJ0IG9mIEFkbWl0dGVkSW5wYXRpZW50LnBlcmlvZAogICAgICBzb3J0IGFzY2VuZGluZwogICkKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gImxhc3RFREVuY291bnRlciIoRW5jb3VudGVySW5wYXRpZW50IEVuY291bnRlcik6CiAgTGFzdCgiRUQgRXZhbHVhdGlvbiBhbmQgTWFuYWdlbWVudCIgRURFdmFsTWFuYWdlbWVudEluTVAKICAgICAgd2hlcmUgRURFdmFsTWFuYWdlbWVudEluTVAucGVyaW9kIHN0YXJ0cyAxIGRheSBvciBsZXNzIGJlZm9yZSBvciBvbiBzdGFydCBvZiBFbmNvdW50ZXJJbnBhdGllbnQucGVyaW9kCiAgICAgICAgYW5kIEVERXZhbE1hbmFnZW1lbnRJbk1QLnBlcmlvZCBzdGFydHMgYmVmb3JlIHN0YXJ0IG9mIEVuY291bnRlcklucGF0aWVudC5wZXJpb2QKICAgICAgICBhbmQgRURFdmFsTWFuYWdlbWVudEluTVAucGVyaW9kIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICBhbmQgRURFdmFsTWFuYWdlbWVudEluTVAuc3RhdHVzID0gJ2ZpbmlzaGVkJwogICAgICBzb3J0IGJ5IAogICAgICBlbmQgb2YgcGVyaW9kIGFzY2VuZGluZwogICkKCmRlZmluZSAiU0RFIEV0aG5pY2l0eSI6CiAgU0RFLiJTREUgRXRobmljaXR5IgoKZGVmaW5lICJTREUgUGF5ZXIiOgogIFNERS4iU0RFIFBheWVyIgoKZGVmaW5lICJTREUgUmFjZSI6CiAgU0RFLiJTREUgUmFjZSIKCmRlZmluZSAiU0RFIFNleCI6CiAgU0RFLiJTREUgU2V4Ig==",
"url" : "https://madie.cms.gov/Library-CMS1244FHIRECATHOQR.cql"
}
]
}