{
  "resourceType" : "Library",
  "id" : "NHSNAcuteCareHospitalMonthlyInitialPopulation1",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n    <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n  <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n  \n    \n    <tr>\n      <th scope=\"row\" class=\"row-header\">CQL Content</th>\n      <td>\n        <a name=\"cql-content\"> </a>\n        <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary NHSNAcuteCareHospitalMonthlyInitialPopulation1 version '1.1.000'\n\n// Rebased to QI Core 6.0.0\n\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude CQMCommon version '5.1.000' called CQMCommon\n// NHSNHelpers logic is inlined below\n\n\ncodesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem &quot;Observation Category&quot;: 'http://terminology.hl7.org/CodeSystem/observation-category'\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\ncodesystem &quot;Condition Category&quot;: 'http://terminology.hl7.org/CodeSystem/condition-category'\ncodesystem &quot;US Core Condition Category&quot;: 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'\ncodesystem &quot;Condition Clinical Status&quot;: 'http://terminology.hl7.org/CodeSystem/condition-clinical'\ncodesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'\ncodesystem &quot;MedicationRequest Category&quot;: 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'\n\nvalueset &quot;Inpatient, Emergency, and Observation Locations&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'\nvalueset &quot;Emergency Department Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'\nvalueset &quot;Encounter Inpatient&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset &quot;Observation Services&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'\nvalueset &quot;NHSN Inpatient Encounter Class Codes&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'\n\n// Observation Category codes\n\n\ncode &quot;laboratory&quot;: 'laboratory' from &quot;Observation Category&quot; display 'Laboratory'\ncode &quot;social-history&quot;: 'social-history' from &quot;Observation Category&quot; display 'Social History'\ncode &quot;vital-signs&quot;: 'vital-signs' from &quot;Observation Category&quot; display 'Vital Signs'\ncode &quot;imaging&quot;: 'imaging' from &quot;Observation Category&quot; display 'Imaging'\ncode &quot;procedure&quot;: 'procedure' from &quot;Observation Category&quot; display 'Procedure'\ncode &quot;survey&quot;: 'survey' from &quot;Observation Category&quot; display 'Survey'\n\n// Condition category\n\ncode &quot;encounter-diagnosis&quot;: 'encounter-diagnosis' from &quot;Condition Category&quot; display 'Encounter Diagnosis'\n\n// Diagnostic Report Category (LOINC-based)\n\ncode &quot;Radiology&quot;: 'LP29684-5' from &quot;LOINC&quot; display 'Radiology'\ncode &quot;Pathology&quot;: 'LP7839-6' from &quot;LOINC&quot; display 'Pathology'\ncode &quot;Cardiology&quot;: 'LP29708-2' from &quot;LOINC&quot; display 'Cardiology'\n\n// Emergency Encounter Class\n\ncode &quot;emergency&quot;: 'EMER' from &quot;ActCode&quot; display 'emergency'\ncode &quot;observation encounter&quot;: 'OBSENC' from &quot;ActCode&quot; display 'observation encounter'\n\n// Condition clinicalStatus\n\ncode &quot;active&quot;: 'active' from &quot;Condition Clinical Status&quot; display 'active'\n\n// Procedure category\n\ncode &quot;Surgical procedure&quot;: '387713003' from &quot;SNOMEDCT&quot; display 'Surgical procedure'\ncode &quot;Diagnostic procedure&quot;: '103693007' from &quot;SNOMEDCT&quot; display 'Diagnostic procedure'\n\n// MedicationRequest category\n\ncode &quot;inpatient&quot;: 'inpatient' from &quot;MedicationRequest Category&quot; display 'Inpatient'\ncode &quot;outpatient&quot;: 'outpatient' from &quot;MedicationRequest Category&quot; display 'Outpatient'\n\n// ServiceRequest category\n\ncode &quot;Laboratory procedure&quot;: '108252007' from &quot;SNOMEDCT&quot; display 'Laboratory procedure'\ncode &quot;Imaging&quot;: '363679005' from &quot;SNOMEDCT&quot; display 'Imaging'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2026-02-01T00:00:00.000Z)\n\ncontext Patient \n\n// ----------------------------------------------------------------------\n// Core encounter logic\n// ----------------------------------------------------------------------\n\n// Encounters with NHSN class codes (IMP, ACUTE, NONAC, SS)\n\n\n\n\n\ndefine &quot;Encounters with NHSN Inpatient Class&quot;:\n  [Encounter] Enc\n    where Enc.class ~ USQualityCoreCommon.&quot;inpatient encounter&quot;\n      or Enc.class ~ USQualityCoreCommon.&quot;inpatient acute&quot;\n      or Enc.class ~ USQualityCoreCommon.&quot;inpatient non-acute&quot;\n      or Enc.class ~ USQualityCoreCommon.&quot;short stay&quot;\n\ndefine &quot;Qualifying Encounters During Measurement Period&quot;:\n  ( [Encounter: &quot;Encounter Inpatient&quot;]\n    union [Encounter: &quot;Emergency Department Visit&quot;]\n    union [Encounter: &quot;Observation Services&quot;]\n    union &quot;Encounters with NHSN Inpatient Class&quot;\n    union [Encounter: class ~ &quot;emergency&quot;]\n    union [Encounter: class ~ &quot;observation encounter&quot;] ) QualifyingEncounters\n    where QualifyingEncounters.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }\n      and QualifyingEncounters.period overlaps &quot;Measurement Period&quot;\n\ndefine &quot;Encounters&quot;:\n  [Encounter]\n\ndefine &quot;Encounters with Patient Hospital Locations&quot;:\n  &quot;Encounters&quot; Ens\n    where exists ( Ens.location EncounterLocation\n        where EncounterLocation.period overlaps Ens.period\n          and EncounterLocation.location.getLocation ( ).type in &quot;Inpatient, Emergency, and Observation Locations&quot;\n    )\n      and Ens.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }\n      and Ens.period overlaps &quot;Measurement Period&quot;\n\ndefine &quot;Initial Population&quot;:\n  &quot;Qualifying Encounters During Measurement Period&quot;\n    union &quot;Encounters with Patient Hospital Locations&quot;\n\n// ----------------------------------------------------------------------\n// Core retrieves\n// ----------------------------------------------------------------------\n\n// Locations from IP encounters\n\n\n\n\n\ndefine &quot;Get Locations from IP Encounters in Measurement Period&quot;:\n  flatten ( &quot;Initial Population&quot; IP\n      let locationElements: IP.location\n      return locationElements LE\n        let locationReference: LE.location\n        return locationReference.getLocation ( )\n  )\n\n// ----------------------------------------------------------------------\n// SDEs\n// ----------------------------------------------------------------------\n\n\n\n\ndefine &quot;SDE Condition Problems HealthConcerns&quot;:\n  [ConditionProblemsHealthConcerns] Diagnosis\n    where exists ( &quot;Initial Population&quot; IP\n        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period\n    )\n    return {\n      id: Diagnosis.id,\n      meta: Diagnosis.meta,\n      status: Diagnosis.clinicalStatus,\n      verificationStatus: Diagnosis.verificationStatus,\n      category: Diagnosis.category,\n      severity: Diagnosis.severity,\n      code: Diagnosis.code,\n      bodySite: Diagnosis.bodySite,\n      subject: Diagnosis.subject,\n      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),\n      onset: Diagnosis.onset,\n      stage: Diagnosis.stage,\n      evidence: Diagnosis.evidence,\n      note: Diagnosis.note\n    }\n\ndefine &quot;SDE Condition Diagnosis&quot;:\n  [ConditionEncounterDiagnosis] Diagnosis\n    where exists ( &quot;Initial Population&quot; IP\n        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period\n    )\n    return {\n      id: Diagnosis.id,\n      meta: Diagnosis.meta,\n      status: Diagnosis.clinicalStatus,\n      verificationStatus: Diagnosis.verificationStatus,\n      category: Diagnosis.category,\n      severity: Diagnosis.severity,\n      code: Diagnosis.code,\n      bodySite: Diagnosis.bodySite,\n      subject: Diagnosis.subject,\n      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),\n      onset: Diagnosis.onset,\n      stage: Diagnosis.stage,\n      evidence: Diagnosis.evidence,\n      note: Diagnosis.note\n    }\n\n// Coverage SDE – tuples of Coverage data\n\n\ndefine &quot;SDE Coverage&quot;:\n  [Coverage] Coverages\n    where exists ( &quot;Initial Population&quot; IP\n        where Coverages.period overlaps IP.period\n    )\n    return {\n      id: Coverages.id,\n      meta: Coverages.meta,\n      status: Coverages.status,\n      type: Coverages.type,\n      policyHolder: Coverages.policyHolder,\n      subscriber: Coverages.subscriber,\n      subscriberId: Coverages.subscriberId,\n      beneficiary: Coverages.beneficiary,\n      dependent: Coverages.dependent,\n      relationship: Coverages.relationship,\n      period: Coverages.period,\n      payor: Coverages.payor,\n      class: Coverages.class,\n      order: Coverages.order,\n      network: Coverages.network,\n      subrogation: Coverages.subrogation,\n      contract: Coverages.contract\n    }\n\n// Device SDE – tuples of Device data\n\n\ndefine &quot;SDE Device&quot;:\n  [Device] Devices\n    where exists ( &quot;Initial Population&quot; )\n    return {\n      id: Devices.id,\n      meta: Devices.meta,\n      extension: Devices.extension,\n      status: Devices.status,\n      expirationDate: Devices.expirationDate,\n      lotNumber: Devices.lotNumber,\n      serialNumber: Devices.serialNumber,\n      modelNumber: Devices.modelNumber,\n      partNumber: Devices.partNumber,\n      type: Devices.type,\n      patient: Devices.patient,\n      parent: Devices.parent\n    }\n\n// DiagnosticReport SDEs\n\n\ndefine &quot;SDE DiagnosticReport Lab&quot;:\n  [DiagnosticReportLab] dr\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period\n    )\n\ndefine &quot;SDE DiagnosticReport Note&quot;:\n  [DiagnosticReportNote] dr\n    where ( exists ( dr.category Category\n          where Category ~ &quot;Radiology&quot;\n      )\n        or exists ( dr.category Category\n            where Category ~ &quot;Pathology&quot;\n        )\n        or exists ( dr.category Category\n            where Category ~ &quot;Cardiology&quot;\n        )\n    )\n      and exists ( &quot;Initial Population&quot; IP\n          where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period\n      )\n    return {\n      id: dr.id,\n      meta: dr.meta,\n      extension: dr.extension,\n      basedOn: dr.basedOn,\n      status: dr.status,\n      category: dr.category,\n      code: dr.code,\n      subject: dr.subject,\n      encounter: dr.encounter,\n      effective: dr.effective,\n      issued: dr.issued,\n      specimen: dr.specimen,\n      result: dr.result,\n      conclusion: dr.conclusion,\n      conclusionCode: dr.conclusionCode\n    }\n\ndefine &quot;SDE DiagnosticReport Others&quot;:\n  [DiagnosticReportNote] dr\n    where not ( exists ( dr.category Category\n          where Category ~ &quot;Radiology&quot;\n      )\n        or exists ( dr.category Category\n            where Category ~ &quot;Pathology&quot;\n        )\n        or exists ( dr.category Category\n            where Category ~ &quot;Cardiology&quot;\n        )\n    )\n      and exists ( &quot;Initial Population&quot; IP\n          where &quot;Normalize Interval&quot;(dr.effective) overlaps IP.period\n      )\n    return {\n      id: dr.id,\n      meta: dr.meta,\n      extension: dr.extension,\n      basedOn: dr.basedOn,\n      status: dr.status,\n      category: dr.category,\n      code: dr.code,\n      subject: dr.subject,\n      encounter: dr.encounter,\n      effective: dr.effective,\n      issued: dr.issued,\n      specimen: dr.specimen,\n      result: dr.result,\n      conclusion: dr.conclusion,\n      conclusionCode: dr.conclusionCode\n    }\n\n// Encounter SDEs\n\n\ndefine &quot;SDE Encounter&quot;:\n  &quot;Encounters&quot; Ens\n    where not &quot;CheckIP&quot;(Ens)\n      and exists ( &quot;Initial Population&quot; IP\n          where Ens.period overlaps IP.period\n      )\n    return {\n      id: Ens.id,\n      meta: Ens.meta,\n      identifier: Ens.identifier,\n      status: Ens.status,\n      statusHistory: Ens.statusHistory,\n      class: Ens.class,\n      classHistory: Ens.classHistory,\n      type: Ens.type,\n      serviceType: Ens.serviceType,\n      priority: Ens.priority,\n      subject: Ens.subject,\n      period: Ens.period,\n      length: Ens.length,\n      reasonCode: Ens.reasonCode,\n      reasonReference: Ens.reasonReference,\n      diagnosis: Ens.diagnosis,\n      account: Ens.account,\n      hospitalization: Ens.hospitalization,\n      location: Ens.location,\n      partOf: Ens.partOf\n    }\n\ndefine &quot;SDE IP Encounters&quot;:\n  &quot;Initial Population&quot; IP\n    return {\n      id: IP.id,\n      meta: IP.meta,\n      identifier: IP.identifier,\n      status: IP.status,\n      statusHistory: IP.statusHistory,\n      class: IP.class,\n      classHistory: IP.classHistory,\n      type: IP.type,\n      serviceType: IP.serviceType,\n      priority: IP.priority,\n      subject: IP.subject,\n      period: IP.period,\n      length: IP.length,\n      reasonCode: IP.reasonCode,\n      reasonReference: IP.reasonReference,\n      diagnosis: IP.diagnosis,\n      account: IP.account,\n      hospitalization: IP.hospitalization,\n      location: IP.location,\n      partOf: IP.partOf\n    }\n\n// Location SDE\n\n\ndefine &quot;SDE Location&quot;:\n  &quot;Get Locations from IP Encounters in Measurement Period&quot; Locations\n    where exists ( &quot;Initial Population&quot; )\n      and Locations is not null\n    return {\n      id: Locations.id,\n      meta: Locations.meta,\n      extension: Locations.extension,\n      status: Locations.status,\n      operationalStatus: Locations.operationalStatus,\n      name: Locations.name,\n      alias: Locations.alias,\n      description: Locations.description,\n      mode: Locations.mode,\n      type: Locations.type,\n      telecom: Locations.telecom,\n      address: Locations.address,\n      physicalType: Locations.physicalType,\n      position: Locations.position,\n      managingOrganization: Locations.managingOrganization,\n      partOf: Locations.partOf,\n      hoursOfOperation: Locations.hoursOfOperation,\n      availabilityExceptions: Locations.availabilityExceptions,\n      endpoint: Locations.endpoint\n    }\n\n// Medication SDEs\n\n\ndefine &quot;SDE Medication Administration&quot;:\n  &quot;SDE Medication Administration Base&quot;\n    union &quot;SDE Medication Administration Not Done&quot;\n\ndefine &quot;SDE Medication Administration Base&quot;:\n  [MedicationAdministration] MedAdministrations\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(MedAdministrations.effective) overlaps IP.period\n    )\n    return {\n      id: MedAdministrations.id,\n      meta: MedAdministrations.meta,\n      instantiates: MedAdministrations.instantiates,\n      partOf: MedAdministrations.partOf,\n      status: MedAdministrations.status,\n      statusReason: MedAdministrations.statusReason,\n      category: MedAdministrations.category,\n      medication: MedAdministrations.medication,\n      subject: MedAdministrations.subject,\n      context: MedAdministrations.context,\n      supportingInformation: MedAdministrations.supportingInformation,\n      effective: MedAdministrations.effective,\n      performer: MedAdministrations.performer,\n      reasonCode: MedAdministrations.reasonCode,\n      reasonReference: MedAdministrations.reasonReference,\n      request: MedAdministrations.request,\n      device: MedAdministrations.device,\n      note: MedAdministrations.note,\n      dosage: MedAdministrations.dosage\n    }\n\ndefine &quot;SDE Medication Administration Not Done&quot;:\n  [MedicationAdministrationNotDone] MedAdministrations\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(MedAdministrations.effective) overlaps IP.period\n    )\n    return {\n      id: MedAdministrations.id,\n      meta: MedAdministrations.meta,\n      instantiates: MedAdministrations.instantiates,\n      partOf: MedAdministrations.partOf,\n      status: MedAdministrations.status,\n      statusReason: MedAdministrations.statusReason,\n      category: MedAdministrations.category,\n      medication: MedAdministrations.medication,\n      subject: MedAdministrations.subject,\n      context: MedAdministrations.context,\n      supportingInformation: MedAdministrations.supportingInformation,\n      effective: MedAdministrations.effective,\n      performer: MedAdministrations.performer,\n      reasonCode: MedAdministrations.reasonCode,\n      reasonReference: MedAdministrations.reasonReference,\n      request: MedAdministrations.request,\n      device: MedAdministrations.device,\n      note: MedAdministrations.note,\n      dosage: MedAdministrations.dosage\n    }\n\n// SDE Medication Request - regular requests (doNotPerform is false or absent)\n\n\ndefine &quot;SDE Medication Request Base&quot;:\n  [MedicationRequest] MedRequests\n    where exists ( &quot;Initial Population&quot; IP\n        where MedRequests.authoredOn during IP.period\n    )\n    return {\n      id: MedRequests.id,\n      meta: MedRequests.meta,\n      status: MedRequests.status,\n      statusReason: MedRequests.statusReason,\n      intent: MedRequests.intent,\n      category: MedRequests.category,\n      priority: MedRequests.priority,\n      //doNotPerform: MedRequests.doNotPerform,\n      \n      reported: MedRequests.reported,\n      medication: MedRequests.medication,\n      subject: MedRequests.subject,\n      encounter: MedRequests.encounter,\n      authoredOn: MedRequests.authoredOn,\n      requester: MedRequests.requester,\n      recorder: MedRequests.recorder,\n      reasonCode: MedRequests.reasonCode,\n      reasonReference: MedRequests.reasonReference,\n      instantiatesCanonical: MedRequests.instantiatesCanonical,\n      instantiatesUri: MedRequests.instantiatesUri,\n      courseOfTherapyType: MedRequests.courseOfTherapyType,\n      dosageInstruction: MedRequests.dosageInstruction\n    }\n\n// SDE Medication Not Requested - negation requests (doNotPerform is true)\n\n\ndefine &quot;SDE Medication Not Requested&quot;:\n  [MedicationNotRequested] MedNotRequests\n    where exists ( &quot;Initial Population&quot; IP\n        where MedNotRequests.authoredOn during IP.period\n    )\n    return {\n      id: MedNotRequests.id,\n      meta: MedNotRequests.meta,\n      status: MedNotRequests.status,\n      statusReason: MedNotRequests.statusReason,\n      intent: MedNotRequests.intent,\n      category: MedNotRequests.category,\n      priority: MedNotRequests.priority,\n      doNotPerform: MedNotRequests.doNotPerform,\n      reported: MedNotRequests.reported,\n      medication: MedNotRequests.medication,\n      subject: MedNotRequests.subject,\n      encounter: MedNotRequests.encounter,\n      authoredOn: MedNotRequests.authoredOn,\n      requester: MedNotRequests.requester,\n      recorder: MedNotRequests.recorder,\n      reasonCode: MedNotRequests.reasonCode,\n      reasonReference: MedNotRequests.reasonReference,\n      instantiatesCanonical: MedNotRequests.instantiatesCanonical,\n      instantiatesUri: MedNotRequests.instantiatesUri,\n      courseOfTherapyType: MedNotRequests.courseOfTherapyType,\n      dosageInstruction: MedNotRequests.dosageInstruction\n    }\n\n// Combined SDE for all Medication Requests (both regular and negation)\n\n\ndefine &quot;SDE Medication Request&quot;:\n  &quot;SDE Medication Request Base&quot;\n    union &quot;SDE Medication Not Requested&quot;\n\ndefine function &quot;GetMedication&quot;(reference Reference):\n  singleton from ( [Medication] Medication\n      where reference.references ( Medication )\n  )\n\ndefine &quot;SDE Medication&quot;:\n  ( [MedicationRequest]\n    union [MedicationAdministration] ) MedReqOrAdmin\n    let medication: GetMedication(MedReqOrAdmin.medication as Reference)\n    where medication is not null\n      and exists ( &quot;Initial Population&quot; IP\n          where Coalesce(&quot;Normalize Interval&quot;(MedReqOrAdmin.effective), MedReqOrAdmin.authoredOn.toInterval()) overlaps IP.period\n      )\n    return {\n      id: medication.id,\n      meta: medication.meta,\n      code: medication.code,\n      status: medication.status,\n      manufacturer: medication.manufacturer,\n      form: medication.form,\n      amount: medication.amount,\n      ingredient: medication.ingredient,\n      batch: medication.batch\n    }\n\n\n// Observation SDEs\n\n\ndefine &quot;SDE Observation Lab Category&quot;:\n  [LaboratoryResultObservation] Obs\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period\n    )\n    return {\n      id: Obs.id,\n      meta: Obs.meta,\n      extension: Obs.extension,\n      partOf: Obs.partOf,\n      status: Obs.status,\n      category: Obs.category,\n      code: Obs.code,\n      subject: Obs.subject,\n      encounter: Obs.encounter,\n      effective: Obs.effective,\n      issued: Obs.issued,\n      value: Obs.value,\n      dataAbsentReason: Obs.dataAbsentReason,\n      interpretation: Obs.interpretation,\n      bodySite: Obs.bodySite,\n      method: Obs.method,\n      specimen: Obs.specimen,\n      referenceRange: Obs.referenceRange,\n      hasMember: Obs.hasMember,\n      derivedFrom: Obs.derivedFrom,\n      component: Obs.component\n    }\n\ndefine &quot;SDE Observation Simple&quot;:\n  [SimpleObservation] Obs\n    where ( exists ( Obs.category Category\n          where Category ~ &quot;social-history&quot;\n      )\n        or exists ( Obs.category Category\n            where Category ~ &quot;imaging&quot;\n        )\n        or exists ( Obs.category Category\n            where Category ~ &quot;procedure&quot;\n        )\n    )\n      and exists ( &quot;Initial Population&quot; IP\n          where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period\n      )\n    return {\n      id: Obs.id,\n      meta: Obs.meta,\n      extension: Obs.extension,\n      partOf: Obs.partOf,\n      status: Obs.status,\n      category: Obs.category,\n      code: Obs.code,\n      subject: Obs.subject,\n      encounter: Obs.encounter,\n      effective: Obs.effective,\n      issued: Obs.issued,\n      value: Obs.value,\n      dataAbsentReason: Obs.dataAbsentReason,\n      interpretation: Obs.interpretation,\n      bodySite: Obs.bodySite,\n      method: Obs.method,\n      specimen: Obs.specimen,\n      referenceRange: Obs.referenceRange,\n      hasMember: Obs.hasMember,\n      derivedFrom: Obs.derivedFrom,\n      component: Obs.component\n    }\n    \n// Survey is fixed category code in ObservationScreeningAssessment profile in QI-Core    \n\n\ndefine &quot;SDE Observation Survey&quot;:\n  [ObservationScreeningAssessment] Obs\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period\n    )\n    return {\n      id: Obs.id,\n      meta: Obs.meta,\n      extension: Obs.extension,\n      partOf: Obs.partOf,\n      status: Obs.status,\n      category: Obs.category,\n      code: Obs.code,\n      subject: Obs.subject,\n      encounter: Obs.encounter,\n      effective: Obs.effective,\n      issued: Obs.issued,\n      value: Obs.value,\n      dataAbsentReason: Obs.dataAbsentReason,\n      interpretation: Obs.interpretation,\n      bodySite: Obs.bodySite,\n      method: Obs.method,\n      specimen: Obs.specimen,\n      referenceRange: Obs.referenceRange,\n      hasMember: Obs.hasMember,\n      derivedFrom: Obs.derivedFrom,\n      component: Obs.component\n    }\n\ndefine &quot;SDE Observation Vital Signs Category&quot;:\n  [USCore.VitalSignsProfile] Obs\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(Obs.effective) overlaps IP.period\n    )\n    return {\n      id: Obs.id,\n      meta: Obs.meta,\n      extension: Obs.extension,\n      partOf: Obs.partOf,\n      status: Obs.status,\n      category: Obs.category,\n      code: Obs.code,\n      subject: Obs.subject,\n      encounter: Obs.encounter,\n      effective: Obs.effective,\n      issued: Obs.issued,\n      value: Obs.value,\n      dataAbsentReason: Obs.dataAbsentReason,\n      interpretation: Obs.interpretation,\n      bodySite: Obs.bodySite,\n      method: Obs.method,\n      specimen: Obs.specimen,\n      referenceRange: Obs.referenceRange,\n      hasMember: Obs.hasMember,\n      derivedFrom: Obs.derivedFrom,\n      component: Obs.component\n    }\n\n\n// Procedure SDE\n\n\ndefine &quot;SDE Procedure&quot;:\n  [Procedure] Procedures\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(Procedures.performed) overlaps IP.period\n    )\n    return {\n      id: Procedures.id,\n      meta: Procedures.meta,\n      extension: Procedures.extension,\n      basedOn: Procedures.basedOn,\n      partOf: Procedures.partOf,\n      status: Procedures.status,\n      category: Procedures.category,\n      code: Procedures.code,\n      subject: Procedures.subject,\n      encounter: Procedures.encounter,\n      performed: Procedures.performed,\n      location: Procedures.location,\n      reasonCode: Procedures.reasonCode,\n      reasonReference: Procedures.reasonReference,\n      bodySite: Procedures.bodySite\n    }\n\n// ServiceRequest SDE - regular requests (doNotPerform is false or absent)\n\n\ndefine &quot;SDE Service Request Base&quot;:\n  [ServiceRequest] ServiceRequests\n    where exists ( &quot;Initial Population&quot; IP\n        where ServiceRequests.authoredOn during IP.period\n    )\n    return {\n      id: ServiceRequests.id,\n      meta: ServiceRequests.meta,\n      instantiatesCanonical: ServiceRequests.instantiatesCanonical,\n      instantiatesUri: ServiceRequests.instantiatesUri,\n      basedOn: ServiceRequests.basedOn,\n      replaces: ServiceRequests.replaces,\n      requisition: ServiceRequests.requisition,\n      status: ServiceRequests.status,\n      intent: ServiceRequests.intent,\n      category: ServiceRequests.category,\n      priority: ServiceRequests.priority,\n      //doNotPerform: ServiceRequests.doNotPerform,\n      \n      code: ServiceRequests.code,\n      orderDetail: ServiceRequests.orderDetail,\n      quantity: ServiceRequests.quantity,\n      subject: ServiceRequests.subject,\n      encounter: ServiceRequests.encounter,\n      occurrence: ServiceRequests.occurrence,\n      asNeeded: ServiceRequests.asNeeded,\n      authoredOn: ServiceRequests.authoredOn,\n      requester: ServiceRequests.requester,\n      performerType: ServiceRequests.performerType,\n      performer: ServiceRequests.performer,\n      locationCode: ServiceRequests.locationCode,\n      reasonCode: ServiceRequests.reasonCode,\n      reasonReference: ServiceRequests.reasonReference,\n      insurance: ServiceRequests.insurance,\n      bodySite: ServiceRequests.bodySite,\n      note: ServiceRequests.note,\n      patientInstruction: ServiceRequests.patientInstruction\n    }\n\n// ServiceNotRequested SDE - negation requests (doNotPerform is true)\n\n\ndefine &quot;SDE Service Not Requested&quot;:\n  [ServiceNotRequested] ServiceNotReqs\n    where exists ( &quot;Initial Population&quot; IP\n        where ServiceNotReqs.authoredOn during IP.period\n    )\n    return {\n      id: ServiceNotReqs.id,\n      meta: ServiceNotReqs.meta,\n      instantiatesCanonical: ServiceNotReqs.instantiatesCanonical,\n      instantiatesUri: ServiceNotReqs.instantiatesUri,\n      basedOn: ServiceNotReqs.basedOn,\n      replaces: ServiceNotReqs.replaces,\n      requisition: ServiceNotReqs.requisition,\n      status: ServiceNotReqs.status,\n      intent: ServiceNotReqs.intent,\n      category: ServiceNotReqs.category,\n      priority: ServiceNotReqs.priority,\n      doNotPerform: ServiceNotReqs.doNotPerform,\n      code: ServiceNotReqs.code,\n      orderDetail: ServiceNotReqs.orderDetail,\n      quantity: ServiceNotReqs.quantity,\n      subject: ServiceNotReqs.subject,\n      encounter: ServiceNotReqs.encounter,\n      occurrence: ServiceNotReqs.occurrence,\n      asNeeded: ServiceNotReqs.asNeeded,\n      authoredOn: ServiceNotReqs.authoredOn,\n      requester: ServiceNotReqs.requester,\n      performerType: ServiceNotReqs.performerType,\n      performer: ServiceNotReqs.performer,\n      locationCode: ServiceNotReqs.locationCode,\n      reasonCode: ServiceNotReqs.reasonCode,\n      reasonReference: ServiceNotReqs.reasonReference,\n      insurance: ServiceNotReqs.insurance,\n      bodySite: ServiceNotReqs.bodySite,\n      note: ServiceNotReqs.note,\n      patientInstruction: ServiceNotReqs.patientInstruction\n    }\n\n// Combined SDE for all Service Requests (both regular and negation)\n\n\ndefine &quot;SDE Service Request&quot;:\n  &quot;SDE Service Request Base&quot;\n    union &quot;SDE Service Not Requested&quot;\n\n// Minimal patient SDE\n\n\ndefine &quot;SDE Minimal Patient&quot;:\n  [Patient] MinPt\n    where exists ( &quot;Initial Population&quot; )\n    return {\n      id: MinPt.id,\n      meta: MinPt.meta,\n      extension: MinPt.extension,\n      identifier: MinPt.identifier,\n      active: MinPt.active,\n      name: MinPt.name,\n      telecom: MinPt.telecom,\n      gender: MinPt.gender,\n      birthDate: MinPt.birthDate,\n      deceased: MinPt.deceased,\n      address: MinPt.address,\n      maritalStatus: MinPt.maritalStatus,\n      multipleBirth: MinPt.multipleBirth,\n      photo: MinPt.photo,\n      contact: MinPt.contact,\n      communication: MinPt.communication,\n      generalPractitioner: MinPt.generalPractitioner,\n      managingOrganization: MinPt.managingOrganization,\n      link: MinPt.link\n    }\n\ndefine &quot;SDE Specimens&quot;:\n  [USCore.SpecimenProfile] sp\n    where exists ( &quot;Initial Population&quot; IP\n        where &quot;Normalize Interval&quot;(sp.collection.collected) overlaps IP.period\n    )\n    return {\n      id: sp.id,\n      type: sp.type\n    }\n\n// ----------------------------------------------------------------------\n// Helper functions\n// ----------------------------------------------------------------------\n\n\n\n\ndefine function &quot;CheckIP&quot;(encounter Encounter):\n  exists ( &quot;Initial Population&quot; IP\n      where encounter.id = IP.id\n  )\n\n// Former NHSNHelpers functions, adapted for QI Core\n\n\ndefine function &quot;Normalize Interval&quot;(choice Choice&lt;DateTime, Interval&lt;DateTime&gt;&gt;):\n  case\n    when choice is DateTime then Interval[choice as DateTime, choice as DateTime]\n    when choice is Interval&lt;DateTime&gt;then choice as Interval&lt;DateTime&gt;\n    else null as Interval&lt;DateTime&gt;end\n\ndefine function &quot;GetLocation&quot;(reference Reference):\n  singleton from ( [Location] Locations\n      where Locations.id = GetId(reference.reference)\n  )\n\ndefine function &quot;GetId&quot;(uri String):\n  Last(Split(uri, '/'))\n\ndefine function &quot;GetId&quot;(uri FHIR.string):\n  Last(Split(FHIRHelpers.ToString(uri), '/'))</code></pre>\n      </td>\n    </tr>\n    \n  \n\n\n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "extension" : [{
    "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
    "valueReference" : {
      "reference" : "Device/cqf-tooling"
    }
  }],
  "url" : "https://madie.cms.gov/Library/NHSNAcuteCareHospitalMonthlyInitialPopulation1",
  "version" : "1.1.000",
  "name" : "NHSNAcuteCareHospitalMonthlyInitialPopulation1",
  "status" : "draft",
  "type" : {
    "coding" : [{
      "system" : "http://terminology.hl7.org/CodeSystem/library-type",
      "code" : "logic-library"
    }]
  },
  "date" : "2026-09-19T16:31:14+00:00",
  "content" : [{
    "contentType" : "text/cql",
    "data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBOSFNOQWN1dGVDYXJlSG9zcGl0YWxNb250aGx5SW5pdGlhbFBvcHVsYXRpb24xIHZlcnNpb24gJzEuMS4wMDAnCgovLyBSZWJhc2VkIHRvIFFJIENvcmUgNi4wLjAKCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uCi8vIE5IU05IZWxwZXJzIGxvZ2ljIGlzIGlubGluZWQgYmVsb3cKCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vYnNlcnZhdGlvbi1jYXRlZ29yeScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ29uZGl0aW9uIENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJVUyBDb3JlIENvbmRpdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvQ29kZVN5c3RlbS9jb25kaXRpb24tY2F0ZWdvcnknCmNvZGVzeXN0ZW0gIkNvbmRpdGlvbiBDbGluaWNhbCBTdGF0dXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwnCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vbWVkaWNhdGlvbnJlcXVlc3QtY2F0ZWdvcnknCgp2YWx1ZXNldCAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI2NScKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yOTInCnZhbHVlc2V0ICJFbmNvdW50ZXIgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjY2Ni41LjMwNycKdmFsdWVzZXQgIk9ic2VydmF0aW9uIFNlcnZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNDMnCnZhbHVlc2V0ICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3NCcKCi8vIE9ic2VydmF0aW9uIENhdGVnb3J5IGNvZGVzCgoKY29kZSAibGFib3JhdG9yeSI6ICdsYWJvcmF0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAic29jaWFsLWhpc3RvcnkiOiAnc29jaWFsLWhpc3RvcnknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTb2NpYWwgSGlzdG9yeScKY29kZSAidml0YWwtc2lnbnMiOiAndml0YWwtc2lnbnMnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdWaXRhbCBTaWducycKY29kZSAiaW1hZ2luZyI6ICdpbWFnaW5nJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnSW1hZ2luZycKY29kZSAicHJvY2VkdXJlIjogJ3Byb2NlZHVyZScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2NlZHVyZScKY29kZSAic3VydmV5IjogJ3N1cnZleScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1N1cnZleScKCi8vIENvbmRpdGlvbiBjYXRlZ29yeQoKY29kZSAiZW5jb3VudGVyLWRpYWdub3NpcyI6ICdlbmNvdW50ZXItZGlhZ25vc2lzJyBmcm9tICJDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0VuY291bnRlciBEaWFnbm9zaXMnCgovLyBEaWFnbm9zdGljIFJlcG9ydCBDYXRlZ29yeSAoTE9JTkMtYmFzZWQpCgpjb2RlICJSYWRpb2xvZ3kiOiAnTFAyOTY4NC01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmFkaW9sb2d5Jwpjb2RlICJQYXRob2xvZ3kiOiAnTFA3ODM5LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdQYXRob2xvZ3knCmNvZGUgIkNhcmRpb2xvZ3kiOiAnTFAyOTcwOC0yJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ2FyZGlvbG9neScKCi8vIEVtZXJnZW5jeSBFbmNvdW50ZXIgQ2xhc3MKCmNvZGUgImVtZXJnZW5jeSI6ICdFTUVSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICdlbWVyZ2VuY3knCmNvZGUgIm9ic2VydmF0aW9uIGVuY291bnRlciI6ICdPQlNFTkMnIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ29ic2VydmF0aW9uIGVuY291bnRlcicKCi8vIENvbmRpdGlvbiBjbGluaWNhbFN0YXR1cwoKY29kZSAiYWN0aXZlIjogJ2FjdGl2ZScgZnJvbSAiQ29uZGl0aW9uIENsaW5pY2FsIFN0YXR1cyIgZGlzcGxheSAnYWN0aXZlJwoKLy8gUHJvY2VkdXJlIGNhdGVnb3J5Cgpjb2RlICJTdXJnaWNhbCBwcm9jZWR1cmUiOiAnMzg3NzEzMDAzJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU3VyZ2ljYWwgcHJvY2VkdXJlJwpjb2RlICJEaWFnbm9zdGljIHByb2NlZHVyZSI6ICcxMDM2OTMwMDcnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaWFnbm9zdGljIHByb2NlZHVyZScKCi8vIE1lZGljYXRpb25SZXF1ZXN0IGNhdGVnb3J5Cgpjb2RlICJpbnBhdGllbnQiOiAnaW5wYXRpZW50JyBmcm9tICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSIgZGlzcGxheSAnSW5wYXRpZW50Jwpjb2RlICJvdXRwYXRpZW50IjogJ291dHBhdGllbnQnIGZyb20gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IiBkaXNwbGF5ICdPdXRwYXRpZW50JwoKLy8gU2VydmljZVJlcXVlc3QgY2F0ZWdvcnkKCmNvZGUgIkxhYm9yYXRvcnkgcHJvY2VkdXJlIjogJzEwODI1MjAwNycgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0xhYm9yYXRvcnkgcHJvY2VkdXJlJwpjb2RlICJJbWFnaW5nIjogJzM2MzY3OTAwNScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0ltYWdpbmcnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNi0wMi0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50IAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIGVuY291bnRlciBsb2dpYwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBFbmNvdW50ZXJzIHdpdGggTkhTTiBjbGFzcyBjb2RlcyAoSU1QLCBBQ1VURSwgTk9OQUMsIFNTKQoKCgoKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIjoKICBbRW5jb3VudGVyXSBFbmMKICAgIHdoZXJlIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBlbmNvdW50ZXIiCiAgICAgIG9yIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBhY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iaW5wYXRpZW50IG5vbi1hY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4ic2hvcnQgc3RheSIKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXQogICAgdW5pb24gW0VuY291bnRlcjogIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyJdCiAgICB1bmlvbiAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIgogICAgdW5pb24gW0VuY291bnRlcjogY2xhc3MgfiAiZW1lcmdlbmN5Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIH4gIm9ic2VydmF0aW9uIGVuY291bnRlciJdICkgUXVhbGlmeWluZ0VuY291bnRlcnMKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnN0YXR1cyBpbiB7ICdpbi1wcm9ncmVzcycsICdmaW5pc2hlZCcsICd0cmlhZ2VkJywgJ29ubGVhdmUnLCAnZW50ZXJlZC1pbi1lcnJvcicgfQogICAgICBhbmQgUXVhbGlmeWluZ0VuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkVuY291bnRlcnMiOgogIFtFbmNvdW50ZXJdCgpkZWZpbmUgIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyI6CiAgIkVuY291bnRlcnMiIEVucwogICAgd2hlcmUgZXhpc3RzICggRW5zLmxvY2F0aW9uIEVuY291bnRlckxvY2F0aW9uCiAgICAgICAgd2hlcmUgRW5jb3VudGVyTG9jYXRpb24ucGVyaW9kIG92ZXJsYXBzIEVucy5wZXJpb2QKICAgICAgICAgIGFuZCBFbmNvdW50ZXJMb2NhdGlvbi5sb2NhdGlvbi5nZXRMb2NhdGlvbiAoICkudHlwZSBpbiAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiCiAgICApCiAgICAgIGFuZCBFbnMuc3RhdHVzIGluIHsgJ2luLXByb2dyZXNzJywgJ2ZpbmlzaGVkJywgJ3RyaWFnZWQnLCAnb25sZWF2ZScsICdlbnRlcmVkLWluLWVycm9yJyB9CiAgICAgIGFuZCBFbnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgdW5pb24gIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyIKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29yZSByZXRyaWV2ZXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gTG9jYXRpb25zIGZyb20gSVAgZW5jb3VudGVycwoKCgoKCmRlZmluZSAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBmbGF0dGVuICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgbGV0IGxvY2F0aW9uRWxlbWVudHM6IElQLmxvY2F0aW9uCiAgICAgIHJldHVybiBsb2NhdGlvbkVsZW1lbnRzIExFCiAgICAgICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgICAgIHJldHVybiBsb2NhdGlvblJlZmVyZW5jZS5nZXRMb2NhdGlvbiAoICkKICApCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFNERXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoKZGVmaW5lICJTREUgQ29uZGl0aW9uIFByb2JsZW1zIEhlYWx0aENvbmNlcm5zIjoKICBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuc10gRGlhZ25vc2lzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIERpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEaWFnbm9zaXMuaWQsCiAgICAgIG1ldGE6IERpYWdub3Npcy5tZXRhLAogICAgICBzdGF0dXM6IERpYWdub3Npcy5jbGluaWNhbFN0YXR1cywKICAgICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgICBjYXRlZ29yeTogRGlhZ25vc2lzLmNhdGVnb3J5LAogICAgICBzZXZlcml0eTogRGlhZ25vc2lzLnNldmVyaXR5LAogICAgICBjb2RlOiBEaWFnbm9zaXMuY29kZSwKICAgICAgYm9keVNpdGU6IERpYWdub3Npcy5ib2R5U2l0ZSwKICAgICAgc3ViamVjdDogRGlhZ25vc2lzLnN1YmplY3QsCiAgICAgIGVuY291bnRlclJlZmVyZW5jZUlkOiBEaWFnbm9zaXMuZW5jb3VudGVyLnJlZmVyZW5jZS5nZXRJZCAoICksCiAgICAgIG9uc2V0OiBEaWFnbm9zaXMub25zZXQsCiAgICAgIHN0YWdlOiBEaWFnbm9zaXMuc3RhZ2UsCiAgICAgIGV2aWRlbmNlOiBEaWFnbm9zaXMuZXZpZGVuY2UsCiAgICAgIG5vdGU6IERpYWdub3Npcy5ub3RlCiAgICB9CgpkZWZpbmUgIlNERSBDb25kaXRpb24gRGlhZ25vc2lzIjoKICBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzXSBEaWFnbm9zaXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IERpYWdub3Npcy5pZCwKICAgICAgbWV0YTogRGlhZ25vc2lzLm1ldGEsCiAgICAgIHN0YXR1czogRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzLAogICAgICB2ZXJpZmljYXRpb25TdGF0dXM6IERpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBEaWFnbm9zaXMuY2F0ZWdvcnksCiAgICAgIHNldmVyaXR5OiBEaWFnbm9zaXMuc2V2ZXJpdHksCiAgICAgIGNvZGU6IERpYWdub3Npcy5jb2RlLAogICAgICBib2R5U2l0ZTogRGlhZ25vc2lzLmJvZHlTaXRlLAogICAgICBzdWJqZWN0OiBEaWFnbm9zaXMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyUmVmZXJlbmNlSWQ6IERpYWdub3Npcy5lbmNvdW50ZXIucmVmZXJlbmNlLmdldElkICggKSwKICAgICAgb25zZXQ6IERpYWdub3Npcy5vbnNldCwKICAgICAgc3RhZ2U6IERpYWdub3Npcy5zdGFnZSwKICAgICAgZXZpZGVuY2U6IERpYWdub3Npcy5ldmlkZW5jZSwKICAgICAgbm90ZTogRGlhZ25vc2lzLm5vdGUKICAgIH0KCi8vIENvdmVyYWdlIFNERSDigJMgdHVwbGVzIG9mIENvdmVyYWdlIGRhdGEKCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6CiAgW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBDb3ZlcmFnZXMuaWQsCiAgICAgIG1ldGE6IENvdmVyYWdlcy5tZXRhLAogICAgICBzdGF0dXM6IENvdmVyYWdlcy5zdGF0dXMsCiAgICAgIHR5cGU6IENvdmVyYWdlcy50eXBlLAogICAgICBwb2xpY3lIb2xkZXI6IENvdmVyYWdlcy5wb2xpY3lIb2xkZXIsCiAgICAgIHN1YnNjcmliZXI6IENvdmVyYWdlcy5zdWJzY3JpYmVyLAogICAgICBzdWJzY3JpYmVySWQ6IENvdmVyYWdlcy5zdWJzY3JpYmVySWQsCiAgICAgIGJlbmVmaWNpYXJ5OiBDb3ZlcmFnZXMuYmVuZWZpY2lhcnksCiAgICAgIGRlcGVuZGVudDogQ292ZXJhZ2VzLmRlcGVuZGVudCwKICAgICAgcmVsYXRpb25zaGlwOiBDb3ZlcmFnZXMucmVsYXRpb25zaGlwLAogICAgICBwZXJpb2Q6IENvdmVyYWdlcy5wZXJpb2QsCiAgICAgIHBheW9yOiBDb3ZlcmFnZXMucGF5b3IsCiAgICAgIGNsYXNzOiBDb3ZlcmFnZXMuY2xhc3MsCiAgICAgIG9yZGVyOiBDb3ZlcmFnZXMub3JkZXIsCiAgICAgIG5ldHdvcms6IENvdmVyYWdlcy5uZXR3b3JrLAogICAgICBzdWJyb2dhdGlvbjogQ292ZXJhZ2VzLnN1YnJvZ2F0aW9uLAogICAgICBjb250cmFjdDogQ292ZXJhZ2VzLmNvbnRyYWN0CiAgICB9CgovLyBEZXZpY2UgU0RFIOKAkyB0dXBsZXMgb2YgRGV2aWNlIGRhdGEKCgpkZWZpbmUgIlNERSBEZXZpY2UiOgogIFtEZXZpY2VdIERldmljZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEZXZpY2VzLmlkLAogICAgICBtZXRhOiBEZXZpY2VzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogRGV2aWNlcy5leHRlbnNpb24sCiAgICAgIHN0YXR1czogRGV2aWNlcy5zdGF0dXMsCiAgICAgIGV4cGlyYXRpb25EYXRlOiBEZXZpY2VzLmV4cGlyYXRpb25EYXRlLAogICAgICBsb3ROdW1iZXI6IERldmljZXMubG90TnVtYmVyLAogICAgICBzZXJpYWxOdW1iZXI6IERldmljZXMuc2VyaWFsTnVtYmVyLAogICAgICBtb2RlbE51bWJlcjogRGV2aWNlcy5tb2RlbE51bWJlciwKICAgICAgcGFydE51bWJlcjogRGV2aWNlcy5wYXJ0TnVtYmVyLAogICAgICB0eXBlOiBEZXZpY2VzLnR5cGUsCiAgICAgIHBhdGllbnQ6IERldmljZXMucGF0aWVudCwKICAgICAgcGFyZW50OiBEZXZpY2VzLnBhcmVudAogICAgfQoKLy8gRGlhZ25vc3RpY1JlcG9ydCBTREVzCgoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBMYWIiOgogIFtEaWFnbm9zdGljUmVwb3J0TGFiXSBkcgogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihkci5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBOb3RlIjoKICBbRGlhZ25vc3RpY1JlcG9ydE5vdGVdIGRyCiAgICB3aGVyZSAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBPdGhlcnMiOgogIFtEaWFnbm9zdGljUmVwb3J0Tm90ZV0gZHIKICAgIHdoZXJlIG5vdCAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKLy8gRW5jb3VudGVyIFNERXMKCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOgogICJFbmNvdW50ZXJzIiBFbnMKICAgIHdoZXJlIG5vdCAiQ2hlY2tJUCIoRW5zKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIEVucy5wZXJpb2Qgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBFbnMuaWQsCiAgICAgIG1ldGE6IEVucy5tZXRhLAogICAgICBpZGVudGlmaWVyOiBFbnMuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBFbnMuc3RhdHVzLAogICAgICBzdGF0dXNIaXN0b3J5OiBFbnMuc3RhdHVzSGlzdG9yeSwKICAgICAgY2xhc3M6IEVucy5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBFbnMuY2xhc3NIaXN0b3J5LAogICAgICB0eXBlOiBFbnMudHlwZSwKICAgICAgc2VydmljZVR5cGU6IEVucy5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IEVucy5wcmlvcml0eSwKICAgICAgc3ViamVjdDogRW5zLnN1YmplY3QsCiAgICAgIHBlcmlvZDogRW5zLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBFbnMubGVuZ3RoLAogICAgICByZWFzb25Db2RlOiBFbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBFbnMucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IEVucy5kaWFnbm9zaXMsCiAgICAgIGFjY291bnQ6IEVucy5hY2NvdW50LAogICAgICBob3NwaXRhbGl6YXRpb246IEVucy5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBFbnMubG9jYXRpb24sCiAgICAgIHBhcnRPZjogRW5zLnBhcnRPZgogICAgfQoKZGVmaW5lICJTREUgSVAgRW5jb3VudGVycyI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHJldHVybiB7CiAgICAgIGlkOiBJUC5pZCwKICAgICAgbWV0YTogSVAubWV0YSwKICAgICAgaWRlbnRpZmllcjogSVAuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBJUC5zdGF0dXMsCiAgICAgIHN0YXR1c0hpc3Rvcnk6IElQLnN0YXR1c0hpc3RvcnksCiAgICAgIGNsYXNzOiBJUC5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBJUC5jbGFzc0hpc3RvcnksCiAgICAgIHR5cGU6IElQLnR5cGUsCiAgICAgIHNlcnZpY2VUeXBlOiBJUC5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IElQLnByaW9yaXR5LAogICAgICBzdWJqZWN0OiBJUC5zdWJqZWN0LAogICAgICBwZXJpb2Q6IElQLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBJUC5sZW5ndGgsCiAgICAgIHJlYXNvbkNvZGU6IElQLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogSVAucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IElQLmRpYWdub3NpcywKICAgICAgYWNjb3VudDogSVAuYWNjb3VudCwKICAgICAgaG9zcGl0YWxpemF0aW9uOiBJUC5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBJUC5sb2NhdGlvbiwKICAgICAgcGFydE9mOiBJUC5wYXJ0T2YKICAgIH0KCi8vIExvY2F0aW9uIFNERQoKCmRlZmluZSAiU0RFIExvY2F0aW9uIjoKICAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIiBMb2NhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgICAgYW5kIExvY2F0aW9ucyBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgaWQ6IExvY2F0aW9ucy5pZCwKICAgICAgbWV0YTogTG9jYXRpb25zLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogTG9jYXRpb25zLmV4dGVuc2lvbiwKICAgICAgc3RhdHVzOiBMb2NhdGlvbnMuc3RhdHVzLAogICAgICBvcGVyYXRpb25hbFN0YXR1czogTG9jYXRpb25zLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgICBuYW1lOiBMb2NhdGlvbnMubmFtZSwKICAgICAgYWxpYXM6IExvY2F0aW9ucy5hbGlhcywKICAgICAgZGVzY3JpcHRpb246IExvY2F0aW9ucy5kZXNjcmlwdGlvbiwKICAgICAgbW9kZTogTG9jYXRpb25zLm1vZGUsCiAgICAgIHR5cGU6IExvY2F0aW9ucy50eXBlLAogICAgICB0ZWxlY29tOiBMb2NhdGlvbnMudGVsZWNvbSwKICAgICAgYWRkcmVzczogTG9jYXRpb25zLmFkZHJlc3MsCiAgICAgIHBoeXNpY2FsVHlwZTogTG9jYXRpb25zLnBoeXNpY2FsVHlwZSwKICAgICAgcG9zaXRpb246IExvY2F0aW9ucy5wb3NpdGlvbiwKICAgICAgbWFuYWdpbmdPcmdhbml6YXRpb246IExvY2F0aW9ucy5tYW5hZ2luZ09yZ2FuaXphdGlvbiwKICAgICAgcGFydE9mOiBMb2NhdGlvbnMucGFydE9mLAogICAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbnMuaG91cnNPZk9wZXJhdGlvbiwKICAgICAgYXZhaWxhYmlsaXR5RXhjZXB0aW9uczogTG9jYXRpb25zLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICAgIGVuZHBvaW50OiBMb2NhdGlvbnMuZW5kcG9pbnQKICAgIH0KCi8vIE1lZGljYXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24iOgogICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIgogICAgdW5pb24gIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRBZG1pbmlzdHJhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkQWRtaW5pc3RyYXRpb25zLmlkLAogICAgICBtZXRhOiBNZWRBZG1pbmlzdHJhdGlvbnMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzOiBNZWRBZG1pbmlzdHJhdGlvbnMuaW5zdGFudGlhdGVzLAogICAgICBwYXJ0T2Y6IE1lZEFkbWluaXN0cmF0aW9ucy5wYXJ0T2YsCiAgICAgIHN0YXR1czogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3RhdHVzUmVhc29uLAogICAgICBjYXRlZ29yeTogTWVkQWRtaW5pc3RyYXRpb25zLmNhdGVnb3J5LAogICAgICBtZWRpY2F0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkQWRtaW5pc3RyYXRpb25zLnN1YmplY3QsCiAgICAgIGNvbnRleHQ6IE1lZEFkbWluaXN0cmF0aW9ucy5jb250ZXh0LAogICAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IE1lZEFkbWluaXN0cmF0aW9ucy5zdXBwb3J0aW5nSW5mb3JtYXRpb24sCiAgICAgIGVmZmVjdGl2ZTogTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSwKICAgICAgcGVyZm9ybWVyOiBNZWRBZG1pbmlzdHJhdGlvbnMucGVyZm9ybWVyLAogICAgICByZWFzb25Db2RlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uUmVmZXJlbmNlLAogICAgICByZXF1ZXN0OiBNZWRBZG1pbmlzdHJhdGlvbnMucmVxdWVzdCwKICAgICAgZGV2aWNlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZGV2aWNlLAogICAgICBub3RlOiBNZWRBZG1pbmlzdHJhdGlvbnMubm90ZSwKICAgICAgZG9zYWdlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZG9zYWdlCiAgICB9CgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZV0gTWVkQWRtaW5pc3RyYXRpb25zCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZEFkbWluaXN0cmF0aW9ucy5pZCwKICAgICAgbWV0YTogTWVkQWRtaW5pc3RyYXRpb25zLm1ldGEsCiAgICAgIGluc3RhbnRpYXRlczogTWVkQWRtaW5pc3RyYXRpb25zLmluc3RhbnRpYXRlcywKICAgICAgcGFydE9mOiBNZWRBZG1pbmlzdHJhdGlvbnMucGFydE9mLAogICAgICBzdGF0dXM6IE1lZEFkbWluaXN0cmF0aW9ucy5zdGF0dXMsCiAgICAgIHN0YXR1c1JlYXNvbjogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1c1JlYXNvbiwKICAgICAgY2F0ZWdvcnk6IE1lZEFkbWluaXN0cmF0aW9ucy5jYXRlZ29yeSwKICAgICAgbWVkaWNhdGlvbjogTWVkQWRtaW5pc3RyYXRpb25zLm1lZGljYXRpb24sCiAgICAgIHN1YmplY3Q6IE1lZEFkbWluaXN0cmF0aW9ucy5zdWJqZWN0LAogICAgICBjb250ZXh0OiBNZWRBZG1pbmlzdHJhdGlvbnMuY29udGV4dCwKICAgICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3VwcG9ydGluZ0luZm9ybWF0aW9uLAogICAgICBlZmZlY3RpdmU6IE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUsCiAgICAgIHBlcmZvcm1lcjogTWVkQWRtaW5pc3RyYXRpb25zLnBlcmZvcm1lciwKICAgICAgcmVhc29uQ29kZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvblJlZmVyZW5jZSwKICAgICAgcmVxdWVzdDogTWVkQWRtaW5pc3RyYXRpb25zLnJlcXVlc3QsCiAgICAgIGRldmljZTogTWVkQWRtaW5pc3RyYXRpb25zLmRldmljZSwKICAgICAgbm90ZTogTWVkQWRtaW5pc3RyYXRpb25zLm5vdGUsCiAgICAgIGRvc2FnZTogTWVkQWRtaW5pc3RyYXRpb25zLmRvc2FnZQogICAgfQoKLy8gU0RFIE1lZGljYXRpb24gUmVxdWVzdCAtIHJlZ3VsYXIgcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyBmYWxzZSBvciBhYnNlbnQpCgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkUmVxdWVzdHMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkUmVxdWVzdHMuaWQsCiAgICAgIG1ldGE6IE1lZFJlcXVlc3RzLm1ldGEsCiAgICAgIHN0YXR1czogTWVkUmVxdWVzdHMuc3RhdHVzLAogICAgICBzdGF0dXNSZWFzb246IE1lZFJlcXVlc3RzLnN0YXR1c1JlYXNvbiwKICAgICAgaW50ZW50OiBNZWRSZXF1ZXN0cy5pbnRlbnQsCiAgICAgIGNhdGVnb3J5OiBNZWRSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IE1lZFJlcXVlc3RzLnByaW9yaXR5LAogICAgICAvL2RvTm90UGVyZm9ybTogTWVkUmVxdWVzdHMuZG9Ob3RQZXJmb3JtLAogICAgICAKICAgICAgcmVwb3J0ZWQ6IE1lZFJlcXVlc3RzLnJlcG9ydGVkLAogICAgICBtZWRpY2F0aW9uOiBNZWRSZXF1ZXN0cy5tZWRpY2F0aW9uLAogICAgICBzdWJqZWN0OiBNZWRSZXF1ZXN0cy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE1lZFJlcXVlc3RzLmVuY291bnRlciwKICAgICAgYXV0aG9yZWRPbjogTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiwKICAgICAgcmVxdWVzdGVyOiBNZWRSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHJlY29yZGVyOiBNZWRSZXF1ZXN0cy5yZWNvcmRlciwKICAgICAgcmVhc29uQ29kZTogTWVkUmVxdWVzdHMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRSZXF1ZXN0cy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogTWVkUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IE1lZFJlcXVlc3RzLmluc3RhbnRpYXRlc1VyaSwKICAgICAgY291cnNlT2ZUaGVyYXB5VHlwZTogTWVkUmVxdWVzdHMuY291cnNlT2ZUaGVyYXB5VHlwZSwKICAgICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZFJlcXVlc3RzLmRvc2FnZUluc3RydWN0aW9uCiAgICB9CgovLyBTREUgTWVkaWNhdGlvbiBOb3QgUmVxdWVzdGVkIC0gbmVnYXRpb24gcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyB0cnVlKQoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCI6CiAgW01lZGljYXRpb25Ob3RSZXF1ZXN0ZWRdIE1lZE5vdFJlcXVlc3RzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24gZHVyaW5nIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZE5vdFJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBNZWROb3RSZXF1ZXN0cy5tZXRhLAogICAgICBzdGF0dXM6IE1lZE5vdFJlcXVlc3RzLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWROb3RSZXF1ZXN0cy5zdGF0dXNSZWFzb24sCiAgICAgIGludGVudDogTWVkTm90UmVxdWVzdHMuaW50ZW50LAogICAgICBjYXRlZ29yeTogTWVkTm90UmVxdWVzdHMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBNZWROb3RSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBNZWROb3RSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIHJlcG9ydGVkOiBNZWROb3RSZXF1ZXN0cy5yZXBvcnRlZCwKICAgICAgbWVkaWNhdGlvbjogTWVkTm90UmVxdWVzdHMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkTm90UmVxdWVzdHMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBNZWROb3RSZXF1ZXN0cy5lbmNvdW50ZXIsCiAgICAgIGF1dGhvcmVkT246IE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24sCiAgICAgIHJlcXVlc3RlcjogTWVkTm90UmVxdWVzdHMucmVxdWVzdGVyLAogICAgICByZWNvcmRlcjogTWVkTm90UmVxdWVzdHMucmVjb3JkZXIsCiAgICAgIHJlYXNvbkNvZGU6IE1lZE5vdFJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkTm90UmVxdWVzdHMucmVhc29uUmVmZXJlbmNlLAogICAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IE1lZE5vdFJlcXVlc3RzLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgICAgaW5zdGFudGlhdGVzVXJpOiBNZWROb3RSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGNvdXJzZU9mVGhlcmFweVR5cGU6IE1lZE5vdFJlcXVlc3RzLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICAgIGRvc2FnZUluc3RydWN0aW9uOiBNZWROb3RSZXF1ZXN0cy5kb3NhZ2VJbnN0cnVjdGlvbgogICAgfQoKLy8gQ29tYmluZWQgU0RFIGZvciBhbGwgTWVkaWNhdGlvbiBSZXF1ZXN0cyAoYm90aCByZWd1bGFyIGFuZCBuZWdhdGlvbikKCgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiCiAgICB1bmlvbiAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCIKCmRlZmluZSBmdW5jdGlvbiAiR2V0TWVkaWNhdGlvbiIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKCBbTWVkaWNhdGlvbl0gTWVkaWNhdGlvbgogICAgICB3aGVyZSByZWZlcmVuY2UucmVmZXJlbmNlcyAoIE1lZGljYXRpb24gKQogICkKCmRlZmluZSAiU0RFIE1lZGljYXRpb24iOgogICggW01lZGljYXRpb25SZXF1ZXN0XQogICAgdW5pb24gW01lZGljYXRpb25BZG1pbmlzdHJhdGlvbl0gKSBNZWRSZXFPckFkbWluCiAgICBsZXQgbWVkaWNhdGlvbjogR2V0TWVkaWNhdGlvbihNZWRSZXFPckFkbWluLm1lZGljYXRpb24gYXMgUmVmZXJlbmNlKQogICAgd2hlcmUgbWVkaWNhdGlvbiBpcyBub3QgbnVsbAogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIENvYWxlc2NlKCJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZFJlcU9yQWRtaW4uZWZmZWN0aXZlKSwgTWVkUmVxT3JBZG1pbi5hdXRob3JlZE9uLnRvSW50ZXJ2YWwoKSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBtZWRpY2F0aW9uLmlkLAogICAgICBtZXRhOiBtZWRpY2F0aW9uLm1ldGEsCiAgICAgIGNvZGU6IG1lZGljYXRpb24uY29kZSwKICAgICAgc3RhdHVzOiBtZWRpY2F0aW9uLnN0YXR1cywKICAgICAgbWFudWZhY3R1cmVyOiBtZWRpY2F0aW9uLm1hbnVmYWN0dXJlciwKICAgICAgZm9ybTogbWVkaWNhdGlvbi5mb3JtLAogICAgICBhbW91bnQ6IG1lZGljYXRpb24uYW1vdW50LAogICAgICBpbmdyZWRpZW50OiBtZWRpY2F0aW9uLmluZ3JlZGllbnQsCiAgICAgIGJhdGNoOiBtZWRpY2F0aW9uLmJhdGNoCiAgICB9CgoKLy8gT2JzZXJ2YXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIExhYiBDYXRlZ29yeSI6CiAgW0xhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbl0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFNpbXBsZSI6CiAgW1NpbXBsZU9ic2VydmF0aW9uXSBPYnMKICAgIHdoZXJlICggZXhpc3RzICggT2JzLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJzb2NpYWwtaGlzdG9yeSIKICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIE9icy5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJpbWFnaW5nIgogICAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBPYnMuY2F0ZWdvcnkgQ2F0ZWdvcnkKICAgICAgICAgICAgd2hlcmUgQ2F0ZWdvcnkgfiAicHJvY2VkdXJlIgogICAgICAgICkKICAgICkKICAgICAgYW5kIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihPYnMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KICAgIAovLyBTdXJ2ZXkgaXMgZml4ZWQgY2F0ZWdvcnkgY29kZSBpbiBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgcHJvZmlsZSBpbiBRSS1Db3JlICAgIAoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFN1cnZleSI6CiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudF0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFZpdGFsIFNpZ25zIENhdGVnb3J5IjoKICBbVVNDb3JlLlZpdGFsU2lnbnNQcm9maWxlXSBPYnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogT2JzLmlkLAogICAgICBtZXRhOiBPYnMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBPYnMuZXh0ZW5zaW9uLAogICAgICBwYXJ0T2Y6IE9icy5wYXJ0T2YsCiAgICAgIHN0YXR1czogT2JzLnN0YXR1cywKICAgICAgY2F0ZWdvcnk6IE9icy5jYXRlZ29yeSwKICAgICAgY29kZTogT2JzLmNvZGUsCiAgICAgIHN1YmplY3Q6IE9icy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE9icy5lbmNvdW50ZXIsCiAgICAgIGVmZmVjdGl2ZTogT2JzLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBPYnMuaXNzdWVkLAogICAgICB2YWx1ZTogT2JzLnZhbHVlLAogICAgICBkYXRhQWJzZW50UmVhc29uOiBPYnMuZGF0YUFic2VudFJlYXNvbiwKICAgICAgaW50ZXJwcmV0YXRpb246IE9icy5pbnRlcnByZXRhdGlvbiwKICAgICAgYm9keVNpdGU6IE9icy5ib2R5U2l0ZSwKICAgICAgbWV0aG9kOiBPYnMubWV0aG9kLAogICAgICBzcGVjaW1lbjogT2JzLnNwZWNpbWVuLAogICAgICByZWZlcmVuY2VSYW5nZTogT2JzLnJlZmVyZW5jZVJhbmdlLAogICAgICBoYXNNZW1iZXI6IE9icy5oYXNNZW1iZXIsCiAgICAgIGRlcml2ZWRGcm9tOiBPYnMuZGVyaXZlZEZyb20sCiAgICAgIGNvbXBvbmVudDogT2JzLmNvbXBvbmVudAogICAgfQoKCi8vIFByb2NlZHVyZSBTREUKCgpkZWZpbmUgIlNERSBQcm9jZWR1cmUiOgogIFtQcm9jZWR1cmVdIFByb2NlZHVyZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoUHJvY2VkdXJlcy5wZXJmb3JtZWQpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IFByb2NlZHVyZXMuaWQsCiAgICAgIG1ldGE6IFByb2NlZHVyZXMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBQcm9jZWR1cmVzLmV4dGVuc2lvbiwKICAgICAgYmFzZWRPbjogUHJvY2VkdXJlcy5iYXNlZE9uLAogICAgICBwYXJ0T2Y6IFByb2NlZHVyZXMucGFydE9mLAogICAgICBzdGF0dXM6IFByb2NlZHVyZXMuc3RhdHVzLAogICAgICBjYXRlZ29yeTogUHJvY2VkdXJlcy5jYXRlZ29yeSwKICAgICAgY29kZTogUHJvY2VkdXJlcy5jb2RlLAogICAgICBzdWJqZWN0OiBQcm9jZWR1cmVzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogUHJvY2VkdXJlcy5lbmNvdW50ZXIsCiAgICAgIHBlcmZvcm1lZDogUHJvY2VkdXJlcy5wZXJmb3JtZWQsCiAgICAgIGxvY2F0aW9uOiBQcm9jZWR1cmVzLmxvY2F0aW9uLAogICAgICByZWFzb25Db2RlOiBQcm9jZWR1cmVzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogUHJvY2VkdXJlcy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGJvZHlTaXRlOiBQcm9jZWR1cmVzLmJvZHlTaXRlCiAgICB9CgovLyBTZXJ2aWNlUmVxdWVzdCBTREUgLSByZWd1bGFyIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgZmFsc2Ugb3IgYWJzZW50KQoKCmRlZmluZSAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIjoKICBbU2VydmljZVJlcXVlc3RdIFNlcnZpY2VSZXF1ZXN0cwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogU2VydmljZVJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBTZXJ2aWNlUmVxdWVzdHMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IFNlcnZpY2VSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGJhc2VkT246IFNlcnZpY2VSZXF1ZXN0cy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZVJlcXVlc3RzLnJlcGxhY2VzLAogICAgICByZXF1aXNpdGlvbjogU2VydmljZVJlcXVlc3RzLnJlcXVpc2l0aW9uLAogICAgICBzdGF0dXM6IFNlcnZpY2VSZXF1ZXN0cy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZVJlcXVlc3RzLmludGVudCwKICAgICAgY2F0ZWdvcnk6IFNlcnZpY2VSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IFNlcnZpY2VSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgLy9kb05vdFBlcmZvcm06IFNlcnZpY2VSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIAogICAgICBjb2RlOiBTZXJ2aWNlUmVxdWVzdHMuY29kZSwKICAgICAgb3JkZXJEZXRhaWw6IFNlcnZpY2VSZXF1ZXN0cy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VSZXF1ZXN0cy5xdWFudGl0eSwKICAgICAgc3ViamVjdDogU2VydmljZVJlcXVlc3RzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogU2VydmljZVJlcXVlc3RzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZVJlcXVlc3RzLm9jY3VycmVuY2UsCiAgICAgIGFzTmVlZGVkOiBTZXJ2aWNlUmVxdWVzdHMuYXNOZWVkZWQsCiAgICAgIGF1dGhvcmVkT246IFNlcnZpY2VSZXF1ZXN0cy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHBlcmZvcm1lclR5cGU6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXJUeXBlLAogICAgICBwZXJmb3JtZXI6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZVJlcXVlc3RzLmxvY2F0aW9uQ29kZSwKICAgICAgcmVhc29uQ29kZTogU2VydmljZVJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogU2VydmljZVJlcXVlc3RzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdXJhbmNlLAogICAgICBib2R5U2l0ZTogU2VydmljZVJlcXVlc3RzLmJvZHlTaXRlLAogICAgICBub3RlOiBTZXJ2aWNlUmVxdWVzdHMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlUmVxdWVzdHMucGF0aWVudEluc3RydWN0aW9uCiAgICB9CgovLyBTZXJ2aWNlTm90UmVxdWVzdGVkIFNERSAtIG5lZ2F0aW9uIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgdHJ1ZSkKCgpkZWZpbmUgIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiOgogIFtTZXJ2aWNlTm90UmVxdWVzdGVkXSBTZXJ2aWNlTm90UmVxcwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uIGR1cmluZyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBTZXJ2aWNlTm90UmVxcy5pZCwKICAgICAgbWV0YTogU2VydmljZU5vdFJlcXMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlTm90UmVxcy5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICAgIGluc3RhbnRpYXRlc1VyaTogU2VydmljZU5vdFJlcXMuaW5zdGFudGlhdGVzVXJpLAogICAgICBiYXNlZE9uOiBTZXJ2aWNlTm90UmVxcy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZU5vdFJlcXMucmVwbGFjZXMsCiAgICAgIHJlcXVpc2l0aW9uOiBTZXJ2aWNlTm90UmVxcy5yZXF1aXNpdGlvbiwKICAgICAgc3RhdHVzOiBTZXJ2aWNlTm90UmVxcy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZU5vdFJlcXMuaW50ZW50LAogICAgICBjYXRlZ29yeTogU2VydmljZU5vdFJlcXMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBTZXJ2aWNlTm90UmVxcy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBTZXJ2aWNlTm90UmVxcy5kb05vdFBlcmZvcm0sCiAgICAgIGNvZGU6IFNlcnZpY2VOb3RSZXFzLmNvZGUsCiAgICAgIG9yZGVyRGV0YWlsOiBTZXJ2aWNlTm90UmVxcy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VOb3RSZXFzLnF1YW50aXR5LAogICAgICBzdWJqZWN0OiBTZXJ2aWNlTm90UmVxcy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IFNlcnZpY2VOb3RSZXFzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZU5vdFJlcXMub2NjdXJyZW5jZSwKICAgICAgYXNOZWVkZWQ6IFNlcnZpY2VOb3RSZXFzLmFzTmVlZGVkLAogICAgICBhdXRob3JlZE9uOiBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VOb3RSZXFzLnJlcXVlc3RlciwKICAgICAgcGVyZm9ybWVyVHlwZTogU2VydmljZU5vdFJlcXMucGVyZm9ybWVyVHlwZSwKICAgICAgcGVyZm9ybWVyOiBTZXJ2aWNlTm90UmVxcy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZU5vdFJlcXMubG9jYXRpb25Db2RlLAogICAgICByZWFzb25Db2RlOiBTZXJ2aWNlTm90UmVxcy5yZWFzb25Db2RlLAogICAgICByZWFzb25SZWZlcmVuY2U6IFNlcnZpY2VOb3RSZXFzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlTm90UmVxcy5pbnN1cmFuY2UsCiAgICAgIGJvZHlTaXRlOiBTZXJ2aWNlTm90UmVxcy5ib2R5U2l0ZSwKICAgICAgbm90ZTogU2VydmljZU5vdFJlcXMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlTm90UmVxcy5wYXRpZW50SW5zdHJ1Y3Rpb24KICAgIH0KCi8vIENvbWJpbmVkIFNERSBmb3IgYWxsIFNlcnZpY2UgUmVxdWVzdHMgKGJvdGggcmVndWxhciBhbmQgbmVnYXRpb24pCgoKZGVmaW5lICJTREUgU2VydmljZSBSZXF1ZXN0IjoKICAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIgogICAgdW5pb24gIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiCgovLyBNaW5pbWFsIHBhdGllbnQgU0RFCgoKZGVmaW5lICJTREUgTWluaW1hbCBQYXRpZW50IjoKICBbUGF0aWVudF0gTWluUHQKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBNaW5QdC5pZCwKICAgICAgbWV0YTogTWluUHQubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBNaW5QdC5leHRlbnNpb24sCiAgICAgIGlkZW50aWZpZXI6IE1pblB0LmlkZW50aWZpZXIsCiAgICAgIGFjdGl2ZTogTWluUHQuYWN0aXZlLAogICAgICBuYW1lOiBNaW5QdC5uYW1lLAogICAgICB0ZWxlY29tOiBNaW5QdC50ZWxlY29tLAogICAgICBnZW5kZXI6IE1pblB0LmdlbmRlciwKICAgICAgYmlydGhEYXRlOiBNaW5QdC5iaXJ0aERhdGUsCiAgICAgIGRlY2Vhc2VkOiBNaW5QdC5kZWNlYXNlZCwKICAgICAgYWRkcmVzczogTWluUHQuYWRkcmVzcywKICAgICAgbWFyaXRhbFN0YXR1czogTWluUHQubWFyaXRhbFN0YXR1cywKICAgICAgbXVsdGlwbGVCaXJ0aDogTWluUHQubXVsdGlwbGVCaXJ0aCwKICAgICAgcGhvdG86IE1pblB0LnBob3RvLAogICAgICBjb250YWN0OiBNaW5QdC5jb250YWN0LAogICAgICBjb21tdW5pY2F0aW9uOiBNaW5QdC5jb21tdW5pY2F0aW9uLAogICAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBNaW5QdC5nZW5lcmFsUHJhY3RpdGlvbmVyLAogICAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjogTWluUHQubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICAgIGxpbms6IE1pblB0LmxpbmsKICAgIH0KCmRlZmluZSAiU0RFIFNwZWNpbWVucyI6CiAgW1VTQ29yZS5TcGVjaW1lblByb2ZpbGVdIHNwCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKHNwLmNvbGxlY3Rpb24uY29sbGVjdGVkKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBzcC5pZCwKICAgICAgdHlwZTogc3AudHlwZQogICAgfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBIZWxwZXIgZnVuY3Rpb25zCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKCmRlZmluZSBmdW5jdGlvbiAiQ2hlY2tJUCIoZW5jb3VudGVyIEVuY291bnRlcik6CiAgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgZW5jb3VudGVyLmlkID0gSVAuaWQKICApCgovLyBGb3JtZXIgTkhTTkhlbHBlcnMgZnVuY3Rpb25zLCBhZGFwdGVkIGZvciBRSSBDb3JlCgoKZGVmaW5lIGZ1bmN0aW9uICJOb3JtYWxpemUgSW50ZXJ2YWwiKGNob2ljZSBDaG9pY2U8RGF0ZVRpbWUsIEludGVydmFsPERhdGVUaW1lPj4pOgogIGNhc2UKICAgIHdoZW4gY2hvaWNlIGlzIERhdGVUaW1lIHRoZW4gSW50ZXJ2YWxbY2hvaWNlIGFzIERhdGVUaW1lLCBjaG9pY2UgYXMgRGF0ZVRpbWVdCiAgICB3aGVuIGNob2ljZSBpcyBJbnRlcnZhbDxEYXRlVGltZT50aGVuIGNob2ljZSBhcyBJbnRlcnZhbDxEYXRlVGltZT4KICAgIGVsc2UgbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT5lbmQKCmRlZmluZSBmdW5jdGlvbiAiR2V0TG9jYXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UpOgogIHNpbmdsZXRvbiBmcm9tICggW0xvY2F0aW9uXSBMb2NhdGlvbnMKICAgICAgd2hlcmUgTG9jYXRpb25zLmlkID0gR2V0SWQocmVmZXJlbmNlLnJlZmVyZW5jZSkKICApCgpkZWZpbmUgZnVuY3Rpb24gIkdldElkIih1cmkgU3RyaW5nKToKICBMYXN0KFNwbGl0KHVyaSwgJy8nKSkKCmRlZmluZSBmdW5jdGlvbiAiR2V0SWQiKHVyaSBGSElSLnN0cmluZyk6CiAgTGFzdChTcGxpdChGSElSSGVscGVycy5Ub1N0cmluZyh1cmkpLCAnLycpKQ==",
    "url" : "https://madie.cms.gov/Library-NHSNAcuteCareHospitalMonthlyInitialPopulation1.cql"
  }]
}