This page is part of the Structured Data Capture FHIR IG (v3.0.0: STU 3) based on FHIR R4. This is the current published version. For a full list of available versions, see the Directory of published versions
Page standards status: Informative |
{
"resourceType" : "Library",
"id" : "sdc-CHF",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h2>Related Artifacts</h2><table class=\"grid\"><tr><td>depends-on</td><td><code>http://hl7.org/fhir/Library/FHIR-ModelInfo|4.0.1</code></td></tr><tr><td>depends-on</td><td><code>http://hl7.org/fhir/Library/FHIRHelpers|4.0.1</code></td></tr><tr><td>depends-on</td><td><a href=\"http://terminology.hl7.org/2.0.0/CodeSystem-v3-snomed-CT.html\">SNOMED and CT International Edition</a></td></tr><tr><td>depends-on</td><td><a href=\"http://terminology.hl7.org/2.0.0/CodeSystem-v3-loinc.html\">Logical Observation Identifiers, Names and Codes (LOINC)</a></td></tr><tr><td>depends-on</td><td><a href=\"CodeSystem-chf-codes.html\">CHF Codes</a></td></tr><tr><td>depends-on</td><td><a href=\"http://terminology.hl7.org/2.0.0/CodeSystem-condition-clinical.html\">Condition Clinical Status Codes</a></td></tr><tr><td>depends-on</td><td><a href=\"http://terminology.hl7.org/2.0.0/CodeSystem-condition-ver-status.html\">ConditionVerificationStatus</a></td></tr></table><h2>Parameters</h2><table class=\"grid\"><tr><td>Encounter</td><td>in</td><td>0</td><td>1</td><td>Encounter</td></tr><tr><td>Patient</td><td>out</td><td>0</td><td>1</td><td>Patient</td></tr><tr><td>Body Weight</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Body Weight Change Assertion</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Daily Body Weight</td><td>out</td><td>0</td><td>*</td><td>Any</td></tr><tr><td>Daily Body Weight Change</td><td>out</td><td>0</td><td>*</td><td>Any</td></tr><tr><td>Body Weight Change</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Current Body Weight</td><td>out</td><td>0</td><td>1</td><td>Observation</td></tr><tr><td>Previous Body Weight</td><td>out</td><td>0</td><td>1</td><td>Observation</td></tr><tr><td>Current Body Weight Change</td><td>out</td><td>0</td><td>1</td><td>integer</td></tr><tr><td>Urine Output</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Current Urine Output</td><td>out</td><td>0</td><td>1</td><td>Observation</td></tr><tr><td>Net Intake/Output</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Current Net Intake/Output</td><td>out</td><td>0</td><td>1</td><td>Observation</td></tr><tr><td>Jugular Venous Pressure</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Oxygen Saturation</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Potassium</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Creatinine</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>eGFR</td><td>out</td><td>0</td><td>*</td><td>Observation</td></tr><tr><td>Eligibility Criteria</td><td>out</td><td>0</td><td>*</td><td>Condition</td></tr></table><h2>Data Requirements</h2><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"https://loinc.org/\">LOINC</a> 29463-7: Body weight</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"CodeSystem-chf-codes.html\">http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes</a> body-weight-change: Body weight change</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"https://loinc.org/\">LOINC</a> 9192-6: Urine output 24 hour</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"CodeSystem-chf-codes.html\">http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes</a> net-intake-output: Net intake/output</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"CodeSystem-chf-codes.html\">http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes</a> jvp: Jugular venous pressure</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"https://loinc.org/\">LOINC</a> 2708-6: Oxygen saturation in Arterial blood</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"https://loinc.org/\">LOINC</a> 86919-8: Potassium goal [Moles/volume] Serum or Plasma</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"https://loinc.org/\">LOINC</a> 39802-4: Creatinine in dialysis fluid/Creatinine in serum or plasma</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a> (<a href=\"http://hl7.org/fhir/R4/observation.html\">Observation</a>)</td></tr><tr style=\"background-color: #efefef\"><td>Filter</td><td>Value</td></tr><tr><td>code</td><td>One of these codes: <a href=\"CodeSystem-chf-codes.html\">http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes</a> egfr: eGFR result</td></tr></table><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/condition.html\">Condition</a> (<a href=\"http://hl7.org/fhir/R4/condition.html\">Condition</a>)</td></tr></table><h2>Contents</h2><p><code>text/cql</code></p><pre><code class=\"language-sql\">library CHF version '1.0.0'\n\nusing FHIR version '4.0.1'\n\ninclude FHIRHelpers version '4.0.1'\n\ncodesystem "SNOMED-CT": 'http://snomed.info/sct'\ncodesystem "LOINC": 'http://loinc.org'\ncodesystem "CHFCodes": 'http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes'\ncodesystem "Condition Clinical Status Code": 'http://terminology.hl7.org/CodeSystem/condition-clinical'\ncodesystem "Condition Verification Status Code": 'http://terminology.hl7.org/CodeSystem/condition-ver-status'\n\ncode "Congestive heart failure": '42343007' from "SNOMED-CT"\n\ncode "Body weight": '29463-7' from "LOINC"\ncode "Body weight change": 'body-weight-change' from "CHFCodes"\ncode "Urine output": '9192-6' from "LOINC"\ncode "Net intake/output": 'net-intake-output' from "CHFCodes"\ncode "Jugular venous pressure": 'jvp' from "CHFCodes"\ncode "Oxygen saturation": '2708-6' from "LOINC"\ncode "Potassium goal": '86919-8' from "LOINC" display 'Potassium goal [Moles/volume] Serum or Plasma' // meq/L\ncode "Creatinine in serum": '39802-4' from "LOINC" display 'Creatinine in serum or plasma' // NOTE: example shows mg/dL, but no LOINC code has those units?\ncode "eGFR result": 'egfr' from "CHFCodes" // NOTE: Too many to pick from, needs clinical/terminological SME input, in mol/mm/m2\n\ncode "Active condition": 'active' from "Condition Clinical Status Code"\ncode "Provisional condition": 'provisional' from "Condition Verification Status Code"\ncode "Confirmed condition": 'confirmed' from "Condition Verification Status Code"\n\nparameter Encounter Encounter\n\ncontext Patient\n\n// Case Features\ndefine "Body Weight":\n [Observation: "Body weight"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Body Weight Change Assertion":\n [Observation: "Body weight change"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Body Weight Change":\n "Daily Body Weight Change" WC\n return Observation {\n id: id { value: Encounter.id + '-bodyweight-change' + ToString(WC.date) },\n extension: {\n Extension {\n url: url { value: 'http://hl7.org/fhir/uv/cpg/StructureDefinition/cpg-instantiatesCaseFeature' },\n value: canonical { value: 'http://hl7.org/fhir/uv/cpg/StructureDefinition/chf-bodyweight-change' }\n },\n Extension {\n url: url { value: 'http://hl7.org/fhir/uv/cpg/StructureDefinition/cpg-caseFeatureType' },\n value: code { value: 'asserted' }\n }\n },\n status: ObservationStatus { value: 'final' },\n code: CodeableConcept {\n coding: {\n Coding {\n system: uri { value: 'http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes' },\n code: code { value: 'body-weight-change' }\n }\n }\n },\n effective: dateTime { value: WC.date },\n issued: instant { value: Now() },\n subject: referenceTo(Patient),\n encounter: referenceTo(Encounter),\n value: Quantity {\n value: decimal { value: WC.change.value },\n unit: string { value: WC.change.unit },\n system: uri { value: 'http://unitsofmeasure.org' },\n code: code { value: WC.change.unit }\n }\n }\n\ndefine "Daily Body Weight":\n (expand Encounter.period per day) Date\n let maxWeight: Max("Body Weight" WT where WT.issued same day as Date return WT.value as FHIR.Quantity)\n return { date: Date, weight: maxWeight }\n\ndefine "Daily Body Weight Change":\n "Daily Body Weight" WT\n let priorWeight: First("Daily Body Weight" PWT where PWT.date < WT.date sort by date descending).weight\n return { date: WT.date, weight: WT.weight, priorWeight: priorWeight, change: WT.weight - priorWeight}\n\ndefine "Current Body Weight":\n First("Body Weight" WT where WT.issued same day as Today() sort by issued descending)\n\ndefine "Previous Body Weight":\n First("Body Weight" WT where WT.issued 1 day before day of Today() sort by issued descending)\n\ndefine "Current Body Weight Change":\n "Current Body Weight".value - "Previous Body Weight".value\n\ndefine "Urine Output":\n [Observation: "Urine output"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Current Urine Output":\n First("Urine Output" UO where UO.issued same day as Today() sort by issued descending)\n\ndefine "Net Intake/Output":\n [Observation: "Net intake/output"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Current Net Intake/Output":\n First("Net Intake/Output" IO where IO.issued same day as Today() sort by issued descending)\n\ndefine "Jugular Venous Pressure":\n [Observation: "Jugular venous pressure"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Oxygen Saturation":\n [Observation: "Oxygen saturation"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Potassium":\n [Observation: "Potassium goal"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "Creatinine":\n [Observation: "Creatinine in serum"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\ndefine "eGFR":\n [Observation: "eGFR result"] O\n where O.status = 'final'\n and references(O.encounter, Encounter)\n\n\n// Eligibility Criteria\ndefine "Eligibility Criteria":\n [Condition] C\n where C.code ~ "Congestive heart failure"\n and C.clinicalStatus ~ "Active condition"\n and C.verificationStatus ~ "Confirmed condition"\n\n// TODO: Handle contained references\n// TODO: Handle bundle references\n// TODO: Handle remote references\ndefine function references(reference Reference, encounter Encounter):\n EndsWith(reference.reference, '/' + encounter.id)\n\ndefine function referenceTo(encounter Encounter):\n Reference { reference: string { value: 'Encounter/' + encounter.id } }\n\ndefine function referenceTo(patient Patient):\n Reference { reference: string { value: 'Patient/' + patient.id } }\n</code></pre></div>"
},
"url" : "http://hl7.org/fhir/uv/sdc/Library/sdc-CHF",
"version" : "3.0.0",
"name" : "CHF",
"title" : "Congestive Heart Failure Logic",
"status" : "draft",
"experimental" : true,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library",
"display" : "Logic Library"
}
]
},
"date" : "2020-11-29T15:54:22-07:00",
"publisher" : "HL7 International - FHIR Infrastructure Work Group",
"contact" : [
{
"telecom" : [
{
"system" : "url",
"value" : "http://hl7.org/Special/committees/fiwg"
}
]
}
],
"description" : "Logic for an example congestive heart failure pathway",
"jurisdiction" : [
{
"coding" : [
{
"system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
"code" : "001"
}
]
}
],
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "SNOMED CT",
"url" : "http://snomed.info/sct",
"document" : {
"url" : "http://snomed.info/sct"
},
"resource" : "http://snomed.info/sct"
},
{
"type" : "depends-on",
"display" : "LOINC",
"url" : "http://loinc.org",
"document" : {
"url" : "http://loinc.org"
},
"resource" : "http://loinc.org"
},
{
"type" : "depends-on",
"display" : "Congestive heart failure codes",
"url" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes",
"document" : {
"url" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes"
},
"resource" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes"
},
{
"type" : "depends-on",
"display" : "Clinical condition codes",
"url" : "http://terminology.hl7.org/CodeSystem/condition-clinical",
"document" : {
"url" : "http://terminology.hl7.org/CodeSystem/condition-clinical"
},
"resource" : "http://terminology.hl7.org/CodeSystem/condition-clinical"
},
{
"type" : "depends-on",
"display" : "Condition verification status",
"url" : "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"document" : {
"url" : "http://terminology.hl7.org/CodeSystem/condition-ver-status"
},
"resource" : "http://terminology.hl7.org/CodeSystem/condition-ver-status"
}
],
"parameter" : [
{
"name" : "Encounter",
"use" : "in",
"min" : 0,
"max" : "1",
"type" : "Encounter"
},
{
"name" : "Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
},
{
"name" : "Body Weight",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Body Weight Change Assertion",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Daily Body Weight",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Any"
},
{
"name" : "Daily Body Weight Change",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Any"
},
{
"name" : "Body Weight Change",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Current Body Weight",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Observation"
},
{
"name" : "Previous Body Weight",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Observation"
},
{
"name" : "Current Body Weight Change",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "integer"
},
{
"name" : "Urine Output",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Current Urine Output",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Observation"
},
{
"name" : "Net Intake/Output",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Current Net Intake/Output",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Observation"
},
{
"name" : "Jugular Venous Pressure",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Oxygen Saturation",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Potassium",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Creatinine",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "eGFR",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Eligibility Criteria",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Condition"
}
],
"dataRequirement" : [
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://loinc.org",
"code" : "29463-7"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes",
"code" : "body-weight-change"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://loinc.org",
"code" : "9192-6"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes",
"code" : "net-intake-output"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes",
"code" : "jvp"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://loinc.org",
"code" : "2708-6"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://loinc.org",
"code" : "86919-8",
"display" : "Potassium goal [Moles/volume] Serum or Plasma"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://loinc.org",
"code" : "39802-4",
"display" : "Creatinine in dialysis fluid/Creatinine in serum or plasma"
}
]
}
]
},
{
"type" : "Observation",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Observation"
],
"codeFilter" : [
{
"path" : "code",
"code" : [
{
"system" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes",
"code" : "egfr"
}
]
}
]
},
{
"type" : "Condition",
"profile" : [
"http://hl7.org/fhir/StructureDefinition/Condition"
]
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "bGlicmFyeSBDSEYgdmVyc2lvbiAnMS4wLjAnDQoNCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnDQoNCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnDQoNCmNvZGVzeXN0ZW0gIlNOT01FRC1DVCI6ICdodHRwOi8vc25vbWVkLmluZm8vc2N0Jw0KY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycNCmNvZGVzeXN0ZW0gIkNIRkNvZGVzIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXYvY3BnL0NvZGVTeXN0ZW0vY2hmLWNvZGVzJw0KY29kZXN5c3RlbSAiQ29uZGl0aW9uIENsaW5pY2FsIFN0YXR1cyBDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNsaW5pY2FsJw0KY29kZXN5c3RlbSAiQ29uZGl0aW9uIFZlcmlmaWNhdGlvbiBTdGF0dXMgQ29kZSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi12ZXItc3RhdHVzJw0KDQpjb2RlICJDb25nZXN0aXZlIGhlYXJ0IGZhaWx1cmUiOiAnNDIzNDMwMDcnIGZyb20gIlNOT01FRC1DVCINCg0KY29kZSAiQm9keSB3ZWlnaHQiOiAnMjk0NjMtNycgZnJvbSAiTE9JTkMiDQpjb2RlICJCb2R5IHdlaWdodCBjaGFuZ2UiOiAnYm9keS13ZWlnaHQtY2hhbmdlJyBmcm9tICJDSEZDb2RlcyINCmNvZGUgIlVyaW5lIG91dHB1dCI6ICc5MTkyLTYnIGZyb20gIkxPSU5DIg0KY29kZSAiTmV0IGludGFrZS9vdXRwdXQiOiAnbmV0LWludGFrZS1vdXRwdXQnIGZyb20gIkNIRkNvZGVzIg0KY29kZSAiSnVndWxhciB2ZW5vdXMgcHJlc3N1cmUiOiAnanZwJyBmcm9tICJDSEZDb2RlcyINCmNvZGUgIk94eWdlbiBzYXR1cmF0aW9uIjogJzI3MDgtNicgZnJvbSAiTE9JTkMiDQpjb2RlICJQb3Rhc3NpdW0gZ29hbCI6ICc4NjkxOS04JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUG90YXNzaXVtIGdvYWwgW01vbGVzL3ZvbHVtZV0gU2VydW0gb3IgUGxhc21hJyAvLyBtZXEvTA0KY29kZSAiQ3JlYXRpbmluZSBpbiBzZXJ1bSI6ICczOTgwMi00JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ3JlYXRpbmluZSBpbiBzZXJ1bSBvciBwbGFzbWEnIC8vIE5PVEU6IGV4YW1wbGUgc2hvd3MgbWcvZEwsIGJ1dCBubyBMT0lOQyBjb2RlIGhhcyB0aG9zZSB1bml0cz8NCmNvZGUgImVHRlIgcmVzdWx0IjogJ2VnZnInIGZyb20gIkNIRkNvZGVzIiAvLyBOT1RFOiBUb28gbWFueSB0byBwaWNrIGZyb20sIG5lZWRzIGNsaW5pY2FsL3Rlcm1pbm9sb2dpY2FsIFNNRSBpbnB1dCwgaW4gbW9sL21tL20yDQoNCmNvZGUgIkFjdGl2ZSBjb25kaXRpb24iOiAnYWN0aXZlJyBmcm9tICJDb25kaXRpb24gQ2xpbmljYWwgU3RhdHVzIENvZGUiDQpjb2RlICJQcm92aXNpb25hbCBjb25kaXRpb24iOiAncHJvdmlzaW9uYWwnIGZyb20gIkNvbmRpdGlvbiBWZXJpZmljYXRpb24gU3RhdHVzIENvZGUiDQpjb2RlICJDb25maXJtZWQgY29uZGl0aW9uIjogJ2NvbmZpcm1lZCcgZnJvbSAiQ29uZGl0aW9uIFZlcmlmaWNhdGlvbiBTdGF0dXMgQ29kZSINCg0KcGFyYW1ldGVyIEVuY291bnRlciBFbmNvdW50ZXINCg0KY29udGV4dCBQYXRpZW50DQoNCi8vIENhc2UgRmVhdHVyZXMNCmRlZmluZSAiQm9keSBXZWlnaHQiOg0KICBbT2JzZXJ2YXRpb246ICJCb2R5IHdlaWdodCJdIE8NCiAgICB3aGVyZSBPLnN0YXR1cyA9ICdmaW5hbCcNCiAgICAgIGFuZCByZWZlcmVuY2VzKE8uZW5jb3VudGVyLCBFbmNvdW50ZXIpDQoNCmRlZmluZSAiQm9keSBXZWlnaHQgQ2hhbmdlIEFzc2VydGlvbiI6DQogIFtPYnNlcnZhdGlvbjogIkJvZHkgd2VpZ2h0IGNoYW5nZSJdIE8NCiAgICB3aGVyZSBPLnN0YXR1cyA9ICdmaW5hbCcNCiAgICAgIGFuZCByZWZlcmVuY2VzKE8uZW5jb3VudGVyLCBFbmNvdW50ZXIpDQoNCmRlZmluZSAiQm9keSBXZWlnaHQgQ2hhbmdlIjoNCiAgIkRhaWx5IEJvZHkgV2VpZ2h0IENoYW5nZSIgV0MNCiAgICByZXR1cm4gT2JzZXJ2YXRpb24gew0KICAgICAgaWQ6IGlkIHsgdmFsdWU6IEVuY291bnRlci5pZCArICctYm9keXdlaWdodC1jaGFuZ2UnICsgVG9TdHJpbmcoV0MuZGF0ZSkgfSwNCiAgICAgIGV4dGVuc2lvbjogew0KICAgICAgICBFeHRlbnNpb24gew0KICAgICAgICAgIHVybDogdXJsIHsgdmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3V2L2NwZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2NwZy1pbnN0YW50aWF0ZXNDYXNlRmVhdHVyZScgfSwNCiAgICAgICAgICB2YWx1ZTogY2Fub25pY2FsIHsgdmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3V2L2NwZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2NoZi1ib2R5d2VpZ2h0LWNoYW5nZScgfQ0KICAgICAgICB9LA0KICAgICAgICBFeHRlbnNpb24gew0KICAgICAgICAgIHVybDogdXJsIHsgdmFsdWU6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3V2L2NwZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2NwZy1jYXNlRmVhdHVyZVR5cGUnIH0sDQogICAgICAgICAgdmFsdWU6IGNvZGUgeyB2YWx1ZTogJ2Fzc2VydGVkJyB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICBzdGF0dXM6IE9ic2VydmF0aW9uU3RhdHVzIHsgdmFsdWU6ICdmaW5hbCcgfSwNCiAgICAgIGNvZGU6IENvZGVhYmxlQ29uY2VwdCB7DQogICAgICAgIGNvZGluZzogew0KICAgICAgICAgIENvZGluZyB7DQogICAgICAgICAgICBzeXN0ZW06IHVyaSB7IHZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91di9jcGcvQ29kZVN5c3RlbS9jaGYtY29kZXMnIH0sDQogICAgICAgICAgICBjb2RlOiBjb2RlIHsgdmFsdWU6ICdib2R5LXdlaWdodC1jaGFuZ2UnIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICBlZmZlY3RpdmU6IGRhdGVUaW1lIHsgdmFsdWU6IFdDLmRhdGUgfSwNCiAgICAgIGlzc3VlZDogaW5zdGFudCB7IHZhbHVlOiBOb3coKSB9LA0KICAgICAgc3ViamVjdDogcmVmZXJlbmNlVG8oUGF0aWVudCksDQogICAgICBlbmNvdW50ZXI6IHJlZmVyZW5jZVRvKEVuY291bnRlciksDQogICAgICB2YWx1ZTogUXVhbnRpdHkgew0KICAgICAgICB2YWx1ZTogZGVjaW1hbCB7IHZhbHVlOiBXQy5jaGFuZ2UudmFsdWUgfSwNCiAgICAgICAgdW5pdDogc3RyaW5nIHsgdmFsdWU6IFdDLmNoYW5nZS51bml0IH0sDQogICAgICAgIHN5c3RlbTogdXJpIHsgdmFsdWU6ICdodHRwOi8vdW5pdHNvZm1lYXN1cmUub3JnJyB9LA0KICAgICAgICBjb2RlOiBjb2RlIHsgdmFsdWU6IFdDLmNoYW5nZS51bml0IH0NCiAgICAgIH0NCiAgICB9DQoNCmRlZmluZSAiRGFpbHkgQm9keSBXZWlnaHQiOg0KICAoZXhwYW5kIEVuY291bnRlci5wZXJpb2QgcGVyIGRheSkgRGF0ZQ0KICAgIGxldCBtYXhXZWlnaHQ6IE1heCgiQm9keSBXZWlnaHQiIFdUIHdoZXJlIFdULmlzc3VlZCBzYW1lIGRheSBhcyBEYXRlIHJldHVybiBXVC52YWx1ZSBhcyBGSElSLlF1YW50aXR5KQ0KICAgIHJldHVybiB7IGRhdGU6IERhdGUsIHdlaWdodDogbWF4V2VpZ2h0IH0NCg0KZGVmaW5lICJEYWlseSBCb2R5IFdlaWdodCBDaGFuZ2UiOg0KICAiRGFpbHkgQm9keSBXZWlnaHQiIFdUDQogICAgbGV0IHByaW9yV2VpZ2h0OiBGaXJzdCgiRGFpbHkgQm9keSBXZWlnaHQiIFBXVCB3aGVyZSBQV1QuZGF0ZSA8IFdULmRhdGUgc29ydCBieSBkYXRlIGRlc2NlbmRpbmcpLndlaWdodA0KICAgIHJldHVybiB7IGRhdGU6IFdULmRhdGUsIHdlaWdodDogV1Qud2VpZ2h0LCBwcmlvcldlaWdodDogcHJpb3JXZWlnaHQsIGNoYW5nZTogV1Qud2VpZ2h0IC0gcHJpb3JXZWlnaHR9DQoNCmRlZmluZSAiQ3VycmVudCBCb2R5IFdlaWdodCI6DQogIEZpcnN0KCJCb2R5IFdlaWdodCIgV1Qgd2hlcmUgV1QuaXNzdWVkIHNhbWUgZGF5IGFzIFRvZGF5KCkgc29ydCBieSBpc3N1ZWQgZGVzY2VuZGluZykNCg0KZGVmaW5lICJQcmV2aW91cyBCb2R5IFdlaWdodCI6DQogIEZpcnN0KCJCb2R5IFdlaWdodCIgV1Qgd2hlcmUgV1QuaXNzdWVkIDEgZGF5IGJlZm9yZSBkYXkgb2YgVG9kYXkoKSBzb3J0IGJ5IGlzc3VlZCBkZXNjZW5kaW5nKQ0KDQpkZWZpbmUgIkN1cnJlbnQgQm9keSBXZWlnaHQgQ2hhbmdlIjoNCiAgIkN1cnJlbnQgQm9keSBXZWlnaHQiLnZhbHVlIC0gIlByZXZpb3VzIEJvZHkgV2VpZ2h0Ii52YWx1ZQ0KDQpkZWZpbmUgIlVyaW5lIE91dHB1dCI6DQogIFtPYnNlcnZhdGlvbjogIlVyaW5lIG91dHB1dCJdIE8NCiAgICB3aGVyZSBPLnN0YXR1cyA9ICdmaW5hbCcNCiAgICBhbmQgcmVmZXJlbmNlcyhPLmVuY291bnRlciwgRW5jb3VudGVyKQ0KDQpkZWZpbmUgIkN1cnJlbnQgVXJpbmUgT3V0cHV0IjoNCiAgRmlyc3QoIlVyaW5lIE91dHB1dCIgVU8gd2hlcmUgVU8uaXNzdWVkIHNhbWUgZGF5IGFzIFRvZGF5KCkgc29ydCBieSBpc3N1ZWQgZGVzY2VuZGluZykNCg0KZGVmaW5lICJOZXQgSW50YWtlL091dHB1dCI6DQogIFtPYnNlcnZhdGlvbjogIk5ldCBpbnRha2Uvb3V0cHV0Il0gTw0KICAgIHdoZXJlIE8uc3RhdHVzID0gJ2ZpbmFsJw0KICAgICAgYW5kIHJlZmVyZW5jZXMoTy5lbmNvdW50ZXIsIEVuY291bnRlcikNCg0KZGVmaW5lICJDdXJyZW50IE5ldCBJbnRha2UvT3V0cHV0IjoNCiAgRmlyc3QoIk5ldCBJbnRha2UvT3V0cHV0IiBJTyB3aGVyZSBJTy5pc3N1ZWQgc2FtZSBkYXkgYXMgVG9kYXkoKSBzb3J0IGJ5IGlzc3VlZCBkZXNjZW5kaW5nKQ0KDQpkZWZpbmUgIkp1Z3VsYXIgVmVub3VzIFByZXNzdXJlIjoNCiAgW09ic2VydmF0aW9uOiAiSnVndWxhciB2ZW5vdXMgcHJlc3N1cmUiXSBPDQogICAgd2hlcmUgTy5zdGF0dXMgPSAnZmluYWwnDQogICAgICBhbmQgcmVmZXJlbmNlcyhPLmVuY291bnRlciwgRW5jb3VudGVyKQ0KDQpkZWZpbmUgIk94eWdlbiBTYXR1cmF0aW9uIjoNCiAgW09ic2VydmF0aW9uOiAiT3h5Z2VuIHNhdHVyYXRpb24iXSBPDQogICAgd2hlcmUgTy5zdGF0dXMgPSAnZmluYWwnDQogICAgICBhbmQgcmVmZXJlbmNlcyhPLmVuY291bnRlciwgRW5jb3VudGVyKQ0KDQpkZWZpbmUgIlBvdGFzc2l1bSI6DQogIFtPYnNlcnZhdGlvbjogIlBvdGFzc2l1bSBnb2FsIl0gTw0KICAgIHdoZXJlIE8uc3RhdHVzID0gJ2ZpbmFsJw0KICAgICAgYW5kIHJlZmVyZW5jZXMoTy5lbmNvdW50ZXIsIEVuY291bnRlcikNCg0KZGVmaW5lICJDcmVhdGluaW5lIjoNCiAgW09ic2VydmF0aW9uOiAiQ3JlYXRpbmluZSBpbiBzZXJ1bSJdIE8NCiAgICB3aGVyZSBPLnN0YXR1cyA9ICdmaW5hbCcNCiAgICAgIGFuZCByZWZlcmVuY2VzKE8uZW5jb3VudGVyLCBFbmNvdW50ZXIpDQoNCmRlZmluZSAiZUdGUiI6DQogIFtPYnNlcnZhdGlvbjogImVHRlIgcmVzdWx0Il0gTw0KICAgIHdoZXJlIE8uc3RhdHVzID0gJ2ZpbmFsJw0KICAgICAgYW5kIHJlZmVyZW5jZXMoTy5lbmNvdW50ZXIsIEVuY291bnRlcikNCg0KDQovLyBFbGlnaWJpbGl0eSBDcml0ZXJpYQ0KZGVmaW5lICJFbGlnaWJpbGl0eSBDcml0ZXJpYSI6DQogIFtDb25kaXRpb25dIEMNCiAgICB3aGVyZSBDLmNvZGUgfiAiQ29uZ2VzdGl2ZSBoZWFydCBmYWlsdXJlIg0KICAgICAgYW5kIEMuY2xpbmljYWxTdGF0dXMgfiAiQWN0aXZlIGNvbmRpdGlvbiINCiAgICAgIGFuZCBDLnZlcmlmaWNhdGlvblN0YXR1cyB+ICJDb25maXJtZWQgY29uZGl0aW9uIg0KDQovLyBUT0RPOiBIYW5kbGUgY29udGFpbmVkIHJlZmVyZW5jZXMNCi8vIFRPRE86IEhhbmRsZSBidW5kbGUgcmVmZXJlbmNlcw0KLy8gVE9ETzogSGFuZGxlIHJlbW90ZSByZWZlcmVuY2VzDQpkZWZpbmUgZnVuY3Rpb24gcmVmZXJlbmNlcyhyZWZlcmVuY2UgUmVmZXJlbmNlLCBlbmNvdW50ZXIgRW5jb3VudGVyKToNCiAgRW5kc1dpdGgocmVmZXJlbmNlLnJlZmVyZW5jZSwgJy8nICsgZW5jb3VudGVyLmlkKQ0KDQpkZWZpbmUgZnVuY3Rpb24gcmVmZXJlbmNlVG8oZW5jb3VudGVyIEVuY291bnRlcik6DQogIFJlZmVyZW5jZSB7IHJlZmVyZW5jZTogc3RyaW5nIHsgdmFsdWU6ICdFbmNvdW50ZXIvJyArIGVuY291bnRlci5pZCB9IH0NCg0KZGVmaW5lIGZ1bmN0aW9uIHJlZmVyZW5jZVRvKHBhdGllbnQgUGF0aWVudCk6DQogIFJlZmVyZW5jZSB7IHJlZmVyZW5jZTogc3RyaW5nIHsgdmFsdWU6ICdQYXRpZW50LycgKyBwYXRpZW50LmlkIH0gfQ0K"
}
]
}