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

: NHSNAcuteCareHospitalMonthlyInitialPopulation1 - XML Representation

Draft as of 2026-09-19

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
  <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 NHSNAcuteCareHospitalMonthlyInitialPopulation1 version '1.1.000'

// Rebased to QI Core 6.0.0


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 USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon
include SupplementalDataElements version '6.1.000' called SDE
include CQMCommon version '5.1.000' called CQMCommon
// NHSNHelpers logic is inlined below


codesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'
codesystem &quot;Observation Category&quot;: 'http://terminology.hl7.org/CodeSystem/observation-category'
codesystem &quot;LOINC&quot;: 'http://loinc.org'
codesystem &quot;Condition Category&quot;: 'http://terminology.hl7.org/CodeSystem/condition-category'
codesystem &quot;US Core Condition Category&quot;: 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'
codesystem &quot;Condition Clinical Status&quot;: 'http://terminology.hl7.org/CodeSystem/condition-clinical'
codesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'
codesystem &quot;MedicationRequest Category&quot;: 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'

valueset &quot;Inpatient, Emergency, and Observation Locations&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'
valueset &quot;Emergency Department Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'
valueset &quot;Encounter Inpatient&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'
valueset &quot;Observation Services&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'
valueset &quot;NHSN Inpatient Encounter Class Codes&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'

// Observation Category codes


code &quot;laboratory&quot;: 'laboratory' from &quot;Observation Category&quot; display 'Laboratory'
code &quot;social-history&quot;: 'social-history' from &quot;Observation Category&quot; display 'Social History'
code &quot;vital-signs&quot;: 'vital-signs' from &quot;Observation Category&quot; display 'Vital Signs'
code &quot;imaging&quot;: 'imaging' from &quot;Observation Category&quot; display 'Imaging'
code &quot;procedure&quot;: 'procedure' from &quot;Observation Category&quot; display 'Procedure'
code &quot;survey&quot;: 'survey' from &quot;Observation Category&quot; display 'Survey'

// Condition category

code &quot;encounter-diagnosis&quot;: 'encounter-diagnosis' from &quot;Condition Category&quot; display 'Encounter Diagnosis'

// Diagnostic Report Category (LOINC-based)

code &quot;Radiology&quot;: 'LP29684-5' from &quot;LOINC&quot; display 'Radiology'
code &quot;Pathology&quot;: 'LP7839-6' from &quot;LOINC&quot; display 'Pathology'
code &quot;Cardiology&quot;: 'LP29708-2' from &quot;LOINC&quot; display 'Cardiology'

// Emergency Encounter Class

code &quot;emergency&quot;: 'EMER' from &quot;ActCode&quot; display 'emergency'
code &quot;observation encounter&quot;: 'OBSENC' from &quot;ActCode&quot; display 'observation encounter'

// Condition clinicalStatus

code &quot;active&quot;: 'active' from &quot;Condition Clinical Status&quot; display 'active'

// Procedure category

code &quot;Surgical procedure&quot;: '387713003' from &quot;SNOMEDCT&quot; display 'Surgical procedure'
code &quot;Diagnostic procedure&quot;: '103693007' from &quot;SNOMEDCT&quot; display 'Diagnostic procedure'

// MedicationRequest category

code &quot;inpatient&quot;: 'inpatient' from &quot;MedicationRequest Category&quot; display 'Inpatient'
code &quot;outpatient&quot;: 'outpatient' from &quot;MedicationRequest Category&quot; display 'Outpatient'

// ServiceRequest category

code &quot;Laboratory procedure&quot;: '108252007' from &quot;SNOMEDCT&quot; display 'Laboratory procedure'
code &quot;Imaging&quot;: '363679005' from &quot;SNOMEDCT&quot; display 'Imaging'

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

context Patient 

// ----------------------------------------------------------------------
// Core encounter logic
// ----------------------------------------------------------------------

// Encounters with NHSN class codes (IMP, ACUTE, NONAC, SS)





define &quot;Encounters with NHSN Inpatient Class&quot;:
  [Encounter] Enc
    where Enc.class ~ USQualityCoreCommon.&quot;inpatient encounter&quot;
      or Enc.class ~ USQualityCoreCommon.&quot;inpatient acute&quot;
      or Enc.class ~ USQualityCoreCommon.&quot;inpatient non-acute&quot;
      or Enc.class ~ USQualityCoreCommon.&quot;short stay&quot;

define &quot;Qualifying Encounters During Measurement Period&quot;:
  ( [Encounter: &quot;Encounter Inpatient&quot;]
    union [Encounter: &quot;Emergency Department Visit&quot;]
    union [Encounter: &quot;Observation Services&quot;]
    union &quot;Encounters with NHSN Inpatient Class&quot;
    union [Encounter: class ~ &quot;emergency&quot;]
    union [Encounter: class ~ &quot;observation encounter&quot;] ) QualifyingEncounters
    where QualifyingEncounters.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
      and QualifyingEncounters.period overlaps &quot;Measurement Period&quot;

define &quot;Encounters&quot;:
  [Encounter]

define &quot;Encounters with Patient Hospital Locations&quot;:
  &quot;Encounters&quot; Ens
    where exists ( Ens.location EncounterLocation
        where EncounterLocation.period overlaps Ens.period
          and EncounterLocation.location.getLocation ( ).type in &quot;Inpatient, Emergency, and Observation Locations&quot;
    )
      and Ens.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
      and Ens.period overlaps &quot;Measurement Period&quot;

define &quot;Initial Population&quot;:
  &quot;Qualifying Encounters During Measurement Period&quot;
    union &quot;Encounters with Patient Hospital Locations&quot;

// ----------------------------------------------------------------------
// Core retrieves
// ----------------------------------------------------------------------

// Locations from IP encounters





define &quot;Get Locations from IP Encounters in Measurement Period&quot;:
  flatten ( &quot;Initial Population&quot; IP
      let locationElements: IP.location
      return locationElements LE
        let locationReference: LE.location
        return locationReference.getLocation ( )
  )

// ----------------------------------------------------------------------
// SDEs
// ----------------------------------------------------------------------




define &quot;SDE Condition Problems HealthConcerns&quot;:
  [ConditionProblemsHealthConcerns] Diagnosis
    where exists ( &quot;Initial Population&quot; IP
        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
    )
    return {
      id: Diagnosis.id,
      meta: Diagnosis.meta,
      status: Diagnosis.clinicalStatus,
      verificationStatus: Diagnosis.verificationStatus,
      category: Diagnosis.category,
      severity: Diagnosis.severity,
      code: Diagnosis.code,
      bodySite: Diagnosis.bodySite,
      subject: Diagnosis.subject,
      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
      onset: Diagnosis.onset,
      stage: Diagnosis.stage,
      evidence: Diagnosis.evidence,
      note: Diagnosis.note
    }

define &quot;SDE Condition Diagnosis&quot;:
  [ConditionEncounterDiagnosis] Diagnosis
    where exists ( &quot;Initial Population&quot; IP
        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
    )
    return {
      id: Diagnosis.id,
      meta: Diagnosis.meta,
      status: Diagnosis.clinicalStatus,
      verificationStatus: Diagnosis.verificationStatus,
      category: Diagnosis.category,
      severity: Diagnosis.severity,
      code: Diagnosis.code,
      bodySite: Diagnosis.bodySite,
      subject: Diagnosis.subject,
      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
      onset: Diagnosis.onset,
      stage: Diagnosis.stage,
      evidence: Diagnosis.evidence,
      note: Diagnosis.note
    }

// Coverage SDE – tuples of Coverage data


define &quot;SDE Coverage&quot;:
  [Coverage] Coverages
    where exists ( &quot;Initial Population&quot; IP
        where Coverages.period overlaps IP.period
    )
    return {
      id: Coverages.id,
      meta: Coverages.meta,
      status: Coverages.status,
      type: Coverages.type,
      policyHolder: Coverages.policyHolder,
      subscriber: Coverages.subscriber,
      subscriberId: Coverages.subscriberId,
      beneficiary: Coverages.beneficiary,
      dependent: Coverages.dependent,
      relationship: Coverages.relationship,
      period: Coverages.period,
      payor: Coverages.payor,
      class: Coverages.class,
      order: Coverages.order,
      network: Coverages.network,
      subrogation: Coverages.subrogation,
      contract: Coverages.contract
    }

// Device SDE – tuples of Device data


define &quot;SDE Device&quot;:
  [Device] Devices
    where exists ( &quot;Initial Population&quot; )
    return {
      id: Devices.id,
      meta: Devices.meta,
      extension: Devices.extension,
      status: Devices.status,
      expirationDate: Devices.expirationDate,
      lotNumber: Devices.lotNumber,
      serialNumber: Devices.serialNumber,
      modelNumber: Devices.modelNumber,
      partNumber: Devices.partNumber,
      type: Devices.type,
      patient: Devices.patient,
      parent: Devices.parent
    }

// DiagnosticReport SDEs


define &quot;SDE DiagnosticReport Lab&quot;:
  [DiagnosticReportLab] dr
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period
    )

define &quot;SDE DiagnosticReport Note&quot;:
  [DiagnosticReportNote] dr
    where ( exists ( dr.category Category
          where Category ~ &quot;Radiology&quot;
      )
        or exists ( dr.category Category
            where Category ~ &quot;Pathology&quot;
        )
        or exists ( dr.category Category
            where Category ~ &quot;Cardiology&quot;
        )
    )
      and exists ( &quot;Initial Population&quot; IP
          where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period
      )
    return {
      id: dr.id,
      meta: dr.meta,
      extension: dr.extension,
      basedOn: dr.basedOn,
      status: dr.status,
      category: dr.category,
      code: dr.code,
      subject: dr.subject,
      encounter: dr.encounter,
      effective: dr.effective,
      issued: dr.issued,
      specimen: dr.specimen,
      result: dr.result,
      conclusion: dr.conclusion,
      conclusionCode: dr.conclusionCode
    }

define &quot;SDE DiagnosticReport Others&quot;:
  [DiagnosticReportNote] dr
    where not ( exists ( dr.category Category
          where Category ~ &quot;Radiology&quot;
      )
        or exists ( dr.category Category
            where Category ~ &quot;Pathology&quot;
        )
        or exists ( dr.category Category
            where Category ~ &quot;Cardiology&quot;
        )
    )
      and exists ( &quot;Initial Population&quot; IP
          where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period
      )
    return {
      id: dr.id,
      meta: dr.meta,
      extension: dr.extension,
      basedOn: dr.basedOn,
      status: dr.status,
      category: dr.category,
      code: dr.code,
      subject: dr.subject,
      encounter: dr.encounter,
      effective: dr.effective,
      issued: dr.issued,
      specimen: dr.specimen,
      result: dr.result,
      conclusion: dr.conclusion,
      conclusionCode: dr.conclusionCode
    }

// Encounter SDEs


define &quot;SDE Encounter&quot;:
  &quot;Encounters&quot; Ens
    where not &quot;CheckIP&quot;(Ens)
      and exists ( &quot;Initial Population&quot; IP
          where Ens.period overlaps IP.period
      )
    return {
      id: Ens.id,
      meta: Ens.meta,
      identifier: Ens.identifier,
      status: Ens.status,
      statusHistory: Ens.statusHistory,
      class: Ens.class,
      classHistory: Ens.classHistory,
      type: Ens.type,
      serviceType: Ens.serviceType,
      priority: Ens.priority,
      subject: Ens.subject,
      period: Ens.period,
      length: Ens.length,
      reasonCode: Ens.reasonCode,
      reasonReference: Ens.reasonReference,
      diagnosis: Ens.diagnosis,
      account: Ens.account,
      hospitalization: Ens.hospitalization,
      location: Ens.location,
      partOf: Ens.partOf
    }

define &quot;SDE IP Encounters&quot;:
  &quot;Initial Population&quot; IP
    return {
      id: IP.id,
      meta: IP.meta,
      identifier: IP.identifier,
      status: IP.status,
      statusHistory: IP.statusHistory,
      class: IP.class,
      classHistory: IP.classHistory,
      type: IP.type,
      serviceType: IP.serviceType,
      priority: IP.priority,
      subject: IP.subject,
      period: IP.period,
      length: IP.length,
      reasonCode: IP.reasonCode,
      reasonReference: IP.reasonReference,
      diagnosis: IP.diagnosis,
      account: IP.account,
      hospitalization: IP.hospitalization,
      location: IP.location,
      partOf: IP.partOf
    }

// Location SDE


define &quot;SDE Location&quot;:
  &quot;Get Locations from IP Encounters in Measurement Period&quot; Locations
    where exists ( &quot;Initial Population&quot; )
      and Locations is not null
    return {
      id: Locations.id,
      meta: Locations.meta,
      extension: Locations.extension,
      status: Locations.status,
      operationalStatus: Locations.operationalStatus,
      name: Locations.name,
      alias: Locations.alias,
      description: Locations.description,
      mode: Locations.mode,
      type: Locations.type,
      telecom: Locations.telecom,
      address: Locations.address,
      physicalType: Locations.physicalType,
      position: Locations.position,
      managingOrganization: Locations.managingOrganization,
      partOf: Locations.partOf,
      hoursOfOperation: Locations.hoursOfOperation,
      availabilityExceptions: Locations.availabilityExceptions,
      endpoint: Locations.endpoint
    }

// Medication SDEs


define &quot;SDE Medication Administration&quot;:
  &quot;SDE Medication Administration Base&quot;
    union &quot;SDE Medication Administration Not Done&quot;

define &quot;SDE Medication Administration Base&quot;:
  [MedicationAdministration] MedAdministrations
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(MedAdministrations.effective) overlaps IP.period
    )
    return {
      id: MedAdministrations.id,
      meta: MedAdministrations.meta,
      instantiates: MedAdministrations.instantiates,
      partOf: MedAdministrations.partOf,
      status: MedAdministrations.status,
      statusReason: MedAdministrations.statusReason,
      category: MedAdministrations.category,
      medication: MedAdministrations.medication,
      subject: MedAdministrations.subject,
      context: MedAdministrations.context,
      supportingInformation: MedAdministrations.supportingInformation,
      effective: MedAdministrations.effective,
      performer: MedAdministrations.performer,
      reasonCode: MedAdministrations.reasonCode,
      reasonReference: MedAdministrations.reasonReference,
      request: MedAdministrations.request,
      device: MedAdministrations.device,
      note: MedAdministrations.note,
      dosage: MedAdministrations.dosage
    }

define &quot;SDE Medication Administration Not Done&quot;:
  [MedicationAdministrationNotDone] MedAdministrations
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(MedAdministrations.effective) overlaps IP.period
    )
    return {
      id: MedAdministrations.id,
      meta: MedAdministrations.meta,
      instantiates: MedAdministrations.instantiates,
      partOf: MedAdministrations.partOf,
      status: MedAdministrations.status,
      statusReason: MedAdministrations.statusReason,
      category: MedAdministrations.category,
      medication: MedAdministrations.medication,
      subject: MedAdministrations.subject,
      context: MedAdministrations.context,
      supportingInformation: MedAdministrations.supportingInformation,
      effective: MedAdministrations.effective,
      performer: MedAdministrations.performer,
      reasonCode: MedAdministrations.reasonCode,
      reasonReference: MedAdministrations.reasonReference,
      request: MedAdministrations.request,
      device: MedAdministrations.device,
      note: MedAdministrations.note,
      dosage: MedAdministrations.dosage
    }

// SDE Medication Request - regular requests (doNotPerform is false or absent)


define &quot;SDE Medication Request Base&quot;:
  [MedicationRequest] MedRequests
    where exists ( &quot;Initial Population&quot; IP
        where MedRequests.authoredOn during IP.period
    )
    return {
      id: MedRequests.id,
      meta: MedRequests.meta,
      status: MedRequests.status,
      statusReason: MedRequests.statusReason,
      intent: MedRequests.intent,
      category: MedRequests.category,
      priority: MedRequests.priority,
      //doNotPerform: MedRequests.doNotPerform,
      
      reported: MedRequests.reported,
      medication: MedRequests.medication,
      subject: MedRequests.subject,
      encounter: MedRequests.encounter,
      authoredOn: MedRequests.authoredOn,
      requester: MedRequests.requester,
      recorder: MedRequests.recorder,
      reasonCode: MedRequests.reasonCode,
      reasonReference: MedRequests.reasonReference,
      instantiatesCanonical: MedRequests.instantiatesCanonical,
      instantiatesUri: MedRequests.instantiatesUri,
      courseOfTherapyType: MedRequests.courseOfTherapyType,
      dosageInstruction: MedRequests.dosageInstruction
    }

// SDE Medication Not Requested - negation requests (doNotPerform is true)


define &quot;SDE Medication Not Requested&quot;:
  [MedicationNotRequested] MedNotRequests
    where exists ( &quot;Initial Population&quot; IP
        where MedNotRequests.authoredOn during IP.period
    )
    return {
      id: MedNotRequests.id,
      meta: MedNotRequests.meta,
      status: MedNotRequests.status,
      statusReason: MedNotRequests.statusReason,
      intent: MedNotRequests.intent,
      category: MedNotRequests.category,
      priority: MedNotRequests.priority,
      doNotPerform: MedNotRequests.doNotPerform,
      reported: MedNotRequests.reported,
      medication: MedNotRequests.medication,
      subject: MedNotRequests.subject,
      encounter: MedNotRequests.encounter,
      authoredOn: MedNotRequests.authoredOn,
      requester: MedNotRequests.requester,
      recorder: MedNotRequests.recorder,
      reasonCode: MedNotRequests.reasonCode,
      reasonReference: MedNotRequests.reasonReference,
      instantiatesCanonical: MedNotRequests.instantiatesCanonical,
      instantiatesUri: MedNotRequests.instantiatesUri,
      courseOfTherapyType: MedNotRequests.courseOfTherapyType,
      dosageInstruction: MedNotRequests.dosageInstruction
    }

// Combined SDE for all Medication Requests (both regular and negation)


define &quot;SDE Medication Request&quot;:
  &quot;SDE Medication Request Base&quot;
    union &quot;SDE Medication Not Requested&quot;

define function &quot;GetMedication&quot;(reference Reference):
  singleton from ( [Medication] Medication
      where reference.references ( Medication )
  )

define &quot;SDE Medication&quot;:
  ( [MedicationRequest]
    union [MedicationAdministration] ) MedReqOrAdmin
    let medication: GetMedication(MedReqOrAdmin.medication as Reference)
    where medication is not null
      and exists ( &quot;Initial Population&quot; IP
          where Coalesce(&quot;Normalize Interval&quot;(MedReqOrAdmin.effective), MedReqOrAdmin.authoredOn.toInterval()) overlaps IP.period
      )
    return {
      id: medication.id,
      meta: medication.meta,
      code: medication.code,
      status: medication.status,
      manufacturer: medication.manufacturer,
      form: medication.form,
      amount: medication.amount,
      ingredient: medication.ingredient,
      batch: medication.batch
    }


// Observation SDEs


define &quot;SDE Observation Lab Category&quot;:
  [LaboratoryResultObservation] Obs
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }

define &quot;SDE Observation Simple&quot;:
  [SimpleObservation] Obs
    where ( exists ( Obs.category Category
          where Category ~ &quot;social-history&quot;
      )
        or exists ( Obs.category Category
            where Category ~ &quot;imaging&quot;
        )
        or exists ( Obs.category Category
            where Category ~ &quot;procedure&quot;
        )
    )
      and exists ( &quot;Initial Population&quot; IP
          where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period
      )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }
    
// Survey is fixed category code in ObservationScreeningAssessment profile in QI-Core    


define &quot;SDE Observation Survey&quot;:
  [ObservationScreeningAssessment] Obs
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }

define &quot;SDE Observation Vital Signs Category&quot;:
  [USCore.VitalSignsProfile] Obs
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }


// Procedure SDE


define &quot;SDE Procedure&quot;:
  [Procedure] Procedures
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(Procedures.performed) overlaps IP.period
    )
    return {
      id: Procedures.id,
      meta: Procedures.meta,
      extension: Procedures.extension,
      basedOn: Procedures.basedOn,
      partOf: Procedures.partOf,
      status: Procedures.status,
      category: Procedures.category,
      code: Procedures.code,
      subject: Procedures.subject,
      encounter: Procedures.encounter,
      performed: Procedures.performed,
      location: Procedures.location,
      reasonCode: Procedures.reasonCode,
      reasonReference: Procedures.reasonReference,
      bodySite: Procedures.bodySite
    }

// ServiceRequest SDE - regular requests (doNotPerform is false or absent)


define &quot;SDE Service Request Base&quot;:
  [ServiceRequest] ServiceRequests
    where exists ( &quot;Initial Population&quot; IP
        where ServiceRequests.authoredOn during IP.period
    )
    return {
      id: ServiceRequests.id,
      meta: ServiceRequests.meta,
      instantiatesCanonical: ServiceRequests.instantiatesCanonical,
      instantiatesUri: ServiceRequests.instantiatesUri,
      basedOn: ServiceRequests.basedOn,
      replaces: ServiceRequests.replaces,
      requisition: ServiceRequests.requisition,
      status: ServiceRequests.status,
      intent: ServiceRequests.intent,
      category: ServiceRequests.category,
      priority: ServiceRequests.priority,
      //doNotPerform: ServiceRequests.doNotPerform,
      
      code: ServiceRequests.code,
      orderDetail: ServiceRequests.orderDetail,
      quantity: ServiceRequests.quantity,
      subject: ServiceRequests.subject,
      encounter: ServiceRequests.encounter,
      occurrence: ServiceRequests.occurrence,
      asNeeded: ServiceRequests.asNeeded,
      authoredOn: ServiceRequests.authoredOn,
      requester: ServiceRequests.requester,
      performerType: ServiceRequests.performerType,
      performer: ServiceRequests.performer,
      locationCode: ServiceRequests.locationCode,
      reasonCode: ServiceRequests.reasonCode,
      reasonReference: ServiceRequests.reasonReference,
      insurance: ServiceRequests.insurance,
      bodySite: ServiceRequests.bodySite,
      note: ServiceRequests.note,
      patientInstruction: ServiceRequests.patientInstruction
    }

// ServiceNotRequested SDE - negation requests (doNotPerform is true)


define &quot;SDE Service Not Requested&quot;:
  [ServiceNotRequested] ServiceNotReqs
    where exists ( &quot;Initial Population&quot; IP
        where ServiceNotReqs.authoredOn during IP.period
    )
    return {
      id: ServiceNotReqs.id,
      meta: ServiceNotReqs.meta,
      instantiatesCanonical: ServiceNotReqs.instantiatesCanonical,
      instantiatesUri: ServiceNotReqs.instantiatesUri,
      basedOn: ServiceNotReqs.basedOn,
      replaces: ServiceNotReqs.replaces,
      requisition: ServiceNotReqs.requisition,
      status: ServiceNotReqs.status,
      intent: ServiceNotReqs.intent,
      category: ServiceNotReqs.category,
      priority: ServiceNotReqs.priority,
      doNotPerform: ServiceNotReqs.doNotPerform,
      code: ServiceNotReqs.code,
      orderDetail: ServiceNotReqs.orderDetail,
      quantity: ServiceNotReqs.quantity,
      subject: ServiceNotReqs.subject,
      encounter: ServiceNotReqs.encounter,
      occurrence: ServiceNotReqs.occurrence,
      asNeeded: ServiceNotReqs.asNeeded,
      authoredOn: ServiceNotReqs.authoredOn,
      requester: ServiceNotReqs.requester,
      performerType: ServiceNotReqs.performerType,
      performer: ServiceNotReqs.performer,
      locationCode: ServiceNotReqs.locationCode,
      reasonCode: ServiceNotReqs.reasonCode,
      reasonReference: ServiceNotReqs.reasonReference,
      insurance: ServiceNotReqs.insurance,
      bodySite: ServiceNotReqs.bodySite,
      note: ServiceNotReqs.note,
      patientInstruction: ServiceNotReqs.patientInstruction
    }

// Combined SDE for all Service Requests (both regular and negation)


define &quot;SDE Service Request&quot;:
  &quot;SDE Service Request Base&quot;
    union &quot;SDE Service Not Requested&quot;

// Minimal patient SDE


define &quot;SDE Minimal Patient&quot;:
  [Patient] MinPt
    where exists ( &quot;Initial Population&quot; )
    return {
      id: MinPt.id,
      meta: MinPt.meta,
      extension: MinPt.extension,
      identifier: MinPt.identifier,
      active: MinPt.active,
      name: MinPt.name,
      telecom: MinPt.telecom,
      gender: MinPt.gender,
      birthDate: MinPt.birthDate,
      deceased: MinPt.deceased,
      address: MinPt.address,
      maritalStatus: MinPt.maritalStatus,
      multipleBirth: MinPt.multipleBirth,
      photo: MinPt.photo,
      contact: MinPt.contact,
      communication: MinPt.communication,
      generalPractitioner: MinPt.generalPractitioner,
      managingOrganization: MinPt.managingOrganization,
      link: MinPt.link
    }

define &quot;SDE Specimens&quot;:
  [USCore.SpecimenProfile] sp
    where exists ( &quot;Initial Population&quot; IP
        where &quot;Normalize Interval&quot;(sp.collection.collected) overlaps IP.period
    )
    return {
      id: sp.id,
      type: sp.type
    }

// ----------------------------------------------------------------------
// Helper functions
// ----------------------------------------------------------------------




define function &quot;CheckIP&quot;(encounter Encounter):
  exists ( &quot;Initial Population&quot; IP
      where encounter.id = IP.id
  )

// Former NHSNHelpers functions, adapted for QI Core


define function &quot;Normalize Interval&quot;(choice Choice&lt;DateTime, Interval&lt;DateTime&gt;&gt;):
  case
    when choice is DateTime then Interval[choice as DateTime, choice as DateTime]
    when choice is Interval&lt;DateTime&gt;then choice as Interval&lt;DateTime&gt;
    else null as Interval&lt;DateTime&gt;end

define function &quot;GetLocation&quot;(reference Reference):
  singleton from ( [Location] Locations
      where Locations.id = GetId(reference.reference)
  )

define function &quot;GetId&quot;(uri String):
  Last(Split(uri, '/'))

define function &quot;GetId&quot;(uri FHIR.string):
  Last(Split(FHIRHelpers.ToString(uri), '/'))</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/NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
  <version value="1.1.000"/>
  <name value="NHSNAcuteCareHospitalMonthlyInitialPopulation1"/>
  <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="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBOSFNOQWN1dGVDYXJlSG9zcGl0YWxNb250aGx5SW5pdGlhbFBvcHVsYXRpb24xIHZlcnNpb24gJzEuMS4wMDAnCgovLyBSZWJhc2VkIHRvIFFJIENvcmUgNi4wLjAKCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uCi8vIE5IU05IZWxwZXJzIGxvZ2ljIGlzIGlubGluZWQgYmVsb3cKCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vYnNlcnZhdGlvbi1jYXRlZ29yeScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ29uZGl0aW9uIENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJVUyBDb3JlIENvbmRpdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvQ29kZVN5c3RlbS9jb25kaXRpb24tY2F0ZWdvcnknCmNvZGVzeXN0ZW0gIkNvbmRpdGlvbiBDbGluaWNhbCBTdGF0dXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwnCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vbWVkaWNhdGlvbnJlcXVlc3QtY2F0ZWdvcnknCgp2YWx1ZXNldCAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI2NScKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yOTInCnZhbHVlc2V0ICJFbmNvdW50ZXIgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjY2Ni41LjMwNycKdmFsdWVzZXQgIk9ic2VydmF0aW9uIFNlcnZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNDMnCnZhbHVlc2V0ICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3NCcKCi8vIE9ic2VydmF0aW9uIENhdGVnb3J5IGNvZGVzCgoKY29kZSAibGFib3JhdG9yeSI6ICdsYWJvcmF0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAic29jaWFsLWhpc3RvcnkiOiAnc29jaWFsLWhpc3RvcnknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTb2NpYWwgSGlzdG9yeScKY29kZSAidml0YWwtc2lnbnMiOiAndml0YWwtc2lnbnMnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdWaXRhbCBTaWducycKY29kZSAiaW1hZ2luZyI6ICdpbWFnaW5nJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnSW1hZ2luZycKY29kZSAicHJvY2VkdXJlIjogJ3Byb2NlZHVyZScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2NlZHVyZScKY29kZSAic3VydmV5IjogJ3N1cnZleScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1N1cnZleScKCi8vIENvbmRpdGlvbiBjYXRlZ29yeQoKY29kZSAiZW5jb3VudGVyLWRpYWdub3NpcyI6ICdlbmNvdW50ZXItZGlhZ25vc2lzJyBmcm9tICJDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0VuY291bnRlciBEaWFnbm9zaXMnCgovLyBEaWFnbm9zdGljIFJlcG9ydCBDYXRlZ29yeSAoTE9JTkMtYmFzZWQpCgpjb2RlICJSYWRpb2xvZ3kiOiAnTFAyOTY4NC01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmFkaW9sb2d5Jwpjb2RlICJQYXRob2xvZ3kiOiAnTFA3ODM5LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdQYXRob2xvZ3knCmNvZGUgIkNhcmRpb2xvZ3kiOiAnTFAyOTcwOC0yJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ2FyZGlvbG9neScKCi8vIEVtZXJnZW5jeSBFbmNvdW50ZXIgQ2xhc3MKCmNvZGUgImVtZXJnZW5jeSI6ICdFTUVSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICdlbWVyZ2VuY3knCmNvZGUgIm9ic2VydmF0aW9uIGVuY291bnRlciI6ICdPQlNFTkMnIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ29ic2VydmF0aW9uIGVuY291bnRlcicKCi8vIENvbmRpdGlvbiBjbGluaWNhbFN0YXR1cwoKY29kZSAiYWN0aXZlIjogJ2FjdGl2ZScgZnJvbSAiQ29uZGl0aW9uIENsaW5pY2FsIFN0YXR1cyIgZGlzcGxheSAnYWN0aXZlJwoKLy8gUHJvY2VkdXJlIGNhdGVnb3J5Cgpjb2RlICJTdXJnaWNhbCBwcm9jZWR1cmUiOiAnMzg3NzEzMDAzJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU3VyZ2ljYWwgcHJvY2VkdXJlJwpjb2RlICJEaWFnbm9zdGljIHByb2NlZHVyZSI6ICcxMDM2OTMwMDcnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaWFnbm9zdGljIHByb2NlZHVyZScKCi8vIE1lZGljYXRpb25SZXF1ZXN0IGNhdGVnb3J5Cgpjb2RlICJpbnBhdGllbnQiOiAnaW5wYXRpZW50JyBmcm9tICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSIgZGlzcGxheSAnSW5wYXRpZW50Jwpjb2RlICJvdXRwYXRpZW50IjogJ291dHBhdGllbnQnIGZyb20gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IiBkaXNwbGF5ICdPdXRwYXRpZW50JwoKLy8gU2VydmljZVJlcXVlc3QgY2F0ZWdvcnkKCmNvZGUgIkxhYm9yYXRvcnkgcHJvY2VkdXJlIjogJzEwODI1MjAwNycgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0xhYm9yYXRvcnkgcHJvY2VkdXJlJwpjb2RlICJJbWFnaW5nIjogJzM2MzY3OTAwNScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0ltYWdpbmcnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNi0wMi0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50IAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIGVuY291bnRlciBsb2dpYwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBFbmNvdW50ZXJzIHdpdGggTkhTTiBjbGFzcyBjb2RlcyAoSU1QLCBBQ1VURSwgTk9OQUMsIFNTKQoKCgoKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIjoKICBbRW5jb3VudGVyXSBFbmMKICAgIHdoZXJlIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBlbmNvdW50ZXIiCiAgICAgIG9yIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBhY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iaW5wYXRpZW50IG5vbi1hY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4ic2hvcnQgc3RheSIKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXQogICAgdW5pb24gW0VuY291bnRlcjogIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyJdCiAgICB1bmlvbiAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIgogICAgdW5pb24gW0VuY291bnRlcjogY2xhc3MgfiAiZW1lcmdlbmN5Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIH4gIm9ic2VydmF0aW9uIGVuY291bnRlciJdICkgUXVhbGlmeWluZ0VuY291bnRlcnMKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnN0YXR1cyBpbiB7ICdpbi1wcm9ncmVzcycsICdmaW5pc2hlZCcsICd0cmlhZ2VkJywgJ29ubGVhdmUnLCAnZW50ZXJlZC1pbi1lcnJvcicgfQogICAgICBhbmQgUXVhbGlmeWluZ0VuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkVuY291bnRlcnMiOgogIFtFbmNvdW50ZXJdCgpkZWZpbmUgIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyI6CiAgIkVuY291bnRlcnMiIEVucwogICAgd2hlcmUgZXhpc3RzICggRW5zLmxvY2F0aW9uIEVuY291bnRlckxvY2F0aW9uCiAgICAgICAgd2hlcmUgRW5jb3VudGVyTG9jYXRpb24ucGVyaW9kIG92ZXJsYXBzIEVucy5wZXJpb2QKICAgICAgICAgIGFuZCBFbmNvdW50ZXJMb2NhdGlvbi5sb2NhdGlvbi5nZXRMb2NhdGlvbiAoICkudHlwZSBpbiAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiCiAgICApCiAgICAgIGFuZCBFbnMuc3RhdHVzIGluIHsgJ2luLXByb2dyZXNzJywgJ2ZpbmlzaGVkJywgJ3RyaWFnZWQnLCAnb25sZWF2ZScsICdlbnRlcmVkLWluLWVycm9yJyB9CiAgICAgIGFuZCBFbnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgdW5pb24gIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyIKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29yZSByZXRyaWV2ZXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gTG9jYXRpb25zIGZyb20gSVAgZW5jb3VudGVycwoKCgoKCmRlZmluZSAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBmbGF0dGVuICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgbGV0IGxvY2F0aW9uRWxlbWVudHM6IElQLmxvY2F0aW9uCiAgICAgIHJldHVybiBsb2NhdGlvbkVsZW1lbnRzIExFCiAgICAgICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgICAgIHJldHVybiBsb2NhdGlvblJlZmVyZW5jZS5nZXRMb2NhdGlvbiAoICkKICApCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFNERXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoKZGVmaW5lICJTREUgQ29uZGl0aW9uIFByb2JsZW1zIEhlYWx0aENvbmNlcm5zIjoKICBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuc10gRGlhZ25vc2lzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIERpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEaWFnbm9zaXMuaWQsCiAgICAgIG1ldGE6IERpYWdub3Npcy5tZXRhLAogICAgICBzdGF0dXM6IERpYWdub3Npcy5jbGluaWNhbFN0YXR1cywKICAgICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgICBjYXRlZ29yeTogRGlhZ25vc2lzLmNhdGVnb3J5LAogICAgICBzZXZlcml0eTogRGlhZ25vc2lzLnNldmVyaXR5LAogICAgICBjb2RlOiBEaWFnbm9zaXMuY29kZSwKICAgICAgYm9keVNpdGU6IERpYWdub3Npcy5ib2R5U2l0ZSwKICAgICAgc3ViamVjdDogRGlhZ25vc2lzLnN1YmplY3QsCiAgICAgIGVuY291bnRlclJlZmVyZW5jZUlkOiBEaWFnbm9zaXMuZW5jb3VudGVyLnJlZmVyZW5jZS5nZXRJZCAoICksCiAgICAgIG9uc2V0OiBEaWFnbm9zaXMub25zZXQsCiAgICAgIHN0YWdlOiBEaWFnbm9zaXMuc3RhZ2UsCiAgICAgIGV2aWRlbmNlOiBEaWFnbm9zaXMuZXZpZGVuY2UsCiAgICAgIG5vdGU6IERpYWdub3Npcy5ub3RlCiAgICB9CgpkZWZpbmUgIlNERSBDb25kaXRpb24gRGlhZ25vc2lzIjoKICBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzXSBEaWFnbm9zaXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IERpYWdub3Npcy5pZCwKICAgICAgbWV0YTogRGlhZ25vc2lzLm1ldGEsCiAgICAgIHN0YXR1czogRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzLAogICAgICB2ZXJpZmljYXRpb25TdGF0dXM6IERpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBEaWFnbm9zaXMuY2F0ZWdvcnksCiAgICAgIHNldmVyaXR5OiBEaWFnbm9zaXMuc2V2ZXJpdHksCiAgICAgIGNvZGU6IERpYWdub3Npcy5jb2RlLAogICAgICBib2R5U2l0ZTogRGlhZ25vc2lzLmJvZHlTaXRlLAogICAgICBzdWJqZWN0OiBEaWFnbm9zaXMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyUmVmZXJlbmNlSWQ6IERpYWdub3Npcy5lbmNvdW50ZXIucmVmZXJlbmNlLmdldElkICggKSwKICAgICAgb25zZXQ6IERpYWdub3Npcy5vbnNldCwKICAgICAgc3RhZ2U6IERpYWdub3Npcy5zdGFnZSwKICAgICAgZXZpZGVuY2U6IERpYWdub3Npcy5ldmlkZW5jZSwKICAgICAgbm90ZTogRGlhZ25vc2lzLm5vdGUKICAgIH0KCi8vIENvdmVyYWdlIFNERSDigJMgdHVwbGVzIG9mIENvdmVyYWdlIGRhdGEKCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6CiAgW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBDb3ZlcmFnZXMuaWQsCiAgICAgIG1ldGE6IENvdmVyYWdlcy5tZXRhLAogICAgICBzdGF0dXM6IENvdmVyYWdlcy5zdGF0dXMsCiAgICAgIHR5cGU6IENvdmVyYWdlcy50eXBlLAogICAgICBwb2xpY3lIb2xkZXI6IENvdmVyYWdlcy5wb2xpY3lIb2xkZXIsCiAgICAgIHN1YnNjcmliZXI6IENvdmVyYWdlcy5zdWJzY3JpYmVyLAogICAgICBzdWJzY3JpYmVySWQ6IENvdmVyYWdlcy5zdWJzY3JpYmVySWQsCiAgICAgIGJlbmVmaWNpYXJ5OiBDb3ZlcmFnZXMuYmVuZWZpY2lhcnksCiAgICAgIGRlcGVuZGVudDogQ292ZXJhZ2VzLmRlcGVuZGVudCwKICAgICAgcmVsYXRpb25zaGlwOiBDb3ZlcmFnZXMucmVsYXRpb25zaGlwLAogICAgICBwZXJpb2Q6IENvdmVyYWdlcy5wZXJpb2QsCiAgICAgIHBheW9yOiBDb3ZlcmFnZXMucGF5b3IsCiAgICAgIGNsYXNzOiBDb3ZlcmFnZXMuY2xhc3MsCiAgICAgIG9yZGVyOiBDb3ZlcmFnZXMub3JkZXIsCiAgICAgIG5ldHdvcms6IENvdmVyYWdlcy5uZXR3b3JrLAogICAgICBzdWJyb2dhdGlvbjogQ292ZXJhZ2VzLnN1YnJvZ2F0aW9uLAogICAgICBjb250cmFjdDogQ292ZXJhZ2VzLmNvbnRyYWN0CiAgICB9CgovLyBEZXZpY2UgU0RFIOKAkyB0dXBsZXMgb2YgRGV2aWNlIGRhdGEKCgpkZWZpbmUgIlNERSBEZXZpY2UiOgogIFtEZXZpY2VdIERldmljZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEZXZpY2VzLmlkLAogICAgICBtZXRhOiBEZXZpY2VzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogRGV2aWNlcy5leHRlbnNpb24sCiAgICAgIHN0YXR1czogRGV2aWNlcy5zdGF0dXMsCiAgICAgIGV4cGlyYXRpb25EYXRlOiBEZXZpY2VzLmV4cGlyYXRpb25EYXRlLAogICAgICBsb3ROdW1iZXI6IERldmljZXMubG90TnVtYmVyLAogICAgICBzZXJpYWxOdW1iZXI6IERldmljZXMuc2VyaWFsTnVtYmVyLAogICAgICBtb2RlbE51bWJlcjogRGV2aWNlcy5tb2RlbE51bWJlciwKICAgICAgcGFydE51bWJlcjogRGV2aWNlcy5wYXJ0TnVtYmVyLAogICAgICB0eXBlOiBEZXZpY2VzLnR5cGUsCiAgICAgIHBhdGllbnQ6IERldmljZXMucGF0aWVudCwKICAgICAgcGFyZW50OiBEZXZpY2VzLnBhcmVudAogICAgfQoKLy8gRGlhZ25vc3RpY1JlcG9ydCBTREVzCgoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBMYWIiOgogIFtEaWFnbm9zdGljUmVwb3J0TGFiXSBkcgogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihkci5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBOb3RlIjoKICBbRGlhZ25vc3RpY1JlcG9ydE5vdGVdIGRyCiAgICB3aGVyZSAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBPdGhlcnMiOgogIFtEaWFnbm9zdGljUmVwb3J0Tm90ZV0gZHIKICAgIHdoZXJlIG5vdCAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKLy8gRW5jb3VudGVyIFNERXMKCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOgogICJFbmNvdW50ZXJzIiBFbnMKICAgIHdoZXJlIG5vdCAiQ2hlY2tJUCIoRW5zKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIEVucy5wZXJpb2Qgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBFbnMuaWQsCiAgICAgIG1ldGE6IEVucy5tZXRhLAogICAgICBpZGVudGlmaWVyOiBFbnMuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBFbnMuc3RhdHVzLAogICAgICBzdGF0dXNIaXN0b3J5OiBFbnMuc3RhdHVzSGlzdG9yeSwKICAgICAgY2xhc3M6IEVucy5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBFbnMuY2xhc3NIaXN0b3J5LAogICAgICB0eXBlOiBFbnMudHlwZSwKICAgICAgc2VydmljZVR5cGU6IEVucy5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IEVucy5wcmlvcml0eSwKICAgICAgc3ViamVjdDogRW5zLnN1YmplY3QsCiAgICAgIHBlcmlvZDogRW5zLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBFbnMubGVuZ3RoLAogICAgICByZWFzb25Db2RlOiBFbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBFbnMucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IEVucy5kaWFnbm9zaXMsCiAgICAgIGFjY291bnQ6IEVucy5hY2NvdW50LAogICAgICBob3NwaXRhbGl6YXRpb246IEVucy5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBFbnMubG9jYXRpb24sCiAgICAgIHBhcnRPZjogRW5zLnBhcnRPZgogICAgfQoKZGVmaW5lICJTREUgSVAgRW5jb3VudGVycyI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHJldHVybiB7CiAgICAgIGlkOiBJUC5pZCwKICAgICAgbWV0YTogSVAubWV0YSwKICAgICAgaWRlbnRpZmllcjogSVAuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBJUC5zdGF0dXMsCiAgICAgIHN0YXR1c0hpc3Rvcnk6IElQLnN0YXR1c0hpc3RvcnksCiAgICAgIGNsYXNzOiBJUC5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBJUC5jbGFzc0hpc3RvcnksCiAgICAgIHR5cGU6IElQLnR5cGUsCiAgICAgIHNlcnZpY2VUeXBlOiBJUC5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IElQLnByaW9yaXR5LAogICAgICBzdWJqZWN0OiBJUC5zdWJqZWN0LAogICAgICBwZXJpb2Q6IElQLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBJUC5sZW5ndGgsCiAgICAgIHJlYXNvbkNvZGU6IElQLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogSVAucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IElQLmRpYWdub3NpcywKICAgICAgYWNjb3VudDogSVAuYWNjb3VudCwKICAgICAgaG9zcGl0YWxpemF0aW9uOiBJUC5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBJUC5sb2NhdGlvbiwKICAgICAgcGFydE9mOiBJUC5wYXJ0T2YKICAgIH0KCi8vIExvY2F0aW9uIFNERQoKCmRlZmluZSAiU0RFIExvY2F0aW9uIjoKICAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIiBMb2NhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgICAgYW5kIExvY2F0aW9ucyBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgaWQ6IExvY2F0aW9ucy5pZCwKICAgICAgbWV0YTogTG9jYXRpb25zLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogTG9jYXRpb25zLmV4dGVuc2lvbiwKICAgICAgc3RhdHVzOiBMb2NhdGlvbnMuc3RhdHVzLAogICAgICBvcGVyYXRpb25hbFN0YXR1czogTG9jYXRpb25zLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgICBuYW1lOiBMb2NhdGlvbnMubmFtZSwKICAgICAgYWxpYXM6IExvY2F0aW9ucy5hbGlhcywKICAgICAgZGVzY3JpcHRpb246IExvY2F0aW9ucy5kZXNjcmlwdGlvbiwKICAgICAgbW9kZTogTG9jYXRpb25zLm1vZGUsCiAgICAgIHR5cGU6IExvY2F0aW9ucy50eXBlLAogICAgICB0ZWxlY29tOiBMb2NhdGlvbnMudGVsZWNvbSwKICAgICAgYWRkcmVzczogTG9jYXRpb25zLmFkZHJlc3MsCiAgICAgIHBoeXNpY2FsVHlwZTogTG9jYXRpb25zLnBoeXNpY2FsVHlwZSwKICAgICAgcG9zaXRpb246IExvY2F0aW9ucy5wb3NpdGlvbiwKICAgICAgbWFuYWdpbmdPcmdhbml6YXRpb246IExvY2F0aW9ucy5tYW5hZ2luZ09yZ2FuaXphdGlvbiwKICAgICAgcGFydE9mOiBMb2NhdGlvbnMucGFydE9mLAogICAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbnMuaG91cnNPZk9wZXJhdGlvbiwKICAgICAgYXZhaWxhYmlsaXR5RXhjZXB0aW9uczogTG9jYXRpb25zLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICAgIGVuZHBvaW50OiBMb2NhdGlvbnMuZW5kcG9pbnQKICAgIH0KCi8vIE1lZGljYXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24iOgogICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIgogICAgdW5pb24gIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRBZG1pbmlzdHJhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkQWRtaW5pc3RyYXRpb25zLmlkLAogICAgICBtZXRhOiBNZWRBZG1pbmlzdHJhdGlvbnMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzOiBNZWRBZG1pbmlzdHJhdGlvbnMuaW5zdGFudGlhdGVzLAogICAgICBwYXJ0T2Y6IE1lZEFkbWluaXN0cmF0aW9ucy5wYXJ0T2YsCiAgICAgIHN0YXR1czogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3RhdHVzUmVhc29uLAogICAgICBjYXRlZ29yeTogTWVkQWRtaW5pc3RyYXRpb25zLmNhdGVnb3J5LAogICAgICBtZWRpY2F0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkQWRtaW5pc3RyYXRpb25zLnN1YmplY3QsCiAgICAgIGNvbnRleHQ6IE1lZEFkbWluaXN0cmF0aW9ucy5jb250ZXh0LAogICAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IE1lZEFkbWluaXN0cmF0aW9ucy5zdXBwb3J0aW5nSW5mb3JtYXRpb24sCiAgICAgIGVmZmVjdGl2ZTogTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSwKICAgICAgcGVyZm9ybWVyOiBNZWRBZG1pbmlzdHJhdGlvbnMucGVyZm9ybWVyLAogICAgICByZWFzb25Db2RlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uUmVmZXJlbmNlLAogICAgICByZXF1ZXN0OiBNZWRBZG1pbmlzdHJhdGlvbnMucmVxdWVzdCwKICAgICAgZGV2aWNlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZGV2aWNlLAogICAgICBub3RlOiBNZWRBZG1pbmlzdHJhdGlvbnMubm90ZSwKICAgICAgZG9zYWdlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZG9zYWdlCiAgICB9CgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZV0gTWVkQWRtaW5pc3RyYXRpb25zCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZEFkbWluaXN0cmF0aW9ucy5pZCwKICAgICAgbWV0YTogTWVkQWRtaW5pc3RyYXRpb25zLm1ldGEsCiAgICAgIGluc3RhbnRpYXRlczogTWVkQWRtaW5pc3RyYXRpb25zLmluc3RhbnRpYXRlcywKICAgICAgcGFydE9mOiBNZWRBZG1pbmlzdHJhdGlvbnMucGFydE9mLAogICAgICBzdGF0dXM6IE1lZEFkbWluaXN0cmF0aW9ucy5zdGF0dXMsCiAgICAgIHN0YXR1c1JlYXNvbjogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1c1JlYXNvbiwKICAgICAgY2F0ZWdvcnk6IE1lZEFkbWluaXN0cmF0aW9ucy5jYXRlZ29yeSwKICAgICAgbWVkaWNhdGlvbjogTWVkQWRtaW5pc3RyYXRpb25zLm1lZGljYXRpb24sCiAgICAgIHN1YmplY3Q6IE1lZEFkbWluaXN0cmF0aW9ucy5zdWJqZWN0LAogICAgICBjb250ZXh0OiBNZWRBZG1pbmlzdHJhdGlvbnMuY29udGV4dCwKICAgICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3VwcG9ydGluZ0luZm9ybWF0aW9uLAogICAgICBlZmZlY3RpdmU6IE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUsCiAgICAgIHBlcmZvcm1lcjogTWVkQWRtaW5pc3RyYXRpb25zLnBlcmZvcm1lciwKICAgICAgcmVhc29uQ29kZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvblJlZmVyZW5jZSwKICAgICAgcmVxdWVzdDogTWVkQWRtaW5pc3RyYXRpb25zLnJlcXVlc3QsCiAgICAgIGRldmljZTogTWVkQWRtaW5pc3RyYXRpb25zLmRldmljZSwKICAgICAgbm90ZTogTWVkQWRtaW5pc3RyYXRpb25zLm5vdGUsCiAgICAgIGRvc2FnZTogTWVkQWRtaW5pc3RyYXRpb25zLmRvc2FnZQogICAgfQoKLy8gU0RFIE1lZGljYXRpb24gUmVxdWVzdCAtIHJlZ3VsYXIgcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyBmYWxzZSBvciBhYnNlbnQpCgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkUmVxdWVzdHMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkUmVxdWVzdHMuaWQsCiAgICAgIG1ldGE6IE1lZFJlcXVlc3RzLm1ldGEsCiAgICAgIHN0YXR1czogTWVkUmVxdWVzdHMuc3RhdHVzLAogICAgICBzdGF0dXNSZWFzb246IE1lZFJlcXVlc3RzLnN0YXR1c1JlYXNvbiwKICAgICAgaW50ZW50OiBNZWRSZXF1ZXN0cy5pbnRlbnQsCiAgICAgIGNhdGVnb3J5OiBNZWRSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IE1lZFJlcXVlc3RzLnByaW9yaXR5LAogICAgICAvL2RvTm90UGVyZm9ybTogTWVkUmVxdWVzdHMuZG9Ob3RQZXJmb3JtLAogICAgICAKICAgICAgcmVwb3J0ZWQ6IE1lZFJlcXVlc3RzLnJlcG9ydGVkLAogICAgICBtZWRpY2F0aW9uOiBNZWRSZXF1ZXN0cy5tZWRpY2F0aW9uLAogICAgICBzdWJqZWN0OiBNZWRSZXF1ZXN0cy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE1lZFJlcXVlc3RzLmVuY291bnRlciwKICAgICAgYXV0aG9yZWRPbjogTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiwKICAgICAgcmVxdWVzdGVyOiBNZWRSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHJlY29yZGVyOiBNZWRSZXF1ZXN0cy5yZWNvcmRlciwKICAgICAgcmVhc29uQ29kZTogTWVkUmVxdWVzdHMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRSZXF1ZXN0cy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogTWVkUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IE1lZFJlcXVlc3RzLmluc3RhbnRpYXRlc1VyaSwKICAgICAgY291cnNlT2ZUaGVyYXB5VHlwZTogTWVkUmVxdWVzdHMuY291cnNlT2ZUaGVyYXB5VHlwZSwKICAgICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZFJlcXVlc3RzLmRvc2FnZUluc3RydWN0aW9uCiAgICB9CgovLyBTREUgTWVkaWNhdGlvbiBOb3QgUmVxdWVzdGVkIC0gbmVnYXRpb24gcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyB0cnVlKQoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCI6CiAgW01lZGljYXRpb25Ob3RSZXF1ZXN0ZWRdIE1lZE5vdFJlcXVlc3RzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24gZHVyaW5nIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZE5vdFJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBNZWROb3RSZXF1ZXN0cy5tZXRhLAogICAgICBzdGF0dXM6IE1lZE5vdFJlcXVlc3RzLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWROb3RSZXF1ZXN0cy5zdGF0dXNSZWFzb24sCiAgICAgIGludGVudDogTWVkTm90UmVxdWVzdHMuaW50ZW50LAogICAgICBjYXRlZ29yeTogTWVkTm90UmVxdWVzdHMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBNZWROb3RSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBNZWROb3RSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIHJlcG9ydGVkOiBNZWROb3RSZXF1ZXN0cy5yZXBvcnRlZCwKICAgICAgbWVkaWNhdGlvbjogTWVkTm90UmVxdWVzdHMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkTm90UmVxdWVzdHMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBNZWROb3RSZXF1ZXN0cy5lbmNvdW50ZXIsCiAgICAgIGF1dGhvcmVkT246IE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24sCiAgICAgIHJlcXVlc3RlcjogTWVkTm90UmVxdWVzdHMucmVxdWVzdGVyLAogICAgICByZWNvcmRlcjogTWVkTm90UmVxdWVzdHMucmVjb3JkZXIsCiAgICAgIHJlYXNvbkNvZGU6IE1lZE5vdFJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkTm90UmVxdWVzdHMucmVhc29uUmVmZXJlbmNlLAogICAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IE1lZE5vdFJlcXVlc3RzLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgICAgaW5zdGFudGlhdGVzVXJpOiBNZWROb3RSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGNvdXJzZU9mVGhlcmFweVR5cGU6IE1lZE5vdFJlcXVlc3RzLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICAgIGRvc2FnZUluc3RydWN0aW9uOiBNZWROb3RSZXF1ZXN0cy5kb3NhZ2VJbnN0cnVjdGlvbgogICAgfQoKLy8gQ29tYmluZWQgU0RFIGZvciBhbGwgTWVkaWNhdGlvbiBSZXF1ZXN0cyAoYm90aCByZWd1bGFyIGFuZCBuZWdhdGlvbikKCgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiCiAgICB1bmlvbiAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCIKCmRlZmluZSBmdW5jdGlvbiAiR2V0TWVkaWNhdGlvbiIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKCBbTWVkaWNhdGlvbl0gTWVkaWNhdGlvbgogICAgICB3aGVyZSByZWZlcmVuY2UucmVmZXJlbmNlcyAoIE1lZGljYXRpb24gKQogICkKCmRlZmluZSAiU0RFIE1lZGljYXRpb24iOgogICggW01lZGljYXRpb25SZXF1ZXN0XQogICAgdW5pb24gW01lZGljYXRpb25BZG1pbmlzdHJhdGlvbl0gKSBNZWRSZXFPckFkbWluCiAgICBsZXQgbWVkaWNhdGlvbjogR2V0TWVkaWNhdGlvbihNZWRSZXFPckFkbWluLm1lZGljYXRpb24gYXMgUmVmZXJlbmNlKQogICAgd2hlcmUgbWVkaWNhdGlvbiBpcyBub3QgbnVsbAogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIENvYWxlc2NlKCJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZFJlcU9yQWRtaW4uZWZmZWN0aXZlKSwgTWVkUmVxT3JBZG1pbi5hdXRob3JlZE9uLnRvSW50ZXJ2YWwoKSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBtZWRpY2F0aW9uLmlkLAogICAgICBtZXRhOiBtZWRpY2F0aW9uLm1ldGEsCiAgICAgIGNvZGU6IG1lZGljYXRpb24uY29kZSwKICAgICAgc3RhdHVzOiBtZWRpY2F0aW9uLnN0YXR1cywKICAgICAgbWFudWZhY3R1cmVyOiBtZWRpY2F0aW9uLm1hbnVmYWN0dXJlciwKICAgICAgZm9ybTogbWVkaWNhdGlvbi5mb3JtLAogICAgICBhbW91bnQ6IG1lZGljYXRpb24uYW1vdW50LAogICAgICBpbmdyZWRpZW50OiBtZWRpY2F0aW9uLmluZ3JlZGllbnQsCiAgICAgIGJhdGNoOiBtZWRpY2F0aW9uLmJhdGNoCiAgICB9CgoKLy8gT2JzZXJ2YXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIExhYiBDYXRlZ29yeSI6CiAgW0xhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbl0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFNpbXBsZSI6CiAgW1NpbXBsZU9ic2VydmF0aW9uXSBPYnMKICAgIHdoZXJlICggZXhpc3RzICggT2JzLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJzb2NpYWwtaGlzdG9yeSIKICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIE9icy5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJpbWFnaW5nIgogICAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBPYnMuY2F0ZWdvcnkgQ2F0ZWdvcnkKICAgICAgICAgICAgd2hlcmUgQ2F0ZWdvcnkgfiAicHJvY2VkdXJlIgogICAgICAgICkKICAgICkKICAgICAgYW5kIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihPYnMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KICAgIAovLyBTdXJ2ZXkgaXMgZml4ZWQgY2F0ZWdvcnkgY29kZSBpbiBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgcHJvZmlsZSBpbiBRSS1Db3JlICAgIAoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFN1cnZleSI6CiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudF0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFZpdGFsIFNpZ25zIENhdGVnb3J5IjoKICBbVVNDb3JlLlZpdGFsU2lnbnNQcm9maWxlXSBPYnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogT2JzLmlkLAogICAgICBtZXRhOiBPYnMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBPYnMuZXh0ZW5zaW9uLAogICAgICBwYXJ0T2Y6IE9icy5wYXJ0T2YsCiAgICAgIHN0YXR1czogT2JzLnN0YXR1cywKICAgICAgY2F0ZWdvcnk6IE9icy5jYXRlZ29yeSwKICAgICAgY29kZTogT2JzLmNvZGUsCiAgICAgIHN1YmplY3Q6IE9icy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE9icy5lbmNvdW50ZXIsCiAgICAgIGVmZmVjdGl2ZTogT2JzLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBPYnMuaXNzdWVkLAogICAgICB2YWx1ZTogT2JzLnZhbHVlLAogICAgICBkYXRhQWJzZW50UmVhc29uOiBPYnMuZGF0YUFic2VudFJlYXNvbiwKICAgICAgaW50ZXJwcmV0YXRpb246IE9icy5pbnRlcnByZXRhdGlvbiwKICAgICAgYm9keVNpdGU6IE9icy5ib2R5U2l0ZSwKICAgICAgbWV0aG9kOiBPYnMubWV0aG9kLAogICAgICBzcGVjaW1lbjogT2JzLnNwZWNpbWVuLAogICAgICByZWZlcmVuY2VSYW5nZTogT2JzLnJlZmVyZW5jZVJhbmdlLAogICAgICBoYXNNZW1iZXI6IE9icy5oYXNNZW1iZXIsCiAgICAgIGRlcml2ZWRGcm9tOiBPYnMuZGVyaXZlZEZyb20sCiAgICAgIGNvbXBvbmVudDogT2JzLmNvbXBvbmVudAogICAgfQoKCi8vIFByb2NlZHVyZSBTREUKCgpkZWZpbmUgIlNERSBQcm9jZWR1cmUiOgogIFtQcm9jZWR1cmVdIFByb2NlZHVyZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoUHJvY2VkdXJlcy5wZXJmb3JtZWQpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IFByb2NlZHVyZXMuaWQsCiAgICAgIG1ldGE6IFByb2NlZHVyZXMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBQcm9jZWR1cmVzLmV4dGVuc2lvbiwKICAgICAgYmFzZWRPbjogUHJvY2VkdXJlcy5iYXNlZE9uLAogICAgICBwYXJ0T2Y6IFByb2NlZHVyZXMucGFydE9mLAogICAgICBzdGF0dXM6IFByb2NlZHVyZXMuc3RhdHVzLAogICAgICBjYXRlZ29yeTogUHJvY2VkdXJlcy5jYXRlZ29yeSwKICAgICAgY29kZTogUHJvY2VkdXJlcy5jb2RlLAogICAgICBzdWJqZWN0OiBQcm9jZWR1cmVzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogUHJvY2VkdXJlcy5lbmNvdW50ZXIsCiAgICAgIHBlcmZvcm1lZDogUHJvY2VkdXJlcy5wZXJmb3JtZWQsCiAgICAgIGxvY2F0aW9uOiBQcm9jZWR1cmVzLmxvY2F0aW9uLAogICAgICByZWFzb25Db2RlOiBQcm9jZWR1cmVzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogUHJvY2VkdXJlcy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGJvZHlTaXRlOiBQcm9jZWR1cmVzLmJvZHlTaXRlCiAgICB9CgovLyBTZXJ2aWNlUmVxdWVzdCBTREUgLSByZWd1bGFyIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgZmFsc2Ugb3IgYWJzZW50KQoKCmRlZmluZSAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIjoKICBbU2VydmljZVJlcXVlc3RdIFNlcnZpY2VSZXF1ZXN0cwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogU2VydmljZVJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBTZXJ2aWNlUmVxdWVzdHMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IFNlcnZpY2VSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGJhc2VkT246IFNlcnZpY2VSZXF1ZXN0cy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZVJlcXVlc3RzLnJlcGxhY2VzLAogICAgICByZXF1aXNpdGlvbjogU2VydmljZVJlcXVlc3RzLnJlcXVpc2l0aW9uLAogICAgICBzdGF0dXM6IFNlcnZpY2VSZXF1ZXN0cy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZVJlcXVlc3RzLmludGVudCwKICAgICAgY2F0ZWdvcnk6IFNlcnZpY2VSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IFNlcnZpY2VSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgLy9kb05vdFBlcmZvcm06IFNlcnZpY2VSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIAogICAgICBjb2RlOiBTZXJ2aWNlUmVxdWVzdHMuY29kZSwKICAgICAgb3JkZXJEZXRhaWw6IFNlcnZpY2VSZXF1ZXN0cy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VSZXF1ZXN0cy5xdWFudGl0eSwKICAgICAgc3ViamVjdDogU2VydmljZVJlcXVlc3RzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogU2VydmljZVJlcXVlc3RzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZVJlcXVlc3RzLm9jY3VycmVuY2UsCiAgICAgIGFzTmVlZGVkOiBTZXJ2aWNlUmVxdWVzdHMuYXNOZWVkZWQsCiAgICAgIGF1dGhvcmVkT246IFNlcnZpY2VSZXF1ZXN0cy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHBlcmZvcm1lclR5cGU6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXJUeXBlLAogICAgICBwZXJmb3JtZXI6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZVJlcXVlc3RzLmxvY2F0aW9uQ29kZSwKICAgICAgcmVhc29uQ29kZTogU2VydmljZVJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogU2VydmljZVJlcXVlc3RzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdXJhbmNlLAogICAgICBib2R5U2l0ZTogU2VydmljZVJlcXVlc3RzLmJvZHlTaXRlLAogICAgICBub3RlOiBTZXJ2aWNlUmVxdWVzdHMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlUmVxdWVzdHMucGF0aWVudEluc3RydWN0aW9uCiAgICB9CgovLyBTZXJ2aWNlTm90UmVxdWVzdGVkIFNERSAtIG5lZ2F0aW9uIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgdHJ1ZSkKCgpkZWZpbmUgIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiOgogIFtTZXJ2aWNlTm90UmVxdWVzdGVkXSBTZXJ2aWNlTm90UmVxcwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uIGR1cmluZyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBTZXJ2aWNlTm90UmVxcy5pZCwKICAgICAgbWV0YTogU2VydmljZU5vdFJlcXMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlTm90UmVxcy5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICAgIGluc3RhbnRpYXRlc1VyaTogU2VydmljZU5vdFJlcXMuaW5zdGFudGlhdGVzVXJpLAogICAgICBiYXNlZE9uOiBTZXJ2aWNlTm90UmVxcy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZU5vdFJlcXMucmVwbGFjZXMsCiAgICAgIHJlcXVpc2l0aW9uOiBTZXJ2aWNlTm90UmVxcy5yZXF1aXNpdGlvbiwKICAgICAgc3RhdHVzOiBTZXJ2aWNlTm90UmVxcy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZU5vdFJlcXMuaW50ZW50LAogICAgICBjYXRlZ29yeTogU2VydmljZU5vdFJlcXMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBTZXJ2aWNlTm90UmVxcy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBTZXJ2aWNlTm90UmVxcy5kb05vdFBlcmZvcm0sCiAgICAgIGNvZGU6IFNlcnZpY2VOb3RSZXFzLmNvZGUsCiAgICAgIG9yZGVyRGV0YWlsOiBTZXJ2aWNlTm90UmVxcy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VOb3RSZXFzLnF1YW50aXR5LAogICAgICBzdWJqZWN0OiBTZXJ2aWNlTm90UmVxcy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IFNlcnZpY2VOb3RSZXFzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZU5vdFJlcXMub2NjdXJyZW5jZSwKICAgICAgYXNOZWVkZWQ6IFNlcnZpY2VOb3RSZXFzLmFzTmVlZGVkLAogICAgICBhdXRob3JlZE9uOiBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VOb3RSZXFzLnJlcXVlc3RlciwKICAgICAgcGVyZm9ybWVyVHlwZTogU2VydmljZU5vdFJlcXMucGVyZm9ybWVyVHlwZSwKICAgICAgcGVyZm9ybWVyOiBTZXJ2aWNlTm90UmVxcy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZU5vdFJlcXMubG9jYXRpb25Db2RlLAogICAgICByZWFzb25Db2RlOiBTZXJ2aWNlTm90UmVxcy5yZWFzb25Db2RlLAogICAgICByZWFzb25SZWZlcmVuY2U6IFNlcnZpY2VOb3RSZXFzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlTm90UmVxcy5pbnN1cmFuY2UsCiAgICAgIGJvZHlTaXRlOiBTZXJ2aWNlTm90UmVxcy5ib2R5U2l0ZSwKICAgICAgbm90ZTogU2VydmljZU5vdFJlcXMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlTm90UmVxcy5wYXRpZW50SW5zdHJ1Y3Rpb24KICAgIH0KCi8vIENvbWJpbmVkIFNERSBmb3IgYWxsIFNlcnZpY2UgUmVxdWVzdHMgKGJvdGggcmVndWxhciBhbmQgbmVnYXRpb24pCgoKZGVmaW5lICJTREUgU2VydmljZSBSZXF1ZXN0IjoKICAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIgogICAgdW5pb24gIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiCgovLyBNaW5pbWFsIHBhdGllbnQgU0RFCgoKZGVmaW5lICJTREUgTWluaW1hbCBQYXRpZW50IjoKICBbUGF0aWVudF0gTWluUHQKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBNaW5QdC5pZCwKICAgICAgbWV0YTogTWluUHQubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBNaW5QdC5leHRlbnNpb24sCiAgICAgIGlkZW50aWZpZXI6IE1pblB0LmlkZW50aWZpZXIsCiAgICAgIGFjdGl2ZTogTWluUHQuYWN0aXZlLAogICAgICBuYW1lOiBNaW5QdC5uYW1lLAogICAgICB0ZWxlY29tOiBNaW5QdC50ZWxlY29tLAogICAgICBnZW5kZXI6IE1pblB0LmdlbmRlciwKICAgICAgYmlydGhEYXRlOiBNaW5QdC5iaXJ0aERhdGUsCiAgICAgIGRlY2Vhc2VkOiBNaW5QdC5kZWNlYXNlZCwKICAgICAgYWRkcmVzczogTWluUHQuYWRkcmVzcywKICAgICAgbWFyaXRhbFN0YXR1czogTWluUHQubWFyaXRhbFN0YXR1cywKICAgICAgbXVsdGlwbGVCaXJ0aDogTWluUHQubXVsdGlwbGVCaXJ0aCwKICAgICAgcGhvdG86IE1pblB0LnBob3RvLAogICAgICBjb250YWN0OiBNaW5QdC5jb250YWN0LAogICAgICBjb21tdW5pY2F0aW9uOiBNaW5QdC5jb21tdW5pY2F0aW9uLAogICAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBNaW5QdC5nZW5lcmFsUHJhY3RpdGlvbmVyLAogICAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjogTWluUHQubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICAgIGxpbms6IE1pblB0LmxpbmsKICAgIH0KCmRlZmluZSAiU0RFIFNwZWNpbWVucyI6CiAgW1VTQ29yZS5TcGVjaW1lblByb2ZpbGVdIHNwCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKHNwLmNvbGxlY3Rpb24uY29sbGVjdGVkKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBzcC5pZCwKICAgICAgdHlwZTogc3AudHlwZQogICAgfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBIZWxwZXIgZnVuY3Rpb25zCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKCmRlZmluZSBmdW5jdGlvbiAiQ2hlY2tJUCIoZW5jb3VudGVyIEVuY291bnRlcik6CiAgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgZW5jb3VudGVyLmlkID0gSVAuaWQKICApCgovLyBGb3JtZXIgTkhTTkhlbHBlcnMgZnVuY3Rpb25zLCBhZGFwdGVkIGZvciBRSSBDb3JlCgoKZGVmaW5lIGZ1bmN0aW9uICJOb3JtYWxpemUgSW50ZXJ2YWwiKGNob2ljZSBDaG9pY2U8RGF0ZVRpbWUsIEludGVydmFsPERhdGVUaW1lPj4pOgogIGNhc2UKICAgIHdoZW4gY2hvaWNlIGlzIERhdGVUaW1lIHRoZW4gSW50ZXJ2YWxbY2hvaWNlIGFzIERhdGVUaW1lLCBjaG9pY2UgYXMgRGF0ZVRpbWVdCiAgICB3aGVuIGNob2ljZSBpcyBJbnRlcnZhbDxEYXRlVGltZT50aGVuIGNob2ljZSBhcyBJbnRlcnZhbDxEYXRlVGltZT4KICAgIGVsc2UgbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT5lbmQKCmRlZmluZSBmdW5jdGlvbiAiR2V0TG9jYXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UpOgogIHNpbmdsZXRvbiBmcm9tICggW0xvY2F0aW9uXSBMb2NhdGlvbnMKICAgICAgd2hlcmUgTG9jYXRpb25zLmlkID0gR2V0SWQocmVmZXJlbmNlLnJlZmVyZW5jZSkKICApCgpkZWZpbmUgZnVuY3Rpb24gIkdldElkIih1cmkgU3RyaW5nKToKICBMYXN0KFNwbGl0KHVyaSwgJy8nKSkKCmRlZmluZSBmdW5jdGlvbiAiR2V0SWQiKHVyaSBGSElSLnN0cmluZyk6CiAgTGFzdChTcGxpdChGSElSSGVscGVycy5Ub1N0cmluZyh1cmkpLCAnLycpKQ=="/>
    <url
         value="https://madie.cms.gov/Library-NHSNAcuteCareHospitalMonthlyInitialPopulation1.cql"/>
  </content>
</Library>