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

: CMS771FHIRUrinarySymptomScoreBPH - XML Representation

Draft as of 2026-09-19

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="CMS771FHIRUrinarySymptomScoreBPH"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
  <table class="narrative-table">
    <tbody>
<tr>


<th colspan="2" scope="row" class="row-header"><a name="metadata"> </a>Metadata</th>


</tr>







<tr>


<th scope="row" class="row-header">Version</th>



<td class="content-container">1.1.000</td>


</tr>
















<tr>


<th scope="row" class="row-header">Status</th>



<td class="content-container">Draft</td>


</tr>







































<tr>


<th scope="row" class="row-header">Type</th>



<td class="content-container">
    <a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library


</td>


</tr>













<tr>


<th colspan="2" scope="row" class="row-header"><a name="parameters"> </a>Parameters</th>


</tr>


<tr>


<th scope="row" class="row-header">Parameter</th>



<td class="content-container">None</td>


</tr>








  <tr>


<th colspan="2" scope="row" class="row-header">Library Content</th>


</tr>
  
    
    <tr>
      <th scope="row" class="row-header">CQL Content</th>
      <td>
        <a name="cql-content"> </a>
        <pre style="border: none;" class="content-container highlight language-cql"><code class="language-cql">/*
NOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.
*/
library CMS771FHIRUrinarySymptomScoreBPH version '1.1.000'

using USQualityCore version '0.1.0-cibuild'
using USCore version '6.1.0-derived'
using FHIR version '4.0.1'

include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers
include hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon
include hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon
include hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements

include CQMCommon version '5.1.000' called CQMCommon
include SupplementalDataElements version '6.1.000' called SDE
include Status version '2.1.000' called Status

codesystem &quot;LOINC&quot;: 'http://loinc.org'
codesystem &quot;ICD10CM&quot;: 'http://hl7.org/fhir/sid/icd-10-cm'
codesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'

valueset &quot;Hospital Services for Urology Care&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.360'
valueset &quot;Morbid Obesity&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.368'
valueset &quot;Office Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'
valueset &quot;Urinary Retention&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.372'

code &quot;American Urological Association Symptom Index [AUASI]&quot;: '80883-2' from &quot;LOINC&quot; display 'American Urological Association Symptom Index [AUASI]'
code &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;: 'N40.1' from &quot;ICD10CM&quot; display 'Benign prostatic hyperplasia with lower urinary tract symptoms'
code &quot;If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]&quot;: '81090-3' from &quot;LOINC&quot; display 'If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]'
code &quot;International Prostate Symptom Score [IPSS]&quot;: '80976-4' from &quot;LOINC&quot; display 'International Prostate Symptom Score [IPSS]'
code &quot;virtual&quot;: 'VR' from &quot;ActCode&quot; display 'virtual'

parameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;
  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)

context Patient

define &quot;Initial Population&quot;:
  ( &quot;Patient is Male&quot; )
    and &quot;Has Qualifying Encounter&quot;
    and &quot;Has Qualifying BPH Diagnosis&quot;

define &quot;Denominator&quot;:
  &quot;Initial Population&quot;
    and &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot; is not null
    and &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; is not null

define &quot;Denominator Exclusions&quot;:
  exists ( &quot;Urinary Retention Diagnosis Starts Within 1 Year After Initial BPH Diagnosis&quot; )
    or ( &quot;Has Initial BPH Diagnosis Starts During or Within 30 Days After End of Hospitalization&quot; is not null )
    or ( &quot;Morbid Obesity Diagnosis or BMI Exam Result Greater Than or Equal to 40 Starts On or Before Follow Up USS Assessment&quot; )

define &quot;Numerator&quot;:
  &quot;Urinary Symptom Score Improvement Greater Than or Equal To 3&quot;

define &quot;SDE Ethnicity&quot;:
  SDE.&quot;SDE Ethnicity&quot;

define &quot;SDE Payer&quot;:
  SDE.&quot;SDE Payer&quot;

define &quot;SDE Race&quot;:
  SDE.&quot;SDE Race&quot;

define &quot;SDE Sex&quot;:
  SDE.&quot;SDE Sex&quot;

define &quot;Has Qualifying BPH Diagnosis&quot;:
  &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; is not null

define &quot;Patient is Male&quot;:
  SDE.&quot;SDE Sex&quot; ~ SDE.&quot;Male (finding)&quot;

define &quot;Urinary Symptom Score Assessment&quot;:
  &quot;Documented IPSS Assessment Result&quot;
    union &quot;AUA Symptom Index and Quality of Life Assessment Result&quot;

define &quot;Urinary Symptom Score Change&quot;:
  from
    &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot; FirstUSSAssessment,
    &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment
    let USSChange: ( FirstUSSAssessment.valueInteger ) - ( FollowUpUSSAssessment.valueInteger )
    return USSChange

define &quot;Urinary Symptom Score Improvement Greater Than or Equal To 3&quot;:
  ( &quot;Urinary Symptom Score Change&quot; USSImprovement
      where USSImprovement &gt;= 3
  ) is not null

define &quot;Documented IPSS Assessment Result&quot;:
  [ObservationScreeningAssessment: &quot;International Prostate Symptom Score [IPSS]&quot;] IPSSAssessment
    where IPSSAssessment.status in { 'final', 'amended', 'corrected' }
      and IPSSAssessment.value is not null
    return {
      effectiveDatetime: IPSSAssessment.effective.earliest ( ),
      valueInteger: IPSSAssessment.value as FHIR.integer
    }

define &quot;AUA Symptom Index and Quality of Life Assessment Result&quot;:
  [ObservationScreeningAssessment: &quot;American Urological Association Symptom Index [AUASI]&quot;] AUASIAssessment
    let LastQOLOnDate: Last([ObservationScreeningAssessment: &quot;If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]&quot;] QOLAssessment
        where QOLAssessment.effective.earliest() same day as AUASIAssessment.effective.earliest()
          and QOLAssessment.status in { 'final', 'amended', 'corrected' }
          and QOLAssessment.value is not null
        sort by effective.earliest()
    )
    where AUASIAssessment.status in { 'final', 'amended', 'corrected' }
      and AUASIAssessment.value is not null
    return {
      effectiveDatetime: AUASIAssessment.effective.earliest ( ),
      valueInteger: ( AUASIAssessment.value as FHIR.integer ) + ( LastQOLOnDate.value as FHIR.integer )
    }

define &quot;Has Qualifying Encounter&quot;:
  exists ( [Encounter: &quot;Office Visit&quot;] ValidEncounter
      where ValidEncounter.period during day of &quot;Measurement Period&quot;
        and ValidEncounter.class !~ &quot;virtual&quot;
        and ValidEncounter.status = 'finished'
  )

define &quot;Morbid Obesity Diagnosis or BMI Exam Result Greater Than or Equal to 40 Starts On or Before Follow Up USS Assessment&quot;:
  exists &quot;Morbid Obesity Diagnosis On or Before Follow Up USS Assessment&quot;
    or &quot;BMI Exam Result Greater Than or Equal To 40 During Measurement Period and On or Before Follow Up USS Assessment&quot;

define &quot;Urinary Retention Diagnosis Starts Within 1 Year After Initial BPH Diagnosis&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   ( [ConditionProblemsHealthConcerns: &quot;Urinary Retention&quot;]
  //     union [ConditionEncounterDiagnosis: &quot;Urinary Retention&quot;] )
  ( [FHIR.Condition: &quot;Urinary Retention&quot;] ) UrinaryRetention
    with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis
      such that UrinaryRetention.prevalenceInterval ( ) starts 1 year or less on or after day of start of InitialBPHDiagnosis.prevalenceInterval ( )
    where UrinaryRetention.verificationStatusIsNotInvalid ( )

define &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot;:
  Last(&quot;Urinary Symptom Score Assessment&quot; USSAssessment
      with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis
        such that difference in months between start of InitialBPHDiagnosis.prevalenceInterval ( ) and USSAssessment.effectiveDatetime in Interval[6, 12]
      sort by effectiveDatetime
  )

define &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot;:
  First(&quot;Urinary Symptom Score Assessment&quot; USSAssessment
      with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis
        such that USSAssessment.effectiveDatetime 1 month or less on or after day of start of InitialBPHDiagnosis.prevalenceInterval ( )
      sort by effectiveDatetime
  )

define &quot;Has Initial BPH Diagnosis Starts During or Within 30 Days After End of Hospitalization&quot;:
  &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis
    with [Encounter: &quot;Hospital Services for Urology Care&quot;] UrologyHospitalServices
      such that InitialBPHDiagnosis.prevalenceInterval ( ) starts during Interval[start of UrologyHospitalServices.period, end of UrologyHospitalServices.period + 31 days]
        and UrologyHospitalServices.status = 'finished'

define &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   First(([ConditionProblemsHealthConcerns: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]
  //       union [ConditionEncounterDiagnosis: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]) NewBPHDiagnosis
  First(([FHIR.Condition: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]) NewBPHDiagnosis
      where NewBPHDiagnosis.prevalenceInterval ( ) starts during Interval[start of &quot;Measurement Period&quot; - 6 months, start of &quot;Measurement Period&quot;]
        and NewBPHDiagnosis.verificationStatusIsNotInvalid ( )
      sort by start of onset.toInterval ( )
  )

define &quot;Morbid Obesity Diagnosis On or Before Follow Up USS Assessment&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   ( [ConditionProblemsHealthConcerns: &quot;Morbid Obesity&quot;]
  //     union [ConditionEncounterDiagnosis: &quot;Morbid Obesity&quot;] )
  ( [FHIR.Condition: &quot;Morbid Obesity&quot;] ) MorbidObesityDiagnosis
    with &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment
      such that MorbidObesityDiagnosis.prevalenceInterval ( ) overlaps &quot;Measurement Period&quot;
        and MorbidObesityDiagnosis.prevalenceInterval ( ) starts on or before FollowUpUSSAssessment.effectiveDatetime
    where MorbidObesityDiagnosis.verificationStatusIsNotInvalid ( )  
  
/*
* @code: Body mass index (BMI) [Ratio] - 39156-5
* @profile: http://hl7.org/fhir/StructureDefinition/bmi
*/


define &quot;BMI Exam Result Greater Than or Equal To 40 During Measurement Period and On or Before Follow Up USS Assessment&quot;:
  exists ( [&quot;USCore.BMIProfile&quot;] BMIExam
      with &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment
        such that BMIExam.value &gt;= 40 'kg/m2'
          and BMIExam.status in { 'final', 'amended', 'corrected' }
          and BMIExam.effective.earliest ( ) during day of &quot;Measurement Period&quot;
          and BMIExam.effective.earliest ( ) on or before FollowUpUSSAssessment.effectiveDatetime
      return BMIExam.effective.earliest ( )
  )

define fluent function verificationStatusIsNotInvalid(condition Choice&lt;&quot;ConditionEncounterDiagnosis&quot;, &quot;ConditionProblemsHealthConcerns&quot;&gt;):
  condition.verificationStatus is null
    or not ( condition.verificationStatus ~ Status.&quot;unconfirmed&quot;
        or condition.verificationStatus ~ Status.&quot;refuted&quot;
        or condition.verificationStatus ~ Status.&quot;entered-in-error&quot;
    )

define fluent function verificationStatusIsNotInvalid(condition FHIR.Condition):
  condition.verificationStatus is null
    or not ( condition.verificationStatus ~ Status.&quot;unconfirmed&quot;
        or condition.verificationStatus ~ Status.&quot;refuted&quot;
        or condition.verificationStatus ~ Status.&quot;entered-in-error&quot;
    )</code></pre>
      </td>
    </tr>
    
  



<tr>
  <th colspan="2" scope="row" class="row-header">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>
</tr>

    </tbody>
  </table>
</div>
  </text>
  <extension
             url="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem">
    <valueReference>
      <reference value="Device/cqf-tooling"/>
    </valueReference>
  </extension>
  <url
       value="https://madie.cms.gov/Library/CMS771FHIRUrinarySymptomScoreBPH"/>
  <version value="1.1.000"/>
  <name value="CMS771FHIRUrinarySymptomScoreBPH"/>
  <status value="draft"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-09-19T16:31:14+00:00"/>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVM3NzFGSElSVXJpbmFyeVN5bXB0b21TY29yZUJQSCB2ZXJzaW9uICcxLjEuMDAwJwoKdXNpbmcgVVNRdWFsaXR5Q29yZSB2ZXJzaW9uICcwLjEuMC1jaWJ1aWxkJwp1c2luZyBVU0NvcmUgdmVyc2lvbiAnNi4xLjAtZGVyaXZlZCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcgY2FsbGVkIEZISVJDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlQ29tbW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVFbGVtZW50cyB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVFbGVtZW50cwoKaW5jbHVkZSBDUU1Db21tb24gdmVyc2lvbiAnNS4xLjAwMCcgY2FsbGVkIENRTUNvbW1vbgppbmNsdWRlIFN1cHBsZW1lbnRhbERhdGFFbGVtZW50cyB2ZXJzaW9uICc2LjEuMDAwJyBjYWxsZWQgU0RFCmluY2x1ZGUgU3RhdHVzIHZlcnNpb24gJzIuMS4wMDAnIGNhbGxlZCBTdGF0dXMKCmNvZGVzeXN0ZW0gIkxPSU5DIjogJ2h0dHA6Ly9sb2luYy5vcmcnCmNvZGVzeXN0ZW0gIklDRDEwQ00iOiAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtJwpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKCnZhbHVlc2V0ICJIb3NwaXRhbCBTZXJ2aWNlcyBmb3IgVXJvbG9neSBDYXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTI0OC4zNjAnCnZhbHVlc2V0ICJNb3JiaWQgT2Jlc2l0eSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyNDguMzY4Jwp2YWx1ZXNldCAiT2ZmaWNlIFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDAxJwp2YWx1ZXNldCAiVXJpbmFyeSBSZXRlbnRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjQ4LjM3MicKCmNvZGUgIkFtZXJpY2FuIFVyb2xvZ2ljYWwgQXNzb2NpYXRpb24gU3ltcHRvbSBJbmRleCBbQVVBU0ldIjogJzgwODgzLTInIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdBbWVyaWNhbiBVcm9sb2dpY2FsIEFzc29jaWF0aW9uIFN5bXB0b20gSW5kZXggW0FVQVNJXScKY29kZSAiQmVuaWduIHByb3N0YXRpYyBoeXBlcnBsYXNpYSB3aXRoIGxvd2VyIHVyaW5hcnkgdHJhY3Qgc3ltcHRvbXMiOiAnTjQwLjEnIGZyb20gIklDRDEwQ00iIGRpc3BsYXkgJ0JlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zJwpjb2RlICJJZiB5b3Ugd2VyZSB0byBzcGVuZCB0aGUgcmVzdCBvZiB5b3VyIGxpZmUgd2l0aCB5b3VyIHVyaW5hcnkgY29uZGl0aW9uIGp1c3QgdGhlIHdheSBpdCBpcyBub3csIGhvdyB3b3VsZCB5b3UgZmVlbCBhYm91dCB0aGF0IFtJUFNTXSI6ICc4MTA5MC0zJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnSWYgeW91IHdlcmUgdG8gc3BlbmQgdGhlIHJlc3Qgb2YgeW91ciBsaWZlIHdpdGggeW91ciB1cmluYXJ5IGNvbmRpdGlvbiBqdXN0IHRoZSB3YXkgaXQgaXMgbm93LCBob3cgd291bGQgeW91IGZlZWwgYWJvdXQgdGhhdCBbSVBTU10nCmNvZGUgIkludGVybmF0aW9uYWwgUHJvc3RhdGUgU3ltcHRvbSBTY29yZSBbSVBTU10iOiAnODA5NzYtNCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ0ludGVybmF0aW9uYWwgUHJvc3RhdGUgU3ltcHRvbSBTY29yZSBbSVBTU10nCmNvZGUgInZpcnR1YWwiOiAnVlInIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ3ZpcnR1YWwnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgKCAiUGF0aWVudCBpcyBNYWxlIiApCiAgICBhbmQgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciIKICAgIGFuZCAiSGFzIFF1YWxpZnlpbmcgQlBIIERpYWdub3NpcyIKCmRlZmluZSAiRGVub21pbmF0b3IiOgogICJJbml0aWFsIFBvcHVsYXRpb24iCiAgICBhbmQgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBXaXRoaW4gMSBNb250aCBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIGlzIG5vdCBudWxsCiAgICBhbmQgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSA2IHRvIDEyIE1vbnRocyBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIGlzIG5vdCBudWxsCgpkZWZpbmUgIkRlbm9taW5hdG9yIEV4Y2x1c2lvbnMiOgogIGV4aXN0cyAoICJVcmluYXJ5IFJldGVudGlvbiBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiAxIFllYXIgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiApCiAgICBvciAoICJIYXMgSW5pdGlhbCBCUEggRGlhZ25vc2lzIFN0YXJ0cyBEdXJpbmcgb3IgV2l0aGluIDMwIERheXMgQWZ0ZXIgRW5kIG9mIEhvc3BpdGFsaXphdGlvbiIgaXMgbm90IG51bGwgKQogICAgb3IgKCAiTW9yYmlkIE9iZXNpdHkgRGlhZ25vc2lzIG9yIEJNSSBFeGFtIFJlc3VsdCBHcmVhdGVyIFRoYW4gb3IgRXF1YWwgdG8gNDAgU3RhcnRzIE9uIG9yIEJlZm9yZSBGb2xsb3cgVXAgVVNTIEFzc2Vzc21lbnQiICkKCmRlZmluZSAiTnVtZXJhdG9yIjoKICAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEltcHJvdmVtZW50IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyAzIgoKZGVmaW5lICJTREUgRXRobmljaXR5IjoKICBTREUuIlNERSBFdGhuaWNpdHkiCgpkZWZpbmUgIlNERSBQYXllciI6CiAgU0RFLiJTREUgUGF5ZXIiCgpkZWZpbmUgIlNERSBSYWNlIjoKICBTREUuIlNERSBSYWNlIgoKZGVmaW5lICJTREUgU2V4IjoKICBTREUuIlNERSBTZXgiCgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEJQSCBEaWFnbm9zaXMiOgogICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgaXMgbm90IG51bGwKCmRlZmluZSAiUGF0aWVudCBpcyBNYWxlIjoKICBTREUuIlNERSBTZXgiIH4gU0RFLiJNYWxlIChmaW5kaW5nKSIKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEFzc2Vzc21lbnQiOgogICJEb2N1bWVudGVkIElQU1MgQXNzZXNzbWVudCBSZXN1bHQiCiAgICB1bmlvbiAiQVVBIFN5bXB0b20gSW5kZXggYW5kIFF1YWxpdHkgb2YgTGlmZSBBc3Nlc3NtZW50IFJlc3VsdCIKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIENoYW5nZSI6CiAgZnJvbQogICAgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBXaXRoaW4gMSBNb250aCBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIEZpcnN0VVNTQXNzZXNzbWVudCwKICAgICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQKICAgIGxldCBVU1NDaGFuZ2U6ICggRmlyc3RVU1NBc3Nlc3NtZW50LnZhbHVlSW50ZWdlciApIC0gKCBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQudmFsdWVJbnRlZ2VyICkKICAgIHJldHVybiBVU1NDaGFuZ2UKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEltcHJvdmVtZW50IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyAzIjoKICAoICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgQ2hhbmdlIiBVU1NJbXByb3ZlbWVudAogICAgICB3aGVyZSBVU1NJbXByb3ZlbWVudCA+PSAzCiAgKSBpcyBub3QgbnVsbAoKZGVmaW5lICJEb2N1bWVudGVkIElQU1MgQXNzZXNzbWVudCBSZXN1bHQiOgogIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJJbnRlcm5hdGlvbmFsIFByb3N0YXRlIFN5bXB0b20gU2NvcmUgW0lQU1NdIl0gSVBTU0Fzc2Vzc21lbnQKICAgIHdoZXJlIElQU1NBc3Nlc3NtZW50LnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICBhbmQgSVBTU0Fzc2Vzc21lbnQudmFsdWUgaXMgbm90IG51bGwKICAgIHJldHVybiB7CiAgICAgIGVmZmVjdGl2ZURhdGV0aW1lOiBJUFNTQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QgKCApLAogICAgICB2YWx1ZUludGVnZXI6IElQU1NBc3Nlc3NtZW50LnZhbHVlIGFzIEZISVIuaW50ZWdlcgogICAgfQoKZGVmaW5lICJBVUEgU3ltcHRvbSBJbmRleCBhbmQgUXVhbGl0eSBvZiBMaWZlIEFzc2Vzc21lbnQgUmVzdWx0IjoKICBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiQW1lcmljYW4gVXJvbG9naWNhbCBBc3NvY2lhdGlvbiBTeW1wdG9tIEluZGV4IFtBVUFTSV0iXSBBVUFTSUFzc2Vzc21lbnQKICAgIGxldCBMYXN0UU9MT25EYXRlOiBMYXN0KFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJJZiB5b3Ugd2VyZSB0byBzcGVuZCB0aGUgcmVzdCBvZiB5b3VyIGxpZmUgd2l0aCB5b3VyIHVyaW5hcnkgY29uZGl0aW9uIGp1c3QgdGhlIHdheSBpdCBpcyBub3csIGhvdyB3b3VsZCB5b3UgZmVlbCBhYm91dCB0aGF0IFtJUFNTXSJdIFFPTEFzc2Vzc21lbnQKICAgICAgICB3aGVyZSBRT0xBc3Nlc3NtZW50LmVmZmVjdGl2ZS5lYXJsaWVzdCgpIHNhbWUgZGF5IGFzIEFVQVNJQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QoKQogICAgICAgICAgYW5kIFFPTEFzc2Vzc21lbnQuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgUU9MQXNzZXNzbWVudC52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHdoZXJlIEFVQVNJQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgYW5kIEFVQVNJQXNzZXNzbWVudC52YWx1ZSBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgZWZmZWN0aXZlRGF0ZXRpbWU6IEFVQVNJQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QgKCApLAogICAgICB2YWx1ZUludGVnZXI6ICggQVVBU0lBc3Nlc3NtZW50LnZhbHVlIGFzIEZISVIuaW50ZWdlciApICsgKCBMYXN0UU9MT25EYXRlLnZhbHVlIGFzIEZISVIuaW50ZWdlciApCiAgICB9CgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciI6CiAgZXhpc3RzICggW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdIFZhbGlkRW5jb3VudGVyCiAgICAgIHdoZXJlIFZhbGlkRW5jb3VudGVyLnBlcmlvZCBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgYW5kIFZhbGlkRW5jb3VudGVyLmNsYXNzICF+ICJ2aXJ0dWFsIgogICAgICAgIGFuZCBWYWxpZEVuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnCiAgKQoKZGVmaW5lICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgb3IgQk1JIEV4YW0gUmVzdWx0IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCB0byA0MCBTdGFydHMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCI6CiAgZXhpc3RzICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCIKICAgIG9yICJCTUkgRXhhbSBSZXN1bHQgR3JlYXRlciBUaGFuIG9yIEVxdWFsIFRvIDQwIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QgYW5kIE9uIG9yIEJlZm9yZSBGb2xsb3cgVXAgVVNTIEFzc2Vzc21lbnQiCgpkZWZpbmUgIlVyaW5hcnkgUmV0ZW50aW9uIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDEgWWVhciBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICAgKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIlVyaW5hcnkgUmV0ZW50aW9uIl0KICAvLyAgICAgdW5pb24gW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIlVyaW5hcnkgUmV0ZW50aW9uIl0gKQogICggW0ZISVIuQ29uZGl0aW9uOiAiVXJpbmFyeSBSZXRlbnRpb24iXSApIFVyaW5hcnlSZXRlbnRpb24KICAgIHdpdGggIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiBJbml0aWFsQlBIRGlhZ25vc2lzCiAgICAgIHN1Y2ggdGhhdCBVcmluYXJ5UmV0ZW50aW9uLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgc3RhcnRzIDEgeWVhciBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBzdGFydCBvZiBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkKICAgIHdoZXJlIFVyaW5hcnlSZXRlbnRpb24udmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkICggKQoKZGVmaW5lICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIjoKICBMYXN0KCJVcmluYXJ5IFN5bXB0b20gU2NvcmUgQXNzZXNzbWVudCIgVVNTQXNzZXNzbWVudAogICAgICB3aXRoICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgSW5pdGlhbEJQSERpYWdub3NpcwogICAgICAgIHN1Y2ggdGhhdCBkaWZmZXJlbmNlIGluIG1vbnRocyBiZXR3ZWVuIHN0YXJ0IG9mIEluaXRpYWxCUEhEaWFnbm9zaXMucHJldmFsZW5jZUludGVydmFsICggKSBhbmQgVVNTQXNzZXNzbWVudC5lZmZlY3RpdmVEYXRldGltZSBpbiBJbnRlcnZhbFs2LCAxMl0KICAgICAgc29ydCBieSBlZmZlY3RpdmVEYXRldGltZQogICkKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIFdpdGhpbiAxIE1vbnRoIEFmdGVyIEluaXRpYWwgQlBIIERpYWdub3NpcyI6CiAgRmlyc3QoIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBBc3Nlc3NtZW50IiBVU1NBc3Nlc3NtZW50CiAgICAgIHdpdGggIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiBJbml0aWFsQlBIRGlhZ25vc2lzCiAgICAgICAgc3VjaCB0aGF0IFVTU0Fzc2Vzc21lbnQuZWZmZWN0aXZlRGF0ZXRpbWUgMSBtb250aCBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBzdGFydCBvZiBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkKICAgICAgc29ydCBieSBlZmZlY3RpdmVEYXRldGltZQogICkKCmRlZmluZSAiSGFzIEluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgRHVyaW5nIG9yIFdpdGhpbiAzMCBEYXlzIEFmdGVyIEVuZCBvZiBIb3NwaXRhbGl6YXRpb24iOgogICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgSW5pdGlhbEJQSERpYWdub3NpcwogICAgd2l0aCBbRW5jb3VudGVyOiAiSG9zcGl0YWwgU2VydmljZXMgZm9yIFVyb2xvZ3kgQ2FyZSJdIFVyb2xvZ3lIb3NwaXRhbFNlcnZpY2VzCiAgICAgIHN1Y2ggdGhhdCBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgc3RhcnRzIGR1cmluZyBJbnRlcnZhbFtzdGFydCBvZiBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5wZXJpb2QsIGVuZCBvZiBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5wZXJpb2QgKyAzMSBkYXlzXQogICAgICAgIGFuZCBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5zdGF0dXMgPSAnZmluaXNoZWQnCgpkZWZpbmUgIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIEZpcnN0KChbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIkJlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zIl0KICAvLyAgICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiQmVuaWduIHByb3N0YXRpYyBoeXBlcnBsYXNpYSB3aXRoIGxvd2VyIHVyaW5hcnkgdHJhY3Qgc3ltcHRvbXMiXSkgTmV3QlBIRGlhZ25vc2lzCiAgRmlyc3QoKFtGSElSLkNvbmRpdGlvbjogIkJlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zIl0pIE5ld0JQSERpYWdub3NpcwogICAgICB3aGVyZSBOZXdCUEhEaWFnbm9zaXMucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgZHVyaW5nIEludGVydmFsW3N0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gNiBtb250aHMsIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiXQogICAgICAgIGFuZCBOZXdCUEhEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkICggKQogICAgICBzb3J0IGJ5IHN0YXJ0IG9mIG9uc2V0LnRvSW50ZXJ2YWwgKCApCiAgKQoKZGVmaW5lICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCI6CiAgLy8gW0UtMTNdIGJhc2UgRkhJUi5Db25kaXRpb24gcmV0cmlldmUgKGRlZmVjdC10cmFja2luZy9lbmdpbmUtaXNzdWVzLm1kIEUtMTMpCiAgLy8gT3JpZ2luYWw6CiAgLy8gICAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiTW9yYmlkIE9iZXNpdHkiXQogIC8vICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiTW9yYmlkIE9iZXNpdHkiXSApCiAgKCBbRkhJUi5Db25kaXRpb246ICJNb3JiaWQgT2Jlc2l0eSJdICkgTW9yYmlkT2Jlc2l0eURpYWdub3NpcwogICAgd2l0aCAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIDYgdG8gMTIgTW9udGhzIEFmdGVyIEluaXRpYWwgQlBIIERpYWdub3NpcyIgRm9sbG93VXBVU1NBc3Nlc3NtZW50CiAgICAgIHN1Y2ggdGhhdCBNb3JiaWRPYmVzaXR5RGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICBhbmQgTW9yYmlkT2Jlc2l0eURpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyBvbiBvciBiZWZvcmUgRm9sbG93VXBVU1NBc3Nlc3NtZW50LmVmZmVjdGl2ZURhdGV0aW1lCiAgICB3aGVyZSBNb3JiaWRPYmVzaXR5RGlhZ25vc2lzLnZlcmlmaWNhdGlvblN0YXR1c0lzTm90SW52YWxpZCAoICkgIAogIAovKgoqIEBjb2RlOiBCb2R5IG1hc3MgaW5kZXggKEJNSSkgW1JhdGlvXSAtIDM5MTU2LTUKKiBAcHJvZmlsZTogaHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL2JtaQoqLwoKCmRlZmluZSAiQk1JIEV4YW0gUmVzdWx0IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyA0MCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIGFuZCBPbiBvciBCZWZvcmUgRm9sbG93IFVwIFVTUyBBc3Nlc3NtZW50IjoKICBleGlzdHMgKCBbIlVTQ29yZS5CTUlQcm9maWxlIl0gQk1JRXhhbQogICAgICB3aXRoICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQKICAgICAgICBzdWNoIHRoYXQgQk1JRXhhbS52YWx1ZSA+PSA0MCAna2cvbTInCiAgICAgICAgICBhbmQgQk1JRXhhbS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBCTUlFeGFtLmVmZmVjdGl2ZS5lYXJsaWVzdCAoICkgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgICAgYW5kIEJNSUV4YW0uZWZmZWN0aXZlLmVhcmxpZXN0ICggKSBvbiBvciBiZWZvcmUgRm9sbG93VXBVU1NBc3Nlc3NtZW50LmVmZmVjdGl2ZURhdGV0aW1lCiAgICAgIHJldHVybiBCTUlFeGFtLmVmZmVjdGl2ZS5lYXJsaWVzdCAoICkKICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIHZlcmlmaWNhdGlvblN0YXR1c0lzTm90SW52YWxpZChjb25kaXRpb24gQ2hvaWNlPCJDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMiLCAiQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJucyI+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG51bGwKICAgIG9yIG5vdCAoIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInJlZnV0ZWQiCiAgICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZW50ZXJlZC1pbi1lcnJvciIKICAgICkKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gdmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkKGNvbmRpdGlvbiBGSElSLkNvbmRpdGlvbik6CiAgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyBpcyBudWxsCiAgICBvciBub3QgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJ1bmNvbmZpcm1lZCIKICAgICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJyZWZ1dGVkIgogICAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuImVudGVyZWQtaW4tZXJyb3IiCiAgICAp"/>
    <url
         value="https://madie.cms.gov/Library-CMS771FHIRUrinarySymptomScoreBPH.cql"/>
  </content>
</Library>