CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG
2.0.0 - Release 2
US
This page is part of the NHSN Digital Quality Measures (dQM) Content Package Implementation Guide (v2.0.0: Release) based on FHIR (HL7® FHIR® Standard) R4. This is the current published version. For a full list of available versions, see the Directory of published versions
| Page standards status: Trial-use | Maturity Level: 2 |
{
"resourceType" : "Library",
"id" : "SharedResourceCreation",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n <table class=\"grid dict\">\n \n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">SharedResourceCreation</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">2.0.0</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Url: </b></th>\n <td style=\"padding-left: 4px;\"><a href=\"Library-SharedResourceCreation.html\">SharedResourceCreation</a></td>\n </tr>\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Status: </b></th>\n <td style=\"padding-left: 4px;\">draft</td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Type: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>logic-library</span>\n </p>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Date: </b></th>\n <td style=\"padding-left: 4px;\">2026-05-15 17:27:39-0400</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">CDC National Healthcare Safety Network (NHSN)</td>\n </tr>\n \n\n \n\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Jurisdiction: </b></th>\n <td style=\"padding-left: 4px;\">US</td>\n </tr>\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Related Artifacts: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p><b>Dependencies</b></p>\n <ul>\n \n <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</code></li>\n \n </ul>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n\n \n \n <tr>\n <td colspan=\"2\">\n <table>\n <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n <tr><td><pre><code class=\"language-cql\">library SharedResourceCreation version '0.1.010'\r\n\r\ninclude FHIRHelpers version '4.0.2'\r\n\r\nusing FHIR version '4.0.1'\r\n\r\ndefine function "GetPatientExtensions"(domainResource DomainResource):\r\n domainResource.extension E\r\n where E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race'\r\n or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity'\r\n or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-tribal-affiliation'\r\n or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex'\r\n or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex'\r\n or E.url = 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/link-original-resource-id-extension'\r\n return E\r\n\r\ndefine function "MetaElement"(resource Resource, profileURLs List<FHIR.canonical>):\r\n resource r\r\n return FHIR.Meta{\r\n extension: r.meta.extension,\r\n versionId: r.meta.versionId,\r\n lastUpdated: r.meta.lastUpdated,\r\n profile: profileURLs,\r\n security: r.meta.security,\r\n tag: r.meta.tag\r\n }\r\n\r\ndefine function ConditionStage(stage List<FHIR.Condition.Stage>):\r\n stage s\r\n return FHIR.Condition.Stage{\r\n summary: s.summary,\r\n assessment: s.assessment,\r\n type: s.type\r\n }\r\n\r\ndefine function ConditionEvidence(evidence List<FHIR.Condition.Evidence>):\r\n evidence e\r\n return FHIR.Condition.Evidence{\r\n code: e.code,\r\n detail: e.detail\r\n }\r\n\r\ndefine function ConditionResource(condition Condition, profileURLs List<FHIR.canonical>):\r\n condition c\r\n return Condition{\r\n id: FHIR.id {value: 'LCR-' + c.id},\r\n meta: MetaElement(c, profileURLs),\r\n extension: c.extension,\r\n clinicalStatus: c.clinicalStatus,\r\n verificationStatus: c.verificationStatus,\r\n category: c.category,\r\n severity: c.severity,\r\n code: c.code,\r\n bodySite: c.bodySite,\r\n subject: c.subject,\r\n encounter: c.encounter,\r\n onset: c.onset,\r\n abatement: c.abatement,\r\n recordedDate: c.recordedDate,\r\n stage: ConditionStage(c.stage),\r\n evidence: ConditionEvidence(c.evidence),\r\n note: c.note\r\n }\r\n\r\ndefine function CoverageClass(class List<FHIR.Coverage.Class>):\r\n class c\r\n return FHIR.Coverage.Class{\r\n value: c.value,\r\n name: c.name\r\n }\r\n\r\ndefine function CoverageResource(coverage Coverage, profileURLs List<FHIR.canonical>):\r\n coverage c\r\n return Coverage{\r\n id: FHIR.id{value: 'LCR-' + c.id},\r\n meta: MetaElement(c, profileURLs),\r\n extension: c.extension,\r\n status: c.status,\r\n type: c.type,\r\n policyHolder: c.policyHolder,\r\n subscriber: c.subscriber,\r\n subscriberId: c.subscriberId,\r\n beneficiary: c.beneficiary,\r\n dependent: c.dependent,\r\n relationship: c.relationship,\r\n period: c.period,\r\n payor: c.payor,\r\n class: CoverageClass(c.class),\r\n order: c.order,\r\n network: c.network,\r\n subrogation: c.subrogation,\r\n contract: c.contract\r\n }\r\n\r\ndefine function DiagnosticReportCoding(coding List<Coding>):\r\n coding c\r\n return Coding{\r\n system: c.system,\r\n version: c.version,\r\n code: c.code,\r\n display: c.display,\r\n userSelected: c.userSelected\r\n }\r\n\r\ndefine function DiagnosticReportCategory(category List<CodeableConcept>):\r\n category c\r\n return CodeableConcept{\r\n coding: DiagnosticReportCoding(c.coding)\r\n }\r\n\r\ndefine function DiagnosticReportLabResource(diagnosticReport DiagnosticReport, profileURLs List<FHIR.canonical>):\r\n diagnosticReport d\r\n return DiagnosticReport{\r\n id: FHIR.id{value: 'LCR-' + d.id},\r\n meta: MetaElement(d, profileURLs),\r\n extension: d.extension,\r\n basedOn: d.basedOn,\r\n status: d.status,\r\n category: DiagnosticReportCategory(d.category),\r\n code: d.code,\r\n subject: d.subject,\r\n encounter: d.encounter,\r\n effective: d.effective,\r\n issued: d.issued,\r\n performer: d.performer,\r\n resultsInterpreter: d.resultsInterpreter,\r\n specimen: d.specimen,\r\n result: d.result,\r\n conclusion: d.conclusion,\r\n conclusionCode: d.conclusionCode\r\n }\r\n\r\ndefine function EncounterIdentifier(identifier List<FHIR.Identifier>):\r\n identifier i\r\n return FHIR.Identifier{\r\n use: i.use,\r\n type: i.type,\r\n system: i.system,\r\n value: i.value,\r\n period: i.period\r\n }\r\n\r\ndefine function EncounterStatusHistory(statusHistory List<FHIR.Encounter.StatusHistory>):\r\n statusHistory sH\r\n return FHIR.Encounter.StatusHistory{\r\n status: sH.status,\r\n period: sH.period\r\n }\r\n\r\ndefine function EncounterClassHistory(classHistory List<FHIR.Encounter.ClassHistory>):\r\n classHistory cH\r\n return FHIR.Encounter.ClassHistory{\r\n class: cH.class,\r\n period: cH.period\r\n }\r\n\r\n/*No longer needed but saving for potential future use\r\ndefine function EncounterParticipant(participant List<FHIR.Encounter.Participant>):\r\n participant p\r\n return FHIR.Encounter.Participant{\r\n type: p.type,\r\n period: p.period,\r\n individual: p.individual\r\n }*/\r\n\r\ndefine function EncounterDiagnosis(diagnosis List<FHIR.Encounter.Diagnosis>):\r\n diagnosis d\r\n return FHIR.Encounter.Diagnosis{\r\n condition: d.condition,\r\n use: d.use,\r\n rank: d.rank\r\n }\r\n\r\ndefine function EncounterHospitalization(hospitalization FHIR.Encounter.Hospitalization):\r\n hospitalization h\r\n return FHIR.Encounter.Hospitalization{\r\n preAdmissionIdentifier: h.preAdmissionIdentifier,\r\n origin: h.origin,\r\n admitSource: h.admitSource,\r\n reAdmission: h.reAdmission,\r\n dietPreference: h.dietPreference,\r\n specialCourtesy: h.specialCourtesy,\r\n specialArrangement: h.specialArrangement,\r\n destination: h.destination,\r\n dischargeDisposition: h.dischargeDisposition\r\n }\r\n\r\ndefine function EncounterLocation(location List<FHIR.Encounter.Location>):\r\n location l\r\n return FHIR.Encounter.Location{\r\n location: l.location,\r\n status: l.status,\r\n physicalType: l.physicalType,\r\n period: l.period\r\n }\r\n\r\ndefine function EncounterResource(encounter Encounter, profileURLs List<FHIR.canonical>):\r\n encounter e\r\n return Encounter{\r\n id: FHIR.id{value: 'LCR-' + e.id},\r\n meta: MetaElement(e, profileURLs),\r\n extension: e.extension,\r\n identifier: EncounterIdentifier(e.identifier),\r\n status: e.status,\r\n statusHistory: EncounterStatusHistory(e.statusHistory),\r\n class: e.class,\r\n classHistory: EncounterClassHistory(e.classHistory),\r\n type: e.type,\r\n serviceType: e.serviceType,\r\n priority: e.priority,\r\n subject: e.subject,\r\n period: e.period,\r\n length: e.length,\r\n reasonCode: e.reasonCode,\r\n reasonReference: e.reasonReference,\r\n diagnosis: EncounterDiagnosis(e.diagnosis),\r\n account: e.account,\r\n hospitalization: EncounterHospitalization(e.hospitalization),\r\n location: EncounterLocation(e.location),\r\n partOf: e.partOf\r\n }\r\n\r\ndefine function ObservationLabCoding(coding List<Coding>):\r\n coding c\r\n return Coding{\r\n id: c.id,\r\n extension: c.extension,\r\n system: c.system,\r\n version: c.version,\r\n code: c.code,\r\n display: c.display,\r\n userSelected: c.userSelected\r\n }\r\n\r\ndefine function ObservationLabCategory(category List<CodeableConcept>):\r\n category c\r\n return CodeableConcept{\r\n coding: ObservationLabCoding(c.coding),\r\n text: c.text\r\n }\r\n\r\ndefine function ObservationReferenceRange(referenceRange List<FHIR.Observation.ReferenceRange>):\r\n referenceRange rR\r\n return FHIR.Observation.ReferenceRange{\r\n low: rR.low,\r\n high: rR.high,\r\n type: rR.type,\r\n appliesTo: rR.appliesTo,\r\n age: rR.age,\r\n text: rR.text\r\n }\r\n\r\ndefine function ObservationComponent(component List<FHIR.Observation.Component>):\r\n component c\r\n return FHIR.Observation.Component{\r\n code: c.code,\r\n value: c.value,\r\n dataAbsentReason: c.dataAbsentReason,\r\n interpretation: c.interpretation,\r\n referenceRange: c.referenceRange\r\n }\r\n\r\ndefine function ObservationLabResource(observation Observation, profileURLs List<FHIR.canonical>):\r\n observation o\r\n return Observation{\r\n id: FHIR.id {value: 'LCR-' + o.id},\r\n meta: MetaElement(o, profileURLs),\r\n extension: o.extension,\r\n basedOn: o.basedOn,\r\n partOf: o.partOf,\r\n status: o.status,\r\n category: ObservationLabCategory(o.category),\r\n code: o.code,\r\n subject: o.subject,\r\n focus: o.focus,\r\n encounter: o.encounter,\r\n effective: o.effective,\r\n issued: o.issued,\r\n performer: o.performer,\r\n value: o.value,\r\n dataAbsentReason: o.dataAbsentReason,\r\n interpretation: o.interpretation,\r\n note: o.note,\r\n bodySite: o.bodySite,\r\n method: o.method,\r\n specimen: o.specimen,\r\n device: o.device,\r\n referenceRange: ObservationReferenceRange(o.referenceRange),\r\n hasMember: o.hasMember,\r\n derivedFrom: o.derivedFrom,\r\n component: ObservationComponent(o.component)\r\n }\r\n\r\ndefine function LocationAddress(address FHIR.Address):\r\n address a\r\n return FHIR.Address{\r\n use: a.use,\r\n type: a.type,\r\n text: a.text,\r\n line: a.line,\r\n city: a.city,\r\n district: a.district,\r\n state: a.state,\r\n postalCode: a.postalCode,\r\n country: a.country,\r\n period: a.period\r\n }\r\n\r\ndefine function LocationPosition(position FHIR.Location.Position):\r\n position p\r\n return FHIR.Location.Position{\r\n longitude: p.longitude,\r\n latitude: p.latitude,\r\n altitude: p.altitude\r\n }\r\n\r\ndefine function LocationHoursOfOperation(hoursOfOperation List<FHIR.Location.HoursOfOperation>):\r\n hoursOfOperation hOO\r\n return FHIR.Location.HoursOfOperation{\r\n daysOfWeek: hOO.daysOfWeek,\r\n allDay: hOO.allDay,\r\n openingTime: hOO.openingTime,\r\n closingTime: hOO.closingTime\r\n }\r\n\r\ndefine function LocationResource(location Location, profileURLs List<FHIR.canonical>):\r\n location l\r\n return Location{\r\n id: FHIR.id {value: 'LCR-' + l.id},\r\n meta: MetaElement(l, profileURLs),\r\n extension: l.extension,\r\n status: l.status,\r\n operationalStatus: l.operationalStatus,\r\n name: l.name,\r\n alias: l.alias,\r\n description: l.description,\r\n mode: l.mode,\r\n type: l.type,\r\n telecom: l.telecom,\r\n address: LocationAddress(l.address),\r\n physicalType: l.physicalType,\r\n position: LocationPosition(l.position),\r\n managingOrganization: l.managingOrganization,\r\n partOf: l.partOf,\r\n hoursOfOperation: LocationHoursOfOperation(l.hoursOfOperation),\r\n availabilityExceptions: l.availabilityExceptions,\r\n endpoint: l.endpoint\r\n }\r\n\r\ndefine function MedicationIngredient(ingredient List<FHIR.Medication.Ingredient>):\r\n ingredient i\r\n return FHIR.Medication.Ingredient{\r\n item: i.item,\r\n strength: i.strength\r\n }\r\n\r\ndefine function MedicationBatch(batch FHIR.Medication.Batch):\r\n batch b\r\n return FHIR.Medication.Batch{\r\n lotNumber: b.lotNumber,\r\n expirationDate: b.expirationDate\r\n }\r\n\r\ndefine function MedicationResource(medication Medication, profileURLs List<FHIR.canonical>):\r\n medication m\r\n return Medication{\r\n id: FHIR.id {value: 'LCR-' + m.id},\r\n meta: MetaElement(m, profileURLs),\r\n extension: m.extension,\r\n code: m.code,\r\n status: m.status,\r\n manufacturer: m.manufacturer,\r\n form: m.form,\r\n amount: m.amount,\r\n ingredient: MedicationIngredient(m.ingredient),\r\n batch: MedicationBatch(m.batch)\r\n }\r\n\r\ndefine function MedicationAdministrationPerformer(performer List<FHIR.MedicationAdministration.Performer>):\r\n performer p\r\n return FHIR.MedicationAdministration.Performer{\r\n function: p.function,\r\n actor: p.actor\r\n }\r\n\r\ndefine function MedicationAdministrationDosage(dosage FHIR.MedicationAdministration.Dosage):\r\n dosage d\r\n return FHIR.MedicationAdministration.Dosage{\r\n text: d.text,\r\n site: d.site,\r\n route: d.route,\r\n method: d.method,\r\n dose: d.dose,\r\n rate: d.rate\r\n }\r\n\r\ndefine function MedicationAdministrationResource(medicationAdministration MedicationAdministration, profileURLs List<FHIR.canonical>):\r\n medicationAdministration m\r\n return MedicationAdministration{\r\n id: FHIR.id {value: 'LCR-' + m.id},\r\n meta: MetaElement(m, profileURLs),\r\n extension: m.extension,\r\n instantiates: m.instantiates,\r\n partOf: m.partOf,\r\n status: m.status,\r\n statusReason: m.statusReason,\r\n category: m.category,\r\n medication: m.medication,\r\n subject: m.subject,\r\n context: m.context,\r\n supportingInformation: m.supportingInformation,\r\n effective: m.effective,\r\n performer: MedicationAdministrationPerformer(m.performer),\r\n reasonCode: m.reasonCode,\r\n reasonReference: m.reasonReference,\r\n request: m.request,\r\n device: m.device,\r\n note: m.note,\r\n dosage: MedicationAdministrationDosage(m.dosage),\r\n eventHistory: m.eventHistory\r\n }\r\n\r\ndefine function MedicationRequestDoseAndRate(doseAndRate List<FHIR.Dosage.DoseAndRate>):\r\n doseAndRate dR\r\n return FHIR.Dosage.DoseAndRate{\r\n type: dR.type,\r\n dose: dR.dose,\r\n rate: dR.rate\r\n }\r\n\r\ndefine function MedicationRequestDosageInstruction(dosageInstruction List<FHIR.Dosage>):\r\n dosageInstruction dI\r\n return FHIR.Dosage{\r\n text: dI.text,\r\n patientInstruction: dI.patientInstruction,\r\n timing: dI.timing,\r\n asNeeded: dI.asNeeded,\r\n site: dI.site,\r\n route: dI.route,\r\n method: dI.method,\r\n doseAndRate: MedicationRequestDoseAndRate(dI.doseAndRate)\r\n }\r\n\r\ndefine function MedicationRequestResource(medicationRequest MedicationRequest, profileURLs List<FHIR.canonical>):\r\n medicationRequest m\r\n return MedicationRequest{\r\n id: FHIR.id {value: 'LCR-' + m.id},\r\n meta: MetaElement(medicationRequest, profileURLs),\r\n extension: m.extension,\r\n status: m.status,\r\n statusReason: m.statusReason,\r\n intent: m.intent,\r\n category: m.category,\r\n priority: m.priority,\r\n doNotPerform: m.doNotPerform,\r\n reported: m.reported,\r\n medication: m.medication,\r\n subject: m.subject,\r\n encounter: m.encounter,\r\n authoredOn: m.authoredOn,\r\n requester: m.requester,\r\n recorder: m.recorder,\r\n reasonCode: m.reasonCode,\r\n reasonReference: m.reasonReference,\r\n instantiatesCanonical: m.instantiatesCanonical,\r\n instantiatesUri: m.instantiatesUri,\r\n courseOfTherapyType: m.courseOfTherapyType,\r\n dosageInstruction: MedicationRequestDosageInstruction(m.dosageInstruction)\r\n }\r\n\r\n/* No longer needed but saving in case it's useful later\r\ndefine function PatientIdentifier(identifier List<FHIR.Identifier>):\r\n identifier i\r\n return FHIR.Identifier{\r\n id: i.id,\r\n extension: i.extension,\r\n use: i.use,\r\n type: i.type,\r\n system: i.system,\r\n value: i.value,\r\n period: i.period,\r\n assigner: i.assigner\r\n }*/\r\n\r\ndefine function PatientName(name List<FHIR.HumanName>):\r\n name n\r\n return FHIR.HumanName{\r\n id: n.id,\r\n extension: n.extension,\r\n use: n.use,\r\n text: n.text,\r\n family: n.family,\r\n given: n.given,\r\n prefix: n.prefix,\r\n suffix: n.suffix,\r\n period: n.period\r\n }\r\n\r\ndefine function PatientTelecom(telecom List<FHIR.ContactPoint>):\r\n telecom t\r\n return FHIR.ContactPoint{\r\n system: t.system,\r\n value: t.value,\r\n use: t.use,\r\n rank: t.rank,\r\n period: t.period\r\n }\r\n\r\ndefine function PatientAddress(address List<FHIR.Address>):\r\n address a\r\n return FHIR.Address{\r\n use: a.use,\r\n type: a.type,\r\n text: a.text,\r\n line: a.line,\r\n city: a.city,\r\n district: a.district,\r\n state: a.state,\r\n postalCode: a.postalCode,\r\n country: a.country,\r\n period: a.period\r\n }\r\n\r\ndefine function PatientContact(contact List<FHIR.Patient.Contact>):\r\n contact c\r\n return FHIR.Patient.Contact{\r\n relationship: c.relationship,\r\n name: c.name,\r\n telecom: c.telecom,\r\n address: c.address,\r\n gender: c.gender,\r\n organization: c.organization,\r\n period: c.period\r\n }\r\n\r\ndefine function PatientCommunication(communication List<FHIR.Patient.Communication>):\r\n communication c\r\n return FHIR.Patient.Communication{\r\n language: c.language,\r\n preferred: c.preferred\r\n }\r\n\r\ndefine function PatientLink(link List<FHIR.Patient.Link>):\r\n link l\r\n return FHIR.Patient.Link{\r\n extension: l.extension,\r\n modifierExtension: l.modifierExtension,\r\n other: l.other,\r\n type: l.type\r\n }\r\n\r\ndefine function PatientResource(patient Patient, profileURLs List<FHIR.canonical>):\r\n patient p\r\n return Patient{\r\n id: FHIR.id{value: 'LCR-' + p.id},\r\n meta: MetaElement(p, profileURLs),\r\n extension: GetPatientExtensions(p),\r\n identifier: p.identifier,\r\n active: p.active,\r\n name: PatientName(p.name),\r\n telecom: PatientTelecom(p.telecom),\r\n gender: p.gender,\r\n birthDate: p.birthDate,\r\n deceased: p.deceased,\r\n address: PatientAddress(p.address),\r\n maritalStatus: p.maritalStatus,\r\n multipleBirth: p.multipleBirth,\r\n contact: PatientContact(p.contact),\r\n communication: PatientCommunication(p.communication),\r\n link: PatientLink(p.link)\r\n }\r\n\r\ndefine function ProcedurePerformer(performer List<FHIR.Procedure.Performer>):\r\n performer p\r\n return FHIR.Procedure.Performer{\r\n function: p.function,\r\n actor: p.actor,\r\n onBehalfOf: p.onBehalfOf\r\n }\r\n\r\ndefine function ProcedureFocalDevice(device List<FHIR.Procedure.FocalDevice>):\r\n device d\r\n return FHIR.Procedure.FocalDevice{\r\n action: d.action,\r\n manipulated: d.manipulated\r\n }\r\n\r\ndefine function ProcedureResource(procedure Procedure, profileURLs List<FHIR.canonical>):\r\n procedure p\r\n return Procedure{\r\n id: FHIR.id {value: 'LCR-' + p.id},\r\n meta: MetaElement(p, profileURLs),\r\n extension: p.extension,\r\n instantiatesCanonical: p.instantiatesCanonical,\r\n instantiatesUri: p.instantiatesUri,\r\n basedOn: p.basedOn,\r\n partOf: p.partOf,\r\n status: p.status,\r\n statusReason: p.statusReason,\r\n category: p.category,\r\n code: p.code,\r\n subject: p.subject,\r\n encounter: p.encounter,\r\n performed: p.performed,\r\n recorder: p.recorder,\r\n asserter: p.asserter,\r\n performer: ProcedurePerformer(p.performer),\r\n location: p.location,\r\n reasonCode: p.reasonCode,\r\n reasonReference: p.reasonReference,\r\n bodySite: p.bodySite,\r\n outcome: p.outcome,\r\n report: p.report,\r\n complication: p.complication,\r\n complicationDetail: p.complicationDetail,\r\n followUp: p.followUp,\r\n note: p.note,\r\n focalDevice: ProcedureFocalDevice(p.focalDevice),\r\n usedReference: p.usedReference,\r\n usedCode: p.usedCode\r\n }\r\n\r\ndefine function ServiceRequestResource(serviceRequest ServiceRequest, profileURLs List<FHIR.canonical>):\r\n serviceRequest sR\r\n return ServiceRequest{\r\n id: FHIR.id {value: 'LCR-' + sR.id},\r\n meta: MetaElement(sR, profileURLs),\r\n extension: sR.extension,\r\n instantiatesCanonical: sR.instantiatesCanonical,\r\n instantiatesUri: sR.instantiatesUri,\r\n basedOn: sR.basedOn,\r\n replaces: sR.replaces,\r\n requisition: sR.requisition,\r\n status: sR.status,\r\n intent: sR.intent,\r\n category: sR.category,\r\n priority: sR.priority,\r\n doNotPerform: sR.doNotPerform,\r\n code: sR.code,\r\n orderDetail: sR.orderDetail,\r\n quantity: sR.quantity,\r\n subject: sR.subject,\r\n encounter: sR.encounter,\r\n occurrence: sR.occurrence,\r\n asNeeded: sR.asNeeded,\r\n authoredOn: sR.authoredOn,\r\n requester: sR.requester,\r\n performerType: sR.performerType,\r\n performer: sR.performer,\r\n locationCode: sR.locationCode,\r\n locationReference: sR.locationReference,\r\n reasonCode: sR.reasonCode,\r\n reasonReference: sR.reasonReference,\r\n insurance: sR.insurance,\r\n supportingInfo: sR.supportingInfo,\r\n specimen: sR.specimen,\r\n bodySite: sR.bodySite,\r\n note: sR.note,\r\n patientInstruction: sR.patientInstruction,\r\n relevantHistory: sR.relevantHistory\r\n }\r\n\r\ndefine function SpecimenCollection(collection FHIR.Specimen.Collection):\r\n collection c\r\n return FHIR.Specimen.Collection{\r\n collector: c.collector,\r\n collected: c.collected,\r\n "duration": c."duration",\r\n quantity: c.quantity,\r\n method: c.method,\r\n bodySite: c.bodySite,\r\n fastingStatus: c.fastingStatus\r\n }\r\n\r\ndefine function SpecimenProcessing(processing List<FHIR.Specimen.Processing>):\r\n processing p\r\n return FHIR.Specimen.Processing{\r\n description: p.description,\r\n procedure: p.procedure,\r\n additive: p.additive,\r\n time: p.time\r\n }\r\n\r\ndefine function SpecimenContainer(container List<FHIR.Specimen.Container>):\r\n container c\r\n return FHIR.Specimen.Container{\r\n description: c.description,\r\n type: c.type,\r\n capacity: c.capacity,\r\n specimenQuantity: c.specimenQuantity,\r\n additive: c.additive\r\n }\r\n\r\ndefine function SpecimenResource(specimen Specimen, profileURLs List<FHIR.canonical>):\r\n specimen s\r\n return Specimen{\r\n id: FHIR.id {value: 'LCR-' + s.id},\r\n meta: MetaElement(s, profileURLs),\r\n extension: s.extension,\r\n identifier: s.identifier,\r\n accessionIdentifier: s.accessionIdentifier,\r\n status: s.status,\r\n type: s.type,\r\n subject: s.subject,\r\n receivedTime: s.receivedTime,\r\n parent: s.parent,\r\n request: s.request,\r\n collection: SpecimenCollection(s.collection),\r\n processing: SpecimenProcessing(s.processing),\r\n container: SpecimenContainer(s.container),\r\n condition: s.condition,\r\n note: s.note\r\n }\r\n\r\ndefine function "OperationOutcomeResource"(errorId String, resourceId FHIR.id, message String):\r\n OperationOutcome{\r\n id: FHIR.id{value: errorId},\r\n issue: {\r\n FHIR.OperationOutcome.Issue{\r\n severity: FHIR.IssueSeverity{value: 'error'},\r\n code: FHIR.IssueType{value: 'exception'},\r\n details: \r\n FHIR.CodeableConcept{\r\n coding: {\r\n Coding{\r\n system: uri{value: 'https://lantanagroup.com/validation-error'},\r\n code: code{value: 'Error'},\r\n display: string{value: 'Resource ' + resourceId + ' failed validation: ' + message}\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>\n</div>"
},
"contained" : [
{
"resourceType" : "Parameters",
"id" : "options",
"parameter" : [
{
"name" : "translatorVersion",
"valueString" : "3.27.0"
},
{
"name" : "option",
"valueString" : "EnableDateRangeOptimization"
},
{
"name" : "option",
"valueString" : "EnableAnnotations"
},
{
"name" : "option",
"valueString" : "EnableLocators"
},
{
"name" : "option",
"valueString" : "DisableListDemotion"
},
{
"name" : "option",
"valueString" : "DisableListPromotion"
},
{
"name" : "analyzeDataRequirements",
"valueBoolean" : false
},
{
"name" : "collapseDataRequirements",
"valueBoolean" : true
},
{
"name" : "compatibilityLevel",
"valueString" : "1.5"
},
{
"name" : "enableCqlOnly",
"valueBoolean" : false
},
{
"name" : "errorLevel",
"valueString" : "Info"
},
{
"name" : "signatureLevel",
"valueString" : "Overloads"
},
{
"name" : "validateUnits",
"valueBoolean" : true
},
{
"name" : "verifyOnly",
"valueBoolean" : false
}
]
}
],
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions",
"valueReference" : {
"reference" : "#options"
}
},
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
🔗 "reference" : "Device/cqf-tooling"
}
}
],
"url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation",
"version" : "2.0.0",
"name" : "SharedResourceCreation",
"status" : "draft",
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-05-15T17:27:39-04:00",
"publisher" : "CDC National Healthcare Safety Network (NHSN)",
"contact" : [
{
"name" : "CDC National Healthcare Safety Network (NHSN)",
"telecom" : [
{
"system" : "url",
"value" : "http://www.cdc.gov/nhsn"
},
{
"system" : "email",
"value" : "nhsn@cdc.gov"
}
]
}
],
"jurisdiction" : [
{
"coding" : [
{
"system" : "urn:iso:std:iso:3166",
"code" : "US"
}
]
}
],
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "Library FHIRHelpers",
"resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2"
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "bGlicmFyeSBTaGFyZWRSZXNvdXJjZUNyZWF0aW9uIHZlcnNpb24gJzAuMS4wMTAnDQoNCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjInDQoNCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnDQoNCmRlZmluZSBmdW5jdGlvbiAiR2V0UGF0aWVudEV4dGVuc2lvbnMiKGRvbWFpblJlc291cmNlIERvbWFpblJlc291cmNlKToNCiAgZG9tYWluUmVzb3VyY2UuZXh0ZW5zaW9uIEUNCiAgd2hlcmUgRS51cmwgPSAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtY29yZS1yYWNlJw0KICAgIG9yIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtZXRobmljaXR5Jw0KICAgIG9yIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtdHJpYmFsLWFmZmlsaWF0aW9uJw0KICAgIG9yIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtYmlydGhzZXgnDQogICAgb3IgRS51cmwgPSAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtY29yZS1zZXgnDQogICAgb3IgRS51cmwgPSAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9saW5rLW9yaWdpbmFsLXJlc291cmNlLWlkLWV4dGVuc2lvbicNCiAgcmV0dXJuIEUNCg0KZGVmaW5lIGZ1bmN0aW9uICJNZXRhRWxlbWVudCIocmVzb3VyY2UgUmVzb3VyY2UsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgcmVzb3VyY2Ugcg0KICByZXR1cm4gRkhJUi5NZXRhew0KICAgIGV4dGVuc2lvbjogci5tZXRhLmV4dGVuc2lvbiwNCiAgICB2ZXJzaW9uSWQ6IHIubWV0YS52ZXJzaW9uSWQsDQogICAgbGFzdFVwZGF0ZWQ6IHIubWV0YS5sYXN0VXBkYXRlZCwNCiAgICBwcm9maWxlOiBwcm9maWxlVVJMcywNCiAgICBzZWN1cml0eTogci5tZXRhLnNlY3VyaXR5LA0KICAgIHRhZzogci5tZXRhLnRhZw0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25TdGFnZShzdGFnZSBMaXN0PEZISVIuQ29uZGl0aW9uLlN0YWdlPik6DQogIHN0YWdlIHMNCiAgcmV0dXJuIEZISVIuQ29uZGl0aW9uLlN0YWdlew0KICAgIHN1bW1hcnk6IHMuc3VtbWFyeSwNCiAgICBhc3Nlc3NtZW50OiBzLmFzc2Vzc21lbnQsDQogICAgdHlwZTogcy50eXBlDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIENvbmRpdGlvbkV2aWRlbmNlKGV2aWRlbmNlIExpc3Q8RkhJUi5Db25kaXRpb24uRXZpZGVuY2U+KToNCiAgZXZpZGVuY2UgZQ0KICByZXR1cm4gRkhJUi5Db25kaXRpb24uRXZpZGVuY2V7DQogICAgY29kZTogZS5jb2RlLA0KICAgIGRldGFpbDogZS5kZXRhaWwNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gQ29uZGl0aW9uUmVzb3VyY2UoY29uZGl0aW9uIENvbmRpdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOg0KICBjb25kaXRpb24gYw0KICByZXR1cm4gQ29uZGl0aW9uew0KICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgYy5pZH0sDQogICAgbWV0YTogTWV0YUVsZW1lbnQoYywgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sDQogICAgY2xpbmljYWxTdGF0dXM6IGMuY2xpbmljYWxTdGF0dXMsDQogICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBjLnZlcmlmaWNhdGlvblN0YXR1cywNCiAgICBjYXRlZ29yeTogYy5jYXRlZ29yeSwNCiAgICBzZXZlcml0eTogYy5zZXZlcml0eSwNCiAgICBjb2RlOiBjLmNvZGUsDQogICAgYm9keVNpdGU6IGMuYm9keVNpdGUsDQogICAgc3ViamVjdDogYy5zdWJqZWN0LA0KICAgIGVuY291bnRlcjogYy5lbmNvdW50ZXIsDQogICAgb25zZXQ6IGMub25zZXQsDQogICAgYWJhdGVtZW50OiBjLmFiYXRlbWVudCwNCiAgICByZWNvcmRlZERhdGU6IGMucmVjb3JkZWREYXRlLA0KICAgIHN0YWdlOiBDb25kaXRpb25TdGFnZShjLnN0YWdlKSwNCiAgICBldmlkZW5jZTogQ29uZGl0aW9uRXZpZGVuY2UoYy5ldmlkZW5jZSksDQogICAgbm90ZTogYy5ub3RlDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIENvdmVyYWdlQ2xhc3MoY2xhc3MgTGlzdDxGSElSLkNvdmVyYWdlLkNsYXNzPik6DQogIGNsYXNzIGMNCiAgcmV0dXJuIEZISVIuQ292ZXJhZ2UuQ2xhc3N7DQogICAgdmFsdWU6IGMudmFsdWUsDQogICAgbmFtZTogYy5uYW1lDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIENvdmVyYWdlUmVzb3VyY2UoY292ZXJhZ2UgQ292ZXJhZ2UsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgY292ZXJhZ2UgYw0KICByZXR1cm4gQ292ZXJhZ2V7DQogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGMuaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KGMsIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IGMuZXh0ZW5zaW9uLA0KICAgIHN0YXR1czogYy5zdGF0dXMsDQogICAgdHlwZTogYy50eXBlLA0KICAgIHBvbGljeUhvbGRlcjogYy5wb2xpY3lIb2xkZXIsDQogICAgc3Vic2NyaWJlcjogYy5zdWJzY3JpYmVyLA0KICAgIHN1YnNjcmliZXJJZDogYy5zdWJzY3JpYmVySWQsDQogICAgYmVuZWZpY2lhcnk6IGMuYmVuZWZpY2lhcnksDQogICAgZGVwZW5kZW50OiBjLmRlcGVuZGVudCwNCiAgICByZWxhdGlvbnNoaXA6IGMucmVsYXRpb25zaGlwLA0KICAgIHBlcmlvZDogYy5wZXJpb2QsDQogICAgcGF5b3I6IGMucGF5b3IsDQogICAgY2xhc3M6IENvdmVyYWdlQ2xhc3MoYy5jbGFzcyksDQogICAgb3JkZXI6IGMub3JkZXIsDQogICAgbmV0d29yazogYy5uZXR3b3JrLA0KICAgIHN1YnJvZ2F0aW9uOiBjLnN1YnJvZ2F0aW9uLA0KICAgIGNvbnRyYWN0OiBjLmNvbnRyYWN0DQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIERpYWdub3N0aWNSZXBvcnRDb2RpbmcoY29kaW5nIExpc3Q8Q29kaW5nPik6DQogIGNvZGluZyBjDQogIHJldHVybiBDb2Rpbmd7DQogICAgc3lzdGVtOiBjLnN5c3RlbSwNCiAgICB2ZXJzaW9uOiBjLnZlcnNpb24sDQogICAgY29kZTogYy5jb2RlLA0KICAgIGRpc3BsYXk6IGMuZGlzcGxheSwNCiAgICB1c2VyU2VsZWN0ZWQ6IGMudXNlclNlbGVjdGVkDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIERpYWdub3N0aWNSZXBvcnRDYXRlZ29yeShjYXRlZ29yeSBMaXN0PENvZGVhYmxlQ29uY2VwdD4pOg0KICBjYXRlZ29yeSBjDQogIHJldHVybiBDb2RlYWJsZUNvbmNlcHR7DQogICAgY29kaW5nOiBEaWFnbm9zdGljUmVwb3J0Q29kaW5nKGMuY29kaW5nKQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0TGFiUmVzb3VyY2UoZGlhZ25vc3RpY1JlcG9ydCBEaWFnbm9zdGljUmVwb3J0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6DQogIGRpYWdub3N0aWNSZXBvcnQgZA0KICByZXR1cm4gRGlhZ25vc3RpY1JlcG9ydHsNCiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZC5pZH0sDQogICAgbWV0YTogTWV0YUVsZW1lbnQoZCwgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogZC5leHRlbnNpb24sDQogICAgYmFzZWRPbjogZC5iYXNlZE9uLA0KICAgIHN0YXR1czogZC5zdGF0dXMsDQogICAgY2F0ZWdvcnk6IERpYWdub3N0aWNSZXBvcnRDYXRlZ29yeShkLmNhdGVnb3J5KSwNCiAgICBjb2RlOiBkLmNvZGUsDQogICAgc3ViamVjdDogZC5zdWJqZWN0LA0KICAgIGVuY291bnRlcjogZC5lbmNvdW50ZXIsDQogICAgZWZmZWN0aXZlOiBkLmVmZmVjdGl2ZSwNCiAgICBpc3N1ZWQ6IGQuaXNzdWVkLA0KICAgIHBlcmZvcm1lcjogZC5wZXJmb3JtZXIsDQogICAgcmVzdWx0c0ludGVycHJldGVyOiBkLnJlc3VsdHNJbnRlcnByZXRlciwNCiAgICBzcGVjaW1lbjogZC5zcGVjaW1lbiwNCiAgICByZXN1bHQ6IGQucmVzdWx0LA0KICAgIGNvbmNsdXNpb246IGQuY29uY2x1c2lvbiwNCiAgICBjb25jbHVzaW9uQ29kZTogZC5jb25jbHVzaW9uQ29kZQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJJZGVudGlmaWVyKGlkZW50aWZpZXIgTGlzdDxGSElSLklkZW50aWZpZXI+KToNCiAgaWRlbnRpZmllciBpDQogIHJldHVybiBGSElSLklkZW50aWZpZXJ7DQogICAgdXNlOiBpLnVzZSwNCiAgICB0eXBlOiBpLnR5cGUsDQogICAgc3lzdGVtOiBpLnN5c3RlbSwNCiAgICB2YWx1ZTogaS52YWx1ZSwNCiAgICBwZXJpb2Q6IGkucGVyaW9kDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlclN0YXR1c0hpc3Rvcnkoc3RhdHVzSGlzdG9yeSBMaXN0PEZISVIuRW5jb3VudGVyLlN0YXR1c0hpc3Rvcnk+KToNCiAgc3RhdHVzSGlzdG9yeSBzSA0KICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuU3RhdHVzSGlzdG9yeXsNCiAgICBzdGF0dXM6IHNILnN0YXR1cywNCiAgICBwZXJpb2Q6IHNILnBlcmlvZA0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJDbGFzc0hpc3RvcnkoY2xhc3NIaXN0b3J5IExpc3Q8RkhJUi5FbmNvdW50ZXIuQ2xhc3NIaXN0b3J5Pik6DQogIGNsYXNzSGlzdG9yeSBjSA0KICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuQ2xhc3NIaXN0b3J5ew0KICAgIGNsYXNzOiBjSC5jbGFzcywNCiAgICBwZXJpb2Q6IGNILnBlcmlvZA0KICB9DQoNCi8qTm8gbG9uZ2VyIG5lZWRlZCBidXQgc2F2aW5nIGZvciBwb3RlbnRpYWwgZnV0dXJlIHVzZQ0KZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlclBhcnRpY2lwYW50KHBhcnRpY2lwYW50IExpc3Q8RkhJUi5FbmNvdW50ZXIuUGFydGljaXBhbnQ+KToNCiAgcGFydGljaXBhbnQgcA0KICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuUGFydGljaXBhbnR7DQogICAgdHlwZTogcC50eXBlLA0KICAgIHBlcmlvZDogcC5wZXJpb2QsDQogICAgaW5kaXZpZHVhbDogcC5pbmRpdmlkdWFsDQogIH0qLw0KDQpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyRGlhZ25vc2lzKGRpYWdub3NpcyBMaXN0PEZISVIuRW5jb3VudGVyLkRpYWdub3Npcz4pOg0KICBkaWFnbm9zaXMgZA0KICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuRGlhZ25vc2lzew0KICAgIGNvbmRpdGlvbjogZC5jb25kaXRpb24sDQogICAgdXNlOiBkLnVzZSwNCiAgICByYW5rOiBkLnJhbmsNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVySG9zcGl0YWxpemF0aW9uKGhvc3BpdGFsaXphdGlvbiBGSElSLkVuY291bnRlci5Ib3NwaXRhbGl6YXRpb24pOg0KICBob3NwaXRhbGl6YXRpb24gaA0KICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuSG9zcGl0YWxpemF0aW9uew0KICAgIHByZUFkbWlzc2lvbklkZW50aWZpZXI6IGgucHJlQWRtaXNzaW9uSWRlbnRpZmllciwNCiAgICBvcmlnaW46IGgub3JpZ2luLA0KICAgIGFkbWl0U291cmNlOiBoLmFkbWl0U291cmNlLA0KICAgIHJlQWRtaXNzaW9uOiBoLnJlQWRtaXNzaW9uLA0KICAgIGRpZXRQcmVmZXJlbmNlOiBoLmRpZXRQcmVmZXJlbmNlLA0KICAgIHNwZWNpYWxDb3VydGVzeTogaC5zcGVjaWFsQ291cnRlc3ksDQogICAgc3BlY2lhbEFycmFuZ2VtZW50OiBoLnNwZWNpYWxBcnJhbmdlbWVudCwNCiAgICBkZXN0aW5hdGlvbjogaC5kZXN0aW5hdGlvbiwNCiAgICBkaXNjaGFyZ2VEaXNwb3NpdGlvbjogaC5kaXNjaGFyZ2VEaXNwb3NpdGlvbg0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJMb2NhdGlvbihsb2NhdGlvbiBMaXN0PEZISVIuRW5jb3VudGVyLkxvY2F0aW9uPik6DQogIGxvY2F0aW9uIGwNCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkxvY2F0aW9uew0KICAgIGxvY2F0aW9uOiBsLmxvY2F0aW9uLA0KICAgIHN0YXR1czogbC5zdGF0dXMsDQogICAgcGh5c2ljYWxUeXBlOiBsLnBoeXNpY2FsVHlwZSwNCiAgICBwZXJpb2Q6IGwucGVyaW9kDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlclJlc291cmNlKGVuY291bnRlciBFbmNvdW50ZXIsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgZW5jb3VudGVyIGUNCiAgcmV0dXJuIEVuY291bnRlcnsNCiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZS5pZH0sDQogICAgbWV0YTogTWV0YUVsZW1lbnQoZSwgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogZS5leHRlbnNpb24sDQogICAgaWRlbnRpZmllcjogRW5jb3VudGVySWRlbnRpZmllcihlLmlkZW50aWZpZXIpLA0KICAgIHN0YXR1czogZS5zdGF0dXMsDQogICAgc3RhdHVzSGlzdG9yeTogRW5jb3VudGVyU3RhdHVzSGlzdG9yeShlLnN0YXR1c0hpc3RvcnkpLA0KICAgIGNsYXNzOiBlLmNsYXNzLA0KICAgIGNsYXNzSGlzdG9yeTogRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGUuY2xhc3NIaXN0b3J5KSwNCiAgICB0eXBlOiBlLnR5cGUsDQogICAgc2VydmljZVR5cGU6IGUuc2VydmljZVR5cGUsDQogICAgcHJpb3JpdHk6IGUucHJpb3JpdHksDQogICAgc3ViamVjdDogZS5zdWJqZWN0LA0KICAgIHBlcmlvZDogZS5wZXJpb2QsDQogICAgbGVuZ3RoOiBlLmxlbmd0aCwNCiAgICByZWFzb25Db2RlOiBlLnJlYXNvbkNvZGUsDQogICAgcmVhc29uUmVmZXJlbmNlOiBlLnJlYXNvblJlZmVyZW5jZSwNCiAgICBkaWFnbm9zaXM6IEVuY291bnRlckRpYWdub3NpcyhlLmRpYWdub3NpcyksDQogICAgYWNjb3VudDogZS5hY2NvdW50LA0KICAgIGhvc3BpdGFsaXphdGlvbjogRW5jb3VudGVySG9zcGl0YWxpemF0aW9uKGUuaG9zcGl0YWxpemF0aW9uKSwNCiAgICBsb2NhdGlvbjogRW5jb3VudGVyTG9jYXRpb24oZS5sb2NhdGlvbiksDQogICAgcGFydE9mOiBlLnBhcnRPZg0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToNCiAgY29kaW5nIGMNCiAgcmV0dXJuIENvZGluZ3sNCiAgICBpZDogYy5pZCwNCiAgICBleHRlbnNpb246IGMuZXh0ZW5zaW9uLA0KICAgIHN5c3RlbTogYy5zeXN0ZW0sDQogICAgdmVyc2lvbjogYy52ZXJzaW9uLA0KICAgIGNvZGU6IGMuY29kZSwNCiAgICBkaXNwbGF5OiBjLmRpc3BsYXksDQogICAgdXNlclNlbGVjdGVkOiBjLnVzZXJTZWxlY3RlZA0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNhdGVnb3J5KGNhdGVnb3J5IExpc3Q8Q29kZWFibGVDb25jZXB0Pik6DQogIGNhdGVnb3J5IGMNCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsNCiAgICBjb2Rpbmc6IE9ic2VydmF0aW9uTGFiQ29kaW5nKGMuY29kaW5nKSwNCiAgICB0ZXh0OiBjLnRleHQNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShyZWZlcmVuY2VSYW5nZSBMaXN0PEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2U+KToNCiAgcmVmZXJlbmNlUmFuZ2UgclINCiAgcmV0dXJuIEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2V7DQogICAgbG93OiByUi5sb3csDQogICAgaGlnaDogclIuaGlnaCwNCiAgICB0eXBlOiByUi50eXBlLA0KICAgIGFwcGxpZXNUbzogclIuYXBwbGllc1RvLA0KICAgIGFnZTogclIuYWdlLA0KICAgIHRleHQ6IHJSLnRleHQNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25Db21wb25lbnQoY29tcG9uZW50IExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5Db21wb25lbnQ+KToNCiAgY29tcG9uZW50IGMNCiAgcmV0dXJuIEZISVIuT2JzZXJ2YXRpb24uQ29tcG9uZW50ew0KICAgIGNvZGU6IGMuY29kZSwNCiAgICB2YWx1ZTogYy52YWx1ZSwNCiAgICBkYXRhQWJzZW50UmVhc29uOiBjLmRhdGFBYnNlbnRSZWFzb24sDQogICAgaW50ZXJwcmV0YXRpb246IGMuaW50ZXJwcmV0YXRpb24sDQogICAgcmVmZXJlbmNlUmFuZ2U6IGMucmVmZXJlbmNlUmFuZ2UNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25MYWJSZXNvdXJjZShvYnNlcnZhdGlvbiBPYnNlcnZhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOg0KICBvYnNlcnZhdGlvbiBvDQogIHJldHVybiBPYnNlcnZhdGlvbnsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG8uaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KG8sIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IG8uZXh0ZW5zaW9uLA0KICAgIGJhc2VkT246IG8uYmFzZWRPbiwNCiAgICBwYXJ0T2Y6IG8ucGFydE9mLA0KICAgIHN0YXR1czogby5zdGF0dXMsDQogICAgY2F0ZWdvcnk6IE9ic2VydmF0aW9uTGFiQ2F0ZWdvcnkoby5jYXRlZ29yeSksDQogICAgY29kZTogby5jb2RlLA0KICAgIHN1YmplY3Q6IG8uc3ViamVjdCwNCiAgICBmb2N1czogby5mb2N1cywNCiAgICBlbmNvdW50ZXI6IG8uZW5jb3VudGVyLA0KICAgIGVmZmVjdGl2ZTogby5lZmZlY3RpdmUsDQogICAgaXNzdWVkOiBvLmlzc3VlZCwNCiAgICBwZXJmb3JtZXI6IG8ucGVyZm9ybWVyLA0KICAgIHZhbHVlOiBvLnZhbHVlLA0KICAgIGRhdGFBYnNlbnRSZWFzb246IG8uZGF0YUFic2VudFJlYXNvbiwNCiAgICBpbnRlcnByZXRhdGlvbjogby5pbnRlcnByZXRhdGlvbiwNCiAgICBub3RlOiBvLm5vdGUsDQogICAgYm9keVNpdGU6IG8uYm9keVNpdGUsDQogICAgbWV0aG9kOiBvLm1ldGhvZCwNCiAgICBzcGVjaW1lbjogby5zcGVjaW1lbiwNCiAgICBkZXZpY2U6IG8uZGV2aWNlLA0KICAgIHJlZmVyZW5jZVJhbmdlOiBPYnNlcnZhdGlvblJlZmVyZW5jZVJhbmdlKG8ucmVmZXJlbmNlUmFuZ2UpLA0KICAgIGhhc01lbWJlcjogby5oYXNNZW1iZXIsDQogICAgZGVyaXZlZEZyb206IG8uZGVyaXZlZEZyb20sDQogICAgY29tcG9uZW50OiBPYnNlcnZhdGlvbkNvbXBvbmVudChvLmNvbXBvbmVudCkNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gTG9jYXRpb25BZGRyZXNzKGFkZHJlc3MgRkhJUi5BZGRyZXNzKToNCiAgYWRkcmVzcyBhDQogIHJldHVybiBGSElSLkFkZHJlc3N7DQogICAgdXNlOiBhLnVzZSwNCiAgICB0eXBlOiBhLnR5cGUsDQogICAgdGV4dDogYS50ZXh0LA0KICAgIGxpbmU6IGEubGluZSwNCiAgICBjaXR5OiBhLmNpdHksDQogICAgZGlzdHJpY3Q6IGEuZGlzdHJpY3QsDQogICAgc3RhdGU6IGEuc3RhdGUsDQogICAgcG9zdGFsQ29kZTogYS5wb3N0YWxDb2RlLA0KICAgIGNvdW50cnk6IGEuY291bnRyeSwNCiAgICBwZXJpb2Q6IGEucGVyaW9kDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uUG9zaXRpb24ocG9zaXRpb24gRkhJUi5Mb2NhdGlvbi5Qb3NpdGlvbik6DQogIHBvc2l0aW9uIHANCiAgcmV0dXJuIEZISVIuTG9jYXRpb24uUG9zaXRpb257DQogICAgbG9uZ2l0dWRlOiBwLmxvbmdpdHVkZSwNCiAgICBsYXRpdHVkZTogcC5sYXRpdHVkZSwNCiAgICBhbHRpdHVkZTogcC5hbHRpdHVkZQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBMb2NhdGlvbkhvdXJzT2ZPcGVyYXRpb24oaG91cnNPZk9wZXJhdGlvbiBMaXN0PEZISVIuTG9jYXRpb24uSG91cnNPZk9wZXJhdGlvbj4pOg0KICBob3Vyc09mT3BlcmF0aW9uIGhPTw0KICByZXR1cm4gRkhJUi5Mb2NhdGlvbi5Ib3Vyc09mT3BlcmF0aW9uew0KICAgIGRheXNPZldlZWs6IGhPTy5kYXlzT2ZXZWVrLA0KICAgIGFsbERheTogaE9PLmFsbERheSwNCiAgICBvcGVuaW5nVGltZTogaE9PLm9wZW5pbmdUaW1lLA0KICAgIGNsb3NpbmdUaW1lOiBoT08uY2xvc2luZ1RpbWUNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gTG9jYXRpb25SZXNvdXJjZShsb2NhdGlvbiBMb2NhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOg0KICBsb2NhdGlvbiBsDQogIHJldHVybiBMb2NhdGlvbnsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIGwuaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KGwsIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IGwuZXh0ZW5zaW9uLA0KICAgIHN0YXR1czogbC5zdGF0dXMsDQogICAgb3BlcmF0aW9uYWxTdGF0dXM6IGwub3BlcmF0aW9uYWxTdGF0dXMsDQogICAgbmFtZTogbC5uYW1lLA0KICAgIGFsaWFzOiBsLmFsaWFzLA0KICAgIGRlc2NyaXB0aW9uOiBsLmRlc2NyaXB0aW9uLA0KICAgIG1vZGU6IGwubW9kZSwNCiAgICB0eXBlOiBsLnR5cGUsDQogICAgdGVsZWNvbTogbC50ZWxlY29tLA0KICAgIGFkZHJlc3M6IExvY2F0aW9uQWRkcmVzcyhsLmFkZHJlc3MpLA0KICAgIHBoeXNpY2FsVHlwZTogbC5waHlzaWNhbFR5cGUsDQogICAgcG9zaXRpb246IExvY2F0aW9uUG9zaXRpb24obC5wb3NpdGlvbiksDQogICAgbWFuYWdpbmdPcmdhbml6YXRpb246IGwubWFuYWdpbmdPcmdhbml6YXRpb24sDQogICAgcGFydE9mOiBsLnBhcnRPZiwNCiAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbkhvdXJzT2ZPcGVyYXRpb24obC5ob3Vyc09mT3BlcmF0aW9uKSwNCiAgICBhdmFpbGFiaWxpdHlFeGNlcHRpb25zOiBsLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsDQogICAgZW5kcG9pbnQ6IGwuZW5kcG9pbnQNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkluZ3JlZGllbnQoaW5ncmVkaWVudCBMaXN0PEZISVIuTWVkaWNhdGlvbi5JbmdyZWRpZW50Pik6DQogIGluZ3JlZGllbnQgaQ0KICByZXR1cm4gRkhJUi5NZWRpY2F0aW9uLkluZ3JlZGllbnR7DQogICAgaXRlbTogaS5pdGVtLA0KICAgIHN0cmVuZ3RoOiBpLnN0cmVuZ3RoDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25CYXRjaChiYXRjaCBGSElSLk1lZGljYXRpb24uQmF0Y2gpOg0KICBiYXRjaCBiDQogIHJldHVybiBGSElSLk1lZGljYXRpb24uQmF0Y2h7DQogICAgbG90TnVtYmVyOiBiLmxvdE51bWJlciwNCiAgICBleHBpcmF0aW9uRGF0ZTogYi5leHBpcmF0aW9uRGF0ZQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVzb3VyY2UobWVkaWNhdGlvbiBNZWRpY2F0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6DQogIG1lZGljYXRpb24gbQ0KICByZXR1cm4gTWVkaWNhdGlvbnsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG0uaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KG0sIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLA0KICAgIGNvZGU6IG0uY29kZSwNCiAgICBzdGF0dXM6IG0uc3RhdHVzLA0KICAgIG1hbnVmYWN0dXJlcjogbS5tYW51ZmFjdHVyZXIsDQogICAgZm9ybTogbS5mb3JtLA0KICAgIGFtb3VudDogbS5hbW91bnQsDQogICAgaW5ncmVkaWVudDogTWVkaWNhdGlvbkluZ3JlZGllbnQobS5pbmdyZWRpZW50KSwNCiAgICBiYXRjaDogTWVkaWNhdGlvbkJhdGNoKG0uYmF0Y2gpDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblBlcmZvcm1lcihwZXJmb3JtZXIgTGlzdDxGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5QZXJmb3JtZXI+KToNCiAgcGVyZm9ybWVyIHANCiAgcmV0dXJuIEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLlBlcmZvcm1lcnsNCiAgICBmdW5jdGlvbjogcC5mdW5jdGlvbiwNCiAgICBhY3RvcjogcC5hY3Rvcg0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Eb3NhZ2UoZG9zYWdlIEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLkRvc2FnZSk6DQogIGRvc2FnZSBkDQogIHJldHVybiBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5Eb3NhZ2V7DQogICAgdGV4dDogZC50ZXh0LA0KICAgIHNpdGU6IGQuc2l0ZSwNCiAgICByb3V0ZTogZC5yb3V0ZSwNCiAgICBtZXRob2Q6IGQubWV0aG9kLA0KICAgIGRvc2U6IGQuZG9zZSwNCiAgICByYXRlOiBkLnJhdGUNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUmVzb3VyY2UobWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOg0KICBtZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24gbQ0KICByZXR1cm4gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uew0KICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sDQogICAgbWV0YTogTWV0YUVsZW1lbnQobSwgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogbS5leHRlbnNpb24sDQogICAgaW5zdGFudGlhdGVzOiBtLmluc3RhbnRpYXRlcywNCiAgICBwYXJ0T2Y6IG0ucGFydE9mLA0KICAgIHN0YXR1czogbS5zdGF0dXMsDQogICAgc3RhdHVzUmVhc29uOiBtLnN0YXR1c1JlYXNvbiwNCiAgICBjYXRlZ29yeTogbS5jYXRlZ29yeSwNCiAgICBtZWRpY2F0aW9uOiBtLm1lZGljYXRpb24sDQogICAgc3ViamVjdDogbS5zdWJqZWN0LA0KICAgIGNvbnRleHQ6IG0uY29udGV4dCwNCiAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IG0uc3VwcG9ydGluZ0luZm9ybWF0aW9uLA0KICAgIGVmZmVjdGl2ZTogbS5lZmZlY3RpdmUsDQogICAgcGVyZm9ybWVyOiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25QZXJmb3JtZXIobS5wZXJmb3JtZXIpLA0KICAgIHJlYXNvbkNvZGU6IG0ucmVhc29uQ29kZSwNCiAgICByZWFzb25SZWZlcmVuY2U6IG0ucmVhc29uUmVmZXJlbmNlLA0KICAgIHJlcXVlc3Q6IG0ucmVxdWVzdCwNCiAgICBkZXZpY2U6IG0uZGV2aWNlLA0KICAgIG5vdGU6IG0ubm90ZSwNCiAgICBkb3NhZ2U6IE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbkRvc2FnZShtLmRvc2FnZSksDQogICAgZXZlbnRIaXN0b3J5OiBtLmV2ZW50SGlzdG9yeQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVxdWVzdERvc2VBbmRSYXRlKGRvc2VBbmRSYXRlIExpc3Q8RkhJUi5Eb3NhZ2UuRG9zZUFuZFJhdGU+KToNCiAgZG9zZUFuZFJhdGUgZFINCiAgcmV0dXJuIEZISVIuRG9zYWdlLkRvc2VBbmRSYXRlew0KICAgIHR5cGU6IGRSLnR5cGUsDQogICAgZG9zZTogZFIuZG9zZSwNCiAgICByYXRlOiBkUi5yYXRlDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXF1ZXN0RG9zYWdlSW5zdHJ1Y3Rpb24oZG9zYWdlSW5zdHJ1Y3Rpb24gTGlzdDxGSElSLkRvc2FnZT4pOg0KICBkb3NhZ2VJbnN0cnVjdGlvbiBkSQ0KICByZXR1cm4gRkhJUi5Eb3NhZ2V7DQogICAgdGV4dDogZEkudGV4dCwNCiAgICBwYXRpZW50SW5zdHJ1Y3Rpb246IGRJLnBhdGllbnRJbnN0cnVjdGlvbiwNCiAgICB0aW1pbmc6IGRJLnRpbWluZywNCiAgICBhc05lZWRlZDogZEkuYXNOZWVkZWQsDQogICAgc2l0ZTogZEkuc2l0ZSwNCiAgICByb3V0ZTogZEkucm91dGUsDQogICAgbWV0aG9kOiBkSS5tZXRob2QsDQogICAgZG9zZUFuZFJhdGU6IE1lZGljYXRpb25SZXF1ZXN0RG9zZUFuZFJhdGUoZEkuZG9zZUFuZFJhdGUpDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXF1ZXN0UmVzb3VyY2UobWVkaWNhdGlvblJlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgbWVkaWNhdGlvblJlcXVlc3QgbQ0KICByZXR1cm4gTWVkaWNhdGlvblJlcXVlc3R7DQogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBtLmlkfSwNCiAgICBtZXRhOiBNZXRhRWxlbWVudChtZWRpY2F0aW9uUmVxdWVzdCwgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogbS5leHRlbnNpb24sDQogICAgc3RhdHVzOiBtLnN0YXR1cywNCiAgICBzdGF0dXNSZWFzb246IG0uc3RhdHVzUmVhc29uLA0KICAgIGludGVudDogbS5pbnRlbnQsDQogICAgY2F0ZWdvcnk6IG0uY2F0ZWdvcnksDQogICAgcHJpb3JpdHk6IG0ucHJpb3JpdHksDQogICAgZG9Ob3RQZXJmb3JtOiBtLmRvTm90UGVyZm9ybSwNCiAgICByZXBvcnRlZDogbS5yZXBvcnRlZCwNCiAgICBtZWRpY2F0aW9uOiBtLm1lZGljYXRpb24sDQogICAgc3ViamVjdDogbS5zdWJqZWN0LA0KICAgIGVuY291bnRlcjogbS5lbmNvdW50ZXIsDQogICAgYXV0aG9yZWRPbjogbS5hdXRob3JlZE9uLA0KICAgIHJlcXVlc3RlcjogbS5yZXF1ZXN0ZXIsDQogICAgcmVjb3JkZXI6IG0ucmVjb3JkZXIsDQogICAgcmVhc29uQ29kZTogbS5yZWFzb25Db2RlLA0KICAgIHJlYXNvblJlZmVyZW5jZTogbS5yZWFzb25SZWZlcmVuY2UsDQogICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBtLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwNCiAgICBpbnN0YW50aWF0ZXNVcmk6IG0uaW5zdGFudGlhdGVzVXJpLA0KICAgIGNvdXJzZU9mVGhlcmFweVR5cGU6IG0uY291cnNlT2ZUaGVyYXB5VHlwZSwNCiAgICBkb3NhZ2VJbnN0cnVjdGlvbjogTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihtLmRvc2FnZUluc3RydWN0aW9uKQ0KICB9DQoNCi8qIE5vIGxvbmdlciBuZWVkZWQgYnV0IHNhdmluZyBpbiBjYXNlIGl0J3MgdXNlZnVsIGxhdGVyDQpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudElkZW50aWZpZXIoaWRlbnRpZmllciBMaXN0PEZISVIuSWRlbnRpZmllcj4pOg0KICBpZGVudGlmaWVyIGkNCiAgcmV0dXJuIEZISVIuSWRlbnRpZmllcnsNCiAgICBpZDogaS5pZCwNCiAgICBleHRlbnNpb246IGkuZXh0ZW5zaW9uLA0KICAgIHVzZTogaS51c2UsDQogICAgdHlwZTogaS50eXBlLA0KICAgIHN5c3RlbTogaS5zeXN0ZW0sDQogICAgdmFsdWU6IGkudmFsdWUsDQogICAgcGVyaW9kOiBpLnBlcmlvZCwNCiAgICBhc3NpZ25lcjogaS5hc3NpZ25lcg0KICB9Ki8NCg0KZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnROYW1lKG5hbWUgTGlzdDxGSElSLkh1bWFuTmFtZT4pOg0KICBuYW1lIG4NCiAgcmV0dXJuIEZISVIuSHVtYW5OYW1lew0KICAgIGlkOiBuLmlkLA0KICAgIGV4dGVuc2lvbjogbi5leHRlbnNpb24sDQogICAgdXNlOiBuLnVzZSwNCiAgICB0ZXh0OiBuLnRleHQsDQogICAgZmFtaWx5OiBuLmZhbWlseSwNCiAgICBnaXZlbjogbi5naXZlbiwNCiAgICBwcmVmaXg6IG4ucHJlZml4LA0KICAgIHN1ZmZpeDogbi5zdWZmaXgsDQogICAgcGVyaW9kOiBuLnBlcmlvZA0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50VGVsZWNvbSh0ZWxlY29tIExpc3Q8RkhJUi5Db250YWN0UG9pbnQ+KToNCiAgdGVsZWNvbSB0DQogIHJldHVybiBGSElSLkNvbnRhY3RQb2ludHsNCiAgICBzeXN0ZW06IHQuc3lzdGVtLA0KICAgIHZhbHVlOiB0LnZhbHVlLA0KICAgIHVzZTogdC51c2UsDQogICAgcmFuazogdC5yYW5rLA0KICAgIHBlcmlvZDogdC5wZXJpb2QNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudEFkZHJlc3MoYWRkcmVzcyBMaXN0PEZISVIuQWRkcmVzcz4pOg0KICBhZGRyZXNzIGENCiAgcmV0dXJuIEZISVIuQWRkcmVzc3sNCiAgICB1c2U6IGEudXNlLA0KICAgIHR5cGU6IGEudHlwZSwNCiAgICB0ZXh0OiBhLnRleHQsDQogICAgbGluZTogYS5saW5lLA0KICAgIGNpdHk6IGEuY2l0eSwNCiAgICBkaXN0cmljdDogYS5kaXN0cmljdCwNCiAgICBzdGF0ZTogYS5zdGF0ZSwNCiAgICBwb3N0YWxDb2RlOiBhLnBvc3RhbENvZGUsDQogICAgY291bnRyeTogYS5jb3VudHJ5LA0KICAgIHBlcmlvZDogYS5wZXJpb2QNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudENvbnRhY3QoY29udGFjdCBMaXN0PEZISVIuUGF0aWVudC5Db250YWN0Pik6DQogIGNvbnRhY3QgYw0KICByZXR1cm4gRkhJUi5QYXRpZW50LkNvbnRhY3R7DQogICAgcmVsYXRpb25zaGlwOiBjLnJlbGF0aW9uc2hpcCwNCiAgICBuYW1lOiBjLm5hbWUsDQogICAgdGVsZWNvbTogYy50ZWxlY29tLA0KICAgIGFkZHJlc3M6IGMuYWRkcmVzcywNCiAgICBnZW5kZXI6IGMuZ2VuZGVyLA0KICAgIG9yZ2FuaXphdGlvbjogYy5vcmdhbml6YXRpb24sDQogICAgcGVyaW9kOiBjLnBlcmlvZA0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50Q29tbXVuaWNhdGlvbihjb21tdW5pY2F0aW9uIExpc3Q8RkhJUi5QYXRpZW50LkNvbW11bmljYXRpb24+KToNCiAgY29tbXVuaWNhdGlvbiBjDQogIHJldHVybiBGSElSLlBhdGllbnQuQ29tbXVuaWNhdGlvbnsNCiAgICBsYW5ndWFnZTogYy5sYW5ndWFnZSwNCiAgICBwcmVmZXJyZWQ6IGMucHJlZmVycmVkDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRMaW5rKGxpbmsgTGlzdDxGSElSLlBhdGllbnQuTGluaz4pOg0KICBsaW5rIGwNCiAgcmV0dXJuIEZISVIuUGF0aWVudC5MaW5rew0KICAgIGV4dGVuc2lvbjogbC5leHRlbnNpb24sDQogICAgbW9kaWZpZXJFeHRlbnNpb246IGwubW9kaWZpZXJFeHRlbnNpb24sDQogICAgb3RoZXI6IGwub3RoZXIsDQogICAgdHlwZTogbC50eXBlDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRSZXNvdXJjZShwYXRpZW50IFBhdGllbnQsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgcGF0aWVudCBwDQogIHJldHVybiBQYXRpZW50ew0KICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBwLmlkfSwNCiAgICBtZXRhOiBNZXRhRWxlbWVudChwLCBwcm9maWxlVVJMcyksDQogICAgZXh0ZW5zaW9uOiBHZXRQYXRpZW50RXh0ZW5zaW9ucyhwKSwNCiAgICBpZGVudGlmaWVyOiBwLmlkZW50aWZpZXIsDQogICAgYWN0aXZlOiBwLmFjdGl2ZSwNCiAgICBuYW1lOiBQYXRpZW50TmFtZShwLm5hbWUpLA0KICAgIHRlbGVjb206IFBhdGllbnRUZWxlY29tKHAudGVsZWNvbSksDQogICAgZ2VuZGVyOiBwLmdlbmRlciwNCiAgICBiaXJ0aERhdGU6IHAuYmlydGhEYXRlLA0KICAgIGRlY2Vhc2VkOiBwLmRlY2Vhc2VkLA0KICAgIGFkZHJlc3M6IFBhdGllbnRBZGRyZXNzKHAuYWRkcmVzcyksDQogICAgbWFyaXRhbFN0YXR1czogcC5tYXJpdGFsU3RhdHVzLA0KICAgIG11bHRpcGxlQmlydGg6IHAubXVsdGlwbGVCaXJ0aCwNCiAgICBjb250YWN0OiBQYXRpZW50Q29udGFjdChwLmNvbnRhY3QpLA0KICAgIGNvbW11bmljYXRpb246IFBhdGllbnRDb21tdW5pY2F0aW9uKHAuY29tbXVuaWNhdGlvbiksDQogICAgbGluazogUGF0aWVudExpbmsocC5saW5rKQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVQZXJmb3JtZXIocGVyZm9ybWVyIExpc3Q8RkhJUi5Qcm9jZWR1cmUuUGVyZm9ybWVyPik6DQogIHBlcmZvcm1lciBwDQogIHJldHVybiBGSElSLlByb2NlZHVyZS5QZXJmb3JtZXJ7DQogICAgZnVuY3Rpb246IHAuZnVuY3Rpb24sDQogICAgYWN0b3I6IHAuYWN0b3IsDQogICAgb25CZWhhbGZPZjogcC5vbkJlaGFsZk9mDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZUZvY2FsRGV2aWNlKGRldmljZSBMaXN0PEZISVIuUHJvY2VkdXJlLkZvY2FsRGV2aWNlPik6DQogIGRldmljZSBkDQogIHJldHVybiBGSElSLlByb2NlZHVyZS5Gb2NhbERldmljZXsNCiAgICBhY3Rpb246IGQuYWN0aW9uLA0KICAgIG1hbmlwdWxhdGVkOiBkLm1hbmlwdWxhdGVkDQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZVJlc291cmNlKHByb2NlZHVyZSBQcm9jZWR1cmUsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToNCiAgcHJvY2VkdXJlIHANCiAgcmV0dXJuIFByb2NlZHVyZXsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHAuaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KHAsIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IHAuZXh0ZW5zaW9uLA0KICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogcC5pbnN0YW50aWF0ZXNDYW5vbmljYWwsDQogICAgaW5zdGFudGlhdGVzVXJpOiBwLmluc3RhbnRpYXRlc1VyaSwNCiAgICBiYXNlZE9uOiBwLmJhc2VkT24sDQogICAgcGFydE9mOiBwLnBhcnRPZiwNCiAgICBzdGF0dXM6IHAuc3RhdHVzLA0KICAgIHN0YXR1c1JlYXNvbjogcC5zdGF0dXNSZWFzb24sDQogICAgY2F0ZWdvcnk6IHAuY2F0ZWdvcnksDQogICAgY29kZTogcC5jb2RlLA0KICAgIHN1YmplY3Q6IHAuc3ViamVjdCwNCiAgICBlbmNvdW50ZXI6IHAuZW5jb3VudGVyLA0KICAgIHBlcmZvcm1lZDogcC5wZXJmb3JtZWQsDQogICAgcmVjb3JkZXI6IHAucmVjb3JkZXIsDQogICAgYXNzZXJ0ZXI6IHAuYXNzZXJ0ZXIsDQogICAgcGVyZm9ybWVyOiBQcm9jZWR1cmVQZXJmb3JtZXIocC5wZXJmb3JtZXIpLA0KICAgIGxvY2F0aW9uOiBwLmxvY2F0aW9uLA0KICAgIHJlYXNvbkNvZGU6IHAucmVhc29uQ29kZSwNCiAgICByZWFzb25SZWZlcmVuY2U6IHAucmVhc29uUmVmZXJlbmNlLA0KICAgIGJvZHlTaXRlOiBwLmJvZHlTaXRlLA0KICAgIG91dGNvbWU6IHAub3V0Y29tZSwNCiAgICByZXBvcnQ6IHAucmVwb3J0LA0KICAgIGNvbXBsaWNhdGlvbjogcC5jb21wbGljYXRpb24sDQogICAgY29tcGxpY2F0aW9uRGV0YWlsOiBwLmNvbXBsaWNhdGlvbkRldGFpbCwNCiAgICBmb2xsb3dVcDogcC5mb2xsb3dVcCwNCiAgICBub3RlOiBwLm5vdGUsDQogICAgZm9jYWxEZXZpY2U6IFByb2NlZHVyZUZvY2FsRGV2aWNlKHAuZm9jYWxEZXZpY2UpLA0KICAgIHVzZWRSZWZlcmVuY2U6IHAudXNlZFJlZmVyZW5jZSwNCiAgICB1c2VkQ29kZTogcC51c2VkQ29kZQ0KICB9DQoNCmRlZmluZSBmdW5jdGlvbiBTZXJ2aWNlUmVxdWVzdFJlc291cmNlKHNlcnZpY2VSZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6DQogIHNlcnZpY2VSZXF1ZXN0IHNSDQogIHJldHVybiBTZXJ2aWNlUmVxdWVzdHsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHNSLmlkfSwNCiAgICBtZXRhOiBNZXRhRWxlbWVudChzUiwgcHJvZmlsZVVSTHMpLA0KICAgIGV4dGVuc2lvbjogc1IuZXh0ZW5zaW9uLA0KICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogc1IuaW5zdGFudGlhdGVzQ2Fub25pY2FsLA0KICAgIGluc3RhbnRpYXRlc1VyaTogc1IuaW5zdGFudGlhdGVzVXJpLA0KICAgIGJhc2VkT246IHNSLmJhc2VkT24sDQogICAgcmVwbGFjZXM6IHNSLnJlcGxhY2VzLA0KICAgIHJlcXVpc2l0aW9uOiBzUi5yZXF1aXNpdGlvbiwNCiAgICBzdGF0dXM6IHNSLnN0YXR1cywNCiAgICBpbnRlbnQ6IHNSLmludGVudCwNCiAgICBjYXRlZ29yeTogc1IuY2F0ZWdvcnksDQogICAgcHJpb3JpdHk6IHNSLnByaW9yaXR5LA0KICAgIGRvTm90UGVyZm9ybTogc1IuZG9Ob3RQZXJmb3JtLA0KICAgIGNvZGU6IHNSLmNvZGUsDQogICAgb3JkZXJEZXRhaWw6IHNSLm9yZGVyRGV0YWlsLA0KICAgIHF1YW50aXR5OiBzUi5xdWFudGl0eSwNCiAgICBzdWJqZWN0OiBzUi5zdWJqZWN0LA0KICAgIGVuY291bnRlcjogc1IuZW5jb3VudGVyLA0KICAgIG9jY3VycmVuY2U6IHNSLm9jY3VycmVuY2UsDQogICAgYXNOZWVkZWQ6IHNSLmFzTmVlZGVkLA0KICAgIGF1dGhvcmVkT246IHNSLmF1dGhvcmVkT24sDQogICAgcmVxdWVzdGVyOiBzUi5yZXF1ZXN0ZXIsDQogICAgcGVyZm9ybWVyVHlwZTogc1IucGVyZm9ybWVyVHlwZSwNCiAgICBwZXJmb3JtZXI6IHNSLnBlcmZvcm1lciwNCiAgICBsb2NhdGlvbkNvZGU6IHNSLmxvY2F0aW9uQ29kZSwNCiAgICBsb2NhdGlvblJlZmVyZW5jZTogc1IubG9jYXRpb25SZWZlcmVuY2UsDQogICAgcmVhc29uQ29kZTogc1IucmVhc29uQ29kZSwNCiAgICByZWFzb25SZWZlcmVuY2U6IHNSLnJlYXNvblJlZmVyZW5jZSwNCiAgICBpbnN1cmFuY2U6IHNSLmluc3VyYW5jZSwNCiAgICBzdXBwb3J0aW5nSW5mbzogc1Iuc3VwcG9ydGluZ0luZm8sDQogICAgc3BlY2ltZW46IHNSLnNwZWNpbWVuLA0KICAgIGJvZHlTaXRlOiBzUi5ib2R5U2l0ZSwNCiAgICBub3RlOiBzUi5ub3RlLA0KICAgIHBhdGllbnRJbnN0cnVjdGlvbjogc1IucGF0aWVudEluc3RydWN0aW9uLA0KICAgIHJlbGV2YW50SGlzdG9yeTogc1IucmVsZXZhbnRIaXN0b3J5DQogIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFNwZWNpbWVuQ29sbGVjdGlvbihjb2xsZWN0aW9uIEZISVIuU3BlY2ltZW4uQ29sbGVjdGlvbik6DQogIGNvbGxlY3Rpb24gYw0KICByZXR1cm4gRkhJUi5TcGVjaW1lbi5Db2xsZWN0aW9uew0KICAgIGNvbGxlY3RvcjogYy5jb2xsZWN0b3IsDQogICAgY29sbGVjdGVkOiBjLmNvbGxlY3RlZCwNCiAgICAiZHVyYXRpb24iOiBjLiJkdXJhdGlvbiIsDQogICAgcXVhbnRpdHk6IGMucXVhbnRpdHksDQogICAgbWV0aG9kOiBjLm1ldGhvZCwNCiAgICBib2R5U2l0ZTogYy5ib2R5U2l0ZSwNCiAgICBmYXN0aW5nU3RhdHVzOiBjLmZhc3RpbmdTdGF0dXMNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5Qcm9jZXNzaW5nKHByb2Nlc3NpbmcgTGlzdDxGSElSLlNwZWNpbWVuLlByb2Nlc3Npbmc+KToNCiAgcHJvY2Vzc2luZyBwDQogIHJldHVybiBGSElSLlNwZWNpbWVuLlByb2Nlc3Npbmd7DQogICAgZGVzY3JpcHRpb246IHAuZGVzY3JpcHRpb24sDQogICAgcHJvY2VkdXJlOiBwLnByb2NlZHVyZSwNCiAgICBhZGRpdGl2ZTogcC5hZGRpdGl2ZSwNCiAgICB0aW1lOiBwLnRpbWUNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5Db250YWluZXIoY29udGFpbmVyIExpc3Q8RkhJUi5TcGVjaW1lbi5Db250YWluZXI+KToNCiAgY29udGFpbmVyIGMNCiAgcmV0dXJuIEZISVIuU3BlY2ltZW4uQ29udGFpbmVyew0KICAgIGRlc2NyaXB0aW9uOiBjLmRlc2NyaXB0aW9uLA0KICAgIHR5cGU6IGMudHlwZSwNCiAgICBjYXBhY2l0eTogYy5jYXBhY2l0eSwNCiAgICBzcGVjaW1lblF1YW50aXR5OiBjLnNwZWNpbWVuUXVhbnRpdHksDQogICAgYWRkaXRpdmU6IGMuYWRkaXRpdmUNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5SZXNvdXJjZShzcGVjaW1lbiBTcGVjaW1lbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOg0KICBzcGVjaW1lbiBzDQogIHJldHVybiBTcGVjaW1lbnsNCiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHMuaWR9LA0KICAgIG1ldGE6IE1ldGFFbGVtZW50KHMsIHByb2ZpbGVVUkxzKSwNCiAgICBleHRlbnNpb246IHMuZXh0ZW5zaW9uLA0KICAgIGlkZW50aWZpZXI6IHMuaWRlbnRpZmllciwNCiAgICBhY2Nlc3Npb25JZGVudGlmaWVyOiBzLmFjY2Vzc2lvbklkZW50aWZpZXIsDQogICAgc3RhdHVzOiBzLnN0YXR1cywNCiAgICB0eXBlOiBzLnR5cGUsDQogICAgc3ViamVjdDogcy5zdWJqZWN0LA0KICAgIHJlY2VpdmVkVGltZTogcy5yZWNlaXZlZFRpbWUsDQogICAgcGFyZW50OiBzLnBhcmVudCwNCiAgICByZXF1ZXN0OiBzLnJlcXVlc3QsDQogICAgY29sbGVjdGlvbjogU3BlY2ltZW5Db2xsZWN0aW9uKHMuY29sbGVjdGlvbiksDQogICAgcHJvY2Vzc2luZzogU3BlY2ltZW5Qcm9jZXNzaW5nKHMucHJvY2Vzc2luZyksDQogICAgY29udGFpbmVyOiBTcGVjaW1lbkNvbnRhaW5lcihzLmNvbnRhaW5lciksDQogICAgY29uZGl0aW9uOiBzLmNvbmRpdGlvbiwNCiAgICBub3RlOiBzLm5vdGUNCiAgfQ0KDQpkZWZpbmUgZnVuY3Rpb24gIk9wZXJhdGlvbk91dGNvbWVSZXNvdXJjZSIoZXJyb3JJZCBTdHJpbmcsIHJlc291cmNlSWQgRkhJUi5pZCwgbWVzc2FnZSBTdHJpbmcpOg0KICBPcGVyYXRpb25PdXRjb21lew0KICAgICAgaWQ6IEZISVIuaWR7dmFsdWU6IGVycm9ySWR9LA0KICAgICAgaXNzdWU6IHsNCiAgICAgICAgICBGSElSLk9wZXJhdGlvbk91dGNvbWUuSXNzdWV7DQogICAgICAgICAgc2V2ZXJpdHk6IEZISVIuSXNzdWVTZXZlcml0eXt2YWx1ZTogJ2Vycm9yJ30sDQogICAgICAgICAgY29kZTogRkhJUi5Jc3N1ZVR5cGV7dmFsdWU6ICdleGNlcHRpb24nfSwNCiAgICAgICAgICBkZXRhaWxzOiANCiAgICAgICAgICAgICAgRkhJUi5Db2RlYWJsZUNvbmNlcHR7DQogICAgICAgICAgICAgICAgICBjb2Rpbmc6IHsNCiAgICAgICAgICAgICAgICAgICAgICBDb2Rpbmd7DQogICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOiB1cml7dmFsdWU6ICdodHRwczovL2xhbnRhbmFncm91cC5jb20vdmFsaWRhdGlvbi1lcnJvcid9LA0KICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvZGV7dmFsdWU6ICdFcnJvcid9LA0KICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHN0cmluZ3t2YWx1ZTogJ1Jlc291cmNlICcgKyByZXNvdXJjZUlkICsgJyBmYWlsZWQgdmFsaWRhdGlvbjogJyArIG1lc3NhZ2V9DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgfQ0KICB9",
"url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/SharedResourceCreation.cql"
}
]
}